@nysds/nys-unavbundle 1.21.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nys-unavbundle.js","sources":["../../../node_modules/@lit/reactive-element/css-tag.js","../../../node_modules/@lit/reactive-element/reactive-element.js","../../../node_modules/lit-html/lit-html.js","../../../node_modules/lit-element/lit-element.js","../../../node_modules/@lit/reactive-element/decorators/property.js","../../../node_modules/@lit/reactive-element/decorators/state.js","../../../node_modules/@lit/reactive-element/decorators/base.js","../../../node_modules/@lit/reactive-element/decorators/query.js","../../internals/src/id.ts","../../internals/src/identified-mixin.ts","../../internals/src/reflects-aria-mixin.ts","../../internals/src/form-control-mixin.ts","../../../node_modules/lit-html/directives/if-defined.js","../../nys-icon/src/icon-library-registry.ts","../../../node_modules/dompurify/dist/purify.es.mjs","../../nys-icon/src/icon-cache.ts","../../nys-icon/src/nys-icon.ts","../../nys-button/src/nys-button.ts","../../nys-tooltip/src/nys-tooltip.ts","../../nys-label/src/nys-label.ts","../../nys-errormessage/src/nys-errormessage.ts","../../nys-textinput/src/nys-textinput.ts","../../nys-alert/src/nys-alert.ts","../../nys-unavheader/src/nys-unav.logo.ts","../../nys-unavheader/src/nys-unavheader.ts","../../nys-unavfooter/src/nys-unav.logo.ts","../../nys-unavfooter/src/nys-unavfooter.ts","../src/index.ts","../../nys-icon/src/nys-icon.library.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.3\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,c)=>(c.configurable=!0,c.enumerable=!0,Reflect.decorate&&\"object\"!=typeof t&&Object.defineProperty(e,t,c),c);export{e as desc};\n//# sourceMappingURL=base.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e(e,r){return(n,s,i)=>{const o=t=>t.renderRoot?.querySelector(e)??null;if(r){const{get:e,set:r}=\"object\"==typeof s?n:i??(()=>{const t=Symbol();return{get(){return this[t]},set(e){this[t]=e}}})();return t(n,s,{get(){let t=e.call(this);return void 0===t&&(t=o(this),(null!==t||this.hasUpdated)&&r.call(this,t)),t}})}return t(n,s,{get(){return o(this)}})}}export{e as query};\n//# sourceMappingURL=query.js.map\n","let counter = 0;\n\n/**\n * Generate a stable, collision-resistant id for a component instance.\n *\n * The format intentionally matches the legacy per-component pattern\n * (`${prefix}-${Date.now()}-${n}`) so existing tests/consumers that assert on\n * id shape continue to pass.\n */\nexport function generateId(prefix: string): string {\n return `${prefix}-${Date.now()}-${counter++}`;\n}\n","import { LitElement } from \"lit\";\nimport { generateId } from \"./id\";\n\nexport type Constructor<T = object> = new (...args: any[]) => T;\n\n/** Surface added by {@link IdentifiedMixin}. */\nexport declare class IdentifiedInterface {\n /** Prefix used for auto-generated ids. Defaults to the element's tag name. */\n protected get idPrefix(): string;\n /** Assign an auto-generated id if the consumer did not supply one. */\n protected ensureId(): void;\n}\n\n/**\n * Minimal mixin that gives an element stable auto-generated ids. This is the\n * lightweight base for presentational components that need consistent id\n * generation but do NOT reflect a host-level role/state via ElementInternals\n * (so they don't pay for that machinery). Components that DO need host\n * role/state should use {@link ReflectsAriaMixin} instead.\n */\nexport const IdentifiedMixin = <T extends Constructor<LitElement>>(Base: T) => {\n class Identified extends Base {\n protected get idPrefix(): string {\n return this.localName || \"nys-element\";\n }\n\n protected ensureId(): void {\n if (!this.id) this.id = generateId(this.idPrefix);\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.ensureId();\n }\n }\n return Identified as unknown as Constructor<IdentifiedInterface> & T;\n};\n\n/**\n * Concrete base class: `extends NysElement` for id-only presentational\n * components. Declared as a pure const so bundlers tree-shake it (and the mixin\n * chain it would pull) out of any package that doesn't use it.\n */\nexport const NysElement = /*@__PURE__*/ IdentifiedMixin(LitElement);\n","import { LitElement } from \"lit\";\nimport {\n IdentifiedMixin,\n type Constructor,\n type IdentifiedInterface,\n} from \"./identified-mixin\";\n\nexport type { Constructor };\n\n/**\n * Public/protected surface added by {@link ReflectsAriaMixin}, on top of\n * {@link IdentifiedInterface}. Declared separately so consuming components and\n * the composed FormControl layer get correct types.\n */\nexport declare class ReflectsAriaInterface extends IdentifiedInterface {\n /** Lazily-attached ElementInternals, or null in non-DOM (SSR) contexts. */\n protected readonly internals: ElementInternals | null;\n /** Default implicit role applied to the host via internals. Override per component. */\n protected get defaultRole(): string | null;\n /** Apply the default role (and any static semantics) to the host. */\n protected reflectDefaultSemantics(): void;\n /** Set a host-level ARIA state property via internals, with attribute fallback. */\n protected setHostAria(name: string, value: string | null): void;\n}\n\n/**\n * Mixin that adds ElementInternals-based accessibility semantics on top of\n * {@link IdentifiedMixin}: a default host role and host-level ARIA state\n * reflection. Use for presentational components that the host element itself\n * should expose a role/state for (e.g. a separator). Components that only need\n * id generation should use {@link IdentifiedMixin} / NysElement instead. For\n * name/description association, import the `associateHost` / `associateControl`\n * helpers directly (they tree-shake out of components that don't use them).\n */\nexport const ReflectsAriaMixin = <T extends Constructor<LitElement>>(\n Base: T,\n) => {\n class ReflectsAria extends IdentifiedMixin(Base) {\n private __internals: ElementInternals | null = null;\n\n protected get internals(): ElementInternals | null {\n if (this.__internals) return this.__internals;\n // Guard for SSR / environments without attachInternals.\n if (typeof this.attachInternals === \"function\") {\n try {\n this.__internals = this.attachInternals();\n } catch {\n this.__internals = null;\n }\n }\n return this.__internals;\n }\n\n protected get defaultRole(): string | null {\n return null;\n }\n\n protected setHostAria(name: string, value: string | null): void {\n const rec = this.internals as unknown as Record<string, unknown> | null;\n if (rec && name in rec) {\n rec[name] = value;\n return;\n }\n // Fallback: reflect onto a host attribute.\n const attr = ariaAttr(name);\n if (value === null) this.removeAttribute(attr);\n else this.setAttribute(attr, value);\n }\n\n protected reflectDefaultSemantics(): void {\n const role = this.defaultRole;\n if (role) this.setHostAria(\"role\", role);\n }\n\n connectedCallback(): void {\n super.connectedCallback(); // IdentifiedMixin assigns the auto id\n this.reflectDefaultSemantics();\n }\n }\n return ReflectsAria as unknown as Constructor<ReflectsAriaInterface> & T;\n};\n\n// Map an ARIAMixin property name (e.g. \"ariaRequired\", \"role\") to its host\n// attribute equivalent (\"aria-required\", \"role\").\nfunction ariaAttr(name: string): string {\n if (name === \"role\") return \"role\";\n const stripped = name.replace(/^aria/, \"\");\n return \"aria-\" + stripped.charAt(0).toLowerCase() + stripped.slice(1);\n}\n\n/**\n * Concrete base class for components that reflect a host role/state. Declared as\n * a pure const so bundlers tree-shake it out of packages that don't use it.\n */\nexport const NysReflectsAriaElement =\n /*@__PURE__*/ ReflectsAriaMixin(LitElement);\n","import { LitElement } from \"lit\";\nimport {\n ReflectsAriaMixin,\n type Constructor,\n type ReflectsAriaInterface,\n} from \"./reflects-aria-mixin\";\nimport type { FormValue } from \"./types\";\n\n/** Surface added by {@link FormControlMixin}, on top of {@link ReflectsAriaInterface}. */\nexport declare class FormControlInterface extends ReflectsAriaInterface {\n /** Form-associated custom element opt-in. */\n static formAssociated: boolean;\n /** Push the current value into the owning form. */\n protected setFormValue(value: FormValue): void;\n /** Map a set of validity flags to `setValidity` + host `aria-invalid`. */\n protected setValidityFromState(\n flags: ValidityStateFlags,\n message?: string,\n anchor?: HTMLElement,\n ): void;\n /** Clear validity and reset `aria-invalid`. */\n protected clearValidity(): void;\n checkValidity(): boolean;\n reportValidity(): boolean;\n formResetCallback(): void;\n}\n\n/**\n * Mixin that makes an element a form-associated custom element with centralized\n * value, validity, and ARIA-association plumbing. Composes\n * {@link ReflectsAriaMixin}, so it also provides role/state reflection and id\n * generation. Use for form controls.\n *\n * Note: form controls should still declare their own\n * `static shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true }`\n * — the mixin intentionally does not set it, to avoid changing focus behavior on\n * non-form elements.\n */\nexport const FormControlMixin = <T extends Constructor<LitElement>>(\n Base: T,\n) => {\n class FormControl extends ReflectsAriaMixin(Base) {\n static formAssociated = true;\n\n protected setFormValue(value: FormValue): void {\n this.internals?.setFormValue(value ?? null);\n }\n\n protected setValidityFromState(\n flags: ValidityStateFlags,\n message?: string,\n anchor?: HTMLElement,\n ): void {\n const internals = this.internals;\n if (!internals) return;\n const invalid = Object.values(flags).some(Boolean);\n if (invalid) {\n internals.setValidity(flags, message ?? \"Invalid value\", anchor);\n } else {\n internals.setValidity({});\n }\n this.setHostAria(\"ariaInvalid\", invalid ? \"true\" : \"false\");\n }\n\n protected clearValidity(): void {\n this.internals?.setValidity({});\n this.setHostAria(\"ariaInvalid\", \"false\");\n }\n\n checkValidity(): boolean {\n return this.internals?.checkValidity() ?? true;\n }\n\n reportValidity(): boolean {\n return this.internals?.reportValidity() ?? true;\n }\n\n formResetCallback(): void {\n this.clearValidity();\n }\n }\n return FormControl as unknown as Constructor<FormControlInterface> & T;\n};\n\n/**\n * Concrete base class for form controls. Declared as a pure const so bundlers\n * tree-shake it out of packages that don't use it.\n */\nexport const NysFormControlElement = /*@__PURE__*/ FormControlMixin(LitElement);\n","import{nothing as t}from\"../lit-html.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o=o=>o??t;export{o as ifDefined};\n//# sourceMappingURL=if-defined.js.map\n","/**\n * Icon Library Registry\n *\n * Global registry for icon libraries. The \"default\" library resolves the\n * standard NYSDS icon set from an inline SVG map shipped as JavaScript\n * (`nys-icon.library.ts`), loaded lazily as a separate chunk — no base-URL\n * discovery, no per-icon fetch, no browser globals. Custom libraries\n * (Font Awesome, Material Icons, etc.) register at runtime via\n * `registerIconLibrary()` and typically resolve to URLs.\n *\n * The registry and watcher maps are stored on `globalThis` so that even\n * when bundlers (Storybook Vite, etc.) create duplicate module\n * instances, every copy shares a single source of truth. `globalThis`\n * (rather than `window`) keeps module import side-effect-safe in\n * Node/SSR environments, where `window` does not exist.\n */\n\n/**\n * How a resolver locates an icon: a URL string (legacy shorthand for\n * `{ type: \"url\" }`), an explicit URL, or inline SVG source. Resolvers may\n * return synchronously or via a Promise.\n */\nexport type IconResolution =\n | string\n | { type: \"url\"; href: string }\n | { type: \"svg\"; content: string };\n\nexport interface IconLibrary {\n /** Given an icon name, return where/what its SVG is. Return undefined if not found. */\n resolver: (\n name: string,\n ) => IconResolution | undefined | Promise<IconResolution | undefined>;\n /** Optional post-parse transform applied to the SVGElement. */\n mutator?: (svg: SVGElement) => void;\n}\n\nexport interface NysIconWatcher {\n redraw(): void;\n}\n\n// ---------------------------------------------------------------------------\n// Global singleton storage – survives module duplication by bundlers\n// ---------------------------------------------------------------------------\ndeclare global {\n var __nysIconRegistry: Map<string, IconLibrary> | undefined;\n var __nysIconWatchers: Map<string, Set<NysIconWatcher>> | undefined;\n var __nysIconDefaultRegistered: boolean | undefined;\n}\n\nconst registry = (globalThis.__nysIconRegistry ??= new Map<\n string,\n IconLibrary\n>());\nconst watchers = (globalThis.__nysIconWatchers ??= new Map<\n string,\n Set<NysIconWatcher>\n>());\n\n// ---------------------------------------------------------------------------\n// Default library — the standard NYSDS icon set, shipped as JS data\n// ---------------------------------------------------------------------------\n\nlet defaultSet: Record<string, string> | null = null;\nlet defaultSetLoading: Promise<Record<string, string>> | null = null;\n\n/**\n * Load the standard icon set lazily. The specifier is a *literal* so every\n * bundler code-splits the map into a separate async chunk — fetched once,\n * only when a default-library icon actually renders — instead of bundling\n * ~139 KB into the consumer's main chunk. Do NOT turn this into a\n * template-literal / computed import: dynamic specifiers reintroduce the\n * bundler static-analysis failures this design eliminates (#1677, #1687).\n */\nasync function loadDefaultSet(): Promise<Record<string, string>> {\n if (defaultSet) return defaultSet;\n defaultSetLoading ??= import(\"./nys-icon.library\").then(\n (m) => (defaultSet = m.default),\n );\n return defaultSetLoading;\n}\n\n// Registered lazily on first lookup (never at import time, which must stay\n// side-effect-free for SSR) and only once — the first module instance to\n// resolve it wins, and an explicit register/unregister of \"default\" is\n// never overridden.\nfunction ensureDefaultLibrary(): void {\n if (globalThis.__nysIconDefaultRegistered || registry.has(\"default\")) {\n globalThis.__nysIconDefaultRegistered = true;\n return;\n }\n\n globalThis.__nysIconDefaultRegistered = true;\n registry.set(\"default\", {\n resolver: async (name) => {\n if (!name) return undefined;\n const set = await loadDefaultSet();\n const content = set[name];\n return content ? { type: \"svg\", content } : undefined;\n },\n });\n}\n\n/** Register or replace a named icon library. All watching icons using this library will redraw.\n *\n * Intended for custom/external libraries — the standard NYSDS set is\n * built in and needs no registration. Registering under `\"default\"`\n * replaces the built-in set (escape hatch).\n *\n * @example Register a Font Awesome library with a custom resolver:\n * ```ts\n * registerIconLibrary(\"fa\", {\n * resolver: (name) => `https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/svg/${name}.svg`\n * });\n * ```\n */\n\nexport function registerIconLibrary(name: string, library: IconLibrary): void {\n registry.set(name, library);\n watchers.get(name)?.forEach((w) => w.redraw());\n}\n\n/** Remove a registered icon library. All watching icons using this library will redraw. */\nexport function unregisterIconLibrary(name: string): void {\n registry.delete(name);\n watchers.get(name)?.forEach((w) => w.redraw());\n}\n\n/** Get a registered icon library by name. */\nexport function getIconLibrary(name: string): IconLibrary | undefined {\n ensureDefaultLibrary();\n return registry.get(name);\n}\n\n/** Subscribe an icon instance to library change notifications. */\nexport function watchIconLibrary(name: string, watcher: NysIconWatcher): void {\n if (!watchers.has(name)) watchers.set(name, new Set());\n watchers.get(name)!.add(watcher);\n}\n\n/** Unsubscribe an icon instance from library change notifications. */\nexport function unwatchIconLibrary(\n name: string,\n watcher: NysIconWatcher,\n): void {\n watchers.get(name)?.delete(watcher);\n}\n","/*! @license DOMPurify 3.4.14 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.14/LICENSE */\n\nfunction _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nfunction _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\nfunction _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = true,\n o = false;\n try {\n if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = true, n = r;\n } finally {\n try {\n if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _slicedToArray(r, e) {\n return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n }\n}\n\nconst entries = Object.entries,\n setPrototypeOf = Object.setPrototypeOf,\n isFrozen = Object.isFrozen,\n getPrototypeOf = Object.getPrototypeOf,\n getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nlet freeze = Object.freeze,\n seal = Object.seal,\n create = Object.create; // eslint-disable-line import/no-mutable-exports\nlet _ref = typeof Reflect !== 'undefined' && Reflect,\n apply = _ref.apply,\n construct = _ref.construct;\nif (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n}\nif (!seal) {\n seal = function seal(x) {\n return x;\n };\n}\nif (!apply) {\n apply = function apply(func, thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n return func.apply(thisArg, args);\n };\n}\nif (!construct) {\n construct = function construct(Func) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n return new Func(...args);\n };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst arrayIsArray = Array.isArray;\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst numberToString = unapply(Number.prototype.toString);\nconst booleanToString = unapply(Boolean.prototype.toString);\nconst bigintToString = typeof BigInt === 'undefined' ? null : unapply(BigInt.prototype.toString);\nconst symbolToString = typeof Symbol === 'undefined' ? null : unapply(Symbol.prototype.toString);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst objectToString = unapply(Object.prototype.toString);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n return function (thisArg) {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return apply(func, thisArg, args);\n };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(Func) {\n return function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return construct(Func, args);\n };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n if (!arrayIsArray(array)) {\n return set;\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n const newObject = create(null);\n for (const _ref2 of entries(object)) {\n var _ref3 = _slicedToArray(_ref2, 2);\n const property = _ref3[0];\n const value = _ref3[1];\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (arrayIsArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n}\n/**\n * Convert non-node values into strings without depending on direct property access.\n *\n * @param value - The value to stringify.\n * @returns A string representation of the provided value.\n */\nfunction stringifyValue(value) {\n switch (typeof value) {\n case 'string':\n {\n return value;\n }\n case 'number':\n {\n return numberToString(value);\n }\n case 'boolean':\n {\n return booleanToString(value);\n }\n case 'bigint':\n {\n return bigintToString ? bigintToString(value) : '0';\n }\n case 'symbol':\n {\n return symbolToString ? symbolToString(value) : 'Symbol()';\n }\n case 'undefined':\n {\n return objectToString(value);\n }\n case 'function':\n case 'object':\n {\n if (value === null) {\n return objectToString(value);\n }\n const valueAsRecord = value;\n const valueToString = lookupGetter(valueAsRecord, 'toString');\n if (typeof valueToString === 'function') {\n const stringified = valueToString(valueAsRecord);\n return typeof stringified === 'string' ? stringified : objectToString(stringified);\n }\n return objectToString(value);\n }\n default:\n {\n return objectToString(value);\n }\n }\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n}\nfunction isRegex(value) {\n try {\n regExpTest(value, '');\n return true;\n } catch (_unused) {\n return false;\n }\n}\n\nconst html$1 = freeze(['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']);\nconst svg$1 = freeze(['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']);\nconst svgFilters = freeze(['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']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['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']);\nconst mathMl$1 = freeze(['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']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['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']);\nconst svg = freeze(['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']);\nconst mathMl = freeze(['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']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\nconst MUSTACHE_EXPR = seal(/{{[\\w\\W]*|^[\\w\\W]*}}/g);\nconst ERB_EXPR = seal(/<%[\\w\\W]*|^[\\w\\W]*%>/g);\nconst TMPLIT_EXPR = seal(/\\${[\\w\\W]*/g);\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n// Markup-significant character probes used by _sanitizeElements.\n// Shared module-level instances are safe despite the sticky /g flags:\n// unapply() resets lastIndex for RegExp receivers before every call.\nconst ELEMENT_MARKUP_PROBE = seal(/<[/\\w!]/g);\nconst COMMENT_MARKUP_PROBE = seal(/<[/\\w]/g);\nconst FALLBACK_TAG_CLOSE = seal(/<\\/no(script|embed|frames)/i);\nconst SELF_CLOSING_TAG = seal(/\\/>/i);\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n processingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n};\n/* HTML-namespace elements whose child text nodes are serialized *literally*\n (unescaped) by the HTML fragment-serialization algorithm. Two reparse-mXSS\n shapes ride on that literal serialization:\n (a) an element child - a tree the HTML parser can never build, but the DOM\n API and an XML/XHTML parse can - after which a `</tag>`-bearing text\n sibling breaks the element open on reparse; and\n (b) text-only content that already carries the element's OWN end tag, e.g.\n `<style>...</style><img onerror=x>` built as a node, which the literal\n serializer emits verbatim for the HTML parser to re-open.\n Shape (a) is handled by the firstElementChild branch in _isUnsafeNode; shape\n (b) by the LITERAL_TEXT_CLOSE probe. Both read textContent (the raw-serialized\n form for these elements) rather than innerHTML, because an XML/XHTML working\n document serializes innerHTML with `<` escaped, which silently blinds the\n innerHTML-based probes (rule 1's second probe and FALLBACK_TAG_CLOSE) there.\n `script` is never allow-listed, but is kept here so the guard matches the\n serializer's own literal-text list exactly. */\nconst LITERAL_TEXT_ELEMENT_NAMES = ['style', 'script', 'xmp', 'iframe', 'noembed', 'noframes', 'plaintext', 'noscript'];\nconst LITERAL_TEXT_ELEMENTS = freeze(addToSet({}, LITERAL_TEXT_ELEMENT_NAMES));\n/* Per-element end-tag matcher. On an HTML reparse the ONLY token that\n terminates a literal-text element's raw content is its own end tag; a foreign\n literal-text close (e.g. `</xmp>` sitting inside `<style>`) does not break\n out, so matching is per-element, not a shared alternation. The lookahead\n requires an HTML tag-name terminator (whitespace, `/` or `>`) so a longer\n name such as `</styles` is not mistaken for `</style`. */\nconst LITERAL_TEXT_CLOSE = function () {\n const map = {};\n arrayForEach(LITERAL_TEXT_ELEMENT_NAMES, name => {\n map[name] = seal(new RegExp('</' + name + '(?=[\\\\t\\\\n\\\\f\\\\r />])', 'i'));\n });\n return freeze(map);\n}();\nconst getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\nconst _createHooksMap = function _createHooksMap() {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: []\n };\n};\n/**\n * Resolve a set-valued configuration option: a fresh set built from\n * cfg[key] when it is an own array property (seeded with a clone of\n * options.base when given, case-normalized via options.transform),\n * the fallback set otherwise.\n *\n * @param cfg the cloned, prototype-free configuration object\n * @param key the configuration property to read\n * @param fallback the set to use when the option is absent or not an array\n * @param options transform and optional base set to merge into\n * @returns the resolved set\n */\nconst _resolveSetOption = function _resolveSetOption(cfg, key, fallback, options) {\n return objectHasOwnProperty(cfg, key) && arrayIsArray(cfg[key]) ? addToSet(options.base ? clone(options.base) : {}, cfg[key], options.transform) : fallback;\n};\n/**\n * Resolve an object-valued configuration option: a prototype-free clone\n * of cfg[key] when it is an own, truthy object property, else a fresh\n * fallback built by makeFallback (fresh on every parse, so a previous\n * parse can never leak state into the next one).\n *\n * @param cfg the cloned, prototype-free configuration object\n * @param key the configuration property to read\n * @param makeFallback builds the fallback value when the option is absent\n * @returns the resolved object\n */\nconst _resolveObjectOption = function _resolveObjectOption(cfg, key, makeFallback) {\n const value = objectHasOwnProperty(cfg, key) ? cfg[key] : undefined;\n return value && typeof value === 'object' ? clone(value) : makeFallback();\n};\nfunction createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n DOMPurify.version = '3.4.14';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let document = window.document;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n window.DocumentFragment;\n const HTMLTemplateElement = window.HTMLTemplateElement,\n Node = window.Node,\n Element = window.Element,\n NodeFilter = window.NodeFilter,\n _window$NamedNodeMap = window.NamedNodeMap;\n _window$NamedNodeMap === void 0 ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap;\n window.HTMLFormElement;\n const DOMParser = window.DOMParser,\n trustedTypes = window.trustedTypes;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n const getShadowRoot = lookupGetter(ElementPrototype, 'shadowRoot');\n const getAttributes = lookupGetter(ElementPrototype, 'attributes');\n const getNodeType = Node && Node.prototype ? lookupGetter(Node.prototype, 'nodeType') : null;\n const getNodeName = Node && Node.prototype ? lookupGetter(Node.prototype, 'nodeName') : null;\n const getOwnerDocument = Node && Node.prototype ? lookupGetter(Node.prototype, 'ownerDocument') : null;\n /* Clobber-safe nodeType / nodeName reads through the cached Node.prototype\n getters, with a direct-property fallback for environments that lack\n Node.prototype. Sites that need a different fallback (e.g. _isClobbered\n returns early on a null name) intentionally keep their own reads. */\n const _readNodeType = function _readNodeType(node) {\n return getNodeType ? getNodeType(node) : node.nodeType;\n };\n const _readNodeName = function _readNodeName(node) {\n return getNodeName ? getNodeName(node) : node.nodeName;\n };\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n // The instance's own internal Trusted Types policy. Unlike a caller-supplied\n // `TRUSTED_TYPES_POLICY`, this is created at most once — Trusted Types throws\n // on duplicate policy names — and is the only policy allowed to persist\n // across configurations and survive `clearConfig()`.\n let defaultTrustedTypesPolicy;\n let defaultTrustedTypesPolicyResolved = false;\n // Tracks whether we are already inside a call to the configured Trusted Types\n // policy (`createHTML` or `createScriptURL`). If a supplied policy callback\n // itself calls `DOMPurify.sanitize` (the cause of #1422), `sanitize` would\n // re-enter the policy and recurse until the stack overflows. We detect that\n // re-entry and throw a clear, actionable error instead. The guard is shared\n // across both callbacks, because either one re-entering `sanitize` triggers\n // the same unbounded recursion.\n let IN_TRUSTED_TYPES_POLICY = 0;\n const _assertNotInTrustedTypesPolicy = function _assertNotInTrustedTypesPolicy() {\n if (IN_TRUSTED_TYPES_POLICY > 0) {\n throw typeErrorCreate('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.');\n }\n };\n const _createTrustedHTML = function _createTrustedHTML(html) {\n _assertNotInTrustedTypesPolicy();\n IN_TRUSTED_TYPES_POLICY++;\n try {\n return trustedTypesPolicy.createHTML(html);\n } finally {\n IN_TRUSTED_TYPES_POLICY--;\n }\n };\n const _createTrustedScriptURL = function _createTrustedScriptURL(scriptUrl) {\n _assertNotInTrustedTypesPolicy();\n IN_TRUSTED_TYPES_POLICY++;\n try {\n return trustedTypesPolicy.createScriptURL(scriptUrl);\n } finally {\n IN_TRUSTED_TYPES_POLICY--;\n }\n };\n // Lazily resolve (and cache) the instance's internal default policy.\n // Resolution is attempted at most once: a successful `createPolicy` cannot be\n // repeated (Trusted Types throws on duplicate names), and a failed or\n // unsupported attempt must not be retried on every parse.\n const _getDefaultTrustedTypesPolicy = function _getDefaultTrustedTypesPolicy() {\n if (!defaultTrustedTypesPolicyResolved) {\n defaultTrustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n defaultTrustedTypesPolicyResolved = true;\n }\n return defaultTrustedTypesPolicy;\n };\n const _document = document,\n implementation = _document.implementation,\n createNodeIterator = _document.createNodeIterator,\n createDocumentFragment = _document.createDocumentFragment,\n getElementsByTagName = _document.getElementsByTagName;\n const importNode = originalDocument.importNode;\n let hooks = _createHooksMap();\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const MUSTACHE_EXPR$1 = MUSTACHE_EXPR,\n ERB_EXPR$1 = ERB_EXPR,\n TMPLIT_EXPR$1 = TMPLIT_EXPR,\n DATA_ATTR$1 = DATA_ATTR,\n ARIA_ATTR$1 = ARIA_ATTR,\n IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE$1 = ATTR_WHITESPACE,\n CUSTOM_ELEMENT$1 = CUSTOM_ELEMENT;\n let IS_ALLOWED_URI$1 = IS_ALLOWED_URI;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n tagCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n }\n }));\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n /* Decide if document with <html>... should be returned */\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n /* Pristine allowlist bindings captured at setConfig() time. On the\n * persistent-config path sanitize() restores the sets from these before\n * the per-walk hook clone-guard, so a hook's in-call widening cannot\n * carry across calls. Null until setConfig() is called; reset by\n * clearConfig(). */\n let SET_CONFIG_ALLOWED_TAGS = null;\n let SET_CONFIG_ALLOWED_ATTR = null;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script',\n // <selectedcontent> mirrors the selected <option>'s subtree, cloned by\n // the UA (customizable <select>) — including any on* handlers — and the\n // engine re-mirrors synchronously whenever a removal changes which\n // option/selectedcontent is current, even inside DOMPurify's inert\n // DOMParser document. Hoisting its children on removal re-inserts a fresh\n // mirror target ahead of the walk, which the engine refills, looping\n // forever (DoS) and amplifying output. Dropping its content on removal\n // (rather than hoisting) breaks that cascade; the content is a duplicate\n // of the option, which is sanitized on its own. See campaign-3 F1/F6.\n 'selectedcontent', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n const DEFAULT_MATHML_TEXT_INTEGRATION_POINTS = freeze(['mi', 'mo', 'mn', 'ms', 'mtext']);\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, DEFAULT_MATHML_TEXT_INTEGRATION_POINTS);\n const DEFAULT_HTML_INTEGRATION_POINTS = freeze(['annotation-xml']);\n let HTML_INTEGRATION_POINTS = addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n ALLOWED_TAGS = _resolveSetOption(cfg, 'ALLOWED_TAGS', DEFAULT_ALLOWED_TAGS, {\n transform: transformCaseFunc\n });\n ALLOWED_ATTR = _resolveSetOption(cfg, 'ALLOWED_ATTR', DEFAULT_ALLOWED_ATTR, {\n transform: transformCaseFunc\n });\n ALLOWED_NAMESPACES = _resolveSetOption(cfg, 'ALLOWED_NAMESPACES', DEFAULT_ALLOWED_NAMESPACES, {\n transform: stringToString\n });\n URI_SAFE_ATTRIBUTES = _resolveSetOption(cfg, 'ADD_URI_SAFE_ATTR', DEFAULT_URI_SAFE_ATTRIBUTES, {\n transform: transformCaseFunc,\n base: DEFAULT_URI_SAFE_ATTRIBUTES\n });\n DATA_URI_TAGS = _resolveSetOption(cfg, 'ADD_DATA_URI_TAGS', DEFAULT_DATA_URI_TAGS, {\n transform: transformCaseFunc,\n base: DEFAULT_DATA_URI_TAGS\n });\n FORBID_CONTENTS = _resolveSetOption(cfg, 'FORBID_CONTENTS', DEFAULT_FORBID_CONTENTS, {\n transform: transformCaseFunc\n });\n FORBID_TAGS = _resolveSetOption(cfg, 'FORBID_TAGS', clone({}), {\n transform: transformCaseFunc\n });\n FORBID_ATTR = _resolveSetOption(cfg, 'FORBID_ATTR', clone({}), {\n transform: transformCaseFunc\n });\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES && typeof cfg.USE_PROFILES === 'object' ? clone(cfg.USE_PROFILES) : cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = isRegex(cfg.ALLOWED_URI_REGEXP) ? cfg.ALLOWED_URI_REGEXP : IS_ALLOWED_URI; // Default regexp\n NAMESPACE = typeof cfg.NAMESPACE === 'string' ? cfg.NAMESPACE : HTML_NAMESPACE; // Default HTML namespace\n MATHML_TEXT_INTEGRATION_POINTS = _resolveObjectOption(cfg, 'MATHML_TEXT_INTEGRATION_POINTS', () => addToSet({}, DEFAULT_MATHML_TEXT_INTEGRATION_POINTS) // Default built-in map\n );\n HTML_INTEGRATION_POINTS = _resolveObjectOption(cfg, 'HTML_INTEGRATION_POINTS', () => addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS) // Default built-in map\n );\n const customElementHandling = _resolveObjectOption(cfg, 'CUSTOM_ELEMENT_HANDLING', () => create(null));\n CUSTOM_ELEMENT_HANDLING = create(null);\n if (objectHasOwnProperty(customElementHandling, 'tagNameCheck') && isRegexOrFunction(customElementHandling.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = customElementHandling.tagNameCheck; // Default undefined\n }\n if (objectHasOwnProperty(customElementHandling, 'attributeNameCheck') && isRegexOrFunction(customElementHandling.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = customElementHandling.attributeNameCheck; // Default undefined\n }\n if (objectHasOwnProperty(customElementHandling, 'allowCustomizedBuiltInElements') && typeof customElementHandling.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = customElementHandling.allowCustomizedBuiltInElements; // Default undefined\n }\n seal(CUSTOM_ELEMENT_HANDLING);\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = create(null);\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Always reset function-based ADD_TAGS / ADD_ATTR checks to prevent\n * leaking across calls when switching from function to array config */\n EXTRA_ELEMENT_HANDLING.tagCheck = null;\n EXTRA_ELEMENT_HANDLING.attributeCheck = null;\n /* Merge configuration parameters */\n if (objectHasOwnProperty(cfg, 'ADD_TAGS')) {\n if (typeof cfg.ADD_TAGS === 'function') {\n EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n } else if (arrayIsArray(cfg.ADD_TAGS)) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n }\n if (objectHasOwnProperty(cfg, 'ADD_ATTR')) {\n if (typeof cfg.ADD_ATTR === 'function') {\n EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n } else if (arrayIsArray(cfg.ADD_ATTR)) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n }\n if (objectHasOwnProperty(cfg, 'ADD_FORBID_CONTENTS') && arrayIsArray(cfg.ADD_FORBID_CONTENTS)) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n // Re-derive the active Trusted Types policy from this configuration on\n // every parse. The active policy must never be sticky closure state that\n // outlives the config that set it: a caller-supplied policy left in place\n // after `clearConfig()` — or after a later call that supplied none, or\n // `TRUSTED_TYPES_POLICY: null` — could sign a subsequent \"default\"\n // `RETURN_TRUSTED_TYPE` result with a foreign, possibly unsafe policy.\n // See GHSA-vxr8-fq34-vvx9.\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // A caller-supplied policy applies to this configuration only.\n const previousTrustedTypesPolicy = trustedTypesPolicy;\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`. If the supplied policy's\n // `createHTML` is circular (i.e. it calls `DOMPurify.sanitize`), this\n // throws via the re-entrancy guard. Restore the previous policy first so\n // the instance is not left in a poisoned state. See #1422.\n try {\n emptyHTML = _createTrustedHTML('');\n } catch (error) {\n trustedTypesPolicy = previousTrustedTypesPolicy;\n throw error;\n }\n } else if (cfg.TRUSTED_TYPES_POLICY === null) {\n // Explicit opt-out for this call: perform no Trusted Types signing and\n // create nothing (so a strict `trusted-types` CSP that disallows a\n // `dompurify` policy can still call `sanitize` from inside its own\n // policy — see #1422). Resetting to `undefined` rather than a sticky\n // `null` also drops any previously retained caller policy, so it cannot\n // resurface on a later call, while still allowing the next config-less\n // call to restore the internal default policy. See GHSA-vxr8-fq34-vvx9.\n trustedTypesPolicy = undefined;\n emptyHTML = '';\n } else {\n // No policy supplied: keep the currently active policy if one is set — a\n // previously supplied policy is intentionally sticky across config-less\n // calls — otherwise fall back to the instance's own internal policy,\n // created at most once. (A policy supplied for a *single* call still\n // lingers by design; what must not linger is a policy whose configuration\n // has been torn down via `clearConfig()`, which restores the default.)\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _getDefaultTrustedTypesPolicy();\n }\n // Sign internal variables only when a policy is active. A falsy policy\n // (Trusted Types unsupported, creation failed, or an explicit opt-out)\n // leaves `emptyHTML` as a plain string, so we never call `.createHTML` on\n // a non-policy and throw. See #1422.\n if (trustedTypesPolicy && typeof emptyHTML === 'string') {\n emptyHTML = _createTrustedHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n /**\n * Namespace rules for an element in the SVG namespace.\n *\n * @param tagName the element's lowercase tag name\n * @param parent the (possibly simulated) parent node\n * @param parentTagName the parent's lowercase tag name\n * @returns true if a spec-compliant parser could produce this element\n */\n const _checkSvgNamespace = function _checkSvgNamespace(tagName, parent, parentTagName) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via <svg>\n // if the parent is either <annotation-xml> or a MathML\n // text integration point.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n };\n /**\n * Namespace rules for an element in the MathML namespace.\n *\n * @param tagName the element's lowercase tag name\n * @param parent the (possibly simulated) parent node\n * @param parentTagName the parent's lowercase tag name\n * @returns true if a spec-compliant parser could produce this element\n */\n const _checkMathMlNamespace = function _checkMathMlNamespace(tagName, parent, parentTagName) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n };\n /**\n * Namespace rules for an element in the HTML namespace.\n *\n * @param tagName the element's lowercase tag name\n * @param parent the (possibly simulated) parent node\n * @param parentTagName the parent's lowercase tag name\n * @returns true if a spec-compliant parser could produce this element\n */\n const _checkHtmlNamespace = function _checkHtmlNamespace(tagName, parent, parentTagName) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n };\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n return _checkSvgNamespace(tagName, parent, parentTagName);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n return _checkMathMlNamespace(tagName, parent, parentTagName);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n return _checkHtmlNamespace(tagName, parent, parentTagName);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n /* The normal detach failed — this is reached for a parentless node\n (getParentNode() is null, so .removeChild throws). Element.prototype\n .remove() is itself a spec no-op on a parentless node, so a recorded\n \"removal\" would otherwise hand the caller back an intact,\n payload-bearing node (e.g. a detached IN_PLACE root the mXSS canary or\n the style-with-element-child rule decided to kill). Fail closed by\n throwing — exactly as a clobbered root does at the IN_PLACE entry —\n rather than trying to \"neutralize\" the node via its own methods.\n Neutralizing would mean calling getAttributeNames()/removeAttribute()\n on the node, both of which a <form> root can clobber via a named child\n (and _isClobbered does not even probe getAttributeNames), so the\n neutralize step could itself be silently defeated, leaving the payload\n intact. A throw touches only the cached, clobber-safe remove() and\n getParentNode(). Generalizes GHSA-r47g-fvhr-h676 (clobbered-form root)\n to every root-kill reason. REPORT-3.\n This lives inside the catch, so it never fires for a normally-removed\n in-tree node: those have a parent, removeChild() succeeds, and the\n catch is not entered. Only a kept (parentless) root reaches here. */\n remove(node);\n if (!getParentNode(node)) {\n throw typeErrorCreate('a node selected for removal could not be detached from its tree ' + 'and cannot be safely returned; refusing to sanitize in place');\n }\n }\n };\n /**\n * _stripAttributeNode\n *\n * Remove a single Attr node case/namespace-exactly on an attribute-teardown\n * path. Name-based removeAttribute() ASCII-lowercases its lookup key for an\n * HTML element in an HTML document and so silently misses a case-preserved\n * handler (e.g. `ONERROR` off an XML/XHTML import) - the same defect\n * _removeAttribute() was fixed for, which a name-based call would reintroduce\n * on these IN_PLACE teardown paths. Unlike _removeAttribute this does not\n * record into DOMPurify.removed: the neutralize passes intentionally do not\n * book-keep. A clobbered/detached node falls back to best-effort name-based\n * removal.\n *\n * @param element the element to strip the attribute from\n * @param attribute the Attr node to remove\n * @param name the attribute's name, for the fallback path\n */\n const _stripAttributeNode = function _stripAttributeNode(element, attribute, name) {\n try {\n element.removeAttributeNode(attribute);\n } catch (_) {\n try {\n element.removeAttribute(name);\n } catch (_) {}\n }\n };\n /**\n * _neutralizeRoot\n *\n * Fail-closed teardown of an in-place root after the sanitize walk aborts\n * (campaign-3 F2). An internal throw mid-walk — e.g. a page-registered\n * custom element's reaction detaches a node so `_forceRemove`'s deliberate\n * parentless guard throws, or any other re-entrant engine mutation — would\n * otherwise leave the caller's *live* tree half-sanitized, with everything\n * after the abort point still carrying its handlers. There is no safe way\n * to resume the walk (the tree mutated under us), so we strip the root bare:\n * remove every child and every attribute, then let the caller's catch see\n * the original error. Clobber-safe (cached `remove`/`childNodes`/`attributes`\n * getters; the root was already clobber-pre-flighted at the IN_PLACE entry).\n *\n * @param root the in-place root to empty\n */\n const _neutralizeRoot = function _neutralizeRoot(root) {\n /* Strip every disallowed attribute (on* handlers included) off the whole\n subtree BEFORE detaching anything. Detaching first would hand back\n handler-bearing originals (e.g. an already-loading `<img onerror>`)\n whose queued resource event still fires in page scope after we throw.\n Clobber-safe reads; a doomed clobbered node's own attributes are\n irrelevant while its non-clobbered descendants are reached and scrubbed. */\n _neutralizeSubtree(root);\n const childNodes = getChildNodes(root);\n if (childNodes) {\n const snapshot = [];\n arrayForEach(childNodes, child => {\n arrayPush(snapshot, child);\n });\n arrayForEach(snapshot, child => {\n try {\n remove(child);\n } catch (_) {\n /* Best-effort teardown; a still-attached child is handled below */\n }\n });\n }\n const attributes = getAttributes(root);\n if (attributes) {\n for (let i = attributes.length - 1; i >= 0; --i) {\n const attribute = attributes[i];\n const name = attribute && attribute.name;\n if (typeof name === 'string') {\n _stripAttributeNode(root, attribute, name);\n }\n }\n }\n };\n /**\n * _removeAttribute\n *\n * Name-based getAttributeNode()/removeAttribute() ASCII-lowercase their\n * lookup key for HTML elements in an HTML document, so they silently miss an\n * attribute whose stored qualified name still contains uppercase ASCII\n * letters. That happens when the node came from a case-preserving source\n * (an XML/XHTML document imported via importNode(), or createAttributeNS()),\n * where e.g. `ONERROR` survives the walk: the policy check lowercases to\n * `onerror` and rejects it, but `removeAttribute('ONERROR')` looks up\n * `onerror` and finds nothing. Remove the exact Attr node instead, which is\n * case- and namespace-exact, and fall back to name-based removal only when\n * the caller could not supply the node.\n *\n * @param name an Attribute name\n * @param element a DOM node\n * @param attr the exact Attr node to remove, when the caller has it\n */\n const _removeAttribute = function _removeAttribute(name, element, attr) {\n if (!attr) {\n try {\n attr = element.getAttributeNode(name);\n } catch (_) {\n attr = null;\n }\n }\n arrayPush(DOMPurify.removed, {\n attribute: attr || null,\n from: element\n });\n try {\n if (attr) {\n element.removeAttributeNode(attr);\n } else {\n element.removeAttribute(name);\n }\n } catch (_) {\n /* Clobbered or already-detached node - best-effort fall back to a\n name-based removal so the \"is\" handling below still runs. */\n try {\n element.removeAttribute(name);\n } catch (_) {}\n }\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _stripDisallowedAttributes\n *\n * Removes every attribute the active configuration does not allow from a\n * single element, using the same allowlist as the main attribute pass (so\n * `on*` handlers go, but no `/^on/` blocklist is introduced). Used only to\n * neutralise nodes that are being discarded from an in-place tree.\n *\n * @param element the element to strip\n */\n const _stripDisallowedAttributes = function _stripDisallowedAttributes(element) {\n const attributes = getAttributes(element);\n if (!attributes) {\n return;\n }\n for (let i = attributes.length - 1; i >= 0; --i) {\n const attribute = attributes[i];\n const name = attribute && attribute.name;\n if (typeof name !== 'string' || ALLOWED_ATTR[transformCaseFunc(name)]) {\n continue;\n }\n _stripAttributeNode(element, attribute, name);\n }\n };\n /**\n * _neutralizeSubtree\n *\n * Completes the audit-5 F1 fix across every removal path. The KEEP_CONTENT\n * move-hoist neutralises only disallowed-tag removals; clobber, mXSS-canary,\n * namespace, comment, processing-instruction and KEEP_CONTENT:false removals\n * all drop their subtree wholesale via `_forceRemove`. On the IN_PLACE path\n * those dropped nodes are detached from the caller's LIVE tree but a\n * handler-bearing original among them (an `<img onerror>`/`<video>` that was\n * loading) keeps its queued resource event, which fires in page scope after\n * sanitize returns. This walks a removed subtree and strips every attribute\n * the active configuration does not allow — so `on*` handlers are cancelled\n * through the SAME allowlist that governs kept nodes, not a separate `/^on/`\n * blocklist. Run synchronously before sanitize returns, i.e. before any\n * queued event can fire. Hook-free by design: these nodes leave the output,\n * so firing attribute hooks for them would be surprising. Clobber-safe reads;\n * a doomed clobbered node may shadow `removeAttribute` (its own attributes are\n * irrelevant — it is discarded — while its non-clobbered descendants, e.g.\n * the `<img>`, are reached and scrubbed).\n *\n * @param root the root of a removed subtree to neutralise\n */\n const _neutralizeSubtree = function _neutralizeSubtree(root) {\n const stack = [root];\n while (stack.length > 0) {\n const node = stack.pop();\n const nodeType = _readNodeType(node);\n if (nodeType === NODE_TYPE.element) {\n _stripDisallowedAttributes(node);\n }\n const childNodes = getChildNodes(node);\n if (childNodes) {\n for (let i = childNodes.length - 1; i >= 0; --i) {\n stack.push(childNodes[i]);\n }\n }\n }\n };\n /**\n * _neutralizePatchLinkage\n *\n * IN_PLACE entry pre-pass (declarative-partial-updates / streaming\n * hardening, https://github.com/WICG/declarative-partial-updates).\n *\n * The main walk strips patch linkage (`for`/`patchsrc`) and removes range\n * markers (PIs / markup comments) node-by-node, in document order, AS it\n * reaches each node. On a live in-place root that leaves a window: from the\n * moment the root is connected until the walk arrives at a given node, that\n * node's linkage is live. A patch applied on connection/stream can fire as\n * a microtask during the walk and inject or teleport an unsanitized DOM\n * range into a region the iterator has already passed and will not revisit,\n * so the post-return \"tree is sanitized\" contract is violated. Sweep the\n * whole tree once up front and sever every linkage before the walk begins,\n * closing that window.\n *\n * This CANNOT undo a patch that already fired before sanitize ran — that is\n * the irreducible \"do not IN_PLACE a live-connected attacker tree\" caveat —\n * but it closes everything from sanitize-start onward. Gated on SAFE_FOR_XML\n * to group with the rest of the declarative-partial-updates handling and\n * stay overridable, consistent with the codebase.\n *\n * Clobber-safe traversal (cached childNodes getter); per-node try/catch so a\n * clobbered root cannot defeat the sweep of its non-clobbered descendants.\n *\n * NOTE (pending real-Chrome confirmation, see test/declarative-patch-probe\n * .html Q1): this mirrors the existing policy of keeping `for` on\n * <label>/<output>. If the shipping feature can drive a patch through a\n * surviving `for`-on-label/output + `id` pair, this pre-pass and the\n * attribute check at _isBasicCustomElement's caller must additionally drop\n * that pair on the IN_PLACE path. Left as-is until the taxonomy is verified.\n *\n * @param root the in-place root to sweep\n */\n /**\n * Central policy for declarative-partial-updates patch-linkage attributes,\n * shared by the _neutralizePatchLinkage pre-pass and _isValidAttribute so\n * the two sites cannot drift: `patchsrc` always links, `for` links\n * everywhere except on <label>/<output>, and the whole policy is gated on\n * SAFE_FOR_XML (see the rationale block in _isValidAttribute).\n *\n * @param lcName the transformCaseFunc'd attribute name\n * @param lcTag the transformCaseFunc'd tag name of the carrying element\n * @return true if the attribute is patch linkage and must be dropped\n */\n const _isPatchLinkageAttribute = function _isPatchLinkageAttribute(lcName, lcTag) {\n if (!SAFE_FOR_XML) {\n return false;\n }\n if (lcName === 'patchsrc') {\n return true;\n }\n return lcName === 'for' && lcTag !== 'label' && lcTag !== 'output';\n };\n const _neutralizePatchLinkage = function _neutralizePatchLinkage(root) {\n if (!SAFE_FOR_XML) {\n return;\n }\n const stack = [root];\n while (stack.length > 0) {\n const node = stack.pop();\n const nodeType = _readNodeType(node);\n /* Remove range markers (the target side of a patch linkage): every\n processing instruction, and any markup-bearing comment. */\n if (nodeType === NODE_TYPE.processingInstruction || nodeType === NODE_TYPE.comment && regExpTest(COMMENT_MARKUP_PROBE, node.data)) {\n try {\n remove(node);\n } catch (_) {\n /* Best-effort */\n }\n continue;\n }\n /* Strip patch-source attributes (the source side) off elements. */\n if (nodeType === NODE_TYPE.element) {\n const element = node;\n const lcTag = transformCaseFunc(_readNodeName(node));\n try {\n if (element.hasAttribute && element.hasAttribute('patchsrc')) {\n element.removeAttribute('patchsrc');\n }\n if (element.hasAttribute && element.hasAttribute('for') && _isPatchLinkageAttribute('for', lcTag)) {\n element.removeAttribute('for');\n }\n } catch (_) {\n /* Clobbered removeAttribute/hasAttribute on a doomed node — ignore */\n }\n }\n const childNodes = getChildNodes(node);\n if (childNodes) {\n for (let i = childNodes.length - 1; i >= 0; --i) {\n stack.push(childNodes[i]);\n }\n }\n }\n };\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n }\n const dirtyPayload = trustedTypesPolicy ? _createTrustedHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n /* Read ownerDocument through the cached Node.prototype getter, never the\n direct property. HTMLFormElement has [LegacyOverrideBuiltIns], so a\n clobbering child (<input name=\"ownerDocument\"> or a form-associated\n external input) shadows the prototype getter and makes a direct read\n return that <input>. createNodeIterator.call(<input>, ...) then throws\n \"Illegal invocation\", and on the IN_PLACE path that throw lands before\n the walk's fail-closed barrier - leaving the caller's live tree, with\n any already-armed handler in it, un-neutralized. The cached getter\n returns the real Document regardless of the clobber. */\n const doc = getOwnerDocument ? getOwnerDocument(root) : root.ownerDocument;\n return createNodeIterator.call(doc || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n * Replace template expression syntax (mustache, ERB, template\n * literal) with a space; shared by all SAFE_FOR_TEMPLATES scrub\n * sites. Order matters: mustache, then ERB, then template literal.\n *\n * @param value the string to scrub\n * @returns the scrubbed string\n */\n const _stripTemplateExpressions = function _stripTemplateExpressions(value) {\n value = stringReplace(value, MUSTACHE_EXPR$1, ' ');\n value = stringReplace(value, ERB_EXPR$1, ' ');\n value = stringReplace(value, TMPLIT_EXPR$1, ' ');\n return value;\n };\n /**\n * Strip template-engine expressions ({{...}}, ${...}, <%...%>) from the\n * character data of an element subtree. Used as the final safety net for\n * SAFE_FOR_TEMPLATES on every DOM-returning code path so that expressions\n * which only form after text-node normalization (e.g. fragments split across\n * stripped elements) cannot survive into a template-evaluating framework.\n *\n * Walks text/comment/CDATA/processing-instruction nodes and mutates `.data`\n * in place rather than round-tripping through innerHTML. This preserves\n * descendant node references (important for IN_PLACE callers), avoids a\n * serialize/reparse cycle, and reads literal character data — which means\n * `<%...%>` in text content matches the ERB regex against its real bytes\n * instead of the HTML-entity-escaped form innerHTML would produce.\n *\n * Attribute values are not visited here; SAFE_FOR_TEMPLATES handling for\n * attributes is performed during the per-node `_sanitizeAttributes` pass.\n *\n * @param node The root element whose character data should be scrubbed.\n */\n const _scrubTemplateExpressions2 = function _scrubTemplateExpressions(node) {\n var _node$querySelectorAl;\n node.normalize();\n /* Clobber-safe ownerDocument read, same reasoning as _createNodeIterator:\n under SAFE_FOR_TEMPLATES this runs on the live IN_PLACE root, which may\n carry a form-named-getter override of ownerDocument. */\n const doc = getOwnerDocument ? getOwnerDocument(node) : node.ownerDocument;\n const walker = createNodeIterator.call(doc || node, node,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_TEXT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_CDATA_SECTION | NodeFilter.SHOW_PROCESSING_INSTRUCTION, null);\n let currentNode = walker.nextNode();\n while (currentNode) {\n currentNode.data = _stripTemplateExpressions(currentNode.data);\n currentNode = walker.nextNode();\n }\n // NodeIterator does not descend into <template>.content per the DOM spec,\n // so we must explicitly recurse into each template's content fragment,\n // mirroring the approach used by _sanitizeShadowDOM.\n const templates = (_node$querySelectorAl = node.querySelectorAll) === null || _node$querySelectorAl === void 0 ? void 0 : _node$querySelectorAl.call(node, 'template');\n if (templates) {\n arrayForEach(templates, tmpl => {\n if (_isDocumentFragment(tmpl.content)) {\n _scrubTemplateExpressions2(tmpl.content);\n }\n });\n }\n };\n /**\n * _isClobbered\n *\n * Detect DOM-clobbering on HTMLFormElement nodes. Form is the only HTML\n * interface with [LegacyOverrideBuiltIns]; a descendant element with a\n * `name` attribute matching a prototype property shadows that property\n * on direct reads. We use this check at the IN_PLACE entry-point and\n * during attribute sanitization to refuse clobbered forms.\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(element) {\n // Realm-independent tag-name probe. If we can't determine the tag\n // name at all, we can't reason about clobbering — return false\n // (the caller's other defences still apply).\n const realTagName = getNodeName ? getNodeName(element) : null;\n if (typeof realTagName !== 'string') {\n return false;\n }\n if (transformCaseFunc(realTagName) !== 'form') {\n return false;\n }\n return typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' ||\n // Realm-safe NamedNodeMap detection: equality against the cached\n // prototype getter. Clobbered .attributes (e.g. <input name=\"attributes\">)\n // makes the direct read diverge from the cached read; a clean form\n // (same-realm OR foreign-realm) has both reads pointing at the same\n // canonical NamedNodeMap.\n element.attributes !== getAttributes(element) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function' ||\n // NodeType clobbering probe. Cached Node.prototype.nodeType getter\n // returns the integer 1 for any Element regardless of realm; direct\n // read on a clobbered form (e.g. <input name=\"nodeType\">) returns\n // the named child element. Cheap addition — nodeType is read from\n // an internal slot, no serialization cost — and removes a residual\n // clobbering surface used by several mXSS / PI / comment branches\n // in _sanitizeElements that compare currentNode.nodeType directly.\n element.nodeType !== getNodeType(element) ||\n // HTMLFormElement has [LegacyOverrideBuiltIns]: a descendant named\n // \"childNodes\" shadows the prototype getter. Direct reads of\n // form.childNodes from a clobbered form return the named child\n // instead of the real NodeList, so any walk that reads it directly\n // skips the form's real children. Compare the direct read to the\n // cached Node.prototype getter — when the form's named-property\n // getter intercepts the read, the two values differ and we flag\n // the form. This catches every clobbering child type (input,\n // select, etc.) regardless of whether the named child happens to\n // carry a numeric .length, which a typeof-based probe would miss\n // (e.g. HTMLSelectElement.length is a defined unsigned-long).\n element.childNodes !== getChildNodes(element);\n };\n /**\n * Checks whether the given value is a DocumentFragment from any realm.\n *\n * The realm-independent replacement reads `nodeType` through the cached\n * Node.prototype getter and compares to the DOCUMENT_FRAGMENT_NODE\n * constant (11). nodeType is a numeric value resolved from the node's\n * internal slot, identical across realms for the same kind of node.\n *\n * @param value object to check\n * @return true if value is a DocumentFragment-shaped node from any realm\n */\n const _isDocumentFragment = function _isDocumentFragment(value) {\n if (!getNodeType || typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return getNodeType(value) === NODE_TYPE.documentFragment;\n } catch (_) {\n return false;\n }\n };\n /**\n * Checks whether the given object is a DOM node, including nodes that\n * originate from a different window/realm (e.g. an iframe's\n * contentDocument). The previous `value instanceof Node` check was\n * realm-bound: nodes from a different window failed it, causing\n * sanitize() to silently stringify them and reset IN_PLACE to false,\n * returning the original node unsanitized. See GHSA-4w3q-35jp-p934.\n *\n * @param value object to check whether it's a DOM node\n * @return true if value is a DOM node from any realm\n */\n const _isNode = function _isNode(value) {\n if (!getNodeType || typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof getNodeType(value) === 'number';\n } catch (_) {\n return false;\n }\n };\n function _executeHooks(hooks, currentNode, data) {\n if (hooks.length === 0) {\n return;\n }\n arrayForEach(hooks, hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n /**\n * Structural-threat checks that condemn a node regardless of the\n * allowlists: mXSS via namespace confusion, risky CSS construction,\n * processing instructions, markup-bearing comments. Pure predicate;\n * the caller removes. Check order is load-bearing.\n *\n * @param currentNode the node to inspect\n * @param tagName the node's transformCaseFunc'd tag name\n * @return true if the node must be removed\n */\n const _isUnsafeNode = function _isUnsafeNode(currentNode, tagName) {\n /* Detect mXSS attempts abusing namespace confusion */\n if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.textContent) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.innerHTML)) {\n return true;\n }\n /* Remove rawtext/literal-text elements whose literal serialization\n re-opens markup on an HTML reparse - shapes (a) and (b) documented at\n LITERAL_TEXT_ELEMENTS. Both are invisible to rule 1 above (which\n self-disables once there is an element child, and whose second probe\n reads the innerHTML an XML/XHTML document serializes escaped), which\n is why both probes here read textContent instead. Previously only\n `style`-with-element-child was covered; every element in\n LITERAL_TEXT_ELEMENTS shares this literal serialization and is\n equally affected. */\n if (SAFE_FOR_XML && currentNode.namespaceURI === HTML_NAMESPACE && LITERAL_TEXT_ELEMENTS[tagName] && (_isNode(currentNode.firstElementChild) || typeof currentNode.textContent === 'string' && regExpTest(LITERAL_TEXT_CLOSE[tagName], currentNode.textContent))) {\n return true;\n }\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.processingInstruction) {\n return true;\n }\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(COMMENT_MARKUP_PROBE, currentNode.data)) {\n return true;\n }\n return false;\n };\n /**\n * Evaluate a CUSTOM_ELEMENT_HANDLING check (a RegExp or a predicate\n * function, per the validation in _parseConfig) against a name.\n * Additional arguments are forwarded to predicate functions - the\n * attributeNameCheck predicate receives the tag name as its second\n * argument. A null/absent check never matches.\n *\n * @param check the configured tagNameCheck / attributeNameCheck value\n * @param name the name to test\n * @param args extra arguments forwarded to a predicate function\n * @return true if the check matches the name\n */\n const _matchesNameCheck = function _matchesNameCheck(check, name) {\n if (check instanceof RegExp) {\n return regExpTest(check, name);\n }\n if (check instanceof Function) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n return Boolean(check(name, ...args));\n }\n return false;\n };\n /**\n * Handle a node whose tag is forbidden or not allowlisted: keep\n * allowed custom elements (false return exits _sanitizeElements\n * early - the namespace and fallback-tag removal checks are\n * intentionally skipped for kept custom elements), else hoist\n * content per KEEP_CONTENT and remove.\n *\n * A kept custom element is the ONLY case in which this function\n * returns false, so the caller uses that return value to run the\n * afterSanitizeElements hook on the kept element and keep the\n * element-hook lifecycle consistent with normal allowlisted\n * elements (GHSA-c2j3-45gr-mqc4).\n *\n * @param currentNode the disallowed node\n * @param tagName the node's transformCaseFunc'd tag name\n * @return true if the node was removed, false if kept\n */\n const _sanitizeDisallowedNode = function _sanitizeDisallowedNode(currentNode, tagName, root) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n /* Keep content except for bad-listed elements.\n Use the cached prototype getters exclusively — the previous code\n had `|| currentNode.parentNode` / `|| currentNode.childNodes`\n fallbacks, but the cached getters always return the canonical\n value (or null for a real parent-less node), so the fallback\n path was dead in safe cases and a clobbering surface in unsafe\n ones. Falsy cached results stay falsy; the `if (childNodes &&\n parentNode)` check already gates correctly. */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode);\n const childNodes = getChildNodes(currentNode);\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n /* Hoist by moving each child up one level rather than deep-cloning\n it. Moving transfers every descendant exactly once, so a chain of\n nested disallowed elements costs O(n) instead of the O(n^2) that\n re-cloning the shrinking subtree at each level produced; it also\n empties the removed original, so `DOMPurify.removed` no longer\n pins whole subtrees. Moving preserves the in-place guarantee too:\n an original carrying already-queued resource events (`<img\n onerror>`, `<video>`/`<audio>` error, lazy/`onload`, …) is\n relocated and sanitised rather than left detached but still armed.\n The sole case that must clone is removing the walk root itself.\n The result is serialised from the root's subtree, so a restrictive\n ALLOWED_TAGS that strips the root (`body` on the string path) must\n leave the content inside it, which only cloning does. In IN_PLACE\n the root is pre-validated as an allowed tag and so is never removed\n here, so that path always takes the move branch.\n `childNodes` is live; a tail-to-head walk keeps `childNodes[i]`\n valid whether we move (drops the trailing entry) or clone (leaves\n the list intact). */\n for (let i = childCount - 1; i >= 0; --i) {\n const hoisted = currentNode === root ? cloneNode(childNodes[i], true) : childNodes[i];\n parentNode.insertBefore(hoisted, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n };\n /**\n * Fork a hook-mutable allowlist off its shared binding the first time a\n * (possibly lazily-installed) uponSanitize* hook is about to see it, so the\n * hook cannot widen the per-instance default or the setConfig binding by\n * reference and leak past the call. Returns the set unchanged once it is\n * already call-local, so repeated calls across elements are idempotent.\n *\n * @param hookList the uponSanitize* hook array for this event\n * @param set the current ALLOWED_TAGS / ALLOWED_ATTR binding\n * @param defaultSet the per-instance DEFAULT_ALLOWED_* constant\n * @param setConfigSet the captured setConfig() binding, or null\n * @return a call-local clone if a hook is present and set is still shared,\n * else set unchanged\n */\n const _forkSharedAllowlist = function _forkSharedAllowlist(hookList, set, defaultSet, setConfigSet) {\n if (hookList.length === 0) {\n return set;\n }\n return set === defaultSet || set === setConfigSet ? clone(set) : set;\n };\n /**\n * Shared guard for a node that a hook has detached from the walk tree,\n * used after each element-hook site in _sanitizeElements. Detaching is a\n * long-standing user pattern (issue #469; draw.io-style foreignObject\n * filtering). Per the cached, unclobberable parentNode getter the node is\n * genuinely out of the tree, so it can reach neither the serialized\n * output nor an IN_PLACE live tree; treat it as removed and stop\n * processing it. Without this guard, the unsafe-node / namespace checks\n * would call _forceRemove on a parentless node and hit the REPORT-3\n * fail-closed throw — which exists for nodes DOMPurify wants gone but\n * *cannot* detach (clobbered / parentless roots), the opposite of a node\n * that is already safely gone. The walk root is exempt: a detached\n * IN_PLACE root is legitimate input and must still be fully sanitized,\n * and a kill-decision on it must keep hitting the REPORT-3 throw.\n *\n * Nodes detached by hooks stay the hook's responsibility for placement:\n * they are not recorded in DOMPurify.removed, so the post-walk IN_PLACE\n * pass (which iterates DOMPurify.removed) does not reach them. But a\n * hook-detached subtree can still hold a queued resource-event handler -\n * e.g. an <img onload> that began loading when the caller built the live\n * tree - which fires in page scope after sanitize returns even though the\n * handler never reached the returned tree. That is the audit-5 F1 hazard,\n * and the documented node.remove() hook pattern walks straight into it.\n * So on the IN_PLACE path we neutralize the detached subtree inline,\n * stripping its non-allow-listed attributes before returning, exactly as\n * the post-walk pass does for _forceRemove'd subtrees.\n *\n * @param currentNode the node a hook may have detached\n * @param root the current walk root\n * @return true if the node is detached and now handled, false otherwise\n */\n const _handleHookDetachedNode = function _handleHookDetachedNode(currentNode, root) {\n if (currentNode === root || getParentNode(currentNode) !== null) {\n return false;\n }\n if (IN_PLACE) {\n _neutralizeSubtree(currentNode);\n }\n return true;\n };\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode, root) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n /* A hook may have detached the node - treat it as removed (see\n _handleHookDetachedNode for the full rationale). */\n if (_handleHookDetachedNode(currentNode, root)) {\n return true;\n }\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(_readNodeName(currentNode));\n /* Close the pre-walk clone-guard's timing gap: an uponSanitizeElement\n hook may have been installed after that guard sampled the hook arrays\n (e.g. lazily from beforeSanitizeElements), leaving ALLOWED_TAGS still\n aliasing a shared binding that a widening hook would mutate by\n reference. Fork it before exposing it to the hook. */\n ALLOWED_TAGS = _forkSharedAllowlist(hooks.uponSanitizeElement, ALLOWED_TAGS, DEFAULT_ALLOWED_TAGS, SET_CONFIG_ALLOWED_TAGS);\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* The uponSanitizeElement hook may have detached the node, exactly as\n above (see _handleHookDetachedNode for the full rationale). */\n if (_handleHookDetachedNode(currentNode, root)) {\n return true;\n }\n /* Remove mXSS vectors, processing instructions and risky comments */\n if (_isUnsafeNode(currentNode, tagName)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */\n if (FORBID_TAGS[tagName] || !(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && !ALLOWED_TAGS[tagName]) {\n const removed = _sanitizeDisallowedNode(currentNode, tagName, root);\n /* A false return means the node is a custom element kept via\n CUSTOM_ELEMENT_HANDLING - the only keep path through\n _sanitizeDisallowedNode. Run afterSanitizeElements on it so the\n element-hook lifecycle matches normal allowlisted elements: a\n security policy applied in this hook (e.g. stripping an attribute\n from every surviving element) must not silently skip kept custom\n elements (GHSA-c2j3-45gr-mqc4). This mirrors the normal-element\n tail below - the hook runs, then the walker's subsequent\n _sanitizeAttributes pass sanitizes the element's attributes. The\n deliberately skipped namespace and fallback-tag removal checks stay\n skipped; they are removal decisions, not the hook contract. */\n if (removed === false) {\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n }\n return removed;\n }\n /* Check whether element has a valid namespace.\n Realm-safe check (GHSA-hpcv-96wg-7vj8): use the cached Node.prototype\n nodeType getter rather than `instanceof Element`, which is realm-\n bound and short-circuits to false for any node minted in a different\n realm — letting a foreign-realm element with a forbidden namespace\n slip past the namespace check entirely. */\n const nt = _readNodeType(currentNode);\n if (nt === NODE_TYPE.element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(FALLBACK_TAG_CLOSE, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n const content = _stripTemplateExpressions(currentNode.textContent);\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* FORBID_ATTR must always win, even if ADD_ATTR predicate would allow it */\n if (FORBID_ATTR[lcName]) {\n return false;\n }\n /* Reject declarative-partial-updates patch-linkage attributes\n (https://github.com/WICG/declarative-partial-updates).\n Empirical note (Chrome 150, verified — see\n test/declarative-patch-probe-v3.html): expansion is NOT applied after\n sanitization. For the string path it fires during sanitize()'s own\n parse, so the walk sees and sanitizes the fully materialized expanded\n tree — teleports into MathML/SVG integration points included; a\n weaponized `<template for>`->`<img onerror>` comes back with the handler\n stripped. For the IN_PLACE path it fires on connection, before the walk.\n Either way DOMPurify is NOT blind to the patch.\n This removal is therefore defense-in-depth rather than the sole barrier:\n it prevents live linkage from surviving into the OUTPUT and re-expanding\n in the caller's context, and keeps behaviour deterministic if a future\n engine defers expansion. `for` is legitimate only on <label>/<output>;\n anywhere else (notably <template for>) it links the element to a patch\n target and teleports or removes an arbitrary DOM range by id/marker name.\n `patchsrc` fetches remote markup and is treated as a script-loading\n mechanism (CSP). Gated on SAFE_FOR_XML so the removal groups with the\n other structural-threat checks and stays overridable, consistent with\n the rest of the codebase. PI range markers are already removed by\n _isUnsafeNode. */\n if (_isPatchLinkageAttribute(lcName, lcTag)) {\n return false;\n }\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n const nameIsPermitted = ALLOWED_ATTR[lcName] || EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag);\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && regExpTest(DATA_ATTR$1, lcName)) {\n return true;\n }\n /* Allow valid aria-* attributes, the value is always URI safe */\n if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName)) {\n return true;\n }\n /* A name outside the allowlist is acceptable on custom-element terms\n only. The value checks below are intentionally skipped in that case:\n if the user supplied a tagNameCheck we also allow derived custom\n elements using the same test, and attributes passing the configured\n attributeNameCheck are allowed as custom elements define these at\n their own discretion. */\n if (!nameIsPermitted) {\n return (\n // Condition a) covers a basically valid custom element tag name whose\n // tag passes the configured tagNameCheck and whose attribute name\n // passes the configured attributeNameCheck ...\n _isBasicCustomElement(lcTag) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName, lcTag) ||\n // Condition b) covers an `is` attribute whose value passes the\n // configured tagNameCheck while customized built-in elements are\n // allowed.\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value)\n );\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n if (URI_SAFE_ATTRIBUTES[lcName]) {\n return true;\n }\n /* Check no script, data or unknown possibly unsafe URI\n unless we know URI values are safe for that attribute */\n if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) {\n return true;\n }\n /* Keep image data URIs alive if src/xlink:href is allowed */\n /* Further prevent gadget XSS for dynamically built script tags */\n if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) {\n return true;\n }\n /* Allow unknown protocols: This provides support for links that\n are handled by protocol handlers which may be unknown ahead of\n time, e.g. fb:, spotify: */\n if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) {\n return true;\n }\n /* Only an empty (binary) value remains safe at this point;\n anything else is presumed unsafe, do not add it back */\n return !value;\n };\n /* Names the HTML spec reserves from valid-custom-element-name; these must\n * never be treated as basic custom elements even when a permissive\n * CUSTOM_ELEMENT_HANDLING.tagNameCheck is configured. */\n const RESERVED_CUSTOM_ELEMENT_NAMES = addToSet({}, ['annotation-xml', 'color-profile', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'missing-glyph']);\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return !RESERVED_CUSTOM_ELEMENT_NAMES[stringToLowerCase(tagName)] && regExpTest(CUSTOM_ELEMENT$1, tagName);\n };\n /**\n * Wrap an attribute value in the matching Trusted Types object when\n * the active policy requires it. Namespaced attributes pass through\n * unchanged (no TT support yet, see\n * https://bugs.chromium.org/p/chromium/issues/detail?id=1305293).\n *\n * @param lcTag lowercase tag name of the containing element\n * @param lcName lowercase attribute name\n * @param namespaceURI the attribute's namespace, if any\n * @param value the attribute value to wrap\n * @return the value, wrapped when Trusted Types demand it\n */\n const _applyTrustedTypesToAttribute = function _applyTrustedTypesToAttribute(lcTag, lcName, namespaceURI, value) {\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function' && !namespaceURI) {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n return _createTrustedHTML(value);\n }\n case 'TrustedScriptURL':\n {\n return _createTrustedScriptURL(value);\n }\n }\n }\n return value;\n };\n /**\n * Write a modified attribute value back onto the element. On\n * success, re-probe for clobbering introduced by the new value and\n * remove the element when found; otherwise pop the removal entry\n * recorded by the earlier _removeAttribute (long-standing pairing\n * with the SANITIZE_NAMED_PROPS path - do not \"fix\" casually). On\n * failure, remove the attribute instead.\n *\n * @param currentNode the element carrying the attribute\n * @param name the attribute name as present on the element\n * @param namespaceURI the attribute's namespace, if any\n * @param value the new attribute value\n */\n const _setAttributeValue = function _setAttributeValue(currentNode, name, namespaceURI, value) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n const attributes = currentNode.attributes;\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n /* Same lazy-install guard as uponSanitizeElement (see there): fork the\n attribute allowlist off its shared binding before a hook can see it. */\n ALLOWED_ATTR = _forkSharedAllowlist(hooks.uponSanitizeAttribute, ALLOWED_ATTR, DEFAULT_ALLOWED_ATTR, SET_CONFIG_ALLOWED_ATTR);\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined\n };\n let l = attributes.length;\n const lcTag = transformCaseFunc(currentNode.nodeName);\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const name = attr.name,\n namespaceURI = attr.namespaceURI,\n attrValue = attr.value;\n const lcName = transformCaseFunc(name);\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name') && stringIndexOf(value, SANITIZE_NAMED_PROPS_PREFIX) !== 0) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode, attr);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n // Else: already prefixed, leave the attribute alone — the prefix is\n // itself the clobbering protection, and re-applying it is incorrect.\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value)) {\n _removeAttribute(name, currentNode, attr);\n continue;\n }\n /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n if (lcName === 'attributename' && stringMatch(value, 'href')) {\n _removeAttribute(name, currentNode, attr);\n continue;\n }\n /* Did the hooks force-keep the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode, attr);\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(SELF_CLOSING_TAG, value)) {\n _removeAttribute(name, currentNode, attr);\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n value = _stripTemplateExpressions(value);\n }\n /* Is `value` valid for this attribute? */\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode, attr);\n continue;\n }\n /* Handle attributes that require Trusted Types */\n value = _applyTrustedTypesToAttribute(lcTag, lcName, namespaceURI, value);\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n _setAttributeValue(currentNode, name, namespaceURI, value);\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM2 = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode, fragment);\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n /* Deep shadow DOM detected.\n Realm-safe check (GHSA-hpcv-96wg-7vj8): use nodeType against the\n DOCUMENT_FRAGMENT_NODE constant rather than instanceof, so we\n recurse into <template>.content from foreign realms too. */\n if (_isDocumentFragment(shadowNode.content)) {\n _sanitizeShadowDOM2(shadowNode.content);\n }\n /* An element iterated here may itself host an attached\n shadow root. The default NodeIterator does not enter shadow\n trees, so a shadow root nested inside template.content was\n previously reached by no walk at all (the pre-pass at\n _sanitizeAttachedShadowRoots descends via childNodes, which\n doesn't enter template.content; the template-content recursion\n above iterates the content but never inspected shadowRoot).\n Walk it explicitly. The nodeType guard avoids reading\n shadowRoot off text / comment / CDATA / PI nodes that the\n iterator also surfaces. */\n if (_readNodeType(shadowNode) === NODE_TYPE.element) {\n const innerSr = getShadowRoot(shadowNode);\n if (_isDocumentFragment(innerSr)) {\n _sanitizeAttachedShadowRoots(innerSr);\n _sanitizeShadowDOM2(innerSr);\n }\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n /**\n * _sanitizeAttachedShadowRoots\n *\n * Walks `root` and feeds every attached shadow root we encounter into\n * the existing _sanitizeShadowDOM pipeline. The default node iterator\n * does not descend into shadow trees, so nodes inside an attached\n * shadow root would otherwise be skipped entirely.\n *\n * Two real input paths put attached shadow roots in front of us:\n * 1. IN_PLACE on a DOM node that already has shadow roots attached.\n * 2. DOM-node input where importNode(dirty, true) deep-clones the\n * shadow root because it was created with `clonable: true`.\n *\n * This pass runs once, up front, so the main iteration loop (and the\n * existing _sanitizeShadowDOM template-content recursion) stay\n * untouched — string-input paths are not affected.\n *\n * @param root the subtree root to walk for attached shadow roots\n */\n const _sanitizeAttachedShadowRoots = function _sanitizeAttachedShadowRoots(root) {\n /* Iterative (explicit stack) rather than per-child recursion. DOM APIs\n impose no depth cap, so an attacker-shaped tree (JSON/CRDT/editor data\n built straight into the DOM — the IN_PLACE surface) deeper than the JS\n call-stack budget would otherwise overflow native recursion here and\n throw at the IN_PLACE entry pre-pass, before a single node is\n sanitized, leaving the caller's live tree untouched (fail-open). See\n campaign-3 F4. A heap stack keeps depth off the call stack.\n Each work item is either a node to descend into, or a deferred\n `_sanitizeShadowDOM` for an already-walked shadow root. The deferred\n form preserves the original post-order discipline: a shadow root's\n nested shadow roots are discovered before the outer shadow is\n sanitized (which may remove hosts). Pushes are in reverse of the\n desired processing order (LIFO): template content, then children, then\n the shadow-sanitize, then the shadow walk — so the order matches the\n previous recursion exactly. */\n const stack = [{\n node: root,\n shadow: null\n }];\n while (stack.length > 0) {\n const item = stack.pop();\n /* Deferred shadow-DOM sanitisation: runs after its subtree was walked. */\n if (item.shadow) {\n _sanitizeShadowDOM2(item.shadow);\n continue;\n }\n const node = item.node;\n const nodeType = _readNodeType(node);\n const isElement = nodeType === NODE_TYPE.element;\n /* (pushed last → processed first) Children, snapshotted in reverse so\n the first child is processed first. Snapshotting matters because a\n hook may detach siblings mid-walk. */\n const childNodes = getChildNodes(node);\n if (childNodes) {\n for (let i = childNodes.length - 1; i >= 0; --i) {\n stack.push({\n node: childNodes[i],\n shadow: null\n });\n }\n }\n /* (pushed before children → processed after them, matching the old\n \"template content last\" order) When the node is a <template>,\n descend into its content. */\n if (isElement) {\n const rootName = getNodeName ? getNodeName(node) : null;\n if (typeof rootName === 'string' && transformCaseFunc(rootName) === 'template') {\n const content = node.content;\n if (_isDocumentFragment(content)) {\n stack.push({\n node: content,\n shadow: null\n });\n }\n }\n }\n /* Shadow root (processed first): walk its subtree, then sanitise it.\n Realm-safe check (GHSA-hpcv-96wg-7vj8): nodeType-based detection\n rather than `instanceof DocumentFragment`, which is realm-bound and\n silently skipped foreign-realm shadow roots (e.g.\n iframe.contentDocument attachShadow). */\n if (isElement) {\n const sr = getShadowRoot(node);\n if (_isDocumentFragment(sr)) {\n /* Push the deferred sanitise first so it pops after the shadow\n walk we push next, i.e. nested shadow roots are discovered\n before this one is sanitised. */\n stack.push({\n node: null,\n shadow: sr\n }, {\n node: sr,\n shadow: null\n });\n }\n }\n }\n };\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n dirty = stringifyValue(dirty);\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n if (SET_CONFIG) {\n /* Persistent setConfig() path: _parseConfig is skipped, so the sets are\n * not re-derived per call. Restore them from the pristine bindings\n * captured at setConfig() time so a previous call's hook clone (mutated\n * below) does not carry over. */\n ALLOWED_TAGS = SET_CONFIG_ALLOWED_TAGS;\n ALLOWED_ATTR = SET_CONFIG_ALLOWED_ATTR;\n } else {\n _parseConfig(cfg);\n }\n /* Clone the hook-mutable allowlists before the walk whenever an\n * uponSanitize* hook is registered. The hook event exposes ALLOWED_TAGS\n * and ALLOWED_ATTR by reference (as allowedTags / allowedAttributes), so\n * a hook that widens them would otherwise mutate the shared set\n * permanently: across later calls and across every element. Cloning per\n * walk keeps documented in-call widening working while scoping it to the\n * call. A single guard for both config paths - the per-call path rebinds\n * the sets in _parseConfig each call, the persistent path restores them\n * from the captured bindings just above - so the two cannot diverge. */\n if (hooks.uponSanitizeElement.length > 0 || hooks.uponSanitizeAttribute.length > 0) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n if (hooks.uponSanitizeAttribute.length > 0) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n /* Clean up removed elements */\n DOMPurify.removed = [];\n /* Resolve IN_PLACE for this call without mutating persistent config.\n Writing the IN_PLACE closure variable here leaks under setConfig(),\n where _parseConfig is skipped on later calls: a single string call would\n disable in-place mode for every subsequent node call, returning a\n sanitized copy while leaving the caller's node — which in-place callers\n keep using and whose return value they ignore — unsanitized. REPORT-2. */\n const inPlace = IN_PLACE && typeof dirty !== 'string' && _isNode(dirty);\n if (inPlace) {\n /* Declarative-partial-updates / streaming pre-pass: sever every patch\n linkage across the live tree BEFORE the walk, so no patch can fire\n mid-walk and inject into an already-processed region. Runs first, so\n it also covers the forbidden/clobbered roots that throw below. */\n _neutralizePatchLinkage(dirty);\n /* Do some early pre-sanitization to avoid unsafe root nodes.\n Read nodeName through the cached prototype getter — a clobbering\n child named \"nodeName\" on the form root would otherwise shadow\n the property and let this check skip the root-allowlist\n validation entirely. */\n const nn = _readNodeName(dirty);\n if (typeof nn === 'string') {\n const tagName = transformCaseFunc(nn);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Fail closed on a live root: neutralize handlers/children before\n throwing, exactly as the mid-walk abort path does. */\n _neutralizeRoot(dirty);\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n /* Pre-flight the root through _isClobbered. The iterator-driven\n removal path can not detach a parent-less root: _forceRemove\n falls through to Element.prototype.remove(), which per spec\n is a no-op on a node with no parent. A clobbered root would\n then survive the main loop with its attributes uninspected,\n because _sanitizeAttributes early-returns on _isClobbered. The\n result would be an attacker-controlled form, complete with any\n event-handler attributes the caller passed in, handed back to\n the application unsanitized. Refuse to sanitize such a root\n the same way we refuse a forbidden tag. GHSA-r47g-fvhr-h676. */\n if (_isClobbered(dirty)) {\n /* Fail closed on a live clobbered root before throwing.\n _neutralizeRoot's reads are clobber-safe (cached getters); the\n form's non-clobbered descendants, e.g. an armed <img>, are scrubbed. */\n _neutralizeRoot(dirty);\n throw typeErrorCreate('root node is clobbered and cannot be sanitized in-place');\n }\n /* Sanitize attached shadow roots before the main iterator runs.\n The iterator does not descend into shadow trees. Same fail-closed\n barrier as the main walk (campaign-3 F2): a custom-element reaction\n inside a shadow root could abort this pre-pass before the walk runs,\n which would otherwise leave the entire live tree unsanitized. */\n try {\n _sanitizeAttachedShadowRoots(dirty);\n } catch (error) {\n _neutralizeRoot(dirty);\n throw error;\n }\n } else if (_isNode(dirty)) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n /* Clonable shadow roots are deep-cloned by importNode(); sanitize\n them before the main iterator runs, since the iterator does not\n descend into shadow trees. The walk routes every read through a\n cached prototype getter so clobbering descendants on a form root\n cannot hide a shadow host from this pass. */\n _sanitizeAttachedShadowRoots(importedNode);\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? _createTrustedHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n const walkRoot = inPlace ? dirty : body;\n /* Now start iterating over the created document.\n The walk runs inside an exception barrier (campaign-3 F2): a re-entrant\n engine/custom-element mutation can detach a node mid-walk so\n `_forceRemove`'s parentless guard throws, aborting the loop. Without the\n barrier the caller's in-place tree would be left half-sanitized with the\n unvisited tail still armed. _createNodeIterator itself is inside the\n barrier too: constructing the iterator dereferences the root's document,\n and any failure there (e.g. an exotic/clobbered root) must still fail\n closed rather than skip the neutralize. On any throw we fail closed -\n strip the in-place root bare - then rethrow so the existing throw\n contract is preserved. (String/DOM-copy paths never return the partial\n body, so the propagating throw is already fail-closed there.) */\n try {\n const nodeIterator = _createNodeIterator(walkRoot);\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode, walkRoot);\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n /* Shadow DOM detected, sanitize it.\n Realm-safe check (GHSA-hpcv-96wg-7vj8): nodeType-based detection\n instead of instanceof, so foreign-realm <template>.content is\n walked correctly. */\n if (_isDocumentFragment(currentNode.content)) {\n _sanitizeShadowDOM2(currentNode.content);\n }\n }\n } catch (error) {\n if (inPlace) {\n _neutralizeRoot(dirty);\n /* Nodes _forceRemove'd earlier in the aborted walk are already\n detached from the root, so _neutralizeRoot's subtree pass does not\n reach them. Defuse them too, mirroring the success-path loop below. */\n arrayForEach(DOMPurify.removed, entry => {\n if (entry.element) {\n _neutralizeSubtree(entry.element);\n }\n });\n }\n throw error;\n }\n /* If we sanitized `dirty` in-place, return it. */\n if (inPlace) {\n /* Fail-closed completion of the audit-5 F1 fix: every node removed from\n the caller's live tree is detached but may still hold a queued\n resource-event handler that fires in page scope after we return. The\n move-hoist covers only disallowed-tag KEEP_CONTENT removals; strip the\n non-allow-listed attributes off every other removed subtree (clobber,\n mXSS, namespace, comments, KEEP_CONTENT:false, …) so those handlers are\n cancelled before any event can fire. Runs synchronously, pre-return. */\n arrayForEach(DOMPurify.removed, entry => {\n if (entry.element) {\n _neutralizeSubtree(entry.element);\n }\n });\n if (SAFE_FOR_TEMPLATES) {\n _scrubTemplateExpressions2(dirty);\n }\n return dirty;\n }\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (SAFE_FOR_TEMPLATES) {\n _scrubTemplateExpressions2(body);\n }\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n serializedHTML = _stripTemplateExpressions(serializedHTML);\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? _createTrustedHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n SET_CONFIG_ALLOWED_TAGS = ALLOWED_TAGS;\n SET_CONFIG_ALLOWED_ATTR = ALLOWED_ATTR;\n };\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n SET_CONFIG_ALLOWED_TAGS = null;\n SET_CONFIG_ALLOWED_ATTR = null;\n // Drop any caller-supplied Trusted Types policy so it cannot poison later\n // `RETURN_TRUSTED_TYPE` output. The internal default policy (cached, and\n // never recreated — Trusted Types throws on duplicate names) is restored by\n // the next `_parseConfig`. See GHSA-vxr8-fq34-vvx9.\n trustedTypesPolicy = defaultTrustedTypesPolicy;\n emptyHTML = '';\n };\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n /* Reject unknown entry points. Without this, a non-hook key (e.g.\n * '__proto__') indexes off the prototype chain rather than a real\n * hook array, and arrayPush then writes to Object.prototype. Guard\n * with an own-property check against the known hook names. */\n if (!objectHasOwnProperty(hooks, entryPoint)) {\n return;\n }\n arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (!objectHasOwnProperty(hooks, entryPoint)) {\n return undefined;\n }\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n return arrayPop(hooks[entryPoint]);\n };\n DOMPurify.removeHooks = function (entryPoint) {\n if (!objectHasOwnProperty(hooks, entryPoint)) {\n return;\n }\n hooks[entryPoint] = [];\n };\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","/**\n * Icon Cache\n *\n * Shared SVG sanitize/parse pipeline and caches. URL-based icons (custom\n * libraries) are fetched once per URL; inline SVG sources (the built-in\n * NYSDS set) are parsed once per source string. Each consumer gets a\n * cloned SVGElement via `cloneNode(true)` so DOM nodes are never shared.\n */\n\nimport DOMPurify from \"dompurify\";\n\nconst urlCache = new Map<string, Promise<SVGElement>>();\nconst inlineCache = new Map<string, SVGElement>();\n\n/** Sanitize and parse SVG text. One pipeline for fetched and inline sources. */\nfunction sanitizeAndParse(text: string, context: string): SVGElement {\n // Sanitize before parsing — strips <script>, event handlers, javascript: hrefs\n const clean = DOMPurify.sanitize(text, {\n USE_PROFILES: { svg: true, svgFilters: true },\n FORBID_TAGS: [\"script\", \"use\"], // <use> can SSRF to external hrefs\n FORBID_ATTR: [\"onload\", \"onerror\", \"onbegin\", \"href\", \"xlink:href\"],\n });\n const parser = new DOMParser();\n const doc = parser.parseFromString(clean, \"image/svg+xml\");\n const svg = doc.documentElement;\n if (!(svg instanceof SVGElement)) {\n throw new Error(`Invalid SVG from ${context}`);\n }\n return svg;\n}\n\nasync function _doFetch(url: string): Promise<SVGElement> {\n const resp = await fetch(url);\n if (!resp.ok) {\n throw new Error(`Failed to load icon: ${resp.status}`);\n }\n return sanitizeAndParse(await resp.text(), url);\n}\n\n/** Fetch and parse an SVG from a URL. Returns a cloned SVGElement (safe for multiple consumers). */\nexport async function fetchIcon(url: string): Promise<SVGElement> {\n if (!urlCache.has(url)) {\n urlCache.set(url, _doFetch(url));\n }\n const svg = await urlCache.get(url)!;\n return svg.cloneNode(true) as SVGElement;\n}\n\n/**\n * Parse an inline SVG source string. Results are cached by source content,\n * so repeated renders of the same icon sanitize/parse once. Returns a\n * cloned SVGElement (safe for multiple consumers).\n */\nexport function parseIcon(source: string): SVGElement {\n let svg = inlineCache.get(source);\n if (!svg) {\n svg = sanitizeAndParse(source, \"inline SVG source\");\n inlineCache.set(source, svg);\n }\n return svg.cloneNode(true) as SVGElement;\n}\n\n/** Clear one URL entry, or all cached icons (URL and inline) when no URL is given. */\nexport function clearIconCache(url?: string): void {\n if (url) {\n urlCache.delete(url);\n } else {\n urlCache.clear();\n inlineCache.clear();\n }\n}\n","import { html, unsafeCSS } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { NysElement } from \"@nysds/internals\";\nimport {\n getIconLibrary,\n watchIconLibrary,\n unwatchIconLibrary,\n NysIconWatcher,\n} from \"./icon-library-registry\";\nimport { fetchIcon, parseIcon } from \"./icon-cache\";\n// @ts-ignore: SCSS module imported via bundler as inline\nimport styles from \"./nys-icon.scss?inline\";\n\n/**\n * Renders SVG icons from a registered icon library. The built-in NYSDS icon\n * library (Material Symbols) is the default. Custom libraries (Font Awesome,\n * Material Icons, etc.) can be registered via `registerIconLibrary()`.\n *\n * Pass `name` to select an icon. Use `library` to choose a registered library\n * (defaults to `\"default\"` for NYSDS icons). Use `ariaLabel` to make the icon\n * accessible (removes `aria-hidden`). Supports size presets, rotation,\n * flipping, and custom colors.\n *\n * @summary SVG icon with swappable library support, size, rotation, and color options.\n * @element nys-icon\n *\n * @example Basic\n * ```html\n * <nys-icon name=\"check_circle\"></nys-icon>\n * ```\n *\n * @example ARIA Label\n * ```html\n * <nys-icon\n * name=\"edit_square\"\n * ariaLabel=\"Edit content\"\n * ></nys-icon>\n * ```\n *\n * @example Size relative\n * ```html\n * <nys-icon\n * name=\"edit_square\"\n * size=\"4xl\"\n * ></nys-icon>\n * ```\n *\n * @example Size literal\n * ```html\n * <nys-icon\n * name=\"edit_square\"\n * size=\"24\"\n * ></nys-icon>\n * ```\n *\n * @example Color\n * ```html\n * <nys-icon\n * name=\"edit_square\"\n * color=\"#db117d\"\n * ></nys-icon>\n * ```\n *\n * @example Rotate\n * ```html\n * <nys-icon\n * name=\"edit_square\"\n * rotate=\"20\"\n * ></nys-icon>\n * ```\n *\n * @example Flip\n * ```html\n * <nys-icon\n * name=\"edit_square\"\n * flip=\"vertical\"\n * ></nys-icon>\n * ```\n *\n * @example External Library - Font Awesome\n * ```html\n * <nys-icon name=\"heart\" library=\"fa\"></nys-icon>\n * ```\n *\n * @render External Library - Font Awesome\n * ```html\n * <nys-icon name=\"heart\" library=\"fa\"></nys-icon>\n * <script data-scope=\"module\">\n * registerIconLibrary(\"fa\", {\n * resolver: (name) =>\n * `https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/svgs/solid/${name}.svg`,\n * mutator: (svg) => {\n * svg.setAttribute(\"fill\", \"currentColor\");\n * },\n * });\n * </script>\n * ```\n *\n * @example External Library - Material\n * ```html\n * <nys-icon name=\"favorite\" library=\"material\"></nys-icon>\n * ```\n *\n *\n * @render External Library - Material\n * ```html\n * <nys-icon name=\"favorite\" library=\"material\"></nys-icon>\n * <script data-scope=\"module\">\n * registerIconLibrary(\"material\", {\n * resolver: (name) =>\n * `https://fonts.gstatic.com/s/i/short-term/release/materialsymbolsoutlined/${name}/default/24px.svg`,\n * mutator: (svg) => {\n * svg.setAttribute(\"fill\", \"currentColor\");\n * },\n * });\n * </script>\n * ```\n */\nexport class NysIcon extends NysElement implements NysIconWatcher {\n static styles = unsafeCSS(styles);\n\n /** Icon name to resolve from the selected library. Required. */\n @property({ type: String, reflect: true }) name = \"\";\n\n /** Which registered icon library to use. Defaults to the built-in NYSDS library. */\n @property({ type: String, reflect: true }) library = \"default\";\n\n /** Accessible label. When set, removes `aria-hidden` and adds `aria-label` to the SVG. */\n @property({ type: String }) ariaLabel = \"\";\n\n /** Rotation in degrees. Applied via CSS `rotate`. */\n @property({ type: String }) rotate = \"0\";\n\n /** Flip direction: `horizontal`, `vertical`, or empty for none. */\n @property({ type: String }) flip = \"\";\n\n /** Icon color. Accepts any CSS color value. Defaults to `currentcolor`. */\n @property({ type: String }) color = \"\";\n\n /**\n * Icon size. Semantic sizes: `xs`-`5xl`. Pixel sizes: `12`-`50`.\n * @default \"md\"\n */\n @property({ type: String }) size:\n | \"xs\"\n | \"sm\"\n | \"md\"\n | \"lg\"\n | \"xl\"\n | \"2xl\"\n | \"3xl\"\n | \"4xl\"\n | \"5xl\"\n | \"12\"\n | \"14\"\n | \"16\"\n | \"18\"\n | \"20\"\n | \"24\"\n | \"32\"\n | \"40\"\n | \"50\" = \"md\";\n\n @state() private _svg: SVGElement | null = null;\n\n /** Monotonically increasing token so stale async fetches are discarded. */\n private _loadSeq = 0;\n\n /** Promise for the in-flight icon load. */\n private _loadPromise: Promise<void> | null = null;\n\n /** Resolves when the current icon load (if any) is complete. */\n get updateComplete(): Promise<boolean> {\n return (async () => {\n const result = await super.updateComplete;\n await this._loadPromise;\n return result;\n })();\n }\n\n connectedCallback() {\n // super.connectedCallback() (NysElement) auto-assigns an id when\n // one is not provided (prefix = localName -> \"nys-icon-<ts>-<n>\"). The host\n // role/label/aria-hidden are reflected dynamically in _reflectHostSemantics\n // (they depend on ariaLabel), so defaultRole stays null. Seed the host as\n // decorative (aria-hidden) so an unlabeled icon — including one whose name is\n // invalid and renders no SVG — is removed from the accessibility tree.\n super.connectedCallback();\n this._reflectHostSemantics();\n watchIconLibrary(this.library, this);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n unwatchIconLibrary(this.library, this);\n }\n\n /** Called by the icon library registry when the current library changes. */\n redraw() {\n this._loadIcon();\n }\n\n /**\n * Lit calls firstUpdated after the first render, once all reactive\n * properties (including those set from the template) are resolved.\n * This guarantees the initial _loadIcon runs with the correct name\n * and library values, avoiding the race where updated() might not\n * fire for properties that equal their defaults.\n */\n firstUpdated() {\n this._loadIcon();\n }\n\n private static _validName = /^[a-zA-Z0-9_-]+$/;\n\n updated(changedProps: Map<string, unknown>) {\n if (changedProps.has(\"name\") && !NysIcon._validName.test(this.name)) {\n console.warn(`nys-icon: invalid name \"${this.name}\" — ignored`);\n this._svg = null;\n return;\n }\n if (changedProps.has(\"name\") || changedProps.has(\"library\")) {\n if (changedProps.has(\"library\")) {\n const oldLib = changedProps.get(\"library\") as string;\n if (oldLib) unwatchIconLibrary(oldLib, this);\n watchIconLibrary(this.library, this);\n }\n this._loadIcon();\n }\n\n // Re-apply attributes when visual props change (without re-fetching)\n if (\n this._svg &&\n (changedProps.has(\"ariaLabel\") ||\n changedProps.has(\"rotate\") ||\n changedProps.has(\"flip\") ||\n changedProps.has(\"color\") ||\n changedProps.has(\"size\"))\n ) {\n this._applyAttributes(this._svg);\n } else if (changedProps.has(\"ariaLabel\")) {\n // Keep host semantics in sync even when no SVG is currently rendered\n // (e.g. invalid/empty name) so toggling ariaLabel still updates the host.\n this._reflectHostSemantics();\n }\n }\n\n private _loadIcon() {\n // Bump the sequence token; any in-flight fetch with an older token\n // will be discarded when it resolves.\n const seq = ++this._loadSeq;\n\n this._loadPromise = (async () => {\n const lib = getIconLibrary(this.library);\n if (!lib || !this.name) {\n this._svg = null;\n return;\n }\n\n try {\n // Resolvers may be async (the built-in set loads lazily on first use).\n const resolution = await lib.resolver(this.name);\n if (seq !== this._loadSeq) return;\n if (!resolution) {\n this._svg = null;\n return;\n }\n\n const svg =\n typeof resolution === \"string\"\n ? await fetchIcon(resolution)\n : resolution.type === \"url\"\n ? await fetchIcon(resolution.href)\n : parseIcon(resolution.content);\n\n // Discard if a newer _loadIcon call was made while we were loading.\n if (seq !== this._loadSeq) return;\n lib.mutator?.(svg);\n this._applyAttributes(svg);\n this._svg = svg;\n } catch {\n if (seq === this._loadSeq) this._svg = null;\n }\n })();\n }\n\n private _applyAttributes(svg: SVGElement) {\n svg.setAttribute(\"role\", \"img\");\n if (this.ariaLabel) {\n svg.setAttribute(\"aria-label\", this.ariaLabel);\n svg.removeAttribute(\"aria-hidden\");\n } else {\n svg.setAttribute(\"aria-hidden\", \"true\");\n svg.removeAttribute(\"aria-label\");\n }\n\n if (this.rotate && this.rotate !== \"0\") {\n svg.style.rotate = `${this.rotate}deg`;\n } else {\n svg.style.removeProperty(\"rotate\");\n }\n svg.style.color = this.color || \"currentcolor\";\n svg.classList.add(`nys-icon--${this.size}`);\n svg.classList.add(`nys-icon--svg`);\n\n if (this.flip) {\n svg.classList.add(`nys-icon--flip-${this.flip}`);\n }\n\n // Mirror the icon's accessible semantics onto the host element. The SVG\n // lives in shadow DOM, where some AT/browser combinations do not reliably\n // surface inner role=\"img\"/aria-label. Reflecting on the host guarantees a\n // labeled icon is announced as an image (and that a decorative icon is\n // fully removed from the accessibility tree). WCAG 1.1.1 / 4.1.2.\n this._reflectHostSemantics();\n }\n\n /**\n * Reflects the icon's accessible state onto the host:\n * - Labeled icon -> role=\"img\" + aria-label, no aria-hidden.\n * - Decorative -> aria-hidden=\"true\", no role/label.\n *\n * These are reflected as host *attributes* (rather than via\n * ElementInternals) on purpose: aria-hidden / role / aria-label in\n * attribute form have universal, consistent assistive-technology support,\n * whereas AT support for these states set through ElementInternals is still\n * uneven across browser/screen-reader combinations. The host role/label\n * therefore depend on runtime state (ariaLabel), so defaultRole stays null.\n */\n private _reflectHostSemantics() {\n if (this.ariaLabel) {\n this.setAttribute(\"role\", \"img\");\n this.setAttribute(\"aria-label\", this.ariaLabel);\n this.removeAttribute(\"aria-hidden\");\n } else {\n this.removeAttribute(\"role\");\n this.removeAttribute(\"aria-label\");\n this.setAttribute(\"aria-hidden\", \"true\");\n }\n }\n\n render() {\n return this._svg ? html`${this._svg}` : null;\n }\n}\n\n/*\n Conditionally register the custom element.\n This ensure the custom element is registered only once to avoid duplication, especially in environments like Storybook where this component may be used as a dependency.\n */\nif (!customElements.get(\"nys-icon\")) {\n customElements.define(\"nys-icon\", NysIcon);\n}\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { NysFormControlElement } from \"@nysds/internals\";\n// This element is rendered inside this component's shadow DOM as the default\n// prefix/suffix/circle icon content, so it must be registered whenever\n// nys-button is used. Importing it here (intentional side effect) guarantees\n// it always renders.\nimport \"@nysds/nys-icon\";\n// @ts-ignore: SCSS module imported via bundler as inline\nimport styles from \"./nys-button.scss?inline\";\n\n/**\n * A button for actions like saving, submitting, or navigating. Form-associated with full keyboard support.\n *\n * Use `filled` for primary actions (one per section), `outline` for secondary, `ghost` for tertiary,\n * `text` for inline. Set `href` to render as a navigation link.\n *\n * ARIA belongs on the component's props, not on the `<nys-button>` host. The host has no role,\n * so attributes placed there are not mapped into the accessibility tree and never reach the\n * internal `<button>`. For a disclosure trigger use `ariaExpanded` together with `ariaControls`.\n *\n * @summary Button for actions and CTAs with variants, sizes, and icon support.\n * @element nys-button\n *\n * @slot - Button label text. Use as fallback when `label` prop is not provided.\n * @slot prefix-icon - Icon before label. Not shown for `text` variant.\n * @slot suffix-icon - Icon after label. Not shown for `text` variant.\n * @slot circle-icon - Icon for circle mode. Overrides `icon` prop.\n *\n * @cssprop [--nys-button-color] - Text color of the button label.\n * @cssprop [--nys-button-color--hover] - Text color when hovered.\n * @cssprop [--nys-button-color--active] - Text color when active/pressed.\n * @cssprop [--nys-button-background-color] - Background color of the button.\n * @cssprop [--nys-button-background-color--hover] - Background color when hovered.\n * @cssprop [--nys-button-background-color--active] - Background color when active/pressed.\n * @cssprop [--nys-button-border-color] - Border color of the button.\n * @cssprop [--nys-button-border-color--hover] - Border color when hovered.\n * @cssprop [--nys-button-border-color--active] - Border color when active/pressed.\n *\n * @fires nys-click - Fired when the button is clicked (mouse or keyboard). Not fired when disabled.\n * @fires nys-focus - Fired when the button receives focus.\n * @fires nys-blur - Fired when the button loses focus.\n *\n * @example Basic\n * ```html\n * <nys-button label=\"Button\" variant=\"filled\"></nys-button>\n * ```\n *\n * @example Variant Outline\n * ```html\n * <nys-button label=\"Button\" variant=\"outline\"></nys-button>\n * ```\n *\n * @example Variant Ghost\n * ```html\n * <nys-button label=\"Button\" variant=\"ghost\"></nys-button>\n * ```\n *\n * @example Variant Text\n * ```html\n * <nys-button label=\"Button\" variant=\"text\"></nys-button>\n * ```\n *\n * @example Prefix Icon\n * ```html\n * <nys-button label=\"Previous\" prefixIcon=\"chevron_left\"></nys-button>\n * ```\n *\n * @example Suffix Icon\n * ```html\n * <nys-button label=\"Next\" suffixIcon=\"chevron_right\"></nys-button>\n * ```\n *\n * @example Slotted Icons\n * ```html\n * <nys-button label=\"Slotted icons\">\n * <nys-icon color=\"#db117d\" slot=\"prefix-icon\" name=\"chevron_left\"></nys-icon>\n * <nys-icon color=\"#db117d\" slot=\"suffix-icon\" name=\"chevron_right\"></nys-icon>\n * </nys-button>\n * ```\n *\n * @example Circle icon button\n * ```html\n * <nys-button circle icon=\"close\" label=\"Close dialog\"></nys-button>\n * ```\n *\n * @example Size Small\n * ```html\n * <nys-button label=\"Small\" size=\"sm\"></nys-button>\n * ```\n * @example Size Large\n * ```html\n * <nys-button label=\"Large\" size=\"lg\"></nys-button>\n * ```\n *\n * @example Full width\n * ```html\n * <nys-button label=\"Full width\" fullWidth></nys-button>\n * ```\n *\n * @example Inverted\n * ```html\n * <nys-button label=\"Inverted\" inverted></nys-button>\n * ```\n * @render Inverted\n * ```html\n * <div style=\"background: #1b1b1b; padding: 1rem;\">\n * <nys-button label=\"Inverted\" inverted></nys-button>\n * </div>\n * ```\n *\n * @example Disabled\n * ```html\n * <nys-button label=\"Disabled\" disabled></nys-button>\n * ```\n *\n * @example Href\n * ```html\n * <nys-button label=\"Visit NY.gov\" href=\"https://www.ny.gov/\" target=\"_blank\" suffixIcon=\"open_in_new\"></nys-button>\n * ```\n *\n * @example Type\n * ```html\n * <nys-button type=\"submit\" label=\"Save Changes\" variant=\"filled\"></nys-button>\n * ```\n *\n * @example Disclosure trigger\n * ```html\n * <nys-button\n * label=\"Here's how you know\"\n * ariaExpanded=\"false\"\n * ariaControls=\"trust-bar\"\n * ></nys-button>\n * ```\n */\n\nexport class NysButton extends NysFormControlElement {\n static styles = unsafeCSS(styles);\n static shadowRootOptions = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n /**\n * Unique identifier. Auto-generated if not provided.\n */\n @property({ type: String, reflect: true }) id = \"\";\n\n /**\n * Name for form submission.\n */\n @property({ type: String, reflect: true }) name = \"\";\n\n /**\n * Button height: `sm` (40px) for dense UIs, `md` (48px, default) for standard use, `lg` (56px) for prominent CTAs.\n * @default \"md\"\n */\n @property({ type: String, reflect: true }) size: \"sm\" | \"md\" | \"lg\" = \"md\";\n\n /**\n * Expands button to fill container width. Use for mobile layouts or stacked button groups.\n * @default false\n */\n @property({ type: Boolean, reflect: true }) fullWidth = false;\n\n /**\n * Visual style: `filled` for primary (one per section), `outline` for secondary, `ghost` for tertiary, `text` for inline actions. Avoid `text` for navigation.\n * @default \"filled\"\n */\n @property({ type: String, reflect: true }) variant:\n | \"filled\"\n | \"outline\"\n | \"ghost\"\n | \"text\" = \"filled\";\n\n /**\n * Adjusts colors for dark backgrounds.\n * @default false\n */\n @property({ type: Boolean, reflect: true }) inverted = false;\n\n /**\n * Visible button text. Use sentence case, action-oriented text (e.g., \"Save Draft\"). In `circle` mode it is visually hidden but still exposed to assistive tech as the accessible name.\n */\n @property({ type: String }) label = \"\";\n\n /**\n * ID of controlled element (e.g., dropdown or modal). Sets `aria-controls`.\n *\n * Set this on `<nys-button>` rather than putting `aria-controls` on the host:\n * the host has no role, so ARIA placed there is not mapped into the\n * accessibility tree and never reaches the internal `<button>`.\n */\n @property({ type: String }) ariaControls = \"\";\n\n /**\n * Disclosure state for buttons that show/hide content. Sets `aria-expanded`\n * on the internal `<button>`/`<a>`.\n *\n * Use `\"false\"` when the controlled content is collapsed and `\"true\"` when it\n * is expanded, updating it every time the content toggles. Leave unset for\n * buttons that are not disclosure triggers — an `aria-expanded` that never\n * changes is worse than none. Pair with `ariaControls` pointing at the\n * element being shown or hidden.\n *\n * Setting `aria-expanded` directly on the `<nys-button>` host does nothing:\n * a custom element with no role does not map its ARIA attributes into the\n * accessibility tree, and host ARIA does not cross into the shadow root.\n *\n * @example\n * ```html\n * <nys-button\n * label=\"Here's how you know\"\n * ariaExpanded=\"false\"\n * ariaControls=\"trust-bar\"\n * ></nys-button>\n * ```\n */\n @property({ type: String }) ariaExpanded: \"true\" | \"false\" | \"\" = \"\";\n\n /**\n * Marks this button as the current item within a set of related controls — the current\n * page of a pagination control, the current step of a wizard. Sets `aria-current` on the\n * internal `<button>`/`<a>`.\n *\n * Use `\"page\"` inside a pagination landmark, `\"step\"` inside a step indicator, and\n * `\"true\"` when no more specific token fits. Only one control in a set is ever current:\n * leave the property unset on all the others rather than setting `\"false\"`, which the\n * spec reads as \"explicitly not current\" and adds nothing.\n *\n * Setting `aria-current` directly on the `<nys-button>` host does nothing: a custom\n * element with no role does not map its ARIA attributes into the accessibility tree,\n * and host ARIA does not cross into the shadow root.\n *\n * @example\n * ```html\n * <nys-button label=\"3\" ariaCurrent=\"page\"></nys-button>\n * ```\n */\n @property({ type: String }) ariaCurrent:\n | \"page\"\n | \"step\"\n | \"location\"\n | \"date\"\n | \"time\"\n | \"true\"\n | \"false\"\n | \"\" = \"\";\n\n /**\n * Material Symbol icon before label. Not shown for `circle` mode.\n */\n @property({ type: String }) prefixIcon = \"\";\n\n /**\n * Material Symbol icon after label. Use `chevron_down` for dropdowns, `open_in_new` for external links. Not shown for `circle` mode.\n */\n @property({ type: String }) suffixIcon = \"\";\n\n /**\n * Renders circular icon-only button. Requires `icon` prop. `label` is rendered as visually-hidden text for the accessible name.\n * @default false\n */\n @property({ type: Boolean, reflect: true }) circle = false;\n\n /**\n * Icon for circle mode. Required when `circle` is true. Scales with size (sm=24px, md=32px, lg=40px).\n */\n @property({ type: String }) icon = \"\";\n\n /**\n * Prevents interaction. Avoid disabling without explanation—show validation errors instead.\n * @default false\n */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /**\n * Form `id` to associate with. Use when button is outside the form element.\n */\n @property({ type: String, reflect: true }) form: string | null = null;\n\n /**\n * Value submitted with form data. Only used when `type=\"submit\"`.\n */\n @property({ type: String }) value = \"\";\n\n /**\n * ID(s) of element(s) describing this button. Sets `aria-describedby`.\n */\n @property({ type: String }) ariaDescribedBy = \"\";\n\n /**\n * Form behavior: `button` (default, no form action), `submit` (submits form), `reset` (resets form). Always set explicitly to avoid unintended submissions.\n * @default \"button\"\n */\n @property({ type: String, reflect: true }) type:\n | \"submit\"\n | \"reset\"\n | \"button\" = \"button\";\n\n /**\n * Click handler. Use instead of `@click` to ensure keyboard accessibility.\n */\n @property({ attribute: false }) onClick: ((event: Event) => void) | null =\n null;\n\n /**\n * URL to navigate to. Renders as `<a>` tag. Omit for action buttons.\n */\n @property({ type: String }) href = \"\";\n\n /**\n * Link target: `_self` (same tab), `_blank` (new tab—add `suffixIcon=\"open_in_new\"`), `_parent`, `_top`, or frame name.\n * @default \"_self\"\n */\n @property({ type: String, reflect: true }) target:\n | \"_self\"\n | \"_blank\"\n | \"_parent\"\n | \"_top\"\n | \"framename\" = \"_self\";\n\n @state() private _hasPrefixSlot = false;\n @state() private _hasSuffixSlot = false;\n @state() private _hasCircleSlot = false;\n\n /**\n * Functions\n * --------------------------------------------------------------------------\n *\n * Form association, ElementInternals, and id generation are provided by\n * NysFormControlElement (@nysds/internals). super.connectedCallback() assigns\n * an id when one is not provided (prefix = the element's localName).\n */\n\n private _onPrefixSlotChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n this._hasPrefixSlot = slot.assignedElements({ flatten: true }).length > 0;\n }\n\n private _onSuffixSlotChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n this._hasSuffixSlot = slot.assignedElements({ flatten: true }).length > 0;\n }\n\n private _onCircleSlotChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n this._hasCircleSlot = slot.assignedElements({ flatten: true }).length > 0;\n }\n\n private _manageFormAction() {\n // If an onClick function is provided, call it\n if (typeof this.onClick === \"function\" && this.onClick !== null) {\n this.onClick(new Event(\"click\")); // Call user-provided onClick function with a fake click event\n }\n\n // If part of a form, perform the corresponding action based on button's \"type\"\n const form = this.internals?.form;\n\n if (form) {\n switch (this.type) {\n case \"submit\":\n form.requestSubmit();\n break;\n case \"reset\":\n form.reset();\n break;\n case \"button\":\n }\n }\n }\n\n /**\n * Event Handlers\n * --------------------------------------------------------------------------\n */\n\n private _handleFocus() {\n this.dispatchEvent(\n new Event(\"nys-focus\", { bubbles: true, composed: true }),\n );\n }\n\n private _handleBlur() {\n const button = this.shadowRoot?.querySelector(\".nys-button\");\n button?.classList.remove(\"active-focus\");\n this.dispatchEvent(\n new Event(\"nys-blur\", { bubbles: true, composed: true }),\n );\n }\n\n private _handleClick(event: Event) {\n if (this.disabled) {\n event.preventDefault();\n return;\n }\n this._manageFormAction();\n this.dispatchEvent(\n new Event(\"nys-click\", { bubbles: true, composed: true }),\n );\n }\n\n private _handleKeydown(e: KeyboardEvent) {\n if (\n e.code === \"Space\" ||\n e.code === \"Enter\" ||\n e.key === \" \" ||\n e.key === \"Enter\"\n ) {\n if (this.disabled) return;\n\n e.preventDefault();\n const btn = this.renderRoot.querySelector(\".nys-button\");\n btn?.classList.add(\"active\");\n setTimeout(() => btn?.classList.remove(\"active\"), 150);\n\n if (this.href) {\n // Click the internal <a> so native navigation happens\n const linkEl = this.renderRoot.querySelector(\n \"a.nys-button\",\n ) as HTMLAnchorElement;\n if (linkEl) {\n linkEl.click();\n }\n } else {\n this._handleAnyAttributeFunction();\n this._handleClick(e);\n }\n }\n }\n\n private _handleKeyup(e: KeyboardEvent) {\n if (\n e.code === \"Space\" ||\n e.code === \"Enter\" ||\n e.key === \" \" ||\n e.key === \"Enter\"\n ) {\n this.renderRoot.querySelector(\".nys-button\")?.classList.remove(\"active\");\n }\n }\n\n /**\n * Handles inline onclick attributes for keyboard activation.\n *\n * Native clicks execute inline onclick attributes automatically, but\n * keyboard activation of the custom element does not trigger that native\n * behavior. Dispatching a synthetic click lets the browser's own inline\n * event handler mechanism execute any onclick attribute safely without\n * eval() or new Function().\n */\n private _handleAnyAttributeFunction() {\n this.click();\n }\n\n public focus(options?: FocusOptions) {\n const innerEl = this.renderRoot.querySelector(\n this.href ? \"a.nys-button\" : \"button.nys-button\",\n ) as HTMLElement | null;\n\n if (innerEl) {\n innerEl.focus(options);\n } else {\n // fallback: focus host\n super.focus(options);\n }\n }\n\n render() {\n return html`\n ${this.href\n ? html`\n <div class=\"nys-button__linkwrapper\">\n <a\n class=\"nys-button\"\n name=${ifDefined(this.name ? this.name : undefined)}\n ?disabled=${this.disabled}\n aria-disabled=\"${this.disabled ? \"true\" : \"false\"}\"\n value=${ifDefined(this.value ? this.value : undefined)}\n href=${this.href}\n target=${this.target}\n @click=${this._handleClick}\n @focus=\"${this._handleFocus}\"\n @blur=\"${this._handleBlur}\"\n @keydown=\"${this._handleKeydown}\"\n @keyup=\"${this._handleKeyup}\"\n aria-describedby=${ifDefined(this.ariaDescribedBy || undefined)}\n aria-expanded=${ifDefined(this.ariaExpanded || undefined)}\n aria-current=${ifDefined(this.ariaCurrent || undefined)}\n >\n <slot\n name=\"prefix-icon\"\n @slotchange=${this._onPrefixSlotChange}\n ?hidden=${!this.prefixIcon && !this._hasPrefixSlot}\n >\n ${this.prefixIcon\n ? html`<nys-icon\n size=\"16\"\n name=${this.prefixIcon}\n ></nys-icon>`\n : \"\"}\n </slot>\n ${this.circle\n ? html`<div class=\"nys-button__text sr-only\">\n ${this.label}\n </div>`\n : this.label\n ? html`<div class=\"nys-button__text\">${this.label}</div>`\n : html` <slot class=\"nys-button__default-slot\"></slot> `}\n <slot\n name=\"suffix-icon\"\n @slotchange=${this._onSuffixSlotChange}\n ?hidden=${!this.suffixIcon && !this._hasSuffixSlot}\n >\n ${this.suffixIcon\n ? html`<nys-icon\n size=\"16\"\n name=${this.suffixIcon}\n ></nys-icon>`\n : \"\"}\n </slot>\n <slot\n name=\"circle-icon\"\n @slotchange=${this._onCircleSlotChange}\n ?hidden=${!this.circle ||\n (!this.icon && !this._hasCircleSlot)}\n >\n ${this.icon\n ? html`<nys-icon\n size=${this.size === \"sm\"\n ? \"24\"\n : this.size === \"lg\"\n ? \"40\"\n : \"32\"}\n name=${this.icon}\n ></nys-icon>`\n : \"\"}\n </slot>\n </a>\n </div>\n `\n : html`\n <button\n class=\"nys-button\"\n name=${ifDefined(this.name ? this.name : undefined)}\n ?disabled=${this.disabled}\n form=${ifDefined(this.form || undefined)}\n value=${ifDefined(this.value ? this.value : undefined)}\n type=${this.type}\n aria-controls=${ifDefined(this.ariaControls || undefined)}\n @click=${this._handleClick}\n @focus=${this._handleFocus}\n @blur=${this._handleBlur}\n @keydown=${this._handleKeydown}\n @keyup=${this._handleKeyup}\n aria-describedby=${ifDefined(this.ariaDescribedBy || undefined)}\n aria-expanded=${ifDefined(this.ariaExpanded || undefined)}\n aria-current=${ifDefined(this.ariaCurrent || undefined)}\n >\n <slot\n name=\"prefix-icon\"\n @slotchange=${this._onPrefixSlotChange}\n ?hidden=${!this.prefixIcon && !this._hasPrefixSlot}\n >\n ${this.prefixIcon\n ? html`<nys-icon\n size=\"16\"\n name=${this.prefixIcon}\n ></nys-icon>`\n : \"\"}\n </slot>\n ${this.circle\n ? html`<div class=\"nys-button__text sr-only\">\n ${this.label}\n </div>`\n : this.label\n ? html`<div class=\"nys-button__text\">${this.label}</div>`\n : html` <slot class=\"nys-button__default-slot\"></slot> `}\n <slot\n name=\"suffix-icon\"\n @slotchange=${this._onSuffixSlotChange}\n ?hidden=${!this.suffixIcon && !this._hasSuffixSlot}\n >\n ${this.suffixIcon\n ? html`<nys-icon\n size=\"16\"\n name=${this.suffixIcon}\n ></nys-icon>`\n : \"\"}\n </slot>\n <slot\n name=\"circle-icon\"\n @slotchange=${this._onCircleSlotChange}\n ?hidden=${!this.circle || (!this.icon && !this._hasCircleSlot)}\n >\n ${this.icon\n ? html`<nys-icon\n size=${this.size === \"sm\"\n ? \"24\"\n : this.size === \"lg\"\n ? \"40\"\n : \"32\"}\n name=${this.icon}\n ></nys-icon>`\n : \"\"}\n </slot>\n </button>\n `}\n `;\n }\n}\n\nif (!customElements.get(\"nys-button\")) {\n customElements.define(\"nys-button\", NysButton);\n}\n","import { html, unsafeCSS } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { NysElement } from \"@nysds/internals\";\n// @ts-ignore: SCSS module imported via bundler as inline\nimport styles from \"./nys-tooltip.scss?inline\";\n\n/**\n * Shows contextual help text on hover/focus. Auto-positions to stay within viewport and supports keyboard dismiss.\n *\n * Link to a trigger element via `for` attribute matching the trigger's `id`. Tooltip appears on hover or focus\n * and dismisses on blur, mouse leave, or Escape key. Use for supplementary info only—not critical content.\n *\n * @accessibility\n * - Linked to trigger element via `for` attribute (must match trigger's `id`).\n * - `role=\"tooltip\"` with dynamic `aria-hidden` based on visibility.\n * - Keyboard accessible: Tab to trigger, Enter/Space shows tooltip, Escape dismisses.\n * - Screen readers announce tooltip text when visible.\n * - Visual focus indicators on trigger elements meet WCAG 2.2 AA standards.\n * - Auto-positioning respects viewport bounds to prevent content loss.\n *\n * @summary Contextual tooltip with auto-positioning, keyboard support, and screen reader integration.\n * @element nys-tooltip\n *\n * @example Basic\n * ```html\n * <div style=\"display: flex; justify-content: center; gap: 5px; padding: 40px;\">\n * <nys-tooltip for=\"my-button\" text=\"I am a tooltip.\"></nys-tooltip>\n * <nys-button id=\"my-button\" label=\"Hover Me\"></nys-button>\n * </div>\n * ```\n *\n * @example Position\n * ```html\n * <div style=\"display: flex; justify-content: center; gap: 5px; padding: 40px;\">\n * <p>Hover over the icon</p>\n * <nys-tooltip\n * for=\"my-icon2\"\n * text=\"I am a tooltip.\"\n * position=\"right\"\n * >\n * </nys-tooltip>\n * <nys-icon id=\"my-icon2\" name=\"info\" size=\"3xl\"></nys-icon>\n * </div>\n * ```\n *\n * @example Inverted\n * ```html\n * <div style=\"background-color: #1b1b1b; color: #ffffff; padding: 40px; display: flex; gap: 5px\">\n * <p>Hover over the icon</p>\n * <nys-tooltip\n * for=\"my-tooltip3\"\n * text=\"I am a tooltip.\"\n * inverted\n * >\n * </nys-tooltip>\n * <nys-icon id=\"my-tooltip3\" name=\"info\" size=\"3xl\"></nys-icon>\n * </div>\n * ```\n */\n\nexport class NysTooltip extends NysElement {\n static styles = unsafeCSS(styles);\n\n /** Unique identifier. Auto-generated if not provided. */\n @property({ type: String, reflect: true }) id = \"\";\n\n /** Tooltip content text. Required. */\n @property({ type: String }) text = \"\";\n\n /** Adjusts colors for dark backgrounds. */\n @property({ type: Boolean, reflect: true }) inverted = false;\n\n /** ID of the trigger element to attach this tooltip to. Required. */\n @property({ type: String }) for = \"\";\n\n // Track if tooltip is active (hovered or focused)\n @state()\n private _active = false;\n\n // Track if user set position is set explicitly\n private _userHasSetPosition = false;\n private _originalUserPosition: typeof this._position | null = null;\n // Internal flag to prevent dynamic positioning when not needed\n private _internallyUpdatingPosition = false;\n // Flag for hiding the timeout\n private _hideTimeout: number | null = null;\n\n // Position Logic\n private _position: \"top\" | \"bottom\" | \"left\" | \"right\" | null = null;\n\n // Resize observer to manipulate tooltip position on page\n private _resizeObserver: ResizeObserver | null = null;\n\n /**\n * Preferred position relative to trigger. Auto-adjusts if space is insufficient.\n * @default null (auto-positioned based on available space)\n */\n @property({ type: String, reflect: true })\n get position() {\n return this._position;\n }\n\n set position(value) {\n const oldVal = this._position;\n this._position = value;\n this.requestUpdate(\"position\", oldVal);\n\n // The \"_internallyUpdatingPosition\" flag allows user's set position to take preference\n if (!this._internallyUpdatingPosition) {\n this._userHasSetPosition = value !== null;\n this._originalUserPosition = value;\n }\n }\n\n /**\n * Lifecycle Methods\n * --------------------------------------------------------------------------\n */\n\n constructor() {\n super();\n }\n\n connectedCallback() {\n // super.connectedCallback() (NysElement) assigns an id when one\n // is not provided, preserving the \"nys-tooltip-<ts>-<n>\" shape. The\n // role=\"tooltip\" intentionally stays on the inner .nys-tooltip__content\n // element (so the tooltip bubble — not the host — is the described-by\n // target), so this component keeps defaultRole = null.\n super.connectedCallback();\n\n window.addEventListener(\"keydown\", this._handleEscapeKey);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n const ref = this._getReferenceElement();\n const tooltip = this.shadowRoot?.querySelector(\".nys-tooltip__content\");\n\n if (ref && tooltip) {\n ref.removeEventListener(\"mouseenter\", this._showTooltip);\n ref.removeEventListener(\"mouseenter\", this._cancelFadeOut);\n ref.removeEventListener(\"mouseleave\", this._handleBlurOrMouseLeave);\n ref.removeEventListener(\"focusin\", this._showTooltip);\n ref.removeEventListener(\"focusout\", this._handleBlurOrMouseLeave);\n tooltip.removeEventListener(\"mouseenter\", this._cancelFadeOut);\n tooltip.removeEventListener(\"mouseleave\", this._handleBlurOrMouseLeave);\n }\n window.removeEventListener(\"keydown\", this._handleEscapeKey);\n }\n\n async firstUpdated() {\n await this.updateComplete;\n const ref = this._getReferenceElement();\n const tooltip = this.shadowRoot?.querySelector(\".nys-tooltip__content\");\n\n if (!ref || !tooltip) return;\n\n this.applyInverseTransform();\n this._associateTrigger(ref);\n this._applyTooltipPropToFormComponent(ref);\n\n if (\n ref.tagName.toLowerCase() === \"nys-button\" ||\n ref.tagName.toLowerCase() === \"nys-icon\"\n ) {\n this._applyFocusBehavior(ref);\n ref.addEventListener(\"mouseenter\", this._showTooltip);\n ref.addEventListener(\"mouseenter\", this._cancelFadeOut);\n ref.addEventListener(\"mouseleave\", this._handleBlurOrMouseLeave);\n ref.addEventListener(\"focusin\", this._showTooltip);\n ref.addEventListener(\"focusout\", this._handleBlurOrMouseLeave);\n tooltip.addEventListener(\"mouseenter\", this._cancelFadeOut);\n tooltip.addEventListener(\"mouseleave\", this._handleBlurOrMouseLeave);\n }\n }\n\n updated(changedProps: Map<string, unknown>) {\n super.updated(changedProps);\n\n const ref = this._getReferenceElement();\n if (!ref) return;\n\n this._positionStartingBase();\n\n // Accounts for tooltip's text change (for code editor changes & VO)\n if (changedProps.has(\"text\")) {\n this._applyTooltipPropToFormComponent(ref);\n if (this._active) {\n this.updateComplete.then(() => this._showTooltip());\n }\n }\n }\n\n /**\n * Event Handlers\n * --------------------------------------------------------------------------\n */\n\n // When toggling tooltip, check if user has set position to give it preference it space allows. Otherwise dynamically position tooltip.\n private _showTooltip = () => {\n this._active = true;\n this._addScrollListeners();\n\n // Try to honor user's original preference first\n if (this._userHasSetPosition && this._originalUserPosition) {\n if (this._doesPositionFit(this._originalUserPosition)) {\n this.position = this._originalUserPosition;\n // Check if current tooltip position overflows to edge of screen\n this.updateComplete.then(() => {\n this._userPositionTooltip();\n });\n return;\n }\n }\n\n // Otherwise fall back to auto logic\n this._autoPositionTooltip();\n };\n\n private _handleBlurOrMouseLeave = () => {\n const ref = this._getReferenceElement();\n const tooltip = this.shadowRoot?.querySelector(\n \".nys-tooltip__content\",\n ) as HTMLElement;\n\n if (ref === document.activeElement) return;\n if (!ref || !tooltip) return;\n\n this._triggerFadeOut(tooltip);\n };\n\n private _triggerFadeOut(tooltip: HTMLElement) {\n if (!tooltip || this._hideTimeout) return;\n\n tooltip.classList.add(\"fade-out\");\n\n this._hideTimeout = window.setTimeout(() => {\n this._active = false;\n this._removeScrollListeners();\n this._positionStartingBase();\n this._resetTooltipPositioningStyles(tooltip);\n\n tooltip.classList.remove(\"fade-out\");\n this._hideTimeout = null;\n }, 200);\n }\n\n private _cancelFadeOut = () => {\n const tooltip = this.shadowRoot?.querySelector(\n \".nys-tooltip__content\",\n ) as HTMLElement;\n const ref = this._getReferenceElement();\n\n if (!tooltip || !ref) return;\n\n const isPointerInsideTooltip = tooltip.matches(\":hover\");\n const isPointerInsideRef = ref.matches(\":hover\");\n\n const isTouched = document.activeElement === ref;\n\n if (!isPointerInsideTooltip && !isPointerInsideRef && !isTouched) {\n return;\n }\n\n if (this._hideTimeout) {\n clearTimeout(this._hideTimeout);\n this._hideTimeout = null;\n }\n\n tooltip.classList.remove(\"fade-out\");\n this._active = true;\n };\n\n // Listen to window scroll so a focus tooltip can auto position even when user move across the page\n private _addScrollListeners() {\n window.addEventListener(\"scroll\", this._handleScrollOrResize, true);\n this._resizeObserver = new ResizeObserver(() => {\n this._handleScrollOrResize();\n });\n this._resizeObserver.observe(document.documentElement);\n }\n\n private _removeScrollListeners() {\n window.removeEventListener(\"scroll\", this._handleScrollOrResize, true);\n this._resizeObserver?.disconnect();\n this._resizeObserver = null;\n }\n\n private _handleScrollOrResize = () => {\n if (!this._active || this._hideTimeout) return;\n\n this._showTooltip();\n };\n\n private _handleEscapeKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\" && this._active) {\n this._active = false;\n this._removeScrollListeners();\n\n const tooltip = this.shadowRoot?.querySelector(\n \".nys-tooltip__content\",\n ) as HTMLElement;\n if (tooltip) {\n this._resetTooltipPositioningStyles(tooltip);\n }\n }\n };\n\n /**\n * Functions\n * --------------------------------------------------------------------------\n */\n\n private _getReferenceElement() {\n const targetId = this.for;\n if (!targetId) return null;\n\n // lightDOM search\n let htmlElement = document.getElementById(targetId);\n if (htmlElement) return htmlElement;\n\n // Search recursively through shadow DOMs (e.g. for nys-label within other component's shadowDOM)\n const findInShadows = (root: ParentNode): HTMLElement | null => {\n for (const el of Array.from(root.querySelectorAll(\"*\"))) {\n const shadowElement = el.shadowRoot;\n if (shadowElement) {\n const found = shadowElement.getElementById(targetId);\n if (found) return found;\n\n const deeper = findInShadows(shadowElement);\n if (deeper) return deeper;\n }\n }\n return null;\n };\n\n return findInShadows(document);\n }\n\n /**\n * Programmatically associates the trigger with the tooltip via\n * `aria-describedby`, per the WAI-ARIA Tooltip pattern. The tooltip bubble\n * (`.nys-tooltip__content`) carries `role=\"tooltip\"` and `id={this.id}`, so we\n * point the trigger's `aria-describedby` at that id. Preserves any existing\n * `aria-describedby` tokens the consumer already set, and avoids duplicates.\n */\n private _associateTrigger(el: HTMLElement) {\n if (!this.text?.trim()) return;\n const existing = (el.getAttribute(\"aria-describedby\") || \"\")\n .split(/\\s+/)\n .filter(Boolean);\n if (!existing.includes(this.id)) {\n existing.push(this.id);\n el.setAttribute(\"aria-describedby\", existing.join(\" \"));\n }\n }\n\n // We need to pass `ariaLabel` or `ariaDescription` to the nys-components so they can announce both their label and the tooltip's text\n private async _passAria(el: HTMLElement) {\n const tagName = el.tagName.toLowerCase();\n\n if (tagName === \"nys-icon\") {\n // nys-icon has a real `ariaLabel` property whose default Lit attribute\n // name (\"arialabel\") matches what setAttribute(\"ariaLabel\", ...)\n // actually writes, so this reaches the icon's rendered <svg>.\n el.setAttribute(\"ariaLabel\", `Hint: ${this.text}`);\n } else if (tagName === \"nys-button\") {\n // nys-button has no ariaLabel/ariaDescription prop, so setAttribute here\n // reached nothing — and setting the plain aria-describedby *attribute*\n // (what _associateTrigger does above) doesn't reach it either, since the\n // host has no role and never maps its own light-DOM ARIA into the\n // internal <button>. Route through the real `ariaDescribedBy` *property*\n // instead, pointing at this tooltip's own id — the same id\n // _associateTrigger already builds toward — so nys-button renders a\n // working aria-describedby on its real internal <button>.\n const button = el as unknown as { ariaDescribedBy?: string };\n const existing = (button.ariaDescribedBy || \"\")\n .split(/\\s+/)\n .filter(Boolean);\n if (!existing.includes(this.id)) {\n existing.push(this.id);\n button.ariaDescribedBy = existing.join(\" \");\n }\n }\n }\n\n /**\n * In React, the reference element found is often the native HTML element within the nys-component.\n * Therefore, this function accounts for the closest NYS component ancestor that supports a tooltip prop.\n */\n private _applyTooltipPropToFormComponent(ref: HTMLElement) {\n const tagName = ref.tagName.toLowerCase();\n if (!tagName.startsWith(\"nys-\")) return;\n\n if (tagName === \"nys-button\" || tagName === \"nys-icon\") {\n // Already handled elsewhere in this component; we just ensure we attach listeners\n this._applyFocusBehavior(ref);\n this._passAria(ref);\n return;\n }\n\n if (\"tooltip\" in ref) {\n ref.tooltip = this.text;\n }\n }\n\n // Applies focus behavior to an otherwise non focus element (i.e. nys-icon is non focusable by default)\n private async _applyFocusBehavior(el: HTMLElement) {\n el.style.cursor = \"pointer\";\n const tagName = el.tagName.toLowerCase();\n\n if (tagName === \"nys-icon\") {\n if (\"updateComplete\" in el) {\n await (el as any).updateComplete;\n }\n const svg = el.shadowRoot?.querySelector(\"svg\");\n if (svg) {\n svg.setAttribute(\"tabindex\", \"0\");\n }\n }\n }\n\n /**\n * Checks if the tooltip fits inside the viewport on the given side of the trigger.\n * Used for auto-positioning. Ignores text overflow for now.\n */\n private _doesPositionFit(position: typeof this._position) {\n const ref = this._getReferenceElement();\n const tooltip = this.shadowRoot?.querySelector(\".nys-tooltip__content\");\n\n if (!ref || !tooltip || position == null) return;\n\n const refRect = ref.getBoundingClientRect();\n const tooltipRect = tooltip.getBoundingClientRect();\n\n // Define some margin buffer between tooltip and trigger (to avoid touching the edges too tightly)\n const margin = 8;\n\n // Available space on each side relative to trigger rect and viewport\n const spaceAvailable = {\n top: refRect.top - margin,\n left: refRect.left - margin,\n bottom: window.innerHeight - refRect.bottom - margin,\n right: window.innerWidth - refRect.right - margin,\n };\n\n // Check if tooltip fits on each side (compare available space vs tooltip size)\n const fits = {\n top: spaceAvailable.top >= tooltipRect.height,\n bottom: spaceAvailable.bottom >= tooltipRect.height,\n left: spaceAvailable.left >= tooltipRect.width,\n right: spaceAvailable.right >= tooltipRect.width,\n };\n\n return fits[position];\n }\n\n private _userPositionTooltip() {\n const tooltip = this.shadowRoot?.querySelector(\n \".nys-tooltip__content\",\n ) as HTMLElement;\n const ref = this._getReferenceElement();\n if (tooltip && ref) {\n this._positionTooltipElement(ref, tooltip, this.position);\n this._shiftTooltipIntoViewport(tooltip);\n }\n }\n\n // Calculates the best placement based on available space (flips placement if it doesn't fit)\n private async _autoPositionTooltip() {\n const ref = this._getReferenceElement();\n const tooltip = this.shadowRoot?.querySelector(\n \".nys-tooltip__content\",\n ) as HTMLElement;\n\n if (!ref || !tooltip) return;\n\n const refRect = ref.getBoundingClientRect();\n const margin = 8;\n\n const spaceAvailable = {\n top: refRect.top - margin,\n left: refRect.left - margin,\n bottom: window.innerHeight - refRect.bottom - margin,\n right: window.innerWidth - refRect.right - margin,\n };\n\n // Default tryOrder for auto mode\n let tryOrder: Array<keyof typeof spaceAvailable> = [\n \"top\",\n \"bottom\",\n \"right\",\n \"left\",\n ];\n\n // If user explicitly set a preferred position (even if it didn’t fit),\n // favor it first before trying others\n if (this._userHasSetPosition && this._originalUserPosition) {\n const userPosition = this._originalUserPosition;\n if (userPosition === \"left\") {\n tryOrder = [\"left\", \"right\", \"top\", \"bottom\"];\n } else if (userPosition === \"right\") {\n tryOrder = [\"right\", \"left\", \"top\", \"bottom\"];\n } else if (userPosition === \"top\") {\n tryOrder = [\"top\", \"bottom\", \"right\", \"left\"];\n } else if (userPosition === \"bottom\") {\n tryOrder = [\"bottom\", \"top\", \"right\", \"left\"];\n }\n }\n\n // 1) Try to find the first side that fits\n for (const pos of tryOrder) {\n if (this._doesPositionFit(pos)) {\n this._setInternalPosition(pos);\n await this.updateComplete;\n this._positionTooltipElement(ref, tooltip, pos);\n this._shiftTooltipIntoViewport(tooltip);\n return;\n }\n }\n\n // 2) Fallback: pick the side with the most space\n let bestPosition: keyof typeof spaceAvailable = \"top\";\n let maxSpace = spaceAvailable.top;\n\n for (const pos of tryOrder) {\n if (spaceAvailable[pos] > maxSpace) {\n maxSpace = spaceAvailable[pos];\n bestPosition = pos;\n }\n }\n this._setInternalPosition(bestPosition);\n await this.updateComplete;\n this._positionTooltipElement(ref, tooltip, bestPosition);\n this._shiftTooltipIntoViewport(tooltip);\n }\n\n private _positionStartingBase() {\n const tooltip = this.shadowRoot?.querySelector(\n \".nys-tooltip__content\",\n ) as HTMLElement;\n\n if (!tooltip) return;\n\n tooltip.style.top = \"0px\";\n tooltip.style.left = \"0px\";\n }\n\n private _positionTooltipElement(\n ref: HTMLElement,\n tooltip: HTMLElement,\n bestPosition: typeof this._position,\n ) {\n const refRect = ref.getBoundingClientRect();\n const tooltipRect = tooltip.getBoundingClientRect();\n const margin = 8;\n\n let top = 0;\n let left = 0;\n\n switch (bestPosition) {\n case \"top\":\n top = refRect.top - tooltipRect.height - margin;\n left = refRect.left + refRect.width / 2 - tooltipRect.width / 2;\n break;\n case \"bottom\":\n top = refRect.bottom + margin;\n left = refRect.left + refRect.width / 2 - tooltipRect.width / 2;\n break;\n case \"left\":\n top = refRect.top + refRect.height / 2 - tooltipRect.height / 2;\n left = refRect.left - tooltipRect.width - margin;\n break;\n case \"right\":\n top = refRect.top + refRect.height / 2 - tooltipRect.height / 2;\n left = refRect.right + margin;\n break;\n default:\n // Default to top\n top = refRect.top - tooltipRect.height - margin;\n left = refRect.left + refRect.width / 2 - tooltipRect.width / 2;\n break;\n }\n\n tooltip.style.top = `${top}px`;\n tooltip.style.left = `${left}px`;\n }\n\n // In some iframes (like Storybook's) or embedded containers , parent elements may have CSS transforms applied, creating a new coordinate context.\n // This function removes such transforms to prevent them from affecting tooltip positioning calculations.\n private applyInverseTransform() {\n document.querySelectorAll('div[scale=\"1\"]').forEach((el) => {\n (el as HTMLElement).style.transform = \"none\";\n });\n }\n\n private _setInternalPosition(bestPosition: typeof this._position) {\n this._internallyUpdatingPosition = true;\n this.position = bestPosition;\n this._internallyUpdatingPosition = false;\n }\n\n // Determines if text of tooltip over-extends outside of viewport edge and adjust tooltip for horizontal overflow\n private _shiftTooltipIntoViewport(tooltip: HTMLElement) {\n const ref = this._getReferenceElement();\n if (!ref) return;\n\n const refRect = ref.getBoundingClientRect();\n const tooltipRect = tooltip.getBoundingClientRect();\n\n const refCenter = refRect.left + refRect.width / 2;\n\n const overflowLeft = tooltipRect.left < 0;\n const overflowRight = tooltipRect.right > window.innerWidth;\n\n // Tooltip is past the viewport edge, shift it inwards\n if (overflowLeft) {\n tooltip.style.left = \"10px\";\n tooltip.style.transform = \"none\";\n } else if (overflowRight) {\n tooltip.style.right = \"0px\";\n tooltip.style.left = \"auto\";\n tooltip.style.transform = \"none\";\n }\n\n // Recalculate tooltip rect after any shift\n const newTooltipRect = tooltip.getBoundingClientRect();\n\n // Arrow offset relative to tooltip width to maintain accuracy on zoom and out-of-bounds\n const arrowOffsetRatio =\n (refCenter - newTooltipRect.left) / newTooltipRect.width;\n const arrowOffsetPercent = Math.max(0, Math.min(1, arrowOffsetRatio)) * 100;\n\n tooltip.style.setProperty(\"--arrow-offset-x\", `${arrowOffsetPercent}%`);\n }\n\n // Reposition tooltip back to original set position (e.g. top, left, bottom, right) to avoid positioning issue base on last position\n private _resetTooltipPositioningStyles(tooltip: HTMLElement) {\n tooltip.style.left = \"\";\n tooltip.style.right = \"\";\n tooltip.style.top = \"\";\n tooltip.style.transform = \"\";\n tooltip.style.removeProperty(\"--arrow-offset-x\");\n }\n\n render() {\n return html`\n <div class=\"nys-tooltip__main\">\n ${this.text?.trim()\n ? html`<div\n id=${this.id}\n class=\"nys-tooltip__content\"\n role=\"tooltip\"\n aria-hidden=${this._active && !this._hideTimeout\n ? \"false\"\n : \"true\"}\n ?active=${this._active}\n style=\"visibility: ${this._active ? \"visible\" : \"hidden\"}; \"\n >\n <div class=\"nys-tooltip__inner\">${this.text}</div>\n <span class=\"nys-tooltip__arrow\"></span>\n </div>`\n : \"\"}\n </div>\n `;\n }\n}\n\nif (!customElements.get(\"nys-tooltip\")) {\n customElements.define(\"nys-tooltip\", NysTooltip);\n}\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { property } from \"lit/decorators.js\";\n// These elements are rendered inside this component's shadow DOM (the\n// tooltip and its trigger icon, shown when `tooltip` is set), so they must be\n// registered whenever nys-label is used. Importing them here (intentional\n// side effect) guarantees they always render.\nimport \"@nysds/nys-tooltip\";\nimport \"@nysds/nys-icon\";\n// @ts-ignore: SCSS module imported via bundler as inline\nimport styles from \"./nys-label.scss?inline\";\n\nlet labelIdCounter = 0;\n\n/**\n * **Internal component.** Renders form labels with description, required/optional flag, and tooltip.\n *\n * Used internally by form components (textinput, select, checkbox, etc.). Not intended for direct use.\n * Handles label association via `for`, displays asterisk for required fields, and integrates tooltips.\n *\n * @example Basic\n * ```html\n * <nys-label label=\"This is a basic nys-label\"></nys-label>\n * ```\n *\n * @example Required\n * ```html\n * <nys-label label=\"This form is required\" flag=\"required\"></nys-label>\n * ```\n *\n * @example Optional\n * ```html\n * <nys-label label=\"This form is required\" flag=\"optional\"></nys-label>\n * ```\n *\n * @example Description\n * ```html\n * <nys-label label=\"Label Text\" description=\"Description text\"></nys-label>\n * ```\n *\n * @example Description Slot\n * ```html\n * <nys-label label=\"Label Text\">\n * <p slot=\"description\">Rich text description passed in <strong>HERE</strong></p>\n * </nys-label>\n * ```\n *\n * @example With Tooltip\n * ```html\n * <nys-label id=\"label-id\" label=\"This label has a tooltip\"></nys-label>\n * <nys-tooltip for=\"label-id\" text=\"Tooltip text in here\"></nys-tooltip>\n * ```\n *\n * @slot description - Custom HTML description content below the label.\n */\nexport class NysLabel extends LitElement {\n static styles = unsafeCSS(styles);\n\n /** The ID of the label. */\n @property({ type: String, reflect: true }) id = \"\";\n\n /** Label text displayed above the form field. */\n @property({ type: String }) label = \"\";\n\n /** Helper text displayed below the label. */\n @property({ type: String }) description = \"\";\n\n /** Flag type: `required` shows asterisk, `optional` shows \"(Optional)\". */\n @property({ type: String }) flag = \"\";\n\n /** Adjusts colors for dark backgrounds. */\n @property({ type: Boolean, reflect: true }) inverted = false;\n /** Tooltip text shown on hover/focus of info icon next to label. */\n @property({ type: String }) tooltip = \"\";\n\n // Expose the (shadow-encapsulated) label text as the host's own accessible name so\n // references to <nys-label> resolve reliably across engines, instead of relying on\n // each browser flattening nested-shadow text. Guarded for SSR.\n private _labelInternals: ElementInternals | null =\n typeof this.attachInternals === \"function\" ? this.attachInternals() : null;\n\n get _hasDescription() {\n // This accounts for both description prop or slotted content.\n const slot = this.querySelector('[slot=\"description\"]');\n return !!this.description || !!slot;\n }\n\n connectedCallback() {\n super.connectedCallback();\n if (!this.id) {\n this.id = `nys-label-${Date.now()}-${labelIdCounter++}`;\n }\n }\n\n updated() {\n if (this._labelInternals) {\n this._labelInternals.ariaLabel = this.label || null;\n }\n }\n\n /**\n * Event Handlers\n * --------------------------------------------------------------------------\n */\n\n /**\n * While most components don't need to listen for this event.\n * Special components like \"nys-fileinput\" and \"nys-toggle\" need to listen for label to execute their specific functionalities.\n */\n private _dispatchLabelClick() {\n this.dispatchEvent(\n new CustomEvent(\"nys-label-click\", { bubbles: true, composed: true }),\n );\n }\n\n render() {\n return html`\n <div class=\"nys-label ${this.inverted ? \"invert\" : \"\"}\">\n <div class=\"nys-label__tooltip-wrapper\">\n <label class=\"nys-label__label\" @click=${this._dispatchLabelClick}\n >${this.label}\n ${this.flag === \"required\"\n ? html`<div class=\"nys-label__required\" aria-hidden=\"true\">\n *\n </div>`\n : \"\"}\n ${this.flag === \"optional\"\n ? html`<div class=\"nys-label__optional\">(Optional)</div>`\n : \"\"}</label\n >\n ${this.tooltip\n ? html`<nys-tooltip\n text=\"${this.tooltip}\"\n position=\"top\"\n focusable\n ?inverted=${this.inverted}\n for=\"tooltip-icon-${this.id}\"\n >\n </nys-tooltip>\n <nys-icon\n id=\"tooltip-icon-${this.id}\"\n name=\"info\"\n size=\"3xl\"\n ></nys-icon> `\n : \"\"}\n </div>\n ${this._hasDescription\n ? html`<p\n class=\"nys-label__description\"\n @click=${this._dispatchLabelClick}\n >\n <slot name=\"description\">${this.description}</slot>\n </p>`\n : \"\"}\n </div>\n `;\n }\n}\n\nif (!customElements.get(\"nys-label\")) {\n customElements.define(\"nys-label\", NysLabel);\n}\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { property } from \"lit/decorators.js\";\n// This element is rendered inside this component's shadow DOM (the error\n// icon), so it must be registered whenever nys-errormessage is used.\n// Importing it here (intentional side effect) guarantees it always renders.\nimport \"@nysds/nys-icon\";\n// @ts-ignore: SCSS module imported via bundler as inline\nimport styles from \"./nys-errormessage.scss?inline\";\n\nlet errorMessageIdCounter = 0;\n\n/**\n * **Internal component.** Displays error messages for form validation with icon and ARIA alert role.\n *\n * Used internally by form components. Not intended for direct use. Shows error icon and message\n * when `showError` is true. Integrates with ElementInternals for native form validation messages.\n *\n * @summary Internal error message display with icon and ARIA alert support.\n * @element nys-errormessage\n *\n * @example Basic\n * ```html\n * <nys-errormessage showError errorMessage=\"This is an error message\"></nys-errormessage>\n * ```\n *\n * @example Divider\n * ```html\n * <nys-errormessage showError errorMessage=\"This is an error message\" showDivider></nys-errormessage>\n * ```\n *\n * Association contract for form controls:\n * Chromium never surfaces `aria-errormessage` for a control inside a shadow root —\n * verified against Blink's AX tree by `src/scripts/verify-a11y-names.mjs`, and true for\n * the IDREF attribute and for `ariaErrorMessageElements` reflection alike.\n * `aria-describedby` DOES resolve there. Form controls therefore reference this element\n * with BOTH `aria-errormessage` (for engines that honor it) and `aria-describedby` (which\n * is what actually reaches the AX tree today), alongside `aria-invalid` — which Blink\n * requires before it will expose an error relation at all.\n */\nexport class NysErrorMessage extends LitElement {\n static styles = unsafeCSS(styles);\n\n /** The \"id\" of the error message. */\n @property({ type: String, reflect: true }) id = \"\";\n\n /** Whether to display the error message. */\n @property({ type: Boolean }) showError = false;\n\n /** Error text to display. Falls back to native validation message if available. */\n @property({ type: String }) errorMessage = \"\";\n\n /** Shows a divider line above the error message. */\n @property({ type: Boolean, reflect: true }) showDivider = false;\n\n // Expose the shadow-encapsulated error text as the host's own accessible name so\n // aria-errormessage references resolve across engines. Guarded for SSR. The inner\n // role=\"alert\" live region is unchanged.\n private _errInternals: ElementInternals | null =\n typeof this.attachInternals === \"function\" ? this.attachInternals() : null;\n\n /**\n * Lifecycle methods\n * --------------------------------------------------------------------------\n */\n constructor() {\n super();\n if (!this.id) {\n this.id = `nys-errormessage-${Date.now()}-${errorMessageIdCounter++}`;\n }\n }\n\n updated() {\n if (this._errInternals) {\n this._errInternals.ariaLabel = this.errorMessage || null;\n }\n }\n\n render() {\n return html`<div\n role=\"alert\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n class=\"nys-errormessage__region\"\n >\n ${this.showError\n ? html`<div class=\"nys-errormessage\" ?showDivider=${this.showDivider}>\n <nys-icon name=\"error\" size=\"2xl\"></nys-icon>\n ${this.errorMessage}\n </div>`\n : \"\"}\n </div>`;\n }\n}\n\nif (!customElements.get(\"nys-errormessage\")) {\n customElements.define(\"nys-errormessage\", NysErrorMessage);\n}\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { property, state, query } from \"lit/decorators.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { NysFormControlElement } from \"@nysds/internals\";\n// These internal elements are rendered inside this component's shadow DOM, so\n// they must be registered whenever nys-textinput is used. Importing them here\n// (intentional side effect) guarantees the visible label and error message —\n// which the accessible name/error association depends on — always render.\n// nys-button/nys-icon render the password-visibility toggle and search-clear\n// controls.\nimport \"@nysds/nys-label\";\nimport \"@nysds/nys-errormessage\";\nimport \"@nysds/nys-button\";\nimport \"@nysds/nys-icon\";\n// @ts-ignore: SCSS module imported via bundler as inline\nimport styles from \"./nys-textinput.scss?inline\";\n\n/**\n * A text input for collecting short, single-line data. Supports validation, input masking (tel),\n * password visibility toggle, and live error messaging. Form-associated via ElementInternals.\n *\n * Use for names, emails, passwords, phone numbers. For multi-line input, use `nys-textarea` instead.\n * For predefined options, use `nys-select`, `nys-radiobutton`, or `nys-checkbox`.\n *\n * @summary Text input for short single-line data with validation and masking support.\n * @element nys-textinput\n *\n * @slot description - Custom HTML description content below the label.\n * @slot startButton - Button at input start. Use single `nys-button` only.\n * @slot endButton - Button at input end. Use single `nys-button` only.\n *\n * @fires nys-input - Fired on input change. Detail: `{id, value}`.\n * @fires nys-focus - Fired when input gains focus.\n * @fires nys-blur - Fired when input loses focus. Triggers validation.\n *\n * @example Basic\n * ```html\n * <nys-textinput label=\"Full Name\"></nys-textinput>\n * ```\n *\n * @example Disabled\n * ```html\n * <nys-textinput label=\"Email Address\" disabled></nys-textinput>\n * ```\n *\n * @example Readonly\n * ```html\n * <nys-textinput label=\"Email Address\" readonly value=\"You can see me but not edit me\"></nys-textinput>\n * ```\n *\n * @example Required\n * ```html\n * <nys-textinput label=\"Email Address\" required></nys-textinput>\n * ```\n *\n * @example Optional\n * ```html\n * <nys-textinput label=\"Email Address\" optional></nys-textinput>\n * ```\n *\n * @example Width Small\n * ```html\n * <nys-textinput label=\"Zip Code\" width=\"sm\"></nys-textinput>\n * ```\n *\n * @example Width Medium\n * ```html\n * <nys-textinput label=\"City\" width=\"md\"></nys-textinput>\n * ```\n *\n * @example Width Large\n * ```html\n * <nys-textinput label=\"Email Address\" width=\"lg\"></nys-textinput>\n * ```\n *\n * @example Description\n * ```html\n * <nys-textinput label=\"Email Address\" description=\"Only valid ny.gov emails are accepted.\"></nys-textinput>\n * ```\n *\n * @example Description Slot\n * ```html\n * <nys-textinput label=\"Email Address\">\n * <div slot=\"description\">Only valid <strong>ny.gov</strong> emails are accepted.</div>\n * </nys-textinput>\n * ```\n *\n * @example Masking\n * ```html\n * <nys-textinput type=\"tel\" label=\"Phone Number\">\n * <div slot=\"description\">Some types, such as <code>tel</code> have automatic masking available.</div>\n * </nys-textinput>\n * ```\n *\n * @example Password\n * ```html\n * <nys-textinput type=\"password\"></nys-textinput>\n * ```\n *\n * @example Max Min Values\n * ```html\n * <nys-textinput type=\"number\" label=\"Age\" min=\"18\" max=\"99\" width=\"sm\"></nys-textinput>\n * ```\n *\n * @example Suffix Button\n * ```html\n * <nys-textinput id=\"search-demo\" type=\"search\" placeholder=\"Search\">\n * <nys-button\n * slot=\"endButton\"\n * ariaLabel=\"Search\"\n * prefixIcon=\"search\"\n * onclick=\"alert('searching for: ' + document.getElementById('search-demo').value)\"\n * ></nys-button>\n * </nys-textinput>\n * ```\n */\n\nexport class NysTextinput extends NysFormControlElement {\n static styles = unsafeCSS(styles);\n static shadowRootOptions = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n /** Unique identifier. Auto-generated if not provided. */\n @property({ type: String, reflect: true }) id = \"\";\n\n /** Name for form submission. */\n @property({ type: String, reflect: true }) name = \"\";\n\n /**\n * Input type: `text` (default), `email`, `number`, `password`, `search`, `tel` (auto-masked), `url`.\n * @default \"text\"\n */\n @property({ type: String, reflect: true }) type:\n | \"email\"\n | \"number\"\n | \"password\"\n | \"search\"\n | \"tel\"\n | \"text\"\n | \"url\" = \"text\";\n\n /** Visible label text. Required for accessibility. */\n @property({ type: String }) label = \"\";\n\n /** Helper text below label. Use slot for custom HTML. */\n @property({ type: String }) description = \"\";\n\n /** Placeholder text. Don't use as label replacement. */\n @property({ type: String }) placeholder = \"\";\n\n /** Current input value. */\n @property({ type: String }) value = \"\";\n\n /** Prevents interaction. */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /** Makes input read-only but focusable. */\n @property({ type: Boolean, reflect: true }) readonly = false;\n\n /** Marks as required. Shows \"Required\" flag and validates on blur. */\n @property({ type: Boolean, reflect: true }) required = false;\n\n /** Shows \"Optional\" flag. Use when most fields are required. */\n @property({ type: Boolean, reflect: true }) optional = false;\n\n /** Tooltip text shown on hover/focus of info icon. */\n @property({ type: String }) tooltip = \"\";\n\n /** Form `id` to associate with when input is outside form element. */\n @property({ type: String, reflect: true }) form: string | null = null;\n\n /** Regex pattern for validation. Shows error on mismatch. */\n @property({ type: String }) pattern = \"\";\n\n /** Maximum character length. */\n @property({ type: Number }) maxlength: number | null = null;\n\n /** Accessible label. When set, assuming \"label\" isn't provided for private special cases (i.e., <checkbox other>). */\n @property({ type: String }) ariaLabel = \"\";\n\n /**\n * Input width: `sm` (88px), `md` (200px), `lg` (384px), `full` (100%, default).\n * @default \"full\"\n */\n @property({ type: String, reflect: true }) width:\n | \"sm\"\n | \"md\"\n | \"lg\"\n | \"full\" = \"full\";\n\n /** Step increment for `type=\"number\"`. */\n @property({ type: Number }) step: number | null = null;\n\n /** Minimum value for `type=\"number\"`. */\n @property({ type: Number }) min: number | null = null;\n\n /** Maximum value for `type=\"number\"`. */\n @property({ type: Number }) max: number | null = null;\n\n /** Adjusts colors for dark backgrounds. */\n @property({ type: Boolean, reflect: true }) inverted = false;\n\n /** Shows error message when true. Set by validation or manually. */\n @property({ type: Boolean, reflect: true }) showError = false;\n\n /** Error message text. Shown only when `showError` is true. */\n @property({ type: String }) errorMessage = \"\";\n\n @query(\"input\") private _inputEl!: HTMLInputElement;\n\n @state() private showPassword = false;\n\n private _originalErrorMessage = \"\";\n private _hasUserInteracted = false; // need this flag for \"eager mode\"\n\n private _maskPatterns: Record<string, string> = {\n tel: \"(___) ___-____\",\n };\n\n /**\n * Lifecycle methods\n * --------------------------------------------------------------------------\n * Form association, ElementInternals, and id generation are provided by\n * NysFormControlElement (@nysds/internals).\n */\n connectedCallback() {\n // super.connectedCallback() (NysFormControlElement) assigns an id when one\n // is not provided and reflects default semantics.\n super.connectedCallback();\n this._originalErrorMessage = this.errorMessage ?? \"\";\n this.addEventListener(\"invalid\", this._handleInvalid);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener(\"invalid\", this._handleInvalid);\n }\n\n async firstUpdated() {\n // This ensures our element always participates in the form\n this._setValue();\n }\n\n // Ensure the \"width\" property is valid after updates\n async updated(changedProperties: Map<string | number | symbol, unknown>) {\n if (changedProperties.has(\"value\")) {\n this._setValue();\n }\n\n if (changedProperties.has(\"disabled\")) {\n this._validateButtonSlot(\"startButton\");\n this._validateButtonSlot(\"endButton\");\n }\n\n if (changedProperties.has(\"type\")) {\n const mask = this._maskPatterns[this.type];\n const input = this._inputEl;\n\n if (input) {\n if (mask) {\n // Only apply mask length if user hasn't explicitly set maxlength\n if (this.maxlength === null) {\n input.maxLength = mask.length;\n }\n this._updateOverlay(input.value, mask);\n } else {\n // Only remove if user hasn't explicitly set maxlength\n if (this.maxlength === null) {\n input.removeAttribute(\"maxLength\");\n }\n const overlay = this.shadowRoot?.querySelector(\n \".nys-textinput__mask-overlay\",\n );\n if (overlay) overlay.textContent = \"\";\n }\n }\n }\n if (\n changedProperties.has(\"readonly\") ||\n changedProperties.has(\"required\")\n ) {\n const input = this._inputEl;\n\n if (input) input.required = this.required && !this.readonly;\n }\n }\n\n /**\n * Form Integration\n * --------------------------------------------------------------------------\n */\n\n private _setValue() {\n this.setFormValue(this.value);\n this._manageRequire(); // Update validation\n }\n\n private _manageRequire() {\n const input = this._inputEl;\n\n if (!input) return;\n\n const message = this.errorMessage || \"This field is required\";\n const isInvalid =\n this.required && (!this.value || this.value?.trim() === \"\"); // Check for blank as well\n\n if (isInvalid) {\n this.setValidityFromState({ valueMissing: true }, message, input);\n } else {\n this.clearValidity();\n this._hasUserInteracted = false; // Reset eager/lazy checking\n }\n }\n\n private _setValidityMessage(message: string = \"\") {\n const input = this._inputEl;\n if (!input) return;\n\n // Always show the visual error if there is a message\n this.showError = !!message;\n\n // Use the original errorMessage if defined, or keep the message from validation\n if (this._originalErrorMessage?.trim() && message !== \"\") {\n this.errorMessage = this._originalErrorMessage;\n } else {\n this.errorMessage = message;\n }\n\n if (message) {\n this.setValidityFromState(\n { customError: true },\n this.errorMessage,\n input,\n );\n } else {\n this.clearValidity();\n }\n }\n\n private _validate() {\n const input = this._inputEl;\n if (!input) return;\n\n // Get the native validation state\n const validity = input.validity;\n let message = \"\";\n\n // Check each possible validation error\n if (validity.valueMissing) {\n message = \"This field is required\";\n } else if (validity.typeMismatch) {\n message = \"Invalid format for this type\";\n } else if (validity.patternMismatch) {\n message = \"Invalid format\";\n } else if (validity.tooShort) {\n message = `Value is too short. Minimum length is ${input.minLength}`;\n } else if (validity.tooLong) {\n message = `Value is too long. Maximum length is ${input.maxLength}`;\n } else if (validity.rangeUnderflow) {\n message = `Value must be at least ${input.min}`;\n } else if (validity.rangeOverflow) {\n message = `Value must be at most ${input.max}`;\n } else if (validity.stepMismatch) {\n message = \"Invalid step value\";\n } else {\n message = input.validationMessage;\n }\n\n this._setValidityMessage(message);\n }\n\n // This callback is automatically called when the parent form is reset.\n public formResetCallback() {\n this.value = \"\";\n\n const input = this._inputEl;\n if (input) {\n input.value = \"\";\n }\n\n this.setFormValue(\"\");\n\n // Reset validation UI\n this.showError = false;\n this.errorMessage = \"\";\n this.clearValidity();\n\n this.showPassword = false;\n\n // Reset mask overlay if applicable\n const mask = this._maskPatterns[this.type];\n if (mask) {\n this._updateOverlay(\"\", mask);\n }\n\n // Re-render UI\n this.requestUpdate();\n }\n\n /**\n * Functions\n * --------------------------------------------------------------------------\n */\n\n // This helper function is called to perform the element's native validation.\n checkValidity(): boolean {\n const input = this._inputEl;\n return input ? input.checkValidity() : true;\n }\n\n private _handleInvalid(event: Event) {\n event.preventDefault();\n this._hasUserInteracted = true; // Start aggressive mode due to form submission\n this._validate();\n\n const input = this._inputEl;\n if (input) {\n // Focus only if this is the first invalid element (top-down approach)\n const form = this.internals?.form;\n if (form) {\n const elements = Array.from(form.elements) as Array<\n HTMLElement & { checkValidity?: () => boolean }\n >;\n // Find the first element in the form that is invalid\n const firstInvalidElement = elements.find(\n (element) =>\n typeof element.checkValidity === \"function\" &&\n !element.checkValidity(),\n );\n if (firstInvalidElement === this) {\n input.focus();\n }\n } else {\n // If not part of a form, simply focus.\n input.focus();\n }\n }\n }\n\n private _togglePasswordVisibility() {\n this.showPassword = !this.showPassword;\n }\n\n private _clearSearch() {\n this.value = \"\";\n\n const input = this._inputEl;\n if (input) {\n input.value = \"\";\n input.focus();\n }\n\n this.setFormValue(\"\");\n\n if (this._hasUserInteracted) {\n this._validate();\n }\n\n this.dispatchEvent(\n new CustomEvent(\"nys-input\", {\n detail: { id: this.id, value: this.value },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private _updateOverlay(value: string, mask: string) {\n const overlay = this.shadowRoot?.querySelector(\n \".nys-textinput__mask-overlay\",\n ) as HTMLElement;\n if (!overlay) return;\n\n const filled = value;\n const remaining = mask.slice(filled.length);\n overlay.textContent = filled + remaining;\n }\n\n private _applyMask(value: string, mask: string): string {\n const digits = value.replace(/\\D/g, \"\");\n let result = \"\";\n\n // Special handling for tel to avoid trailing dash\n if (this.type === \"tel\") {\n if (digits.length > 0) {\n result = \"(\" + digits.substring(0, 3);\n }\n if (digits.length >= 4) {\n result += \") \" + digits.substring(3, 6);\n }\n // Add dash if there are more than 6 digits\n if (digits.length > 6) {\n result += \"-\" + digits.substring(6, 10);\n }\n return result;\n }\n\n // Default generic masking logic\n let digitIndex = 0;\n for (let i = 0; i < mask.length; i++) {\n if (mask[i] === \"_\" || mask[i].match(/[d9]/i)) {\n if (digitIndex < digits.length) {\n result += digits[digitIndex++];\n } else {\n break;\n }\n } else {\n result += mask[i]; // keep formatting symbols\n }\n }\n\n return result;\n }\n\n /**\n * Event Handlers\n * --------------------------------------------------------------------------\n */\n\n // Handle input event to check pattern validity\n private _handleInput(event: Event) {\n const input = event.target as HTMLInputElement;\n let newValue = input.value;\n\n const mask = this._maskPatterns[this.type];\n if (mask) {\n newValue = this._applyMask(newValue, mask);\n input.value = newValue; // ensure input reflects masked value\n this._updateOverlay(newValue, mask);\n }\n\n this.value = newValue;\n this.setFormValue(this.value);\n\n // Field is invalid after unfocused, validate aggressively on each input (e.g. Eager mode: a combination of aggressive and lazy.)\n if (this._hasUserInteracted) {\n this._validate();\n }\n\n this.dispatchEvent(\n new CustomEvent(\"nys-input\", {\n detail: { id: this.id, value: this.value },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n // Handle focus event\n private _handleFocus() {\n this.dispatchEvent(\n new Event(\"nys-focus\", { bubbles: true, composed: true }),\n );\n }\n\n // Handle blur event\n private _handleBlur() {\n if (!this._hasUserInteracted) {\n this._hasUserInteracted = true; // At initial unfocus: if input is invalid, start aggressive mode\n }\n this._validate();\n\n this.dispatchEvent(\n new Event(\"nys-blur\", { bubbles: true, composed: true }),\n );\n }\n\n private _validateButtonSlot(slotName: string) {\n const slot = this.shadowRoot?.querySelector(\n 'slot[name=\"' + slotName + '\"]',\n ) as HTMLSlotElement;\n const container = this.shadowRoot?.querySelector(\n \".nys-textinput__buttoncontainer\",\n );\n\n if (!slot || !container) return;\n\n const assignedElements = slot.assignedElements();\n\n let foundValidButton = false;\n\n assignedElements.forEach((node) => {\n const isNysButton =\n node instanceof HTMLElement &&\n node.tagName.toLowerCase() === \"nys-button\";\n\n if (isNysButton && !foundValidButton) {\n // First valid nys-button found\n foundValidButton = true;\n node.setAttribute(\"size\", \"sm\");\n node.setAttribute(\"variant\", \"primary\");\n //set button to be disabled if the input is disabled\n if (this.disabled) {\n node.setAttribute(\"disabled\", \"true\");\n } else {\n node.removeAttribute(\"disabled\");\n }\n } else {\n console.warn(\n \"The '\" +\n slotName +\n \"' slot only accepts a single <nys-button> element. Removing invalid or extra node:\",\n node,\n );\n node.remove();\n }\n });\n\n if (slotName === \"startButton\") {\n container.classList.toggle(\"has-start-button\", foundValidButton);\n } else if (slotName === \"endButton\") {\n container.classList.toggle(\"has-end-button\", foundValidButton);\n }\n }\n\n render() {\n return html`\n <div class=\"nys-textinput\">\n <nys-label\n id=\"${this.id}--label\"\n label=${this.label}\n description=${this.description}\n flag=${this.required && !this.readonly\n ? \"required\"\n : this.optional\n ? \"optional\"\n : \"\"}\n tooltip=${this.tooltip}\n ?inverted=${this.inverted}\n >\n <slot name=\"description\" slot=\"description\">${this.description}</slot>\n </nys-label>\n <div class=\"nys-textinput__buttoncontainer\">\n <slot\n name=\"startButton\"\n @slotchange=${() => this._validateButtonSlot(\"startButton\")}\n ></slot>\n <div class=\"nys-textinput__container\">\n <span class=\"nys-textinput__mask-overlay\"></span>\n <input\n class=\"nys-textinput__input\"\n type=${this.type === \"password\"\n ? this.showPassword\n ? \"text\"\n : \"password\"\n : this.type}\n name=${this.name}\n id=${this.id + \"--native\"}\n ?disabled=${this.disabled}\n ?required=${this.required && !this.readonly}\n ?readonly=${this.readonly}\n aria-labelledby=${ifDefined(\n this.label ? this.id + \"--label\" : undefined,\n )}\n aria-label=${ifDefined(\n !this.label && this.ariaLabel ? this.ariaLabel : undefined,\n )}\n aria-required=${this.required}\n aria-disabled=\"${this.disabled}\"\n aria-invalid=${this.showError ? \"true\" : \"false\"}\n aria-errormessage=${this.id + \"--error\"}\n aria-describedby=${ifDefined(\n this.showError ? this.id + \"--error\" : undefined,\n )}\n .value=${this.value}\n placeholder=${ifDefined(\n this.placeholder ? this.placeholder : undefined,\n )}\n pattern=${ifDefined(this.pattern ? this.pattern : undefined)}\n min=${ifDefined(this.min !== null ? this.min : undefined)}\n maxlength=${ifDefined(\n this.maxlength !== null ? this.maxlength : undefined,\n )}\n step=${ifDefined(this.step !== null ? this.step : undefined)}\n max=${ifDefined(this.max !== null ? this.max : undefined)}\n form=${ifDefined(this.form || undefined)}\n @input=${this._handleInput}\n @focus=\"${this._handleFocus}\"\n @blur=\"${this._handleBlur}\"\n />\n ${this.type === \"password\"\n ? html` <nys-button\n class=\"inline-icon\"\n id=\"password-toggle\"\n ariaLabel=\"password toggle\"\n variant=\"ghost\"\n circle\n size=\"sm\"\n @nys-click=${() =>\n !this.disabled && this._togglePasswordVisibility()}\n >\n <nys-icon\n slot=\"circle-icon\"\n size=\"2xl\"\n name=${this.showPassword ? \"visibility_off\" : \"visibility\"}\n ></nys-icon>\n </nys-button>`\n : \"\"}\n ${this.type === \"search\" &&\n this.value &&\n !this.disabled &&\n !this.readonly\n ? html` <nys-button\n class=\"inline-icon\"\n id=\"search-clear\"\n ariaLabel=\"clear search\"\n variant=\"ghost\"\n circle\n size=\"sm\"\n @nys-click=${() => this._clearSearch()}\n >\n <nys-icon\n slot=\"circle-icon\"\n size=\"2xl\"\n name=\"close\"\n ></nys-icon>\n </nys-button>`\n : \"\"}\n </div>\n <slot\n name=\"endButton\"\n @slotchange=${() => this._validateButtonSlot(\"endButton\")}\n ></slot>\n </div>\n <nys-errormessage\n id=${this.id + \"--error\"}\n ?showError=${this.showError}\n errorMessage=${this.errorMessage}\n ></nys-errormessage>\n </div>\n `;\n }\n}\n\nif (!customElements.get(\"nys-textinput\")) {\n customElements.define(\"nys-textinput\", NysTextinput);\n}\n","import { html, unsafeCSS } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { NysElement } from \"@nysds/internals\";\n// These elements are rendered inside this component's shadow DOM, so they must\n// be registered whenever nys-alert is used. Importing them here (intentional\n// side effect) guarantees the type icon and dismiss button always upgrade —\n// the dismiss button's accessible name lands on nys-button's real inner\n// <button>, which only exists once nys-button renders.\nimport \"@nysds/nys-icon\";\nimport \"@nysds/nys-button\";\n// @ts-ignore: SCSS module imported via bundler as inline\nimport styles from \"./nys-alert.scss?inline\";\n\n/**\n * Displays contextual feedback messages with semantic styling. Uses ARIA live regions for screen reader announcements.\n *\n * Use `info` for neutral information, `success` for confirmations, `warning` for caution, `danger` for errors,\n * and `emergency` for critical system-wide alerts. Set `dismissible` to let users close the alert.\n *\n * @summary Alert for contextual feedback with semantic types and live region support.\n * @element nys-alert\n *\n * @slot - Default slot for custom body content. Overrides `text` prop when provided.\n *\n * @fires nys-close - Fired when alert is dismissed. Detail: `{id, type, label}`.\n *\n * @example Basic\n * ```html\n * <nys-alert heading=\"This is a heading\"></nys-alert>\n * ```\n *\n * @example Text\n * ```html\n * <nys-alert\n * heading=\"This is a heading\"\n * text=\"This is additional information passed in through the text property\"\n * ></nys-alert>\n * ```\n *\n * @example Rich Text\n * ```html\n * <nys-alert heading=\"Rich Text\">\n * <p>This is a custom alert with <strong>HTML content</strong> passed in through the slot.</p>\n * <a href=\"https://www.ny.gov/\" target=\"_blank\">Learn more about our accessibility services</a>\n * </nys-alert>\n * ```\n *\n * @example Info Type\n * ```html\n * <nys-alert type=\"info\" heading=\"Info alert type\"></nys-alert>\n * ```\n *\n * @example Success Type\n * ```html\n * <nys-alert type=\"success\" heading=\"Success alert type\"></nys-alert>\n * ```\n *\n * @example Warning Type\n * ```html\n * <nys-alert type=\"warning\" heading=\"Warning alert type\"></nys-alert>\n * ```\n *\n * @example Danger Type\n * ```html\n * <nys-alert type=\"danger\" heading=\"Danger alert type\"></nys-alert>\n * ```\n *\n * @example Emergency Type\n * ```html\n * <nys-alert type=\"emergency\" heading=\"Emergency alert type\"></nys-alert>\n * ```\n *\n * @example Dismissible\n * ```html\n * <nys-alert heading=\"This alert is dismisable\" text=\"Close it by clicking on the X in the corner.\" dismissible>\n * </nys-alert>\n * ```\n *\n * @example Duration\n * ```html\n * <nys-alert heading=\"Disappearing alert\" text=\"This alert will disappear after 3 seconds.\" duration=\"3000\"></nys-alert>\n * ```\n *\n * @render Duration\n * ```html\n * <nys-button\n * class=\"nys-margin-b-100\"\n * label=\"Show alert\"\n * onclick=\"document.body.appendChild(Object.assign(document.createElement('nys-alert'), {heading: 'Disappearing alert', text: 'This alert will disappear after 3 seconds.', duration: 3000}))\"\n * ></nys-button>\n * ```\n *\n * @example Custom Icon\n * ```html\n * <nys-alert\n * type=\"emergency\"\n * heading=\"Winter storm warning: Dec 10th, 2024.\"\n * text=\"A major snowfall is expected across the state of New York for the weekend of Dec 7th. Stay home if possible and use extreme caution when driving.\"\n * icon=\"ac_unit\">\n * </nys-alert>\n *```\n\n * @example Action Links\n * ```html\n * <nys-alert\n * heading=\"Alert with links\"\n * primaryLabel=\"{primaryAction}\"\n * secondaryLabel=\"{secondaryAction}\"\n * primaryAction=\"https://www.ny.gov/\"\n * secondaryAction=\"https://www.ny.gov/\"\n * ></nys-alert>\n *```\n */\n\nexport class NysAlert extends NysElement {\n static styles = unsafeCSS(styles);\n\n /** Unique identifier. Auto-generated if not provided. */\n @property({ type: String, reflect: true }) id = \"\";\n\n /** Bold heading text displayed at the top of the alert. */\n @property({ type: String }) heading = \"\";\n\n /** Custom icon name. Defaults to type-appropriate icon if not set. */\n @property({ type: String }) icon = \"\";\n\n /** Shows close button allowing users to dismiss the alert. */\n @property({ type: Boolean, reflect: true }) dismissible = false;\n\n /** Auto-dismiss after specified milliseconds. Set to 0 to disable. */\n @property({ type: Number, reflect: true }) duration = 0;\n\n /** Body text content. Ignored if slot content is provided. */\n @property({ type: String }) text = \"\";\n\n /** URL for the primary action link. */\n @property({ type: String }) primaryAction = \"\";\n\n /** URL for the secondary action link. */\n @property({ type: String }) secondaryAction = \"\";\n\n /** Label text for primary action link. */\n @property({ type: String }) primaryLabel = \"Learn more\";\n\n /** Label text for secondary action link. */\n @property({ type: String }) secondaryLabel = \"Dismiss\";\n\n /**\n * Semantic alert type affecting color and ARIA role. `warning`/`danger`/`emergency` use\n * `role=\"alert\"` (assertive live region); `base`/`info`/`success` use `role=\"status\"` (polite).\n * @default \"base\"\n */\n @property({ type: String, reflect: true }) type:\n | \"base\"\n | \"info\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"emergency\" = \"base\";\n\n @state() private _alertClosed = false;\n @state() private _slotHasContent = true;\n\n /**\n * Returns the ARIA role and aria-live setting for the alert's live region based on type.\n * - `warning`/`danger`/`emergency` => role=\"alert\", aria-live=\"assertive\" (urgent, interrupts)\n * - `base`/`info`/`success` => role=\"status\", aria-live=\"polite\" (waits its turn)\n *\n * `aria-live` is set explicitly alongside `role` (rather than relying on the role's implicit\n * live-region semantics) for more consistent behavior across browser/AT combinations.\n */\n get ariaAttributes(): {\n role: \"alert\" | \"status\";\n ariaLive: \"polite\" | \"assertive\";\n } {\n const isUrgent =\n this.type === \"warning\" ||\n this.type === \"danger\" ||\n this.type === \"emergency\";\n\n return {\n role: isUrgent ? \"alert\" : \"status\",\n ariaLive: isUrgent ? \"assertive\" : \"polite\",\n };\n }\n\n /**\n * Lifecycle methods\n * --------------------------------------------------------------------------\n */\n\n private _timeoutId: any = null;\n\n connectedCallback() {\n // super.connectedCallback() (NysElement) assigns an id when one\n // is not provided. The live-region role/aria-live/aria-atomic and the\n // announced content they wrap must live on the SAME element\n // (.nys-alert__texts) so the accessible name/role pairing is never split\n // across nested elements (see nysds#1092). The dismiss button lives\n // outside .nys-alert__texts as a sibling so it is never read as part of\n // the announced content. This component intentionally keeps\n // defaultRole = null and does not move role to the host.\n super.connectedCallback();\n\n // For alerts that have durations, we set a timer to close them.\n if (this.duration > 0) {\n this._timeoutId = setTimeout(() => {\n this._closeAlert();\n }, this.duration);\n }\n }\n\n disconnectedCallback() {\n if (this._timeoutId) {\n clearTimeout(this._timeoutId);\n }\n super.disconnectedCallback();\n }\n\n firstUpdated() {\n this._checkSlotContent();\n }\n\n /**\n * Functions\n * --------------------------------------------------------------------------\n */\n private _resolveIconName() {\n return this.icon || this._checkAltNaming();\n }\n\n private _checkAltNaming() {\n // map 'success' to 'check_circle'\n return this.type === \"success\"\n ? \"check_circle\"\n : this.type === \"base\"\n ? \"info\"\n : this.type === \"danger\"\n ? \"error\"\n : this.type === \"emergency\"\n ? \"emergency_home\"\n : this.type;\n }\n\n private _closeAlert() {\n this._alertClosed = true;\n /* Dispatch a custom event for the close action:\n * allows bubbling up so if developers wish to implement a local save to remember closed alerts.\n */\n this.dispatchEvent(\n new CustomEvent(\"nys-close\", {\n detail: { id: this.id, type: this.type, label: this.heading },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n /**\n * Checks whether the default slot has content.\n * Updates `_slotHasContent` accordingly.\n */\n private async _checkSlotContent() {\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>(\"slot\");\n if (slot) {\n // Check if slot has assigned nodes with content (elements or non-empty text nodes)\n const assignedNodes = slot\n .assignedNodes({ flatten: true })\n .filter(\n (node) =>\n node.nodeType === Node.ELEMENT_NODE ||\n (node.nodeType === Node.TEXT_NODE && node.textContent?.trim()),\n );\n\n await Promise.resolve();\n this._slotHasContent = assignedNodes.length > 0;\n } else {\n await Promise.resolve();\n this._slotHasContent = false; // No slot found\n }\n }\n\n render() {\n const { role, ariaLive } = this.ariaAttributes;\n\n return html`\n ${!this._alertClosed\n ? html` <div\n class=\"nys-alert__container ${this._slotHasContent ||\n this.text?.trim().length > 0\n ? \"\"\n : \"nys-alert--centered\"}\"\n >\n <div part=\"nys-alert__icon\" class=\"nys-alert__icon\">\n <nys-icon\n name=\"${this._resolveIconName()}\"\n size=\"3xl\"\n label=\"${this.type} icon\"\n ></nys-icon>\n </div>\n <div\n class=\"nys-alert__texts\"\n role=${role}\n aria-live=${ariaLive}\n aria-atomic=\"true\"\n >\n ${this.heading?.trim()\n ? html`<p class=\"nys-alert__header\">${this.heading}</p>`\n : \"\"}\n ${this._slotHasContent\n ? html`<slot></slot>`\n : this.text?.trim().length > 0\n ? html`<p class=\"nys-alert__text\">${this.text}</p>`\n : \"\"}\n ${this.primaryAction || this.secondaryAction\n ? html`<div class=\"nys-alert__actions\">\n ${this.primaryAction\n ? html`<a\n href=${ifDefined(this.primaryAction || undefined)}\n class=\"nys-alert__action nys-alert__primary\"\n >\n ${this.primaryLabel}\n </a>`\n : \"\"}\n ${this.secondaryAction\n ? html`<a\n href=${ifDefined(this.secondaryAction || undefined)}\n class=\"nys-alert__action nys-alert__secondary\"\n >\n ${this.secondaryLabel}\n </a>`\n : \"\"}\n </div> `\n : \"\"}\n </div>\n ${this.dismissible\n ? html` <nys-button\n id=\"dismiss-btn\"\n variant=\"ghost\"\n circle\n icon=\"close\"\n size=\"sm\"\n ?inverted=${this.type === \"emergency\"}\n label=\"${this.heading}, alert, Close\"\n @nys-click=${this._closeAlert}\n style=${ifDefined(\n this.type === \"emergency\"\n ? \"--_nys-button-outline-color: var(--nys-color-ink-reverse, var(--nys-color-white, #fff));\"\n : undefined,\n )}\n ></nys-button>`\n : \"\"}\n </div>`\n : \"\"}\n `;\n }\n}\n\nif (!customElements.get(\"nys-alert\")) {\n customElements.define(\"nys-alert\", NysAlert);\n}\n","const nysBrandLogoSvg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"91\" height=\"55\" viewBox=\"0 0 91 55\" fill=\"none\">\n <path d=\"M55.1158 7.50499L58.2905 12.6494V7.5189C58.2905 7.5189 58.6487 7.26356 59.5098 7.26356C60.3708 7.26356 60.7378 7.5189 60.7378 7.5189V16.4327C60.7378 16.4327 60.3942 16.689 59.5215 16.689C58.6487 16.689 58.3295 16.4605 58.3295 16.4605L55.1421 11.3171V16.4337C55.1421 16.4337 54.7848 16.69 53.9111 16.69C53.0374 16.69 52.7065 16.4337 52.7065 16.4337V7.51989C52.7065 7.51989 53.0384 7.26456 53.9248 7.26456C54.8112 7.26456 55.1148 7.50697 55.1148 7.50697L55.1158 7.50499Z\" fill=\"#457AA5\"/>\n <path d=\"M67.2209 12.5948H64.9063V14.8709H68.2538C68.2538 14.8709 68.5047 15.1531 68.5047 15.772C68.5047 16.391 68.2538 16.688 68.2538 16.688H62.4589V7.26257H67.9892C67.9892 7.26257 68.2538 7.54572 68.2538 8.17859C68.2538 8.81146 67.9892 9.09362 67.9892 9.09362H64.9063V10.7637H67.2209C67.2209 10.7637 67.4728 11.0598 67.4728 11.6787C67.4728 12.2977 67.2209 12.5948 67.2209 12.5948Z\" fill=\"#457AA5\"/>\n <path d=\"M71.4802 16.4327L68.9791 7.5189C68.9791 7.5189 69.3491 7.26356 70.2101 7.26356C71.0711 7.26356 71.4275 7.5189 71.4275 7.5189L72.6839 12.0434C72.7766 12.3802 72.8166 12.6365 72.8557 12.7845C72.8557 12.7428 72.9221 12.3663 73.0011 12.0573L74.0984 7.5189C74.0984 7.5189 74.5211 7.26356 75.1176 7.26356C75.7141 7.26356 76.084 7.5189 76.084 7.5189L77.3004 12.7845C77.3004 12.6623 77.3795 12.3255 77.4586 12.0573L78.756 7.5189C78.7686 7.5189 79.1132 7.26356 79.9596 7.26356C80.806 7.26356 81.1897 7.5189 81.1897 7.5189L78.6496 16.4327C78.6496 16.4327 78.2922 16.6751 77.4859 16.689C76.5468 16.689 76.2158 16.4327 76.2158 16.4327L75.223 12.2987C75.1449 11.9887 75.0902 11.6529 75.0785 11.5844L74.9184 12.2987L73.9266 16.4327C73.9266 16.4327 73.583 16.689 72.7092 16.689C71.8355 16.689 71.4802 16.4327 71.4802 16.4327Z\" fill=\"#457AA5\"/>\n <path d=\"M54.3485 19.2195L55.4331 21.1579C55.804 21.8176 56.0022 22.5587 56.0285 22.6521C56.0559 22.5587 56.2404 21.8315 56.624 21.1579L57.735 19.2195C57.735 19.2195 58.0659 18.9771 58.8723 18.9771C59.786 18.9771 60.1697 19.2861 60.1697 19.2861L57.2449 24.4295V28.1453C57.2449 28.1453 56.9013 28.4026 56.0276 28.4026C55.1539 28.4026 54.8239 28.1453 54.8239 28.1453V24.3898L51.8991 19.2871C51.8991 19.2871 52.2965 18.9781 53.2082 18.9781C53.9892 18.9781 54.3465 19.2205 54.3465 19.2205L54.3485 19.2195Z\" fill=\"#457AA5\"/>\n <path d=\"M64.6017 28.497C61.4788 28.497 60.117 26.6381 60.117 23.7033C60.117 20.7684 61.4798 18.8827 64.6017 18.8827C67.7237 18.8827 69.0865 20.7674 69.0865 23.7033C69.0865 26.6391 67.711 28.497 64.6017 28.497ZM64.6017 26.6778C65.9235 26.6778 66.6391 25.4667 66.6391 23.7033C66.6391 21.9398 65.9235 20.7138 64.6017 20.7138C63.2799 20.7138 62.5653 21.9398 62.5653 23.7033C62.5653 25.4667 63.2789 26.6778 64.6017 26.6778Z\" fill=\"#457AA5\"/>\n <path d=\"M72.844 28.1463C72.844 28.1463 72.4867 28.4036 71.6129 28.4036C70.7392 28.4036 70.4083 28.1463 70.4083 28.1463V19.3546C70.4083 19.3546 71.4011 18.8837 73.2266 18.8837C75.9913 18.8837 77.275 19.9607 77.275 21.8454C77.275 23.7301 75.8722 24.4563 75.7004 24.4712L77.8432 28.0936C77.5796 28.2675 76.8523 28.4026 76.3623 28.4026C75.7267 28.4026 75.225 28.1741 75.225 28.1741L73.6113 25.3068C73.5175 25.1041 73.3858 24.9561 73.1612 24.9561H72.844V28.1463ZM73.5322 20.7148C73.1349 20.7148 72.844 20.7952 72.844 20.7952V23.138H73.5049C74.4694 23.138 74.8413 22.4514 74.8413 21.9269C74.8413 21.2403 74.3786 20.7148 73.5322 20.7148Z\" fill=\"#457AA5\"/>\n <path d=\"M87.211 28.0787C87.211 28.0787 86.5901 28.4026 85.5836 28.4026C84.7236 28.4026 84.3663 28.1741 84.3663 28.1741L81.2317 23.8384V28.1463C81.2317 28.1463 80.9007 28.4036 80.027 28.4036C79.1533 28.4036 78.797 28.1463 78.797 28.1463V19.2344C78.797 19.2344 79.1533 18.9781 80.027 18.9781C80.9007 18.9781 81.2317 19.2344 81.2317 19.2344V23.4221L84.2618 19.2205C84.2618 19.2205 84.6182 18.9781 85.4782 18.9781C86.4701 18.9781 86.8684 19.3139 86.8684 19.3139L83.9045 23.4221L87.212 28.0797L87.211 28.0787Z\" fill=\"#457AA5\"/>\n <path d=\"M58.9806 31.3374C59.1515 32.1988 58.7014 32.8853 58.1987 33.0602C57.7096 32.7244 56.9296 32.4273 56.1096 32.4273C55.2895 32.4273 54.8122 32.7502 54.8122 33.2082C54.8122 33.6394 55.1958 33.7874 56.214 34.1252L57.4841 34.5415C58.8479 34.9985 59.6933 35.7 59.6933 37.1803C59.6933 38.8911 58.5823 40.2105 55.8831 40.2105C53.9912 40.2105 52.8256 39.5637 52.4029 39.1335C52.2711 38.5007 52.6137 37.7059 53.1057 37.4505C53.5284 37.7744 54.7848 38.3934 56.0676 38.3934C56.8359 38.3934 57.2596 38.1112 57.2596 37.5986C57.2596 37.2359 57.034 37.0064 56.5049 36.8306L54.3758 36.1719C53.2365 35.8073 52.3775 34.9737 52.3775 33.6126C52.3775 31.6732 53.6729 30.5973 56.0676 30.5973C57.5895 30.5973 58.4779 31.0145 58.9806 31.3374Z\" fill=\"#457AA5\"/>\n <path d=\"M60.3542 32.5227C60.3542 32.5227 60.1023 32.2534 60.1023 31.6067C60.1023 30.9599 60.3542 30.6906 60.3542 30.6906H67.5382C67.5382 30.6906 67.7901 30.9738 67.7901 31.6067C67.7901 32.2395 67.5382 32.5227 67.5382 32.5227H65.1562V39.8608C65.1562 39.8608 64.8136 40.1161 63.9525 40.1161C63.0915 40.1161 62.7088 39.8608 62.7088 39.8608V32.5227H60.3542Z\" fill=\"#457AA5\"/>\n <path d=\"M72.7502 30.9341L76.3232 39.8201C76.3232 39.8201 75.9659 40.1171 75.0658 40.1171C74.2321 40.1171 73.9032 39.8747 73.9032 39.8747L73.254 38.3258H69.8538L69.2446 39.8747C69.2446 39.8747 68.901 40.1171 68.081 40.1171C67.1819 40.1171 66.7972 39.8201 66.7972 39.8201L70.3702 30.9341C70.3702 30.9341 70.7002 30.6916 71.5592 30.6916C72.4183 30.6916 72.7502 30.9341 72.7502 30.9341ZM70.5674 36.5216H72.5394L71.8775 34.9051C71.7457 34.5822 71.5729 33.9226 71.5583 33.855C71.5329 33.9226 71.3337 34.5822 71.2156 34.9051L70.5674 36.5216Z\" fill=\"#457AA5\"/>\n <path d=\"M75.5949 32.5227C75.5949 32.5227 75.3431 32.2534 75.3431 31.6067C75.3431 30.9599 75.5949 30.6906 75.5949 30.6906H82.779C82.779 30.6906 83.0298 30.9738 83.0298 31.6067C83.0298 32.2395 82.779 32.5227 82.779 32.5227H80.397V39.8608C80.397 39.8608 80.0543 40.1161 79.1933 40.1161C78.3323 40.1161 77.9496 39.8608 77.9496 39.8608V32.5227H75.5949Z\" fill=\"#457AA5\"/>\n <path d=\"M88.9047 36.0228H86.5891V38.299H89.9356C89.9356 38.299 90.1875 38.5821 90.1875 39.2001C90.1875 39.8181 89.9356 40.1161 89.9356 40.1161H84.1408V30.6897H89.6711C89.6711 30.6897 89.9356 30.9728 89.9356 31.6057C89.9356 32.2385 89.6711 32.5217 89.6711 32.5217H86.5882V34.1908H88.9038C88.9038 34.1908 89.1547 34.4879 89.1547 35.1078C89.1547 35.7278 88.9038 36.0219 88.9038 36.0219L88.9047 36.0228Z\" fill=\"#457AA5\"/>\n <path d=\"M51.7107 54.9999C51.577 54.9999 51.4335 54.974 51.2939 54.8965C51.085 54.7803 50.9395 54.5876 50.8858 54.3551C50.8233 54.0868 50.8936 53.7868 51.082 53.5116L51.1426 53.4202C51.2041 53.3268 51.2685 53.2354 51.3407 53.1519C51.4218 53.0595 51.5047 52.995 51.5741 52.9493C51.5243 52.6691 51.5418 52.4267 51.5682 52.2061C51.5877 52.0233 51.6346 51.8683 51.6726 51.7451C51.6892 51.6925 51.7058 51.6388 51.7185 51.5812C51.8201 51.145 51.8855 50.7397 51.9206 50.3453C51.9528 49.9916 51.947 49.9846 51.8864 49.9061C51.7 49.6707 51.3847 49.5018 51.0498 49.3229C50.8878 49.2365 50.7286 49.1491 50.5754 49.0557C49.607 48.4536 48.6376 47.8505 47.6701 47.2465L47.3294 47.0339C47.2513 46.9862 47.1147 46.9156 46.9516 46.8282C45.8817 46.2659 45.172 45.8526 45.0539 45.2595C45.0363 45.173 44.9465 44.9644 44.884 44.864C44.8411 44.8611 44.7307 44.8521 44.6546 44.8471C44.3032 44.8183 43.7711 44.7726 43.3484 44.3196C43.2635 44.2272 43.1786 44.1408 43.1005 44.0583C42.5098 43.4443 42.0003 42.9148 41.9329 41.5993C41.9241 41.4275 41.9251 41.2506 41.928 41.0728C41.9339 40.5283 41.927 40.1836 41.7103 39.962C41.6078 39.8567 41.435 39.7862 41.2349 39.7037C40.9889 39.6034 40.7097 39.4881 40.45 39.2686C40.37 39.2 40.2792 39.1007 40.1776 38.9854C40.0712 38.8602 39.9082 38.6724 39.7969 38.6337C38.974 38.3436 37.986 38.3178 36.96 38.3178L3.07245 38.2909C2.85964 38.2909 2.66927 38.3138 2.48477 38.3347C2.07378 38.3823 1.60812 38.437 1.2313 38.0962C0.866192 37.7664 0.815429 37.2607 0.814452 36.8076L0.8125 34.3993C0.8125 34.2722 0.847644 34.147 0.913051 34.0387C1.22544 33.529 1.83265 33.2558 2.3686 33.0144C2.56872 32.924 2.77666 32.8316 2.88795 32.7571C3.17593 32.5623 3.43561 32.302 3.7109 32.0248C3.91688 31.8182 4.13068 31.6046 4.36887 31.4059C4.69786 31.1317 5.07078 30.931 5.43296 30.7372C5.74535 30.5703 6.03821 30.4124 6.24127 30.2395C6.38575 30.1173 6.49216 29.9146 6.61906 29.6792C6.75476 29.4238 6.90998 29.1337 7.15208 28.8804C7.41273 28.6081 7.7427 28.4194 8.03263 28.2535C8.69744 27.871 8.68182 27.8322 8.57736 27.5769C8.52855 27.4577 8.48072 27.3553 8.43972 27.2639C8.24447 26.8357 8.07754 26.4681 8.19078 25.7051C8.2025 25.6306 8.21616 25.5521 8.22983 25.4706C8.25619 25.3325 8.30305 25.0772 8.27571 25.0037C8.27571 25.0037 8.26204 24.9927 8.23471 24.9778C8.21128 24.9659 8.12928 24.9669 8.06875 24.9679C7.87448 24.9659 7.51914 24.9768 7.2497 24.6689C6.98124 24.3629 6.99686 23.9555 7.03982 23.6356C7.08179 23.3127 7.06032 23.1051 7.03982 22.9223C6.95684 22.1453 7.21358 21.7817 8.10097 21.424C10.7524 20.351 12.901 19.9884 14.8613 20.2805C14.9775 20.2974 15.1356 20.2656 15.3182 20.2269C15.5944 20.1702 15.9351 20.1017 16.312 20.1752L18.3952 20.5766C19.2475 20.7415 19.6653 20.9054 20.3047 21.4995C20.6327 21.8046 20.7655 21.7718 21.3327 21.5661C21.6168 21.4638 21.9399 21.3485 22.3323 21.2949C22.9727 21.2084 23.5731 21.2661 24.153 21.3227C24.4136 21.3475 24.6762 21.3734 24.9408 21.3843C25.2356 21.3952 25.6085 21.2561 25.9717 21.121C26.1318 21.0614 26.2889 21.0028 26.4412 20.9541C26.78 20.8468 27.0973 20.7991 27.4038 20.7514C27.5551 20.7266 27.7064 20.7037 27.8607 20.6729C27.8714 20.6531 27.8821 20.6332 27.8939 20.6113C27.9417 20.5249 27.9944 20.4345 28.0598 20.3411C28.3419 19.9497 28.7471 19.7003 29.0722 19.4966L29.2078 19.4122C29.5564 19.1916 29.8629 18.9879 30.105 18.7386C30.5423 18.2796 31.1232 18.3114 31.5108 18.3312C31.6455 18.3392 31.8495 18.3481 31.91 18.3223C32.1678 18.207 31.9413 17.3993 31.8065 16.9165C31.7119 16.5777 31.6299 16.2846 31.6133 16.0183C31.5664 15.2642 31.9764 14.7317 32.3064 14.3045C32.5651 13.9687 32.7213 13.7481 32.7164 13.5355C32.7164 13.4948 32.7027 13.4382 32.6851 13.3845C32.4587 13.4948 32.0955 13.6369 31.6796 13.4421C31.0129 13.1302 30.6468 12.0264 30.8508 11.3985C31.0197 10.8779 31.54 10.5421 31.9198 10.2957L32.0565 10.2053C32.3806 9.98471 32.7242 9.79792 33.0542 9.6181C33.5159 9.36873 33.9513 9.13227 34.2949 8.82726C34.4404 8.69711 34.5761 8.56994 34.7089 8.44376C35.0076 8.1626 35.3161 7.8715 35.6792 7.61319C35.7056 7.5188 35.728 7.34096 35.7437 7.22571C35.7729 7.00714 35.8022 6.78062 35.8803 6.5849C36.2513 5.64304 37.1592 4.90884 37.9597 4.25908C38.2252 4.04448 38.4771 3.84081 38.6743 3.65602C38.7992 3.53878 38.9222 3.42055 39.0452 3.30332C39.6388 2.73701 40.2509 2.15084 40.9967 1.68289C41.601 1.30536 42.3898 0.833439 43.1249 0.552274C44.0972 0.1807 44.5579 0.208518 45.4766 0.262168L45.6474 0.27111C47.3607 0.371455 49.1384 0.32476 50.8575 0.281045C51.7205 0.258194 52.5796 0.235343 53.4347 0.230376C53.6651 0.230376 54.0156 0.185667 54.3836 0.138972C55.6078 -0.0140291 56.994 -0.188888 57.7818 0.503592C58.1118 0.792705 58.2924 1.19806 58.3031 1.67594C58.311 2.05248 58.1567 2.33464 58.0435 2.54129C58.0064 2.60686 57.9527 2.7082 57.9458 2.74297C57.9488 2.73205 57.9849 2.78768 58.0103 2.82742C58.1362 3.01718 58.3686 3.37088 58.2748 3.89843C58.2397 4.10111 58.1811 4.3167 58.1216 4.53528C58.0464 4.81147 57.9693 5.09761 57.9624 5.31419C57.9498 5.69073 57.6335 5.99376 57.2703 5.97289C56.9013 5.95998 56.6104 5.64603 56.6231 5.26849C56.6367 4.89195 56.7392 4.50944 56.831 4.17264C56.8788 3.9948 56.9276 3.82094 56.9569 3.65502C56.9481 3.65502 56.9218 3.62323 56.8993 3.58746C56.791 3.42254 56.6065 3.14535 56.6065 2.73701C56.6065 2.36345 56.7607 2.08328 56.873 1.87862C56.9072 1.81702 56.9589 1.72462 56.9657 1.69084C56.9608 1.58354 56.9267 1.55274 56.9072 1.53685C56.5694 1.23979 55.2544 1.40372 54.5496 1.49313C54.1386 1.5438 53.752 1.59348 53.4435 1.59547C52.5971 1.60043 51.7439 1.62229 50.8907 1.64315C49.1442 1.68886 47.3382 1.73654 45.5722 1.63421L45.3985 1.62328C44.5345 1.57162 44.3022 1.55871 43.5964 1.82894C42.9618 2.07235 42.2101 2.5244 41.7006 2.84431C41.0699 3.23973 40.533 3.75338 39.9648 4.29683C39.8379 4.41804 39.712 4.53925 39.5831 4.65947C39.3479 4.87804 39.0794 5.09661 38.7953 5.32611C38.1237 5.87056 37.3642 6.48555 37.1231 7.09457C37.1065 7.14425 37.085 7.30221 37.0713 7.40753C37.0147 7.84666 36.9424 8.3931 36.5041 8.69016C36.1927 8.90277 35.9145 9.16704 35.6187 9.44523C35.4771 9.57935 35.3317 9.71546 35.1774 9.85257C34.7186 10.2629 34.1924 10.548 33.6838 10.8222C33.3675 10.9931 33.0698 11.1541 32.8033 11.3369C32.7554 11.3707 32.6978 11.4064 32.6373 11.4462C32.5114 11.5276 32.2332 11.7065 32.1346 11.8217C32.1424 11.8992 32.1726 12.0115 32.2117 12.1009C32.3757 12.0214 32.6041 11.924 32.8804 11.9459C33.6633 12.0135 34.0401 12.8937 34.0558 13.4988C34.0743 14.2191 33.677 14.7337 33.3587 15.145C33.0971 15.4868 32.9351 15.7074 32.9487 15.9319C32.9565 16.0511 33.0288 16.3114 33.0932 16.5419C33.3314 17.3933 33.7746 18.978 32.4479 19.5701C32.0965 19.7281 31.7314 19.7082 31.4375 19.6933C31.3126 19.6864 31.1046 19.6764 31.047 19.7023C30.7171 20.051 30.3227 20.3113 29.9166 20.5706L29.7692 20.663C29.5212 20.816 29.2654 20.976 29.1405 21.1488C29.1083 21.1935 29.0819 21.2412 29.0585 21.2859C28.9345 21.5085 28.7256 21.884 28.174 21.9993C27.9827 22.04 27.7943 22.0708 27.6059 22.0996C27.3364 22.1414 27.0807 22.1811 26.8386 22.2566C26.7087 22.2993 26.5711 22.35 26.4334 22.4017C25.9697 22.5745 25.4435 22.7732 24.8871 22.7474C24.5981 22.7355 24.3131 22.7087 24.027 22.6808C23.4989 22.6282 22.9981 22.5805 22.511 22.6481C22.2572 22.6828 22.0258 22.7653 21.7817 22.8537C21.1716 23.0733 20.3369 23.3733 19.4046 22.508C18.9927 22.1265 18.8267 22.049 18.1473 21.9178L16.065 21.5164C15.942 21.4936 15.775 21.5264 15.5818 21.5651C15.3289 21.6168 15.0136 21.6784 14.6719 21.6297C12.9508 21.3724 11.0218 21.7112 8.59689 22.6928C8.49829 22.7325 8.42703 22.7643 8.37431 22.7891C8.39579 22.9779 8.42312 23.2491 8.39091 23.6217C8.53343 23.6416 8.69353 23.6843 8.86047 23.7737C9.81228 24.2834 9.63461 25.256 9.5487 25.724C9.53601 25.7876 9.52528 25.8511 9.51551 25.9127C9.4628 26.2694 9.49501 26.3429 9.65511 26.6917C9.70392 26.798 9.75664 26.9162 9.81326 27.0543C10.3941 28.4681 9.28415 29.1039 8.68865 29.4447C8.46705 29.5719 8.23764 29.701 8.11268 29.8331C7.99944 29.9524 7.89987 30.1372 7.79541 30.3329C7.62945 30.6448 7.44104 30.9975 7.10522 31.2847C6.79088 31.5529 6.41894 31.7536 6.05871 31.9454C5.74144 32.1153 5.44077 32.2762 5.21623 32.464C5.02782 32.6219 4.84527 32.8048 4.65295 32.9985C4.34252 33.3085 4.02524 33.6294 3.62499 33.8976C3.41901 34.0347 3.17203 34.147 2.9104 34.2652C2.69661 34.3606 2.33443 34.5225 2.14992 34.6626L2.15383 36.8096C2.15383 36.8881 2.15578 36.9527 2.15871 37.0023C2.21533 36.9974 2.27586 36.9904 2.32662 36.9835C2.5287 36.9606 2.77959 36.9308 3.06952 36.9308L36.9581 36.9566C38.0573 36.9566 39.2141 36.9884 40.2304 37.3471C40.6755 37.5021 40.9801 37.8538 41.1812 38.0853C41.2281 38.1399 41.2681 38.1896 41.3052 38.2234C41.4018 38.3048 41.5551 38.3674 41.7328 38.441C42.0129 38.5562 42.3615 38.7003 42.6572 39.0043C43.2811 39.6411 43.2713 40.4469 43.2645 41.0927C43.2606 41.2417 43.2606 41.3897 43.2664 41.5328C43.3084 42.3326 43.5261 42.5581 44.0532 43.1055C44.1372 43.1929 44.2251 43.2853 44.3188 43.3847C44.3842 43.4542 44.5287 43.4701 44.761 43.491C45.0412 43.5138 45.3897 43.5417 45.6953 43.7751C46.0291 44.0275 46.2546 44.5888 46.3376 44.8809C46.5455 45.0846 47.2777 45.4711 47.5647 45.6211C47.7639 45.7264 47.9298 45.8158 48.0265 45.8754L48.3672 46.088C49.3346 46.6891 50.3011 47.2922 51.2705 47.8943C51.3993 47.9727 51.533 48.0463 51.6707 48.1188C52.0924 48.3443 52.5698 48.6006 52.9291 49.0567C53.3215 49.5544 53.2942 50.0045 53.259 50.4029C53.3156 50.2936 53.3781 50.1893 53.4513 50.0879C53.5841 49.8982 53.7393 49.7541 53.877 49.626C54.0136 49.4998 54.1073 49.4104 54.1396 49.3388C54.1132 49.2772 54.0527 49.1739 54.0117 49.1034C53.8487 48.8232 53.6271 48.4387 53.7315 47.9857C53.7725 47.8108 53.8789 47.6588 54.0283 47.5634C54.0849 47.5276 54.205 47.4591 54.3631 47.3717C54.5818 47.2495 55.1373 46.9405 55.475 46.71C54.9723 45.5913 55.1392 44.2163 55.2886 42.9843C55.3345 42.6038 55.3784 42.2451 55.3989 41.9222C55.4204 41.5467 55.7337 41.2606 56.1076 41.2834C56.4776 41.3063 56.7588 41.6301 56.7353 42.0057C56.7148 42.3693 56.667 42.7498 56.6182 43.1522C56.4776 44.3166 56.3165 45.637 56.833 46.3911C56.954 46.5669 56.994 46.7895 56.9452 47.0021C56.8417 47.4502 56.3898 47.7879 55.1958 48.4606C55.352 48.7308 55.5395 49.0904 55.4731 49.5167C55.4623 49.5812 55.4487 49.6428 55.4321 49.7015C55.766 49.5793 56.1154 49.464 56.4845 49.3577C57.8775 48.9543 59.3409 48.7745 61.225 48.7745C62.0587 48.7745 62.8006 48.5053 63.5874 48.2211C64.2103 47.9946 64.8546 47.7621 65.576 47.6508C66.1852 47.5555 66.5005 47.7562 66.7728 47.9688C66.8636 48.0403 66.93 48.09 67.0442 48.1357C67.3625 48.2619 67.7325 48.2211 68.1601 48.1754C68.5925 48.1277 69.0836 48.0731 69.5844 48.2042C69.8821 48.2837 70.09 48.5579 70.0861 48.8709C70.0744 50.0571 68.5076 50.5459 67.7549 50.7814L67.0384 51.0099C66.4985 51.1848 65.9567 51.3586 65.41 51.5176C65.1631 51.5881 64.918 51.6587 64.672 51.7223C64.3889 51.7948 64.099 51.9597 63.7944 52.1316C63.481 52.3094 63.1579 52.4922 62.786 52.6174C62.1426 52.83 61.4837 52.9413 60.6471 52.9761C60.4069 52.987 60.1746 53.0943 59.9295 53.2056C59.5674 53.3735 59.1154 53.5801 58.6107 53.4132C58.3949 53.3864 57.5534 53.6775 57.1502 53.8196C56.832 53.9289 56.5577 54.0242 56.3419 54.0759C55.598 54.2528 54.8415 54.3918 54.1103 54.527L53.5968 54.6223C53.1516 54.7058 52.7035 54.7922 52.2613 54.8926L52.2076 54.9085C52.0797 54.9482 51.9021 55.0038 51.7078 55.0038L51.7107 54.9999ZM53.0735 51.6746C53.0569 51.7471 53.0403 51.8196 53.0237 51.8941C53.0032 51.9806 52.9788 52.064 52.9544 52.1455C52.9281 52.2359 52.9066 52.3055 52.8988 52.3651C52.8793 52.5379 52.8773 52.6313 52.8978 52.7247C52.9495 52.9791 52.9388 53.1907 52.8949 53.3645C53.0482 53.3347 53.2024 53.3049 53.3566 53.2751L53.875 53.1808C54.5896 53.0486 55.3296 52.9125 56.0412 52.7436C56.1906 52.7078 56.4483 52.6194 56.7217 52.525C57.7721 52.1604 58.4994 51.9359 59.0295 52.1127C59.0646 52.1058 59.2559 52.0173 59.3828 51.9597C59.7001 51.8137 60.0945 51.6328 60.5924 51.611C61.3021 51.5812 61.8498 51.4908 62.372 51.3169C62.622 51.2345 62.8748 51.0914 63.1442 50.9374C63.5123 50.7298 63.892 50.5142 64.3469 50.3969C64.5793 50.3373 64.8136 50.2707 65.0459 50.2042C65.5789 50.0482 66.11 49.8773 66.6362 49.7064L67.1253 49.5514C66.9388 49.5246 66.7504 49.4779 66.56 49.4014C66.2672 49.2862 66.0836 49.1411 65.9616 49.0457C65.9313 49.0229 65.906 48.999 65.8757 48.9812C65.8737 48.9851 65.8405 48.9851 65.7781 48.9941C65.1845 49.0855 64.6281 49.2862 64.0394 49.4998C63.1794 49.8107 62.293 50.1326 61.2279 50.1326C59.4717 50.1326 58.1235 50.2966 56.8535 50.6642C55.7142 50.992 54.7868 51.3984 54.0166 51.9031C53.7901 52.0521 53.5001 52.0481 53.2776 51.8951C53.1917 51.8365 53.1214 51.76 53.0735 51.6716V51.6746Z\" fill=\"#154973\"/>\n <path d=\"M67.6348 51.8019C67.6348 51.8019 67.6173 51.782 67.6173 51.7303C67.6173 51.6787 67.6348 51.6588 67.6348 51.6588H68.5564C68.5564 51.6588 68.5749 51.6806 68.5749 51.7303C68.5749 51.78 68.5564 51.8019 68.5564 51.8019H68.1932V52.9205C68.1932 52.9205 68.1659 52.9404 68.0976 52.9404C68.0292 52.9404 67.998 52.9205 67.998 52.9205V51.8019H67.6348Z\" fill=\"#154973\"/>\n <path d=\"M69.4282 52.8659C69.4135 52.8748 69.3891 52.8858 69.3471 52.8858C69.3178 52.8858 69.2837 52.8798 69.27 52.8659L68.9889 52.1476C68.9723 52.1088 68.9459 52.0323 68.944 52.0214C68.944 52.0264 68.9371 52.1277 68.9332 52.1565L68.8815 52.9205C68.8815 52.9205 68.8561 52.9404 68.7858 52.9404C68.7155 52.9404 68.6862 52.9205 68.6862 52.9205L68.7839 51.6787C68.7839 51.6787 68.8112 51.6588 68.8776 51.6588C68.9518 51.6588 68.9781 51.6787 68.9781 51.6787L69.3042 52.5162L69.3471 52.6533C69.3481 52.6473 69.3774 52.5559 69.392 52.5162L69.7181 51.6787C69.7181 51.6787 69.7464 51.6588 69.8206 51.6588C69.886 51.6588 69.9124 51.6787 69.9124 51.6787L70.01 52.9205C70.01 52.9205 69.9807 52.9404 69.9104 52.9404C69.8401 52.9404 69.8167 52.9205 69.8167 52.9205L69.763 52.1546L69.7523 52.0194C69.7523 52.0194 69.722 52.1148 69.7093 52.1456L69.4282 52.8659Z\" fill=\"#154973\"/>\n</svg>`;\n\nexport default nysBrandLogoSvg;\n","import { html, unsafeCSS, nothing, type PropertyValues } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { NysElement } from \"@nysds/internals\";\n\n// These elements are rendered inside this component's shadow DOM, so they must\n// be registered whenever nys-unavheader is used. Importing them here\n// (intentional side effect) guarantees the buttons, icons, search input, and\n// statewide alerts always upgrade — the translate trigger's ARIA state lands on\n// nys-button's real inner <button>, which only exists once nys-button renders.\nimport \"@nysds/nys-button\";\nimport \"@nysds/nys-icon\";\nimport \"@nysds/nys-textinput\";\nimport \"@nysds/nys-alert\";\nimport nysLogo from \"./nys-unav.logo\";\n// @ts-ignore: SCSS module imported via bundler as inline\nimport styles from \"./nys-unavheader.scss?inline\";\n\ninterface Language {\n code: string;\n label: string;\n nativeText: string;\n disclaimer?: string;\n rtl?: boolean;\n url?: string;\n}\n\n/**\n * Statewide alert endpoint, read once per page load. Sites don't opt in or out and\n * never author the content, so an alert reads identically everywhere it appears.\n *\n * Production is https://alerts-cta.static-assets.ny.gov/alerts.json.\n * For dev testing use: https://alerts-cta-dev.static-assets.ny.gov/alerts.json\n */\nexport const NYS_ALERT_URL =\n \"https://alerts-cta.static-assets.ny.gov/alerts.json\";\n\n/** An `alert` entry in the feed. */\ninterface FeedAlert {\n /** \"on\" publishes the alert; any other value (or absence) hides it. */\n status?: string;\n /** \"high\" | \"medium\" | \"low\" — maps to a `nys-alert` type. */\n severity?: string;\n /** Alert heading. */\n headline?: string;\n /** Alert body copy. */\n description?: string;\n /** Accessible name for the link, when the visible label isn't descriptive enough. */\n linkAriaLabel?: string;\n /** Destination of the alert's link. */\n link?: string;\n /** Visible label for the link. */\n linkTitle?: string;\n /** Feed-side icon name (e.g. \"Virus\"), mapped to a `nys-icon` name. */\n icon?: string;\n}\n\n/** `alerts.json` — one alert, or several once the feed starts sending them. */\ninterface AlertFeed {\n alert?: FeedAlert | FeedAlert[];\n}\n\ntype AlertType =\n | \"base\"\n | \"info\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"emergency\";\n\n/** Feed severity → `nys-alert` type. Unrecognized severities fall back to `info`. */\nconst SEVERITY_TYPES: Record<string, AlertType> = {\n high: \"emergency\",\n medium: \"warning\",\n low: \"info\",\n // Feed authors may also use the design system's own vocabulary\n emergency: \"emergency\",\n danger: \"danger\",\n warning: \"warning\",\n success: \"success\",\n info: \"info\",\n base: \"base\",\n};\n\n/**\n * Feed icon name → `nys-icon` name. Deliberately a closed list: an icon the library\n * doesn't have would render as a blank square, so anything unrecognized falls back\n * to the alert type's own default icon.\n */\nconst FEED_ICONS: Record<string, string> = {\n virus: \"coronavirus\",\n coronavirus: \"coronavirus\",\n snow: \"ac_unit\",\n snowflake: \"ac_unit\",\n winter: \"ac_unit\",\n ac_unit: \"ac_unit\",\n wind: \"air\",\n air: \"air\",\n sun: \"clear_day\",\n heat: \"clear_day\",\n clear_day: \"clear_day\",\n rain: \"rainy\",\n flood: \"rainy\",\n rainy: \"rainy\",\n alert: \"warning\",\n warning: \"warning\",\n emergency: \"emergency_home\",\n emergency_home: \"emergency_home\",\n error: \"error\",\n info: \"info\",\n notifications: \"notifications\",\n schedule: \"schedule\",\n location_on: \"location_on\",\n};\n\n/** `true` only for the feed's explicit \"on\" switch. */\nconst isPublished = (status?: string) => status?.trim().toLowerCase() === \"on\";\n\n/** The element the translate menu is rendered into, referenced by `aria-controls`. */\nconst LANGUAGE_LIST_ID = \"nys-unavheader__languagelist\";\n\n/** Accessible name of the menu, matching the name of the trigger that opens it. */\nconst LANGUAGE_MENU_LABEL = \"Translate\";\n\n/** Marks each language option, so the menu can collect them for roving focus. */\nconst LANGUAGE_OPTION_CLASS = \"nys-unavheader__languagelink\";\n\n/** Both translate triggers — only one is visible at a time, depending on width. */\nconst TRANSLATE_TRIGGER_IDS = [\n \"nys-unavheader__translate--desktop\",\n \"nys-unavheader__translate--mobile\",\n] as const;\n\n/**\n * A rendered `nys-button`. Its real `<button>` — the element that actually carries\n * the button role, the tab stop, and any ARIA — lives in its own shadow root.\n */\ntype ButtonElement = HTMLElement & { updateComplete?: Promise<unknown> };\n\n/** The real control inside a `nys-button`, once it has rendered. */\nconst innerControl = (button: ButtonElement): HTMLElement =>\n button.shadowRoot?.querySelector(\"button\") ?? button;\n\n/**\n * Language code → BCP 47 tag for the option's `lang` attribute.\n *\n * The codes double as Localize language codes, so they aren't all valid language tags.\n * Only the ones that differ need an entry; everything else already is a valid tag\n * and is used as written. Without a correct `lang`, a screen reader reads each\n * option in the page's own voice — \"Español\" announced as English.\n */\nconst LANGUAGE_TAGS: Record<string, string> = {\n zh: \"zh-Hans\",\n \"zh-traditional\": \"zh-Hant\",\n};\n\nconst languageTag = (code: string) => LANGUAGE_TAGS[code] ?? code;\n\n/**\n * Accessible name for the `banner` landmark, used when the consumer does not\n * override it. Pairs with the agency `nys-globalheader`'s own banner name, so\n * landmark navigation can tell the statewide chrome from the site's own header.\n */\nconst DEFAULT_LANDMARK_LABEL = \"New York State\";\n\n/**\n * Universal NYS header with trust bar, logo, search, and language translation. Required on all NYS sites.\n *\n * Place as the first element in `<body>`. Includes \"official site\" trust indicator, NY.gov logo,\n * site search (searches ny.gov), and 14-language translation dropdown. Use `hideSearch` or `hideTranslate`\n * to remove features if not applicable.\n *\n * @accessibility\n * - Semantic `<header>` element ensures assistive technology recognition.\n * - Trust bar button: `role=\"button\"`, `aria-expanded`, descriptive `aria-label`.\n * - All links and buttons are keyboard-navigable via Tab.\n * - Translate control: the WAI-ARIA APG menu button pattern. A real button carries\n * `aria-expanded`, `aria-haspopup=\"menu\"`, and `aria-controls` pointing at a\n * `role=\"menu\"` list of `role=\"menuitem\"` options. The menu is display-hidden when\n * closed, so its options only enter the tab order once it opens.\n * - Translate keyboard model: Down/Up on the trigger open the menu on its first/last\n * option; inside the menu Down/Up step and wrap, Home/End jump to either end,\n * Enter/Space pick an option, and Escape closes the menu and returns focus to the\n * trigger. A roving tabindex keeps the open menu to a single tab stop.\n * - Each language option carries the BCP 47 `lang` of the language it names, so its\n * label is announced in that language rather than the page's.\n * - Search input announces field purpose and keyboard shortcuts (Enter to submit, Escape to dismiss).\n * - Visual focus indicators meet WCAG 2.2 AA standards.\n * - All text has sufficient color contrast (4.5:1 minimum).\n * - Icons have text labels or `aria-label` attributes.\n *\n * @summary Universal NYS header with trust bar, search, and translation. Required site-wide.\n * @element nys-unavheader\n *\n * @remarks Statewide alerts are not configurable. On load the header reads the statewide\n * alert endpoint and renders whatever is currently published, so an emergency message\n * reaches every NYS site with no per-site work. If the endpoint is unreachable or nothing\n * is published, the header renders normally. It takes no children.\n *\n * @fires nys-language-select - Fired when a language is selected. Detail: `{language: {code, label, url?}}`. Cancelable; `preventDefault()` overrides the default Localize integration.\n * @fires nys-search-submit - Fired when a search is submitted. Detail: `{query}`. Cancelable; `preventDefault()` overrides the default search redirect.\n *\n * @example Basic\n * ```html\n * <nys-unavheader translateKey=\"NEf4Y5qMb9PGP\"></nys-unavheader>\n * ```\n *\n * @example Hide search\n * ```html\n * <nys-unavheader hideSearch></nys-unavheader>\n * ```\n *\n * @example Hide translate\n * ```html\n * <nys-unavheader hideTranslate></nys-unavheader>\n * ```\n *\n * @example Custom landmark label\n * ```html\n * <!-- Renames the banner landmark. Keep it distinct from the agency header's. -->\n * <nys-unavheader landmarkLabel=\"Statewide\"></nys-unavheader>\n * ```\n *\n * @example Custom Search URL\n * ```html\n * <nys-unavheader searchUrl=\"https://designsystem.ny.gov/search/?q=\"></nys-unavheader>\n * ```\n *\n * @example Custom Language List\n * ```html\n * <nys-unavheader id=\"my-header\"></nys-unavheader>\n * <script>\n * const header = document.querySelector('#my-header');\n * header.languages = [\n * { code: 'en', label: 'English' },\n * { code: 'es', label: 'Español' , url: '\"https://ny.gov/?lang=es\"'},\n * { code: 'fr', label: 'Français', url: '\"https://ny.gov/?lang=fr\"'},\n * ];\n * </script>\n * ```\n *\n * @example Custom Language List JS\n * ```html\n * <nys-unavheader id=\"my-header2\"></nys-unavheader>\n * <script>\n * document.querySelector('#my-header2').addEventListener('nys-language-select', (event) => {\n * event.preventDefault();\n * const selectedLanguage = event.detail.language.label;\n * });\n * </script>\n * ```\n */\n\nexport class NysUnavHeader extends NysElement {\n static styles = unsafeCSS(styles);\n\n /** Internal: Whether trust bar panel is expanded. */\n @property({ type: Boolean }) trustbarVisible = false;\n\n /** Internal: Whether search dropdown is visible (mobile). */\n @property({ type: Boolean }) searchDropdownVisible = false;\n\n /** Internal: Whether language dropdown is visible. */\n @property({ type: Boolean }) languageVisible = false;\n\n /** Internal: Whether search input is focused. */\n @property({ type: Boolean }) isSearchFocused = false;\n\n /** Hides the translation dropdown. */\n @property({ type: Boolean }) hideTranslate = false;\n\n /** Hides the search functionality. */\n @property({ type: Boolean }) hideSearch = false;\n\n /** The URL endpoint of the search, make sure to include the query param. */\n @property({ type: String }) searchUrl = \"\";\n\n /** Localize project key. If provided, the component will load and initialize LocalizeJS automatically. */\n @property({ type: String }) translateKey = \"\";\n\n /**\n * Accessible name for the `banner` landmark this header renders.\n * Defaults to `\"New York State\"`.\n *\n * A page pairing this header with `nys-globalheader` carries two `banner`\n * landmarks; distinct names are what keep landmark navigation useful instead of\n * announcing \"banner, banner\". Override only when your wording is clearer for\n * your audience — and keep it distinct from the agency header's name, which\n * comes from that header's visible title.\n *\n * A blank value falls back to the default rather than leaving the landmark\n * unnamed.\n *\n * @default \"New York State\"\n */\n @property({ type: String }) landmarkLabel = DEFAULT_LANDMARK_LABEL;\n\n /** The list of languages this site can be translated to, default to use Localize */\n @property({ type: Array })\n languages: Language[] = [\n { code: \"en\", label: \"English\", nativeText: \"English\" },\n {\n code: \"es\",\n label: \"Español\",\n nativeText: \"Spanish\",\n disclaimer: `Las traducciones automáticas no son perfectas y no pretenden reemplazar a los traductores humanos. Es posible que algunas páginas o parte del contenido no estén traducidos de forma precisa debido a las limitaciones del software de traducción. <a href=\"https://ny.gov/web-translation-services\">Lea la exención de responsabilidad completa</a>`,\n },\n {\n code: \"zh\",\n label: \"中文\",\n nativeText: \"Chinese\",\n disclaimer: `自動翻譯並不完美、也不是為了取代人工翻譯。由於翻譯軟體限制、某些頁面或內容可能無法準確翻譯。<a href=\"https://ny.gov/web-translation-services\">閱讀完整的免責聲明</a>`,\n },\n {\n code: \"zh-traditional\",\n label: \"繁體中文\",\n nativeText: \"Traditional Chinese\",\n disclaimer: `自動翻譯並不完美、也不是為了取代人工翻譯。由於翻譯軟體限制、某些頁面或內容可能無法準確翻譯。<a href=\"https://ny.gov/web-translation-services\">閱讀完整的免責聲明</a>`,\n },\n {\n code: \"yi\",\n label: \"יידיש\",\n nativeText: \"Yiddish\",\n disclaimer: `קיין איין אויטאמאטישע איבערזעצונג איז נישט אינגאנצן פארלעסליך, און עס איז נישט געמאכט צו ערזעצן א מענטשליכע איבערזעצער. טייל בלעטער אדער אינהאלט זענען מעגליך נישט פונקטליך איבערגעזעצט צוליב די באגרעניצטע מעגליכקייטן פון די איבערזעצונג טעכנאלאגיע. <a href=\"https://ny.gov/web-translation-services\">לייענט די פולע אויסקלארונג</a>`,\n rtl: true,\n },\n {\n code: \"ru\",\n label: \"Русский\",\n nativeText: \"Russian\",\n disclaimer: `Автоматический перевод не является безупречным и не может заменить переводчика-человека. Некоторые страницы или их содержимое могут быть переведены неточно из-за ограничений программного обеспечения для перевода. <a href=\"https://ny.gov/web-translation-services\">Ознакомьтесь с полным текстом отказа от ответственности</a>`,\n },\n {\n code: \"bn\",\n label: \"বাংলা\",\n nativeText: \"Bengali\",\n disclaimer: `কোন স্বয়ংক্রিয় অনুবাদ নিখুঁत নয়, না এর উদ্দেশ্য মানুষ অনুবাদকদের প্রতিস্থাপন করা। অনুবাদ সফ্টওয়্যারের সীমাবদ্ধতার কারণে কিছু পৃষ্ঠা বা বিষয়বস্তু সঠিকভাবে অনুবাদ নাও করা হতে পারে। <a href=\"https://ny.gov/web-translation-services\">اসম্পূর্ণ দায়-পরিত্যাগকারী বিজ্ঞপ্তিটি পড়ুন</a>`,\n },\n {\n code: \"ko\",\n label: \"한국어\",\n nativeText: \"Korean\",\n disclaimer: `자동 번역은 완벽하지 않으며, 번역가를 대체하기 위해 의도된 것도 아닙니다. 번역 소프트웨어의 한계로 인해 일부 페이지 또는 내용이 정확하게 번역되지 않을 수 있습니다 <a href=\"https://ny.gov/web-translation-services\">면책 조항 전문 읽기</a>`,\n },\n {\n code: \"ht\",\n label: \"Kreyòl Ayisyen\",\n nativeText: \"Haitian Creole\",\n disclaimer: `Okenn tradiksyon otomatik pa pafè, ni pa gen entansyon pou ranplase tradiktè imen. Gen kèk paj oswa kontni ki ka pa tradui avèk presizyon akòz limit nan lojisyèl tradiksyon an. <a href=\"https://ny.gov/web-translation-services\">Li Tout Avi sou Dechaj Responsabilite a</a>`,\n },\n {\n code: \"it\",\n label: \"Italiano\",\n nativeText: \"Italian\",\n disclaimer: `Nessuna traduzione automatica è perfetta, né è destinata a sostituire i traduttori umani. Alcune pagine o contenuti potrebbero non essere tradotti accuratamente a causa delle limitazioni del software di traduzione. <a href=\"https://ny.gov/web-translation-services\">Leggere l’intera liberatoria</a>`,\n },\n {\n code: \"ar\",\n label: \"العربية\",\n nativeText: \"Arabic\",\n disclaimer: `الترجمة الآلية لا تكون مثالية بأي حال من الأحوال، ولا يقصد بها أن تحل محل المترجمين من بني البشر. قد تكون ترجمة بعض المحتويات أو الصفحات غير دقيقة بسبب محددات برمجية الترجمة. <a href=\"https://ny.gov/web-translation-services\">اقرأ بيان إخلاء المسؤولية بالكامل</a>`,\n rtl: true,\n },\n {\n code: \"pl\",\n label: \"Polski\",\n nativeText: \"Polish\",\n disclaimer: `Żadne tłumaczenie automatyczne nie jest doskonałe, ani też nie ma na celu zastąpienia tłumaczeń wykonywanych przez ludzi. Niektóre strony lub treści mogą być niedokładnie przetłumaczone z powodu ograniczeń oprogramowania do wykonywania tłumaczeń <a href=\"https://ny.gov/web-translation-services\">Przeczytaj pełną klauzulę wyłączenia odpowiedzialności</a>`,\n },\n {\n code: \"fr\",\n label: \"Français\",\n nativeText: \"French\",\n disclaimer: `Aucune traduction automatique n'est parfaite, ni n'est destinée à remplacer les traducteurs humains. Certaines pages ou du contenu peuvent ne pas être traduits exactement en raison des limitations du logiciel de traduction. <a href=\"https://ny.gov/web-translation-services\">Lire entièrement la clause de non-responsabilité</a>`,\n },\n {\n code: \"ur\",\n label: \"اردو\",\n nativeText: \"Urdu\",\n disclaimer: `کوئی بھی خود کار ترجمہ بالکل درست نہیں ہوتا ہے، نہ ہی اس کا مقصد انسانی ترجمہ نگاروں کی جگہ لینا ہوتا ہے۔ ممکن ہے کہ ترجمہ سافٹ ویئر کی محدود صلاحیتوں کی وجہ سے کچھ صفحات یا مواد کا ترجمہ بالکل درست نہ ہو پائے۔ <a href=\"https://ny.gov/web-translation-services\">مکمل براءت نامہ پڑھیں</a>`,\n rtl: true,\n },\n ];\n\n /**\n * Lifecycle Methods\n * --------------------------------------------------------------------------\n * connectedCallback is inherited from NysElement, which assigns an\n * auto-generated host id (prefix \"nys-unavheader\") when none is provided. The\n * banner landmark intentionally lives on the inner <header> element, so this\n * component keeps defaultRole = null and does not move a role onto the host.\n */\n\n connectedCallback() {\n super.connectedCallback();\n // Also covers re-attachment, where the pending request was aborted on the way out\n this._loadAlerts();\n this._initLocalize();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n // Don't leave a pending request pointed at a detached element\n this._alertRequest?.abort();\n this._alertRequest = null;\n }\n\n willUpdate(changedProperties: PropertyValues) {\n super.willUpdate(changedProperties);\n\n if (!this.translateKey) {\n this.hideTranslate = true;\n } else {\n if (\n changedProperties.has(\"translateKey\") &&\n !this.hasAttribute(\"hideTranslate\") &&\n !changedProperties.has(\"hideTranslate\")\n ) {\n this.hideTranslate = false;\n }\n }\n }\n\n protected updated(changed: PropertyValues) {\n super.updated(changed);\n if (this.hideTranslate) return;\n\n if (changed.has(\"translateKey\")) {\n this._initLocalize();\n } else {\n console.log(\"Unable to translate. No key given\");\n }\n\n // Both of these write ARIA into nys-button's shadow root, so they have to run\n // after every render — a new `languages` array renders brand new buttons.\n this._syncTranslateTriggerAria();\n this._syncLanguageMenuAria();\n\n if (!changed.has(\"languageVisible\")) return;\n\n if (!this.languageVisible) {\n // The next open starts at the top of the list\n this._openWithFocus = null;\n this._activeOption = 0;\n return;\n }\n\n // Only a keyboard open moves focus into the menu, and only once it has rendered\n const edge = this._openWithFocus;\n this._openWithFocus = null;\n if (edge) this._focusOption(edge === \"first\" ? 0 : -1);\n }\n\n /**\n * Functions\n * --------------------------------------------------------------------------\n */\n\n private _getNysLogo() {\n if (!nysLogo) return null;\n\n // Parse the SVG string into an actual SVG DOM element\n const parser = new DOMParser();\n const svgDoc = parser.parseFromString(nysLogo, \"image/svg+xml\");\n const svgElement = svgDoc.documentElement;\n\n return svgElement;\n }\n\n private _toggleTrustbar(clickID?: string) {\n this.trustbarVisible = !this.trustbarVisible;\n\n if (this.trustbarVisible) {\n this.languageVisible = false;\n this.searchDropdownVisible = false;\n }\n\n if (clickID === \"no focus\") return;\n\n const shouldMoveFocus =\n clickID === \"nys-unavheader__know--inline\" || !clickID;\n\n if (shouldMoveFocus) {\n const targetId = this.trustbarVisible\n ? \"nys-unavheader__closetrustbar\"\n : \"nys-unavheader__know--inline\";\n\n this.updateComplete.then(() => {\n const target = this.shadowRoot?.getElementById(targetId);\n target?.focus();\n });\n }\n }\n\n /**\n * The translate menu — WAI-ARIA APG \"Menu Button\"\n * --------------------------------------------------------------------------\n * The options are actions, not links: picking one fires a cancelable\n * `nys-language-select` and, unless the page handles it, redirects. That, plus a\n * trigger already declaring `aria-haspopup`/`aria-expanded`/`aria-controls`, makes\n * this a menu button rather than a disclosure navigation menu — and it is the same\n * shape `nys-dropdownmenu` uses, so #1412's eventual move onto that component\n * won't change a single ARIA attribute.\n *\n * Focus moves by roving tabindex, not `aria-activedescendant`. Each option's\n * `role=\"menuitem\"` sits on the real `<button>` inside a `nys-button`'s shadow\n * root, and `aria-activedescendant` is an IDREF — it cannot reach across a shadow\n * boundary.\n */\n\n /** Which translate trigger opened the menu, so Escape can return focus to it. */\n private _translateTrigger: string = TRANSLATE_TRIGGER_IDS[0];\n\n /** Index of the option holding the menu's single tab stop. */\n private _activeOption = 0;\n\n /**\n * Where focus lands when the menu opens, set only by a keyboard activation. A\n * mouse open leaves focus on the trigger: moving it would put a focus ring on an\n * option the pointer user never asked for.\n */\n private _openWithFocus: \"first\" | \"last\" | null = null;\n\n private _toggleLanguageList(triggerId?: string) {\n if (triggerId) this._translateTrigger = triggerId;\n\n this.languageVisible = !this.languageVisible;\n if (this.languageVisible) {\n this.trustbarVisible = false;\n this.searchDropdownVisible = false;\n }\n }\n\n /**\n * Closes the menu and puts focus back on the trigger. The open list is the only\n * thing keeping the language buttons focusable, so closing it while focus sits on\n * one would drop focus to the top of the page (WCAG 2.4.3).\n */\n private _closeLanguageList() {\n if (!this.languageVisible) return;\n this.languageVisible = false;\n\n this.updateComplete.then(() => {\n const trigger =\n this.shadowRoot?.getElementById(this._translateTrigger) ??\n this.shadowRoot?.getElementById(TRANSLATE_TRIGGER_IDS[1]);\n trigger?.focus();\n });\n }\n\n /**\n * `nys-button` renders the real `<button>` inside its own shadow root, so an\n * `aria-expanded` written on the host never reaches the element that carries the\n * button role — assistive tech was never told the translate menu collapses. Mirror\n * the state onto the inner control, the same way `nys-dropdownmenu` does for its\n * trigger (WCAG 4.1.2).\n */\n private async _syncTranslateTriggerAria() {\n for (const id of TRANSLATE_TRIGGER_IDS) {\n const trigger = this.shadowRoot?.getElementById(\n id,\n ) as ButtonElement | null;\n if (!trigger) continue;\n\n // The inner button only exists once nys-button has rendered. aria-expanded\n // and aria-controls travel through nys-button's ariaExpanded/ariaControls\n // props; only aria-haspopup has no prop equivalent yet.\n await trigger.updateComplete;\n innerControl(trigger).setAttribute(\"aria-haspopup\", \"menu\");\n }\n }\n\n /** The language options, in the order they are rendered. */\n private _languageOptions(): ButtonElement[] {\n return Array.from(\n this.shadowRoot?.querySelectorAll<ButtonElement>(\n `.${LANGUAGE_OPTION_CLASS}`,\n ) ?? [],\n );\n }\n\n /**\n * Menu semantics for the options, and the same shadow-root problem as the trigger:\n * `role=\"menuitem\"` and the tab stop have to land on the real `<button>`, not on\n * the `nys-button` host. The hosts carry `role=\"presentation\"` in the template so\n * they don't sit between the menu and its items in the accessibility tree.\n */\n private async _syncLanguageMenuAria() {\n const options = this._languageOptions();\n if (!options.length) return;\n\n // A shorter `languages` array can leave the tab stop past the end of the menu\n if (this._activeOption > options.length - 1) this._activeOption = 0;\n\n await Promise.all(options.map((option) => option.updateComplete));\n\n options.forEach((option, index) => {\n const control = innerControl(option);\n control.setAttribute(\"role\", \"menuitem\");\n // Exactly one tab stop: Tab enters and leaves the menu, arrows move within it\n control.setAttribute(\n \"tabindex\",\n index === this._activeOption ? \"0\" : \"-1\",\n );\n });\n }\n\n /**\n * Moves both focus and the tab stop to an option, wrapping at either end. Index\n * -1 is the last option, so \"previous from the first\" and \"End\" are the same call.\n */\n private async _focusOption(index: number) {\n const options = this._languageOptions();\n if (!options.length) return;\n\n const count = options.length;\n this._activeOption = ((index % count) + count) % count;\n await this._syncLanguageMenuAria();\n options[this._activeOption]?.focus();\n }\n\n private _initLocalize() {\n if (this.hideTranslate) return;\n\n if (!this.translateKey) {\n this.hideTranslate = true;\n return;\n }\n\n const setup = () => {\n if (typeof (window as any).Localize !== \"undefined\") {\n (window as any).Localize.initialize({\n key: this.translateKey,\n rememberLanguage: true,\n autoApprove: true,\n });\n // Fires for every language change, including the remembered language\n // Localize re-applies on page load — so a returning visitor sees the\n // disclaimer without re-selecting a language.\n (window as any).Localize.on(\"setLanguage\", (data: any) => {\n this._updateTranslateDisclaimer(data?.to ?? data?.language);\n });\n }\n };\n\n if (typeof (window as any).Localize !== \"undefined\") {\n setup();\n } else {\n let script = document.getElementById(\n \"nys-localize-api\",\n ) as HTMLScriptElement;\n if (!script) {\n script = document.createElement(\"script\");\n script.id = \"nys-localize-api\";\n script.src = \"https://global.localizecdn.com/localize.js\";\n document.head.appendChild(script);\n }\n script.addEventListener(\"load\", setup);\n }\n }\n\n private _toggleSearchDropdown() {\n this.searchDropdownVisible = !this.searchDropdownVisible;\n if (this.searchDropdownVisible) {\n this.trustbarVisible = false;\n this.languageVisible = false;\n }\n }\n\n /**\n * Shows, replaces, or removes the translation disclaimer banner for the given\n * language code. Called from the Localize \"setLanguage\" listener — which also\n * fires on page load for a remembered language — and directly from\n * `_handleLanguageSelect` when the Localize API isn't available.\n */\n private _updateTranslateDisclaimer(languageCode: string) {\n const matchingLanguage = this.languages.find(\n (lang) => lang.code.toLowerCase() === languageCode.toLowerCase(),\n );\n\n // Remove any existing translate disclaimer to prevent piling up\n const existingDisclaimer = document.body.querySelector(\n \"nys-alert[data-translate-disclaimer=true]\",\n );\n if (existingDisclaimer) {\n existingDisclaimer.remove();\n }\n\n // Show disclaimer only for non-English languages\n if (languageCode !== \"en\") {\n if (matchingLanguage?.disclaimer) {\n const translateDisclaimer = document.createElement(\"nys-alert\");\n translateDisclaimer.setAttribute(\"notranslate\", \"true\");\n translateDisclaimer.setAttribute(\"dismissible\", \"true\");\n translateDisclaimer.setAttribute(\"data-translate-disclaimer\", \"true\");\n translateDisclaimer.style.setProperty(\n \"--nys-alert-border-color\",\n \"transparent\",\n );\n translateDisclaimer.style.setProperty(\n \"--_nys-alert-border-radius\",\n \"0\",\n );\n translateDisclaimer.innerHTML = matchingLanguage.disclaimer;\n\n this.after(translateDisclaimer);\n }\n\n const baseLang = (document.documentElement.lang || \"\")\n .toLowerCase()\n .split(\"-\")[0];\n const checkLang =\n matchingLanguage ||\n this.languages.find((lang) => lang.code.toLowerCase() === baseLang);\n\n document.documentElement.dir = checkLang?.rtl ? \"rtl\" : \"ltr\";\n } else {\n // Reset the document direction to left-to-right for English\n document.documentElement.dir = \"ltr\";\n }\n }\n\n private _handleLanguageSelect(language: Language) {\n // Focus goes back to the trigger, which matters when a page cancels the event\n // and nothing navigates — otherwise focus would be dropped with the menu\n this._closeLanguageList();\n\n const event = new CustomEvent(\"nys-language-select\", {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail: { language },\n });\n\n this.dispatchEvent(event);\n\n if (!event.defaultPrevented) {\n if (language.url) {\n // Use the provided URL override\n window.location.href = language.url;\n } else {\n // Default behavior: use Localize API instead of subdomain redirect\n if (typeof (window as any).Localize !== \"undefined\") {\n // The \"setLanguage\" listener registered in _initLocalize shows the\n // disclaimer once Localize confirms the change\n (window as any).Localize.setLanguage(language.code);\n } else {\n this._updateTranslateDisclaimer(language.code);\n }\n }\n }\n }\n\n /**\n * Keyboard model for the translate menu (APG menu button):\n * - on the trigger: Down/Up open the menu on its first/last option, Enter/Space\n * open it on the first option, Escape closes it\n * - in the menu: Down/Up step and wrap, Home/End jump to either end, Enter/Space\n * pick the option (native `<button>` activation), Escape closes the menu and\n * returns focus to the trigger\n *\n * Type-ahead is deliberately left out. Each label is written in its own script, so\n * matching typed characters would mean transliteration plus an IME to be usable —\n * \"e\" finds nothing in \"Español\" for anyone who would need it. The pattern lists\n * type-ahead as optional.\n */\n private _handleTranslateKeydown(e: KeyboardEvent) {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n\n if (e.key === \"Escape\") {\n if (!this.languageVisible) return;\n e.stopPropagation();\n this._closeLanguageList();\n return;\n }\n\n if ((TRANSLATE_TRIGGER_IDS as readonly string[]).includes(target.id)) {\n this._handleTriggerKeydown(e, target.id);\n } else if (target.classList.contains(LANGUAGE_OPTION_CLASS)) {\n this._handleOptionKeydown(e);\n }\n }\n\n private _handleTriggerKeydown(e: KeyboardEvent, triggerId: string) {\n switch (e.key) {\n case \"ArrowDown\":\n case \"ArrowUp\": {\n // No click follows an arrow key, so the menu has to be opened here — and\n // the page must not scroll out from under it\n e.preventDefault();\n const edge = e.key === \"ArrowDown\" ? \"first\" : \"last\";\n if (this.languageVisible) {\n this._focusOption(edge === \"first\" ? 0 : -1);\n } else {\n this._openWithFocus = edge;\n this._toggleLanguageList(triggerId);\n }\n break;\n }\n case \"Enter\":\n case \" \":\n case \"Spacebar\":\n // The button's own click follows and does the toggling. All this has to do\n // is say where focus goes if that click is the one that opens the menu.\n this._openWithFocus = this.languageVisible ? null : \"first\";\n break;\n default:\n break;\n }\n }\n\n private _handleOptionKeydown(e: KeyboardEvent) {\n const current = this._languageOptions().indexOf(e.target as ButtonElement);\n if (current < 0) return;\n\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n this._focusOption(current + 1);\n break;\n case \"ArrowUp\":\n e.preventDefault();\n this._focusOption(current - 1);\n break;\n case \"Home\":\n e.preventDefault();\n this._focusOption(0);\n break;\n case \"End\":\n e.preventDefault();\n this._focusOption(-1);\n break;\n default:\n break;\n }\n }\n\n /**\n * Focus leaving the menu closes it — that is what Tab and Shift+Tab do under the\n * menu button pattern, and it also covers clicking away. Closing without touching\n * focus is the point here: the browser is already moving it somewhere else.\n */\n private _handleTranslateFocusout(e: FocusEvent) {\n if (!this.languageVisible) return;\n\n const wrapper = e.currentTarget as HTMLElement;\n const next = e.relatedTarget as Node | null;\n // relatedTarget is retargeted to the host of any shadow root focus moved into,\n // so a plain `contains` is enough to tell \"still inside the menu\" apart\n if (next && wrapper.contains(next)) return;\n\n this.languageVisible = false;\n }\n\n private _handleSearchFocus() {\n this.isSearchFocused = true;\n this.trustbarVisible = false;\n this.languageVisible = false;\n }\n\n private _handleSearchBlur() {\n this.isSearchFocused = false;\n }\n\n private _handleSearchKeyup(e: KeyboardEvent) {\n if (e.key === \"Escape\") {\n this._handleSearchBlur();\n (e.target as HTMLInputElement).blur();\n }\n if (e.key === \"Enter\") {\n // Handle search\n const searchValue = (e.target as HTMLInputElement).value?.trim();\n if (searchValue !== \"\") this._handleSearch(searchValue);\n }\n }\n\n private _handleSearchButton(searchID: string) {\n const searchInput = this.shadowRoot?.getElementById(\n searchID,\n ) as HTMLInputElement;\n const searchValue = searchInput.value?.trim();\n if (searchValue !== \"\") this._handleSearch(searchValue);\n }\n\n private _handleSearch(searchValue: string) {\n const event = new CustomEvent(\"nys-search-submit\", {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail: { query: searchValue },\n });\n\n this.dispatchEvent(event);\n\n if (!event.defaultPrevented) {\n if (this.searchUrl) {\n // Custom search URL\n window.location.href = `${this.searchUrl}${encodeURIComponent(searchValue)}`;\n } else {\n // Default Google Search Appliance\n window.location.href = `https://search.its.ny.gov/search/search.html?q=${encodeURIComponent(searchValue)}+inurl:${window.location.hostname}&site=default_collection`;\n }\n }\n }\n\n /**\n * Statewide alerts\n * --------------------------------------------------------------------------\n * Content comes from the alert feed, never from the consuming page, so the same\n * message renders identically everywhere it is shown. A missing, malformed, or\n * unreachable feed leaves the header untouched — an alert failing to load must\n * never take a site's navigation down with it.\n */\n\n /** The published alerts, in feed order. Empty when nothing is published. */\n @state() private _alerts: FeedAlert[] = [];\n\n /** In-flight feed request, aborted if the header leaves the page first. */\n private _alertRequest: AbortController | null = null;\n\n private async _loadAlerts() {\n if (typeof fetch !== \"function\") return;\n\n this._alertRequest?.abort();\n const request = new AbortController();\n this._alertRequest = request;\n\n const feed = await this._readFeed(request);\n if (!feed) return;\n\n const alerts = Array.isArray(feed.alert)\n ? feed.alert\n : feed.alert\n ? [feed.alert]\n : [];\n this._alerts = alerts.filter((alert) => isPublished(alert?.status));\n }\n\n /** Fetches the alert feed. Resolves to null on any failure. */\n private async _readFeed(request: AbortController) {\n try {\n const response = await fetch(NYS_ALERT_URL, {\n signal: request.signal,\n credentials: \"omit\",\n // An alert that is switched off must go away everywhere on the next page\n // load, so never read (or write) the HTTP cache for this\n cache: \"no-store\",\n });\n if (!response.ok) {\n throw new Error(`Responded with ${response.status}`);\n }\n\n const feed = (await response.json()) as AlertFeed;\n // A late response for a header that has since been detached is dead weight\n return request.signal.aborted ? null : feed;\n } catch {\n return null;\n }\n }\n\n /** Feed severity → `nys-alert` type. */\n private _alertType(severity?: string): AlertType {\n return SEVERITY_TYPES[severity?.trim().toLowerCase() ?? \"\"] ?? \"info\";\n }\n\n /**\n * Feed icon name → `nys-icon` name. Unknown names resolve to \"\", which leaves\n * `nys-alert` to draw the default icon for the alert's type.\n */\n private _alertIcon(icon?: string) {\n const name = icon?.trim().toLowerCase().replace(/\\s+/g, \"_\");\n return (name && FEED_ICONS[name]) || \"\";\n }\n\n /**\n * One full-bleed band per published alert, so alerts of different severities keep\n * their own background instead of sharing one. The body is slotted rather than\n * passed as `text`/`primaryAction` so the link can carry the feed's `linkAriaLabel`.\n */\n private _renderAlerts() {\n return this._alerts.map((alert) => this._renderAlert(alert));\n }\n\n private _renderAlert(alert: FeedAlert) {\n // An entry switched on with nothing to say would render an empty band\n if (!alert.headline?.trim() && !alert.description?.trim()) return nothing;\n\n const type = this._alertType(alert.severity);\n const icon = this._alertIcon(alert.icon);\n const linkLabel = alert.linkTitle?.trim() || \"Learn more\";\n\n return html`\n <div class=\"nys-unavheader__alert wrapper\" data-type=${type}>\n <nys-alert\n class=\"content\"\n type=${type}\n heading=${alert.headline ?? \"\"}\n icon=${icon}\n >\n ${alert.description\n ? html`<p class=\"nys-unavheader__alert-text\">\n ${alert.description}\n </p>`\n : nothing}\n ${alert.link\n ? html`<a\n class=\"nys-unavheader__alert-link\"\n href=${alert.link}\n aria-label=${alert.linkAriaLabel?.trim() || nothing}\n >${linkLabel}</a\n >`\n : nothing}\n </nys-alert>\n </div>\n `;\n }\n\n /**\n * The banner's accessible name. A blank override would put the page back where\n * #1795 found it — two unnamed banners — so it falls back to the default.\n */\n private get _landmarkLabel(): string {\n return this.landmarkLabel?.trim() || DEFAULT_LANDMARK_LABEL;\n }\n\n private get _locale(): string {\n return (\n document.documentElement.lang ||\n new Intl.Locale(navigator.language).language\n );\n }\n\n render() {\n // The statewide header sits above an agency's own `nys-globalheader`, so a page\n // normally carries two banner landmarks. Naming this one keeps landmark\n // navigation meaningful instead of announcing \"banner, banner\" (axe\n // `landmark-unique`); the agency banner is named after the agency.\n // `landmarkLabel` lets a consumer reword this one without giving up the\n // distinction.\n return html`\n <header class=\"nys-unavheader\" aria-label=${this._landmarkLabel}>\n <div\n class=\"nys-unavheader__trustbar wrapper\"\n @click=\"${(e: MouseEvent) => {\n const target = e.target as HTMLElement;\n\n // Ignore clicks that originated within a nys-button\n if (target.closest(\"nys-button\")) return;\n\n // Only handle direct wrapper clicks (outside of buttons)\n this._toggleTrustbar(\"no focus\");\n }}\"\n >\n <div class=\"content\">\n <span class=\"nys-unavheader__official\"\n >An official website of New York State</span\n >\n <nys-button\n id=\"nys-unavheader__know\"\n label=\"Here's how you know\"\n variant=\"text\"\n size=\"sm\"\n ariaControls=\"nys-unavheader__trustpanel\"\n ariaExpanded=\"${this.trustbarVisible}\"\n @nys-click=\"${(e: CustomEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this._toggleTrustbar(\"nys-unavheader__know\");\n }}\"\n >\n <nys-icon\n slot=\"suffix-icon\"\n size=\"12\"\n name=\"${this.trustbarVisible ? \"chevron_up\" : \"chevron_down\"}\"\n ></nys-icon>\n </nys-button>\n </div>\n </div>\n <div\n id=\"nys-unavheader__trustpanel\"\n id=\"nys-unavheader__trustpanel\"\n class=\"nys-unavheader__trustpanel wrapper ${this.trustbarVisible\n ? \"show\"\n : \"hide\"}\"\n >\n <div class=\"nys-unavheader__trustpanel content\">\n <nys-button\n id=\"nys-unavheader__closetrustbar\"\n class=\"nys-unavheader__iconbutton\"\n variant=\"ghost\"\n circle\n icon=\"close\"\n size=\"sm\"\n label=\"Close this notice\"\n ariaControls=\"nys-unavheader__trustpanel\"\n ariaExpanded=\"${this.trustbarVisible}\"\n @nys-click=\"${() =>\n this._toggleTrustbar(\"nys-unavheader__know--inline\")}\"\n ></nys-button>\n <div class=\"nys-unavheader__messagewrapper\">\n <div\n class=\"nys-unavheader__trustcontentmessage\"\n id=\"trust_official\"\n >\n <nys-icon size=\"3xl\" name=\"account_balance_filled\"></nys-icon>\n <span><b>Official websites use ny.gov</b></span>\n <span\n >A <b>ny.gov</b> website belongs to an official New York State\n government organization.</span\n >\n </div>\n <div\n class=\"nys-unavheader__trustcontentmessage\"\n id=\"trust_secure\"\n >\n <nys-icon size=\"3xl\" name=\"lock_filled\"></nys-icon>\n <span><b>Secure ny.gov websites use HTTPS</b></span>\n <span\n >A <b>lock icon</b> or <b>https://</b> means you've safely\n connected to the ny.gov website. Share sensitive information\n only on official, secure websites.</span\n >\n </div>\n </div>\n </div>\n </div>\n <div class=\"nys-unavheader__main wrapper\" id=\"nys-universal-navigation\">\n <div class=\"nys-unavheader__main content\">\n <a\n href=\"https://www.ny.gov\"\n id=\"nys-unavheader__logolink\"\n aria-label=\"Visit the NY.gov homepage\"\n >\n <div class=\"nys-unavheader__logo\">${this._getNysLogo()}</div></a\n >\n <div class=\"nys-unavheader__trustbar inline\">\n <span id=\"nys-unavheader__official\"\n >An official website of New York State</span\n >\n <nys-button\n id=\"nys-unavheader__know--inline\"\n label=\"Here's how you know\"\n ariaControls=\"nys-unavheader__trustpanel\"\n ariaExpanded=\"${this.trustbarVisible}\"\n variant=\"text\"\n size=\"sm\"\n @nys-click=\"${() =>\n this._toggleTrustbar(\"nys-unavheader__know--inline\")}\"\n >\n <nys-icon\n slot=\"suffix-icon\"\n size=\"12\"\n name=\"${this.trustbarVisible ? \"chevron_up\" : \"chevron_down\"}\"\n ></nys-icon>\n </nys-button>\n </div>\n <div class=\"nys-unavheader__spacer\"></div>\n ${!this.hideTranslate\n ? html`<div\n class=\"nys-unavheader__translatewrapper\"\n @keydown=${this._handleTranslateKeydown}\n @focusout=${this._handleTranslateFocusout}\n >\n <nys-button\n variant=\"ghost\"\n circle\n label=\"Translate\"\n ariaControls=\"${LANGUAGE_LIST_ID}\"\n ariaExpanded=\"${this.languageVisible}\"\n id=\"nys-unavheader__translate--mobile\"\n class=\"nys-unavheader__iconbutton\"\n @nys-click=${() =>\n this._toggleLanguageList(TRANSLATE_TRIGGER_IDS[1])}\n >\n <nys-icon\n slot=\"circle-icon\"\n name=\"language\"\n size=\"16\"\n ></nys-icon>\n </nys-button>\n ${!this.isSearchFocused\n ? html`\n <nys-button\n variant=\"ghost\"\n label=\"Translate\"\n ariaControls=\"${LANGUAGE_LIST_ID}\"\n ariaExpanded=\"${this.languageVisible}\"\n size=\"sm\"\n prefixIcon=\"language\"\n suffixIcon=${this.languageVisible\n ? \"chevron_up\"\n : \"chevron_down\"}\n id=\"nys-unavheader__translate--desktop\"\n @nys-click=\"${() =>\n this._toggleLanguageList(TRANSLATE_TRIGGER_IDS[0])}\"\n ></nys-button>\n `\n : null}\n <div\n id=\"${LANGUAGE_LIST_ID}\"\n role=\"menu\"\n aria-label=\"${LANGUAGE_MENU_LABEL}\"\n class=\"nys-unavheader__languagelist ${this.languageVisible\n ? \"show\"\n : \"hide\"}\"\n >\n ${this.languages.map((lang) => {\n const isCurrent =\n languageTag(lang.code) ===\n document.documentElement.lang;\n return html`<nys-button\n role=\"presentation\"\n variant=\"ghost\"\n fullWidth\n lang=\"${languageTag(lang.code)}\"\n class=\"${LANGUAGE_OPTION_CLASS}\"\n @click=\"${() => this._handleLanguageSelect(lang)}\"\n >\n <span notranslate>${lang.label}</span>\n ${isCurrent || !lang.nativeText\n ? nothing\n : html`<span lang=\"${this._locale}\"\n >&nbsp;(${lang.nativeText})</span\n >`}\n </nys-button>`;\n })}\n </div>\n </div>`\n : null}\n ${!this.hideSearch\n ? html`\n <nys-button\n variant=\"ghost\"\n circle\n label=\"Search\"\n ariaControls=\"nys-unavheader__searchdropdown\"\n ariaExpanded=\"${this.searchDropdownVisible}\"\n id=\"nys-unavheader__searchbutton\"\n class=\"nys-unavheader__iconbutton\"\n @nys-click=${this._toggleSearchDropdown}\n >\n <nys-icon\n slot=\"circle-icon\"\n name=\"search\"\n size=\"16\"\n ></nys-icon>\n </nys-button>\n <nys-textinput\n class=\"nys-unavheader__search\"\n id=\"nys-unavheader__searchbar\"\n placeholder=\"Search\"\n type=\"search\"\n @focus=\"${this._handleSearchFocus}\"\n @blur=\"${this._handleSearchBlur}\"\n @keyup=\"${this._handleSearchKeyup}\"\n >\n <nys-button\n id=\"nys-unavheader__searchbar--button\"\n slot=\"endButton\"\n type=\"submit\"\n prefixIcon=\"search\"\n @nys-click=${() => {\n this._handleSearchButton(\"nys-unavheader__searchbar\");\n }}\n ><span class=\"sr-only\">Search</span></nys-button\n >\n </nys-textinput>\n `\n : null}\n </div>\n </div>\n <div\n id=\"nys-unavheader__searchdropdown\"\n class=\"nys-unavheader__searchdropdown wrapper ${this\n .searchDropdownVisible\n ? \"show\"\n : \"hide\"}\"\n >\n <div class=\"content\">\n <nys-textinput\n class=\"nys-unavheader__search\"\n id=\"nys-unavheader__searchbardropdown\"\n placeholder=\"Search\"\n type=\"search\"\n @focus=\"${this._handleSearchFocus}\"\n @blur=\"${this._handleSearchBlur}\"\n @keyup=\"${this._handleSearchKeyup}\"\n >\n <nys-button\n id=\"nys-unavheader__searchbardropdown--button\"\n slot=\"endButton\"\n type=\"submit\"\n prefixIcon=\"search\"\n @nys-click=${() => {\n this._handleSearchButton(\"nys-unavheader__searchbardropdown\");\n }}\n ><span class=\"sr-only\">Search</span></nys-button\n ></nys-textinput\n >\n </div>\n </div>\n ${this._renderAlerts()}\n </header>\n `;\n }\n}\n\nif (!customElements.get(\"nys-unavheader\")) {\n customElements.define(\"nys-unavheader\", NysUnavHeader);\n}\n","const nysBrandLogoSvg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"91\" height=\"55\" viewBox=\"0 0 91 55\" fill=\"none\">\n <path d=\"M55.1158 7.50499L58.2905 12.6494V7.5189C58.2905 7.5189 58.6487 7.26356 59.5098 7.26356C60.3708 7.26356 60.7378 7.5189 60.7378 7.5189V16.4327C60.7378 16.4327 60.3942 16.689 59.5215 16.689C58.6487 16.689 58.3295 16.4605 58.3295 16.4605L55.1421 11.3171V16.4337C55.1421 16.4337 54.7848 16.69 53.9111 16.69C53.0374 16.69 52.7065 16.4337 52.7065 16.4337V7.51989C52.7065 7.51989 53.0384 7.26456 53.9248 7.26456C54.8112 7.26456 55.1148 7.50697 55.1148 7.50697L55.1158 7.50499Z\" fill=\"white\"/>\n <path d=\"M67.2209 12.5948H64.9063V14.8709H68.2538C68.2538 14.8709 68.5047 15.1531 68.5047 15.772C68.5047 16.391 68.2538 16.688 68.2538 16.688H62.4589V7.26257H67.9892C67.9892 7.26257 68.2538 7.54572 68.2538 8.17859C68.2538 8.81146 67.9892 9.09362 67.9892 9.09362H64.9063V10.7637H67.2209C67.2209 10.7637 67.4728 11.0598 67.4728 11.6787C67.4728 12.2977 67.2209 12.5948 67.2209 12.5948Z\" fill=\"white\"/>\n <path d=\"M71.4802 16.4327L68.9791 7.5189C68.9791 7.5189 69.3491 7.26356 70.2101 7.26356C71.0711 7.26356 71.4275 7.5189 71.4275 7.5189L72.6839 12.0434C72.7766 12.3802 72.8166 12.6365 72.8557 12.7845C72.8557 12.7428 72.9221 12.3663 73.0011 12.0573L74.0984 7.5189C74.0984 7.5189 74.5211 7.26356 75.1176 7.26356C75.7141 7.26356 76.084 7.5189 76.084 7.5189L77.3004 12.7845C77.3004 12.6623 77.3795 12.3255 77.4586 12.0573L78.756 7.5189C78.7686 7.5189 79.1132 7.26356 79.9596 7.26356C80.806 7.26356 81.1897 7.5189 81.1897 7.5189L78.6496 16.4327C78.6496 16.4327 78.2922 16.6751 77.4859 16.689C76.5468 16.689 76.2158 16.4327 76.2158 16.4327L75.223 12.2987C75.1449 11.9887 75.0902 11.6529 75.0785 11.5844L74.9184 12.2987L73.9266 16.4327C73.9266 16.4327 73.583 16.689 72.7092 16.689C71.8355 16.689 71.4802 16.4327 71.4802 16.4327Z\" fill=\"white\"/>\n <path d=\"M54.3485 19.2195L55.4331 21.1579C55.804 21.8176 56.0022 22.5587 56.0285 22.6521C56.0559 22.5587 56.2404 21.8315 56.624 21.1579L57.735 19.2195C57.735 19.2195 58.0659 18.9771 58.8723 18.9771C59.786 18.9771 60.1697 19.2861 60.1697 19.2861L57.2449 24.4295V28.1453C57.2449 28.1453 56.9013 28.4026 56.0276 28.4026C55.1539 28.4026 54.8239 28.1453 54.8239 28.1453V24.3898L51.8991 19.2871C51.8991 19.2871 52.2965 18.9781 53.2082 18.9781C53.9892 18.9781 54.3465 19.2205 54.3465 19.2205L54.3485 19.2195Z\" fill=\"white\"/>\n <path d=\"M64.6017 28.497C61.4788 28.497 60.117 26.6381 60.117 23.7033C60.117 20.7684 61.4798 18.8827 64.6017 18.8827C67.7237 18.8827 69.0865 20.7674 69.0865 23.7033C69.0865 26.6391 67.711 28.497 64.6017 28.497ZM64.6017 26.6778C65.9235 26.6778 66.6391 25.4667 66.6391 23.7033C66.6391 21.9398 65.9235 20.7138 64.6017 20.7138C63.2799 20.7138 62.5653 21.9398 62.5653 23.7033C62.5653 25.4667 63.2789 26.6778 64.6017 26.6778Z\" fill=\"white\"/>\n <path d=\"M72.844 28.1463C72.844 28.1463 72.4867 28.4036 71.6129 28.4036C70.7392 28.4036 70.4083 28.1463 70.4083 28.1463V19.3546C70.4083 19.3546 71.4011 18.8837 73.2266 18.8837C75.9913 18.8837 77.275 19.9607 77.275 21.8454C77.275 23.7301 75.8722 24.4563 75.7004 24.4712L77.8432 28.0936C77.5796 28.2675 76.8523 28.4026 76.3623 28.4026C75.7267 28.4026 75.225 28.1741 75.225 28.1741L73.6113 25.3068C73.5175 25.1041 73.3858 24.9561 73.1612 24.9561H72.844V28.1463ZM73.5322 20.7148C73.1349 20.7148 72.844 20.7952 72.844 20.7952V23.138H73.5049C74.4694 23.138 74.8413 22.4514 74.8413 21.9269C74.8413 21.2403 74.3786 20.7148 73.5322 20.7148Z\" fill=\"white\"/>\n <path d=\"M87.211 28.0787C87.211 28.0787 86.5901 28.4026 85.5836 28.4026C84.7236 28.4026 84.3663 28.1741 84.3663 28.1741L81.2317 23.8384V28.1463C81.2317 28.1463 80.9007 28.4036 80.027 28.4036C79.1533 28.4036 78.797 28.1463 78.797 28.1463V19.2344C78.797 19.2344 79.1533 18.9781 80.027 18.9781C80.9007 18.9781 81.2317 19.2344 81.2317 19.2344V23.4221L84.2618 19.2205C84.2618 19.2205 84.6182 18.9781 85.4782 18.9781C86.4701 18.9781 86.8684 19.3139 86.8684 19.3139L83.9045 23.4221L87.212 28.0797L87.211 28.0787Z\" fill=\"white\"/>\n <path d=\"M58.9806 31.3374C59.1515 32.1988 58.7014 32.8853 58.1987 33.0602C57.7096 32.7244 56.9296 32.4273 56.1096 32.4273C55.2895 32.4273 54.8122 32.7502 54.8122 33.2082C54.8122 33.6394 55.1958 33.7874 56.214 34.1252L57.4841 34.5415C58.8479 34.9985 59.6933 35.7 59.6933 37.1803C59.6933 38.8911 58.5823 40.2105 55.8831 40.2105C53.9912 40.2105 52.8256 39.5637 52.4029 39.1335C52.2711 38.5007 52.6137 37.7059 53.1057 37.4505C53.5284 37.7744 54.7848 38.3934 56.0676 38.3934C56.8359 38.3934 57.2596 38.1112 57.2596 37.5986C57.2596 37.2359 57.034 37.0064 56.5049 36.8306L54.3758 36.1719C53.2365 35.8073 52.3775 34.9737 52.3775 33.6126C52.3775 31.6732 53.6729 30.5973 56.0676 30.5973C57.5895 30.5973 58.4779 31.0145 58.9806 31.3374Z\" fill=\"white\"/>\n <path d=\"M60.3542 32.5227C60.3542 32.5227 60.1023 32.2534 60.1023 31.6067C60.1023 30.9599 60.3542 30.6906 60.3542 30.6906H67.5382C67.5382 30.6906 67.7901 30.9738 67.7901 31.6067C67.7901 32.2395 67.5382 32.5227 67.5382 32.5227H65.1562V39.8608C65.1562 39.8608 64.8136 40.1161 63.9525 40.1161C63.0915 40.1161 62.7088 39.8608 62.7088 39.8608V32.5227H60.3542Z\" fill=\"white\"/>\n <path d=\"M72.7502 30.9341L76.3232 39.8201C76.3232 39.8201 75.9659 40.1171 75.0658 40.1171C74.2321 40.1171 73.9032 39.8747 73.9032 39.8747L73.254 38.3258H69.8538L69.2446 39.8747C69.2446 39.8747 68.901 40.1171 68.081 40.1171C67.1819 40.1171 66.7972 39.8201 66.7972 39.8201L70.3702 30.9341C70.3702 30.9341 70.7002 30.6916 71.5592 30.6916C72.4183 30.6916 72.7502 30.9341 72.7502 30.9341ZM70.5674 36.5216H72.5394L71.8775 34.9051C71.7457 34.5822 71.5729 33.9226 71.5583 33.855C71.5329 33.9226 71.3337 34.5822 71.2156 34.9051L70.5674 36.5216Z\" fill=\"white\"/>\n <path d=\"M75.5949 32.5227C75.5949 32.5227 75.3431 32.2534 75.3431 31.6067C75.3431 30.9599 75.5949 30.6906 75.5949 30.6906H82.779C82.779 30.6906 83.0298 30.9738 83.0298 31.6067C83.0298 32.2395 82.779 32.5227 82.779 32.5227H80.397V39.8608C80.397 39.8608 80.0543 40.1161 79.1933 40.1161C78.3323 40.1161 77.9496 39.8608 77.9496 39.8608V32.5227H75.5949Z\" fill=\"white\"/>\n <path d=\"M88.9047 36.0228H86.5891V38.299H89.9356C89.9356 38.299 90.1875 38.5821 90.1875 39.2001C90.1875 39.8181 89.9356 40.1161 89.9356 40.1161H84.1408V30.6897H89.6711C89.6711 30.6897 89.9356 30.9728 89.9356 31.6057C89.9356 32.2385 89.6711 32.5217 89.6711 32.5217H86.5882V34.1908H88.9038C88.9038 34.1908 89.1547 34.4879 89.1547 35.1078C89.1547 35.7278 88.9038 36.0219 88.9038 36.0219L88.9047 36.0228Z\" fill=\"white\"/>\n <path d=\"M51.7107 54.9999C51.577 54.9999 51.4335 54.974 51.2939 54.8965C51.085 54.7803 50.9395 54.5876 50.8858 54.3551C50.8233 54.0868 50.8936 53.7868 51.082 53.5116L51.1426 53.4202C51.2041 53.3268 51.2685 53.2354 51.3407 53.1519C51.4218 53.0595 51.5047 52.995 51.5741 52.9493C51.5243 52.6691 51.5418 52.4267 51.5682 52.2061C51.5877 52.0233 51.6346 51.8683 51.6726 51.7451C51.6892 51.6925 51.7058 51.6388 51.7185 51.5812C51.8201 51.145 51.8855 50.7397 51.9206 50.3453C51.9528 49.9916 51.947 49.9846 51.8864 49.9061C51.7 49.6707 51.3847 49.5018 51.0498 49.3229C50.8878 49.2365 50.7286 49.1491 50.5754 49.0557C49.607 48.4536 48.6376 47.8505 47.6701 47.2465L47.3294 47.0339C47.2513 46.9862 47.1147 46.9156 46.9516 46.8282C45.8817 46.2659 45.172 45.8526 45.0539 45.2595C45.0363 45.173 44.9465 44.9644 44.884 44.864C44.8411 44.8611 44.7307 44.8521 44.6546 44.8471C44.3032 44.8183 43.7711 44.7726 43.3484 44.3196C43.2635 44.2272 43.1786 44.1408 43.1005 44.0583C42.5098 43.4443 42.0003 42.9148 41.9329 41.5993C41.9241 41.4275 41.9251 41.2506 41.928 41.0728C41.9339 40.5283 41.927 40.1836 41.7103 39.962C41.6078 39.8567 41.435 39.7862 41.2349 39.7037C40.9889 39.6034 40.7097 39.4881 40.45 39.2686C40.37 39.2 40.2792 39.1007 40.1776 38.9854C40.0712 38.8602 39.9082 38.6724 39.7969 38.6337C38.974 38.3436 37.986 38.3178 36.96 38.3178L3.07245 38.2909C2.85964 38.2909 2.66927 38.3138 2.48477 38.3347C2.07378 38.3823 1.60812 38.437 1.2313 38.0962C0.866192 37.7664 0.815429 37.2607 0.814452 36.8076L0.8125 34.3993C0.8125 34.2722 0.847644 34.147 0.913051 34.0387C1.22544 33.529 1.83265 33.2558 2.3686 33.0144C2.56872 32.924 2.77666 32.8316 2.88795 32.7571C3.17593 32.5623 3.43561 32.302 3.7109 32.0248C3.91688 31.8182 4.13068 31.6046 4.36887 31.4059C4.69786 31.1317 5.07078 30.931 5.43296 30.7372C5.74535 30.5703 6.03821 30.4124 6.24127 30.2395C6.38575 30.1173 6.49216 29.9146 6.61906 29.6792C6.75476 29.4238 6.90998 29.1337 7.15208 28.8804C7.41273 28.6081 7.7427 28.4194 8.03263 28.2535C8.69744 27.871 8.68182 27.8322 8.57736 27.5769C8.52855 27.4577 8.48072 27.3553 8.43972 27.2639C8.24447 26.8357 8.07754 26.4681 8.19078 25.7051C8.2025 25.6306 8.21616 25.5521 8.22983 25.4706C8.25619 25.3325 8.30305 25.0772 8.27571 25.0037C8.27571 25.0037 8.26204 24.9927 8.23471 24.9778C8.21128 24.9659 8.12928 24.9669 8.06875 24.9679C7.87448 24.9659 7.51914 24.9768 7.2497 24.6689C6.98124 24.3629 6.99686 23.9555 7.03982 23.6356C7.08179 23.3127 7.06032 23.1051 7.03982 22.9223C6.95684 22.1453 7.21358 21.7817 8.10097 21.424C10.7524 20.351 12.901 19.9884 14.8613 20.2805C14.9775 20.2974 15.1356 20.2656 15.3182 20.2269C15.5944 20.1702 15.9351 20.1017 16.312 20.1752L18.3952 20.5766C19.2475 20.7415 19.6653 20.9054 20.3047 21.4995C20.6327 21.8046 20.7655 21.7718 21.3327 21.5661C21.6168 21.4638 21.9399 21.3485 22.3323 21.2949C22.9727 21.2084 23.5731 21.2661 24.153 21.3227C24.4136 21.3475 24.6762 21.3734 24.9408 21.3843C25.2356 21.3952 25.6085 21.2561 25.9717 21.121C26.1318 21.0614 26.2889 21.0028 26.4412 20.9541C26.78 20.8468 27.0973 20.7991 27.4038 20.7514C27.5551 20.7266 27.7064 20.7037 27.8607 20.6729C27.8714 20.6531 27.8821 20.6332 27.8939 20.6113C27.9417 20.5249 27.9944 20.4345 28.0598 20.3411C28.3419 19.9497 28.7471 19.7003 29.0722 19.4966L29.2078 19.4122C29.5564 19.1916 29.8629 18.9879 30.105 18.7386C30.5423 18.2796 31.1232 18.3114 31.5108 18.3312C31.6455 18.3392 31.8495 18.3481 31.91 18.3223C32.1678 18.207 31.9413 17.3993 31.8065 16.9165C31.7119 16.5777 31.6299 16.2846 31.6133 16.0183C31.5664 15.2642 31.9764 14.7317 32.3064 14.3045C32.5651 13.9687 32.7213 13.7481 32.7164 13.5355C32.7164 13.4948 32.7027 13.4382 32.6851 13.3845C32.4587 13.4948 32.0955 13.6369 31.6796 13.4421C31.0129 13.1302 30.6468 12.0264 30.8508 11.3985C31.0197 10.8779 31.54 10.5421 31.9198 10.2957L32.0565 10.2053C32.3806 9.98471 32.7242 9.79792 33.0542 9.6181C33.5159 9.36873 33.9513 9.13227 34.2949 8.82726C34.4404 8.69711 34.5761 8.56994 34.7089 8.44376C35.0076 8.1626 35.3161 7.8715 35.6792 7.61319C35.7056 7.5188 35.728 7.34096 35.7437 7.22571C35.7729 7.00714 35.8022 6.78062 35.8803 6.5849C36.2513 5.64304 37.1592 4.90884 37.9597 4.25908C38.2252 4.04448 38.4771 3.84081 38.6743 3.65602C38.7992 3.53878 38.9222 3.42055 39.0452 3.30332C39.6388 2.73701 40.2509 2.15084 40.9967 1.68289C41.601 1.30536 42.3898 0.833439 43.1249 0.552274C44.0972 0.1807 44.5579 0.208518 45.4766 0.262168L45.6474 0.27111C47.3607 0.371455 49.1384 0.32476 50.8575 0.281045C51.7205 0.258194 52.5796 0.235343 53.4347 0.230376C53.6651 0.230376 54.0156 0.185667 54.3836 0.138972C55.6078 -0.0140291 56.994 -0.188888 57.7818 0.503592C58.1118 0.792705 58.2924 1.19806 58.3031 1.67594C58.311 2.05248 58.1567 2.33464 58.0435 2.54129C58.0064 2.60686 57.9527 2.7082 57.9458 2.74297C57.9488 2.73205 57.9849 2.78768 58.0103 2.82742C58.1362 3.01718 58.3686 3.37088 58.2748 3.89843C58.2397 4.10111 58.1811 4.3167 58.1216 4.53528C58.0464 4.81147 57.9693 5.09761 57.9624 5.31419C57.9498 5.69073 57.6335 5.99376 57.2703 5.97289C56.9013 5.95998 56.6104 5.64603 56.6231 5.26849C56.6367 4.89195 56.7392 4.50944 56.831 4.17264C56.8788 3.9948 56.9276 3.82094 56.9569 3.65502C56.9481 3.65502 56.9218 3.62323 56.8993 3.58746C56.791 3.42254 56.6065 3.14535 56.6065 2.73701C56.6065 2.36345 56.7607 2.08328 56.873 1.87862C56.9072 1.81702 56.9589 1.72462 56.9657 1.69084C56.9608 1.58354 56.9267 1.55274 56.9072 1.53685C56.5694 1.23979 55.2544 1.40372 54.5496 1.49313C54.1386 1.5438 53.752 1.59348 53.4435 1.59547C52.5971 1.60043 51.7439 1.62229 50.8907 1.64315C49.1442 1.68886 47.3382 1.73654 45.5722 1.63421L45.3985 1.62328C44.5345 1.57162 44.3022 1.55871 43.5964 1.82894C42.9618 2.07235 42.2101 2.5244 41.7006 2.84431C41.0699 3.23973 40.533 3.75338 39.9648 4.29683C39.8379 4.41804 39.712 4.53925 39.5831 4.65947C39.3479 4.87804 39.0794 5.09661 38.7953 5.32611C38.1237 5.87056 37.3642 6.48555 37.1231 7.09457C37.1065 7.14425 37.085 7.30221 37.0713 7.40753C37.0147 7.84666 36.9424 8.3931 36.5041 8.69016C36.1927 8.90277 35.9145 9.16704 35.6187 9.44523C35.4771 9.57935 35.3317 9.71546 35.1774 9.85257C34.7186 10.2629 34.1924 10.548 33.6838 10.8222C33.3675 10.9931 33.0698 11.1541 32.8033 11.3369C32.7554 11.3707 32.6978 11.4064 32.6373 11.4462C32.5114 11.5276 32.2332 11.7065 32.1346 11.8217C32.1424 11.8992 32.1726 12.0115 32.2117 12.1009C32.3757 12.0214 32.6041 11.924 32.8804 11.9459C33.6633 12.0135 34.0401 12.8937 34.0558 13.4988C34.0743 14.2191 33.677 14.7337 33.3587 15.145C33.0971 15.4868 32.9351 15.7074 32.9487 15.9319C32.9565 16.0511 33.0288 16.3114 33.0932 16.5419C33.3314 17.3933 33.7746 18.978 32.4479 19.5701C32.0965 19.7281 31.7314 19.7082 31.4375 19.6933C31.3126 19.6864 31.1046 19.6764 31.047 19.7023C30.7171 20.051 30.3227 20.3113 29.9166 20.5706L29.7692 20.663C29.5212 20.816 29.2654 20.976 29.1405 21.1488C29.1083 21.1935 29.0819 21.2412 29.0585 21.2859C28.9345 21.5085 28.7256 21.884 28.174 21.9993C27.9827 22.04 27.7943 22.0708 27.6059 22.0996C27.3364 22.1414 27.0807 22.1811 26.8386 22.2566C26.7087 22.2993 26.5711 22.35 26.4334 22.4017C25.9697 22.5745 25.4435 22.7732 24.8871 22.7474C24.5981 22.7355 24.3131 22.7087 24.027 22.6808C23.4989 22.6282 22.9981 22.5805 22.511 22.6481C22.2572 22.6828 22.0258 22.7653 21.7817 22.8537C21.1716 23.0733 20.3369 23.3733 19.4046 22.508C18.9927 22.1265 18.8267 22.049 18.1473 21.9178L16.065 21.5164C15.942 21.4936 15.775 21.5264 15.5818 21.5651C15.3289 21.6168 15.0136 21.6784 14.6719 21.6297C12.9508 21.3724 11.0218 21.7112 8.59689 22.6928C8.49829 22.7325 8.42703 22.7643 8.37431 22.7891C8.39579 22.9779 8.42312 23.2491 8.39091 23.6217C8.53343 23.6416 8.69353 23.6843 8.86047 23.7737C9.81228 24.2834 9.63461 25.256 9.5487 25.724C9.53601 25.7876 9.52528 25.8511 9.51551 25.9127C9.4628 26.2694 9.49501 26.3429 9.65511 26.6917C9.70392 26.798 9.75664 26.9162 9.81326 27.0543C10.3941 28.4681 9.28415 29.1039 8.68865 29.4447C8.46705 29.5719 8.23764 29.701 8.11268 29.8331C7.99944 29.9524 7.89987 30.1372 7.79541 30.3329C7.62945 30.6448 7.44104 30.9975 7.10522 31.2847C6.79088 31.5529 6.41894 31.7536 6.05871 31.9454C5.74144 32.1153 5.44077 32.2762 5.21623 32.464C5.02782 32.6219 4.84527 32.8048 4.65295 32.9985C4.34252 33.3085 4.02524 33.6294 3.62499 33.8976C3.41901 34.0347 3.17203 34.147 2.9104 34.2652C2.69661 34.3606 2.33443 34.5225 2.14992 34.6626L2.15383 36.8096C2.15383 36.8881 2.15578 36.9527 2.15871 37.0023C2.21533 36.9974 2.27586 36.9904 2.32662 36.9835C2.5287 36.9606 2.77959 36.9308 3.06952 36.9308L36.9581 36.9566C38.0573 36.9566 39.2141 36.9884 40.2304 37.3471C40.6755 37.5021 40.9801 37.8538 41.1812 38.0853C41.2281 38.1399 41.2681 38.1896 41.3052 38.2234C41.4018 38.3048 41.5551 38.3674 41.7328 38.441C42.0129 38.5562 42.3615 38.7003 42.6572 39.0043C43.2811 39.6411 43.2713 40.4469 43.2645 41.0927C43.2606 41.2417 43.2606 41.3897 43.2664 41.5328C43.3084 42.3326 43.5261 42.5581 44.0532 43.1055C44.1372 43.1929 44.2251 43.2853 44.3188 43.3847C44.3842 43.4542 44.5287 43.4701 44.761 43.491C45.0412 43.5138 45.3897 43.5417 45.6953 43.7751C46.0291 44.0275 46.2546 44.5888 46.3376 44.8809C46.5455 45.0846 47.2777 45.4711 47.5647 45.6211C47.7639 45.7264 47.9298 45.8158 48.0265 45.8754L48.3672 46.088C49.3346 46.6891 50.3011 47.2922 51.2705 47.8943C51.3993 47.9727 51.533 48.0463 51.6707 48.1188C52.0924 48.3443 52.5698 48.6006 52.9291 49.0567C53.3215 49.5544 53.2942 50.0045 53.259 50.4029C53.3156 50.2936 53.3781 50.1893 53.4513 50.0879C53.5841 49.8982 53.7393 49.7541 53.877 49.626C54.0136 49.4998 54.1073 49.4104 54.1396 49.3388C54.1132 49.2772 54.0527 49.1739 54.0117 49.1034C53.8487 48.8232 53.6271 48.4387 53.7315 47.9857C53.7725 47.8108 53.8789 47.6588 54.0283 47.5634C54.0849 47.5276 54.205 47.4591 54.3631 47.3717C54.5818 47.2495 55.1373 46.9405 55.475 46.71C54.9723 45.5913 55.1392 44.2163 55.2886 42.9843C55.3345 42.6038 55.3784 42.2451 55.3989 41.9222C55.4204 41.5467 55.7337 41.2606 56.1076 41.2834C56.4776 41.3063 56.7588 41.6301 56.7353 42.0057C56.7148 42.3693 56.667 42.7498 56.6182 43.1522C56.4776 44.3166 56.3165 45.637 56.833 46.3911C56.954 46.5669 56.994 46.7895 56.9452 47.0021C56.8417 47.4502 56.3898 47.7879 55.1958 48.4606C55.352 48.7308 55.5395 49.0904 55.4731 49.5167C55.4623 49.5812 55.4487 49.6428 55.4321 49.7015C55.766 49.5793 56.1154 49.464 56.4845 49.3577C57.8775 48.9543 59.3409 48.7745 61.225 48.7745C62.0587 48.7745 62.8006 48.5053 63.5874 48.2211C64.2103 47.9946 64.8546 47.7621 65.576 47.6508C66.1852 47.5555 66.5005 47.7562 66.7728 47.9688C66.8636 48.0403 66.93 48.09 67.0442 48.1357C67.3625 48.2619 67.7325 48.2211 68.1601 48.1754C68.5925 48.1277 69.0836 48.0731 69.5844 48.2042C69.8821 48.2837 70.09 48.5579 70.0861 48.8709C70.0744 50.0571 68.5076 50.5459 67.7549 50.7814L67.0384 51.0099C66.4985 51.1848 65.9567 51.3586 65.41 51.5176C65.1631 51.5881 64.918 51.6587 64.672 51.7223C64.3889 51.7948 64.099 51.9597 63.7944 52.1316C63.481 52.3094 63.1579 52.4922 62.786 52.6174C62.1426 52.83 61.4837 52.9413 60.6471 52.9761C60.4069 52.987 60.1746 53.0943 59.9295 53.2056C59.5674 53.3735 59.1154 53.5801 58.6107 53.4132C58.3949 53.3864 57.5534 53.6775 57.1502 53.8196C56.832 53.9289 56.5577 54.0242 56.3419 54.0759C55.598 54.2528 54.8415 54.3918 54.1103 54.527L53.5968 54.6223C53.1516 54.7058 52.7035 54.7922 52.2613 54.8926L52.2076 54.9085C52.0797 54.9482 51.9021 55.0038 51.7078 55.0038L51.7107 54.9999ZM53.0735 51.6746C53.0569 51.7471 53.0403 51.8196 53.0237 51.8941C53.0032 51.9806 52.9788 52.064 52.9544 52.1455C52.9281 52.2359 52.9066 52.3055 52.8988 52.3651C52.8793 52.5379 52.8773 52.6313 52.8978 52.7247C52.9495 52.9791 52.9388 53.1907 52.8949 53.3645C53.0482 53.3347 53.2024 53.3049 53.3566 53.2751L53.875 53.1808C54.5896 53.0486 55.3296 52.9125 56.0412 52.7436C56.1906 52.7078 56.4483 52.6194 56.7217 52.525C57.7721 52.1604 58.4994 51.9359 59.0295 52.1127C59.0646 52.1058 59.2559 52.0173 59.3828 51.9597C59.7001 51.8137 60.0945 51.6328 60.5924 51.611C61.3021 51.5812 61.8498 51.4908 62.372 51.3169C62.622 51.2345 62.8748 51.0914 63.1442 50.9374C63.5123 50.7298 63.892 50.5142 64.3469 50.3969C64.5793 50.3373 64.8136 50.2707 65.0459 50.2042C65.5789 50.0482 66.11 49.8773 66.6362 49.7064L67.1253 49.5514C66.9388 49.5246 66.7504 49.4779 66.56 49.4014C66.2672 49.2862 66.0836 49.1411 65.9616 49.0457C65.9313 49.0229 65.906 48.999 65.8757 48.9812C65.8737 48.9851 65.8405 48.9851 65.7781 48.9941C65.1845 49.0855 64.6281 49.2862 64.0394 49.4998C63.1794 49.8107 62.293 50.1326 61.2279 50.1326C59.4717 50.1326 58.1235 50.2966 56.8535 50.6642C55.7142 50.992 54.7868 51.3984 54.0166 51.9031C53.7901 52.0521 53.5001 52.0481 53.2776 51.8951C53.1917 51.8365 53.1214 51.76 53.0735 51.6716V51.6746Z\" fill=\"white\"/>\n <path d=\"M67.6348 51.8019C67.6348 51.8019 67.6173 51.782 67.6173 51.7303C67.6173 51.6787 67.6348 51.6588 67.6348 51.6588H68.5564C68.5564 51.6588 68.5749 51.6806 68.5749 51.7303C68.5749 51.78 68.5564 51.8019 68.5564 51.8019H68.1932V52.9205C68.1932 52.9205 68.1659 52.9404 68.0976 52.9404C68.0292 52.9404 67.998 52.9205 67.998 52.9205V51.8019H67.6348Z\" fill=\"white\"/>\n <path d=\"M69.4282 52.8659C69.4135 52.8748 69.3891 52.8858 69.3471 52.8858C69.3178 52.8858 69.2837 52.8798 69.27 52.8659L68.9889 52.1476C68.9723 52.1088 68.9459 52.0323 68.944 52.0214C68.944 52.0264 68.9371 52.1277 68.9332 52.1565L68.8815 52.9205C68.8815 52.9205 68.8561 52.9404 68.7858 52.9404C68.7155 52.9404 68.6862 52.9205 68.6862 52.9205L68.7839 51.6787C68.7839 51.6787 68.8112 51.6588 68.8776 51.6588C68.9518 51.6588 68.9781 51.6787 68.9781 51.6787L69.3042 52.5162L69.3471 52.6533C69.3481 52.6473 69.3774 52.5559 69.392 52.5162L69.7181 51.6787C69.7181 51.6787 69.7464 51.6588 69.8206 51.6588C69.886 51.6588 69.9124 51.6787 69.9124 51.6787L70.01 52.9205C70.01 52.9205 69.9807 52.9404 69.9104 52.9404C69.8401 52.9404 69.8167 52.9205 69.8167 52.9205L69.763 52.1546L69.7523 52.0194C69.7523 52.0194 69.722 52.1148 69.7093 52.1456L69.4282 52.8659Z\" fill=\"white\"/>\n</svg>`;\n\nexport default nysBrandLogoSvg;\n","import { html, unsafeCSS } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { NysElement } from \"@nysds/internals\";\nimport nysLogo from \"./nys-unav.logo\";\n// @ts-ignore: SCSS module imported via bundler as inline\nimport styles from \"./nys-unavfooter.scss?inline\";\n\n/**\n * Accessible name for the `contentinfo` landmark, used when the consumer does not\n * override it. Pairs with the agency `nys-globalfooter`'s own name, so landmark\n * navigation can tell the statewide chrome from the site's own footer.\n */\nconst DEFAULT_LANDMARK_LABEL = \"New York State\";\n\n/**\n * Universal NYS footer with logo and statewide navigation links. Required on all NYS sites.\n *\n * Place as the last element before `</body>`. Displays NY.gov logo and links to Agencies,\n * App Directory, Counties, Events, Programs, and Services. No configuration needed.\n *\n * @accessibility\n * - Uses semantic `<footer>` element for assistive technology recognition.\n * - All links are keyboard-navigable via Tab.\n * - Proper link text for screen reader users.\n * - Links open in same window (no target=\"_blank\") unless external policy requires otherwise.\n * - Visual design meets WCAG 2.2 AA contrast and focus indicator standards.\n * - Footer is not hidden from screen readers and is announced as navigation.\n *\n *\n * @summary Universal NYS footer with logo and statewide links. Required site-wide.\n * @element nys-unavfooter\n *\n * @example Basic\n * ```html\n * <nys-unavfooter></nys-unavfooter>\n * ```\n *\n * @example Custom landmark label\n * ```html\n * <!-- Renames the contentinfo landmark. Keep it distinct from the agency footer's. -->\n * <nys-unavfooter landmarkLabel=\"Statewide\"></nys-unavfooter>\n * ```\n */\n\nexport class NysUnavFooter extends NysElement {\n static styles = unsafeCSS(styles);\n\n /**\n * Accessible name for the `contentinfo` landmark this footer renders.\n * Defaults to `\"New York State\"`.\n *\n * A page pairing this footer with `nys-globalfooter` carries two `contentinfo`\n * landmarks; distinct names are what keep landmark navigation useful instead of\n * announcing \"content information\" twice. Override only when your wording is\n * clearer for your audience — and keep it distinct from the agency footer's\n * name, which comes from that footer's visible heading.\n *\n * A blank value falls back to the default rather than leaving the landmark\n * unnamed.\n *\n * @default \"New York State\"\n */\n @property({ type: String }) landmarkLabel = DEFAULT_LANDMARK_LABEL;\n\n /**\n * Lifecycle methods\n * --------------------------------------------------------------------------\n */\n\n connectedCallback() {\n // super.connectedCallback() (NysElement) assigns an auto-\n // generated id when one is not provided. The contentinfo/navigation\n // landmarks stay on the inner <footer>/<nav> elements, so this component\n // intentionally keeps defaultRole = null and does not move a role to the\n // host.\n super.connectedCallback();\n }\n\n /**\n * Functions\n * --------------------------------------------------------------------------\n */\n\n private _getNysLogo() {\n if (!nysLogo) return null;\n\n // Parse the SVG string into an actual SVG DOM element\n const parser = new DOMParser();\n const svgDoc = parser.parseFromString(nysLogo, \"image/svg+xml\");\n const svgElement = svgDoc.documentElement;\n\n // The logo is decorative; the surrounding link already carries an\n // accessible name, so hide the SVG from the accessibility tree.\n svgElement.setAttribute(\"aria-hidden\", \"true\");\n svgElement.setAttribute(\"focusable\", \"false\");\n\n return svgElement;\n }\n\n /**\n * The contentinfo's accessible name. A blank override would put the page back\n * where #1795 found it — two unnamed contentinfo landmarks — so it falls back\n * to the default.\n */\n private get _landmarkLabel(): string {\n return this.landmarkLabel?.trim() || DEFAULT_LANDMARK_LABEL;\n }\n\n render() {\n // The statewide footer sits below an agency's own `nys-globalfooter`, so a page\n // normally carries two contentinfo landmarks. Naming this one keeps landmark\n // navigation meaningful instead of announcing \"content information\" twice (axe\n // `landmark-unique`); the agency footer is named after the agency. `landmarkLabel`\n // lets a consumer reword this one without giving up the distinction.\n return html`\n <footer class=\"nys-unavfooter\" aria-label=${this._landmarkLabel}>\n <div class=\"nys-unavfooter__main-container\">\n <div class=\"nys-unavfooter__container_menu\">\n <div class=\"nys-unavfooter__logo\">\n <a\n href=\"https://www.ny.gov\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n id=\"nys-unavheader__logolink\"\n aria-label=\"New York State home page (opens in a new tab)\"\n >${this._getNysLogo()}</a\n >\n </div>\n <nav class=\"nys-unavfooter__content\" aria-label=\"New York State\">\n <ul>\n <li><a href=\"https://www.ny.gov/agencies\">Agencies</a></li>\n <li>\n <a href=\"https://www.ny.gov/mobileapps\">App Directory</a>\n </li>\n <li><a href=\"https://www.ny.gov/counties\">Counties</a></li>\n <li><a href=\"https://www.ny.gov/events\">Events</a></li>\n <li><a href=\"https://www.ny.gov/programs\">Programs</a></li>\n <li><a href=\"https://www.ny.gov/services\">Services</a></li>\n </ul>\n </nav>\n </div>\n </div>\n </footer>\n `;\n }\n}\n\nif (!customElements.get(\"nys-unavfooter\")) {\n customElements.define(\"nys-unavfooter\", NysUnavFooter);\n}\n","/**\n * `@nysds/nys-unavbundle` — the universal nav as a single drop-in script.\n *\n * ```html\n * <script src=\"https://unpkg.com/@nysds/nys-unavbundle\"></script>\n * <nys-unavheader></nys-unavheader>\n * ...\n * <nys-unavfooter></nys-unavfooter>\n * ```\n *\n * Everything the two elements need is inlined: Lit, the shared internals, the\n * `nys-button` / `nys-textinput` / `nys-alert` / `nys-icon` components they\n * compose, and the design tokens their styles read. Icons are pruned at build\n * time to the set the nav can actually render — see `scripts/icon-allowlist.js`.\n */\n\nimport tokens from \"./tokens\";\n\n// Side-effect imports: each module registers its own custom element, guarded by\n// a `customElements.get()` check, so a page that already loads NYSDS keeps the\n// definitions it registered first.\nimport \"@nysds/nys-unavheader\";\nimport \"@nysds/nys-unavfooter\";\n\n/** Marks the injected `<style>`, so repeat loads of the script are a no-op. */\nconst TOKENS_STYLE_ID = \"nys-unavbundle-tokens\";\n\ndeclare global {\n interface Window {\n /** Set before the script runs to suppress token injection entirely. */\n NYS_UNAV_SKIP_TOKENS?: boolean;\n }\n}\n\n/**\n * Put the NYSDS token variables on `:root`.\n *\n * The style goes in as the *first* child of `<head>` on purpose: the component\n * styles read these variables, but a host page that defines its own `--nys-*`\n * values — including a page already loading `@nysds/styles` — should win on\n * source order rather than fight us for it.\n */\nexport function injectTokens(): void {\n if (typeof document === \"undefined\") return;\n if (window.NYS_UNAV_SKIP_TOKENS) return;\n if (document.getElementById(TOKENS_STYLE_ID)) return;\n\n const style = document.createElement(\"style\");\n style.id = TOKENS_STYLE_ID;\n style.textContent = tokens;\n\n const head = document.head;\n head.insertBefore(style, head.firstChild);\n}\n\ninjectTokens();\n\nexport { NysUnavHeader } from \"@nysds/nys-unavheader\";\nexport { NysUnavFooter } from \"@nysds/nys-unavfooter\";\n","const iconLibrary = {\"ac_unit\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_444\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_444)\\\">\\n <path d=\\\"M11 17.85L8.425 20.375C8.24167 20.5583 8.0125 20.65 7.7375 20.65C7.4625 20.65 7.23333 20.55 7.05 20.35C6.85 20.1667 6.75 19.9375 6.75 19.6625C6.75 19.3875 6.85 19.15 7.05 18.95L11 15V13H9L5.025 16.975C4.84167 17.1583 4.6125 17.25 4.3375 17.25C4.0625 17.25 3.825 17.15 3.625 16.95C3.44167 16.7667 3.35 16.5375 3.35 16.2625C3.35 15.9875 3.44167 15.7583 3.625 15.575L6.15 13H2.975C2.69167 13 2.45833 12.9042 2.275 12.7125C2.09167 12.5208 2 12.2833 2 12C2 11.7167 2.09583 11.4792 2.2875 11.2875C2.47917 11.0958 2.71667 11 3 11H6.15L3.625 8.45C3.44167 8.26667 3.35 8.0375 3.35 7.7625C3.35 7.4875 3.45 7.25 3.65 7.05C3.83333 6.86667 4.0625 6.775 4.3375 6.775C4.6125 6.775 4.85 6.86667 5.05 7.05L9 11H11V9L7.025 5.05C6.84167 4.86667 6.75 4.6375 6.75 4.3625C6.75 4.0875 6.85 3.85 7.05 3.65C7.23333 3.46667 7.4625 3.375 7.7375 3.375C8.0125 3.375 8.24167 3.46667 8.425 3.65L11 6.15V3C11 2.71667 11.0958 2.47917 11.2875 2.2875C11.4792 2.09583 11.7167 2 12 2C12.2833 2 12.5208 2.09583 12.7125 2.2875C12.9042 2.47917 13 2.71667 13 3V6.15L15.55 3.65C15.7333 3.46667 15.9625 3.375 16.2375 3.375C16.5125 3.375 16.75 3.46667 16.95 3.65C17.1333 3.85 17.225 4.0875 17.225 4.3625C17.225 4.6375 17.1333 4.86667 16.95 5.05L13 9V11H15L18.95 7.05C19.1333 6.86667 19.3625 6.775 19.6375 6.775C19.9125 6.775 20.15 6.875 20.35 7.075C20.5333 7.25833 20.625 7.4875 20.625 7.7625C20.625 8.0375 20.5333 8.26667 20.35 8.45L17.85 11H21C21.2833 11 21.5208 11.0958 21.7125 11.2875C21.9042 11.4792 22 11.7167 22 12C22 12.2833 21.9042 12.5208 21.7125 12.7125C21.5208 12.9042 21.2833 13 21 13H17.85L20.35 15.575C20.5333 15.7583 20.625 15.9875 20.625 16.2625C20.625 16.5375 20.5333 16.7667 20.35 16.95C20.15 17.15 19.9125 17.25 19.6375 17.25C19.3625 17.25 19.1333 17.15 18.95 16.95L15 13H13V15L16.95 18.975C17.1333 19.1583 17.225 19.3875 17.225 19.6625C17.225 19.9375 17.125 20.175 16.925 20.375C16.7417 20.5583 16.5125 20.65 16.2375 20.65C15.9625 20.65 15.7333 20.5583 15.55 20.375L13 17.85V21.025C13 21.3083 12.9042 21.5417 12.7125 21.725C12.5208 21.9083 12.2833 22 12 22C11.7167 22 11.4792 21.9042 11.2875 21.7125C11.0958 21.5208 11 21.2833 11 21V17.85Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"account_balance_filled\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_695\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_695)\\\">\\n <path d=\\\"M4.22502 15.875V11.65C4.22502 11.2666 4.36252 10.9416 4.63752 10.675C4.91252 10.4083 5.24169 10.275 5.62502 10.275C6.00836 10.275 6.33336 10.4083 6.60002 10.675C6.86669 10.9416 7.00002 11.2666 7.00002 11.65V15.9C7.00002 16.2833 6.86669 16.6083 6.60002 16.875C6.33336 17.1416 6.00836 17.275 5.62502 17.275C5.24169 17.275 4.91252 17.1375 4.63752 16.8625C4.36252 16.5875 4.22502 16.2583 4.22502 15.875ZM10.625 15.9V11.65C10.625 11.2666 10.7584 10.9416 11.025 10.675C11.2917 10.4083 11.6167 10.275 12 10.275C12.3834 10.275 12.7084 10.4083 12.975 10.675C13.2417 10.9416 13.375 11.2666 13.375 11.65V15.9C13.375 16.2833 13.2417 16.6083 12.975 16.875C12.7084 17.1416 12.3834 17.275 12 17.275C11.6167 17.275 11.2917 17.1416 11.025 16.875C10.7584 16.6083 10.625 16.2833 10.625 15.9ZM2.72502 21.65C2.29169 21.65 1.92086 21.4958 1.61252 21.1875C1.30419 20.8791 1.15002 20.5083 1.15002 20.075C1.15002 19.6416 1.30419 19.2708 1.61252 18.9625C1.92086 18.6541 2.29169 18.5 2.72502 18.5H21.275C21.7084 18.5 22.0792 18.6541 22.3875 18.9625C22.6959 19.2708 22.85 19.6416 22.85 20.075C22.85 20.5083 22.6959 20.8791 22.3875 21.1875C22.0792 21.4958 21.7084 21.65 21.275 21.65H2.72502ZM17 15.875V11.65C17 11.2666 17.1375 10.9416 17.4125 10.675C17.6875 10.4083 18.0167 10.275 18.4 10.275C18.7834 10.275 19.1084 10.4083 19.375 10.675C19.6417 10.9416 19.775 11.2666 19.775 11.65V15.9C19.775 16.2833 19.6417 16.6083 19.375 16.875C19.1084 17.1416 18.7834 17.275 18.4 17.275C18.0167 17.275 17.6875 17.1375 17.4125 16.8625C17.1375 16.5875 17 16.2583 17 15.875ZM21.175 9.02495H2.65002C2.23336 9.02495 1.87919 8.87912 1.58752 8.58745C1.29586 8.29578 1.15002 7.94162 1.15002 7.52495V6.57495C1.15002 6.29162 1.22502 6.02912 1.37502 5.78745C1.52502 5.54578 1.72502 5.35828 1.97502 5.22495L10.6 0.924951C11.0334 0.691618 11.5 0.574951 12 0.574951C12.5 0.574951 12.9667 0.691618 13.4 0.924951L21.925 5.17495C22.2084 5.30828 22.4334 5.51245 22.6 5.78745C22.7667 6.06245 22.85 6.36662 22.85 6.69995V7.32495C22.85 7.79162 22.6875 8.19162 22.3625 8.52495C22.0375 8.85828 21.6417 9.02495 21.175 9.02495Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"air\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_423\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_423)\\\">\\n <path d=\\\"M11.5 20C10.9667 20 10.4708 19.8667 10.0125 19.6C9.55417 19.3333 9.18333 18.9667 8.9 18.5C8.71667 18.1667 8.7125 17.8333 8.8875 17.5C9.0625 17.1667 9.33333 17 9.7 17C9.91667 17 10.1083 17.0667 10.275 17.2C10.4417 17.3333 10.5917 17.4833 10.725 17.65C10.8083 17.7667 10.9208 17.8542 11.0625 17.9125C11.2042 17.9708 11.35 18 11.5 18C11.7833 18 12.0208 17.9042 12.2125 17.7125C12.4042 17.5208 12.5 17.2833 12.5 17C12.5 16.7167 12.4042 16.4792 12.2125 16.2875C12.0208 16.0958 11.7833 16 11.5 16H3C2.71667 16 2.47917 15.9042 2.2875 15.7125C2.09583 15.5208 2 15.2833 2 15C2 14.7167 2.09583 14.4792 2.2875 14.2875C2.47917 14.0958 2.71667 14 3 14H11.5C12.3333 14 13.0417 14.2917 13.625 14.875C14.2083 15.4583 14.5 16.1667 14.5 17C14.5 17.8333 14.2083 18.5417 13.625 19.125C13.0417 19.7083 12.3333 20 11.5 20ZM3 10C2.71667 10 2.47917 9.90417 2.2875 9.7125C2.09583 9.52083 2 9.28333 2 9C2 8.71667 2.09583 8.47917 2.2875 8.2875C2.47917 8.09583 2.71667 8 3 8H15.5C15.9167 8 16.2708 7.85417 16.5625 7.5625C16.8542 7.27083 17 6.91667 17 6.5C17 6.08333 16.8542 5.72917 16.5625 5.4375C16.2708 5.14583 15.9167 5 15.5 5C15.2333 5 14.9833 5.0625 14.75 5.1875C14.5167 5.3125 14.3333 5.49167 14.2 5.725C14.0833 5.925 13.9417 6.10417 13.775 6.2625C13.6083 6.42083 13.4083 6.5 13.175 6.5C12.8417 6.5 12.5708 6.375 12.3625 6.125C12.1542 5.875 12.1 5.60833 12.2 5.325C12.4333 4.625 12.8542 4.0625 13.4625 3.6375C14.0708 3.2125 14.75 3 15.5 3C16.4667 3 17.2917 3.34167 17.975 4.025C18.6583 4.70833 19 5.53333 19 6.5C19 7.46667 18.6583 8.29167 17.975 8.975C17.2917 9.65833 16.4667 10 15.5 10H3ZM19.95 17.7C19.6167 17.85 19.2917 17.8292 18.975 17.6375C18.6583 17.4458 18.5 17.1667 18.5 16.8C18.5 16.5667 18.5792 16.3708 18.7375 16.2125C18.8958 16.0542 19.075 15.9167 19.275 15.8C19.5083 15.6667 19.6875 15.4833 19.8125 15.25C19.9375 15.0167 20 14.7667 20 14.5C20 14.0833 19.8542 13.7292 19.5625 13.4375C19.2708 13.1458 18.9167 13 18.5 13H3C2.71667 13 2.47917 12.9042 2.2875 12.7125C2.09583 12.5208 2 12.2833 2 12C2 11.7167 2.09583 11.4792 2.2875 11.2875C2.47917 11.0958 2.71667 11 3 11H18.5C19.4667 11 20.2917 11.3417 20.975 12.025C21.6583 12.7083 22 13.5333 22 14.5C22 15.2 21.8167 15.8375 21.45 16.4125C21.0833 16.9875 20.5833 17.4167 19.95 17.7Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"check_circle\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_22550_677\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_22550_677)\\\">\\n <path d=\\\"M10.6 13.8L8.45 11.65C8.26667 11.4667 8.03333 11.375 7.75 11.375C7.46667 11.375 7.23333 11.4667 7.05 11.65C6.86667 11.8333 6.775 12.0667 6.775 12.35C6.775 12.6333 6.86667 12.8667 7.05 13.05L9.9 15.9C10.1 16.1 10.3333 16.2 10.6 16.2C10.8667 16.2 11.1 16.1 11.3 15.9L16.95 10.25C17.1333 10.0667 17.225 9.83333 17.225 9.55C17.225 9.26667 17.1333 9.03333 16.95 8.85C16.7667 8.66667 16.5333 8.575 16.25 8.575C15.9667 8.575 15.7333 8.66667 15.55 8.85L10.6 13.8ZM12 22C10.6167 22 9.31667 21.7375 8.1 21.2125C6.88333 20.6875 5.825 19.975 4.925 19.075C4.025 18.175 3.3125 17.1167 2.7875 15.9C2.2625 14.6833 2 13.3833 2 12C2 10.6167 2.2625 9.31667 2.7875 8.1C3.3125 6.88333 4.025 5.825 4.925 4.925C5.825 4.025 6.88333 3.3125 8.1 2.7875C9.31667 2.2625 10.6167 2 12 2C13.3833 2 14.6833 2.2625 15.9 2.7875C17.1167 3.3125 18.175 4.025 19.075 4.925C19.975 5.825 20.6875 6.88333 21.2125 8.1C21.7375 9.31667 22 10.6167 22 12C22 13.3833 21.7375 14.6833 21.2125 15.9C20.6875 17.1167 19.975 18.175 19.075 19.075C18.175 19.975 17.1167 20.6875 15.9 21.2125C14.6833 21.7375 13.3833 22 12 22ZM12 20C14.2333 20 16.125 19.225 17.675 17.675C19.225 16.125 20 14.2333 20 12C20 9.76667 19.225 7.875 17.675 6.325C16.125 4.775 14.2333 4 12 4C9.76667 4 7.875 4.775 6.325 6.325C4.775 7.875 4 9.76667 4 12C4 14.2333 4.775 16.125 6.325 17.675C7.875 19.225 9.76667 20 12 20Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"chevron_down\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_190\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_190)\\\">\\n <path d=\\\"M12 14.725L19.35 7.375C19.6 7.125 19.8917 7.00417 20.225 7.0125C20.5583 7.02083 20.85 7.15 21.1 7.4C21.35 7.65 21.475 7.94167 21.475 8.275C21.475 8.60833 21.35 8.9 21.1 9.15L13.425 16.85C13.225 17.05 13 17.2 12.75 17.3C12.5 17.4 12.25 17.45 12 17.45C11.75 17.45 11.5 17.4 11.25 17.3C11 17.2 10.775 17.05 10.575 16.85L2.87499 9.15C2.62499 8.9 2.50415 8.60417 2.51249 8.2625C2.52082 7.92083 2.64999 7.625 2.89999 7.375C3.14999 7.125 3.44165 7 3.77499 7C4.10832 7 4.39999 7.125 4.64999 7.375L12 14.725Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"chevron_left\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_376\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_376)\\\">\\n <path d=\\\"M9.54995 12.0001L16.9 19.3501C17.15 19.6001 17.2708 19.8918 17.2625 20.2251C17.2541 20.5584 17.125 20.8501 16.875 21.1001C16.625 21.3501 16.3333 21.4751 16 21.4751C15.6666 21.4751 15.375 21.3501 15.125 21.1001L7.42495 13.4251C7.22495 13.2251 7.07495 13.0001 6.97495 12.7501C6.87495 12.5001 6.82495 12.2501 6.82495 12.0001C6.82495 11.7501 6.87495 11.5001 6.97495 11.2501C7.07495 11.0001 7.22495 10.7751 7.42495 10.5751L15.125 2.87511C15.375 2.62511 15.6708 2.50428 16.0125 2.51261C16.3541 2.52094 16.65 2.65011 16.9 2.90011C17.15 3.15011 17.275 3.44178 17.275 3.77511C17.275 4.10844 17.15 4.40011 16.9 4.65011L9.54995 12.0001Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"chevron_right\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_247\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_247)\\\">\\n <path d=\\\"M14.7238 12.4865L7.37494 19.8353C7.12498 20.0853 7.00417 20.3769 7.0125 20.7102C7.02083 21.0435 7.14998 21.3351 7.39994 21.5851C7.6499 21.835 7.94152 21.96 8.2748 21.96C8.60809 21.96 8.89971 21.835 9.14967 21.5851L16.8485 13.9112C17.0485 13.7113 17.1984 13.4863 17.2984 13.2363C17.3984 12.9864 17.4484 12.7364 17.4484 12.4865C17.4484 12.2365 17.3984 11.9865 17.2984 11.7366C17.1984 11.4866 17.0485 11.2616 16.8485 11.0617L9.14967 3.36285C8.89971 3.11289 8.60392 2.99207 8.26231 3.0004C7.92069 3.00874 7.6249 3.13788 7.37494 3.38784C7.12498 3.63781 7 3.92943 7 4.26271C7 4.59599 7.12498 4.88761 7.37494 5.13758L14.7238 12.4865Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"chevron_up\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_435\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_435)\\\">\\n <path d=\\\"M12 9.82485L4.65002 17.1749C4.40002 17.4249 4.10836 17.5457 3.77502 17.5374C3.44169 17.529 3.15002 17.3999 2.90002 17.1499C2.65002 16.8999 2.52502 16.6082 2.52502 16.2749C2.52502 15.9415 2.65002 15.6499 2.90002 15.3999L10.575 7.69985C10.775 7.49985 11 7.34985 11.25 7.24985C11.5 7.14985 11.75 7.09985 12 7.09985C12.25 7.09985 12.5 7.14985 12.75 7.24985C13 7.34985 13.225 7.49985 13.425 7.69985L21.125 15.3999C21.375 15.6499 21.4959 15.9457 21.4875 16.2874C21.4792 16.629 21.35 16.9249 21.1 17.1749C20.85 17.4249 20.5584 17.5499 20.225 17.5499C19.8917 17.5499 19.6 17.4249 19.35 17.1749L12 9.82485Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"clear_day\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_705\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_705)\\\">\\n <path d=\\\"M12 5C11.7167 5 11.4792 4.90417 11.2875 4.7125C11.0958 4.52083 11 4.28333 11 4V2C11 1.71667 11.0958 1.47917 11.2875 1.2875C11.4792 1.09583 11.7167 1 12 1C12.2833 1 12.5208 1.09583 12.7125 1.2875C12.9042 1.47917 13 1.71667 13 2V4C13 4.28333 12.9042 4.52083 12.7125 4.7125C12.5208 4.90417 12.2833 5 12 5ZM16.95 7.05C16.7667 6.86667 16.675 6.6375 16.675 6.3625C16.675 6.0875 16.7667 5.85 16.95 5.65L18.35 4.225C18.55 4.025 18.7875 3.925 19.0625 3.925C19.3375 3.925 19.575 4.025 19.775 4.225C19.9583 4.40833 20.05 4.64167 20.05 4.925C20.05 5.20833 19.9583 5.44167 19.775 5.625L18.35 7.05C18.1667 7.23333 17.9333 7.325 17.65 7.325C17.3667 7.325 17.1333 7.23333 16.95 7.05ZM20 13C19.7167 13 19.4792 12.9042 19.2875 12.7125C19.0958 12.5208 19 12.2833 19 12C19 11.7167 19.0958 11.4792 19.2875 11.2875C19.4792 11.0958 19.7167 11 20 11H22C22.2833 11 22.5208 11.0958 22.7125 11.2875C22.9042 11.4792 23 11.7167 23 12C23 12.2833 22.9042 12.5208 22.7125 12.7125C22.5208 12.9042 22.2833 13 22 13H20ZM12 23C11.7167 23 11.4792 22.9042 11.2875 22.7125C11.0958 22.5208 11 22.2833 11 22V20C11 19.7167 11.0958 19.4792 11.2875 19.2875C11.4792 19.0958 11.7167 19 12 19C12.2833 19 12.5208 19.0958 12.7125 19.2875C12.9042 19.4792 13 19.7167 13 20V22C13 22.2833 12.9042 22.5208 12.7125 22.7125C12.5208 22.9042 12.2833 23 12 23ZM5.65 7.05L4.225 5.65C4.025 5.45 3.925 5.20833 3.925 4.925C3.925 4.64167 4.025 4.40833 4.225 4.225C4.40833 4.04167 4.64167 3.95 4.925 3.95C5.20833 3.95 5.44167 4.04167 5.625 4.225L7.05 5.65C7.23333 5.83333 7.325 6.06667 7.325 6.35C7.325 6.63333 7.23333 6.86667 7.05 7.05C6.85 7.23333 6.61667 7.325 6.35 7.325C6.08333 7.325 5.85 7.23333 5.65 7.05ZM18.35 19.775L16.95 18.35C16.7667 18.15 16.675 17.9125 16.675 17.6375C16.675 17.3625 16.7667 17.1333 16.95 16.95C17.1333 16.7667 17.3625 16.675 17.6375 16.675C17.9125 16.675 18.15 16.7667 18.35 16.95L19.775 18.35C19.975 18.5333 20.0708 18.7667 20.0625 19.05C20.0542 19.3333 19.9583 19.575 19.775 19.775C19.575 19.975 19.3333 20.075 19.05 20.075C18.7667 20.075 18.5333 19.975 18.35 19.775ZM2 13C1.71667 13 1.47917 12.9042 1.2875 12.7125C1.09583 12.5208 1 12.2833 1 12C1 11.7167 1.09583 11.4792 1.2875 11.2875C1.47917 11.0958 1.71667 11 2 11H4C4.28333 11 4.52083 11.0958 4.7125 11.2875C4.90417 11.4792 5 11.7167 5 12C5 12.2833 4.90417 12.5208 4.7125 12.7125C4.52083 12.9042 4.28333 13 4 13H2ZM4.225 19.775C4.04167 19.5917 3.95 19.3583 3.95 19.075C3.95 18.7917 4.04167 18.5583 4.225 18.375L5.65 16.95C5.83333 16.7667 6.0625 16.675 6.3375 16.675C6.6125 16.675 6.85 16.7667 7.05 16.95C7.25 17.15 7.35 17.3875 7.35 17.6625C7.35 17.9375 7.25 18.175 7.05 18.375L5.65 19.775C5.45 19.975 5.20833 20.075 4.925 20.075C4.64167 20.075 4.40833 19.975 4.225 19.775ZM12 18C10.3333 18 8.91667 17.4167 7.75 16.25C6.58333 15.0833 6 13.6667 6 12C6 10.3333 6.58333 8.91667 7.75 7.75C8.91667 6.58333 10.3333 6 12 6C13.6667 6 15.0833 6.58333 16.25 7.75C17.4167 8.91667 18 10.3333 18 12C18 13.6667 17.4167 15.0833 16.25 16.25C15.0833 17.4167 13.6667 18 12 18ZM12 16C13.1 16 14.0417 15.6083 14.825 14.825C15.6083 14.0417 16 13.1 16 12C16 10.9 15.6083 9.95833 14.825 9.175C14.0417 8.39167 13.1 8 12 8C10.9 8 9.95833 8.39167 9.175 9.175C8.39167 9.95833 8 10.9 8 12C8 13.1 8.39167 14.0417 9.175 14.825C9.95833 15.6083 10.9 16 12 16Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"close\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12383_539\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12383_539)\\\">\\n <path d=\\\"M12 13.4L7.10005 18.3C6.91672 18.4833 6.68338 18.575 6.40005 18.575C6.11672 18.575 5.88338 18.4833 5.70005 18.3C5.51672 18.1167 5.42505 17.8833 5.42505 17.6C5.42505 17.3167 5.51672 17.0833 5.70005 16.9L10.6 12L5.70005 7.09999C5.51672 6.91665 5.42505 6.68332 5.42505 6.39999C5.42505 6.11665 5.51672 5.88332 5.70005 5.69999C5.88338 5.51665 6.11672 5.42499 6.40005 5.42499C6.68338 5.42499 6.91672 5.51665 7.10005 5.69999L12 10.6L16.9 5.69999C17.0834 5.51665 17.3167 5.42499 17.6 5.42499C17.8834 5.42499 18.1167 5.51665 18.3 5.69999C18.4834 5.88332 18.575 6.11665 18.575 6.39999C18.575 6.68332 18.4834 6.91665 18.3 7.09999L13.4 12L18.3 16.9C18.4834 17.0833 18.575 17.3167 18.575 17.6C18.575 17.8833 18.4834 18.1167 18.3 18.3C18.1167 18.4833 17.8834 18.575 17.6 18.575C17.3167 18.575 17.0834 18.4833 16.9 18.3L12 13.4Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"coronavirus\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_778\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_778)\\\">\\n <path d=\\\"M11.25 22C11.05 22 10.875 21.925 10.725 21.775C10.575 21.625 10.5 21.45 10.5 21.25C10.5 21.05 10.575 20.875 10.725 20.725C10.875 20.575 11.05 20.5 11.25 20.5V18.95C10.55 18.8667 9.89167 18.7 9.275 18.45C8.65833 18.2 8.1 17.8667 7.6 17.45L6.525 18.55C6.675 18.7 6.75 18.875 6.75 19.075C6.75 19.275 6.675 19.45 6.525 19.6C6.375 19.75 6.2 19.825 6 19.825C5.8 19.825 5.625 19.75 5.475 19.6L4.4 18.55C4.25 18.4 4.175 18.2208 4.175 18.0125C4.175 17.8042 4.25 17.625 4.4 17.475C4.55 17.325 4.725 17.2542 4.925 17.2625C5.125 17.2708 5.3 17.3417 5.45 17.475L6.55 16.375C6.13333 15.8583 5.8 15.3 5.55 14.7C5.3 14.1 5.13333 13.45 5.05 12.75H3.5C3.5 12.95 3.425 13.125 3.275 13.275C3.125 13.425 2.95 13.5 2.75 13.5C2.55 13.5 2.375 13.425 2.225 13.275C2.075 13.125 2 12.95 2 12.75V11.25C2 11.05 2.075 10.875 2.225 10.725C2.375 10.575 2.55 10.5 2.75 10.5C2.95 10.5 3.125 10.575 3.275 10.725C3.425 10.875 3.5 11.05 3.5 11.25H5.05C5.13333 10.55 5.30417 9.9 5.5625 9.3C5.82083 8.7 6.15 8.14167 6.55 7.625L5.45 6.525C5.3 6.65833 5.125 6.72917 4.925 6.7375C4.725 6.74583 4.55 6.675 4.4 6.525C4.25 6.375 4.175 6.19583 4.175 5.9875C4.175 5.77917 4.25 5.6 4.4 5.45L5.45 4.4C5.6 4.25 5.77917 4.175 5.9875 4.175C6.19583 4.175 6.375 4.25 6.525 4.4C6.675 4.55 6.75 4.72917 6.75 4.9375C6.75 5.14583 6.675 5.325 6.525 5.475L7.6 6.55C8.11667 6.13333 8.675 5.8 9.275 5.55C9.875 5.3 10.525 5.13333 11.225 5.05V3.5C11.025 3.5 10.8542 3.425 10.7125 3.275C10.5708 3.125 10.5 2.95 10.5 2.75C10.5 2.55 10.575 2.375 10.725 2.225C10.875 2.075 11.05 2 11.25 2H12.75C12.95 2 13.125 2.075 13.275 2.225C13.425 2.375 13.5 2.55 13.5 2.75C13.5 2.95 13.425 3.125 13.275 3.275C13.125 3.425 12.95 3.5 12.75 3.5V5.05C13.45 5.13333 14.1 5.3 14.7 5.55C15.3 5.8 15.8583 6.13333 16.375 6.55L17.475 5.45C17.325 5.3 17.25 5.125 17.25 4.925C17.25 4.725 17.325 4.55 17.475 4.4C17.625 4.25 17.8042 4.175 18.0125 4.175C18.2208 4.175 18.4 4.25 18.55 4.4L19.6 5.475C19.75 5.625 19.825 5.8 19.825 6C19.825 6.2 19.75 6.375 19.6 6.525C19.45 6.675 19.2708 6.75 19.0625 6.75C18.8542 6.75 18.675 6.675 18.525 6.525L17.45 7.6C17.8667 8.11667 18.2 8.67917 18.45 9.2875C18.7 9.89583 18.8667 10.55 18.95 11.25H20.5C20.5 11.05 20.575 10.875 20.725 10.725C20.875 10.575 21.05 10.5 21.25 10.5C21.45 10.5 21.625 10.575 21.775 10.725C21.925 10.875 22 11.05 22 11.25V12.75C22 12.95 21.925 13.125 21.775 13.275C21.625 13.425 21.45 13.5 21.25 13.5C21.05 13.5 20.875 13.425 20.725 13.275C20.575 13.125 20.5 12.95 20.5 12.75H18.95C18.8667 13.45 18.7 14.1042 18.45 14.7125C18.2 15.3208 17.8667 15.8833 17.45 16.4L18.525 17.475C18.675 17.325 18.8542 17.25 19.0625 17.25C19.2708 17.25 19.45 17.325 19.6 17.475C19.75 17.625 19.825 17.8042 19.825 18.0125C19.825 18.2208 19.75 18.4 19.6 18.55L18.55 19.6C18.4 19.75 18.2208 19.825 18.0125 19.825C17.8042 19.825 17.625 19.75 17.475 19.6C17.325 19.45 17.2542 19.275 17.2625 19.075C17.2708 18.875 17.3417 18.7 17.475 18.55L16.375 17.45C15.8583 17.8667 15.3 18.2042 14.7 18.4625C14.1 18.7208 13.45 18.8917 12.75 18.975V20.5C12.95 20.5 13.125 20.575 13.275 20.725C13.425 20.875 13.5 21.05 13.5 21.25C13.5 21.45 13.425 21.625 13.275 21.775C13.125 21.925 12.95 22 12.75 22H11.25ZM12 17C13.3833 17 14.5625 16.5125 15.5375 15.5375C16.5125 14.5625 17 13.3833 17 12C17 10.6167 16.5125 9.4375 15.5375 8.4625C14.5625 7.4875 13.3833 7 12 7C10.6167 7 9.4375 7.4875 8.4625 8.4625C7.4875 9.4375 7 10.6167 7 12C7 13.3833 7.4875 14.5625 8.4625 15.5375C9.4375 16.5125 10.6167 17 12 17ZM10.25 16C10.5333 16 10.7708 15.9042 10.9625 15.7125C11.1542 15.5208 11.25 15.2833 11.25 15C11.25 14.7167 11.1542 14.4792 10.9625 14.2875C10.7708 14.0958 10.5333 14 10.25 14C9.96667 14 9.72917 14.0958 9.5375 14.2875C9.34583 14.4792 9.25 14.7167 9.25 15C9.25 15.2833 9.34583 15.5208 9.5375 15.7125C9.72917 15.9042 9.96667 16 10.25 16ZM13.75 16C14.0333 16 14.2708 15.9042 14.4625 15.7125C14.6542 15.5208 14.75 15.2833 14.75 15C14.75 14.7167 14.6542 14.4792 14.4625 14.2875C14.2708 14.0958 14.0333 14 13.75 14C13.4667 14 13.2292 14.0958 13.0375 14.2875C12.8458 14.4792 12.75 14.7167 12.75 15C12.75 15.2833 12.8458 15.5208 13.0375 15.7125C13.2292 15.9042 13.4667 16 13.75 16ZM8.5 13C8.78333 13 9.02083 12.9042 9.2125 12.7125C9.40417 12.5208 9.5 12.2833 9.5 12C9.5 11.7167 9.40417 11.4792 9.2125 11.2875C9.02083 11.0958 8.78333 11 8.5 11C8.21667 11 7.97917 11.0958 7.7875 11.2875C7.59583 11.4792 7.5 11.7167 7.5 12C7.5 12.2833 7.59583 12.5208 7.7875 12.7125C7.97917 12.9042 8.21667 13 8.5 13ZM12 13C12.2833 13 12.5208 12.9042 12.7125 12.7125C12.9042 12.5208 13 12.2833 13 12C13 11.7167 12.9042 11.4792 12.7125 11.2875C12.5208 11.0958 12.2833 11 12 11C11.7167 11 11.4792 11.0958 11.2875 11.2875C11.0958 11.4792 11 11.7167 11 12C11 12.2833 11.0958 12.5208 11.2875 12.7125C11.4792 12.9042 11.7167 13 12 13ZM15.5 13C15.7833 13 16.0208 12.9042 16.2125 12.7125C16.4042 12.5208 16.5 12.2833 16.5 12C16.5 11.7167 16.4042 11.4792 16.2125 11.2875C16.0208 11.0958 15.7833 11 15.5 11C15.2167 11 14.9792 11.0958 14.7875 11.2875C14.5958 11.4792 14.5 11.7167 14.5 12C14.5 12.2833 14.5958 12.5208 14.7875 12.7125C14.9792 12.9042 15.2167 13 15.5 13ZM10.25 10C10.5333 10 10.7708 9.90417 10.9625 9.7125C11.1542 9.52083 11.25 9.28333 11.25 9C11.25 8.71667 11.1542 8.47917 10.9625 8.2875C10.7708 8.09583 10.5333 8 10.25 8C9.96667 8 9.72917 8.09583 9.5375 8.2875C9.34583 8.47917 9.25 8.71667 9.25 9C9.25 9.28333 9.34583 9.52083 9.5375 9.7125C9.72917 9.90417 9.96667 10 10.25 10ZM13.75 10C14.0333 10 14.2708 9.90417 14.4625 9.7125C14.6542 9.52083 14.75 9.28333 14.75 9C14.75 8.71667 14.6542 8.47917 14.4625 8.2875C14.2708 8.09583 14.0333 8 13.75 8C13.4667 8 13.2292 8.09583 13.0375 8.2875C12.8458 8.47917 12.75 8.71667 12.75 9C12.75 9.28333 12.8458 9.52083 13.0375 9.7125C13.2292 9.90417 13.4667 10 13.75 10Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"emergency_home\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_416\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_416)\\\">\\n <path d=\\\"M12 22.0251C11.7333 22.0251 11.4791 21.9751 11.2375 21.8751C10.9958 21.7751 10.775 21.6334 10.575 21.4501L2.54998 13.4251C2.36664 13.2251 2.22498 13.0043 2.12498 12.7626C2.02498 12.5209 1.97498 12.2668 1.97498 12.0001C1.97498 11.7334 2.02498 11.4751 2.12498 11.2251C2.22498 10.9751 2.36664 10.7584 2.54998 10.5751L10.575 2.5501C10.775 2.3501 10.9958 2.20426 11.2375 2.1126C11.4791 2.02093 11.7333 1.9751 12 1.9751C12.2666 1.9751 12.525 2.02093 12.775 2.1126C13.025 2.20426 13.2416 2.3501 13.425 2.5501L21.45 10.5751C21.65 10.7584 21.7958 10.9751 21.8875 11.2251C21.9791 11.4751 22.025 11.7334 22.025 12.0001C22.025 12.2668 21.9791 12.5209 21.8875 12.7626C21.7958 13.0043 21.65 13.2251 21.45 13.4251L13.425 21.4501C13.2416 21.6334 13.025 21.7751 12.775 21.8751C12.525 21.9751 12.2666 22.0251 12 22.0251ZM12 20.0251L20.025 12.0001L12 3.9751L3.97498 12.0001L12 20.0251ZM12 13.0001C12.2833 13.0001 12.5208 12.9043 12.7125 12.7126C12.9041 12.5209 13 12.2834 13 12.0001V8.0001C13 7.71676 12.9041 7.47926 12.7125 7.2876C12.5208 7.09593 12.2833 7.0001 12 7.0001C11.7166 7.0001 11.4791 7.09593 11.2875 7.2876C11.0958 7.47926 11 7.71676 11 8.0001V12.0001C11 12.2834 11.0958 12.5209 11.2875 12.7126C11.4791 12.9043 11.7166 13.0001 12 13.0001ZM12 16.0001C12.2833 16.0001 12.5208 15.9043 12.7125 15.7126C12.9041 15.5209 13 15.2834 13 15.0001C13 14.7168 12.9041 14.4793 12.7125 14.2876C12.5208 14.0959 12.2833 14.0001 12 14.0001C11.7166 14.0001 11.4791 14.0959 11.2875 14.2876C11.0958 14.4793 11 14.7168 11 15.0001C11 15.2834 11.0958 15.5209 11.2875 15.7126C11.4791 15.9043 11.7166 16.0001 12 16.0001Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"error\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_472\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_472)\\\">\\n <path d=\\\"M12 17C12.2833 17 12.5208 16.9042 12.7125 16.7125C12.9042 16.5208 13 16.2833 13 16C13 15.7167 12.9042 15.4792 12.7125 15.2875C12.5208 15.0958 12.2833 15 12 15C11.7167 15 11.4792 15.0958 11.2875 15.2875C11.0958 15.4792 11 15.7167 11 16C11 16.2833 11.0958 16.5208 11.2875 16.7125C11.4792 16.9042 11.7167 17 12 17ZM12 13C12.2833 13 12.5208 12.9042 12.7125 12.7125C12.9042 12.5208 13 12.2833 13 12V8C13 7.71667 12.9042 7.47917 12.7125 7.2875C12.5208 7.09583 12.2833 7 12 7C11.7167 7 11.4792 7.09583 11.2875 7.2875C11.0958 7.47917 11 7.71667 11 8V12C11 12.2833 11.0958 12.5208 11.2875 12.7125C11.4792 12.9042 11.7167 13 12 13ZM12 22C10.6167 22 9.31667 21.7375 8.1 21.2125C6.88333 20.6875 5.825 19.975 4.925 19.075C4.025 18.175 3.3125 17.1167 2.7875 15.9C2.2625 14.6833 2 13.3833 2 12C2 10.6167 2.2625 9.31667 2.7875 8.1C3.3125 6.88333 4.025 5.825 4.925 4.925C5.825 4.025 6.88333 3.3125 8.1 2.7875C9.31667 2.2625 10.6167 2 12 2C13.3833 2 14.6833 2.2625 15.9 2.7875C17.1167 3.3125 18.175 4.025 19.075 4.925C19.975 5.825 20.6875 6.88333 21.2125 8.1C21.7375 9.31667 22 10.6167 22 12C22 13.3833 21.7375 14.6833 21.2125 15.9C20.6875 17.1167 19.975 18.175 19.075 19.075C18.175 19.975 17.1167 20.6875 15.9 21.2125C14.6833 21.7375 13.3833 22 12 22ZM12 20C14.2333 20 16.125 19.225 17.675 17.675C19.225 16.125 20 14.2333 20 12C20 9.76667 19.225 7.875 17.675 6.325C16.125 4.775 14.2333 4 12 4C9.76667 4 7.875 4.775 6.325 6.325C4.775 7.875 4 9.76667 4 12C4 14.2333 4.775 16.125 6.325 17.675C7.875 19.225 9.76667 20 12 20Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"info\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_603\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_603)\\\">\\n <path d=\\\"M12 17C12.2833 17 12.5208 16.9042 12.7125 16.7125C12.9042 16.5208 13 16.2833 13 16V12C13 11.7167 12.9042 11.4792 12.7125 11.2875C12.5208 11.0958 12.2833 11 12 11C11.7167 11 11.4792 11.0958 11.2875 11.2875C11.0958 11.4792 11 11.7167 11 12V16C11 16.2833 11.0958 16.5208 11.2875 16.7125C11.4792 16.9042 11.7167 17 12 17ZM12 9C12.2833 9 12.5208 8.90417 12.7125 8.7125C12.9042 8.52083 13 8.28333 13 8C13 7.71667 12.9042 7.47917 12.7125 7.2875C12.5208 7.09583 12.2833 7 12 7C11.7167 7 11.4792 7.09583 11.2875 7.2875C11.0958 7.47917 11 7.71667 11 8C11 8.28333 11.0958 8.52083 11.2875 8.7125C11.4792 8.90417 11.7167 9 12 9ZM12 22C10.6167 22 9.31667 21.7375 8.1 21.2125C6.88333 20.6875 5.825 19.975 4.925 19.075C4.025 18.175 3.3125 17.1167 2.7875 15.9C2.2625 14.6833 2 13.3833 2 12C2 10.6167 2.2625 9.31667 2.7875 8.1C3.3125 6.88333 4.025 5.825 4.925 4.925C5.825 4.025 6.88333 3.3125 8.1 2.7875C9.31667 2.2625 10.6167 2 12 2C13.3833 2 14.6833 2.2625 15.9 2.7875C17.1167 3.3125 18.175 4.025 19.075 4.925C19.975 5.825 20.6875 6.88333 21.2125 8.1C21.7375 9.31667 22 10.6167 22 12C22 13.3833 21.7375 14.6833 21.2125 15.9C20.6875 17.1167 19.975 18.175 19.075 19.075C18.175 19.975 17.1167 20.6875 15.9 21.2125C14.6833 21.7375 13.3833 22 12 22ZM12 20C14.2333 20 16.125 19.225 17.675 17.675C19.225 16.125 20 14.2333 20 12C20 9.76667 19.225 7.875 17.675 6.325C16.125 4.775 14.2333 4 12 4C9.76667 4 7.875 4.775 6.325 6.325C4.775 7.875 4 9.76667 4 12C4 14.2333 4.775 16.125 6.325 17.675C7.875 19.225 9.76667 20 12 20Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"language\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_211\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_211)\\\">\\n <path d=\\\"M12 22C10.6333 22 9.34167 21.7375 8.125 21.2125C6.90833 20.6875 5.84583 19.9708 4.9375 19.0625C4.02917 18.1542 3.3125 17.0917 2.7875 15.875C2.2625 14.6583 2 13.3667 2 12C2 10.6167 2.2625 9.32083 2.7875 8.1125C3.3125 6.90417 4.02917 5.84583 4.9375 4.9375C5.84583 4.02917 6.90833 3.3125 8.125 2.7875C9.34167 2.2625 10.6333 2 12 2C13.3833 2 14.6792 2.2625 15.8875 2.7875C17.0958 3.3125 18.1542 4.02917 19.0625 4.9375C19.9708 5.84583 20.6875 6.90417 21.2125 8.1125C21.7375 9.32083 22 10.6167 22 12C22 13.3667 21.7375 14.6583 21.2125 15.875C20.6875 17.0917 19.9708 18.1542 19.0625 19.0625C18.1542 19.9708 17.0958 20.6875 15.8875 21.2125C14.6792 21.7375 13.3833 22 12 22ZM12 19.95C12.4333 19.35 12.8083 18.725 13.125 18.075C13.4417 17.425 13.7 16.7333 13.9 16H10.1C10.3 16.7333 10.5583 17.425 10.875 18.075C11.1917 18.725 11.5667 19.35 12 19.95ZM9.4 19.55C9.1 19 8.8375 18.4292 8.6125 17.8375C8.3875 17.2458 8.2 16.6333 8.05 16H5.1C5.58333 16.8333 6.1875 17.5583 6.9125 18.175C7.6375 18.7917 8.46667 19.25 9.4 19.55ZM14.6 19.55C15.5333 19.25 16.3625 18.7917 17.0875 18.175C17.8125 17.5583 18.4167 16.8333 18.9 16H15.95C15.8 16.6333 15.6125 17.2458 15.3875 17.8375C15.1625 18.4292 14.9 19 14.6 19.55ZM4.25 14H7.65C7.6 13.6667 7.5625 13.3375 7.5375 13.0125C7.5125 12.6875 7.5 12.35 7.5 12C7.5 11.65 7.5125 11.3125 7.5375 10.9875C7.5625 10.6625 7.6 10.3333 7.65 10H4.25C4.16667 10.3333 4.10417 10.6625 4.0625 10.9875C4.02083 11.3125 4 11.65 4 12C4 12.35 4.02083 12.6875 4.0625 13.0125C4.10417 13.3375 4.16667 13.6667 4.25 14ZM9.65 14H14.35C14.4 13.6667 14.4375 13.3375 14.4625 13.0125C14.4875 12.6875 14.5 12.35 14.5 12C14.5 11.65 14.4875 11.3125 14.4625 10.9875C14.4375 10.6625 14.4 10.3333 14.35 10H9.65C9.6 10.3333 9.5625 10.6625 9.5375 10.9875C9.5125 11.3125 9.5 11.65 9.5 12C9.5 12.35 9.5125 12.6875 9.5375 13.0125C9.5625 13.3375 9.6 13.6667 9.65 14ZM16.35 14H19.75C19.8333 13.6667 19.8958 13.3375 19.9375 13.0125C19.9792 12.6875 20 12.35 20 12C20 11.65 19.9792 11.3125 19.9375 10.9875C19.8958 10.6625 19.8333 10.3333 19.75 10H16.35C16.4 10.3333 16.4375 10.6625 16.4625 10.9875C16.4875 11.3125 16.5 11.65 16.5 12C16.5 12.35 16.4875 12.6875 16.4625 13.0125C16.4375 13.3375 16.4 13.6667 16.35 14ZM15.95 8H18.9C18.4167 7.16667 17.8125 6.44167 17.0875 5.825C16.3625 5.20833 15.5333 4.75 14.6 4.45C14.9 5 15.1625 5.57083 15.3875 6.1625C15.6125 6.75417 15.8 7.36667 15.95 8ZM10.1 8H13.9C13.7 7.26667 13.4417 6.575 13.125 5.925C12.8083 5.275 12.4333 4.65 12 4.05C11.5667 4.65 11.1917 5.275 10.875 5.925C10.5583 6.575 10.3 7.26667 10.1 8ZM5.1 8H8.05C8.2 7.36667 8.3875 6.75417 8.6125 6.1625C8.8375 5.57083 9.1 5 9.4 4.45C8.46667 4.75 7.6375 5.20833 6.9125 5.825C6.1875 6.44167 5.58333 7.16667 5.1 8Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"location_on\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_28075_337\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_28075_337)\\\">\\n <path d=\\\"M12 19.35C14.0333 17.4833 15.5417 15.7875 16.525 14.2625C17.5083 12.7375 18 11.3833 18 10.2C18 8.38333 17.4208 6.89583 16.2625 5.7375C15.1042 4.57917 13.6833 4 12 4C10.3167 4 8.89583 4.57917 7.7375 5.7375C6.57917 6.89583 6 8.38333 6 10.2C6 11.3833 6.49167 12.7375 7.475 14.2625C8.45833 15.7875 9.96667 17.4833 12 19.35ZM11.3 21.2C11.0667 21.1167 10.8583 20.9917 10.675 20.825C9.59167 19.825 8.63333 18.85 7.8 17.9C6.96667 16.95 6.27083 16.0292 5.7125 15.1375C5.15417 14.2458 4.72917 13.3875 4.4375 12.5625C4.14583 11.7375 4 10.95 4 10.2C4 7.7 4.80417 5.70833 6.4125 4.225C8.02083 2.74167 9.88333 2 12 2C14.1167 2 15.9792 2.74167 17.5875 4.225C19.1958 5.70833 20 7.7 20 10.2C20 10.95 19.8542 11.7375 19.5625 12.5625C19.2708 13.3875 18.8458 14.2458 18.2875 15.1375C17.7292 16.0292 17.0333 16.95 16.2 17.9C15.3667 18.85 14.4083 19.825 13.325 20.825C13.1417 20.9917 12.9333 21.1167 12.7 21.2C12.4667 21.2833 12.2333 21.325 12 21.325C11.7667 21.325 11.5333 21.2833 11.3 21.2ZM13.4125 11.4125C13.8042 11.0208 14 10.55 14 10C14 9.45 13.8042 8.97917 13.4125 8.5875C13.0208 8.19583 12.55 8 12 8C11.45 8 10.9792 8.19583 10.5875 8.5875C10.1958 8.97917 10 9.45 10 10C10 10.55 10.1958 11.0208 10.5875 11.4125C10.9792 11.8042 11.45 12 12 12C12.55 12 13.0208 11.8042 13.4125 11.4125Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"lock_filled\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_621\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_621)\\\">\\n <path d=\\\"M6.30002 22.7751C5.43369 22.7751 4.69211 22.4667 4.07527 21.8498C3.45844 21.2328 3.15002 20.4913 3.15002 19.6251V10.2251C3.15002 9.35893 3.45844 8.61735 4.07527 8.00035C4.69211 7.38351 5.43369 7.0751 6.30002 7.0751H6.62502V5.8001C6.62502 4.28343 7.14586 2.99593 8.18752 1.9376C9.22919 0.879264 10.5 0.350098 12 0.350098C13.5 0.350098 14.7709 0.879264 15.8125 1.9376C16.8542 2.99593 17.375 4.28343 17.375 5.8001V7.0751H17.7C18.5662 7.0751 19.3078 7.38351 19.9248 8.00035C20.5416 8.61735 20.85 9.35893 20.85 10.2251V19.6251C20.85 20.4913 20.5416 21.2328 19.9248 21.8498C19.3078 22.4667 18.5662 22.7751 17.7 22.7751H6.30002ZM12 16.9251C12.55 16.9251 13.0209 16.7293 13.4125 16.3376C13.8042 15.9459 14 15.4751 14 14.9251C14 14.3751 13.8042 13.9043 13.4125 13.5126C13.0209 13.1209 12.55 12.9251 12 12.9251C11.45 12.9251 10.9792 13.1209 10.5875 13.5126C10.1959 13.9043 10 14.3751 10 14.9251C10 15.4751 10.1959 15.9459 10.5875 16.3376C10.9792 16.7293 11.45 16.9251 12 16.9251ZM9.77502 7.0751H14.225V5.8001C14.225 5.16126 14.0125 4.61818 13.5875 4.17085C13.1625 3.72368 12.6334 3.5001 12 3.5001C11.3667 3.5001 10.8375 3.72368 10.4125 4.17085C9.98752 4.61818 9.77502 5.16126 9.77502 5.8001V7.0751Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"menu\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_150\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_150)\\\">\\n <path d=\\\"M4 18C3.71667 18 3.47917 17.9042 3.2875 17.7125C3.09583 17.5208 3 17.2833 3 17C3 16.7167 3.09583 16.4792 3.2875 16.2875C3.47917 16.0958 3.71667 16 4 16H20C20.2833 16 20.5208 16.0958 20.7125 16.2875C20.9042 16.4792 21 16.7167 21 17C21 17.2833 20.9042 17.5208 20.7125 17.7125C20.5208 17.9042 20.2833 18 20 18H4ZM4 13C3.71667 13 3.47917 12.9042 3.2875 12.7125C3.09583 12.5208 3 12.2833 3 12C3 11.7167 3.09583 11.4792 3.2875 11.2875C3.47917 11.0958 3.71667 11 4 11H20C20.2833 11 20.5208 11.0958 20.7125 11.2875C20.9042 11.4792 21 11.7167 21 12C21 12.2833 20.9042 12.5208 20.7125 12.7125C20.5208 12.9042 20.2833 13 20 13H4ZM4 8C3.71667 8 3.47917 7.90417 3.2875 7.7125C3.09583 7.52083 3 7.28333 3 7C3 6.71667 3.09583 6.47917 3.2875 6.2875C3.47917 6.09583 3.71667 6 4 6H20C20.2833 6 20.5208 6.09583 20.7125 6.2875C20.9042 6.47917 21 6.71667 21 7C21 7.28333 20.9042 7.52083 20.7125 7.7125C20.5208 7.90417 20.2833 8 20 8H4Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"notifications\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_409\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_409)\\\">\\n <path d=\\\"M5 19C4.71667 19 4.47917 18.9042 4.2875 18.7125C4.09583 18.5208 4 18.2833 4 18C4 17.7167 4.09583 17.4792 4.2875 17.2875C4.47917 17.0958 4.71667 17 5 17H6V10C6 8.61667 6.41667 7.3875 7.25 6.3125C8.08333 5.2375 9.16667 4.53333 10.5 4.2V3.5C10.5 3.08333 10.6458 2.72917 10.9375 2.4375C11.2292 2.14583 11.5833 2 12 2C12.4167 2 12.7708 2.14583 13.0625 2.4375C13.3542 2.72917 13.5 3.08333 13.5 3.5V4.2C14.8333 4.53333 15.9167 5.2375 16.75 6.3125C17.5833 7.3875 18 8.61667 18 10V17H19C19.2833 17 19.5208 17.0958 19.7125 17.2875C19.9042 17.4792 20 17.7167 20 18C20 18.2833 19.9042 18.5208 19.7125 18.7125C19.5208 18.9042 19.2833 19 19 19H5ZM12 22C11.45 22 10.9792 21.8042 10.5875 21.4125C10.1958 21.0208 10 20.55 10 20H14C14 20.55 13.8042 21.0208 13.4125 21.4125C13.0208 21.8042 12.55 22 12 22ZM8 17H16V10C16 8.9 15.6083 7.95833 14.825 7.175C14.0417 6.39167 13.1 6 12 6C10.9 6 9.95833 6.39167 9.175 7.175C8.39167 7.95833 8 8.9 8 10V17Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"open_in_new\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_351\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_351)\\\">\\n <path d=\\\"M5 21C4.45 21 3.97917 20.8042 3.5875 20.4125C3.19583 20.0208 3 19.55 3 19V5C3 4.45 3.19583 3.97917 3.5875 3.5875C3.97917 3.19583 4.45 3 5 3H11C11.2833 3 11.5208 3.09583 11.7125 3.2875C11.9042 3.47917 12 3.71667 12 4C12 4.28333 11.9042 4.52083 11.7125 4.7125C11.5208 4.90417 11.2833 5 11 5H5V19H19V13C19 12.7167 19.0958 12.4792 19.2875 12.2875C19.4792 12.0958 19.7167 12 20 12C20.2833 12 20.5208 12.0958 20.7125 12.2875C20.9042 12.4792 21 12.7167 21 13V19C21 19.55 20.8042 20.0208 20.4125 20.4125C20.0208 20.8042 19.55 21 19 21H5ZM19 6.4L10.4 15C10.2167 15.1833 9.98333 15.275 9.7 15.275C9.41667 15.275 9.18333 15.1833 9 15C8.81667 14.8167 8.725 14.5833 8.725 14.3C8.725 14.0167 8.81667 13.7833 9 13.6L17.6 5H15C14.7167 5 14.4792 4.90417 14.2875 4.7125C14.0958 4.52083 14 4.28333 14 4C14 3.71667 14.0958 3.47917 14.2875 3.2875C14.4792 3.09583 14.7167 3 15 3H20C20.2833 3 20.5208 3.09583 20.7125 3.2875C20.9042 3.47917 21 3.71667 21 4V9C21 9.28333 20.9042 9.52083 20.7125 9.7125C20.5208 9.90417 20.2833 10 20 10C19.7167 10 19.4792 9.90417 19.2875 9.7125C19.0958 9.52083 19 9.28333 19 9V6.4Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"rainy\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_566\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_566)\\\">\\n <path d=\\\"M13.95 21.9C13.7 22.0333 13.4458 22.0542 13.1875 21.9625C12.9292 21.8708 12.7333 21.7 12.6 21.45L11.1 18.45C10.9667 18.2 10.9458 17.9458 11.0375 17.6875C11.1292 17.4292 11.3 17.2333 11.55 17.1C11.8 16.9667 12.0542 16.9458 12.3125 17.0375C12.5708 17.1292 12.7667 17.3 12.9 17.55L14.4 20.55C14.5333 20.8 14.5542 21.0542 14.4625 21.3125C14.3708 21.5708 14.2 21.7667 13.95 21.9ZM19.95 21.9C19.7 22.0333 19.4458 22.0542 19.1875 21.9625C18.9292 21.8708 18.7333 21.7 18.6 21.45L17.1 18.45C16.9667 18.2 16.9458 17.9458 17.0375 17.6875C17.1292 17.4292 17.3 17.2333 17.55 17.1C17.8 16.9667 18.0542 16.9458 18.3125 17.0375C18.5708 17.1292 18.7667 17.3 18.9 17.55L20.4 20.55C20.5333 20.8 20.5542 21.0542 20.4625 21.3125C20.3708 21.5708 20.2 21.7667 19.95 21.9ZM7.95 21.9C7.7 22.0333 7.44583 22.0542 7.1875 21.9625C6.92917 21.8708 6.73333 21.7 6.6 21.45L5.1 18.45C4.96667 18.2 4.94583 17.9458 5.0375 17.6875C5.12917 17.4292 5.3 17.2333 5.55 17.1C5.8 16.9667 6.05417 16.9458 6.3125 17.0375C6.57083 17.1292 6.76667 17.3 6.9 17.55L8.4 20.55C8.53333 20.8 8.55417 21.0542 8.4625 21.3125C8.37083 21.5708 8.2 21.7667 7.95 21.9ZM7.5 16C5.98333 16 4.6875 15.4625 3.6125 14.3875C2.5375 13.3125 2 12.0167 2 10.5C2 9.11667 2.45833 7.90833 3.375 6.875C4.29167 5.84167 5.425 5.23333 6.775 5.05C7.30833 4.1 8.0375 3.35417 8.9625 2.8125C9.8875 2.27083 10.9 2 12 2C13.5 2 14.8042 2.47917 15.9125 3.4375C17.0208 4.39583 17.6917 5.59167 17.925 7.025C19.075 7.125 20.0417 7.6 20.825 8.45C21.6083 9.3 22 10.3167 22 11.5C22 12.75 21.5625 13.8125 20.6875 14.6875C19.8125 15.5625 18.75 16 17.5 16H7.5ZM7.5 14H17.5C18.2 14 18.7917 13.7583 19.275 13.275C19.7583 12.7917 20 12.2 20 11.5C20 10.8 19.7583 10.2083 19.275 9.725C18.7917 9.24167 18.2 9 17.5 9H16V8C16 6.9 15.6083 5.95833 14.825 5.175C14.0417 4.39167 13.1 4 12 4C11.2 4 10.4708 4.21667 9.8125 4.65C9.15417 5.08333 8.65833 5.66667 8.325 6.4L8.075 7H7.45C6.5 7.03333 5.6875 7.3875 5.0125 8.0625C4.3375 8.7375 4 9.55 4 10.5C4 11.4667 4.34167 12.2917 5.025 12.975C5.70833 13.6583 6.53333 14 7.5 14Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"schedule\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_28075_579\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_28075_579)\\\">\\n <path d=\\\"M13 11.6V8C13 7.71667 12.9042 7.47917 12.7125 7.2875C12.5208 7.09583 12.2833 7 12 7C11.7167 7 11.4792 7.09583 11.2875 7.2875C11.0958 7.47917 11 7.71667 11 8V11.975C11 12.1083 11.025 12.2375 11.075 12.3625C11.125 12.4875 11.2 12.6 11.3 12.7L14.6 16C14.7833 16.1833 15.0167 16.275 15.3 16.275C15.5833 16.275 15.8167 16.1833 16 16C16.1833 15.8167 16.275 15.5833 16.275 15.3C16.275 15.0167 16.1833 14.7833 16 14.6L13 11.6ZM12 22C10.6167 22 9.31667 21.7375 8.1 21.2125C6.88333 20.6875 5.825 19.975 4.925 19.075C4.025 18.175 3.3125 17.1167 2.7875 15.9C2.2625 14.6833 2 13.3833 2 12C2 10.6167 2.2625 9.31667 2.7875 8.1C3.3125 6.88333 4.025 5.825 4.925 4.925C5.825 4.025 6.88333 3.3125 8.1 2.7875C9.31667 2.2625 10.6167 2 12 2C13.3833 2 14.6833 2.2625 15.9 2.7875C17.1167 3.3125 18.175 4.025 19.075 4.925C19.975 5.825 20.6875 6.88333 21.2125 8.1C21.7375 9.31667 22 10.6167 22 12C22 13.3833 21.7375 14.6833 21.2125 15.9C20.6875 17.1167 19.975 18.175 19.075 19.075C18.175 19.975 17.1167 20.6875 15.9 21.2125C14.6833 21.7375 13.3833 22 12 22ZM12 20C14.2167 20 16.1042 19.2208 17.6625 17.6625C19.2208 16.1042 20 14.2167 20 12C20 9.78333 19.2208 7.89583 17.6625 6.3375C16.1042 4.77917 14.2167 4 12 4C9.78333 4 7.89583 4.77917 6.3375 6.3375C4.77917 7.89583 4 9.78333 4 12C4 14.2167 4.77917 16.1042 6.3375 17.6625C7.89583 19.2208 9.78333 20 12 20Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"search\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_692\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_692)\\\">\\n <path d=\\\"M9.5 16C7.68333 16 6.14583 15.3708 4.8875 14.1125C3.62917 12.8542 3 11.3167 3 9.5C3 7.68333 3.62917 6.14583 4.8875 4.8875C6.14583 3.62917 7.68333 3 9.5 3C11.3167 3 12.8542 3.62917 14.1125 4.8875C15.3708 6.14583 16 7.68333 16 9.5C16 10.2333 15.8833 10.925 15.65 11.575C15.4167 12.225 15.1 12.8 14.7 13.3L20.3 18.9C20.4833 19.0833 20.575 19.3167 20.575 19.6C20.575 19.8833 20.4833 20.1167 20.3 20.3C20.1167 20.4833 19.8833 20.575 19.6 20.575C19.3167 20.575 19.0833 20.4833 18.9 20.3L13.3 14.7C12.8 15.1 12.225 15.4167 11.575 15.65C10.925 15.8833 10.2333 16 9.5 16ZM9.5 14C10.75 14 11.8125 13.5625 12.6875 12.6875C13.5625 11.8125 14 10.75 14 9.5C14 8.25 13.5625 7.1875 12.6875 6.3125C11.8125 5.4375 10.75 5 9.5 5C8.25 5 7.1875 5.4375 6.3125 6.3125C5.4375 7.1875 5 8.25 5 9.5C5 10.75 5.4375 11.8125 6.3125 12.6875C7.1875 13.5625 8.25 14 9.5 14Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"visibility\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_393\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_393)\\\">\\n <path d=\\\"M12 16C13.25 16 14.3125 15.5625 15.1875 14.6875C16.0625 13.8125 16.5 12.75 16.5 11.5C16.5 10.25 16.0625 9.1875 15.1875 8.3125C14.3125 7.4375 13.25 7 12 7C10.75 7 9.68752 7.4375 8.81252 8.3125C7.93752 9.1875 7.50002 10.25 7.50002 11.5C7.50002 12.75 7.93752 13.8125 8.81252 14.6875C9.68752 15.5625 10.75 16 12 16ZM12 14.2C11.25 14.2 10.6125 13.9375 10.0875 13.4125C9.56252 12.8875 9.30002 12.25 9.30002 11.5C9.30002 10.75 9.56252 10.1125 10.0875 9.5875C10.6125 9.0625 11.25 8.8 12 8.8C12.75 8.8 13.3875 9.0625 13.9125 9.5875C14.4375 10.1125 14.7 10.75 14.7 11.5C14.7 12.25 14.4375 12.8875 13.9125 13.4125C13.3875 13.9375 12.75 14.2 12 14.2ZM12 19C9.76669 19 7.72919 18.4 5.88752 17.2C4.04586 16 2.59169 14.4167 1.52502 12.45C1.44169 12.3 1.37919 12.1458 1.33752 11.9875C1.29586 11.8292 1.27502 11.6667 1.27502 11.5C1.27502 11.3333 1.29586 11.1708 1.33752 11.0125C1.37919 10.8542 1.44169 10.7 1.52502 10.55C2.59169 8.58333 4.04586 7 5.88752 5.8C7.72919 4.6 9.76669 4 12 4C14.2334 4 16.2709 4.6 18.1125 5.8C19.9542 7 21.4084 8.58333 22.475 10.55C22.5584 10.7 22.6209 10.8542 22.6625 11.0125C22.7042 11.1708 22.725 11.3333 22.725 11.5C22.725 11.6667 22.7042 11.8292 22.6625 11.9875C22.6209 12.1458 22.5584 12.3 22.475 12.45C21.4084 14.4167 19.9542 16 18.1125 17.2C16.2709 18.4 14.2334 19 12 19ZM12 17C13.8834 17 15.6125 16.5042 17.1875 15.5125C18.7625 14.5208 19.9667 13.1833 20.8 11.5C19.9667 9.81667 18.7625 8.47917 17.1875 7.4875C15.6125 6.49583 13.8834 6 12 6C10.1167 6 8.38752 6.49583 6.81252 7.4875C5.23752 8.47917 4.03336 9.81667 3.20002 11.5C4.03336 13.1833 5.23752 14.5208 6.81252 15.5125C8.38752 16.5042 10.1167 17 12 17Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"visibility_off\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_398\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_398)\\\">\\n <path d=\\\"M15.175 8.32498C15.6583 8.80831 16.0125 9.35831 16.2375 9.97498C16.4625 10.5916 16.5417 11.225 16.475 11.875C16.475 12.125 16.3833 12.3375 16.2 12.5125C16.0167 12.6875 15.8 12.775 15.55 12.775C15.3 12.775 15.0875 12.6875 14.9125 12.5125C14.7375 12.3375 14.65 12.125 14.65 11.875C14.7333 11.4416 14.7083 11.025 14.575 10.625C14.4417 10.225 14.2333 9.88331 13.95 9.59998C13.6667 9.31664 13.325 9.09998 12.925 8.94998C12.525 8.79998 12.1 8.76664 11.65 8.84998C11.4 8.84998 11.1875 8.75831 11.0125 8.57498C10.8375 8.39164 10.75 8.17498 10.75 7.92498C10.75 7.67498 10.8375 7.46248 11.0125 7.28748C11.1875 7.11248 11.4 7.02498 11.65 7.02498C12.2833 6.95831 12.9083 7.03748 13.525 7.26248C14.1417 7.48748 14.6917 7.84164 15.175 8.32498ZM12 5.99998C11.6833 5.99998 11.375 6.01248 11.075 6.03748C10.775 6.06248 10.475 6.10831 10.175 6.17498C9.89167 6.22498 9.6375 6.18331 9.4125 6.04998C9.1875 5.91664 9.03333 5.71664 8.95 5.44998C8.86667 5.18331 8.89583 4.92498 9.0375 4.67498C9.17917 4.42498 9.38333 4.27498 9.65 4.22498C10.0333 4.14164 10.4208 4.08331 10.8125 4.04998C11.2042 4.01664 11.6 3.99998 12 3.99998C14.2833 3.99998 16.3708 4.59998 18.2625 5.79998C20.1542 6.99998 21.6 8.61664 22.6 10.65C22.6667 10.7833 22.7167 10.9208 22.75 11.0625C22.7833 11.2041 22.8 11.35 22.8 11.5C22.8 11.65 22.7875 11.7958 22.7625 11.9375C22.7375 12.0791 22.6917 12.2166 22.625 12.35C22.325 13.0166 21.9542 13.6416 21.5125 14.225C21.0708 14.8083 20.5833 15.3416 20.05 15.825C19.85 16.0083 19.6167 16.0833 19.35 16.05C19.0833 16.0166 18.8667 15.8833 18.7 15.65C18.5333 15.4166 18.4625 15.1625 18.4875 14.8875C18.5125 14.6125 18.625 14.3833 18.825 14.2C19.225 13.8166 19.5917 13.4 19.925 12.95C20.2583 12.5 20.55 12.0166 20.8 11.5C19.9667 9.81664 18.7625 8.47914 17.1875 7.48748C15.6125 6.49581 13.8833 5.99998 12 5.99998ZM12 19C9.76667 19 7.725 18.3958 5.875 17.1875C4.025 15.9791 2.56667 14.3916 1.5 12.425C1.41667 12.2916 1.35417 12.1458 1.3125 11.9875C1.27083 11.8291 1.25 11.6666 1.25 11.5C1.25 11.3333 1.26667 11.175 1.3 11.025C1.33333 10.875 1.39167 10.725 1.475 10.575C1.80833 9.90831 2.19583 9.27081 2.6375 8.66248C3.07917 8.05414 3.58333 7.49998 4.15 6.99998L2.075 4.89998C1.89167 4.69998 1.80417 4.46248 1.8125 4.18748C1.82083 3.91248 1.91667 3.68331 2.1 3.49998C2.28333 3.31664 2.51667 3.22498 2.8 3.22498C3.08333 3.22498 3.31667 3.31664 3.5 3.49998L20.5 20.5C20.6833 20.6833 20.7792 20.9125 20.7875 21.1875C20.7958 21.4625 20.7 21.7 20.5 21.9C20.3167 22.0833 20.0833 22.175 19.8 22.175C19.5167 22.175 19.2833 22.0833 19.1 21.9L15.6 18.45C15.0167 18.6333 14.425 18.7708 13.825 18.8625C13.225 18.9541 12.6167 19 12 19ZM5.55 8.39998C5.06667 8.83331 4.625 9.30831 4.225 9.82498C3.825 10.3416 3.48333 10.9 3.2 11.5C4.03333 13.1833 5.2375 14.5208 6.8125 15.5125C8.3875 16.5041 10.1167 17 12 17C12.3333 17 12.6583 16.9791 12.975 16.9375C13.2917 16.8958 13.6167 16.85 13.95 16.8L13.05 15.85C12.8667 15.9 12.6917 15.9375 12.525 15.9625C12.3583 15.9875 12.1833 16 12 16C10.75 16 9.6875 15.5625 8.8125 14.6875C7.9375 13.8125 7.5 12.75 7.5 11.5C7.5 11.3166 7.5125 11.1416 7.5375 10.975C7.5625 10.8083 7.6 10.6333 7.65 10.45L5.55 8.39998Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\",\"warning\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\">\\n <mask id=\\\"mask0_12372_475\\\" style=\\\"mask-type:alpha\\\" maskUnits=\\\"userSpaceOnUse\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"24\\\" height=\\\"24\\\">\\n <rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"#D9D9D9\\\"/>\\n </mask>\\n <g mask=\\\"url(#mask0_12372_475)\\\">\\n <path d=\\\"M2.72503 21C2.5417 21 2.37503 20.9542 2.22503 20.8625C2.07503 20.7708 1.95837 20.65 1.87503 20.5C1.7917 20.35 1.74587 20.1875 1.73753 20.0125C1.7292 19.8375 1.77503 19.6667 1.87503 19.5L11.125 3.5C11.225 3.33333 11.3542 3.20833 11.5125 3.125C11.6709 3.04167 11.8334 3 12 3C12.1667 3 12.3292 3.04167 12.4875 3.125C12.6459 3.20833 12.775 3.33333 12.875 3.5L22.125 19.5C22.225 19.6667 22.2709 19.8375 22.2625 20.0125C22.2542 20.1875 22.2084 20.35 22.125 20.5C22.0417 20.65 21.925 20.7708 21.775 20.8625C21.625 20.9542 21.4584 21 21.275 21H2.72503ZM4.45003 19H19.55L12 6L4.45003 19ZM12 18C12.2834 18 12.5209 17.9042 12.7125 17.7125C12.9042 17.5208 13 17.2833 13 17C13 16.7167 12.9042 16.4792 12.7125 16.2875C12.5209 16.0958 12.2834 16 12 16C11.7167 16 11.4792 16.0958 11.2875 16.2875C11.0959 16.4792 11 16.7167 11 17C11 17.2833 11.0959 17.5208 11.2875 17.7125C11.4792 17.9042 11.7167 18 12 18ZM12 15C12.2834 15 12.5209 14.9042 12.7125 14.7125C12.9042 14.5208 13 14.2833 13 14V11C13 10.7167 12.9042 10.4792 12.7125 10.2875C12.5209 10.0958 12.2834 10 12 10C11.7167 10 11.4792 10.0958 11.2875 10.2875C11.0959 10.4792 11 10.7167 11 11V14C11 14.2833 11.0959 14.5208 11.2875 14.7125C11.4792 14.9042 11.7167 15 12 15Z\\\" fill=\\\"var(--nys-icon-color, currentcolor)\\\"/>\\n </g>\\n</svg>\"};\nexport default iconLibrary;\n"],"names":["t","e","s","o","n$3","r","n","S","c","i","h","a","l","p","d","u","f","b","y$1","y","v","_","m","g","$","x","E","A","C","P","V","N","I","L","z","H","M","R","k","Z","B","D","counter","generateId","prefix","IdentifiedMixin","Base","Identified","NysElement","LitElement","ReflectsAriaMixin","ReflectsAria","name","value","rec","attr","ariaAttr","role","stripped","NysFormControlElement","_FormControl","flags","message","anchor","internals","invalid","FormControl","registry","watchers","defaultSet","defaultSetLoading","loadDefaultSet","nysIcon_library","ensureDefaultLibrary","content","getIconLibrary","watchIconLibrary","watcher","unwatchIconLibrary","_arrayLikeToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","_slicedToArray","_unsupportedIterableToArray","entries","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","_ref","apply","construct","func","thisArg","_len","args","_key","Func","_len2","_key2","arrayForEach","unapply","arrayLastIndexOf","arrayPop","arrayPush","arraySplice","arrayIsArray","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","numberToString","booleanToString","bigintToString","symbolToString","objectHasOwnProperty","objectToString","regExpTest","typeErrorCreate","unconstruct","_len3","_key3","_len4","_key4","addToSet","set","array","transformCaseFunc","element","lcElement","cleanArray","index","clone","object","newObject","_ref2","_ref3","property","stringifyValue","valueAsRecord","valueToString","lookupGetter","stringified","prop","desc","fallbackValue","isRegex","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","text","html","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","ELEMENT_MARKUP_PROBE","COMMENT_MARKUP_PROBE","FALLBACK_TAG_CLOSE","SELF_CLOSING_TAG","NODE_TYPE","LITERAL_TEXT_ELEMENT_NAMES","LITERAL_TEXT_ELEMENTS","LITERAL_TEXT_CLOSE","map","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","suffix","ATTR_NAME","policyName","scriptUrl","_createHooksMap","_resolveSetOption","cfg","key","fallback","options","_resolveObjectOption","makeFallback","createDOMPurify","window","DOMPurify","root","document","originalDocument","currentScript","HTMLTemplateElement","Node","Element","NodeFilter","_window$NamedNodeMap","DOMParser","ElementPrototype","cloneNode","remove","getNextSibling","getChildNodes","getParentNode","getShadowRoot","getAttributes","getNodeType","getNodeName","getOwnerDocument","_readNodeType","node","_readNodeName","template","trustedTypesPolicy","emptyHTML","defaultTrustedTypesPolicy","defaultTrustedTypesPolicyResolved","IN_TRUSTED_TYPES_POLICY","_assertNotInTrustedTypesPolicy","_createTrustedHTML","_createTrustedScriptURL","_getDefaultTrustedTypesPolicy","_document","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","MUSTACHE_EXPR$1","ERB_EXPR$1","TMPLIT_EXPR$1","DATA_ATTR$1","ARIA_ATTR$1","IS_SCRIPT_OR_DATA$1","ATTR_WHITESPACE$1","CUSTOM_ELEMENT$1","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","FORBID_TAGS","FORBID_ATTR","EXTRA_ELEMENT_HANDLING","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","SET_CONFIG_ALLOWED_TAGS","SET_CONFIG_ALLOWED_ATTR","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","DEFAULT_MATHML_TEXT_INTEGRATION_POINTS","MATHML_TEXT_INTEGRATION_POINTS","DEFAULT_HTML_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","customElementHandling","previousTrustedTypesPolicy","error","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkSvgNamespace","tagName","parent","parentTagName","_checkMathMlNamespace","_checkHtmlNamespace","_checkValidNamespace","_forceRemove","_stripAttributeNode","attribute","_neutralizeRoot","_neutralizeSubtree","childNodes","snapshot","child","attributes","_removeAttribute","_stripDisallowedAttributes","stack","_isPatchLinkageAttribute","lcName","lcTag","_neutralizePatchLinkage","nodeType","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","body","_createNodeIterator","_stripTemplateExpressions","_scrubTemplateExpressions2","_node$querySelectorAl","walker","currentNode","templates","tmpl","_isDocumentFragment","_isClobbered","realTagName","_isNode","_executeHooks","data","hook","_isUnsafeNode","_matchesNameCheck","check","_sanitizeDisallowedNode","_isBasicCustomElement","parentNode","childCount","hoisted","_forkSharedAllowlist","hookList","setConfigSet","_handleHookDetachedNode","_sanitizeElements","removed","_isValidAttribute","nameIsPermitted","RESERVED_CUSTOM_ELEMENT_NAMES","_applyTrustedTypesToAttribute","namespaceURI","_setAttributeValue","_sanitizeAttributes","hookEvent","attrValue","initValue","_sanitizeShadowDOM2","fragment","shadowNode","shadowIterator","innerSr","_sanitizeAttachedShadowRoots","item","isElement","rootName","sr","importedNode","returnNode","inPlace","nn","walkRoot","nodeIterator","entry","serializedHTML","tag","entryPoint","hookFunction","purify","urlCache","inlineCache","sanitizeAndParse","context","clean","_doFetch","url","resp","fetchIcon","parseIcon","source","_NysIcon","_a","result","changedProps","oldLib","seq","lib","resolution","unsafeCSS","styles","__decorateClass","state","NysIcon","_NysButton","slot","form","event","btn","linkEl","innerEl","ifDefined","NysButton","_NysTooltip","ref","tooltip","isPointerInsideTooltip","isPointerInsideRef","isTouched","oldVal","targetId","htmlElement","findInShadows","el","shadowElement","found","deeper","existing","button","position","refRect","tooltipRect","margin","spaceAvailable","tryOrder","userPosition","pos","bestPosition","maxSpace","top","left","refCenter","overflowLeft","overflowRight","newTooltipRect","arrowOffsetRatio","arrowOffsetPercent","NysTooltip","labelIdCounter","_NysLabel","NysLabel","errorMessageIdCounter","_NysErrorMessage","NysErrorMessage","_NysTextinput","changedProperties","mask","input","overlay","validity","filled","remaining","digits","digitIndex","newValue","slotName","container","assignedElements","foundValidButton","NysTextinput","query","_NysAlert","isUrgent","assignedNodes","ariaLive","NysAlert","nysBrandLogoSvg","NYS_ALERT_URL","SEVERITY_TYPES","FEED_ICONS","isPublished","status","LANGUAGE_LIST_ID","LANGUAGE_MENU_LABEL","LANGUAGE_OPTION_CLASS","TRANSLATE_TRIGGER_IDS","innerControl","LANGUAGE_TAGS","languageTag","code","DEFAULT_LANDMARK_LABEL","_NysUnavHeader","changed","edge","nysLogo","clickID","triggerId","id","trigger","option","control","count","setup","script","languageCode","matchingLanguage","lang","existingDisclaimer","translateDisclaimer","baseLang","checkLang","language","target","current","wrapper","next","searchValue","searchID","request","feed","alerts","alert","response","severity","icon","nothing","type","linkLabel","isCurrent","NysUnavHeader","_NysUnavFooter","svgElement","NysUnavFooter","TOKENS_STYLE_ID","injectTokens","style","tokens","head"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,12,14]}