@consenti/api 0.3.0 → 0.4.0

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 (113) hide show
  1. package/README.md +212 -74
  2. package/dist/chunk-COR72NFQ.js +2 -0
  3. package/dist/chunk-COR72NFQ.js.map +1 -0
  4. package/dist/chunk-S2IEYESR.js +2 -0
  5. package/dist/chunk-S2IEYESR.js.map +1 -0
  6. package/dist/dashboard/assets/ApiConfig-CZMtYRfK.js +1 -0
  7. package/dist/dashboard/assets/{ArchivedProfileList-Bw-fx-BD.js → ArchivedProfileList-BlQ2gEWz.js} +1 -1
  8. package/dist/dashboard/assets/AuditLog-BpZoAFOe.js +1 -0
  9. package/dist/dashboard/assets/{ChangePassword-D2rPkzD1.js → ChangePassword-BZkP2dXQ.js} +1 -1
  10. package/dist/dashboard/assets/{ConfirmDialog-DTtw7VJ-.js → ConfirmDialog-BDlnfTdx.js} +1 -1
  11. package/dist/dashboard/assets/ConsentList-DgJMrhih.js +1 -0
  12. package/dist/dashboard/assets/ConsentTemplateEditor-DA7B5aI_.js +1 -0
  13. package/dist/dashboard/assets/ConsentTemplateList-DMPd2y5s.js +1 -0
  14. package/dist/dashboard/assets/HeadingTagInput-D2S9xDMJ.js +1 -0
  15. package/dist/dashboard/assets/{HowItWorks-AeyjfQGO.js → HowItWorks-CJCrdr3o.js} +1 -1
  16. package/dist/dashboard/assets/PermissionGate-C69dhwV1.js +1 -0
  17. package/dist/dashboard/assets/PreviewPane-D7mDeBT8.js +38 -0
  18. package/dist/dashboard/assets/ProfileEditor-CSFdOweN.js +2 -0
  19. package/dist/dashboard/assets/ProfileList-C4cIDrM6.js +1 -0
  20. package/dist/dashboard/assets/{ProfileVersionHistory-1h8sUgog.js → ProfileVersionHistory-CX5-Oupy.js} +2 -2
  21. package/dist/dashboard/assets/{RecordDetailModal-FaFhzQXi.js → RecordDetailModal-DIpGxfqA.js} +1 -1
  22. package/dist/dashboard/assets/Reports-B1Ww0ovT.js +1 -0
  23. package/dist/dashboard/assets/RoleList-CQ1GjR0W.js +1 -0
  24. package/dist/dashboard/assets/{Select-DjJNwlbY.js → Select-C_JusbT5.js} +1 -1
  25. package/dist/dashboard/assets/Settings-sIMVWQ0V.js +1 -0
  26. package/dist/dashboard/assets/SetupWizard-ChFBxqo3.js +1 -0
  27. package/dist/dashboard/assets/Table-BUxoz0YR.js +1 -0
  28. package/dist/dashboard/assets/TenantList-DCsT7ghb.js +1 -0
  29. package/dist/dashboard/assets/UITemplateEditor-BAaMnuOU.js +2 -0
  30. package/dist/dashboard/assets/UITemplateList-C3UMbnfs.js +1 -0
  31. package/dist/dashboard/assets/UserList-CHGNnS50.js +1 -0
  32. package/dist/dashboard/assets/VendorList-C-sswM1A.js +1 -0
  33. package/dist/dashboard/assets/VisitorList-DNB9Ia72.js +1 -0
  34. package/dist/dashboard/assets/check-D0g4XvmN.js +1 -0
  35. package/dist/dashboard/assets/client-CYntrO2g.js +1 -0
  36. package/dist/dashboard/assets/{copy-C01KoUUH.js → copy-DEi_W2TM.js} +1 -1
  37. package/dist/dashboard/assets/createLucideIcon-DAiYBrnd.js +1 -0
  38. package/dist/dashboard/assets/de-jwngydrC.js +25 -0
  39. package/dist/dashboard/assets/dist-GoiMJCTt.js +1 -0
  40. package/dist/dashboard/assets/es-B6Jp0OPe.js +25 -0
  41. package/dist/dashboard/assets/{external-link-DVe00ZBK.js → external-link-CFZxxe3W.js} +1 -1
  42. package/dist/dashboard/assets/fr-CshYcQPW.js +25 -0
  43. package/dist/dashboard/assets/index-Cr5M1Qy_.css +2 -0
  44. package/dist/dashboard/assets/index-Tr_BcjkN.js +26 -0
  45. package/dist/dashboard/assets/ja-CgjZNBrc.js +25 -0
  46. package/dist/dashboard/assets/{profiles-DmrdGv7t.js → profiles-C_SuoLJD.js} +1 -1
  47. package/dist/dashboard/assets/{roles-C0dJPFl4.js → roles-D7L936FV.js} +1 -1
  48. package/dist/dashboard/assets/rotate-ccw-clock-6y2NDrJ7.js +1 -0
  49. package/dist/dashboard/assets/search-DKwfLBOv.js +1 -0
  50. package/dist/dashboard/assets/templates-CIyMjskA.js +1 -0
  51. package/dist/dashboard/assets/{templates-B2xiivh4.js → templates-DY68xNys.js} +1 -1
  52. package/dist/dashboard/assets/{trash-2-BBnkdgm_.js → trash-2-eX9s6x8V.js} +1 -1
  53. package/dist/dashboard/assets/{trash-Dj1jhzHJ.js → trash-O30ycMcz.js} +1 -1
  54. package/dist/dashboard/assets/{useHashQuery-B5ytMIMp.js → useHashQuery-BDjUPXDR.js} +1 -1
  55. package/dist/dashboard/assets/{users-czK8LRVh.js → users-BRrNOK0W.js} +1 -1
  56. package/dist/dashboard/assets/x-BhZiH8AL.js +1 -0
  57. package/dist/dashboard/assets/zh-CN-BnLZkfBC.js +25 -0
  58. package/dist/dashboard/index.html +4 -4
  59. package/dist/dist-QJYW5KUK.js +2 -0
  60. package/dist/index.cjs +68 -68
  61. package/dist/index.cjs.map +1 -1
  62. package/dist/index.d.cts +214 -52
  63. package/dist/index.d.ts +214 -52
  64. package/dist/index.js +65 -65
  65. package/dist/index.js.map +1 -1
  66. package/dist/profiles-FCX454HS.js +2 -0
  67. package/dist/widget/widget.css +1 -1
  68. package/dist/widget/widget.js +1 -1
  69. package/package.json +24 -9
  70. package/dist/chunk-IY4L6MNB.js +0 -2
  71. package/dist/chunk-IY4L6MNB.js.map +0 -1
  72. package/dist/chunk-O5UG4OYI.js +0 -2
  73. package/dist/chunk-O5UG4OYI.js.map +0 -1
  74. package/dist/dashboard/assets/ApiConfig-CE-Noelz.js +0 -1
  75. package/dist/dashboard/assets/AuditLog-D6HiTQ1o.js +0 -1
  76. package/dist/dashboard/assets/ConsentList-BWOvPOMG.js +0 -1
  77. package/dist/dashboard/assets/ConsentTemplateEditor-BKIEnLmA.js +0 -1
  78. package/dist/dashboard/assets/ConsentTemplateList-DCys2nM3.js +0 -1
  79. package/dist/dashboard/assets/HeadingTagInput-BTjrdzlS.js +0 -1
  80. package/dist/dashboard/assets/PermissionGate-Bhhf7SMh.js +0 -1
  81. package/dist/dashboard/assets/PreviewPane-Dq5K1h2L.js +0 -35
  82. package/dist/dashboard/assets/ProfileEditor-BXtaE0tL.js +0 -2
  83. package/dist/dashboard/assets/ProfileList-CWKSAgu0.js +0 -1
  84. package/dist/dashboard/assets/Reports-DWEjQOKh.js +0 -1
  85. package/dist/dashboard/assets/RoleList-BSGoqlzp.js +0 -1
  86. package/dist/dashboard/assets/Settings-CVYrlyLm.js +0 -1
  87. package/dist/dashboard/assets/SetupWizard-4NTb5bZj.js +0 -1
  88. package/dist/dashboard/assets/Table-DH_jh8_N.js +0 -1
  89. package/dist/dashboard/assets/TenantList-5AwFtoHf.js +0 -1
  90. package/dist/dashboard/assets/UITemplateEditor-9A55scBe.js +0 -1
  91. package/dist/dashboard/assets/UITemplateList-BS7X4u4F.js +0 -1
  92. package/dist/dashboard/assets/UserList-SPkMyFRy.js +0 -1
  93. package/dist/dashboard/assets/VendorList-C5fPhr6U.js +0 -1
  94. package/dist/dashboard/assets/VisitorList-COP1SyNd.js +0 -1
  95. package/dist/dashboard/assets/check-o5cp1s2J.js +0 -1
  96. package/dist/dashboard/assets/client-ymc9nwWr.js +0 -1
  97. package/dist/dashboard/assets/createLucideIcon-MdjI3m3u.js +0 -1
  98. package/dist/dashboard/assets/de-DET92Jb5.js +0 -5
  99. package/dist/dashboard/assets/dist-DlhLroYC.js +0 -1
  100. package/dist/dashboard/assets/es-CJNunrnU.js +0 -5
  101. package/dist/dashboard/assets/fr-akfTuf5x.js +0 -5
  102. package/dist/dashboard/assets/history-CHTts_m2.js +0 -1
  103. package/dist/dashboard/assets/index-DW3qOrry.css +0 -2
  104. package/dist/dashboard/assets/index-H_Zm0X-u.js +0 -6
  105. package/dist/dashboard/assets/ja-B0nLWkOd.js +0 -5
  106. package/dist/dashboard/assets/search-Bd2RdDRh.js +0 -1
  107. package/dist/dashboard/assets/templates-CnMoLavN.js +0 -1
  108. package/dist/dashboard/assets/x-BRuyBEQP.js +0 -1
  109. package/dist/dashboard/assets/zh-CN-Dxg3G-BL.js +0 -5
  110. package/dist/dist-Z5RVTVBT.js +0 -2
  111. package/dist/profiles-XTYPWLVC.js +0 -2
  112. /package/dist/{dist-Z5RVTVBT.js.map → dist-QJYW5KUK.js.map} +0 -0
  113. /package/dist/{profiles-XTYPWLVC.js.map → profiles-FCX454HS.js.map} +0 -0
@@ -0,0 +1,2 @@
1
+ import{a as e,c as t,l as n,p as r,t as i}from"./createLucideIcon-DAiYBrnd.js";import{i as a}from"./client-CYntrO2g.js";import{n as o,t as s}from"./HeadingTagInput-D2S9xDMJ.js";import{t as c}from"./PreviewPane-D7mDeBT8.js";import{t as l}from"./ConfirmDialog-BDlnfTdx.js";import{t as u}from"./x-BhZiH8AL.js";import{l as d,o as f,p,s as m,u as h}from"./index-Tr_BcjkN.js";import{n as g}from"./templates-DY68xNys.js";import{a as _,c as v,d as y,f as b,l as x,r as S,u as C}from"./templates-CIyMjskA.js";var w=i(`eraser`,[[`path`,{d:`M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21`,key:`g5wo59`}],[`path`,{d:`m5.082 11.09 8.828 8.828`,key:`1wx5vj`}]]),T=i(`focus`,[[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}],[`path`,{d:`M3 7V5a2 2 0 0 1 2-2h2`,key:`aa7l1z`}],[`path`,{d:`M17 3h2a2 2 0 0 1 2 2v2`,key:`4qcy5o`}],[`path`,{d:`M21 17v2a2 2 0 0 1-2 2h-2`,key:`6vwrx8`}],[`path`,{d:`M7 21H5a2 2 0 0 1-2-2v-2`,key:`ioqczr`}]]),E=i(`hash`,[[`line`,{x1:`4`,x2:`20`,y1:`9`,y2:`9`,key:`4lhtct`}],[`line`,{x1:`4`,x2:`20`,y1:`15`,y2:`15`,key:`vyu0kd`}],[`line`,{x1:`10`,x2:`8`,y1:`3`,y2:`21`,key:`1ggp8o`}],[`line`,{x1:`16`,x2:`14`,y1:`3`,y2:`21`,key:`weycgp`}]]),D=i(`heading`,[[`path`,{d:`M6 12h12`,key:`8npq4p`}],[`path`,{d:`M6 20V4`,key:`1w1bmo`}],[`path`,{d:`M18 20V4`,key:`o2hl4u`}]]),O=i(`mouse-pointer-click`,[[`path`,{d:`M14 4.1 12 6`,key:`ita8i4`}],[`path`,{d:`m5.1 8-2.9-.8`,key:`1go3kf`}],[`path`,{d:`m6 12-1.9 2`,key:`mnht97`}],[`path`,{d:`M7.2 2.2 8 5.1`,key:`1cfko1`}],[`path`,{d:`M9.037 9.69a.498.498 0 0 1 .653-.653l11 4.5a.5.5 0 0 1-.074.949l-4.349 1.041a1 1 0 0 0-.74.739l-1.04 4.35a.5.5 0 0 1-.95.074z`,key:`s0h3yz`}]]);function k({value:t,onChange:n}){return e(`div`,{class:`flex items-center gap-3`,children:[e(`input`,{type:`range`,min:`0`,max:`100`,class:`flex-1 h-1.5 rounded-full appearance-none bg-gray-200 accent-blue-600 cursor-pointer`,value:t,onInput:e=>n(parseInt(e.target.value))}),e(`span`,{class:`text-sm font-mono text-gray-700 w-10 text-right shrink-0`,children:[t,`%`]})]})}var A=[`primary`,`secondary`,`accent`,`text`],j=[`custom`,`submit`,`manage`,`close`,`link`],M={primary:`Primary`,secondary:`Secondary`,accent:`Accent`,text:`Text`},N={custom:`Custom (grant)`,submit:`Submit (save toggles)`,manage:`Manage (open modal)`,close:`Close (dismiss)`,link:`Link (open URL)`},P={custom:`Grants exactly the selected cookies below. Mandatory cookies are always granted regardless of this selection.`,submit:`Submits whatever consent already exists — the live toggle states in this modal, or mandatory-only in a banner. Ignores cookie selection entirely; two "submit" buttons always produce the same result no matter their labels.`,manage:`Opens the preference modal. Does not change consent by itself.`,close:`Dismisses without saving any consent.`,link:`Opens the URL below in a new tab. Does not change consent.`};function F({btn:t,onChange:n,onRemove:r,extraCookies:i}){let a=(e,r)=>n({...t,[e]:r}),s=!t.id.trim(),c=t.action===`link`&&!t.url?.trim();return e(`div`,{class:`border border-gray-100 rounded p-2.5 bg-gray-50 space-y-2`,children:e(`div`,{class:`grid grid-cols-[1fr_1fr_1fr_2fr_auto] gap-2 items-start`,children:[e(`div`,{children:[e(`label`,{class:`block text-xs text-gray-500 mb-0.5`,children:[`Button ID `,e(`span`,{class:`text-red-500`,children:`*`})]}),e(`input`,{class:`w-full border rounded px-2 py-1 text-xs font-mono ${s?`border-red-300 bg-red-50`:`border-gray-300`}`,value:t.id,onInput:e=>a(`id`,e.target.value),placeholder:`accept-all`}),s?e(`p`,{class:`text-xs text-red-500 mt-0.5`,children:`Required`}):e(`p`,{class:`text-xs text-gray-400 mt-0.5`,children:`Machine id, not display text — text is authored per-locale in the profile.`})]}),e(`div`,{children:[e(`label`,{class:`block text-xs text-gray-500 mb-0.5`,children:`Style`}),e(`select`,{class:`w-full border border-gray-300 rounded px-2 py-1 text-xs`,value:t.type,onChange:e=>a(`type`,e.target.value),children:A.map(t=>e(`option`,{value:t,children:M[t]},t))})]}),e(`div`,{children:[e(`label`,{class:`block text-xs text-gray-500 mb-0.5`,children:`Action`}),e(`select`,{class:`w-full border border-gray-300 rounded px-2 py-1 text-xs`,value:t.action,onChange:e=>{let r=e.target.value;n({...t,action:r,cookies:r===`custom`?t.cookies??`*`:void 0,url:r===`link`?t.url??``:void 0,type:r===`link`&&t.type!==`text`?`text`:t.type})},children:j.map(t=>e(`option`,{value:t,children:N[t]},t))}),e(`p`,{class:`text-xs text-gray-400 mt-0.5`,children:P[t.action]})]}),t.action===`custom`?e(`div`,{children:[e(`label`,{class:`block text-xs text-gray-500 mb-0.5`,children:[`Cookies to grant `,e(`span`,{class:`text-red-500`,children:`*`})]}),e(o,{value:t.cookies,onChange:e=>a(`cookies`,e),showSpecial:!0,extraCookies:i}),!t.cookies&&e(`p`,{class:`text-xs text-red-500 mt-0.5`,children:`Required for custom action`})]}):t.action===`link`?e(`div`,{children:[e(`label`,{class:`block text-xs text-gray-500 mb-0.5`,children:[`URL `,e(`span`,{class:`text-red-500`,children:`*`})]}),e(`input`,{type:`url`,class:`w-full border rounded px-2 py-1 text-xs ${c?`border-red-300 bg-red-50`:`border-gray-300`}`,value:t.url??``,onInput:e=>a(`url`,e.target.value),placeholder:`https://example.com/privacy`}),c&&e(`p`,{class:`text-xs text-red-500 mt-0.5`,children:`Required for link action`})]}):e(`div`,{}),e(`div`,{class:`flex items-end pb-0.5`,children:e(`button`,{type:`button`,onClick:r,class:`text-red-400 hover:text-red-600 text-lg leading-none p-0.5`,title:`Remove button`,children:`✕`})})]})})}function I({buttons:t,onChange:n,cookieOptions:r}){return e(`div`,{class:`space-y-2`,children:[t.map((i,a)=>e(F,{btn:i,onChange:e=>n(t.map((t,n)=>n===a?e:t)),onRemove:()=>n(t.filter((e,t)=>t!==a)),extraCookies:r},a)),e(`button`,{type:`button`,onClick:()=>n([...t,{id:``,type:`primary`,action:`custom`,cookies:`*`}]),class:`text-xs text-blue-600 hover:underline`,children:`+ Add Button`})]})}var L=[`top`,`bottom`,`middle`,`left-bottom`,`right-bottom`];function R({label:t,value:n,onChange:r,cookieOptions:i}){let a=m(),o=(e,t)=>r({...n,[e]:t});return e(`div`,{class:`space-y-5`,children:[t&&e(`p`,{class:`text-xs text-gray-500 italic`,children:t}),e(`div`,{class:`grid grid-cols-2 lg:grid-cols-3 gap-4`,children:[e(`div`,{children:[e(`label`,{class:`block text-xs font-medium text-gray-600 mb-1`,children:[`Position `,e(`span`,{class:`text-red-500`,children:`*`})]}),e(`select`,{class:`w-full border border-gray-300 rounded px-2 py-1.5 text-sm`,value:n.position,onChange:e=>o(`position`,e.target.value),children:L.map(t=>e(`option`,{value:t,children:t},t))})]}),e(s,{value:n.headingTag,onChange:e=>o(`headingTag`,e)}),e(`div`,{children:[e(`label`,{class:`block text-xs font-medium text-gray-600 mb-1`,children:`Overlay opacity`}),e(k,{value:n.overlayOpacity,onChange:e=>o(`overlayOpacity`,e)}),e(`p`,{class:`text-xs text-gray-400 mt-0.5`,children:`0% = transparent (page still interactive) · 100% = darkened`})]}),e(`div`,{children:[e(`label`,{class:`block text-xs font-medium text-gray-600 mb-1`,children:a(`uiTemplates.editor.stackButtonsOnBreakpoint`)}),e(`input`,{type:`number`,min:`0`,max:`2560`,class:`w-full border border-gray-300 rounded px-2 py-1.5 text-sm`,value:n.stackButtonsOnBreakpoint??576,onChange:e=>o(`stackButtonsOnBreakpoint`,parseInt(e.target.value,10)||0)}),e(`p`,{class:`text-xs text-gray-400 mt-0.5`,children:a(`uiTemplates.editor.stackButtonsOnBreakpointHint`)})]}),e(`div`,{class:`flex flex-col justify-center gap-4 pb-1`,children:[e(`label`,{class:`flex items-center gap-2 text-xs font-medium text-gray-600 cursor-pointer`,children:[e(`input`,{type:`checkbox`,class:`w-4 h-4`,checked:n.showClose,onChange:e=>o(`showClose`,e.target.checked)}),`Show `,e(u,{size:10,className:`inline-block mx-0.5`}),` close button`]}),e(`label`,{class:`flex items-center gap-2 text-xs font-medium text-gray-600 cursor-pointer`,children:[e(`input`,{type:`checkbox`,class:`w-4 h-4`,checked:n.showLocaleSwitcher??!1,onChange:e=>o(`showLocaleSwitcher`,e.target.checked)}),`🌐 Show locale switcher`]})]}),e(`div`,{class:`flex items-center pb-1`})]}),e(`div`,{children:[e(`h4`,{class:`text-xs font-semibold text-gray-600 mb-2 uppercase tracking-wide`,children:`Buttons`}),e(I,{buttons:n.buttons,onChange:e=>o(`buttons`,e),cookieOptions:i})]})]})}var z=[`left`,`right`,`center`];function B({value:t,onChange:n,cookieOptions:r}){let i=m(),a=(e,r)=>n({...t,[e]:r});return e(`div`,{class:`space-y-5`,children:[e(`div`,{class:`grid grid-cols-2 lg:grid-cols-3 gap-4`,children:[e(`div`,{children:[e(`label`,{class:`block text-xs font-medium text-gray-600 mb-1`,children:[`Position `,e(`span`,{class:`text-red-500`,children:`*`})]}),e(`select`,{class:`w-full border border-gray-300 rounded px-2 py-1.5 text-sm`,value:t.position,onChange:e=>a(`position`,e.target.value),children:z.map(t=>e(`option`,{value:t,children:t},t))})]}),e(s,{value:t.headingTag,onChange:e=>a(`headingTag`,e)}),e(`div`,{children:[e(`label`,{class:`block text-xs font-medium text-gray-600 mb-1`,children:`Overlay opacity`}),e(k,{value:t.overlayOpacity,onChange:e=>a(`overlayOpacity`,e)}),e(`p`,{class:`text-xs text-gray-400 mt-0.5`,children:`0% = transparent (page still interactive) · 100% = darkened`})]}),[[`showClose`,e(`span`,{class:`flex items-center gap-1`,children:[`Show `,e(u,{size:10}),` close button`]})],[`showLocaleSwitcher`,`🌐 Show locale switcher`],[`showForgetMe`,i(`uiTemplates.editor.showForgetMe`)],[`persistent`,`Persistent (block outside-click dismiss)`],[`hasSubheading`,`Include subheading field`],[`trapFocus`,i(`uiTemplates.editor.trapFocus`)]].map(([n,r])=>e(`label`,{class:`flex items-center gap-2 text-xs font-medium text-gray-600 cursor-pointer`,title:n===`trapFocus`?i(`uiTemplates.editor.trapFocusHint`):n===`showForgetMe`?i(`uiTemplates.editor.showForgetMeHint`):void 0,children:[e(`input`,{type:`checkbox`,class:`w-4 h-4`,checked:t[n],onChange:e=>a(n,e.target.checked)}),r]},n))]}),e(`div`,{children:[e(`h4`,{class:`text-xs font-semibold text-gray-600 mb-2 uppercase tracking-wide`,children:`Buttons`}),e(I,{buttons:t.buttons,onChange:e=>a(`buttons`,e),cookieOptions:r})]})]})}var V=[{key:`headingTag`,Icon:D,label:`uiTemplates.editor.fieldInfo.headingTag.label`,description:`uiTemplates.editor.fieldInfo.headingTag.description`,highlights:`uiTemplates.editor.fieldInfo.headingTag.highlights`},{key:`style`,Icon:d,label:`uiTemplates.editor.fieldInfo.style.label`,description:`uiTemplates.editor.fieldInfo.style.description`,highlights:`uiTemplates.editor.fieldInfo.style.highlights`},{key:`action`,Icon:O,label:`uiTemplates.editor.fieldInfo.action.label`,description:`uiTemplates.editor.fieldInfo.action.description`,highlights:`uiTemplates.editor.fieldInfo.action.highlights`},{key:`cookies`,Icon:p,label:`uiTemplates.editor.fieldInfo.cookies.label`,description:`uiTemplates.editor.fieldInfo.cookies.description`,highlights:`uiTemplates.editor.fieldInfo.cookies.highlights`},{key:`trapFocus`,Icon:T,label:`uiTemplates.editor.fieldInfo.trapFocus.label`,description:`uiTemplates.editor.fieldInfo.trapFocus.description`,highlights:`uiTemplates.editor.fieldInfo.trapFocus.highlights`},{key:`buttonId`,Icon:E,label:`uiTemplates.editor.fieldInfo.buttonId.label`,description:`uiTemplates.editor.fieldInfo.buttonId.description`,highlights:`uiTemplates.editor.fieldInfo.buttonId.highlights`},{key:`localeSwitcher`,Icon:h,label:`uiTemplates.editor.fieldInfo.localeSwitcher.label`,description:`uiTemplates.editor.fieldInfo.localeSwitcher.description`,highlights:`uiTemplates.editor.fieldInfo.localeSwitcher.highlights`},{key:`forgetMe`,Icon:w,label:`uiTemplates.editor.fieldInfo.forgetMe.label`,description:`uiTemplates.editor.fieldInfo.forgetMe.description`,highlights:`uiTemplates.editor.fieldInfo.forgetMe.highlights`}];function H({t:n}){let[r,i]=t(0),a=V[r];return e(`div`,{class:`bg-white border border-gray-200 rounded-lg p-5 xl:sticky xl:top-4`,children:[e(`p`,{class:`text-xs text-gray-400 mb-3 uppercase tracking-wide font-semibold`,children:n(`uiTemplates.editor.fieldInfo.title`)}),e(`div`,{class:`flex flex-wrap gap-1.5 mb-4`,children:V.map((t,a)=>e(`button`,{type:`button`,onClick:()=>i(a),class:`text-xs px-2.5 py-1 rounded-full border transition-colors ${r===a?`bg-blue-600 text-white border-blue-600`:`border-gray-300 text-gray-600 hover:border-blue-400`}`,children:n(t.label)},t.key))}),e(`div`,{class:`space-y-2`,children:[e(`div`,{class:`flex items-center gap-2`,children:[e(a.Icon,{size:18,className:`text-gray-600 shrink-0`}),e(`h4`,{class:`font-semibold text-gray-800 text-sm`,children:n(a.label)})]}),e(`p`,{class:`text-xs text-gray-600 leading-relaxed`,children:n(a.description)}),e(`ul`,{class:`list-disc list-inside space-y-1`,children:n(a.highlights).split(`
2
+ `).map((t,n)=>e(`li`,{class:`text-xs text-gray-600 leading-relaxed`,children:t},n))})]})]})}var U={position:`bottom`,overlayOpacity:.5,showClose:!0,headingTag:`h2`,buttons:[]},W={position:`center`,overlayOpacity:.5,showClose:!0,persistent:!1,headingTag:`h2`,hasSubheading:!1,buttons:[]};function G(e,t,n){return e.buttons.length===0&&t.buttons.length===0&&n.buttons.length===0}function K({id:i,current:o}){let s=m(),u=!i||i===`new`,[d,p]=t(``),[h,w]=t(``),[T,E]=t(`main`),[D,O]=t(u?U:y().mainBanner),[k,A]=t(u?U:y().gpcBanner),[j,M]=t(u?W:y().preferenceModal),[N,P]=t(``),[F,I]=t(!1),[L,z]=t(!u);f(s(L?`uiTemplates.editor.title.edit`:u?`uiTemplates.editor.title.new`:`uiTemplates.editor.title.edit`));let{requestConfirm:V,dialog:K}=l();n(()=>{!u&&i&&g.get(i).then(e=>{p(e.name),O({...e.mainBanner,buttons:b(e.mainBanner.buttons)}),A({...e.gpcBanner,buttons:b(e.gpcBanner.buttons)}),M({...e.preferenceModal,buttons:b(e.preferenceModal.buttons)})}).catch(()=>P(s(`uiTemplates.editor.error.notFound`))).finally(()=>z(!1))},[i,u]);let q=_(x(),v(),{mainBanner:D,gpcBanner:k,preferenceModal:j},`en`,{en:C(v(),{mainBanner:D,gpcBanner:k,preferenceModal:j})},{}),J=async()=>{let e=!0;d.trim()?w(``):(w(s(`uiTemplates.editor.nameRequired`)),e=!1);let t=[...D.buttons,...k.buttons,...j.buttons];if(t.some(e=>!e.id.trim())){P(s(`uiTemplates.editor.error.buttons`));return}for(let e of[D.buttons,k.buttons,j.buttons]){let t=e.map(e=>e.id.trim());if(new Set(t).size!==t.length){P(s(`uiTemplates.editor.error.uniqueButtonIds`));return}}if(t.some(e=>e.action===`custom`&&!e.cookies)){P(s(`uiTemplates.editor.error.customButtons`));return}if(e){if(!u&&i){let e=await g.profileUsage(i).catch(()=>[]);if(e.length>0){let t=e.map(e=>`"${e.name}"`).join(`, `);if(!await V({title:s(e.length===1?`uiTemplates.editor.confirmUpdate.titleSingular`:`uiTemplates.editor.confirmUpdate.title`,{n:e.length}),message:s(`uiTemplates.editor.confirmUpdate.message`,{names:t})}))return}}P(``),I(!0);try{let e={name:d,mainBanner:{...D,buttons:S(D.buttons)},gpcBanner:{...k,buttons:S(k.buttons)},preferenceModal:{...j,buttons:S(j.buttons)}};u?await g.create(e):await g.update(i,e),window.location.hash=`#/banners/ui-templates`}catch(e){P(a(e,s(`uiTemplates.editor.error.failed`)))}finally{I(!1)}}},Y=[{key:`main`,label:s(`uiTemplates.editor.tabMain`)},{key:`gpc`,label:s(`uiTemplates.editor.tabGpc`)},{key:`modal`,label:s(`uiTemplates.editor.tabModal`)}],X=Y.findIndex(e=>e.key===T),Z=X===0,Q=X===Y.length-1;return L?e(`p`,{class:`text-sm text-gray-400`,role:`status`,"aria-live":`polite`,children:s(`uiTemplates.editor.loading`)}):e(r,{children:[K,e(`div`,{class:`space-y-5`,children:[e(`div`,{class:`bg-white border border-gray-200 rounded-lg p-5`,children:[e(`label`,{for:`ui-template-name`,class:`block text-sm font-medium text-gray-700 mb-1`,children:[s(`uiTemplates.editor.name`),` `,e(`span`,{class:`text-red-500`,"aria-hidden":`true`,children:`*`})]}),e(`input`,{id:`ui-template-name`,class:`w-full border rounded px-3 py-2 text-sm ${h?`border-red-400 bg-red-50`:`border-gray-300`}`,value:d,onInput:e=>{p(e.target.value),w(``)},placeholder:s(`uiTemplates.editor.namePlaceholder`),required:!0,"aria-required":`true`}),h&&e(`p`,{role:`alert`,class:`text-xs text-red-500 mt-1`,children:h})]}),u&&G(D,k,j)&&e(`div`,{class:`bg-amber-50 border border-amber-200 rounded-lg p-4 flex items-center justify-between gap-4`,children:[e(`p`,{class:`text-sm text-amber-800`,children:s(`uiTemplates.editor.loadDefaultsPrompt`)}),e(`button`,{type:`button`,onClick:()=>{let e=y();O(e.mainBanner),A(e.gpcBanner),M(e.preferenceModal)},class:`shrink-0 bg-amber-700 text-white text-xs px-3 py-1.5 rounded hover:bg-amber-800 transition-colors`,children:s(`uiTemplates.editor.loadDefaultsBtn`)})]}),e(`div`,{class:`grid grid-cols-1 xl:grid-cols-[2fr_1fr] gap-5 items-start`,children:[e(`div`,{class:`bg-white border border-gray-200 rounded-lg overflow-hidden`,children:[e(`div`,{class:`flex items-center border-b border-gray-200 px-5 py-3 gap-2`,children:[Y.map((t,n)=>e(`div`,{class:`flex items-center gap-2`,children:[e(`span`,{class:`flex items-center justify-center w-6 h-6 rounded-full text-xs font-bold ${n===X?`bg-blue-600 text-white`:n<X?`bg-blue-100 text-blue-600`:`bg-gray-100 text-gray-400`}`,children:n+1}),e(`span`,{class:`text-sm font-medium ${n===X?`text-blue-600`:n<X?`text-blue-400`:`text-gray-400`}`,children:t.label}),n<Y.length-1&&e(`span`,{class:`mx-1 text-gray-300 text-xs select-none`,children:`›`})]},t.key)),e(`span`,{class:`ml-auto text-xs text-gray-400`,children:s(`uiTemplates.editor.wizard.stepOf`,{step:X+1,total:Y.length})})]}),e(`div`,{class:`p-5`,children:[T===`main`&&e(R,{label:s(`uiTemplates.editor.mainBannerHint`),value:D,onChange:O}),T===`gpc`&&e(R,{label:s(`uiTemplates.editor.gpcBannerHint`),value:k,onChange:A}),T===`modal`&&e(B,{value:j,onChange:M})]}),N&&e(`div`,{class:`px-5 pb-4`,children:e(`p`,{role:`alert`,class:`text-sm text-red-600 bg-red-50 border border-red-200 rounded px-3 py-2`,children:N})}),e(`div`,{class:`flex items-center justify-between border-t border-gray-100 px-5 py-4`,children:[e(`div`,{class:`flex gap-2`,children:[!Z&&e(`button`,{type:`button`,onClick:()=>{Z||E(Y[X-1].key)},class:`px-4 py-2 rounded-lg text-sm text-gray-600 border border-gray-300 hover:bg-gray-50 transition-colors`,children:s(`uiTemplates.editor.wizard.back`)}),e(`a`,{href:`#/banners/ui-templates`,class:`px-4 py-2 rounded-lg text-sm text-gray-500 hover:bg-gray-100 transition-colors`,children:s(`common.cancel`)})]}),e(`div`,{children:Q?e(`button`,{type:`button`,onClick:J,disabled:F,class:`bg-blue-600 text-white px-5 py-2 rounded-lg text-sm font-medium hover:bg-blue-700 disabled:opacity-50 transition-colors`,children:s(F?`common.saving`:u?`uiTemplates.editor.action.create`:`uiTemplates.editor.action.save`)}):e(`button`,{type:`button`,onClick:()=>{Q||E(Y[X+1].key)},class:`bg-blue-600 text-white px-5 py-2 rounded-lg text-sm font-medium hover:bg-blue-700 transition-colors`,children:s(`uiTemplates.editor.wizard.next`)})})]})]}),e(H,{t:s})]}),e(c,{draft:q,expandable:!0,previewMode:T})]})]})}export{K as UITemplateEditor};
@@ -0,0 +1 @@
1
+ import{a as e,c as t,l as n,n as r,p as i}from"./createLucideIcon-DAiYBrnd.js";import{t as a}from"./client-CYntrO2g.js";import{t as o}from"./copy-DEi_W2TM.js";import{n as s,t as c}from"./trash-O30ycMcz.js";import{t as l}from"./ConfirmDialog-BDlnfTdx.js";import{o as u,s as d}from"./index-Tr_BcjkN.js";import{t as f}from"./Table-BUxoz0YR.js";import{n as p}from"./templates-DY68xNys.js";function m({current:m}){let h=d();u(h(`uiTemplates.title`));let[g,_]=t([]),[v,y]=t(!0),[b,x]=t(null),[S,C]=t(null),{requestConfirm:w,dialog:T}=l(),E=()=>{y(!0),p.list().then(_).catch(()=>_([])).finally(()=>y(!1))};n(()=>{E()},[]);let D=async(e,t)=>{if(await w({title:h(`uiTemplates.dialog.delete.title`,{name:t}),message:h(`uiTemplates.dialog.delete.message`)}))try{await p.delete(e),E()}catch(e){if(e instanceof a&&e.status===422)try{let t=JSON.parse(e.message);if(t.details?.profiles?.length){x(t.details.profiles);return}}catch{}}},O=async(e,t)=>{try{let n=await p.profileUsage(e);if(n.length>0){C({id:e,name:t,profiles:n.map(e=>({id:e.id,name:e.name,isActive:e.isActive??!1}))});return}}catch{}window.location.hash=`#/banners/ui-templates/${e}`},k=async(e,t)=>{await p.copy(e,`${t} (Copy)`).catch(()=>null),E()},A=g.length,j=h(A===1?`uiTemplates.countSingular`:`uiTemplates.count`,{n:A});return e(i,{children:[T,b&&r(e(`div`,{class:`fixed inset-0 z-50 flex items-center justify-center`,children:[e(`div`,{class:`absolute inset-0 bg-black/40`,onClick:()=>x(null),"aria-hidden":`true`}),e(`div`,{class:`relative bg-white rounded-xl shadow-2xl p-6 w-full max-w-md mx-4 space-y-4`,children:[e(`h3`,{class:`text-sm font-semibold text-gray-900`,children:`Cannot delete template`}),e(`p`,{class:`text-sm text-gray-600`,children:`This UI template is used by the following profiles. Delete or reassign those profiles first:`}),e(`ul`,{class:`space-y-1 max-h-48 overflow-y-auto`,children:b.map(t=>e(`li`,{class:`flex items-center gap-2 text-sm`,children:[e(`span`,{class:`text-xs px-1.5 py-0.5 rounded-full font-medium ${t.isActive?`bg-green-100 text-green-700`:`bg-gray-100 text-gray-500`}`,children:t.isActive?`Active`:`Inactive`}),e(`a`,{href:`#/banners/profiles/${t.id}`,class:`text-blue-600 hover:underline`,onClick:()=>x(null),children:t.name})]},t.id))}),e(`button`,{type:`button`,onClick:()=>x(null),class:`w-full border border-gray-300 text-gray-700 px-4 py-2 rounded-lg text-sm hover:bg-gray-50 transition-colors`,children:h(`common.close`)})]})]}),document.body),S&&r(e(`div`,{class:`fixed inset-0 z-50 flex items-center justify-center`,children:[e(`div`,{class:`absolute inset-0 bg-black/40`,onClick:()=>C(null),"aria-hidden":`true`}),e(`div`,{class:`relative bg-white rounded-xl shadow-2xl p-6 w-full max-w-md mx-4 space-y-4`,children:[e(`h3`,{class:`text-sm font-semibold text-gray-900`,children:`Template used in profiles`}),e(`p`,{class:`text-sm text-gray-600`,children:`This template is used in the following profiles. After editing, open and save each profile for changes to take effect in their JSON files:`}),e(`ul`,{class:`space-y-1 max-h-48 overflow-y-auto`,children:S.profiles.map(t=>e(`li`,{class:`flex items-center gap-2 text-sm`,children:[e(`span`,{class:`text-xs px-1.5 py-0.5 rounded-full font-medium ${t.isActive?`bg-green-100 text-green-700`:`bg-gray-100 text-gray-500`}`,children:t.isActive?`Active`:`Inactive`}),e(`span`,{class:`text-gray-700`,children:t.name})]},t.id))}),e(`div`,{class:`flex flex-col gap-2`,children:[e(`button`,{type:`button`,onClick:()=>{let e=S.id;C(null),window.location.hash=`#/banners/ui-templates/${e}`},class:`w-full bg-blue-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:bg-blue-700 transition-colors`,children:`Continue to edit`}),e(`button`,{type:`button`,onClick:()=>C(null),class:`w-full border border-gray-300 text-gray-700 px-4 py-2 rounded-lg text-sm hover:bg-gray-50 transition-colors`,children:h(`common.cancel`)})]})]})]}),document.body),e(`div`,{class:`flex justify-between items-center mb-4`,children:[e(`p`,{class:`text-sm text-gray-500`,children:j}),e(`a`,{href:`#/banners/ui-templates/new`,class:`bg-blue-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:bg-blue-700 transition-colors`,children:h(`uiTemplates.new`)})]}),e(f,{loading:v,keyFn:e=>e.id,rows:g,emptyText:h(`uiTemplates.empty.title`),search:{placeholder:h(`uiTemplates.search.placeholder`),keys:e=>[e.name]},columns:[{key:`name`,label:h(`uiTemplates.col.name`),render:t=>e(`span`,{class:`font-medium text-sm text-gray-900`,children:t.name})},{key:`positions`,label:h(`uiTemplates.col.positions`),render:t=>{let n=t;return e(`div`,{class:`flex flex-wrap gap-3 text-xs text-gray-500`,children:[e(`span`,{children:[h(`uiTemplates.mainBanner`),` `,e(`span`,{class:`text-gray-700`,children:n.mainBanner.position})]}),e(`span`,{children:[h(`uiTemplates.gpcBanner`),` `,e(`span`,{class:`text-gray-700`,children:n.gpcBanner.position})]}),e(`span`,{children:[h(`uiTemplates.modal`),` `,e(`span`,{class:`text-gray-700`,children:n.preferenceModal.position})]})]})}},{key:`buttons`,label:h(`uiTemplates.col.buttons`),render:t=>e(`div`,{class:`flex flex-wrap gap-1`,children:Object.entries(t.mainBanner.buttons).map(([t,n])=>e(`span`,{class:`text-xs px-2 py-0.5 bg-gray-100 text-gray-600 rounded-full`,children:[n.type,`: `,t]},t))})},{key:`updatedAt`,label:h(`common.updated`),render:t=>e(`span`,{class:`text-xs text-gray-500`,children:new Date(t.updatedAt).toLocaleDateString()})},{key:`actions`,label:``,render:t=>{let n=t;return e(`div`,{class:`flex items-center gap-3 justify-end`,children:[e(`button`,{onClick:()=>k(n.id,n.name),class:`text-gray-400 hover:text-blue-600 transition-colors`,title:h(`common.duplicate`),"aria-label":h(`common.duplicate`),children:e(o,{size:14,"aria-hidden":`true`})}),e(`button`,{onClick:()=>O(n.id,n.name),class:`text-blue-600 hover:text-blue-800 transition-colors`,title:h(`common.edit`),"aria-label":h(`common.edit`),children:e(s,{size:14,"aria-hidden":`true`})}),e(`button`,{onClick:()=>D(n.id,n.name),class:`text-red-400 hover:text-red-600 transition-colors`,title:h(`common.delete`),"aria-label":h(`common.delete`),children:e(c,{size:14,"aria-hidden":`true`})})]})}}]})]})}export{m as UITemplateList};
@@ -0,0 +1 @@
1
+ import{a as e,c as t,l as n,p as r}from"./createLucideIcon-DAiYBrnd.js";import{a as i,i as a}from"./client-CYntrO2g.js";import{t as o}from"./ConfirmDialog-BDlnfTdx.js";import{d as s,f as c,o as l,s as u,y as d}from"./index-Tr_BcjkN.js";import{t as f}from"./Table-BUxoz0YR.js";import{n as p}from"./RecordDetailModal-DIpGxfqA.js";import{t as m}from"./users-BRrNOK0W.js";import{t as h}from"./PermissionGate-C69dhwV1.js";import{t as g}from"./roles-D7L936FV.js";var ee=`role_super_admin`;function _({current:_}){let{user:v}=d(),y=u();l(y(`users.title`));let[b,x]=t([]),[S,C]=t([]),[w,T]=t([]),[E,D]=t(!0),[O,k]=t(!1),[A,j]=t({name:``,email:``,password:``,confirmPassword:``,roleId:``,allowedTenants:[]}),[M,N]=t(!1),[P,F]=t(!1),[I,L]=t(``),[R,z]=t(null),[B,V]=t([]),[H,U]=t(``),[W,G]=t(``),[K,q]=t(``),[J,Y]=t(!1),[X,Z]=t(null),Q=window.__CONSENTI_CONFIG__?.authMode===`local`,te=v?.roles.includes(`super_admin`)??!1,{requestConfirm:ne,dialog:re}=o(),$=()=>{D(!0),Promise.all([m.list(),g.list(),i(`/tenants`).catch(()=>[])]).then(([e,t,n])=>{x(e),C(t),T(n)}).catch(()=>{}).finally(()=>D(!1))};n($,[]);let ie=e=>{j(t=>({...t,allowedTenants:t.allowedTenants.includes(e)?t.allowedTenants.filter(t=>t!==e):[...t.allowedTenants,e]}))},ae=async e=>{if(e.preventDefault(),A.password!==A.confirmPassword){L(y(`users.createForm.passwordMismatch`));return}L(``);try{await m.create({name:A.name,email:A.email,password:A.password,roleId:A.roleId||void 0,...A.allowedTenants.length>0?{allowedTenants:A.allowedTenants}:{}}),k(!1),j({name:``,email:``,password:``,confirmPassword:``,roleId:``,allowedTenants:[]}),N(!1),F(!1),$()}catch(e){L(a(e,y(`users.createForm.error`)))}},oe=async(e,t)=>{await ne({title:y(`users.dialog.delete.title`,{name:t}),message:y(`users.dialog.delete.message`)})&&(await m.delete(e).catch(()=>{}),$())},se=async e=>{await m.update(e.id,{isActive:!e.isActive}).catch(()=>{}),$()},ce=e=>{z(e),V(e.allowedTenants??[]),U(``),G(``),q(``),Y(!1)},le=async()=>{if(R){if(W&&W!==K){U(y(`users.createForm.passwordMismatch`));return}if(W&&W.length<12){U(y(`users.edit.passwordTooShort`));return}try{await m.update(R.id,{allowedTenants:B,...W?{password:W}:{}}),z(null),$()}catch(e){U(a(e,y(`users.edit.error.save`)))}}},ue=e=>{V(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])};return e(r,{children:[re,e(p,{open:!!X,title:y(`users.detail.title`),onClose:()=>Z(null),fields:X?[{label:y(`common.name`),value:X.name},{label:y(`common.email`),value:X.email},{label:y(`users.col.status`),value:X.isActive?y(`users.status.active`):y(`users.status.inactive`)},{label:y(`common.created`),value:new Date(X.createdAt).toLocaleString()},{label:y(`users.allowedSites`),value:X.allowedTenants?.length?X.allowedTenants.join(`, `):y(`users.detail.allSites`)}]:[]}),e(`div`,{class:`flex justify-between items-center mb-4`,children:[e(`p`,{class:`text-sm text-gray-500`,children:y(`users.count`,{n:b.length})}),e(h,{perm:`user:create`,children:e(`button`,{onClick:()=>k(!O),class:`bg-blue-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:bg-blue-700 transition-colors`,children:y(O?`common.cancel`:`users.newUser`)})})]}),R&&e(`div`,{class:`fixed inset-0 z-50 flex items-center justify-center`,children:[e(`div`,{class:`absolute inset-0 bg-black/40`,onClick:()=>z(null),"aria-hidden":`true`}),e(`div`,{class:`relative bg-white rounded-xl shadow-2xl p-6 w-full max-w-sm mx-4 space-y-4`,children:[e(`h3`,{class:`text-sm font-semibold text-gray-900`,children:y(`users.edit.title`,{name:R.name})}),w.length>0&&e(`div`,{children:[e(`p`,{class:`text-xs font-medium text-gray-700 mb-1.5`,children:[y(`users.allowedSites`),e(`span`,{class:`ml-1.5 font-normal text-gray-400`,children:y(`users.allowedSitesHint`)})]}),e(`div`,{class:`flex flex-wrap gap-2`,children:w.map(t=>e(`label`,{class:`flex items-center gap-1.5 px-2.5 py-1.5 border rounded text-xs cursor-pointer select-none transition-colors ${B.includes(t.id)?`border-blue-400 bg-blue-50 text-blue-700`:`border-gray-200 text-gray-600 hover:border-gray-300`}`,children:[e(`input`,{type:`checkbox`,class:`accent-blue-600`,checked:B.includes(t.id),onChange:()=>ue(t.id)}),t.name||t.slug]},t.id))})]}),Q&&te&&e(`div`,{children:[e(`p`,{class:`text-xs font-medium text-gray-700 mb-1.5`,children:[y(`users.edit.resetPassword`),e(`span`,{class:`ml-1.5 font-normal text-gray-400`,children:y(`users.edit.resetPasswordHint`)})]}),e(`div`,{class:`space-y-2`,children:[e(`div`,{class:`relative`,children:[e(`input`,{class:`w-full border border-gray-300 rounded px-3 py-2 pr-9 text-sm`,placeholder:y(`users.createForm.passwordPlaceholder`),"aria-label":y(`users.edit.newPassword`),type:J?`text`:`password`,value:W,onInput:e=>G(e.target.value)}),e(`button`,{type:`button`,class:`absolute right-2.5 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600`,onClick:()=>Y(e=>!e),"aria-label":y(J?`common.hidePassword`:`common.showPassword`),title:y(J?`common.hidePassword`:`common.showPassword`),children:e(J?c:s,{size:15,"aria-hidden":`true`})})]}),e(`input`,{class:`w-full border border-gray-300 rounded px-3 py-2 text-sm`,placeholder:y(`users.createForm.confirmPasswordPlaceholder`),"aria-label":y(`users.edit.confirmNewPassword`),type:J?`text`:`password`,value:K,onInput:e=>q(e.target.value)})]})]}),H&&e(`p`,{class:`text-xs text-red-600`,children:H}),e(`div`,{class:`flex justify-end gap-2 pt-1`,children:[e(`button`,{type:`button`,onClick:()=>z(null),class:`px-4 py-2 text-sm text-gray-600 hover:bg-gray-100 rounded-lg transition-colors`,children:`Cancel`}),e(`button`,{type:`button`,onClick:le,class:`px-4 py-2 text-sm font-medium bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors`,children:`Save`})]})]})]}),O&&e(`form`,{onSubmit:ae,class:`bg-white border border-gray-200 rounded-lg p-5 mb-4 space-y-3`,children:[e(`h3`,{class:`text-sm font-semibold text-gray-700`,children:y(`users.createForm.title`)}),e(`div`,{class:`grid grid-cols-2 gap-3`,children:[e(`input`,{class:`border border-gray-300 rounded px-3 py-2 text-sm`,placeholder:y(`users.createForm.namePlaceholder`),"aria-label":y(`common.name`),required:!0,value:A.name,onInput:e=>j(t=>({...t,name:e.target.value}))}),e(`input`,{class:`border border-gray-300 rounded px-3 py-2 text-sm`,placeholder:y(`users.createForm.emailPlaceholder`),"aria-label":y(`common.email`),type:`email`,required:!0,value:A.email,onInput:e=>j(t=>({...t,email:e.target.value}))}),e(`div`,{class:`relative`,children:[e(`input`,{class:`w-full border border-gray-300 rounded px-3 py-2 pr-9 text-sm`,placeholder:y(`users.createForm.passwordPlaceholder`),"aria-label":y(`users.createForm.passwordPlaceholder`),type:M?`text`:`password`,required:!0,value:A.password,onInput:e=>j(t=>({...t,password:e.target.value}))}),e(`button`,{type:`button`,class:`absolute right-2.5 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600`,onClick:()=>N(e=>!e),"aria-label":y(M?`common.hidePassword`:`common.showPassword`),title:y(M?`common.hidePassword`:`common.showPassword`),children:e(M?c:s,{size:15,"aria-hidden":`true`})})]}),e(`div`,{class:`relative`,children:[e(`input`,{class:`w-full border rounded px-3 py-2 pr-9 text-sm ${A.confirmPassword&&A.password!==A.confirmPassword?`border-red-300 bg-red-50`:`border-gray-300`}`,placeholder:y(`users.createForm.confirmPasswordPlaceholder`),"aria-label":y(`users.createForm.confirmPasswordPlaceholder`),type:P?`text`:`password`,required:!0,value:A.confirmPassword,onInput:e=>j(t=>({...t,confirmPassword:e.target.value}))}),e(`button`,{type:`button`,class:`absolute right-2.5 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600`,onClick:()=>F(e=>!e),"aria-label":y(P?`common.hidePassword`:`common.showPassword`),title:y(P?`common.hidePassword`:`common.showPassword`),children:e(P?c:s,{size:15,"aria-hidden":`true`})})]}),e(`select`,{class:`border border-gray-300 rounded px-3 py-2 text-sm col-span-2`,value:A.roleId,"aria-label":y(`common.roles`),onChange:e=>j(t=>({...t,roleId:e.target.value})),children:[e(`option`,{value:``,children:y(`users.createForm.selectRole`)}),S.map(t=>e(`option`,{value:t.id,children:t.name},t.id))]})]}),w.length>0&&e(`div`,{children:[e(`p`,{class:`text-xs font-medium text-gray-700 mb-1.5`,children:[y(`users.allowedSites`),e(`span`,{class:`ml-1.5 font-normal text-gray-400`,children:y(`users.allowedSitesHint`)})]}),e(`div`,{class:`flex flex-wrap gap-2`,children:w.map(t=>e(`label`,{class:`flex items-center gap-1.5 px-2.5 py-1.5 border rounded text-xs cursor-pointer select-none transition-colors ${A.allowedTenants.includes(t.id)?`border-blue-400 bg-blue-50 text-blue-700`:`border-gray-200 text-gray-600 hover:border-gray-300`}`,children:[e(`input`,{type:`checkbox`,class:`accent-blue-600`,checked:A.allowedTenants.includes(t.id),onChange:()=>ie(t.id)}),t.name||t.slug]},t.id))})]}),A.confirmPassword&&A.password!==A.confirmPassword&&e(`p`,{role:`alert`,class:`text-xs text-red-600`,children:y(`users.createForm.passwordMismatch`)}),I&&e(`p`,{role:`alert`,class:`text-sm text-red-600`,children:I}),e(`button`,{type:`submit`,class:`bg-blue-600 text-white px-4 py-2 rounded text-sm`,children:y(`common.create`)})]}),e(f,{loading:E,keyFn:e=>e.id,rows:b,search:{placeholder:y(`common.search`),keys:e=>[e.name,e.email]},columns:[{key:`name`,label:y(`common.name`),render:t=>{let n=t;return e(`button`,{onClick:()=>Z(n),class:`text-blue-600 dark:text-blue-400 hover:underline`,children:n.name})}},{key:`email`,label:y(`common.email`)},{key:`isActive`,label:y(`users.col.status`),render:t=>{let n=t;return e(`span`,{class:`text-xs font-medium px-2 py-0.5 rounded-full ${n.isActive?`bg-green-100 text-green-700`:`bg-gray-100 text-gray-500`}`,children:n.isActive?y(`users.status.active`):y(`users.status.inactive`)})}},{key:`createdAt`,label:y(`common.created`),render:e=>new Date(e.createdAt).toLocaleDateString()},{key:`actions`,label:``,render:t=>{let n=t;return n.id===v?.sub?e(`span`,{class:`text-xs text-gray-400`,children:y(`common.you`)}):n.roles?.some(e=>e.id===ee)?e(`span`,{class:`text-xs text-gray-400`,title:y(`users.superAdminLocked`),children:y(`common.locked`)}):e(`div`,{class:`flex gap-2`,children:[e(h,{perm:`user:update`,children:[e(`button`,{onClick:()=>ce(n),class:`text-xs text-gray-600 hover:underline`,children:y(`common.edit`)}),e(`button`,{onClick:()=>se(n),class:`text-xs text-blue-600 hover:underline`,children:n.isActive?y(`users.action.deactivate`):y(`users.action.activate`)})]}),e(h,{perm:`user:delete`,children:e(`button`,{onClick:()=>oe(n.id,n.name),class:`text-xs text-red-500 hover:underline`,children:y(`common.delete`)})})]})}}]})]})}export{_ as UserList};
@@ -0,0 +1 @@
1
+ import{a as e,c as t,l as n,p as r}from"./createLucideIcon-DAiYBrnd.js";import{a as i,i as a}from"./client-CYntrO2g.js";import{o,s}from"./index-Tr_BcjkN.js";import{t as c}from"./debounce-DlvAAT2V.js";import{t as l}from"./PermissionGate-C69dhwV1.js";function u(){let r=s(),[o,c]=t(null),[l,u]=t(!0),[d,f]=t(!1),[p,m]=t(!1),[h,g]=t(``),[_,v]=t(``),y=(e=!1)=>{u(!0),g(``),i(`/tcf/registration-status${e?`?refresh=true`:``}`).then(c).catch(e=>g(a(e,r(`tcfRegistration.loadError`)))).finally(()=>u(!1))};if(n(()=>{y()},[]),l)return null;if(h)return e(`p`,{role:`alert`,class:`text-sm text-red-600 mb-5`,children:h});if(!o?.enabled||o.confirmed)return null;let b=async()=>{m(!0),v(``);try{await i(`/tcf/confirm-registration`,{method:`POST`,body:JSON.stringify({acknowledge:!0})}),f(!1),y()}catch(e){v(a(e,r(`tcfRegistration.confirmError`)))}finally{m(!1)}};return e(`div`,{role:`alert`,class:`mb-5 p-4 bg-red-50 border border-red-200 rounded-lg text-sm text-red-900 space-y-3`,children:[e(`p`,{class:`font-semibold`,children:r(`tcfRegistration.title`)}),e(`p`,{children:r(`tcfRegistration.body`,{cmpId:o.cmpId??0,cmpVersion:o.cmpVersion??0})}),o.cmpListEntry?.deregistered&&e(`p`,{class:`font-medium`,children:r(`tcfRegistration.deregistered`,{date:o.cmpListEntry.deletedDate??``})}),o.cmpListEntry&&!o.cmpListEntry.found&&!o.cmpListEntry.deregistered&&e(`p`,{children:r(`tcfRegistration.notFound`)}),_&&e(`p`,{class:`font-medium`,children:_}),e(`label`,{class:`flex items-start gap-2 text-red-900`,children:[e(`input`,{type:`checkbox`,checked:d,onChange:e=>f(e.target.checked),class:`mt-0.5 w-4 h-4 rounded border-red-300`}),e(`span`,{children:r(`tcfRegistration.checkbox`,{cmpId:o.cmpId??0,cmpVersion:o.cmpVersion??0})})]}),e(`div`,{class:`flex items-center gap-3`,children:[e(`button`,{type:`button`,disabled:!d||p,onClick:()=>void b(),class:`bg-red-600 text-white rounded-lg px-4 py-2 text-xs font-medium hover:bg-red-700 disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,children:r(p?`common.saving`:`tcfRegistration.confirmButton`)}),e(`button`,{type:`button`,disabled:p,onClick:()=>{v(``),y(!0)},class:`text-xs text-red-700 hover:text-red-900 underline disabled:opacity-40`,children:r(`tcfRegistration.refreshStatus`)})]})]})}function d(){let r=s(),[o,c]=t(null),[l,u]=t(!0),[d,f]=t(!1),[p,m]=t(!1),[h,g]=t(``),[_,v]=t(``),y=()=>{u(!0),g(``),i(`/gpp/registration-status`).then(c).catch(e=>g(a(e,r(`gppRegistration.loadError`)))).finally(()=>u(!1))};if(n(()=>{y()},[]),l)return null;if(h)return e(`p`,{role:`alert`,class:`text-sm text-red-600 mb-5`,children:h});if(!o?.enabled||o.confirmed)return null;let b=async()=>{m(!0),v(``);try{await i(`/gpp/confirm-registration`,{method:`POST`,body:JSON.stringify({acknowledge:!0})}),f(!1),y()}catch(e){v(a(e,r(`gppRegistration.confirmError`)))}finally{m(!1)}};return e(`div`,{role:`alert`,class:`mb-5 p-4 bg-red-50 border border-red-200 rounded-lg text-sm text-red-900 space-y-3`,children:[e(`p`,{class:`font-semibold`,children:r(`gppRegistration.title`)}),e(`p`,{children:r(`gppRegistration.body`,{cmpId:o.cmpId??0,cmpVersion:o.cmpVersion??0})}),_&&e(`p`,{class:`font-medium`,children:_}),e(`label`,{class:`flex items-start gap-2 text-red-900`,children:[e(`input`,{type:`checkbox`,checked:d,onChange:e=>f(e.target.checked),class:`mt-0.5 w-4 h-4 rounded border-red-300`}),e(`span`,{children:r(`gppRegistration.checkbox`,{cmpId:o.cmpId??0,cmpVersion:o.cmpVersion??0})})]}),e(`button`,{type:`button`,disabled:!d||p,onClick:()=>void b(),class:`bg-red-600 text-white rounded-lg px-4 py-2 text-xs font-medium hover:bg-red-700 disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,children:r(p?`common.saving`:`gppRegistration.confirmButton`)})]})}function f(){let e=window.location.hash.match(/[?&]page=(\d+)/);return e?Math.max(1,parseInt(e[1],10)):1}function p(e){if(!Number.isFinite(e)||e<1)return;let t=(window.location.hash.split(`?`)[0]??`/vendors`).replace(/^#/,``);window.location.hash=e===1?t:`${t}?page=${e}`}function m({current:a}){let m=s();o(m(`vendors.title`));let[h,g]=t([]),[_,v]=t(0),[y,b]=t(0),[x,S]=t(f),[C,w]=t(1),[T,E]=t(``),[D,O]=t(!0),[k,A]=t(``),j=(e,t)=>{O(!0),A(``);let n=new URLSearchParams;e&&n.set(`q`,e),n.set(`page`,String(t)),n.set(`limit`,`25`),i(`/tcf/vendors?${n.toString()}`).then(e=>{g(e.vendors),v(e.total),b(e.vendorListVersion),w(e.totalPages),S(Number.isFinite(e.page)&&e.page>=1?e.page:1)}).catch(e=>{A(e instanceof Error?e.message:`GVL not available. Enable tcf.enabled in server config.`)}).finally(()=>O(!1))};n(()=>{j(T,x)},[]);let M=c(e=>{E(e),S(1),p(1),j(e,1)},500),N=e=>{S(e),p(e),j(T,e)};return e(r,{children:[e(l,{perm:`settings:update`,children:[e(u,{}),e(d,{})]}),e(`div`,{class:`mb-5 p-4 bg-blue-50 border border-blue-200 rounded-lg text-sm text-blue-900 space-y-2`,children:[e(`p`,{class:`font-semibold`,children:m(`vendors.info.title`)}),e(`p`,{children:[`The `,e(`strong`,{children:`IAB Transparency & Consent Framework (TCF)`}),` is an industry standard used by ad-tech platforms across Europe. The `,e(`strong`,{children:`Global Vendor List (GVL)`}),` is a public registry — maintained by the IAB — of every registered ad-tech vendor (Google, Meta, etc.) and the "purposes" they require consent for (e.g. Purpose 1 = store/access info, Purpose 3 = create personalised ads).`]}),e(`p`,{children:[`When TCF is enabled on a profile, Consenti generates a `,e(`strong`,{children:`TC String`}),` alongside the normal consent record. Ad platforms read this string from the cookie to know which vendors and purposes the visitor accepted. Without a valid TC String, compliant ad platforms will not fire their tags.`]}),e(`p`,{children:[`This list is `,e(`strong`,{children:`read-only reference data`}),` — it is fetched automatically from the IAB and refreshed every 7 days. You do not need to sync or edit it manually. Use it to look up a vendor's numeric ID and the purpose IDs they need, then attach those IDs to the relevant cookie in your profile config.`]}),e(`p`,{class:`text-xs text-blue-700`,children:`TCF is only relevant if your site runs IAB-registered ad-tech vendors and you need to pass a TC String to their tags. If you only need GDPR / CCPA consent for your own first-party cookies, you can ignore this page.`})]}),e(`div`,{class:`mb-4 flex items-center gap-3`,children:[e(`input`,{type:`text`,placeholder:m(`vendors.searchPlaceholder`),"aria-label":m(`vendors.searchPlaceholder`),value:T,onChange:e=>M(e.target.value),class:`border border-gray-300 rounded px-3 py-1.5 text-sm w-64`}),y>0&&e(`span`,{class:`text-xs text-gray-500`,children:m(`vendors.gvlMeta`,{version:y,total:_})})]}),k&&e(`div`,{role:`alert`,class:`p-4 bg-amber-50 border border-amber-200 rounded text-sm text-amber-800`,children:k}),D&&e(`p`,{role:`status`,"aria-live":`polite`,class:`text-sm text-gray-500`,children:m(`vendors.loading`)}),!D&&!k&&h.length===0&&e(`p`,{class:`text-sm text-gray-500`,children:m(`vendors.noResults`)}),!D&&h.length>0&&e(r,{children:[e(`div`,{class:`max-h-[60vh] overflow-y-auto rounded border border-gray-200`,children:e(`table`,{class:`w-full text-xs`,children:[e(`thead`,{class:`bg-gray-50`,children:e(`tr`,{children:[e(`th`,{scope:`col`,class:`text-left px-3 py-2 text-gray-600`,children:m(`vendors.col.id`)}),e(`th`,{scope:`col`,class:`text-left px-3 py-2 text-gray-600`,children:m(`vendors.col.name`)}),e(`th`,{scope:`col`,class:`text-left px-3 py-2 text-gray-600`,children:m(`vendors.col.purposes`)}),e(`th`,{scope:`col`,class:`text-left px-3 py-2 text-gray-600`,children:m(`vendors.col.liPurposes`)}),e(`th`,{scope:`col`,class:`text-left px-3 py-2 text-gray-600`,children:m(`vendors.col.specialPurposes`)})]})}),e(`tbody`,{children:h.map(t=>e(`tr`,{class:`border-t border-gray-100 dark:hover:bg-gray-800 hover:bg-gray-50`,children:[e(`td`,{class:`px-3 py-2 font-mono text-gray-500`,children:t.id}),e(`td`,{class:`px-3 py-2 font-medium text-gray-800`,children:t.name}),e(`td`,{class:`px-3 py-2 text-gray-600`,children:(t.purposes??[]).join(`, `)||`—`}),e(`td`,{class:`px-3 py-2 text-gray-600`,children:(t.legIntPurposes??[]).join(`, `)||`—`}),e(`td`,{class:`px-3 py-2 text-gray-600`,children:(t.specialPurposes??[]).join(`, `)||`—`})]},t.id))})]})}),e(`nav`,{"aria-label":`Vendor list pagination`,class:`mt-3 flex items-center justify-between text-xs text-gray-500`,children:[e(`span`,{children:m(`vendors.pagination`,{page:x,totalPages:C,total:_})}),e(`div`,{class:`flex items-center gap-1`,children:[e(`button`,{onClick:()=>N(x-1),disabled:x<=1,"aria-label":m(`common.prev`),class:`px-2 py-1 border border-gray-300 rounded hover:bg-gray-50 disabled:opacity-40 disabled:cursor-not-allowed`,children:m(`vendors.prev`)}),Array.from({length:Math.min(5,C)},(t,n)=>{let r=Math.max(1,Math.min(x-2,C-4))+n;return e(`button`,{onClick:()=>N(r),"aria-current":r===x?`page`:void 0,class:`px-2 py-1 border rounded ${r===x?`border-blue-500 bg-blue-50 text-blue-700 font-medium`:`border-gray-300 hover:bg-gray-50`}`,children:r},r)}),e(`button`,{onClick:()=>N(x+1),disabled:x>=C,"aria-label":m(`common.next`),class:`px-2 py-1 border border-gray-300 rounded hover:bg-gray-50 disabled:opacity-40 disabled:cursor-not-allowed`,children:m(`vendors.next`)})]})]})]})]})}export{m as VendorList};
@@ -0,0 +1 @@
1
+ import{a as e,c as t,l as n,o as r,p as i}from"./createLucideIcon-DAiYBrnd.js";import{a}from"./client-CYntrO2g.js";import{o,s}from"./index-Tr_BcjkN.js";import{n as c,t as l}from"./useHashQuery-BDjUPXDR.js";import{n as u}from"./RecordDetailModal-DIpGxfqA.js";var d={list:e=>{let t=new URLSearchParams;return e?.page&&t.set(`page`,String(e.page)),e?.limit&&t.set(`limit`,String(e.limit)),e?.q&&t.set(`q`,e.q),a(`/visitors?${t}`)},noticeShown:e=>a(`/visitors/${e}/notice-shown`)},f=`#/visitors`;function p({current:a}){let p=s();o(p(`visitors.title`));let{params:m,setParams:h}=l(f),[g,_]=t([]),[v,y]=t(0),[b,x]=t(()=>Number(m.get(`page`))||1),[S,C]=t(()=>Number(m.get(`limit`))||25),[w,T]=t(!0),[E,D]=t(()=>m.get(`q`)??``),[O,k]=t(null),A=e=>{k(e)},j=(e,t,n)=>{T(!0),d.list({page:e,limit:t,...n?{q:n}:{}}).then(e=>{_(e.items),y(e.total)}).catch(()=>{}).finally(()=>T(!1))};n(()=>{j(b,S,E)},[b,S]);let M=r(!0);return n(()=>{if(M.current){M.current=!1;return}let e=setTimeout(()=>{x(1),j(1,S,E)},300);return()=>clearTimeout(e)},[E]),n(()=>{h({page:b>1?b:void 0,limit:S===25?void 0:S,q:E||void 0})},[b,S,E]),e(i,{children:[e(u,{open:!!O,title:p(`visitors.detail.title`),onClose:()=>k(null),fields:O?[{label:p(`visitors.col.visitorId`),value:e(`span`,{class:`font-mono text-xs`,children:O.visitorId})},{label:p(`visitors.col.country`),value:O.country??`—`},{label:p(`visitors.detail.region`),value:O.region??`—`},{label:p(`visitors.detail.city`),value:O.city??`—`},{label:p(`visitors.col.firstSeen`),value:new Date(O.firstSeen).toLocaleString()},{label:p(`visitors.col.lastSeen`),value:new Date(O.lastSeen).toLocaleString()}]:[]}),e(c,{loading:w,rows:g,keyFn:e=>e.id,searchValue:E,onSearchChange:D,searchPlaceholder:p(`visitors.searchPlaceholder`),total:v,page:b,pageSize:S,onPage:x,onPageSize:e=>{C(e),x(1)},columns:[{key:`visitorId`,label:p(`visitors.col.visitorId`),render:t=>{let n=t;return e(`button`,{onClick:()=>A(n),class:`font-mono text-xs text-blue-600 dark:text-blue-400 hover:underline`,children:[n.visitorId.slice(0,16),`…`]})}},{key:`country`,label:p(`visitors.col.country`),render:e=>e.country??`—`},{key:`firstSeen`,label:p(`visitors.col.firstSeen`),render:e=>new Date(e.firstSeen).toLocaleDateString()},{key:`lastSeen`,label:p(`visitors.col.lastSeen`),render:e=>new Date(e.lastSeen).toLocaleDateString()}],emptyText:p(`visitors.empty`)})]})}export{p as VisitorList};
@@ -0,0 +1 @@
1
+ import{t as e}from"./createLucideIcon-DAiYBrnd.js";var t=e(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]);export{t};
@@ -0,0 +1 @@
1
+ var e=`${window.__CONSENTI_CONFIG__?.basePath??`/consenti`}/admin/v1`,t=`consenti:session-expired`;function n(){return localStorage.getItem(`consenti_token`)}var r=class extends Error{constructor(e,t){super(t),this.status=e}};function i(e,t){if(e instanceof r)try{let t=JSON.parse(e.message);if(t.error)return t.error}catch{}return t}async function a(i,a){let o=n(),s=await fetch(`${e}${i}`,{...a,headers:{"Content-Type":`application/json`,...o?{Authorization:`Bearer ${o}`}:{},...a?.headers}});if(s.status===401)throw window.dispatchEvent(new Event(t)),new r(401,`Unauthorized`);if(!s.ok){let e=await s.text().catch(()=>s.statusText);throw new r(s.status,e)}if(s.status!==204)return s.json()}function o(e){return e?.match(/filename="?([^";]+)"?/)?.[1]??null}async function s(i){let a=n(),s=await fetch(`${e}${i}`,{headers:a?{Authorization:`Bearer ${a}`}:{}});if(s.status===401)throw window.dispatchEvent(new Event(t)),new r(401,`Unauthorized`);if(!s.ok){let e=await s.text().catch(()=>s.statusText);throw new r(s.status,e)}let c=await s.blob(),l=o(s.headers.get(`content-disposition`))??`export`,u=URL.createObjectURL(c),d=document.createElement(`a`);d.href=u,d.download=l,d.style.display=`none`,document.body.appendChild(d),d.click(),document.body.removeChild(d),URL.revokeObjectURL(u)}export{a,i,t as n,s as r,r as t};
@@ -1 +1 @@
1
- import{t as e}from"./createLucideIcon-MdjI3m3u.js";var t=e(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]);export{t};
1
+ import{t as e}from"./createLucideIcon-DAiYBrnd.js";var t=e(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]);export{t};
@@ -0,0 +1 @@
1
+ var e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h={},g=[],_=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,v=Array.isArray;function y(e,t){for(var n in t)e[n]=t[n];return e}function b(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function x(t,n,r){var i,a,o,s={};for(o in n)o==`key`?i=n[o]:o==`ref`?a=n[o]:s[o]=n[o];if(arguments.length>2&&(s.children=arguments.length>3?e.call(arguments,2):r),typeof t==`function`&&t.defaultProps!=null)for(o in t.defaultProps)s[o]===void 0&&(s[o]=t.defaultProps[o]);return S(t,s,i,a,null)}function S(e,r,i,a,o){var s={type:e,props:r,key:i,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:o??++n,__i:-1,__u:0};return o==null&&t.vnode!=null&&t.vnode(s),s}function C(e){return e.children}function w(e,t){this.props=e,this.context=t}function T(e,t){if(t==null)return e.__?T(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type==`function`?T(e):null}function E(e){if(e.__P&&e.__d){var n=e.__v,r=n.__e,i=[],a=[],o=y({},n);o.__v=n.__v+1,t.vnode&&t.vnode(o),L(e.__P,o,n,e.__n,e.__P.namespaceURI,32&n.__u?[r]:null,i,r??T(n),!!(32&n.__u),a),o.__v=n.__v,o.__.__k[o.__i]=o,ne(i,o,a),n.__e=n.__=null,o.__e!=r&&D(o)}}function D(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(t){if(t!=null&&t.__e!=null)return e.__e=e.__c.base=t.__e}),D(e)}function O(e){(!e.__d&&(e.__d=!0)&&r.push(e)&&!k.__r++||i!=t.debounceRendering)&&((i=t.debounceRendering)||a)(k)}function k(){try{for(var e,t=1;r.length;)r.length>t&&r.sort(o),e=r.shift(),t=r.length,E(e)}finally{r.length=k.__r=0}}function ee(e,t,n,r,i,a,o,s,c,l,u){var d,f,p,m,_,v,y=r&&r.__k||g,b=t.length;for(c=A(n,t,y,c,b),d=0;d<b;d++)(p=n.__k[d])!=null&&(f=p.__i!=-1&&y[p.__i]||h,p.__i=d,v=L(e,p,f,i,a,o,s,c,l,u),m=p.__e,p.ref&&f.ref!=p.ref&&(f.ref&&R(f.ref,null,p),u.push(p.ref,p.__c||m,p)),_==null&&m!=null&&(_=m),4&p.__u?(c=j(p,c,e),f.__e&&(f.__e=null)):typeof p.type==`function`&&v!==void 0?c=v:m&&(c=m.nextSibling),p.__u&=-7);return n.__e=_,c}function A(e,t,n,r,i){var a,o,s,c,l,u=n.length,d=u,f=0;for(e.__k=Array(i),a=0;a<i;a++)(o=t[a])!=null&&typeof o!=`boolean`&&typeof o!=`function`?(typeof o==`string`||typeof o==`number`||typeof o==`bigint`||o.constructor==String?o=e.__k[a]=S(null,o,null,null,null):v(o)?o=e.__k[a]=S(C,{children:o},null,null,null):o.constructor===void 0&&o.__b>0?o=e.__k[a]=S(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):e.__k[a]=o,c=a+f,o.__=e,o.__b=e.__b+1,s=null,(l=o.__i=N(o,n,c,d))!=-1&&(d--,(s=n[l])&&(s.__u|=2)),s==null||s.__v==null?(l==-1&&(i>u?f--:i<u&&f++),typeof o.type!=`function`&&(o.__u|=4)):l!=c&&(l==c-1?f--:l==c+1?f++:(l>c?f--:f++,o.__u|=4))):e.__k[a]=null;if(d)for(a=0;a<u;a++)(s=n[a])!=null&&!(2&s.__u)&&(s.__e==r&&(r=T(s)),ae(s,s));return r}function j(e,t,n){var r,i;if(typeof e.type==`function`){for(r=e.__k,i=0;r&&i<r.length;i++)r[i]&&(r[i].__=e,t=j(r[i],t,n));return t}e.__e!=t&&(t&&e.type&&!t.parentNode&&(t=T(e)),t=n.insertBefore(e.__e,t||null));do t&&=t.nextSibling;while(t!=null&&t.nodeType==8);return t}function M(e,t){return t||=[],e==null||typeof e==`boolean`||(v(e)?e.some(function(e){M(e,t)}):t.push(e)),t}function N(e,t,n,r){var i,a,o,s=e.key,c=e.type,l=t[n],u=l!=null&&!(2&l.__u);if(l===null&&s==null||u&&s==l.key&&c==l.type)return n;if(r>+!!u){for(i=n-1,a=n+1;i>=0||a<t.length;)if((l=t[o=i>=0?i--:a++])!=null&&!(2&l.__u)&&s==l.key&&c==l.type)return o}return-1}function P(e,t,n){t[0]==`-`?e.setProperty(t,n??``):e[t]=n==null?``:typeof n!=`number`||_.test(t)?n:n+`px`}function F(e,t,n,r,i){var a,o;n:if(t==`style`)if(typeof n==`string`)e.style.cssText=n;else{if(typeof r==`string`&&(e.style.cssText=r=``),r)for(t in r)n&&t in n||P(e.style,t,``);if(n)for(t in n)r&&n[t]==r[t]||P(e.style,t,n[t])}else if(t[0]==`o`&&t[1]==`n`)a=t!=(t=t.replace(u,`$1`)),o=t.toLowerCase(),t=o in e||t==`onFocusOut`||t==`onFocusIn`?o.slice(2):t.slice(2),e.l||={},e.l[t+a]=n,n?r?n[l]=r[l]:(n[l]=d,e.addEventListener(t,a?p:f,a)):e.removeEventListener(t,a?p:f,a);else{if(i==`http://www.w3.org/2000/svg`)t=t.replace(/xlink(H|:h)/,`h`).replace(/sName$/,`s`);else if(t!=`width`&&t!=`height`&&t!=`href`&&t!=`list`&&t!=`form`&&t!=`tabIndex`&&t!=`download`&&t!=`rowSpan`&&t!=`colSpan`&&t!=`role`&&t!=`popover`&&t in e)try{e[t]=n??``;break n}catch{}typeof n==`function`||(n==null||!1===n&&t[4]!=`-`?e.removeAttribute(t):e.setAttribute(t,t==`popover`&&n==1?``:n))}}function I(e){return function(n){if(this.l){var r=this.l[n.type+e];if(n[c]==null)n[c]=d++;else if(n[c]<r[l])return;return r(t.event?t.event(n):n)}}}function L(e,n,r,i,a,o,s,c,l,u){var d,f,p,m,h,_,x,S,E,D,O,k,A,j,M,N,P=n.type;if(n.constructor!==void 0)return null;128&r.__u&&(l=!!(32&r.__u),o=[c=n.__e=r.__e]),(d=t.__b)&&d(n);n:if(typeof P==`function`){f=s.length;try{if(E=n.props,D=P.prototype&&P.prototype.render,O=(d=P.contextType)&&i[d.__c],k=d?O?O.props.value:d.__:i,r.__c?S=(p=n.__c=r.__c).__=p.__E:(D?n.__c=p=new P(E,k):(n.__c=p=new w(E,k),p.constructor=P,p.render=oe),O&&O.sub(p),p.state||(p.state={}),p.__n=i,m=p.__d=!0,p.__h=[],p._sb=[]),D&&p.__s==null&&(p.__s=p.state),D&&P.getDerivedStateFromProps!=null&&(p.__s==p.state&&(p.__s=y({},p.__s)),y(p.__s,P.getDerivedStateFromProps(E,p.__s))),h=p.props,_=p.state,p.__v=n,m)D&&P.getDerivedStateFromProps==null&&p.componentWillMount!=null&&p.componentWillMount(),D&&p.componentDidMount!=null&&p.__h.push(p.componentDidMount);else{if(D&&P.getDerivedStateFromProps==null&&E!==h&&p.componentWillReceiveProps!=null&&p.componentWillReceiveProps(E,k),n.__v==r.__v||!p.__e&&p.shouldComponentUpdate!=null&&!1===p.shouldComponentUpdate(E,p.__s,k)){n.__v!=r.__v&&(p.props=E,p.state=p.__s,p.__d=!1),n.__e=r.__e,n.__k=r.__k,n.__k.some(function(e){e&&(e.__=n)}),g.push.apply(p.__h,p._sb),p._sb=[],p.__h.length&&s.push(p),c=T(r);break n}p.componentWillUpdate!=null&&p.componentWillUpdate(E,p.__s,k),D&&p.componentDidUpdate!=null&&p.__h.push(function(){p.componentDidUpdate(h,_,x)})}if(p.context=k,p.props=E,p.__P=e,p.__e=!1,A=t.__r,j=0,D)p.state=p.__s,p.__d=!1,A&&A(n),d=p.render(p.props,p.state,p.context),g.push.apply(p.__h,p._sb),p._sb=[];else do p.__d=!1,A&&A(n),d=p.render(p.props,p.state,p.context),p.state=p.__s;while(p.__d&&++j<25);p.state=p.__s,p.getChildContext!=null&&(i=y(y({},i),p.getChildContext())),D&&!m&&p.getSnapshotBeforeUpdate!=null&&(x=p.getSnapshotBeforeUpdate(h,_)),M=d!=null&&d.type===C&&d.key==null?re(d.props.children):d,c=ee(e,v(M)?M:[M],n,r,i,a,o,s,c,l,u),p.base=n.__e,n.__u&=-161,p.__h.length&&s.push(p),S&&(p.__E=p.__=null)}catch(e){if(s.length=f,n.__v=null,l||o!=null){if(e.then){for(n.__u|=l?160:128;c&&c.nodeType==8&&c.nextSibling;)c=c.nextSibling;o!=null&&(o[o.indexOf(c)]=null),n.__e=c}else if(o!=null)for(N=o.length;N--;)b(o[N])}else n.__e=r.__e;n.__k??=r.__k||[],e.then||te(n),t.__e(e,n,r)}}else o==null&&n.__v==r.__v?(n.__k=r.__k,n.__e=r.__e):c=n.__e=ie(r.__e,n,r,i,a,o,s,l,u);return(d=t.diffed)&&d(n),128&n.__u?void 0:c}function te(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(te))}function ne(e,n,r){for(var i=0;i<r.length;i++)R(r[i],r[++i],r[++i]);t.__c&&t.__c(n,e),e.some(function(n){try{e=n.__h,n.__h=[],e.some(function(e){e.call(n)})}catch(e){t.__e(e,n.__v)}})}function re(e){return typeof e!=`object`||!e||e.__b>0?e:v(e)?e.map(re):e.constructor===void 0?y({},e):null}function ie(n,r,i,a,o,s,c,l,u){var d,f,p,m,g,_,y,x=i.props||h,S=r.props,C=r.type;if(C==`svg`?o=`http://www.w3.org/2000/svg`:C==`math`?o=`http://www.w3.org/1998/Math/MathML`:o||=`http://www.w3.org/1999/xhtml`,s!=null){for(d=0;d<s.length;d++)if((g=s[d])&&`setAttribute`in g==!!C&&(C?g.localName==C:g.nodeType==3)){n=g,s[d]=null;break}}if(n==null){if(C==null)return document.createTextNode(S);n=document.createElementNS(o,C,S.is&&S),l&&=(t.__m&&t.__m(r,s),!1),s=null}if(C==null)x===S||l&&n.data==S||(n.data=S);else{if(s=C==`textarea`&&S.defaultValue!=null?null:s&&e.call(n.childNodes),!l&&s!=null)for(x={},d=0;d<n.attributes.length;d++)x[(g=n.attributes[d]).name]=g.value;for(d in x)g=x[d],d==`dangerouslySetInnerHTML`?p=g:d==`children`||d in S||d==`value`&&`defaultValue`in S||d==`checked`&&`defaultChecked`in S||F(n,d,null,g,o);for(d in S)g=S[d],d==`children`?m=g:d==`dangerouslySetInnerHTML`?f=g:d==`value`?_=g:d==`checked`?y=g:l&&typeof g!=`function`||x[d]===g||F(n,d,g,x[d],o);if(f)l||p&&(f.__html==p.__html||f.__html==n.innerHTML)||(n.innerHTML=f.__html),r.__k=[];else if(p&&(n.innerHTML=``),ee(r.type==`template`?n.content:n,v(m)?m:[m],r,i,a,C==`foreignObject`?`http://www.w3.org/1999/xhtml`:o,s,c,s?s[0]:i.__k&&T(i,0),l,u),s!=null)for(d=s.length;d--;)b(s[d]);l&&C!=`textarea`||(d=`value`,C==`progress`&&_==null?n.removeAttribute(`value`):_!=null&&(_!==n[d]||C==`progress`&&!_||C==`option`&&_!=x[d])&&F(n,d,_,x[d],o),d=`checked`,y!=null&&y!=n[d]&&F(n,d,y,x[d],o))}return n}function R(e,n,r){try{if(typeof e==`function`){var i=typeof e.__u==`function`;i&&e.__u(),i&&n==null||(e.__u=e(n))}else e.current=n}catch(e){t.__e(e,r)}}function ae(e,n,r){var i,a;if(t.unmount&&t.unmount(e),(i=e.ref)&&(i.current&&i.current!=e.__e||R(i,null,n)),(i=e.__c)!=null){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(e){t.__e(e,n)}i.base=i.__P=i.__n=null}if(i=e.__k)for(a=0;a<i.length;a++)i[a]&&ae(i[a],n,r||typeof e.type!=`function`);r||b(e.__e),e.__c=e.__=e.__e=void 0}function oe(e,t,n){return this.constructor(e,n)}function z(n,r,i){var a,o,s,c;r==document&&(r=document.documentElement),t.__&&t.__(n,r),o=(a=typeof i==`function`)?null:i&&i.__k||r.__k,s=[],c=[],L(r,n=(!a&&i||r).__k=x(C,null,[n]),o||h,h,r.namespaceURI,!a&&i?[i]:o?null:r.firstChild?e.call(r.childNodes):null,s,!a&&i?i:o?o.__e:r.firstChild,a,c),ne(s,n,c),n.props.children=null}function se(e){function t(e){var n,r;return this.getChildContext||(n=new Set,(r={})[t.__c]=this,this.getChildContext=function(){return r},this.componentWillUnmount=function(){n=null},this.shouldComponentUpdate=function(e){this.props.value!=e.value&&n.forEach(function(e){e.__e=!0,O(e)})},this.sub=function(e){n.add(e);var t=e.componentWillUnmount;e.componentWillUnmount=function(){n&&n.delete(e),t&&t.call(e)}}),e.children}return t.__c=`__cC`+m++,t.__=e,t.Provider=t.__l=(t.Consumer=function(e,t){return e.children(t)}).contextType=t,t}e=g.slice,t={__e:function(e,t,n,r){for(var i,a,o;t=t.__;)if((i=t.__c)&&!i.__)try{if((a=i.constructor)&&a.getDerivedStateFromError!=null&&(i.setState(a.getDerivedStateFromError(e)),o=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(e,r||{}),o=i.__d),o)return i.__E=i}catch(t){e=t}throw e}},n=0,w.prototype.setState=function(e,t){var n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=y({},this.state);typeof e==`function`&&(e=e(y({},n),this.props)),e&&y(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),O(this))},w.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),O(this))},w.prototype.render=C,r=[],a=typeof Promise==`function`?Promise.prototype.then.bind(Promise.resolve()):setTimeout,o=function(e,t){return e.__v.__b-t.__v.__b},k.__r=0,s=Math.random().toString(8),c=`__d`+s,l=`__a`+s,u=/(PointerCapture)$|Capture$/i,d=0,f=I(!1),p=I(!0),m=0;var B,V,H,ce,U=0,W=[],G=t,le=G.__b,ue=G.__r,de=G.diffed,fe=G.__c,pe=G.unmount,me=G.__;function K(e,t){G.__h&&G.__h(V,e,U||t),U=0;var n=V.__H||(V.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function he(e){return U=1,ge(Te,e)}function ge(e,t,n){var r=K(B++,2);if(r.t=e,!r.__c&&(r.__=[n?n(t):Te(void 0,t),function(e){var t=r.__N?r.__N[0]:r.__[0],n=r.t(t,e);t!==n&&(r.__N=[n,r.__[1]],r.__c.setState({}))}],r.__c=V,!V.__f)){var i=function(e,t,n){if(!r.__c.__H)return!0;var i=!1,o=r.__c.props!==e;if(r.__c.__H.__.some(function(e){if(e.__N){i=!0;var t=e.__[0];e.__=e.__N,e.__N=void 0,t!==e.__[0]&&(o=!0)}}),a){var s=a.call(this,e,t,n);return i?s||o:s}return!i||o};V.__f=!0;var a=V.shouldComponentUpdate,o=V.componentWillUpdate;V.componentWillUpdate=function(e,t,n){if(this.__e){var r=a;a=void 0,i(e,t,n),a=r}o&&o.call(this,e,t,n)},V.shouldComponentUpdate=i}return r.__N||r.__}function _e(e,t){var n=K(B++,3);!G.__s&&we(n.__H,t)&&(n.__=e,n.u=t,V.__H.__h.push(n))}function ve(e){return U=5,q(function(){return{current:e}},[])}function q(e,t){var n=K(B++,7);return we(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function ye(e,t){return U=8,q(function(){return e},t)}function be(e){var t=V.context[e.__c],n=K(B++,9);return n.c=e,t?(n.__??(n.__=!0,t.sub(V)),t.props.value):e.__}function xe(){for(var e;e=W.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(J),t.__h.some(Y),t.__h=[]}catch(n){t.__h=[],G.__e(n,e.__v)}}}G.__b=function(e){V=null,le&&le(e)},G.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),me&&me(e,t)},G.__r=function(e){ue&&ue(e),B=0;var t=(V=e.__c).__H;t&&(H===V?(t.__h=[],V.__h=[],t.__.some(function(e){e.__N&&(e.__=e.__N),e.u=e.__N=void 0})):(t.__h.some(J),t.__h.some(Y),t.__h=[],B=0)),H=V},G.diffed=function(e){de&&de(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(W.push(t)!==1&&ce===G.requestAnimationFrame||((ce=G.requestAnimationFrame)||Ce)(xe)),t.__H.__.some(function(e){e.u&&=(e.__H=e.u,void 0)})),H=V=null},G.__c=function(e,t){t.some(function(e){try{e.__h.some(J),e.__h=e.__h.filter(function(e){return!e.__||Y(e)})}catch(n){t.some(function(e){e.__h&&=[]}),t=[],G.__e(n,e.__v)}}),fe&&fe(e,t)},G.unmount=function(e){pe&&pe(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.some(function(e){try{J(e)}catch(e){t=e}}),n.__H=void 0,t&&G.__e(t,n.__v))};var Se=typeof requestAnimationFrame==`function`;function Ce(e){var t,n=function(){clearTimeout(r),Se&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,35);Se&&(t=requestAnimationFrame(n))}function J(e){var t=V,n=e.__c;typeof n==`function`&&(e.__c=void 0,n()),V=t}function Y(e){var t=V;e.__c=e.__(),V=t}function we(e,t){return!e||e.length!==t.length||t.some(function(t,n){return t!==e[n]})}function Te(e,t){return typeof t==`function`?t(e):t}var Ee=0;Array.isArray;function De(e,n,r,i,a,o){n||={};var s,c,l=n;if(`ref`in l)for(c in l={},n)c==`ref`?s=n[c]:l[c]=n[c];var u={type:e,props:l,key:r,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Ee,__i:-1,__u:0,__source:a,__self:o};if(typeof e==`function`&&(s=e.defaultProps))for(c in s)l[c]===void 0&&(l[c]=s[c]);return t.vnode&&t.vnode(u),u}function Oe(e,t){for(var n in t)e[n]=t[n];return e}function ke(e,t){for(var n in e)if(n!==`__source`&&!(n in t))return!0;for(var r in t)if(r!==`__source`&&e[r]!==t[r])return!0;return!1}function Ae(e,t){this.props=e,this.context=t}(Ae.prototype=new w).isPureReactComponent=!0,Ae.prototype.shouldComponentUpdate=function(e,t){return ke(this.props,e)||ke(this.state,t)};var je=t.__b;t.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),je&&je(e)};var Me=typeof Symbol<`u`&&Symbol.for&&Symbol.for(`react.forward_ref`)||3911;function Ne(e){function t(t){var n=Oe({},t);return delete n.ref,e(n,t.ref||null)}return t.$$typeof=Me,t.render=e,t.prototype.isReactComponent=t.__f=!0,t.displayName=`ForwardRef(`+(e.displayName||e.name)+`)`,t}var Pe=t.__e;t.__e=function(e,t,n,r){if(e.then){for(var i,a=t;a=a.__;)if((i=a.__c)&&i.__c)return t.__e??(t.__e=n.__e,t.__k=n.__k||[]),i.__c(e,t)}Pe(e,t,n,r)};var Fe=t.unmount;function Ie(e,t,n){return e&&(e.__c&&e.__c.__H&&(e.__c.__H.__.forEach(function(e){typeof e.__c==`function`&&e.__c()}),e.__c.__H=null),(e=Oe({},e)).__c!=null&&(e.__c.__P===n&&(e.__c.__P=t),e.__c.__e=!0,e.__c=null),e.__k=e.__k&&e.__k.map(function(e){return Ie(e,t,n)})),e}function Le(e,t,n){return e&&n&&(e.__v=null,e.__k=e.__k&&e.__k.map(function(e){return Le(e,t,n)}),e.__c&&e.__c.__P===t&&(e.__e&&n.appendChild(e.__e),e.__c.__e=!0,e.__c.__P=n)),e}function X(){this.__u=0,this.o=null,this.__b=null}function Re(e){var t=e.__&&e.__.__c;return t&&t.__a&&t.__a(e)}function ze(e){var t,n,r,i=null;function a(a){if(t||(t=e()).then(function(e){e&&(i=e.default||e),r=!0},function(e){n=e,r=!0}),n)throw n;if(!r)throw t;return i?x(i,a):null}return a.displayName=`Lazy`,a.__f=!0,a}function Z(){this.i=null,this.l=null}t.unmount=function(e){var t=e.__c;t&&(t.__z=!0),t&&t.__R&&t.__R(),t&&32&e.__u&&(e.type=null),Fe&&Fe(e)},(X.prototype=new w).__c=function(e,t){var n=t.__c,r=this;r.o??=[],r.o.push(n);var i=Re(r.__v),a=!1,o=function(){a||r.__z||(a=!0,n.__R=null,i?i(c):c())};n.__R=o;var s=n.__P;n.__P=null;var c=function(){if(!--r.__u){if(r.state.__a){var e=r.state.__a;r.__v.__k[0]=Le(e,e.__c.__P,e.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.o.pop();)t.__P=s,t.forceUpdate()}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),e.then(o,o)},X.prototype.componentWillUnmount=function(){this.o=[]},X.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var n=document.createElement(`div`),r=this.__v.__k[0].__c;this.__v.__k[0]=Ie(this.__b,n,r.__O=r.__P)}this.__b=null}var i=t.__a&&x(C,null,e.fallback);return i&&(i.__u&=-33),[x(C,null,t.__a?null:e.children),i]};var Be=function(e,t,n){if(++n[1]===n[0]&&e.l.delete(t),e.props.revealOrder&&(e.props.revealOrder[0]!==`t`||!e.l.size))for(n=e.i;n;){for(;n.length>3;)n.pop()();if(n[1]<n[0])break;e.i=n=n[2]}};function Ve(e){return this.getChildContext=function(){return e.context},e.children}function He(e){var t=this,n=e.h;if(t.componentWillUnmount=function(){z(null,t.v),t.v=null,t.h=null},t.h&&t.h!==n&&t.componentWillUnmount(),!t.v){for(var r=t.__v;r!==null&&!r.__m&&r.__!==null;)r=r.__;t.h=n,t.v={nodeType:1,parentNode:n,childNodes:[],__k:{__m:r.__m},contains:function(){return!0},namespaceURI:n.namespaceURI,insertBefore:function(e,n){this.childNodes.push(e),t.h.insertBefore(e,n)},removeChild:function(e){this.childNodes.splice(this.childNodes.indexOf(e)>>>1,1),t.h.removeChild(e)}}}z(x(Ve,{context:t.context},e.__v),t.v)}function Ue(e,t){var n=x(He,{__v:e,h:t});return n.containerInfo=t,n}(Z.prototype=new w).__a=function(e){var t=this,n=Re(t.__v),r=t.l.get(e);return r[0]++,function(i){var a=function(){t.props.revealOrder?(r.push(i),Be(t,e,r)):i()};n?n(a):a()}},Z.prototype.render=function(e){this.i=null,this.l=new Map;var t=M(e.children);e.revealOrder&&e.revealOrder[0]===`b`&&t.reverse();for(var n=t.length;n--;)this.l.set(t[n],this.i=[1,0,this.i]);return e.children},Z.prototype.componentDidUpdate=Z.prototype.componentDidMount=function(){var e=this;this.l.forEach(function(t,n){Be(e,n,t)})};var We=typeof Symbol<`u`&&Symbol.for&&Symbol.for(`react.element`)||60103,Ge=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Ke=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,qe=/[A-Z0-9]/g,Je=typeof document<`u`,Ye=function(e){return(typeof Symbol<`u`&&typeof Symbol()==`symbol`?/fil|che|rad/:/fil|che|ra/).test(e)};w.prototype.isReactComponent=!0,[`componentWillMount`,`componentWillReceiveProps`,`componentWillUpdate`].forEach(function(e){Object.defineProperty(w.prototype,e,{configurable:!0,get:function(){return this[`UNSAFE_`+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})});var Q=t.event;t.event=function(e){return Q&&(e=Q(e)),e.persist=function(){},e.isPropagationStopped=function(){return this.cancelBubble},e.isDefaultPrevented=function(){return this.defaultPrevented},e.nativeEvent=e};var Xe={configurable:!0,get:function(){return this.class}},Ze=t.vnode;t.vnode=function(e){typeof e.type==`string`&&function(e){var t=e.props,n=e.type,r={},i=n.indexOf(`-`)==-1;for(var a in t){var o=t[a];if(!(a===`value`&&`defaultValue`in t&&o==null||Je&&a===`children`&&n===`noscript`||a===`class`||a===`className`)){var s=a.toLowerCase();a===`defaultValue`&&`value`in t&&t.value==null?a=`value`:a===`download`&&!0===o?o=``:s===`translate`&&o===`no`?o=!1:s[0]===`o`&&s[1]===`n`?s===`ondoubleclick`?a=`ondblclick`:s!==`onchange`||n!==`input`&&n!==`textarea`||Ye(t.type)?s===`onfocus`?a=`onfocusin`:s===`onblur`?a=`onfocusout`:Ke.test(a)&&(a=s):s=a=`oninput`:i&&Ge.test(a)?a=a.replace(qe,`-$&`).toLowerCase():o===null&&(o=void 0),s===`oninput`&&r[a=s]&&(a=`oninputCapture`),r[a]=o}}n==`select`&&(r.multiple&&Array.isArray(r.value)&&(r.value=M(t.children).forEach(function(e){e.props.selected=r.value.indexOf(e.props.value)!=-1})),r.defaultValue!=null&&(r.value=M(t.children).forEach(function(e){e.props.selected=r.multiple?r.defaultValue.indexOf(e.props.value)!=-1:r.defaultValue==e.props.value}))),t.class&&!t.className?(r.class=t.class,Object.defineProperty(r,"className",Xe)):t.className&&(r.class=r.className=t.className),e.props=r}(e),e.$$typeof=We,Ze&&Ze(e)};var Qe=t.__r;t.__r=function(e){Qe&&Qe(e),e.__c};var $e=t.diffed;t.diffed=function(e){$e&&$e(e);var t=e.props,n=e.__e;n!=null&&e.type===`textarea`&&`value`in t&&t.value!==n.value&&(n.value=t.value==null?``:t.value)};var et=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),tt=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),nt=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),rt=e=>{let t=nt(e);return t.charAt(0).toUpperCase()+t.slice(1)},$={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},it=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},at=se({}),ot=()=>be(at),st=Ne(({color:e,size:t,strokeWidth:n,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>{let{size:l=24,strokeWidth:u=2,absoluteStrokeWidth:d=!1,color:f=`currentColor`,className:p=``}=ot()??{},m=r??d?Number(n??u)*24/Number(t??l):n??u;return x(`svg`,{ref:c,...$,width:t??l??$.width,height:t??l??$.height,stroke:e??f,strokeWidth:m,className:et(`lucide`,p,i),...!a&&!it(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>x(e,t)),...Array.isArray(a)?a:[a]])}),ct=(e,t)=>{let n=Ne(({className:n,...r},i)=>x(st,{ref:i,iconNode:t,className:et(`lucide-${tt(rt(e))}`,`lucide-${e}`,n),...r}));return n.displayName=rt(e),n};export{De as a,he as c,be as d,z as f,ze as i,_e as l,se as m,Ue as n,ve as o,C as p,X as r,q as s,ct as t,ye as u};
@@ -0,0 +1,25 @@
1
+ var e={_section_nav:`── Navigation ──────────────────────────────────────────`,"nav.dashboard":`Dashboard`,"nav.consentBanners":`Einwilligungsbanner`,"nav.consentTemplates":`Cookie-Vorlagen`,"nav.uiTemplates":`UI-Vorlagen`,"nav.profiles":`Profile`,"nav.consents":`Einwilligungen`,"nav.visitors":`Besucher`,"nav.users":`Benutzer`,"nav.roles":`Rollen`,"nav.sites":`Websites`,"nav.vendors":`TCF-Anbieter`,"nav.reports":`Berichte`,"nav.audit":`Audit-Protokoll`,"nav.api":`API`,"nav.settings":`Einstellungen`,"nav.adminDashboard":`Admin-Dashboard`,_section_layout:`── Layout ───────────────────────────────────────────`,"layout.expandSidebar":`Seitenleiste erweitern`,"layout.collapseSidebar":`Seitenleiste einklappen`,"layout.signOut":`Abmelden`,"layout.toggleDark":`In den Dunkelmodus wechseln`,"layout.toggleLight":`In den Hellmodus wechseln`,"layout.poweredBy":`Bereitgestellt von`,_section_common:`── Allgemein ───────────────────────────────────────`,"common.loading":`Wird geladen…`,"common.searching":`Wird gesucht…`,"common.save":`Speichern`,"common.saving":`Wird gespeichert…`,"common.cancel":`Abbrechen`,"common.close":`Schließen`,"common.delete":`Löschen`,"common.edit":`Bearbeiten`,"common.create":`Erstellen`,"common.confirm":`Bestätigen`,"common.noData":`Keine Daten`,"common.search":`Search…`,"common.perPage":`Pro Seite`,"common.goToPage":`Gehe zu Seite`,"common.pageOfTotal":`Seite {{page}} von {{total}}`,"common.noResults":`No results match your search.`,"common.exportCsv":`CSV exportieren`,"common.duplicate":`Duplizieren`,"common.active":`Aktiv`,"common.inactive":`Inaktiv`,"common.name":`Name`,"common.email":`E-Mail`,"common.status":`Status`,"common.created":`Erstellt`,"common.id":`ID`,"common.add":`Hinzufügen`,"common.remove":`Entfernen`,"common.revoke":`Widerrufen`,"common.required":`Erforderlich`,"common.version":`Version`,"common.locale":`Gebietsschema`,"common.country":`Land`,"common.source":`Quelle`,"common.grantAll":`Allen zustimmen`,"common.revokeAll":`Alle widerrufen`,"common.granted":`erteilt`,"common.page":`Seite {{n}}`,"common.prev":`Zurück`,"common.next":`Weiter`,"common.you":`Sie`,"common.default":`Standard`,"common.hide":`Ausblenden`,"common.show":`Anzeigen`,"common.activate":`Aktivieren`,"common.deactivate":`Deaktivieren`,"common.newRole":`Neue Rolle`,"common.copyToClipboard":`In die Zwischenablage kopieren`,"common.back":`Zurück`,"common.copyId":`ID kopieren`,"common.mandatory":`verpflichtend`,"common.optional":`Optional`,"common.roles":`Rollen`,"common.showPassword":`Passwort anzeigen`,"common.hidePassword":`Passwort ausblenden`,"common.updated":`Aktualisiert`,"common.locked":`Gesperrt`,_section_locale:`── Sprachumschalter ────────────────────────────────`,"locale.en":`Englisch`,"locale.switcherAria":`Sprache wechseln`,_section_login:`── Anmeldung ───────────────────────────────────────`,"login.title":`{{appName}} Admin`,"login.subtitle":`Melden Sie sich bei Ihrem Konto an`,"login.email":`E-Mail`,"login.emailPlaceholder":`admin@example.com`,"login.password":`Passwort`,"login.submit":`Anmelden`,"login.submitting":`Anmeldung läuft…`,"login.error.invalid":`Ungültige E-Mail oder ungültiges Passwort`,"login.devSignIn":`⚡ Dev: als user@consenti.dev anmelden`,_section_setupWizard:`── Einrichtungsassistent ────────────────────────`,"setupWizard.welcome.title":`Willkommen bei {{appName}}`,"setupWizard.welcome.body":`Lassen Sie uns Ihre Consent-Verwaltung einrichten. Das dauert nur eine Minute — wir zeigen Ihnen die aktuelle Konfiguration und helfen Ihnen, einen Basissatz an Compliance-Profilen zu installieren.`,"setupWizard.welcome.docsLink":`Dokumentation ansehen`,"setupWizard.welcome.howItWorksLink":`So funktioniert Consenti`,"setupWizard.welcome.getStarted":`Los geht's`,"setupWizard.welcome.skip":`Einrichtung überspringen`,"setupWizard.config.title":`Ihre Konfiguration`,"setupWizard.config.subtitle":`Das hat Consenti aus Ihrer Konfiguration und den Umgebungsvariablen ermittelt, zusammengeführt mit sinnvollen Standardwerten. Geheimnisse sind ausgeblendet.`,"setupWizard.back":`Zurück`,"setupWizard.continue":`Weiter`,"setupWizard.profiles.title":`Standard-Compliance-Profile`,"setupWizard.profiles.subtitle":`Consenti bringt 8 vorgefertigte Compliance-Profile für die wichtigsten globalen Datenschutzvorgaben mit. Wählen Sie aus, welche jetzt installiert werden sollen — weitere können Sie später hinzufügen.`,"setupWizard.profiles.selectAll":`Alle 8 Standardprofile installieren`,"setupWizard.profiles.installAndContinue":`Installieren & weiter`,"setupWizard.profiles.skipAndContinue":`Überspringen & weiter`,"setupWizard.profiles.error":`Die ausgewählten Profile konnten nicht installiert werden. Sie können es später erneut über Profile versuchen.`,"setupWizard.confirmation.title":`Alles bereit`,"setupWizard.confirmation.seededSummary":`{{count}} Compliance-Profil(e) installiert.`,"setupWizard.confirmation.noneSeeded":`Es wurden keine Profile installiert — Sie können jederzeit eines über Profile anlegen.`,"setupWizard.confirmation.readinessTitle":`Bevor Sie live gehen`,"setupWizard.confirmation.readinessJsonStorage":`Sie verwenden den JSON-Datei-Speichertreiber — für die Entwicklung geeignet, für den Produktivbetrieb aber einen Datenbanktreiber (node:sqlite, PostgreSQL, MySQL, MongoDB) verwenden.`,"setupWizard.confirmation.readinessDefaultCredentials":`Es wurden keine Admin-Zugangsdaten konfiguriert — Consenti verwendet Demo-Zugangsdaten. Setzen Sie CONSENTI_ADMIN_EMAIL und CONSENTI_ADMIN_PASSWORD, bevor Sie live gehen.`,"setupWizard.confirmation.howItWorks":`So funktioniert Consenti`,"setupWizard.confirmation.goToDashboard":`Zum Dashboard`,_section_dashboard:`── Dashboard ────────────────────────────────────`,"dashboard.title":`Dashboard`,"dashboard.stats.totalConsents":`Gesamte Einwilligungen`,"dashboard.stats.totalVisitors":`Gesamte Besucher`,"dashboard.stats.accepted":`Akzeptiert`,"dashboard.stats.acceptedSub":`≥80 % Cookies genehmigt`,"dashboard.stats.rejected":`Abgelehnt`,"dashboard.stats.rejectedSub":`≤20 % Cookies genehmigt`,"dashboard.chart.timeline":`Einwilligungen (letzte 30 Tage)`,"dashboard.chart.timelineAria":`Diagramm zum Verlauf der Einwilligungen`,"dashboard.chart.countries":`Top-Länder`,"dashboard.chart.noData":`Keine Daten.`,"dashboard.chart.noCountryData":`Keine Länderdaten.`,"dashboard.gpc.label":`GPC-Erkennungsrate`,"dashboard.gpc.sub":`{{detected}} von {{total}} Einwilligungen`,"dashboard.viewReports":`Vollständige Berichte anzeigen →`,_section_reports:`── Berichte ──────────────────────────────────────────`,"reports.title":`Berichte`,"reports.filters.from":`Von`,"reports.filters.to":`Bis`,"reports.filters.apply":`Anwenden`,"reports.optin.total":`Gesamtentscheidungen`,"reports.optin.granted":`Erteilt`,"reports.optin.denied":`Abgelehnt`,"reports.optin.managed":`Teilweise verwaltet`,"reports.optin.byDate":`Einwilligungsverlauf`,"reports.optin.byDateAria":`Einwilligungsentscheidungen im Zeitverlauf`,"reports.optin.byLocale":`Nach Sprache`,"reports.category.title":`Nach Kategorie`,"reports.legend.granted":`Erteilt`,"reports.legend.denied":`Abgelehnt`,"reports.legend.objected":`Widersprochen`,"reports.legend.managed":`Verwaltet`,_section_consents:`── Einwilligungen ────────────────────────────────`,"consents.title":`Einwilligungsdatensätze`,"consents.filterFrom":`Von`,"consents.filterTo":`Bis`,"consents.filterGpc":`Nur GPC`,"consents.records":`{{n}} Datensätze`,"consents.empty":`Noch keine Einwilligungsdatensätze.`,"consents.col.visitorId":`Besucher-ID`,"consents.col.profile":`Profil`,"consents.col.locale":`Gebietsschema`,"consents.col.gpc":`GPC`,"consents.col.age":`Alter`,"consents.col.source":`Quelle`,"consents.col.created":`Erstellt`,"consents.gpcYes":`Ja`,"consents.ageVerified":`Verifiziert`,"consents.searchPlaceholder":`Besucher, Profil, Sprache, Quelle suchen…`,"consents.detail.title":`Einwilligungsdatensatz`,"consents.detail.updated":`Aktualisiert`,"consents.detail.consentJson":`Einwilligungsdaten`,"consents.detail.signature":`Signatur`,"consents.detail.signed":`Signiert`,"consents.detail.unsigned":`Nicht signiert`,_section_visitors:`── Besucher ──────────────────────────────────────`,"visitors.title":`Besucher`,"visitors.empty":`Noch keine Besucher erfasst.`,"visitors.col.visitorId":`Besucher-ID`,"visitors.col.country":`Land`,"visitors.col.firstSeen":`Erstmals gesehen`,"visitors.col.lastSeen":`Zuletzt gesehen`,"visitors.searchPlaceholder":`Besucher-ID, Land suchen…`,"visitors.detail.title":`Besucher`,"visitors.detail.region":`Region`,"visitors.detail.city":`Stadt`,_section_users:`── Benutzer ───────────────────────────────────────`,"users.title":`Benutzer`,"users.count":`{{n}} Benutzer`,"users.newUser":`+ Neuer Benutzer`,"users.createForm.title":`Benutzer erstellen`,"users.createForm.namePlaceholder":`Name`,"users.createForm.emailPlaceholder":`E-Mail`,"users.createForm.passwordPlaceholder":`Passwort`,"users.createForm.confirmPasswordPlaceholder":`Passwort bestätigen`,"users.createForm.selectRole":`Rolle auswählen…`,"users.createForm.passwordMismatch":`Passwörter stimmen nicht überein`,"users.createForm.error":`Benutzer konnte nicht erstellt werden`,"users.col.status":`Status`,"users.status.active":`Aktiv`,"users.status.inactive":`Inaktiv`,"users.action.activate":`Aktivieren`,"users.action.deactivate":`Deaktivieren`,"users.dialog.delete.title":`Benutzer „{{name}}“ löschen?`,"users.dialog.delete.message":`Dieses Benutzerkonto wird dauerhaft entfernt.`,_section_roles:`── Rollen & Berechtigungen ───────────────────────`,"roles.title":`Rollen & Berechtigungen`,"roles.list.heading":`Rollen`,"roles.list.empty":`Noch keine Rollen. Erstellen Sie eine, um zu beginnen.`,"roles.form.roleNameLabel":`Rollenname`,"roles.form.roleNamePlaceholder":`z. B. Editor`,"roles.form.descriptionLabel":`Beschreibung`,"roles.form.descriptionPlaceholder":`Optionale Beschreibung`,"roles.perms.heading":`Berechtigungen — {{name}}`,"roles.perms.selectPrompt":`Wählen Sie eine Rolle aus, um Berechtigungen zu verwalten`,"roles.perms.clickPrompt":`Klicken Sie links auf eine Rolle, um deren Berechtigungen anzuzeigen und zu verwalten.`,"roles.perms.noPerms":`Im System sind keine Berechtigungen definiert.`,"roles.error.load":`Rollen konnten nicht geladen werden.`,"roles.error.create":`Rolle konnte nicht erstellt werden.`,"roles.error.update":`Rolle konnte nicht aktualisiert werden.`,"roles.error.delete":`Rolle konnte nicht gelöscht werden.`,"roles.error.perm":`Berechtigung konnte nicht aktualisiert werden.`,"roles.dialog.delete.title":`Rolle „{{name}}“ löschen?`,"roles.dialog.delete.message":`Benutzer mit dieser Rolle verlieren ihre Berechtigungen sofort.`,"roles.aria.editRole":`Rolle bearbeiten`,"roles.aria.deleteRole":`Rolle löschen`,"roles.superAdminLocked":`Die Rolle „super_admin“ ist geschützt – sie kann nicht umbenannt, gelöscht oder in ihren Berechtigungen geändert werden.`,_section_profiles:`── Profile ───────────────────────────────────────`,"profiles.title":`Profile`,"profiles.count":`{{n}} Profile`,"profiles.countSingular":`{{n}} Profil`,"profiles.newProfile":`+ Neues Profil`,"profiles.empty":`Noch keine Profile. Erstellen Sie eines, um zu beginnen.`,"profiles.search.placeholder":`Search profiles…`,"profiles.filter.status":`Status`,"profiles.filter.active":`Active`,"profiles.filter.inactive":`Inactive`,"profiles.archived.cta":`Archived Profiles`,"profiles.archived.title":`Archived Profiles`,"profiles.archived.back":`Back to profiles`,"profiles.archived.hint":`Profile-id directories found on disk with no matching database entry — deleted profiles whose version snapshots weren't. Click one to browse its version history.`,"profiles.archived.empty":`No archived profiles found.`,"profiles.archived.searchPlaceholder":`Search by profile ID…`,"profiles.archived.col.id":`Profile ID`,"profiles.archived.col.versions":`Versions`,"profiles.archived.col.lastModified":`Last Modified`,"profiles.archived.viewHistory":`View history`,"profiles.col.name":`Name`,"profiles.col.defaultLocale":`Standard-Gebietsschema`,"profiles.col.templates":`Vorlagen`,"profiles.col.created":`Erstellt`,"profiles.template.cookie":`Cookie:`,"profiles.template.ui":`UI:`,"profiles.action.copyId":`Profil-ID kopieren`,"profiles.action.copySlug":`Copy compliance group slug`,"profiles.action.copying":`Wird kopiert…`,"profiles.dialog.delete.title":`„{{name}}“ löschen?`,"profiles.dialog.delete.message":`Dieses Profil und alle lokalisierten Inhalte werden dauerhaft entfernt.`,"profiles.dialog.copy.title":`„{{name}}“ kopieren?`,"profiles.dialog.copy.message":`Dieses Profil und alle lokalisierten Inhalte werden dupliziert.`,"profiles.error.copy":`Profil konnte nicht kopiert werden.`,"profiles.error.activate":`Profil konnte nicht aktiviert werden.`,"profiles.error.deactivate":`Profil konnte nicht deaktiviert werden.`,_section_profileEditor:`── Profil-Editor ───────────────────────────────`,"profileEditor.title.new":`Neues Profil`,"profileEditor.title.edit":`Profil bearbeiten`,"profileEditor.title.loading":`Profil-Editor`,"profileEditor.step.config":`Profilkonfiguration`,"profileEditor.step.templates":`Vorlagen`,"profileEditor.step.ageGateModal":`Altersprüfung`,"profileEditor.step.content":`Inhalt`,"profileEditor.step.mainBanner":`Hauptbanner`,"profileEditor.step.gpcBanner":`GPC-Banner`,"profileEditor.step.prefModal":`Einstellungs-Modal`,"profileEditor.config.profileName":`Profilname`,"profileEditor.config.profileNamePlaceholder":`Meine Website`,"profileEditor.config.defaultLocale":`Standard-Gebietsschema`,"profileEditor.config.allowedDomains":`Erlaubte Domains`,"profileEditor.config.allowedDomainsHint":`Unterstützt Wildcards (*.example.com). Leer lassen, um alle zuzulassen.`,"profileEditor.config.regulations":`Compliance-Vorschriften`,"profileEditor.config.reg.gdprLabel":`DSGVO`,"profileEditor.config.reg.gdprDesc":`EU/EWR Opt-in. Kein Tracking, bis eine Einwilligung erteilt wurde. Banner wird beim ersten Besuch angezeigt.`,"profileEditor.config.reg.ccpaLabel":`CCPA`,"profileEditor.config.reg.ccpaDesc":`Kalifornisches Opt-out. Cookies sind standardmäßig genehmigt. Einen „Do Not Sell“-Auslöser bereitstellen.`,"profileEditor.config.reg.cpraLabel":`CPRA`,"profileEditor.config.reg.cpraDesc":`Kalifornien 2023. Opt-out für Verkauf/Weitergabe; Opt-in für sensible Daten. GPC wird beachtet.`,"profileEditor.config.reg.dpdpaLabel":`DPDPA`,"profileEditor.config.reg.dpdpaDesc":`Indien 2023. Opt-in wie bei der DSGVO. GPC wird nicht anerkannt. Hinweis des Datenverantwortlichen erforderlich.`,"profileEditor.config.darkMode":`Dunkelmodus aktivieren`,"profileEditor.config.darkModeHint":`Wendet dunkle Farbtokens auf das Einwilligungs-Widget für Websites mit dunklem Design an.`,"profileEditor.config.dpdpa.heading":`DPDPA — Erforderliche Felder des Einwilligungshinweises`,"profileEditor.config.dpdpa.fiduciary":`Name des Datenverantwortlichen`,"profileEditor.config.dpdpa.fiduciaryPlaceholder":`Acme Corp Pvt Ltd`,"profileEditor.config.dpdpa.grievanceEmail":`E-Mail des Beschwerdebeauftragten`,"profileEditor.config.dpdpa.grievanceEmailPlaceholder":`grievance@acme.com`,"profileEditor.config.dpdpa.purpose":`Beschreibung des Zwecks`,"profileEditor.config.dpdpa.purposePlaceholder":`Wir erfassen Ihre Daten, um Ihr Erlebnis zu personalisieren…`,"profileEditor.config.ageGate":`Altersprüfung aktivieren`,"profileEditor.config.ageGateHint":`Besucher nach ihrem Alter fragen, bevor Einwilligungsoptionen angezeigt werden. Das Mindestalter variiert je nach Vorschrift — 13 (COPPA), 16 (DSGVO Art. 8, Standard).`,"profileEditor.config.ageGateSection.heading":`Altersprüfung — Pflichtfelder`,"profileEditor.config.ageGateSection.minimumAge":`Mindestalter`,"profileEditor.config.ageGateSection.minimumAgeHint":`Übliche Werte: 13 (COPPA), 16 (DSGVO Art. 8, Standard).`,"profileEditor.config.ageGateSection.requireParentalConsent":`Elterliche Einwilligung erforderlich`,"profileEditor.config.ageGateSection.requireParentalConsentHint":`Bei Ablehnung wird eine Anfrage zur elterlichen Einwilligung ausgelöst, anstatt nur alles abzulehnen.`,"profileEditor.templates.cookieTemplate":`Cookie-Vorlage`,"profileEditor.templates.cookieTemplateHint":`Legt fest, welche Cookies/Zwecke im Präferenzdialog erscheinen. Alle Felder werden aus der Vorlage abgeleitet — im Profil schreibgeschützt.`,"profileEditor.templates.selectCookie":`— Cookie-Vorlage auswählen —`,"profileEditor.templates.uiTemplate":`UI-Vorlage`,"profileEditor.templates.uiTemplateHint":`Legt Layout von Banner/Modal, Anzahl der Schaltflächen und Kategoriestruktur fest. Textinhalte fügen Sie in Schritten 3–5 hinzu.`,"profileEditor.templates.selectUi":`— UI-Vorlage auswählen —`,"profileEditor.templates.noTemplate":`Keine Vorlage ausgewählt.`,"profileEditor.templates.previewPrompt":`Wählen Sie sowohl eine Cookie-Vorlage als auch eine UI-Vorlage aus, um eine Live-Vorschau zu sehen.`,"profileEditor.templates.categoriesCount":`Kategorien`,"profileEditor.templates.buttonsTotal":`Schaltflächen insgesamt`,"profileEditor.content.loadDefaults":`Standardwerte laden`,"profileEditor.content.loadDefaultsTitle":`Diesen Abschnitt mit compliance-konformen Standardtexten (Englisch) füllen`,"profileEditor.content.loadDefaultsNotice":`Standardwerte sind nur auf Englisch verfügbar — übersetzen Sie über die Registerkarte oben.`,"profileEditor.content.importError":`Die hochgeladene Datei konnte nicht verarbeitet werden. Stellen Sie sicher, dass sie dem Consenti-Gebietsschema-Vorlagenformat entspricht.`,"profileEditor.content.mainBanner":`Hauptbanner`,"profileEditor.content.gpcBanner":`GPC-Banner`,"profileEditor.content.prefModal":`Präferenzdialog`,"profileEditor.content.heading":`Überschrift`,"profileEditor.content.subheading":`Unterüberschrift`,"profileEditor.content.bodyText":`Text`,"profileEditor.content.introText":`Einleitungstext (optional)`,"profileEditor.content.buttonLabels":`Schaltflächenbeschriftungen`,"profileEditor.content.categoryHeading":`Kategorieüberschrift`,"profileEditor.content.categoryDesc":`Kategoriebeschreibung`,"profileEditor.content.categoryFallback":`Kategorie {{n}}`,"profileEditor.content.buttonLabelPlaceholder":`Schaltflächentext…`,"profileEditor.content.categoryDescPlaceholder":`Beschreibung dieser Cookie-Kategorie…`,"profileEditor.content.liDescription":`Beschreibung des berechtigten Interesses (optional)`,"profileEditor.content.liDescriptionPlaceholder":`Wir berufen uns auf berechtigtes Interesse, weil…`,"profileEditor.content.liDescriptionHint":`Ihre DSGVO-Interessenabwägung zur Berufung auf berechtigtes Interesse, sichtbar für Besucher. Optional — Sie können dies auch in der Kategoriebeschreibung oben abdecken.`,"profileEditor.content.mainBannerHeadingPlaceholder":`Ihre Privatsphäre ist uns wichtig`,"profileEditor.content.mainBannerBodyPlaceholder":`Wir verwenden Cookies, um Ihr Erlebnis zu verbessern…`,"profileEditor.content.gpcHeadingPlaceholder":`Global Privacy Control erkannt`,"profileEditor.content.prefHeadingPlaceholder":`Datenschutzeinstellungen`,"profileEditor.content.prefSubheadingPlaceholder":`Verwalten Sie unten Ihre Cookie-Einstellungen.`,"profileEditor.content.prefIntroPlaceholder":`Optionale Einleitung über den Kategorien…`,"profileEditor.content.noContent":`Wählen Sie in Schritt 2 eine UI-Vorlage aus, um mit der Bearbeitung des Inhalts zu beginnen.`,"profileEditor.content.loadingTemplate":`Vorlage wird geladen…`,"profileEditor.nav.nextTemplates":`Weiter: Vorlagen`,"profileEditor.nav.nextContent":`Weiter: Inhalt`,"profileEditor.nav.nextAgeGate":`Weiter: Altersprüfung`,"profileEditor.nav.nextMainBanner":`Weiter: Hauptbanner`,"profileEditor.nav.nextGpcBanner":`Weiter: GPC-Banner`,"profileEditor.nav.nextPrefModal":`Weiter: Einstellungs-Modal`,"profileEditor.action.create":`Profil erstellen`,"profileEditor.action.save":`Profil speichern`,"profileEditor.error.nameRequired":`Profilname ist erforderlich.`,"profileEditor.error.nameRequiredContinue":`Vor dem Fortfahren ist ein Profilname erforderlich.`,"profileEditor.error.cookieRequired":`Wählen Sie eine Cookie-Vorlage aus.`,"profileEditor.error.cookieContinue":`Wählen Sie eine Cookie-Vorlage aus, um fortzufahren.`,"profileEditor.error.uiRequired":`Wählen Sie eine UI-Vorlage aus.`,"profileEditor.error.uiContinue":`Wählen Sie eine UI-Vorlage aus, um fortzufahren.`,"profileEditor.error.failed":`Profil konnte nicht gespeichert werden.`,"profileEditor.error.load":`Profil konnte nicht geladen werden.`,"profileEditor.table.noNoCookies":`In dieser Vorlage sind keine Cookies definiert.`,"profileEditor.table.id":`ID`,"profileEditor.table.legalBasis":`Rechtsgrundlage`,"profileEditor.table.mandatory":`Verpflichtend`,"profileEditor.table.gpc":`GPC`,"profileEditor.table.tcfVendor":`TCF-Anbieter`,"profileEditor.table.cpraCategory":`CPRA-Kategorie`,"profileEditor.table.cookies":`Cookies`,"profileEditor.export.json":`JSON`,"profileEditor.export.csv":`CSV`,"profileEditor.export.import":`Importieren`,"profileEditor.export.jsonTitle":`Lokalisierte Inhalte als JSON herunterladen`,"profileEditor.export.csvTitle":`Lokalisierte Inhalte als CSV zur Übersetzung herunterladen`,"profileEditor.export.importTitle":`Übersetztes JSON oder CSV hochladen`,"profileEditor.newLink":`+ Neu ↗`,_section_consentTemplates:`── Cookie-Vorlagen ─────────────────────────────`,"consentTemplates.title":`Cookie-Vorlagen`,"consentTemplates.count":`{{n}} Vorlagen`,"consentTemplates.countSingular":`{{n}} Vorlage`,"consentTemplates.new":`+ Neue Cookie-Vorlage`,"consentTemplates.empty.title":`Noch keine Cookie-Vorlagen.`,"consentTemplates.empty.hint":`Cookie-Vorlagen definieren die Liste der Cookies/Zwecke für Ihre Einwilligungsprofile. Erstellen Sie eine Vorlage, um sie in mehreren Profilen wiederzuverwenden.`,"consentTemplates.search.placeholder":`Search consent templates…`,"consentTemplates.col.name":`Name`,"consentTemplates.col.cookies":`Cookies`,"consentTemplates.col.categories":`Categories`,"consentTemplates.required":`erforderlich`,"consentTemplates.dialog.delete.title":`„{{name}}“ löschen?`,"consentTemplates.dialog.delete.message":`Diese Cookie-Vorlage wird dauerhaft entfernt. Verknüpfte Profile verlieren ihre Cookie-Definitionen.`,"consentTemplates.editor.title.new":`Neue Cookie-Vorlage`,"consentTemplates.editor.title.edit":`Cookie-Vorlage bearbeiten`,"consentTemplates.editor.name":`Vorlagenname`,"consentTemplates.editor.namePlaceholder":`z. B. Google Analytics + Ads`,"consentTemplates.editor.nameRequired":`Vorlagenname ist erforderlich.`,"consentTemplates.editor.definitions":`Cookie-Definitionen`,"consentTemplates.editor.empty":`Noch keine Cookies definiert. Fügen Sie oben eines hinzu.`,"consentTemplates.editor.addCookie":`+ Cookie hinzufügen`,"consentTemplates.editor.idNoMatches":`Keine bekannten Schlüssel gefunden — Sie können trotzdem eine eigene ID eingeben`,"consentTemplates.editor.error.allIds":`Alle Cookies müssen eine ID haben.`,"consentTemplates.editor.error.uniqueIds":`Cookie-IDs müssen eindeutig sein.`,"consentTemplates.editor.error.failed":`Vorlage konnte nicht gespeichert werden.`,"consentTemplates.editor.error.notFound":`Vorlage nicht gefunden.`,"consentTemplates.editor.action.create":`Vorlage erstellen`,"consentTemplates.editor.action.save":`Vorlage speichern`,"consentTemplates.editor.showTcf":`TCF-Anbieter`,"consentTemplates.editor.showCpra":`CPRA-Kategorie`,"consentTemplates.editor.infoHint":`Klicken Sie auf eine Spaltenüberschrift, um mehr zu erfahren`,"consentTemplates.editor.infoUsage":`Verwendung`,"consentTemplates.editor.infoLaws":`Rechtliche Hinweise`,"consentTemplates.editor.infoExamples":`Beispiele`,"consentTemplates.col.id":`Cookie-ID`,"consentTemplates.col.idShort":`ID / Name`,"consentTemplates.col.gpc":`GPC-Signal beachten`,"consentTemplates.col.gpcShort":`GPC`,"consentTemplates.col.tcfVendor":`TCF-Anbieter-IDs`,"consentTemplates.col.cpraCategory":`CPRA-Datenkategorie`,"consentTemplates.col.tcfVendorShort":`TCF-Anbieter`,"consentTemplates.col.cpraCategoryShort":`CPRA-Kategorie`,"consentTemplates.col.purpose":`Zweck des Cookies`,"consentTemplates.col.purposeShort":`Zweck`,"consentTemplates.purpose.necessary":`Notwendig`,"consentTemplates.purpose.functional":`Funktional`,"consentTemplates.purpose.preferences":`Präferenzen`,"consentTemplates.purpose.analytics":`Analyse`,"consentTemplates.purpose.marketing":`Marketing`,"consentTemplates.editor.purposePlaceholder":`Zweck auswählen…`,"consentTemplates.editor.error.purpose":`Jedes Cookie muss einen Zweck haben.`,_section_uiTemplates:`── UI-Vorlagen ──────────────────────────────────`,"uiTemplates.title":`UI-Vorlagen`,"uiTemplates.count":`{{n}} Vorlagen`,"uiTemplates.countSingular":`{{n}} Vorlage`,"uiTemplates.new":`+ Neue UI-Vorlage`,"uiTemplates.empty.title":`Noch keine UI-Vorlagen.`,"uiTemplates.empty.hint":`UI-Vorlagen definieren die visuelle Konfiguration — Positionen, Schaltflächen, Kategorien — für Ihre Einwilligungsbanner und Dialoge.`,"uiTemplates.search.placeholder":`Search UI templates…`,"uiTemplates.col.name":`Name`,"uiTemplates.col.positions":`Positions`,"uiTemplates.col.buttons":`Buttons`,"uiTemplates.mainBanner":`Hauptbanner:`,"uiTemplates.gpcBanner":`GPC-Banner:`,"uiTemplates.modal":`Dialog:`,"uiTemplates.categories":`{{n}} Kategorien`,"uiTemplates.dialog.delete.title":`„{{name}}“ löschen?`,"uiTemplates.dialog.delete.message":`Diese UI-Vorlage wird dauerhaft entfernt. Verknüpfte Profile verlieren ihre UI-Einstellungen.`,"uiTemplates.editor.title.new":`Neue UI-Vorlage`,"uiTemplates.editor.title.edit":`UI-Vorlage bearbeiten`,"uiTemplates.editor.name":`Vorlagenname`,"uiTemplates.editor.nameRequired":`Vorlagenname ist erforderlich.`,"uiTemplates.editor.namePlaceholder":`z. B. Standard-DSGVO-Layout`,"uiTemplates.editor.loading":`Vorlage wird geladen…`,"uiTemplates.editor.tabMain":`Hauptbanner`,"uiTemplates.editor.tabGpc":`GPC-Banner`,"uiTemplates.editor.tabModal":`Präferenzdialog`,"uiTemplates.editor.mainBannerHint":`Wird beim ersten Besuch angezeigt, wenn noch keine Einwilligung erfasst wurde.`,"uiTemplates.editor.gpcBannerHint":`Wird anstelle des Hauptbanners angezeigt, wenn ein GPC-Signal erkannt wird (autoHonorGPC aktiviert).`,"uiTemplates.editor.error.notFound":`Vorlage nicht gefunden.`,"uiTemplates.editor.error.buttons":`Alle Schaltflächen müssen eine ID haben.`,"uiTemplates.editor.error.uniqueButtonIds":`Button IDs must be unique.`,"uiTemplates.editor.error.customButtons":`Bei allen „benutzerdefinierten“ Aktionsschaltflächen müssen Cookies ausgewählt sein.`,"uiTemplates.editor.error.catIds":`Alle Kategorie-IDs sind erforderlich.`,"uiTemplates.editor.error.uniqueCatIds":`Kategorie-IDs müssen eindeutig sein.`,"uiTemplates.editor.error.catCookies":`Jede Kategorie muss mindestens ein Cookie enthalten.`,"uiTemplates.editor.error.failed":`Vorlage konnte nicht gespeichert werden.`,"uiTemplates.editor.action.create":`Vorlage erstellen`,"uiTemplates.editor.action.save":`Vorlage speichern`,_section_sites:`── Websites / Mandanten ──────────────────────────`,"sites.title":`Websites / Mandanten`,"sites.createNew":`Neue Website erstellen`,"sites.namePlaceholder":`Name der Website`,"sites.slugPlaceholder":`Slug (z. B. site-a)`,"sites.col.name":`Name`,"sites.col.slug":`Slug`,"sites.col.id":`ID`,"sites.col.created":`Erstellt`,"sites.empty":`Noch keine Websites.`,"sites.dialog.delete.title":`„{{name}}“ löschen?`,"sites.dialog.delete.message":`Diese Website und alle zugehörigen Daten werden dauerhaft entfernt. Dies kann nicht rückgängig gemacht werden.`,"sites.error.create":`Website konnte nicht erstellt werden.`,_section_vendors:`── TCF-Anbieter ──────────────────────────────────`,"vendors.title":`TCF-Anbieterliste`,"vendors.info.title":`Was ist die TCF-Anbieterliste?`,"vendors.searchPlaceholder":`Anbieter suchen…`,"vendors.gvlMeta":`GVL v{{version}} · {{total}} Anbieter`,"vendors.loading":`Anbieterliste wird geladen…`,"vendors.noResults":`Keine Anbieter gefunden.`,"vendors.col.id":`ID`,"vendors.col.name":`Name`,"vendors.col.purposes":`Zwecke`,"vendors.col.liPurposes":`LI-Zwecke`,"vendors.col.specialPurposes":`Besondere Zwecke`,"vendors.pagination":`Seite {{page}} von {{totalPages}} · insgesamt {{total}} Anbieter`,"vendors.prev":`← Zurück`,"vendors.next":`Weiter →`,"tcfRegistration.title":`TCF-Registrierung muss erneut bestätigt werden`,"tcfRegistration.body":`compliance.tcf ist mit cmpId {{cmpId}} (Version {{cmpVersion}}) aktiviert, aber diese Registrierung wurde noch nicht bestätigt — TCF wird als deaktiviert behandelt: kein window.__tcfapi im Widget, kein tcfString bei Consent-Datensätzen.`,"tcfRegistration.deregistered":`Diese cmpId wurde am {{date}} bei IAB Europe deregistriert. Die Bestätigung ist blockiert, bis Sie eine neue cmpId registrieren und Ihre Serverkonfiguration aktualisieren.`,"tcfRegistration.notFound":`Diese cmpId wurde noch nicht in der zwischengespeicherten IAB-CMP-Liste gefunden. Die Registrierung kann einige Zeit dauern — versuchen Sie es später mit „Status aktualisieren“ erneut.`,"tcfRegistration.checkbox":`TCF ist aktiviert, und wir haben diese cmpId ({{cmpId}}, Version {{cmpVersion}}) bei IAB Europe registriert.`,"tcfRegistration.confirmButton":`Registrierung bestätigen`,"tcfRegistration.refreshStatus":`Status aktualisieren`,"tcfRegistration.loadError":`TCF-Registrierungsstatus konnte nicht geladen werden.`,"tcfRegistration.confirmError":`TCF-Registrierung konnte nicht bestätigt werden.`,"gppRegistration.title":`GPP-Registrierung muss erneut bestätigt werden`,"gppRegistration.body":`compliance.gpp ist mit cmpId {{cmpId}} (Version {{cmpVersion}}) aktiviert, aber diese Registrierung wurde noch nicht bestätigt — GPP wird als deaktiviert behandelt: kein window.__gpp im Widget, kein gppString bei Consent-Datensätzen.`,"gppRegistration.checkbox":`GPP ist aktiviert, und wir haben diese cmpId ({{cmpId}}, Version {{cmpVersion}}) registriert.`,"gppRegistration.confirmButton":`Registrierung bestätigen`,"gppRegistration.loadError":`GPP-Registrierungsstatus konnte nicht geladen werden.`,"gppRegistration.confirmError":`GPP-Registrierung konnte nicht bestätigt werden.`,_section_audit:`── Audit-Protokoll ────────────────────────────────`,"audit.title":`Audit-Protokoll`,"audit.empty":`Noch keine Audit-Ereignisse.`,"audit.col.time":`Zeit`,"audit.col.action":`Aktion`,"audit.col.resource":`Ressource`,"audit.col.resourceId":`Ressourcen-ID`,"audit.col.actor":`Akteur`,"audit.actor.system":`System`,"audit.viewHistory":`Vergleichen`,"audit.searchPlaceholder":`Aktion, Ressource, Akteur suchen…`,"audit.detail.title":`Audit-Eintrag`,"audit.detail.oldData":`Alte Daten`,"audit.detail.newData":`Neue Daten`,_section_apiConfig:`── API-Konfiguration ────────────────────────────`,"apiConfig.title":`API-Konfiguration`,"apiConfig.public.heading":`Öffentliche API`,"apiConfig.public.about.text":`Wird vom Widget verwendet, um Einwilligungen zu übermitteln und zu verwalten. Es gibt kein Auth-Token — die erlaubten Origins unten sind das einzige Zugriffstor.`,"apiConfig.public.about.link":`Öffentliche API-Referenz auf consenti.dev öffnen`,"apiConfig.admin.heading":`Admin-API`,"apiConfig.admin.about.text":`Verwenden Sie diese Token, um die Consenti-Admin-API aus Skripten, CI/CD oder serverseitigen Integrationen aufzurufen. Jede Route, jedes Anfrage-/Antwortformat und jeder Auth-Header ist auf consenti.dev dokumentiert.`,"apiConfig.admin.about.link":`Admin-API-Referenz auf consenti.dev öffnen`,"apiConfig.endpoint.heading":`Endpunkt`,"apiConfig.endpoint.hint":`Basis-URL für diese Bereitstellung, ermittelt aus Ihrer Konfiguration.`,"apiConfig.origins.heading":`Erlaubte Origins`,"apiConfig.origins.hint":`Nur Anfragen von diesen Origins werden akzeptiert. Verwenden Sie * , um alle zuzulassen (nicht für Produktion empfohlen).`,"apiConfig.origins.publicNote":`Die öffentliche API hat kein Auth-Token — diese Liste ist ihr einziges Zugriffstor.`,"apiConfig.origins.adminNote":`Eine zusätzliche Ebene zum Bearer-Token-Auth. Fügen Sie den eigenen Origin dieses Dashboards ({{origin}}) hinzu, um sich nicht selbst auszusperren.`,"apiConfig.origins.placeholder":`https://example.com`,"apiConfig.origins.empty":`Keine Origins konfiguriert — derzeit sind alle Origins erlaubt.`,"apiConfig.origins.errorDuplicate":`Bereits in der Liste.`,"apiConfig.origins.errorSave":`Speichern fehlgeschlagen. Bitte versuchen Sie es erneut.`,"apiConfig.origins.remove":`Entfernen`,"apiConfig.tokens.heading":`Admin-API-Token`,"apiConfig.tokens.hint":`Bearer-Token für serverseitigen und CI/CD-Zugriff auf die Consenti-Admin-API. Übergeben als Authorization: Bearer <token>. Niemals in clientseitigem Code offenlegen — diese gewähren vollständigen Admin-Zugriff.`,"apiConfig.tokens.created":`Token erstellt — kopieren Sie ihn jetzt, er wird nicht erneut angezeigt.`,"apiConfig.tokens.placeholder":`Token-Name (z. B. CI-Deployment)`,"apiConfig.tokens.empty":`Noch keine Token.`,"apiConfig.tokens.errorName":`Name ist erforderlich`,"apiConfig.tokens.errorCreate":`Token konnte nicht erstellt werden`,"apiConfig.tokens.col.name":`Name`,"apiConfig.tokens.col.status":`Status`,"apiConfig.tokens.col.created":`Erstellt`,"apiConfig.tokens.status.active":`Aktiv`,"apiConfig.tokens.status.revoked":`Widerrufen`,"apiConfig.tokens.status.expired":`Expired`,"apiConfig.tokens.col.expires":`Expires`,"apiConfig.tokens.expiresLabel":`Expires (optional)`,"apiConfig.tokens.expiresNever":`Never`,"apiConfig.tokens.dialog.title":`Dieses API-Token widerrufen?`,"apiConfig.tokens.dialog.message":`Jede Anwendung, die dieses Token verwendet, verliert sofort den Zugriff.`,"apiConfig.tokens.reactivate":`Reaktivieren`,"apiConfig.tokens.deleteDialog.title":`Dieses API-Token endgültig löschen?`,"apiConfig.tokens.deleteDialog.message":`Dies entfernt den Token-Datensatz vollständig und kann nicht rückgängig gemacht werden. Eine Reaktivierung ist dann nicht mehr möglich.`,_section_settings:`── Einstellungen ─────────────────────────────────`,"settings.title":`Einstellungen`,"settings.account.heading":`Konto`,"settings.account.email":`E-Mail:`,"settings.account.roles":`Rollen:`,"settings.account.id":`ID:`,"settings.account.changePassword":`Passwort ändern`,"settings.export.heading":`Daten exportieren`,"settings.export.hint":`Alle Einwilligungsdatensätze oder Audit-Protokolle herunterladen.`,"settings.export.consentCsv":`Einwilligungen CSV`,"settings.export.consentXlsx":`Einwilligungen XLSX`,"settings.export.consentJson":`Einwilligungen JSON`,"settings.export.auditCsv":`Audit CSV`,"settings.about.heading":`Über`,"settings.about.text":`Consenti v0.1.0 — Open-Source Consent-Management-Plattform im DSGVO-Stil.`,"settings.about.license":`Apache-2.0-Lizenz.`,_section_changePassword:`── Passwort ändern ──────────────────────────────`,"changePassword.title":`Passwort ändern`,"changePassword.hint":`Wählen Sie ein starkes Passwort mit mindestens 12 Zeichen.`,"changePassword.success":`Passwort erfolgreich aktualisiert.`,"changePassword.newPassword":`Neues Passwort`,"changePassword.newPasswordPlaceholder":`Mind. 12 Zeichen`,"changePassword.confirmPassword":`Neues Passwort bestätigen`,"changePassword.confirmPasswordPlaceholder":`Neues Passwort wiederholen`,"changePassword.submit":`Passwort aktualisieren`,"changePassword.submitting":`Wird gespeichert…`,"changePassword.error.minLength":`Das Passwort muss mindestens 12 Zeichen lang sein.`,"changePassword.error.mismatch":`Die Passwörter stimmen nicht überein.`,"changePassword.error.failed":`Passwort konnte nicht aktualisiert werden.`,"login.showPassword":`Show password`,"login.hidePassword":`Hide password`,"users.allowedSites":`Allowed Sites`,"users.allowedSitesHint":`(leave empty to allow all)`,"users.edit.title":`Edit User: {{name}}`,"users.edit.error.save":`Failed to save changes.`,"users.edit.resetPassword":`Passwort zurücksetzen`,"users.edit.resetPasswordHint":`(leer lassen, um das aktuelle Passwort beizubehalten)`,"users.edit.newPassword":`Neues Passwort`,"users.edit.confirmNewPassword":`Neues Passwort bestätigen`,"users.edit.passwordTooShort":`Das Passwort muss mindestens 12 Zeichen lang sein`,"users.superAdminLocked":`Super-Admin-Konten sind geschützt und können nicht bearbeitet oder gelöscht werden.`,"users.detail.title":`Benutzer`,"users.detail.allSites":`Alle Websites`,"profileEditor.import.imported":`Imported {{n}} locales: {{list}}`,"profileEditor.import.importedSingular":`Imported 1 locale: {{list}}`,"profileEditor.import.skipped":`Skipped {{n}} unrecognised locale keys: {{list}}`,"profileEditor.import.skippedSingular":`Skipped 1 unrecognised locale key: {{list}}`,"profileEditor.config.selectDefaultLocale":`Select default locale…`,"profileEditor.config.complianceGroup":`Compliance Group`,"profileEditor.config.complianceGroupNone":`None / Custom`,"profileEditor.config.customComplianceGroup":`Custom group name`,"profileEditor.config.customComplianceGroupPlaceholder":`e.g. internal-testing`,"profileEditor.config.customComplianceGroupHint":`Lower-kebab-case identifier. The widget's compliance.type config uses this to fetch the profile — required, since there's no other way to address it. Only one profile can be active per name at a time. No compliance-rule defaults are applied (those only exist for the built-in groups above).`,"profileEditor.config.gpcMode":`GPC Signal Mode`,"profileEditor.config.gpcModeDefault":`Default (inherit from compliance group)`,"profileEditor.config.gpcModePlaceholder":`Default`,"profileEditor.config.hidePoweredBy":`Hide "Powered by Consenti"`,"profileEditor.config.hidePoweredByHint":`Remove the branding link from the consent banner.`,"profileEditor.config.allowReceipt":`Allow consent receipt`,"profileEditor.config.allowReceiptHint":`Let visitors download a PDF receipt of their consent choices.`,"profileEditor.config.enhanceAccessibility":`Barrierefreiheit verbessern`,"profileEditor.config.enhanceAccessibilityHint":`Wendet WCAG 2.1 AA-Schaltflächengröße (min. 44px), sichtbare Fokusringe und Screenreader-Beschriftungen auf das Consent-Widget an.`,"profileEditor.config.showFooterMetadata":`Fußzeilen-Metadaten anzeigen`,"profileEditor.config.showFooterMetadataHint":`Zeigt einen Streifen in Banner und Modal mit Einwilligungs-ID, Datum, Profilversion und einem Link zu den Datenschutzeinstellungen.`,"profileEditor.conflict.title":`Active profile conflict`,"profileEditor.conflict.message":`Profile "{{name}}" is already active for this compliance group. Only one profile can be active per group.`,"profileEditor.conflict.deactivate":`Deactivate "{{name}}" and activate this one`,"profileEditor.conflict.saveInactive":`Save this profile as inactive`,"profileEditor.compliance.errors.heading":`Compliance errors — fix before continuing:`,"profileEditor.compliance.warnings.heading":`Compliance warnings:`,"profileEditor.compliance.warnings.acknowledge":`I acknowledge these warnings and wish to continue`,"profileEditor.compliance.preGrantOverridden":`Pre-grant was overridden for these parameters — this compliance group requires an explicit opt-in, so "Pre Grant" cannot stay enabled.`,"profileEditor.content.selectLocale":`Select locale…`,"profileEditor.content.addLocale":`+ Add locale`,"profileEditor.content.defaultLocaleLabel":`(default)`,"profileEditor.content.copyLocale":`Lokalen Inhalt kopieren`,"profileEditor.content.copyLocaleTitle":`Inhalt dieses Abschnitts aus einer anderen bereits erstellten Sprache kopieren`,"profileEditor.copyLocale.confirmTitle":`Vorhandenen Inhalt ersetzen?`,"profileEditor.copyLocale.confirmMessage":`Dieser Abschnitt enthält bereits Inhalte in {{locale}}. Das Kopieren aus {{source}} entfernt diese und ersetzt sie vollständig.`,"profileEditor.copyLocale.confirmAction":`Ersetzen`,_section_readability:`── Readability Warnings ─────────────────────────`,"readability.headingTooLong":`Heading is {{n}} characters — keep it under 80 for readability.`,"readability.avgSentenceLong":`Average sentence length is {{n}} words — aim for 25 or fewer.`,"readability.totalWordsLong":`Text is {{n}} words long — consider keeping banner copy under 150 words.`,"consentTemplates.editor.gpcMandatoryTitle":`Mandatory cookies are never auto-denied by GPC`,"consentTemplates.editor.loadDefaultsBtn":`Click here to load default cookies list`,"consentTemplates.editor.confirmUpdate.title":`Update template used by {{n}} profiles?`,"consentTemplates.editor.confirmUpdate.titleSingular":`Update template used by 1 profile?`,"consentTemplates.editor.confirmUpdate.message":`Profiles: {{names}}.
2
+
3
+ Saving will update cookie definitions for all profiles using this template. Continue?`,"uiTemplates.editor.loadDefaultsPrompt":`Start from scratch, or load a sensible default structure (buttons, categories, positions).`,"uiTemplates.editor.loadDefaultsBtn":`Load Defaults`,"uiTemplates.editor.confirmUpdate.title":`Update template used by {{n}} profiles?`,"uiTemplates.editor.confirmUpdate.titleSingular":`Update template used by 1 profile?`,"uiTemplates.editor.confirmUpdate.message":`Profiles: {{names}}.
4
+
5
+ Saving will apply UI changes to all profiles using this template. Continue?`,"uiTemplates.editor.wizard.stepOf":`Schritt {{step}} von {{total}}`,"uiTemplates.editor.wizard.next":`Weiter`,"uiTemplates.editor.wizard.back":`Zurück`,"uiTemplates.editor.stackButtonsOnBreakpoint":`Schaltflächen stapeln (px)`,"uiTemplates.editor.stackButtonsOnBreakpointHint":`Schaltflächen werden unterhalb dieser Breite vertikal gestapelt. 0 = deaktiviert. Standard: 576.`,"uiTemplates.editor.trapFocus":`Fokus einsperren`,"uiTemplates.editor.trapFocusHint":`Hält den Tastatur-Tab-Fokus im Consent-Container, solange dieser Banner oder Modal sichtbar ist.`,"uiTemplates.editor.showForgetMe":`🗑️ Schaltfläche „Vergiss mich“ anzeigen`,"uiTemplates.editor.showForgetMeHint":`Fügt dem Präferenz-Modal eine Selbstbedienungs-Löschfunktion für Besucher hinzu, die bereits eine gespeicherte Einwilligungsentscheidung haben — der Widget-seitige Einstiegspunkt für die Löschrechte nach DSGVO Art. 17, CCPA/CPRA, LGPD Art. 18, UK GDPR, DPDPA, KVKK, POPIA, PDPA-TH und APPI. Löscht über denselben Endpunkt wie das DELETE /consent/:visitorId der API.`,"uiTemplates.editor.fieldInfo.title":`Feldreferenz`,"uiTemplates.editor.fieldInfo.headingTag.label":`Überschriften-Tag`,"uiTemplates.editor.fieldInfo.headingTag.description":`Das HTML-Tag für die Hauptüberschrift des Banners oder Modals. Bestimmt die Dokumentgliederung und wie Screenreader den Bereich ankündigen.`,"uiTemplates.editor.fieldInfo.headingTag.highlights":`Wähle h1–h6 passend zur Überschriftenhierarchie deiner Seite — überspringe keine Ebenen (z. B. h4 nach einem Seiten-h1).
6
+ Ein benutzerdefiniertes Tag (z. B. div, p) ist erlaubt, wenn es gar nicht als Überschrift angekündigt werden soll.
7
+ Gilt unabhängig für Hauptbanner, GPC-Banner und Präferenz-Modal.`,"uiTemplates.editor.fieldInfo.style.label":`Stil`,"uiTemplates.editor.fieldInfo.style.description":`Die visuelle Gewichtung eines Buttons — Primär, Sekundär, Akzent oder Text. Rein optisch; ändert nicht, was der Button tut.`,"uiTemplates.editor.fieldInfo.style.highlights":`Primär: höchste Betonung, meist dein Haupt-Call-to-Action (z. B. Alle akzeptieren).
8
+ Sekundär: geringere Betonung, neutraler Hintergrund passend zu deinem Theme — für alternative Optionen (z. B. Einstellungen verwalten).
9
+ Akzent: eine eigenständige Hervorhebungsfarbe, getrennt von Primär/Sekundär — standardmäßig Rot, sofern du keine eigene Akzentfarbe festlegst; daher am besten für einen starken Call-out wie Alle ablehnen reservieren.
10
+ Text: minimaler, linkartiger Stil — Consenti setzt diesen Stil standardmäßig für Link-Aktions-Buttons.`,"uiTemplates.editor.fieldInfo.action.label":`Aktion`,"uiTemplates.editor.fieldInfo.action.description":`Was passiert, wenn der Besucher auf diesen Button klickt.`,"uiTemplates.editor.fieldInfo.action.highlights":`Benutzerdefiniert: gewährt oder verweigert die unten ausgewählten Cookies — verwendet für Alle akzeptieren / Alle ablehnen / Auswahl akzeptieren.
11
+ Absenden: speichert die vom Besucher im Präferenz-Modal gesetzten Schalter.
12
+ Verwalten: öffnet das Präferenz-Modal über einen Banner-Button.
13
+ Schließen: schließt Banner oder Modal, ohne die Einwilligung zu ändern.
14
+ Link: öffnet eine externe URL (z. B. Datenschutzerklärung) — verwendet standardmäßig den Stil Text.`,"uiTemplates.editor.fieldInfo.cookies.label":`Zu gewährende/verweigernde Cookies`,"uiTemplates.editor.fieldInfo.cookies.description":`Welche Cookie-Zwecke dieser Button mit Aktion „Benutzerdefiniert“ beim Klick gewährt oder verweigert.`,"uiTemplates.editor.fieldInfo.cookies.highlights":`Erforderlich, wenn Aktion auf Benutzerdefiniert gesetzt ist.
15
+ Verwende *, um alle definierten Cookie-Zwecke anzusprechen (z. B. Alle akzeptieren / Alle ablehnen).
16
+ Wähle bestimmte Zwecke aus, um Buttons für Teil-Einwilligungen zu erstellen, z. B. „Nur Analyse akzeptieren“.`,"uiTemplates.editor.fieldInfo.trapFocus.label":`Fokus einsperren`,"uiTemplates.editor.fieldInfo.trapFocus.description":`Hält den Tastatur-Tab-Fokus im Consent-Container, solange dieser Banner oder Modal sichtbar ist.`,"uiTemplates.editor.fieldInfo.trapFocus.highlights":`Verhindert, dass Tab / Umschalt+Tab den Fokus auf Seiteninhalte hinter dem Overlay verschiebt.
17
+ Empfohlen für Modale und jeden Banner mit Overlay, damit Tastatur- und Screenreader-Nutzer nicht zu unzugänglichen Inhalten gelangen.
18
+ Bei nicht blockierenden Bannern ohne Overlay nicht erforderlich.`,"uiTemplates.editor.fieldInfo.buttonId.label":`Button-ID`,"uiTemplates.editor.fieldInfo.buttonId.description":`Eine eindeutige, maschinenlesbare Kennung für diesen Button, z. B. accept-all oder reject-all.`,"uiTemplates.editor.fieldInfo.buttonId.highlights":`Kein sichtbarer Text — die sichtbare Beschriftung wird pro Sprache im Inhalts-Schritt des Profils festgelegt.
19
+ Muss innerhalb seiner eigenen Sektion eindeutig sein (Hauptbanner, GPC-Banner, Präferenz-Modal); dieselbe ID kann sektionsübergreifend wiederverwendet werden, da diese nie gleichzeitig angezeigt werden.
20
+ Wird in Consent-Protokollen und Analysen verwendet, um zu erkennen, welchen Button ein Besucher angeklickt hat.`,"uiTemplates.editor.fieldInfo.localeSwitcher.label":`Sprachumschalter anzeigen`,"uiTemplates.editor.fieldInfo.localeSwitcher.description":`Zeigt ein Sprachauswahlmenü auf diesem Banner oder Modal an, damit Besucher die Sprache wechseln können, ohne den Consent-Ablauf zu verlassen.`,"uiTemplates.editor.fieldInfo.localeSwitcher.highlights":`Nur sinnvoll, wenn im Inhalts-Schritt des Profils mehr als eine Sprache konfiguriert ist.
21
+ Kann unabhängig für Hauptbanner, GPC-Banner und Präferenz-Modal aktiviert werden.`,"uiTemplates.editor.fieldInfo.forgetMe.label":`Vergiss mich`,"uiTemplates.editor.fieldInfo.forgetMe.description":`Zeigt im Präferenz-Modal unterhalb der Kategorien eine Schaltfläche an, mit der ein wiederkehrender Besucher seinen gespeicherten Einwilligungsdatensatz löschen kann, ohne dass die Website dafür an anderer Stelle einen Link einbauen muss.`,"uiTemplates.editor.fieldInfo.forgetMe.highlights":`Wird nur Besuchern angezeigt, die bereits eine gespeicherte Einwilligungsentscheidung haben — andernfalls gibt es nichts zu löschen.
22
+ Löscht über denselben DELETE /consent/:visitorId-Endpunkt wie widget.deleteConsent()/reConsent().
23
+ Der Button-Text wird pro Sprache im Inhalts-Schritt des Profils verfasst, nicht hier.
24
+ Löst vorher consenti:forgetMeRequested und danach consenti:forgotten aus — eine Host-Anwendung kann darauf reagieren, um einen eigenen identitätsgeprüften Löschprozess in anderen Systemen anzustoßen.
25
+ Nur im Präferenz-Modal — es gibt kein Äquivalent für den Hauptbanner oder den GPC-Banner.`,_section_howItWorks:`── So funktioniert Consenti ─────────────────────────`,"nav.howItWorks":`So funktioniert Consenti`,"howItWorks.title":`So funktioniert Consenti`,"howItWorks.intro":`Consenti ist eine Open-Source Consent Management Platform im DSGVO-Stil. Sie übernimmt die Erhebung, Speicherung und das Reporting von Cookie-Einwilligungen für Ihre Websites. Diese Anleitung führt Sie durch den Hauptworkflow und beschreibt jeden Bereich des Dashboards.`,"howItWorks.workflow.heading":`Kernworkflow`,"howItWorks.workflow.step1.title":`Cookie-Kategorien definieren`,"howItWorks.workflow.step1.desc":`Gehen Sie zu Consent-Banner → Cookie-Vorlagen und erstellen Sie eine Vorlage mit allen Cookie-Kategorien Ihrer Website (z. B. Analyse, Marketing). Legen Sie Rechtsgrundlage und Ablaufzeit für jede Kategorie fest.`,"howItWorks.workflow.step2.title":`Consent-Oberfläche gestalten`,"howItWorks.workflow.step2.desc":`Gehen Sie zu Consent-Banner → UI-Vorlagen und konfigurieren Sie das visuelle Layout Ihres Banners und des Einstellungsdialogs — Schaltflächenbeschriftungen, Farben, Layout und Kategoriedarstellung.`,"howItWorks.workflow.step3.title":`Consent-Profil erstellen`,"howItWorks.workflow.step3.desc":`Gehen Sie zu Consent-Banner → Profile und kombinieren Sie eine Cookie-Vorlage mit einer UI-Vorlage. Fügen Sie übersetzte Texte für jede unterstützte Sprache hinzu, aktivieren Sie die erforderlichen Vorschriften (DSGVO, CCPA, DPDPA) und veröffentlichen Sie.`,"howItWorks.workflow.step4.title":`Widget einbinden`,"howItWorks.workflow.step4.desc":`Kopieren Sie Ihren API-Schlüssel aus API → Konfiguration und fügen Sie das Consenti-Script-Tag zu Ihrer Website hinzu. Das Widget ruft Ihr veröffentlichtes Profil ab und zeigt das Consent-Banner automatisch an.`,"howItWorks.workflow.step5.title":`Überwachen und prüfen`,"howItWorks.workflow.step5.desc":`Nutzen Sie die Seiten Einwilligungen und Besucher, um aktuelle Consent-Datensätze einzusehen. Verwenden Sie das Audit-Log für eine manipulationssichere Historie aller Verwaltungsaktionen als Compliance-Nachweis.`,"howItWorks.features.heading":`Dashboard-Funktionen`,"howItWorks.features.dashboard.title":`Dashboard`,"howItWorks.features.dashboard.desc":`Die Startseite zeigt Echtzeit-KPIs — Gesamteinwilligungen, Akzeptanzrate, Ablehnungsrate und ein Zeitreihendiagramm. Nutzen Sie es, um Trends zu erkennen und die Auswirkungen von Banner-Änderungen zu bewerten.`,"howItWorks.features.reports.title":`Berichte`,"howItWorks.features.reports.desc":`Einwilligungsverlauf über einen Datumsbereich sowie Aufschlüsselungen nach Kategorie und Sprache (erteilt/abgelehnt/widersprochen). Erfordert die Berechtigung stats:view.`,"howItWorks.features.consentTemplates.title":`Cookie-Vorlagen`,"howItWorks.features.consentTemplates.desc":`Wiederverwendbare Listen von Cookie-Kategorien. Jede Kategorie hat eine ID, eine Rechtsgrundlage (Einwilligung, berechtigtes Interesse, notwendig), GPC-Signalverarbeitung, Ablaufzeit und optionale TCF-Anbieter- oder CPRA-Kategorie-Zuordnung.`,"howItWorks.features.uiTemplates.title":`UI-Vorlagen`,"howItWorks.features.uiTemplates.desc":`Steuert das Erscheinungsbild des Consent-Banners, des GPC-Hinweises und des Einstellungsdialogs. Konfigurieren Sie Schaltflächensätze, Überschriften-Tags, Overlay-Transparenz und Kategoriereihenfolge.`,"howItWorks.features.profiles.title":`Profile`,"howItWorks.features.profiles.desc":`Ein Profil ist die einsetzbare Einheit. Es verbindet eine Cookie-Vorlage mit einer UI-Vorlage, speichert mehrsprachige Inhalte und verfolgt eine Versionsnummer für Rollbacks. Pro Domain kann nur ein Profil aktiv sein.`,"howItWorks.features.consents.title":`Einwilligungen`,"howItWorks.features.consents.desc":`Ein durchsuchbares, filterbares Protokoll aller von Besuchern eingereichten Einwilligungsdatensätze. Jeder Datensatz zeigt Besucher-ID, verwendetes Profil, Sprache, GPC-Signal, Einwilligungsentscheidungen und Zeitstempel.`,"howItWorks.features.visitors.title":`Besucher`,"howItWorks.features.visitors.desc":`Eine Liste eindeutiger Besucherkennungen auf Ihren Websites mit Land, Erstbesuchdatum und letztem Besuchdatum. Besucher-IDs sind pseudonyme UUIDs ohne gespeicherte IP-Adressen.`,"howItWorks.features.users.title":`Benutzer`,"howItWorks.features.users.desc":`Verwalten Sie die Admin-Konten, die sich in dieses Dashboard einloggen können. Weisen Sie Rollen zu, aktivieren oder deaktivieren Sie Konten und beschränken Sie Benutzer auf bestimmte Sites in Multi-Tenant-Deployments.`,"howItWorks.features.roles.title":`Rollen`,"howItWorks.features.roles.desc":`Definieren Sie benannte Berechtigungssätze (z. B. Betrachter, Bearbeiter, Admin). Weisen Sie granulare Berechtigungen wie consent:view, profile:edit oder audit:view jeder Rolle zu und ordnen Sie Rollen dann Benutzern zu.`,"howItWorks.features.vendors.title":`Anbieter`,"howItWorks.features.vendors.desc":`Durchsuchen Sie die IAB Global Vendor List (GVL), um TCF-Anbieter-IDs, deklarierte Zwecke und Zwecke mit berechtigtem Interesse nachzuschlagen. Verwenden Sie diese IDs beim Konfigurieren von Cookie-Kategorien in Ihren Vorlagen.`,"howItWorks.features.audit.title":`Audit-Log`,"howItWorks.features.audit.desc":`Ein nur-anhängendes, manipulationssicheres Protokoll jeder Verwaltungsaktion — Profilspeicherungen, Benutzeränderungen, API-Schlüsselerstellung und mehr. Erforderlich für die DSGVO-Rechenschaftspflicht.`,"howItWorks.features.api.title":`API & Schlüssel`,"howItWorks.features.api.desc":`Erstellen und widerrufen Sie API-Token, konfigurieren Sie erlaubte CORS-Ursprünge für die öffentliche Consent-API und durchsuchen Sie die interaktive OpenAPI-Referenz, um jeden Endpunkt zu verstehen.`,"howItWorks.features.settings.title":`Einstellungen`,"howItWorks.features.settings.desc":`Sehen Sie Ihre Kontodaten ein, ändern Sie Ihr Passwort und exportieren Sie Einwilligungs- oder Audit-Daten als CSV, XLSX oder JSON für Offline-Analysen oder behördliche Einreichungen.`,"howItWorks.docs.heading":`Vollständige Dokumentation`,"howItWorks.docs.text":`Detaillierte Anleitungen, Konfigurationsreferenzen, Integrationsbeispiele und ein Live-Playground sind auf der Consenti-Dokumentationswebsite verfügbar.`,"howItWorks.docs.link":`consenti.dev/docs öffnen →`,"howItWorks.consentFlow.heading":`Einwilligungsablauf (End-to-End)`,"howItWorks.consentFlow.step1.title":`Widget initialisiert`,"howItWorks.consentFlow.step1.desc":`Das Consenti-Skript wird im Browser des Besuchers geladen und liest Ihre Konfiguration (API-Schlüssel, compliance.type). Existiert bereits ein gültiges, nicht abgelaufenes Einwilligungs-Cookie, beendet das Widget sich lautlos — kein Banner wird angezeigt.`,"howItWorks.consentFlow.step2.title":`Jurisdiktion erkannt`,"howItWorks.consentFlow.step2.desc":`Wenn compliance.type auf 'auto' gesetzt ist, ruft das Widget GET /resolve-profile auf und übergibt Zeitzone, Accept-Language-Header und IP-Adresse des Besuchers. Der Server ordnet diese Signale anhand der integrierten Länder-zu-Compliance-Zuordnung einem complianceGroup zu.`,"howItWorks.consentFlow.step3.title":`Profil abgerufen`,"howItWorks.consentFlow.step3.desc":`Das Widget ruft das aktive Profil für die ermittelte complianceGroup und die Sprache des Besuchers ab. Die Antwort ist ein flaches JSON-Objekt mit dem gesamten Bannertext, Cookie-Kategorien, UI-Einstellungen und Regulierungsflags — bereit zur Darstellung.`,"howItWorks.consentFlow.step4.title":`Banner gerendert`,"howItWorks.consentFlow.step4.desc":`Das Widget rendert das Banner oder den Einstellungsdialog anhand der UI-Vorlage des Profils. Pflicht-Kategorien sind vorausgewählt und können nicht abgewählt werden. Optionale Kategorien zeigen ihre Rechtsgrundlage (Einwilligung oder berechtigtes Interesse).`,"howItWorks.consentFlow.step5.title":`Einwilligung übermittelt`,"howItWorks.consentFlow.step5.desc":`Wenn der Besucher handelt (Alle akzeptieren, Alle ablehnen oder Einstellungen speichern), sendet das Widget einen POST-Request mit dem Einwilligungsdatensatz an die API: Besucher-ID, Profilversion, Status je Kategorie (gewährt/verweigert/widersprochen), GPC-Signal, Zeitstempel und Sprache.`,"howItWorks.consentFlow.step6.title":`Gespeichert und geprüft`,"howItWorks.consentFlow.step6.desc":`Die API validiert die Nutzlast, speichert den Einwilligungsdatensatz und fügt einen Eintrag zum unveränderlichen Audit-Log hinzu. Der Besucherdatensatz wird mit Land und Erst-/Letztbesuch aktualisiert. Das Widget schreibt das Einwilligungs-Cookie, damit zukünftige Besuche das Banner überspringen.`,"howItWorks.profileResolution.heading":`Profilauflösungsalgorithmus`,"howItWorks.profileResolution.intro":`Wenn ein Besucher ankommt, löst Consenti in fünf Schritten auf, welches Einwilligungsprofil angezeigt werden soll.`,"howItWorks.profileResolution.step1.title":`Geo-Signale gesammelt`,"howItWorks.profileResolution.step1.desc":`Das Widget sendet drei Signale an GET /resolve-profile: die Browser-Zeitzone (Intl.DateTimeFormat), den Accept-Language-Header (oder lang-Query-Parameter) und die serverseitige IP-Adresse.`,"howItWorks.profileResolution.step2.title":`Land ermittelt`,"howItWorks.profileResolution.step2.desc":`Der Server versucht der Reihe nach: (1) IP-Geolokalisierung über den konfigurierten geoDataProvider; (2) Zeitzone-zu-Land-Tabelle; (3) Sprachtag-zu-Land-Heuristik (z. B. 'de' → DE). Der erste nicht-leere Treffer gewinnt.`,"howItWorks.profileResolution.step3.title":`Compliance-Gruppe zugeordnet`,"howItWorks.profileResolution.step3.desc":`Der ISO-3166-1-alpha-2-Ländercode (plus optionaler Regions-/Bundesstaatscode) wird in der eingebetteten LAND-zu-COMPLIANCE-Zuordnung nachgeschlagen. Eine Region-Überschreibung (z. B. US/CA → optOutCalifornia) hat Vorrang vor dem Länder-Standard.`,"howItWorks.profileResolution.step4.title":`Aktives Profil gefunden`,"howItWorks.profileResolution.step4.desc":`Das System fragt die Datenbank nach dem aktiven Profil ab, dessen complianceGroup mit der aufgelösten Gruppe übereinstimmt. Pro complianceGroup kann nur ein Profil aktiv sein. Falls keines existiert, wird 404 zurückgegeben und das Widget kann auf ein profileOverride zurückfallen.`,"howItWorks.profileResolution.step5.title":`Sprache aufgelöst`,"howItWorks.profileResolution.step5.desc":`Die beste Sprache wird gewählt durch: (1) exakte Übereinstimmung mit der angeforderten Sprache des Widgets; (2) Sprachpräfix-Übereinstimmung (z. B. 'de-AT' → 'de'); (3) vom Provider aufgelöste Sprache; (4) defaultLocale des Profils. Das aufgelöste JSON wird aus einer statischen Datei (veröffentlichte Profile) oder direkt aus der Datenbank (Vorschau) geliefert.`,"howItWorks.complianceGroups.heading":`Compliance-Gruppen`,"howItWorks.complianceGroups.intro":`Jedes Land der Welt ist einer von acht Compliance-Gruppen zugeordnet. Jede Gruppe legt fest, welches Einwilligungsmodell das Widget einhalten muss.`,"howItWorks.complianceGroups.optIn.title":`optIn — DSGVO / ePrivacy Striktes Opt-In`,"howItWorks.complianceGroups.optIn.desc":`Vor dem Setzen nicht notwendiger Cookies ist eine vorherige Einwilligung erforderlich. Besucher müssen die Möglichkeit haben, abzulehnen; der Widerruf muss so einfach sein wie die Einwilligung; granulare Kategorieauswahl ist Pflicht.`,"howItWorks.complianceGroups.optIn.laws":`DSGVO, ePrivacy-Richtlinie, UK DSGVO, PECR, revDSG (CH), KVKK (TR), PDPA (TH) und weitere strenge nationale Gesetze`,"howItWorks.complianceGroups.optIn.countries":`Alle EU-Mitgliedstaaten, UK, Schweiz, Türkei, Thailand, Island, Liechtenstein, Norwegen, Guernsey, Gibraltar und weitere Länder mit strikten ePrivacy-Regeln`,"howItWorks.complianceGroups.optInDPDPA.title":`optInDPDPA — Indien DPDPA`,"howItWorks.complianceGroups.optInDPDPA.desc":`Indiens Digital Personal Data Protection Act 2023 erfordert eine ausdrückliche Opt-in-Einwilligung. Zusätzliche Pflichten: Benennung eines Data Fiduciary, dedizierte Einwilligungsmitteilung und Unterstützung der Rechte von Data Principals. Setzen Sie das Feld dpdpaDataFiduciary in Ihrem Profil.`,"howItWorks.complianceGroups.optInDPDPA.laws":`Digital Personal Data Protection Act 2023 (DPDPA)`,"howItWorks.complianceGroups.optInDPDPA.countries":`Indien (IN)`,"howItWorks.complianceGroups.optInChina.title":`optInChina — China Multi-Gesetzes-Rahmen`,"howItWorks.complianceGroups.optInChina.desc":`Chinas Datenschutz erfordert ausdrückliche Einwilligung gemäß PIPL, ergänzt durch Pflichten aus dem Datensicherheitsgesetz (DSL) und dem Cybersicherheitsgesetz (CSL). Weitere Anforderungen gelten für grenzüberschreitende Datenübermittlungen und Datenklassifizierung.`,"howItWorks.complianceGroups.optInChina.laws":`Datenschutzgesetz für personenbezogene Daten (PIPL), Datensicherheitsgesetz (DSL), Cybersicherheitsgesetz (CSL)`,"howItWorks.complianceGroups.optInChina.countries":`China (CN)`,"howItWorks.complianceGroups.optOutCalifornia.title":`optOutCalifornia — Kalifornien CCPA / CPRA`,"howItWorks.complianceGroups.optOutCalifornia.desc":`Daten dürfen standardmäßig erhoben werden, aber Verbraucher müssen eine klare Opt-out-Möglichkeit erhalten. Das Global Privacy Control (GPC)-Browsersignal muss als gültiger Opt-out anerkannt werden.`,"howItWorks.complianceGroups.optOutCalifornia.laws":`CCPA, CPRA (California Consumer Privacy Act / California Privacy Rights Act)`,"howItWorks.complianceGroups.optOutCalifornia.countries":`USA — Kalifornien (US/CA)`,"howItWorks.complianceGroups.optOutUSState.title":`optOutUSState — Andere US-Bundesstaaten`,"howItWorks.complianceGroups.optOutUSState.desc":`Nach dem Vorbild des kalifornischen Opt-out-Rahmens. Verbraucher können der Nutzung für zielgerichtete Werbung und dem Verkauf personenbezogener Daten widersprechen. In einigen Bundesstaaten muss das GPC-Signal anerkannt werden.`,"howItWorks.complianceGroups.optOutUSState.laws":`CDPA (VA), CPA (CO), CTDPA (CT), UCPA (UT), TDPSA (TX), DPDPA (DE), NJDPA (NJ), OCPA (OR), MCDPA (MN), MODPA (MD), KCDPA (KY), TIPA (TN), NDPA (NE), ICDPA (IA/IN), MCDPA (MT), NHPA (NH), RIDTPA (RI)`,"howItWorks.complianceGroups.optOutUSState.countries":`USA — VA, CO, CT, UT, TX, DE, NJ, OR, MN, MD, KY, TN, NE, IA, IN, MT, NH, RI`,"howItWorks.complianceGroups.generalPrivacyConsent.title":`generalPrivacyConsent — Allgemeines Datenschutz-Recht`,"howItWorks.complianceGroups.generalPrivacyConsent.desc":`Ein allgemeines Datenschutzgesetz gilt, schreibt aber kein striktes PECR-/ePrivacy-artiges Cookie-Banner vor. Best Practice ist eine Einwilligungsmöglichkeit für nicht notwendige Cookies und eine klare Datenschutzmitteilung; die rechtliche Anforderung liegt jedoch unter dem DSGVO-Opt-in-Standard.`,"howItWorks.complianceGroups.generalPrivacyConsent.laws":`PIPEDA / Law 25 (CA), LGPD (BR — hybridBrazil verwenden), POPIA (ZA), APPI (JP), Privacy Act (AU/NZ), PDPA-SG, PDPA-MY, PIPA-KR, PDPD-VN, DPA-PH, PDP-ID und viele weitere`,"howItWorks.complianceGroups.generalPrivacyConsent.countries":`Kanada, Australien, Neuseeland, Japan, Südkorea, Singapur, Malaysia, Südafrika sowie viele lateinamerikanische, afrikanische und asiatische Länder`,"howItWorks.complianceGroups.hybridBrazil.title":`hybridBrazil — Brasilien LGPD`,"howItWorks.complianceGroups.hybridBrazil.desc":`Brasiliens LGPD ähnelt der DSGVO, erlaubt jedoch je nach Bewertung des Verantwortlichen für Analyse- und Werbecookies berechtigte Interessen als Rechtsgrundlage. Das Banner wird angezeigt, aber die kategorienspezifische Rechtsgrundlage kann differenzierter sein als beim strikten DSGVO-Opt-in.`,"howItWorks.complianceGroups.hybridBrazil.laws":`Lei Geral de Proteção de Dados (LGPD)`,"howItWorks.complianceGroups.hybridBrazil.countries":`Brasilien (BR)`,"howItWorks.complianceGroups.noticeOnly.title":`noticeOnly — Nur Datenschutzhinweis`,"howItWorks.complianceGroups.noticeOnly.desc":`Es gilt keine spezielle Cookie-Regelung, oder das geltende Regime erfordert lediglich einen Datenschutzhinweis — kein Opt-in- oder Opt-out-Banner. Ein Consent-Banner wird aus Transparenzgründen empfohlen, ist aber nicht gesetzlich vorgeschrieben.`,"howItWorks.complianceGroups.noticeOnly.laws":`Variiert — Länder ohne dedizierte Cookie-/ePrivacy-Regelung`,"howItWorks.complianceGroups.noticeOnly.countries":`Viele Länder in Afrika, Zentralasien, der Karibik und dem Pazifikraum, die nicht durch die oben genannten Gruppen abgedeckt sind`,"howItWorks.enums.heading":`Referenz wichtiger Werte`,"howItWorks.enums.legalBasis.heading":`legalBasis (Cookie-Kategorie)`,"howItWorks.enums.legalBasis.mandatory":`mandatory — Kategorie ist unabhängig von der Einwilligung immer aktiv (z. B. Sitzung, Authentifizierung). Wird nicht durch GPC oder Opt-out-Signale blockiert.`,"howItWorks.enums.legalBasis.consent":`consent — Erfordert ausdrückliches Opt-in des Besuchers. Standardmäßig blockiert; in allen Opt-in-Jurisdiktionen durch GPC blockiert.`,"howItWorks.enums.legalBasis.legitimateInterest":`legitimate_interest — Stützt sich auf das berechtigte Interesse des Verantwortlichen. Standardmäßig aktiv; Besucher kann widersprechen. In einigen Jurisdiktionen (EU, UK) durch GPC soft-blockiert.`,"howItWorks.enums.consentStatus.heading":`ConsentStatus (je Kategorie-Datensatz)`,"howItWorks.enums.consentStatus.granted":`granted — Besucher hat ausdrücklich eingewilligt.`,"howItWorks.enums.consentStatus.denied":`denied — Besucher hat die Einwilligung ausdrücklich verweigert.`,"howItWorks.enums.consentStatus.objected":`objected — Besucher hat einer Kategorie mit berechtigtem Interesse widersprochen (Opt-out, keine Einwilligungsverweigerung).`,"howItWorks.enums.geoProvider.heading":`geoDataProvider-Optionen`,"howItWorks.enums.geoProvider.default":`default / timezone — Nutzt die Browser-Zeitzone (Intl.DateTimeFormat) zur Länderermittlung; Rückfall auf Accept-Language. Keine zusätzliche Abhängigkeit.`,"howItWorks.enums.geoProvider.language":`language — Leitet das Land nur aus dem Accept-Language-Header ab (z. B. 'de' → DE, 'pt' → BR). Schnell, aber ungenau.`,"howItWorks.enums.geoProvider.geoip":`geoip — Verwendet das npm-Paket geoip-lite mit einer gebündelten MaxMind-Lite-Datenbank. Erforderlich: npm install geoip-lite.`,"howItWorks.enums.geoProvider.hostedGeoipLite":`hosted-geoip-lite — Ruft ipinfo.io über integriertes HTTPS auf (keine zusätzliche Abhängigkeit). Fügt ~50–200 ms je Erstbesuch hinzu.`,"howItWorks.enums.geoProvider.maxmind":`maxmind — Verwendet das npm-Paket maxmind mit einer lokalen GeoLite2-City.mmdb-Datei. Am genauesten. Erfordert MAXMIND_DB_PATH-Umgebungsvariable und npm install maxmind.`,"howItWorks.enums.geoProvider.custom":`Benutzerdefinierte Funktion — Übergeben Sie eine CountryResolverFn an compliance.geoDataProvider, um einen beliebigen Geo-IP- oder CDN-Anbieter zu integrieren.`,"consentTemplates.editor.categories":`Consent Categories`,"consentTemplates.editor.addCategory":`+ Add Category`,"consentTemplates.editor.noCategories":`No categories defined yet. Add one above.`,"consentTemplates.editor.error.noCategories":`At least one category is required.`,"consentTemplates.editor.error.catIds":`All categories must have an ID.`,"consentTemplates.editor.error.uniqueCatIds":`Category IDs must be unique.`,"consentTemplates.editor.error.catCookies":`Every category must contain at least one parameter.`,"consentTemplates.editor.error.uncategorized":`Parameter "{{id}}" is not assigned to any category.`,"consentTemplates.editor.error.multiCategory":`Parameter "{{id}}" is assigned to more than one category.`,"consentTemplates.editor.error.purposeLegalBasisMismatch":`Parameter "{{id}}" has a non-necessary purpose but is assigned to a Mandatory category — this grants a tracking parameter with no consent gate.`,"consentTemplates.editor.warning.necessaryNotMandatory":`Parameter "{{id}}" has purpose "necessary" but is assigned to a non-Mandatory category — this may break site functionality since it can be denied.`,"cookieTemplates.editor.trackerDetected":`Erkannt: {{vendor}}`,"consentTemplates.col.preGrantShort":`Pre Grant`,"profileEditor.config.expiryDays":`Re-consent Interval (days)`,"profileEditor.config.expiryDaysHint":`How many days until stored consent expires and the visitor is asked again.`,"profileEditor.error.expiryDays":`Expiry (days) must be at least 1.`,"profileEditor.error.customComplianceGroupRequired":`Enter a custom group name, or pick a compliance group above.`,"profileEditor.table.preGrant":`Pre Grant`,"profileEditor.table.preGrantLocked":`Already effectively pre-granted — only editable when the category's legal basis is Consent`,"profileEditor.content.receiptHeading":`Consent Receipt Checkbox`,"profileEditor.content.receiptHint":`Shown in the preference modal when "Allow consent receipt" is enabled in Step 1.`,"profileEditor.content.receiptLabel":`Checkbox label`,"profileEditor.content.receiptDescription":`Description`,"profileEditor.content.forgetMeHeading":`Schaltfläche „Vergiss mich“`,"profileEditor.content.forgetMeHint":`Wird im Präferenz-Modal unterhalb der Kategorien angezeigt, wenn „Schaltfläche 'Vergiss mich' anzeigen“ im Präferenz-Modal-Schritt der verknüpften UI-Vorlage aktiviert ist.`,"profileEditor.content.forgetMeLabel":`Button-Beschriftung`,"profileEditor.content.ageGateModal.heading":`Altersprüfungs-Dialog`,"profileEditor.content.ageGateModal.headingPlaceholder":`Bist du 16 Jahre oder älter?`,"profileEditor.content.ageGateModal.bodyText":`Haupttext`,"profileEditor.content.ageGateModal.bodyPlaceholder":`Bitte bestätige dein Alter, bevor wir dir die Cookie-Einstellungen anzeigen.`,"profileEditor.content.ageGateModal.confirmButtonLabel":`Beschriftung „Ja“-Schaltfläche`,"profileEditor.content.ageGateModal.confirmButtonPlaceholder":`Ja`,"profileEditor.content.ageGateModal.denyButtonLabel":`Beschriftung „Nein“-Schaltfläche`,"profileEditor.content.ageGateModal.denyButtonPlaceholder":`Nein`,"profileEditor.content.ageGateModal.parentalConsent.heading":`Nachricht zur elterlichen Einwilligung`,"profileEditor.content.ageGateModal.parentalConsent.headingPlaceholder":`Elterliche Einwilligung erforderlich`,"profileEditor.content.ageGateModal.parentalConsent.bodyText":`Haupttext`,"profileEditor.content.ageGateModal.parentalConsent.bodyPlaceholder":`Bis ein Elternteil oder Erziehungsberechtigter die Einwilligung bestätigt, werden nur unbedingt erforderliche Cookies verwendet.`,"profileEditor.content.ageGateModal.parentalConsent.confirmButtonLabel":`Beschriftung „OK“-Schaltfläche`,"profileEditor.content.ageGateModal.parentalConsent.confirmButtonPlaceholder":`OK`,"profileEditor.content.ageGateModal.loadDefaultsTitle":`Diesen Abschnitt mit allgemeinem Standardtext für diese Sprache füllen`,"profileEditor.error.missingRequiredContent":`Für die Sprache „{{locale}}“ fehlen erforderliche Inhalte — prüfen Sie den markierten Tab.`,"profileEditor.error.saveFailedMoreFields":`(und {{count}} weitere Feld(er) benötigen Ihre Aufmerksamkeit)`,"profileEditor.nudge.title":`Optionales Feld leer gelassen`,"profileEditor.nudge.headingBlank":`Sie haben die Überschrift leer gelassen. Besucher sehen das Banner ohne Titel.`,"profileEditor.nudge.introBlank":`Sie haben den Einleitungstext leer gelassen. Besucher sehen das Einstellungsfenster ohne Einleitung.`,"profileEditor.nudge.addNow":`Jetzt hinzufügen`,"profileEditor.nudge.ignore":`Ignorieren`,"profiles.error.delete":`Profil konnte nicht gelöscht werden.`};export{e as default};
@@ -0,0 +1 @@
1
+ function e(){return typeof process>`u`||{}.NO_COLOR?!1:{}.FORCE_COLOR?!0:!!process.stdout?.isTTY}function t(t,n){return r=>e()?`\x1b[${t}m${r}\x1b[${n}m`:r}var n={bold:t(1,22),dim:t(2,22),red:t(31,39),green:t(32,39),yellow:t(33,39),blue:t(34,39),magenta:t(35,39),cyan:t(36,39),gray:t(90,39)};n.cyan,n.green,n.yellow,n.red;var r={"opt-out-strict":{label:`Opt-out Strict (CPRA / California)`,description:`California CPRA: opt-out with sale/sharing/sensitive categories required. GPC must be honored. Stricter than general US state laws.`,compliances:[`cpra`],defaultGpc:`honor`,gpcAutoHonor:!0,allowsLegitimateInterest:!1,allowsTcf:!1,requiresCpraCategory:!0,requiresDpdpaDisclosure:!1},"opt-out":{label:`Opt-out (US State Laws)`,description:`US state privacy laws. Collect first, allow opt-out of sale/share. Covers CCPA and all state-level equivalents.`,compliances:[`ccpa`,`vcdpa`,`cpa-co`,`ctdpa`,`ucpa`,`icdpa-ia`,`icdpa-in`,`tipa`,`mcdpa-mt`,`mcdpa-mn`,`ocpa`,`tdpsa`,`dpdpa-de`,`njdpa`,`nhpa`,`ndpa-ne`,`modpa`,`kcdpa`,`ridtpa`],defaultGpc:`honor`,gpcAutoHonor:!0,allowsLegitimateInterest:!1,allowsTcf:!1,requiresCpraCategory:!1,requiresDpdpaDisclosure:!1},"notice-only":{label:`Notice Only`,description:`A privacy notice is generally sufficient. No dedicated cookie banner law is encoded for this jurisdiction.`,compliances:[`privacy-fj`,`privacy-pg`],defaultGpc:`ignore`,gpcAutoHonor:!1,allowsLegitimateInterest:!0,allowsTcf:!1,requiresCpraCategory:!1,requiresDpdpaDisclosure:!1},"opt-in":{label:`Standard Opt-in (GDPR)`,description:`GDPR / ePrivacy style: prior consent required before non-essential cookies. Granular consent, easy reject, easy withdrawal.`,compliances:[`gdpr`,`eprivacy`,`uk-gdpr`,`pecr`,`revfadp`,`kvkk`,`pdpa-th`,`pdpl-sa`,`uae-pdpl`,`difc-dpl`,`adgm-dpr`,`qpdl-qa`,`pdpl-bh`,`pdpl-om`,`law25`],defaultGpc:`ignore`,gpcAutoHonor:!1,allowsLegitimateInterest:!0,allowsTcf:!0,requiresCpraCategory:!1,requiresDpdpaDisclosure:!1},"opt-in-dpdpa":{label:`Opt-in (India DPDPA)`,description:`India's Digital Personal Data Protection Act. Opt-in consent with data fiduciary disclosure. No legitimate interest basis.`,compliances:[`dpdpa`],defaultGpc:`ignore`,gpcAutoHonor:!1,allowsLegitimateInterest:!1,allowsTcf:!1,requiresCpraCategory:!1,requiresDpdpaDisclosure:!0},"opt-in-china":{label:`Opt-in (China PIPL / DSL)`,description:`China PIPL + DSL + CSL: strict opt-in with purpose specification, data minimisation, and cross-border transfer controls.`,compliances:[`pipl`,`dsl-cn`,`csl-cn`],defaultGpc:`ignore`,gpcAutoHonor:!1,allowsLegitimateInterest:!1,allowsTcf:!1,requiresCpraCategory:!1,requiresDpdpaDisclosure:!1},"opt-in-brazil":{label:`Opt-in (Brazil LGPD)`,description:`Brazil LGPD: opt-in consent required. Legitimate interest is a valid basis. Analytics and advertising may differ in treatment.`,compliances:[`lgpd`],defaultGpc:`ignore`,gpcAutoHonor:!1,allowsLegitimateInterest:!0,allowsTcf:!1,requiresCpraCategory:!1,requiresDpdpaDisclosure:!1},"general-privacy-consent":{label:`General Privacy Consent`,description:`Privacy notice or consent rules exist but the jurisdiction does not have a GDPR/PECR-style strict cookie banner law. Documenting legal basis is best practice.`,compliances:`pipeda.popia.appi.pipa-kr.pdpa-sg.pdpa-my.dpa-ph.pdp-id.pdpd-vn.privacy-au.privacy-nz.pdpl-hk.pdpa-mo.pdpl-tw.privacy-bn.privacy-lk.privacy-np.privacy-kw.privacy-il.ndpa-ng.dpa-ke.dpa-gh.dpa-ug.dpa-rw.dpa-mu.dpa-bw.dpa-zm.dpa-zw.dpa-eg.dpa-ma.dpa-tn.dpa-dz.lfpdppp.lpdp-ar.lpdp-pe.law1581-co.law18331-uy.law19628-cl.lopdp-ec.lpdp-cr.data-protection-pa.data-protection-do`.split(`.`),defaultGpc:`ignore`,gpcAutoHonor:!1,allowsLegitimateInterest:!0,allowsTcf:!1,requiresCpraCategory:!1,requiresDpdpaDisclosure:!1}},i=[{value:`ignore`,label:`Ignore`,description:`Do not check or respond to the GPC browser signal.`},{value:`honor`,label:`Honor`,description:`Respect GPC as a valid opt-out signal. Show GPC variant banner once.`},{value:`strict`,label:`Strict`,description:`Silently deny all non-mandatory cookies when GPC is detected. No banner shown.`}],a=[`necessary`,`functional`,`preferences`,`analytics`,`marketing`],o={necessary:{legalBasis:`mandatory`,listenGpc:!1},functional:{legalBasis:`legitimate_interest`,listenGpc:!1},preferences:{legalBasis:`legitimate_interest`,listenGpc:!1},analytics:{legalBasis:`consent`,listenGpc:!0},marketing:{legalBasis:`consent`,listenGpc:!0,cpraCategory:`sharing`}},s={security_storage:`necessary`,functionality_storage:`functional`,personalization_storage:`preferences`,analytics_storage:`analytics`,ad_storage:`marketing`,ad_user_data:`marketing`,ad_personalization:`marketing`};function c(e){let t=new Map;for(let n of Object.values(e))for(let e of n.cookies)t.set(e,n);return t}function l(e,t){return t.get(e)?.legalBasis??`consent`}function u(e,t){return l(e,t)===`mandatory`}var d={version:`2026-07`,countries:{AT:{name:`Austria`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Austria (GDPR)`,locales:[`de-AT`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Vienna`]},BE:{name:`Belgium`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Belgium (GDPR)`,locales:[`nl-BE`,`fr-BE`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Brussels`]},BG:{name:`Bulgaria`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Bulgaria (GDPR)`,locales:[`bg-BG`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Sofia`]},HR:{name:`Croatia`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Croatia (GDPR)`,locales:[`hr-HR`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Zagreb`]},CY:{name:`Cyprus`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Cyprus (GDPR)`,locales:[`el-CY`],compliance:[`gdpr`,`eprivacy`],timezones:[`Asia/Nicosia`]},CZ:{name:`Czechia`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Czechia (GDPR)`,locales:[`cs-CZ`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Prague`]},DK:{name:`Denmark`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Denmark (GDPR)`,locales:[`da-DK`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Copenhagen`]},EE:{name:`Estonia`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Estonia (GDPR)`,locales:[`et-EE`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Tallinn`]},FI:{name:`Finland`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Finland (GDPR)`,locales:[`fi-FI`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Helsinki`]},FR:{name:`France`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`France (GDPR)`,locales:[`fr-FR`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Paris`]},DE:{name:`Germany`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Germany (GDPR)`,locales:[`de-DE`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Berlin`]},GR:{name:`Greece`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Greece (GDPR)`,locales:[`el-GR`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Athens`]},HU:{name:`Hungary`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Hungary (GDPR)`,locales:[`hu-HU`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Budapest`]},IE:{name:`Ireland`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Ireland (GDPR)`,locales:[`en`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Dublin`]},IT:{name:`Italy`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Italy (GDPR)`,locales:[`it-IT`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Rome`]},LV:{name:`Latvia`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Latvia (GDPR)`,locales:[`lv-LV`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Riga`]},LT:{name:`Lithuania`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Lithuania (GDPR)`,locales:[`lt-LT`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Vilnius`]},LU:{name:`Luxembourg`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Luxembourg (GDPR)`,locales:[`fr-LU`,`de-LU`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Luxembourg`]},MT:{name:`Malta`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Malta (GDPR)`,locales:[`mt-MT`,`en`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Malta`]},NL:{name:`Netherlands`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Netherlands (GDPR)`,locales:[`nl-NL`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Amsterdam`]},PL:{name:`Poland`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Poland (GDPR)`,locales:[`pl-PL`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Warsaw`]},PT:{name:`Portugal`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Portugal (GDPR)`,locales:[`pt-PT`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Lisbon`,`Atlantic/Madeira`,`Atlantic/Azores`]},RO:{name:`Romania`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Romania (GDPR)`,locales:[`ro-RO`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Bucharest`]},SK:{name:`Slovakia`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Slovakia (GDPR)`,locales:[`sk-SK`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Bratislava`]},SI:{name:`Slovenia`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Slovenia (GDPR)`,locales:[`sl-SI`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Ljubljana`]},ES:{name:`Spain`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Spain (GDPR)`,locales:[`es-ES`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Madrid`,`Africa/Ceuta`,`Atlantic/Canary`]},SE:{name:`Sweden`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Sweden (GDPR)`,locales:[`sv-SE`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Stockholm`]},IS:{name:`Iceland`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Iceland (GDPR via EEA)`,locales:[`is-IS`],compliance:[`gdpr`,`eprivacy`],timezones:[`Atlantic/Reykjavik`]},LI:{name:`Liechtenstein`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Liechtenstein (GDPR via EEA)`,locales:[`de-LI`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Vaduz`]},NO:{name:`Norway`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Norway (GDPR via EEA)`,locales:[`nb-NO`],compliance:[`gdpr`,`eprivacy`],timezones:[`Europe/Oslo`,`Arctic/Longyearbyen`]},AD:{name:`Andorra`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Andorra (GDPR-aligned)`,locales:[`ca-AD`],compliance:[`gdpr`],timezones:[`Europe/Andorra`]},AL:{name:`Albania`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Albania (GDPR-aligned)`,locales:[`sq-AL`],compliance:[`gdpr`],timezones:[`Europe/Tirane`]},BA:{name:`Bosnia and Herzegovina`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Bosnia and Herzegovina (GDPR-aligned)`,locales:[`bs-BA`,`sr-Latn-BA`],compliance:[`gdpr`],timezones:[`Europe/Sarajevo`]},GG:{name:`Guernsey`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Guernsey (DPA based on GDPR)`,locales:[`en`],compliance:[`gdpr`],timezones:[`Europe/Guernsey`]},GI:{name:`Gibraltar`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Gibraltar (DPA based on UK GDPR)`,locales:[`en`],compliance:[`uk-gdpr`],timezones:[`Europe/Gibraltar`]},GL:{name:`Greenland`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Greenland (Danish GDPR implementation)`,locales:[`da-GL`],compliance:[`gdpr`],timezones:[`America/Nuuk`,`America/Danmarkshavn`,`America/Scoresbysund`,`America/Thule`]},MC:{name:`Monaco`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Monaco (GDPR-aligned)`,locales:[`fr-MC`],compliance:[`gdpr`],timezones:[`Europe/Monaco`]},ME:{name:`Montenegro`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Montenegro (GDPR-aligned)`,locales:[`sr-Latn-ME`],compliance:[`gdpr`],timezones:[`Europe/Podgorica`]},MK:{name:`North Macedonia`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`North Macedonia (GDPR-aligned)`,locales:[`mk-MK`],compliance:[`gdpr`],timezones:[`Europe/Skopje`]},RS:{name:`Serbia`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Serbia (GDPR-aligned)`,locales:[`sr-RS`],compliance:[`gdpr`],timezones:[`Europe/Belgrade`]},SM:{name:`San Marino`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`San Marino (GDPR-aligned)`,locales:[`it-SM`],compliance:[`gdpr`],timezones:[`Europe/San_Marino`]},TR:{name:`Türkiye`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Türkiye (KVKK)`,locales:[`tr-TR`],compliance:[`kvkk`],timezones:[`Europe/Istanbul`]},CA:{name:`Canada`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Canada (PIPEDA / Law 25)`,locales:[`en`,`fr-CA`],compliance:[`pipeda`,`law25`],timezones:[`America/St_Johns`,`America/Halifax`,`America/Toronto`,`America/Winnipeg`,`America/Edmonton`,`America/Vancouver`],overriddenRegions:{QC:{name:`Quebec`,type:`region`,complianceGroup:`opt-in`,description:`Quebec — Law 25 (GDPR-style opt-in)`}}},US:{name:`United States`,type:`country`,complianceGroup:`opt-out`,default:`opt-out-strict`,description:`United States — opt-out-strict (CPRA) used when state cannot be detected`,locales:[`en`,`es-US`],compliance:[`ccpa`,`cpra`,`vcdpa`,`cpa-co`,`ctdpa`,`ucpa`,`icdpa-ia`,`icdpa-in`,`tipa`,`mcdpa-mt`,`mcdpa-mn`,`ocpa`,`tdpsa`,`dpdpa-de`,`njdpa`,`nhpa`,`ndpa-ne`,`modpa`,`kcdpa`,`ridtpa`],timezones:[`America/New_York`,`America/Chicago`,`America/Denver`,`America/Phoenix`,`America/Los_Angeles`,`America/Anchorage`,`Pacific/Honolulu`],overriddenRegions:{CA:{name:`California`,type:`region`,complianceGroup:`opt-out-strict`,description:`California — CPRA/CCPA`},VA:{name:`Virginia`,type:`region`,complianceGroup:`opt-out`,description:`Virginia — VCDPA`},CO:{name:`Colorado`,type:`region`,complianceGroup:`opt-out`,description:`Colorado — CPA`,requiresSensitiveOptIn:!0},CT:{name:`Connecticut`,type:`region`,complianceGroup:`opt-out`,description:`Connecticut — CTDPA`},UT:{name:`Utah`,type:`region`,complianceGroup:`opt-out`,description:`Utah — UCPA`},TX:{name:`Texas`,type:`region`,complianceGroup:`opt-out`,description:`Texas — TDPSA`},DE:{name:`Delaware`,type:`region`,complianceGroup:`opt-out`,description:`Delaware — DPDPA`},NJ:{name:`New Jersey`,type:`region`,complianceGroup:`opt-out`,description:`New Jersey — NJDPA`},OR:{name:`Oregon`,type:`region`,complianceGroup:`opt-out`,description:`Oregon — OCPA`},MN:{name:`Minnesota`,type:`region`,complianceGroup:`opt-out`,description:`Minnesota — MCDPA`},MD:{name:`Maryland`,type:`region`,complianceGroup:`opt-out`,description:`Maryland — MODPA`},KY:{name:`Kentucky`,type:`region`,complianceGroup:`opt-out`,description:`Kentucky — KCDPA`},TN:{name:`Tennessee`,type:`region`,complianceGroup:`opt-out`,description:`Tennessee — TIPA`},NE:{name:`Nebraska`,type:`region`,complianceGroup:`opt-out`,description:`Nebraska — NDPA`},IA:{name:`Iowa`,type:`region`,complianceGroup:`opt-out`,description:`Iowa — ICDPA`},IN:{name:`Indiana`,type:`region`,complianceGroup:`opt-out`,description:`Indiana — ICDPA`},MT:{name:`Montana`,type:`region`,complianceGroup:`opt-out`,description:`Montana — MCDPA`},NH:{name:`New Hampshire`,type:`region`,complianceGroup:`opt-out`,description:`New Hampshire — NHPA`},RI:{name:`Rhode Island`,type:`region`,complianceGroup:`opt-out`,description:`Rhode Island — RIDTPA`}}},AR:{name:`Argentina`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Argentina (LPDP)`,locales:[`es-AR`],compliance:[`lpdp-ar`],timezones:[`America/Argentina/Buenos_Aires`]},BO:{name:`Bolivia`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Bolivia`,locales:[`es-BO`],compliance:[],timezones:[`America/La_Paz`]},BR:{name:`Brazil`,type:`country`,complianceGroup:`opt-in-brazil`,default:`opt-in-brazil`,description:`Brazil (LGPD)`,locales:[`pt-BR`],compliance:[`lgpd`],timezones:[`America/Noronha`,`America/Sao_Paulo`,`America/Manaus`,`America/Rio_Branco`]},CL:{name:`Chile`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Chile (Law 19.628)`,locales:[`es-CL`],compliance:[`law19628-cl`],timezones:[`America/Santiago`,`Pacific/Easter`]},CO:{name:`Colombia`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Colombia (Law 1581)`,locales:[`es-CO`],compliance:[`law1581-co`],timezones:[`America/Bogota`]},CR:{name:`Costa Rica`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Costa Rica (LPDP)`,locales:[`es-CR`],compliance:[`lpdp-cr`],timezones:[`America/Costa_Rica`]},DO:{name:`Dominican Republic`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Dominican Republic`,locales:[`es-DO`],compliance:[`data-protection-do`],timezones:[`America/Santo_Domingo`]},EC:{name:`Ecuador`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Ecuador (LOPDP)`,locales:[`es-EC`],compliance:[`lopdp-ec`],timezones:[`America/Guayaquil`,`Pacific/Galapagos`]},GF:{name:`French Guiana`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`French Guiana`,locales:[`fr-GF`],compliance:[],timezones:[`America/Cayenne`]},GT:{name:`Guatemala`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Guatemala`,locales:[`es-GT`],compliance:[],timezones:[`America/Guatemala`]},GY:{name:`Guyana`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Guyana`,locales:[`en`],compliance:[],timezones:[`America/Guyana`]},HN:{name:`Honduras`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Honduras`,locales:[`es-HN`],compliance:[],timezones:[`America/Tegucigalpa`]},HT:{name:`Haiti`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Haiti`,locales:[`fr-HT`],compliance:[],timezones:[`America/Port-au-Prince`]},JM:{name:`Jamaica`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Jamaica`,locales:[`en`],compliance:[],timezones:[`America/Jamaica`]},MX:{name:`Mexico`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Mexico (LFPDPPP)`,locales:[`es-MX`],compliance:[`lfpdppp`],timezones:[`America/Mexico_City`,`America/Cancun`,`America/Chihuahua`,`America/Hermosillo`,`America/Tijuana`]},NI:{name:`Nicaragua`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Nicaragua`,locales:[`es-NI`],compliance:[],timezones:[`America/Managua`]},PA:{name:`Panama`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Panama`,locales:[`es-PA`],compliance:[`data-protection-pa`],timezones:[`America/Panama`]},PE:{name:`Peru`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Peru (LPDP)`,locales:[`es-PE`],compliance:[`lpdp-pe`],timezones:[`America/Lima`]},PY:{name:`Paraguay`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Paraguay`,locales:[`es-PY`],compliance:[],timezones:[`America/Asuncion`]},SR:{name:`Suriname`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Suriname`,locales:[`nl-SR`],compliance:[],timezones:[`America/Paramaribo`]},SV:{name:`El Salvador`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`El Salvador`,locales:[`es-SV`],compliance:[],timezones:[`America/El_Salvador`]},TT:{name:`Trinidad and Tobago`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Trinidad and Tobago`,locales:[`en`],compliance:[],timezones:[`America/Port_of_Spain`]},UY:{name:`Uruguay`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Uruguay (Law 18.331)`,locales:[`es-UY`],compliance:[`law18331-uy`],timezones:[`America/Montevideo`]},VE:{name:`Venezuela`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Venezuela`,locales:[`es-VE`],compliance:[],timezones:[`America/Caracas`]},AG:{name:`Antigua and Barbuda`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Antigua and Barbuda`,locales:[`en`],compliance:[],timezones:[`America/Antigua`]},BB:{name:`Barbados`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Barbados`,locales:[`en`],compliance:[],timezones:[`America/Barbados`]},BL:{name:`Saint Barthélemy`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Saint Barthélemy`,locales:[`fr-BL`],compliance:[],timezones:[`America/St_Barthelemy`]},BM:{name:`Bermuda`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Bermuda`,locales:[`en`],compliance:[],timezones:[`Atlantic/Bermuda`]},BS:{name:`Bahamas`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Bahamas`,locales:[`en`],compliance:[],timezones:[`America/Nassau`]},CU:{name:`Cuba`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Cuba`,locales:[`es-CU`],compliance:[],timezones:[`America/Havana`]},DM:{name:`Dominica`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Dominica`,locales:[`en`],compliance:[],timezones:[`America/Dominica`]},GD:{name:`Grenada`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Grenada`,locales:[`en`],compliance:[],timezones:[`America/Grenada`]},KN:{name:`Saint Kitts and Nevis`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Saint Kitts and Nevis`,locales:[`en`],compliance:[],timezones:[`America/St_Kitts`]},LC:{name:`Saint Lucia`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Saint Lucia`,locales:[`en`],compliance:[],timezones:[`America/St_Lucia`]},PM:{name:`Saint Pierre and Miquelon`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Saint Pierre and Miquelon`,locales:[`fr-PM`],compliance:[],timezones:[`America/Miquelon`]},PR:{name:`Puerto Rico`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Puerto Rico`,locales:[`es-PR`,`en`],compliance:[],timezones:[`America/Puerto_Rico`]},VC:{name:`Saint Vincent and the Grenadines`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Saint Vincent and the Grenadines`,locales:[`en`],compliance:[],timezones:[`America/St_Vincent`]},IN:{name:`India`,type:`country`,complianceGroup:`opt-in-dpdpa`,default:`opt-in-dpdpa`,description:`India (DPDPA)`,locales:[`hi-IN`,`en`,`bn-IN`,`ta-IN`],compliance:[`dpdpa`],timezones:[`Asia/Kolkata`,`Asia/Calcutta`]},CN:{name:`China`,type:`country`,complianceGroup:`opt-in-china`,default:`opt-in-china`,description:`China (PIPL + DSL + CSL)`,locales:[`zh-CN`],compliance:[`pipl`,`dsl-cn`,`csl-cn`],timezones:[`Asia/Shanghai`]},BN:{name:`Brunei`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Brunei (Personal Data Protection Order)`,locales:[`ms-BN`,`en`],compliance:[`privacy-bn`],timezones:[`Asia/Brunei`]},ID:{name:`Indonesia`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Indonesia (PDP Law)`,locales:[`id-ID`],compliance:[`pdp-id`],timezones:[`Asia/Jakarta`,`Asia/Makassar`,`Asia/Jayapura`]},KH:{name:`Cambodia`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Cambodia`,locales:[`km-KH`],compliance:[],timezones:[`Asia/Phnom_Penh`]},LA:{name:`Laos`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Laos`,locales:[`lo-LA`],compliance:[],timezones:[`Asia/Vientiane`]},MM:{name:`Myanmar`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Myanmar`,locales:[`my-MM`],compliance:[],timezones:[`Asia/Yangon`]},MY:{name:`Malaysia`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Malaysia (PDPA)`,locales:[`ms-MY`,`zh-MY`,`en`],compliance:[`pdpa-my`],timezones:[`Asia/Kuala_Lumpur`,`Asia/Kuching`]},PH:{name:`Philippines`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Philippines (DPA)`,locales:[`fil-PH`,`en`],compliance:[`dpa-ph`],timezones:[`Asia/Manila`]},SG:{name:`Singapore`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Singapore (PDPA)`,locales:[`zh-SG`,`ms-SG`,`ta-SG`,`en`],compliance:[`pdpa-sg`],timezones:[`Asia/Singapore`]},TH:{name:`Thailand`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Thailand (PDPA — GDPR-style opt-in)`,locales:[`th-TH`],compliance:[`pdpa-th`],timezones:[`Asia/Bangkok`]},TL:{name:`Timor-Leste`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Timor-Leste`,locales:[`pt-TL`],compliance:[],timezones:[`Asia/Dili`]},VN:{name:`Vietnam`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Vietnam (PDPD)`,locales:[`vi-VN`],compliance:[`pdpd-vn`],timezones:[`Asia/Ho_Chi_Minh`]},HK:{name:`Hong Kong`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Hong Kong SAR (PDPO)`,locales:[`zh-HK`],compliance:[`pdpl-hk`],timezones:[`Asia/Hong_Kong`]},JP:{name:`Japan`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Japan (APPI)`,locales:[`ja-JP`],compliance:[`appi`],timezones:[`Asia/Tokyo`]},KP:{name:`North Korea`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`North Korea`,locales:[`ko-KP`],compliance:[],timezones:[`Asia/Pyongyang`]},KR:{name:`South Korea`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`South Korea (PIPA)`,locales:[`ko-KR`],compliance:[`pipa-kr`],timezones:[`Asia/Seoul`]},MN:{name:`Mongolia`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Mongolia`,locales:[`mn-MN`],compliance:[],timezones:[`Asia/Ulaanbaatar`,`Asia/Hovd`]},MO:{name:`Macau`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Macau SAR (PDPA)`,locales:[`zh-MO`,`pt-MO`],compliance:[`pdpa-mo`],timezones:[`Asia/Macau`]},TW:{name:`Taiwan`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Taiwan (PDPL)`,locales:[`zh-TW`],compliance:[`pdpl-tw`],timezones:[`Asia/Taipei`]},AF:{name:`Afghanistan`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Afghanistan`,locales:[`fa-AF`],compliance:[],timezones:[`Asia/Kabul`]},BD:{name:`Bangladesh`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Bangladesh`,locales:[`bn-BD`],compliance:[],timezones:[`Asia/Dhaka`]},BT:{name:`Bhutan`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Bhutan`,locales:[`dz-BT`],compliance:[],timezones:[`Asia/Thimphu`]},IO:{name:`British Indian Ocean Territory`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`British Indian Ocean Territory`,locales:[`en`],compliance:[],timezones:[`Indian/Chagos`]},LK:{name:`Sri Lanka`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Sri Lanka`,locales:[`si-LK`,`ta-LK`],compliance:[`privacy-lk`],timezones:[`Asia/Colombo`]},MV:{name:`Maldives`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Maldives`,locales:[`dv-MV`],compliance:[],timezones:[`Indian/Maldives`]},NP:{name:`Nepal`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Nepal`,locales:[`ne-NP`],compliance:[`privacy-np`],timezones:[`Asia/Kathmandu`]},PK:{name:`Pakistan`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Pakistan`,locales:[`ur-PK`,`en`],compliance:[],timezones:[`Asia/Karachi`]},AM:{name:`Armenia`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Armenia`,locales:[`hy-AM`],compliance:[],timezones:[`Asia/Yerevan`]},AZ:{name:`Azerbaijan`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Azerbaijan`,locales:[`az-AZ`],compliance:[],timezones:[`Asia/Baku`]},GE:{name:`Georgia`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Georgia`,locales:[`ka-GE`],compliance:[],timezones:[`Asia/Tbilisi`]},KG:{name:`Kyrgyzstan`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Kyrgyzstan`,locales:[`ky-KG`,`ru-KG`],compliance:[],timezones:[`Asia/Bishkek`]},KZ:{name:`Kazakhstan`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Kazakhstan`,locales:[`kk-KZ`,`ru-KZ`],compliance:[],timezones:[`Asia/Almaty`,`Asia/Aqtobe`]},TJ:{name:`Tajikistan`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Tajikistan`,locales:[`tg-TJ`],compliance:[],timezones:[`Asia/Dushanbe`]},TM:{name:`Turkmenistan`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Turkmenistan`,locales:[`tk-TM`],compliance:[],timezones:[`Asia/Ashgabat`]},UZ:{name:`Uzbekistan`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Uzbekistan`,locales:[`uz-UZ`],compliance:[],timezones:[`Asia/Tashkent`,`Asia/Samarkand`]},AE:{name:`United Arab Emirates`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`United Arab Emirates (UAE PDPL / DIFC DPL / ADGM DPR)`,locales:[`ar-AE`],compliance:[`uae-pdpl`,`difc-dpl`,`adgm-dpr`],timezones:[`Asia/Dubai`]},BH:{name:`Bahrain`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Bahrain (PDPL)`,locales:[`ar-BH`],compliance:[`pdpl-bh`],timezones:[`Asia/Bahrain`]},IL:{name:`Israel`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Israel (Privacy Protection Law)`,locales:[`he-IL`,`ar-IL`],compliance:[`privacy-il`],timezones:[`Asia/Jerusalem`]},IQ:{name:`Iraq`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Iraq`,locales:[`ar-IQ`],compliance:[],timezones:[`Asia/Baghdad`]},IR:{name:`Iran`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Iran`,locales:[`fa-IR`],compliance:[],timezones:[`Asia/Tehran`]},JO:{name:`Jordan`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Jordan`,locales:[`ar-JO`],compliance:[],timezones:[`Asia/Amman`]},KW:{name:`Kuwait`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Kuwait`,locales:[`ar-KW`],compliance:[`privacy-kw`],timezones:[`Asia/Kuwait`]},LB:{name:`Lebanon`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Lebanon`,locales:[`ar-LB`],compliance:[],timezones:[`Asia/Beirut`]},OM:{name:`Oman`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Oman (PDPL)`,locales:[`ar-OM`],compliance:[`pdpl-om`],timezones:[`Asia/Muscat`]},PS:{name:`Palestine`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Palestine`,locales:[`ar-PS`],compliance:[],timezones:[`Asia/Gaza`,`Asia/Hebron`]},QA:{name:`Qatar`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Qatar (PDPL)`,locales:[`ar-QA`],compliance:[`qpdl-qa`],timezones:[`Asia/Qatar`]},SA:{name:`Saudi Arabia`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Saudi Arabia (PDPL)`,locales:[`ar-SA`],compliance:[`pdpl-sa`],timezones:[`Asia/Riyadh`]},SY:{name:`Syria`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Syria`,locales:[`ar-SY`],compliance:[],timezones:[`Asia/Damascus`]},YE:{name:`Yemen`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Yemen`,locales:[`ar-YE`],compliance:[],timezones:[`Asia/Aden`]},BF:{name:`Burkina Faso`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Burkina Faso`,locales:[`fr-BF`],compliance:[],timezones:[`Africa/Ouagadougou`]},BJ:{name:`Benin`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Benin`,locales:[`fr-BJ`],compliance:[],timezones:[`Africa/Porto-Novo`]},CI:{name:`Côte d'Ivoire`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Côte d'Ivoire`,locales:[`fr-CI`],compliance:[],timezones:[`Africa/Abidjan`]},CM:{name:`Cameroon`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Cameroon`,locales:[`fr-CM`,`en`],compliance:[],timezones:[`Africa/Douala`]},CV:{name:`Cabo Verde`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Cabo Verde`,locales:[`pt-CV`],compliance:[],timezones:[`Atlantic/Cape_Verde`]},GA:{name:`Gabon`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Gabon`,locales:[`fr-GA`],compliance:[],timezones:[`Africa/Libreville`]},GH:{name:`Ghana`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Ghana (DPA)`,locales:[`en`],compliance:[`dpa-gh`],timezones:[`Africa/Accra`]},GM:{name:`Gambia`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Gambia`,locales:[`en`],compliance:[],timezones:[`Africa/Banjul`]},GN:{name:`Guinea`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Guinea`,locales:[`fr-GN`],compliance:[],timezones:[`Africa/Conakry`]},GQ:{name:`Equatorial Guinea`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Equatorial Guinea`,locales:[`es-GQ`,`fr-GQ`],compliance:[],timezones:[`Africa/Malabo`]},GW:{name:`Guinea-Bissau`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Guinea-Bissau`,locales:[`pt-GW`],compliance:[],timezones:[`Africa/Bissau`]},LR:{name:`Liberia`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Liberia`,locales:[`en`],compliance:[],timezones:[`Africa/Monrovia`]},ML:{name:`Mali`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Mali`,locales:[`fr-ML`],compliance:[],timezones:[`Africa/Bamako`]},MR:{name:`Mauritania`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Mauritania`,locales:[`ar-MR`],compliance:[],timezones:[`Africa/Nouakchott`]},NE:{name:`Niger`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Niger`,locales:[`fr-NE`],compliance:[],timezones:[`Africa/Niamey`]},NG:{name:`Nigeria`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Nigeria (NDPA)`,locales:[`en`],compliance:[`ndpa-ng`],timezones:[`Africa/Lagos`]},SL:{name:`Sierra Leone`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Sierra Leone`,locales:[`en`],compliance:[],timezones:[`Africa/Freetown`]},SN:{name:`Senegal`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Senegal`,locales:[`fr-SN`],compliance:[],timezones:[`Africa/Dakar`]},TG:{name:`Togo`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Togo`,locales:[`fr-TG`],compliance:[],timezones:[`Africa/Lome`]},BI:{name:`Burundi`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Burundi`,locales:[`fr-BI`],compliance:[],timezones:[`Africa/Bujumbura`]},DJ:{name:`Djibouti`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Djibouti`,locales:[`fr-DJ`,`ar-DJ`],compliance:[],timezones:[`Africa/Djibouti`]},ER:{name:`Eritrea`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Eritrea`,locales:[`ti-ER`],compliance:[],timezones:[`Africa/Asmara`]},ET:{name:`Ethiopia`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Ethiopia`,locales:[`am-ET`],compliance:[],timezones:[`Africa/Addis_Ababa`]},KE:{name:`Kenya`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Kenya (DPA)`,locales:[`sw-KE`,`en`],compliance:[`dpa-ke`],timezones:[`Africa/Nairobi`]},KM:{name:`Comoros`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Comoros`,locales:[`ar-KM`,`fr-KM`],compliance:[],timezones:[`Indian/Comoro`]},MG:{name:`Madagascar`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Madagascar`,locales:[`fr-MG`],compliance:[],timezones:[`Indian/Antananarivo`]},MU:{name:`Mauritius`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Mauritius (DPA)`,locales:[`en`,`fr-MU`],compliance:[`dpa-mu`],timezones:[`Indian/Mauritius`]},MW:{name:`Malawi`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Malawi`,locales:[`en`],compliance:[],timezones:[`Africa/Blantyre`]},MZ:{name:`Mozambique`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Mozambique`,locales:[`pt-MZ`],compliance:[],timezones:[`Africa/Maputo`]},RW:{name:`Rwanda`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Rwanda (DPA)`,locales:[`rw-RW`,`en`],compliance:[`dpa-rw`],timezones:[`Africa/Kigali`]},SC:{name:`Seychelles`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Seychelles`,locales:[`fr-SC`,`en`],compliance:[],timezones:[`Indian/Mahe`]},SO:{name:`Somalia`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Somalia`,locales:[`so-SO`],compliance:[],timezones:[`Africa/Mogadishu`]},SS:{name:`South Sudan`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`South Sudan`,locales:[`en`],compliance:[],timezones:[`Africa/Juba`]},ST:{name:`São Tomé and Príncipe`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`São Tomé and Príncipe`,locales:[`pt-ST`],compliance:[],timezones:[`Africa/Sao_Tome`]},TZ:{name:`Tanzania`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Tanzania`,locales:[`sw-TZ`,`en`],compliance:[],timezones:[`Africa/Dar_es_Salaam`]},UG:{name:`Uganda`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Uganda (DPA)`,locales:[`en`],compliance:[`dpa-ug`],timezones:[`Africa/Kampala`]},AO:{name:`Angola`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Angola`,locales:[`pt-AO`],compliance:[],timezones:[`Africa/Luanda`]},BW:{name:`Botswana`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Botswana (DPA)`,locales:[`en`],compliance:[`dpa-bw`],timezones:[`Africa/Gaborone`]},LS:{name:`Lesotho`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Lesotho`,locales:[`en`],compliance:[],timezones:[`Africa/Maseru`]},NA:{name:`Namibia`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Namibia`,locales:[`en`],compliance:[],timezones:[`Africa/Windhoek`]},SZ:{name:`Eswatini`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Eswatini`,locales:[`en`],compliance:[],timezones:[`Africa/Mbabane`]},ZA:{name:`South Africa`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`South Africa (POPIA)`,locales:[`en`,`af-ZA`],compliance:[`popia`],timezones:[`Africa/Johannesburg`]},ZM:{name:`Zambia`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Zambia (DPA)`,locales:[`en`],compliance:[`dpa-zm`],timezones:[`Africa/Lusaka`]},ZW:{name:`Zimbabwe`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Zimbabwe (DPA)`,locales:[`en`],compliance:[`dpa-zw`],timezones:[`Africa/Harare`]},DZ:{name:`Algeria`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Algeria`,locales:[`ar-DZ`,`fr-DZ`],compliance:[`dpa-dz`],timezones:[`Africa/Algiers`]},EG:{name:`Egypt`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Egypt (DPA)`,locales:[`ar-EG`],compliance:[`dpa-eg`],timezones:[`Africa/Cairo`]},LY:{name:`Libya`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Libya`,locales:[`ar-LY`],compliance:[],timezones:[`Africa/Tripoli`]},MA:{name:`Morocco`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Morocco`,locales:[`ar-MA`,`fr-MA`],compliance:[`dpa-ma`],timezones:[`Africa/Casablanca`]},SD:{name:`Sudan`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Sudan`,locales:[`ar-SD`],compliance:[],timezones:[`Africa/Khartoum`]},TN:{name:`Tunisia`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Tunisia (DPA)`,locales:[`ar-TN`,`fr-TN`],compliance:[`dpa-tn`],timezones:[`Africa/Tunis`]},CD:{name:`DR Congo`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`DR Congo`,locales:[`fr-CD`],compliance:[],timezones:[`Africa/Kinshasa`,`Africa/Lubumbashi`]},CF:{name:`Central African Republic`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Central African Republic`,locales:[`fr-CF`],compliance:[],timezones:[`Africa/Bangui`]},CG:{name:`Republic of Congo`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Republic of Congo`,locales:[`fr-CG`],compliance:[],timezones:[`Africa/Brazzaville`]},TD:{name:`Chad`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Chad`,locales:[`fr-TD`,`ar-TD`],compliance:[],timezones:[`Africa/Ndjamena`]},BY:{name:`Belarus`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Belarus`,locales:[`be-BY`,`ru-BY`],compliance:[],timezones:[`Europe/Minsk`]},MD:{name:`Moldova`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Moldova`,locales:[`ro-MD`],compliance:[],timezones:[`Europe/Chisinau`]},RU:{name:`Russia`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Russia`,locales:[`ru-RU`],compliance:[],timezones:[`Europe/Kaliningrad`,`Europe/Moscow`,`Europe/Samara`,`Asia/Yekaterinburg`,`Asia/Omsk`,`Asia/Krasnoyarsk`,`Asia/Irkutsk`,`Asia/Yakutsk`,`Asia/Vladivostok`,`Asia/Magadan`,`Asia/Kamchatka`]},UA:{name:`Ukraine`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Ukraine`,locales:[`uk-UA`],compliance:[],timezones:[`Europe/Kyiv`]},VA:{name:`Holy See`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Holy See`,locales:[`it-VA`],compliance:[],timezones:[`Europe/Vatican`]},AU:{name:`Australia`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`Australia (Privacy Act)`,locales:[`en`],compliance:[`privacy-au`],timezones:[`Australia/Sydney`,`Australia/Brisbane`,`Australia/Adelaide`,`Australia/Darwin`,`Australia/Perth`,`Australia/Hobart`]},FJ:{name:`Fiji`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Fiji`,locales:[`en`],compliance:[`privacy-fj`],timezones:[`Pacific/Fiji`]},FM:{name:`Micronesia`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Micronesia`,locales:[`en`],compliance:[],timezones:[`Pacific/Chuuk`,`Pacific/Pohnpei`,`Pacific/Kosrae`]},KI:{name:`Kiribati`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Kiribati`,locales:[`en`],compliance:[],timezones:[`Pacific/Tarawa`,`Pacific/Enderbury`,`Pacific/Kiritimati`]},MH:{name:`Marshall Islands`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Marshall Islands`,locales:[`en`],compliance:[],timezones:[`Pacific/Majuro`,`Pacific/Kwajalein`]},MP:{name:`Northern Mariana Islands`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Northern Mariana Islands`,locales:[`en`],compliance:[],timezones:[`Pacific/Saipan`]},NC:{name:`New Caledonia`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`New Caledonia`,locales:[`fr-NC`],compliance:[],timezones:[`Pacific/Noumea`]},NF:{name:`Norfolk Island`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Norfolk Island`,locales:[`en`],compliance:[],timezones:[`Pacific/Norfolk`]},NR:{name:`Nauru`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Nauru`,locales:[`en`],compliance:[],timezones:[`Pacific/Nauru`]},NU:{name:`Niue`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Niue`,locales:[`en`],compliance:[],timezones:[`Pacific/Niue`]},NZ:{name:`New Zealand`,type:`country`,complianceGroup:`general-privacy-consent`,default:`general-privacy-consent`,description:`New Zealand (Privacy Act)`,locales:[`en`],compliance:[`privacy-nz`],timezones:[`Pacific/Auckland`,`Pacific/Chatham`]},PF:{name:`French Polynesia`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`French Polynesia`,locales:[`fr-PF`],compliance:[],timezones:[`Pacific/Tahiti`,`Pacific/Marquesas`,`Pacific/Gambier`]},PG:{name:`Papua New Guinea`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Papua New Guinea`,locales:[`en`],compliance:[`privacy-pg`],timezones:[`Pacific/Port_Moresby`,`Pacific/Bougainville`]},PW:{name:`Palau`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Palau`,locales:[`en`],compliance:[],timezones:[`Pacific/Palau`]},SB:{name:`Solomon Islands`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Solomon Islands`,locales:[`en`],compliance:[],timezones:[`Pacific/Guadalcanal`]},TO:{name:`Tonga`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Tonga`,locales:[`en`],compliance:[],timezones:[`Pacific/Tongatapu`]},TV:{name:`Tuvalu`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Tuvalu`,locales:[`en`],compliance:[],timezones:[`Pacific/Funafuti`]},VU:{name:`Vanuatu`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Vanuatu`,locales:[`fr-VU`,`en`],compliance:[],timezones:[`Pacific/Efate`]},WS:{name:`Samoa`,type:`country`,complianceGroup:`notice-only`,default:`notice-only`,description:`Samoa`,locales:[`en`],compliance:[],timezones:[`Pacific/Apia`]},UK:{name:`United Kingdom`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`United Kingdom (UK GDPR + PECR)`,locales:[`en`],compliance:[`uk-gdpr`,`pecr`],timezones:[`Europe/London`]},CH:{name:`Switzerland`,type:`country`,complianceGroup:`opt-in`,default:`opt-in`,description:`Switzerland (revFADP)`,locales:[`de-CH`,`fr-CH`,`it-CH`],compliance:[`revfadp`],timezones:[`Europe/Zurich`]}}};[...Object.values(d.countries).reduce((e,t)=>(t.compliance.forEach(t=>{e.add(t)}),e),new Set)],Object.entries(d.countries).reduce(function(e,[t,n]){return e[t]=n.name,e},{}),Object.values(d.countries).reduce(function(e,t){return t.locales.forEach(n=>{e[n]=t.name}),e},{});export{s as a,u as c,i,o as n,c as o,a as r,l as s,r as t};