@atlasprivacy/consent-sdk 0.0.1-beta.1 → 1.1.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.
package/CHANGELOG.md CHANGED
@@ -1,8 +1,13 @@
1
1
  # Changelog
2
2
 
3
- ## 1.0.0 (in beta)
3
+ ## Unreleased
4
4
 
5
- First public release, published to npm as `@atlasprivacy/consent-sdk` under the MIT license. Betas are `1.0.0-beta.N` on the npm `beta` tag. The internal builds listed below were never released; their changes are all part of 1.0.0.
5
+ - Add `renderPreview` at `@atlasprivacy/consent-sdk/preview`, for the Atlas dashboard preview. It draws the form from a configuration the caller passes in, and sends and saves nothing.
6
+ - Remove `ui.html` and `atlas-consent-ui.js`. The dashboard imports the preview from npm, and Atlas no longer hosts SDK files.
7
+
8
+ ## 1.0.0 (unreleased)
9
+
10
+ First public release, published to npm as `@atlasprivacy/consent-sdk` under the MIT license. The internal builds listed below were never released; their changes are all part of 1.0.0.
6
11
 
7
12
  - Synchronize saved decisions across tabs and SDK instances, reconcile server choices, and expose `onPreferenceChange` and `atlas-consent:change` without credentials.
8
13
  - Display every configured purpose when notice sections are incomplete, and reject malformed notice structures before mounting.
package/README.md CHANGED
@@ -6,7 +6,7 @@ In Atlas, open **Consents → Integrations**, create an app and select a publish
6
6
 
7
7
  ## Add the SDK
8
8
 
9
- Load the script from npm through jsDelivr, or use the versioned asset URL from Atlas. Pin an exact version; a version URL never changes. Replace the example host, version and app ID below. Until 1.0.0 is final, releases are betas such as `1.0.0-beta.1` (see [npm](https://www.npmjs.com/package/@atlasprivacy/consent-sdk?activeTab=versions) for the current one).
9
+ Load the script from jsDelivr. Pin an exact version; a version URL never changes. Replace the version and app ID below. See [npm](https://www.npmjs.com/package/@atlasprivacy/consent-sdk?activeTab=versions) for the current version.
10
10
 
11
11
  ```html
12
12
  <script src="https://cdn.jsdelivr.net/npm/@atlasprivacy/consent-sdk@1.0.0/dist/atlas-consent.js"></script>
@@ -15,21 +15,20 @@ Load the script from npm through jsDelivr, or use the versioned asset URL from A
15
15
  With a bundler, install the package and import it:
16
16
 
17
17
  ```sh
18
- npm install @atlasprivacy/consent-sdk@beta
18
+ npm install @atlasprivacy/consent-sdk
19
19
  ```
20
20
 
21
21
  ```ts
22
22
  import { create } from "@atlasprivacy/consent-sdk";
23
23
  ```
24
24
 
25
- The npm package defaults to the production Atlas API. Pass `apiBaseUrl` to use another Atlas deployment. The examples below use the Atlas-hosted asset URL:
25
+ The SDK talks to the production Atlas API by default. To use another Atlas deployment, pass `apiBaseUrl` to `create()` or set `data-api-base-url` on the script tag. A script loaded from an Atlas deployment uses that deployment by default.
26
26
 
27
27
  ```html
28
- <script src="https://atlas.example/consent-sdk/assets/1.0.0/atlas-consent.js"></script>
28
+ <script src="https://cdn.jsdelivr.net/npm/@atlasprivacy/consent-sdk@1.0.0/dist/atlas-consent.js"></script>
29
29
  <script>
30
30
  const consent = AtlasConsent.create({
31
31
  appId: "ac_app_REPLACE_WITH_YOUR_APP_ID",
32
- apiBaseUrl: "https://atlas.example",
33
32
  mode: "popup",
34
33
  onComplete(result, claim) {
35
34
  console.log(result.choices);
@@ -42,14 +41,14 @@ The npm package defaults to the production Atlas API. Pass `apiBaseUrl` to use a
42
41
  </script>
43
42
  ```
44
43
 
45
- The API base URL must include any deployment path prefix. Do not add `/api/v1` or `/consent-sdk` to it.
44
+ An `apiBaseUrl` must include any deployment path prefix. Do not add `/api/v1` or `/consent-sdk` to it. API URLs are public; do not put secrets in them.
46
45
 
47
46
  For a script-only automatic popup:
48
47
 
49
48
  ```html
50
49
  <script
51
50
  defer
52
- src="https://atlas.example/consent-sdk/assets/1.0.0/atlas-consent.js"
51
+ src="https://cdn.jsdelivr.net/npm/@atlasprivacy/consent-sdk@1.0.0/dist/atlas-consent.js"
53
52
  data-atlas-app="ac_app_REPLACE_WITH_YOUR_APP_ID"
54
53
  data-mode="popup"
55
54
  ></script>
@@ -57,15 +56,15 @@ For a script-only automatic popup:
57
56
 
58
57
  Script tag attributes:
59
58
 
60
- | Attribute | Meaning |
61
- | ------------------- | ------------------------------------------------------------------------------ |
62
- | `data-atlas-app` | Required. The app ID. |
63
- | `data-mode` | `panel`, `popup` or `page`. Defaults to the mode saved in Atlas. |
64
- | `data-target` | CSS selector of the panel container. Required when the mode is `panel`. |
65
- | `data-language` | Notice language. Defaults to `en`. |
66
- | `data-auto-show` | `false` stops a popup from opening by itself. |
67
- | `data-appearance` | The `appearance` object as JSON, for example `'{"theme":"dark"}'`. |
68
- | `data-api-base-url` | The Atlas API base URL. Normally not needed: the script's own address is used. |
59
+ | Attribute | Meaning |
60
+ | ------------------- | ----------------------------------------------------------------------- |
61
+ | `data-atlas-app` | Required. The app ID. |
62
+ | `data-mode` | `panel`, `popup` or `page`. Defaults to the mode saved in Atlas. |
63
+ | `data-target` | CSS selector of the panel container. Required when the mode is `panel`. |
64
+ | `data-language` | Notice language. Defaults to `en`. |
65
+ | `data-auto-show` | `false` stops a popup from opening by itself. |
66
+ | `data-appearance` | The `appearance` object as JSON, for example `'{"theme":"dark"}'`. |
67
+ | `data-api-base-url` | The Atlas API base URL. Defaults as described above. |
69
68
 
70
69
  `window` receives `atlas-consent:ready` once the configuration has loaded, with the client in `event.detail.client`. If the mode is `panel` and there is no `data-target`, the SDK reports a `missing_container` error instead of showing nothing. Use either automatic initialization or `create()`, so you do not create duplicate instances.
71
70
 
@@ -80,7 +79,6 @@ Place the container before initialization. The SDK inserts the form into this el
80
79
  <script>
81
80
  const consent = AtlasConsent.create({
82
81
  appId: "ac_app_REPLACE_WITH_YOUR_APP_ID",
83
- apiBaseUrl: "https://atlas.example",
84
82
  mode: "panel",
85
83
  target: "#consent-panel",
86
84
  });
@@ -96,7 +94,6 @@ Use `mode: 'popup'`. The SDK opens it when there is no current saved choice for
96
94
  ```js
97
95
  const consent = AtlasConsent.create({
98
96
  appId: "ac_app_REPLACE_WITH_YOUR_APP_ID",
99
- apiBaseUrl: "https://atlas.example",
100
97
  mode: "page",
101
98
  });
102
99
  document.querySelector("#privacy-choice").addEventListener("click", () => {
@@ -192,8 +189,6 @@ Errors are `ConsentError` objects with `code`, `message`, and HTTP `status` (0 w
192
189
 
193
190
  Do not automatically retry writes without a delay. The form keeps the same `Idempotency-Key` when retrying a failed save, so a retry cannot save twice.
194
191
 
195
- Build with `npm run check`. Run `npm run test:browser` before a release. Copy versioned assets with `npm run sync:backend -- /path/to/webpy`. Keep previous asset versions available.
196
-
197
192
  ## Security notes
198
193
 
199
194
  - Session and claim tokens are kept in the visitor's `localStorage` under `atlas-consent:v2:<encoded-api-base-url>:<appId>`, so they are readable by any script on your site. Keep third-party scripts on pages that use the SDK to a minimum and use a Content Security Policy.
@@ -202,24 +197,12 @@ Build with `npm run check`. Run `npm run test:browser` before a release. Copy ve
202
197
  - Notice HTML is sanitized with bundled DOMPurify, then rebuilt using the SDK's restricted formatting and link rules. On sites enforcing Trusted Types, allow the `dompurify` policy name in `trusted-types`; for example, `require-trusted-types-for 'script'; trusted-types dompurify`. No permissive default policy is needed. A CSP that disallows the sanitizer policy fails closed and leaves the dialog dismissible.
203
198
  - Atlas writes each save to the record's audit trail with how it arrived: the kind of form (drawn on your website, the older Atlas-hosted form, or no browser origin at all), the SDK version the browser reported, your website's origin, the session, the notice version and language, and the caller's IP address, with a hash of those details. Treat a save as what your page sent, not as proof of what the person saw.
204
199
 
205
- ## Development
206
-
207
- See [Contributing](CONTRIBUTING.md) for local checks and release rules.
200
+ ## Browser support
208
201
 
209
202
  The SDK targets current evergreen Chrome/Edge, Firefox, and Safari, using native modal dialogs and Shadow DOM. Automated tests cover Chromium, Firefox, WebKit, and mobile Chromium/WebKit viewports. Mobile projects emulate browser devices; they do not replace testing on physical phones or embedded webviews. Destroy an instance when a framework component unmounts; create a new instance when it mounts again. The ESM entry point can be imported during server rendering, but `create()` must run in the browser.
210
203
 
211
- ## Packages and API URLs
212
-
213
- Set GitLab CI/CD variables `DEV_URL`, `STAGING_URL`, and `PRODUCTION_URL` to the backend API base URLs, including the service prefix. Use environment scope `*` so the variables are available to build jobs. `dev` and other branches use `DEV_URL`. `staging` uses `STAGING_URL`. `shipping` uses `PRODUCTION_URL`.
214
-
215
- These URLs become the default `apiBaseUrl` in compiled packages. Explicit `create({apiBaseUrl})` options take priority. Script-tag integrations use `data-api-base-url` first, then the Atlas address the script was loaded from, then the build URL. Local builds can set `ATLAS_SDK_API_BASE_URL` or continue to supply the API URL at runtime. API URLs are public build configuration; do not put secrets in them.
204
+ The package contains the script and ESM builds, TypeScript declarations, and `dist/manifest.json` with SHA-384 hashes for Subresource Integrity.
216
205
 
217
- | Branch | Version | Published to |
218
- | ---------- | ---------------------- | ----------------------------------------------------- |
219
- | other | `X.Y.Z-dev.<pipeline>` | job artifacts only (one week) |
220
- | `dev` | `X.Y.Z-dev.<pipeline>` | private GitLab Generic Package Registry |
221
- | `staging` | `X.Y.Z-rc.<pipeline>` | private GitLab Generic Package Registry |
222
- | `shipping` | `X.Y.Z-beta.N` | npm (`beta` tag), GitLab registry, `v` tag, release |
223
- | `shipping` | `X.Y.Z` when final | npm (`latest` tag), GitLab registry, `v` tag, release |
206
+ ## License
224
207
 
225
- Packages contain scripts, the dashboard preview page, declarations, and an integrity manifest with SHA-384 hashes for Subresource Integrity. [Contributing](CONTRIBUTING.md#branches-and-releases) describes the release flow.
208
+ MIT
@@ -0,0 +1,10 @@
1
+ function kn(){if(!globalThis.crypto?.getRandomValues)throw new Error("Atlas Consent needs a secure browser context.");return[...crypto.getRandomValues(new Uint8Array(24))].map(o=>o.toString(16).padStart(2,"0")).join("")}var Ze=class extends Error{constructor(i,r,p=0){super(i);this.code=r;this.status=p;this.name="ConsentError"}};var Nn={system:'Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,sans-serif',serif:"Georgia,'Times New Roman',serif",rounded:"'Trebuchet MS','Segoe UI',Verdana,'Helvetica Neue',sans-serif"},Mn={sharp:["2px","2px"],soft:["6px","6px"],round:["999px","16px"]},jo=/^#[0-9a-f]{6}$/i,De={theme:"light",primary_color:"#ae0a60",background_color:"#ffffff",text_color:"#1a202c",radius:"soft",font:"system",density:"comfortable"},In={background_color:"#0f172a",text_color:"#f1f5f9"};function Pn(o){let[n,i,r]=[1,3,5].map(p=>parseInt(o.slice(p,p+2),16)/255).map(p=>p<=.03928?p/12.92:((p+.055)/1.055)**2.4);return .2126*n+.7152*i+.0722*r}function Un(o,n){let i=Pn(o),r=Pn(n);return(Math.max(i,r)+.05)/(Math.min(i,r)+.05)}function Fn(o,n,i){let r={...De,...n||{}};for(let A of["primary_color","background_color","text_color"])(typeof r[A]!="string"||!jo.test(r[A]))&&(r[A]=De[A]);(typeof r.radius!="string"||!Object.prototype.hasOwnProperty.call(Mn,r.radius))&&(r.radius=De.radius),(typeof r.font!="string"||!Object.prototype.hasOwnProperty.call(Nn,r.font))&&(r.font=De.font),["light","dark","system"].includes(r.theme)||(r.theme=De.theme);let p=r.theme==="dark"||r.theme==="system"&&i.matches;p&&(r.background_color.toLowerCase()===De.background_color&&(r.background_color=In.background_color),r.text_color.toLowerCase()===De.text_color&&(r.text_color=In.text_color));let[f,l]=Mn[r.radius],m=r.density==="compact",u={"--primary":r.primary_color,"--bg":r.background_color,"--text":r.text_color,"--on-primary":Un(r.primary_color,"#000000")>Un(r.primary_color,"#ffffff")?"#000000":"#ffffff","--muted":`color-mix(in srgb,${r.text_color} 66%,${r.background_color})`,"--line":`color-mix(in srgb,${r.text_color} 14%,${r.background_color})`,"--line-strong":`color-mix(in srgb,${r.text_color} 26%,${r.background_color})`,"--tint":`color-mix(in srgb,${r.text_color} 8%,${r.background_color})`,"--page":`color-mix(in srgb,${r.text_color} 4%,${r.background_color})`,"--font":Nn[r.font],"--r-btn":f,"--r-card":l,"--pad":m?"16px":"28px","--gap":m?"10px":"20px","--fs":m?"14px":"16px","--btn":m?"42px":"52px","--rowy":m?"4px":"12px","--rowx":m?"12px":"18px"};for(let[A,S]of Object.entries(u))o.style.setProperty(A,S);o.style.colorScheme=p?"dark":"light"}function zn(o){let n=window.matchMedia("(prefers-color-scheme: dark)"),i,r=()=>{i?.theme==="system"&&Fn(o,i,n)};return n.addEventListener("change",r),{apply(p){i=p,Fn(o,p,n)},destroy(){n.removeEventListener("change",r)}}}function Bo(o,n){this.v=o,this.k=n}function Hn(o,n){(n==null||n>o.length)&&(n=o.length);for(var i=0,r=Array(n);i<n;i++)r[i]=o[i];return r}function Go(o){if(Array.isArray(o))return o}function Wo(o,n){var i=o==null?null:typeof Symbol<"u"&&o[Symbol.iterator]||o["@@iterator"];if(i!=null){var r,p,f,l,m=[],u=!0,A=!1;try{if(f=(i=i.call(o)).next,n===0){if(Object(i)!==i)return;u=!1}else for(;!(u=(r=f.call(i)).done)&&(m.push(r.value),m.length!==n);u=!0);}catch(S){A=!0,p=S}finally{try{if(!u&&i.return!=null&&(l=i.return(),Object(l)!==l))return}finally{if(A)throw p}}return m}}function Yo(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
2
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function $o(o,n){return Go(o)||Wo(o,n)||Vo(o,n)||Yo()}function Vo(o,n){if(o){if(typeof o=="string")return Hn(o,n);var i={}.toString.call(o).slice(8,-1);return i==="Object"&&o.constructor&&(i=o.constructor.name),i==="Map"||i==="Set"?Array.from(o):i==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?Hn(o,n):void 0}}function ht(o){var n,i;function r(f,l){try{var m=o[f](l),u=m.value,A=u instanceof Bo;Promise.resolve(A?u.v:u).then(function(S){if(A){var F=f==="return"&&u.k?f:"next";if(!u.k||S.done)return r(F,S);S=o[F](S).value}p(!!m.done,S)},function(S){r("throw",S)})}catch(S){p(2,S)}}function p(f,l){f===2?n.reject(l):n.resolve({value:l,done:f}),(n=n.next)?r(n.key,n.arg):i=null}this._invoke=function(f,l){return new Promise(function(m,u){var A={key:f,arg:l,resolve:m,reject:u,next:null};i?i=i.next=A:(n=i=A,r(f,l))})},typeof o.return!="function"&&(this.return=void 0)}ht.prototype[typeof Symbol=="function"&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},ht.prototype.next=function(o){return this._invoke("next",o)},ht.prototype.throw=function(o){return this._invoke("throw",o)},ht.prototype.return=function(o){return this._invoke("return",o)};var to=Object.entries,jn=Object.setPrototypeOf,qo=Object.isFrozen,no=Object.getPrototypeOf,oo=Object.getOwnPropertyDescriptor,M=Object.freeze,P=Object.seal,je=Object.create,ro=typeof Reflect<"u"&&Reflect,Zt=ro.apply,Qt=ro.construct;M||(M=function(n){return n});P||(P=function(n){return n});Zt||(Zt=function(n,i){for(var r=arguments.length,p=new Array(r>2?r-2:0),f=2;f<r;f++)p[f-2]=arguments[f];return n.apply(i,p)});Qt||(Qt=function(n){for(var i=arguments.length,r=new Array(i>1?i-1:0),p=1;p<i;p++)r[p-1]=arguments[p];return new n(...r)});var ge=R(Array.prototype.forEach);Array.prototype.indexOf;var Ko=R(Array.prototype.lastIndexOf),Bn=R(Array.prototype.pop),Qe=R(Array.prototype.push),Xo=R(Array.prototype.slice),Zo=R(Array.prototype.splice),Be=Array.isArray,Bt=io(Set),Gt=R(Set.prototype.add),Je=R(Set.prototype.has),Le=R(String.prototype.toLowerCase),Wt=R(String.prototype.toString),Gn=R(String.prototype.match),et=R(String.prototype.replace),Wn=R(String.prototype.indexOf),Qo=R(String.prototype.trim),Jo=R(Number.prototype.toString),er=R(Boolean.prototype.toString),Yn=typeof BigInt>"u"?null:R(BigInt.prototype.toString),$n=typeof Symbol>"u"?null:R(Symbol.prototype.toString),W=R(Object.prototype.hasOwnProperty),tt=R(Object.prototype.toString),I=R(RegExp.prototype.test),he=io(TypeError);function R(o){return function(n){n instanceof RegExp&&(n.lastIndex=0);for(var i=arguments.length,r=new Array(i>1?i-1:0),p=1;p<i;p++)r[p-1]=arguments[p];return Zt(o,n,r)}}function io(o){return function(){for(var n=arguments.length,i=new Array(n),r=0;r<n;r++)i[r]=arguments[r];return Qt(o,i)}}function T(o,n){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Le;if(jn&&jn(o,null),!Be(n))return o;let r=n.length;for(;r--;){let p=n[r];if(typeof p=="string"){let f=i(p);f!==p&&(qo(n)||(n[r]=f),p=f)}o[p]=!0}return o}function tr(o){for(let n=0;n<o.length;n++)W(o,n)||(o[n]=null);return o}function q(o){let n=je(null);for(let r of to(o)){var i=$o(r,2);let p=i[0],f=i[1];W(o,p)&&(Be(f)?n[p]=tr(f):f&&typeof f=="object"&&f.constructor===Object?n[p]=q(f):n[p]=f)}return n}function nr(o){switch(typeof o){case"string":return o;case"number":return Jo(o);case"boolean":return er(o);case"bigint":return Yn?Yn(o):"0";case"symbol":return $n?$n(o):"Symbol()";case"undefined":return tt(o);case"function":case"object":{if(o===null)return tt(o);let n=o,i=K(n,"toString");if(typeof i=="function"){let r=i(n);return typeof r=="string"?r:tt(r)}return tt(o)}default:return tt(o)}}function K(o,n){for(;o!==null;){let r=oo(o,n);if(r){if(r.get)return R(r.get);if(typeof r.value=="function")return R(r.value)}o=no(o)}function i(){return null}return i}function or(o,n){for(;o!==null;){let i=oo(o,n);if(i)return i.get?R(i.get):null;o=no(o)}return null}function rr(o){try{return I(o,""),!0}catch{return!1}}var Vn=M(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),Yt=M(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),$t=M(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),ir=M(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),Vt=M(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),sr=M(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),qn=M(["#text"]),Kn=M(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","command","commandfor","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns"]),qt=M(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dominant-baseline","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","pointer-events","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-orientation","text-rendering","textlength","type","u1","u2","unicode","values","vector-effect","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Xn=M(["accent","accentunder","align","bevelled","close","columnalign","columnlines","columnspacing","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lquote","lspace","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),_t=M(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),ar=P(/{{[\w\W]*|^[\w\W]*}}/g),cr=P(/<%[\w\W]*|^[\w\W]*%>/g),lr=P(/\${[\w\W]*/g),pr=P(/^data-[\-\w.\u00B7-\uFFFF]+$/),ur=P(/^aria-[\-\w]+$/),Zn=P(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),fr=P(/^(?:\w+script|data):/i),dr=P(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),mr=P(/^html$/i),gr=P(/^[a-z][.\w]*(-[.\w]+)+$/i),Kt=P(/<[/\w!]/g),Qn=P(/<[/\w]/g),hr=P(/<\/no(script|embed|frames)/i),Jn=P(/\/>/i),D={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},_r=M(T({},["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"])),yr=function(){return typeof window>"u"?null:window},br=function(n,i){if(typeof n!="object"||typeof n.createPolicy!="function")return null;let r=null,p="data-tt-policy-suffix";i&&i.hasAttribute(p)&&(r=i.getAttribute(p));let f="dompurify"+(r?"#"+r:"");try{return n.createPolicy(f,{createHTML(l){return l},createScriptURL(l){return l}})}catch{return console.warn("TrustedTypes policy "+f+" could not be created."),null}},eo=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},Se=function(n,i,r,p){return W(n,i)&&Be(n[i])?T(p.base?q(p.base):{},n[i],p.transform):r},Xt=function(n,i,r){let p=W(n,i)?n[i]:void 0;return p&&typeof p=="object"?q(p):r()};function so(){let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:yr(),n=c=>so(c);if(n.version="3.4.17",n.removed=[],!o||!o.document||o.document.nodeType!==D.document||!o.Element)return n.isSupported=!1,n;let i=o.document,r=i,p=r.currentScript;o.DocumentFragment;let f=o.HTMLTemplateElement,l=o.Node,m=o.Element,u=o.NodeFilter;o.NamedNodeMap===void 0&&(o.NamedNodeMap||o.MozNamedAttrMap),o.HTMLFormElement;let A=o.DOMParser,S=o.trustedTypes,F=m.prototype,ve=K(F,"cloneNode"),$=K(F,"remove"),ke=K(F,"removeAttributeNode"),ee=K(F,"nextSibling"),ae=K(F,"childNodes"),ce=K(F,"parentNode"),le=K(F,"shadowRoot"),Ne=K(F,"attributes"),X=l&&l.prototype?K(l.prototype,"nodeType"):null,pe=l&&l.prototype?K(l.prototype,"nodeName"):null,ye=l&&l.prototype?K(l.prototype,"ownerDocument"):null,z=function(e){return X?X(e):e.nodeType},be=function(e){return pe?pe(e):e.nodeName},Ge=or(F,"namespaceURI"),We=function(e){return Ge?Ge(e):e.namespaceURI};if(typeof f=="function"){let c=i.createElement("template");c.content&&c.content.ownerDocument&&(i=c.content.ownerDocument)}let U,ue="",Ye,d=!1,b=0,x=function(){if(b>0)throw he('A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.')},k=function(e){x(),b++;try{return U.createHTML(e)}finally{b--}},fe=function(e){x(),b++;try{return U.createScriptURL(e)}finally{b--}},te=function(){return d||(Ye=br(S,p),d=!0),Ye},O=i,V=O.implementation,Z=O.createNodeIterator,bt=O.createDocumentFragment,nt=O.getElementsByTagName,ot=r.importNode,E=eo();n.isSupported=typeof to=="function"&&typeof ce=="function"&&V&&V.createHTMLDocument!==void 0;let de=ar,rt=cr,N=lr,ne=pr,Te=ur,$e=fr,oe=dr,it=gr,st=Zn,v=null,Tt=T({},[...Vn,...Yt,...$t,...Vt,...qn]),w=null,At=T({},[...Kn,...qt,...Xn,..._t]),re=Object.seal(je(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Ve=null,rn=null,Ae=Object.seal(je(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),sn=!0,Et=!0,an=!1,xt=!0,me=!1,we=!0,Re=!1,St=!1,at=null,ct=null,vt=!1,Me=!1,lt=!1,pt=!1,cn=!0,ln=!1,pn="user-content-",wt=!0,Rt=!1,Oe=null,Ie={},Ce=null,un=T({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","selectedcontent","style","svg","template","thead","title","video","xmp"]),fn=null,dn=T({},["audio","video","img","source","image","track"]),mn=null,gn=T({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),ut="http://www.w3.org/1998/Math/MathML",ft="http://www.w3.org/2000/svg",ie="http://www.w3.org/1999/xhtml",Pe=ie,Ot=!1,Ct=null,Ao=T({},[ut,ft,ie],Wt),hn=M(["mi","mo","mn","ms","mtext"]),Dt=T({},hn),_n=M(["annotation-xml"]),Lt=T({},_n),Eo=T({},["title","style","font","a","script"]),qe=null,xo=["application/xhtml+xml","text/html"],So="text/html",C=null,Ue=null,vo=i.createElement("form"),yn=function(e){return e instanceof RegExp||e instanceof Function},kt=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Ue&&Ue===e)return;(!e||typeof e!="object")&&(e={}),e=q(e),qe=xo.indexOf(e.PARSER_MEDIA_TYPE)===-1?So:e.PARSER_MEDIA_TYPE,C=qe==="application/xhtml+xml"?Wt:Le,v=Se(e,"ALLOWED_TAGS",Tt,{transform:C}),w=Se(e,"ALLOWED_ATTR",At,{transform:C}),Ct=Se(e,"ALLOWED_NAMESPACES",Ao,{transform:Wt}),mn=Se(e,"ADD_URI_SAFE_ATTR",gn,{transform:C,base:gn}),fn=Se(e,"ADD_DATA_URI_TAGS",dn,{transform:C,base:dn}),Ce=Se(e,"FORBID_CONTENTS",un,{transform:C}),Ve=Se(e,"FORBID_TAGS",q({}),{transform:C}),rn=Se(e,"FORBID_ATTR",q({}),{transform:C}),Ie=W(e,"USE_PROFILES")?e.USE_PROFILES&&typeof e.USE_PROFILES=="object"?q(e.USE_PROFILES):e.USE_PROFILES:!1,sn=e.ALLOW_ARIA_ATTR!==!1,Et=e.ALLOW_DATA_ATTR!==!1,an=e.ALLOW_UNKNOWN_PROTOCOLS||!1,xt=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,me=e.SAFE_FOR_TEMPLATES||!1,we=e.SAFE_FOR_XML!==!1,Re=e.WHOLE_DOCUMENT||!1,Me=e.RETURN_DOM||!1,lt=e.RETURN_DOM_FRAGMENT||!1,pt=e.RETURN_TRUSTED_TYPE||!1,vt=e.FORCE_BODY||!1,cn=e.SANITIZE_DOM!==!1,ln=e.SANITIZE_NAMED_PROPS||!1,wt=e.KEEP_CONTENT!==!1,Rt=e.IN_PLACE||!1,st=rr(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:Zn,Pe=typeof e.NAMESPACE=="string"?e.NAMESPACE:ie,Dt=Xt(e,"MATHML_TEXT_INTEGRATION_POINTS",()=>T({},hn)),Lt=Xt(e,"HTML_INTEGRATION_POINTS",()=>T({},_n));let t=Xt(e,"CUSTOM_ELEMENT_HANDLING",()=>je(null));if(re=je(null),W(t,"tagNameCheck")&&yn(t.tagNameCheck)&&(re.tagNameCheck=t.tagNameCheck),W(t,"attributeNameCheck")&&yn(t.attributeNameCheck)&&(re.attributeNameCheck=t.attributeNameCheck),W(t,"allowCustomizedBuiltInElements")&&typeof t.allowCustomizedBuiltInElements=="boolean"&&(re.allowCustomizedBuiltInElements=t.allowCustomizedBuiltInElements),P(re),me&&(Et=!1),lt&&(Me=!0),Ie&&(v=T({},qn),w=je(null),Ie.html===!0&&(T(v,Vn),T(w,Kn)),Ie.svg===!0&&(T(v,Yt),T(w,qt),T(w,_t)),Ie.svgFilters===!0&&(T(v,$t),T(w,qt),T(w,_t)),Ie.mathMl===!0&&(T(v,Vt),T(w,Xn),T(w,_t))),Ae.tagCheck=null,Ae.attributeCheck=null,W(e,"ADD_TAGS")&&(typeof e.ADD_TAGS=="function"?Ae.tagCheck=e.ADD_TAGS:Be(e.ADD_TAGS)&&(v===Tt&&(v=q(v)),T(v,e.ADD_TAGS,C))),W(e,"ADD_ATTR")&&(typeof e.ADD_ATTR=="function"?Ae.attributeCheck=e.ADD_ATTR:Be(e.ADD_ATTR)&&(w===At&&(w=q(w)),T(w,e.ADD_ATTR,C))),W(e,"ADD_FORBID_CONTENTS")&&Be(e.ADD_FORBID_CONTENTS)&&(Ce===un&&(Ce=q(Ce)),T(Ce,e.ADD_FORBID_CONTENTS,C)),wt&&(v["#text"]=!0),Re&&T(v,["html","head","body"]),v.table&&(T(v,["tbody"]),delete Ve.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!="function")throw he('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw he('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');let s=U;U=e.TRUSTED_TYPES_POLICY;try{ue=k("")}catch(a){throw U=s,a}}else e.TRUSTED_TYPES_POLICY===null?(U=void 0,ue=""):(U===void 0&&(U=te()),U&&typeof ue=="string"&&(ue=k("")));M&&M(e),Ue=e},bn=T({},[...Yt,...$t,...ir]),Tn=T({},[...Vt,...sr]),wo=function(e,t,s){return t.namespaceURI===ie?e==="svg":t.namespaceURI===ut?e==="svg"&&(s==="annotation-xml"||Dt[s]):!!bn[e]},Ro=function(e,t,s){return t.namespaceURI===ie?e==="math":t.namespaceURI===ft?e==="math"&&Lt[s]:!!Tn[e]},Oo=function(e,t,s){return t.namespaceURI===ft&&!Lt[s]||t.namespaceURI===ut&&!Dt[s]?!1:!Tn[e]&&(Eo[e]||!bn[e])},Co=function(e){let t=We(e),s=Le(be(e)),a=ce(e),g,h;return a&&z(a)===D.element?(g={namespaceURI:We(a)},h=Le(be(a))):(g={namespaceURI:Pe},h="template"),Ct[t]?t===ft?wo(s,g,h):t===ut?Ro(s,g,h):t===ie?Oo(s,g,h):!!(qe==="application/xhtml+xml"&&Ct[t]):!1},Ee=function(e){Qe(n.removed,{element:e});try{ce(e).removeChild(e)}catch{if($(e),!ce(e))throw he("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place")}},An=function(e,t,s){try{ke(e,t)}catch{try{e.removeAttribute(s)}catch{}}},Nt=function(e){It(e);let t=ae(e);t&&ge(Xo(t),a=>{try{$(a)}catch{}});let s=z(e)===D.element?Ne(e):null;if(s)for(let a=s.length-1;a>=0;--a){let g=s[a],h=g&&g.name;typeof h=="string"&&An(e,g,h)}},Fe=function(e,t,s){if(!s)try{s=t.getAttributeNode(e)}catch{s=null}Qe(n.removed,{attribute:s||null,from:t});try{s?ke(t,s):t.removeAttribute(e)}catch{try{t.removeAttribute(e)}catch{}}if(e==="is")if(Me||lt)try{Ee(t)}catch{}else try{t.setAttribute(e,"")}catch{}},En=function(e){let t=Ne(e);if(t)for(let s=t.length-1;s>=0;--s){let a=t[s],g=a&&a.name;typeof g!="string"||w[C(g)]||An(e,a,g)}},Mt=function(e,t){let s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,a=[e];for(;a.length>0;){let g=a.pop();if(t(g)===!1)continue;if(s&&z(g)===D.element){let y=le(g);xe(y)&&a.push(y)}let h=ae(g);if(h)for(let y=h.length-1;y>=0;--y)a.push(h[y])}},It=function(e){Mt(e,t=>{z(t)===D.element&&En(t)})},Pt=function(e){let t=[];return Mt(e,s=>{t.push(s)},!0),t},Do=function(e,t){let s=Bt();ge(Pt(e),a=>{z(a)===D.element&&Gt(s,a)}),ge(t,a=>{z(a)===D.element&&!Je(s,a)&&En(a)})},xn=function(e,t){let s=!1;return ge(n.removed,a=>{a.element&&(s=s||a.element===e,It(a.element))}),Do(e,t),s},Lo=8,ko=function(e,t){let s=Oe,a=null,g=()=>(a||(a=Bt(),ge(t,h=>{Gt(a,h)})),a);for(let h=0;;h++){let y=Pt(e),L=[e],se=!1;if(ge(y,H=>{z(H)===D.documentFragment?Qe(L,H):!se&&!Je(s,H)&&(se=Je(g(),H))}),!se)return;if(h>=Lo)throw he("the tree kept changing during in-place sanitization; refusing to return it");ge(L,(H,B)=>{No(H,B>0,e,g())})}},No=function(e,t,s,a){let g=Ut(e),h;for(;h=g.nextNode();)!Je(a,h)||Je(Oe,h)||(t&&Q(E.uponSanitizeShadowNode,h,null),zt(h,s),Ht(h,s),xe(h.content)&&Xe(h.content))},Mo=function(e){Oe&&Gt(Oe,e)},Sn=function(e,t){return we?e==="patchsrc"?!0:e==="for"&&t!=="label"&&t!=="output":!1},Io=function(e){we&&Mt(e,t=>{let s=z(t);if(s===D.processingInstruction||s===D.comment&&I(Qn,t.data)){try{$(t)}catch{}return!1}if(s===D.element){let a=t,g=C(be(t));try{a.hasAttribute&&a.hasAttribute("patchsrc")&&a.removeAttribute("patchsrc"),a.hasAttribute&&a.hasAttribute("for")&&Sn("for",g)&&a.removeAttribute("for")}catch{}}return!0})},vn=function(e){let t=null,s=null;if(vt)e="<remove></remove>"+e;else{let h=Gn(e,/^[\r\n\t ]+/);s=h&&h[0]}qe==="application/xhtml+xml"&&Pe===ie&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");let a=U?k(e):e;if(Pe===ie)try{t=new A().parseFromString(a,qe)}catch{}if(!t||!t.documentElement){t=V.createDocument(Pe,"template",null);try{t.documentElement.innerHTML=Ot?ue:a}catch{}}let g=t.body||t.documentElement;return e&&s&&g.insertBefore(i.createTextNode(s),g.childNodes[0]||null),Pe===ie?nt.call(t,Re?"html":"body")[0]:Re?t.documentElement:g},Ut=function(e){let t=ye?ye(e):e.ownerDocument;return Z.call(t||e,e,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT|u.SHOW_PROCESSING_INSTRUCTION|u.SHOW_CDATA_SECTION,null)},dt=function(e){return e=et(e,de," "),e=et(e,rt," "),e=et(e,N," "),e},Ft=function(e){var t;wn(e);let s=(t=e.querySelectorAll)===null||t===void 0?void 0:t.call(e,"template");s&&ge(s,a=>{xe(a.content)&&Ft(a.content)})},wn=function(e){e.normalize();let t=ye?ye(e):e.ownerDocument,s=Z.call(t||e,e,u.SHOW_TEXT|u.SHOW_COMMENT|u.SHOW_CDATA_SECTION|u.SHOW_PROCESSING_INSTRUCTION,null),a=s.nextNode();for(;a;)a.data=dt(a.data),a=s.nextNode()},mt=function(e){let t=pe?pe(e):null;return typeof t!="string"||C(t)!=="form"?!1:typeof e.nodeName!="string"||typeof e.textContent!="string"||typeof e.removeChild!="function"||e.attributes!==Ne(e)||typeof e.removeAttribute!="function"||typeof e.removeAttributeNode!="function"||typeof e.getAttributeNode!="function"||typeof e.setAttribute!="function"||typeof e.namespaceURI!="string"||typeof e.insertBefore!="function"||typeof e.hasChildNodes!="function"||e.nodeType!==X(e)||e.childNodes!==ae(e)},xe=function(e){if(!X||typeof e!="object"||e===null)return!1;try{return X(e)===D.documentFragment}catch{return!1}},Ke=function(e){if(!X||typeof e!="object"||e===null)return!1;try{return typeof X(e)=="number"}catch{return!1}};function Q(c,e,t){c.length!==0&&ge(c,s=>{s.call(n,e,t,Ue)})}let Po=function(e,t){return!!(we&&e.hasChildNodes()&&!Ke(e.firstElementChild)&&I(Kt,e.textContent)&&I(Kt,e.innerHTML)||we&&_r[t]&&z(e)===D.element&&We(e)===ie&&(Ke(e.firstElementChild)||typeof e.textContent=="string"&&I(Kt,e.textContent))||e.nodeType===D.processingInstruction||we&&e.nodeType===D.comment&&I(Qn,e.data))},gt=function(e,t){if(e instanceof RegExp)return I(e,t);if(e instanceof Function){for(var s=arguments.length,a=new Array(s>2?s-2:0),g=2;g<s;g++)a[g-2]=arguments[g];return!!e(t,...a)}return!1},Uo=function(e,t,s){if(!Ve[t]&&Cn(t)&&gt(re.tagNameCheck,t))return!1;if(wt&&!Ce[t]&&!Ce[Le(t)]){let a=ce(e),g=ae(e);if(g&&a){let h=g.length;for(let y=h-1;y>=0;--y){let L=e===s?ve(g[y],!0):g[y];a.insertBefore(L,ee(e))}}}return Ee(e),!0},Rn=function(e,t,s,a){return e.length===0?t:t===s||t===a?q(t):t},ze=function(e,t){return e===t||ce(e)!==null?!1:(Rt&&It(e),!0)},zt=function(e,t){if(Mo(e),Q(E.beforeSanitizeElements,e,null),ze(e,t))return!0;if(mt(e))return Ee(e),!0;let s=C(be(e));if(v=Rn(E.uponSanitizeElement,v,Tt,at),Q(E.uponSanitizeElement,e,{tagName:s,allowedTags:v}),ze(e,t))return!0;if(Po(e,s))return Ee(e),!0;if(Ve[s]||!(Ae.tagCheck instanceof Function&&Ae.tagCheck(s))&&!v[s]){let a=Uo(e,s,t);return a===!1&&(Q(E.afterSanitizeElements,e,null),ze(e,t))?!0:a}if(z(e)===D.element&&!Co(e)||(s==="noscript"||s==="noembed"||s==="noframes")&&I(hr,e.innerHTML))return Ee(e),!0;if(me&&e.nodeType===D.text){let a=dt(e.textContent);e.textContent!==a&&(Qe(n.removed,{element:e.cloneNode()}),e.textContent=a)}return Q(E.afterSanitizeElements,e,null),ze(e,t)},On=function(e,t,s){if(rn[t]||Sn(t,e)||cn&&(t==="id"||t==="name")&&(s in i||s in vo))return!1;let a=w[t]||Ae.attributeCheck instanceof Function&&Ae.attributeCheck(t,e);return Et&&I(ne,t)||sn&&I(Te,t)?!0:a?mn[t]||I(st,et(s,oe,""))||(t==="src"||t==="xlink:href"||t==="href")&&e!=="script"&&Wn(s,"data:")===0&&fn[e]||an&&!I($e,et(s,oe,""))?!0:!s:Cn(e)&&gt(re.tagNameCheck,e)&&gt(re.attributeNameCheck,t,e)||t==="is"&&re.allowCustomizedBuiltInElements&&gt(re.tagNameCheck,s)},Fo=T({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),Cn=function(e){return!Fo[Le(e)]&&I(it,e)},zo=function(e,t,s,a){if(U&&typeof S=="object"&&typeof S.getAttributeType=="function"&&!s)switch(S.getAttributeType(e,t)){case"TrustedHTML":return k(a);case"TrustedScriptURL":return fe(a)}return a},Ho=function(e,t,s,a){try{return s?e.setAttributeNS(s,t,a):e.setAttribute(t,a),mt(e)?(Ee(e),!1):!0}catch{return Fe(t,e),!1}},Dn=function(e,t){return we&&I(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,t)?!0:Le(e)==="attributename"&&Gn(t,"href")!==null},Ht=function(e,t){if(Q(E.beforeSanitizeAttributes,e,null),ze(e,t))return;let s=e.attributes;if(!s||mt(e))return;w=Rn(E.uponSanitizeAttribute,w,At,ct);let a={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:w,forceKeepAttr:void 0},g=s.length,h=C(e.nodeName);for(;g--;){let y=s[g],L=y.name,se=y.namespaceURI,H=y.value,B=C(L),He=H,G=L==="value"?He:Qo(He),Ln=!1;if(a.attrName=B,a.attrValue=G,a.keepAttr=!0,a.forceKeepAttr=void 0,Q(E.uponSanitizeAttribute,e,a),G=a.attrValue,ln&&(B==="id"||B==="name")&&Wn(G,pn)!==0&&(Fe(L,e,y),G=pn+G,Ln=!0),Dn(L,G)){Fe(L,e,y);continue}if(!a.forceKeepAttr){if(!a.keepAttr){Fe(L,e,y);continue}if(!xt&&I(Jn,G)){Fe(L,e,y);continue}if(me&&(G=dt(G)),!On(h,B,G)){Fe(L,e,y);continue}G=zo(h,B,se,G),G!==He&&Ho(e,L,se,G)&&Ln&&Bn(n.removed)}}Q(E.afterSanitizeAttributes,e,null),ze(e,t)},Xe=function(e){let t=null,s=Ut(e);for(Q(E.beforeSanitizeShadowDOM,e,null);t=s.nextNode();)if(Q(E.uponSanitizeShadowNode,t,null),zt(t,e),Ht(t,e),xe(t.content)&&Xe(t.content),z(t)===D.element){let a=le(t);xe(a)&&(jt(a),Xe(a))}me&&wn(e),Q(E.afterSanitizeShadowDOM,e,null)},jt=function(e){let t=[{node:e,shadow:null}];for(;t.length>0;){let s=t.pop();if(s.shadow){Xe(s.shadow);continue}let a=s.node,g=z(a)===D.element,h=ae(a);if(h)for(let y=h.length-1;y>=0;--y)t.push({node:h[y],shadow:null});if(g){let y=pe?pe(a):null;if(typeof y=="string"&&C(y)==="template"){let L=a.content;xe(L)&&t.push({node:L,shadow:null})}}if(g){let y=le(a);xe(y)&&t.push({node:null,shadow:y},{node:y,shadow:null})}}};return n.sanitize=function(c){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=null,s=null,a=null,g=null;if(Ot=!c,Ot&&(c="<!-->"),typeof c!="string"&&!Ke(c)&&(c=nr(c),typeof c!="string"))throw he("dirty is not a string, aborting");if(!n.isSupported)return c;St?(v=at,w=ct):kt(e),(E.uponSanitizeElement.length>0||E.uponSanitizeAttribute.length>0)&&(v=q(v)),E.uponSanitizeAttribute.length>0&&(w=q(w)),n.removed=[];let h=Rt&&typeof c!="string"&&Ke(c),y=[],L=Oe;if(h){Io(c);let B=be(c);if(typeof B=="string"){let He=C(B);if(!v[He]||Ve[He])throw Nt(c),he("root node is forbidden and cannot be sanitized in-place")}if(mt(c))throw Nt(c),he("root node is clobbered and cannot be sanitized in-place");y=Pt(c),Oe=Bt()}else if(Ke(c))t=vn("<!---->"),s=t.ownerDocument.importNode(c,!0),s.nodeType===D.element&&s.nodeName==="BODY"||s.nodeName==="HTML"?t=s:t.appendChild(s),jt(t);else{if(!Me&&!me&&!Re&&c.indexOf("<")===-1)return U&&pt?k(c):c;if(t=vn(c),!t)return Me?null:pt?ue:""}t&&vt&&Ee(t.firstChild);let se=h?c:t;try{h&&jt(c);let B=Ut(se);for(;a=B.nextNode();)zt(a,se),Ht(a,se),xe(a.content)&&Xe(a.content);h&&ko(c,y)}catch(B){throw h&&(Nt(c),xn(c,y)),B}finally{Oe=L}if(h){if(xn(c,y))throw he("a node selected for removal could not be safely returned; refusing to sanitize in place");return me&&Ft(c),c}if(Me){if(me&&Ft(t),lt)for(g=bt.call(t.ownerDocument);t.firstChild;)g.appendChild(t.firstChild);else g=t;return(w.shadowroot||w.shadowrootmode)&&(g=ot.call(r,g,!0)),g}let H=Re?t.outerHTML:t.innerHTML;return Re&&v["!doctype"]&&t.ownerDocument&&t.ownerDocument.doctype&&t.ownerDocument.doctype.name&&I(mr,t.ownerDocument.doctype.name)&&(H="<!DOCTYPE "+t.ownerDocument.doctype.name+`>
3
+ `+H),me&&(H=dt(H)),U&&pt?k(H):H},n.setConfig=function(){let c=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};kt(c),St=!0,at=v,ct=w},n.clearConfig=function(){Ue=null,St=!1,at=null,ct=null,U=Ye,ue=""},n.isValidAttribute=function(c,e,t){Ue||kt({});let s=C(c),a=C(e);return typeof t=="string"&&(Dn(e,t)||!xt&&I(Jn,t))?!1:On(s,a,t)},n.addHook=function(c,e){typeof e=="function"&&W(E,c)&&Qe(E[c],e)},n.removeHook=function(c,e){if(W(E,c)){if(e!==void 0){let t=Ko(E[c],e);return t===-1?void 0:Zo(E[c],t,1)[0]}return Bn(E[c])}},n.removeHooks=function(c){W(E,c)&&(E[c]=[])},n.removeAllHooks=function(){E=eo()},n}var ao=so();function _(o,n,i){let r=document.createElement(o);return n&&(r.textContent=n),i&&(r.className=i),r}function j(o){return typeof o!="string"?"":(uo(o).textContent||"").trim()}var lo=new Set(["A","B","BLOCKQUOTE","BR","CODE","EM","I","LI","OL","P","PRE","STRONG","U","UL"]),po=new Set(["H1","H2","H3","H4","H5","H6"]),co;function uo(o){return co??(co=ao(window)),co.sanitize(o,{ALLOWED_TAGS:[...lo,...po].map(n=>n.toLowerCase()),ALLOWED_ATTR:["href"],ALLOW_DATA_ATTR:!1,ALLOW_ARIA_ATTR:!1,RETURN_DOM_FRAGMENT:!0})}function fo(o){let n=document.createDocumentFragment();if(typeof o!="string")return n;let i=(r,p)=>{for(let f of Array.from(r.childNodes)){if(f.nodeType===Node.TEXT_NODE){p.appendChild(document.createTextNode(f.textContent||""));continue}if(!(f instanceof Element))continue;let l=f.tagName;if(po.has(l)){let m=document.createElement("p"),u=document.createElement("strong");m.appendChild(u),i(f,u),p.appendChild(m)}else if(lo.has(l)){let m=document.createElement(l.toLowerCase());if(l==="A"){let u=f.getAttribute("href")||"";/^(https?:|mailto:)/i.test(u.trim())&&(m.setAttribute("href",u.trim()),m.setAttribute("target","_blank"),m.setAttribute("rel","noopener noreferrer nofollow"))}i(f,m),p.appendChild(m)}else["SCRIPT","STYLE","TEMPLATE","NOSCRIPT"].includes(l)||i(f,p)}};return i(uo(o),n),n}var Jt=4,mo="http://www.w3.org/2000/svg";function Tr(){let o=document.createElementNS(mo,"svg");o.setAttribute("viewBox","0 0 24 24"),o.setAttribute("class","chev"),o.setAttribute("aria-hidden","true");let n=document.createElementNS(mo,"path");return n.setAttribute("d","M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z"),o.append(n),o}function en(o,n){let i=(o||[]).map(u=>j(u.data_item_name)).filter(Boolean);if(!i.length){let u=(n||[]).map(j).filter(Boolean).join(" \xB7 ");return u?_("div",u,"ps"):null}let r=_("div",void 0,"ps"),p=document.createTextNode("");r.append(p);let f=!1,l=()=>{p.data=(f?i:i.slice(0,Jt)).join(", "),m.textContent=f?"show less":`+${i.length-Jt} more`},m=_("button",void 0,"more");return m.type="button",m.onclick=()=>{f=!f,l()},l(),i.length>Jt&&r.append(m),r}function go(o,n,i){let r=_("div",void 0,"grp"),p=_("button",void 0,"gh");p.type="button",p.setAttribute("aria-expanded","false");let f=_("span",void 0,"gx");f.append(_("span",o,"gt")),n&&f.append(_("span",n,"gd")),p.append(f,Tr()),p.onclick=()=>{let m=!r.classList.contains("open");r.classList.toggle("open",m),p.setAttribute("aria-expanded",String(m))};let l=_("div",void 0,"gb");return i.forEach(m=>l.append(_("span",m,"gi"))),r.append(p,l),r}function tn(o){if(!j(o))return null;let n=_("div",void 0,"text");return n.append(fo(o)),n}function ho({root:o,config:n,state:i,mode:r,demo:p,onClose:f,onSubmit:l,onChange:m}){o.replaceChildren();for(let d of n.purposes)d.required&&(i.choices[String(d.id)]=!0);let u=n.notice||{},A=[...u.purposes||[]],S=new Set(A.flatMap(d=>(d.sub_items||[]).map(b=>b.purpose_id))),F=n.purposes.filter(d=>!S.has(d.id));F.length&&A.push({purpose_reason:A.length?"Other purposes":"Purposes",sub_items:F.map(d=>({purpose_id:d.id,purpose_name:d.name}))});let ve=u.content?.consent_data?.find(d=>d.section_type==="initial-section")?.section_data,$=_("section",void 0,"shell"),ke=_("div",void 0,"body");if(r!=="panel"){let d=_("button","\xD7","close");d.type="button",d.setAttribute("aria-label","Close consent form"),d.onclick=()=>f(),$.append(d)}ke.append(_("h1",j(ve?.title)||n.name||"Your consent preferences"));let ee=_("form",void 0,"sec");ee.id="consent-form",ee.style.padding="0",ee.style.gap="16px";let ae=new Map,ce=[],le=()=>{ae.forEach((d,b)=>{d.forEach(x=>x.checked=!!i.choices[String(b)])}),ce.forEach(d=>{d.box.checked=d.ids.every(b=>!!i.choices[String(b)])}),ue()},Ne=(d,b)=>{if(i.busy){le();return}for(let x of d)n.purposes.find(k=>k.id===x)?.required||(i.choices[String(x)]=b);m(),le()},X=ve?.sections?.length?[...ve.sections]:[{section_type:"data_process_section",section_data:{section_title:"How we use it"}}];X.some(d=>d.section_type==="data_process_section")||X.push({section_type:"data_process_section",section_data:{section_title:"Purposes"}});let pe=u.sections_language_code&&u.sections_language_code!==n.language_code?u.sections_language_code:void 0;for(let d of X){let b=d.section_data,x=d.section_type;if(x==="link_section")continue;let k=_("div",void 0,"sec");if(x==="generic_section"){let O=tn(b.section_body);O&&k.append(O),ee.append(k);continue}b.section_title&&k.append(_("p",j(b.section_title),"st"));let fe=tn(b.section_body);fe&&k.append(fe);let te=_("div",void 0,"grps");if(pe&&(te.lang=pe),x==="data_collect_section")for(let O of u.collected||[]){let V=O.sub_items||[];te.append(go(`${j(O.data_category_name)||"Data"} (${V.length})`,j(O.desc),V.map(j)))}else if(x==="data_process_section")for(let O of A){let V=O.sub_items||[],Z=V.map(N=>N.purpose_id),bt=Z.length>0&&Z.every(N=>n.purposes.find(ne=>ne.id===N)?.required);for(let N of Z){let ne=!!n.purposes.find(Te=>Te.id===N)?.required;i.choices[String(N)]=ne||!!i.choices[String(N)]}let nt=_("div",void 0,"grp pg"),ot=_("div",void 0,"ph"),E=_("span",void 0,"gx");E.append(_("span",j(O.purpose_reason)||"Purposes","gt")),O.desc&&E.append(_("span",j(O.desc),"gd"));let de=_("input");de.type="checkbox",de.disabled=bt,de.setAttribute("aria-label",`Select all: ${O.purpose_reason||"purposes"}`),de.onchange=()=>Ne(Z,de.checked),ce.push({box:de,ids:Z}),ot.append(E,de);let rt=_("div",void 0,"pb");for(let N of V){let ne=n.purposes.find(st=>st.id===N.purpose_id),Te=_("div",void 0,"pr"),$e=_("label",void 0,"prh");$e.append(_("span",j(N.purpose_name||ne?.name),"pn"));let oe=_("input");oe.type="checkbox",oe.name=String(N.purpose_id),oe.disabled=!!ne?.required,oe.onchange=()=>Ne([N.purpose_id],oe.checked),ae.set(N.purpose_id,[...ae.get(N.purpose_id)||[],oe]),$e.append(oe),Te.append($e),ne?.description&&Te.append(_("p",j(ne.description),"ps"));let it=en(N.data_items,N.data_categories);it&&Te.append(it),rt.append(Te)}nt.append(ot,_("hr",void 0,"hr"),rt),te.append(nt)}else if(x==="data_share_section"){for(let O of u.shared||[]){let V=_("div",void 0,"sh");V.append(_("span",j(O.purpose_name)||"Sharing","gt"));let Z=en(O.data_items,O.data_categories);Z&&V.append(Z),te.append(V)}te.childElementCount||te.append(_("p","NIL","st"))}te.childElementCount&&k.append(te),ee.append(k)}le();let ye=_("div");ye.id="feedback",ye.setAttribute("aria-live","polite"),ee.append(ye),ee.onsubmit=d=>{d.preventDefault(),l()},ke.append(ee),$.append(ke);let z=ve?.buttons?.length?ve.buttons:[{button_type:"accept-all",button_text:"Accept All",button_enabled:!0},{button_type:"reject-all",button_text:"Reject All",button_enabled:!0},{button_type:"accept-necessary",button_enabled:!0,button_data:{accept_necessary_text:"Accept Necessary",accept_selected_text:"Accept Selected"}}],be=_("div",void 0,"foot"),Ge=_("div",void 0,"actions"),We=d=>{d==="accept-all"?n.purposes.forEach(b=>i.choices[String(b.id)]=!0):d==="reject-all"&&n.purposes.forEach(b=>i.choices[String(b.id)]=b.required),l()},U=[...z.filter(d=>d.button_type!=="accept-necessary"),...z.filter(d=>d.button_type==="accept-necessary")];for(let d of U){if(d.button_enabled===!1)continue;let b=d.button_type==="accept-necessary",x=_("button",void 0,b?"primary":void 0);x.type="button",x.dataset.type=d.button_type,x.textContent=b?d.button_data?.accept_necessary_text||"Accept Necessary":d.button_text||d.button_type,x.onclick=()=>We(d.button_type),b&&(x.dataset.necessary=d.button_data?.accept_necessary_text||"Accept Necessary",x.dataset.selected=d.button_data?.accept_selected_text||"Accept Selected"),Ge.append(x)}return be.append(Ge),$.append(be),o.append($),le(),(r==="popup"||r==="page")&&$.addEventListener("keydown",Ye),r!=="panel"&&!p&&($.tabIndex=-1,$.focus({preventScroll:!0})),le;function ue(){let d=o.querySelector("button.primary");if(!d?.dataset.necessary)return;let b=n.purposes.some(x=>!x.required&&i.choices[String(x.id)]);d.textContent=b?d.dataset.selected:d.dataset.necessary}function Ye(d){if(d.key==="Escape"){f();return}if(d.key!=="Tab")return;let b=[...o.querySelectorAll("button:not([disabled]),input:not([disabled]),summary,a[href]")],x=b[0],k=b[b.length-1],fe=o.getRootNode().activeElement;d.shiftKey&&(fe===x||fe===$)?(d.preventDefault(),k?.focus()):!d.shiftKey&&(fe===k||fe===$)&&(d.preventDefault(),x?.focus())}}var nn=`*{box-sizing:border-box}:host{all:initial;display:block}.theme,.root{height:100%}.root{background:var(--page);color:var(--text);font:var(--fs)/1.5 var(--font)}button,input{font:inherit;color:inherit}button{cursor:pointer}button:disabled{cursor:wait;opacity:.65}button:focus-visible,input:focus-visible,a:focus-visible{outline:3px solid var(--primary);outline-offset:2px}.shell:focus{outline:none}.shell{max-width:560px;margin:auto;background:var(--bg);height:100%;display:flex;flex-direction:column;position:relative}.body{flex:1;min-height:0;overflow:auto;padding:var(--pad) var(--pad) 8px;display:flex;flex-direction:column;gap:var(--gap)}h1{font-size:calc(var(--fs) + 2px);line-height:1.4;font-weight:700;margin:0}.sec{display:flex;flex-direction:column;gap:calc(var(--gap) * .5);padding-bottom:var(--gap)}.st{font-weight:700;margin:0}.text{margin:0;white-space:pre-wrap}.text :is(p,ul,ol,pre,blockquote){margin:0 0 .5em}.text>:last-child{margin-bottom:0}.text a{color:var(--primary)}.grps{display:flex;flex-direction:column;gap:calc(var(--gap) * .6)}.grp{border:1.2px solid var(--line);border-radius:var(--r-card)}.gh{display:flex;width:100%;gap:12px;align-items:center;padding:var(--rowy) var(--rowx);background:none;border:0;text-align:left}.gx{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.gt{font-weight:600}.gd{font-size:12px;font-weight:400;color:var(--muted);display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}@media(min-width:480px){.gd{-webkit-line-clamp:2}}.chev{flex-shrink:0;width:1.25em;height:1.25em;fill:currentColor;transition:transform .2s ease}.open .chev{transform:rotate(180deg)}.gb{display:none;flex-direction:column;gap:4px;padding:0 var(--rowx) var(--rowx)}.open .gb{display:flex}.gi{font-size:16px;font-weight:800}.pg{display:flex;flex-direction:column}.ph{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:var(--rowy) var(--rowx)}.hr{border:0;border-top:1px solid var(--line);margin:0}.pb{display:flex;flex-direction:column;padding:var(--rowy) var(--rowx)}.pr{display:flex;flex-direction:column;gap:2px;padding:4px 0}.prh{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:28px;cursor:pointer}.pn{font-size:15px;font-weight:800;min-width:0;flex:1}.ps{font-size:12px;font-weight:400;color:var(--muted);padding-right:32px}.more{background:none;border:0;padding:0;margin-left:4px;color:var(--muted);text-decoration:underline;font-size:12px}.pg input[type=checkbox]{width:16px;height:16px;margin:0;flex-shrink:0;accent-color:var(--primary)}.sh{display:flex;flex-direction:column;gap:2px;border:1.2px solid var(--line);border-radius:var(--r-card);padding:8px 16px}.foot{position:relative;flex-shrink:0;padding:0 var(--pad) var(--pad)}.foot:before{content:"";position:absolute;left:0;right:0;top:-50px;height:50px;background:linear-gradient(to top,var(--bg),var(--bg),transparent);pointer-events:none}.actions{display:flex;flex-direction:column;gap:calc(var(--gap) * .4)}.actions button{min-height:calc(var(--btn) - 8px);padding:0 16px;border-radius:var(--r-btn);border:1px solid var(--text);background:transparent;color:var(--text);font-weight:600;width:100%}.actions button:hover:not(:disabled){background:color-mix(in srgb,var(--text) 8%,transparent)}.actions .primary{min-height:var(--btn);background:var(--primary);border-color:var(--primary);color:var(--on-primary)}.actions .primary:hover:not(:disabled){background:var(--primary);filter:brightness(.92)}.close{position:absolute;top:10px;right:12px;background:none;border:0;font-size:23px;line-height:1;color:var(--muted);padding:4px 10px;z-index:1}.message{padding:12px 14px;border-radius:8px;background:#eff8f2;color:#19683e}.error{background:#fff0ef;color:#a43328}.root[data-mode=page] .shell{margin:36px auto;height:auto;max-height:calc(100dvh - 72px);border-radius:calc(var(--r-card) + 6px);box-shadow:0 15px 60px #16324c12}.root[data-mode=panel]{background:var(--bg);--fs: 14px}.root[data-mode=panel] .shell{max-width:none}@media(max-width:520px){.root[data-mode=page] .shell{margin:0;border-radius:0;height:100dvh;max-height:none}}
4
+ `;var _o=new WeakMap;function yo(o){let n=o.ownerDocument,i=n.defaultView;if(i&&"adoptedStyleSheets"in i.Document.prototype&&"replaceSync"in i.CSSStyleSheet.prototype){let p=_o.get(n);p||(p=new i.CSSStyleSheet,p.replaceSync(nn),_o.set(n,p)),o.adoptedStyleSheets=[p];return}let r=n.createElement("style");r.textContent=nn,o.append(r)}var J=o=>o!==null&&typeof o=="object"&&!Array.isArray(o),Y=o=>o==null||typeof o=="string",_e=(o,n)=>o==null||Array.isArray(o)&&o.length<=1e3&&o.every(n),on=o=>_e(o,n=>typeof n=="string"),bo=o=>_e(o,n=>J(n)&&Y(n.data_item_name));function To(o,n){if(!J(o)||!Y(o.sections_language_code))return!1;let i=new Set(n.map(l=>l.id)),r=new Set,p=l=>J(l)&&["accept-all","reject-all","accept-necessary"].includes(l.button_type)&&Y(l.button_text)&&(l.button_enabled===void 0||typeof l.button_enabled=="boolean")&&(l.button_data==null||J(l.button_data)&&Y(l.button_data.accept_necessary_text)&&Y(l.button_data.accept_selected_text)),f=(l,m=0)=>{if(!J(l)||typeof l.section_type!="string"||!J(l.section_data))return!1;let u=l.section_data;return m<8&&Y(u.title)&&Y(u.section_title)&&Y(u.section_body)&&_e(u.buttons,p)&&_e(u.sections,A=>f(A,m+1))};return(o.content==null||J(o.content)&&_e(o.content.consent_data,l=>f(l)))&&_e(o.purposes,l=>J(l)&&Y(l.purpose_reason)&&Y(l.desc)&&_e(l.sub_items,m=>!J(m)||!i.has(m.purpose_id)||r.has(m.purpose_id)?!1:(r.add(m.purpose_id),Y(m.purpose_name)&&bo(m.data_items)&&on(m.data_categories))))&&_e(o.collected,l=>J(l)&&Y(l.data_category_name)&&Y(l.desc)&&on(l.sub_items))&&_e(o.shared,l=>J(l)&&Y(l.purpose_name)&&bo(l.data_items)&&on(l.data_categories))}var yt=class{constructor(n){this.options=n;this.syncChecks=()=>{};this.pendingKey="";this.pendingBody="";this.needsRefresh=!1;let i=n.host.attachShadow({mode:"open"});yo(i);let r=document.createElement("div");r.className="theme",r.lang=n.config.language_code,this.root=document.createElement("div"),this.root.className="root",this.root.dataset.mode=n.mode,r.append(this.root),i.append(r),this.appearance=zn(r),this.appearance.apply(n.appearance),this.state={choices:{...n.choices},busy:!1}}render(){let{config:n,mode:i,demo:r=!1,onClose:p}=this.options;try{if(!To(n.notice,n.purposes))throw new Error("Invalid notice");this.syncChecks=ho({root:this.root,config:n,state:this.state,mode:i,demo:r,onClose:p,onSubmit:()=>this.submit(),onChange:()=>{this.pendingKey=""}})}catch{let f="The consent form could not be displayed. Check the notice configuration and reload.",l=_("section",void 0,"shell"),m=_("p",f,"message error");m.setAttribute("role","alert");let u=_("div",void 0,"body");if(u.append(m),l.append(u),i!=="panel"){let A=_("button","\xD7","close");A.setAttribute("aria-label","Close consent form"),A.type="button",A.onclick=p,l.append(A)}this.root.replaceChildren(l),i!=="panel"&&!r&&l.querySelector("button")?.focus(),this.options.onError(new Ze(f,"form_error"))}}setAppearance(n){this.appearance.apply(n),this.render()}destroy(){this.appearance.destroy()}message(n,i=!1){let r=this.root.querySelector("#feedback");r&&(r.textContent=n,r.className=i?"message error":"message",r.setAttribute("role",i?"alert":"status"))}async submit(){let{state:n,root:i,options:r}=this;if(n.busy||this.needsRefresh)return;n.busy=!0;let p=[...i.querySelectorAll("input:not(:disabled)")];p.forEach(u=>u.disabled=!0),i.querySelectorAll("button:not(.close)").forEach(u=>u.disabled=!0);let f={config_version:r.config.config_version,language_code:r.config.language_code,answers:r.config.purposes.map(u=>({purpose_id:u.id,given:!!n.choices[String(u.id)]}))},l=JSON.stringify(f);(!this.pendingKey||this.pendingBody!==l)&&(this.pendingKey=kn(),this.pendingBody=l);let m;try{m=await r.save(f,this.pendingKey),n.choices=m.choices,this.message(r.demo?"Demo complete. No record was saved.":"Your choices are saved.")}catch(u){let A=u instanceof Error?u.message:"Your choices could not be saved. Please retry.";if(this.message(A,!0),u instanceof Ze&&u.code==="notice_changed"&&r.onRefresh){this.needsRefresh=!0;let S=_("button","Reload consent form");S.type="button",S.onclick=()=>void r.onRefresh().catch(()=>{}),i.querySelector("#feedback")?.append(S)}r.onError(u)}finally{n.busy=!1,i.querySelectorAll("button").forEach(u=>u.disabled=!1),p.forEach(u=>u.disabled=!1),this.syncChecks(),this.needsRefresh&&i.querySelectorAll(".actions button").forEach(u=>{u.disabled=!0})}m&&r.onComplete(m)}};function $r(o,n){let{config:i,mode:r="panel"}=n,p=o.ownerDocument.createElement("div");o.append(p);let f=new yt({host:p,config:i,choices:{},mode:r,appearance:n.appearance??i.appearance,demo:!0,save:l=>Promise.resolve({ref_id:"demo-no-record",app_id:i.app_id,level_id:i.level_id,config_version:i.config_version,choices:Object.fromEntries(l.answers.map(m=>[m.purpose_id,m.given]))}),onComplete:l=>n.onComplete?.(l),onError:l=>n.onError?.(l),onClose:()=>n.onClose?.()});return f.render(),{setAppearance:l=>f.setAppearance(l),destroy(){f.destroy(),p.remove()}}}export{$r as renderPreview};
5
+ /*! Bundled license information:
6
+
7
+ dompurify/dist/purify.es.mjs:
8
+ (*! @license DOMPurify 3.4.17 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.17/LICENSE *)
9
+ (*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE *)
10
+ */