@atlasprivacy/consent-sdk 0.0.1-beta.1 → 1.0.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,8 @@
1
1
  # Changelog
2
2
 
3
- ## 1.0.0 (in beta)
3
+ ## 1.0.0 (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
+ 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
6
 
7
7
  - Synchronize saved decisions across tabs and SDK instances, reconcile server choices, and expose `onPreferenceChange` and `atlas-consent:change` without credentials.
8
8
  - 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, or use the versioned asset URL from your Atlas deployment. 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
@@ -1,4 +1,4 @@
1
- var $n="https://qa.dashboard.atlaskyc.com/v3/api";var Qt="0.0.1-beta.1";function Yn(){if(!globalThis.crypto?.getRandomValues)throw new Error("Atlas Consent needs a secure browser context.");return[...crypto.getRandomValues(new Uint8Array(24))].map(n=>n.toString(16).padStart(2,"0")).join("")}function bt(n,t){if(!n||typeof n!="object")return!1;let o=n;return typeof o.ref_id!="string"||!o.ref_id||o.app_id!==t.app_id||o.level_id!==t.level_id||o.config_version!==t.config_version||!o.choices||typeof o.choices!="object"||Array.isArray(o.choices)?!1:Object.keys(o.choices).length===t.purposes.length&&t.purposes.every(r=>typeof o.choices[String(r.id)]=="boolean"&&(!r.required||o.choices[String(r.id)]))}var w=class extends Error{constructor(o,r,s=0){super(o);this.code=r;this.status=s;this.name="ConsentError"}};var Vn={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"},Kn={sharp:["2px","2px"],soft:["6px","6px"],round:["999px","16px"]},sr=/^#[0-9a-f]{6}$/i,De={theme:"light",primary_color:"#ae0a60",background_color:"#ffffff",text_color:"#1a202c",radius:"soft",font:"system",density:"comfortable"},Xn={background_color:"#0f172a",text_color:"#f1f5f9"};function Jn(n){let[t,o,r]=[1,3,5].map(s=>parseInt(n.slice(s,s+2),16)/255).map(s=>s<=.03928?s/12.92:((s+.055)/1.055)**2.4);return .2126*t+.7152*o+.0722*r}function Zn(n,t){let o=Jn(n),r=Jn(t);return(Math.max(o,r)+.05)/(Math.min(o,r)+.05)}function Qn(n,t,o){let r={...De,...t||{}};for(let _ of["primary_color","background_color","text_color"])(typeof r[_]!="string"||!sr.test(r[_]))&&(r[_]=De[_]);(typeof r.radius!="string"||!Object.prototype.hasOwnProperty.call(Kn,r.radius))&&(r.radius=De.radius),(typeof r.font!="string"||!Object.prototype.hasOwnProperty.call(Vn,r.font))&&(r.font=De.font),["light","dark","system"].includes(r.theme)||(r.theme=De.theme);let s=r.theme==="dark"||r.theme==="system"&&o.matches;s&&(r.background_color.toLowerCase()===De.background_color&&(r.background_color=Xn.background_color),r.text_color.toLowerCase()===De.text_color&&(r.text_color=Xn.text_color));let[d,p]=Kn[r.radius],f=r.density==="compact",u={"--primary":r.primary_color,"--bg":r.background_color,"--text":r.text_color,"--on-primary":Zn(r.primary_color,"#000000")>Zn(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":Vn[r.font],"--r-btn":d,"--r-card":p,"--pad":f?"16px":"28px","--gap":f?"10px":"20px","--fs":f?"14px":"16px","--btn":f?"42px":"52px","--rowy":f?"4px":"12px","--rowx":f?"12px":"18px"};for(let[_,S]of Object.entries(u))n.style.setProperty(_,S);n.style.colorScheme=s?"dark":"light"}function eo(n){let t=window.matchMedia("(prefers-color-scheme: dark)"),o,r=()=>{o?.theme==="system"&&Qn(n,o,t)};return t.addEventListener("change",r),{apply(s){o=s,Qn(n,s,t)},destroy(){t.removeEventListener("change",r)}}}function ar(n,t){this.v=n,this.k=t}function to(n,t){(t==null||t>n.length)&&(t=n.length);for(var o=0,r=Array(t);o<t;o++)r[o]=n[o];return r}function cr(n){if(Array.isArray(n))return n}function lr(n,t){var o=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(o!=null){var r,s,d,p,f=[],u=!0,_=!1;try{if(d=(o=o.call(n)).next,t===0){if(Object(o)!==o)return;u=!1}else for(;!(u=(r=d.call(o)).done)&&(f.push(r.value),f.length!==t);u=!0);}catch(S){_=!0,s=S}finally{try{if(!u&&o.return!=null&&(p=o.return(),Object(p)!==p))return}finally{if(_)throw s}}return f}}function pr(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
1
+ var $n="https://play.dashboard.atlaskyc.com/v3/api";var Qt="1.0.0";function Yn(){if(!globalThis.crypto?.getRandomValues)throw new Error("Atlas Consent needs a secure browser context.");return[...crypto.getRandomValues(new Uint8Array(24))].map(n=>n.toString(16).padStart(2,"0")).join("")}function bt(n,t){if(!n||typeof n!="object")return!1;let o=n;return typeof o.ref_id!="string"||!o.ref_id||o.app_id!==t.app_id||o.level_id!==t.level_id||o.config_version!==t.config_version||!o.choices||typeof o.choices!="object"||Array.isArray(o.choices)?!1:Object.keys(o.choices).length===t.purposes.length&&t.purposes.every(r=>typeof o.choices[String(r.id)]=="boolean"&&(!r.required||o.choices[String(r.id)]))}var w=class extends Error{constructor(o,r,s=0){super(o);this.code=r;this.status=s;this.name="ConsentError"}};var Vn={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"},Kn={sharp:["2px","2px"],soft:["6px","6px"],round:["999px","16px"]},sr=/^#[0-9a-f]{6}$/i,De={theme:"light",primary_color:"#ae0a60",background_color:"#ffffff",text_color:"#1a202c",radius:"soft",font:"system",density:"comfortable"},Xn={background_color:"#0f172a",text_color:"#f1f5f9"};function Jn(n){let[t,o,r]=[1,3,5].map(s=>parseInt(n.slice(s,s+2),16)/255).map(s=>s<=.03928?s/12.92:((s+.055)/1.055)**2.4);return .2126*t+.7152*o+.0722*r}function Zn(n,t){let o=Jn(n),r=Jn(t);return(Math.max(o,r)+.05)/(Math.min(o,r)+.05)}function Qn(n,t,o){let r={...De,...t||{}};for(let _ of["primary_color","background_color","text_color"])(typeof r[_]!="string"||!sr.test(r[_]))&&(r[_]=De[_]);(typeof r.radius!="string"||!Object.prototype.hasOwnProperty.call(Kn,r.radius))&&(r.radius=De.radius),(typeof r.font!="string"||!Object.prototype.hasOwnProperty.call(Vn,r.font))&&(r.font=De.font),["light","dark","system"].includes(r.theme)||(r.theme=De.theme);let s=r.theme==="dark"||r.theme==="system"&&o.matches;s&&(r.background_color.toLowerCase()===De.background_color&&(r.background_color=Xn.background_color),r.text_color.toLowerCase()===De.text_color&&(r.text_color=Xn.text_color));let[d,p]=Kn[r.radius],f=r.density==="compact",u={"--primary":r.primary_color,"--bg":r.background_color,"--text":r.text_color,"--on-primary":Zn(r.primary_color,"#000000")>Zn(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":Vn[r.font],"--r-btn":d,"--r-card":p,"--pad":f?"16px":"28px","--gap":f?"10px":"20px","--fs":f?"14px":"16px","--btn":f?"42px":"52px","--rowy":f?"4px":"12px","--rowx":f?"12px":"18px"};for(let[_,S]of Object.entries(u))n.style.setProperty(_,S);n.style.colorScheme=s?"dark":"light"}function eo(n){let t=window.matchMedia("(prefers-color-scheme: dark)"),o,r=()=>{o?.theme==="system"&&Qn(n,o,t)};return t.addEventListener("change",r),{apply(s){o=s,Qn(n,s,t)},destroy(){t.removeEventListener("change",r)}}}function ar(n,t){this.v=n,this.k=t}function to(n,t){(t==null||t>n.length)&&(t=n.length);for(var o=0,r=Array(t);o<t;o++)r[o]=n[o];return r}function cr(n){if(Array.isArray(n))return n}function lr(n,t){var o=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(o!=null){var r,s,d,p,f=[],u=!0,_=!1;try{if(d=(o=o.call(n)).next,t===0){if(Object(o)!==o)return;u=!1}else for(;!(u=(r=d.call(o)).done)&&(f.push(r.value),f.length!==t);u=!0);}catch(S){_=!0,s=S}finally{try{if(!u&&o.return!=null&&(p=o.return(),Object(p)!==p))return}finally{if(_)throw s}}return f}}function pr(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
2
2
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function dr(n,t){return cr(n)||lr(n,t)||ur(n,t)||pr()}function ur(n,t){if(n){if(typeof n=="string")return to(n,t);var o={}.toString.call(n).slice(8,-1);return o==="Object"&&n.constructor&&(o=n.constructor.name),o==="Map"||o==="Set"?Array.from(n):o==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?to(n,t):void 0}}function vt(n){var t,o;function r(d,p){try{var f=n[d](p),u=f.value,_=u instanceof ar;Promise.resolve(_?u.v:u).then(function(S){if(_){var H=d==="return"&&u.k?d:"next";if(!u.k||S.done)return r(H,S);S=n[H](S).value}s(!!f.done,S)},function(S){r("throw",S)})}catch(S){s(2,S)}}function s(d,p){d===2?t.reject(p):t.resolve({value:p,done:d}),(t=t.next)?r(t.key,t.arg):o=null}this._invoke=function(d,p){return new Promise(function(f,u){var _={key:d,arg:p,resolve:f,reject:u,next:null};o?o=o.next=_:(t=o=_,r(d,p))})},typeof n.return!="function"&&(this.return=void 0)}vt.prototype[typeof Symbol=="function"&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},vt.prototype.next=function(n){return this._invoke("next",n)},vt.prototype.throw=function(n){return this._invoke("throw",n)},vt.prototype.return=function(n){return this._invoke("return",n)};var yo=Object.entries,no=Object.setPrototypeOf,fr=Object.isFrozen,_o=Object.getPrototypeOf,bo=Object.getOwnPropertyDescriptor,M=Object.freeze,U=Object.seal,Ge=Object.create,vo=typeof Reflect<"u"&&Reflect,pn=vo.apply,dn=vo.construct;M||(M=function(t){return t});U||(U=function(t){return t});pn||(pn=function(t,o){for(var r=arguments.length,s=new Array(r>2?r-2:0),d=2;d<r;d++)s[d-2]=arguments[d];return t.apply(o,s)});dn||(dn=function(t){for(var o=arguments.length,r=new Array(o>1?o-1:0),s=1;s<o;s++)r[s-1]=arguments[s];return new t(...r)});var ye=R(Array.prototype.forEach);Array.prototype.indexOf;var hr=R(Array.prototype.lastIndexOf),oo=R(Array.prototype.pop),et=R(Array.prototype.push),mr=R(Array.prototype.slice),gr=R(Array.prototype.splice),We=Array.isArray,en=To(Set),tn=R(Set.prototype.add),tt=R(Set.prototype.has),Ie=R(String.prototype.toLowerCase),nn=R(String.prototype.toString),ro=R(String.prototype.match),nt=R(String.prototype.replace),io=R(String.prototype.indexOf),yr=R(String.prototype.trim),_r=R(Number.prototype.toString),br=R(Boolean.prototype.toString),so=typeof BigInt>"u"?null:R(BigInt.prototype.toString),ao=typeof Symbol>"u"?null:R(Symbol.prototype.toString),q=R(Object.prototype.hasOwnProperty),ot=R(Object.prototype.toString),N=R(RegExp.prototype.test),_e=To(TypeError);function R(n){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var o=arguments.length,r=new Array(o>1?o-1:0),s=1;s<o;s++)r[s-1]=arguments[s];return pn(n,t,r)}}function To(n){return function(){for(var t=arguments.length,o=new Array(t),r=0;r<t;r++)o[r]=arguments[r];return dn(n,o)}}function T(n,t){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Ie;if(no&&no(n,null),!We(t))return n;let r=t.length;for(;r--;){let s=t[r];if(typeof s=="string"){let d=o(s);d!==s&&(fr(t)||(t[r]=d),s=d)}n[s]=!0}return n}function vr(n){for(let t=0;t<n.length;t++)q(n,t)||(n[t]=null);return n}function K(n){let t=Ge(null);for(let r of yo(n)){var o=dr(r,2);let s=o[0],d=o[1];q(n,s)&&(We(d)?t[s]=vr(d):d&&typeof d=="object"&&d.constructor===Object?t[s]=K(d):t[s]=d)}return t}function Tr(n){switch(typeof n){case"string":return n;case"number":return _r(n);case"boolean":return br(n);case"bigint":return so?so(n):"0";case"symbol":return ao?ao(n):"Symbol()";case"undefined":return ot(n);case"function":case"object":{if(n===null)return ot(n);let t=n,o=J(t,"toString");if(typeof o=="function"){let r=o(t);return typeof r=="string"?r:ot(r)}return ot(n)}default:return ot(n)}}function J(n,t){for(;n!==null;){let r=bo(n,t);if(r){if(r.get)return R(r.get);if(typeof r.value=="function")return R(r.value)}n=_o(n)}function o(){return null}return o}function Er(n,t){for(;n!==null;){let o=bo(n,t);if(o)return o.get?R(o.get):null;n=_o(n)}return null}function wr(n){try{return N(n,""),!0}catch{return!1}}var co=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"]),on=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"]),rn=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"]),Ar=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"]),sn=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"]),lo=M(["#text"]),po=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"]),an=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"]),uo=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"]),Tt=M(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),xr=U(/{{[\w\W]*|^[\w\W]*}}/g),kr=U(/<%[\w\W]*|^[\w\W]*%>/g),Rr=U(/\${[\w\W]*/g),Cr=U(/^data-[\-\w.\u00B7-\uFFFF]+$/),Or=U(/^aria-[\-\w]+$/),fo=U(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Lr=U(/^(?:\w+script|data):/i),Dr=U(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Ir=U(/^html$/i),Pr=U(/^[a-z][.\w]*(-[.\w]+)+$/i),cn=U(/<[/\w!]/g),ho=U(/<[/\w]/g),Mr=U(/<\/no(script|embed|frames)/i),mo=U(/\/>/i),L={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Nr=M(T({},["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"])),Ur=function(){return typeof window>"u"?null:window},Fr=function(t,o){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let r=null,s="data-tt-policy-suffix";o&&o.hasAttribute(s)&&(r=o.getAttribute(s));let d="dompurify"+(r?"#"+r:"");try{return t.createPolicy(d,{createHTML(p){return p},createScriptURL(p){return p}})}catch{return console.warn("TrustedTypes policy "+d+" could not be created."),null}},go=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},xe=function(t,o,r,s){return q(t,o)&&We(t[o])?T(s.base?K(s.base):{},t[o],s.transform):r},ln=function(t,o,r){let s=q(t,o)?t[o]:void 0;return s&&typeof s=="object"?K(s):r()};function Eo(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Ur(),t=l=>Eo(l);if(t.version="3.4.17",t.removed=[],!n||!n.document||n.document.nodeType!==L.document||!n.Element)return t.isSupported=!1,t;let o=n.document,r=o,s=r.currentScript;n.DocumentFragment;let d=n.HTMLTemplateElement,p=n.Node,f=n.Element,u=n.NodeFilter;n.NamedNodeMap===void 0&&(n.NamedNodeMap||n.MozNamedAttrMap),n.HTMLFormElement;let _=n.DOMParser,S=n.trustedTypes,H=f.prototype,ke=J(H,"cloneNode"),Y=J(H,"remove"),Pe=J(H,"removeAttributeNode"),ne=J(H,"nextSibling"),le=J(H,"childNodes"),pe=J(H,"parentNode"),de=J(H,"shadowRoot"),Me=J(H,"attributes"),Z=p&&p.prototype?J(p.prototype,"nodeType"):null,ue=p&&p.prototype?J(p.prototype,"nodeName"):null,ve=p&&p.prototype?J(p.prototype,"ownerDocument"):null,z=function(e){return Z?Z(e):e.nodeType},Te=function(e){return ue?ue(e):e.nodeName},$e=Er(H,"namespaceURI"),Ye=function(e){return $e?$e(e):e.namespaceURI};if(typeof d=="function"){let l=o.createElement("template");l.content&&l.content.ownerDocument&&(o=l.content.ownerDocument)}let F,fe="",Ve,h=!1,v=0,A=function(){if(v>0)throw _e('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.')},I=function(e){A(),v++;try{return F.createHTML(e)}finally{v--}},he=function(e){A(),v++;try{return F.createScriptURL(e)}finally{v--}},oe=function(){return h||(Ve=Fr(S,s),h=!0),Ve},C=o,V=C.implementation,Q=C.createNodeIterator,Ot=C.createDocumentFragment,it=C.getElementsByTagName,st=r.importNode,E=go();t.isSupported=typeof yo=="function"&&typeof pe=="function"&&V&&V.createHTMLDocument!==void 0;let me=xr,at=kr,P=Rr,re=Cr,Ee=Or,Ke=Lr,ie=Dr,ct=Pr,lt=fo,x=null,Lt=T({},[...co,...on,...rn,...sn,...lo]),k=null,Dt=T({},[...po,...an,...uo,...Tt]),se=Object.seal(Ge(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}})),Xe=null,bn=null,we=Object.seal(Ge(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),vn=!0,It=!0,Tn=!1,Pt=!0,ge=!1,Re=!0,Ce=!1,Mt=!1,pt=null,dt=null,Nt=!1,Ne=!1,ut=!1,ft=!1,En=!0,wn=!1,An="user-content-",Ut=!0,Ft=!1,Oe=null,Ue={},Le=null,Sn=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"]),xn=null,kn=T({},["audio","video","img","source","image","track"]),Rn=null,Cn=T({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),ht="http://www.w3.org/1998/Math/MathML",mt="http://www.w3.org/2000/svg",ae="http://www.w3.org/1999/xhtml",Fe=ae,Ht=!1,zt=null,zo=T({},[ht,mt,ae],nn),On=M(["mi","mo","mn","ms","mtext"]),Bt=T({},On),Ln=M(["annotation-xml"]),jt=T({},Ln),Bo=T({},["title","style","font","a","script"]),Je=null,jo=["application/xhtml+xml","text/html"],Go="text/html",O=null,He=null,Wo=o.createElement("form"),Dn=function(e){return e instanceof RegExp||e instanceof Function},Gt=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(He&&He===e)return;(!e||typeof e!="object")&&(e={}),e=K(e),Je=jo.indexOf(e.PARSER_MEDIA_TYPE)===-1?Go:e.PARSER_MEDIA_TYPE,O=Je==="application/xhtml+xml"?nn:Ie,x=xe(e,"ALLOWED_TAGS",Lt,{transform:O}),k=xe(e,"ALLOWED_ATTR",Dt,{transform:O}),zt=xe(e,"ALLOWED_NAMESPACES",zo,{transform:nn}),Rn=xe(e,"ADD_URI_SAFE_ATTR",Cn,{transform:O,base:Cn}),xn=xe(e,"ADD_DATA_URI_TAGS",kn,{transform:O,base:kn}),Le=xe(e,"FORBID_CONTENTS",Sn,{transform:O}),Xe=xe(e,"FORBID_TAGS",K({}),{transform:O}),bn=xe(e,"FORBID_ATTR",K({}),{transform:O}),Ue=q(e,"USE_PROFILES")?e.USE_PROFILES&&typeof e.USE_PROFILES=="object"?K(e.USE_PROFILES):e.USE_PROFILES:!1,vn=e.ALLOW_ARIA_ATTR!==!1,It=e.ALLOW_DATA_ATTR!==!1,Tn=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Pt=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,ge=e.SAFE_FOR_TEMPLATES||!1,Re=e.SAFE_FOR_XML!==!1,Ce=e.WHOLE_DOCUMENT||!1,Ne=e.RETURN_DOM||!1,ut=e.RETURN_DOM_FRAGMENT||!1,ft=e.RETURN_TRUSTED_TYPE||!1,Nt=e.FORCE_BODY||!1,En=e.SANITIZE_DOM!==!1,wn=e.SANITIZE_NAMED_PROPS||!1,Ut=e.KEEP_CONTENT!==!1,Ft=e.IN_PLACE||!1,lt=wr(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:fo,Fe=typeof e.NAMESPACE=="string"?e.NAMESPACE:ae,Bt=ln(e,"MATHML_TEXT_INTEGRATION_POINTS",()=>T({},On)),jt=ln(e,"HTML_INTEGRATION_POINTS",()=>T({},Ln));let i=ln(e,"CUSTOM_ELEMENT_HANDLING",()=>Ge(null));if(se=Ge(null),q(i,"tagNameCheck")&&Dn(i.tagNameCheck)&&(se.tagNameCheck=i.tagNameCheck),q(i,"attributeNameCheck")&&Dn(i.attributeNameCheck)&&(se.attributeNameCheck=i.attributeNameCheck),q(i,"allowCustomizedBuiltInElements")&&typeof i.allowCustomizedBuiltInElements=="boolean"&&(se.allowCustomizedBuiltInElements=i.allowCustomizedBuiltInElements),U(se),ge&&(It=!1),ut&&(Ne=!0),Ue&&(x=T({},lo),k=Ge(null),Ue.html===!0&&(T(x,co),T(k,po)),Ue.svg===!0&&(T(x,on),T(k,an),T(k,Tt)),Ue.svgFilters===!0&&(T(x,rn),T(k,an),T(k,Tt)),Ue.mathMl===!0&&(T(x,sn),T(k,uo),T(k,Tt))),we.tagCheck=null,we.attributeCheck=null,q(e,"ADD_TAGS")&&(typeof e.ADD_TAGS=="function"?we.tagCheck=e.ADD_TAGS:We(e.ADD_TAGS)&&(x===Lt&&(x=K(x)),T(x,e.ADD_TAGS,O))),q(e,"ADD_ATTR")&&(typeof e.ADD_ATTR=="function"?we.attributeCheck=e.ADD_ATTR:We(e.ADD_ATTR)&&(k===Dt&&(k=K(k)),T(k,e.ADD_ATTR,O))),q(e,"ADD_FORBID_CONTENTS")&&We(e.ADD_FORBID_CONTENTS)&&(Le===Sn&&(Le=K(Le)),T(Le,e.ADD_FORBID_CONTENTS,O)),Ut&&(x["#text"]=!0),Ce&&T(x,["html","head","body"]),x.table&&(T(x,["tbody"]),delete Xe.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!="function")throw _e('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw _e('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');let a=F;F=e.TRUSTED_TYPES_POLICY;try{fe=I("")}catch(c){throw F=a,c}}else e.TRUSTED_TYPES_POLICY===null?(F=void 0,fe=""):(F===void 0&&(F=oe()),F&&typeof fe=="string"&&(fe=I("")));M&&M(e),He=e},In=T({},[...on,...rn,...Ar]),Pn=T({},[...sn,...Sr]),qo=function(e,i,a){return i.namespaceURI===ae?e==="svg":i.namespaceURI===ht?e==="svg"&&(a==="annotation-xml"||Bt[a]):!!In[e]},$o=function(e,i,a){return i.namespaceURI===ae?e==="math":i.namespaceURI===mt?e==="math"&&jt[a]:!!Pn[e]},Yo=function(e,i,a){return i.namespaceURI===mt&&!jt[a]||i.namespaceURI===ht&&!Bt[a]?!1:!Pn[e]&&(Bo[e]||!In[e])},Vo=function(e){let i=Ye(e),a=Ie(Te(e)),c=pe(e),m,g;return c&&z(c)===L.element?(m={namespaceURI:Ye(c)},g=Ie(Te(c))):(m={namespaceURI:Fe},g="template"),zt[i]?i===mt?qo(a,m,g):i===ht?$o(a,m,g):i===ae?Yo(a,m,g):!!(Je==="application/xhtml+xml"&&zt[i]):!1},Ae=function(e){et(t.removed,{element:e});try{pe(e).removeChild(e)}catch{if(Y(e),!pe(e))throw _e("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place")}},Mn=function(e,i,a){try{Pe(e,i)}catch{try{e.removeAttribute(a)}catch{}}},Wt=function(e){$t(e);let i=le(e);i&&ye(mr(i),c=>{try{Y(c)}catch{}});let a=z(e)===L.element?Me(e):null;if(a)for(let c=a.length-1;c>=0;--c){let m=a[c],g=m&&m.name;typeof g=="string"&&Mn(e,m,g)}},ze=function(e,i,a){if(!a)try{a=i.getAttributeNode(e)}catch{a=null}et(t.removed,{attribute:a||null,from:i});try{a?Pe(i,a):i.removeAttribute(e)}catch{try{i.removeAttribute(e)}catch{}}if(e==="is")if(Ne||ut)try{Ae(i)}catch{}else try{i.setAttribute(e,"")}catch{}},Nn=function(e){let i=Me(e);if(i)for(let a=i.length-1;a>=0;--a){let c=i[a],m=c&&c.name;typeof m!="string"||k[O(m)]||Mn(e,c,m)}},qt=function(e,i){let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,c=[e];for(;c.length>0;){let m=c.pop();if(i(m)===!1)continue;if(a&&z(m)===L.element){let b=de(m);Se(b)&&c.push(b)}let g=le(m);if(g)for(let b=g.length-1;b>=0;--b)c.push(g[b])}},$t=function(e){qt(e,i=>{z(i)===L.element&&Nn(i)})},Yt=function(e){let i=[];return qt(e,a=>{i.push(a)},!0),i},Ko=function(e,i){let a=en();ye(Yt(e),c=>{z(c)===L.element&&tn(a,c)}),ye(i,c=>{z(c)===L.element&&!tt(a,c)&&Nn(c)})},Un=function(e,i){let a=!1;return ye(t.removed,c=>{c.element&&(a=a||c.element===e,$t(c.element))}),Ko(e,i),a},Xo=8,Jo=function(e,i){let a=Oe,c=null,m=()=>(c||(c=en(),ye(i,g=>{tn(c,g)})),c);for(let g=0;;g++){let b=Yt(e),D=[e],ce=!1;if(ye(b,B=>{z(B)===L.documentFragment?et(D,B):!ce&&!tt(a,B)&&(ce=tt(m(),B))}),!ce)return;if(g>=Xo)throw _e("the tree kept changing during in-place sanitization; refusing to return it");ye(D,(B,G)=>{Zo(B,G>0,e,m())})}},Zo=function(e,i,a,c){let m=Vt(e),g;for(;g=m.nextNode();)!tt(c,g)||tt(Oe,g)||(i&&ee(E.uponSanitizeShadowNode,g,null),Xt(g,a),Jt(g,a),Se(g.content)&&Qe(g.content))},Qo=function(e){Oe&&tn(Oe,e)},Fn=function(e,i){return Re?e==="patchsrc"?!0:e==="for"&&i!=="label"&&i!=="output":!1},er=function(e){Re&&qt(e,i=>{let a=z(i);if(a===L.processingInstruction||a===L.comment&&N(ho,i.data)){try{Y(i)}catch{}return!1}if(a===L.element){let c=i,m=O(Te(i));try{c.hasAttribute&&c.hasAttribute("patchsrc")&&c.removeAttribute("patchsrc"),c.hasAttribute&&c.hasAttribute("for")&&Fn("for",m)&&c.removeAttribute("for")}catch{}}return!0})},Hn=function(e){let i=null,a=null;if(Nt)e="<remove></remove>"+e;else{let g=ro(e,/^[\r\n\t ]+/);a=g&&g[0]}Je==="application/xhtml+xml"&&Fe===ae&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");let c=F?I(e):e;if(Fe===ae)try{i=new _().parseFromString(c,Je)}catch{}if(!i||!i.documentElement){i=V.createDocument(Fe,"template",null);try{i.documentElement.innerHTML=Ht?fe:c}catch{}}let m=i.body||i.documentElement;return e&&a&&m.insertBefore(o.createTextNode(a),m.childNodes[0]||null),Fe===ae?it.call(i,Ce?"html":"body")[0]:Ce?i.documentElement:m},Vt=function(e){let i=ve?ve(e):e.ownerDocument;return Q.call(i||e,e,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT|u.SHOW_PROCESSING_INSTRUCTION|u.SHOW_CDATA_SECTION,null)},gt=function(e){return e=nt(e,me," "),e=nt(e,at," "),e=nt(e,P," "),e},Kt=function(e){var i;zn(e);let a=(i=e.querySelectorAll)===null||i===void 0?void 0:i.call(e,"template");a&&ye(a,c=>{Se(c.content)&&Kt(c.content)})},zn=function(e){e.normalize();let i=ve?ve(e):e.ownerDocument,a=Q.call(i||e,e,u.SHOW_TEXT|u.SHOW_COMMENT|u.SHOW_CDATA_SECTION|u.SHOW_PROCESSING_INSTRUCTION,null),c=a.nextNode();for(;c;)c.data=gt(c.data),c=a.nextNode()},yt=function(e){let i=ue?ue(e):null;return typeof i!="string"||O(i)!=="form"?!1:typeof e.nodeName!="string"||typeof e.textContent!="string"||typeof e.removeChild!="function"||e.attributes!==Me(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!==Z(e)||e.childNodes!==le(e)},Se=function(e){if(!Z||typeof e!="object"||e===null)return!1;try{return Z(e)===L.documentFragment}catch{return!1}},Ze=function(e){if(!Z||typeof e!="object"||e===null)return!1;try{return typeof Z(e)=="number"}catch{return!1}};function ee(l,e,i){l.length!==0&&ye(l,a=>{a.call(t,e,i,He)})}let tr=function(e,i){return!!(Re&&e.hasChildNodes()&&!Ze(e.firstElementChild)&&N(cn,e.textContent)&&N(cn,e.innerHTML)||Re&&Nr[i]&&z(e)===L.element&&Ye(e)===ae&&(Ze(e.firstElementChild)||typeof e.textContent=="string"&&N(cn,e.textContent))||e.nodeType===L.processingInstruction||Re&&e.nodeType===L.comment&&N(ho,e.data))},_t=function(e,i){if(e instanceof RegExp)return N(e,i);if(e instanceof Function){for(var a=arguments.length,c=new Array(a>2?a-2:0),m=2;m<a;m++)c[m-2]=arguments[m];return!!e(i,...c)}return!1},nr=function(e,i,a){if(!Xe[i]&&Gn(i)&&_t(se.tagNameCheck,i))return!1;if(Ut&&!Le[i]&&!Le[Ie(i)]){let c=pe(e),m=le(e);if(m&&c){let g=m.length;for(let b=g-1;b>=0;--b){let D=e===a?ke(m[b],!0):m[b];c.insertBefore(D,ne(e))}}}return Ae(e),!0},Bn=function(e,i,a,c){return e.length===0?i:i===a||i===c?K(i):i},Be=function(e,i){return e===i||pe(e)!==null?!1:(Ft&&$t(e),!0)},Xt=function(e,i){if(Qo(e),ee(E.beforeSanitizeElements,e,null),Be(e,i))return!0;if(yt(e))return Ae(e),!0;let a=O(Te(e));if(x=Bn(E.uponSanitizeElement,x,Lt,pt),ee(E.uponSanitizeElement,e,{tagName:a,allowedTags:x}),Be(e,i))return!0;if(tr(e,a))return Ae(e),!0;if(Xe[a]||!(we.tagCheck instanceof Function&&we.tagCheck(a))&&!x[a]){let c=nr(e,a,i);return c===!1&&(ee(E.afterSanitizeElements,e,null),Be(e,i))?!0:c}if(z(e)===L.element&&!Vo(e)||(a==="noscript"||a==="noembed"||a==="noframes")&&N(Mr,e.innerHTML))return Ae(e),!0;if(ge&&e.nodeType===L.text){let c=gt(e.textContent);e.textContent!==c&&(et(t.removed,{element:e.cloneNode()}),e.textContent=c)}return ee(E.afterSanitizeElements,e,null),Be(e,i)},jn=function(e,i,a){if(bn[i]||Fn(i,e)||En&&(i==="id"||i==="name")&&(a in o||a in Wo))return!1;let c=k[i]||we.attributeCheck instanceof Function&&we.attributeCheck(i,e);return It&&N(re,i)||vn&&N(Ee,i)?!0:c?Rn[i]||N(lt,nt(a,ie,""))||(i==="src"||i==="xlink:href"||i==="href")&&e!=="script"&&io(a,"data:")===0&&xn[e]||Tn&&!N(Ke,nt(a,ie,""))?!0:!a:Gn(e)&&_t(se.tagNameCheck,e)&&_t(se.attributeNameCheck,i,e)||i==="is"&&se.allowCustomizedBuiltInElements&&_t(se.tagNameCheck,a)},or=T({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),Gn=function(e){return!or[Ie(e)]&&N(ct,e)},rr=function(e,i,a,c){if(F&&typeof S=="object"&&typeof S.getAttributeType=="function"&&!a)switch(S.getAttributeType(e,i)){case"TrustedHTML":return I(c);case"TrustedScriptURL":return he(c)}return c},ir=function(e,i,a,c){try{return a?e.setAttributeNS(a,i,c):e.setAttribute(i,c),yt(e)?(Ae(e),!1):!0}catch{return ze(i,e),!1}},Wn=function(e,i){return Re&&N(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,i)?!0:Ie(e)==="attributename"&&ro(i,"href")!==null},Jt=function(e,i){if(ee(E.beforeSanitizeAttributes,e,null),Be(e,i))return;let a=e.attributes;if(!a||yt(e))return;k=Bn(E.uponSanitizeAttribute,k,Dt,dt);let c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:k,forceKeepAttr:void 0},m=a.length,g=O(e.nodeName);for(;m--;){let b=a[m],D=b.name,ce=b.namespaceURI,B=b.value,G=O(D),je=B,W=D==="value"?je:yr(je),qn=!1;if(c.attrName=G,c.attrValue=W,c.keepAttr=!0,c.forceKeepAttr=void 0,ee(E.uponSanitizeAttribute,e,c),W=c.attrValue,wn&&(G==="id"||G==="name")&&io(W,An)!==0&&(ze(D,e,b),W=An+W,qn=!0),Wn(D,W)){ze(D,e,b);continue}if(!c.forceKeepAttr){if(!c.keepAttr){ze(D,e,b);continue}if(!Pt&&N(mo,W)){ze(D,e,b);continue}if(ge&&(W=gt(W)),!jn(g,G,W)){ze(D,e,b);continue}W=rr(g,G,ce,W),W!==je&&ir(e,D,ce,W)&&qn&&oo(t.removed)}}ee(E.afterSanitizeAttributes,e,null),Be(e,i)},Qe=function(e){let i=null,a=Vt(e);for(ee(E.beforeSanitizeShadowDOM,e,null);i=a.nextNode();)if(ee(E.uponSanitizeShadowNode,i,null),Xt(i,e),Jt(i,e),Se(i.content)&&Qe(i.content),z(i)===L.element){let c=de(i);Se(c)&&(Zt(c),Qe(c))}ge&&zn(e),ee(E.afterSanitizeShadowDOM,e,null)},Zt=function(e){let i=[{node:e,shadow:null}];for(;i.length>0;){let a=i.pop();if(a.shadow){Qe(a.shadow);continue}let c=a.node,m=z(c)===L.element,g=le(c);if(g)for(let b=g.length-1;b>=0;--b)i.push({node:g[b],shadow:null});if(m){let b=ue?ue(c):null;if(typeof b=="string"&&O(b)==="template"){let D=c.content;Se(D)&&i.push({node:D,shadow:null})}}if(m){let b=de(c);Se(b)&&i.push({node:null,shadow:b},{node:b,shadow:null})}}};return t.sanitize=function(l){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=null,a=null,c=null,m=null;if(Ht=!l,Ht&&(l="<!-->"),typeof l!="string"&&!Ze(l)&&(l=Tr(l),typeof l!="string"))throw _e("dirty is not a string, aborting");if(!t.isSupported)return l;Mt?(x=pt,k=dt):Gt(e),(E.uponSanitizeElement.length>0||E.uponSanitizeAttribute.length>0)&&(x=K(x)),E.uponSanitizeAttribute.length>0&&(k=K(k)),t.removed=[];let g=Ft&&typeof l!="string"&&Ze(l),b=[],D=Oe;if(g){er(l);let G=Te(l);if(typeof G=="string"){let je=O(G);if(!x[je]||Xe[je])throw Wt(l),_e("root node is forbidden and cannot be sanitized in-place")}if(yt(l))throw Wt(l),_e("root node is clobbered and cannot be sanitized in-place");b=Yt(l),Oe=en()}else if(Ze(l))i=Hn("<!---->"),a=i.ownerDocument.importNode(l,!0),a.nodeType===L.element&&a.nodeName==="BODY"||a.nodeName==="HTML"?i=a:i.appendChild(a),Zt(i);else{if(!Ne&&!ge&&!Ce&&l.indexOf("<")===-1)return F&&ft?I(l):l;if(i=Hn(l),!i)return Ne?null:ft?fe:""}i&&Nt&&Ae(i.firstChild);let ce=g?l:i;try{g&&Zt(l);let G=Vt(ce);for(;c=G.nextNode();)Xt(c,ce),Jt(c,ce),Se(c.content)&&Qe(c.content);g&&Jo(l,b)}catch(G){throw g&&(Wt(l),Un(l,b)),G}finally{Oe=D}if(g){if(Un(l,b))throw _e("a node selected for removal could not be safely returned; refusing to sanitize in place");return ge&&Kt(l),l}if(Ne){if(ge&&Kt(i),ut)for(m=Ot.call(i.ownerDocument);i.firstChild;)m.appendChild(i.firstChild);else m=i;return(k.shadowroot||k.shadowrootmode)&&(m=st.call(r,m,!0)),m}let B=Ce?i.outerHTML:i.innerHTML;return Ce&&x["!doctype"]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&N(Ir,i.ownerDocument.doctype.name)&&(B="<!DOCTYPE "+i.ownerDocument.doctype.name+`>
3
3
  `+B),ge&&(B=gt(B)),F&&ft?I(B):B},t.setConfig=function(){let l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Gt(l),Mt=!0,pt=x,dt=k},t.clearConfig=function(){He=null,Mt=!1,pt=null,dt=null,F=Ve,fe=""},t.isValidAttribute=function(l,e,i){He||Gt({});let a=O(l),c=O(e);return typeof i=="string"&&(Wn(e,i)||!Pt&&N(mo,i))?!1:jn(a,c,i)},t.addHook=function(l,e){typeof e=="function"&&q(E,l)&&et(E[l],e)},t.removeHook=function(l,e){if(q(E,l)){if(e!==void 0){let i=hr(E[l],e);return i===-1?void 0:gr(E[l],i,1)[0]}return oo(E[l])}},t.removeHooks=function(l){q(E,l)&&(E[l]=[])},t.removeAllHooks=function(){E=go()},t}var wo=Eo();function y(n,t,o){let r=document.createElement(n);return t&&(r.textContent=t),o&&(r.className=o),r}function j(n){return typeof n!="string"?"":(ko(n).textContent||"").trim()}var So=new Set(["A","B","BLOCKQUOTE","BR","CODE","EM","I","LI","OL","P","PRE","STRONG","U","UL"]),xo=new Set(["H1","H2","H3","H4","H5","H6"]),Ao;function ko(n){return Ao??(Ao=wo(window)),Ao.sanitize(n,{ALLOWED_TAGS:[...So,...xo].map(t=>t.toLowerCase()),ALLOWED_ATTR:["href"],ALLOW_DATA_ATTR:!1,ALLOW_ARIA_ATTR:!1,RETURN_DOM_FRAGMENT:!0})}function Ro(n){let t=document.createDocumentFragment();if(typeof n!="string")return t;let o=(r,s)=>{for(let d of Array.from(r.childNodes)){if(d.nodeType===Node.TEXT_NODE){s.appendChild(document.createTextNode(d.textContent||""));continue}if(!(d instanceof Element))continue;let p=d.tagName;if(xo.has(p)){let f=document.createElement("p"),u=document.createElement("strong");f.appendChild(u),o(d,u),s.appendChild(f)}else if(So.has(p)){let f=document.createElement(p.toLowerCase());if(p==="A"){let u=d.getAttribute("href")||"";/^(https?:|mailto:)/i.test(u.trim())&&(f.setAttribute("href",u.trim()),f.setAttribute("target","_blank"),f.setAttribute("rel","noopener noreferrer nofollow"))}o(d,f),s.appendChild(f)}else["SCRIPT","STYLE","TEMPLATE","NOSCRIPT"].includes(p)||o(d,s)}};return o(ko(n),t),t}var un=4,Co="http://www.w3.org/2000/svg";function Hr(){let n=document.createElementNS(Co,"svg");n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("class","chev"),n.setAttribute("aria-hidden","true");let t=document.createElementNS(Co,"path");return t.setAttribute("d","M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z"),n.append(t),n}function fn(n,t){let o=(n||[]).map(u=>j(u.data_item_name)).filter(Boolean);if(!o.length){let u=(t||[]).map(j).filter(Boolean).join(" \xB7 ");return u?y("div",u,"ps"):null}let r=y("div",void 0,"ps"),s=document.createTextNode("");r.append(s);let d=!1,p=()=>{s.data=(d?o:o.slice(0,un)).join(", "),f.textContent=d?"show less":`+${o.length-un} more`},f=y("button",void 0,"more");return f.type="button",f.onclick=()=>{d=!d,p()},p(),o.length>un&&r.append(f),r}function Oo(n,t,o){let r=y("div",void 0,"grp"),s=y("button",void 0,"gh");s.type="button",s.setAttribute("aria-expanded","false");let d=y("span",void 0,"gx");d.append(y("span",n,"gt")),t&&d.append(y("span",t,"gd")),s.append(d,Hr()),s.onclick=()=>{let f=!r.classList.contains("open");r.classList.toggle("open",f),s.setAttribute("aria-expanded",String(f))};let p=y("div",void 0,"gb");return o.forEach(f=>p.append(y("span",f,"gi"))),r.append(s,p),r}function hn(n){if(!j(n))return null;let t=y("div",void 0,"text");return t.append(Ro(n)),t}function Lo({root:n,config:t,state:o,mode:r,demo:s,onClose:d,onSubmit:p,onChange:f}){n.replaceChildren();for(let h of t.purposes)h.required&&(o.choices[String(h.id)]=!0);let u=t.notice||{},_=[...u.purposes||[]],S=new Set(_.flatMap(h=>(h.sub_items||[]).map(v=>v.purpose_id))),H=t.purposes.filter(h=>!S.has(h.id));H.length&&_.push({purpose_reason:_.length?"Other purposes":"Purposes",sub_items:H.map(h=>({purpose_id:h.id,purpose_name:h.name}))});let ke=u.content?.consent_data?.find(h=>h.section_type==="initial-section")?.section_data,Y=y("section",void 0,"shell"),Pe=y("div",void 0,"body");if(r!=="panel"){let h=y("button","\xD7","close");h.type="button",h.setAttribute("aria-label","Close consent form"),h.onclick=()=>d(),Y.append(h)}Pe.append(y("h1",j(ke?.title)||t.name||"Your consent preferences"));let ne=y("form",void 0,"sec");ne.id="consent-form",ne.style.padding="0",ne.style.gap="16px";let le=new Map,pe=[],de=()=>{le.forEach((h,v)=>{h.forEach(A=>A.checked=!!o.choices[String(v)])}),pe.forEach(h=>{h.box.checked=h.ids.every(v=>!!o.choices[String(v)])}),fe()},Me=(h,v)=>{if(o.busy){de();return}for(let A of h)t.purposes.find(I=>I.id===A)?.required||(o.choices[String(A)]=v);f(),de()},Z=ke?.sections?.length?[...ke.sections]:[{section_type:"data_process_section",section_data:{section_title:"How we use it"}}];Z.some(h=>h.section_type==="data_process_section")||Z.push({section_type:"data_process_section",section_data:{section_title:"Purposes"}});let ue=u.sections_language_code&&u.sections_language_code!==t.language_code?u.sections_language_code:void 0;for(let h of Z){let v=h.section_data,A=h.section_type;if(A==="link_section")continue;let I=y("div",void 0,"sec");if(A==="generic_section"){let C=hn(v.section_body);C&&I.append(C),ne.append(I);continue}v.section_title&&I.append(y("p",j(v.section_title),"st"));let he=hn(v.section_body);he&&I.append(he);let oe=y("div",void 0,"grps");if(ue&&(oe.lang=ue),A==="data_collect_section")for(let C of u.collected||[]){let V=C.sub_items||[];oe.append(Oo(`${j(C.data_category_name)||"Data"} (${V.length})`,j(C.desc),V.map(j)))}else if(A==="data_process_section")for(let C of _){let V=C.sub_items||[],Q=V.map(P=>P.purpose_id),Ot=Q.length>0&&Q.every(P=>t.purposes.find(re=>re.id===P)?.required);for(let P of Q){let re=!!t.purposes.find(Ee=>Ee.id===P)?.required;o.choices[String(P)]=re||!!o.choices[String(P)]}let it=y("div",void 0,"grp pg"),st=y("div",void 0,"ph"),E=y("span",void 0,"gx");E.append(y("span",j(C.purpose_reason)||"Purposes","gt")),C.desc&&E.append(y("span",j(C.desc),"gd"));let me=y("input");me.type="checkbox",me.disabled=Ot,me.setAttribute("aria-label",`Select all: ${C.purpose_reason||"purposes"}`),me.onchange=()=>Me(Q,me.checked),pe.push({box:me,ids:Q}),st.append(E,me);let at=y("div",void 0,"pb");for(let P of V){let re=t.purposes.find(lt=>lt.id===P.purpose_id),Ee=y("div",void 0,"pr"),Ke=y("label",void 0,"prh");Ke.append(y("span",j(P.purpose_name||re?.name),"pn"));let ie=y("input");ie.type="checkbox",ie.name=String(P.purpose_id),ie.disabled=!!re?.required,ie.onchange=()=>Me([P.purpose_id],ie.checked),le.set(P.purpose_id,[...le.get(P.purpose_id)||[],ie]),Ke.append(ie),Ee.append(Ke),re?.description&&Ee.append(y("p",j(re.description),"ps"));let ct=fn(P.data_items,P.data_categories);ct&&Ee.append(ct),at.append(Ee)}it.append(st,y("hr",void 0,"hr"),at),oe.append(it)}else if(A==="data_share_section"){for(let C of u.shared||[]){let V=y("div",void 0,"sh");V.append(y("span",j(C.purpose_name)||"Sharing","gt"));let Q=fn(C.data_items,C.data_categories);Q&&V.append(Q),oe.append(V)}oe.childElementCount||oe.append(y("p","NIL","st"))}oe.childElementCount&&I.append(oe),ne.append(I)}de();let ve=y("div");ve.id="feedback",ve.setAttribute("aria-live","polite"),ne.append(ve),ne.onsubmit=h=>{h.preventDefault(),p()},Pe.append(ne),Y.append(Pe);let z=ke?.buttons?.length?ke.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"}}],Te=y("div",void 0,"foot"),$e=y("div",void 0,"actions"),Ye=h=>{h==="accept-all"?t.purposes.forEach(v=>o.choices[String(v.id)]=!0):h==="reject-all"&&t.purposes.forEach(v=>o.choices[String(v.id)]=v.required),p()},F=[...z.filter(h=>h.button_type!=="accept-necessary"),...z.filter(h=>h.button_type==="accept-necessary")];for(let h of F){if(h.button_enabled===!1)continue;let v=h.button_type==="accept-necessary",A=y("button",void 0,v?"primary":void 0);A.type="button",A.dataset.type=h.button_type,A.textContent=v?h.button_data?.accept_necessary_text||"Accept Necessary":h.button_text||h.button_type,A.onclick=()=>Ye(h.button_type),v&&(A.dataset.necessary=h.button_data?.accept_necessary_text||"Accept Necessary",A.dataset.selected=h.button_data?.accept_selected_text||"Accept Selected"),$e.append(A)}return Te.append($e),Y.append(Te),n.append(Y),de(),(r==="popup"||r==="page")&&Y.addEventListener("keydown",Ve),r!=="panel"&&!s&&(Y.tabIndex=-1,Y.focus({preventScroll:!0})),de;function fe(){let h=n.querySelector("button.primary");if(!h?.dataset.necessary)return;let v=t.purposes.some(A=>!A.required&&o.choices[String(A.id)]);h.textContent=v?h.dataset.selected:h.dataset.necessary}function Ve(h){if(h.key==="Escape"){d();return}if(h.key!=="Tab")return;let v=[...n.querySelectorAll("button:not([disabled]),input:not([disabled]),summary,a[href]")],A=v[0],I=v[v.length-1],he=n.getRootNode().activeElement;h.shiftKey&&(he===A||he===Y)?(h.preventDefault(),I?.focus()):!h.shiftKey&&(he===I||he===Y)&&(h.preventDefault(),A?.focus())}}var mn=`*{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
4
  `;var Et;function Do(n){if("adoptedStyleSheets"in Document.prototype&&"replaceSync"in CSSStyleSheet.prototype){Et||(Et=new CSSStyleSheet,Et.replaceSync(mn)),n.adoptedStyleSheets=[Et];return}let t=document.createElement("style");t.textContent=mn,n.append(t)}var te=n=>n!==null&&typeof n=="object"&&!Array.isArray(n),$=n=>n==null||typeof n=="string",be=(n,t)=>n==null||Array.isArray(n)&&n.length<=1e3&&n.every(t),gn=n=>be(n,t=>typeof t=="string"),Io=n=>be(n,t=>te(t)&&$(t.data_item_name));function wt(n,t){if(!te(n)||!$(n.sections_language_code))return!1;let o=new Set(t.map(p=>p.id)),r=new Set,s=p=>te(p)&&["accept-all","reject-all","accept-necessary"].includes(p.button_type)&&$(p.button_text)&&(p.button_enabled===void 0||typeof p.button_enabled=="boolean")&&(p.button_data==null||te(p.button_data)&&$(p.button_data.accept_necessary_text)&&$(p.button_data.accept_selected_text)),d=(p,f=0)=>{if(!te(p)||typeof p.section_type!="string"||!te(p.section_data))return!1;let u=p.section_data;return f<8&&$(u.title)&&$(u.section_title)&&$(u.section_body)&&be(u.buttons,s)&&be(u.sections,_=>d(_,f+1))};return(n.content==null||te(n.content)&&be(n.content.consent_data,p=>d(p)))&&be(n.purposes,p=>te(p)&&$(p.purpose_reason)&&$(p.desc)&&be(p.sub_items,f=>!te(f)||!o.has(f.purpose_id)||r.has(f.purpose_id)?!1:(r.add(f.purpose_id),$(f.purpose_name)&&Io(f.data_items)&&gn(f.data_categories))))&&be(n.collected,p=>te(p)&&$(p.data_category_name)&&$(p.desc)&&gn(p.sub_items))&&be(n.shared,p=>te(p)&&$(p.purpose_name)&&Io(p.data_items)&&gn(p.data_categories))}var At=class{constructor(t){this.options=t;this.syncChecks=()=>{};this.pendingKey="";this.pendingBody="";this.needsRefresh=!1;let o=t.host.attachShadow({mode:"open"});Do(o);let r=document.createElement("div");r.className="theme",r.lang=t.config.language_code,this.root=document.createElement("div"),this.root.className="root",this.root.dataset.mode=t.mode,r.append(this.root),o.append(r),this.appearance=eo(r),this.appearance.apply(t.appearance),this.state={choices:{...t.choices},busy:!1}}render(){let{config:t,mode:o,demo:r=!1,onClose:s}=this.options;try{if(!wt(t.notice,t.purposes))throw new Error("Invalid notice");this.syncChecks=Lo({root:this.root,config:t,state:this.state,mode:o,demo:r,onClose:s,onSubmit:()=>this.submit(),onChange:()=>{this.pendingKey=""}})}catch{let d="The consent form could not be displayed. Check the notice configuration and reload.",p=y("section",void 0,"shell"),f=y("p",d,"message error");f.setAttribute("role","alert");let u=y("div",void 0,"body");if(u.append(f),p.append(u),o!=="panel"){let _=y("button","\xD7","close");_.setAttribute("aria-label","Close consent form"),_.type="button",_.onclick=s,p.append(_)}this.root.replaceChildren(p),o!=="panel"&&!r&&p.querySelector("button")?.focus(),this.options.onError(new w(d,"form_error"))}}setAppearance(t){this.appearance.apply(t),this.render()}destroy(){this.appearance.destroy()}message(t,o=!1){let r=this.root.querySelector("#feedback");r&&(r.textContent=t,r.className=o?"message error":"message",r.setAttribute("role",o?"alert":"status"))}async submit(){let{state:t,root:o,options:r}=this;if(t.busy||this.needsRefresh)return;t.busy=!0;let s=[...o.querySelectorAll("input:not(:disabled)")];s.forEach(u=>u.disabled=!0),o.querySelectorAll("button:not(.close)").forEach(u=>u.disabled=!0);let d={config_version:r.config.config_version,language_code:r.config.language_code,answers:r.config.purposes.map(u=>({purpose_id:u.id,given:!!t.choices[String(u.id)]}))},p=JSON.stringify(d);(!this.pendingKey||this.pendingBody!==p)&&(this.pendingKey=Yn(),this.pendingBody=p);let f;try{f=await r.save(d,this.pendingKey),t.choices=f.choices,this.message(r.demo?"Demo complete. No record was saved.":"Your choices are saved.")}catch(u){let _=u instanceof Error?u.message:"Your choices could not be saved. Please retry.";if(this.message(_,!0),u instanceof w&&u.code==="notice_changed"&&r.onRefresh){this.needsRefresh=!0;let S=y("button","Reload consent form");S.type="button",S.onclick=()=>void r.onRefresh().catch(()=>{}),o.querySelector("#feedback")?.append(S)}r.onError(u)}finally{t.busy=!1,o.querySelectorAll("button").forEach(u=>u.disabled=!1),s.forEach(u=>u.disabled=!1),this.syncChecks(),this.needsRefresh&&o.querySelectorAll(".actions button").forEach(u=>{u.disabled=!0})}f&&r.onComplete(f)}};function X(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)}function yn(n,t){if(!X(n))return!1;let o=new Set(t.purposes.map(r=>String(r.id)));return Object.entries(n).every(([r,s])=>o.has(r)&&typeof s=="boolean")}function rt(n,t){if(!X(n)||n.app_id!==t||typeof n.name!="string"||typeof n.level_id!="string"||!n.level_id||typeof n.mode!="string"||!["panel","popup","page"].includes(n.mode)||typeof n.config_version!="string"||!/^[a-f0-9]{64}$/i.test(n.config_version)||typeof n.language_code!="string"||!n.language_code||!Array.isArray(n.purposes)||!n.purposes.length||n.purposes.length>300||!X(n.notice)||n.description!==null&&typeof n.description!="string"||n.template_id!==null&&typeof n.template_id!="string"||typeof n.revision!="number"||!Number.isInteger(n.revision)||n.revision<1||typeof n.sdk_version!="string"||!n.sdk_version||n.appearance!==void 0&&!X(n.appearance))return!1;let o=new Set;return n.purposes.every(r=>!X(r)||typeof r.id!="number"||!Number.isSafeInteger(r.id)||r.id<1||o.has(r.id)||typeof r.name!="string"||typeof r.required!="boolean"||!Array.isArray(r.data_items)||typeof r.description!="string"?!1:(o.add(r.id),!0))&&wt(n.notice,n.purposes)}var St=class{notePointer(t){this.pointerFocus=t.composedPath().find(o=>o instanceof HTMLElement&&o.matches("button,a[href],input,select,textarea,[tabindex]"))}activate(t){let o=document.activeElement;for(;o?.shadowRoot?.activeElement;)o=o.shadowRoot.activeElement;this.previousFocus=o instanceof HTMLElement&&o!==document.body?o:this.pointerFocus?.isConnected?this.pointerFocus:void 0,this.previousOverflow=document.body.style.overflow,document.body.style.overflow="hidden",t.showModal()}release(){this.previousOverflow!==void 0&&(document.body.style.overflow=this.previousOverflow,this.previousOverflow=void 0),this.previousFocus?.isConnected&&this.previousFocus.focus({preventScroll:!0}),this.previousFocus=void 0,this.pointerFocus=void 0}};function Po(n,t){let o=document.createElement("dialog");return o.setAttribute("role","dialog"),o.setAttribute("aria-modal","true"),o.setAttribute("aria-label","Consent preferences"),o.style.cssText="position:fixed;inset:0;margin:0;border:0;padding:0;width:100%;height:100%;max-width:none;max-height:none;z-index:2147483000;display:flex;align-items:center;justify-content:center;box-sizing:border-box",t==="page"?(o.style.cssText+=";background:white",n.style.cssText+=";width:100%;height:100%;border-radius:0"):(o.style.cssText+=";background:#10182888;padding:20px",n.style.cssText+=";width:min(560px,100%);height:min(760px,90dvh);border-radius:16px;overflow:hidden;box-shadow:0 20px 70px #0004"),o}var xt;function Mo(n){xt?.close(),xt=n}function No(n){xt===n&&(xt=void 0)}function Uo(n){let t=new URL(n,window.location.href);if(t.username||t.password||t.search||t.hash)throw new Error("Use an Atlas backend base URL without credentials or query parameters.");if(t.protocol!=="https:"&&!(t.protocol==="http:"&&(t.hostname==="localhost"||t.hostname==="127.0.0.1"||t.hostname==="[::1]"||t.hostname.endsWith(".localhost"))))throw new Error("Atlas Consent requires HTTPS. HTTP is only supported for localhost.");return t.href.replace(/\/$/,"")}function _n(n){if(!n)return;let t;try{t=JSON.parse(n)}catch{return}if(!t||typeof t.token!="string"||!t.token||typeof t.expires!="string"||!Number.isFinite(Date.parse(t.expires)))return;let o=t.result;return{token:t.token,expires:t.expires,result:o&&typeof o=="object"&&typeof o.ref_id=="string"?o:void 0}}function kt(n){try{return localStorage.getItem(n)}catch{return}}function Fo(n,t){try{return t?localStorage.setItem(n,JSON.stringify(t)):localStorage.removeItem(n),!0}catch{try{localStorage.removeItem(n)}catch{}return!1}}var Rt="atlas-consent:storage";async function Ho(n,t,o,r="Consent is temporarily unavailable."){if(t.aborted)throw new w("This consent instance was destroyed.","destroyed");let s=new AbortController,d=()=>s.abort();t.addEventListener("abort",d);let p=setTimeout(d,15e3),f,u;try{f=await fetch(n,{...o,signal:s.signal,credentials:"omit",headers:{"Content-Type":"application/json",...o?.headers}}),u=await f.json()}catch(_){throw t.aborted?new w("This consent instance was destroyed.","destroyed"):s.signal.aborted?new w("Atlas took too long to respond.","request_timeout"):_ instanceof SyntaxError||_ instanceof DOMException&&_.name==="SyntaxError"?new w(f?.ok?"Atlas returned an invalid response.":r,f&&!f.ok?"request_failed":"invalid_response",f?.status):new w("Atlas could not be reached.","network_error",f?.status)}finally{clearTimeout(p),t.removeEventListener("abort",d)}if(!f.ok||!X(u)||u.data===void 0||u.data===null){let _=X(u)&&X(u.error)?u.error:{};throw new w(typeof _.message=="string"&&_.message?_.message:r,typeof _.code=="string"?_.code:typeof _.type=="string"?_.type:"request_failed",f.status)}return u.data}var Br=60*864e5,qe=n=>({ref_id:n.ref_id,app_id:n.app_id,level_id:n.level_id,config_version:n.config_version,choices:{...n.choices}}),Ct=class{constructor(t){this.options=t;this.controller=new AbortController;this.preferenceSnapshot="null";this.accessibility=new St;this.destroyed=!1;this.generation=0;this.reportedErrors=new WeakSet;this.storageChanged=t=>{(t.key===null||t.key===this.key)&&this.syncSaved()};this.documentStorageChanged=t=>{t.detail===this.key&&this.syncSaved()};this.keydown=t=>{t.key==="Escape"&&this.overlay&&this.close()};this.pointerdown=t=>this.accessibility.notePointer(t);if(!/^ac_app_[A-Za-z0-9_-]{10,40}$/.test(t.appId))throw new w("Use the app ID from Atlas Integrations.","invalid_app");let o=t.apiBaseUrl??$n;if(!o)throw new w("Set apiBaseUrl or use an SDK build with a configured backend URL.","invalid_api_base_url");try{this.api=Uo(o)}catch(s){throw new w(s.message,"invalid_api_base_url")}this.key=`atlas-consent:v2:${encodeURIComponent(this.api)}:${t.appId}`,this.stored=kt(this.key),this.saved=_n(this.stored??null),window.addEventListener("keydown",this.keydown),window.addEventListener("pointerdown",this.pointerdown,!0),window.addEventListener("storage",this.storageChanged),window.addEventListener(Rt,this.documentStorageChanged);let r=this.generation;this.ready=this.load().then(s=>{if(this.destroyed)throw new w("This consent instance was destroyed.","destroyed");return this.config=s,this.notifyPreference(),this.renewIfEnding(),r!==this.generation||(t.target?this.mount(t.target).catch(()=>{}):(t.mode||s.mode)==="popup"&&t.autoShow!==!1&&!this.hasChoice()&&this.open().catch(()=>{})),s}),this.ready.catch(s=>{this.loadFailure=s,this.fail(s)})}async load(){let t=await this.request(`/config?language_code=${encodeURIComponent(this.options.language||"en")}`);if(!rt(t,this.options.appId))throw new w("Atlas returned an invalid configuration.","invalid_response");return t}request(t,o,r){return this.assertAlive(),Ho(`${this.api}/consent-sdk/v1/apps/${this.options.appId}${t}`,this.controller.signal,o,r)}persist(){let t=this.stored,o=Fo(this.key,this.saved),r=o?this.saved?JSON.stringify(this.saved):null:kt(this.key);r!==void 0&&(this.stored=r),this.notifyPreference(),(o||t!==this.stored)&&window.dispatchEvent(new CustomEvent(Rt,{detail:this.key}))}syncSaved(){if(this.destroyed)return;let t=kt(this.key);if(t===void 0||t===this.stored)return;let o=_n(t),r=o?.token!==this.saved?.token||JSON.stringify(o?.result)!==JSON.stringify(this.saved?.result);this.stored=t,this.saved=o,r&&this.form&&this.close(!0),this.notifyPreference()}notifyPreference(){let t=this.hasChoice()?qe(this.saved.result):null,o=JSON.stringify(t);if(o!==this.preferenceSnapshot){this.preferenceSnapshot=o;try{this.options.onPreferenceChange?.(t?qe(t):null)}catch(r){queueMicrotask(()=>{throw r})}window.dispatchEvent(new CustomEvent("atlas-consent:change",{detail:{appId:this.options.appId,preference:t?qe(t):null}}))}}alive(){return!!this.saved&&Date.parse(this.saved.expires)>Date.now()}hasChoice(){return!!this.config&&this.alive()&&bt(this.saved.result,this.config)}getPreference(){return this.syncSaved(),this.notifyPreference(),this.hasChoice()?qe(this.saved.result):null}getClaim(){return this.syncSaved(),this.alive()&&this.saved.result?.app_id===this.options.appId?{app_id:this.options.appId,ref_id:this.saved.result.ref_id,claim_token:this.saved.token}:null}async session(t){this.syncSaved();let o=this.stored,r=this.saved;if(this.alive())try{let d=await this.request("/session?language_code="+encodeURIComponent(this.options.language||"en"),{headers:{Authorization:`Bearer ${r.token}`}});if(t!==this.generation)return{};if(this.syncSaved(),t!==this.generation)return{};if(o!==this.stored)return this.session(t);if(!X(d)||!rt(d.config,this.options.appId)||!yn(d.choices,d.config))throw new w("Atlas returned an invalid session.","invalid_response");return this.reconcileSession(d,r),typeof d.expires_at=="string"&&Number.isFinite(Date.parse(d.expires_at))&&(r.expires=d.expires_at),this.persist(),d.choices}catch(d){if(t!==this.generation)return{};if(!(d instanceof w)||d.status!==401)throw d;this.saved=void 0,this.persist(),o=this.stored}let s=await this.request("/sessions",{method:"POST",body:JSON.stringify({language_code:this.options.language||"en"})});if(t!==this.generation)return{};if(this.syncSaved(),t!==this.generation)return{};if(o!==this.stored)return this.session(t);if(!X(s)||typeof s.session_token!="string"||!s.session_token||typeof s.expires_at!="string"||!Number.isFinite(Date.parse(s.expires_at))||!rt(s.config,this.options.appId))throw new w("Atlas returned an invalid session.","invalid_response");return this.config=s.config,this.saved={token:s.session_token,expires:s.expires_at},this.persist(),{}}reconcileSession(t,o){let r=t.config,s=o.result;if(s?.config_version===r.config_version){let d={...s,choices:t.choices};o.result=bt(d,r)&&t.ref_id===s.ref_id?d:void 0}this.config=r}renewIfEnding(){if(!this.alive()||Date.parse(this.saved.expires)-Date.now()>Br)return;let t=this.saved,o=this.stored;this.request("/session?language_code="+encodeURIComponent(this.options.language||"en"),{headers:{Authorization:`Bearer ${t.token}`}}).then(r=>{this.syncSaved(),this.saved===t&&this.stored===o&&X(r)&&rt(r.config,this.options.appId)&&yn(r.choices,r.config)&&typeof r.expires_at=="string"&&Number.isFinite(Date.parse(r.expires_at))&&(this.reconcileSession(r,t),t.expires=r.expires_at,this.persist())}).catch(()=>{})}async save(t,o,r,s,d){if(this.syncSaved(),d!==this.generation||this.saved?.token!==s)throw new w("This consent form was closed. Open it again.","form_closed");let p=await this.request("/decisions",{method:"POST",headers:{Authorization:`Bearer ${s}`,"Idempotency-Key":o},body:JSON.stringify({...t,sdk_version:Qt})},"Your choices could not be saved. Please retry.");if(!bt(p,r))throw new w("Atlas returned an invalid consent result. Please retry.","invalid_response");let f=p.expires_at;return d===this.generation&&this.saved?.token===s&&typeof f=="string"&&Number.isFinite(Date.parse(f))&&(this.saved.expires=f),qe(p)}recordView(){this.request("/events",{method:"POST",headers:{Authorization:`Bearer ${this.saved?.token}`},body:JSON.stringify({event:"viewed"})}).catch(()=>{})}async reported(t){try{await t()}catch(o){throw o!==this.loadFailure&&this.fail(o),o}}mount(t){return this.reported(()=>this.mountForm(t))}async mountForm(t){let o=this.generation;if(await this.ready,this.assertAlive(),o!==this.generation)return;let r=typeof t=="string"?document.querySelector(t):t;if(!(r instanceof HTMLElement))throw new w("The consent container was not found.","missing_container");return this.startForm(this.options.mode||this.config?.mode||"panel",r)}open(){return this.reported(async()=>{let t=this.generation;if(await this.ready,this.assertAlive(),t!==this.generation)return;if(this.host&&!this.overlay){this.host.scrollIntoView({block:"nearest"}),this.host.focus({preventScroll:!0});return}let o=this.options.mode||this.config.mode;return this.startForm(o==="panel"?"popup":o)})}refresh(){let t=this.mountTarget;return this.close(!0),t?this.mount(t):this.open()}startForm(t,o){if(this.form)return Promise.resolve();if(this.launchTask)return this.launchTask;let r=this.generation,s=Promise.resolve().then(()=>this.insertForm(t,o,r));this.launchTask=s;let d=()=>{this.launchTask===s&&(this.launchTask=void 0)};return s.then(d,d),s}async insertForm(t,o,r){try{if(this.assertAlive(),r!==this.generation)return;let s=await this.session(r);if(this.assertAlive(),r!==this.generation)return;o||Mo(this);let d=this.createForm(t,s);if(o)this.mountTarget=o,this.host.tabIndex=-1,this.host.setAttribute("role","region"),this.host.setAttribute("aria-label","Consent preferences"),o.append(this.host);else{this.overlay=Po(this.host,t);let p=this.overlay;p.addEventListener("cancel",f=>{f.preventDefault(),this.overlay===p&&this.close()}),p.addEventListener("close",()=>{this.overlay===p&&this.close()}),this.overlay.append(this.host),document.body.append(this.overlay),this.accessibility.activate(this.overlay)}d.render(),this.recordView()}catch(s){if(this.destroyed)throw s;if(r!==this.generation)return;throw this.close(!0),s}}createForm(t,o){let r=this.generation,s=this.saved.token,d=this.config,p=document.createElement("atlas-consent-form");return p.style.cssText="display:block;width:100%;height:650px",this.host=p,this.form=new At({host:p,config:this.config,choices:o,mode:t,appearance:{...this.config?.appearance,...this.options.appearance},save:(f,u)=>this.save(f,u,d,s,r),onComplete:f=>{this.syncSaved(),r===this.generation&&this.saved?.token===s&&this.complete(f)},onError:f=>{r===this.generation&&this.fail(f)},onClose:()=>{r===this.generation&&this.close()},onRefresh:()=>r===this.generation?this.refresh():Promise.resolve()}),this.form}complete(t){let o=this.overlay,r={app_id:t.app_id,ref_id:t.ref_id,claim_token:this.saved.token};this.saved.result=qe(t),this.persist();try{this.options.onComplete?.(t,r)}finally{o&&this.overlay===o&&this.close()}}assertAlive(){if(this.destroyed)throw new w("This consent instance was destroyed.","destroyed")}fail(t){if(this.destroyed||t instanceof w&&t.code==="destroyed")return;if(t&&typeof t=="object"){if(this.reportedErrors.has(t))return;this.reportedErrors.add(t)}let o=t instanceof w?t:new w(t instanceof Error?t.message:"Consent is unavailable.","unexpected_error");try{this.options.onError?.(o)}catch(r){queueMicrotask(()=>{throw r})}window.dispatchEvent(new CustomEvent("atlas-consent:error",{detail:{appId:this.options.appId,error:o}}))}close(t=!1){this.generation+=1,this.launchTask=void 0,No(this);let o=!!(this.form||this.overlay);this.form?.destroy(),this.form=void 0,this.host?.remove(),this.host=void 0,this.mountTarget=void 0,this.overlay?.close(),this.overlay?.remove(),this.overlay=void 0,this.accessibility.release(),o&&!t&&this.options.onClose?.()}destroy(){this.destroyed=!0,this.controller.abort(),this.close(!0),window.removeEventListener("keydown",this.keydown),window.removeEventListener("pointerdown",this.pointerdown,!0),window.removeEventListener("storage",this.storageChanged),window.removeEventListener(Rt,this.documentStorageChanged)}};function Pi(n){return new Ct(n)}export{Ct as ConsentClient,w as ConsentError,Qt as VERSION,Pi as create};
@@ -1,4 +1,4 @@
1
- "use strict";var AtlasConsent=(()=>{var nn=Object.defineProperty;var dr=Object.getOwnPropertyDescriptor;var ur=Object.getOwnPropertyNames;var fr=Object.prototype.hasOwnProperty;var hr=(n,e)=>{for(var o in e)nn(n,o,{get:e[o],enumerable:!0})},mr=(n,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ur(e))!fr.call(n,s)&&s!==o&&nn(n,s,{get:()=>e[s],enumerable:!(r=dr(e,s))||r.enumerable});return n};var gr=n=>mr(nn({},"__esModule",{value:!0}),n);var Qr={};hr(Qr,{ConsentClient:()=>st,ConsentError:()=>v,VERSION:()=>Ge,create:()=>An});var Tt="https://qa.dashboard.atlaskyc.com/v3/api";var Ge="0.0.1-beta.1";function Zn(){if(!globalThis.crypto?.getRandomValues)throw new Error("Atlas Consent needs a secure browser context.");return[...crypto.getRandomValues(new Uint8Array(24))].map(n=>n.toString(16).padStart(2,"0")).join("")}function Et(n,e){if(!n||typeof n!="object")return!1;let o=n;return typeof o.ref_id!="string"||!o.ref_id||o.app_id!==e.app_id||o.level_id!==e.level_id||o.config_version!==e.config_version||!o.choices||typeof o.choices!="object"||Array.isArray(o.choices)?!1:Object.keys(o.choices).length===e.purposes.length&&e.purposes.every(r=>typeof o.choices[String(r.id)]=="boolean"&&(!r.required||o.choices[String(r.id)]))}var v=class extends Error{constructor(o,r,s=0){super(o);this.code=r;this.status=s;this.name="ConsentError"}};var Qn={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"},eo={sharp:["2px","2px"],soft:["6px","6px"],round:["999px","16px"]},yr=/^#[0-9a-f]{6}$/i,De={theme:"light",primary_color:"#ae0a60",background_color:"#ffffff",text_color:"#1a202c",radius:"soft",font:"system",density:"comfortable"},to={background_color:"#0f172a",text_color:"#f1f5f9"};function no(n){let[e,o,r]=[1,3,5].map(s=>parseInt(n.slice(s,s+2),16)/255).map(s=>s<=.03928?s/12.92:((s+.055)/1.055)**2.4);return .2126*e+.7152*o+.0722*r}function oo(n,e){let o=no(n),r=no(e);return(Math.max(o,r)+.05)/(Math.min(o,r)+.05)}function ro(n,e,o){let r={...De,...e||{}};for(let _ of["primary_color","background_color","text_color"])(typeof r[_]!="string"||!yr.test(r[_]))&&(r[_]=De[_]);(typeof r.radius!="string"||!Object.prototype.hasOwnProperty.call(eo,r.radius))&&(r.radius=De.radius),(typeof r.font!="string"||!Object.prototype.hasOwnProperty.call(Qn,r.font))&&(r.font=De.font),["light","dark","system"].includes(r.theme)||(r.theme=De.theme);let s=r.theme==="dark"||r.theme==="system"&&o.matches;s&&(r.background_color.toLowerCase()===De.background_color&&(r.background_color=to.background_color),r.text_color.toLowerCase()===De.text_color&&(r.text_color=to.text_color));let[p,l]=eo[r.radius],f=r.density==="compact",u={"--primary":r.primary_color,"--bg":r.background_color,"--text":r.text_color,"--on-primary":oo(r.primary_color,"#000000")>oo(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":Qn[r.font],"--r-btn":p,"--r-card":l,"--pad":f?"16px":"28px","--gap":f?"10px":"20px","--fs":f?"14px":"16px","--btn":f?"42px":"52px","--rowy":f?"4px":"12px","--rowx":f?"12px":"18px"};for(let[_,S]of Object.entries(u))n.style.setProperty(_,S);n.style.colorScheme=s?"dark":"light"}function io(n){let e=window.matchMedia("(prefers-color-scheme: dark)"),o,r=()=>{o?.theme==="system"&&ro(n,o,e)};return e.addEventListener("change",r),{apply(s){o=s,ro(n,s,e)},destroy(){e.removeEventListener("change",r)}}}function _r(n,e){this.v=n,this.k=e}function so(n,e){(e==null||e>n.length)&&(e=n.length);for(var o=0,r=Array(e);o<e;o++)r[o]=n[o];return r}function br(n){if(Array.isArray(n))return n}function vr(n,e){var o=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(o!=null){var r,s,p,l,f=[],u=!0,_=!1;try{if(p=(o=o.call(n)).next,e===0){if(Object(o)!==o)return;u=!1}else for(;!(u=(r=p.call(o)).done)&&(f.push(r.value),f.length!==e);u=!0);}catch(S){_=!0,s=S}finally{try{if(!u&&o.return!=null&&(l=o.return(),Object(l)!==l))return}finally{if(_)throw s}}return f}}function Tr(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
1
+ "use strict";var AtlasConsent=(()=>{var nn=Object.defineProperty;var dr=Object.getOwnPropertyDescriptor;var ur=Object.getOwnPropertyNames;var fr=Object.prototype.hasOwnProperty;var hr=(n,e)=>{for(var o in e)nn(n,o,{get:e[o],enumerable:!0})},mr=(n,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ur(e))!fr.call(n,s)&&s!==o&&nn(n,s,{get:()=>e[s],enumerable:!(r=dr(e,s))||r.enumerable});return n};var gr=n=>mr(nn({},"__esModule",{value:!0}),n);var Qr={};hr(Qr,{ConsentClient:()=>st,ConsentError:()=>v,VERSION:()=>Ge,create:()=>An});var Tt="https://play.dashboard.atlaskyc.com/v3/api";var Ge="1.0.0";function Zn(){if(!globalThis.crypto?.getRandomValues)throw new Error("Atlas Consent needs a secure browser context.");return[...crypto.getRandomValues(new Uint8Array(24))].map(n=>n.toString(16).padStart(2,"0")).join("")}function Et(n,e){if(!n||typeof n!="object")return!1;let o=n;return typeof o.ref_id!="string"||!o.ref_id||o.app_id!==e.app_id||o.level_id!==e.level_id||o.config_version!==e.config_version||!o.choices||typeof o.choices!="object"||Array.isArray(o.choices)?!1:Object.keys(o.choices).length===e.purposes.length&&e.purposes.every(r=>typeof o.choices[String(r.id)]=="boolean"&&(!r.required||o.choices[String(r.id)]))}var v=class extends Error{constructor(o,r,s=0){super(o);this.code=r;this.status=s;this.name="ConsentError"}};var Qn={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"},eo={sharp:["2px","2px"],soft:["6px","6px"],round:["999px","16px"]},yr=/^#[0-9a-f]{6}$/i,De={theme:"light",primary_color:"#ae0a60",background_color:"#ffffff",text_color:"#1a202c",radius:"soft",font:"system",density:"comfortable"},to={background_color:"#0f172a",text_color:"#f1f5f9"};function no(n){let[e,o,r]=[1,3,5].map(s=>parseInt(n.slice(s,s+2),16)/255).map(s=>s<=.03928?s/12.92:((s+.055)/1.055)**2.4);return .2126*e+.7152*o+.0722*r}function oo(n,e){let o=no(n),r=no(e);return(Math.max(o,r)+.05)/(Math.min(o,r)+.05)}function ro(n,e,o){let r={...De,...e||{}};for(let _ of["primary_color","background_color","text_color"])(typeof r[_]!="string"||!yr.test(r[_]))&&(r[_]=De[_]);(typeof r.radius!="string"||!Object.prototype.hasOwnProperty.call(eo,r.radius))&&(r.radius=De.radius),(typeof r.font!="string"||!Object.prototype.hasOwnProperty.call(Qn,r.font))&&(r.font=De.font),["light","dark","system"].includes(r.theme)||(r.theme=De.theme);let s=r.theme==="dark"||r.theme==="system"&&o.matches;s&&(r.background_color.toLowerCase()===De.background_color&&(r.background_color=to.background_color),r.text_color.toLowerCase()===De.text_color&&(r.text_color=to.text_color));let[p,l]=eo[r.radius],f=r.density==="compact",u={"--primary":r.primary_color,"--bg":r.background_color,"--text":r.text_color,"--on-primary":oo(r.primary_color,"#000000")>oo(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":Qn[r.font],"--r-btn":p,"--r-card":l,"--pad":f?"16px":"28px","--gap":f?"10px":"20px","--fs":f?"14px":"16px","--btn":f?"42px":"52px","--rowy":f?"4px":"12px","--rowx":f?"12px":"18px"};for(let[_,S]of Object.entries(u))n.style.setProperty(_,S);n.style.colorScheme=s?"dark":"light"}function io(n){let e=window.matchMedia("(prefers-color-scheme: dark)"),o,r=()=>{o?.theme==="system"&&ro(n,o,e)};return e.addEventListener("change",r),{apply(s){o=s,ro(n,s,e)},destroy(){e.removeEventListener("change",r)}}}function _r(n,e){this.v=n,this.k=e}function so(n,e){(e==null||e>n.length)&&(e=n.length);for(var o=0,r=Array(e);o<e;o++)r[o]=n[o];return r}function br(n){if(Array.isArray(n))return n}function vr(n,e){var o=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(o!=null){var r,s,p,l,f=[],u=!0,_=!1;try{if(p=(o=o.call(n)).next,e===0){if(Object(o)!==o)return;u=!1}else for(;!(u=(r=p.call(o)).done)&&(f.push(r.value),f.length!==e);u=!0);}catch(S){_=!0,s=S}finally{try{if(!u&&o.return!=null&&(l=o.return(),Object(l)!==l))return}finally{if(_)throw s}}return f}}function Tr(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
2
2
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Er(n,e){return br(n)||vr(n,e)||wr(n,e)||Tr()}function wr(n,e){if(n){if(typeof n=="string")return so(n,e);var o={}.toString.call(n).slice(8,-1);return o==="Object"&&n.constructor&&(o=n.constructor.name),o==="Map"||o==="Set"?Array.from(n):o==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?so(n,e):void 0}}function wt(n){var e,o;function r(p,l){try{var f=n[p](l),u=f.value,_=u instanceof _r;Promise.resolve(_?u.v:u).then(function(S){if(_){var H=p==="return"&&u.k?p:"next";if(!u.k||S.done)return r(H,S);S=n[H](S).value}s(!!f.done,S)},function(S){r("throw",S)})}catch(S){s(2,S)}}function s(p,l){p===2?e.reject(l):e.resolve({value:l,done:p}),(e=e.next)?r(e.key,e.arg):o=null}this._invoke=function(p,l){return new Promise(function(f,u){var _={key:p,arg:l,resolve:f,reject:u,next:null};o?o=o.next=_:(e=o=_,r(p,l))})},typeof n.return!="function"&&(this.return=void 0)}wt.prototype[typeof Symbol=="function"&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},wt.prototype.next=function(n){return this._invoke("next",n)},wt.prototype.throw=function(n){return this._invoke("throw",n)},wt.prototype.return=function(n){return this._invoke("return",n)};var Eo=Object.entries,ao=Object.setPrototypeOf,Ar=Object.isFrozen,wo=Object.getPrototypeOf,Ao=Object.getOwnPropertyDescriptor,P=Object.freeze,U=Object.seal,We=Object.create,So=typeof Reflect<"u"&&Reflect,fn=So.apply,hn=So.construct;P||(P=function(e){return e});U||(U=function(e){return e});fn||(fn=function(e,o){for(var r=arguments.length,s=new Array(r>2?r-2:0),p=2;p<r;p++)s[p-2]=arguments[p];return e.apply(o,s)});hn||(hn=function(e){for(var o=arguments.length,r=new Array(o>1?o-1:0),s=1;s<o;s++)r[s-1]=arguments[s];return new e(...r)});var ye=R(Array.prototype.forEach);Array.prototype.indexOf;var Sr=R(Array.prototype.lastIndexOf),co=R(Array.prototype.pop),tt=R(Array.prototype.push),xr=R(Array.prototype.slice),kr=R(Array.prototype.splice),qe=Array.isArray,on=xo(Set),rn=R(Set.prototype.add),nt=R(Set.prototype.has),Ie=R(String.prototype.toLowerCase),sn=R(String.prototype.toString),lo=R(String.prototype.match),ot=R(String.prototype.replace),po=R(String.prototype.indexOf),Rr=R(String.prototype.trim),Cr=R(Number.prototype.toString),Or=R(Boolean.prototype.toString),uo=typeof BigInt>"u"?null:R(BigInt.prototype.toString),fo=typeof Symbol>"u"?null:R(Symbol.prototype.toString),q=R(Object.prototype.hasOwnProperty),rt=R(Object.prototype.toString),N=R(RegExp.prototype.test),_e=xo(TypeError);function R(n){return function(e){e instanceof RegExp&&(e.lastIndex=0);for(var o=arguments.length,r=new Array(o>1?o-1:0),s=1;s<o;s++)r[s-1]=arguments[s];return fn(n,e,r)}}function xo(n){return function(){for(var e=arguments.length,o=new Array(e),r=0;r<e;r++)o[r]=arguments[r];return hn(n,o)}}function E(n,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Ie;if(ao&&ao(n,null),!qe(e))return n;let r=e.length;for(;r--;){let s=e[r];if(typeof s=="string"){let p=o(s);p!==s&&(Ar(e)||(e[r]=p),s=p)}n[s]=!0}return n}function Lr(n){for(let e=0;e<n.length;e++)q(n,e)||(n[e]=null);return n}function K(n){let e=We(null);for(let r of Eo(n)){var o=Er(r,2);let s=o[0],p=o[1];q(n,s)&&(qe(p)?e[s]=Lr(p):p&&typeof p=="object"&&p.constructor===Object?e[s]=K(p):e[s]=p)}return e}function Dr(n){switch(typeof n){case"string":return n;case"number":return Cr(n);case"boolean":return Or(n);case"bigint":return uo?uo(n):"0";case"symbol":return fo?fo(n):"Symbol()";case"undefined":return rt(n);case"function":case"object":{if(n===null)return rt(n);let e=n,o=J(e,"toString");if(typeof o=="function"){let r=o(e);return typeof r=="string"?r:rt(r)}return rt(n)}default:return rt(n)}}function J(n,e){for(;n!==null;){let r=Ao(n,e);if(r){if(r.get)return R(r.get);if(typeof r.value=="function")return R(r.value)}n=wo(n)}function o(){return null}return o}function Ir(n,e){for(;n!==null;){let o=Ao(n,e);if(o)return o.get?R(o.get):null;n=wo(n)}return null}function Mr(n){try{return N(n,""),!0}catch{return!1}}var ho=P(["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"]),an=P(["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"]),cn=P(["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"]),Pr=P(["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"]),ln=P(["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"]),Nr=P(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),mo=P(["#text"]),go=P(["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"]),pn=P(["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"]),yo=P(["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"]),At=P(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Ur=U(/{{[\w\W]*|^[\w\W]*}}/g),Fr=U(/<%[\w\W]*|^[\w\W]*%>/g),Hr=U(/\${[\w\W]*/g),zr=U(/^data-[\-\w.\u00B7-\uFFFF]+$/),Br=U(/^aria-[\-\w]+$/),_o=U(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),jr=U(/^(?:\w+script|data):/i),Gr=U(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Wr=U(/^html$/i),qr=U(/^[a-z][.\w]*(-[.\w]+)+$/i),dn=U(/<[/\w!]/g),bo=U(/<[/\w]/g),$r=U(/<\/no(script|embed|frames)/i),vo=U(/\/>/i),L={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Yr=P(E({},["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"])),Vr=function(){return typeof window>"u"?null:window},Kr=function(e,o){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let r=null,s="data-tt-policy-suffix";o&&o.hasAttribute(s)&&(r=o.getAttribute(s));let p="dompurify"+(r?"#"+r:"");try{return e.createPolicy(p,{createHTML(l){return l},createScriptURL(l){return l}})}catch{return console.warn("TrustedTypes policy "+p+" could not be created."),null}},To=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},xe=function(e,o,r,s){return q(e,o)&&qe(e[o])?E(s.base?K(s.base):{},e[o],s.transform):r},un=function(e,o,r){let s=q(e,o)?e[o]:void 0;return s&&typeof s=="object"?K(s):r()};function ko(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Vr(),e=d=>ko(d);if(e.version="3.4.17",e.removed=[],!n||!n.document||n.document.nodeType!==L.document||!n.Element)return e.isSupported=!1,e;let o=n.document,r=o,s=r.currentScript;n.DocumentFragment;let p=n.HTMLTemplateElement,l=n.Node,f=n.Element,u=n.NodeFilter;n.NamedNodeMap===void 0&&(n.NamedNodeMap||n.MozNamedAttrMap),n.HTMLFormElement;let _=n.DOMParser,S=n.trustedTypes,H=f.prototype,ke=J(H,"cloneNode"),Y=J(H,"remove"),Me=J(H,"removeAttributeNode"),ne=J(H,"nextSibling"),le=J(H,"childNodes"),pe=J(H,"parentNode"),de=J(H,"shadowRoot"),Pe=J(H,"attributes"),Z=l&&l.prototype?J(l.prototype,"nodeType"):null,ue=l&&l.prototype?J(l.prototype,"nodeName"):null,ve=l&&l.prototype?J(l.prototype,"ownerDocument"):null,z=function(t){return Z?Z(t):t.nodeType},Te=function(t){return ue?ue(t):t.nodeName},Ye=Ir(H,"namespaceURI"),Ve=function(t){return Ye?Ye(t):t.namespaceURI};if(typeof p=="function"){let d=o.createElement("template");d.content&&d.content.ownerDocument&&(o=d.content.ownerDocument)}let F,fe="",Ke,h=!1,T=0,A=function(){if(T>0)throw _e('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.')},I=function(t){A(),T++;try{return F.createHTML(t)}finally{T--}},he=function(t){A(),T++;try{return F.createScriptURL(t)}finally{T--}},oe=function(){return h||(Ke=Kr(S,s),h=!0),Ke},C=o,V=C.implementation,Q=C.createNodeIterator,It=C.createDocumentFragment,at=C.getElementsByTagName,ct=r.importNode,w=To();e.isSupported=typeof Eo=="function"&&typeof pe=="function"&&V&&V.createHTMLDocument!==void 0;let me=Ur,lt=Fr,M=Hr,re=zr,Ee=Br,Xe=jr,ie=Gr,pt=qr,dt=_o,x=null,Mt=E({},[...ho,...an,...cn,...ln,...mo]),k=null,Pt=E({},[...go,...pn,...yo,...At]),se=Object.seal(We(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}})),Je=null,Sn=null,we=Object.seal(We(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),xn=!0,Nt=!0,kn=!1,Ut=!0,ge=!1,Re=!0,Ce=!1,Ft=!1,ut=null,ft=null,Ht=!1,Ne=!1,ht=!1,mt=!1,Rn=!0,Cn=!1,On="user-content-",zt=!0,Bt=!1,Oe=null,Ue={},Le=null,Ln=E({},["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"]),Dn=null,In=E({},["audio","video","img","source","image","track"]),Mn=null,Pn=E({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),gt="http://www.w3.org/1998/Math/MathML",yt="http://www.w3.org/2000/svg",ae="http://www.w3.org/1999/xhtml",Fe=ae,jt=!1,Gt=null,qo=E({},[gt,yt,ae],sn),Nn=P(["mi","mo","mn","ms","mtext"]),Wt=E({},Nn),Un=P(["annotation-xml"]),qt=E({},Un),$o=E({},["title","style","font","a","script"]),Ze=null,Yo=["application/xhtml+xml","text/html"],Vo="text/html",O=null,He=null,Ko=o.createElement("form"),Fn=function(t){return t instanceof RegExp||t instanceof Function},$t=function(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(He&&He===t)return;(!t||typeof t!="object")&&(t={}),t=K(t),Ze=Yo.indexOf(t.PARSER_MEDIA_TYPE)===-1?Vo:t.PARSER_MEDIA_TYPE,O=Ze==="application/xhtml+xml"?sn:Ie,x=xe(t,"ALLOWED_TAGS",Mt,{transform:O}),k=xe(t,"ALLOWED_ATTR",Pt,{transform:O}),Gt=xe(t,"ALLOWED_NAMESPACES",qo,{transform:sn}),Mn=xe(t,"ADD_URI_SAFE_ATTR",Pn,{transform:O,base:Pn}),Dn=xe(t,"ADD_DATA_URI_TAGS",In,{transform:O,base:In}),Le=xe(t,"FORBID_CONTENTS",Ln,{transform:O}),Je=xe(t,"FORBID_TAGS",K({}),{transform:O}),Sn=xe(t,"FORBID_ATTR",K({}),{transform:O}),Ue=q(t,"USE_PROFILES")?t.USE_PROFILES&&typeof t.USE_PROFILES=="object"?K(t.USE_PROFILES):t.USE_PROFILES:!1,xn=t.ALLOW_ARIA_ATTR!==!1,Nt=t.ALLOW_DATA_ATTR!==!1,kn=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Ut=t.ALLOW_SELF_CLOSE_IN_ATTR!==!1,ge=t.SAFE_FOR_TEMPLATES||!1,Re=t.SAFE_FOR_XML!==!1,Ce=t.WHOLE_DOCUMENT||!1,Ne=t.RETURN_DOM||!1,ht=t.RETURN_DOM_FRAGMENT||!1,mt=t.RETURN_TRUSTED_TYPE||!1,Ht=t.FORCE_BODY||!1,Rn=t.SANITIZE_DOM!==!1,Cn=t.SANITIZE_NAMED_PROPS||!1,zt=t.KEEP_CONTENT!==!1,Bt=t.IN_PLACE||!1,dt=Mr(t.ALLOWED_URI_REGEXP)?t.ALLOWED_URI_REGEXP:_o,Fe=typeof t.NAMESPACE=="string"?t.NAMESPACE:ae,Wt=un(t,"MATHML_TEXT_INTEGRATION_POINTS",()=>E({},Nn)),qt=un(t,"HTML_INTEGRATION_POINTS",()=>E({},Un));let i=un(t,"CUSTOM_ELEMENT_HANDLING",()=>We(null));if(se=We(null),q(i,"tagNameCheck")&&Fn(i.tagNameCheck)&&(se.tagNameCheck=i.tagNameCheck),q(i,"attributeNameCheck")&&Fn(i.attributeNameCheck)&&(se.attributeNameCheck=i.attributeNameCheck),q(i,"allowCustomizedBuiltInElements")&&typeof i.allowCustomizedBuiltInElements=="boolean"&&(se.allowCustomizedBuiltInElements=i.allowCustomizedBuiltInElements),U(se),ge&&(Nt=!1),ht&&(Ne=!0),Ue&&(x=E({},mo),k=We(null),Ue.html===!0&&(E(x,ho),E(k,go)),Ue.svg===!0&&(E(x,an),E(k,pn),E(k,At)),Ue.svgFilters===!0&&(E(x,cn),E(k,pn),E(k,At)),Ue.mathMl===!0&&(E(x,ln),E(k,yo),E(k,At))),we.tagCheck=null,we.attributeCheck=null,q(t,"ADD_TAGS")&&(typeof t.ADD_TAGS=="function"?we.tagCheck=t.ADD_TAGS:qe(t.ADD_TAGS)&&(x===Mt&&(x=K(x)),E(x,t.ADD_TAGS,O))),q(t,"ADD_ATTR")&&(typeof t.ADD_ATTR=="function"?we.attributeCheck=t.ADD_ATTR:qe(t.ADD_ATTR)&&(k===Pt&&(k=K(k)),E(k,t.ADD_ATTR,O))),q(t,"ADD_FORBID_CONTENTS")&&qe(t.ADD_FORBID_CONTENTS)&&(Le===Ln&&(Le=K(Le)),E(Le,t.ADD_FORBID_CONTENTS,O)),zt&&(x["#text"]=!0),Ce&&E(x,["html","head","body"]),x.table&&(E(x,["tbody"]),delete Je.tbody),t.TRUSTED_TYPES_POLICY){if(typeof t.TRUSTED_TYPES_POLICY.createHTML!="function")throw _e('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof t.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw _e('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');let a=F;F=t.TRUSTED_TYPES_POLICY;try{fe=I("")}catch(c){throw F=a,c}}else t.TRUSTED_TYPES_POLICY===null?(F=void 0,fe=""):(F===void 0&&(F=oe()),F&&typeof fe=="string"&&(fe=I("")));P&&P(t),He=t},Hn=E({},[...an,...cn,...Pr]),zn=E({},[...ln,...Nr]),Xo=function(t,i,a){return i.namespaceURI===ae?t==="svg":i.namespaceURI===gt?t==="svg"&&(a==="annotation-xml"||Wt[a]):!!Hn[t]},Jo=function(t,i,a){return i.namespaceURI===ae?t==="math":i.namespaceURI===yt?t==="math"&&qt[a]:!!zn[t]},Zo=function(t,i,a){return i.namespaceURI===yt&&!qt[a]||i.namespaceURI===gt&&!Wt[a]?!1:!zn[t]&&($o[t]||!Hn[t])},Qo=function(t){let i=Ve(t),a=Ie(Te(t)),c=pe(t),m,g;return c&&z(c)===L.element?(m={namespaceURI:Ve(c)},g=Ie(Te(c))):(m={namespaceURI:Fe},g="template"),Gt[i]?i===yt?Xo(a,m,g):i===gt?Jo(a,m,g):i===ae?Zo(a,m,g):!!(Ze==="application/xhtml+xml"&&Gt[i]):!1},Ae=function(t){tt(e.removed,{element:t});try{pe(t).removeChild(t)}catch{if(Y(t),!pe(t))throw _e("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place")}},Bn=function(t,i,a){try{Me(t,i)}catch{try{t.removeAttribute(a)}catch{}}},Yt=function(t){Kt(t);let i=le(t);i&&ye(xr(i),c=>{try{Y(c)}catch{}});let a=z(t)===L.element?Pe(t):null;if(a)for(let c=a.length-1;c>=0;--c){let m=a[c],g=m&&m.name;typeof g=="string"&&Bn(t,m,g)}},ze=function(t,i,a){if(!a)try{a=i.getAttributeNode(t)}catch{a=null}tt(e.removed,{attribute:a||null,from:i});try{a?Me(i,a):i.removeAttribute(t)}catch{try{i.removeAttribute(t)}catch{}}if(t==="is")if(Ne||ht)try{Ae(i)}catch{}else try{i.setAttribute(t,"")}catch{}},jn=function(t){let i=Pe(t);if(i)for(let a=i.length-1;a>=0;--a){let c=i[a],m=c&&c.name;typeof m!="string"||k[O(m)]||Bn(t,c,m)}},Vt=function(t,i){let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,c=[t];for(;c.length>0;){let m=c.pop();if(i(m)===!1)continue;if(a&&z(m)===L.element){let b=de(m);Se(b)&&c.push(b)}let g=le(m);if(g)for(let b=g.length-1;b>=0;--b)c.push(g[b])}},Kt=function(t){Vt(t,i=>{z(i)===L.element&&jn(i)})},Xt=function(t){let i=[];return Vt(t,a=>{i.push(a)},!0),i},er=function(t,i){let a=on();ye(Xt(t),c=>{z(c)===L.element&&rn(a,c)}),ye(i,c=>{z(c)===L.element&&!nt(a,c)&&jn(c)})},Gn=function(t,i){let a=!1;return ye(e.removed,c=>{c.element&&(a=a||c.element===t,Kt(c.element))}),er(t,i),a},tr=8,nr=function(t,i){let a=Oe,c=null,m=()=>(c||(c=on(),ye(i,g=>{rn(c,g)})),c);for(let g=0;;g++){let b=Xt(t),D=[t],ce=!1;if(ye(b,B=>{z(B)===L.documentFragment?tt(D,B):!ce&&!nt(a,B)&&(ce=nt(m(),B))}),!ce)return;if(g>=tr)throw _e("the tree kept changing during in-place sanitization; refusing to return it");ye(D,(B,G)=>{or(B,G>0,t,m())})}},or=function(t,i,a,c){let m=Jt(t),g;for(;g=m.nextNode();)!nt(c,g)||nt(Oe,g)||(i&&ee(w.uponSanitizeShadowNode,g,null),Qt(g,a),en(g,a),Se(g.content)&&et(g.content))},rr=function(t){Oe&&rn(Oe,t)},Wn=function(t,i){return Re?t==="patchsrc"?!0:t==="for"&&i!=="label"&&i!=="output":!1},ir=function(t){Re&&Vt(t,i=>{let a=z(i);if(a===L.processingInstruction||a===L.comment&&N(bo,i.data)){try{Y(i)}catch{}return!1}if(a===L.element){let c=i,m=O(Te(i));try{c.hasAttribute&&c.hasAttribute("patchsrc")&&c.removeAttribute("patchsrc"),c.hasAttribute&&c.hasAttribute("for")&&Wn("for",m)&&c.removeAttribute("for")}catch{}}return!0})},qn=function(t){let i=null,a=null;if(Ht)t="<remove></remove>"+t;else{let g=lo(t,/^[\r\n\t ]+/);a=g&&g[0]}Ze==="application/xhtml+xml"&&Fe===ae&&(t='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+t+"</body></html>");let c=F?I(t):t;if(Fe===ae)try{i=new _().parseFromString(c,Ze)}catch{}if(!i||!i.documentElement){i=V.createDocument(Fe,"template",null);try{i.documentElement.innerHTML=jt?fe:c}catch{}}let m=i.body||i.documentElement;return t&&a&&m.insertBefore(o.createTextNode(a),m.childNodes[0]||null),Fe===ae?at.call(i,Ce?"html":"body")[0]:Ce?i.documentElement:m},Jt=function(t){let i=ve?ve(t):t.ownerDocument;return Q.call(i||t,t,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT|u.SHOW_PROCESSING_INSTRUCTION|u.SHOW_CDATA_SECTION,null)},_t=function(t){return t=ot(t,me," "),t=ot(t,lt," "),t=ot(t,M," "),t},Zt=function(t){var i;$n(t);let a=(i=t.querySelectorAll)===null||i===void 0?void 0:i.call(t,"template");a&&ye(a,c=>{Se(c.content)&&Zt(c.content)})},$n=function(t){t.normalize();let i=ve?ve(t):t.ownerDocument,a=Q.call(i||t,t,u.SHOW_TEXT|u.SHOW_COMMENT|u.SHOW_CDATA_SECTION|u.SHOW_PROCESSING_INSTRUCTION,null),c=a.nextNode();for(;c;)c.data=_t(c.data),c=a.nextNode()},bt=function(t){let i=ue?ue(t):null;return typeof i!="string"||O(i)!=="form"?!1:typeof t.nodeName!="string"||typeof t.textContent!="string"||typeof t.removeChild!="function"||t.attributes!==Pe(t)||typeof t.removeAttribute!="function"||typeof t.removeAttributeNode!="function"||typeof t.getAttributeNode!="function"||typeof t.setAttribute!="function"||typeof t.namespaceURI!="string"||typeof t.insertBefore!="function"||typeof t.hasChildNodes!="function"||t.nodeType!==Z(t)||t.childNodes!==le(t)},Se=function(t){if(!Z||typeof t!="object"||t===null)return!1;try{return Z(t)===L.documentFragment}catch{return!1}},Qe=function(t){if(!Z||typeof t!="object"||t===null)return!1;try{return typeof Z(t)=="number"}catch{return!1}};function ee(d,t,i){d.length!==0&&ye(d,a=>{a.call(e,t,i,He)})}let sr=function(t,i){return!!(Re&&t.hasChildNodes()&&!Qe(t.firstElementChild)&&N(dn,t.textContent)&&N(dn,t.innerHTML)||Re&&Yr[i]&&z(t)===L.element&&Ve(t)===ae&&(Qe(t.firstElementChild)||typeof t.textContent=="string"&&N(dn,t.textContent))||t.nodeType===L.processingInstruction||Re&&t.nodeType===L.comment&&N(bo,t.data))},vt=function(t,i){if(t instanceof RegExp)return N(t,i);if(t instanceof Function){for(var a=arguments.length,c=new Array(a>2?a-2:0),m=2;m<a;m++)c[m-2]=arguments[m];return!!t(i,...c)}return!1},ar=function(t,i,a){if(!Je[i]&&Kn(i)&&vt(se.tagNameCheck,i))return!1;if(zt&&!Le[i]&&!Le[Ie(i)]){let c=pe(t),m=le(t);if(m&&c){let g=m.length;for(let b=g-1;b>=0;--b){let D=t===a?ke(m[b],!0):m[b];c.insertBefore(D,ne(t))}}}return Ae(t),!0},Yn=function(t,i,a,c){return t.length===0?i:i===a||i===c?K(i):i},Be=function(t,i){return t===i||pe(t)!==null?!1:(Bt&&Kt(t),!0)},Qt=function(t,i){if(rr(t),ee(w.beforeSanitizeElements,t,null),Be(t,i))return!0;if(bt(t))return Ae(t),!0;let a=O(Te(t));if(x=Yn(w.uponSanitizeElement,x,Mt,ut),ee(w.uponSanitizeElement,t,{tagName:a,allowedTags:x}),Be(t,i))return!0;if(sr(t,a))return Ae(t),!0;if(Je[a]||!(we.tagCheck instanceof Function&&we.tagCheck(a))&&!x[a]){let c=ar(t,a,i);return c===!1&&(ee(w.afterSanitizeElements,t,null),Be(t,i))?!0:c}if(z(t)===L.element&&!Qo(t)||(a==="noscript"||a==="noembed"||a==="noframes")&&N($r,t.innerHTML))return Ae(t),!0;if(ge&&t.nodeType===L.text){let c=_t(t.textContent);t.textContent!==c&&(tt(e.removed,{element:t.cloneNode()}),t.textContent=c)}return ee(w.afterSanitizeElements,t,null),Be(t,i)},Vn=function(t,i,a){if(Sn[i]||Wn(i,t)||Rn&&(i==="id"||i==="name")&&(a in o||a in Ko))return!1;let c=k[i]||we.attributeCheck instanceof Function&&we.attributeCheck(i,t);return Nt&&N(re,i)||xn&&N(Ee,i)?!0:c?Mn[i]||N(dt,ot(a,ie,""))||(i==="src"||i==="xlink:href"||i==="href")&&t!=="script"&&po(a,"data:")===0&&Dn[t]||kn&&!N(Xe,ot(a,ie,""))?!0:!a:Kn(t)&&vt(se.tagNameCheck,t)&&vt(se.attributeNameCheck,i,t)||i==="is"&&se.allowCustomizedBuiltInElements&&vt(se.tagNameCheck,a)},cr=E({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),Kn=function(t){return!cr[Ie(t)]&&N(pt,t)},lr=function(t,i,a,c){if(F&&typeof S=="object"&&typeof S.getAttributeType=="function"&&!a)switch(S.getAttributeType(t,i)){case"TrustedHTML":return I(c);case"TrustedScriptURL":return he(c)}return c},pr=function(t,i,a,c){try{return a?t.setAttributeNS(a,i,c):t.setAttribute(i,c),bt(t)?(Ae(t),!1):!0}catch{return ze(i,t),!1}},Xn=function(t,i){return Re&&N(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,i)?!0:Ie(t)==="attributename"&&lo(i,"href")!==null},en=function(t,i){if(ee(w.beforeSanitizeAttributes,t,null),Be(t,i))return;let a=t.attributes;if(!a||bt(t))return;k=Yn(w.uponSanitizeAttribute,k,Pt,ft);let c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:k,forceKeepAttr:void 0},m=a.length,g=O(t.nodeName);for(;m--;){let b=a[m],D=b.name,ce=b.namespaceURI,B=b.value,G=O(D),je=B,W=D==="value"?je:Rr(je),Jn=!1;if(c.attrName=G,c.attrValue=W,c.keepAttr=!0,c.forceKeepAttr=void 0,ee(w.uponSanitizeAttribute,t,c),W=c.attrValue,Cn&&(G==="id"||G==="name")&&po(W,On)!==0&&(ze(D,t,b),W=On+W,Jn=!0),Xn(D,W)){ze(D,t,b);continue}if(!c.forceKeepAttr){if(!c.keepAttr){ze(D,t,b);continue}if(!Ut&&N(vo,W)){ze(D,t,b);continue}if(ge&&(W=_t(W)),!Vn(g,G,W)){ze(D,t,b);continue}W=lr(g,G,ce,W),W!==je&&pr(t,D,ce,W)&&Jn&&co(e.removed)}}ee(w.afterSanitizeAttributes,t,null),Be(t,i)},et=function(t){let i=null,a=Jt(t);for(ee(w.beforeSanitizeShadowDOM,t,null);i=a.nextNode();)if(ee(w.uponSanitizeShadowNode,i,null),Qt(i,t),en(i,t),Se(i.content)&&et(i.content),z(i)===L.element){let c=de(i);Se(c)&&(tn(c),et(c))}ge&&$n(t),ee(w.afterSanitizeShadowDOM,t,null)},tn=function(t){let i=[{node:t,shadow:null}];for(;i.length>0;){let a=i.pop();if(a.shadow){et(a.shadow);continue}let c=a.node,m=z(c)===L.element,g=le(c);if(g)for(let b=g.length-1;b>=0;--b)i.push({node:g[b],shadow:null});if(m){let b=ue?ue(c):null;if(typeof b=="string"&&O(b)==="template"){let D=c.content;Se(D)&&i.push({node:D,shadow:null})}}if(m){let b=de(c);Se(b)&&i.push({node:null,shadow:b},{node:b,shadow:null})}}};return e.sanitize=function(d){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=null,a=null,c=null,m=null;if(jt=!d,jt&&(d="<!-->"),typeof d!="string"&&!Qe(d)&&(d=Dr(d),typeof d!="string"))throw _e("dirty is not a string, aborting");if(!e.isSupported)return d;Ft?(x=ut,k=ft):$t(t),(w.uponSanitizeElement.length>0||w.uponSanitizeAttribute.length>0)&&(x=K(x)),w.uponSanitizeAttribute.length>0&&(k=K(k)),e.removed=[];let g=Bt&&typeof d!="string"&&Qe(d),b=[],D=Oe;if(g){ir(d);let G=Te(d);if(typeof G=="string"){let je=O(G);if(!x[je]||Je[je])throw Yt(d),_e("root node is forbidden and cannot be sanitized in-place")}if(bt(d))throw Yt(d),_e("root node is clobbered and cannot be sanitized in-place");b=Xt(d),Oe=on()}else if(Qe(d))i=qn("<!---->"),a=i.ownerDocument.importNode(d,!0),a.nodeType===L.element&&a.nodeName==="BODY"||a.nodeName==="HTML"?i=a:i.appendChild(a),tn(i);else{if(!Ne&&!ge&&!Ce&&d.indexOf("<")===-1)return F&&mt?I(d):d;if(i=qn(d),!i)return Ne?null:mt?fe:""}i&&Ht&&Ae(i.firstChild);let ce=g?d:i;try{g&&tn(d);let G=Jt(ce);for(;c=G.nextNode();)Qt(c,ce),en(c,ce),Se(c.content)&&et(c.content);g&&nr(d,b)}catch(G){throw g&&(Yt(d),Gn(d,b)),G}finally{Oe=D}if(g){if(Gn(d,b))throw _e("a node selected for removal could not be safely returned; refusing to sanitize in place");return ge&&Zt(d),d}if(Ne){if(ge&&Zt(i),ht)for(m=It.call(i.ownerDocument);i.firstChild;)m.appendChild(i.firstChild);else m=i;return(k.shadowroot||k.shadowrootmode)&&(m=ct.call(r,m,!0)),m}let B=Ce?i.outerHTML:i.innerHTML;return Ce&&x["!doctype"]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&N(Wr,i.ownerDocument.doctype.name)&&(B="<!DOCTYPE "+i.ownerDocument.doctype.name+`>
3
3
  `+B),ge&&(B=_t(B)),F&&mt?I(B):B},e.setConfig=function(){let d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};$t(d),Ft=!0,ut=x,ft=k},e.clearConfig=function(){He=null,Ft=!1,ut=null,ft=null,F=Ke,fe=""},e.isValidAttribute=function(d,t,i){He||$t({});let a=O(d),c=O(t);return typeof i=="string"&&(Xn(t,i)||!Ut&&N(vo,i))?!1:Vn(a,c,i)},e.addHook=function(d,t){typeof t=="function"&&q(w,d)&&tt(w[d],t)},e.removeHook=function(d,t){if(q(w,d)){if(t!==void 0){let i=Sr(w[d],t);return i===-1?void 0:kr(w[d],i,1)[0]}return co(w[d])}},e.removeHooks=function(d){q(w,d)&&(w[d]=[])},e.removeAllHooks=function(){w=To()},e}var Ro=ko();function y(n,e,o){let r=document.createElement(n);return e&&(r.textContent=e),o&&(r.className=o),r}function j(n){return typeof n!="string"?"":(Do(n).textContent||"").trim()}var Oo=new Set(["A","B","BLOCKQUOTE","BR","CODE","EM","I","LI","OL","P","PRE","STRONG","U","UL"]),Lo=new Set(["H1","H2","H3","H4","H5","H6"]),Co;function Do(n){return Co??(Co=Ro(window)),Co.sanitize(n,{ALLOWED_TAGS:[...Oo,...Lo].map(e=>e.toLowerCase()),ALLOWED_ATTR:["href"],ALLOW_DATA_ATTR:!1,ALLOW_ARIA_ATTR:!1,RETURN_DOM_FRAGMENT:!0})}function Io(n){let e=document.createDocumentFragment();if(typeof n!="string")return e;let o=(r,s)=>{for(let p of Array.from(r.childNodes)){if(p.nodeType===Node.TEXT_NODE){s.appendChild(document.createTextNode(p.textContent||""));continue}if(!(p instanceof Element))continue;let l=p.tagName;if(Lo.has(l)){let f=document.createElement("p"),u=document.createElement("strong");f.appendChild(u),o(p,u),s.appendChild(f)}else if(Oo.has(l)){let f=document.createElement(l.toLowerCase());if(l==="A"){let u=p.getAttribute("href")||"";/^(https?:|mailto:)/i.test(u.trim())&&(f.setAttribute("href",u.trim()),f.setAttribute("target","_blank"),f.setAttribute("rel","noopener noreferrer nofollow"))}o(p,f),s.appendChild(f)}else["SCRIPT","STYLE","TEMPLATE","NOSCRIPT"].includes(l)||o(p,s)}};return o(Do(n),e),e}var mn=4,Mo="http://www.w3.org/2000/svg";function Xr(){let n=document.createElementNS(Mo,"svg");n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("class","chev"),n.setAttribute("aria-hidden","true");let e=document.createElementNS(Mo,"path");return e.setAttribute("d","M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z"),n.append(e),n}function gn(n,e){let o=(n||[]).map(u=>j(u.data_item_name)).filter(Boolean);if(!o.length){let u=(e||[]).map(j).filter(Boolean).join(" \xB7 ");return u?y("div",u,"ps"):null}let r=y("div",void 0,"ps"),s=document.createTextNode("");r.append(s);let p=!1,l=()=>{s.data=(p?o:o.slice(0,mn)).join(", "),f.textContent=p?"show less":`+${o.length-mn} more`},f=y("button",void 0,"more");return f.type="button",f.onclick=()=>{p=!p,l()},l(),o.length>mn&&r.append(f),r}function Po(n,e,o){let r=y("div",void 0,"grp"),s=y("button",void 0,"gh");s.type="button",s.setAttribute("aria-expanded","false");let p=y("span",void 0,"gx");p.append(y("span",n,"gt")),e&&p.append(y("span",e,"gd")),s.append(p,Xr()),s.onclick=()=>{let f=!r.classList.contains("open");r.classList.toggle("open",f),s.setAttribute("aria-expanded",String(f))};let l=y("div",void 0,"gb");return o.forEach(f=>l.append(y("span",f,"gi"))),r.append(s,l),r}function yn(n){if(!j(n))return null;let e=y("div",void 0,"text");return e.append(Io(n)),e}function No({root:n,config:e,state:o,mode:r,demo:s,onClose:p,onSubmit:l,onChange:f}){n.replaceChildren();for(let h of e.purposes)h.required&&(o.choices[String(h.id)]=!0);let u=e.notice||{},_=[...u.purposes||[]],S=new Set(_.flatMap(h=>(h.sub_items||[]).map(T=>T.purpose_id))),H=e.purposes.filter(h=>!S.has(h.id));H.length&&_.push({purpose_reason:_.length?"Other purposes":"Purposes",sub_items:H.map(h=>({purpose_id:h.id,purpose_name:h.name}))});let ke=u.content?.consent_data?.find(h=>h.section_type==="initial-section")?.section_data,Y=y("section",void 0,"shell"),Me=y("div",void 0,"body");if(r!=="panel"){let h=y("button","\xD7","close");h.type="button",h.setAttribute("aria-label","Close consent form"),h.onclick=()=>p(),Y.append(h)}Me.append(y("h1",j(ke?.title)||e.name||"Your consent preferences"));let ne=y("form",void 0,"sec");ne.id="consent-form",ne.style.padding="0",ne.style.gap="16px";let le=new Map,pe=[],de=()=>{le.forEach((h,T)=>{h.forEach(A=>A.checked=!!o.choices[String(T)])}),pe.forEach(h=>{h.box.checked=h.ids.every(T=>!!o.choices[String(T)])}),fe()},Pe=(h,T)=>{if(o.busy){de();return}for(let A of h)e.purposes.find(I=>I.id===A)?.required||(o.choices[String(A)]=T);f(),de()},Z=ke?.sections?.length?[...ke.sections]:[{section_type:"data_process_section",section_data:{section_title:"How we use it"}}];Z.some(h=>h.section_type==="data_process_section")||Z.push({section_type:"data_process_section",section_data:{section_title:"Purposes"}});let ue=u.sections_language_code&&u.sections_language_code!==e.language_code?u.sections_language_code:void 0;for(let h of Z){let T=h.section_data,A=h.section_type;if(A==="link_section")continue;let I=y("div",void 0,"sec");if(A==="generic_section"){let C=yn(T.section_body);C&&I.append(C),ne.append(I);continue}T.section_title&&I.append(y("p",j(T.section_title),"st"));let he=yn(T.section_body);he&&I.append(he);let oe=y("div",void 0,"grps");if(ue&&(oe.lang=ue),A==="data_collect_section")for(let C of u.collected||[]){let V=C.sub_items||[];oe.append(Po(`${j(C.data_category_name)||"Data"} (${V.length})`,j(C.desc),V.map(j)))}else if(A==="data_process_section")for(let C of _){let V=C.sub_items||[],Q=V.map(M=>M.purpose_id),It=Q.length>0&&Q.every(M=>e.purposes.find(re=>re.id===M)?.required);for(let M of Q){let re=!!e.purposes.find(Ee=>Ee.id===M)?.required;o.choices[String(M)]=re||!!o.choices[String(M)]}let at=y("div",void 0,"grp pg"),ct=y("div",void 0,"ph"),w=y("span",void 0,"gx");w.append(y("span",j(C.purpose_reason)||"Purposes","gt")),C.desc&&w.append(y("span",j(C.desc),"gd"));let me=y("input");me.type="checkbox",me.disabled=It,me.setAttribute("aria-label",`Select all: ${C.purpose_reason||"purposes"}`),me.onchange=()=>Pe(Q,me.checked),pe.push({box:me,ids:Q}),ct.append(w,me);let lt=y("div",void 0,"pb");for(let M of V){let re=e.purposes.find(dt=>dt.id===M.purpose_id),Ee=y("div",void 0,"pr"),Xe=y("label",void 0,"prh");Xe.append(y("span",j(M.purpose_name||re?.name),"pn"));let ie=y("input");ie.type="checkbox",ie.name=String(M.purpose_id),ie.disabled=!!re?.required,ie.onchange=()=>Pe([M.purpose_id],ie.checked),le.set(M.purpose_id,[...le.get(M.purpose_id)||[],ie]),Xe.append(ie),Ee.append(Xe),re?.description&&Ee.append(y("p",j(re.description),"ps"));let pt=gn(M.data_items,M.data_categories);pt&&Ee.append(pt),lt.append(Ee)}at.append(ct,y("hr",void 0,"hr"),lt),oe.append(at)}else if(A==="data_share_section"){for(let C of u.shared||[]){let V=y("div",void 0,"sh");V.append(y("span",j(C.purpose_name)||"Sharing","gt"));let Q=gn(C.data_items,C.data_categories);Q&&V.append(Q),oe.append(V)}oe.childElementCount||oe.append(y("p","NIL","st"))}oe.childElementCount&&I.append(oe),ne.append(I)}de();let ve=y("div");ve.id="feedback",ve.setAttribute("aria-live","polite"),ne.append(ve),ne.onsubmit=h=>{h.preventDefault(),l()},Me.append(ne),Y.append(Me);let z=ke?.buttons?.length?ke.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"}}],Te=y("div",void 0,"foot"),Ye=y("div",void 0,"actions"),Ve=h=>{h==="accept-all"?e.purposes.forEach(T=>o.choices[String(T.id)]=!0):h==="reject-all"&&e.purposes.forEach(T=>o.choices[String(T.id)]=T.required),l()},F=[...z.filter(h=>h.button_type!=="accept-necessary"),...z.filter(h=>h.button_type==="accept-necessary")];for(let h of F){if(h.button_enabled===!1)continue;let T=h.button_type==="accept-necessary",A=y("button",void 0,T?"primary":void 0);A.type="button",A.dataset.type=h.button_type,A.textContent=T?h.button_data?.accept_necessary_text||"Accept Necessary":h.button_text||h.button_type,A.onclick=()=>Ve(h.button_type),T&&(A.dataset.necessary=h.button_data?.accept_necessary_text||"Accept Necessary",A.dataset.selected=h.button_data?.accept_selected_text||"Accept Selected"),Ye.append(A)}return Te.append(Ye),Y.append(Te),n.append(Y),de(),(r==="popup"||r==="page")&&Y.addEventListener("keydown",Ke),r!=="panel"&&!s&&(Y.tabIndex=-1,Y.focus({preventScroll:!0})),de;function fe(){let h=n.querySelector("button.primary");if(!h?.dataset.necessary)return;let T=e.purposes.some(A=>!A.required&&o.choices[String(A.id)]);h.textContent=T?h.dataset.selected:h.dataset.necessary}function Ke(h){if(h.key==="Escape"){p();return}if(h.key!=="Tab")return;let T=[...n.querySelectorAll("button:not([disabled]),input:not([disabled]),summary,a[href]")],A=T[0],I=T[T.length-1],he=n.getRootNode().activeElement;h.shiftKey&&(he===A||he===Y)?(h.preventDefault(),I?.focus()):!h.shiftKey&&(he===I||he===Y)&&(h.preventDefault(),A?.focus())}}var _n=`*{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
4
  `;var St;function Uo(n){if("adoptedStyleSheets"in Document.prototype&&"replaceSync"in CSSStyleSheet.prototype){St||(St=new CSSStyleSheet,St.replaceSync(_n)),n.adoptedStyleSheets=[St];return}let e=document.createElement("style");e.textContent=_n,n.append(e)}var te=n=>n!==null&&typeof n=="object"&&!Array.isArray(n),$=n=>n==null||typeof n=="string",be=(n,e)=>n==null||Array.isArray(n)&&n.length<=1e3&&n.every(e),bn=n=>be(n,e=>typeof e=="string"),Fo=n=>be(n,e=>te(e)&&$(e.data_item_name));function xt(n,e){if(!te(n)||!$(n.sections_language_code))return!1;let o=new Set(e.map(l=>l.id)),r=new Set,s=l=>te(l)&&["accept-all","reject-all","accept-necessary"].includes(l.button_type)&&$(l.button_text)&&(l.button_enabled===void 0||typeof l.button_enabled=="boolean")&&(l.button_data==null||te(l.button_data)&&$(l.button_data.accept_necessary_text)&&$(l.button_data.accept_selected_text)),p=(l,f=0)=>{if(!te(l)||typeof l.section_type!="string"||!te(l.section_data))return!1;let u=l.section_data;return f<8&&$(u.title)&&$(u.section_title)&&$(u.section_body)&&be(u.buttons,s)&&be(u.sections,_=>p(_,f+1))};return(n.content==null||te(n.content)&&be(n.content.consent_data,l=>p(l)))&&be(n.purposes,l=>te(l)&&$(l.purpose_reason)&&$(l.desc)&&be(l.sub_items,f=>!te(f)||!o.has(f.purpose_id)||r.has(f.purpose_id)?!1:(r.add(f.purpose_id),$(f.purpose_name)&&Fo(f.data_items)&&bn(f.data_categories))))&&be(n.collected,l=>te(l)&&$(l.data_category_name)&&$(l.desc)&&bn(l.sub_items))&&be(n.shared,l=>te(l)&&$(l.purpose_name)&&Fo(l.data_items)&&bn(l.data_categories))}var kt=class{constructor(e){this.options=e;this.syncChecks=()=>{};this.pendingKey="";this.pendingBody="";this.needsRefresh=!1;let o=e.host.attachShadow({mode:"open"});Uo(o);let r=document.createElement("div");r.className="theme",r.lang=e.config.language_code,this.root=document.createElement("div"),this.root.className="root",this.root.dataset.mode=e.mode,r.append(this.root),o.append(r),this.appearance=io(r),this.appearance.apply(e.appearance),this.state={choices:{...e.choices},busy:!1}}render(){let{config:e,mode:o,demo:r=!1,onClose:s}=this.options;try{if(!xt(e.notice,e.purposes))throw new Error("Invalid notice");this.syncChecks=No({root:this.root,config:e,state:this.state,mode:o,demo:r,onClose:s,onSubmit:()=>this.submit(),onChange:()=>{this.pendingKey=""}})}catch{let p="The consent form could not be displayed. Check the notice configuration and reload.",l=y("section",void 0,"shell"),f=y("p",p,"message error");f.setAttribute("role","alert");let u=y("div",void 0,"body");if(u.append(f),l.append(u),o!=="panel"){let _=y("button","\xD7","close");_.setAttribute("aria-label","Close consent form"),_.type="button",_.onclick=s,l.append(_)}this.root.replaceChildren(l),o!=="panel"&&!r&&l.querySelector("button")?.focus(),this.options.onError(new v(p,"form_error"))}}setAppearance(e){this.appearance.apply(e),this.render()}destroy(){this.appearance.destroy()}message(e,o=!1){let r=this.root.querySelector("#feedback");r&&(r.textContent=e,r.className=o?"message error":"message",r.setAttribute("role",o?"alert":"status"))}async submit(){let{state:e,root:o,options:r}=this;if(e.busy||this.needsRefresh)return;e.busy=!0;let s=[...o.querySelectorAll("input:not(:disabled)")];s.forEach(u=>u.disabled=!0),o.querySelectorAll("button:not(.close)").forEach(u=>u.disabled=!0);let p={config_version:r.config.config_version,language_code:r.config.language_code,answers:r.config.purposes.map(u=>({purpose_id:u.id,given:!!e.choices[String(u.id)]}))},l=JSON.stringify(p);(!this.pendingKey||this.pendingBody!==l)&&(this.pendingKey=Zn(),this.pendingBody=l);let f;try{f=await r.save(p,this.pendingKey),e.choices=f.choices,this.message(r.demo?"Demo complete. No record was saved.":"Your choices are saved.")}catch(u){let _=u instanceof Error?u.message:"Your choices could not be saved. Please retry.";if(this.message(_,!0),u instanceof v&&u.code==="notice_changed"&&r.onRefresh){this.needsRefresh=!0;let S=y("button","Reload consent form");S.type="button",S.onclick=()=>void r.onRefresh().catch(()=>{}),o.querySelector("#feedback")?.append(S)}r.onError(u)}finally{e.busy=!1,o.querySelectorAll("button").forEach(u=>u.disabled=!1),s.forEach(u=>u.disabled=!1),this.syncChecks(),this.needsRefresh&&o.querySelectorAll(".actions button").forEach(u=>{u.disabled=!0})}f&&r.onComplete(f)}};function X(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)}function vn(n,e){if(!X(n))return!1;let o=new Set(e.purposes.map(r=>String(r.id)));return Object.entries(n).every(([r,s])=>o.has(r)&&typeof s=="boolean")}function it(n,e){if(!X(n)||n.app_id!==e||typeof n.name!="string"||typeof n.level_id!="string"||!n.level_id||typeof n.mode!="string"||!["panel","popup","page"].includes(n.mode)||typeof n.config_version!="string"||!/^[a-f0-9]{64}$/i.test(n.config_version)||typeof n.language_code!="string"||!n.language_code||!Array.isArray(n.purposes)||!n.purposes.length||n.purposes.length>300||!X(n.notice)||n.description!==null&&typeof n.description!="string"||n.template_id!==null&&typeof n.template_id!="string"||typeof n.revision!="number"||!Number.isInteger(n.revision)||n.revision<1||typeof n.sdk_version!="string"||!n.sdk_version||n.appearance!==void 0&&!X(n.appearance))return!1;let o=new Set;return n.purposes.every(r=>!X(r)||typeof r.id!="number"||!Number.isSafeInteger(r.id)||r.id<1||o.has(r.id)||typeof r.name!="string"||typeof r.required!="boolean"||!Array.isArray(r.data_items)||typeof r.description!="string"?!1:(o.add(r.id),!0))&&xt(n.notice,n.purposes)}var Rt=class{notePointer(e){this.pointerFocus=e.composedPath().find(o=>o instanceof HTMLElement&&o.matches("button,a[href],input,select,textarea,[tabindex]"))}activate(e){let o=document.activeElement;for(;o?.shadowRoot?.activeElement;)o=o.shadowRoot.activeElement;this.previousFocus=o instanceof HTMLElement&&o!==document.body?o:this.pointerFocus?.isConnected?this.pointerFocus:void 0,this.previousOverflow=document.body.style.overflow,document.body.style.overflow="hidden",e.showModal()}release(){this.previousOverflow!==void 0&&(document.body.style.overflow=this.previousOverflow,this.previousOverflow=void 0),this.previousFocus?.isConnected&&this.previousFocus.focus({preventScroll:!0}),this.previousFocus=void 0,this.pointerFocus=void 0}};function Ho(n,e){let o=document.createElement("dialog");return o.setAttribute("role","dialog"),o.setAttribute("aria-modal","true"),o.setAttribute("aria-label","Consent preferences"),o.style.cssText="position:fixed;inset:0;margin:0;border:0;padding:0;width:100%;height:100%;max-width:none;max-height:none;z-index:2147483000;display:flex;align-items:center;justify-content:center;box-sizing:border-box",e==="page"?(o.style.cssText+=";background:white",n.style.cssText+=";width:100%;height:100%;border-radius:0"):(o.style.cssText+=";background:#10182888;padding:20px",n.style.cssText+=";width:min(560px,100%);height:min(760px,90dvh);border-radius:16px;overflow:hidden;box-shadow:0 20px 70px #0004"),o}var Ct;function zo(n){Ct?.close(),Ct=n}function Bo(n){Ct===n&&(Ct=void 0)}function Tn(n){let e=new URL(n,window.location.href);if(e.username||e.password||e.search||e.hash)throw new Error("Use an Atlas backend base URL without credentials or query parameters.");if(e.protocol!=="https:"&&!(e.protocol==="http:"&&(e.hostname==="localhost"||e.hostname==="127.0.0.1"||e.hostname==="[::1]"||e.hostname.endsWith(".localhost"))))throw new Error("Atlas Consent requires HTTPS. HTTP is only supported for localhost.");return e.href.replace(/\/$/,"")}var jo="/consent-sdk/assets/";function En(n){let e=new URL(n,window.location.href).href,o=e.indexOf(jo);if(o<1)throw new Error(`Atlas Consent could not find "${jo}" in the script address. Load the SDK from the URL shown in Atlas, or use AtlasConsent.create({apiBaseUrl}).`);return Tn(e.slice(0,o))}function wn(n){if(!n)return;let e;try{e=JSON.parse(n)}catch{return}if(!e||typeof e.token!="string"||!e.token||typeof e.expires!="string"||!Number.isFinite(Date.parse(e.expires)))return;let o=e.result;return{token:e.token,expires:e.expires,result:o&&typeof o=="object"&&typeof o.ref_id=="string"?o:void 0}}function Ot(n){try{return localStorage.getItem(n)}catch{return}}function Go(n,e){try{return e?localStorage.setItem(n,JSON.stringify(e)):localStorage.removeItem(n),!0}catch{try{localStorage.removeItem(n)}catch{}return!1}}var Lt="atlas-consent:storage";async function Wo(n,e,o,r="Consent is temporarily unavailable."){if(e.aborted)throw new v("This consent instance was destroyed.","destroyed");let s=new AbortController,p=()=>s.abort();e.addEventListener("abort",p);let l=setTimeout(p,15e3),f,u;try{f=await fetch(n,{...o,signal:s.signal,credentials:"omit",headers:{"Content-Type":"application/json",...o?.headers}}),u=await f.json()}catch(_){throw e.aborted?new v("This consent instance was destroyed.","destroyed"):s.signal.aborted?new v("Atlas took too long to respond.","request_timeout"):_ instanceof SyntaxError||_ instanceof DOMException&&_.name==="SyntaxError"?new v(f?.ok?"Atlas returned an invalid response.":r,f&&!f.ok?"request_failed":"invalid_response",f?.status):new v("Atlas could not be reached.","network_error",f?.status)}finally{clearTimeout(l),e.removeEventListener("abort",p)}if(!f.ok||!X(u)||u.data===void 0||u.data===null){let _=X(u)&&X(u.error)?u.error:{};throw new v(typeof _.message=="string"&&_.message?_.message:r,typeof _.code=="string"?_.code:typeof _.type=="string"?_.type:"request_failed",f.status)}return u.data}var Zr=60*864e5,$e=n=>({ref_id:n.ref_id,app_id:n.app_id,level_id:n.level_id,config_version:n.config_version,choices:{...n.choices}}),st=class{constructor(e){this.options=e;this.controller=new AbortController;this.preferenceSnapshot="null";this.accessibility=new Rt;this.destroyed=!1;this.generation=0;this.reportedErrors=new WeakSet;this.storageChanged=e=>{(e.key===null||e.key===this.key)&&this.syncSaved()};this.documentStorageChanged=e=>{e.detail===this.key&&this.syncSaved()};this.keydown=e=>{e.key==="Escape"&&this.overlay&&this.close()};this.pointerdown=e=>this.accessibility.notePointer(e);if(!/^ac_app_[A-Za-z0-9_-]{10,40}$/.test(e.appId))throw new v("Use the app ID from Atlas Integrations.","invalid_app");let o=e.apiBaseUrl??Tt;if(!o)throw new v("Set apiBaseUrl or use an SDK build with a configured backend URL.","invalid_api_base_url");try{this.api=Tn(o)}catch(s){throw new v(s.message,"invalid_api_base_url")}this.key=`atlas-consent:v2:${encodeURIComponent(this.api)}:${e.appId}`,this.stored=Ot(this.key),this.saved=wn(this.stored??null),window.addEventListener("keydown",this.keydown),window.addEventListener("pointerdown",this.pointerdown,!0),window.addEventListener("storage",this.storageChanged),window.addEventListener(Lt,this.documentStorageChanged);let r=this.generation;this.ready=this.load().then(s=>{if(this.destroyed)throw new v("This consent instance was destroyed.","destroyed");return this.config=s,this.notifyPreference(),this.renewIfEnding(),r!==this.generation||(e.target?this.mount(e.target).catch(()=>{}):(e.mode||s.mode)==="popup"&&e.autoShow!==!1&&!this.hasChoice()&&this.open().catch(()=>{})),s}),this.ready.catch(s=>{this.loadFailure=s,this.fail(s)})}async load(){let e=await this.request(`/config?language_code=${encodeURIComponent(this.options.language||"en")}`);if(!it(e,this.options.appId))throw new v("Atlas returned an invalid configuration.","invalid_response");return e}request(e,o,r){return this.assertAlive(),Wo(`${this.api}/consent-sdk/v1/apps/${this.options.appId}${e}`,this.controller.signal,o,r)}persist(){let e=this.stored,o=Go(this.key,this.saved),r=o?this.saved?JSON.stringify(this.saved):null:Ot(this.key);r!==void 0&&(this.stored=r),this.notifyPreference(),(o||e!==this.stored)&&window.dispatchEvent(new CustomEvent(Lt,{detail:this.key}))}syncSaved(){if(this.destroyed)return;let e=Ot(this.key);if(e===void 0||e===this.stored)return;let o=wn(e),r=o?.token!==this.saved?.token||JSON.stringify(o?.result)!==JSON.stringify(this.saved?.result);this.stored=e,this.saved=o,r&&this.form&&this.close(!0),this.notifyPreference()}notifyPreference(){let e=this.hasChoice()?$e(this.saved.result):null,o=JSON.stringify(e);if(o!==this.preferenceSnapshot){this.preferenceSnapshot=o;try{this.options.onPreferenceChange?.(e?$e(e):null)}catch(r){queueMicrotask(()=>{throw r})}window.dispatchEvent(new CustomEvent("atlas-consent:change",{detail:{appId:this.options.appId,preference:e?$e(e):null}}))}}alive(){return!!this.saved&&Date.parse(this.saved.expires)>Date.now()}hasChoice(){return!!this.config&&this.alive()&&Et(this.saved.result,this.config)}getPreference(){return this.syncSaved(),this.notifyPreference(),this.hasChoice()?$e(this.saved.result):null}getClaim(){return this.syncSaved(),this.alive()&&this.saved.result?.app_id===this.options.appId?{app_id:this.options.appId,ref_id:this.saved.result.ref_id,claim_token:this.saved.token}:null}async session(e){this.syncSaved();let o=this.stored,r=this.saved;if(this.alive())try{let p=await this.request("/session?language_code="+encodeURIComponent(this.options.language||"en"),{headers:{Authorization:`Bearer ${r.token}`}});if(e!==this.generation)return{};if(this.syncSaved(),e!==this.generation)return{};if(o!==this.stored)return this.session(e);if(!X(p)||!it(p.config,this.options.appId)||!vn(p.choices,p.config))throw new v("Atlas returned an invalid session.","invalid_response");return this.reconcileSession(p,r),typeof p.expires_at=="string"&&Number.isFinite(Date.parse(p.expires_at))&&(r.expires=p.expires_at),this.persist(),p.choices}catch(p){if(e!==this.generation)return{};if(!(p instanceof v)||p.status!==401)throw p;this.saved=void 0,this.persist(),o=this.stored}let s=await this.request("/sessions",{method:"POST",body:JSON.stringify({language_code:this.options.language||"en"})});if(e!==this.generation)return{};if(this.syncSaved(),e!==this.generation)return{};if(o!==this.stored)return this.session(e);if(!X(s)||typeof s.session_token!="string"||!s.session_token||typeof s.expires_at!="string"||!Number.isFinite(Date.parse(s.expires_at))||!it(s.config,this.options.appId))throw new v("Atlas returned an invalid session.","invalid_response");return this.config=s.config,this.saved={token:s.session_token,expires:s.expires_at},this.persist(),{}}reconcileSession(e,o){let r=e.config,s=o.result;if(s?.config_version===r.config_version){let p={...s,choices:e.choices};o.result=Et(p,r)&&e.ref_id===s.ref_id?p:void 0}this.config=r}renewIfEnding(){if(!this.alive()||Date.parse(this.saved.expires)-Date.now()>Zr)return;let e=this.saved,o=this.stored;this.request("/session?language_code="+encodeURIComponent(this.options.language||"en"),{headers:{Authorization:`Bearer ${e.token}`}}).then(r=>{this.syncSaved(),this.saved===e&&this.stored===o&&X(r)&&it(r.config,this.options.appId)&&vn(r.choices,r.config)&&typeof r.expires_at=="string"&&Number.isFinite(Date.parse(r.expires_at))&&(this.reconcileSession(r,e),e.expires=r.expires_at,this.persist())}).catch(()=>{})}async save(e,o,r,s,p){if(this.syncSaved(),p!==this.generation||this.saved?.token!==s)throw new v("This consent form was closed. Open it again.","form_closed");let l=await this.request("/decisions",{method:"POST",headers:{Authorization:`Bearer ${s}`,"Idempotency-Key":o},body:JSON.stringify({...e,sdk_version:Ge})},"Your choices could not be saved. Please retry.");if(!Et(l,r))throw new v("Atlas returned an invalid consent result. Please retry.","invalid_response");let f=l.expires_at;return p===this.generation&&this.saved?.token===s&&typeof f=="string"&&Number.isFinite(Date.parse(f))&&(this.saved.expires=f),$e(l)}recordView(){this.request("/events",{method:"POST",headers:{Authorization:`Bearer ${this.saved?.token}`},body:JSON.stringify({event:"viewed"})}).catch(()=>{})}async reported(e){try{await e()}catch(o){throw o!==this.loadFailure&&this.fail(o),o}}mount(e){return this.reported(()=>this.mountForm(e))}async mountForm(e){let o=this.generation;if(await this.ready,this.assertAlive(),o!==this.generation)return;let r=typeof e=="string"?document.querySelector(e):e;if(!(r instanceof HTMLElement))throw new v("The consent container was not found.","missing_container");return this.startForm(this.options.mode||this.config?.mode||"panel",r)}open(){return this.reported(async()=>{let e=this.generation;if(await this.ready,this.assertAlive(),e!==this.generation)return;if(this.host&&!this.overlay){this.host.scrollIntoView({block:"nearest"}),this.host.focus({preventScroll:!0});return}let o=this.options.mode||this.config.mode;return this.startForm(o==="panel"?"popup":o)})}refresh(){let e=this.mountTarget;return this.close(!0),e?this.mount(e):this.open()}startForm(e,o){if(this.form)return Promise.resolve();if(this.launchTask)return this.launchTask;let r=this.generation,s=Promise.resolve().then(()=>this.insertForm(e,o,r));this.launchTask=s;let p=()=>{this.launchTask===s&&(this.launchTask=void 0)};return s.then(p,p),s}async insertForm(e,o,r){try{if(this.assertAlive(),r!==this.generation)return;let s=await this.session(r);if(this.assertAlive(),r!==this.generation)return;o||zo(this);let p=this.createForm(e,s);if(o)this.mountTarget=o,this.host.tabIndex=-1,this.host.setAttribute("role","region"),this.host.setAttribute("aria-label","Consent preferences"),o.append(this.host);else{this.overlay=Ho(this.host,e);let l=this.overlay;l.addEventListener("cancel",f=>{f.preventDefault(),this.overlay===l&&this.close()}),l.addEventListener("close",()=>{this.overlay===l&&this.close()}),this.overlay.append(this.host),document.body.append(this.overlay),this.accessibility.activate(this.overlay)}p.render(),this.recordView()}catch(s){if(this.destroyed)throw s;if(r!==this.generation)return;throw this.close(!0),s}}createForm(e,o){let r=this.generation,s=this.saved.token,p=this.config,l=document.createElement("atlas-consent-form");return l.style.cssText="display:block;width:100%;height:650px",this.host=l,this.form=new kt({host:l,config:this.config,choices:o,mode:e,appearance:{...this.config?.appearance,...this.options.appearance},save:(f,u)=>this.save(f,u,p,s,r),onComplete:f=>{this.syncSaved(),r===this.generation&&this.saved?.token===s&&this.complete(f)},onError:f=>{r===this.generation&&this.fail(f)},onClose:()=>{r===this.generation&&this.close()},onRefresh:()=>r===this.generation?this.refresh():Promise.resolve()}),this.form}complete(e){let o=this.overlay,r={app_id:e.app_id,ref_id:e.ref_id,claim_token:this.saved.token};this.saved.result=$e(e),this.persist();try{this.options.onComplete?.(e,r)}finally{o&&this.overlay===o&&this.close()}}assertAlive(){if(this.destroyed)throw new v("This consent instance was destroyed.","destroyed")}fail(e){if(this.destroyed||e instanceof v&&e.code==="destroyed")return;if(e&&typeof e=="object"){if(this.reportedErrors.has(e))return;this.reportedErrors.add(e)}let o=e instanceof v?e:new v(e instanceof Error?e.message:"Consent is unavailable.","unexpected_error");try{this.options.onError?.(o)}catch(r){queueMicrotask(()=>{throw r})}window.dispatchEvent(new CustomEvent("atlas-consent:error",{detail:{appId:this.options.appId,error:o}}))}close(e=!1){this.generation+=1,this.launchTask=void 0,Bo(this);let o=!!(this.form||this.overlay);this.form?.destroy(),this.form=void 0,this.host?.remove(),this.host=void 0,this.mountTarget=void 0,this.overlay?.close(),this.overlay?.remove(),this.overlay=void 0,this.accessibility.release(),o&&!e&&this.options.onClose?.()}destroy(){this.destroyed=!0,this.controller.abort(),this.close(!0),window.removeEventListener("keydown",this.keydown),window.removeEventListener("pointerdown",this.pointerdown,!0),window.removeEventListener("storage",this.storageChanged),window.removeEventListener(Lt,this.documentStorageChanged)}};function An(n){return new st(n)}var Dt=document.currentScript;if(Dt?.dataset.atlasApp){let n=Dt.dataset,e=n.atlasApp,o=p=>{let l=p instanceof v?p:new v(p instanceof Error?p.message:"Atlas Consent could not start.","unexpected_error");console.error(l.message),window.dispatchEvent(new CustomEvent("atlas-consent:error",{detail:{appId:e,error:l}}))},r=()=>{try{return En(Dt.src)}catch{return""}},s=()=>{let p;try{let l;if(n.appearance)try{l=JSON.parse(n.appearance)}catch{throw new v("data-appearance must be valid JSON.","invalid_appearance")}p=An({appId:e,apiBaseUrl:n.apiBaseUrl||r()||Tt||En(Dt.src),mode:n.mode,target:n.target,language:n.language||"en",autoShow:n.autoShow===void 0?void 0:n.autoShow!=="false",appearance:l})}catch(l){o(l);return}p.ready.then(l=>{window.dispatchEvent(new CustomEvent("atlas-consent:ready",{detail:{client:p,version:Ge}})),!n.target&&(n.mode||l.mode)==="panel"&&o(new v('This integration shows a panel. Add data-target="#element-id" to the script tag, or call client.mount().',"missing_container"))},()=>{})};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",s,{once:!0}):s()}return gr(Qr);})();
@@ -1,11 +1,11 @@
1
1
  {
2
- "version": "0.0.1-beta.1",
2
+ "version": "1.0.0",
3
3
  "files": {
4
- "atlas-consent.js": "Ng2RRyUYxGc/gmaVPvaC+76GJ6MuSj2hqqPP0rqYqXK9igHkBPGmBszOuxAHZRcf",
5
- "atlas-consent.esm.js": "USGNqkKKWtWUN6NC/iZ/gDB16rKFY9vaVMLEbvFUHYqw5cBanPeWPKLVrNPEnlfE",
4
+ "atlas-consent.js": "1gbGCvUMfC0ainfkRXZbd5RI0y4JxTIq7EVsFKeI3d7t4X+6AH/W8dL90BxXeMnC",
5
+ "atlas-consent.esm.js": "wJJZ22AdV+n/zMfShp14mvapLmaWEiNIdrsXywzxu0SWCYMYfTQsdvEYXQ7bSpY1",
6
6
  "atlas-consent-ui.js": "kiHnJlrweigYAue/aKZvCgt+nGoYSw5VAMSa+ZkVYiEonif/vHuBn54RTTSoEu/O",
7
7
  "ui.html": "gkXwlOaVjJxvFsh06VvDdbrhZlwvda+y/UOgJpqeNzn8F8j5kGIN7HiUh/PtudLT"
8
8
  },
9
- "environment": "staging",
10
- "api_base_url": "https://qa.dashboard.atlaskyc.com/v3/api"
9
+ "environment": "production",
10
+ "api_base_url": "https://play.dashboard.atlaskyc.com/v3/api"
11
11
  }
@@ -1,3 +1,3 @@
1
- export declare const VERSION = "0.0.1-beta.1";
1
+ export declare const VERSION = "1.0.0";
2
2
  export declare const PROTOCOL = "atlas-consent:1";
3
3
  export declare const REQUEST_TIMEOUT_MS = 15000;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlasprivacy/consent-sdk",
3
- "version": "0.0.1-beta.1",
3
+ "version": "1.0.0",
4
4
  "description": "Atlas consent UI and browser SDK",
5
5
  "type": "module",
6
6
  "main": "dist/atlas-consent.esm.js",
@@ -10,8 +10,7 @@
10
10
  "dist",
11
11
  "README.md",
12
12
  "LICENSE",
13
- "CHANGELOG.md",
14
- "CONTRIBUTING.md"
13
+ "CHANGELOG.md"
15
14
  ],
16
15
  "sideEffects": [
17
16
  "./dist/atlas-consent.js"
@@ -60,5 +59,5 @@
60
59
  "overrides": {
61
60
  "minimatch": "11.0.1"
62
61
  },
63
- "gitHead": "2bb51150d7f7fce35e168c8c67807622df580dbc"
62
+ "gitHead": "e7662a3670dffef99077952b1ddd538722d05d06"
64
63
  }
package/CONTRIBUTING.md DELETED
@@ -1,85 +0,0 @@
1
- # Contributing
2
-
3
- Use Node.js 22.13 or later in the Node.js 22 series. `.nvmrc` selects Node.js 22. Commit the npm lock file with dependency changes.
4
-
5
- ## Local checks
6
-
7
- ```sh
8
- npm ci
9
- npm run check
10
- npx playwright install chromium firefox webkit
11
- npm run test:browser
12
- ```
13
-
14
- `check` runs formatting, lint, unit and integration tests, TypeScript checks, a clean build, and an installed-package consumer check. The browser suite uses a local API fixture and the built SDK. `src/ui/index.ts` builds `ui.html` for the Atlas dashboard preview only. The adjacent demo check runs only when that demo checkout is present.
15
-
16
- Use `npm run format` to format files. Use `npm run lint:fix` for supported lint fixes. Review the resulting changes before commit.
17
-
18
- ## Code changes
19
-
20
- - Put lifecycle and API code in `src/client/`, protocol helpers in `src/shared/`, and form code in `src/ui/`.
21
- - Keep public exports in `src/index.ts`. Keep script startup in `src/browser.ts`.
22
- - Use explicit types at public and network boundaries. Use `import type` for type imports.
23
- - Use `.js` extensions for relative TypeScript imports. The compiler resolves them to source files and preserves valid ESM declaration imports.
24
- - Keep shared code independent of the client and form. The client may import the form. The form must not import the client: it receives its API calls as callbacks. Lint checks these boundaries. Integration tests check dependency cycles.
25
- - Use one operation per statement. Use names that explain the value or action. Add comments for constraints and security decisions.
26
- - Add regression tests for behavior changes. Keep unit tests independent of a running backend. Use browser tests for focus, DOM, messaging, and theme behavior.
27
- - Do not put organization credentials, browser session tokens, or local environment files in source control.
28
-
29
- ## Compatibility and releases
30
-
31
- Keep the `create`, `ConsentClient`, `ConsentError`, and `VERSION` exports stable in a compatible release. Keep public type names and built asset filenames stable. The package consumer test checks exports and declaration resolution from an installed archive.
32
-
33
- `package.json` and `src/shared/constants.ts` hold `X.Y.Z`, the next release; CI adds the pre-release suffix (see below). To start the next release, set both, the lock file, README examples, and the backend version constant to the new `X.Y.Z` together. Run the checks before syncing assets. Use a new version directory; preserve assets used by existing integrations.
34
-
35
- Backend asset sync stages the complete build before publishing it. An identical repeat sync is allowed; different contents at an existing version are rejected. Bump the SDK version for changed release assets rather than overwriting URLs used by installed integrations.
36
-
37
- ## Dependency maintenance
38
-
39
- DOMPurify is bundled into the SDK for safe notice parsing and Trusted Types compatibility. It is a build dependency; installed SDK consumers need no separate runtime package. The build preserves license notices and includes `dist/DOMPurify-LICENSE.txt`. Keep the sanitizer current and run the hostile-markup and enforcing-CSP browser tests when changing it. Formatting and lint tools are development dependencies.
40
-
41
- CI runs `npm audit --audit-level=moderate` as a separate release gate. Browser checks run the current Chromium, Firefox, and WebKit engines, including mobile Chromium and WebKit viewport projects. Use `npm run test:browser -- --project=chromium` for a focused local run.
42
-
43
- The `minimatch` override pins `11.0.1` for the lint toolchain. Earlier releases have a [pattern amplification advisory](https://github.com/advisories/GHSA-g3hv-75wg-m249). Version 11 changes internal APIs, as described in its [changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md). The lint checks exercise the current toolchain with this override. Recheck and remove the override when upstream dependencies use a patched version directly. Run `npm audit` and all checks when changing dependencies.
44
-
45
- ## Branches and releases
46
-
47
- ```text
48
- feature ──MR──▶ dev ──promote──▶ staging ──promote──▶ shipping ──▶ npm + tag vVERSION
49
- ▲ ▲ │
50
- └──── back-merge ──┴──── back-merge ◀───┘ (after every release)
51
- ```
52
-
53
- Merge requests go into `dev` only. Promotions are fast-forwards that only Maintainers can run:
54
-
55
- 1. On a `dev` pipeline, press **promote:staging**. It starts a staging pipeline that fast-forwards `staging` to that commit; the normal `staging` pipeline then builds and publishes the release candidate.
56
- 2. On the `staging` pipeline, once it has published, press **promote:shipping**. `shipping` moves to that commit, which must be staging's latest.
57
- 3. The `shipping` pipeline rebuilds with `PRODUCTION_URL`, publishes to npm and the GitLab registry, tags `vVERSION`, creates the GitLab release, and runs **back-merge**.
58
-
59
- A hotfix can be pushed to `shipping` directly; back-merge brings it into `staging` and `dev`. Review pipeline changes before promoting: `git diff origin/staging...origin/dev -- .gitlab-ci.yml scripts/ci`.
60
-
61
- The `version` job chooses each pipeline's version (`scripts/lib/release-version.mjs`) and every later job stamps it into the package (`scripts/ci/stamp-version.mjs`):
62
-
63
- - `dev` and other branches build `X.Y.Z-dev.<pipeline>`; `staging` builds `X.Y.Z-rc.<pipeline>`.
64
- - `shipping` builds `X.Y.Z-beta.N` while `RELEASE_CHANNEL` in `.gitlab-ci.yml` is `beta`, where `N` is one more than the highest beta on npm. Nobody bumps `N` by hand.
65
- - For the final release, set `RELEASE_CHANNEL: final` in a commit and promote it. `shipping` then publishes `X.Y.Z` on the npm `latest` tag. After that, set `package.json` to the next version (and `RELEASE_CHANNEL` back to `beta` for its betas).
66
- - A shipping pipeline for a commit npm already holds keeps that version, so retrying it publishes nothing twice. A version number on npm can never be reused, even after unpublishing.
67
-
68
- ### CI/CD variables
69
-
70
- | Variable | Value | Settings |
71
- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------ |
72
- | `DEV_URL`, `STAGING_URL`, `PRODUCTION_URL` | Backend API base URLs (see README) | Environment scope `*` |
73
- | `NPM_TOKEN` | npm granular access token, read and write, for `@atlasprivacy/consent-sdk` (the whole `@atlasprivacy` scope for the first publish), with an expiry and **Bypass two-factor authentication** ticked; the npm account requires 2FA for writes, so a token without it fails with `EOTP` | Masked, protected, environment scope `npm` |
74
- | `PROMOTE_TOKEN` | Project access token, Maintainer role, `write_repository` scope | Masked, protected, environment scope `promotion` |
75
-
76
- ### Project settings
77
-
78
- - **Protected branches:** `dev`, `staging` and `shipping`; merge and push: Maintainers.
79
- - **Protected tags:** `v*`, create: Maintainers. Release tags then come only from the `release` job.
80
- - **Merge request pipelines:** "Allow merge request pipelines to access protected variables and runners" off.
81
- - **npm:** on the package's settings page, set publishing access to "Require two-factor authentication or a granular access token". Give the org's `developers` team read-only access so only the token and owners can publish.
82
-
83
- ## Merge requests
84
-
85
- Describe the problem, the final change, and the checks you ran. State changes to public behavior or deployment requirements. Keep unrelated edits in a separate merge request. The GitLab pipeline publishes packages as described in [Branches and releases](#branches-and-releases); it does not deploy the backend.