@digital-blueprint/mono-app
Version:
[GitHub Repository](https://github.com/digital-blueprint/mono-app) | [npmjs package](https://www.npmjs.com/package/@digital-blueprint/mono-app) | [Unpkg CDN](https://unpkg.com/browse/@digital-blueprint/mono-app/) | [Mono Bundle](https://github.com/digital
466 lines (416 loc) • 263 kB
JavaScript
let e=e=>e,t,n,r,i,a,o,s,c,l,u,d,f,p,ee,te,ne,re,ie,ae,oe,se,ce,le,ue,de,fe,pe,me,he,ge,_e,ve,ye,be,xe,Se,Ce,we;function m(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function h(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?m(Object(n),!0).forEach(function(t){Te(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):m(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Te(e,t,n){return(t=Ee(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ee(e){var t=De(e,`string`);return typeof t==`symbol`?t:t+``}function De(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}
/*!
* License: LGPL-2.1-or-later
* Dependencies:
*
* @dbp-toolkit/app-shell: 0.3.17 (LGPL-2.1-or-later)
* @dbp-toolkit/language-select: 0.3.7 (LGPL-2.1-or-later)
* @dbp-toolkit/auth: 0.3.8 (LGPL-2.1-or-later)
* @dbp-toolkit/notification: 0.3.8 (LGPL-2.1-or-later)
* @dbp-toolkit/theme-switcher: 0.1.5 (LGPL-2.1-or-later)
* universal-router: 10.0.1 (MIT)
* @dbp-toolkit/matomo: 0.2.12 (LGPL-2.1-or-later)
* @tugraz/web-components: 0.3.12 (LGPL-2.1-or-later)
*/
import{A as g,D as _,E as v,M as y,N as Oe,O as ke,S as Ae,T as b,a as je,b as x,c as S,d as C,i as Me,j as w,k as T,l as Ne,m as E,n as D,o as Pe,p as O,r as Fe,s as Ie,t as k,u as Le,v as A,w as Re,y as j}from"./shared/dbp-lit-element.DH77Mkn6.js";var ze={"activity-example":{"hello-world":`Hallo Welt`},"choose-from-menu":`Bitte wählen Sie eine Aktivität aus dem Menu.`,contact:`Kontakt`,imprint:`Impressum`,login:`Anmelden`,logout:`Abmelden`,"page-not-found":`Die gewünschte Seite wurde nicht gefunden`,"page-updated-needs-reload":`Die Applikation wurde aktualisiert. Bitte laden Sie die Seite neu.`,"privacy-policy":`Datenschutz`,"standard-layout-name":`Standard`,"switch-layout":`Layout wechseln`,"switch-to-standard-layout-label":`Zum Standardlayout wechseln`,"switch-to-wide-layout-label":`Zum Weiten Layout wechseln`,welcome:{headline:`Willkommen!`},"wide-layout-name":`Erweitert`},Be={"activity-example":{"hello-world":`Hello World`},"choose-from-menu":`Please choose an activity from the menu.`,contact:`Contact`,imprint:`Legal Notice`,login:`Login`,logout:`Logout`,"page-not-found":`Requested Page Not Found`,"page-updated-needs-reload":`The application has been updated. Please reload the page.`,"privacy-policy":`Privacy Policy`,"standard-layout-name":`Standard`,"switch-layout":`Switch layout`,"switch-to-standard-layout-label":`Switch to Standard Layout`,"switch-to-wide-layout-label":`Switch to Wide Layout`,welcome:{headline:`Welcome!`},"wide-layout-name":`Wide`};function M(){return y({en:Be,de:ze},`de`,`en`)}var Ve={de:`Deutsch`,"de-action":`Auf Deutsch anzeigen`,demo:`Hallo Welt`,en:`Englisch`,"en-action":`Auf Englisch anzeigen`},He={de:`German`,"de-action":`Switch to German`,demo:`Hello World`,en:`English`,"en-action":`Switch to English`};function Ue(){return y({en:He,de:Ve},`de`,`en`)}var N=class extends E{constructor(){super(),this._lang=`de`,this.languages=[`de`,`en`],this._i18n=Ue(),this._i18n.t(`de`),this._i18n.t(`de-action`),this._i18n.t(`en`),this._i18n.t(`en-action`)}_getNextLanguage(e){var t=this.languages.indexOf(e),n=this.languages[t+1];return n===void 0&&(n=this.languages[0]),n}_getPreviousLanguage(e){var t=this.languages.indexOf(e),n=this.languages[t-1];return n===void 0&&(n=this.languages[this.languages.length-1]),n}static get properties(){return{lang:{type:String},next:{type:String},languages:{type:Array}}}set lang(e){let t=this.lang,n=this.next;this._lang=e,this.requestUpdate(`lang`,t),this.requestUpdate(`next`,n),t!==e&&(this.sendSetPropertyEvent(`lang`,e),this._i18n.changeLanguage(this.next))}get lang(){return this._lang}set next(e){this.lang=this._getPreviousLanguage(e)}get next(){return this._getNextLanguage(this.lang)}static get styles(){return w(t||=e`
${0}
:host {
display: inline-block;
}
a:hover {
color: var(--dbp-hover-color, var(--dbp-content));
background-color: var(--dbp-hover-background-color);
transition: none;
}
a {
padding: 0.3em;
display: inline-block;
text-decoration: none;
transition:
background-color 0.15s,
color 0.15s;
color: var(--dbp-content);
}
input::-moz-focus-inner {
border: 0;
}
:focus-visible {
outline: none !important;
outline-width: 0 !important;
box-shadow: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: 0px 0px 4px 2px var(--dbp-primary);
}
`,b())}onClick(e){e.preventDefault(),this.lang=this.next}render(){return g(n||=e`
<a href="#" title="${0}" @click=${0}>${0}</a>
`,this._i18n.t(this.next+`-action`),this.onClick,this.next.toUpperCase())}},We={"logging-in":`Anmeldung läuft`,login:`Anmelden`,"login-failed":`Kommunikation mit dem Anmeldeserver fehlgeschlagen`,logout:`Abmelden`},Ge={"logging-in":`Logging in`,login:`Login`,"login-failed":`Communication with the login server failed`,logout:`Logout`};function Ke(){return y({en:Ge,de:We},`de`,`en`)}const qe=function(e,t){let n=new Promise((t,n)=>{let r=setTimeout(()=>{clearTimeout(r),n(`Timed out in `+e+`ms.`)},e)});return Promise.race([t,n])},Je=function(e){try{return new URL(e).href}catch{return new URL(e,window.location.href).href}};var Ye=class extends EventTarget{constructor(e,t,n,r,i,a){super(),this._baseURL=e,this._realm=t,this._clientId=n,this._keycloak=null,this._initPromise=null,this._silentCheckSsoUri=r,this._checkLoginIframe=i,this._idpHint=a,this._checkId=null,this.MIN_VALIDITY=20,this.CHECK_INTERVAL=10,this.DEBUG=!1,this._onVisibilityChanged=this._onVisibilityChanged.bind(this),document.addEventListener(`visibilitychange`,this._onVisibilityChanged)}close(){document.removeEventListener(`visibilitychange`,this._onVisibilityChanged)}_onVisibilityChanged(){document.visibilityState===`visible`&&this._checkTokeHasExpired()}_onChanged(){let e=new CustomEvent(`changed`,{detail:this._keycloak,bubbles:!0,composed:!0});this.dispatchEvent(e)}_onReady(e){e&&this._onChanged()}async _onTokenExpired(){console.log(`Token has expired`);let e=!1;try{e=await this._keycloak.updateToken(-1)}catch(e){console.log(`Failed to refresh the token`,e);return}console.assert(e,`token should have been refreshed`)}async _checkTokeHasExpired(){let e;if(this._keycloak===null||!this._keycloak.authenticated)return;let t=this.MIN_VALIDITY+this.CHECK_INTERVAL;this.DEBUG&&console.log(`Updating token if not valid for at least ${t}s`);try{e=await this._keycloak.updateToken(t)}catch(e){console.log(`Failed to refresh the token`,e)}this.DEBUG&&e&&console.log(`token has been refreshed`)}async _onAuthSuccess(){this._checkId!==null&&(clearInterval(this._checkId),this._checkId=null),this._checkId=setInterval(this._checkTokeHasExpired.bind(this),this.CHECK_INTERVAL*1e3),this._onChanged()}async _onAuthLogout(){this._checkId!==null&&(clearInterval(this._checkId),this._checkId=null),this._onChanged()}async _init(){let e=(await import(`./shared/keycloak.BFWobQrr.js`)).default;this._keycloak=new e({url:this._baseURL,realm:this._realm,clientId:this._clientId}),this._keycloak.onTokenExpired=this._onTokenExpired.bind(this),this._keycloak.onAuthRefreshSuccess=this._onChanged.bind(this),this._keycloak.onAuthRefreshError=this._onChanged.bind(this),this._keycloak.onAuthLogout=this._onAuthLogout.bind(this),this._keycloak.onAuthSuccess=this._onAuthSuccess.bind(this),this._keycloak.onAuthError=this._onChanged.bind(this),this._keycloak.onReady=this._onReady.bind(this);let t={};t.pkceMethod=`S256`,this.DEBUG&&(t.enableLogging=!0),t.checkLoginIframe=this._checkLoginIframe,this._silentCheckSsoUri?(t.onLoad=`check-sso`,t.silentCheckSsoRedirectUri=Je(this._silentCheckSsoUri),await qe(5e3,this._keycloak.init(t)).catch(()=>{console.log(`Login timed out`),this._onChanged()})):await this._keycloak.init(t)}async _ensureInit(){return this._initPromise===null&&(this._initPromise=this._init()),this._initPromise}isLoggingIn(){let e=window.location.href;return e.search(`[&#]state=`)>=0&&e.search(`[&#]session_state=`)>=0}async login(e){await this._ensureInit(),e||={};let t=e.lang||`en`,n=e.scope||``;this._keycloak.authenticated||await this._keycloak.login({locale:t,scope:n,idpHint:this._idpHint})}async tryLogin(){await this._ensureInit()}async localLogout(){this._keycloak.clearToken()}async logout(){await this._ensureInit(),this._keycloak.logout()}};const P=Object.freeze({UNKNOWN:`unknown`,LOGGING_IN:`logging-in`,LOGGED_IN:`logged-in`,LOGGING_OUT:`logging-out`,LOGGED_OUT:`logged-out`});var F=class extends S(E,Ke){constructor(){super(),this.forceLogin=!1,this.token=``,this.subject=``,this.name=``,this.tryLogin=!1,this.entryPointUrl=``,this._user=null,this._userId=``,this._authenticated=!1,this._loginStatus=P.UNKNOWN,this.requestedLoginStatus=P.UNKNOWN,this.keycloakUrl=null,this.realm=null,this.clientId=null,this.silentCheckSsoRedirectUri=null,this.noCheckLoginIframe=!1,this.scope=null,this.idpHint=``,this._onKCChanged=this._onKCChanged.bind(this),window.playwright&&this.setAttribute(`data-testid`,`dbp-auth-keycloak`)}update(e){e.forEach((e,t)=>{switch(t){case`requestedLoginStatus`:{console.log(`requested-login-status changed`,this.requestedLoginStatus);let e=this.requestedLoginStatus;switch(this.requestedLoginStatus=P.UNKNOWN,e){case P.LOGGED_IN:this._kcwrapper.login({lang:this.lang,scope:this.scope||``});break;case P.LOGGED_OUT:this._loginStatus===P.LOGGED_IN&&this._setLoginStatus(P.LOGGING_OUT),this._kcwrapper.logout(),this._loginStatus===P.LOGGING_OUT&&this._setLoginStatus(P.LOGGED_IN);break}break}}}),super.update(e)}async _fetchUser(e,t){let n=Ie(this.entryPointUrl,`/frontend/users/${encodeURIComponent(e)}`),r=await fetch(n,{headers:{Authorization:`Bearer `+t}});if(!r.ok)throw r;return{roles:(await r.json()).roles??[]}}async _onKCChanged(e){let t=e.detail;if(this._authenticated=t.authenticated,t.authenticated){if(t.subject!==this.subject){this._loginStatus===P.LOGGED_IN&&(this._setLoginStatus(P.LOGGING_OUT),this._setLoggedOut());let e=t.idTokenParsed.preferred_username;this._userId=e;let n;try{n=await this._fetchUser(e,t.token)}catch(e){console.error(e),n={roles:[]}}e===this._userId&&(this._user=n)}let e=this.token!==t.token;this.token=t.token,this.name=t.idTokenParsed.name,this.subject=t.subject,this._user!==null&&this._setLoginStatus(P.LOGGED_IN,e)}else this._loginStatus===P.LOGGED_IN&&this._setLoginStatus(P.LOGGING_OUT),this._setLoggedOut()}_setLoggedOut(){this.name=``,this.token=``,this.subject=``,this._userId=``,this._user=null,this._setLoginStatus(P.LOGGED_OUT)}sendSetPropertyEvents(){let e={"login-status":this._loginStatus,subject:this.subject,token:this.token,"user-full-name":this.name,"user-id":this._userId,"person-id":this._userId,person:this._user,_roles:this._user?this._user.roles:[]};this.sendSetPropertyEvent(`auth`,e)}_setLoginStatus(e,t){this._loginStatus===e&&!t||(this._loginStatus=e,this.sendSetPropertyEvents())}static get properties(){return h(h({},super.properties),{},{lang:{type:String},forceLogin:{type:Boolean,attribute:`force-login`},tryLogin:{type:Boolean,attribute:`try-login`},entryPointUrl:{type:String,attribute:`entry-point-url`},name:{type:String,attribute:!1},token:{type:String,attribute:!1},subject:{type:String,attribute:!1},_userId:{type:String,attribute:!1},_user:{type:Object,attribute:!1},_loginStatus:{type:String,attribute:!1},keycloakUrl:{type:String,attribute:`url`},realm:{type:String},clientId:{type:String,attribute:`client-id`},silentCheckSsoRedirectUri:{type:String,attribute:`silent-check-sso-redirect-uri`},scope:{type:String},idpHint:{type:String,attribute:`idp-hint`},requestedLoginStatus:{type:String,attribute:`requested-login-status`},noCheckLoginIframe:{type:Boolean,attribute:`no-check-login-iframe`}})}connectedCallback(){var e=this;if(super.connectedCallback(),!this.keycloakUrl)throw Error(`url not set`);if(!this.realm)throw Error(`realm not set`);if(!this.clientId)throw Error(`client-id not set`);this._kcwrapper=new Ye(this.keycloakUrl,this.realm,this.clientId,this.silentCheckSsoRedirectUri,!this.noCheckLoginIframe,this.idpHint),this._kcwrapper.addEventListener(`changed`,this._onKCChanged),async function(){try{e.forceLogin||e._kcwrapper.isLoggingIn()?(e._setLoginStatus(P.LOGGING_IN),await e._kcwrapper.login({lang:e.lang,scope:e.scope||``})):e.tryLogin?(e._setLoginStatus(P.LOGGING_IN),await e._kcwrapper.tryLogin(),e._authenticated||e._setLoginStatus(P.LOGGED_OUT)):e._setLoginStatus(P.LOGGED_OUT)}catch(t){throw e._setLoginStatus(P.LOGGED_OUT),k({summary:e._i18n.t(`login-failed`),type:`danger`,timeout:5}),t}}()}disconnectedCallback(){this._kcwrapper.close(),this._kcwrapper.removeEventListener(`changed`,this._onKCChanged),super.disconnectedCallback()}},I=class extends Pe(S(v(E),M)){constructor(){super(),this.closeDropdown=this.closeDropdown.bind(this),this.onWindowResize=this.onWindowResize.bind(this)}static get scopedElements(){return{"dbp-icon":_}}onWindowResize(){this.updateDropdownWidth()}connectedCallback(){super.connectedCallback(),window.addEventListener(`resize`,this.onWindowResize),document.addEventListener(`click`,this.closeDropdown)}disconnectedCallback(){window.removeEventListener(`resize`,this.onWindowResize),document.removeEventListener(`click`,this.closeDropdown),super.disconnectedCallback()}updateDropdownWidth(){let e=this.shadowRoot.querySelector(`div.dropdown-menu`);if(!e)return;let t=this.getBoundingClientRect(),n=window.innerWidth-t.left;e.setAttribute(`style`,`width: ${n-20}px`)}onLoginClicked(e){this.sendSetPropertyEvent(`requested-login-status`,P.LOGGED_IN),e.preventDefault()}onLogoutClicked(e){this.sendSetPropertyEvent(`requested-login-status`,P.LOGGED_OUT)}static get styles(){return w(r||=e`
${0}
:host {
display: inline-block;
}
a {
color: var(--dbp-content);
fill: var(--dbp-content);
cursor: pointer;
text-decoration: none;
display: block;
}
input::-moz-focus-inner {
border: 0;
}
:focus-visible {
outline: none !important;
outline-width: 0 !important;
box-shadow: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: 0px 0px 4px 2px var(--dbp-primary);
}
.dropdown.is-active .dropdown-menu,
.dropdown.is-hoverable:hover .dropdown-menu {
display: block;
}
.dropdown-menu {
display: none;
min-width: 5em;
max-width: 25em;
position: absolute;
z-index: 20;
border: var(--dbp-border);
border-radius: 0px;
overflow: hidden;
background-color: var(--dbp-background);
}
.dropdown-content {
padding-bottom: 0.5rem;
padding-top: 0.5rem;
}
.menu a {
/*padding: 0.3em;*/
font-weight: 400;
color: var(--dbp-content);
display: block;
text-decoration: none;
}
.menu a:hover {
color: var(--dbp-hover-color, var(--dbp-content));
background-color: var(--dbp-hover-background-color);
}
.menu a.selected {
color: var(--dbp-on-secondary-surface);
background-color: var(--dbp-secondary-surface);
}
.dropdown-item {
color: var(--dbp-muted);
display: block;
font-size: 0.875rem;
line-height: 1.5;
padding: 0.375rem 1rem;
margin-left: 0.5em;
margin-right: 0.5em;
padding-left: 0.5em;
padding-right: 0.5em;
position: relative;
}
.dropdown {
cursor: pointer;
}
a.dropdown-item {
width: initial !important;
}
.main-button {
min-width: 150px;
}
.menu-icon {
height: 1em;
width: 1em;
vertical-align: -0.1rem;
}
.login-box svg {
width: 1.1em;
height: 1.1em;
display: flex;
}
.login-button {
padding: 0.3em 0.4em;
transition:
background-color 0.15s,
color 0.15s;
}
.login-button:hover {
color: var(--dbp-hover-color, var(--dbp-content));
background-color: var(--dbp-hover-background-color);
cursor: pointer;
transition: none;
}
.login-box {
display: flex;
align-items: center;
}
.login-box:hover svg path {
fill: var(--dbp-hover-color);
}
.login-box .label {
padding-left: 0.2em;
}
.dropdown-trigger {
display: flex;
align-items: center;
}
.dropdown-trigger .name {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
min-width: 0;
margin-right: 0.5em;
}
`,b())}setChevron(e){let t=this.shadowRoot.querySelector(`#menu-chevron-icon`);t!==null&&(t.name=e)}onDropdownClick(e){e.stopPropagation(),e.currentTarget.classList.toggle(`is-active`),this.setChevron(e.currentTarget.classList.contains(`is-active`)?`chevron-up`:`chevron-down`),this.updateDropdownWidth()}closeDropdown(){this.shadowRoot.querySelectorAll(`.dropdown`).forEach(function(e){e.classList.remove(`is-active`)}),this.setChevron(`chevron-down`)}renderLoggedIn(){let t=this._i18n;return g(i||=e`
<div class="dropdown" @click="${0}">
<a href="#">
<div class="dropdown-trigger login-button">
<div class="name">${0}</div>
<dbp-icon
class="menu-icon"
name="chevron-down"
id="menu-chevron-icon"></dbp-icon>
</div>
</a>
<div class="dropdown-menu" id="dropdown-menu2" role="menu">
<div class="dropdown-content" @blur="${0}">
<div class="menu">
<a href="#" @click="${0}" class="dropdown-item">
${0}
</a>
</div>
</div>
</div>
</div>
`,this.onDropdownClick,this.auth[`user-full-name`],this.closeDropdown,this.onLogoutClicked,t.t(`logout`))}renderLoggedOut(){let t=this._i18n;return g(a||=e`
<a href="#" @click="${0}">
<div class="login-box login-button">
<div class="icon" aria-hidden="true">${0}</div>
<div class="label">${0}</div>
</div>
</a>
`,this.onLoginClicked,Ne(`
<svg
viewBox="0 0 100 100"
y="0px"
x="0px"
id="icon"
role="img"
version="1.1">
<g
id="g6">
<path
style="stroke-width:1.33417916"
id="path2"
d="m 42.943908,38.894934 5.885859,6.967885 H 5.4215537 c -1.8393311,0 -3.4334181,1.741972 -3.4334181,4.064599 0,2.322628 1.4714649,4.064599 3.4334181,4.064599 H 48.829767 L 42.943908,60.9599 c -1.348843,1.596808 -1.348843,4.064599 0,5.661406 1.348843,1.596808 3.433418,1.596808 4.782261,0 L 61.705085,49.927418 47.726169,33.378693 c -1.348843,-1.596806 -3.433418,-1.596806 -4.782261,0 -1.348843,1.596807 -1.348843,4.064599 0,5.516241 z" />
<path
id="path4"
d="m 50,2.3007812 c -18.777325,0 -35.049449,10.9124408 -42.8261719,26.7246098 H 13.390625 C 20.672112,16.348362 34.336876,7.8007812 50,7.8007812 73.3,7.8007812 92.300781,26.7 92.300781,50 92.300781,73.3 73.3,92.300781 50,92.300781 c -15.673389,0 -29.345175,-8.60579 -36.623047,-21.326172 H 7.1640625 C 14.942553,86.8272 31.242598,97.800781 50.099609,97.800781 76.399609,97.800781 97.900391,76.4 97.900391,50 97.800391,23.7 76.3,2.3007812 50,2.3007812 Z" />
</g>
</svg>
`),t.t(`login`))}render(){return g(o||=e`
<div class="authbox">
${0}
</div>
`,this.isLoggedIn()?this.renderLoggedIn():this.renderLoggedOut())}},Xe={"add-notification":`Benachrichtigung hinzufügen`,"open-dialog":`Dialog öffnen`,send:`Senden`},Ze={"add-notification":`Add Notification`,"open-dialog":`Open Dialog`,send:`Send`};function Qe(){return y({en:Ze,de:Xe},`de`,`en`)}var L=class extends S(O,Qe){constructor(){super(),this.notificationBlock=null,this.notifications={},this.targetNotificationId=null}static get properties(){return h(h({},super.properties),{},{inline:{type:Boolean,attribute:`inline`}})}connectedCallback(){super.connectedCallback(),window.addEventListener(`dbp-notification-send`,e=>{let t=e;if(t.detail===void 0||(this.targetNotificationId=t.detail.targetNotificationId===void 0?null:t.detail.targetNotificationId,this.targetNotificationId&&this.targetNotificationId!==this.id)||!this.targetNotificationId&&this.id!==`dbp-notification`)return;this.notificationBlock=this._(`#notification-container`);let n=`notification-${ke()}`;this.notifications[n]={},this.notifications[n].id=n,this.notifications[n].messageSelector=`#${n}`;let r=t.detail.type===void 0?`info`:t.detail.type,i=t.detail.body===void 0?``:t.detail.body,a=t.detail.summary===void 0?``:t.detail.summary,o=t.detail.timeout===void 0?0:t.detail.timeout,s=t.detail.icon===void 0?``:t.detail.icon,c=s===``?``:`<dbp-icon name="${s}"></dbp-icon>`,l=a===``?``:`<h3>${a}</h3>`,u=t.detail.replaceId===void 0?null:t.detail.replaceId;if(u)for(let e in this.notifications)this.notifications[e].replaceId===u&&this.removeMessageById(this.notifications[e]);this.notifications[n].replaceId=u;let d=o>0?`<div class="progress-container"><div class="progress" style="--dbp-progress-timeout: ${o}s;"></div></div>`:``,f=o>0?`has-progress-bar`:`no-progress-bar`,p=document.createElement(`div`);p.id=n,p.classList.add(`notification`,`enter-animation`,`is-${r}`,f),p.innerHTML=`
<button id="${n}-button" class="delete"></button>
${l}
${c} ${i}
${d}
`,this.notificationBlock.appendChild(p),this.notificationBlock.querySelector(`#${n}-button`).addEventListener(`click`,()=>this.removeMessageById(this.notifications[n])),o>0&&(this.notifications[n].progressTimeout=setTimeout(()=>{this.removeMessageById(this.notifications[n])},o*1e3)),e.preventDefault()})}disconnectedCallback(){super.disconnectedCallback();for(let e of Object.values(this.notifications))clearTimeout(e.progressTimeout)}removeMessageById(e,t=!1){let n=e.messageSelector,r=this._(n);if(r){let n=t?0:500;r.classList.add(`is-removing`),setTimeout(()=>{this.notificationBlock.removeChild(r);let e=new CustomEvent(`dbp-notification-close`,{detail:{targetNotificationId:this.targetNotificationId},bubbles:!0,composed:!0});this.dispatchEvent(e)},n),clearTimeout(this.notifications[e.id].progressTimeout),delete this.notifications[e.id]}}removeAllNotifications(){for(let e of Object.values(this.notifications))this.removeMessageById(e,!0)}static get styles(){return w(s||=e`
${0}
${0}
${0}
.notification-container {
position: fixed;
top: 0;
max-width: 500px;
margin: 0.75em auto;
left: 0;
right: 0;
z-index: 1000;
padding: 0;
}
:host([inline]) .notification-container {
top: 0;
left: 0;
right: 0;
max-width: 100%;
margin: 0 auto;
display: flex;
flex-direction: column;
}
:host([inline]) .notification-container--inside {
margin-top: 60px;
}
:host([inline]) .notification:not(:last-child) {
/* margin-bottom: 1rem; */
}
.notification h3 {
font: inherit;
font-weight: bold;
margin-bottom: 3px;
}
.delete,
.modal-close {
-moz-appearance: none;
-webkit-appearance: none;
background-color: rgba(10, 10, 10, 0.2);
border: none;
border-radius: 290486px;
cursor: pointer;
pointer-events: auto;
display: inline-block;
flex-grow: 0;
flex-shrink: 0;
font-size: 0;
height: 20px;
max-height: 20px;
max-width: 20px;
min-height: 20px;
min-width: 20px;
outline: 0;
position: relative;
vertical-align: top;
width: 20px;
}
.delete::before,
.modal-close::before,
.delete::after,
.modal-close::after {
background-color: var(--dbp-background);
color: var(--dbp-content);
content: '';
display: block;
left: 50%;
position: absolute;
top: 50%;
-webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);
transform: translateX(-50%) translateY(-50%) rotate(45deg);
-webkit-transform-origin: center center;
transform-origin: center center;
}
.delete::before,
.modal-close::before {
height: 2px;
width: 50%;
}
.delete::after,
.modal-close::after {
height: 50%;
width: 2px;
}
.delete:hover,
.modal-close:hover,
.delete:focus,
.modal-close:focus {
background-color: rgba(10, 10, 10, 0.3);
}
.delete:active,
.modal-close:active {
background-color: rgba(10, 10, 10, 0.4);
}
`,b(),j(),Ae())}render(){return g(c||=e`
<div class="columns">
<div class="column notification-container" id="notification-container"></div>
</div>
`)}},$e={"color-mode":`Farbmodus ändern`,"demo-title":`Theme Switcher Demo`,intro:`Mit dem Theme-Switcher können Sie zwischen unterschiedlichen Farb-Themes umschalten.`},et={"color-mode":`Change color mode`,"demo-title":`Theme Switcher Demo`,intro:`With the theme-switcher you can switch between multiple themes.`};function tt(){return y({en:et,de:$e},`de`,`en`)}var R=class extends S(v(E),tt){constructor(){super(),this.themes=[],this.boundCloseAdditionalMenuHandler=this.hideModeMenu.bind(this),this.detectBrowserDarkMode=!1,this.darkModeClass=`dark-theme`,this.langDir=``,this.dropdownRight=!1,this.darkModeThemeOverride=null}static get properties(){return h(h({},super.properties),{},{themes:{type:Array,attribute:`themes`},darkModeThemeOverride:{type:String,attribute:`dark-mode-theme-override`},dropdownRight:{type:Boolean,attribute:`dropdown-right`},langDir:{type:String,attribute:`lang-dir`}})}static get scopedElements(){return{"dbp-icon":_}}connectedCallback(){super.connectedCallback(),this.updateComplete.then(()=>{this.darkModeThemeOverride===null?this.detectBrowserDarkMode=!0:this.darkModeThemeOverride===``?this.detectBrowserDarkMode=!1:(this.detectBrowserDarkMode=!0,this.darkModeClass=this.darkModeThemeOverride),this.loadTheme(`light-theme`),this.detectInitialMode()}),this.langDir&&Oe(this._i18n,this)}detectInitialMode(){let e=localStorage.getItem(`prefered-color-mode`);if(e){let t=this.themes.find(t=>t.class===e);t&&this.loadTheme(t.class);return}if(this.detectBrowserDarkMode&&window.matchMedia(`(prefers-color-scheme: dark)`).matches){let e=this.themes.find(e=>e.class===this.darkModeClass);e&&this.loadTheme(e.class)}}toggleModeMenu(){let e=this.shadowRoot.querySelector(`.mode-button`);if(!e)return;e.classList.contains(`active`)?e.classList.remove(`active`):e.classList.add(`active`);let t=this.shadowRoot.querySelector(`ul.extended-menu`),n=this.shadowRoot.querySelector(`.mode-button`);t===null||n===null||(t.classList.toggle(`hidden`),t.classList.contains(`hidden`)?document.removeEventListener(`click`,this.boundCloseAdditionalMenuHandler):(document.addEventListener(`click`,this.boundCloseAdditionalMenuHandler),this.initateOpenAdditionalMenu=!0))}hideModeMenu(){if(this.initateOpenAdditionalMenu){this.initateOpenAdditionalMenu=!1;return}let e=this.shadowRoot.querySelector(`ul.extended-menu`);e&&!e.classList.contains(`hidden`)&&this.toggleModeMenu()}loadTheme(e){let t=this.shadowRoot.querySelector(`.button-`+e),n=this.shadowRoot.querySelectorAll(`.button-theme`),r=this.shadowRoot.host.getRootNode({composed:!0}).body;t===null||n.length===0||r===null||(n.forEach(e=>e.classList.remove(`active`)),t.classList.add(`active`),r.classList.contains(e)||(this.themes.forEach(e=>{r.classList.remove(e.class)}),r.classList.add(e)))}saveTheme(e){let t=window.matchMedia(`(prefers-color-scheme: dark)`),n=window.matchMedia(`(prefers-color-scheme: light)`);e===`light-theme`&&n.matches||e===this.darkModeClass&&t.matches?localStorage.removeItem(`prefered-color-mode`):localStorage.setItem(`prefered-color-mode`,e)}static get styles(){return w(l||=e`
${0}
${0}
${0}
mode-button, button.button {
border: none;
}
.active,
.extended-menu li a.active dbp-icon {
color: var(--dbp-accent);
}
.active {
font-weight: bolder;
}
a:hover:not(.active),
.extended-menu li a:hover:not(.active) {
color: var(--dbp-hover-color, var(--dbp-content));
background-color: var(--dbp-hover-background-color);
transition: none;
}
a {
padding: 0.3em;
display: inline-block;
text-decoration: none;
transition:
background-color 0.15s,
color 0.15s;
color: var(--dbp-content);
}
.extended-menu {
list-style: none;
border: var(--dbp-border);
position: absolute;
background-color: var(--dbp-background);
z-index: 1000;
border-radius: var(--dbp-border-radius);
}
.extended-menu li {
text-align: left;
min-width: 160px;
}
.extended-menu li a {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
padding: 12px 15px;
width: 100%;
box-sizing: border-box;
text-align: left;
color: var(--dbp-content);
background: none;
display: block;
}
.icon {
margin-right: 10px;
}
#theme-menu {
position: relative;
}
.ul-right {
right: 0px;
}
`,b(),j(),A())}render(){let t=this._i18n;return g(u||=e`
<div id="theme-menu" class="${0}">
<a
href="#"
class="mode-button"
title="${0}"
@click="${0}">
<dbp-icon name="contrast"></dbp-icon>
</a>
<ul class="extended-menu hidden ${0}">
${0}
</ul>
</div>
`,C({hidden:this.themes.length<=1}),t.t(`color-mode`),e=>{this.toggleModeMenu(),e.preventDefault()},C({"ul-right":this.dropdownRight}),this.themes.map(t=>g(d||=e`
<li class="" id="${0}">
<a
href="#"
class="button-theme button-${0}"
@click="${0}"
title="${0}">
<dbp-icon class="icon" name="${0}"></dbp-icon>
${0}
</a>
</li>
`,t.class,t.class,e=>{this.loadTheme(t.class),this.saveTheme(t.class),e.preventDefault()},t.name,t.icon,t.name)))}},z=class extends E{constructor(){super(),this._observer=null,this._dark=!1}static get properties(){return h(h({},super.properties),{},{_dark:{type:Boolean}})}static get styles(){return w(f||=e`
.hidden {
display: none;
}
`)}connectedCallback(){super.connectedCallback(),this._observer=new MutationObserver(()=>{this._dark=document.body.classList.contains(`dark-theme`)}),this._observer.observe(document.body,{attributes:!0,attributeFilter:[`class`]})}disconnectedCallback(){this._observer.disconnect(),this._observer=null,super.disconnectedCallback()}render(){return g(p||=e`
<slot class="${0}" name="light"></slot>
<slot class="${0}" name="dark"></slot>
`,C({hidden:this._dark}),C({hidden:!this._dark}))}};
/*! Path-to-RegExp | MIT License | https://github.com/pillarjs/path-to-regexp */
const B=e=>e,V=/^(?:[\$A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088F\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5C\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDC-\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C8A\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7DC\uA7F1-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDDC0-\uDDF3\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD40-\uDD59\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDD4A-\uDD65\uDD6F-\uDD85\uDE80-\uDEA9\uDEB0\uDEB1\uDEC2-\uDEC7\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61\uDF80-\uDF89\uDF8B\uDF8E\uDF90-\uDFB5\uDFB7\uDFD1\uDFD3]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8\uDFC0-\uDFE0]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDB0-\uDDDB\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD80E\uD80F\uD81C-\uD822\uD840-\uD868\uD86A-\uD86D\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD88C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46\uDC60-\uDFFF]|\uD810[\uDC00-\uDFFA]|\uD811[\uDC00-\uDE46]|\uD818[\uDD00-\uDD1D]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDD40-\uDD6C\uDE40-\uDE7F\uDEA0-\uDEB8\uDEBB-\uDED3\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3\uDFF2-\uDFF6]|\uD823[\uDC00-\uDCD5\uDCFF-\uDD1E\uDD80-\uDDF2]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDDD0-\uDDED\uDDF0\uDEC0-\uDEDE\uDEE0-\uDEE2\uDEE4\uDEE5\uDEE7-\uDEED\uDEF0-\uDEF4\uDEFE\uDEFF\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEAD\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD88D[\uDC00-\uDC79])$/,H=/^(?:[\$0-9A-Z_a-z\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05EF-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u07FD\u0800-\u082D\u0840-\u085B\u0860-\u086A\u0870-\u0887\u0889-\u088F\u0897-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u09FE\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3C-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C5C\u0C5D\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDC-\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1-\u0CF3\u0D00-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D81-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECE\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1715\u171F-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u180F-\u1819\u1820-\u1878\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1ABF-\u1ADD\u1AE0-\u1AEB\u1B00-\u1B4C\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C8A\u1C90-\u1CBA\u1CBD-\u1CBF\u1CD0-\u1CD2\u1CD4-\u1CFA\u1D00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7DC\uA7F1-\uA827\uA82C\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF65-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDDC0-\uDDF3\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD40-\uDD59\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD27\uDD30-\uDD39\uDD40-\uDD65\uDD69-\uDD6D\uDD6F-\uDD85\uDE80-\uDEA9\uDEAB\uDEAC\uDEB0\uDEB1\uDEC2-\uDEC7\uDEFA-\uDF1C\uDF27\uDF30-\uDF50\uDF70-\uDF85\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC00-\uDC46\uDC66-\uDC75\uDC7F-\uDCBA\uDCC2\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD44-\uDD47\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDC9-\uDDCC\uDDCE-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E-\uDE41\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3B-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74\uDF80-\uDF89\uDF8B\