solid-ui 3.1.3-11 → 3.1.3-12

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 (153) hide show
  1. package/README.md +2 -0
  2. package/dist/chunks/{account-CdqIoTsl.js → account-Bb818bGF.js} +20 -15
  3. package/dist/chunks/account-Bb818bGF.js.map +1 -0
  4. package/dist/chunks/{auth-D8B5yczR.js → auth-ClVI18ss.js} +90 -79
  5. package/dist/chunks/auth-ClVI18ss.js.map +1 -0
  6. package/dist/chunks/{avatar-DNGFKkhm.js → avatar-DGu_PX5y.js} +12 -4
  7. package/dist/chunks/avatar-DGu_PX5y.js.map +1 -0
  8. package/dist/chunks/{button-oanBb_ha.js → button-B9-nlEpz.js} +2 -2
  9. package/dist/chunks/{button-oanBb_ha.js.map → button-B9-nlEpz.js.map} +1 -1
  10. package/dist/chunks/{combobox-Dav1bNHS.js → combobox-DrT0Nb-A.js} +3 -3
  11. package/dist/chunks/combobox-DrT0Nb-A.js.map +1 -0
  12. package/dist/chunks/{dialog-Ujvm11_B.js → dialog-kyHgc-uy.js} +2 -2
  13. package/dist/chunks/{dialog-Ujvm11_B.js.map → dialog-kyHgc-uy.js.map} +1 -1
  14. package/dist/chunks/{guard-DZGvf4tS.js → guard-DEqOFEs4.js} +78 -52
  15. package/dist/chunks/guard-DEqOFEs4.js.map +1 -0
  16. package/dist/chunks/{login-button-Ta3tkpn4.js → login-button-Czm-E9Na.js} +4 -4
  17. package/dist/chunks/{login-button-Ta3tkpn4.js.map → login-button-Czm-E9Na.js.map} +1 -1
  18. package/dist/chunks/{logout-button-Db6VmUmJ.js → logout-button-BrR_jOhK.js} +4 -4
  19. package/dist/chunks/{logout-button-Db6VmUmJ.js.map → logout-button-BrR_jOhK.js.map} +1 -1
  20. package/dist/chunks/{menu-CQEXqNO6.js → menu-1PG19fCC.js} +3 -3
  21. package/dist/chunks/{menu-CQEXqNO6.js.map → menu-1PG19fCC.js.map} +1 -1
  22. package/dist/chunks/{menu-item-BHJ4xljI.js → menu-item-C9uErV38.js} +71 -54
  23. package/dist/chunks/menu-item-C9uErV38.js.map +1 -0
  24. package/dist/chunks/{provider-CoVkCkMs.js → provider-qd_4VaKB.js} +5 -2
  25. package/dist/chunks/provider-qd_4VaKB.js.map +1 -0
  26. package/dist/chunks/{signup-button-wO4uoqUi.js → signup-button-BnA5p-uJ.js} +4 -4
  27. package/dist/chunks/{signup-button-wO4uoqUi.js.map → signup-button-BnA5p-uJ.js.map} +1 -1
  28. package/dist/chunks/{src-B9CXYA44.js → src-DJOb1wMf.js} +2 -2
  29. package/dist/chunks/{src-B9CXYA44.js.map → src-DJOb1wMf.js.map} +1 -1
  30. package/dist/components/account/Account.cjs.js +6 -4
  31. package/dist/components/account/Account.cjs.js.map +1 -1
  32. package/dist/components/account/Account.d.ts +2 -0
  33. package/dist/components/account/Account.d.ts.map +1 -1
  34. package/dist/components/account/Account.esm.js +10 -4
  35. package/dist/components/account/Account.esm.js.map +1 -1
  36. package/dist/components/account/Account.stories.d.ts +10 -2
  37. package/dist/components/account/Account.stories.d.ts.map +1 -1
  38. package/dist/components/account/Account.styles.cjs.js +1 -1
  39. package/dist/components/account/Account.styles.cjs.js.map +1 -1
  40. package/dist/components/account/Account.styles.esm.js +1 -1
  41. package/dist/components/account/Account.styles.esm.js.map +1 -1
  42. package/dist/components/account.js +1 -1
  43. package/dist/components/all.cjs.js +1 -0
  44. package/dist/components/all.d.ts +2 -0
  45. package/dist/components/all.d.ts.map +1 -0
  46. package/dist/components/all.esm.js +24 -0
  47. package/dist/components/avatar/Avatar.cjs.js +1 -1
  48. package/dist/components/avatar/Avatar.cjs.js.map +1 -1
  49. package/dist/components/avatar/Avatar.d.ts +3 -0
  50. package/dist/components/avatar/Avatar.d.ts.map +1 -1
  51. package/dist/components/avatar/Avatar.esm.js +9 -1
  52. package/dist/components/avatar/Avatar.esm.js.map +1 -1
  53. package/dist/components/avatar/Avatar.stories.d.ts +4 -4
  54. package/dist/components/avatar.js +1 -1
  55. package/dist/components/button/Button.styles.cjs.js +1 -1
  56. package/dist/components/button/Button.styles.cjs.js.map +1 -1
  57. package/dist/components/button/Button.styles.esm.js +1 -1
  58. package/dist/components/button/Button.styles.esm.js.map +1 -1
  59. package/dist/components/button.js +1 -1
  60. package/dist/components/combobox/Combobox.cjs.js +1 -1
  61. package/dist/components/combobox/Combobox.cjs.js.map +1 -1
  62. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  63. package/dist/components/combobox/Combobox.esm.js +1 -1
  64. package/dist/components/combobox/Combobox.esm.js.map +1 -1
  65. package/dist/components/combobox/Combobox.styles.cjs.js +1 -1
  66. package/dist/components/combobox/Combobox.styles.cjs.js.map +1 -1
  67. package/dist/components/combobox/Combobox.styles.esm.js +1 -1
  68. package/dist/components/combobox/Combobox.styles.esm.js.map +1 -1
  69. package/dist/components/combobox.js +1 -1
  70. package/dist/components/dialog.js +1 -1
  71. package/dist/components/guard/Guard.cjs.js +4 -2
  72. package/dist/components/guard/Guard.cjs.js.map +1 -1
  73. package/dist/components/guard/Guard.d.ts +7 -0
  74. package/dist/components/guard/Guard.d.ts.map +1 -1
  75. package/dist/components/guard/Guard.esm.js +74 -48
  76. package/dist/components/guard/Guard.esm.js.map +1 -1
  77. package/dist/components/guard/Guard.stories.d.ts +14 -3
  78. package/dist/components/guard/Guard.stories.d.ts.map +1 -1
  79. package/dist/components/guard.js +1 -1
  80. package/dist/components/index.cjs.js +1 -1
  81. package/dist/components/index.d.ts +0 -1
  82. package/dist/components/index.d.ts.map +1 -1
  83. package/dist/components/index.esm.js +1 -24
  84. package/dist/components/login-button.js +1 -1
  85. package/dist/components/login-modal.js +1 -1
  86. package/dist/components/logout-button.js +1 -1
  87. package/dist/components/menu/Menu.cjs.js +1 -1
  88. package/dist/components/menu/Menu.cjs.js.map +1 -1
  89. package/dist/components/menu/Menu.esm.js +1 -1
  90. package/dist/components/menu/Menu.esm.js.map +1 -1
  91. package/dist/components/menu/Menu.stories.d.ts.map +1 -1
  92. package/dist/components/menu/Menu.styles.cjs.js +1 -1
  93. package/dist/components/menu/Menu.styles.cjs.js.map +1 -1
  94. package/dist/components/menu/Menu.styles.esm.js +1 -1
  95. package/dist/components/menu/Menu.styles.esm.js.map +1 -1
  96. package/dist/components/menu-item/MenuItem.cjs.js +4 -4
  97. package/dist/components/menu-item/MenuItem.cjs.js.map +1 -1
  98. package/dist/components/menu-item/MenuItem.d.ts +1 -0
  99. package/dist/components/menu-item/MenuItem.d.ts.map +1 -1
  100. package/dist/components/menu-item/MenuItem.esm.js +72 -55
  101. package/dist/components/menu-item/MenuItem.esm.js.map +1 -1
  102. package/dist/components/menu-item/MenuItem.styles.cjs.js +1 -1
  103. package/dist/components/menu-item/MenuItem.styles.cjs.js.map +1 -1
  104. package/dist/components/menu-item/MenuItem.styles.esm.js +1 -1
  105. package/dist/components/menu-item/MenuItem.styles.esm.js.map +1 -1
  106. package/dist/components/menu-item.js +1 -1
  107. package/dist/components/menu.js +1 -1
  108. package/dist/components/provider/Provider.cjs.js +1 -1
  109. package/dist/components/provider/Provider.cjs.js.map +1 -1
  110. package/dist/components/provider/Provider.d.ts +1 -0
  111. package/dist/components/provider/Provider.d.ts.map +1 -1
  112. package/dist/components/provider/Provider.esm.js +3 -0
  113. package/dist/components/provider/Provider.esm.js.map +1 -1
  114. package/dist/components/provider.js +1 -1
  115. package/dist/components/signup-button.js +1 -1
  116. package/dist/components.js +14 -14
  117. package/dist/index.js +3 -3
  118. package/dist/lib/auth/NoopAuth.cjs.js +1 -1
  119. package/dist/lib/auth/NoopAuth.cjs.js.map +1 -1
  120. package/dist/lib/auth/NoopAuth.d.ts +2 -2
  121. package/dist/lib/auth/NoopAuth.d.ts.map +1 -1
  122. package/dist/lib/auth/NoopAuth.esm.js +2 -3
  123. package/dist/lib/auth/NoopAuth.esm.js.map +1 -1
  124. package/dist/lib/auth/SolidAuth.cjs.js +1 -1
  125. package/dist/lib/auth/SolidAuth.cjs.js.map +1 -1
  126. package/dist/lib/auth/SolidAuth.d.ts +6 -0
  127. package/dist/lib/auth/SolidAuth.d.ts.map +1 -1
  128. package/dist/lib/auth/SolidAuth.esm.js +28 -16
  129. package/dist/lib/auth/SolidAuth.esm.js.map +1 -1
  130. package/dist/lib/auth/context.cjs.js.map +1 -1
  131. package/dist/lib/auth/context.d.ts +2 -0
  132. package/dist/lib/auth/context.d.ts.map +1 -1
  133. package/dist/lib/auth/context.esm.js.map +1 -1
  134. package/dist/loader.js +3 -3
  135. package/dist/solid-ui.js +92 -88
  136. package/dist/solid-ui.min.js +92 -88
  137. package/dist/solid-ui.min.js.map +1 -1
  138. package/dist/storybook/auth/StorybookAuth.d.ts +1 -0
  139. package/dist/storybook/auth/StorybookAuth.d.ts.map +1 -1
  140. package/dist/storybook/components/StorybookProvider.d.ts +1 -0
  141. package/dist/storybook/components/StorybookProvider.d.ts.map +1 -1
  142. package/dist/storybook/helpers.d.ts.map +1 -1
  143. package/dist/storybook/stubs.d.ts +7 -3
  144. package/dist/storybook/stubs.d.ts.map +1 -1
  145. package/dist/theme.css +1 -1
  146. package/package.json +1 -1
  147. package/dist/chunks/account-CdqIoTsl.js.map +0 -1
  148. package/dist/chunks/auth-D8B5yczR.js.map +0 -1
  149. package/dist/chunks/avatar-DNGFKkhm.js.map +0 -1
  150. package/dist/chunks/combobox-Dav1bNHS.js.map +0 -1
  151. package/dist/chunks/guard-DZGvf4tS.js.map +0 -1
  152. package/dist/chunks/menu-item-BHJ4xljI.js.map +0 -1
  153. package/dist/chunks/provider-CoVkCkMs.js.map +0 -1
package/README.md CHANGED
@@ -130,6 +130,8 @@ You can also use [import maps](https://developer.mozilla.org/en-US/docs/Web/HTML
130
130
  </html>
131
131
  ```
132
132
 
133
+ PS: If you're using the `<solid-ui-provider>` component to wrap your application, make sure to register it first. Otherwise, you may face errors or unexpected behaviour regarding global state.
134
+
133
135
  ## Development
134
136
 
135
137
  When developing a component in solid-ui you can test it in isolation using Storybook:
@@ -1,16 +1,16 @@
1
- import { c as e, s as t } from "./auth-D8B5yczR.js";
2
- import { i as n } from "./dialog-Ujvm11_B.js";
1
+ import { c as e, s as t } from "./auth-ClVI18ss.js";
2
+ import { i as n } from "./dialog-kyHgc-uy.js";
3
3
  import { n as r, r as i } from "./components-PQfnwrHI.js";
4
4
  import { c as a, i as o, n as s } from "./lit-C4H1jI4q.js";
5
5
  import { n as c } from "./decorators-BqWyWiL9.js";
6
6
  import "./chevron-down-ujxRg3MD.js";
7
- import "./button-oanBb_ha.js";
8
- import "./avatar-DNGFKkhm.js";
9
- import "./login-button-Ta3tkpn4.js";
10
- import "./logout-button-Db6VmUmJ.js";
11
- import "./menu-item-BHJ4xljI.js";
12
- import "./menu-CQEXqNO6.js";
13
- import "./signup-button-wO4uoqUi.js";
7
+ import "./button-B9-nlEpz.js";
8
+ import "./avatar-DGu_PX5y.js";
9
+ import "./login-button-Czm-E9Na.js";
10
+ import "./logout-button-BrR_jOhK.js";
11
+ import "./menu-item-C9uErV38.js";
12
+ import "./menu-1PG19fCC.js";
13
+ import "./signup-button-BnA5p-uJ.js";
14
14
  //#region ~icons/lucide/log-in
15
15
  var l = class extends HTMLElement {
16
16
  constructor() {
@@ -36,7 +36,7 @@ var d = class extends HTMLElement {
36
36
  customElements.get("icon-lucide-user") || customElements.define("icon-lucide-user", d);
37
37
  //#endregion
38
38
  //#region src/components/account/Account.styles.css
39
- var f = a`:host{flex-direction:row;gap:10px;display:inline-flex}:host([data-state-loggedIn]){--padding:4px;--border-width:1px;--image-size:1.875rem;& button{background-color:var(--solid-ui-color-body-grey);padding:var(--padding);border-radius:calc((var(--image-size) + 2 * var(--padding) + 2 * var(--border-width)) / 2);color:var(--solid-ui-color-white);justify-content:center;align-items:center;gap:5px;display:inline-flex;& solid-ui-avatar{width:var(--image-size);height:var(--image-size);border:var(--border-width) solid var(--solid-ui-color-white);border-radius:50%}& icon-lucide-chevron-down{width:16px;height:16px}}}`, p, m, h, g, _, v, y, b, x, S, C, w, T;
39
+ var f = a`:host{--image-size:1.875rem;flex-direction:row;gap:10px;display:inline-flex}:host([data-state-initializing]){& icon-svg-spinners-180-ring{width:var(--image-size);height:var(--image-size)}}:host([data-state-loggedIn]){--padding:4px;--border-width:1px;& button{background-color:var(--solid-ui-color-body-grey);padding:var(--padding);border-radius:calc((var(--image-size) + 2 * var(--padding) + 2 * var(--border-width)) / 2);color:var(--solid-ui-color-white);justify-content:center;align-items:center;gap:5px;display:inline-flex;& solid-ui-avatar{width:var(--image-size);height:var(--image-size);border:var(--border-width) solid var(--solid-ui-color-white);border-radius:50%}& icon-lucide-chevron-down{width:16px;height:16px}}}`, p, m, h, g, _, v, y, b, x, S, C, w, T;
40
40
  function E(e, t, n) {
41
41
  D(e, t), t.set(e, n);
42
42
  }
@@ -236,15 +236,15 @@ new (w = (h = /*#__PURE__*/ new WeakMap(), g = /*#__PURE__*/ new WeakMap(), T =
236
236
  super.disconnectedCallback(), this.unsubscribeSessionUpdated?.();
237
237
  }
238
238
  render() {
239
- return this.auth.account ? o`
240
- <solid-ui-menu placement="bottom-end" distance="5">
239
+ return this.auth.initialized ? this.auth.account ? o`
240
+ <solid-ui-menu placement="bottom-end">
241
241
  <button type="button" slot="trigger">
242
242
  <solid-ui-avatar></solid-ui-avatar>
243
243
  <icon-lucide-chevron-down slot="right-icon"></icon-lucide-chevron-down>
244
244
  </button>
245
245
 
246
246
  ${this.menuItems.map((e) => o`
247
- <solid-ui-menu-item .href=${e.href ?? s} @solid-ui-select=${() => e.onSelected?.()}>
247
+ <solid-ui-menu-item .href=${e.href ?? s} ?selected=${e.selected} @solid-ui-select=${() => e.onSelected?.()}>
248
248
  ${e.label}
249
249
  </solid-ui-menu-item>
250
250
  `)}
@@ -268,6 +268,8 @@ new (w = (h = /*#__PURE__*/ new WeakMap(), g = /*#__PURE__*/ new WeakMap(), T =
268
268
  Sign Up
269
269
  </solid-ui-button>
270
270
  </solid-ui-signup-button>
271
+ ` : o`
272
+ <icon-svg-spinners-180-ring></icon-svg-spinners-180-ring>
271
273
  `;
272
274
  }
273
275
  }, {e: [x, C, _], c: [R, v]} = M(m, [[
@@ -280,7 +282,10 @@ new (w = (h = /*#__PURE__*/ new WeakMap(), g = /*#__PURE__*/ new WeakMap(), T =
280
282
  "auth"
281
283
  ]], y, 0, void 0, r), m), p = class extends L {
282
284
  constructor() {
283
- super(R), j(this, "styles", f), j(this, "states", { loggedIn: (e) => !!e.auth.account }), v();
285
+ super(R), j(this, "styles", f), j(this, "states", {
286
+ initializing: (e) => !e.auth.initialized,
287
+ loggedIn: (e) => !!e.auth.account
288
+ }), v();
284
289
  }
285
290
  }, j(p, w, void 0), p)();
286
291
  //#endregion
@@ -289,4 +294,4 @@ var z = R;
289
294
  //#endregion
290
295
  export { R as n, z as t };
291
296
 
292
- //# sourceMappingURL=account-CdqIoTsl.js.map
297
+ //# sourceMappingURL=account-Bb818bGF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-Bb818bGF.js","names":["consume","html","nothing","property","customElement","WebComponent","authContext","DEFAULT_AUTH_CONTEXT","styles","_classDecs","_Account","_Account2","_A","WeakMap","_B","_ref","_menuItemsDecs","type","Array","_authDecs","context","subscribe","_Account3","Account","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_menuItems","_init_auth","_defineProperty","_classPrivateFieldGet","menuItems","v","_classPrivateFieldSet","auth","connectedCallback","unsubscribeSessionUpdated","onSessionUpdated","requestUpdate","disconnectedCallback","render","initialized","account","map","menuItem","href","selected","onSelected","label","e","c","_initClass","_applyDecs","_Class","_identity","initializing","component","loggedIn","default","Account"],"sources":["../../src/components/account/Account.styles.css","../../src/components/account/Account.ts","../../src/components/account/index.ts"],"sourcesContent":[":host {\n --image-size: 1.875rem; /* 30px */\n\n display: inline-flex;\n flex-direction: row;\n gap: 10px;\n}\n\n:host([data-state-initializing]) {\n icon-svg-spinners-180-ring {\n width: var(--image-size);\n height: var(--image-size);\n }\n}\n\n:host([data-state-loggedIn]) {\n --padding: 4px;\n --border-width: 1px;\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, nothing, TemplateResult } from 'lit'\nimport { property } from 'lit/decorators.js'\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'\nimport '@/components/signup-button'\nimport '~icons/lucide/chevron-down'\nimport '~icons/lucide/log-in'\nimport '~icons/lucide/log-out'\nimport '~icons/lucide/user'\nimport '~icons/svg-spinners/180-ring'\n\nimport styles from './Account.styles.css'\n\nexport interface AccountMenuItem {\n label: string | TemplateResult\n href?: string\n selected?: boolean\n onSelected?(): void\n}\n\n@customElement('solid-ui-account')\nexport default class Account extends WebComponent {\n static styles = styles\n static states = {\n initializing: (component: Account) => !component.auth.initialized,\n loggedIn: (component: Account) => !!component.auth.account,\n }\n\n @property({ type: Array })\n accessor menuItems: AccountMenuItem[] = []\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.initialized) {\n return html`\n <icon-svg-spinners-180-ring></icon-svg-spinners-180-ring>\n `\n }\n\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 placement=\"bottom-end\">\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 ${this.menuItems.map(menuItem => html`\n <solid-ui-menu-item .href=${menuItem.href ?? nothing} ?selected=${menuItem.selected} @solid-ui-select=${() => menuItem.onSelected?.()}>\n ${menuItem.label}\n </solid-ui-menu-item>\n `)}\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>\n `\n }\n}\n","import Account, { type AccountMenuItem } from './Account'\n\nexport { Account, type AccountMenuItem }\nexport default Account\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACmByCS,IAAA,CASxCL,EAAc,kBAAkB,CAAC;AAAA,IAAAM;AAAA,KAAAC,KAAAC,kBAAA,IAAAC,QAAA,GAAAC,kBAAA,IAAAD,QAAA,GAAAE,KAAAC,IAQ/Bb,EAAS,EAAEc,MAAMC,MAAM,CAAC,GAACC,IAGzBnB,EAAQ;CAAEoB,SAASd;CAAae,WAAW;AAAK,CAAC,GAAC,cAAAC,IAXrD,cACqCjB,EAAa;CAAAmB,YAAA,GAAAC,GAAA;EAWSK,AAXT,MAAA,GAAAL,CAAA,GAAAC,EAAA,MAAAd,IAAAe,EAAA,IAAA,GAAAC,EAAA,MAQR,CAAA,CAAE,EAAA,GAAAF,EAAA,MAAAZ,GAAAe,EAAA,MAGLtB,CAAoB,CAAA,GAAAuB,EAAA,MAAA,6BAAA,KAAA,CAAA;CAAA;CAAA,KAAAf,KAAA;EAAA,OAAAgB,EAAAnB,GAAA,IAAA;CAAA;CAAA,IAHhDoB,UAASC,GAAA;EAAAC,EAAAtB,GAAA,MAAAqB,CAAA;CAAA;CAAA,IAGDE,OAAI;EAAA,OAAAJ,EAAAjB,GAAA,IAAA;CAAA;CAAA,IAAJqB,KAAIF,GAAA;EAAAC,EAAApB,GAAA,MAAAmB,CAAA;CAAA;CAIrBG,oBAAqB;EAGnB,AAFA,MAAMA,kBAAkB,GAExB,KAAKC,4BAA4B,KAAKF,KAAKG,uBAAuB,KAAKC,cAAc,CAAC;CACxF;CAEAC,uBAAwB;EAGtB,AAFA,MAAMA,qBAAqB,GAE3B,KAAKH,4BAA4B;CACnC;CAEUI,SAAU;EAwBlB,OAvBK,KAAKN,KAAKO,cAMV,KAAKP,KAAKQ,UAiBR1C,CAAI;;;;;;;cAOD,KAAK+B,UAAUY,KAAIC,MAAY5C,CAAI;4CACL4C,EAASC,QAAQ5C,EAAO,aAAc2C,EAASE,SAAQ,0BAA2BF,EAASG,aAAa,EAAC;sBAC/HH,EAASI,MAAK;;aAEvB,EAAC;;;;;;;;QA3BDhD,CAAI;;;;;;;;;;;;;UANJA,CAAI;;;CA0Cf;AACF,GAAC,CAAAiD,GAAA,CAAAtB,GAAAC,GAAAF,IAAAwB,GAAA,CAAAzC,GAAA0C,MAAAC,EAAA/B,GAAA,CAAA;CAAAN;CAAA;CAAA;AAAA,GAAA;CAAAG;CAAA;CAAA;AAAA,CAAA,GAAAV,GAAA,GAAA,KAAA,GAxEoCJ,CAAY,GAAAiB,IAAAgC,IAAA,cAAAC,EAAA;CAAA/B,cAAA;EAAA,MAAAd,CAAA,GAAAoB,EAAA,MAAA,UAC/BtB,CAAM,GAAAsB,EAAA,MAAA,UACN;GACd0B,eAAeC,MAAuB,CAACA,EAAUtB,KAAKO;GACtDgB,WAAWD,MAAuB,CAAC,CAACA,EAAUtB,KAAKQ;EACrD,CAAC,GAAAS,EAAA;CAAA;AAAA,GAAAtB,EAAAwB,GAAA3C,GAAA,KAAA,CAAA,GAAA2C,GAAA;;;AC/BH,IAAA,IAAeM"}
@@ -1,28 +1,27 @@
1
- import { f as e, h as t, p as n, u as r } from "./solid-logic.esm-BrMdCG2_.js";
2
- import { r as i } from "./context-B_xwK-Y_.js";
3
- import { i as a } from "./dialog-Ujvm11_B.js";
4
- import { i as o, n as s, r as c } from "./components-PQfnwrHI.js";
5
- import { c as l, i as u, n as d } from "./lit-C4H1jI4q.js";
6
- import { t as f } from "./show-dialog-eEW5yRBv.js";
7
- import { n as p, t as m } from "./decorators-BqWyWiL9.js";
8
- import { t as h } from "./query-BYu9q8lA.js";
1
+ import { c as e, f as t, h as n, p as r, u as i } from "./solid-logic.esm-BrMdCG2_.js";
2
+ import { r as a } from "./context-B_xwK-Y_.js";
3
+ import { i as o } from "./dialog-kyHgc-uy.js";
4
+ import { i as s, n as c, r as l } from "./components-PQfnwrHI.js";
5
+ import { c as u, i as d, n as f } from "./lit-C4H1jI4q.js";
6
+ import { t as p } from "./show-dialog-eEW5yRBv.js";
7
+ import { n as m, t as h } from "./decorators-BqWyWiL9.js";
8
+ import { t as g } from "./query-BYu9q8lA.js";
9
9
  import "./chevron-down-ujxRg3MD.js";
10
- import "./button-oanBb_ha.js";
10
+ import "./button-B9-nlEpz.js";
11
11
  import "./dialog-content-CEITrC59.js";
12
12
  import "./dialog-footer-DVLEK5bU.js";
13
- import "./combobox-Dav1bNHS.js";
13
+ import "./combobox-DrT0Nb-A.js";
14
14
  import "./combobox-option-DxJvAZ_Q.js";
15
15
  //#region src/lib/auth/Account.ts
16
- var g = class {
16
+ var _ = class {
17
17
  webId;
18
18
  avatarUrl;
19
19
  constructor(e, t) {
20
20
  this.webId = e, this.avatarUrl = t;
21
21
  }
22
- }, _ = class {
23
- get account() {
24
- return null;
25
- }
22
+ }, v = class {
23
+ initialized = !1;
24
+ account = null;
26
25
  async login() {
27
26
  throw Error("Can't use auth, missing context provider");
28
27
  }
@@ -35,14 +34,14 @@ var g = class {
35
34
  onSessionUpdated() {
36
35
  return () => void 0;
37
36
  }
38
- }, v = new _(), y = i(Symbol("auth")), b = class {
37
+ }, y = new v(), b = a(Symbol("auth")), x = class {
39
38
  id;
40
39
  template;
41
40
  element;
42
41
  config;
43
42
  _resolveElement;
44
43
  constructor(e, t = {}) {
45
- this.id = o(), this.template = e, this.config = t, this.element = new Promise((e) => {
44
+ this.id = s(), this.template = e, this.config = t, this.element = new Promise((e) => {
46
45
  this._resolveElement = e;
47
46
  });
48
47
  }
@@ -55,17 +54,17 @@ var g = class {
55
54
  };
56
55
  //#endregion
57
56
  //#region src/lib/dialogs/helpers.ts
58
- function x(e, t = {}) {
59
- let n = new b(e, t);
60
- return document.dispatchEvent(new f(n)), n.element;
57
+ function S(e, t = {}) {
58
+ let n = new x(e, t);
59
+ return document.dispatchEvent(new p(n)), n.element;
61
60
  }
62
61
  //#endregion
63
62
  //#region src/components/login-modal/LoginModal.styles.css
64
- var S = l`.error-message{color:var(--solid-ui-color-error);font-size:var(--solid-ui-font-size-sm);text-align:center;width:100%;font-weight:500}solid-ui-combobox{width:100%}solid-ui-button{flex:1}`, C, w, T, E, D, O, k, A, j, ee, M, N, P, F, I, L, R, z, B, V, H, U, W, G, K;
63
+ var C = u`.error-message{color:var(--solid-ui-color-error);font-size:var(--solid-ui-font-size-sm);text-align:center;width:100%;font-weight:500}solid-ui-combobox{width:100%}solid-ui-button{flex:1}`, w, T, E, D, O, k, A, j, M, N, P, ee, te, F, I, L, R, z, B, V, H, U, W, G, K;
65
64
  function q(e, t, n) {
66
- te(e, t), t.set(e, n);
65
+ ne(e, t), t.set(e, n);
67
66
  }
68
- function te(e, t) {
67
+ function ne(e, t) {
69
68
  if (t.has(e)) throw TypeError("Cannot initialize the same private elements twice on an object");
70
69
  }
71
70
  function J(e, t, n) {
@@ -86,7 +85,7 @@ function Z(e, t, n) {
86
85
  writable: !0
87
86
  }) : e[t] = n, e;
88
87
  }
89
- function ne(e, t, n, r, i, a) {
88
+ function re(e, t, n, r, i, a) {
90
89
  function o(e, t, n) {
91
90
  return function(r, i) {
92
91
  return n && n(r), e[t].call(r, i);
@@ -109,13 +108,13 @@ function ne(e, t, n, r, i, a) {
109
108
  n || Array.isArray(_) || (_ = [_]);
110
109
  var b = {}, x = [], S = i === 3 ? "get" : i === 4 || p ? "set" : "value";
111
110
  d ? (f || p ? b = {
112
- get: ie(function() {
111
+ get: ae(function() {
113
112
  return v(this);
114
113
  }, r, "get"),
115
114
  set: function(e) {
116
115
  t[4](this, e);
117
116
  }
118
- } : b[S] = v, f || ie(b[S], r, i === 2 ? "" : S)) : f || (b = Object.getOwnPropertyDescriptor(e, r));
117
+ } : b[S] = v, f || ae(b[S], r, i === 2 ? "" : S)) : f || (b = Object.getOwnPropertyDescriptor(e, r));
119
118
  }
120
119
  for (var C = e, w = _.length - 1; w >= 0; w -= n ? 2 : 1) {
121
120
  var T = _[w], E = n ? _[w - 1] : void 0, D = {}, O = {
@@ -175,7 +174,7 @@ function ne(e, t, n, r, i, a) {
175
174
  if (arguments.length >= 6) var d = a[Symbol.metadata || Symbol.for("Symbol.metadata")];
176
175
  var f = Object.create(d ?? null), p = function(e, t, n, r) {
177
176
  var i, a, o = [], c = function(t) {
178
- return ae(t) === e;
177
+ return oe(t) === e;
179
178
  }, u = /* @__PURE__ */ new Map();
180
179
  function d(e) {
181
180
  e && o.push(s.bind(null, e));
@@ -203,10 +202,10 @@ function ne(e, t, n, r, i, a) {
203
202
  };
204
203
  }
205
204
  function Q(e) {
206
- var t = re(e, "string");
205
+ var t = ie(e, "string");
207
206
  return typeof t == "symbol" ? t : t + "";
208
207
  }
209
- function re(e, t) {
208
+ function ie(e, t) {
210
209
  if (typeof e != "object" || !e) return e;
211
210
  var n = e[Symbol.toPrimitive];
212
211
  if (n !== void 0) {
@@ -216,7 +215,7 @@ function re(e, t) {
216
215
  }
217
216
  return (t === "string" ? String : Number)(e);
218
217
  }
219
- function ie(e, t, n) {
218
+ function ae(e, t, n) {
220
219
  typeof t == "symbol" && (t = (t = t.description) ? "[" + t + "]" : "");
221
220
  try {
222
221
  Object.defineProperty(e, "name", {
@@ -226,75 +225,75 @@ function ie(e, t, n) {
226
225
  } catch {}
227
226
  return e;
228
227
  }
229
- function ae(e) {
228
+ function oe(e) {
230
229
  if (Object(e) !== e) throw TypeError("right-hand side of 'in' should be an object, got " + (e === null ? "null" : typeof e));
231
230
  return e;
232
231
  }
233
- function oe(e) {
232
+ function se(e) {
234
233
  return e;
235
234
  }
236
- M = [c("solid-ui-login-modal")];
235
+ P = [l("solid-ui-login-modal")];
237
236
  var $;
238
- new (G = (T = /*#__PURE__*/ new WeakMap(), E = /*#__PURE__*/ new WeakMap(), D = /*#__PURE__*/ new WeakMap(), O = /*#__PURE__*/ new WeakMap(), k = /*#__PURE__*/ new WeakMap(), A = /*#__PURE__*/ new WeakMap(), K = (N = p({
237
+ new (G = (E = /*#__PURE__*/ new WeakMap(), D = /*#__PURE__*/ new WeakMap(), O = /*#__PURE__*/ new WeakMap(), k = /*#__PURE__*/ new WeakMap(), A = /*#__PURE__*/ new WeakMap(), j = /*#__PURE__*/ new WeakMap(), K = (ee = m({
239
238
  type: String,
240
239
  reflect: !0
241
- }), F = m(), L = m(), z = m(), V = a({
242
- context: y,
240
+ }), F = h(), L = h(), z = h(), V = o({
241
+ context: b,
243
242
  subscribe: !0
244
- }), U = h("solid-ui-dialog"), "issuerUrl"), w = class extends s {
243
+ }), U = g("solid-ui-dialog"), "issuerUrl"), T = class extends c {
245
244
  constructor(...e) {
246
- super(...e), q(this, T, (j(this), P(this, ""))), q(this, E, I(this, "")), q(this, D, R(this, !1)), q(this, O, B(this, !1)), q(this, k, H(this, v)), q(this, A, W(this, null));
245
+ super(...e), q(this, E, (M(this), te(this, ""))), q(this, D, I(this, "")), q(this, O, R(this, !1)), q(this, k, B(this, !1)), q(this, A, H(this, y)), q(this, j, W(this, null));
247
246
  }
248
247
  get [K]() {
249
- return Y(T, this);
248
+ return Y(E, this);
250
249
  }
251
250
  set issuerUrl(e) {
252
- J(T, this, e);
251
+ J(E, this, e);
253
252
  }
254
253
  get issuerInputValue() {
255
- return Y(E, this);
254
+ return Y(D, this);
256
255
  }
257
256
  set issuerInputValue(e) {
258
- J(E, this, e);
257
+ J(D, this, e);
259
258
  }
260
259
  get failed() {
261
- return Y(D, this);
260
+ return Y(O, this);
262
261
  }
263
262
  set failed(e) {
264
- J(D, this, e);
263
+ J(O, this, e);
265
264
  }
266
265
  get submitting() {
267
- return Y(O, this);
266
+ return Y(k, this);
268
267
  }
269
268
  set submitting(e) {
270
- J(O, this, e);
269
+ J(k, this, e);
271
270
  }
272
271
  get auth() {
273
- return Y(k, this);
272
+ return Y(A, this);
274
273
  }
275
274
  set auth(e) {
276
- J(k, this, e);
275
+ J(A, this, e);
277
276
  }
278
277
  get dialog() {
279
- return Y(A, this);
278
+ return Y(j, this);
280
279
  }
281
280
  set dialog(e) {
282
- J(A, this, e);
281
+ J(j, this, e);
283
282
  }
284
283
  connectedCallback() {
285
284
  super.connectedCallback(), this.issuerInputValue = typeof localStorage < "u" && localStorage.getItem("loginIssuer") || this.issuerUrl || "";
286
285
  }
287
286
  render() {
288
- let e = r();
289
- return u`
287
+ let e = i();
288
+ return d`
290
289
  <solid-ui-dialog title="Select an identity provider">
291
290
  <form @submit=${this.onSubmit}>
292
291
  <solid-ui-dialog-content>
293
292
  <solid-ui-combobox label="Solid Identity Provider" .value=${this.issuerInputValue} @input=${this.onIssuerInputChange}>
294
- ${e.map((e) => u`<solid-ui-combobox-option value="${e.uri}">${e.name}</solid-ui-combobox-option>`)}
293
+ ${e.map((e) => d`<solid-ui-combobox-option value="${e.uri}">${e.name}</solid-ui-combobox-option>`)}
295
294
  </solid-ui-combobox>
296
295
 
297
- ${this.failed ? u`<p class="error-message">Something went wrong</p>` : d}
296
+ ${this.failed ? d`<p class="error-message">Something went wrong</p>` : f}
298
297
  </solid-ui-dialog-content>
299
298
 
300
299
  <solid-ui-dialog-footer>
@@ -331,9 +330,9 @@ new (G = (T = /*#__PURE__*/ new WeakMap(), E = /*#__PURE__*/ new WeakMap(), D =
331
330
  }
332
331
  }
333
332
  }
334
- }, {e: [P, I, R, B, H, W, j], c: [$, ee]} = ne(w, [
333
+ }, {e: [te, I, R, B, H, W, M], c: [$, N]} = re(T, [
335
334
  [
336
- N,
335
+ ee,
337
336
  1,
338
337
  "issuerUrl"
339
338
  ],
@@ -362,53 +361,65 @@ new (G = (T = /*#__PURE__*/ new WeakMap(), E = /*#__PURE__*/ new WeakMap(), D =
362
361
  1,
363
362
  "dialog"
364
363
  ]
365
- ], M, 0, void 0, s), w), C = class extends oe {
364
+ ], P, 0, void 0, c), T), w = class extends se {
366
365
  constructor() {
367
- super($), Z(this, "styles", S), ee();
366
+ super($), Z(this, "styles", C), N();
368
367
  }
369
- }, Z(C, G, void 0), C)();
368
+ }, Z(w, G, void 0), w)();
370
369
  //#endregion
371
370
  //#region src/components/login-modal/index.ts
372
- var se = $, ce = "https://solidproject.org/get_a_pod";
373
- function le(n) {
374
- let r = e.store, i = r.sym(n), a = r.any(i, t.sioc("avatar")) || r.any(i, t.foaf("img")) || r.any(i, t.vcard("logo")) || r.any(i, t.vcard("hasPhoto")) || r.any(i, t.vcard("photo")) || r.any(i, t.foaf("depiction"));
371
+ var ce = $, le = "https://solidproject.org/get_a_pod";
372
+ function ue(e) {
373
+ let r = t.store, i = r.sym(e), a = r.any(i, n.sioc("avatar")) || r.any(i, n.foaf("img")) || r.any(i, n.vcard("logo")) || r.any(i, n.vcard("hasPhoto")) || r.any(i, n.vcard("photo")) || r.any(i, n.foaf("depiction"));
375
374
  return a ? a.value : void 0;
376
375
  }
377
- var ue = class {
378
- constructor(e = ce) {
376
+ var de = class {
377
+ _initialized = !1;
378
+ profileLoaded = !1;
379
+ listeners = [];
380
+ constructor(e = le) {
379
381
  this.signupUrl = e;
380
382
  }
383
+ async initialize() {
384
+ await e.checkUser(), this._initialized = !0, this.listeners.forEach((e) => e());
385
+ }
386
+ async loadProfile() {
387
+ this.profileLoaded || !this.account || (this.profileLoaded = !0, await t.profile.loadMe(), this.listeners.forEach((e) => e()));
388
+ }
389
+ get initialized() {
390
+ return this._initialized;
391
+ }
381
392
  get account() {
382
- let e = n.webId ?? n.info?.webId;
383
- return !(n.isActive ?? n.info?.isLoggedIn ?? !!e) || !e ? null : new g(e, le(e));
393
+ let e = r.webId ?? r.info?.webId;
394
+ return !(r.isActive ?? r.info?.isLoggedIn ?? !!e) || !e ? null : new _(e, ue(e));
384
395
  }
385
- async login(t) {
386
- if (!t) {
387
- x(u`<solid-ui-login-modal></solid-ui-login-modal>`);
396
+ async login(e) {
397
+ if (!e) {
398
+ S(d`<solid-ui-login-modal></solid-ui-login-modal>`);
388
399
  return;
389
400
  }
390
- e.store.updater.flagAuthorizationMetadata();
391
- let r = new URL(window.location.href).hash;
392
- r && window.localStorage.setItem("preLoginRedirectHash", r), window.localStorage.setItem("loginIssuer", t);
401
+ t.store.updater.flagAuthorizationMetadata();
402
+ let n = new URL(window.location.href).hash;
403
+ n && window.localStorage.setItem("preLoginRedirectHash", n), window.localStorage.setItem("loginIssuer", e);
393
404
  let i = new URL(window.location.href);
394
- i.hash = "", await n.login(t, i.href);
405
+ i.hash = "", await r.login(e, i.href);
395
406
  }
396
407
  async signup() {
397
408
  window.open(this.signupUrl, "_blank", "noopener,noreferrer");
398
409
  }
399
410
  async logout() {
400
- await n.logout();
411
+ await r.logout();
401
412
  }
402
413
  onSessionUpdated(e) {
403
- let t = n, r = () => {
414
+ let t = r, n = () => {
404
415
  e();
405
416
  };
406
- return typeof t.addEventListener == "function" ? t.addEventListener("sessionStateChange", r) : (n.events.on("login", e), n.events.on("logout", e), n.events.on("sessionRestore", e)), () => {
407
- typeof t.removeEventListener == "function" ? t.removeEventListener("sessionStateChange", r) : (n.events.off("login", e), n.events.off("logout", e), n.events.off("sessionRestore", e));
417
+ return this.listeners.push(n), typeof t.addEventListener == "function" ? t.addEventListener("sessionStateChange", n) : (r.events.on("login", n), r.events.on("logout", n), r.events.on("sessionRestore", n)), () => {
418
+ this.listeners = this.listeners.filter((e) => e !== n), typeof t.removeEventListener == "function" ? t.removeEventListener("sessionStateChange", n) : (r.events.off("login", n), r.events.off("logout", n), r.events.off("sessionRestore", n));
408
419
  };
409
420
  }
410
421
  };
411
422
  //#endregion
412
- 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 };
423
+ export { S as a, b as c, $ as i, v as l, de as n, x as o, ce as r, y as s, le as t, _ as u };
413
424
 
414
- //# sourceMappingURL=auth-D8B5yczR.js.map
425
+ //# sourceMappingURL=auth-ClVI18ss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-ClVI18ss.js","names":["Account","webId","avatarUrl","constructor","NoopAuth","initialized","account","login","Error","signup","logout","onSessionUpdated","undefined","createContext","NoopAuth","DEFAULT_AUTH_CONTEXT","authContext","Symbol","generateId","Dialog","id","template","element","config","_resolveElement","constructor","Promise","resolve","setElement","closed","data","onClose","ShowDialogEvent","Dialog","showDialog","template","config","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","Account","ns","authn","authSession","solidLogicSingleton","showDialog","html","DEFAULT_SIGNUP_URL","findAccountImage","webId","store","me","sym","image","any","sioc","foaf","vcard","value","undefined","SolidAuth","_initialized","profileLoaded","listeners","constructor","signupUrl","initialize","checkUser","forEach","listener","loadProfile","account","profile","loadMe","initialized","info","isActive","isLoggedIn","Boolean","avatarUrl","login","loginUrl","updater","flagAuthorizationMetadata","preLoginRedirectHash","URL","window","location","href","hash","localStorage","setItem","locationUrl","signup","open","logout","onSessionUpdated","callback","sessionEventTarget","push","addEventListener","events","on","filter","_listener","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'\n\nexport default class NoopAuth implements AuthContext {\n public readonly initialized = false\n public readonly account = null\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 initialized: boolean;\n account: Account | null;\n login(loginUrl?: string): Promise<void>;\n loadProfile?(): 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 interface DialogConfig {\n onClose?(data?: unknown): void\n}\n\nexport default class Dialog {\n public readonly id: string\n public readonly template: TemplateResult\n public readonly element: Promise<HTMLElement>\n public readonly config: DialogConfig\n private _resolveElement!: (element: HTMLElement) => void\n\n constructor (template: TemplateResult, config: DialogConfig = {}) {\n this.id = generateId()\n this.template = template\n this.config = config\n this.element = new Promise(resolve => {\n this._resolveElement = resolve\n })\n }\n\n setElement (element: HTMLElement) {\n this._resolveElement(element)\n }\n\n closed (data?: unknown) {\n this.config.onClose?.(data)\n }\n}\n","import { TemplateResult } from 'lit'\nimport { ShowDialogEvent } from './events/show-dialog'\nimport Dialog, { DialogConfig } from './Dialog'\n\nexport function showDialog<T extends HTMLElement = HTMLElement> (template: TemplateResult, config: DialogConfig = {}): Promise<T> {\n const dialog = new Dialog(template, config)\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 Account from '@/lib/auth/Account'\nimport ns from '@/lib/ns'\nimport { authn, authSession, solidLogicSingleton } from 'solid-logic'\nimport { AuthContext } from '@/lib/auth'\nimport { showDialog } from '@/lib/dialogs'\nimport { html } from 'lit'\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 private _initialized = false\n private profileLoaded = false\n private listeners: (() => unknown)[] = []\n\n constructor (public signupUrl: string = DEFAULT_SIGNUP_URL) {}\n\n async initialize () {\n await authn.checkUser()\n\n this._initialized = true\n this.listeners.forEach(listener => listener())\n }\n\n async loadProfile () {\n if (this.profileLoaded || !this.account) {\n return\n }\n\n this.profileLoaded = true\n\n await solidLogicSingleton.profile.loadMe()\n\n this.listeners.forEach(listener => listener())\n }\n\n get initialized (): boolean {\n return this._initialized\n }\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\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\n this.listeners.push(listener)\n\n if (typeof sessionEventTarget.addEventListener === 'function') {\n sessionEventTarget.addEventListener('sessionStateChange', listener)\n } else {\n authSession.events.on('login', listener)\n authSession.events.on('logout', listener)\n authSession.events.on('sessionRestore', listener)\n }\n\n return () => {\n this.listeners = this.listeners.filter(_listener => _listener !== listener)\n\n if (typeof sessionEventTarget.removeEventListener === 'function') {\n sessionEventTarget.removeEventListener('sessionStateChange', listener)\n } else {\n authSession.events.off('login', listener)\n authSession.events.off('logout', listener)\n authSession.events.off('sessionRestore', listener)\n }\n }\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { c as e, s as t } from "./auth-D8B5yczR.js";
2
- import { i as n } from "./dialog-Ujvm11_B.js";
1
+ import { c as e, s as t } from "./auth-ClVI18ss.js";
2
+ import { i as n } from "./dialog-kyHgc-uy.js";
3
3
  import { n as r, r as i } from "./components-PQfnwrHI.js";
4
4
  import { c as a, i as o } from "./lit-C4H1jI4q.js";
5
5
  //#region ~icons/lucide/circle-user
@@ -190,7 +190,7 @@ new (_ = (d = /*#__PURE__*/ new WeakMap(), v = (h = n({
190
190
  subscribe: !0
191
191
  }), "auth"), u = class extends r {
192
192
  constructor(...e) {
193
- super(...e), y(this, d, (f(this), g(this, t)));
193
+ super(...e), y(this, d, (f(this), g(this, t))), w(this, "unsubscribeSessionUpdated", void 0);
194
194
  }
195
195
  get [v]() {
196
196
  return S(d, this);
@@ -198,6 +198,14 @@ new (_ = (d = /*#__PURE__*/ new WeakMap(), v = (h = n({
198
198
  set auth(e) {
199
199
  x(d, this, e);
200
200
  }
201
+ connectedCallback() {
202
+ super.connectedCallback(), this.auth.loadProfile?.(), this.unsubscribeSessionUpdated = this.auth.onSessionUpdated(() => {
203
+ this.auth.loadProfile?.(), this.requestUpdate();
204
+ });
205
+ }
206
+ disconnectedCallback() {
207
+ super.disconnectedCallback(), this.unsubscribeSessionUpdated?.();
208
+ }
201
209
  render() {
202
210
  return this.auth.account?.avatarUrl ? o`
203
211
  <img src="${this.auth.account?.avatarUrl}" alt="" />
@@ -220,4 +228,4 @@ var M = j;
220
228
  //#endregion
221
229
  export { j as n, M as t };
222
230
 
223
- //# sourceMappingURL=avatar-DNGFKkhm.js.map
231
+ //# sourceMappingURL=avatar-DGu_PX5y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar-DGu_PX5y.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","_defineProperty","_classPrivateFieldGet","auth","v","_classPrivateFieldSet","connectedCallback","loadProfile","unsubscribeSessionUpdated","onSessionUpdated","requestUpdate","disconnectedCallback","render","account","avatarUrl","e","c","_initClass","_applyDecs","_Class","_identity","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([data-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 private unsubscribeSessionUpdated?: () => void\n\n connectedCallback () {\n super.connectedCallback()\n\n this.auth.loadProfile?.()\n\n this.unsubscribeSessionUpdated = this.auth.onSessionUpdated(() => {\n this.auth.loadProfile?.()\n this.requestUpdate()\n })\n }\n\n disconnectedCallback () {\n super.disconnectedCallback()\n\n this.unsubscribeSessionUpdated?.()\n }\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;EAOUI,AAPV,MAAA,GAAAJ,CAAA,GAAAC,EAAA,MAAAV,IAAAW,EAAA,IAAA,GAAAC,EAAA,MAOVjB,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;EAKnB,AAJA,MAAMA,kBAAkB,GAExB,KAAKH,KAAKI,cAAc,GAExB,KAAKC,4BAA4B,KAAKL,KAAKM,uBAAuB;GAEhE,AADA,KAAKN,KAAKI,cAAc,GACxB,KAAKG,cAAc;EACrB,CAAC;CACH;CAEAC,uBAAwB;EAGtB,AAFA,MAAMA,qBAAqB,GAE3B,KAAKH,4BAA4B;CACnC;CAEUI,SAAU;EAOlB,OANK,KAAKT,KAAKU,SAASC,YAMjBjC,CAAI;oBACK,KAAKsB,KAAKU,SAASC,UAAS;QANnCjC,CAAI;;;CAQf;AACF,GAAC,CAAAkC,GAAA,CAAAf,GAAAD,IAAAiB,GAAA,CAAA9B,GAAA+B,MAAAC,EAAAxB,GAAA,CAAA;CAAAH;CAAA;CAAA;AAAA,CAAA,GAAAN,GAAA,GAAA,KAAA,GAvCmCN,CAAY,GAAAe,IAAAyB,IAAA,cAAAC,EAAA;CAAAxB,cAAA;EAAA,MAAAV,CAAA,GAAAe,EAAA,MAAA,UAC9BjB,CAAM,GAAAiB,EAAA,MAAA,UACN,EACdoB,WAAWC,MAAsB,CAACA,EAAUnB,KAAKU,SAASC,UAC5D,CAAC,GAAAG,EAAA;CAAA;AAAA,GAAAhB,EAAAkB,GAAAhC,GAAA,KAAA,CAAA,GAAAgC,GAAA;;;ACXH,IAAA,IAAeK"}
@@ -10,7 +10,7 @@ var o = class extends HTMLElement {
10
10
  customElements.get("icon-svg-spinners-180-ring") || customElements.define("icon-svg-spinners-180-ring", o);
11
11
  //#endregion
12
12
  //#region src/components/button/Button.styles.css
13
- var s = n`:host{--text-color:var(--solid-ui-color-white);--border-color:var(--solid-ui-color-primary);--background-color:var(--solid-ui-color-primary);--hover-text-color:var(--text-color);--hover-border-color:var(--solid-ui-color-tertiary);--hover-background-color:var(--solid-ui-color-tertiary);display:inline-flex;& button{font-size:var(--solid-ui-font-size-md);color:var(--text-color);background:var(--background-color);border:1px solid var(--border-color);border-radius:5px;flex:1;justify-content:center;align-items:center;gap:5px;padding:7px 12px;font-weight:600;display:flex;position:relative;&:disabled{opacity:.5;cursor:not-allowed}&:hover:not(:disabled){color:var(--hover-text-color);background:var(--hover-background-color);border-color:var(--hover-border-color)}& icon-svg-spinners-180-ring,& ::slotted([slot=left-icon]),& ::slotted([slot=right-icon]){width:var(--solid-ui-font-size-md);height:var(--solid-ui-font-size-md)}&:after{content:\"\";width:var(--solid-ui-clickable-area);height:var(--solid-ui-clickable-area);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}}}:host([data-has-icon-slot]) button{padding:4px;& ::slotted([slot=icon]){width:var(--solid-ui-font-size-2xl);height:var(--solid-ui-font-size-2xl)}}:host([variant=secondary]) button{--text-color:var(--solid-ui-color-gray-800);--border-color:var(--solid-ui-color-slate-400);--background-color:var(--solid-ui-color-white);--hover-text-color:var(--solid-ui-color-white);--hover-background-color:var(--solid-ui-color-tertiary);--hover-border-color:var(--solid-ui-color-tertiary)}:host([variant=tertiary]) button{--text-color:var(--solid-ui-color-primary);--border-color:transparent;--background-color:transparent;--hover-text-color:var(--solid-ui-color-tertiary);--hover-border-color:var(--solid-ui-color-tertiary);--hover-background-color:transparent;border-width:0 0 1px;border-radius:0;padding:0}:host([variant=outline]) button{--text-color:currentColor;--border-color:currentColor;--background-color:transparent;--hover-text-color:currentColor;--hover-border-color:currentColor;--hover-background-color:color-mix(in srgb, currentColor 25%, transparent)}:host([variant=ghost]) button{--text-color:currentColor;--border-color:transparent;--background-color:transparent;--hover-text-color:currentColor;--hover-border-color:transparent;--hover-background-color:color-mix(in srgb, currentColor 25%, transparent)}`, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S, C, w, T, E;
13
+ var s = n`:host{--text-color:var(--solid-ui-color-white);--border-color:var(--solid-ui-color-primary);--background-color:var(--solid-ui-color-primary);--hover-text-color:var(--text-color);--hover-border-color:var(--solid-ui-color-tertiary);--hover-background-color:var(--solid-ui-color-tertiary);display:inline-flex;& button{font-size:var(--solid-ui-font-size-md);color:var(--text-color);background:var(--background-color);border:1px solid var(--border-color);border-radius:5px;flex:1;justify-content:center;align-items:center;gap:5px;padding:7px 12px;font-weight:600;display:flex;position:relative;&:disabled{opacity:.5;cursor:not-allowed}&:hover:not(:disabled){color:var(--hover-text-color);background:var(--hover-background-color);border-color:var(--hover-border-color)}& icon-svg-spinners-180-ring,& ::slotted([slot=left-icon]),& ::slotted([slot=right-icon]){width:var(--solid-ui-font-size-md);height:var(--solid-ui-font-size-md)}&:after{content:\"\";width:var(--solid-ui-clickable-area);height:var(--solid-ui-clickable-area);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}}}:host([data-has-icon-slot]) button{padding:4px;& ::slotted([slot=icon]){width:var(--solid-ui-font-size-2xl);height:var(--solid-ui-font-size-2xl)}}:host([variant=secondary]) button{--text-color:var(--solid-ui-color-gray-800);--border-color:var(--solid-ui-color-slate-400);--background-color:var(--solid-ui-color-white);--hover-text-color:var(--solid-ui-color-white);--hover-background-color:var(--solid-ui-color-tertiary);--hover-border-color:var(--solid-ui-color-tertiary)}:host([variant=tertiary]) button{--text-color:var(--solid-ui-color-primary);--border-color:transparent;--background-color:transparent;--hover-text-color:var(--solid-ui-color-tertiary);--hover-border-color:var(--solid-ui-color-tertiary);--hover-background-color:transparent;border-width:0 0 1px;border-radius:0;padding:0}:host([variant=outline]) button{--text-color:currentColor;--border-color:currentColor;--background-color:transparent;--hover-text-color:currentColor;--hover-border-color:currentColor;--hover-background-color:color-mix(in srgb, currentColor 25%, transparent)}:host([variant=ghost]) button{--text-color:currentColor;--border-color:transparent;--background-color:transparent;--hover-text-color:currentColor;--hover-border-color:transparent;--hover-background-color:var(--solid-ui-color-primary-hover)}`, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S, C, w, T, E;
14
14
  function D(e, t, n) {
15
15
  O(e, t), t.set(e, n);
16
16
  }
@@ -283,4 +283,4 @@ var V = B;
283
283
  //#endregion
284
284
  export { z as n, B as r, V as t };
285
285
 
286
- //# sourceMappingURL=button-oanBb_ha.js.map
286
+ //# sourceMappingURL=button-B9-nlEpz.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"button-oanBb_ha.js","names":["customElement","WebComponent","html","nothing","property","styles","BUTTON_VARIANTS","_classDecs","_Button","_Button2","_A","WeakMap","_B","_C","_D","_ref","_variantDecs","type","String","reflect","_typeDecs","_disabledDecs","Boolean","_loadingDecs","_Button3","Button","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_variant","_init_type","_init_disabled","undefined","_init_loading","_classPrivateFieldGet","variant","v","_classPrivateFieldSet","disabled","loading","render","onClick","onIconSlotChange","e","slot","target","toggleAttribute","assignedElements","length","getInternals","form","requestSubmit","reset","c","_initClass","_applyDecs","_Class","_identity","_defineProperty","default","Button","BUTTON_VARIANTS"],"sources":["../../src/components/button/Button.styles.css","../../src/components/button/Button.ts","../../src/components/button/index.ts"],"sourcesContent":[":host {\n --text-color: var(--solid-ui-color-white);\n --border-color: var(--solid-ui-color-primary);\n --background-color: var(--solid-ui-color-primary);\n --hover-text-color: var(--text-color);\n --hover-border-color: var(--solid-ui-color-tertiary);\n --hover-background-color: var(--solid-ui-color-tertiary);\n\n display: inline-flex;\n\n button {\n position: relative;\n padding: 7px 12px;\n border-radius: 5px;\n font-size: var(--solid-ui-font-size-md);\n font-weight: 600;\n color: var(--text-color);\n background: var(--background-color);\n border: 1px solid var(--border-color);\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 5px;\n flex: 1;\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n &:hover:not(:disabled) {\n color: var(--hover-text-color);\n background: var(--hover-background-color);\n border-color: var(--hover-border-color);\n }\n\n icon-svg-spinners-180-ring, ::slotted([slot=\"left-icon\"]), ::slotted([slot=\"right-icon\"]) {\n width: var(--solid-ui-font-size-md);\n height: var(--solid-ui-font-size-md);\n }\n\n &::after {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: var(--solid-ui-clickable-area);\n height: var(--solid-ui-clickable-area);\n }\n }\n}\n\n:host([data-has-icon-slot]) button {\n padding: 4px;\n\n ::slotted([slot=\"icon\"]) {\n width: var(--solid-ui-font-size-2xl);\n height: var(--solid-ui-font-size-2xl);\n }\n}\n\n:host([variant='secondary']) button {\n --text-color: var(--solid-ui-color-gray-800);\n --border-color: var(--solid-ui-color-slate-400);\n --background-color: var(--solid-ui-color-white);\n --hover-text-color: var(--solid-ui-color-white);\n --hover-background-color: var(--solid-ui-color-tertiary);\n --hover-border-color: var(--solid-ui-color-tertiary);\n}\n\n:host([variant='tertiary']) button {\n --text-color: var(--solid-ui-color-primary);\n --border-color: transparent;\n --background-color: transparent;\n --hover-text-color: var(--solid-ui-color-tertiary);\n --hover-border-color: var(--solid-ui-color-tertiary);\n --hover-background-color: transparent;\n\n padding: 0;\n border-radius: 0;\n border-width: 0;\n border-bottom-width: 1px;\n}\n\n:host([variant='outline']) button {\n --text-color: currentColor;\n --border-color: currentColor;\n --background-color: transparent;\n --hover-text-color: currentColor;\n --hover-border-color: currentColor;\n --hover-background-color: color-mix(in srgb, currentColor 25%, transparent);\n}\n\n:host([variant='ghost']) button {\n --text-color: currentColor;\n --border-color: transparent;\n --background-color: transparent;\n --hover-text-color: currentColor;\n --hover-border-color: transparent;\n --hover-background-color: color-mix(in srgb, currentColor 25%, transparent);\n}\n","import { customElement, WebComponent } from '@/lib/components'\nimport { html, nothing } from 'lit'\nimport { property } from 'lit/decorators.js'\n\nimport '~icons/svg-spinners/180-ring'\n\nimport styles from './Button.styles.css'\n\nexport const BUTTON_VARIANTS = ['primary', 'secondary', 'tertiary', 'outline', 'ghost'] as const\nexport type ButtonVariant = typeof BUTTON_VARIANTS[number]\n\n@customElement('solid-ui-button')\nexport default class Button extends WebComponent {\n static styles = styles\n static formAssociated = true\n\n @property({ type: String, reflect: true })\n accessor variant: ButtonVariant = 'primary'\n\n @property({ type: String, reflect: true })\n accessor type = 'button'\n\n @property({ type: Boolean })\n accessor disabled: boolean | undefined = undefined\n\n @property({ type: Boolean })\n accessor loading = false\n\n render () {\n const disabled = this.disabled ?? this.loading\n\n return html`\n <button type=${this.type} ?disabled=${disabled} @click=${this.onClick}>\n ${this.loading ? html`<icon-svg-spinners-180-ring></icon-svg-spinners-180-ring>` : nothing}\n <slot name=\"left-icon\"></slot>\n <slot @slotchange=${this.onIconSlotChange} name=\"icon\"></slot>\n <slot></slot>\n <slot name=\"right-icon\"></slot>\n </button>\n `\n }\n\n private onIconSlotChange (e: Event) {\n const slot = e.target as HTMLSlotElement\n\n this.toggleAttribute('data-has-icon-slot', slot.assignedElements().length > 0)\n }\n\n private onClick () {\n switch (this.type) {\n case 'submit':\n this.getInternals().form?.requestSubmit()\n break\n case 'reset':\n this.getInternals().form?.reset()\n break\n }\n }\n}\n","import Button, { BUTTON_VARIANTS, type ButtonVariant } from './Button'\n\nexport { Button, BUTTON_VARIANTS, type ButtonVariant }\nexport default Button\n"],"mappings":"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"}
1
+ {"version":3,"file":"button-B9-nlEpz.js","names":["customElement","WebComponent","html","nothing","property","styles","BUTTON_VARIANTS","_classDecs","_Button","_Button2","_A","WeakMap","_B","_C","_D","_ref","_variantDecs","type","String","reflect","_typeDecs","_disabledDecs","Boolean","_loadingDecs","_Button3","Button","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_variant","_init_type","_init_disabled","undefined","_init_loading","_classPrivateFieldGet","variant","v","_classPrivateFieldSet","disabled","loading","render","onClick","onIconSlotChange","e","slot","target","toggleAttribute","assignedElements","length","getInternals","form","requestSubmit","reset","c","_initClass","_applyDecs","_Class","_identity","_defineProperty","default","Button","BUTTON_VARIANTS"],"sources":["../../src/components/button/Button.styles.css","../../src/components/button/Button.ts","../../src/components/button/index.ts"],"sourcesContent":[":host {\n --text-color: var(--solid-ui-color-white);\n --border-color: var(--solid-ui-color-primary);\n --background-color: var(--solid-ui-color-primary);\n --hover-text-color: var(--text-color);\n --hover-border-color: var(--solid-ui-color-tertiary);\n --hover-background-color: var(--solid-ui-color-tertiary);\n\n display: inline-flex;\n\n button {\n position: relative;\n padding: 7px 12px;\n border-radius: 5px;\n font-size: var(--solid-ui-font-size-md);\n font-weight: 600;\n color: var(--text-color);\n background: var(--background-color);\n border: 1px solid var(--border-color);\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 5px;\n flex: 1;\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n &:hover:not(:disabled) {\n color: var(--hover-text-color);\n background: var(--hover-background-color);\n border-color: var(--hover-border-color);\n }\n\n icon-svg-spinners-180-ring, ::slotted([slot=\"left-icon\"]), ::slotted([slot=\"right-icon\"]) {\n width: var(--solid-ui-font-size-md);\n height: var(--solid-ui-font-size-md);\n }\n\n &::after {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: var(--solid-ui-clickable-area);\n height: var(--solid-ui-clickable-area);\n }\n }\n}\n\n:host([data-has-icon-slot]) button {\n padding: 4px;\n\n ::slotted([slot=\"icon\"]) {\n width: var(--solid-ui-font-size-2xl);\n height: var(--solid-ui-font-size-2xl);\n }\n}\n\n:host([variant='secondary']) button {\n --text-color: var(--solid-ui-color-gray-800);\n --border-color: var(--solid-ui-color-slate-400);\n --background-color: var(--solid-ui-color-white);\n --hover-text-color: var(--solid-ui-color-white);\n --hover-background-color: var(--solid-ui-color-tertiary);\n --hover-border-color: var(--solid-ui-color-tertiary);\n}\n\n:host([variant='tertiary']) button {\n --text-color: var(--solid-ui-color-primary);\n --border-color: transparent;\n --background-color: transparent;\n --hover-text-color: var(--solid-ui-color-tertiary);\n --hover-border-color: var(--solid-ui-color-tertiary);\n --hover-background-color: transparent;\n\n padding: 0;\n border-radius: 0;\n border-width: 0;\n border-bottom-width: 1px;\n}\n\n:host([variant='outline']) button {\n --text-color: currentColor;\n --border-color: currentColor;\n --background-color: transparent;\n --hover-text-color: currentColor;\n --hover-border-color: currentColor;\n --hover-background-color: color-mix(in srgb, currentColor 25%, transparent);\n}\n\n:host([variant='ghost']) button {\n --text-color: currentColor;\n --border-color: transparent;\n --background-color: transparent;\n --hover-text-color: currentColor;\n --hover-border-color: transparent;\n --hover-background-color: var(--solid-ui-color-primary-hover);\n}\n","import { customElement, WebComponent } from '@/lib/components'\nimport { html, nothing } from 'lit'\nimport { property } from 'lit/decorators.js'\n\nimport '~icons/svg-spinners/180-ring'\n\nimport styles from './Button.styles.css'\n\nexport const BUTTON_VARIANTS = ['primary', 'secondary', 'tertiary', 'outline', 'ghost'] as const\nexport type ButtonVariant = typeof BUTTON_VARIANTS[number]\n\n@customElement('solid-ui-button')\nexport default class Button extends WebComponent {\n static styles = styles\n static formAssociated = true\n\n @property({ type: String, reflect: true })\n accessor variant: ButtonVariant = 'primary'\n\n @property({ type: String, reflect: true })\n accessor type = 'button'\n\n @property({ type: Boolean })\n accessor disabled: boolean | undefined = undefined\n\n @property({ type: Boolean })\n accessor loading = false\n\n render () {\n const disabled = this.disabled ?? this.loading\n\n return html`\n <button type=${this.type} ?disabled=${disabled} @click=${this.onClick}>\n ${this.loading ? html`<icon-svg-spinners-180-ring></icon-svg-spinners-180-ring>` : nothing}\n <slot name=\"left-icon\"></slot>\n <slot @slotchange=${this.onIconSlotChange} name=\"icon\"></slot>\n <slot></slot>\n <slot name=\"right-icon\"></slot>\n </button>\n `\n }\n\n private onIconSlotChange (e: Event) {\n const slot = e.target as HTMLSlotElement\n\n this.toggleAttribute('data-has-icon-slot', slot.assignedElements().length > 0)\n }\n\n private onClick () {\n switch (this.type) {\n case 'submit':\n this.getInternals().form?.requestSubmit()\n break\n case 'reset':\n this.getInternals().form?.reset()\n break\n }\n }\n}\n","import Button, { BUTTON_VARIANTS, type ButtonVariant } from './Button'\n\nexport { Button, BUTTON_VARIANTS, type ButtonVariant }\nexport default Button\n"],"mappings":"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"}