solid-ui 3.1.3-4 → 3.1.3-5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/chunks/{account-BUAN8dcJ.js → account-B4BktCv0.js} +6 -6
  2. package/dist/chunks/{account-BUAN8dcJ.js.map → account-B4BktCv0.js.map} +1 -1
  3. package/dist/chunks/{auth-C5d3nG1T.js → auth-BPQUXz9Q.js} +2 -2
  4. package/dist/chunks/auth-BPQUXz9Q.js.map +1 -0
  5. package/dist/chunks/{avatar-CsuCQCRu.js → avatar-B5DCduCy.js} +2 -2
  6. package/dist/chunks/{avatar-CsuCQCRu.js.map → avatar-B5DCduCy.js.map} +1 -1
  7. package/dist/chunks/{guard-CiRf-2tc.js → guard-BIc50Lps.js} +2 -2
  8. package/dist/chunks/{guard-CiRf-2tc.js.map → guard-BIc50Lps.js.map} +1 -1
  9. package/dist/chunks/{header-hptVqz21.js → header-0TLBh_PG.js} +3 -3
  10. package/dist/chunks/{header-hptVqz21.js.map → header-0TLBh_PG.js.map} +1 -1
  11. package/dist/chunks/{login-button-D3M_rY5D.js → login-button-BKp1-O2q.js} +2 -2
  12. package/dist/chunks/{login-button-D3M_rY5D.js.map → login-button-BKp1-O2q.js.map} +1 -1
  13. package/dist/chunks/{logout-button-ChD3v11m.js → logout-button-DlU-q-o5.js} +2 -2
  14. package/dist/chunks/{logout-button-ChD3v11m.js.map → logout-button-DlU-q-o5.js.map} +1 -1
  15. package/dist/chunks/{provider-C7cgeyP2.js → provider-uRz_fGWb.js} +2 -2
  16. package/dist/chunks/{provider-C7cgeyP2.js.map → provider-uRz_fGWb.js.map} +1 -1
  17. package/dist/chunks/{signup-button-BE5-JSwt.js → signup-button-BC4LmOXx.js} +2 -2
  18. package/dist/chunks/{signup-button-BE5-JSwt.js.map → signup-button-BC4LmOXx.js.map} +1 -1
  19. package/dist/chunks/{src-Dk9GB6DL.js → src-f1UXhE9W.js} +2 -2
  20. package/dist/chunks/{src-Dk9GB6DL.js.map → src-f1UXhE9W.js.map} +1 -1
  21. package/dist/components/account.js +1 -1
  22. package/dist/components/avatar.js +1 -1
  23. package/dist/components/guard.js +1 -1
  24. package/dist/components/header.js +1 -1
  25. package/dist/components/login-button.js +1 -1
  26. package/dist/components/login-modal.js +1 -1
  27. package/dist/components/logout-button.js +1 -1
  28. package/dist/components/provider.js +1 -1
  29. package/dist/components/signup-button.js +1 -1
  30. package/dist/components.js +9 -9
  31. package/dist/index.js +2 -2
  32. package/dist/lib/auth/NoopAuth.cjs.js +1 -1
  33. package/dist/lib/auth/NoopAuth.cjs.js.map +1 -1
  34. package/dist/lib/auth/NoopAuth.esm.js +1 -1
  35. package/dist/lib/auth/NoopAuth.esm.js.map +1 -1
  36. package/dist/loader.js +2 -2
  37. package/dist/solid-ui.js +1 -1
  38. package/dist/solid-ui.js.map +1 -1
  39. package/dist/solid-ui.min.js +1 -1
  40. package/dist/solid-ui.min.js.map +1 -1
  41. package/package.json +2 -2
  42. package/dist/chunks/auth-C5d3nG1T.js.map +0 -1
@@ -1,16 +1,16 @@
1
- import { c as e, s as t } from "./auth-C5d3nG1T.js";
1
+ import { c as e, s as t } from "./auth-BPQUXz9Q.js";
2
2
  import { t as n } from "./consume-BefsVEGX.js";
3
3
  import { r, t as i } from "./components-Dlw2zOvI.js";
4
4
  import { i as a, s as o } from "./lit-CC2G_f_C.js";
5
5
  import "./combobox-eju-wypA.js";
6
6
  import "./button-GHRF3psH.js";
7
- import "./avatar-CsuCQCRu.js";
8
- import "./login-button-D3M_rY5D.js";
9
- import "./logout-button-ChD3v11m.js";
7
+ import "./avatar-B5DCduCy.js";
8
+ import "./login-button-BKp1-O2q.js";
9
+ import "./logout-button-DlU-q-o5.js";
10
10
  import "./menu-item-DoTy3MUu.js";
11
11
  import "./menu-items-DKKcQrb6.js";
12
12
  import "./menu-DCsLCND4.js";
13
- import "./signup-button-BE5-JSwt.js";
13
+ import "./signup-button-BC4LmOXx.js";
14
14
  //#region ~icons/lucide/log-in
15
15
  var s = class extends HTMLElement {
16
16
  constructor() {
@@ -276,4 +276,4 @@ var P = N;
276
276
  //#endregion
277
277
  export { N as n, P as t };
278
278
 
279
- //# sourceMappingURL=account-BUAN8dcJ.js.map
279
+ //# sourceMappingURL=account-B4BktCv0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"account-BUAN8dcJ.js","names":["consume","html","customElement","WebComponent","authContext","DEFAULT_AUTH_CONTEXT","styles","_classDecs","_Account","_Account2","_A","WeakMap","_ref","_authDecs","context","subscribe","_Account3","Account","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_auth","_defineProperty","_classPrivateFieldGet","auth","v","_classPrivateFieldSet","connectedCallback","unsubscribeSessionUpdated","onSessionUpdated","requestUpdate","disconnectedCallback","render","account","e","c","_initClass","_applyDecs","_Class","_identity","loggedIn","component","default","Account"],"sources":["../../src/components/account/Account.styles.css","../../src/components/account/Account.ts","../../src/components/account/index.ts"],"sourcesContent":[":host {\n display: inline-flex;\n flex-direction: row;\n gap: 10px;\n}\n\n:host(:state(loggedIn)) {\n --padding: 4px;\n --border-width: 1px;\n --image-size: 1.875rem; /* 30px */\n\n button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 5px;\n background-color: var(--solid-ui-color-body-grey);\n padding: var(--padding);\n border-radius: calc((var(--image-size) + 2 * var(--padding) + 2 * var(--border-width)) / 2);\n color: var(--solid-ui-color-white);\n\n solid-ui-avatar {\n width: var(--image-size);\n height: var(--image-size);\n border: var(--border-width) solid var(--solid-ui-color-white);\n border-radius: 50%;\n }\n\n icon-lucide-chevron-down {\n width: 16px;\n height: 16px;\n }\n }\n}\n","import { consume } from '@lit/context'\nimport { html } from 'lit'\nimport { customElement, WebComponent } from '@/lib/components'\nimport { authContext, AuthContext, DEFAULT_AUTH_CONTEXT } from '@/lib/auth'\n\nimport '@/components/avatar'\nimport '@/components/button'\nimport '@/components/login-button'\nimport '@/components/logout-button'\nimport '@/components/menu-item'\nimport '@/components/menu-items'\nimport '@/components/menu'\nimport '@/components/signup-button'\nimport '~icons/lucide/chevron-down'\nimport '~icons/lucide/log-in'\nimport '~icons/lucide/log-out'\nimport '~icons/lucide/user'\n\nimport styles from './Account.styles.css'\n\n@customElement('solid-ui-account')\nexport default class Account extends WebComponent {\n static styles = styles\n static states = {\n loggedIn: (component: Account) => !!component.auth.account,\n }\n\n @consume({ context: authContext, subscribe: true })\n private accessor auth: AuthContext = DEFAULT_AUTH_CONTEXT\n\n private unsubscribeSessionUpdated?: () => void\n\n connectedCallback () {\n super.connectedCallback()\n\n this.unsubscribeSessionUpdated = this.auth.onSessionUpdated(() => this.requestUpdate())\n }\n\n disconnectedCallback () {\n super.disconnectedCallback()\n\n this.unsubscribeSessionUpdated?.()\n }\n\n protected render () {\n if (!this.auth.account) {\n return html`\n <solid-ui-login-button>\n <solid-ui-button slot=\"trigger\">\n <icon-lucide-user slot=\"left-icon\"></icon-lucide-user>\n Log In\n </solid-ui-button>\n </solid-ui-login-button>\n <solid-ui-signup-button>\n <solid-ui-button slot=\"trigger\" variant=\"outline\">\n <icon-lucide-log-in slot=\"left-icon\"></icon-lucide-log-in>\n Sign Up\n </solid-ui-button>\n </solid-ui-signup-button>\n `\n }\n\n return html`\n <solid-ui-menu>\n <button type=\"button\" slot=\"trigger\">\n <solid-ui-avatar></solid-ui-avatar>\n <icon-lucide-chevron-down slot=\"right-icon\"></icon-lucide-chevron-down>\n </button>\n\n <solid-ui-menu-items>\n <solid-ui-logout-button>\n <solid-ui-menu-item slot=\"trigger\">\n <icon-lucide-log-out slot=\"left-icon\"></icon-lucide-log-out>\n Sign out\n </solid-ui-menu-item>\n </solid-ui-logout-button>\n </solid-ui-menu-items>\n </solid-ui-menu>\n `\n }\n}\n","import Account from './Account'\n\nexport { Account }\nexport default Account\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACkByCO,IAAA,CAExCL,EAAc,kBAAkB,CAAC;AAAA,IAAAM;AAAA,KAAAC,KAAAC,kBAAA,IAAAC,QAAA,GAAAC,KAAAC,IAO/Bb,EAAQ;CAAEc,SAASV;CAAaW,WAAW;AAAK,CAAC,GAAC,SAAAC,IAPrD,cACqCb,EAAa;CAAAe,YAAA,GAAAC,GAAA;EAOSI,AAPT,MAAA,GAAAJ,CAAA,GAAAC,EAAA,MAAAV,IAAAW,EAAA,IAAA,GAAAC,EAAA,MAOXjB,CAAoB,EAAA,GAAAkB,EAAA,MAAA,6BAAA,KAAA,CAAA;CAAA;CAAA,KAAAX,KAAA;EAAA,OAAAY,EAAAd,GAAA,IAAA;CAAA;CAAA,IAAxCe,KAAIC,GAAA;EAAAC,EAAAjB,GAAA,MAAAgB,CAAA;CAAA;CAIrBE,oBAAqB;EAGnB,AAFA,MAAMA,kBAAkB,GAExB,KAAKC,4BAA4B,KAAKJ,KAAKK,uBAAuB,KAAKC,cAAc,CAAC;CACxF;CAEAC,uBAAwB;EAGtB,AAFA,MAAMA,qBAAqB,GAE3B,KAAKH,4BAA4B;CACnC;CAEUI,SAAU;EAkBlB,OAjBK,KAAKR,KAAKS,UAiBRjC,CAAI;;;;;;;;;;;;;;;;QAhBFA,CAAI;;;;;;;;;;;;;;CAiCf;AACF,GAAC,CAAAkC,GAAA,CAAAb,GAAAD,IAAAe,GAAA,CAAA5B,GAAA6B,MAAAC,EAAAtB,GAAA,CAAA;CAAAH;CAAA;CAAA;AAAA,CAAA,GAAAN,GAAA,GAAA,KAAA,GA3DoCJ,CAAY,GAAAa,IAAAuB,IAAA,cAAAC,EAAA;CAAAtB,cAAA;EAAA,MAAAV,CAAA,GAAAe,EAAA,MAAA,UAC/BjB,CAAM,GAAAiB,EAAA,MAAA,UACN,EACdkB,WAAWC,MAAuB,CAAC,CAACA,EAAUjB,KAAKS,QACrD,CAAC,GAAAG,EAAA;CAAA;AAAA,GAAAd,EAAAgB,GAAA9B,GAAA,KAAA,CAAA,GAAA8B,GAAA;;;ACtBH,IAAA,IAAeK"}
1
+ {"version":3,"file":"account-B4BktCv0.js","names":["consume","html","customElement","WebComponent","authContext","DEFAULT_AUTH_CONTEXT","styles","_classDecs","_Account","_Account2","_A","WeakMap","_ref","_authDecs","context","subscribe","_Account3","Account","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_auth","_defineProperty","_classPrivateFieldGet","auth","v","_classPrivateFieldSet","connectedCallback","unsubscribeSessionUpdated","onSessionUpdated","requestUpdate","disconnectedCallback","render","account","e","c","_initClass","_applyDecs","_Class","_identity","loggedIn","component","default","Account"],"sources":["../../src/components/account/Account.styles.css","../../src/components/account/Account.ts","../../src/components/account/index.ts"],"sourcesContent":[":host {\n display: inline-flex;\n flex-direction: row;\n gap: 10px;\n}\n\n:host(:state(loggedIn)) {\n --padding: 4px;\n --border-width: 1px;\n --image-size: 1.875rem; /* 30px */\n\n button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 5px;\n background-color: var(--solid-ui-color-body-grey);\n padding: var(--padding);\n border-radius: calc((var(--image-size) + 2 * var(--padding) + 2 * var(--border-width)) / 2);\n color: var(--solid-ui-color-white);\n\n solid-ui-avatar {\n width: var(--image-size);\n height: var(--image-size);\n border: var(--border-width) solid var(--solid-ui-color-white);\n border-radius: 50%;\n }\n\n icon-lucide-chevron-down {\n width: 16px;\n height: 16px;\n }\n }\n}\n","import { consume } from '@lit/context'\nimport { html } from 'lit'\nimport { customElement, WebComponent } from '@/lib/components'\nimport { authContext, AuthContext, DEFAULT_AUTH_CONTEXT } from '@/lib/auth'\n\nimport '@/components/avatar'\nimport '@/components/button'\nimport '@/components/login-button'\nimport '@/components/logout-button'\nimport '@/components/menu-item'\nimport '@/components/menu-items'\nimport '@/components/menu'\nimport '@/components/signup-button'\nimport '~icons/lucide/chevron-down'\nimport '~icons/lucide/log-in'\nimport '~icons/lucide/log-out'\nimport '~icons/lucide/user'\n\nimport styles from './Account.styles.css'\n\n@customElement('solid-ui-account')\nexport default class Account extends WebComponent {\n static styles = styles\n static states = {\n loggedIn: (component: Account) => !!component.auth.account,\n }\n\n @consume({ context: authContext, subscribe: true })\n private accessor auth: AuthContext = DEFAULT_AUTH_CONTEXT\n\n private unsubscribeSessionUpdated?: () => void\n\n connectedCallback () {\n super.connectedCallback()\n\n this.unsubscribeSessionUpdated = this.auth.onSessionUpdated(() => this.requestUpdate())\n }\n\n disconnectedCallback () {\n super.disconnectedCallback()\n\n this.unsubscribeSessionUpdated?.()\n }\n\n protected render () {\n if (!this.auth.account) {\n return html`\n <solid-ui-login-button>\n <solid-ui-button slot=\"trigger\">\n <icon-lucide-user slot=\"left-icon\"></icon-lucide-user>\n Log In\n </solid-ui-button>\n </solid-ui-login-button>\n <solid-ui-signup-button>\n <solid-ui-button slot=\"trigger\" variant=\"outline\">\n <icon-lucide-log-in slot=\"left-icon\"></icon-lucide-log-in>\n Sign Up\n </solid-ui-button>\n </solid-ui-signup-button>\n `\n }\n\n return html`\n <solid-ui-menu>\n <button type=\"button\" slot=\"trigger\">\n <solid-ui-avatar></solid-ui-avatar>\n <icon-lucide-chevron-down slot=\"right-icon\"></icon-lucide-chevron-down>\n </button>\n\n <solid-ui-menu-items>\n <solid-ui-logout-button>\n <solid-ui-menu-item slot=\"trigger\">\n <icon-lucide-log-out slot=\"left-icon\"></icon-lucide-log-out>\n Sign out\n </solid-ui-menu-item>\n </solid-ui-logout-button>\n </solid-ui-menu-items>\n </solid-ui-menu>\n `\n }\n}\n","import Account from './Account'\n\nexport { Account }\nexport default Account\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACkByCO,IAAA,CAExCL,EAAc,kBAAkB,CAAC;AAAA,IAAAM;AAAA,KAAAC,KAAAC,kBAAA,IAAAC,QAAA,GAAAC,KAAAC,IAO/Bb,EAAQ;CAAEc,SAASV;CAAaW,WAAW;AAAK,CAAC,GAAC,SAAAC,IAPrD,cACqCb,EAAa;CAAAe,YAAA,GAAAC,GAAA;EAOSI,AAPT,MAAA,GAAAJ,CAAA,GAAAC,EAAA,MAAAV,IAAAW,EAAA,IAAA,GAAAC,EAAA,MAOXjB,CAAoB,EAAA,GAAAkB,EAAA,MAAA,6BAAA,KAAA,CAAA;CAAA;CAAA,KAAAX,KAAA;EAAA,OAAAY,EAAAd,GAAA,IAAA;CAAA;CAAA,IAAxCe,KAAIC,GAAA;EAAAC,EAAAjB,GAAA,MAAAgB,CAAA;CAAA;CAIrBE,oBAAqB;EAGnB,AAFA,MAAMA,kBAAkB,GAExB,KAAKC,4BAA4B,KAAKJ,KAAKK,uBAAuB,KAAKC,cAAc,CAAC;CACxF;CAEAC,uBAAwB;EAGtB,AAFA,MAAMA,qBAAqB,GAE3B,KAAKH,4BAA4B;CACnC;CAEUI,SAAU;EAkBlB,OAjBK,KAAKR,KAAKS,UAiBRjC,CAAI;;;;;;;;;;;;;;;;QAhBFA,CAAI;;;;;;;;;;;;;;CAiCf;AACF,GAAC,CAAAkC,GAAA,CAAAb,GAAAD,IAAAe,GAAA,CAAA5B,GAAA6B,MAAAC,EAAAtB,GAAA,CAAA;CAAAH;CAAA;CAAA;AAAA,CAAA,GAAAN,GAAA,GAAA,KAAA,GA3DoCJ,CAAY,GAAAa,IAAAuB,IAAA,cAAAC,EAAA;CAAAtB,cAAA;EAAA,MAAAV,CAAA,GAAAe,EAAA,MAAA,UAC/BjB,CAAM,GAAAiB,EAAA,MAAA,UACN,EACdkB,WAAWC,MAAuB,CAAC,CAACA,EAAUjB,KAAKS,QACrD,CAAC,GAAAG,EAAA;CAAA;AAAA,GAAAd,EAAAgB,GAAA9B,GAAA,KAAA,CAAA,GAAA8B,GAAA;;;ACtBH,IAAA,IAAeK"}
@@ -21,7 +21,7 @@ var g = class {
21
21
  }
22
22
  }, _ = class {
23
23
  get account() {
24
- throw Error("Can't use auth, missing context provider");
24
+ return null;
25
25
  }
26
26
  async login() {
27
27
  throw Error("Can't use auth, missing context provider");
@@ -407,4 +407,4 @@ var ue = class {
407
407
  //#endregion
408
408
  export { x as a, y as c, $ as i, _ as l, ue as n, b as o, se as r, v as s, ce as t, g as u };
409
409
 
410
- //# sourceMappingURL=auth-C5d3nG1T.js.map
410
+ //# sourceMappingURL=auth-BPQUXz9Q.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-BPQUXz9Q.js","names":["Account","webId","avatarUrl","constructor","NoopAuth","account","login","Error","signup","logout","onSessionUpdated","undefined","createContext","NoopAuth","DEFAULT_AUTH_CONTEXT","authContext","Symbol","generateId","Dialog","id","template","element","_resolveElement","constructor","Promise","resolve","setElement","ShowDialogEvent","Dialog","showDialog","template","dialog","document","dispatchEvent","element","customElement","WebComponent","html","nothing","consume","property","query","state","authContext","DEFAULT_AUTH_CONTEXT","getSuggestedIssuers","styles","_classDecs","_LoginModal","_LoginModal2","_A","WeakMap","_B","_C","_D","_E","_F","_ref","_issuerUrlDecs","type","String","reflect","_issuerInputValueDecs","_failedDecs","_submittingDecs","_authDecs","context","subscribe","_dialogDecs","_LoginModal3","LoginModal","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_issuerUrl","_init_issuerInputValue","_init_failed","_init_submitting","_init_auth","_init_dialog","_classPrivateFieldGet","issuerUrl","v","_classPrivateFieldSet","issuerInputValue","failed","submitting","auth","dialog","connectedCallback","localStorage","getItem","render","suggestedIssuers","onSubmit","onIssuerInputChange","map","issuer","uri","name","close","e","target","value","preventDefault","login","error","console","c","_initClass","_applyDecs","_Class","_identity","_defineProperty","default","LoginModal","authSession","solidLogicSingleton","Account","showDialog","html","ns","DEFAULT_SIGNUP_URL","findAccountImage","webId","store","me","sym","image","any","sioc","foaf","vcard","value","undefined","SolidAuth","constructor","signupUrl","account","info","isActive","isLoggedIn","Boolean","avatarUrl","login","loginUrl","updater","flagAuthorizationMetadata","preLoginRedirectHash","URL","window","location","href","hash","localStorage","setItem","locationUrl","signup","open","logout","onSessionUpdated","callback","sessionEventTarget","listener","addEventListener","events","on","removeEventListener","off"],"sources":["../../src/lib/auth/Account.ts","../../src/lib/auth/NoopAuth.ts","../../src/lib/auth/context.ts","../../src/lib/dialogs/Dialog.ts","../../src/lib/dialogs/helpers.ts","../../src/components/login-modal/LoginModal.styles.css","../../src/components/login-modal/LoginModal.ts","../../src/components/login-modal/index.ts","../../src/lib/auth/SolidAuth.ts"],"sourcesContent":["export default class Account {\n public readonly webId: string\n public readonly avatarUrl?: string\n\n constructor (webId: string, avatarUrl?: string) {\n this.webId = webId\n this.avatarUrl = avatarUrl\n }\n}\n","import { AuthContext } from './context'\nimport Account from './Account'\n\nexport default class NoopAuth implements AuthContext {\n get account (): Account | null {\n return null\n }\n\n async login () {\n throw new Error('Can\\'t use auth, missing context provider')\n }\n\n async signup () {\n throw new Error('Can\\'t use auth, missing context provider')\n }\n\n async logout () {\n throw new Error('Can\\'t use auth, missing context provider')\n }\n\n onSessionUpdated () {\n return () => undefined\n }\n}\n","import { createContext } from '@lit/context'\nimport NoopAuth from './NoopAuth'\nimport Account from './Account'\n\nexport interface AuthContext {\n account: Account | null;\n login(loginUrl?: string): Promise<void>;\n signup(): Promise<void>;\n logout(): Promise<void>;\n onSessionUpdated(callback: () => unknown): () => void;\n}\n\nexport const DEFAULT_AUTH_CONTEXT = new NoopAuth()\nexport const authContext = createContext<AuthContext>(Symbol('auth'))\n","import { TemplateResult } from 'lit'\nimport { generateId } from '@/lib/components'\n\nexport default class Dialog {\n public readonly id: string\n public readonly template: TemplateResult\n public readonly element: Promise<HTMLElement>\n private _resolveElement!: (element: HTMLElement) => void\n\n constructor (template: TemplateResult) {\n this.id = generateId()\n this.template = template\n this.element = new Promise(resolve => {\n this._resolveElement = resolve\n })\n }\n\n setElement (element: HTMLElement) {\n this._resolveElement(element)\n }\n}\n","import { TemplateResult } from 'lit'\nimport { ShowDialogEvent } from './events/show-dialog'\nimport Dialog from './Dialog'\n\nexport function showDialog<T extends HTMLElement = HTMLElement> (template: TemplateResult): Promise<T> {\n const dialog = new Dialog(template)\n\n document.dispatchEvent(new ShowDialogEvent(dialog))\n\n return dialog.element as Promise<T>\n}\n",".error-message {\n color: var(--solid-ui-color-error);\n font-size: var(--solid-ui-font-size-sm);\n font-weight: 500;\n text-align: center;\n width: 100%;\n}\n\nsolid-ui-combobox {\n width: 100%;\n}\n\nsolid-ui-button {\n flex: 1;\n}\n","import { customElement, WebComponent } from '@/lib/components'\nimport { html, nothing } from 'lit'\nimport { consume } from '@lit/context'\nimport { property, query, state } from 'lit/decorators.js'\nimport { AuthContext, authContext, DEFAULT_AUTH_CONTEXT } from '@/lib/auth'\nimport { getSuggestedIssuers } from 'solid-logic'\nimport type Dialog from '@/components/dialog'\nimport type Combobox from '@/components/combobox'\n\nimport '~icons/lucide/chevron-down'\nimport '@/components/dialog'\nimport '@/components/dialog-content'\nimport '@/components/dialog-footer'\nimport '@/components/button'\nimport '@/components/combobox'\nimport '@/components/combobox-option'\n\nimport styles from './LoginModal.styles.css'\n\n@customElement('solid-ui-login-modal')\nexport default class LoginModal extends WebComponent {\n static styles = styles\n\n @property({ type: String, reflect: true })\n accessor issuerUrl = ''\n\n @state()\n private accessor issuerInputValue = ''\n\n @state()\n private accessor failed: boolean = false\n\n @state()\n private accessor submitting: boolean = false\n\n @consume({ context: authContext, subscribe: true })\n private accessor auth: AuthContext = DEFAULT_AUTH_CONTEXT\n\n @query('solid-ui-dialog')\n private accessor dialog: Dialog | null = null\n\n connectedCallback () {\n super.connectedCallback()\n\n this.issuerInputValue = (typeof localStorage !== 'undefined' && localStorage.getItem('loginIssuer')) || this.issuerUrl || ''\n }\n\n protected render () {\n const suggestedIssuers = getSuggestedIssuers()\n\n return html`\n <solid-ui-dialog title=\"Select an identity provider\">\n <form @submit=${this.onSubmit}>\n <solid-ui-dialog-content>\n <solid-ui-combobox label=\"Solid Identity Provider\" .value=${this.issuerInputValue} @input=${this.onIssuerInputChange}>\n ${suggestedIssuers.map(issuer => html`<solid-ui-combobox-option value=\"${issuer.uri}\">${issuer.name}</solid-ui-combobox-option>`)}\n </solid-ui-combobox>\n\n ${this.failed ? html`<p class=\"error-message\">Something went wrong</p>` : nothing}\n </solid-ui-dialog-content>\n\n <solid-ui-dialog-footer>\n <solid-ui-button\n variant=\"secondary\"\n @click=\"${() => this.dialog?.close()}\"\n >\n Cancel\n </solid-ui-button>\n <solid-ui-button\n ?disabled=${!this.issuerInputValue || this.submitting}\n ?loading=${this.submitting}\n type=\"submit\"\n >\n Login\n </solid-ui-button>\n </solid-ui-dialog-footer>\n </form>\n </solid-ui-dialog>\n `\n }\n\n private onIssuerInputChange (e: Event) {\n this.issuerInputValue = (e.target as Combobox).value\n }\n\n private async onSubmit (e: Event) {\n e.preventDefault()\n\n this.failed = false\n\n if (!this.issuerInputValue) {\n return\n }\n\n this.submitting = true\n\n try {\n await this.auth.login(this.issuerInputValue)\n } catch (error) {\n console.error(error)\n\n this.failed = true\n } finally {\n this.submitting = false\n }\n }\n}\n","import LoginModal from './LoginModal'\n\nexport { LoginModal }\nexport default LoginModal\n","import { authSession, solidLogicSingleton } from 'solid-logic'\nimport Account from '@/lib/auth/Account'\nimport { AuthContext } from '@/lib/auth'\nimport { showDialog } from '@/lib/dialogs'\nimport { html } from 'lit'\nimport ns from '@/lib/ns'\n\nimport '@/components/login-modal'\n\nexport const DEFAULT_SIGNUP_URL = 'https://solidproject.org/get_a_pod'\n\nfunction findAccountImage (webId: string): string | undefined {\n const store = solidLogicSingleton.store\n const me = store.sym(webId)\n const image =\n store.any(me, ns.sioc('avatar')) ||\n store.any(me, ns.foaf('img')) ||\n store.any(me, ns.vcard('logo')) ||\n store.any(me, ns.vcard('hasPhoto')) ||\n store.any(me, ns.vcard('photo')) ||\n store.any(me, ns.foaf('depiction'))\n\n return image ? (image as any).value : undefined\n}\n\nexport default class SolidAuth implements AuthContext {\n constructor (public signupUrl: string = DEFAULT_SIGNUP_URL) {}\n\n get account (): Account | null {\n const webId: string | undefined = authSession.webId ?? authSession.info?.webId\n const isActive: boolean = authSession.isActive ?? authSession.info?.isLoggedIn ?? Boolean(webId)\n if (!isActive || !webId) {\n return null\n }\n\n const avatarUrl = findAccountImage(webId)\n\n return new Account(webId, avatarUrl)\n }\n\n async login (loginUrl?: string) {\n if (!loginUrl) {\n showDialog(html`<solid-ui-login-modal></solid-ui-login-modal>`)\n\n return\n }\n\n // clear authorization metadata from store\n ;(solidLogicSingleton.store.updater as any).flagAuthorizationMetadata()\n\n const preLoginRedirectHash = new URL(window.location.href).hash\n if (preLoginRedirectHash) {\n window.localStorage.setItem('preLoginRedirectHash', preLoginRedirectHash)\n }\n window.localStorage.setItem('loginIssuer', loginUrl)\n\n const locationUrl = new URL(window.location.href)\n\n locationUrl.hash = ''\n\n await authSession.login(loginUrl, locationUrl.href)\n }\n\n async signup () {\n window.open(this.signupUrl, '_blank', 'noopener,noreferrer')\n }\n\n async logout () {\n await authSession.logout()\n }\n\n onSessionUpdated (callback: () => unknown) {\n const sessionEventTarget = authSession as unknown as EventTarget\n const listener = () => {\n callback()\n }\n if (typeof sessionEventTarget.addEventListener === 'function') {\n sessionEventTarget.addEventListener('sessionStateChange', listener)\n } else {\n authSession.events.on('login', callback)\n authSession.events.on('logout', callback)\n authSession.events.on('sessionRestore', callback)\n }\n\n return () => {\n if (typeof sessionEventTarget.removeEventListener === 'function') {\n sessionEventTarget.removeEventListener('sessionStateChange', listener)\n } else {\n authSession.events.off('login', callback)\n authSession.events.off('logout', callback)\n authSession.events.off('sessionRestore', callback)\n }\n }\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { c as e, s as t } from "./auth-C5d3nG1T.js";
1
+ import { c as e, s as t } from "./auth-BPQUXz9Q.js";
2
2
  import { t as n } from "./consume-BefsVEGX.js";
3
3
  import { r, t as i } from "./components-Dlw2zOvI.js";
4
4
  import { i as a, s as o } from "./lit-CC2G_f_C.js";
@@ -220,4 +220,4 @@ var M = j;
220
220
  //#endregion
221
221
  export { j as n, M as t };
222
222
 
223
- //# sourceMappingURL=avatar-CsuCQCRu.js.map
223
+ //# sourceMappingURL=avatar-B5DCduCy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"avatar-CsuCQCRu.js","names":["customElement","WebComponent","consume","html","authContext","DEFAULT_AUTH_CONTEXT","styles","_classDecs","_Avatar","_Avatar2","_A","WeakMap","_ref","_authDecs","context","subscribe","_Avatar3","Avatar","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_auth","_classPrivateFieldGet","auth","v","_classPrivateFieldSet","render","account","avatarUrl","e","c","_initClass","_applyDecs","_Class","_identity","_defineProperty","fallback","component","default","Avatar"],"sources":["../../src/components/avatar/Avatar.styles.css","../../src/components/avatar/Avatar.ts","../../src/components/avatar/index.ts"],"sourcesContent":[":host {\n --size: 150px;\n\n display: inline-flex;\n overflow: hidden;\n width: var(--size);\n height: var(--size);\n\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n}\n\n:host(:state(fallback)) {\n background: var(--solid-ui-color-gray-100);\n justify-content: center;\n align-items: center;\n\n icon-lucide-circle-user {\n color: var(--solid-ui-color-gray-200);\n width: 50%;\n height: 50%;\n }\n}\n","import { customElement, WebComponent } from '@/lib/components'\nimport { consume } from '@lit/context'\nimport { html } from 'lit'\nimport { authContext, AuthContext, DEFAULT_AUTH_CONTEXT } from '@/lib/auth'\n\nimport '~icons/lucide/circle-user'\n\nimport styles from './Avatar.styles.css'\n\n@customElement('solid-ui-avatar')\nexport default class Avatar extends WebComponent {\n static styles = styles\n static states = {\n fallback: (component: Avatar) => !component.auth.account?.avatarUrl,\n }\n\n @consume({ context: authContext, subscribe: true })\n private accessor auth: AuthContext = DEFAULT_AUTH_CONTEXT\n\n protected render () {\n if (!this.auth.account?.avatarUrl) {\n return html`\n <icon-lucide-circle-user></icon-lucide-circle-user>\n `\n }\n\n return html`\n <img src=\"${this.auth.account?.avatarUrl}\" alt=\"\" />\n `\n }\n}\n","import Avatar from './Avatar'\n\nexport { Avatar }\nexport default Avatar\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACOwCO,IAAA,CAEvCP,EAAc,iBAAiB,CAAC;AAAA,IAAAQ;AAAA,KAAAC,KAAAC,kBAAA,IAAAC,QAAA,GAAAC,KAAAC,IAO9BX,EAAQ;CAAEY,SAASV;CAAaW,WAAW;AAAK,CAAC,GAAC,SAAAC,IAPrD,cACoCf,EAAa;CAAAiB,YAAA,GAAAC,GAAA;EAAAC,AAAA,MAAA,GAAAD,CAAA,GAAAC,EAAA,MAAAV,IAAAW,EAAA,IAAA,GAAAC,EAAA,MAOVjB,CAAoB,EAAA;CAAA;CAAA,KAAAO,KAAA;EAAA,OAAAW,EAAAb,GAAA,IAAA;CAAA;CAAA,IAAxCc,KAAIC,GAAA;EAAAC,EAAAhB,GAAA,MAAAe,CAAA;CAAA;CAEXE,SAAU;EAOlB,OANK,KAAKH,KAAKI,SAASC,YAMjB1B,CAAI;oBACK,KAAKqB,KAAKI,SAASC,UAAS;QANnC1B,CAAI;;;CAQf;AACF,GAAC,CAAA2B,GAAA,CAAAR,GAAAD,IAAAU,GAAA,CAAAvB,GAAAwB,MAAAC,EAAAjB,GAAA,CAAA;CAAAH;CAAA;CAAA;AAAA,CAAA,GAAAN,GAAA,GAAA,KAAA,GApBmCN,CAAY,GAAAe,IAAAkB,IAAA,cAAAC,EAAA;CAAAjB,cAAA;EAAA,MAAAV,CAAA,GAAA4B,EAAA,MAAA,UAC9B9B,CAAM,GAAA8B,EAAA,MAAA,UACN,EACdC,WAAWC,MAAsB,CAACA,EAAUd,KAAKI,SAASC,UAC5D,CAAC,GAAAG,EAAA;CAAA;AAAA,GAAAI,EAAAF,GAAAzB,GAAA,KAAA,CAAA,GAAAyB,GAAA;;;ACXH,IAAA,IAAeM"}
1
+ {"version":3,"file":"avatar-B5DCduCy.js","names":["customElement","WebComponent","consume","html","authContext","DEFAULT_AUTH_CONTEXT","styles","_classDecs","_Avatar","_Avatar2","_A","WeakMap","_ref","_authDecs","context","subscribe","_Avatar3","Avatar","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_auth","_classPrivateFieldGet","auth","v","_classPrivateFieldSet","render","account","avatarUrl","e","c","_initClass","_applyDecs","_Class","_identity","_defineProperty","fallback","component","default","Avatar"],"sources":["../../src/components/avatar/Avatar.styles.css","../../src/components/avatar/Avatar.ts","../../src/components/avatar/index.ts"],"sourcesContent":[":host {\n --size: 150px;\n\n display: inline-flex;\n overflow: hidden;\n width: var(--size);\n height: var(--size);\n\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n}\n\n:host(:state(fallback)) {\n background: var(--solid-ui-color-gray-100);\n justify-content: center;\n align-items: center;\n\n icon-lucide-circle-user {\n color: var(--solid-ui-color-gray-200);\n width: 50%;\n height: 50%;\n }\n}\n","import { customElement, WebComponent } from '@/lib/components'\nimport { consume } from '@lit/context'\nimport { html } from 'lit'\nimport { authContext, AuthContext, DEFAULT_AUTH_CONTEXT } from '@/lib/auth'\n\nimport '~icons/lucide/circle-user'\n\nimport styles from './Avatar.styles.css'\n\n@customElement('solid-ui-avatar')\nexport default class Avatar extends WebComponent {\n static styles = styles\n static states = {\n fallback: (component: Avatar) => !component.auth.account?.avatarUrl,\n }\n\n @consume({ context: authContext, subscribe: true })\n private accessor auth: AuthContext = DEFAULT_AUTH_CONTEXT\n\n protected render () {\n if (!this.auth.account?.avatarUrl) {\n return html`\n <icon-lucide-circle-user></icon-lucide-circle-user>\n `\n }\n\n return html`\n <img src=\"${this.auth.account?.avatarUrl}\" alt=\"\" />\n `\n }\n}\n","import Avatar from './Avatar'\n\nexport { Avatar }\nexport default Avatar\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACOwCO,IAAA,CAEvCP,EAAc,iBAAiB,CAAC;AAAA,IAAAQ;AAAA,KAAAC,KAAAC,kBAAA,IAAAC,QAAA,GAAAC,KAAAC,IAO9BX,EAAQ;CAAEY,SAASV;CAAaW,WAAW;AAAK,CAAC,GAAC,SAAAC,IAPrD,cACoCf,EAAa;CAAAiB,YAAA,GAAAC,GAAA;EAAAC,AAAA,MAAA,GAAAD,CAAA,GAAAC,EAAA,MAAAV,IAAAW,EAAA,IAAA,GAAAC,EAAA,MAOVjB,CAAoB,EAAA;CAAA;CAAA,KAAAO,KAAA;EAAA,OAAAW,EAAAb,GAAA,IAAA;CAAA;CAAA,IAAxCc,KAAIC,GAAA;EAAAC,EAAAhB,GAAA,MAAAe,CAAA;CAAA;CAEXE,SAAU;EAOlB,OANK,KAAKH,KAAKI,SAASC,YAMjB1B,CAAI;oBACK,KAAKqB,KAAKI,SAASC,UAAS;QANnC1B,CAAI;;;CAQf;AACF,GAAC,CAAA2B,GAAA,CAAAR,GAAAD,IAAAU,GAAA,CAAAvB,GAAAwB,MAAAC,EAAAjB,GAAA,CAAA;CAAAH;CAAA;CAAA;AAAA,CAAA,GAAAN,GAAA,GAAA,KAAA,GApBmCN,CAAY,GAAAe,IAAAkB,IAAA,cAAAC,EAAA;CAAAjB,cAAA;EAAA,MAAAV,CAAA,GAAA4B,EAAA,MAAA,UAC9B9B,CAAM,GAAA8B,EAAA,MAAA,UACN,EACdC,WAAWC,MAAsB,CAACA,EAAUd,KAAKI,SAASC,UAC5D,CAAC,GAAAG,EAAA;CAAA;AAAA,GAAAI,EAAAF,GAAAzB,GAAA,KAAA,CAAA,GAAAyB,GAAA;;;ACXH,IAAA,IAAeM"}
@@ -1,4 +1,4 @@
1
- import { c as e, s as t } from "./auth-C5d3nG1T.js";
1
+ import { c as e, s as t } from "./auth-BPQUXz9Q.js";
2
2
  import { t as n } from "./consume-BefsVEGX.js";
3
3
  import { r, t as i } from "./components-Dlw2zOvI.js";
4
4
  import { i as a } from "./lit-CC2G_f_C.js";
@@ -197,4 +197,4 @@ var T = C;
197
197
  //#endregion
198
198
  export { C as n, T as t };
199
199
 
200
- //# sourceMappingURL=guard-CiRf-2tc.js.map
200
+ //# sourceMappingURL=guard-BIc50Lps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"guard-CiRf-2tc.js","names":["customElement","WebComponent","consume","html","authContext","DEFAULT_AUTH_CONTEXT","_classDecs","_Guard","_A","WeakMap","_ref","_authDecs","context","subscribe","Guard","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_auth","_classPrivateFieldGet","auth","v","_classPrivateFieldSet","render","account","_Guard2","e","c","_initClass","_applyDecs","default","Guard"],"sources":["../../src/components/guard/Guard.ts","../../src/components/guard/index.ts"],"sourcesContent":["import { customElement, WebComponent } from '@/lib/components'\nimport { consume } from '@lit/context'\nimport { html } from 'lit'\nimport { authContext, AuthContext, DEFAULT_AUTH_CONTEXT } from '@/lib/auth'\n\n@customElement('solid-guard')\nexport default class Guard extends WebComponent {\n @consume({ context: authContext, subscribe: true })\n private accessor auth: AuthContext = DEFAULT_AUTH_CONTEXT\n\n protected render () {\n if (!this.auth.account) {\n return html`\n <slot name=\"guest\"></slot>\n `\n }\n\n return html`\n <slot></slot>\n `\n }\n}\n","import Guard from './Guard'\n\nexport { Guard }\nexport default Guard\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAG2EM,IAAA,CAE1EN,EAAc,aAAa,CAAC;AAAA,IAAAO,GAAAC,kBAAA,IAAAC,QAAA;AAAAC,KAAAC,IAE1BT,EAAQ;CAAEU,SAASR;CAAaS,WAAW;AAAK,CAAC,GAAC,SAcpDa,IAAAZ,cAfkCb,EAAa;CAAAc,YAAA,GAAAC,GAAA;EAAAC,AAAA,MAAA,GAAAD,CAAA,GAAAC,EAAA,MAAAT,IAAAU,EAAA,IAAA,GAAAC,EAAA,MAETd,CAAoB,EAAA;CAAA;CAAA,KAAAK,KAAA;EAAA,OAAAU,EAAAZ,GAAA,IAAA;CAAA;CAAA,IAAxCa,KAAIC,GAAA;EAAAC,EAAAf,GAAA,MAAAc,CAAA;CAAA;CAEXE,SAAU;EAOlB,OANK,KAAKH,KAAKI,UAMRtB,CAAI;;QALFA,CAAI;;;CAQf;AACF,GAAC,CAAAwB,GAAA,CAAAR,GAAAD,IAAAU,GAAA,CAAArB,GAAAsB,MAAAC,EAAAJ,GAAA,CAAA;CAAAf;CAAA;CAAA;AAAA,CAAA,GAAAL,GAAA,GAAA,KAAA,GAfkCL,CAAY,GAAA4B,EAAA;;;ACH/C,IAAA,IAAeG"}
1
+ {"version":3,"file":"guard-BIc50Lps.js","names":["customElement","WebComponent","consume","html","authContext","DEFAULT_AUTH_CONTEXT","_classDecs","_Guard","_A","WeakMap","_ref","_authDecs","context","subscribe","Guard","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_auth","_classPrivateFieldGet","auth","v","_classPrivateFieldSet","render","account","_Guard2","e","c","_initClass","_applyDecs","default","Guard"],"sources":["../../src/components/guard/Guard.ts","../../src/components/guard/index.ts"],"sourcesContent":["import { customElement, WebComponent } from '@/lib/components'\nimport { consume } from '@lit/context'\nimport { html } from 'lit'\nimport { authContext, AuthContext, DEFAULT_AUTH_CONTEXT } from '@/lib/auth'\n\n@customElement('solid-guard')\nexport default class Guard extends WebComponent {\n @consume({ context: authContext, subscribe: true })\n private accessor auth: AuthContext = DEFAULT_AUTH_CONTEXT\n\n protected render () {\n if (!this.auth.account) {\n return html`\n <slot name=\"guest\"></slot>\n `\n }\n\n return html`\n <slot></slot>\n `\n }\n}\n","import Guard from './Guard'\n\nexport { Guard }\nexport default Guard\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAG2EM,IAAA,CAE1EN,EAAc,aAAa,CAAC;AAAA,IAAAO,GAAAC,kBAAA,IAAAC,QAAA;AAAAC,KAAAC,IAE1BT,EAAQ;CAAEU,SAASR;CAAaS,WAAW;AAAK,CAAC,GAAC,SAcpDa,IAAAZ,cAfkCb,EAAa;CAAAc,YAAA,GAAAC,GAAA;EAAAC,AAAA,MAAA,GAAAD,CAAA,GAAAC,EAAA,MAAAT,IAAAU,EAAA,IAAA,GAAAC,EAAA,MAETd,CAAoB,EAAA;CAAA;CAAA,KAAAK,KAAA;EAAA,OAAAU,EAAAZ,GAAA,IAAA;CAAA;CAAA,IAAxCa,KAAIC,GAAA;EAAAC,EAAAf,GAAA,MAAAc,CAAA;CAAA;CAEXE,SAAU;EAOlB,OANK,KAAKH,KAAKI,UAMRtB,CAAI;;QALFA,CAAI;;;CAQf;AACF,GAAC,CAAAwB,GAAA,CAAAR,GAAAD,IAAAU,GAAA,CAAArB,GAAAsB,MAAAC,EAAAJ,GAAA,CAAA;CAAAf;CAAA;CAAA;AAAA,CAAA,GAAAL,GAAA,GAAA,KAAA,GAfkCL,CAAY,GAAA4B,EAAA;;;ACH/C,IAAA,IAAeG"}
@@ -1,8 +1,8 @@
1
1
  import { c as e, d as t, f as n, m as r, p as i, u as a } from "./solid-logic.esm-7q6hmfIF.js";
2
2
  import { n as o } from "./iconBase-DJ0zbNSL.js";
3
3
  import { i as s, n as c, s as l, t as u } from "./lit-CC2G_f_C.js";
4
- import "./account-BUAN8dcJ.js";
5
- import "./provider-C7cgeyP2.js";
4
+ import "./account-B4BktCv0.js";
5
+ import "./provider-uRz_fGWb.js";
6
6
  //#region src/v2/components/auth/loginButton/downArrow.ts
7
7
  var d = s`
8
8
  <svg xmlns="http://www.w3.org/2000/svg"
@@ -1483,4 +1483,4 @@ customElements.get(T) || customElements.define(T, w);
1483
1483
  //#endregion
1484
1484
  export { w as t };
1485
1485
 
1486
- //# sourceMappingURL=header-hptVqz21.js.map
1486
+ //# sourceMappingURL=header-0TLBh_PG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"header-hptVqz21.js","names":["html","phoneIcon","LitElement","html","css","authSession","authn","getSuggestedIssuers","offlineTestID","solidLogicSingleton","phoneIcon","downArrowIcon","LoginButton","properties","label","type","String","reflect","theme","issuerUrl","attribute","icon","layout","_popupOpen","state","_issuerInputValue","_dropdownOpen","styles","_issuerInputId","Math","random","toString","slice","_errorMsg","constructor","connectedCallback","disconnectedCallback","_openPopup","offline","_loginComplete","uri","localStorage","getItem","_closePopup","updated","dialog","shadowRoot","querySelector","open","showModal","close","_loginToIssuer","issuerUri","store","updater","flagAuthorizationMetadata","preLoginRedirectHash","URL","window","location","href","hash","setItem","locationUrl","login","err","message","requestUpdate","webIdUri","saveUser","dispatchEvent","CustomEvent","detail","webId","bubbles","composed","_handleGoClick","_toggleDropdown","_selectIssuerFromDropdown","_handleInputChange","e","target","value","_handleInputKeydown","key","_renderPopup","suggestedIssuers","length","map","issuerInfo","name","render","preventDefault","currentTarget","LoginButton","LOGIN_BUTTON_TAG_NAME","customElements","get","define","LitElement","html","css","DEFAULT_SIGNUP_URL","SignupButton","properties","label","type","String","reflect","theme","signupUrl","attribute","icon","layout","styles","constructor","_handleClick","window","open","render","SignupButton","SIGNUP_BUTTON_TAG_NAME","customElements","get","define","t","Features","DESIGN_SYSTEM_HEADER_ACCOUNT","LitElement","html","css","icons","authSession","authn","performServerSideLogout","ifDefined","Features","DEFAULT_HELP_MENU_ICON","DEFAULT_SOLID_ICON_URL","DEFAULT_SIGNUP_URL","DEFAULT_LOGGEDIN_MENU_BUTTON_AVATAR","iconBase","clearPersistedAuthState","window","explicitKeys","key","localStorage","removeItem","sessionStorage","indexedDB","databases","dbName","Promise","resolve","request","deleteDatabase","onsuccess","onerror","onblocked","_err","Header","properties","logo","type","String","reflect","helpIcon","attribute","layout","theme","brandLink","authState","loginAction","Object","signUpAction","accountMenu","Array","logoutLabel","logoutIcon","accountIcon","accountAvatar","accountAvatarFallback","loginIcon","signUpIcon","helpMenuList","accountMenuOpen","state","helpMenuOpen","hasSlottedAccountMenu","hasSlottedHelpMenu","authResolved","styles","_refreshPromise","handleAuthSessionChange","refreshAuthStateFromSession","catch","constructor","label","action","url","connectedCallback","document","addEventListener","handleDocumentClick","handleWindowKeydown","events","on","disconnectedCallback","removeEventListener","off","checkUser","currentUser","handleHelpMenuClick","item","event","preventDefault","dispatchEvent","CustomEvent","detail","bubbles","composed","target","features","undefined","open","handleAccountMenuClick","composedPath","includes","handleAccountSlotChange","slot","assignedElements","flatten","length","handleHelpSlotChange","toggleAccountMenu","hasAccountMenuItems","toggleHelpMenu","hasHelpMenuItems","Boolean","shouldRenderHelpMenu","renderLoggedInAvatar","avatar","wrapperClass","hasAvatar","imageSrc","imageAlt","renderLoggedOutActions","icon","handleLoginSuccess","role","handleLogout","issuer","getItem","logout","redirectedToServerLogout","postLogoutRedirectPath","renderAccountMenuItem","content","webid","renderLoggedInActions","e","map","renderUserArea","DESIGN_SYSTEM_HEADER_ACCOUNT","firstUpdated","shadowRoot","getElementById","classList","toggle","updated","changedProperties","has","render","Header","HEADER_TAG_NAME","customElements","get","define"],"sources":["../../src/v2/components/auth/loginButton/downArrow.ts","../../src/v2/components/auth/loginButton/LoginButton.ts","../../src/v2/components/auth/loginButton/index.ts","../../src/v2/components/auth/signupButton/SignupButton.ts","../../src/v2/components/auth/signupButton/index.ts","../../node_modules/lit-html/directives/if-defined.js","../../src/lib/features.ts","../../src/v2/components/layout/header/Header.ts","../../src/v2/components/layout/header/index.ts"],"sourcesContent":["import { html } from 'lit-html'\n\nexport const phoneIcon = html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" \n viewBox=\"0 0 12 7\" \n fill=\"none\"\n >\n <path d=\"M0.679688 0.678955L5.50729 5.50656L10.3349 0.678955\" stroke=\"#6A7282\" stroke-width=\"1.35776\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n`\n","import { LitElement, html, css } from 'lit'\nimport { authSession, authn, getSuggestedIssuers, offlineTestID, solidLogicSingleton } from 'solid-logic'\nimport { phoneIcon as downArrowIcon } from './downArrow'\n\nexport class LoginButton extends LitElement {\n static properties = {\n label: { type: String, reflect: true },\n theme: { type: String, reflect: true },\n issuerUrl: { type: String, attribute: 'issuer-url', reflect: true },\n icon: { type: String, reflect: true },\n layout: { type: String, reflect: true },\n _popupOpen: { state: true },\n _issuerInputValue: { state: true },\n _dropdownOpen: { state: true }\n }\n\n static styles = css`\n :host { /* default theme */\n display: inline-block;\n position: relative;\n z-index: 400;\n --login-button-background: var(--lavender-900, #7c4cff);\n --login-button-text: var(--color-header-text, #ffffff);\n --popup-background: var(--color-background, #F8F9FB);\n --popup-text: var(--color-text, #1A1A1A);\n --popup-border: var(--color-border, #E5E7EB);\n --popup-shadow: var(--box-shadow-sm, 0 1px 4px rgba(124,77,255,0.12));\n --popup-overlay-background: rgba(0, 0, 0, 0.6);\n --issuer-input-background: var(--color-background, #F8F9FB);\n --issuer-input-text: var(--color-text, #1A1A1A);\n --issuer-input-border: var(--color-text, #1A1A1A);\n --issuer-button-background: var(--color-background, #F8F9FB);\n --issuer-button-text: var(--color-text, #1A1A1A);\n --issuer-button-border: var(--color-border, #E5E7EB);\n --issuer-button-hover-background: var(--lavender-900, #7c4cff);\n --issuer-label-color: var(--grey-purple-700, #1A1A1A);\n --issuer-placeholder-color: var(--grey-purple-700, #5e546d);;\n --error-text-color: var(--color-error, #B00020);\n }\n\n :host([theme='dark']) {\n display: inline-block;\n position: relative;\n z-index: 900;\n --login-button-background: var(--lavender-900, #7c4cff);\n --login-button-text: var(--color-header-text, #ffffff);\n --popup-background: var(--color-background, #F8F9FB);\n --popup-text: var(--color-text, #1A1A1A);\n --popup-border: var(--color-border, #E5E7EB);\n --popup-shadow: var(--box-shadow-sm, 0 1px 4px rgba(124,77,255,0.12));\n --popup-overlay-background: rgba(0, 0, 0, 0.6);\n --issuer-input-background: var(--color-background, #F8F9FB);\n --issuer-input-text: var(--color-text, #1A1A1A);\n --issuer-input-border: var(--color-text, #1A1A1A);\n --issuer-button-background: var(--color-background, #F8F9FB);\n --issuer-button-text: var(--color-text, #1A1A1A);\n --issuer-button-border: var(--color-text, #1A1A1A);\n --issuer-button-hover-background: var(--lavender-900, #7c4cff);\n --issuer-label-color: var(--grey-purple-700, #1A1A1A);\n --issuer-placeholder-color: var(--grey-purple-700, #5e546d);;\n --error-text-color: var(--color-error, #B00020);\n }\n\n .login-button {\n display: flex;\n height: 35px;\n padding: var(--spacing-xxs, 0.3125rem) var(--spacing-xs, 0.75rem);\n align-items: center;\n gap: var(--spacing-xxs, 0.3125rem);\n border-radius: var(--border-radius-base, 0.3125rem);\n background: var(--login-button-background);\n border: none;\n color: var(--login-button-text);\n cursor: pointer;\n font: inherit;\n line-height: 1;\n white-space: nowrap;\n text-decoration: none;\n box-sizing: border-box;\n transition: transform 0.2s ease;\n }\n\n .login-button-icon {\n width: 16px;\n height: 16px;\n display: inline-block;\n object-fit: contain;\n }\n\n .login-button:active {\n transform: translateY(1px);\n }\n\n .popup-dialog {\n border: none;\n padding: 0;\n background: transparent;\n outline: none;\n overflow: visible;\n width: min(30rem, calc(100vw - 2rem));\n max-width: calc(100vw - 2rem);\n max-height: calc(100dvh - 2rem);\n }\n\n .popup-dialog::backdrop {\n background: var(--popup-overlay-background, rgba(0, 0, 0, 0.6));\n }\n\n .popup-box {\n background: var(--popup-background);\n color: var(--popup-text);\n box-shadow: var(--popup-shadow);\n border: 1px solid var(--popup-border);\n border-radius: var(--border-radius-md, 0.5rem);\n width: min(30rem, calc(100vw - 2rem));\n min-width: min(30rem, calc(100vw - 2rem));\n max-width: calc(100vw - 2rem);\n max-height: calc(100dvh - 2rem);\n overflow: auto;\n z-index: 1001;\n }\n\n .popup-top-menu {\n border-bottom: 1px solid #DDD;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding-bottom: 8px;\n margin-bottom: 8px;\n padding: 1rem;\n background: var(--gray-200, #E5E7EB);\n }\n\n .popup-title {\n font-weight: 800;\n }\n\n .popup-close {\n background: transparent;\n border: none;\n cursor: pointer;\n font-size: 1.25rem;\n line-height: 1;\n padding: 0 0.25rem;\n }\n\n .issuer-text-section {\n display: flex;\n flex-direction: column;\n padding: 1rem 1rem 1.75rem;\n }\n\n .issuer-text-label {\n color: var(--issuer-label-color);\n margin-bottom: 6px;\n }\n\n .issuer-text-row {\n display: flex;\n flex-direction: row;\n gap: 6px;\n align-items: flex-start;\n }\n\n .issuer-input-wrapper {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-width: 0;\n position: relative;\n }\n\n .issuer-input-field-row {\n display: flex;\n flex-direction: row;\n position: relative;\n }\n\n .issuer-text-input {\n flex: 1;\n padding: 0.375rem 2.75rem 0.375rem 0.5rem;\n border: 1px solid var(--issuer-input-border);\n border-radius: var(--border-radius-base, 0.3125rem);\n background: var(--issuer-input-background);\n color: var(--issuer-input-text);\n font: inherit;\n min-width: 0;\n }\n\n .issuer-text-input::placeholder {\n color: var(--issuer-placeholder-color);\n }\n\n .issuer-dropdown-toggle {\n position: absolute;\n right: 6px;\n top: 50%;\n transform: translateY(-50%);\n width: 26px;\n height: 26px;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n border-radius: var(--border-radius-base, 0.3125rem);\n }\n\n .issuer-dropdown-toggle:hover {\n background: var(--color-header-menu-item-hover, #e6dcff);\n }\n\n .issuer-dropdown-toggle svg {\n width: 14px;\n height: 14px;\n display: block;\n }\n\n .issuer-dropdown-list {\n position: absolute;\n top: calc(100% + 6px);\n left: 0;\n right: 0;\n border: 1px solid var(--color-border, #E5E7EB);\n border-top: none;\n border-radius: 0 0 var(--border-radius-base, 0.3125rem) var(--border-radius-base, 0.3125rem);\n background: var(--issuer-input-background);\n overflow: visible;\n z-index: 10;\n box-shadow: 0 4px 12px rgba(124, 77, 255, 0.12);\n }\n\n .issuer-dropdown-item {\n display: block;\n width: 100%;\n padding: 0.625rem 0.75rem;\n border: none;\n border-bottom: 1px solid var(--color-border, #E5E7EB);\n background: transparent;\n color: var(--issuer-button-text);\n cursor: pointer;\n font: inherit;\n text-align: left;\n box-sizing: border-box;\n }\n\n .issuer-dropdown-item:last-child {\n border-bottom: none;\n }\n\n .issuer-dropdown-item:hover {\n background: var(--color-header-menu-item-hover, #e6dcff);\n border-radius: var(--border-radius-base-md, 0.5rem);\n }\n\n .popup-footer {\n display: flex;\n flex-direction: row;\n justify-content: center;\n gap: 8px;\n padding: 0.75rem 1rem 1rem;\n }\n\n .popup-footer-hr {\n margin: 0;\n border: none;\n border-top: 1px solid var(--popup-border, #E5E7EB);\n }\n\n .popup-cancel-button {\n padding: 0.5rem 1.25rem;\n border: 1px solid #C0BFC7;\n border-radius: var(--border-radius-base, 0.3125rem);\n background: var(--popup-background);\n color: #314158;\n cursor: pointer;\n font: inherit;\n }\n\n .popup-cancel-button:hover {\n background: #D1D5DB;\n }\n\n .popup-login-button {\n padding: 0.5rem 1.25rem;\n border: none;\n border-radius: var(--border-radius-base, 0.3125rem);\n background: var(--lavender-900, #7c4cff);\n color: #ffffff;\n cursor: pointer;\n font: inherit;\n }\n\n .popup-login-button:hover {\n background: #6a3de8;\n }\n\n .popup-login-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .error-msg {\n color: var(--error-text-color);\n font-size: 0.875rem;\n margin-top: 8px;\n }\n\n @media (max-width: 40rem) {\n .popup-dialog {\n width: calc(100vw - 1rem);\n max-width: calc(100vw - 1rem);\n max-height: calc(100dvh - 1rem);\n }\n\n .popup-box {\n width: calc(100vw - 1rem);\n min-width: 0;\n max-width: calc(100vw - 1rem);\n max-height: calc(100dvh - 1rem);\n border-radius: var(--border-radius-base, 0.3125rem);\n }\n\n .popup-top-menu,\n .issuer-text-section,\n .popup-footer {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n }\n\n .popup-footer {\n flex-wrap: wrap;\n gap: 0.625rem;\n }\n\n .popup-footer > button {\n flex: 1 1 100%;\n }\n\n .issuer-text-row,\n .issuer-input-field-row {\n width: 100%;\n }\n }\n `\n\n declare label: string\n declare theme: 'light' | 'dark'\n declare issuerUrl: string\n declare icon: string\n declare layout: 'desktop' | 'mobile'\n declare _popupOpen: boolean\n declare _issuerInputValue: string\n declare _dropdownOpen: boolean\n\n private _issuerInputId = `issuer-url-input-${Math.random().toString(36).slice(2, 10)}`\n private _errorMsg = ''\n\n constructor () {\n super()\n this.label = 'Log In'\n this.theme = 'light'\n this.issuerUrl = ''\n this.icon = ''\n this.layout = 'desktop'\n this._popupOpen = false\n this._issuerInputValue = ''\n this._dropdownOpen = false\n }\n\n connectedCallback () {\n super.connectedCallback()\n }\n\n disconnectedCallback () {\n super.disconnectedCallback()\n }\n\n private _openPopup () {\n const offline = offlineTestID()\n if (offline) {\n this._loginComplete(offline.uri)\n return\n }\n this._issuerInputValue = (typeof localStorage !== 'undefined' && localStorage.getItem('loginIssuer')) || this.issuerUrl || ''\n this._errorMsg = ''\n this._popupOpen = true\n }\n\n private _closePopup () {\n this._popupOpen = false\n }\n\n updated () {\n const dialog = this.shadowRoot?.querySelector('dialog') as HTMLDialogElement | null\n if (!dialog) return\n if (this._popupOpen && !dialog.open) {\n dialog.showModal()\n } else if (!this._popupOpen && dialog.open) {\n dialog.close()\n }\n }\n\n private async _loginToIssuer (issuerUri: string) {\n if (!issuerUri) return\n try {\n // clear authorization metadata from store\n ;(solidLogicSingleton.store.updater as any).flagAuthorizationMetadata()\n\n const preLoginRedirectHash = new URL(window.location.href).hash\n if (preLoginRedirectHash) {\n window.localStorage.setItem('preLoginRedirectHash', preLoginRedirectHash)\n }\n window.localStorage.setItem('loginIssuer', issuerUri)\n\n const locationUrl = new URL(window.location.href)\n locationUrl.hash = ''\n await authSession.login(issuerUri, locationUrl.href)\n } catch (err: any) {\n this._errorMsg = err.message || String(err)\n this.requestUpdate()\n }\n }\n\n private _loginComplete (webIdUri: string) {\n authn.saveUser(webIdUri)\n this.dispatchEvent(new CustomEvent('login-success', {\n detail: { webId: webIdUri },\n bubbles: true,\n composed: true\n }))\n }\n\n private _handleGoClick () {\n this._dropdownOpen = false\n this._loginToIssuer(this._issuerInputValue)\n }\n\n private _toggleDropdown () {\n this._dropdownOpen = !this._dropdownOpen\n }\n\n private _selectIssuerFromDropdown (uri: string) {\n this._issuerInputValue = uri\n this._dropdownOpen = false\n }\n\n private _handleInputChange (e: Event) {\n this._issuerInputValue = (e.target as HTMLInputElement).value\n }\n\n private _handleInputKeydown (e: KeyboardEvent) {\n if (e.key === 'Enter') {\n this._loginToIssuer(this._issuerInputValue)\n }\n if (e.key === 'Escape') {\n this._closePopup()\n }\n }\n\n private _renderPopup () {\n const suggestedIssuers = getSuggestedIssuers()\n return html`\n <div class=\"popup-box\">\n <div class=\"popup-top-menu\">\n <span class=\"popup-title\">Select an identity provider</span>\n <button class=\"popup-close\" type=\"button\" aria-label=\"Close\" @click=\"${() => this._closePopup()}\">&#x2715;</button>\n </div>\n\n <div class=\"issuer-text-section\">\n <label class=\"issuer-text-label\" for=\"${this._issuerInputId}\">Solid Identity Provider</label>\n <div class=\"issuer-text-row\">\n <div class=\"issuer-input-wrapper\">\n <div class=\"issuer-input-field-row\">\n <input\n id=\"${this._issuerInputId}\"\n class=\"issuer-text-input\"\n type=\"text\"\n placeholder=\"https://example.com\"\n .value=\"${this._issuerInputValue}\"\n @input=\"${this._handleInputChange}\"\n @keydown=\"${this._handleInputKeydown}\"\n autocomplete=\"url\"\n />\n ${suggestedIssuers.length\n? html`\n <button\n class=\"issuer-dropdown-toggle\"\n type=\"button\"\n aria-label=\"Show identity provider suggestions\"\n aria-expanded=\"${this._dropdownOpen}\"\n @click=\"${() => this._toggleDropdown()}\"\n >${downArrowIcon}</button>\n `\n: ''}\n </div>\n ${this._dropdownOpen && suggestedIssuers.length\n? html`\n <div class=\"issuer-dropdown-list\" role=\"listbox\">\n ${suggestedIssuers.map(issuerInfo => html`\n <button\n class=\"issuer-dropdown-item\"\n type=\"button\"\n role=\"option\"\n @click=\"${() => this._selectIssuerFromDropdown(issuerInfo.uri)}\"\n >${issuerInfo.name}</button>\n `)}\n </div>\n `\n: ''}\n </div>\n </div>\n ${this._errorMsg ? html`<div class=\"error-msg\">${this._errorMsg}</div>` : ''}\n </div>\n <hr class=\"popup-footer-hr\" />\n <div class=\"popup-footer\">\n <button class=\"popup-cancel-button\" type=\"button\" @click=\"${() => this._closePopup()}\">Cancel</button>\n <button\n class=\"popup-login-button\"\n type=\"button\"\n ?disabled=\"${!this._issuerInputValue}\"\n @click=\"${() => this._handleGoClick()}\"\n >Log In</button>\n </div>\n </div>\n `\n }\n\n render () {\n return html`\n <button\n class=\"login-button\"\n type=\"button\"\n part=\"login-button\"\n @click=\"${() => this._openPopup()}\"\n >\n ${this.icon ? html`<img class=\"login-button-icon\" src=\"${this.icon}\" alt=\"\" aria-hidden=\"true\" part=\"login-button-icon\" />` : ''}\n <slot>${this.label}</slot>\n </button>\n\n <dialog\n class=\"popup-dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Select an identity provider\"\n @cancel=\"${(e: Event) => { e.preventDefault(); this._closePopup() }}\"\n @click=\"${(e: MouseEvent) => { if (e.target === e.currentTarget) this._closePopup() }}\"\n >\n ${this._popupOpen ? this._renderPopup() : ''}\n </dialog>\n `\n }\n}\n","import { LoginButton } from './LoginButton'\n\nexport { LoginButton }\n\nconst LOGIN_BUTTON_TAG_NAME = 'solid-ui-login-button'\n\nif (!customElements.get(LOGIN_BUTTON_TAG_NAME)) {\n customElements.define(LOGIN_BUTTON_TAG_NAME, LoginButton)\n}\n","import { LitElement, html, css } from 'lit'\n\nconst DEFAULT_SIGNUP_URL = 'https://solidproject.org/get_a_pod'\n\nexport class SignupButton extends LitElement {\n static properties = {\n label: { type: String, reflect: true },\n theme: { type: String, reflect: true },\n signupUrl: { type: String, attribute: 'signup-url', reflect: true },\n icon: { type: String, reflect: true },\n layout: { type: String, reflect: true }\n }\n\n static styles = css`\n :host {\n display: inline-block;\n --signup-button-background: transparent;\n --signup-button-border: var(--color-border, #E5E7EB);\n --signup-button-text: var(--color-header-text, #ffffff);\n }\n\n :host([theme='dark']) {\n --signup-button-background: transparent;\n --signup-button-border: var(--color-border, #E5E7EB);\n --signup-button-text: var(--color-header-text, #ffffff);\n }\n\n .signup-button {\n display: flex;\n height: 35px;\n padding: var(--spacing-xxs, 0.3125rem) var(--spacing-xs, 0.75rem);\n align-items: center;\n gap: var(--spacing-xxs, 0.3125rem);\n border-radius: var(--border-radius-base, 0.3125rem);\n background: var(--signup-button-background);\n border: 1px solid var(--signup-button-border);\n color: var(--signup-button-text);\n cursor: pointer;\n font: inherit;\n line-height: 1;\n white-space: nowrap;\n text-decoration: none;\n box-sizing: border-box;\n transition: transform 0.2s ease;\n }\n\n :host([layout='mobile']) .signup-button {\n border: none;\n }\n\n .signup-button-icon {\n width: 16px;\n height: 16px;\n display: inline-block;\n object-fit: contain;\n }\n\n .signup-button:active {\n transform: translateY(1px);\n }\n `\n\n declare label: string\n declare theme: 'light' | 'dark'\n declare signupUrl: string\n declare icon: string\n declare layout: 'desktop' | 'mobile'\n\n constructor () {\n super()\n this.label = 'Sign Up'\n this.signupUrl = DEFAULT_SIGNUP_URL\n this.theme = 'light'\n this.icon = ''\n this.layout = 'desktop'\n }\n\n private _handleClick () {\n window.open(this.signupUrl, '_blank', 'noopener,noreferrer')\n }\n\n render () {\n return html`\n <button\n class=\"signup-button\"\n type=\"button\"\n part=\"signup-button\"\n @click=\"${() => this._handleClick()}\"\n >\n ${this.icon ? html`<img class=\"signup-button-icon\" src=\"${this.icon}\" alt=\"\" aria-hidden=\"true\" part=\"signup-button-icon\" />` : ''}\n <slot>${this.label}</slot>\n </button>\n `\n }\n}\n","import { SignupButton } from './SignupButton'\n\nexport { SignupButton }\n\nconst SIGNUP_BUTTON_TAG_NAME = 'solid-ui-signup-button'\n\nif (!customElements.get(SIGNUP_BUTTON_TAG_NAME)) {\n customElements.define(SIGNUP_BUTTON_TAG_NAME, SignupButton)\n}\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 * This file is used to enable or disable experimental features using feature flags.\n */\n\nconst Features = {\n DESIGN_SYSTEM_HEADER_ACCOUNT: true,\n}\n\nexport default Features\n","import { LitElement, html, css } from 'lit'\nimport { icons } from '../../../../lib/iconBase'\nimport { authSession, authn, performServerSideLogout } from 'solid-logic'\nimport '../../auth/loginButton/index'\nimport '../../auth/signupButton/index'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\nimport '@/components/account'\nimport '@/components/provider'\nimport Features from '../../../../lib/features'\n\nconst DEFAULT_HELP_MENU_ICON = ''\nconst DEFAULT_SOLID_ICON_URL = 'https://solidproject.org/assets/img/solid-emblem.svg'\nconst DEFAULT_SIGNUP_URL = 'https://solidproject.org/get_a_pod'\nconst DEFAULT_LOGGEDIN_MENU_BUTTON_AVATAR = icons.iconBase + 'emptyProfileAvatar.png'\n\nasync function clearPersistedAuthState (): Promise<void> {\n if (typeof window === 'undefined') {\n return\n }\n\n const explicitKeys = ['loginIssuer', 'preLoginRedirectHash']\n for (const key of explicitKeys) {\n window.localStorage.removeItem(key)\n window.sessionStorage.removeItem(key)\n }\n\n if (typeof indexedDB === 'undefined') {\n return\n }\n\n const databases = ['soidc', 'solid-client-authn-store', 'solid-client-authn']\n for (const dbName of databases) {\n await new Promise<void>((resolve) => {\n try {\n const request = indexedDB.deleteDatabase(dbName)\n request.onsuccess = () => resolve()\n request.onerror = () => resolve()\n request.onblocked = () => resolve()\n } catch (_err) {\n resolve()\n }\n })\n }\n}\n\nexport type HeaderAuthState = 'logged-out' | 'logged-in'\n\nexport type HeaderMenuItem = {\n label: string\n url?: string\n target?: string\n action?: string\n icon?: string\n}\n\nexport type HeaderAccountMenuItem = HeaderMenuItem & {\n avatar?: string\n webid?: string\n}\n\nexport class Header extends LitElement {\n static properties = {\n logo: { type: String, reflect: true },\n helpIcon: { type: String, attribute: 'help-icon', reflect: true },\n layout: { type: String, reflect: true },\n theme: { type: String, reflect: true },\n brandLink: { type: String, attribute: 'brand-link', reflect: true },\n authState: { type: String, attribute: 'auth-state', reflect: true },\n loginAction: { type: Object, attribute: false },\n signUpAction: { type: Object, attribute: false },\n accountMenu: { type: Array, attribute: false },\n logoutLabel: { type: String, attribute: 'logout-label', reflect: true },\n logoutIcon: { type: String, attribute: 'logout-icon', reflect: true },\n accountIcon: { type: String, attribute: 'account-icon', reflect: true },\n accountAvatar: { type: String, attribute: 'account-avatar', reflect: true },\n accountAvatarFallback: { type: String, attribute: 'account-avatar-fallback', reflect: true },\n loginIcon: { type: String, attribute: 'login-icon', reflect: true },\n signUpIcon: { type: String, attribute: 'sign-up-icon', reflect: true },\n helpMenuList: { type: Array },\n accountMenuOpen: { state: true },\n helpMenuOpen: { state: true },\n hasSlottedAccountMenu: { state: true },\n hasSlottedHelpMenu: { state: true },\n authResolved: { state: true }\n }\n\n static styles = css`\n :host { /* default theme */\n display: block;\n --header-bg: var(--color-header-row-bg, #332746);\n --header-text: var(--color-header-text, #ffffff);\n --header-border: var(--color-border, #efecf3);\n --header-line: var(--color-header-menu-separator-line, #5e546d);\n --header-link: var(--color-text-heading, #000000);\n --header-menu-item-hover: var(--color-header-menu-item-hover, #e6dcff);\n --header-menu-item-selected: var(--color-header-menu-item-selected, #cbb9ff);\n --header-menu-bg: var(--color-menu-bg, #f6f5f9);\n --header-menu-loggedin-bg: var(--color-header-menu-loggedin-bg, #5e546d);\n --header-menu-text: var(--color-menu-item-text, #654d6c);\n --header-border-radius: var(--border-radius-sm, 0.2rem);\n --header-button-bg: var(--color-menu-bg, #ffffff);\n --header-button-text: var(--color-header-button-text, #0F172B);\n --header-button-detail-text: var(--color-header-button-detail-text, #99A1AF);\n --header-shadow: var(--color-header-shadow, 2px 6px 10px 0 rgba(0, 0, 0, 0.4), 2px 8px 24px 0 rgba(0, 0, 0, 0.19));\n font-family: var(--font-family-base, 'Segoe UI', 'Helvetica Neue', Arial, sans-serif);\n }\n\n /* for now light and dark are the same */\n :host([theme='dark']) {\n display: block;\n --header-bg: var(--color-header-row-bg, #332746);\n --header-text: var(--color-header-text, #ffffff);\n --header-border: var(--color-border, #efecf3);\n --header-line: var(--color-header-menu-separator-line, #5e546d);\n --header-link: var(--color-text-heading, #000000);\n --header-menu-item-hover: var(--color-header-menu-item-hover, #e6dcff);\n --header-menu-item-selected: var(--color-header-menu-item-selected, #cbb9ff);\n --header-menu-bg: var(--color-menu-bg, #f6f5f9);\n --header-menu-loggedin-bg: var(--color-header-menu-loggedin-bg, #5e546d);\n --header-menu-text: var(--color-menu-item-text, #654d6c);\n --header-border-radius: var(--border-radius-sm, 0.2rem);\n --header-button-bg: var(--color-menu-bg, #ffffff);\n --header-button-text: var(--color-header-button-text, #0f172a);\n --header-button-detail-text: var(--color-header-button-detail-text, #878192);\n --header-icon-filter: invert(1) brightness(1.3); /* special way to invert SVG color of icons, from white to black */\n --header-shadow: var(--color-header-shadow, 2px 6px 10px 0 rgba(0, 0, 0, 0.4), 2px 8px 24px 0 rgba(0, 0, 0, 0.19));\n font-family: var(--font-family-base, 'Segoe UI', 'Helvetica Neue', Arial, sans-serif);\n }\n\n :host([layout='mobile']) .headerInner {\n flex-wrap: wrap;\n text-align: center;\n gap: 0.5rem;\n }\n\n .headerInner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--header-bg);\n color: var(--header-text);\n padding: 0 1.5rem;\n height: 3.75rem;\n }\n\n ::slotted([slot='navigation-toggle']) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n margin-right: 0.75rem;\n }\n\n :host([layout='desktop']) ::slotted([slot='navigation-toggle']) {\n display: none !important;\n }\n\n .brand {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n text-decoration: none;\n color: inherit;\n }\n\n .brand-not-displayed {\n display: none;\n }\n\n .brand img {\n height: 50px;\n width: 55px;\n object-fit: contain;\n }\n\n .menu {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n margin-left: auto;\n }\n\n .auth-actions {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n }\n\n .auth-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n min-height: 2.25rem;\n padding: 0.5rem 0.875rem;\n border: 1px solid var(--header-border);\n border-radius: 999px;\n background: var(--header-menu-bg);\n color: var(--header-button-text);\n cursor: pointer;\n font: inherit;\n line-height: 1;\n text-decoration: none;\n box-sizing: border-box;\n transition: border-color 0.2s ease, transform 0.2s ease;\n }\n\n .auth-button:hover {\n border-color: var(--header-menu-item-hover);\n }\n\n .auth-button:active {\n transform: translateY(1px);\n }\n\n .auth-button-sign-up {\n background: color-mix(in srgb, var(--header-menu-bg) 78%, var(--header-menu-item-selected) 22%);\n }\n\n .header-menu-separator {\n background: var(--header-line);\n width: 1px;\n height: 2.3rem;\n }\n\n .account-menu-container {\n position: relative;\n display: flex;\n align-items: center;\n }\n\n .account-menu-trigger {\n display: inline-flex;\n align-items: center;\n gap: 0.625rem;\n min-height: 2.5rem;\n border: 1px solid var(--header-menu-loggedin-bg);\n border-radius: 999px;\n background: var(--header-menu-loggedin-bg);\n color: var(--header-button-text);\n cursor: pointer;\n font: inherit;\n line-height: 1;\n }\n\n :host([layout='mobile']) .account-menu-trigger {\n gap: 0;\n min-height: auto;\n padding: 0;\n border: 1.5px solid var(--header-border);\n background: var(--header-menu-loggedin-bg);\n }\n\n :host([layout='mobile']) .account-menu-trigger-label {\n display: none;\n }\n\n .account-menu-trigger:disabled {\n cursor: default;\n opacity: 0.7;\n }\n\n .account-menu-trigger-icon {\n width: 1rem;\n height: 1rem;\n object-fit: contain;\n flex-shrink: 0;\n }\n\n .account-avatar,\n .account-menu-avatar {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n overflow: hidden;\n background: color-mix(in srgb, var(--header-bg) 18%, #ded8e7 82%);\n color: var(--header-button-text);\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n }\n\n .account-avatar {\n width: 1.75rem;\n height: 1.75rem;\n border-radius: 999px;\n border: 1.5px solid var(--header-border);\n }\n\n .account-menu-avatar {\n width: 2rem;\n height: 2rem;\n border-radius: 0.5rem;\n }\n\n .account-avatar img,\n .account-menu-avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n .account-avatar-img {\n width: 1.75rem;\n height: 1.75rem;\n border-radius: 999px;\n object-fit: cover;\n background-color: var(--header-border);\n }\n\n .account-dropdown {\n position: absolute;\n top: calc(100% + 0.9rem);\n right: 0;\n min-width: 15rem;\n padding: 0.5rem;\n background: var(--header-button-bg);\n border: 1px solid var(--header-border);\n border-radius: var(--header-border-radius);\n box-shadow: var(--header-shadow);\n z-index: 10;\n }\n\n .account-dropdown[hidden] {\n display: none;\n }\n\n .account-menu-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n }\n\n .account-menu-item-link,\n .account-menu-item-button,\n ::slotted([slot='account-menu']) {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n width: 100%;\n box-sizing: border-box;\n color: var(--header-link);\n text-decoration: none;\n background: transparent;\n border: 1px solid transparent;\n border-radius: 10px;\n padding: 0.5rem;\n cursor: pointer;\n font: inherit;\n text-align: left;\n }\n\n .account-menu-item-link:hover,\n .account-menu-item-button:hover {\n color: var(--header-link);\n background: var(--header-menu-item-hover);\n border-color: var(--header-menu-item-hover);\n }\n\n .account-menu-item-link:active,\n .account-menu-item-button:active {\n color: var(--header-link);\n background: var(--header-menu-item-selected);\n border-color: var(--header-menu-item-selected);\n transform: translateY(1px);\n }\n\n .account-switch {\n display: block;\n width: 100%;\n color: var(--header-menu-text);\n text-align: left;\n text-transform: uppercase;\n font-size: 80%;\n }\n\n .dropdown-menu-separator {\n display: block;\n width: calc(100% + 1rem);\n margin: 0.5rem -0.5rem;\n border: 0;\n border-top: 1px solid var(--header-border);\n }\n\n .account-menu-copy {\n display: flex;\n flex-direction: column;\n min-width: 0;\n }\n\n .account-menu-label {\n color: var(--header-button-text);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .account-menu-webid {\n color: var(--header-button-detail-text);\n font-size: 0.5rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .help-menu-container {\n position: relative;\n display: flex;\n align-items: center;\n background: transparent;\n }\n\n .help-menu-trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: 0;\n background: transparent;\n cursor: pointer;\n }\n\n .help-menu-trigger:disabled {\n cursor: default;\n }\n\n .help-dropdown {\n position: absolute;\n top: calc(100% + 0.9rem);\n right: 0;\n min-width: 12rem;\n padding: 0.5rem;\n background: var(--header-button-bg);\n border: 1px solid var(--header-border);\n border-radius: var(--header-border-radius);\n box-shadow: var(--header-shadow);\n z-index: 10;\n }\n\n .help-dropdown[hidden] {\n display: none;\n }\n\n .help-dropdown-content {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n }\n\n .help-menu-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n }\n\n .help-menu-list a,\n .help-menu-list button,\n ::slotted([slot='help-menu']) {\n display: block;\n width: 100%;\n box-sizing: border-box;\n color: var(--header-link);\n text-decoration: none;\n background: transparent;\n border: 1px solid transparent;\n border-radius: 4px;\n padding: 0.375rem 0.5rem;\n cursor: pointer;\n font: inherit;\n text-align: left;\n }\n\n .help-menu-list a:hover,\n .help-menu-list button:hover {\n color: var(--header-link);\n background: var(--header-menu-item-hover);\n border-color: var(--header-menu-item-hover);\n }\n\n .help-menu-list a:active,\n .help-menu-list button:active {\n color: var(--header-link);\n background: var(--header-menu-item-selected);\n border-color: var(--header-menu-item-selected);\n transform: translateY(1px);\n }\n\n ::slotted(a), ::slotted(button) {\n color: var(--header-link);\n text-decoration: none;\n background: var(--header-button-bg);\n border: 1px solid var(--header-border);\n border-radius: 4px;\n padding: 0.25rem 0.5rem;\n cursor: pointer;\n font: inherit;\n }\n\n .help-icon {\n width: 35px;\n height: 35px;\n cursor: pointer;\n }\n\n .help-text {\n color: var(--header-text, #ffffff);\n font: inherit;\n }\n\n .logout-action-icon {\n width: 16px;\n height: 16px;\n display: inline-block;\n object-fit: contain;\n margin-right: 0.5rem;\n }\n `\n\n declare logo: string\n declare helpIcon: string\n declare layout: 'desktop' | 'mobile'\n declare theme: 'light' | 'dark'\n declare brandLink: string\n declare authState: HeaderAuthState\n declare loginAction: HeaderMenuItem\n declare signUpAction: HeaderMenuItem\n declare accountMenu: HeaderAccountMenuItem[]\n declare logoutLabel: string | null\n declare logoutIcon: string\n declare accountIcon: string\n declare accountAvatar: string\n declare accountAvatarFallback: string\n declare loginIcon: string\n declare signUpIcon: string\n declare helpMenuList: HeaderMenuItem[]\n declare accountMenuOpen: boolean\n declare helpMenuOpen: boolean\n declare hasSlottedAccountMenu: boolean\n declare hasSlottedHelpMenu: boolean\n declare authResolved: boolean\n private _refreshPromise: Promise<void> | null = null\n\n private readonly handleAuthSessionChange = () => {\n this.refreshAuthStateFromSession().catch(() => {\n // Keep auth event handling resilient on transient refresh failures.\n })\n }\n\n constructor () {\n super()\n this.logo = DEFAULT_SOLID_ICON_URL\n this.helpIcon = DEFAULT_HELP_MENU_ICON\n this.layout = 'desktop'\n this.theme = 'light'\n this.brandLink = '#'\n this.authState = 'logged-out'\n this.loginAction = { label: 'Log In', action: 'login' }\n this.signUpAction = { label: 'Sign Up', action: 'sign-up', url: DEFAULT_SIGNUP_URL }\n this.accountMenu = []\n this.logoutLabel = 'Log Out'\n this.logoutIcon = ''\n this.accountIcon = '▼'\n this.accountAvatar = ''\n this.accountAvatarFallback = ''\n this.loginIcon = ''\n this.signUpIcon = ''\n this.helpMenuList = []\n this.accountMenuOpen = false\n this.helpMenuOpen = false\n this.hasSlottedAccountMenu = false\n this.hasSlottedHelpMenu = false\n this.authResolved = false\n }\n\n connectedCallback () {\n super.connectedCallback()\n document.addEventListener('click', this.handleDocumentClick)\n window.addEventListener('keydown', this.handleWindowKeydown)\n if (typeof authSession.events?.on === 'function') {\n authSession.events.on('login', this.handleAuthSessionChange)\n authSession.events.on('logout', this.handleAuthSessionChange)\n authSession.events.on('sessionRestore', this.handleAuthSessionChange)\n }\n this.refreshAuthStateFromSession().catch(() => {\n // Keep initial header render resilient on transient refresh failures.\n })\n }\n\n disconnectedCallback () {\n document.removeEventListener('click', this.handleDocumentClick)\n window.removeEventListener('keydown', this.handleWindowKeydown)\n if (typeof authSession.events?.off === 'function') {\n authSession.events.off('login', this.handleAuthSessionChange)\n authSession.events.off('logout', this.handleAuthSessionChange)\n authSession.events.off('sessionRestore', this.handleAuthSessionChange)\n }\n super.disconnectedCallback()\n }\n\n private async refreshAuthStateFromSession () {\n if (!this._refreshPromise) {\n this._refreshPromise = (async () => {\n try {\n await authn.checkUser()\n // Some auth stacks resolve session state asynchronously after first check.\n if (!authn.currentUser()) {\n await authn.checkUser()\n }\n } catch (_err) {\n // Keep rendering even if session refresh cannot complete.\n }\n })()\n }\n\n try {\n await this._refreshPromise\n } finally {\n this._refreshPromise = null\n }\n\n this.authState = authn.currentUser() ? 'logged-in' : 'logged-out'\n this.authResolved = true\n }\n\n private handleHelpMenuClick (item: HeaderMenuItem, event: MouseEvent) {\n event.preventDefault()\n this.helpMenuOpen = false\n this.dispatchEvent(new CustomEvent('help-menu-select', {\n detail: item,\n bubbles: true,\n composed: true\n }))\n if (item.url) {\n const target = item.target || '_blank'\n const features = target === '_blank' ? 'noopener,noreferrer' : undefined\n window.open(item.url, target, features)\n }\n }\n\n private handleAccountMenuClick (item: HeaderAccountMenuItem) {\n this.accountMenuOpen = false\n this.dispatchEvent(new CustomEvent('account-menu-select', {\n detail: item,\n bubbles: true,\n composed: true\n }))\n }\n\n private readonly handleDocumentClick = (event: MouseEvent) => {\n if (!event.composedPath().includes(this)) {\n this.accountMenuOpen = false\n this.helpMenuOpen = false\n }\n }\n\n private readonly handleWindowKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && (this.accountMenuOpen || this.helpMenuOpen)) {\n this.accountMenuOpen = false\n this.helpMenuOpen = false\n }\n }\n\n private handleAccountSlotChange (event: Event) {\n const slot = event.target as HTMLSlotElement\n this.hasSlottedAccountMenu = slot.assignedElements({ flatten: true }).length > 0\n }\n\n private handleHelpSlotChange (event: Event) {\n const slot = event.target as HTMLSlotElement\n this.hasSlottedHelpMenu = slot.assignedElements({ flatten: true }).length > 0\n }\n\n private toggleAccountMenu (event: MouseEvent) {\n event.preventDefault()\n if (!this.hasAccountMenuItems()) return\n this.helpMenuOpen = false\n this.accountMenuOpen = !this.accountMenuOpen\n }\n\n private toggleHelpMenu (event: MouseEvent) {\n event.preventDefault()\n if (!this.hasHelpMenuItems()) return\n this.accountMenuOpen = false\n this.helpMenuOpen = !this.helpMenuOpen\n }\n\n private hasAccountMenuItems () {\n return Boolean(this.accountMenu?.length || this.hasSlottedAccountMenu || this.logoutLabel)\n }\n\n private hasHelpMenuItems () {\n return Boolean(this.helpMenuList?.length || this.hasSlottedHelpMenu)\n }\n\n private shouldRenderHelpMenu () {\n return this.layout !== 'mobile' && this.hasHelpMenuItems()\n }\n\n private renderLoggedInAvatar (avatar?: string, wrapperClass = 'account-avatar') {\n const hasAvatar = Boolean(avatar)\n const imageSrc = hasAvatar ? avatar : this.accountAvatarFallback || DEFAULT_LOGGEDIN_MENU_BUTTON_AVATAR\n const imageAlt = hasAvatar ? 'Profile Avatar' : 'Default Avatar'\n\n if (this.layout === 'mobile' && wrapperClass === 'account-avatar') {\n return html`<img class=\"account-avatar-img\" src=\"${imageSrc}\" alt=\"${imageAlt}\" />`\n }\n\n return html`\n <span class=\"${wrapperClass}\" aria-hidden=\"true\">\n <img src=\"${imageSrc}\" alt=\"${imageAlt}\" />\n </span>\n `\n }\n\n private renderLoggedOutActions () {\n return html`\n <div class=\"auth-actions\" part=\"auth-actions\">\n <slot name=\"login-action\">\n <solid-ui-login-button\n label=\"${this.loginAction.label}\"\n icon=${ifDefined(this.layout !== 'mobile' ? (this.loginIcon || this.loginAction.icon) : undefined)}\n layout=\"${this.layout}\"\n theme=\"${this.theme}\"\n part=\"login-action\"\n @login-success=\"${() => this.handleLoginSuccess()}\"\n ></solid-ui-login-button>\n </slot>\n <slot name=\"sign-up-action\">\n <solid-ui-signup-button\n label=\"${this.signUpAction.label}\"\n signup-url=\"${ifDefined(this.signUpAction.url)}\"\n layout=\"${this.layout}\"\n .icon=${ifDefined(this.layout !== 'mobile' ? (this.signUpIcon || this.signUpAction.icon) : undefined)}\n theme=\"${this.theme}\"\n part=\"sign-up-action\"\n ></solid-ui-signup-button>\n </slot>\n </div>\n `\n }\n\n private async handleLoginSuccess () {\n await this.refreshAuthStateFromSession()\n this.dispatchEvent(new CustomEvent('auth-action-select', {\n detail: { role: 'login' },\n bubbles: true,\n composed: true\n }))\n }\n\n private async handleLogout () {\n this.accountMenuOpen = false\n const issuer = window.localStorage.getItem('loginIssuer') || ''\n\n try {\n await authSession.logout()\n } catch (_err) {\n // logout errors are non-fatal — proceed to clear state\n }\n\n await clearPersistedAuthState()\n\n const redirectedToServerLogout = await performServerSideLogout({\n issuer,\n postLogoutRedirectPath: '/'\n })\n if (redirectedToServerLogout) {\n return\n }\n\n await this.refreshAuthStateFromSession()\n this.dispatchEvent(new CustomEvent('logout-select', {\n detail: { role: 'logout' },\n bubbles: true,\n composed: true\n }))\n }\n\n private renderAccountMenuItem (item: HeaderAccountMenuItem) {\n const content = html`\n ${this.renderLoggedInAvatar(item.avatar, 'account-menu-avatar')}\n <span class=\"account-menu-copy\">\n <span class=\"account-menu-label\">${item.label}</span>\n ${item.webid && this.layout !== 'mobile' ? html`<span class=\"account-menu-webid\">${item.webid}</span>` : ''}\n </span>\n `\n\n if (item.url) {\n return html`\n <a\n class=\"account-menu-item-link\"\n href=\"${item.url}\"\n @click=\"${() => this.handleAccountMenuClick(item)}\"\n part=\"account-menu-item\"\n role=\"menuitem\"\n >\n ${content}\n </a>\n `\n }\n\n return html`\n <button\n class=\"account-menu-item-button\"\n type=\"button\"\n @click=\"${() => this.handleAccountMenuClick(item)}\"\n part=\"account-menu-item\"\n role=\"menuitem\"\n >\n ${content}\n </button>\n `\n }\n\n private renderLoggedInActions () {\n return html`\n <div class=\"account-menu-container\" part=\"account-menu-container\">\n <slot name=\"account-trigger\">\n <button\n id=\"accountMenuTrigger\"\n class=\"account-menu-trigger\"\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded=\"${this.accountMenuOpen ? 'true' : 'false'}\"\n ?disabled=\"${!this.hasAccountMenuItems()}\"\n @click=\"${(e: MouseEvent) => this.toggleAccountMenu(e)}\"\n part=\"account-menu-trigger\"\n >\n ${this.renderLoggedInAvatar(this.accountAvatar)}\n ${this.layout !== 'mobile' && this.accountIcon\n? html`\n <img class=\"account-menu-trigger-icon\" src=\"${this.accountIcon}\" alt=\"\" aria-hidden=\"true\" />`\n: ''}\n </button>\n </slot>\n\n <nav\n id=\"accountMenu\"\n class=\"account-dropdown\"\n role=\"menu\"\n ?inert=\"${!this.accountMenuOpen || !this.hasAccountMenuItems()}\"\n ?hidden=\"${!this.accountMenuOpen || !this.hasAccountMenuItems()}\"\n part=\"account-dropdown\"\n >\n <slot name=\"account-switch\" class=\"account-switch\">Switch account</slot>\n <hr class=\"dropdown-menu-separator\" />\n <slot name=\"account-menu\" @slotchange=\"${(e: Event) => this.handleAccountSlotChange(e)}\"></slot>\n ${this.accountMenu && this.accountMenu.length\n ? html`\n <ul class=\"account-menu-list\">\n ${this.accountMenu.map((item: HeaderAccountMenuItem) => html`\n <li>${this.renderAccountMenuItem(item)}</li>\n `)}\n </ul>\n `\n : ''}\n ${this.logoutLabel\n ? html`\n <hr class=\"dropdown-menu-separator\" />\n <button\n class=\"account-menu-item-button\"\n type=\"button\"\n @click=\"${() => this.handleLogout()}\"\n part=\"logout-action\"\n role=\"menuitem\"\n >\n ${this.logoutIcon && this.layout !== 'mobile'\n ? html`<img class=\"logout-action-icon\" src=\"${this.logoutIcon}\" alt=\"\" aria-hidden=\"true\" part=\"logout-action-icon\" />`\n : ''}\n ${this.logoutLabel}\n </button>\n `\n : ''}\n </nav>\n </div>\n `\n }\n\n private renderUserArea () {\n if (Features.DESIGN_SYSTEM_HEADER_ACCOUNT) {\n return html`\n <solid-ui-provider>\n <solid-ui-account></solid-ui-account>\n </solid-ui-provider>\n `\n }\n\n if (!this.authResolved) {\n return html`<div class=\"auth-actions\" part=\"auth-actions\"></div>`\n }\n\n if (this.authState === 'logged-out') {\n return this.renderLoggedOutActions()\n }\n\n return this.renderLoggedInActions()\n }\n\n protected firstUpdated () {\n const brandLink = this.shadowRoot?.getElementById('brandLink')\n if (brandLink) {\n brandLink.classList.toggle('brand-not-displayed', this.layout === 'mobile')\n }\n }\n\n protected updated (changedProperties: Map<string, unknown>) {\n if (changedProperties.has('layout')) {\n const brandLink = this.shadowRoot?.getElementById('brandLink')\n if (brandLink) {\n brandLink.classList.toggle('brand-not-displayed', this.layout === 'mobile')\n }\n }\n }\n\n render () {\n return html`\n <div class=\"headerInner\">\n <slot name=\"navigation-toggle\"></slot>\n <a\n id=\"brandLink\"\n class=\"brand\"\n href=\"${this.brandLink}\"\n part=\"brand\"\n >\n <img id=\"brandImg\" src=\"${this.logo}\" alt=\"Logo\" part=\"logo\" />\n </a>\n\n <div class=\"menu\" part=\"menu\">\n ${this.renderUserArea()}\n\n ${this.shouldRenderHelpMenu()\n ? html`\n <div class=\"header-menu-separator\" />`\n : ''}\n\n ${this.shouldRenderHelpMenu()\n ? html`\n <div class=\"help-menu-container\" part=\"help-menu-container\">\n <button\n id=\"helpMenuTrigger\"\n class=\"help-menu-trigger\"\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded=\"${this.helpMenuOpen ? 'true' : 'false'}\"\n ?disabled=\"${!this.hasHelpMenuItems()}\"\n @click=\"${(e: MouseEvent) => this.toggleHelpMenu(e)}\"\n part=\"help-menu-trigger\"\n >\n ${this.helpIcon\n ? html`<img id=\"helpIcon\" class=\"help-icon\" src=\"${this.helpIcon}\" alt=\"Help\" part=\"help-icon\" />`\n : html`<span class=\"help-text\" part=\"help-text\">Help</span>`}\n </button>\n\n <nav\n id=\"helpMenu\"\n class=\"help-dropdown\"\n role=\"menu\"\n ?inert=\"${!this.helpMenuOpen || !this.hasHelpMenuItems()}\"\n ?hidden=\"${!this.helpMenuOpen || !this.hasHelpMenuItems()}\"\n part=\"help-dropdown\"\n >\n <div class=\"help-dropdown-content\" @click=\"${() => { this.helpMenuOpen = false }}\">\n <slot name=\"help-menu\" @slotchange=\"${(e: Event) => this.handleHelpSlotChange(e)}\"></slot>\n ${this.helpMenuList && this.helpMenuList.length\n ? html`\n <ul class=\"help-menu-list\">\n ${this.helpMenuList.map((item: HeaderMenuItem) => html`\n <li>\n ${item.url\n ? html`\n <a\n href=\"${item.url}\"\n target=\"${item.target || '_blank'}\"\n rel=\"${ifDefined((item.target || '_blank') === '_blank' ? 'noopener noreferrer' : undefined)}\"\n @click=\"${(e: MouseEvent) => this.handleHelpMenuClick(item, e)}\"\n part=\"help-menu-item\"\n role=\"menuitem\"\n >\n ${item.label}\n </a>\n `\n : html`\n <button\n type=\"button\"\n @click=\"${(e: MouseEvent) => this.handleHelpMenuClick(item, e)}\"\n part=\"help-menu-item\"\n role=\"menuitem\"\n >\n ${item.label}\n </button>\n `}\n </li>\n `)}\n </ul>\n `\n : ''}\n </div>\n </nav>\n </div>`\n : ''}\n </div>\n </div>\n `\n }\n}\n","import { Header } from './Header'\n\nexport { Header }\nexport type {\n HeaderAccountMenuItem,\n HeaderAuthState,\n HeaderMenuItem\n} from './Header'\n\nconst HEADER_TAG_NAME = 'solid-ui-header'\n\nif (!customElements.get(HEADER_TAG_NAME)) {\n customElements.define(HEADER_TAG_NAME, Header)\n}\n"],"x_google_ignoreList":[5],"mappings":"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"}
1
+ {"version":3,"file":"header-0TLBh_PG.js","names":["html","phoneIcon","LitElement","html","css","authSession","authn","getSuggestedIssuers","offlineTestID","solidLogicSingleton","phoneIcon","downArrowIcon","LoginButton","properties","label","type","String","reflect","theme","issuerUrl","attribute","icon","layout","_popupOpen","state","_issuerInputValue","_dropdownOpen","styles","_issuerInputId","Math","random","toString","slice","_errorMsg","constructor","connectedCallback","disconnectedCallback","_openPopup","offline","_loginComplete","uri","localStorage","getItem","_closePopup","updated","dialog","shadowRoot","querySelector","open","showModal","close","_loginToIssuer","issuerUri","store","updater","flagAuthorizationMetadata","preLoginRedirectHash","URL","window","location","href","hash","setItem","locationUrl","login","err","message","requestUpdate","webIdUri","saveUser","dispatchEvent","CustomEvent","detail","webId","bubbles","composed","_handleGoClick","_toggleDropdown","_selectIssuerFromDropdown","_handleInputChange","e","target","value","_handleInputKeydown","key","_renderPopup","suggestedIssuers","length","map","issuerInfo","name","render","preventDefault","currentTarget","LoginButton","LOGIN_BUTTON_TAG_NAME","customElements","get","define","LitElement","html","css","DEFAULT_SIGNUP_URL","SignupButton","properties","label","type","String","reflect","theme","signupUrl","attribute","icon","layout","styles","constructor","_handleClick","window","open","render","SignupButton","SIGNUP_BUTTON_TAG_NAME","customElements","get","define","t","Features","DESIGN_SYSTEM_HEADER_ACCOUNT","LitElement","html","css","icons","authSession","authn","performServerSideLogout","ifDefined","Features","DEFAULT_HELP_MENU_ICON","DEFAULT_SOLID_ICON_URL","DEFAULT_SIGNUP_URL","DEFAULT_LOGGEDIN_MENU_BUTTON_AVATAR","iconBase","clearPersistedAuthState","window","explicitKeys","key","localStorage","removeItem","sessionStorage","indexedDB","databases","dbName","Promise","resolve","request","deleteDatabase","onsuccess","onerror","onblocked","_err","Header","properties","logo","type","String","reflect","helpIcon","attribute","layout","theme","brandLink","authState","loginAction","Object","signUpAction","accountMenu","Array","logoutLabel","logoutIcon","accountIcon","accountAvatar","accountAvatarFallback","loginIcon","signUpIcon","helpMenuList","accountMenuOpen","state","helpMenuOpen","hasSlottedAccountMenu","hasSlottedHelpMenu","authResolved","styles","_refreshPromise","handleAuthSessionChange","refreshAuthStateFromSession","catch","constructor","label","action","url","connectedCallback","document","addEventListener","handleDocumentClick","handleWindowKeydown","events","on","disconnectedCallback","removeEventListener","off","checkUser","currentUser","handleHelpMenuClick","item","event","preventDefault","dispatchEvent","CustomEvent","detail","bubbles","composed","target","features","undefined","open","handleAccountMenuClick","composedPath","includes","handleAccountSlotChange","slot","assignedElements","flatten","length","handleHelpSlotChange","toggleAccountMenu","hasAccountMenuItems","toggleHelpMenu","hasHelpMenuItems","Boolean","shouldRenderHelpMenu","renderLoggedInAvatar","avatar","wrapperClass","hasAvatar","imageSrc","imageAlt","renderLoggedOutActions","icon","handleLoginSuccess","role","handleLogout","issuer","getItem","logout","redirectedToServerLogout","postLogoutRedirectPath","renderAccountMenuItem","content","webid","renderLoggedInActions","e","map","renderUserArea","DESIGN_SYSTEM_HEADER_ACCOUNT","firstUpdated","shadowRoot","getElementById","classList","toggle","updated","changedProperties","has","render","Header","HEADER_TAG_NAME","customElements","get","define"],"sources":["../../src/v2/components/auth/loginButton/downArrow.ts","../../src/v2/components/auth/loginButton/LoginButton.ts","../../src/v2/components/auth/loginButton/index.ts","../../src/v2/components/auth/signupButton/SignupButton.ts","../../src/v2/components/auth/signupButton/index.ts","../../node_modules/lit-html/directives/if-defined.js","../../src/lib/features.ts","../../src/v2/components/layout/header/Header.ts","../../src/v2/components/layout/header/index.ts"],"sourcesContent":["import { html } from 'lit-html'\n\nexport const phoneIcon = html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" \n viewBox=\"0 0 12 7\" \n fill=\"none\"\n >\n <path d=\"M0.679688 0.678955L5.50729 5.50656L10.3349 0.678955\" stroke=\"#6A7282\" stroke-width=\"1.35776\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n`\n","import { LitElement, html, css } from 'lit'\nimport { authSession, authn, getSuggestedIssuers, offlineTestID, solidLogicSingleton } from 'solid-logic'\nimport { phoneIcon as downArrowIcon } from './downArrow'\n\nexport class LoginButton extends LitElement {\n static properties = {\n label: { type: String, reflect: true },\n theme: { type: String, reflect: true },\n issuerUrl: { type: String, attribute: 'issuer-url', reflect: true },\n icon: { type: String, reflect: true },\n layout: { type: String, reflect: true },\n _popupOpen: { state: true },\n _issuerInputValue: { state: true },\n _dropdownOpen: { state: true }\n }\n\n static styles = css`\n :host { /* default theme */\n display: inline-block;\n position: relative;\n z-index: 400;\n --login-button-background: var(--lavender-900, #7c4cff);\n --login-button-text: var(--color-header-text, #ffffff);\n --popup-background: var(--color-background, #F8F9FB);\n --popup-text: var(--color-text, #1A1A1A);\n --popup-border: var(--color-border, #E5E7EB);\n --popup-shadow: var(--box-shadow-sm, 0 1px 4px rgba(124,77,255,0.12));\n --popup-overlay-background: rgba(0, 0, 0, 0.6);\n --issuer-input-background: var(--color-background, #F8F9FB);\n --issuer-input-text: var(--color-text, #1A1A1A);\n --issuer-input-border: var(--color-text, #1A1A1A);\n --issuer-button-background: var(--color-background, #F8F9FB);\n --issuer-button-text: var(--color-text, #1A1A1A);\n --issuer-button-border: var(--color-border, #E5E7EB);\n --issuer-button-hover-background: var(--lavender-900, #7c4cff);\n --issuer-label-color: var(--grey-purple-700, #1A1A1A);\n --issuer-placeholder-color: var(--grey-purple-700, #5e546d);;\n --error-text-color: var(--color-error, #B00020);\n }\n\n :host([theme='dark']) {\n display: inline-block;\n position: relative;\n z-index: 900;\n --login-button-background: var(--lavender-900, #7c4cff);\n --login-button-text: var(--color-header-text, #ffffff);\n --popup-background: var(--color-background, #F8F9FB);\n --popup-text: var(--color-text, #1A1A1A);\n --popup-border: var(--color-border, #E5E7EB);\n --popup-shadow: var(--box-shadow-sm, 0 1px 4px rgba(124,77,255,0.12));\n --popup-overlay-background: rgba(0, 0, 0, 0.6);\n --issuer-input-background: var(--color-background, #F8F9FB);\n --issuer-input-text: var(--color-text, #1A1A1A);\n --issuer-input-border: var(--color-text, #1A1A1A);\n --issuer-button-background: var(--color-background, #F8F9FB);\n --issuer-button-text: var(--color-text, #1A1A1A);\n --issuer-button-border: var(--color-text, #1A1A1A);\n --issuer-button-hover-background: var(--lavender-900, #7c4cff);\n --issuer-label-color: var(--grey-purple-700, #1A1A1A);\n --issuer-placeholder-color: var(--grey-purple-700, #5e546d);;\n --error-text-color: var(--color-error, #B00020);\n }\n\n .login-button {\n display: flex;\n height: 35px;\n padding: var(--spacing-xxs, 0.3125rem) var(--spacing-xs, 0.75rem);\n align-items: center;\n gap: var(--spacing-xxs, 0.3125rem);\n border-radius: var(--border-radius-base, 0.3125rem);\n background: var(--login-button-background);\n border: none;\n color: var(--login-button-text);\n cursor: pointer;\n font: inherit;\n line-height: 1;\n white-space: nowrap;\n text-decoration: none;\n box-sizing: border-box;\n transition: transform 0.2s ease;\n }\n\n .login-button-icon {\n width: 16px;\n height: 16px;\n display: inline-block;\n object-fit: contain;\n }\n\n .login-button:active {\n transform: translateY(1px);\n }\n\n .popup-dialog {\n border: none;\n padding: 0;\n background: transparent;\n outline: none;\n overflow: visible;\n width: min(30rem, calc(100vw - 2rem));\n max-width: calc(100vw - 2rem);\n max-height: calc(100dvh - 2rem);\n }\n\n .popup-dialog::backdrop {\n background: var(--popup-overlay-background, rgba(0, 0, 0, 0.6));\n }\n\n .popup-box {\n background: var(--popup-background);\n color: var(--popup-text);\n box-shadow: var(--popup-shadow);\n border: 1px solid var(--popup-border);\n border-radius: var(--border-radius-md, 0.5rem);\n width: min(30rem, calc(100vw - 2rem));\n min-width: min(30rem, calc(100vw - 2rem));\n max-width: calc(100vw - 2rem);\n max-height: calc(100dvh - 2rem);\n overflow: auto;\n z-index: 1001;\n }\n\n .popup-top-menu {\n border-bottom: 1px solid #DDD;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding-bottom: 8px;\n margin-bottom: 8px;\n padding: 1rem;\n background: var(--gray-200, #E5E7EB);\n }\n\n .popup-title {\n font-weight: 800;\n }\n\n .popup-close {\n background: transparent;\n border: none;\n cursor: pointer;\n font-size: 1.25rem;\n line-height: 1;\n padding: 0 0.25rem;\n }\n\n .issuer-text-section {\n display: flex;\n flex-direction: column;\n padding: 1rem 1rem 1.75rem;\n }\n\n .issuer-text-label {\n color: var(--issuer-label-color);\n margin-bottom: 6px;\n }\n\n .issuer-text-row {\n display: flex;\n flex-direction: row;\n gap: 6px;\n align-items: flex-start;\n }\n\n .issuer-input-wrapper {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-width: 0;\n position: relative;\n }\n\n .issuer-input-field-row {\n display: flex;\n flex-direction: row;\n position: relative;\n }\n\n .issuer-text-input {\n flex: 1;\n padding: 0.375rem 2.75rem 0.375rem 0.5rem;\n border: 1px solid var(--issuer-input-border);\n border-radius: var(--border-radius-base, 0.3125rem);\n background: var(--issuer-input-background);\n color: var(--issuer-input-text);\n font: inherit;\n min-width: 0;\n }\n\n .issuer-text-input::placeholder {\n color: var(--issuer-placeholder-color);\n }\n\n .issuer-dropdown-toggle {\n position: absolute;\n right: 6px;\n top: 50%;\n transform: translateY(-50%);\n width: 26px;\n height: 26px;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n border-radius: var(--border-radius-base, 0.3125rem);\n }\n\n .issuer-dropdown-toggle:hover {\n background: var(--color-header-menu-item-hover, #e6dcff);\n }\n\n .issuer-dropdown-toggle svg {\n width: 14px;\n height: 14px;\n display: block;\n }\n\n .issuer-dropdown-list {\n position: absolute;\n top: calc(100% + 6px);\n left: 0;\n right: 0;\n border: 1px solid var(--color-border, #E5E7EB);\n border-top: none;\n border-radius: 0 0 var(--border-radius-base, 0.3125rem) var(--border-radius-base, 0.3125rem);\n background: var(--issuer-input-background);\n overflow: visible;\n z-index: 10;\n box-shadow: 0 4px 12px rgba(124, 77, 255, 0.12);\n }\n\n .issuer-dropdown-item {\n display: block;\n width: 100%;\n padding: 0.625rem 0.75rem;\n border: none;\n border-bottom: 1px solid var(--color-border, #E5E7EB);\n background: transparent;\n color: var(--issuer-button-text);\n cursor: pointer;\n font: inherit;\n text-align: left;\n box-sizing: border-box;\n }\n\n .issuer-dropdown-item:last-child {\n border-bottom: none;\n }\n\n .issuer-dropdown-item:hover {\n background: var(--color-header-menu-item-hover, #e6dcff);\n border-radius: var(--border-radius-base-md, 0.5rem);\n }\n\n .popup-footer {\n display: flex;\n flex-direction: row;\n justify-content: center;\n gap: 8px;\n padding: 0.75rem 1rem 1rem;\n }\n\n .popup-footer-hr {\n margin: 0;\n border: none;\n border-top: 1px solid var(--popup-border, #E5E7EB);\n }\n\n .popup-cancel-button {\n padding: 0.5rem 1.25rem;\n border: 1px solid #C0BFC7;\n border-radius: var(--border-radius-base, 0.3125rem);\n background: var(--popup-background);\n color: #314158;\n cursor: pointer;\n font: inherit;\n }\n\n .popup-cancel-button:hover {\n background: #D1D5DB;\n }\n\n .popup-login-button {\n padding: 0.5rem 1.25rem;\n border: none;\n border-radius: var(--border-radius-base, 0.3125rem);\n background: var(--lavender-900, #7c4cff);\n color: #ffffff;\n cursor: pointer;\n font: inherit;\n }\n\n .popup-login-button:hover {\n background: #6a3de8;\n }\n\n .popup-login-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .error-msg {\n color: var(--error-text-color);\n font-size: 0.875rem;\n margin-top: 8px;\n }\n\n @media (max-width: 40rem) {\n .popup-dialog {\n width: calc(100vw - 1rem);\n max-width: calc(100vw - 1rem);\n max-height: calc(100dvh - 1rem);\n }\n\n .popup-box {\n width: calc(100vw - 1rem);\n min-width: 0;\n max-width: calc(100vw - 1rem);\n max-height: calc(100dvh - 1rem);\n border-radius: var(--border-radius-base, 0.3125rem);\n }\n\n .popup-top-menu,\n .issuer-text-section,\n .popup-footer {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n }\n\n .popup-footer {\n flex-wrap: wrap;\n gap: 0.625rem;\n }\n\n .popup-footer > button {\n flex: 1 1 100%;\n }\n\n .issuer-text-row,\n .issuer-input-field-row {\n width: 100%;\n }\n }\n `\n\n declare label: string\n declare theme: 'light' | 'dark'\n declare issuerUrl: string\n declare icon: string\n declare layout: 'desktop' | 'mobile'\n declare _popupOpen: boolean\n declare _issuerInputValue: string\n declare _dropdownOpen: boolean\n\n private _issuerInputId = `issuer-url-input-${Math.random().toString(36).slice(2, 10)}`\n private _errorMsg = ''\n\n constructor () {\n super()\n this.label = 'Log In'\n this.theme = 'light'\n this.issuerUrl = ''\n this.icon = ''\n this.layout = 'desktop'\n this._popupOpen = false\n this._issuerInputValue = ''\n this._dropdownOpen = false\n }\n\n connectedCallback () {\n super.connectedCallback()\n }\n\n disconnectedCallback () {\n super.disconnectedCallback()\n }\n\n private _openPopup () {\n const offline = offlineTestID()\n if (offline) {\n this._loginComplete(offline.uri)\n return\n }\n this._issuerInputValue = (typeof localStorage !== 'undefined' && localStorage.getItem('loginIssuer')) || this.issuerUrl || ''\n this._errorMsg = ''\n this._popupOpen = true\n }\n\n private _closePopup () {\n this._popupOpen = false\n }\n\n updated () {\n const dialog = this.shadowRoot?.querySelector('dialog') as HTMLDialogElement | null\n if (!dialog) return\n if (this._popupOpen && !dialog.open) {\n dialog.showModal()\n } else if (!this._popupOpen && dialog.open) {\n dialog.close()\n }\n }\n\n private async _loginToIssuer (issuerUri: string) {\n if (!issuerUri) return\n try {\n // clear authorization metadata from store\n ;(solidLogicSingleton.store.updater as any).flagAuthorizationMetadata()\n\n const preLoginRedirectHash = new URL(window.location.href).hash\n if (preLoginRedirectHash) {\n window.localStorage.setItem('preLoginRedirectHash', preLoginRedirectHash)\n }\n window.localStorage.setItem('loginIssuer', issuerUri)\n\n const locationUrl = new URL(window.location.href)\n locationUrl.hash = ''\n await authSession.login(issuerUri, locationUrl.href)\n } catch (err: any) {\n this._errorMsg = err.message || String(err)\n this.requestUpdate()\n }\n }\n\n private _loginComplete (webIdUri: string) {\n authn.saveUser(webIdUri)\n this.dispatchEvent(new CustomEvent('login-success', {\n detail: { webId: webIdUri },\n bubbles: true,\n composed: true\n }))\n }\n\n private _handleGoClick () {\n this._dropdownOpen = false\n this._loginToIssuer(this._issuerInputValue)\n }\n\n private _toggleDropdown () {\n this._dropdownOpen = !this._dropdownOpen\n }\n\n private _selectIssuerFromDropdown (uri: string) {\n this._issuerInputValue = uri\n this._dropdownOpen = false\n }\n\n private _handleInputChange (e: Event) {\n this._issuerInputValue = (e.target as HTMLInputElement).value\n }\n\n private _handleInputKeydown (e: KeyboardEvent) {\n if (e.key === 'Enter') {\n this._loginToIssuer(this._issuerInputValue)\n }\n if (e.key === 'Escape') {\n this._closePopup()\n }\n }\n\n private _renderPopup () {\n const suggestedIssuers = getSuggestedIssuers()\n return html`\n <div class=\"popup-box\">\n <div class=\"popup-top-menu\">\n <span class=\"popup-title\">Select an identity provider</span>\n <button class=\"popup-close\" type=\"button\" aria-label=\"Close\" @click=\"${() => this._closePopup()}\">&#x2715;</button>\n </div>\n\n <div class=\"issuer-text-section\">\n <label class=\"issuer-text-label\" for=\"${this._issuerInputId}\">Solid Identity Provider</label>\n <div class=\"issuer-text-row\">\n <div class=\"issuer-input-wrapper\">\n <div class=\"issuer-input-field-row\">\n <input\n id=\"${this._issuerInputId}\"\n class=\"issuer-text-input\"\n type=\"text\"\n placeholder=\"https://example.com\"\n .value=\"${this._issuerInputValue}\"\n @input=\"${this._handleInputChange}\"\n @keydown=\"${this._handleInputKeydown}\"\n autocomplete=\"url\"\n />\n ${suggestedIssuers.length\n? html`\n <button\n class=\"issuer-dropdown-toggle\"\n type=\"button\"\n aria-label=\"Show identity provider suggestions\"\n aria-expanded=\"${this._dropdownOpen}\"\n @click=\"${() => this._toggleDropdown()}\"\n >${downArrowIcon}</button>\n `\n: ''}\n </div>\n ${this._dropdownOpen && suggestedIssuers.length\n? html`\n <div class=\"issuer-dropdown-list\" role=\"listbox\">\n ${suggestedIssuers.map(issuerInfo => html`\n <button\n class=\"issuer-dropdown-item\"\n type=\"button\"\n role=\"option\"\n @click=\"${() => this._selectIssuerFromDropdown(issuerInfo.uri)}\"\n >${issuerInfo.name}</button>\n `)}\n </div>\n `\n: ''}\n </div>\n </div>\n ${this._errorMsg ? html`<div class=\"error-msg\">${this._errorMsg}</div>` : ''}\n </div>\n <hr class=\"popup-footer-hr\" />\n <div class=\"popup-footer\">\n <button class=\"popup-cancel-button\" type=\"button\" @click=\"${() => this._closePopup()}\">Cancel</button>\n <button\n class=\"popup-login-button\"\n type=\"button\"\n ?disabled=\"${!this._issuerInputValue}\"\n @click=\"${() => this._handleGoClick()}\"\n >Log In</button>\n </div>\n </div>\n `\n }\n\n render () {\n return html`\n <button\n class=\"login-button\"\n type=\"button\"\n part=\"login-button\"\n @click=\"${() => this._openPopup()}\"\n >\n ${this.icon ? html`<img class=\"login-button-icon\" src=\"${this.icon}\" alt=\"\" aria-hidden=\"true\" part=\"login-button-icon\" />` : ''}\n <slot>${this.label}</slot>\n </button>\n\n <dialog\n class=\"popup-dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Select an identity provider\"\n @cancel=\"${(e: Event) => { e.preventDefault(); this._closePopup() }}\"\n @click=\"${(e: MouseEvent) => { if (e.target === e.currentTarget) this._closePopup() }}\"\n >\n ${this._popupOpen ? this._renderPopup() : ''}\n </dialog>\n `\n }\n}\n","import { LoginButton } from './LoginButton'\n\nexport { LoginButton }\n\nconst LOGIN_BUTTON_TAG_NAME = 'solid-ui-login-button'\n\nif (!customElements.get(LOGIN_BUTTON_TAG_NAME)) {\n customElements.define(LOGIN_BUTTON_TAG_NAME, LoginButton)\n}\n","import { LitElement, html, css } from 'lit'\n\nconst DEFAULT_SIGNUP_URL = 'https://solidproject.org/get_a_pod'\n\nexport class SignupButton extends LitElement {\n static properties = {\n label: { type: String, reflect: true },\n theme: { type: String, reflect: true },\n signupUrl: { type: String, attribute: 'signup-url', reflect: true },\n icon: { type: String, reflect: true },\n layout: { type: String, reflect: true }\n }\n\n static styles = css`\n :host {\n display: inline-block;\n --signup-button-background: transparent;\n --signup-button-border: var(--color-border, #E5E7EB);\n --signup-button-text: var(--color-header-text, #ffffff);\n }\n\n :host([theme='dark']) {\n --signup-button-background: transparent;\n --signup-button-border: var(--color-border, #E5E7EB);\n --signup-button-text: var(--color-header-text, #ffffff);\n }\n\n .signup-button {\n display: flex;\n height: 35px;\n padding: var(--spacing-xxs, 0.3125rem) var(--spacing-xs, 0.75rem);\n align-items: center;\n gap: var(--spacing-xxs, 0.3125rem);\n border-radius: var(--border-radius-base, 0.3125rem);\n background: var(--signup-button-background);\n border: 1px solid var(--signup-button-border);\n color: var(--signup-button-text);\n cursor: pointer;\n font: inherit;\n line-height: 1;\n white-space: nowrap;\n text-decoration: none;\n box-sizing: border-box;\n transition: transform 0.2s ease;\n }\n\n :host([layout='mobile']) .signup-button {\n border: none;\n }\n\n .signup-button-icon {\n width: 16px;\n height: 16px;\n display: inline-block;\n object-fit: contain;\n }\n\n .signup-button:active {\n transform: translateY(1px);\n }\n `\n\n declare label: string\n declare theme: 'light' | 'dark'\n declare signupUrl: string\n declare icon: string\n declare layout: 'desktop' | 'mobile'\n\n constructor () {\n super()\n this.label = 'Sign Up'\n this.signupUrl = DEFAULT_SIGNUP_URL\n this.theme = 'light'\n this.icon = ''\n this.layout = 'desktop'\n }\n\n private _handleClick () {\n window.open(this.signupUrl, '_blank', 'noopener,noreferrer')\n }\n\n render () {\n return html`\n <button\n class=\"signup-button\"\n type=\"button\"\n part=\"signup-button\"\n @click=\"${() => this._handleClick()}\"\n >\n ${this.icon ? html`<img class=\"signup-button-icon\" src=\"${this.icon}\" alt=\"\" aria-hidden=\"true\" part=\"signup-button-icon\" />` : ''}\n <slot>${this.label}</slot>\n </button>\n `\n }\n}\n","import { SignupButton } from './SignupButton'\n\nexport { SignupButton }\n\nconst SIGNUP_BUTTON_TAG_NAME = 'solid-ui-signup-button'\n\nif (!customElements.get(SIGNUP_BUTTON_TAG_NAME)) {\n customElements.define(SIGNUP_BUTTON_TAG_NAME, SignupButton)\n}\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 * This file is used to enable or disable experimental features using feature flags.\n */\n\nconst Features = {\n DESIGN_SYSTEM_HEADER_ACCOUNT: true,\n}\n\nexport default Features\n","import { LitElement, html, css } from 'lit'\nimport { icons } from '../../../../lib/iconBase'\nimport { authSession, authn, performServerSideLogout } from 'solid-logic'\nimport '../../auth/loginButton/index'\nimport '../../auth/signupButton/index'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\nimport '@/components/account'\nimport '@/components/provider'\nimport Features from '../../../../lib/features'\n\nconst DEFAULT_HELP_MENU_ICON = ''\nconst DEFAULT_SOLID_ICON_URL = 'https://solidproject.org/assets/img/solid-emblem.svg'\nconst DEFAULT_SIGNUP_URL = 'https://solidproject.org/get_a_pod'\nconst DEFAULT_LOGGEDIN_MENU_BUTTON_AVATAR = icons.iconBase + 'emptyProfileAvatar.png'\n\nasync function clearPersistedAuthState (): Promise<void> {\n if (typeof window === 'undefined') {\n return\n }\n\n const explicitKeys = ['loginIssuer', 'preLoginRedirectHash']\n for (const key of explicitKeys) {\n window.localStorage.removeItem(key)\n window.sessionStorage.removeItem(key)\n }\n\n if (typeof indexedDB === 'undefined') {\n return\n }\n\n const databases = ['soidc', 'solid-client-authn-store', 'solid-client-authn']\n for (const dbName of databases) {\n await new Promise<void>((resolve) => {\n try {\n const request = indexedDB.deleteDatabase(dbName)\n request.onsuccess = () => resolve()\n request.onerror = () => resolve()\n request.onblocked = () => resolve()\n } catch (_err) {\n resolve()\n }\n })\n }\n}\n\nexport type HeaderAuthState = 'logged-out' | 'logged-in'\n\nexport type HeaderMenuItem = {\n label: string\n url?: string\n target?: string\n action?: string\n icon?: string\n}\n\nexport type HeaderAccountMenuItem = HeaderMenuItem & {\n avatar?: string\n webid?: string\n}\n\nexport class Header extends LitElement {\n static properties = {\n logo: { type: String, reflect: true },\n helpIcon: { type: String, attribute: 'help-icon', reflect: true },\n layout: { type: String, reflect: true },\n theme: { type: String, reflect: true },\n brandLink: { type: String, attribute: 'brand-link', reflect: true },\n authState: { type: String, attribute: 'auth-state', reflect: true },\n loginAction: { type: Object, attribute: false },\n signUpAction: { type: Object, attribute: false },\n accountMenu: { type: Array, attribute: false },\n logoutLabel: { type: String, attribute: 'logout-label', reflect: true },\n logoutIcon: { type: String, attribute: 'logout-icon', reflect: true },\n accountIcon: { type: String, attribute: 'account-icon', reflect: true },\n accountAvatar: { type: String, attribute: 'account-avatar', reflect: true },\n accountAvatarFallback: { type: String, attribute: 'account-avatar-fallback', reflect: true },\n loginIcon: { type: String, attribute: 'login-icon', reflect: true },\n signUpIcon: { type: String, attribute: 'sign-up-icon', reflect: true },\n helpMenuList: { type: Array },\n accountMenuOpen: { state: true },\n helpMenuOpen: { state: true },\n hasSlottedAccountMenu: { state: true },\n hasSlottedHelpMenu: { state: true },\n authResolved: { state: true }\n }\n\n static styles = css`\n :host { /* default theme */\n display: block;\n --header-bg: var(--color-header-row-bg, #332746);\n --header-text: var(--color-header-text, #ffffff);\n --header-border: var(--color-border, #efecf3);\n --header-line: var(--color-header-menu-separator-line, #5e546d);\n --header-link: var(--color-text-heading, #000000);\n --header-menu-item-hover: var(--color-header-menu-item-hover, #e6dcff);\n --header-menu-item-selected: var(--color-header-menu-item-selected, #cbb9ff);\n --header-menu-bg: var(--color-menu-bg, #f6f5f9);\n --header-menu-loggedin-bg: var(--color-header-menu-loggedin-bg, #5e546d);\n --header-menu-text: var(--color-menu-item-text, #654d6c);\n --header-border-radius: var(--border-radius-sm, 0.2rem);\n --header-button-bg: var(--color-menu-bg, #ffffff);\n --header-button-text: var(--color-header-button-text, #0F172B);\n --header-button-detail-text: var(--color-header-button-detail-text, #99A1AF);\n --header-shadow: var(--color-header-shadow, 2px 6px 10px 0 rgba(0, 0, 0, 0.4), 2px 8px 24px 0 rgba(0, 0, 0, 0.19));\n font-family: var(--font-family-base, 'Segoe UI', 'Helvetica Neue', Arial, sans-serif);\n }\n\n /* for now light and dark are the same */\n :host([theme='dark']) {\n display: block;\n --header-bg: var(--color-header-row-bg, #332746);\n --header-text: var(--color-header-text, #ffffff);\n --header-border: var(--color-border, #efecf3);\n --header-line: var(--color-header-menu-separator-line, #5e546d);\n --header-link: var(--color-text-heading, #000000);\n --header-menu-item-hover: var(--color-header-menu-item-hover, #e6dcff);\n --header-menu-item-selected: var(--color-header-menu-item-selected, #cbb9ff);\n --header-menu-bg: var(--color-menu-bg, #f6f5f9);\n --header-menu-loggedin-bg: var(--color-header-menu-loggedin-bg, #5e546d);\n --header-menu-text: var(--color-menu-item-text, #654d6c);\n --header-border-radius: var(--border-radius-sm, 0.2rem);\n --header-button-bg: var(--color-menu-bg, #ffffff);\n --header-button-text: var(--color-header-button-text, #0f172a);\n --header-button-detail-text: var(--color-header-button-detail-text, #878192);\n --header-icon-filter: invert(1) brightness(1.3); /* special way to invert SVG color of icons, from white to black */\n --header-shadow: var(--color-header-shadow, 2px 6px 10px 0 rgba(0, 0, 0, 0.4), 2px 8px 24px 0 rgba(0, 0, 0, 0.19));\n font-family: var(--font-family-base, 'Segoe UI', 'Helvetica Neue', Arial, sans-serif);\n }\n\n :host([layout='mobile']) .headerInner {\n flex-wrap: wrap;\n text-align: center;\n gap: 0.5rem;\n }\n\n .headerInner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--header-bg);\n color: var(--header-text);\n padding: 0 1.5rem;\n height: 3.75rem;\n }\n\n ::slotted([slot='navigation-toggle']) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n margin-right: 0.75rem;\n }\n\n :host([layout='desktop']) ::slotted([slot='navigation-toggle']) {\n display: none !important;\n }\n\n .brand {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n text-decoration: none;\n color: inherit;\n }\n\n .brand-not-displayed {\n display: none;\n }\n\n .brand img {\n height: 50px;\n width: 55px;\n object-fit: contain;\n }\n\n .menu {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n margin-left: auto;\n }\n\n .auth-actions {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n }\n\n .auth-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n min-height: 2.25rem;\n padding: 0.5rem 0.875rem;\n border: 1px solid var(--header-border);\n border-radius: 999px;\n background: var(--header-menu-bg);\n color: var(--header-button-text);\n cursor: pointer;\n font: inherit;\n line-height: 1;\n text-decoration: none;\n box-sizing: border-box;\n transition: border-color 0.2s ease, transform 0.2s ease;\n }\n\n .auth-button:hover {\n border-color: var(--header-menu-item-hover);\n }\n\n .auth-button:active {\n transform: translateY(1px);\n }\n\n .auth-button-sign-up {\n background: color-mix(in srgb, var(--header-menu-bg) 78%, var(--header-menu-item-selected) 22%);\n }\n\n .header-menu-separator {\n background: var(--header-line);\n width: 1px;\n height: 2.3rem;\n }\n\n .account-menu-container {\n position: relative;\n display: flex;\n align-items: center;\n }\n\n .account-menu-trigger {\n display: inline-flex;\n align-items: center;\n gap: 0.625rem;\n min-height: 2.5rem;\n border: 1px solid var(--header-menu-loggedin-bg);\n border-radius: 999px;\n background: var(--header-menu-loggedin-bg);\n color: var(--header-button-text);\n cursor: pointer;\n font: inherit;\n line-height: 1;\n }\n\n :host([layout='mobile']) .account-menu-trigger {\n gap: 0;\n min-height: auto;\n padding: 0;\n border: 1.5px solid var(--header-border);\n background: var(--header-menu-loggedin-bg);\n }\n\n :host([layout='mobile']) .account-menu-trigger-label {\n display: none;\n }\n\n .account-menu-trigger:disabled {\n cursor: default;\n opacity: 0.7;\n }\n\n .account-menu-trigger-icon {\n width: 1rem;\n height: 1rem;\n object-fit: contain;\n flex-shrink: 0;\n }\n\n .account-avatar,\n .account-menu-avatar {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n overflow: hidden;\n background: color-mix(in srgb, var(--header-bg) 18%, #ded8e7 82%);\n color: var(--header-button-text);\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n }\n\n .account-avatar {\n width: 1.75rem;\n height: 1.75rem;\n border-radius: 999px;\n border: 1.5px solid var(--header-border);\n }\n\n .account-menu-avatar {\n width: 2rem;\n height: 2rem;\n border-radius: 0.5rem;\n }\n\n .account-avatar img,\n .account-menu-avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n .account-avatar-img {\n width: 1.75rem;\n height: 1.75rem;\n border-radius: 999px;\n object-fit: cover;\n background-color: var(--header-border);\n }\n\n .account-dropdown {\n position: absolute;\n top: calc(100% + 0.9rem);\n right: 0;\n min-width: 15rem;\n padding: 0.5rem;\n background: var(--header-button-bg);\n border: 1px solid var(--header-border);\n border-radius: var(--header-border-radius);\n box-shadow: var(--header-shadow);\n z-index: 10;\n }\n\n .account-dropdown[hidden] {\n display: none;\n }\n\n .account-menu-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n }\n\n .account-menu-item-link,\n .account-menu-item-button,\n ::slotted([slot='account-menu']) {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n width: 100%;\n box-sizing: border-box;\n color: var(--header-link);\n text-decoration: none;\n background: transparent;\n border: 1px solid transparent;\n border-radius: 10px;\n padding: 0.5rem;\n cursor: pointer;\n font: inherit;\n text-align: left;\n }\n\n .account-menu-item-link:hover,\n .account-menu-item-button:hover {\n color: var(--header-link);\n background: var(--header-menu-item-hover);\n border-color: var(--header-menu-item-hover);\n }\n\n .account-menu-item-link:active,\n .account-menu-item-button:active {\n color: var(--header-link);\n background: var(--header-menu-item-selected);\n border-color: var(--header-menu-item-selected);\n transform: translateY(1px);\n }\n\n .account-switch {\n display: block;\n width: 100%;\n color: var(--header-menu-text);\n text-align: left;\n text-transform: uppercase;\n font-size: 80%;\n }\n\n .dropdown-menu-separator {\n display: block;\n width: calc(100% + 1rem);\n margin: 0.5rem -0.5rem;\n border: 0;\n border-top: 1px solid var(--header-border);\n }\n\n .account-menu-copy {\n display: flex;\n flex-direction: column;\n min-width: 0;\n }\n\n .account-menu-label {\n color: var(--header-button-text);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .account-menu-webid {\n color: var(--header-button-detail-text);\n font-size: 0.5rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .help-menu-container {\n position: relative;\n display: flex;\n align-items: center;\n background: transparent;\n }\n\n .help-menu-trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: 0;\n background: transparent;\n cursor: pointer;\n }\n\n .help-menu-trigger:disabled {\n cursor: default;\n }\n\n .help-dropdown {\n position: absolute;\n top: calc(100% + 0.9rem);\n right: 0;\n min-width: 12rem;\n padding: 0.5rem;\n background: var(--header-button-bg);\n border: 1px solid var(--header-border);\n border-radius: var(--header-border-radius);\n box-shadow: var(--header-shadow);\n z-index: 10;\n }\n\n .help-dropdown[hidden] {\n display: none;\n }\n\n .help-dropdown-content {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n }\n\n .help-menu-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n }\n\n .help-menu-list a,\n .help-menu-list button,\n ::slotted([slot='help-menu']) {\n display: block;\n width: 100%;\n box-sizing: border-box;\n color: var(--header-link);\n text-decoration: none;\n background: transparent;\n border: 1px solid transparent;\n border-radius: 4px;\n padding: 0.375rem 0.5rem;\n cursor: pointer;\n font: inherit;\n text-align: left;\n }\n\n .help-menu-list a:hover,\n .help-menu-list button:hover {\n color: var(--header-link);\n background: var(--header-menu-item-hover);\n border-color: var(--header-menu-item-hover);\n }\n\n .help-menu-list a:active,\n .help-menu-list button:active {\n color: var(--header-link);\n background: var(--header-menu-item-selected);\n border-color: var(--header-menu-item-selected);\n transform: translateY(1px);\n }\n\n ::slotted(a), ::slotted(button) {\n color: var(--header-link);\n text-decoration: none;\n background: var(--header-button-bg);\n border: 1px solid var(--header-border);\n border-radius: 4px;\n padding: 0.25rem 0.5rem;\n cursor: pointer;\n font: inherit;\n }\n\n .help-icon {\n width: 35px;\n height: 35px;\n cursor: pointer;\n }\n\n .help-text {\n color: var(--header-text, #ffffff);\n font: inherit;\n }\n\n .logout-action-icon {\n width: 16px;\n height: 16px;\n display: inline-block;\n object-fit: contain;\n margin-right: 0.5rem;\n }\n `\n\n declare logo: string\n declare helpIcon: string\n declare layout: 'desktop' | 'mobile'\n declare theme: 'light' | 'dark'\n declare brandLink: string\n declare authState: HeaderAuthState\n declare loginAction: HeaderMenuItem\n declare signUpAction: HeaderMenuItem\n declare accountMenu: HeaderAccountMenuItem[]\n declare logoutLabel: string | null\n declare logoutIcon: string\n declare accountIcon: string\n declare accountAvatar: string\n declare accountAvatarFallback: string\n declare loginIcon: string\n declare signUpIcon: string\n declare helpMenuList: HeaderMenuItem[]\n declare accountMenuOpen: boolean\n declare helpMenuOpen: boolean\n declare hasSlottedAccountMenu: boolean\n declare hasSlottedHelpMenu: boolean\n declare authResolved: boolean\n private _refreshPromise: Promise<void> | null = null\n\n private readonly handleAuthSessionChange = () => {\n this.refreshAuthStateFromSession().catch(() => {\n // Keep auth event handling resilient on transient refresh failures.\n })\n }\n\n constructor () {\n super()\n this.logo = DEFAULT_SOLID_ICON_URL\n this.helpIcon = DEFAULT_HELP_MENU_ICON\n this.layout = 'desktop'\n this.theme = 'light'\n this.brandLink = '#'\n this.authState = 'logged-out'\n this.loginAction = { label: 'Log In', action: 'login' }\n this.signUpAction = { label: 'Sign Up', action: 'sign-up', url: DEFAULT_SIGNUP_URL }\n this.accountMenu = []\n this.logoutLabel = 'Log Out'\n this.logoutIcon = ''\n this.accountIcon = '▼'\n this.accountAvatar = ''\n this.accountAvatarFallback = ''\n this.loginIcon = ''\n this.signUpIcon = ''\n this.helpMenuList = []\n this.accountMenuOpen = false\n this.helpMenuOpen = false\n this.hasSlottedAccountMenu = false\n this.hasSlottedHelpMenu = false\n this.authResolved = false\n }\n\n connectedCallback () {\n super.connectedCallback()\n document.addEventListener('click', this.handleDocumentClick)\n window.addEventListener('keydown', this.handleWindowKeydown)\n if (typeof authSession.events?.on === 'function') {\n authSession.events.on('login', this.handleAuthSessionChange)\n authSession.events.on('logout', this.handleAuthSessionChange)\n authSession.events.on('sessionRestore', this.handleAuthSessionChange)\n }\n this.refreshAuthStateFromSession().catch(() => {\n // Keep initial header render resilient on transient refresh failures.\n })\n }\n\n disconnectedCallback () {\n document.removeEventListener('click', this.handleDocumentClick)\n window.removeEventListener('keydown', this.handleWindowKeydown)\n if (typeof authSession.events?.off === 'function') {\n authSession.events.off('login', this.handleAuthSessionChange)\n authSession.events.off('logout', this.handleAuthSessionChange)\n authSession.events.off('sessionRestore', this.handleAuthSessionChange)\n }\n super.disconnectedCallback()\n }\n\n private async refreshAuthStateFromSession () {\n if (!this._refreshPromise) {\n this._refreshPromise = (async () => {\n try {\n await authn.checkUser()\n // Some auth stacks resolve session state asynchronously after first check.\n if (!authn.currentUser()) {\n await authn.checkUser()\n }\n } catch (_err) {\n // Keep rendering even if session refresh cannot complete.\n }\n })()\n }\n\n try {\n await this._refreshPromise\n } finally {\n this._refreshPromise = null\n }\n\n this.authState = authn.currentUser() ? 'logged-in' : 'logged-out'\n this.authResolved = true\n }\n\n private handleHelpMenuClick (item: HeaderMenuItem, event: MouseEvent) {\n event.preventDefault()\n this.helpMenuOpen = false\n this.dispatchEvent(new CustomEvent('help-menu-select', {\n detail: item,\n bubbles: true,\n composed: true\n }))\n if (item.url) {\n const target = item.target || '_blank'\n const features = target === '_blank' ? 'noopener,noreferrer' : undefined\n window.open(item.url, target, features)\n }\n }\n\n private handleAccountMenuClick (item: HeaderAccountMenuItem) {\n this.accountMenuOpen = false\n this.dispatchEvent(new CustomEvent('account-menu-select', {\n detail: item,\n bubbles: true,\n composed: true\n }))\n }\n\n private readonly handleDocumentClick = (event: MouseEvent) => {\n if (!event.composedPath().includes(this)) {\n this.accountMenuOpen = false\n this.helpMenuOpen = false\n }\n }\n\n private readonly handleWindowKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && (this.accountMenuOpen || this.helpMenuOpen)) {\n this.accountMenuOpen = false\n this.helpMenuOpen = false\n }\n }\n\n private handleAccountSlotChange (event: Event) {\n const slot = event.target as HTMLSlotElement\n this.hasSlottedAccountMenu = slot.assignedElements({ flatten: true }).length > 0\n }\n\n private handleHelpSlotChange (event: Event) {\n const slot = event.target as HTMLSlotElement\n this.hasSlottedHelpMenu = slot.assignedElements({ flatten: true }).length > 0\n }\n\n private toggleAccountMenu (event: MouseEvent) {\n event.preventDefault()\n if (!this.hasAccountMenuItems()) return\n this.helpMenuOpen = false\n this.accountMenuOpen = !this.accountMenuOpen\n }\n\n private toggleHelpMenu (event: MouseEvent) {\n event.preventDefault()\n if (!this.hasHelpMenuItems()) return\n this.accountMenuOpen = false\n this.helpMenuOpen = !this.helpMenuOpen\n }\n\n private hasAccountMenuItems () {\n return Boolean(this.accountMenu?.length || this.hasSlottedAccountMenu || this.logoutLabel)\n }\n\n private hasHelpMenuItems () {\n return Boolean(this.helpMenuList?.length || this.hasSlottedHelpMenu)\n }\n\n private shouldRenderHelpMenu () {\n return this.layout !== 'mobile' && this.hasHelpMenuItems()\n }\n\n private renderLoggedInAvatar (avatar?: string, wrapperClass = 'account-avatar') {\n const hasAvatar = Boolean(avatar)\n const imageSrc = hasAvatar ? avatar : this.accountAvatarFallback || DEFAULT_LOGGEDIN_MENU_BUTTON_AVATAR\n const imageAlt = hasAvatar ? 'Profile Avatar' : 'Default Avatar'\n\n if (this.layout === 'mobile' && wrapperClass === 'account-avatar') {\n return html`<img class=\"account-avatar-img\" src=\"${imageSrc}\" alt=\"${imageAlt}\" />`\n }\n\n return html`\n <span class=\"${wrapperClass}\" aria-hidden=\"true\">\n <img src=\"${imageSrc}\" alt=\"${imageAlt}\" />\n </span>\n `\n }\n\n private renderLoggedOutActions () {\n return html`\n <div class=\"auth-actions\" part=\"auth-actions\">\n <slot name=\"login-action\">\n <solid-ui-login-button\n label=\"${this.loginAction.label}\"\n icon=${ifDefined(this.layout !== 'mobile' ? (this.loginIcon || this.loginAction.icon) : undefined)}\n layout=\"${this.layout}\"\n theme=\"${this.theme}\"\n part=\"login-action\"\n @login-success=\"${() => this.handleLoginSuccess()}\"\n ></solid-ui-login-button>\n </slot>\n <slot name=\"sign-up-action\">\n <solid-ui-signup-button\n label=\"${this.signUpAction.label}\"\n signup-url=\"${ifDefined(this.signUpAction.url)}\"\n layout=\"${this.layout}\"\n .icon=${ifDefined(this.layout !== 'mobile' ? (this.signUpIcon || this.signUpAction.icon) : undefined)}\n theme=\"${this.theme}\"\n part=\"sign-up-action\"\n ></solid-ui-signup-button>\n </slot>\n </div>\n `\n }\n\n private async handleLoginSuccess () {\n await this.refreshAuthStateFromSession()\n this.dispatchEvent(new CustomEvent('auth-action-select', {\n detail: { role: 'login' },\n bubbles: true,\n composed: true\n }))\n }\n\n private async handleLogout () {\n this.accountMenuOpen = false\n const issuer = window.localStorage.getItem('loginIssuer') || ''\n\n try {\n await authSession.logout()\n } catch (_err) {\n // logout errors are non-fatal — proceed to clear state\n }\n\n await clearPersistedAuthState()\n\n const redirectedToServerLogout = await performServerSideLogout({\n issuer,\n postLogoutRedirectPath: '/'\n })\n if (redirectedToServerLogout) {\n return\n }\n\n await this.refreshAuthStateFromSession()\n this.dispatchEvent(new CustomEvent('logout-select', {\n detail: { role: 'logout' },\n bubbles: true,\n composed: true\n }))\n }\n\n private renderAccountMenuItem (item: HeaderAccountMenuItem) {\n const content = html`\n ${this.renderLoggedInAvatar(item.avatar, 'account-menu-avatar')}\n <span class=\"account-menu-copy\">\n <span class=\"account-menu-label\">${item.label}</span>\n ${item.webid && this.layout !== 'mobile' ? html`<span class=\"account-menu-webid\">${item.webid}</span>` : ''}\n </span>\n `\n\n if (item.url) {\n return html`\n <a\n class=\"account-menu-item-link\"\n href=\"${item.url}\"\n @click=\"${() => this.handleAccountMenuClick(item)}\"\n part=\"account-menu-item\"\n role=\"menuitem\"\n >\n ${content}\n </a>\n `\n }\n\n return html`\n <button\n class=\"account-menu-item-button\"\n type=\"button\"\n @click=\"${() => this.handleAccountMenuClick(item)}\"\n part=\"account-menu-item\"\n role=\"menuitem\"\n >\n ${content}\n </button>\n `\n }\n\n private renderLoggedInActions () {\n return html`\n <div class=\"account-menu-container\" part=\"account-menu-container\">\n <slot name=\"account-trigger\">\n <button\n id=\"accountMenuTrigger\"\n class=\"account-menu-trigger\"\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded=\"${this.accountMenuOpen ? 'true' : 'false'}\"\n ?disabled=\"${!this.hasAccountMenuItems()}\"\n @click=\"${(e: MouseEvent) => this.toggleAccountMenu(e)}\"\n part=\"account-menu-trigger\"\n >\n ${this.renderLoggedInAvatar(this.accountAvatar)}\n ${this.layout !== 'mobile' && this.accountIcon\n? html`\n <img class=\"account-menu-trigger-icon\" src=\"${this.accountIcon}\" alt=\"\" aria-hidden=\"true\" />`\n: ''}\n </button>\n </slot>\n\n <nav\n id=\"accountMenu\"\n class=\"account-dropdown\"\n role=\"menu\"\n ?inert=\"${!this.accountMenuOpen || !this.hasAccountMenuItems()}\"\n ?hidden=\"${!this.accountMenuOpen || !this.hasAccountMenuItems()}\"\n part=\"account-dropdown\"\n >\n <slot name=\"account-switch\" class=\"account-switch\">Switch account</slot>\n <hr class=\"dropdown-menu-separator\" />\n <slot name=\"account-menu\" @slotchange=\"${(e: Event) => this.handleAccountSlotChange(e)}\"></slot>\n ${this.accountMenu && this.accountMenu.length\n ? html`\n <ul class=\"account-menu-list\">\n ${this.accountMenu.map((item: HeaderAccountMenuItem) => html`\n <li>${this.renderAccountMenuItem(item)}</li>\n `)}\n </ul>\n `\n : ''}\n ${this.logoutLabel\n ? html`\n <hr class=\"dropdown-menu-separator\" />\n <button\n class=\"account-menu-item-button\"\n type=\"button\"\n @click=\"${() => this.handleLogout()}\"\n part=\"logout-action\"\n role=\"menuitem\"\n >\n ${this.logoutIcon && this.layout !== 'mobile'\n ? html`<img class=\"logout-action-icon\" src=\"${this.logoutIcon}\" alt=\"\" aria-hidden=\"true\" part=\"logout-action-icon\" />`\n : ''}\n ${this.logoutLabel}\n </button>\n `\n : ''}\n </nav>\n </div>\n `\n }\n\n private renderUserArea () {\n if (Features.DESIGN_SYSTEM_HEADER_ACCOUNT) {\n return html`\n <solid-ui-provider>\n <solid-ui-account></solid-ui-account>\n </solid-ui-provider>\n `\n }\n\n if (!this.authResolved) {\n return html`<div class=\"auth-actions\" part=\"auth-actions\"></div>`\n }\n\n if (this.authState === 'logged-out') {\n return this.renderLoggedOutActions()\n }\n\n return this.renderLoggedInActions()\n }\n\n protected firstUpdated () {\n const brandLink = this.shadowRoot?.getElementById('brandLink')\n if (brandLink) {\n brandLink.classList.toggle('brand-not-displayed', this.layout === 'mobile')\n }\n }\n\n protected updated (changedProperties: Map<string, unknown>) {\n if (changedProperties.has('layout')) {\n const brandLink = this.shadowRoot?.getElementById('brandLink')\n if (brandLink) {\n brandLink.classList.toggle('brand-not-displayed', this.layout === 'mobile')\n }\n }\n }\n\n render () {\n return html`\n <div class=\"headerInner\">\n <slot name=\"navigation-toggle\"></slot>\n <a\n id=\"brandLink\"\n class=\"brand\"\n href=\"${this.brandLink}\"\n part=\"brand\"\n >\n <img id=\"brandImg\" src=\"${this.logo}\" alt=\"Logo\" part=\"logo\" />\n </a>\n\n <div class=\"menu\" part=\"menu\">\n ${this.renderUserArea()}\n\n ${this.shouldRenderHelpMenu()\n ? html`\n <div class=\"header-menu-separator\" />`\n : ''}\n\n ${this.shouldRenderHelpMenu()\n ? html`\n <div class=\"help-menu-container\" part=\"help-menu-container\">\n <button\n id=\"helpMenuTrigger\"\n class=\"help-menu-trigger\"\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded=\"${this.helpMenuOpen ? 'true' : 'false'}\"\n ?disabled=\"${!this.hasHelpMenuItems()}\"\n @click=\"${(e: MouseEvent) => this.toggleHelpMenu(e)}\"\n part=\"help-menu-trigger\"\n >\n ${this.helpIcon\n ? html`<img id=\"helpIcon\" class=\"help-icon\" src=\"${this.helpIcon}\" alt=\"Help\" part=\"help-icon\" />`\n : html`<span class=\"help-text\" part=\"help-text\">Help</span>`}\n </button>\n\n <nav\n id=\"helpMenu\"\n class=\"help-dropdown\"\n role=\"menu\"\n ?inert=\"${!this.helpMenuOpen || !this.hasHelpMenuItems()}\"\n ?hidden=\"${!this.helpMenuOpen || !this.hasHelpMenuItems()}\"\n part=\"help-dropdown\"\n >\n <div class=\"help-dropdown-content\" @click=\"${() => { this.helpMenuOpen = false }}\">\n <slot name=\"help-menu\" @slotchange=\"${(e: Event) => this.handleHelpSlotChange(e)}\"></slot>\n ${this.helpMenuList && this.helpMenuList.length\n ? html`\n <ul class=\"help-menu-list\">\n ${this.helpMenuList.map((item: HeaderMenuItem) => html`\n <li>\n ${item.url\n ? html`\n <a\n href=\"${item.url}\"\n target=\"${item.target || '_blank'}\"\n rel=\"${ifDefined((item.target || '_blank') === '_blank' ? 'noopener noreferrer' : undefined)}\"\n @click=\"${(e: MouseEvent) => this.handleHelpMenuClick(item, e)}\"\n part=\"help-menu-item\"\n role=\"menuitem\"\n >\n ${item.label}\n </a>\n `\n : html`\n <button\n type=\"button\"\n @click=\"${(e: MouseEvent) => this.handleHelpMenuClick(item, e)}\"\n part=\"help-menu-item\"\n role=\"menuitem\"\n >\n ${item.label}\n </button>\n `}\n </li>\n `)}\n </ul>\n `\n : ''}\n </div>\n </nav>\n </div>`\n : ''}\n </div>\n </div>\n `\n }\n}\n","import { Header } from './Header'\n\nexport { Header }\nexport type {\n HeaderAccountMenuItem,\n HeaderAuthState,\n HeaderMenuItem\n} from './Header'\n\nconst HEADER_TAG_NAME = 'solid-ui-header'\n\nif (!customElements.get(HEADER_TAG_NAME)) {\n customElements.define(HEADER_TAG_NAME, Header)\n}\n"],"x_google_ignoreList":[5],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { c as e, s as t } from "./auth-C5d3nG1T.js";
1
+ import { c as e, s as t } from "./auth-BPQUXz9Q.js";
2
2
  import { t as n } from "./consume-BefsVEGX.js";
3
3
  import { r, t as i } from "./components-Dlw2zOvI.js";
4
4
  import { i as a } from "./lit-CC2G_f_C.js";
@@ -205,4 +205,4 @@ var T = C;
205
205
  //#endregion
206
206
  export { C as n, T as t };
207
207
 
208
- //# sourceMappingURL=login-button-D3M_rY5D.js.map
208
+ //# sourceMappingURL=login-button-BKp1-O2q.js.map