@singlebase/elements 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"singlebase-elements.min.js","sources":["../../core/dist/index.js","../../singlebase-sdk/dist/index.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/css-tag.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/reactive-element.js","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/lit-html.js","../../../node_modules/.pnpm/lit-element@4.2.2/node_modules/lit-element/lit-element.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/custom-element.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/property.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/state.js","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/if-defined.js","../src/controllers/auth-controller.ts","../src/styles/tokens.ts","../src/styles/shared.ts","../src/messages.ts","../src/elements/base.ts","../src/utils/redirect.ts","../src/controllers/settings-controller.ts","../src/controllers/event-bridge.ts","../src/elements/form-base.ts","../src/utils/profile.ts","../src/upload-messages.ts","../src/utils/files.ts","../src/utils/inspect.ts","../src/elements/uploader.ts","../src/elements/account-screen.ts","../src/elements/buttons.ts","../src/elements/auth-screen.ts","../src/elements/guard.ts","../src/elements/display.ts","../src/standalone.ts"],"sourcesContent":["class g extends Error {\n constructor(t, r) {\n super(t.message), this.name = \"SinglebaseError\", this.status = t.status, this.type = t.type, this.code = t.message, this.details = t.details, this.traceId = t.trace_id ?? null, this.cause = r;\n }\n static fromNetworkError(t) {\n return new g(\n {\n type: \"NETWORK_ERROR\",\n status: 0,\n message: \"NETWORK_ERROR\"\n },\n t\n );\n }\n}\nconst L = {\n INVALID_PAYLOAD: \"highlight_invalid_fields\",\n INVALID_CREDENTIALS: \"generic_credentials_message\",\n CODE_REQUIRED: \"reveal_code_input\",\n INVALID_TOKEN: \"expired_or_invalid_code_message\",\n INVALID_ID_TOKEN: \"attempt_refresh_or_signout\",\n INVALID_BEARER_TOKEN: \"attempt_refresh_or_signout\",\n INVALID_SESSION: \"clear_session_and_ask_signin\",\n INVALID_TOKEN_AUDIENCE: \"clear_session_config_error\",\n REQUIRE_PASSWORD_CHANGE: \"route_to_recovery_or_invite\",\n INVALID_PASSWORD: \"show_password_requirements\",\n MISSING_PROFILE_DATA: \"require_changed_field\",\n AUTH_RATE_LIMITED: \"disable_retry_show_rate_limited\",\n AUTH_DISABLED: \"render_auth_unavailable\",\n EMAIL_PROVIDER_DISABLED: \"hide_email_forms\",\n EMAIL_SIGNUP_DISABLED: \"hide_signup\",\n OAUTH_DISABLED: \"hide_oauth\",\n OAUTH_SIGNUP_DISABLED: \"remove_oauth_from_signup\",\n INVALID_OAUTH_PROVIDER: \"refresh_settings_hide_provider\",\n INVALID_NONCE: \"restart_oauth_new_nonce\",\n SIGN_IN_TO_LINK_PROVIDER: \"ask_signin_then_link\",\n AUTHENTICATION_REQUIRED: \"route_to_signin\",\n UNAUTHORIZED_DOMAIN: \"show_integrator_config_error\"\n};\nfunction z(e) {\n return L[e] ?? \"unknown\";\n}\nfunction k(e) {\n return e === \"localhost\" || e === \"127.0.0.1\" || e === \"0.0.0.0\";\n}\nconst p = \"https://v1.singlebase.io/api\";\nfunction C(e) {\n if (e.baseUrl === void 0) return p;\n if (e.baseUrl === null || String(e.baseUrl).trim() === \"\")\n throw new Error(\n `SinglebaseOptions.baseUrl cannot be null or empty. Omit it to use ${p}.`\n );\n return String(e.baseUrl).trim().replace(/\\/+$/, \"\");\n}\nfunction P(e) {\n var n;\n const t = C(e);\n B(t);\n const r = (n = e.urlAccessKey) == null ? void 0 : n.trim();\n return r ? `${t}/${encodeURIComponent(r)}` : t;\n}\nfunction B(e) {\n let t;\n try {\n t = new URL(e);\n } catch {\n throw new Error(`SinglebaseOptions.baseUrl is not a valid URL: ${e}`);\n }\n if (t.protocol !== \"https:\" && !k(t.hostname))\n throw new Error(\n `SinglebaseOptions.baseUrl must use HTTPS outside of localhost/127.0.0.1/0.0.0.0 (got ${t.protocol})`\n );\n}\nasync function m(e, t, r, n = {}) {\n const s = P(e), o = { operation: t, payload: r };\n n.options && (o.options = n.options);\n const a = {\n \"Content-Type\": \"application/json\",\n \"X-API-Key\": e.apiKey\n };\n n.token && (a.Authorization = `Bearer ${n.token}`);\n const i = e.fetch ?? globalThis.fetch;\n let c;\n try {\n c = await i(s, {\n method: \"POST\",\n headers: a,\n body: JSON.stringify(o),\n signal: n.signal\n });\n } catch (h) {\n throw g.fromNetworkError(h);\n }\n let f;\n try {\n f = await c.json();\n } catch (h) {\n throw g.fromNetworkError(h);\n }\n if (\"error\" in f)\n throw new g(f.error);\n return f.data;\n}\nconst j = /* @__PURE__ */ new Set([\"INVALID_ID_TOKEN\", \"INVALID_BEARER_TOKEN\"]);\nclass X {\n constructor(t) {\n this.options = t, this.bridge = null, this.provider = null;\n }\n /** Registers the session owner (the auth client) as the token source. */\n setAuthBridge(t) {\n this.bridge = t;\n }\n /** Registers a factory that builds+hydrates the token source on first need. */\n setAuthProvider(t) {\n this.provider = t;\n }\n async resolveBridge() {\n return this.bridge ? this.bridge : this.provider ? (this.bridge = await this.provider(), this.bridge) : null;\n }\n /**\n * Sends one operation. Injects the session bearer unless told otherwise,\n * and on a stale-token error refreshes once and retries the call exactly\n * once — never looping.\n */\n async dispatch(t, { bearer: r, signal: n } = {}) {\n const s = r !== void 0, o = s ? null : await this.resolveBridge(), a = s ? r : (o == null ? void 0 : o.getToken()) ?? null, i = { token: a, signal: n, options: t.options };\n try {\n return await m(\n this.options,\n t.operation,\n t.payload ?? {},\n i\n );\n } catch (c) {\n const f = c instanceof g ? c.code : \"\";\n if (!(!s && a !== null && o !== null && j.has(f))) throw c;\n const A = await o.refresh();\n if (!A) throw c;\n return m(\n this.options,\n t.operation,\n t.payload ?? {},\n { ...i, token: A }\n );\n }\n }\n}\nconst K = \"singlebase-auth\", V = 1, l = \"session\", E = \"wrapping-key\", d = \"session\";\nfunction I() {\n let e = null;\n return {\n get: () => e,\n set: (t) => {\n e = t;\n },\n clear: () => {\n e = null;\n }\n };\n}\nfunction R(e, t) {\n return {\n get: () => {\n var n;\n const r = (n = e()) == null ? void 0 : n.getItem(t);\n if (!r) return null;\n try {\n return JSON.parse(r);\n } catch {\n return null;\n }\n },\n set: (r) => {\n var n;\n (n = e()) == null || n.setItem(t, JSON.stringify(r));\n },\n clear: () => {\n var r;\n (r = e()) == null || r.removeItem(t);\n }\n };\n}\nfunction ee(e = \"singlebase-auth-session\") {\n return R(() => globalThis.localStorage, e);\n}\nfunction M(e = \"singlebase-auth-session\") {\n return R(() => globalThis.sessionStorage, e);\n}\nfunction b(e) {\n return new Promise((t, r) => {\n e.onsuccess = () => t(e.result), e.onerror = () => r(e.error);\n });\n}\nfunction w() {\n return new Promise((e, t) => {\n const r = globalThis.indexedDB.open(K, V);\n r.onupgradeneeded = () => {\n r.result.objectStoreNames.contains(l) || r.result.createObjectStore(l);\n }, r.onsuccess = () => e(r.result), r.onerror = () => t(r.error), r.onblocked = () => t(new Error(\"indexedDB open blocked\"));\n });\n}\nasync function S(e) {\n const t = await w();\n try {\n const r = t.transaction(l, \"readonly\");\n return await b(r.objectStore(l).get(e));\n } finally {\n t.close();\n }\n}\nasync function T(e, t) {\n const r = await w();\n try {\n const n = r.transaction(l, \"readwrite\");\n await b(n.objectStore(l).put(t, e));\n } finally {\n r.close();\n }\n}\nasync function D(e) {\n const t = await w();\n try {\n const r = t.transaction(l, \"readwrite\");\n await b(r.objectStore(l).delete(e));\n } finally {\n t.close();\n }\n}\nfunction H() {\n return typeof globalThis.indexedDB < \"u\" && typeof globalThis.crypto < \"u\" && typeof globalThis.crypto.subtle < \"u\";\n}\nfunction G() {\n let e = null;\n async function t() {\n return e || (e = (async () => {\n const r = await S(E);\n if (r) return r;\n const n = await globalThis.crypto.subtle.generateKey(\n { name: \"AES-GCM\", length: 256 },\n // non-extractable: crypto.subtle can use it, JS can never read it\n !1,\n [\"encrypt\", \"decrypt\"]\n );\n return await T(E, n), n;\n })().catch((r) => {\n throw e = null, r;\n })), e;\n }\n return {\n async get() {\n const r = await S(d);\n if (!r) return null;\n try {\n const n = await t(), s = await globalThis.crypto.subtle.decrypt(\n { name: \"AES-GCM\", iv: r.iv },\n n,\n r.data\n );\n return JSON.parse(new TextDecoder().decode(s));\n } catch {\n return await D(d).catch(() => {\n }), null;\n }\n },\n async set(r) {\n const n = await t(), s = globalThis.crypto.getRandomValues(new Uint8Array(12)), o = await globalThis.crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv: s },\n n,\n new TextEncoder().encode(JSON.stringify(r))\n );\n await T(d, { iv: s, data: o });\n },\n async clear() {\n await D(d).catch(() => {\n });\n }\n };\n}\nfunction te() {\n let e = null, t = !1;\n async function r() {\n if (e) return e;\n if (!t) {\n if (t = !0, H()) {\n const n = G();\n try {\n return await n.get(), e = n, e;\n } catch {\n }\n }\n e = typeof globalThis.sessionStorage < \"u\" ? M() : I();\n }\n return e ?? I();\n }\n return {\n async get() {\n try {\n return await (await r()).get();\n } catch {\n return null;\n }\n },\n async set(n) {\n try {\n await (await r()).set(n);\n } catch {\n }\n },\n async clear() {\n try {\n await (await r()).clear();\n } catch {\n }\n }\n };\n}\nclass re {\n constructor() {\n this.listeners = /* @__PURE__ */ new Map();\n }\n on(t, r) {\n let n = this.listeners.get(t);\n return n || (n = /* @__PURE__ */ new Set(), this.listeners.set(t, n)), n.add(r), () => n.delete(r);\n }\n emit(t, r) {\n const n = this.listeners.get(t);\n if (n)\n for (const s of n) s(r);\n }\n}\nconst ne = [\n \"theme\",\n \"density\",\n \"fieldStyle\",\n \"layout\",\n \"oauthPlacement\",\n \"stepped\",\n \"logoUrl\",\n \"logoText\",\n \"brandLine\",\n \"brandFoot\",\n \"signInTitle\",\n \"branding\",\n \"initialScreen\",\n \"noAccountView\",\n \"redirectUrl\",\n \"tosUrl\",\n \"privacyUrl\",\n \"nonceStorageKey\",\n \"authEnabled\",\n \"allowEmailSignin\",\n \"allowEmailSignup\",\n \"allowEmailOtp\",\n \"allowOauth\",\n \"allowAccountCreation\",\n \"inviteEmail\",\n \"inviteOrg\",\n \"inviteCode\"\n];\nfunction se(e) {\n return e.replace(/[A-Z]/g, (t) => \"-\" + t.toLowerCase());\n}\nconst x = [\n \"$eq\",\n \"$ne\",\n \"$in\",\n \"$nin\",\n \"$gt\",\n \"$gte\",\n \"$lt\",\n \"$lte\",\n \"$elemMatch\"\n], v = new Set(x);\nfunction J(e) {\n if (e === null || typeof e != \"object\" || Array.isArray(e)) return !1;\n const t = Object.keys(e);\n return t.length > 0 && t.every((r) => v.has(r));\n}\nfunction W(e, t) {\n let r = e;\n for (const n of t.split(\".\")) {\n if (r == null || typeof r != \"object\") return;\n r = r[n];\n }\n return r;\n}\nfunction u(e, t) {\n if (e === t) return !0;\n if (Array.isArray(e) && Array.isArray(t))\n return e.length === t.length && e.every((r, n) => u(r, t[n]));\n if (e && t && typeof e == \"object\" && typeof t == \"object\") {\n const r = Object.keys(e), n = Object.keys(t);\n return r.length === n.length && r.every(\n (s) => u(e[s], t[s])\n );\n }\n return !1;\n}\nfunction q(e, t) {\n return typeof e == \"number\" && typeof t == \"number\" ? Number.isNaN(e) || Number.isNaN(t) ? null : e - t : typeof e == \"string\" && typeof t == \"string\" ? e < t ? -1 : e > t ? 1 : 0 : e instanceof Date && t instanceof Date ? e.getTime() - t.getTime() : null;\n}\nfunction U(e, t, r) {\n switch (e) {\n case \"$eq\":\n return u(t, r);\n case \"$ne\":\n return !u(t, r);\n case \"$in\":\n return Array.isArray(r) ? Array.isArray(t) ? t.some((n) => r.some((s) => u(n, s))) : r.some((n) => u(t, n)) : !1;\n case \"$nin\":\n return Array.isArray(r) ? !U(\"$in\", t, r) : !1;\n case \"$gt\":\n case \"$gte\":\n case \"$lt\":\n case \"$lte\": {\n const n = q(t, r);\n return n === null ? !1 : e === \"$gt\" ? n > 0 : e === \"$gte\" ? n >= 0 : e === \"$lt\" ? n < 0 : n <= 0;\n }\n case \"$elemMatch\":\n return Array.isArray(t) ? t.some((n) => $(n, r)) : !1;\n default:\n return !1;\n }\n}\nfunction $(e, t) {\n return J(t) ? Object.entries(t).every(\n ([r, n]) => U(r, e, n)\n ) : u(e, t);\n}\nfunction oe(e, t) {\n if (!t) return !0;\n const r = Object.entries(t);\n return r.length === 0 ? !0 : e == null ? !1 : r.every(([n, s]) => $(W(e, n), s));\n}\nfunction ie(e) {\n if (e == null) return [];\n if (typeof e != \"object\" || Array.isArray(e))\n return [\"predicate must be an object\"];\n const t = [];\n for (const [r, n] of Object.entries(e)) {\n if (r.startsWith(\"$\")) {\n t.push(`\"${r}\": top-level operators are not supported; use a field name`);\n continue;\n }\n if (n === null || typeof n != \"object\" || Array.isArray(n)) continue;\n const s = Object.keys(n), o = s.filter((a) => a.startsWith(\"$\"));\n if (o.length === 0) {\n t.push(\n `\"${r}\": nested objects are not supported; use dot notation, e.g. \"${r}.field\"`\n );\n continue;\n }\n o.length !== s.length && t.push(`\"${r}\": cannot mix operators with plain keys`);\n for (const a of o)\n v.has(a) || t.push(`\"${r}\": unsupported operator \"${a}\"`);\n }\n return t;\n}\nconst y = () => {\n};\nfunction F() {\n return { post: y, subscribe: () => y, close: y };\n}\nfunction Y() {\n const e = globalThis.crypto;\n return e && \"randomUUID\" in e ? e.randomUUID() : Math.random().toString(36).slice(2) + Date.now().toString(36);\n}\nfunction ae(e) {\n const t = Y(), r = globalThis.BroadcastChannel;\n if (r) {\n let n;\n try {\n n = new r(e);\n } catch {\n return O(e, t);\n }\n return {\n post(s) {\n try {\n n.postMessage({ signal: s, from: t, at: Date.now() });\n } catch {\n }\n },\n subscribe(s) {\n const o = (a) => {\n const i = a.data;\n !i || typeof i != \"object\" || i.from !== t && (i.signal !== \"session-changed\" && i.signal !== \"signout\" || s(i));\n };\n return n.addEventListener(\"message\", o), () => n.removeEventListener(\"message\", o);\n },\n close() {\n try {\n n.close();\n } catch {\n }\n }\n };\n }\n return O(e, t);\n}\nfunction O(e, t) {\n const r = Q();\n if (!r) return F();\n const n = `${e}:signal`;\n return {\n post(s) {\n try {\n r.setItem(n, JSON.stringify({ signal: s, from: t, at: Date.now() }));\n } catch {\n }\n },\n subscribe(s) {\n var a;\n const o = (i) => {\n if (!(i.key !== n || !i.newValue))\n try {\n const c = JSON.parse(i.newValue);\n if (c.from === t || c.signal !== \"session-changed\" && c.signal !== \"signout\") return;\n s(c);\n } catch {\n }\n };\n return (a = globalThis.addEventListener) == null || a.call(globalThis, \"storage\", o), () => {\n var i;\n return (i = globalThis.removeEventListener) == null ? void 0 : i.call(globalThis, \"storage\", o);\n };\n },\n close: y\n };\n}\nfunction Q() {\n try {\n const e = globalThis.localStorage;\n if (!e) return null;\n const t = \"__singlebase_probe__\";\n return e.setItem(t, \"1\"), e.removeItem(t), e;\n } catch {\n return null;\n }\n}\nconst N = Symbol.for(\"singlebase.client.registry\");\nfunction _() {\n const e = globalThis;\n let t = e[N];\n return t || (t = { instances: /* @__PURE__ */ new Map(), default: null }, e[N] = t), t;\n}\nfunction Z(e) {\n return [\n e.baseUrl ?? p,\n e.urlAccessKey ?? \"\",\n e.apiKey,\n e.audience ?? \"web\"\n ].join(\"|\");\n}\nfunction ce(e, t) {\n const r = _(), n = Z(e), s = r.instances.get(n);\n if (s) return s;\n const o = t();\n return r.instances.set(n, o), r.default || (r.default = o), o;\n}\nfunction le() {\n return _().default;\n}\nfunction ue(e) {\n _().default = e;\n}\nfunction fe(e) {\n const t = _();\n for (const [r, n] of t.instances)\n n === e && t.instances.delete(r);\n t.default === e && (t.default = t.instances.values().next().value ?? null);\n}\nexport {\n ne as AUTHUI_PROP_KEYS,\n p as DEFAULT_BASE_URL,\n re as EventEmitter,\n x as OPERATORS,\n X as RpcDispatcher,\n g as SinglebaseAuthError,\n g as SinglebaseError,\n B as assertSecureBaseUrl,\n se as authUIAttributeFor,\n H as canUseCryptoStorage,\n Z as clientKey,\n ae as crossTabChannel,\n te as defaultStorage,\n P as endpointFor,\n le as getDefaultClient,\n W as getPath,\n G as indexedDbCryptoStorage,\n ee as localStorageAdapter,\n z as mapErrorToHint,\n oe as matchesPredicate,\n I as memoryStorage,\n F as noopCrossTabChannel,\n m as request,\n C as resolveBaseUrl,\n ce as resolveClient,\n M as sessionStorageAdapter,\n ue as setDefaultClient,\n fe as unregisterClient,\n ie as validatePredicate\n};\n//# sourceMappingURL=index.js.map\n","import { EventEmitter as R, defaultStorage as P, RpcDispatcher as D, noopCrossTabChannel as N, crossTabChannel as U, DEFAULT_BASE_URL as F, SinglebaseError as S, resolveClient as M, unregisterClient as x } from \"@singlebase/core\";\nimport { SinglebaseAuthError as ae, SinglebaseError as re, getDefaultClient as ie, indexedDbCryptoStorage as oe, localStorageAdapter as ce, mapErrorToHint as ue, memoryStorage as le, sessionStorageAdapter as de, setDefaultClient as he } from \"@singlebase/core\";\nconst B = [\"pointerdown\", \"keydown\", \"scroll\", \"focus\", \"touchstart\"], b = {\n enabled: !0,\n skewSeconds: 60,\n idleAfterMs: 15 * 60 * 1e3,\n minIntervalMs: 30 * 1e3\n};\nclass W {\n constructor(e, s, r) {\n this.refresh = s, this.onFailure = r, this.timer = null, this.lastActivityAt = Date.now(), this.stopped = !1, this.listening = !1, this.pendingWake = !1, this.onActivityBound = () => this.onActivity(), this.options = {\n enabled: (e == null ? void 0 : e.enabled) ?? b.enabled,\n skewSeconds: (e == null ? void 0 : e.skewSeconds) ?? b.skewSeconds,\n idleAfterMs: (e == null ? void 0 : e.idleAfterMs) ?? b.idleAfterMs,\n minIntervalMs: (e == null ? void 0 : e.minIntervalMs) ?? b.minIntervalMs,\n activityEvents: (e == null ? void 0 : e.activityEvents) ?? B\n };\n }\n get isRunning() {\n return this.timer !== null;\n }\n /** (Re)arms the scheduler for the given session. */\n start(e) {\n !this.options.enabled || this.stopped || (this.listen(), this.schedule(e));\n }\n /** Pauses until the next `start()` — used on signout. */\n stop() {\n this.clearTimer(), this.unlisten();\n }\n /**\n * Stops for good. Used when a refresh fails: the session cannot be\n * recovered without a fresh sign-in, so the loop must not restart by\n * itself.\n */\n stopPermanently() {\n this.stopped = !0, this.stop();\n }\n /** Allows a future sign-in to resume auto-refresh after a permanent stop. */\n reset() {\n this.stopped = !1;\n }\n clearTimer() {\n this.timer && (clearTimeout(this.timer), this.timer = null);\n }\n listen() {\n var e;\n if (!(this.listening || typeof globalThis.addEventListener != \"function\")) {\n for (const s of this.options.activityEvents)\n globalThis.addEventListener(s, this.onActivityBound, { passive: !0, capture: !0 });\n (e = globalThis.addEventListener) == null || e.call(globalThis, \"visibilitychange\", this.onActivityBound, { passive: !0 }), this.listening = !0;\n }\n }\n unlisten() {\n var e;\n if (!(!this.listening || typeof globalThis.removeEventListener != \"function\")) {\n for (const s of this.options.activityEvents)\n globalThis.removeEventListener(s, this.onActivityBound, {\n capture: !0\n });\n (e = globalThis.removeEventListener) == null || e.call(globalThis, \"visibilitychange\", this.onActivityBound), this.listening = !1;\n }\n }\n /**\n * Marks the user as active. Called by the DOM listeners, and available to\n * hosts that know about activity the DOM cannot see — an SPA route change,\n * a websocket message, a background save.\n */\n notifyActivity() {\n this.onActivity();\n }\n onActivity() {\n this.lastActivityAt = Date.now(), this.pendingWake && !this.stopped && (this.pendingWake = !1, this.run());\n }\n get isIdle() {\n return Date.now() - this.lastActivityAt > this.options.idleAfterMs;\n }\n schedule(e) {\n if (this.clearTimer(), this.stopped || !this.options.enabled) return;\n const s = e.token_info.exp * 1e3 - Date.now(), r = Math.max(\n s - this.options.skewSeconds * 1e3,\n this.options.minIntervalMs\n );\n this.timer = setTimeout(() => {\n if (this.timer = null, this.isIdle) {\n this.pendingWake = !0;\n return;\n }\n this.run();\n }, r);\n }\n async run() {\n if (!this.stopped)\n try {\n const e = await this.refresh();\n this.schedule(e);\n } catch (e) {\n this.stopPermanently(), this.onFailure(e);\n }\n }\n}\nconst H = 60;\nclass V {\n constructor(e, s) {\n this.storage = e, this.refresher = s, this.state = { status: \"loading\", session: null, user: null }, this.listeners = /* @__PURE__ */ new Set(), this.refreshing = null, this.onLocalChange = null;\n }\n getState() {\n return this.state;\n }\n subscribe(e) {\n return this.listeners.add(e), () => this.listeners.delete(e);\n }\n setState(e) {\n this.state = e;\n for (const s of this.listeners) s(e);\n }\n /** Loads the persisted session (if any) and validates/refreshes it. */\n async initialize() {\n const e = await this.storage.get();\n if (!e) {\n this.setState({ status: \"unauthenticated\", session: null, user: null });\n return;\n }\n if (this.needsRefresh(e)) {\n try {\n const s = await this.refreshOnce(e);\n await this.adopt(s);\n } catch (s) {\n await this.clear(), this.setState({ status: \"error\", session: null, user: null, error: s });\n }\n return;\n }\n this.setState({ status: \"authenticated\", session: e, user: e.user_profile });\n }\n needsRefresh(e) {\n const s = Date.now() / 1e3;\n return e.token_info.exp - s <= H;\n }\n /** Adopts a freshly-returned session: persists it and updates state. */\n async adopt(e) {\n var s;\n await this.storage.set(e), this.setState({ status: \"authenticated\", session: e, user: e.user_profile }), (s = this.onLocalChange) == null || s.call(this, \"session-changed\");\n }\n /** Merges an updated profile (from user.get/user.update) into the current session. */\n async adoptProfile(e) {\n var r;\n if (this.state.status !== \"authenticated\") return;\n const s = { ...this.state.session, user_profile: e };\n await this.storage.set(s), this.setState({ status: \"authenticated\", session: s, user: e }), (r = this.onLocalChange) == null || r.call(this, \"session-changed\");\n }\n async clear() {\n var e;\n await this.storage.clear(), this.setState({ status: \"unauthenticated\", session: null, user: null }), (e = this.onLocalChange) == null || e.call(this, \"signout\");\n }\n /**\n * Re-reads shared storage after another tab reported a change, and adopts\n * whatever it finds. No network call and no refresh: the tab that made the\n * change already did that work, and this tab must not spend the single-use\n * refresh token a second time.\n */\n async syncFromStorage() {\n const e = await this.storage.get();\n return e ? this.state.status === \"authenticated\" && this.state.session.id_token === e.id_token ? \"unchanged\" : (this.setState({ status: \"authenticated\", session: e, user: e.user_profile }), \"adopted\") : this.state.status === \"unauthenticated\" ? \"unchanged\" : (this.setState({ status: \"unauthenticated\", session: null, user: null }), \"cleared\");\n }\n /**\n * Single-flight refresh: concurrent callers await the same in-flight\n * promise instead of each spending the single-use refresh token.\n */\n async refreshOnce(e) {\n return this.refreshing || (this.refreshing = this.refresher(e).finally(() => {\n this.refreshing = null;\n })), this.refreshing;\n }\n /**\n * For a protected call that just failed with an auth-shaped error: refresh\n * once (sharing any in-flight refresh) and hand back the new session, or\n * throw/clear if refresh itself fails. Callers retry their original\n * request exactly once with the result — never loop.\n */\n async refreshAfterFailure() {\n if (this.state.status !== \"authenticated\")\n throw new Error(\"Cannot refresh: no authenticated session\");\n try {\n const e = await this.refreshOnce(this.state.session);\n return await this.adopt(e), e;\n } catch (e) {\n throw await this.clear(), e;\n }\n }\n}\nconst l = {\n settings: \"auth.settings\",\n signup: \"auth.signup\",\n signin: \"auth.signin\",\n refresh: \"auth.refresh\",\n signout: \"auth.signout\",\n requestCode: \"auth.request_code\",\n confirmCode: \"auth.confirm_code\",\n changePassword: \"auth.change_password\",\n getAccount: \"user.get\",\n updateAccount: \"user.update\",\n nonce: \"auth.nonce\",\n oauthConnect: \"auth.oauth_connect\",\n oauthSignin: \"auth.oauth_signin\"\n};\nfunction q(a, e) {\n const s = a.audience ?? \"web\", r = new R(), y = a.storage ?? P(), f = e ?? new D(a);\n for (const [t, o] of Object.entries(a.on ?? {}))\n o && r.on(t, o);\n const g = async (t) => f.dispatch(\n {\n operation: l.refresh,\n payload: {\n id_token: t.id_token,\n refresh_token: t.refresh_token,\n aud: s\n }\n },\n { bearer: null }\n ), i = new V(y, g), c = a.crossTab === !1 ? N() : U(\n `singlebase-auth:${a.baseUrl ?? F}|${a.urlAccessKey ?? \"\"}`\n );\n i.onLocalChange = (t) => c.post(t);\n const d = c.subscribe(() => {\n w.then(async () => {\n const t = await i.syncFromStorage();\n if (t === \"unchanged\") return;\n if (t === \"cleared\") {\n r.emit(\"signout\", null), r.emit(\"session\", null);\n return;\n }\n const o = i.getState();\n o.status === \"authenticated\" && r.emit(\"session\", o.session);\n });\n }), m = typeof a.autoRefresh == \"boolean\" ? { enabled: a.autoRefresh } : a.autoRefresh, p = new W(\n m,\n async () => await A.refreshSession(),\n (t) => {\n i.clear();\n const o = t instanceof S ? t.code : \"REFRESH_FAILED\";\n r.emit(\"expired\", { reason: o }), r.emit(\"session\", null);\n }\n );\n f.setAuthBridge({\n getToken: () => {\n const t = i.getState();\n return t.status === \"authenticated\" ? t.session.id_token : null;\n },\n refresh: async () => {\n try {\n return (await i.refreshAfterFailure()).id_token;\n } catch {\n return null;\n }\n }\n }), i.subscribe((t) => {\n t.status === \"authenticated\" ? (p.reset(), p.start(t.session)) : p.stop();\n });\n const w = i.initialize().then(() => {\n r.emit(\"load\", i.getState());\n });\n async function u(t, o) {\n try {\n const n = await o();\n return r.emit(\"success\", { operation: t }), n;\n } catch (n) {\n const _ = n instanceof S ? n.code : \"UNKNOWN_ERROR\", T = n instanceof Error ? n.message : String(n);\n throw r.emit(\"error\", { code: _, message: T, operation: t }), n;\n }\n }\n const h = (t, o, n = {}) => f.dispatch({ operation: t, payload: o }, n), A = {\n ready: w,\n dispatcher: f,\n authui: a.authui ?? null,\n dispatch: (t, o) => f.dispatch(t, o),\n getSettings: (t) => u(l.settings, () => h(l.settings, {}, { bearer: null, signal: t })),\n signUp: (t, o) => u(l.signup, async () => {\n const n = await h(\n l.signup,\n { ...t, aud: t.aud ?? s },\n { bearer: null, signal: o }\n );\n return r.emit(\"signup\", n), r.emit(\"navigate\", {\n next_action: n.next_action,\n next_operation: n.next_operation\n }), n;\n }),\n signIn: (t, o) => u(l.signin, async () => {\n const n = await h(\n l.signin,\n { ...t, aud: t.aud ?? s },\n { bearer: null, signal: o }\n );\n return await i.adopt(n), r.emit(\"signin\", n), r.emit(\"session\", n), n;\n }),\n requestCode: (t, o) => u(l.requestCode, async () => {\n const n = await h(\n l.requestCode,\n { ...t, aud: t.aud ?? s },\n { bearer: null, signal: o }\n );\n return r.emit(\"navigate\", {\n next_action: n.next_action,\n next_operation: n.next_operation\n }), n;\n }),\n resetPassword: (t, o) => u(l.confirmCode, async () => {\n const n = await h(\n l.confirmCode,\n { ...t, purpose: \"password_reset\", aud: t.aud ?? s },\n { bearer: null, signal: o }\n );\n return await i.adopt(n), r.emit(\"signin\", n), r.emit(\"session\", n), n;\n }),\n acceptInvite: (t, o) => u(l.signin, async () => {\n const n = await h(\n l.signin,\n { ...t, aud: t.aud ?? s },\n { bearer: null, signal: o }\n );\n return await i.adopt(n), r.emit(\"signin\", n), r.emit(\"session\", n), n;\n }),\n refreshSession: () => u(l.refresh, async () => {\n const t = i.getState();\n if (t.status !== \"authenticated\")\n throw new Error(\"Cannot refresh: no authenticated session\");\n const o = await i.refreshOnce(t.session);\n return await i.adopt(o), r.emit(\"session\", o), o;\n }),\n async signOut() {\n const t = i.getState();\n if (p.stop(), t.status === \"authenticated\")\n try {\n await h(l.signout, {}, { bearer: t.session.id_token });\n } catch {\n }\n await i.clear(), r.emit(\"signout\", null), r.emit(\"session\", null), r.emit(\"success\", { operation: l.signout });\n },\n logout() {\n return A.signOut();\n },\n getAccount: (t) => u(l.getAccount, async () => {\n const o = await h(l.getAccount, {}, { signal: t });\n return await i.adoptProfile(o), o;\n }),\n updateAccount: (t, o) => u(l.updateAccount, async () => {\n const n = await h(l.updateAccount, t, {\n signal: o\n });\n return await i.adoptProfile(n), r.emit(\"account-updated\", n), n;\n }),\n changePassword: (t, o) => u(l.changePassword, async () => {\n const n = await h(\n l.changePassword,\n { ...t, aud: t.aud ?? s },\n { signal: o }\n );\n return await i.adopt(n), r.emit(\"password-change\", n), r.emit(\"session\", n), n;\n }),\n changeEmail: (t, o) => u(l.confirmCode, async () => {\n const n = await h(\n l.confirmCode,\n {\n email: t.email,\n purpose: \"email_change\",\n code: t.code,\n new_email: t.new_email,\n aud: t.aud ?? s\n },\n { signal: o }\n );\n return await i.adopt(n), r.emit(\"email-change\", n), r.emit(\"session\", n), n;\n }),\n changeUsername: (t, o) => u(l.confirmCode, async () => {\n const n = await h(\n l.confirmCode,\n {\n email: t.email,\n purpose: \"username_change\",\n code: t.code,\n new_username: t.new_username,\n aud: t.aud ?? s\n },\n { signal: o }\n );\n return await i.adopt(n), r.emit(\"username-change\", n), r.emit(\"session\", n), n;\n }),\n createOAuthNonce: (t) => u(l.nonce, async () => (await h(l.nonce, {}, { bearer: null, signal: t })).nonce),\n startOAuth: (t, o) => u(l.oauthConnect, async () => {\n const n = t.nonce ?? await A.createOAuthNonce(o);\n return h(\n l.oauthConnect,\n { ...t, nonce: n, intent: t.intent ?? \"signin\", aud: t.aud ?? s },\n { bearer: null, signal: o }\n );\n }),\n completeOAuth: (t, o) => u(l.oauthSignin, async () => {\n const n = await h(\n l.oauthSignin,\n { ...t, aud: t.aud ?? s },\n { bearer: null, signal: o }\n );\n return await i.adopt(n), r.emit(\"signin\", n), r.emit(\"session\", n), n;\n }),\n isAuthenticated: () => i.getState().status === \"authenticated\",\n getUser: () => {\n const t = i.getState();\n return t.status === \"authenticated\" ? t.user : null;\n },\n get user() {\n return A.getUser();\n },\n get authenticated() {\n return A.isAuthenticated();\n },\n async getSession() {\n await w;\n const t = i.getState();\n return t.status === \"authenticated\" ? t.session : null;\n },\n getState: () => i.getState(),\n subscribe: (t) => i.subscribe(t),\n on: r.on.bind(r),\n goto: (t) => r.emit(\"goto\", { screen: t }),\n destroy() {\n p.stopPermanently(), f.setAuthBridge(null), i.onLocalChange = null, d(), c.close();\n }\n };\n return A;\n}\nconst z = {\n SIGNIN: \"signin\",\n SIGNIN_WITH_CODE: \"signin_with_code\",\n ACCEPT_INVITE_WITH_CODE: \"accept_invite\",\n RESET_PASSWORD_WITH_CODE: \"reset_password_confirm\",\n CHANGE_EMAIL_WITH_CODE: \"change_email_confirm\",\n CHANGE_USERNAME_WITH_CODE: \"change_username_confirm\"\n};\nfunction ee(a) {\n return a.next_action === null ? \"authenticated\" : z[a.next_action];\n}\nconst E = 10;\nfunction v(a, e) {\n const s = [];\n for (let r = 0; r < a.length; r += e) s.push(a.slice(r, r + e));\n return s;\n}\nfunction C(a) {\n return typeof Blob < \"u\" && a instanceof Blob;\n}\nfunction k(a) {\n return C(a) ? { file: a } : a;\n}\nfunction L(a) {\n var s;\n const e = a.filename ?? ((s = a.file) == null ? void 0 : s.name);\n if (!e)\n throw new S({\n type: \"INVALID_PAYLOAD\",\n status: 0,\n message: \"MISSING_FILENAME\"\n });\n return e;\n}\nfunction G(a) {\n const e = a.file, s = { filename: L(a) }, r = a.contentType ?? (e && C(e) ? e.type : \"\");\n return r && (s.content_type = r), a.bucket && (s.bucket = a.bucket), a.newName && (s.new_name = a.newName), a.publicRead !== void 0 && (s.public_read = a.publicRead), a.metadata && (s.metadata = a.metadata), a.options && (s.options = a.options), s;\n}\nfunction O(a) {\n return new S({ type: \"INVALID_RESPONSE\", status: 0, message: a });\n}\nfunction K(a, e) {\n if (!Array.isArray(a) || a.length !== e)\n throw O(\"INVALID_UPLOAD_RESPONSE\");\n return a.map((s) => {\n var y;\n const r = (y = s == null ? void 0 : s.upload) == null ? void 0 : y.url;\n if (!(s != null && s.id) || !(s != null && s.upload_token) || typeof r != \"string\")\n throw O(\"INVALID_UPLOAD_RESPONSE\");\n return {\n id: String(s.id),\n upload: { url: r, fields: s.upload.fields ?? {} },\n uploadToken: String(s.upload_token)\n };\n });\n}\nfunction I(a) {\n if (a && typeof a == \"object\" && \"code\" in a && \"message\" in a) {\n const { code: s, message: r } = a;\n return { code: String(s), message: String(r).slice(0, 500) };\n }\n return { code: \"UPLOAD_FAILED\", message: (a instanceof Error ? a.message : String(a ?? \"\")).slice(0, 500) };\n}\nasync function $(a, e, s, r) {\n const y = await a(e, { method: \"POST\", body: s, signal: r });\n return y.status ?? (y.ok ? 200 : 500);\n}\nfunction X(a, e, s, r) {\n return new Promise((y, f) => {\n const g = new XMLHttpRequest();\n if (g.open(\"POST\", a), g.upload.onprogress = (i) => {\n s(i.loaded, i.lengthComputable ? i.total : 0);\n }, g.onload = () => y(g.status), g.onerror = () => f(new Error(\"NETWORK_ERROR\")), g.onabort = () => f(new Error(\"ABORTED\")), r) {\n if (r.aborted) {\n f(new Error(\"ABORTED\"));\n return;\n }\n r.addEventListener(\"abort\", () => g.abort(), { once: !0 });\n }\n g.send(e);\n });\n}\nfunction Y(a) {\n const e = (i, c, d) => a.dispatch({ operation: i, payload: { files: c } }, { signal: d == null ? void 0 : d.signal });\n async function s(i, c) {\n const d = Array.from(i, k), m = [];\n for (const p of v(d, E)) {\n const w = p.map(\n (h) => G(c != null && c.bucket ? { bucket: c.bucket, ...h } : h)\n ), u = await e(\"files.initiate_upload\", w, c);\n m.push(...K(u, p.length));\n }\n return m;\n }\n async function r(i, c, d) {\n const m = k(i), p = new FormData();\n for (const [n, _] of Object.entries(c.upload.fields ?? {}))\n p.append(n, _);\n const w = m.file, u = C(w) ? w : new Blob([w]), h = u.size ?? 0;\n p.append(\"file\", u, L(m));\n const A = d == null ? void 0 : d.onProgress, t = A ? (n, _) => A({\n input: m,\n id: c.id,\n loaded: n,\n total: _,\n percent: _ > 0 ? Math.min(100, Math.round(n / _ * 100)) : 0\n }) : void 0;\n let o;\n try {\n o = t && typeof XMLHttpRequest < \"u\" ? await X(c.upload.url, p, t, d == null ? void 0 : d.signal) : await $(\n a.options.fetch ?? globalThis.fetch,\n c.upload.url,\n p,\n d == null ? void 0 : d.signal\n );\n } catch (n) {\n throw new S(\n { type: \"UPLOAD_FAILED\", status: 0, message: \"UPLOAD_FAILED\" },\n n\n );\n }\n if (o >= 400)\n throw new S({ type: \"UPLOAD_FAILED\", status: o, message: \"UPLOAD_FAILED\" });\n return t == null || t(h, h), { id: c.id, uploadToken: c.uploadToken };\n }\n async function y(i, c) {\n const d = [];\n for (const m of v(i, E)) {\n const p = await e(\n \"files.complete_upload\",\n m.map(({ id: w, uploadToken: u }) => ({ id: w, upload_token: u })),\n c\n );\n if (!Array.isArray(p)) throw O(\"INVALID_UPLOAD_RESPONSE\");\n d.push(...p);\n }\n return d;\n }\n async function f(i, c) {\n for (const d of v(i, E))\n await e(\n \"files.fail_upload\",\n d.map(({ id: m, uploadToken: p, error: w }) => ({\n id: m,\n upload_token: p,\n error: I(w)\n })),\n c\n );\n }\n async function g(i, c) {\n const d = Array.from(i, k), m = { completed: [], failed: [] };\n for (const u of v(d, E)) {\n const h = await s(u, c), A = [], t = [];\n if (await Promise.all(\n u.map(async (o, n) => {\n const _ = h[n];\n try {\n A.push({ input: o, completion: await r(o, _, c) });\n } catch (T) {\n t.push({ input: o, id: _.id, uploadToken: _.uploadToken, error: T });\n }\n })\n ), A.length)\n try {\n const o = await y(\n A.map((n) => n.completion),\n c\n );\n A.forEach((n, _) => {\n m.completed.push({ input: n.input, id: n.completion.id, file: o[_] });\n });\n } catch (o) {\n const n = I(o);\n A.forEach((_) => {\n m.failed.push({ input: _.input, id: _.completion.id, error: n });\n });\n }\n if (t.length) {\n try {\n await f(\n t.map((o) => ({ id: o.id, uploadToken: o.uploadToken, error: o.error })),\n c\n );\n } catch {\n }\n t.forEach((o) => {\n m.failed.push({ input: o.input, id: o.id, error: I(o.error) });\n });\n }\n }\n const p = new Map(d.map((u, h) => [u, h])), w = (u) => p.get(u.input) ?? 0;\n return m.completed.sort((u, h) => w(u) - w(h)), m.failed.sort((u, h) => w(u) - w(h)), m;\n }\n return { initiateUpload: s, uploadToRemote: r, completeUpload: y, failUpload: f, upload: g };\n}\nfunction j(a, e, s) {\n const r = (f, g, i = {}) => {\n const { options: c, ...d } = i;\n return e(\n {\n operation: `${a}.${f}`,\n payload: g ?? {},\n options: c\n },\n d\n );\n }, y = { call: r, ...s };\n return new Proxy(y, {\n get(f, g) {\n const i = f;\n return typeof g == \"symbol\" || g in i ? i[g] : (c, d) => r(g, c, d);\n }\n });\n}\nfunction Z(a) {\n return M(a, () => J(a));\n}\nfunction J(a) {\n const e = new D(a);\n let s = null;\n function r() {\n if (!s) {\n const { auth: i, ...c } = a;\n s = q({ ...c, ...i }, e);\n }\n return s;\n }\n e.setAuthProvider(async () => {\n const i = r();\n return await i.ready, {\n getToken: () => i.isAuthenticated() ? i.getState().session.id_token : null,\n refresh: async () => {\n try {\n return (await i.refreshSession()).id_token;\n } catch {\n return null;\n }\n }\n };\n });\n const y = /* @__PURE__ */ new Map(), f = (i) => {\n let c = y.get(i);\n return c || (c = j(\n i,\n (d, m) => e.dispatch(d, m),\n // `files` is the one namespace with a flow the proxy can't express:\n // uploads go straight to storage, so they need real methods.\n i === \"files\" ? Y(e) : void 0\n ), y.set(i, c)), c;\n }, g = {\n get auth() {\n return r();\n },\n dispatcher: e,\n data: f(\"data\"),\n files: f(\"files\"),\n user: f(\"user\"),\n users: f(\"users\"),\n llm: f(\"llm\"),\n service: f,\n dispatch: (i, c) => e.dispatch(i, c),\n isAuthenticated: () => (s == null ? void 0 : s.isAuthenticated()) ?? !1,\n getUser: () => (s == null ? void 0 : s.getUser()) ?? null,\n destroy() {\n s == null || s.destroy(), x(g);\n }\n };\n return g;\n}\nfunction te(a) {\n return Z(a).auth;\n}\nexport {\n W as AutoRefreshScheduler,\n E as FILES_BATCH_SIZE,\n V as SessionStore,\n te as SinglebaseAuth,\n ae as SinglebaseAuthError,\n Z as SinglebaseClient,\n re as SinglebaseError,\n q as createAuthClient,\n Y as createFilesUploadApi,\n ie as getDefaultClient,\n oe as indexedDbCryptoStorage,\n ce as localStorageAdapter,\n ue as mapErrorToHint,\n le as memoryStorage,\n I as normalizeUploadError,\n ee as resolveScreen,\n de as sessionStorageAdapter,\n he as setDefaultClient\n};\n//# sourceMappingURL=index.js.map\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.3\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer(()=>{customElements.define(t,e)}):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","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","import type { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport type { AuthClient, AuthState } from \"@singlebase/singlebase-sdk\";\n\n/**\n * Subscribes a host element to an AuthClient's session state and triggers a\n * re-render on every change, so individual elements never hand-roll\n * subscribe/unsubscribe bookkeeping. Call bind(client) whenever the host's\n * resolved client changes (e.g. context updates, or .client is set).\n */\nexport class AuthController implements ReactiveController {\n private host: ReactiveControllerHost;\n private client: AuthClient | null = null;\n private unsubscribe: (() => void) | null = null;\n state: AuthState = { status: \"loading\", session: null, user: null };\n\n constructor(host: ReactiveControllerHost) {\n this.host = host;\n host.addController(this);\n }\n\n bind(client: AuthClient | null): void {\n if (client === this.client) return;\n this.unsubscribe?.();\n this.unsubscribe = null;\n this.client = client;\n if (!client) return;\n this.state = client.getState();\n this.unsubscribe = client.subscribe((state) => {\n this.state = state;\n this.host.requestUpdate();\n });\n this.host.requestUpdate();\n }\n\n hostDisconnected(): void {\n this.unsubscribe?.();\n this.unsubscribe = null;\n }\n}\n","import { css, unsafeCSS } from \"lit\";\n\n/**\n * Default values for every --sb-* design token, ported from the design\n * mock's tokens()/styles() functions. These are consumed as var(--sb-x,\n * DEFAULT) fallbacks at each point of use (see shared.ts) — never assigned\n * unconditionally on :host — so that a value set by a host application, or\n * by a theme/density attribute forwarded down from a composing parent\n * element, actually inherits through\n * nested shadow roots instead of being reset back to these defaults by every\n * descendant's own :host rule.\n */\nexport const TOKEN_DEFAULTS = {\n font: `\"Geist\", -apple-system, \"Segoe UI\", Helvetica, sans-serif`,\n mono: `\"Geist Mono\", ui-monospace, monospace`,\n accent: \"#111111\",\n onAccent: \"#ffffff\",\n radius: \"4px\",\n surface: \"#ffffff\",\n surfaceAlt: \"#fafafa\",\n ink: \"#16181a\",\n mutedInk: \"#61666c\",\n border: \"#e4e6e9\",\n borderStrong: \"#cdd1d6\",\n danger: \"#b4231a\",\n dangerBg: \"#fdf1f0\",\n dangerBorder: \"#f3d6d3\",\n dangerOutline: \"#e8c4c0\",\n dangerPanelBorder: \"#efd9d6\",\n dangerPanelBg: \"#fdf7f6\",\n ok: \"#0f6b4a\",\n okBg: \"#f0f7f3\",\n okBorder: \"#cfe5da\",\n gap: \"16px\",\n pad: \"20px\",\n fieldPad: \"11px 13px\"\n} as const;\n\n/**\n * Base host layout plus the theme=\"dark\"/density=\"compact\" attribute\n * overrides. These overrides are legitimate unconditional assignments —\n * they only fire when *this* element carries the attribute — but every\n * composite element (auth-screen, reset-password-form, etc.) must forward\n * theme/density/field-style to the singlebase-* children it renders for the\n * override to reach elements that don't carry the attribute directly.\n */\nexport const tokenDefaults = css`\n :host {\n display: block;\n box-sizing: border-box;\n font-family: var(--sb-font, ${unsafeCSS(TOKEN_DEFAULTS.font)});\n color: var(--sb-ink, ${unsafeCSS(TOKEN_DEFAULTS.ink)});\n }\n\n :host([theme=\"dark\"]) {\n /* The light default accent is near-black, which disappears on a dark\n surface — primary buttons and links both use it. A host that sets its\n own --sb-accent still wins: outer-page declarations beat :host rules. */\n --sb-accent: #f3f4f5;\n --sb-on-accent: #17181b;\n --sb-surface: #17181b;\n --sb-surface-alt: #202226;\n --sb-ink: #f3f4f5;\n --sb-muted-ink: #a2a8ae;\n --sb-border: #2c2f34;\n --sb-border-strong: #3a3e44;\n --sb-danger: #f08379;\n --sb-danger-bg: rgba(240, 131, 121, 0.1);\n --sb-danger-border: rgba(240, 131, 121, 0.3);\n --sb-danger-outline: rgba(240, 131, 121, 0.4);\n --sb-danger-panel-border: rgba(240, 131, 121, 0.3);\n --sb-danger-panel-bg: rgba(240, 131, 121, 0.06);\n --sb-ok: #6fd1a6;\n --sb-ok-bg: rgba(111, 209, 166, 0.1);\n --sb-ok-border: rgba(111, 209, 166, 0.28);\n }\n\n :host([density=\"compact\"]) {\n --sb-gap: 12px;\n --sb-pad: 16px;\n --sb-field-pad: 9px 11px;\n }\n`;\n","import { css } from \"lit\";\n\n/**\n * Shared internal styles, ported value-for-value from the design mock's\n * styles(t) / acc(t, open, bare) functions in project/AuthWidget.dc.html.\n * The mock computed these as inline style objects per render; here they are\n * static Shadow DOM CSS driven by the --sb-* tokens, with part hooks so\n * hosts can reach internals via ::part().\n */\nexport const sharedStyles = css`\n /* ── layout primitives ───────────────────────────────────── */\n .stack {\n display: flex;\n flex-direction: column;\n gap: var(--sb-gap, 16px);\n }\n\n .fields {\n display: flex;\n flex-direction: column;\n gap: var(--sb-gap, 16px);\n }\n\n .head {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .two-up {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--sb-gap, 16px);\n }\n\n .actions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .rule {\n height: 1px;\n background: var(--sb-border, #e4e6e9);\n }\n\n .between {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n }\n\n /* ── type ────────────────────────────────────────────────── */\n .logo-dot {\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 12px;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--sb-muted-ink, #61666c);\n margin-bottom: 6px;\n }\n\n .title {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n letter-spacing: -0.015em;\n color: var(--sb-ink, #16181a);\n }\n\n .sub {\n margin: 0;\n font-size: 13.5px;\n line-height: 1.5;\n color: var(--sb-muted-ink, #61666c);\n text-wrap: pretty;\n }\n\n .sec-title {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n letter-spacing: -0.01em;\n color: var(--sb-ink, #16181a);\n }\n\n .hint {\n margin: 0;\n font-size: 12.5px;\n line-height: 1.5;\n color: var(--sb-muted-ink, #61666c);\n text-wrap: pretty;\n }\n\n .sub-label {\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 11px;\n letter-spacing: 0.07em;\n text-transform: uppercase;\n color: var(--sb-muted-ink, #61666c);\n }\n\n /* ── fields ──────────────────────────────────────────────── */\n .field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .label-row {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: 8px;\n }\n\n label,\n .label {\n font-size: 12.5px;\n font-weight: 500;\n color: var(--sb-muted-ink, #61666c);\n letter-spacing: 0.01em;\n }\n\n input {\n width: 100%;\n box-sizing: border-box;\n font: inherit;\n font-size: 14px;\n color: var(--sb-ink, #16181a);\n background: var(--sb-surface-alt, #fafafa);\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: var(--sb-radius, 4px);\n padding: var(--sb-field-pad, 11px 13px);\n outline: none;\n }\n\n input:focus {\n border-color: var(--sb-accent, #111111);\n }\n\n input[aria-invalid=\"true\"] {\n border-color: var(--sb-danger, #b4231a);\n }\n\n /* field-style=\"underline\" — code boxes keep their box, they read as cells */\n :host([field-style=\"underline\"]) *:not(.code-row):not(.code-row-sm) > input {\n background: transparent;\n border: none;\n border-bottom: 1px solid var(--sb-border-strong, #cdd1d6);\n border-radius: 0;\n padding: 9px 2px;\n }\n\n p.err {\n margin: 0;\n font-size: 12.5px;\n color: var(--sb-danger, #b4231a);\n }\n\n /* ── code entry ──────────────────────────────────────────── */\n .code-row {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n gap: 8px;\n }\n\n .code-row input {\n text-align: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 18px;\n padding: 12px 0;\n }\n\n .code-row-sm {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n gap: 6px;\n }\n\n .code-row-sm input {\n text-align: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 14px;\n padding: 8px 0;\n }\n\n .resend-row {\n display: flex;\n align-items: baseline;\n gap: 8px;\n }\n\n /* ── buttons ─────────────────────────────────────────────── */\n button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n font: inherit;\n font-size: 13.5px;\n font-weight: 500;\n border-radius: var(--sb-radius, 4px);\n cursor: pointer;\n padding: 9px 14px;\n border: 1px solid transparent;\n transition:\n background 0.15s,\n border-color 0.15s,\n filter 0.15s,\n color 0.15s;\n }\n\n button:disabled {\n cursor: not-allowed;\n }\n\n button.primary {\n background: var(--sb-accent, #111111);\n color: var(--sb-on-accent, #ffffff);\n width: 100%;\n }\n\n button.primary:hover:not(:disabled) {\n filter: brightness(0.92);\n }\n\n button.primary-sm {\n background: var(--sb-accent, #111111);\n color: var(--sb-on-accent, #ffffff);\n padding: 7px 12px;\n }\n\n button.primary-sm:hover:not(:disabled) {\n filter: brightness(0.92);\n }\n\n button.ghost {\n background: transparent;\n color: var(--sb-muted-ink, #61666c);\n border: 1px solid var(--sb-border, #e4e6e9);\n width: 100%;\n }\n\n button.ghost-sm {\n background: transparent;\n color: var(--sb-muted-ink, #61666c);\n border: 1px solid var(--sb-border, #e4e6e9);\n padding: 7px 12px;\n }\n\n button.ghost:hover:not(:disabled),\n button.ghost-sm:hover:not(:disabled) {\n background: var(--sb-surface-alt, #fafafa);\n color: var(--sb-ink, #16181a);\n }\n\n button.secondary {\n background: var(--sb-surface, #ffffff);\n color: var(--sb-ink, #16181a);\n border: 1px solid var(--sb-border-strong, #cdd1d6);\n padding: 7px 12px;\n }\n\n button.secondary:hover:not(:disabled) {\n background: var(--sb-surface-alt, #fafafa);\n }\n\n button.link {\n font: inherit;\n font-size: 13px;\n font-weight: 500;\n color: var(--sb-accent, #111111);\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n text-decoration: underline;\n text-underline-offset: 3px;\n }\n\n button.link-sm {\n font: inherit;\n font-size: 12.5px;\n font-weight: 400;\n color: var(--sb-muted-ink, #61666c);\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n text-decoration: underline;\n text-underline-offset: 3px;\n }\n\n /* the mock's editLink: a muted underlined affordance that inks on hover */\n button.edit-link {\n align-self: flex-start;\n font: inherit;\n font-size: 12.5px;\n font-weight: 400;\n color: var(--sb-muted-ink, #61666c);\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n text-decoration: underline;\n text-underline-offset: 3px;\n transition: color 0.15s;\n }\n\n button.edit-link:hover:not(:disabled) {\n color: var(--sb-ink, #16181a);\n }\n\n button.edit-link:disabled {\n opacity: 0.4;\n }\n\n button.danger-link {\n align-self: flex-start;\n font: inherit;\n font-size: 12.5px;\n font-weight: 400;\n color: var(--sb-muted-ink, #61666c);\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n text-decoration: underline;\n text-underline-offset: 3px;\n transition: color 0.15s;\n }\n\n button.danger-link:hover:not(:disabled) {\n color: var(--sb-danger, #b4231a);\n }\n\n button.danger {\n padding: 7px 12px;\n background: transparent;\n color: var(--sb-danger, #b4231a);\n border: 1px solid var(--sb-danger-outline, #e8c4c0);\n }\n\n button.danger:hover:not(:disabled) {\n background: var(--sb-danger-bg, #fdf1f0);\n }\n\n button.danger:disabled {\n opacity: 0.45;\n }\n\n .btn-row {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n }\n\n .btn-row-end {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 12px;\n flex-wrap: wrap;\n }\n\n .edit-actions {\n display: flex;\n gap: 8px;\n padding-top: 2px;\n }\n\n /* ── feedback ────────────────────────────────────────────── */\n .banner,\n .notice {\n font-size: 13px;\n line-height: 1.45;\n border-radius: var(--sb-radius, 4px);\n padding: 10px 12px;\n }\n\n .banner {\n color: var(--sb-danger, #b4231a);\n background: var(--sb-danger-bg, #fdf1f0);\n border: 1px solid var(--sb-danger-border, #f3d6d3);\n }\n\n .notice {\n color: var(--sb-ok, #0f6b4a);\n background: var(--sb-ok-bg, #f0f7f3);\n border: 1px solid var(--sb-ok-border, #cfe5da);\n }\n\n .saved-note {\n font-size: 12.5px;\n font-weight: 500;\n color: var(--sb-ok, #0f6b4a);\n }\n\n .spinner {\n width: 13px;\n height: 13px;\n border: 2px solid rgba(255, 255, 255, 0.4);\n border-top-color: var(--sb-on-accent, #ffffff);\n border-radius: 50%;\n animation: sb-spin 0.7s linear infinite;\n }\n\n @keyframes sb-spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n }\n\n /* ── step bar ────────────────────────────────────────────── */\n .step-bar {\n height: 3px;\n background: var(--sb-border, #e4e6e9);\n border-radius: 99px;\n overflow: hidden;\n }\n\n .step-fill {\n height: 100%;\n background: var(--sb-accent, #111111);\n transition: width 0.3s;\n }\n\n /* ── footer link row ─────────────────────────────────────── */\n .foot {\n margin: 0;\n display: flex;\n gap: 6px;\n justify-content: center;\n font-size: 13px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n /* ── oauth ───────────────────────────────────────────────── */\n .oauth-primary {\n background: var(--sb-surface, #ffffff);\n color: var(--sb-ink, #16181a);\n border: 1px solid var(--sb-border-strong, #cdd1d6);\n width: 100%;\n }\n\n .oauth-primary:hover:not(:disabled) {\n background: var(--sb-surface-alt, #fafafa);\n }\n\n .g-mark {\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-weight: 500;\n font-size: 13px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .icon-row {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 8px;\n }\n\n .icon-btn {\n padding: 7px 0;\n background: var(--sb-surface, #ffffff);\n color: var(--sb-muted-ink, #61666c);\n border: 1px solid var(--sb-border, #e4e6e9);\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 13px;\n }\n\n .icon-btn:hover:not(:disabled) {\n background: var(--sb-surface-alt, #fafafa);\n color: var(--sb-ink, #16181a);\n }\n\n /* ── accordion (method picker) ───────────────────────────── */\n .acc-wrap {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .acc-item {\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: var(--sb-radius, 4px);\n overflow: hidden;\n background: transparent;\n transition:\n border-color 0.2s,\n background 0.2s;\n }\n\n .acc-item.open {\n border-color: var(--sb-border-strong, #cdd1d6);\n background: var(--sb-surface, #ffffff);\n }\n\n .acc-item.bare {\n border: none;\n background: transparent;\n }\n\n .acc-head {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n box-sizing: border-box;\n font: inherit;\n text-align: left;\n background: transparent;\n border: none;\n border-radius: 0;\n padding: 11px 12px;\n cursor: pointer;\n color: var(--sb-ink, #16181a);\n transition: background 0.15s;\n }\n\n .acc-head:hover {\n background: var(--sb-surface-alt, #fafafa);\n }\n\n .chev {\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 13px;\n color: var(--sb-muted-ink, #61666c);\n line-height: 1;\n transform: rotate(0deg);\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .acc-item.open .chev {\n transform: rotate(90deg);\n }\n\n .acc-title {\n font-size: 13.5px;\n font-weight: 500;\n color: var(--sb-ink, #16181a);\n letter-spacing: -0.005em;\n }\n\n .acc-meta {\n font-size: 12px;\n color: var(--sb-muted-ink, #61666c);\n margin-left: auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .acc-body {\n display: grid;\n grid-template-rows: 0fr;\n opacity: 0;\n transition:\n grid-template-rows 0.28s cubic-bezier(0.32, 0.72, 0, 1),\n opacity 0.16s ease;\n }\n\n .acc-item.open .acc-body {\n grid-template-rows: 1fr;\n opacity: 1;\n transition:\n grid-template-rows 0.34s cubic-bezier(0.32, 0.72, 0, 1),\n opacity 0.26s ease 0.06s;\n }\n\n .acc-clip {\n overflow: hidden;\n min-height: 0;\n }\n\n .acc-inner {\n display: flex;\n flex-direction: column;\n gap: var(--sb-gap, 16px);\n padding: 2px 12px 14px;\n transform: translateY(-4px);\n transition: transform 0.3s cubic-bezier(0.32, 0.72, 0, 1);\n }\n\n .acc-item.open .acc-inner {\n transform: translateY(0);\n }\n\n .acc-item.bare .acc-inner {\n padding: 0;\n }\n\n /* ── invite ──────────────────────────────────────────────── */\n .invite-box {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 10px 12px;\n background: var(--sb-surface-alt, #fafafa);\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: var(--sb-radius, 4px);\n }\n\n .invite-label {\n font-size: 11.5px;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n color: var(--sb-muted-ink, #61666c);\n }\n\n .invite-email {\n font-size: 14px;\n color: var(--sb-ink, #16181a);\n }\n\n /* ── account ─────────────────────────────────────────────── */\n .acct-root {\n display: flex;\n flex-direction: column;\n gap: 22px;\n width: 100%;\n }\n\n .acct-nav {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n padding-bottom: 18px;\n border-bottom: 1px solid var(--sb-border, #e4e6e9);\n }\n\n .acct-who {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .avatar-col {\n flex: 0 0 auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n }\n\n .avatar {\n flex: 0 0 auto;\n width: 42px;\n height: 42px;\n border-radius: 50%;\n background: var(--sb-surface-alt, #fafafa);\n border: 1px dashed var(--sb-border, #e4e6e9);\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 13px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .avatar.has-photo {\n border-style: solid;\n overflow: hidden;\n }\n .avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n .avatar-lg {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--sb-surface-alt, #fafafa);\n border: 1px dashed var(--sb-border-strong, #cdd1d6);\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 13px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .avatar-row {\n display: flex;\n align-items: center;\n gap: 14px;\n }\n\n .avatar-actions {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .acct-who-text {\n min-width: 0;\n }\n\n .acct-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--sb-ink, #16181a);\n letter-spacing: -0.01em;\n }\n\n .acct-email {\n font-size: 12.5px;\n color: var(--sb-muted-ink, #61666c);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .acct-body {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 22px;\n }\n\n .section {\n display: flex;\n flex-direction: column;\n gap: 14px;\n }\n\n .sum-list {\n display: flex;\n flex-direction: column;\n }\n\n .sum-row {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: 16px;\n padding: 15px 0;\n border-bottom: 1px solid var(--sb-border, #e4e6e9);\n }\n\n .sum-label {\n flex: 0 0 auto;\n font-size: 12.5px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .sum-value {\n min-width: 0;\n font-size: 13.5px;\n color: var(--sb-ink, #16181a);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .edit-card {\n display: flex;\n flex-direction: column;\n gap: var(--sb-gap, 16px);\n padding: 14px;\n background: var(--sb-surface-alt, #fafafa);\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: var(--sb-radius, 4px);\n }\n\n /* 2FA switch */\n .switch {\n flex: 0 0 auto;\n width: 42px;\n height: 24px;\n border-radius: 99px;\n border: 1px solid var(--sb-border-strong, #cdd1d6);\n background: var(--sb-surface-alt, #fafafa);\n cursor: pointer;\n padding: 2px;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n transition:\n background 0.15s,\n border-color 0.15s;\n }\n\n .switch[aria-pressed=\"true\"] {\n border-color: var(--sb-accent, #111111);\n background: var(--sb-accent, #111111);\n justify-content: flex-end;\n }\n\n .knob {\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--sb-muted-ink, #61666c);\n display: block;\n }\n\n .switch[aria-pressed=\"true\"] .knob {\n background: var(--sb-on-accent, #ffffff);\n }\n\n .qr-row {\n display: flex;\n gap: 14px;\n align-items: flex-start;\n }\n\n .qr-box {\n flex: 0 0 auto;\n width: 74px;\n height: 74px;\n border-radius: var(--sb-radius, 4px);\n background: var(--sb-surface-alt, #fafafa);\n border: 1px dashed var(--sb-border-strong, #cdd1d6);\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 12px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .qr-text {\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-width: 0;\n }\n\n /* connected accounts */\n .list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .conn-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 10px 12px;\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: var(--sb-radius, 4px);\n background: var(--sb-surface-alt, #fafafa);\n }\n\n .conn-left {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n }\n\n .conn-mark {\n flex: 0 0 auto;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background: var(--sb-surface, #ffffff);\n border: 1px solid var(--sb-border, #e4e6e9);\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 11px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .conn-name {\n font-size: 13.5px;\n font-weight: 500;\n color: var(--sb-ink, #16181a);\n }\n\n .meta-row {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .dot {\n flex: 0 0 auto;\n width: 5px;\n height: 5px;\n border-radius: 50%;\n background: var(--sb-ok, #0f6b4a);\n }\n\n .conn-meta {\n font-size: 12px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .tile-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(118px, 1fr));\n gap: 8px;\n }\n\n .tile {\n display: flex;\n align-items: center;\n gap: 8px;\n font: inherit;\n text-align: left;\n padding: 10px 11px;\n border-radius: var(--sb-radius, 4px);\n border: 1px dashed var(--sb-border-strong, #cdd1d6);\n background: transparent;\n cursor: pointer;\n transition:\n background 0.15s,\n border-color 0.15s,\n color 0.15s;\n }\n\n .tile:hover:not(:disabled) {\n background: var(--sb-surface-alt, #fafafa);\n border-color: var(--sb-accent, #111111);\n border-style: solid;\n }\n\n .tile-mark {\n flex: 0 0 auto;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n background: var(--sb-surface-alt, #fafafa);\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 10.5px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .tile-name {\n font-size: 13px;\n color: var(--sb-ink, #16181a);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .tile-plus {\n margin-left: auto;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 14px;\n line-height: 1;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .delete-panel {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 14px;\n border: 1px solid var(--sb-danger-panel-border, #efd9d6);\n border-radius: var(--sb-radius, 4px);\n background: var(--sb-danger-panel-bg, #fdf7f6);\n }\n\n .disabled-note {\n font-size: 12px;\n color: var(--sb-muted-ink, #61666c);\n font-style: italic;\n }\n`;\n","/**\n * Default UI copy, taken verbatim from the design mock's renderVals()\n * (titles/subs/ctas maps and inline strings in project/AuthWidget.dc.html).\n * Every element accepts a .messages property with a partial override of\n * this shape — spec: \"configurable labels and messages without changing flow\n * logic\". This is deliberately a flat string bag rather than a locale-file\n * system; hosts needing full i18n supply one populated object per language.\n */\nexport interface SinglebaseAuthMessages {\n // titles\n signInTitle: string;\n signUpTitle: string;\n forgotTitle: string;\n verifyTitle: string;\n otpTitle: string;\n newPassTitle: string;\n inviteTitle: string;\n\n // subtitles\n signInSubEmailAndOauth: string;\n signInSubEmailOnly: string;\n signInSubOauthOnly: string;\n signUpSub: string;\n forgotSub: string;\n otpSub: string;\n inviteSub: string;\n\n // ctas\n signInCta: string;\n signUpCta: string;\n forgotCta: string;\n verifyCta: string;\n otpCta: string;\n newPassCta: string;\n inviteCta: string;\n continueCta: string;\n backCta: string;\n\n // accordion\n emailMethodTitle: string;\n emailMethodTitleSignUp: string;\n emailMethodMeta: string;\n emailMethodMetaSignUp: string;\n emailMethodMetaOtp: string;\n oauthMethodTitle: string;\n oauthMethodMeta: string;\n\n // fields\n fullNameLabel: string;\n fullNamePlaceholder: string;\n emailLabel: string;\n emailPlaceholder: string;\n passwordLabel: string;\n passwordPlaceholder: string;\n newPasswordLabel: string;\n newPasswordPlaceholder: string;\n confirmPasswordLabel: string;\n confirmPasswordPlaceholder: string;\n currentPasswordLabel: string;\n firstNameLabel: string;\n firstNamePlaceholder: string;\n lastNameLabel: string;\n lastNamePlaceholder: string;\n phoneLabel: string;\n phonePlaceholder: string;\n invitedEmailLabel: string;\n\n // links / affordances\n forgotLink: string;\n otpInsteadLink: string;\n footTextSignIn: string;\n footActionSignIn: string;\n footTextSignUp: string;\n footActionSignUp: string;\n resendQuestion: string;\n resendCta: string;\n oauthPrimaryLabel: string;\n oauthContinueWith: string;\n\n // blocked\n blockedTitleDisabled: string;\n blockedTitleUnavailable: string;\n blockedBodyDisabled: string;\n blockedBodyUnavailable: string;\n blockedHint: string;\n\n // account\n signOutCta: string;\n addPhotoLink: string;\n changePhotoLink: string;\n photoUploading: string;\n photoUpdated: string;\n editingLabel: string;\n uploadPhotoCta: string;\n replacePhotoCta: string;\n photoHint: string;\n doneCta: string;\n cancelCta: string;\n editAccountCta: string;\n saveChangesCta: string;\n emailChangeHint: string;\n passwordSectionTitle: string;\n passwordChangedHint: string;\n changePasswordCta: string;\n updatePasswordCta: string;\n twoFaTitle: string;\n twoFaHintOff: string;\n twoFaHintOn: string;\n twoFaScanHint: string;\n connectedTitle: string;\n connectedHint: string;\n addAnotherLabel: string;\n disconnectCta: string;\n notConnectedLabel: string;\n deleteAccountCta: string;\n deleteAccountConfirmCta: string;\n deletePanelBody: string;\n deleteConfirmLabel: string;\n deleteConfirmPlaceholder: string;\n savedNote: string;\n passwordUpdatedNote: string;\n\n // standalone change-email / change-username forms\n changeEmailTitle: string;\n newEmailLabel: string;\n changeEmailCta: string;\n changeUsernameTitle: string;\n newUsernameLabel: string;\n changeUsernameCta: string;\n\n // generic async / errors\n genericErrorMessage: string;\n rateLimitedMessage: string;\n codeSentNeutral: string;\n invalidEmailError: string;\n requiredError: string;\n passwordMinError: string;\n passwordMatchError: string;\n codeIncompleteError: string;\n invalidPhoneError: string;\n notYetSupported: string;\n\n // already-signed-in interstitial\n alreadySignedInTitle: string;\n alreadySignedInSub: string;\n alreadySignedInSubPrefix: string;\n continueHint: string;\n\n // consent line\n consentPrefix: string;\n consentJoin: string;\n termsLabel: string;\n privacyLabel: string;\n\n emailUnchangedError: string;\n emailUpdatedNote: string;\n changeEmailCtaShort: string;\n changeEmailHint: string;\n changeEmailConfirmHint: string;\n changeEmailElsewhereHint: string;\n confirmChangeCta: string;\n codeLabel: string;\n /** The credit under the card. A brand name — translate only the \"Auth by\". */\n brandingLabel: string;\n\n // provider linking\n linkRequiresSignIn: string;\n\n // oauth callback screen\n oauthCallbackTitle: string;\n oauthCallbackSub: string;\n oauthDenied: string;\n}\n\nexport const defaultMessages: SinglebaseAuthMessages = {\n signInTitle: \"Sign in\",\n signUpTitle: \"Create your account\",\n forgotTitle: \"Reset your password\",\n verifyTitle: \"Enter your code\",\n otpTitle: \"Sign in with a code\",\n newPassTitle: \"Choose a new password\",\n inviteTitle: \"You have been invited\",\n\n signInSubEmailAndOauth: \"Use your email or a connected provider.\",\n signInSubEmailOnly: \"Use your email address and password.\",\n signInSubOauthOnly: \"Continue with a connected provider.\",\n signUpSub: \"Free to start. No card required.\",\n forgotSub: \"We will email you a six-digit code to confirm it is you.\",\n otpSub: \"No password needed — we will email you a six-digit code.\",\n inviteSub: \"Set up your account to continue.\",\n\n signInCta: \"Sign in\",\n signUpCta: \"Create account\",\n forgotCta: \"Send code\",\n verifyCta: \"Verify code\",\n otpCta: \"Email me a code\",\n newPassCta: \"Save password\",\n inviteCta: \"Create account\",\n continueCta: \"Continue\",\n backCta: \"Back\",\n\n emailMethodTitle: \"Email\",\n emailMethodTitleSignUp: \"Email and password\",\n emailMethodMeta: \"Password or one-time code\",\n emailMethodMetaSignUp: \"Create with an address\",\n emailMethodMetaOtp: \"One-time code\",\n oauthMethodTitle: \"Single sign-on\",\n oauthMethodMeta: \"Google, GitHub, and more\",\n\n fullNameLabel: \"Full name\",\n fullNamePlaceholder: \"Ada Lovelace\",\n emailLabel: \"Email\",\n emailPlaceholder: \"you@company.com\",\n passwordLabel: \"Password\",\n passwordPlaceholder: \"••••••••\",\n newPasswordLabel: \"New password\",\n newPasswordPlaceholder: \"At least 10 characters\",\n confirmPasswordLabel: \"Confirm password\",\n confirmPasswordPlaceholder: \"Repeat it\",\n currentPasswordLabel: \"Current password\",\n firstNameLabel: \"First name\",\n firstNamePlaceholder: \"Ada\",\n lastNameLabel: \"Last name\",\n lastNamePlaceholder: \"Lovelace\",\n phoneLabel: \"Phone number\",\n phonePlaceholder: \"+1 (555) 000-0000\",\n invitedEmailLabel: \"Invited email\",\n\n forgotLink: \"Forgot?\",\n otpInsteadLink: \"Email me a one-time code instead\",\n footTextSignIn: \"New here?\",\n footActionSignIn: \"Create an account\",\n footTextSignUp: \"Already have an account?\",\n footActionSignUp: \"Sign in\",\n resendQuestion: \"Did not get it?\",\n resendCta: \"Resend code\",\n oauthPrimaryLabel: \"Continue with Google\",\n oauthContinueWith: \"Continue with\",\n\n blockedTitleDisabled: \"Sign-in is turned off\",\n blockedTitleUnavailable: \"Sign-in unavailable\",\n blockedBodyDisabled: \"Authentication is currently disabled for this application.\",\n blockedBodyUnavailable: \"No sign-in methods are enabled for this application.\",\n blockedHint: \"Contact the site owner if you think this is a mistake.\",\n\n signOutCta: \"Sign out\",\n addPhotoLink: \"Add photo\",\n changePhotoLink: \"Change\",\n photoUploading: \"Uploading…\",\n photoUpdated: \"Photo updated\",\n editingLabel: \"Editing\",\n uploadPhotoCta: \"Upload photo\",\n replacePhotoCta: \"Replace photo\",\n photoHint: \"PNG or JPG, up to 2 MB.\",\n doneCta: \"Done\",\n cancelCta: \"Cancel\",\n editAccountCta: \"Edit account\",\n saveChangesCta: \"Save changes\",\n emailChangeHint: \"We will send a verification link to the new address.\",\n passwordSectionTitle: \"Password\",\n passwordChangedHint: \"Last changed three months ago.\",\n changePasswordCta: \"Change password\",\n updatePasswordCta: \"Update password\",\n twoFaTitle: \"Two-factor authentication\",\n twoFaHintOff: \"Add a second step when signing in.\",\n twoFaHintOn: \"Enabled with an authenticator app.\",\n twoFaScanHint: \"Scan with your authenticator app, then enter the 6-digit code.\",\n connectedTitle: \"Connected accounts\",\n connectedHint: \"Sign in with any provider you connect here.\",\n addAnotherLabel: \"Add another\",\n disconnectCta: \"Disconnect\",\n notConnectedLabel: \"Not connected\",\n deleteAccountCta: \"Delete account\",\n deleteAccountConfirmCta: \"Permanently delete account\",\n deletePanelBody:\n \"This removes your profile, sessions and connected providers. It cannot be undone.\",\n deleteConfirmLabel: \"Type DELETE to confirm\",\n deleteConfirmPlaceholder: \"DELETE\",\n savedNote: \"Saved\",\n passwordUpdatedNote: \"Password updated\",\n\n changeEmailTitle: \"Email\",\n newEmailLabel: \"New email\",\n changeEmailCta: \"Send verification code\",\n changeUsernameTitle: \"Username\",\n newUsernameLabel: \"New username\",\n changeUsernameCta: \"Send verification code\",\n\n genericErrorMessage: \"Something went wrong. Please try again.\",\n rateLimitedMessage: \"Too many attempts. Try again in 5 minutes or reset your password.\",\n codeSentNeutral: \"If an eligible account exists, a code has been sent.\",\n invalidEmailError: \"Enter a valid email address.\",\n requiredError: \"This cannot be empty.\",\n passwordMinError: \"Use at least 10 characters.\",\n passwordMatchError: \"Both passwords must match.\",\n codeIncompleteError: \"Enter all six digits.\",\n invalidPhoneError: \"Enter a valid phone number.\",\n notYetSupported: \"Not yet supported\",\n\n alreadySignedInTitle: \"You are already signed in\",\n alreadySignedInSub: \"Continue where you left off, or sign out to use another account.\",\n alreadySignedInSubPrefix: \"Signed in as\",\n continueHint: \"Continuing takes you to your account.\",\n\n consentPrefix: \"By continuing you agree to our\",\n consentJoin: \"and\",\n termsLabel: \"Terms\",\n privacyLabel: \"Privacy Policy\",\n\n emailUnchangedError: \"That is already your email address.\",\n emailUpdatedNote: \"Email updated\",\n changeEmailCtaShort: \"Change email\",\n changeEmailHint: \"We will send a code to your current address to confirm it is you.\",\n changeEmailConfirmHint: \"Enter the code we sent, and your email becomes\",\n changeEmailElsewhereHint: \"Your email is changed below, with a verification step.\",\n confirmChangeCta: \"Confirm change\",\n codeLabel: \"Verification code\",\n brandingLabel: \"Auth by Singlebase\",\n linkRequiresSignIn: \"Sign in first, then link a provider.\",\n\n oauthCallbackTitle: \"Finishing sign-in\",\n oauthCallbackSub: \"One moment while we complete your sign-in.\",\n oauthDenied: \"Sign-in was cancelled or denied.\"\n};\n\nexport function resolveMessages(\n overrides?: Partial<SinglebaseAuthMessages>\n): SinglebaseAuthMessages {\n return overrides ? { ...defaultMessages, ...overrides } : defaultMessages;\n}\n","import { LitElement, type PropertyValues } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport {\n AUTHUI_PROP_KEYS,\n authUIAttributeFor,\n getDefaultClient,\n type AuthUIConfig\n} from \"@singlebase/core\";\nimport type { AuthClient, UserProfile } from \"@singlebase/singlebase-sdk\";\nimport { AuthController } from \"../controllers/auth-controller.js\";\nimport { tokenDefaults } from \"../styles/tokens.js\";\nimport { sharedStyles } from \"../styles/shared.js\";\nimport { defaultMessages, resolveMessages, type SinglebaseAuthMessages } from \"../messages.js\";\n\n/**\n * Base class for every singlebase-* element: resolves an AuthClient, exposes\n * .messages overrides, and gives subclasses a live AuthController bound to\n * whichever client won.\n */\nexport abstract class SinglebaseElementBase extends LitElement {\n static styles = [tokenDefaults, sharedStyles];\n\n @property({ attribute: false })\n accessor client: AuthClient | null = null;\n\n @property({ attribute: false })\n accessor messages: Partial<SinglebaseAuthMessages> = {};\n\n /**\n * theme/density/field-style are plain reflected attributes so a composing\n * parent can forward them verbatim to the singlebase-* children it renders.\n * CSS custom properties inherit through shadow boundaries on their own,\n * but an *attribute* selector like :host([theme=\"dark\"]) only matches\n * the element that actually carries the attribute, so it must be\n * explicitly propagated down the composition tree.\n */\n @property({ reflect: true })\n accessor theme: \"light\" | \"dark\" | undefined = undefined;\n\n @property({ reflect: true })\n accessor density: \"comfortable\" | \"compact\" | undefined = undefined;\n\n /**\n * Input chrome: boxed (default) or a single bottom rule. Reflected for the\n * same reason as theme/density — the CSS is an attribute selector.\n */\n @property({ reflect: true, attribute: \"field-style\" })\n accessor fieldStyle: \"outline\" | \"underline\" | undefined = undefined;\n\n protected auth = new AuthController(this);\n\n /**\n * Resolution order: an explicit `.client`, then the page's default\n * SinglebaseClient()'s auth.\n *\n * That fallback is what lets several widgets sit on one page — a header\n * sign-in, a modal, an account panel — and share one session with no\n * wiring, since SinglebaseClient() is cached per project. A page talking to\n * two projects sets `.client` on the widgets belonging to the second.\n *\n * Reading `.auth` is also what *constructs* auth: a page that only drops\n * in a widget initializes it with no bootstrap code at all.\n */\n get resolvedClient(): AuthClient | null {\n if (this.client) return this.client;\n return getDefaultClient<{ auth: AuthClient }>()?.auth ?? null;\n }\n\n /** Page-wide UI config from SinglebaseClient({ authui }), if there is one. */\n get uiConfig(): AuthUIConfig | null {\n return this.resolvedClient?.authui ?? null;\n }\n\n /**\n * Config messages sit *under* the element's own, so a page-wide translation\n * can be overridden per widget without repeating the whole bag.\n */\n get msg(): SinglebaseAuthMessages {\n const shared = this.uiConfig?.messages;\n return resolveMessages(shared ? { ...shared, ...this.messages } : this.messages);\n }\n\n /** Config keys already applied, so a later render does not fight the host. */\n private appliedConfig = new Set<string>();\n\n /**\n * Copies the page-wide config onto this element.\n *\n * An attribute present in markup always wins — that is the whole precedence\n * rule, and it is checked per key rather than wholesale, so a widget can\n * override one thing and inherit the rest. Keys the element does not have\n * are skipped, which is how one config can serve every singlebase-authui-*\n * element without any of them knowing about the others.\n */\n protected applyUIConfig(): void {\n const config = this.uiConfig;\n if (!config) return;\n\n for (const key of AUTHUI_PROP_KEYS) {\n const value = config[key];\n if (value === undefined) continue;\n if (!(key in this)) continue;\n if (this.hasAttribute(authUIAttributeFor(key))) continue;\n if (this.appliedConfig.has(key)) continue;\n\n this.appliedConfig.add(key);\n (this as unknown as Record<string, unknown>)[key] = value;\n }\n\n for (const [name, value] of Object.entries(config.tokens ?? {})) {\n if (!name.startsWith(\"--\")) continue;\n // Anything already set inline came from the host and stays.\n if (this.style.getPropertyValue(name)) continue;\n this.style.setProperty(name, value);\n }\n }\n\n // ── public API mirrored from the client, for host/SPA code ──\n isAuthenticated(): boolean {\n return this.resolvedClient?.isAuthenticated() ?? false;\n }\n\n getUser(): UserProfile | null {\n return this.resolvedClient?.getUser() ?? null;\n }\n\n async refreshSession() {\n return this.resolvedClient?.refreshSession();\n }\n\n async logout(): Promise<void> {\n await this.resolvedClient?.logout();\n }\n\n override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.auth.bind(this.resolvedClient);\n this.applyUIConfig();\n }\n}\n\nexport { defaultMessages };\n","/**\n * Resolves a post-login destination, or null when there isn't a safe one.\n *\n * The candidate usually comes from a `?redirect=` parameter, which is\n * attacker-controllable: anyone can send a victim a link to your own login\n * page carrying `?redirect=https://evil.example`. If the widget followed it,\n * the victim would sign in on a page they trust and then be handed to a site\n * they don't — a textbook open redirect, and a convincing one precisely\n * because the login step was genuine.\n *\n * So the rule is same-origin only. Relative paths resolve against the current\n * page; anything landing on another origin is refused, and the caller is told\n * why rather than left wondering where the redirect went.\n */\nexport function resolveRedirectTarget(\n candidate: string | null | undefined,\n currentHref: string | null | undefined,\n onRefused?: (reason: string) => void\n): string | null {\n if (!candidate || !currentHref) return null;\n\n let here: URL;\n try {\n here = new URL(currentHref);\n } catch {\n return null;\n }\n\n let target: URL;\n try {\n target = new URL(candidate, here.href);\n } catch {\n onRefused?.(`\"${candidate}\" is not a valid URL`);\n return null;\n }\n\n // Only ever http(s). A `javascript:` or `data:` candidate resolves to a URL\n // object quite happily, and assigning it would execute script.\n if (target.protocol !== \"http:\" && target.protocol !== \"https:\") {\n onRefused?.(`refusing redirect to unsupported scheme \"${target.protocol}\"`);\n return null;\n }\n\n if (target.origin !== here.origin) {\n onRefused?.(`refusing cross-origin redirect to ${target.origin}; same-origin only`);\n return null;\n }\n\n // Already there — redirecting would just reload, and can loop.\n if (target.href === here.href) return null;\n\n return target.href;\n}\n","import type { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport type { AuthClient, AuthSettings } from \"@singlebase/singlebase-sdk\";\n\n/**\n * Loads auth.settings once per bound client and caches it, so composing\n * many form elements inside <singlebase-authui> doesn't mean many redundant\n * auth.settings calls. Each element may also be given .settings directly\n * (e.g. by a parent that already loaded them) to skip the fetch entirely.\n */\nexport class SettingsController implements ReactiveController {\n private host: ReactiveControllerHost;\n private client: AuthClient | null = null;\n private cache = new WeakMap<AuthClient, Promise<AuthSettings>>();\n settings: AuthSettings | null = null;\n error: unknown = null;\n\n constructor(host: ReactiveControllerHost) {\n this.host = host;\n host.addController(this);\n }\n\n hostConnected(): void {}\n\n load(client: AuthClient | null, override?: AuthSettings | null): void {\n if (override) {\n this.settings = override;\n return;\n }\n if (!client || client === this.client) return;\n this.client = client;\n let pending = this.cache.get(client);\n if (!pending) {\n pending = client.getSettings();\n this.cache.set(client, pending);\n }\n pending\n .then((settings) => {\n this.settings = settings;\n this.error = null;\n this.host.requestUpdate();\n })\n .catch((error) => {\n this.error = error;\n this.host.requestUpdate();\n });\n }\n}\n","import type { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport type { AuthClient, AuthEventName } from \"@singlebase/singlebase-sdk\";\n\nexport const BRIDGED_EVENTS = [\n \"load\",\n \"success\",\n \"error\",\n \"signin\",\n \"signup\",\n \"signout\",\n \"session\",\n \"account-updated\",\n \"password-change\",\n \"email-change\",\n \"username-change\",\n \"expired\",\n \"navigate\",\n \"goto\"\n] as const satisfies readonly AuthEventName[];\n\n/**\n * The auth API's event names mapped onto the\n * friendlier ones. Both are dispatched so either style works.\n */\nconst SPEC_ALIASES: Partial<Record<AuthEventName, string>> = {\n load: \"auth:ready\",\n signin: \"auth:signin\",\n signup: \"auth:signup\",\n session: \"auth:session\",\n \"account-updated\": \"auth:profile-update\",\n signout: \"auth:signout\",\n error: \"auth:error\",\n navigate: \"auth:navigate\"\n};\n\n/** \"account-updated\" -> \"onAccountUpdated\" */\nexport function callbackPropFor(event: string): string {\n return \"on\" + event.replace(/(^|-)([a-z])/g, (_, __, c: string) => c.toUpperCase());\n}\n\n/**\n * Re-publishes core auth events on the host element in the two ways host\n * apps actually consume them:\n *\n * - a DOM CustomEvent (`singlebase-signin`, and the spec's `auth:signin`),\n * bubbling and composed so `document.addEventListener` works;\n * - a callback property (`el.onSignin = fn`), since HTML attributes cannot\n * carry functions.\n *\n * Event details never include tokens — consumers read the session through\n * the client, per the spec's events rule.\n */\nexport class EventBridge implements ReactiveController {\n private unsubscribes: Array<() => void> = [];\n private client: AuthClient | null = null;\n\n constructor(private host: ReactiveControllerHost & HTMLElement) {\n host.addController(this);\n }\n\n bind(client: AuthClient | null): void {\n if (client === this.client) return;\n this.release();\n this.client = client;\n if (!client) return;\n\n this.unsubscribes = BRIDGED_EVENTS.map((event) =>\n client.on(event, (detail: unknown) => this.publish(event, detail))\n );\n }\n\n private publish(event: string, detail: unknown) {\n const callback = (this.host as unknown as Record<string, unknown>)[callbackPropFor(event)];\n if (typeof callback === \"function\") {\n try {\n (callback as (d: unknown) => void).call(this.host, detail);\n } catch (error) {\n console.error(`[singlebase] ${callbackPropFor(event)} threw:`, error);\n }\n }\n\n const init: CustomEventInit = { detail, bubbles: true, composed: true };\n this.host.dispatchEvent(new CustomEvent(`singlebase-${event}`, init));\n const alias = SPEC_ALIASES[event as AuthEventName];\n if (alias) this.host.dispatchEvent(new CustomEvent(alias, init));\n }\n\n private release() {\n this.unsubscribes.forEach((off) => off());\n this.unsubscribes = [];\n }\n\n hostDisconnected(): void {\n this.release();\n this.client = null;\n }\n}\n","import { html } from \"lit\";\nimport { state } from \"lit/decorators.js\";\nimport { SinglebaseAuthError, mapErrorToHint } from \"@singlebase/singlebase-sdk\";\nimport { SinglebaseElementBase } from \"./base.js\";\n\nexport type FormPhase = \"idle\" | \"submitting\" | \"success\" | \"error\";\n\n/**\n * Adds the spec's required cross-cutting form behavior to SinglebaseElementBase:\n * idle/submitting/success/error phase, a form-level error message, disabled\n * controls while submitting, an aria-live status region, and cancellation of\n * in-flight work on disconnect.\n */\nexport abstract class SinglebaseFormBase extends SinglebaseElementBase {\n @state()\n protected accessor phase: FormPhase = \"idle\";\n\n @state()\n protected accessor formError = \"\";\n\n @state()\n protected accessor noticeMessage = \"\";\n\n protected abortController: AbortController | null = null;\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.abortController?.abort();\n }\n\n protected get signal(): AbortSignal {\n this.abortController?.abort();\n this.abortController = new AbortController();\n return this.abortController.signal;\n }\n\n /** Runs task, tracking idle→submitting→success/error and mapping errors to a message. */\n protected async run(task: () => Promise<void>): Promise<void> {\n this.phase = \"submitting\";\n this.formError = \"\";\n try {\n await task();\n this.phase = \"success\";\n } catch (error) {\n if (this.isAbortError(error)) return;\n this.phase = \"error\";\n this.formError = this.describeError(error);\n }\n }\n\n private isAbortError(error: unknown): boolean {\n return error instanceof DOMException && error.name === \"AbortError\";\n }\n\n protected describeError(error: unknown): string {\n if (error instanceof SinglebaseAuthError) {\n const hint = mapErrorToHint(error.code);\n if (hint === \"disable_retry_show_rate_limited\") return this.msg.rateLimitedMessage;\n if (hint === \"generic_credentials_message\") return this.msg.genericErrorMessage;\n return this.msg.genericErrorMessage;\n }\n return this.msg.genericErrorMessage;\n }\n\n protected get submitting(): boolean {\n return this.phase === \"submitting\";\n }\n\n /** aria-live region for async status — spec requires one per form. */\n protected renderStatus() {\n return html`\n <div\n role=\"status\"\n aria-live=\"polite\"\n style=\"position:absolute;width:1px;height:1px;overflow:hidden;\"\n >\n ${this.phase === \"submitting\" ? \"Submitting…\" : \"\"}\n ${this.phase === \"success\" ? \"Done.\" : \"\"}\n </div>\n ${this.formError ? html`<p class=\"banner\" role=\"alert\">${this.formError}</p>` : null}\n ${this.noticeMessage ? html`<p class=\"notice\" role=\"status\">${this.noticeMessage}</p>` : null}\n `;\n }\n}\n","import type { UserProfile } from \"@singlebase/singlebase-sdk\";\n\n/** \"Ada Lovelace\", or \"\" when the profile carries no name at all. */\nexport function fullNameOf(user: Pick<UserProfile, \"first_name\" | \"last_name\"> | null): string {\n return [user?.first_name, user?.last_name].filter(Boolean).join(\" \").trim();\n}\n\n/**\n * Two-letter avatar initials. Falls back to the email's first letter, then to\n * a neutral glyph, so the avatar is never blank for a profile that only has\n * an address.\n */\nexport function initialsOf(\n user: Pick<UserProfile, \"first_name\" | \"last_name\" | \"email\"> | null\n): string {\n const name = fullNameOf(user);\n if (name) {\n return name\n .split(/\\s+/)\n .map((word) => word[0])\n .join(\"\")\n .slice(0, 2)\n .toUpperCase();\n }\n const email = user?.email ?? \"\";\n return email ? email[0]!.toUpperCase() : \"·\";\n}\n","/**\n * Default copy for <singlebase-uploader>. Same shape and contract as the\n * auth bag in messages.ts: a flat set of strings, overridable in whole or in\n * part through the element's `.messages` property.\n *\n * `{n}`, `{max}`, `{name}` and `{size}` are filled in by `fill()`.\n */\nexport interface SinglebaseUploadMessages {\n heading: string;\n description: string;\n\n // dropzone\n dropTitle: string;\n dropSub: string;\n hintUpTo: string;\n\n // controls\n chooseFiles: string;\n chooseFile: string;\n addMore: string;\n remove: string;\n rename: string;\n retry: string;\n uploadCtaOne: string;\n uploadCtaMany: string;\n\n // compact view\n attachments: string;\n dropOrChoose: string;\n\n // status\n checking: string;\n pagesLabel: string;\n countOne: string;\n countMany: string;\n uploading: string;\n uploaded: string;\n failedLabel: string;\n\n // problems\n errTooMany: string;\n errTooLarge: string;\n errTooSmall: string;\n errDuplicate: string;\n errType: string;\n errNoClient: string;\n errUpload: string;\n errProtected: string;\n errTooManyPages: string;\n\n brandingLabel: string;\n}\n\nexport const defaultUploadMessages: SinglebaseUploadMessages = {\n heading: \"Upload files\",\n description: \"Add one or more files. You can review the list before uploading.\",\n\n dropTitle: \"Drag and drop files here\",\n dropSub: \"or browse from your device\",\n hintUpTo: \"up to {size} each\",\n\n chooseFiles: \"Choose files\",\n chooseFile: \"Choose file\",\n addMore: \"+ Add more files\",\n remove: \"Remove\",\n rename: \"Rename\",\n retry: \"Retry\",\n uploadCtaOne: \"Upload {n} file\",\n uploadCtaMany: \"Upload {n} files\",\n\n attachments: \"Attachments\",\n dropOrChoose: \"Drop files or choose\",\n\n checking: \"Checking…\",\n pagesLabel: \"{n} pages\",\n countOne: \"{n} file of {max}\",\n countMany: \"{n} files of {max}\",\n uploading: \"Uploading…\",\n uploaded: \"Uploaded\",\n failedLabel: \"Failed\",\n\n errTooMany: \"You can upload up to {max} files.\",\n errTooLarge: \"{name} is larger than {size}.\",\n errTooSmall: \"{name} is smaller than {size}.\",\n errDuplicate: \"{name} is already in the list.\",\n errType: \"{name} isn't an accepted file type.\",\n errNoClient: \"No Singlebase client found on this page.\",\n errUpload: \"Upload failed.\",\n errProtected: \"{name} is password protected.\",\n errTooManyPages: \"{name} has {pages} pages; the limit is {max}.\",\n\n brandingLabel: \"Files by Singlebase\"\n};\n\nexport function resolveUploadMessages(\n overrides?: Partial<SinglebaseUploadMessages>\n): SinglebaseUploadMessages {\n return overrides ? { ...defaultUploadMessages, ...overrides } : defaultUploadMessages;\n}\n\n/** Fills `{token}` placeholders. Values are plain text and rendered as text. */\nexport function fill(template: string, values: Record<string, string | number>): string {\n return template.replace(/\\{(\\w+)\\}/g, (match, key) =>\n key in values ? String(values[key]) : match\n );\n}\n","/**\n * Small pure helpers for <singlebase-uploader>: parsing and printing\n * sizes, matching an `accept` list, and the identity a duplicate is judged by.\n * Kept out of the element so they can be tested without a DOM.\n */\n\nconst UNITS: Record<string, number> = {\n b: 1,\n kb: 1024,\n mb: 1024 * 1024,\n gb: 1024 * 1024 * 1024\n};\n\n/** \"25MB\" / \"500 kb\" / \"1048576\" → bytes. 0 means \"no limit\". */\nexport function parseSize(value: string | number | null | undefined): number {\n if (typeof value === \"number\") return value > 0 ? value : 0;\n if (!value) return 0;\n const match = String(value)\n .trim()\n .toLowerCase()\n .match(/^([\\d.]+)\\s*(b|kb|mb|gb)?$/);\n if (!match) return 0;\n const amount = Number.parseFloat(match[1]);\n if (!Number.isFinite(amount) || amount <= 0) return 0;\n return Math.round(amount * (UNITS[match[2] ?? \"b\"] ?? 1));\n}\n\nexport function formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${Math.round(bytes / 1024)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n}\n\n/** The extension in lowercase, without the dot. \"\" when there is none. */\nexport function fileExtension(filename: string): string {\n const dot = filename.lastIndexOf(\".\");\n if (dot <= 0 || dot === filename.length - 1) return \"\";\n return filename.slice(dot + 1).toLowerCase();\n}\n\n/** The extension, uppercased and clipped, for the little type chip. */\nexport function extensionOf(filename: string): string {\n return fileExtension(filename).toUpperCase().slice(0, 4);\n}\n\n/**\n * Matches one file against an `accept` list, using the same vocabulary as the\n * attribute on `<input type=\"file\">`: extensions (\".pdf\"), exact MIME types\n * (\"application/pdf\") and wildcards (\"image/*\"). An empty list accepts\n * everything.\n *\n * This is a convenience, not a security control — the browser's own file\n * dialog filter and this check are both trivially bypassed by a drop, so the\n * server remains the authority on what it will store.\n */\nexport function acceptsFile(accept: string, name: string, type: string): boolean {\n const rules = accept\n .split(\",\")\n .map((rule) => rule.trim().toLowerCase())\n .filter(Boolean);\n if (!rules.length) return true;\n\n const lowerName = name.toLowerCase();\n const lowerType = (type || \"\").toLowerCase();\n\n return rules.some((rule) => {\n if (rule.startsWith(\".\")) return lowerName.endsWith(rule);\n if (rule.endsWith(\"/*\")) return lowerType.startsWith(rule.slice(0, -1));\n return lowerType === rule;\n });\n}\n\n/** Human list of accepted kinds for the hint line: \".pdf,image/png\" → \"PDF, PNG\". */\nexport function acceptSummary(accept: string): string {\n const parts = accept\n .split(\",\")\n .map((rule) => rule.trim())\n .filter(Boolean)\n .map((rule) => {\n if (rule.startsWith(\".\")) return rule.slice(1).toUpperCase();\n if (rule.endsWith(\"/*\")) return rule.slice(0, -2).toUpperCase();\n const slash = rule.indexOf(\"/\");\n return (slash >= 0 ? rule.slice(slash + 1) : rule).toUpperCase();\n });\n return [...new Set(parts)].join(\", \");\n}\n\n/**\n * Two picks are the same file when name, size and mtime all match. Content\n * hashing would be exact but means reading every byte before the user has\n * even pressed upload; this is what a file manager uses, and it is enough to\n * stop the common case of dropping the same batch twice.\n */\nexport function fileKey(file: { name: string; size: number; lastModified?: number }): string {\n return `${file.name}:${file.size}:${file.lastModified ?? 0}`;\n}\n\n/** Replaces the base name, keeping the original extension. */\nexport function renameKeepingExtension(original: string, typed: string): string {\n const clean = typed.trim().replace(/[/\\\\]/g, \"\");\n if (!clean) return original;\n const dot = original.lastIndexOf(\".\");\n const extension = dot > 0 ? original.slice(dot) : \"\";\n if (!extension) return clean;\n return clean.toLowerCase().endsWith(extension.toLowerCase()) ? clean : clean + extension;\n}\n","/**\n * Reads a few facts out of a file before it is uploaded: how many pages it\n * has, and whether it is encrypted. Everything here runs in the browser on\n * the bytes the user picked — no upload, no dependency, no worker.\n *\n * Two honest caveats, both of which the documentation repeats:\n *\n * - **This is a convenience, not a security control.** Anyone can bypass it.\n * The server still has to enforce whatever actually matters.\n * - **Facts can be unknown.** A page count is `null` when the structure\n * can't be read, and callers treat unknown as \"rule doesn't apply\" rather\n * than rejecting a file they simply failed to parse.\n */\n\nexport interface FileFacts {\n /** Pages for PDF and DOCX, slides for PPTX. Null when undeterminable. */\n pages: number | null;\n /** True when encrypted, false when plainly not, null when unknown. */\n encrypted: boolean | null;\n}\n\nconst UNKNOWN: FileFacts = { pages: null, encrypted: null };\n\n/** How much of a large PDF to look at, from each end. */\nconst PDF_HEAD = 16 * 1024 * 1024;\nconst PDF_TAIL = 2 * 1024 * 1024;\n\n/** Ceilings for the compressed-PDF fallback, so a hostile file can't stall the tab. */\nconst MAX_STREAMS = 40;\nconst MAX_INFLATED = 4 * 1024 * 1024;\n\nconst OOXML = new Set([\"docx\", \"pptx\", \"xlsx\"]);\n\n/** Inspects one file. Never throws — an unreadable file is simply unknown. */\nexport async function inspectFile(file: Blob, extension: string): Promise<FileFacts> {\n try {\n if (extension === \"pdf\") return await inspectPdf(file);\n if (OOXML.has(extension)) return await inspectOoxml(file, extension);\n } catch {\n // A corrupt or surprising file is not a rejection reason on its own.\n }\n return UNKNOWN;\n}\n\n/** True when this extension has anything worth reading bytes for. */\nexport function isInspectable(extension: string): boolean {\n return extension === \"pdf\" || OOXML.has(extension);\n}\n\n// ── PDF ──────────────────────────────────────────────────────\n\nasync function inspectPdf(file: Blob): Promise<FileFacts> {\n const head = await bytesOf(file.slice(0, PDF_HEAD));\n const tail =\n file.size > PDF_HEAD ? await bytesOf(file.slice(Math.max(0, file.size - PDF_TAIL))) : null;\n\n const text = latin1(head) + (tail ? latin1(tail) : \"\");\n\n // An encrypted PDF names /Encrypt in its trailer. The whole file is still\n // readable — it is the content streams that are encrypted — so this is a\n // reliable marker rather than a guess.\n const encrypted = /\\/Encrypt[\\s/<>\\]]/.test(text);\n\n let pages = pageCountIn(text);\n if (pages === null) pages = await pageCountInStreams(head);\n\n return { pages, encrypted };\n}\n\n/**\n * The page tree's root node carries `/Count` with the document total, so the\n * largest `/Count` next to a `/Pages` node is the answer. Files that write\n * the tree without counts fall back to counting `/Type /Page` objects.\n */\nfunction pageCountIn(text: string): number | null {\n if (/\\/Type\\s*\\/Pages/.test(text)) {\n let max = 0;\n for (const match of text.matchAll(/\\/Count\\s+(\\d+)/g)) {\n max = Math.max(max, Number(match[1]));\n }\n if (max > 0) return max;\n }\n const direct = text.match(/\\/Type\\s*\\/Page[^s]/g);\n return direct?.length ? direct.length : null;\n}\n\n/**\n * PDF 1.5 and later may pack the page tree into compressed object streams,\n * where a plain scan sees nothing. Inflating the streams and scanning the\n * result recovers the count, using only DecompressionStream.\n */\nasync function pageCountInStreams(bytes: Uint8Array): Promise<number | null> {\n if (typeof DecompressionStream === \"undefined\") return null;\n\n const text = latin1(bytes);\n let inflated = \"\";\n let streams = 0;\n\n for (const match of text.matchAll(/stream\\r?\\n/g)) {\n if (streams >= MAX_STREAMS || inflated.length >= MAX_INFLATED) break;\n const start = match.index! + match[0].length;\n let end = text.indexOf(\"endstream\", start);\n if (end < 0) break;\n // Writers put an EOL between the data and the keyword. It has to come off:\n // the decompressor rejects anything trailing the compressed data.\n while (end > start && (text[end - 1] === \"\\n\" || text[end - 1] === \"\\r\")) end -= 1;\n streams += 1;\n try {\n const out = await inflate(bytes.subarray(start, end), \"deflate\");\n inflated += latin1(out);\n } catch {\n // Not a zlib stream (an image, or a different filter). Skip it.\n }\n }\n\n return inflated ? pageCountIn(inflated) : null;\n}\n\n// ── OOXML (docx / pptx / xlsx) ───────────────────────────────\n\nasync function inspectOoxml(file: Blob, extension: string): Promise<FileFacts> {\n const magic = await bytesOf(file.slice(0, 8));\n\n // A password-protected Office file is not a zip at all: Office encrypts the\n // package and wraps it in an OLE compound file. The magic bytes say so\n // outright, which makes this the one exact check in this module.\n if (isCompoundFile(magic)) return { pages: null, encrypted: true };\n if (magic[0] !== 0x50 || magic[1] !== 0x4b) return UNKNOWN;\n\n const app = await readZipEntry(file, \"docProps/app.xml\");\n if (!app) return { pages: null, encrypted: false };\n\n // Word records Pages, PowerPoint records Slides. Excel records neither.\n const tag = extension === \"pptx\" ? \"Slides\" : \"Pages\";\n const match = new TextDecoder().decode(app).match(new RegExp(`<${tag}>(\\\\d+)</${tag}>`));\n return { pages: match ? Number(match[1]) : null, encrypted: false };\n}\n\nfunction isCompoundFile(magic: Uint8Array): boolean {\n const SIGNATURE = [0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1];\n return SIGNATURE.every((byte, i) => magic[i] === byte);\n}\n\n/**\n * Pulls one entry out of a zip by walking the central directory. Enough of\n * the format to find a small known file, and no more: zip64 archives return\n * null, which reads as \"unknown\" upstream.\n */\nasync function readZipEntry(file: Blob, wanted: string): Promise<Uint8Array | null> {\n const tailSize = Math.min(file.size, 66_000);\n const tail = new DataView(await file.slice(file.size - tailSize).arrayBuffer());\n\n let eocd = -1;\n for (let i = tail.byteLength - 22; i >= 0; i--) {\n if (tail.getUint32(i, true) === 0x06054b50) {\n eocd = i;\n break;\n }\n }\n if (eocd < 0) return null;\n\n const size = tail.getUint32(eocd + 12, true);\n const offset = tail.getUint32(eocd + 16, true);\n if (!size || offset === 0xffffffff) return null;\n\n const cd = new DataView(await file.slice(offset, offset + size).arrayBuffer());\n const decoder = new TextDecoder();\n let p = 0;\n\n while (p + 46 <= cd.byteLength && cd.getUint32(p, true) === 0x02014b50) {\n const method = cd.getUint16(p + 10, true);\n const compressed = cd.getUint32(p + 20, true);\n const nameLength = cd.getUint16(p + 28, true);\n const extraLength = cd.getUint16(p + 30, true);\n const commentLength = cd.getUint16(p + 32, true);\n const localOffset = cd.getUint32(p + 42, true);\n const name = decoder.decode(new Uint8Array(cd.buffer, cd.byteOffset + p + 46, nameLength));\n\n if (name === wanted) {\n // The central directory's name/extra lengths may differ from the local\n // header's, so the data offset has to come from the local header.\n const local = new DataView(await file.slice(localOffset, localOffset + 30).arrayBuffer());\n const start = localOffset + 30 + local.getUint16(26, true) + local.getUint16(28, true);\n const data = await bytesOf(file.slice(start, start + compressed));\n if (method === 0) return data;\n if (method === 8 && typeof DecompressionStream !== \"undefined\") {\n return await inflate(data, \"deflate-raw\");\n }\n return null;\n }\n\n p += 46 + nameLength + extraLength + commentLength;\n }\n return null;\n}\n\n// ── plumbing ─────────────────────────────────────────────────\n\nasync function bytesOf(blob: Blob): Promise<Uint8Array> {\n return new Uint8Array(await blob.arrayBuffer());\n}\n\nasync function inflate(data: Uint8Array, format: \"deflate\" | \"deflate-raw\"): Promise<Uint8Array> {\n const stream = new Blob([data as BlobPart]).stream().pipeThrough(new DecompressionStream(format));\n return new Uint8Array(await new Response(stream).arrayBuffer());\n}\n\n/** Bytes as one char each, so PDF structure can be matched with a regex. */\nfunction latin1(bytes: Uint8Array): string {\n let out = \"\";\n const CHUNK = 32_768;\n for (let i = 0; i < bytes.length; i += CHUNK) {\n out += String.fromCharCode(...bytes.subarray(i, i + CHUNK));\n }\n return out;\n}\n","import { LitElement, css, html, nothing } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { getDefaultClient } from \"@singlebase/core\";\nimport type {\n FileUploadInput,\n FilesUploadApi,\n SinglebaseClientInstance,\n UploadProgress\n} from \"@singlebase/singlebase-sdk\";\n\n/** What the uploader needs from a client: `files.upload`, and nothing else. */\nexport type UploaderClient = { files: Pick<FilesUploadApi, \"upload\"> };\nimport { tokenDefaults } from \"../styles/tokens.js\";\nimport { sharedStyles } from \"../styles/shared.js\";\nimport { fill, resolveUploadMessages, type SinglebaseUploadMessages } from \"../upload-messages.js\";\nimport { resolveRedirectTarget } from \"../utils/redirect.js\";\nimport {\n acceptSummary,\n acceptsFile,\n extensionOf,\n fileExtension,\n fileKey,\n formatSize,\n parseSize,\n renameKeepingExtension\n} from \"../utils/files.js\";\nimport { inspectFile, isInspectable } from \"../utils/inspect.js\";\n\n/** JSON in markup, an object in JavaScript. Bad JSON is ignored, not thrown. */\nconst jsonAttr = {\n fromAttribute: (value: string | null) => {\n if (!value) return {};\n try {\n const parsed = JSON.parse(value);\n return parsed && typeof parsed === \"object\" ? parsed : {};\n } catch {\n console.warn(\"[singlebase-uploader] an attribute holds invalid JSON; ignoring it\");\n return {};\n }\n },\n toAttribute: (value: unknown) => JSON.stringify(value ?? {})\n};\n\n/** Present-but-empty means true, so `dropzone` and `dropzone=\"false\"` both read. */\nconst flagAttr = {\n fromAttribute: (value: string | null) => (value === null ? true : value !== \"false\"),\n toAttribute: (value: boolean) => (value ? null : \"false\")\n};\n\nexport type UploadView = \"full\" | \"compact\" | \"button\";\nexport type UploadItemStatus = \"checking\" | \"ready\" | \"uploading\" | \"done\" | \"error\";\n\n/**\n * Per-format limits, keyed by extension: `{ pdf: { maxPages: 10 } }`.\n *\n * `maxPages` and `allowProtected` need the file's bytes read, which only\n * works for `pdf`, `docx`, `pptx` and `xlsx`; the size bounds apply to any\n * extension and override the element-wide ones for that kind.\n */\nexport interface FileRule {\n maxPages?: number;\n maxSize?: string | number;\n minSize?: string | number;\n /** Set false to refuse password-protected files. Default: allowed. */\n allowProtected?: boolean;\n}\n\nexport type FileRules = Record<string, FileRule>;\n\nexport interface UploadItem {\n /** Identity for de-duplication: name, size and mtime. */\n key: string;\n file: File;\n /** The saved name, which the user may have edited. */\n name: string;\n status: UploadItemStatus;\n percent: number;\n error: string;\n /** The stored file record, once the upload completes. */\n record: unknown;\n /** Pages (slides for pptx) when they could be read, else null. */\n pages: number | null;\n /** Whether the file is encrypted, when that could be determined. */\n encrypted: boolean | null;\n /** A local object URL for image thumbnails; \"\" for everything else. */\n preview: string;\n}\n\n/**\n * Every setting in one object, for configuring an element from script. Keys\n * are the element's property names.\n */\nexport interface UploaderConfig {\n view: UploadView;\n dropzone: boolean;\n allowRename: boolean;\n autoUpload: boolean;\n branding: boolean;\n logoUrl: string;\n logoText: string;\n heading: string;\n description: string;\n maxFiles: number;\n maxSize: string | number;\n minSize: string | number;\n accept: string;\n rules: FileRules;\n bucket: string;\n publicRead: boolean;\n redirectUrl: string;\n metadata: Record<string, unknown>;\n options: Record<string, unknown>;\n messages: Partial<SinglebaseUploadMessages>;\n theme: \"light\" | \"dark\";\n density: \"comfortable\" | \"compact\";\n onComplete: SinglebaseUploader[\"onComplete\"];\n onError: SinglebaseUploader[\"onError\"];\n}\n\nconst CONFIG_KEYS: readonly (keyof UploaderConfig)[] = [\n \"view\",\n \"dropzone\",\n \"allowRename\",\n \"autoUpload\",\n \"branding\",\n \"logoUrl\",\n \"logoText\",\n \"heading\",\n \"description\",\n \"maxFiles\",\n \"maxSize\",\n \"minSize\",\n \"accept\",\n \"rules\",\n \"bucket\",\n \"publicRead\",\n \"redirectUrl\",\n \"metadata\",\n \"options\",\n \"messages\",\n \"theme\",\n \"density\",\n \"onComplete\",\n \"onError\"\n];\n\n/**\n * A file picker that uploads straight to storage.\n *\n * <singlebase-uploader></singlebase-uploader>\n * <singlebase-uploader view=\"compact\" accept=\".pdf,image/*\"></singlebase-uploader>\n * <singlebase-uploader view=\"button\" max-files=\"1\"></singlebase-uploader>\n *\n * It owns the staging list — picking, renaming, removing, validating, and the\n * progress of each file — and nothing else. When the batch finishes it emits\n * the stored records and stops; what the application does with them (attach\n * them to a record, show a gallery, save an avatar) is the application's\n * decision, not the widget's.\n *\n * Failures are per file. One rejected upload leaves the rest completed and\n * offers that row a retry, mirroring the SDK's own behaviour.\n */\n@customElement(\"singlebase-uploader\")\nexport class SinglebaseUploader extends LitElement {\n static styles = [\n tokenDefaults,\n sharedStyles,\n css`\n .card {\n display: flex;\n flex-direction: column;\n gap: 14px;\n box-sizing: border-box;\n padding: var(--sb-pad, 20px);\n background: var(--sb-surface, #ffffff);\n color: var(--sb-ink, #16181a);\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: calc(var(--sb-radius, 4px) + 4px);\n }\n\n .logo-img {\n display: block;\n align-self: flex-start;\n height: var(--sb-logo-height, 20px);\n width: auto;\n max-width: 100%;\n }\n\n .brand-mark {\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 13px;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--sb-ink, #16181a);\n }\n\n .head-block {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .count {\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 11.5px;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--sb-muted-ink, #61666c);\n }\n\n /* ── dropzone ─────────────────────────────────────── */\n .drop {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n padding: 30px 20px;\n text-align: center;\n border: 1px dashed var(--sb-border-strong, #cdd1d6);\n border-radius: calc(var(--sb-radius, 4px) + 2px);\n background: var(--sb-surface, #ffffff);\n transition:\n border-color 0.15s,\n background 0.15s;\n }\n\n .drop[data-drag=\"true\"] {\n border-color: var(--sb-accent, #111111);\n background: var(--sb-surface-alt, #fafafa);\n }\n\n .arrow {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 42px;\n height: 42px;\n margin-bottom: 4px;\n font-size: 18px;\n line-height: 1;\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: 50%;\n color: var(--sb-ink, #16181a);\n }\n\n .drop-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--sb-ink, #16181a);\n }\n\n /* the compact single-line dropzone */\n .strip {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 10px 12px;\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: calc(var(--sb-radius, 4px) + 2px);\n background: var(--sb-surface-alt, #fafafa);\n transition:\n border-color 0.15s,\n background 0.15s;\n }\n\n .strip[data-drag=\"true\"] {\n border-color: var(--sb-accent, #111111);\n }\n\n .strip-label {\n font-size: 14px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n /* ── file rows ────────────────────────────────────── */\n .rows {\n display: flex;\n flex-direction: column;\n }\n\n .row {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 0;\n border-top: 1px solid var(--sb-border, #e4e6e9);\n }\n\n .rows .row:first-child {\n border-top: none;\n }\n\n .chip {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n width: 46px;\n height: 46px;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 10.5px;\n letter-spacing: 0.04em;\n color: var(--sb-muted-ink, #61666c);\n background: var(--sb-surface-alt, #fafafa);\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: var(--sb-radius, 4px);\n overflow: hidden;\n }\n\n .thumb {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n .meta {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .name {\n font-size: 14px;\n font-weight: 500;\n color: var(--sb-ink, #16181a);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n button.name {\n align-self: flex-start;\n max-width: 100%;\n padding: 0;\n border: none;\n background: none;\n text-align: left;\n border-radius: 0;\n }\n\n button.name:hover {\n text-decoration: underline;\n text-underline-offset: 3px;\n }\n\n .name-input {\n font-size: 14px;\n padding: 6px 8px;\n }\n\n .sz {\n font-size: 12px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .sz[data-state=\"error\"] {\n color: var(--sb-danger, #b4231a);\n }\n\n .sz[data-state=\"done\"] {\n color: var(--sb-ok, #0f6b4a);\n }\n\n .bar {\n height: 3px;\n margin-top: 2px;\n border-radius: 999px;\n background: var(--sb-border, #e4e6e9);\n overflow: hidden;\n }\n\n .bar-fill {\n height: 100%;\n background: var(--sb-accent, #111111);\n transition: width 0.2s linear;\n }\n\n .row-act {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n /* ── the dashed \"add more\" affordance ─────────────── */\n button.add-more {\n width: 100%;\n padding: 14px;\n color: var(--sb-ink, #16181a);\n background: none;\n border: 1px dashed var(--sb-border-strong, #cdd1d6);\n border-radius: calc(var(--sb-radius, 4px) + 2px);\n }\n\n button.add-more:hover:not(:disabled) {\n background: var(--sb-surface-alt, #fafafa);\n }\n\n button.wide {\n width: 100%;\n padding: 13px;\n font-size: 14px;\n }\n\n .branding {\n text-align: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 10.5px;\n letter-spacing: 0.06em;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .branding a {\n color: inherit;\n text-decoration: none;\n }\n\n .branding a:hover {\n color: var(--sb-ink, #16181a);\n text-decoration: underline;\n text-underline-offset: 3px;\n }\n\n /* the button view is just a control, not a card */\n :host([view=\"button\"]) {\n display: inline-block;\n }\n\n .button-view {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n `\n ];\n\n // ── wiring ────────────────────────────────────────────────\n /** An explicit client. Omit it and the page's SinglebaseClient() is used. */\n @property({ attribute: false })\n accessor client: UploaderClient | null = null;\n\n @property({ attribute: false })\n accessor messages: Partial<SinglebaseUploadMessages> = {};\n\n @property({ reflect: true })\n accessor theme: \"light\" | \"dark\" | undefined = undefined;\n\n @property({ reflect: true })\n accessor density: \"comfortable\" | \"compact\" | undefined = undefined;\n\n // ── shape ─────────────────────────────────────────────────\n /**\n * `full` is the card with a dropzone and a reviewable list, `compact` the\n * one-line attachments row, `button` a single control that uploads as soon\n * as a file is chosen.\n */\n @property({ reflect: true })\n accessor view: UploadView = \"full\";\n\n /** Show the drop target. Off leaves the picker button on its own. */\n @property({ converter: flagAttr })\n accessor dropzone = true;\n\n /** Let the user edit the saved filename before uploading. */\n @property({ converter: flagAttr, attribute: \"allow-rename\" })\n accessor allowRename = true;\n\n /** Upload as soon as files are picked, with no review step. */\n @property({ type: Boolean, attribute: \"auto-upload\" })\n accessor autoUpload = false;\n\n /** The \"Files by Singlebase\" credit. A plain link — it makes no request. */\n @property({ converter: flagAttr })\n accessor branding = true;\n\n @property({ attribute: \"logo-url\" }) accessor logoUrl = \"\";\n @property({ attribute: \"logo-text\" }) accessor logoText = \"\";\n @property() accessor heading = \"\";\n @property() accessor description = \"\";\n\n // ── limits ────────────────────────────────────────────────\n @property({ type: Number, attribute: \"max-files\" }) accessor maxFiles = 10;\n\n /** Bytes, or a human size like \"25MB\". 0 or \"\" means no limit. */\n @property({ attribute: \"max-size\" }) accessor maxSize: string | number = \"25MB\";\n @property({ attribute: \"min-size\" }) accessor minSize: string | number = 0;\n\n /** Same vocabulary as `<input type=\"file\" accept>`. */\n @property() accessor accept = \"\";\n\n /**\n * Per-format limits, as JSON in markup or an object in JavaScript:\n *\n * rules='{\"pdf\":{\"maxPages\":10,\"allowProtected\":false}}'\n *\n * Checking pages and encryption means reading the file in the browser, so\n * it is a convenience for the person picking files — never a substitute\n * for the server enforcing the same limits.\n */\n @property({ converter: jsonAttr })\n accessor rules: FileRules = {};\n\n // ── destination ───────────────────────────────────────────\n @property() accessor bucket = \"default\";\n\n /** Metadata attached to every file this element uploads. */\n @property({ converter: jsonAttr })\n accessor metadata: Record<string, unknown> = {};\n\n /**\n * `options` sent with every file's upload request — for instance\n * `{ profile_photo: true }`, which makes the upload the account's photo.\n */\n @property({ converter: jsonAttr })\n accessor options: Record<string, unknown> = {};\n @property({ type: Boolean, attribute: \"public-read\" }) accessor publicRead = false;\n\n /** Where to go once every file has uploaded. Same-origin only. */\n @property({ attribute: \"redirect-url\" }) accessor redirectUrl = \"\";\n\n /** Callback forms of the two events, for frameworks that prefer props. */\n @property({ attribute: false })\n accessor onComplete:\n ((detail: { completed: UploadItem[]; failed: UploadItem[] }) => void) | null = null;\n\n @property({ attribute: false })\n accessor onError: ((detail: { message: string }) => void) | null = null;\n\n // ── state ─────────────────────────────────────────────────\n @state() private accessor items: UploadItem[] = [];\n @state() private accessor notice = \"\";\n @state() private accessor busy = false;\n @state() private accessor dragging = false;\n @state() private accessor editing = \"\";\n\n get msg(): SinglebaseUploadMessages {\n return resolveUploadMessages(this.messages);\n }\n\n /** An explicit `.client`, else the page default. */\n get resolvedClient(): UploaderClient | null {\n return this.client ?? getDefaultClient<SinglebaseClientInstance>() ?? null;\n }\n\n /** The staging list, for host code that wants to inspect or persist it. */\n get files(): readonly UploadItem[] {\n return this.items;\n }\n\n /** Overall progress across the current batch, 0–100. */\n get percent(): number {\n const active = this.items.filter((item) => item.status !== \"ready\");\n if (!active.length) return 0;\n return Math.round(active.reduce((sum, item) => sum + item.percent, 0) / active.length);\n }\n\n // ── public API ────────────────────────────────────────────\n /** Opens the file picker. */\n open(): void {\n this.renderRoot.querySelector<HTMLInputElement>(\"input[type=file]\")?.click();\n }\n\n /**\n * Applies several settings at once:\n *\n * document.getElementById(\"docs\").config = { maxFiles: 5, metadata: { folder: \"q3\" } };\n *\n * Unknown keys are ignored. Reading it returns the current settings.\n */\n set config(value: Partial<UploaderConfig>) {\n const target = this as unknown as Record<string, unknown>;\n for (const key of CONFIG_KEYS) {\n if (value && key in value) target[key] = value[key];\n }\n }\n\n get config(): Partial<UploaderConfig> {\n const source = this as unknown as Record<string, unknown>;\n return Object.fromEntries(CONFIG_KEYS.map((key) => [key, source[key]]));\n }\n\n /** Drops every staged file and any notice. */\n clear(): void {\n this.items.forEach(releasePreview);\n this.items = [];\n this.notice = \"\";\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.items.forEach(releasePreview);\n }\n\n /** Uploads everything staged. Rows that already succeeded are left alone. */\n async upload(): Promise<void> {\n if (this.busy) return;\n const pending = this.items.filter((item) => item.status === \"ready\" || item.status === \"error\");\n if (!pending.length) return;\n\n const client = this.resolvedClient;\n if (!client) {\n this.fail(this.msg.errNoClient);\n return;\n }\n\n this.busy = true;\n this.notice = \"\";\n for (const item of pending) {\n item.status = \"uploading\";\n item.percent = 0;\n item.error = \"\";\n }\n this.items = [...this.items];\n\n // The SDK hands each progress and result entry back the very input object\n // it was given, so identity is all that is needed to find the row again.\n const rowOf = new Map<FileUploadInput, UploadItem>();\n const inputs = pending.map((item) => {\n const input: FileUploadInput = { file: item.file, filename: item.file.name };\n if (this.bucket) input.bucket = this.bucket;\n if (this.publicRead) input.publicRead = true;\n if (item.name !== item.file.name) input.newName = item.name;\n if (Object.keys(this.metadata ?? {}).length) input.metadata = { ...this.metadata };\n if (Object.keys(this.options ?? {}).length) input.options = { ...this.options };\n rowOf.set(input, item);\n return input;\n });\n\n try {\n const result = await client.files.upload(inputs, {\n onProgress: (progress: UploadProgress) => {\n const row = rowOf.get(progress.input);\n if (!row) return;\n row.percent = progress.percent;\n this.items = [...this.items];\n this.emit(\"singlebase-upload-progress\", { file: row, percent: this.percent });\n }\n });\n\n for (const entry of result.completed) {\n const row = rowOf.get(entry.input);\n if (!row) continue;\n row.status = \"done\";\n row.percent = 100;\n row.record = entry.file;\n }\n for (const entry of result.failed) {\n const row = rowOf.get(entry.input);\n if (!row) continue;\n row.status = \"error\";\n row.error = entry.error.message || entry.error.code;\n }\n this.items = [...this.items];\n\n const completed = result.completed\n .map((entry) => rowOf.get(entry.input))\n .filter(Boolean) as UploadItem[];\n const failed = result.failed\n .map((entry) => rowOf.get(entry.input))\n .filter(Boolean) as UploadItem[];\n\n this.emit(\"singlebase-upload-complete\", { completed, failed });\n this.onComplete?.({ completed, failed });\n\n if (failed.length) {\n this.notice = this.msg.errUpload;\n } else {\n this.redirect();\n }\n } catch (error) {\n // Initiation failed for the whole batch — nothing reached storage.\n for (const item of pending) {\n item.status = \"error\";\n item.error = \"\";\n }\n this.items = [...this.items];\n this.fail(errorMessage(error) || this.msg.errUpload);\n } finally {\n this.busy = false;\n }\n }\n\n // ── staging ───────────────────────────────────────────────\n /** The rule for this filename's extension, if the host set one. */\n private ruleFor(filename: string): FileRule | null {\n const extension = fileExtension(filename);\n if (!extension) return null;\n for (const [key, rule] of Object.entries(this.rules ?? {})) {\n if (key.toLowerCase().replace(/^\\./, \"\") === extension) return rule;\n }\n return null;\n }\n\n private async add(list: ArrayLike<File>): Promise<void> {\n // The button view is a one-shot control: a new pick replaces whatever\n // finished last time, so a max-files=\"1\" button can be used again.\n if (this.view === \"button\") {\n const finished = this.items.filter((i) => i.status === \"done\" || i.status === \"error\");\n finished.forEach(releasePreview);\n this.items = this.items.filter((i) => !finished.includes(i));\n }\n const limit = this.maxFiles > 0 ? this.maxFiles : Number.POSITIVE_INFINITY;\n const next = [...this.items];\n const before = next.length;\n const staged: UploadItem[] = [];\n let problem = \"\";\n\n for (const file of Array.from(list)) {\n if (next.length >= limit) {\n problem = fill(this.msg.errTooMany, { max: limit });\n break;\n }\n if (this.accept && !acceptsFile(this.accept, file.name, file.type)) {\n problem = fill(this.msg.errType, { name: file.name });\n continue;\n }\n\n // A rule's own size bounds win over the element-wide ones for its kind.\n const rule = this.ruleFor(file.name);\n const maxBytes = parseSize(rule?.maxSize ?? this.maxSize);\n const minBytes = parseSize(rule?.minSize ?? this.minSize);\n if (maxBytes && file.size > maxBytes) {\n problem = fill(this.msg.errTooLarge, { name: file.name, size: formatSize(maxBytes) });\n continue;\n }\n if (minBytes && file.size < minBytes) {\n problem = fill(this.msg.errTooSmall, { name: file.name, size: formatSize(minBytes) });\n continue;\n }\n const key = fileKey(file);\n if (next.some((item) => item.key === key)) {\n problem = fill(this.msg.errDuplicate, { name: file.name });\n continue;\n }\n\n const item: UploadItem = {\n key,\n file,\n name: file.name,\n // Reading bytes takes a moment, so the row appears immediately as\n // \"checking\" rather than the widget freezing on a picked file.\n status: this.needsInspection(rule, file.name) ? \"checking\" : \"ready\",\n percent: 0,\n error: \"\",\n record: null,\n pages: null,\n encrypted: null,\n preview: previewFor(file)\n };\n next.push(item);\n staged.push(item);\n }\n\n this.notice = problem;\n if (problem) this.emit(\"singlebase-upload-rejected\", { message: problem });\n if (next.length === before) return;\n\n this.items = next;\n this.emit(\"singlebase-upload-selected\", { files: this.items });\n\n await Promise.all(\n staged\n .filter((item) => item.status === \"checking\")\n .map((item) => this.inspect(item, this.ruleFor(item.file.name)!))\n );\n\n if (this.autoUpload || this.view === \"button\") void this.upload();\n }\n\n private needsInspection(rule: FileRule | null, filename: string): boolean {\n if (!rule) return false;\n if (!isInspectable(fileExtension(filename))) return false;\n return rule.maxPages !== undefined || rule.allowProtected === false;\n }\n\n /**\n * Reads the file and applies the rule. A fact the reader could not\n * determine is not grounds for rejection — an unreadable page count means\n * the page rule simply doesn't apply to that file.\n */\n private async inspect(item: UploadItem, rule: FileRule): Promise<void> {\n const facts = await inspectFile(item.file, fileExtension(item.file.name));\n item.pages = facts.pages;\n item.encrypted = facts.encrypted;\n\n let problem = \"\";\n if (rule.allowProtected === false && facts.encrypted === true) {\n problem = fill(this.msg.errProtected, { name: item.name });\n } else if (rule.maxPages && facts.pages !== null && facts.pages > rule.maxPages) {\n problem = fill(this.msg.errTooManyPages, {\n name: item.name,\n pages: facts.pages,\n max: rule.maxPages\n });\n }\n\n if (problem) {\n releasePreview(item);\n this.items = this.items.filter((staged) => staged !== item);\n this.notice = problem;\n this.emit(\"singlebase-upload-rejected\", { message: problem });\n } else {\n item.status = \"ready\";\n this.items = [...this.items];\n }\n }\n\n /** Drops one staged file. Named for the row action, not Element.remove(). */\n private removeItem(key: string): void {\n this.items.filter((item) => item.key === key).forEach(releasePreview);\n this.items = this.items.filter((item) => item.key !== key);\n this.notice = \"\";\n }\n\n private commitRename(item: UploadItem, typed: string): void {\n item.name = renameKeepingExtension(item.file.name, typed);\n this.editing = \"\";\n this.items = [...this.items];\n }\n\n private fail(message: string): void {\n this.notice = message;\n this.emit(\"singlebase-upload-error\", { message });\n this.onError?.({ message });\n }\n\n private emit(name: string, detail: unknown): void {\n this.dispatchEvent(new CustomEvent(name, { detail, bubbles: true, composed: true }));\n }\n\n private redirect(): void {\n if (!this.redirectUrl || typeof location === \"undefined\") return;\n const target = resolveRedirectTarget(this.redirectUrl, location.href, (reason) =>\n console.warn(`[singlebase-uploader] ${reason}`)\n );\n if (target) location.assign(target);\n }\n\n // ── events ────────────────────────────────────────────────\n private onPick(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files?.length) this.add(input.files);\n // Reset, or picking the same file twice in a row fires no change event.\n input.value = \"\";\n }\n\n private onDrop(event: DragEvent): void {\n event.preventDefault();\n this.dragging = false;\n const dropped = event.dataTransfer?.files;\n if (dropped?.length) this.add(dropped);\n }\n\n private onDragOver(event: DragEvent): void {\n event.preventDefault();\n this.dragging = true;\n }\n\n private onDragLeave(): void {\n this.dragging = false;\n }\n\n // ── rendering ─────────────────────────────────────────────\n private get canAddMore(): boolean {\n return this.maxFiles <= 0 || this.items.length < this.maxFiles;\n }\n\n /** True while any staged file is still being read. */\n private get checking(): boolean {\n return this.items.some((item) => item.status === \"checking\");\n }\n\n private get pendingCount(): number {\n return this.items.filter((item) => item.status === \"ready\" || item.status === \"error\").length;\n }\n\n private get hint(): string {\n const kinds = acceptSummary(this.accept);\n const maxBytes = parseSize(this.maxSize);\n const size = maxBytes ? fill(this.msg.hintUpTo, { size: formatSize(maxBytes) }) : \"\";\n return [kinds, size].filter(Boolean).join(\" · \");\n }\n\n private renderInput() {\n return html`<input\n class=\"sr-only\"\n type=\"file\"\n ?multiple=${this.maxFiles !== 1}\n accept=${this.accept || nothing}\n @change=${this.onPick}\n />`;\n }\n\n private renderLogo() {\n if (this.logoUrl) {\n return html`<img\n class=\"logo-img\"\n src=${this.logoUrl}\n alt=${this.logoText || \"Logo\"}\n part=\"logo\"\n />`;\n }\n if (this.logoText) return html`<div class=\"brand-mark\" part=\"logo\">${this.logoText}</div>`;\n return nothing;\n }\n\n private renderBranding() {\n if (!this.branding) return nothing;\n return html`<div class=\"branding\" part=\"branding\">\n <a href=\"https://singlebase.cloud\" target=\"_blank\" rel=\"noopener noreferrer\"\n >${this.msg.brandingLabel}</a\n >\n </div>`;\n }\n\n private renderNotice() {\n if (!this.notice) return nothing;\n return html`<div class=\"banner\" role=\"alert\" part=\"error\">${this.notice}</div>`;\n }\n\n private renderCount() {\n if (!this.items.length) return nothing;\n const template = this.items.length === 1 ? this.msg.countOne : this.msg.countMany;\n return html`<div class=\"count\" part=\"count\">\n ${fill(template, { n: this.items.length, max: this.maxFiles })}\n </div>`;\n }\n\n private renderStatus(item: UploadItem): string {\n const size = formatSize(item.file.size);\n if (item.status === \"checking\") return `${size} · ${this.msg.checking}`;\n if (item.status === \"uploading\") return `${size} · ${this.msg.uploading}`;\n if (item.status === \"done\") return `${size} · ${this.msg.uploaded}`;\n if (item.status === \"error\") {\n return `${size} · ${item.error || this.msg.failedLabel}`;\n }\n // A page count is only shown once it has actually been read.\n const pages = item.pages ? ` · ${fill(this.msg.pagesLabel, { n: item.pages })}` : \"\";\n return size + pages;\n }\n\n private renderRow(item: UploadItem) {\n const editable = this.allowRename && item.status === \"ready\";\n const busyRow = item.status === \"uploading\" || item.status === \"done\";\n return html`<div class=\"row\" part=\"file\">\n <div class=\"chip\" part=\"file-type\">\n ${\n item.preview\n ? html`<img class=\"thumb\" src=${item.preview} alt=\"\" part=\"preview\" />`\n : extensionOf(item.name) || \"FILE\"\n }\n </div>\n <div class=\"meta\">\n ${\n this.editing === item.key\n ? html`<input\n class=\"name-input\"\n .value=${item.name}\n autofocus\n @keydown=${(event: KeyboardEvent) => {\n if (event.key === \"Enter\") {\n this.commitRename(item, (event.target as HTMLInputElement).value);\n } else if (event.key === \"Escape\") {\n this.editing = \"\";\n }\n }}\n @blur=${(event: FocusEvent) =>\n this.commitRename(item, (event.target as HTMLInputElement).value)}\n />`\n : editable\n ? html`<button\n class=\"name\"\n title=${this.msg.rename}\n @click=${() => {\n this.editing = item.key;\n }}\n >\n ${item.name}\n </button>`\n : html`<div class=\"name\">${item.name}</div>`\n }\n <div class=\"sz\" data-state=${item.status}>${this.renderStatus(item)}</div>\n ${\n item.status === \"uploading\"\n ? html`<div class=\"bar\" part=\"progress\">\n <div class=\"bar-fill\" style=\"width:${item.percent}%\"></div>\n </div>`\n : nothing\n }\n </div>\n <div class=\"row-act\">\n ${\n item.status === \"error\"\n ? html`<button class=\"link-sm\" @click=${() => void this.upload()}>\n ${this.msg.retry}\n </button>`\n : nothing\n }\n ${\n item.status === \"uploading\" || item.status === \"done\"\n ? nothing\n : html`<button class=\"link-sm\" @click=${() => this.removeItem(item.key)}>\n ${this.msg.remove}\n </button>`\n }\n </div>\n </div>`;\n }\n\n private renderRows() {\n if (!this.items.length) return nothing;\n return html`<div class=\"rows\" part=\"files\">\n ${this.items.map((item) => this.renderRow(item))}\n </div>`;\n }\n\n private renderDropzone() {\n return html`<div class=\"drop\" part=\"dropzone\" data-drag=${String(this.dragging)}>\n <div class=\"arrow\" aria-hidden=\"true\">↑</div>\n <div class=\"drop-title\">${this.msg.dropTitle}</div>\n <button class=\"link\" @click=${this.open}>${this.msg.dropSub}</button>\n ${this.hint ? html`<div class=\"hint\">${this.hint}</div>` : nothing}\n </div>`;\n }\n\n private renderUploadCta() {\n const n = this.pendingCount;\n // Kept on screen while busy: a primary button that vanishes mid-upload\n // makes the card jump just as the user is watching it.\n if (this.autoUpload || (!n && !this.busy)) return nothing;\n const template = n === 1 ? this.msg.uploadCtaOne : this.msg.uploadCtaMany;\n return html`<button\n class=\"primary wide\"\n part=\"submit\"\n ?disabled=${this.busy || this.checking}\n @click=${() => void this.upload()}\n >\n ${this.busy ? this.msg.uploading : fill(template, { n })}\n </button>`;\n }\n\n /**\n * The whole card is the drop surface. Once files are staged the big zone is\n * replaced by the \"add more\" control, and a drop should still land.\n */\n private renderFull() {\n const showDrop = this.dropzone && !this.items.length && this.canAddMore;\n return html`<div\n class=\"card\"\n part=\"card\"\n @dragover=${this.onDragOver}\n @dragleave=${this.onDragLeave}\n @drop=${this.onDrop}\n >\n ${\n this.logoUrl || this.logoText || this.heading || this.description\n ? html`<div class=\"head-block\">\n ${this.renderLogo()}\n ${this.heading ? html`<div class=\"title\">${this.heading}</div>` : nothing}\n ${this.description ? html`<div class=\"sub\">${this.description}</div>` : nothing}\n </div>`\n : nothing\n }\n ${this.renderCount()} ${this.renderNotice()} ${this.renderRows()}\n ${showDrop ? this.renderDropzone() : nothing}\n ${\n !showDrop && this.canAddMore\n ? html`<button class=\"add-more\" @click=${this.open}>${this.msg.addMore}</button>`\n : nothing\n }\n ${this.renderUploadCta()} ${this.renderBranding()}\n </div>`;\n }\n\n private renderCompact() {\n return html`<div\n class=\"card\"\n part=\"card\"\n @dragover=${this.onDragOver}\n @dragleave=${this.onDragLeave}\n @drop=${this.onDrop}\n >\n <div class=\"between\">\n <span class=\"sec-title\">${this.heading || this.msg.attachments}</span>\n <span class=\"count\">${this.items.length} / ${this.maxFiles}</span>\n </div>\n ${\n this.dropzone\n ? html`<div class=\"strip\" part=\"dropzone\" data-drag=${String(this.dragging)}>\n <span class=\"strip-label\">${this.msg.dropOrChoose}</span>\n <button class=\"secondary\" ?disabled=${!this.canAddMore} @click=${this.open}>\n ${this.msg.chooseFiles}\n </button>\n </div>`\n : html`<button class=\"secondary\" ?disabled=${!this.canAddMore} @click=${this.open}>\n ${this.msg.chooseFiles}\n </button>`\n }\n ${this.hint ? html`<div class=\"hint\">${this.hint}</div>` : nothing} ${this.renderNotice()}\n ${this.renderRows()} ${this.renderUploadCta()} ${this.renderBranding()}\n </div>`;\n }\n\n private renderButton() {\n const active = this.items[this.items.length - 1];\n return html`<div class=\"button-view\">\n <button class=\"primary\" ?disabled=${this.busy || !this.canAddMore} @click=${this.open}>\n ${this.busy ? this.msg.uploading : this.msg.chooseFile}\n </button>\n ${\n active && active.status !== \"ready\"\n ? html`<div class=\"sz\" data-state=${active.status}>${this.renderStatus(active)}</div>`\n : nothing\n }\n ${this.renderNotice()}\n </div>`;\n }\n\n override render() {\n return html`${this.renderInput()}${\n this.view === \"button\"\n ? this.renderButton()\n : this.view === \"compact\"\n ? this.renderCompact()\n : this.renderFull()\n }`;\n }\n}\n\n/**\n * A local thumbnail for images. The object URL points at the bytes already in\n * memory — nothing is uploaded to draw it — and it is revoked when the row\n * goes away so a long session doesn't leak blobs.\n */\nfunction previewFor(file: File): string {\n if (!file.type.startsWith(\"image/\") || typeof URL.createObjectURL !== \"function\") return \"\";\n return URL.createObjectURL(file);\n}\n\nfunction releasePreview(item: UploadItem): void {\n if (item.preview) URL.revokeObjectURL(item.preview);\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : \"\";\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"singlebase-uploader\": SinglebaseUploader;\n }\n}\n","import { html, nothing, type PropertyValues } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { createFilesUploadApi, type AuthSettings } from \"@singlebase/singlebase-sdk\";\nimport { SinglebaseFormBase } from \"./form-base.js\";\nimport { SettingsController } from \"../controllers/settings-controller.js\";\nimport { fullNameOf, initialsOf } from \"../utils/profile.js\";\nimport \"./uploader.js\";\nimport type { SinglebaseUploader } from \"./uploader.js\";\n\n/** Two-factor setup stays hidden until the backend supports enrolment. */\nconst SHOW_TWO_FACTOR = false;\n\n/** Account deletion stays hidden until the backend supports it. */\nconst SHOW_DELETE_ACCOUNT = false;\n\n/** Sent with the photo's upload request: the server makes it the account photo. */\nconst PHOTO_OPTIONS = { profile_photo: true };\nconst PHOTO_ACCEPT = \".jpg,.jpeg,.png,.webp,image/jpeg,image/png,image/webp\";\n\ntype EditMode = \"\" | \"avatar\" | \"profile\" | \"password\" | \"email\";\n\n/**\n * The authenticated account view, laid out exactly as the design mock's\n * isAuthed branch: identity header, profile summary with grouped edit\n * cards, password section, two-factor, connected accounts and danger zone.\n *\n * Two-factor setup and account deletion have no backing operation yet, so\n * they are hidden (SHOW_TWO_FACTOR, SHOW_DELETE_ACCOUNT). Listing and\n * unlinking providers isn't supported either, and says so; connecting\n * a *new* provider is supported, so those tiles are live.\n */\n@customElement(\"singlebase-authui-account\")\nexport class SinglebaseAccountScreen extends SinglebaseFormBase {\n @property({ attribute: \"logo-text\" }) accessor logoText = \"\";\n\n /** A logo image, used instead of `logo-text` when set. */\n @property({ attribute: \"logo-url\" }) accessor logoUrl = \"\";\n @property({ attribute: false }) accessor settings: AuthSettings | null = null;\n @property({ attribute: \"nonce-storage-key\" }) accessor nonceStorageKey = \"singlebase-oauth-nonce\";\n\n @state() private accessor editMode: EditMode = \"\";\n @state() private accessor toast = \"\";\n @state() private accessor photoBusy = false;\n /** A photo URL that failed to load, so the initials show instead of a broken image. */\n @state() private accessor photoFailed = \"\";\n @state() private accessor profileSaved = \"\";\n @state() private accessor passSaved = \"\";\n @state() private accessor profileError = \"\";\n @state() private accessor newPassError = \"\";\n @state() private accessor deleteStage = 0;\n @state() private accessor confirmText = \"\";\n\n // profile draft\n @state() private accessor dFirst = \"\";\n @state() private accessor dLast = \"\";\n @state() private accessor dPhone = \"\";\n @state() private accessor dEmail = \"\";\n\n // password draft\n // email change — a two-step verified flow, never a bare field save\n @state() private accessor emailStep: \"request\" | \"confirm\" = \"request\";\n @state() private accessor dNewEmail = \"\";\n @state() private accessor emailCode = \"\";\n @state() private accessor emailError = \"\";\n @state() private accessor emailSaved = \"\";\n\n @state() private accessor curPass = \"\";\n @state() private accessor newPass = \"\";\n @state() private accessor confirmPass = \"\";\n\n private settingsCtl = new SettingsController(this);\n private flashTimer?: ReturnType<typeof setTimeout>;\n private uidBase = `sb-acct-${Math.random().toString(36).slice(2, 8)}`;\n\n private uid(k: string) {\n return `${this.uidBase}-${k}`;\n }\n\n override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.settingsCtl.load(this.resolvedClient, this.settings);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n clearTimeout(this.flashTimer);\n }\n\n private flash(key: \"profileSaved\" | \"passSaved\" | \"emailSaved\", message: string) {\n this[key] = message;\n clearTimeout(this.flashTimer);\n this.flashTimer = setTimeout(() => {\n this[key] = \"\";\n }, 2600);\n }\n\n /** Matches the guest screens: image when given one, else the text label. */\n private renderLogo() {\n if (this.logoUrl) {\n return html`<img\n part=\"logo\"\n src=${this.logoUrl}\n alt=${this.logoText}\n style=\"display:block;align-self:flex-start;height:var(--sb-logo-height,20px);width:auto;max-width:100%\"\n />`;\n }\n return this.logoText ? html`<div class=\"logo-dot\" part=\"logo\">${this.logoText}</div>` : nothing;\n }\n\n private get user() {\n const state = this.auth.state;\n return state.status === \"authenticated\" ? state.user : null;\n }\n\n private get fullName() {\n return fullNameOf(this.user);\n }\n\n private get initials() {\n return initialsOf(this.user);\n }\n\n // ── profile photo ─────────────────────────────────────────\n private uploadClientFor: unknown = null;\n private uploadClientCache: { files: ReturnType<typeof createFilesUploadApi> } | null = null;\n\n /**\n * The upload API bound to the same dispatcher as this widget's auth client,\n * so the photo goes to the same project with the same bearer — including on\n * a page where this widget was given its own `.client`.\n */\n private get uploadClient() {\n const client = this.resolvedClient;\n if (!client) return null;\n if (this.uploadClientFor !== client) {\n this.uploadClientFor = client;\n this.uploadClientCache = { files: createFilesUploadApi(client.dispatcher) };\n }\n return this.uploadClientCache;\n }\n\n private onChoosePhoto = () => {\n this.formError = \"\";\n this.renderRoot.querySelector<SinglebaseUploader>(\"singlebase-uploader\")?.open();\n };\n\n private onPhotoSelected = () => {\n this.photoBusy = true;\n this.toast = \"\";\n };\n\n /** The server has set the photo; read the account back to get its URL. */\n private onPhotoUploaded = async (event: Event) => {\n const { completed, failed } = (event as CustomEvent).detail;\n try {\n if (completed.length) {\n await this.resolvedClient?.getAccount();\n this.photoFailed = \"\";\n this.toast = this.msg.photoUpdated;\n } else if (failed.length) {\n this.formError = failed[0].error || this.msg.genericErrorMessage;\n }\n } catch (error) {\n this.formError = this.describeError(error);\n } finally {\n this.photoBusy = false;\n }\n };\n\n private onPhotoProblem = (event: Event) => {\n this.photoBusy = false;\n this.formError = (event as CustomEvent).detail.message;\n };\n\n private startProfileEdit() {\n const u = this.user;\n if (!u) return;\n this.dFirst = u.first_name ?? \"\";\n this.dLast = u.last_name ?? \"\";\n this.dPhone = u.phone ?? \"\";\n this.dEmail = u.email;\n this.profileError = \"\";\n this.profileSaved = \"\";\n this.passSaved = \"\";\n this.toast = \"\";\n this.editMode = \"profile\";\n }\n\n private async onSaveProfile() {\n const client = this.resolvedClient;\n if (!client) return;\n if (!this.dFirst.trim() || !this.dLast.trim()) {\n this.profileError = \"First and last name cannot be empty.\";\n return;\n }\n if (this.dPhone.replace(/\\D/g, \"\").length < 7) {\n this.profileError = this.msg.invalidPhoneError;\n return;\n }\n await this.run(async () => {\n await client.updateAccount(\n { first_name: this.dFirst, last_name: this.dLast, phone: this.dPhone },\n this.signal\n );\n this.editMode = \"\";\n this.flash(\"profileSaved\", this.msg.savedNote);\n });\n }\n\n private startPassEdit() {\n this.curPass = \"\";\n this.newPass = \"\";\n this.confirmPass = \"\";\n this.newPassError = \"\";\n this.passSaved = \"\";\n this.profileSaved = \"\";\n this.toast = \"\";\n this.editMode = \"password\";\n }\n\n private async onChangePass() {\n const client = this.resolvedClient;\n if (!client) return;\n if (!this.curPass) {\n this.newPassError = \"Enter your current password.\";\n return;\n }\n if (this.newPass.length < 10) {\n this.newPassError = this.msg.passwordMinError;\n return;\n }\n if (this.newPass !== this.confirmPass) {\n this.newPassError = this.msg.passwordMatchError;\n return;\n }\n await this.run(async () => {\n await client.changePassword({ password: this.newPass }, this.signal);\n this.editMode = \"\";\n this.curPass = \"\";\n this.newPass = \"\";\n this.confirmPass = \"\";\n this.flash(\"passSaved\", this.msg.passwordUpdatedNote);\n });\n }\n\n // ── email change ─────────────────────────────────────────\n private startEmailEdit() {\n this.emailStep = \"request\";\n this.dNewEmail = \"\";\n this.emailCode = \"\";\n this.emailError = \"\";\n this.emailSaved = \"\";\n this.toast = \"\";\n this.editMode = \"email\";\n }\n\n /**\n * Step one: ask for a code. The code goes to the address on file, not to\n * the new one — that is what proves the person asking already controls the\n * account rather than merely knowing an address.\n */\n private async onRequestEmailCode() {\n const client = this.resolvedClient;\n if (!client || !this.user) return;\n if (!this.dNewEmail.includes(\"@\")) {\n this.emailError = this.msg.invalidEmailError;\n return;\n }\n if (this.dNewEmail.toLowerCase() === this.user.email.toLowerCase()) {\n this.emailError = this.msg.emailUnchangedError;\n return;\n }\n await this.run(async () => {\n await client.requestCode({ email: this.user!.email, purpose: \"email_change\" }, this.signal);\n this.emailStep = \"confirm\";\n this.emailError = \"\";\n });\n }\n\n /** Step two: confirm the code together with the new address. */\n private async onConfirmEmailChange() {\n const client = this.resolvedClient;\n if (!client || !this.user) return;\n if (this.emailCode.length < 6) {\n this.emailError = this.msg.codeIncompleteError;\n return;\n }\n await this.run(async () => {\n await client.changeEmail(\n { email: this.user!.email, code: this.emailCode, new_email: this.dNewEmail },\n this.signal\n );\n this.editMode = \"\";\n this.emailCode = \"\";\n this.dNewEmail = \"\";\n this.flash(\"emailSaved\", this.msg.emailUpdatedNote);\n });\n }\n\n private renderEmailSection() {\n const reading = this.editMode !== \"email\";\n const locked = this.editMode !== \"\" && this.editMode !== \"email\";\n\n return html`\n <div class=\"rule\"></div>\n <div class=\"section\">\n <h3 class=\"sec-title\">${this.msg.changeEmailTitle}</h3>\n ${\n reading\n ? html`\n <div class=\"between\">\n <p class=\"hint\">${this.user?.email ?? \"\"}</p>\n <div class=\"btn-row-end\">\n ${\n this.emailSaved\n ? html`<span role=\"status\" class=\"saved-note\">${this.emailSaved}</span>`\n : nothing\n }\n <button\n type=\"button\"\n class=\"edit-link\"\n ?disabled=${locked}\n @click=${this.startEmailEdit}\n >\n ${this.msg.changeEmailCtaShort}\n </button>\n </div>\n </div>\n `\n : this.emailStep === \"request\"\n ? html`\n <div class=\"edit-card\">\n <div class=\"field\">\n <label for=${this.uid(\"newemail\")}>${this.msg.newEmailLabel}</label>\n <input\n id=${this.uid(\"newemail\")}\n type=\"email\"\n part=\"input\"\n .value=${this.dNewEmail}\n placeholder=${this.msg.emailPlaceholder}\n aria-invalid=${this.emailError ? \"true\" : \"false\"}\n ?disabled=${this.submitting}\n @input=${(e: Event) => {\n this.dNewEmail = (e.target as HTMLInputElement).value;\n this.emailError = \"\";\n }}\n />\n <p class=\"hint\">${this.msg.changeEmailHint}</p>\n </div>\n ${this.emailError ? html`<p class=\"err\">${this.emailError}</p>` : nothing}\n <div class=\"edit-actions\">\n <button\n type=\"button\"\n class=\"primary-sm\"\n ?disabled=${this.submitting}\n @click=${this.onRequestEmailCode}\n >\n ${this.submitting ? html`<span class=\"spinner\"></span>` : nothing}\n <span>${this.msg.changeEmailCta}</span>\n </button>\n <button\n type=\"button\"\n class=\"ghost-sm\"\n @click=${() => {\n this.editMode = \"\";\n this.emailError = \"\";\n }}\n >\n ${this.msg.cancelCta}\n </button>\n </div>\n </div>\n `\n : html`\n <div class=\"edit-card\">\n <p class=\"hint\">${this.msg.codeSentNeutral}</p>\n <div class=\"field\">\n <label for=${this.uid(\"emailcode\")}>${this.msg.codeLabel}</label>\n <input\n id=${this.uid(\"emailcode\")}\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"one-time-code\"\n part=\"input\"\n .value=${this.emailCode}\n placeholder=\"000000\"\n aria-invalid=${this.emailError ? \"true\" : \"false\"}\n ?disabled=${this.submitting}\n @input=${(e: Event) => {\n this.emailCode = (e.target as HTMLInputElement).value\n .replace(/\\D/g, \"\")\n .slice(0, 6);\n this.emailError = \"\";\n }}\n />\n <p class=\"hint\">${this.msg.changeEmailConfirmHint} ${this.dNewEmail}</p>\n </div>\n ${this.emailError ? html`<p class=\"err\">${this.emailError}</p>` : nothing}\n <div class=\"edit-actions\">\n <button\n type=\"button\"\n class=\"primary-sm\"\n ?disabled=${this.submitting}\n @click=${this.onConfirmEmailChange}\n >\n ${this.submitting ? html`<span class=\"spinner\"></span>` : nothing}\n <span>${this.msg.confirmChangeCta}</span>\n </button>\n <button\n type=\"button\"\n class=\"ghost-sm\"\n @click=${() => {\n this.editMode = \"\";\n this.emailError = \"\";\n }}\n >\n ${this.msg.cancelCta}\n </button>\n </div>\n </div>\n `\n }\n </div>\n `;\n }\n\n private async onSignOut() {\n const client = this.resolvedClient;\n if (!client) return;\n await this.run(async () => {\n await client.signOut();\n });\n }\n\n private async onConnectProvider(providerId: string) {\n const client = this.resolvedClient;\n const state = this.auth.state;\n if (!client || state.status !== \"authenticated\") return;\n await this.run(async () => {\n const nonce = await client.createOAuthNonce(this.signal);\n globalThis.sessionStorage?.setItem(this.nonceStorageKey, nonce);\n const { oauth_redirect_url } = await client.startOAuth(\n {\n provider: providerId,\n nonce,\n intent: \"link\",\n id_token: state.session.id_token,\n refresh_token: state.session.refresh_token\n },\n this.signal\n );\n globalThis.location.assign(oauth_redirect_url);\n });\n }\n\n private get availableProviders(): Array<{ id: string; name: string; mark: string }> {\n const s = this.settings ?? this.settingsCtl.settings;\n if (!s || !s.oauth_settings.enabled) return [];\n const marks: Record<string, string> = {\n google: \"G\",\n github: \"GH\",\n linkedin: \"in\",\n facebook: \"f\"\n };\n return Object.entries(s.oauth_providers)\n .filter(([, p]) => p.enabled)\n .map(([id, p]) => ({\n id,\n name: p.provider_name,\n mark: marks[id] ?? p.provider_name.slice(0, 2)\n }));\n }\n\n // ── sections ──────────────────────────────────────────────\n private renderIdentity() {\n const u = this.user;\n const locked = this.editMode !== \"\" && this.editMode !== \"avatar\";\n const photo = u?.profile_photo && u.profile_photo !== this.photoFailed ? u.profile_photo : \"\";\n return html`\n <div class=\"acct-nav\">\n <div class=\"acct-who\">\n <div class=\"avatar-col\">\n <div class=\"avatar ${photo ? \"has-photo\" : \"\"}\" part=\"avatar\">\n ${\n photo\n ? html`<img\n src=${photo}\n alt=\"\"\n part=\"avatar-image\"\n @error=${() => (this.photoFailed = photo)}\n />`\n : this.initials\n }\n </div>\n <button\n type=\"button\"\n class=\"edit-link\"\n style=\"font-size:12px\"\n ?disabled=${this.photoBusy || locked}\n @click=${this.onChoosePhoto}\n >\n ${\n this.photoBusy\n ? this.msg.photoUploading\n : u?.profile_photo\n ? this.msg.changePhotoLink\n : this.msg.addPhotoLink\n }\n </button>\n <singlebase-uploader\n style=\"display:none\"\n view=\"button\"\n max-files=\"1\"\n branding=\"false\"\n accept=${PHOTO_ACCEPT}\n .client=${this.uploadClient}\n .options=${PHOTO_OPTIONS}\n @singlebase-upload-selected=${this.onPhotoSelected}\n @singlebase-upload-complete=${this.onPhotoUploaded}\n @singlebase-upload-error=${this.onPhotoProblem}\n @singlebase-upload-rejected=${this.onPhotoProblem}\n ></singlebase-uploader>\n </div>\n <div class=\"acct-who-text\">\n <div class=\"acct-name\">${this.fullName || \"—\"}</div>\n <div class=\"acct-email\">${u?.email ?? \"\"}</div>\n </div>\n </div>\n <button type=\"button\" class=\"link-sm\" ?disabled=${this.submitting} @click=${this.onSignOut}>\n ${this.msg.signOutCta}\n </button>\n </div>\n `;\n }\n\n private renderProfileSection() {\n const u = this.user;\n if (!u) return nothing;\n const reading = this.editMode !== \"profile\";\n const locked = this.editMode !== \"\" && this.editMode !== \"profile\";\n\n const summary: Array<[string, string]> = [\n [this.msg.firstNameLabel, u.first_name || \"—\"],\n [this.msg.lastNameLabel, u.last_name || \"—\"],\n [this.msg.phoneLabel, u.phone || \"—\"],\n [this.msg.emailLabel, u.email || \"—\"]\n ];\n\n return html`\n <div class=\"section\">\n ${\n reading\n ? html`\n <div class=\"sum-list\">\n ${summary.map(\n ([label, value]) => html`\n <div class=\"sum-row\">\n <span class=\"sum-label\">${label}</span>\n <span class=\"sum-value\">${value}</span>\n </div>\n `\n )}\n </div>\n <div class=\"btn-row-end\">\n ${\n this.profileSaved\n ? html`<span role=\"status\" class=\"saved-note\">${this.profileSaved}</span>`\n : nothing\n }\n <button\n type=\"button\"\n class=\"edit-link\"\n ?disabled=${locked}\n @click=${this.startProfileEdit}\n >\n ${this.msg.editAccountCta}\n </button>\n </div>\n `\n : html`\n <div class=\"edit-card\">\n <div class=\"two-up\">\n <div class=\"field\">\n <label for=${this.uid(\"first\")}>${this.msg.firstNameLabel}</label>\n <input\n id=${this.uid(\"first\")}\n type=\"text\"\n part=\"input\"\n .value=${this.dFirst}\n placeholder=${this.msg.firstNamePlaceholder}\n ?disabled=${this.submitting}\n @input=${(e: Event) => {\n this.dFirst = (e.target as HTMLInputElement).value;\n this.profileError = \"\";\n }}\n />\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"last\")}>${this.msg.lastNameLabel}</label>\n <input\n id=${this.uid(\"last\")}\n type=\"text\"\n part=\"input\"\n .value=${this.dLast}\n placeholder=${this.msg.lastNamePlaceholder}\n ?disabled=${this.submitting}\n @input=${(e: Event) => {\n this.dLast = (e.target as HTMLInputElement).value;\n this.profileError = \"\";\n }}\n />\n </div>\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"phone\")}>${this.msg.phoneLabel}</label>\n <input\n id=${this.uid(\"phone\")}\n type=\"tel\"\n part=\"input\"\n .value=${this.dPhone}\n placeholder=${this.msg.phonePlaceholder}\n ?disabled=${this.submitting}\n @input=${(e: Event) => {\n this.dPhone = (e.target as HTMLInputElement).value;\n this.profileError = \"\";\n }}\n />\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"email\")}>${this.msg.emailLabel}</label>\n <input\n id=${this.uid(\"email\")}\n type=\"email\"\n part=\"input\"\n .value=${this.dEmail}\n disabled\n title=${this.msg.notYetSupported}\n />\n <p class=\"hint\">${this.msg.changeEmailElsewhereHint}</p>\n </div>\n ${this.profileError ? html`<p class=\"err\">${this.profileError}</p>` : nothing}\n <div class=\"edit-actions\">\n <button\n type=\"button\"\n class=\"primary-sm\"\n ?disabled=${this.submitting}\n @click=${this.onSaveProfile}\n >\n ${this.submitting ? html`<span class=\"spinner\"></span>` : nothing}\n <span>${this.msg.saveChangesCta}</span>\n </button>\n <button\n type=\"button\"\n class=\"ghost-sm\"\n @click=${() => {\n this.editMode = \"\";\n this.profileError = \"\";\n }}\n >\n ${this.msg.cancelCta}\n </button>\n </div>\n </div>\n `\n }\n </div>\n `;\n }\n\n private renderPasswordSection() {\n const reading = this.editMode !== \"password\";\n const locked = this.editMode !== \"\" && this.editMode !== \"password\";\n return html`\n <div class=\"rule\"></div>\n <div class=\"section\">\n <h3 class=\"sec-title\">${this.msg.passwordSectionTitle}</h3>\n ${\n reading\n ? html`\n <div class=\"between\">\n <p class=\"hint\">${this.msg.passwordChangedHint}</p>\n <div class=\"btn-row-end\">\n ${\n this.passSaved\n ? html`<span role=\"status\" class=\"saved-note\">${this.passSaved}</span>`\n : nothing\n }\n <button\n type=\"button\"\n class=\"edit-link\"\n ?disabled=${locked}\n @click=${this.startPassEdit}\n >\n ${this.msg.changePasswordCta}\n </button>\n </div>\n </div>\n `\n : html`\n <div class=\"edit-card\">\n <div class=\"field\">\n <label for=${this.uid(\"curpass\")}>${this.msg.currentPasswordLabel}</label>\n <input\n id=${this.uid(\"curpass\")}\n type=\"password\"\n part=\"input\"\n .value=${this.curPass}\n placeholder=${this.msg.passwordPlaceholder}\n ?disabled=${this.submitting}\n @input=${(e: Event) => {\n this.curPass = (e.target as HTMLInputElement).value;\n this.newPassError = \"\";\n }}\n />\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"newpass\")}>${this.msg.newPasswordLabel}</label>\n <input\n id=${this.uid(\"newpass\")}\n type=\"password\"\n part=\"input\"\n .value=${this.newPass}\n placeholder=${this.msg.newPasswordPlaceholder}\n aria-invalid=${this.newPassError ? \"true\" : \"false\"}\n ?disabled=${this.submitting}\n @input=${(e: Event) => {\n this.newPass = (e.target as HTMLInputElement).value;\n this.newPassError = \"\";\n }}\n />\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"confirmpass\")}>Confirm new password</label>\n <input\n id=${this.uid(\"confirmpass\")}\n type=\"password\"\n part=\"input\"\n .value=${this.confirmPass}\n placeholder=${this.msg.confirmPasswordPlaceholder}\n aria-invalid=${this.newPassError ? \"true\" : \"false\"}\n ?disabled=${this.submitting}\n @input=${(e: Event) => {\n this.confirmPass = (e.target as HTMLInputElement).value;\n this.newPassError = \"\";\n }}\n />\n ${this.newPassError ? html`<p class=\"err\">${this.newPassError}</p>` : nothing}\n </div>\n <div class=\"edit-actions\">\n <button\n type=\"button\"\n class=\"primary-sm\"\n ?disabled=${this.submitting}\n @click=${this.onChangePass}\n >\n ${this.submitting ? html`<span class=\"spinner\"></span>` : nothing}\n <span>${this.msg.updatePasswordCta}</span>\n </button>\n <button type=\"button\" class=\"ghost-sm\" @click=${() => (this.editMode = \"\")}>\n ${this.msg.cancelCta}\n </button>\n </div>\n </div>\n `\n }\n </div>\n `;\n }\n\n /** Layout preserved from the mock; no enrolment operation exists yet. */\n private renderTwoFactorSection() {\n return html`\n <div class=\"rule\"></div>\n <div class=\"section\">\n <div class=\"between\">\n <div>\n <h3 class=\"sec-title\">${this.msg.twoFaTitle}</h3>\n <p class=\"hint\">${this.msg.twoFaHintOff}</p>\n </div>\n <button\n type=\"button\"\n class=\"switch\"\n aria-pressed=\"false\"\n aria-label=${`${this.msg.twoFaTitle} (${this.msg.notYetSupported})`}\n disabled\n title=${this.msg.notYetSupported}\n >\n <span class=\"knob\"></span>\n </button>\n </div>\n <p class=\"disabled-note\">\n ${this.msg.notYetSupported} — enrolling a second factor is not part of the current API.\n </p>\n </div>\n `;\n }\n\n private renderConnectedSection() {\n const providers = this.availableProviders;\n if (providers.length === 0) return nothing;\n return html`\n <div class=\"rule\"></div>\n <div class=\"section\">\n <h3 class=\"sec-title\">${this.msg.connectedTitle}</h3>\n <p class=\"hint\">${this.msg.connectedHint}</p>\n <span class=\"sub-label\">${this.msg.addAnotherLabel}</span>\n <div class=\"tile-grid\">\n ${providers.map(\n (p) => html`\n <button\n type=\"button\"\n class=\"tile\"\n aria-label=${`Connect ${p.name}`}\n ?disabled=${this.submitting}\n @click=${() => this.onConnectProvider(p.id)}\n >\n <span class=\"tile-mark\">${p.mark}</span>\n <span class=\"tile-name\">${p.name}</span>\n <span class=\"tile-plus\">+</span>\n </button>\n `\n )}\n </div>\n <p class=\"disabled-note\">\n ${this.msg.notYetSupported} — listing or disconnecting linked providers is not part of the\n current API.\n </p>\n </div>\n `;\n }\n\n private renderDangerSection() {\n return html`\n <div class=\"rule\"></div>\n <div class=\"section\">\n ${\n this.deleteStage === 0\n ? html`<button\n type=\"button\"\n class=\"danger-link\"\n disabled\n title=${this.msg.notYetSupported}\n >\n ${this.msg.deleteAccountCta}\n </button>`\n : nothing\n }\n <p class=\"disabled-note\">\n ${this.msg.notYetSupported} — account deletion is not part of the current API.\n </p>\n </div>\n `;\n }\n\n protected override render() {\n if (!this.user) return html`<p class=\"disabled-note\">Not signed in.</p>`;\n\n return html`\n <div class=\"acct-root\">\n ${this.renderLogo()} ${this.renderIdentity()}\n <div class=\"acct-body\">\n ${this.toast ? html`<div class=\"notice\" role=\"status\">${this.toast}</div>` : nothing}\n ${this.formError ? html`<div class=\"banner\" role=\"alert\">${this.formError}</div>` : nothing}\n ${this.renderProfileSection()} ${this.renderEmailSection()}\n ${this.renderPasswordSection()}\n ${SHOW_TWO_FACTOR ? this.renderTwoFactorSection() : nothing}\n ${this.renderConnectedSection()}\n ${SHOW_DELETE_ACCOUNT ? this.renderDangerSection() : nothing}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"singlebase-authui-account\": SinglebaseAccountScreen;\n }\n}\n","import { html, nothing, type PropertyValues } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport type { AuthSettings, OAuthIntent } from \"@singlebase/singlebase-sdk\";\nimport { SinglebaseFormBase } from \"./form-base.js\";\nimport { SettingsController } from \"../controllers/settings-controller.js\";\n\nexport type ButtonsType = \"signout\" | \"oauth\" | \"link\";\n\n/**\n * The widget's action buttons, selected with `type`:\n *\n * <singlebase-authui-buttons type=\"signout\"></singlebase-authui-buttons>\n * <singlebase-authui-buttons type=\"oauth\" intent=\"signup\"></singlebase-authui-buttons>\n * <singlebase-authui-buttons type=\"link\" provider=\"github\"></singlebase-authui-buttons>\n *\n * They live under one tag rather than three because they are the same thing\n * from a host's point of view — a button that performs one auth action — and\n * every custom element name is a global, unversioned claim on any page this\n * widget is dropped into.\n */\n@customElement(\"singlebase-authui-buttons\")\nexport class SinglebaseAuthButtons extends SinglebaseFormBase {\n @property() accessor type: ButtonsType = \"signout\";\n\n /** oauth: which flow the provider buttons start. */\n @property() accessor intent: OAuthIntent = \"signin\";\n\n /** link: the provider to connect to the signed-in account. */\n @property() accessor provider = \"\";\n\n /** link: display name, when it differs from the provider id. */\n @property({ attribute: \"provider-name\" }) accessor providerName = \"\";\n\n /** Inside a card that already supplies chrome, drop this element's own. */\n @property({ type: Boolean }) accessor embedded = false;\n\n @property({ attribute: false }) accessor settings: AuthSettings | null = null;\n\n @property({ attribute: \"nonce-storage-key\" })\n accessor nonceStorageKey = \"singlebase-oauth-nonce\";\n\n private settingsCtl = new SettingsController(this);\n\n override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n if (this.type === \"oauth\") this.settingsCtl.load(this.resolvedClient, this.settings);\n }\n\n private get effectiveSettings(): AuthSettings | null {\n return this.settings ?? this.settingsCtl.settings;\n }\n\n // ── oauth ────────────────────────────────────────────────\n private get providers(): Array<{ id: string; name: string; mark: string }> {\n const s = this.effectiveSettings;\n if (!s || !s.oauth_settings.enabled) return [];\n const allowed =\n this.intent === \"signup\" ? s.oauth_settings.allow_signup : s.oauth_settings.allow_signin;\n if (!allowed && this.intent !== \"link\") return [];\n\n const marks: Record<string, string> = {\n google: \"G\",\n github: \"GH\",\n linkedin: \"in\",\n facebook: \"f\"\n };\n return Object.entries(s.oauth_providers)\n .filter(([, p]) => p.enabled)\n .map(([id, p]) => ({\n id,\n name: p.provider_name,\n mark: marks[id] ?? p.provider_name.slice(0, 2)\n }));\n }\n\n /** Shared by the oauth and link flows: nonce, start, redirect. */\n private async startOAuth(providerId: string, intent: OAuthIntent, linking = false) {\n const client = this.resolvedClient;\n if (!client) return;\n\n let idToken: string | undefined;\n let refreshToken: string | undefined;\n if (linking) {\n const state = this.auth.state;\n if (state.status !== \"authenticated\") {\n this.formError = this.msg.linkRequiresSignIn;\n this.phase = \"error\";\n return;\n }\n idToken = state.session.id_token;\n refreshToken = state.session.refresh_token;\n }\n\n await this.run(async () => {\n const nonce = await client.createOAuthNonce(this.signal);\n globalThis.sessionStorage?.setItem(this.nonceStorageKey, nonce);\n const { oauth_redirect_url } = await client.startOAuth(\n {\n provider: providerId,\n nonce,\n intent,\n ...(linking ? { id_token: idToken, refresh_token: refreshToken } : {})\n },\n this.signal\n );\n globalThis.location.assign(oauth_redirect_url);\n });\n }\n\n private renderOAuth() {\n const providers = this.providers;\n if (providers.length === 0) return nothing;\n const [primary, ...rest] = providers;\n\n return html`\n <div class=\"stack\">\n ${\n this.formError\n ? html`<div class=\"banner\" part=\"banner\" role=\"alert\">${this.formError}</div>`\n : nothing\n }\n\n <button\n type=\"button\"\n class=\"oauth-primary\"\n part=\"oauth-button\"\n ?disabled=${this.submitting}\n @click=${() => this.startOAuth(primary!.id, this.intent)}\n >\n <span class=\"g-mark\">${primary!.mark}</span>\n <span>${this.msg.oauthContinueWith} ${primary!.name}</span>\n </button>\n\n ${\n rest.length\n ? html`\n <div class=\"icon-row\">\n ${rest.map(\n (p) => html`\n <button\n type=\"button\"\n class=\"icon-btn\"\n part=\"oauth-button\"\n aria-label=${`${this.msg.oauthContinueWith} ${p.name}`}\n title=${`${this.msg.oauthContinueWith} ${p.name}`}\n ?disabled=${this.submitting}\n @click=${() => this.startOAuth(p.id, this.intent)}\n >\n <span class=\"tile-mark\">${p.mark}</span>\n </button>\n `\n )}\n </div>\n `\n : nothing\n }\n </div>\n `;\n }\n\n // ── link ─────────────────────────────────────────────────\n private renderLink() {\n return html`\n <div class=\"stack\">\n ${this.renderStatus()}\n <button\n type=\"button\"\n class=\"secondary\"\n part=\"oauth-button\"\n ?disabled=${this.submitting}\n @click=${() => this.startOAuth(this.provider, \"link\", true)}\n >\n ${this.submitting ? html`<span class=\"spinner\"></span>` : nothing}\n <span>${this.msg.oauthContinueWith} ${this.providerName || this.provider}</span>\n </button>\n </div>\n `;\n }\n\n // ── signout ──────────────────────────────────────────────\n private async onSignOut() {\n const client = this.resolvedClient;\n if (!client) return;\n await this.run(async () => {\n await client.signOut();\n });\n }\n\n private renderSignOut() {\n if (this.embedded) {\n return html`<button\n type=\"button\"\n class=\"link-sm\"\n part=\"button-signout\"\n ?disabled=${this.submitting}\n @click=${this.onSignOut}\n >\n ${this.msg.signOutCta}\n </button>`;\n }\n\n return html`\n <div class=\"stack\">\n ${this.formError ? html`<p class=\"banner\" role=\"alert\">${this.formError}</p>` : nothing}\n <button\n type=\"button\"\n class=\"link-sm\"\n part=\"button-signout\"\n ?disabled=${this.submitting}\n @click=${this.onSignOut}\n >\n ${this.msg.signOutCta}\n </button>\n </div>\n `;\n }\n\n protected override render() {\n if (this.type === \"oauth\") return this.renderOAuth();\n if (this.type === \"link\") return this.renderLink();\n return this.renderSignOut();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"singlebase-authui-buttons\": SinglebaseAuthButtons;\n }\n}\n","import { html, css, nothing, type PropertyValues } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport {\n SinglebaseAuthError,\n resolveScreen,\n type AuthClient,\n type AuthSettings\n} from \"@singlebase/singlebase-sdk\";\nimport { SinglebaseElementBase } from \"./base.js\";\nimport { resolveRedirectTarget } from \"../utils/redirect.js\";\nimport { SettingsController } from \"../controllers/settings-controller.js\";\nimport { EventBridge } from \"../controllers/event-bridge.js\";\nimport \"./account-screen.js\";\nimport \"./buttons.js\";\n\n/** Screens a signed-out visitor may reach. */\nexport type GuestScreen = \"signin\" | \"signup\" | \"forgot\" | \"verify\" | \"otp\" | \"newpass\" | \"invite\";\n\n/** Screens that require a live session. */\nexport type ProtectedScreen = \"account\";\n\n/** Every value `screen` accepts. \"oauth-callback\" is entered by URL, not by hand. */\nexport type Screen = GuestScreen | ProtectedScreen | \"oauth-callback\";\n\nconst GUEST_SCREENS: GuestScreen[] = [\n \"signin\",\n \"signup\",\n \"forgot\",\n \"verify\",\n \"otp\",\n \"newpass\",\n \"invite\"\n];\n\nconst PROTECTED_SCREENS: ProtectedScreen[] = [\"account\"];\n\nconst ALL_SCREENS: Screen[] = [...GUEST_SCREENS, ...PROTECTED_SCREENS, \"oauth-callback\"];\n\nexport function isGuestScreen(value: string): value is GuestScreen {\n return (GUEST_SCREENS as string[]).includes(value);\n}\n\nexport function isProtectedScreen(value: string): value is ProtectedScreen {\n return (PROTECTED_SCREENS as string[]).includes(value);\n}\n\nexport function isScreen(value: string): value is Screen {\n return (ALL_SCREENS as string[]).includes(value);\n}\n\n/**\n * Converter for the allow-* flags, which default to true. Lit's Boolean\n * converter can only express \"present = true\", so it cannot turn a\n * default-true flag off from markup; this one reads `allow-x=\"false\"` as\n * false and leaves the default alone when the attribute is absent.\n */\nconst flagAttr = {\n // An absent attribute must mean \"default\" (true), not false. Lit calls\n // fromAttribute(null) when an attribute is *removed*, so returning false\n // there would make removing `allow-oauth=\"false\"` leave the flag off\n // forever instead of restoring the default.\n fromAttribute: (value: string | null) => (value === null ? true : value !== \"false\"),\n toAttribute: (value: boolean) => (value ? null : \"false\")\n};\n\n/**\n * The complete auth widget: routes among signin, signup, recovery, one-time\n * code, invite and OAuth-callback views (spec: AuthScreen), and renders the\n * design's full card chrome — brand panel, logo, method accordion, step bar,\n * banner/notice, actions and footer.\n *\n * Structure and styling follow project/AuthWidget.dc.html; the individual\n * sb-* form elements remain available for hosts that want to compose their\n * own screen instead of using this one.\n */\n@customElement(\"singlebase-authui\")\nexport class SinglebaseAuthScreen extends SinglebaseElementBase {\n static override styles = [\n ...SinglebaseElementBase.styles,\n css`\n /* the mock's root */\n :host {\n display: flex;\n width: 100%;\n box-sizing: border-box;\n background: var(--sb-surface, #ffffff);\n color: var(--sb-ink, #16181a);\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: calc(var(--sb-radius, 4px) + 4px);\n overflow: hidden;\n }\n\n .brand-panel {\n flex: 0 0 40%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n gap: 24px;\n padding: var(--sb-pad, 20px);\n background: var(--sb-surface-alt, #fafafa);\n border-right: 1px solid var(--sb-border, #e4e6e9);\n }\n\n /* A flex column would stretch an image to full width and wreck its\n aspect ratio, so both logos opt out of the cross-axis stretch. */\n .logo-img {\n display: block;\n align-self: flex-start;\n height: var(--sb-logo-height, 20px);\n width: auto;\n max-width: 100%;\n margin-bottom: 6px;\n }\n\n .brand-img {\n display: block;\n align-self: flex-start;\n height: var(--sb-brand-logo-height, 28px);\n width: auto;\n max-width: 100%;\n }\n\n .brand-mark {\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 13px;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--sb-ink, #16181a);\n }\n\n .brand-copy {\n font-size: 20px;\n line-height: 1.35;\n letter-spacing: -0.01em;\n color: var(--sb-ink, #16181a);\n text-wrap: pretty;\n }\n\n .brand-foot {\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 11px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .branding {\n margin-top: 18px;\n text-align: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 10.5px;\n letter-spacing: 0.06em;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .branding a {\n color: inherit;\n text-decoration: none;\n }\n\n .branding a:hover {\n color: var(--sb-ink, #16181a);\n text-decoration: underline;\n text-underline-offset: 3px;\n }\n\n /* the mock's panel */\n .panel {\n flex: 1;\n min-width: 0;\n padding: var(--sb-pad, 20px);\n }\n\n @media (max-width: 520px) {\n :host {\n flex-direction: column;\n }\n .brand-panel {\n flex: 0 0 auto;\n border-right: none;\n border-bottom: 1px solid var(--sb-border, #e4e6e9);\n }\n }\n `\n ];\n\n // ── configuration (mirrors the mock's props) ───────────────\n @property({ attribute: \"initial-screen\" }) accessor initialScreen: Screen = \"signin\";\n\n /**\n * Two-way screen binding for SPA routers: set it to deep-link a screen,\n * read it (or listen for `singlebase-screen-change`) to mirror the widget\n * into your URL. `goto()` is the imperative form.\n */\n @property({ reflect: true })\n accessor screen: Screen | \"\" = \"\";\n\n /**\n * By default the widget swaps to the account view once authenticated.\n * SPAs usually want to route away and unmount instead — set this and the\n * widget renders nothing when signed in, leaving navigation to the host.\n */\n @property({ type: Boolean, attribute: \"no-account-view\" })\n accessor noAccountView = false;\n @property({ attribute: false }) accessor settings: AuthSettings | null = null;\n\n @property({ converter: flagAttr, attribute: \"auth-enabled\" }) accessor authEnabled = true;\n @property({ converter: flagAttr, attribute: \"allow-email-signin\" }) accessor allowEmailSignin =\n true;\n @property({ converter: flagAttr, attribute: \"allow-email-signup\" }) accessor allowEmailSignup =\n true;\n @property({ converter: flagAttr, attribute: \"allow-email-otp\" }) accessor allowEmailOtp = true;\n @property({ converter: flagAttr, attribute: \"allow-oauth\" }) accessor allowOauth = true;\n @property({ converter: flagAttr, attribute: \"allow-account-creation\" })\n accessor allowAccountCreation = true;\n\n @property() accessor layout: \"card\" | \"split\" = \"card\";\n @property({ attribute: \"oauth-placement\" }) accessor oauthPlacement: \"top\" | \"bottom\" = \"bottom\";\n @property({ type: Boolean }) accessor stepped = false;\n\n /**\n * Branding is the host's, so these default to empty and the corresponding\n * slots simply do not render. (\"KEYRING\" and friends were the fictional\n * brand in the design mock — they must never ship as defaults.)\n */\n @property({ attribute: \"logo-text\" }) accessor logoText = \"\";\n\n /**\n * A logo image, used instead of `logo-text` when set. `logo-text` is still\n * worth supplying alongside it — it becomes the image's alt text.\n */\n @property({ attribute: \"logo-url\" }) accessor logoUrl = \"\";\n @property({ attribute: \"brand-line\" }) accessor brandLine = \"\";\n @property({ attribute: \"brand-foot\" }) accessor brandFoot = \"\";\n @property({ attribute: \"sign-in-title\" }) accessor signInTitle = \"\";\n\n /**\n * The \"Auth by Singlebase\" credit under the card. On by default; turn it\n * off with branding=\"false\", exactly like the allow-* flags.\n *\n * It is a plain link — no pixel, no beacon, no request of any kind. A\n * third-party network call originating from a sign-in form is the sort of\n * thing that fails a security review, and deservedly.\n */\n @property({ converter: flagAttr, attribute: \"branding\" }) accessor branding = true;\n\n /**\n * Where to send the user once a session exists. Same-origin only — an\n * absolute URL pointing anywhere else is refused, because a login widget\n * that forwards to an attacker-supplied host is an open redirect.\n *\n * When unset, a `?redirect=` (or `?next=`) parameter on the current URL is\n * used instead, so \"you were sent to the login page, now go back where you\n * were headed\" works without the host wiring anything.\n */\n @property({ attribute: \"redirect-url\" }) accessor redirectUrl = \"\";\n\n /** Shown as \"Terms\" in the consent line under the primary action. */\n @property({ attribute: \"tos-url\" }) accessor tosUrl = \"\";\n\n /** Shown as \"Privacy\" in the consent line under the primary action. */\n @property({ attribute: \"privacy-url\" }) accessor privacyUrl = \"\";\n\n /** Where the OAuth nonce is stashed between starting a flow and returning. */\n @property({ attribute: \"nonce-storage-key\" })\n accessor nonceStorageKey = \"singlebase-oauth-nonce\";\n @property({ attribute: \"invite-email\" }) accessor inviteEmail = \"\";\n @property({ attribute: \"invite-org\" }) accessor inviteOrg = \"\";\n /** Invite code carried by the invite link; when absent the widget asks for it. */\n @property({ attribute: \"invite-code\" }) accessor inviteCode = \"\";\n\n // ── state (mirrors the mock's state bag) ───────────────────\n @state() private accessor step = 0;\n @state() private accessor method = \"\";\n @state() private accessor email = \"\";\n @state() private accessor password = \"\";\n @state() private accessor name = \"\";\n @state() private accessor firstName = \"\";\n @state() private accessor lastName = \"\";\n @state() private accessor phone = \"\";\n @state() private accessor newPass = \"\";\n @state() private accessor confirmPass = \"\";\n @state() private accessor code: string[] = [\"\", \"\", \"\", \"\", \"\", \"\"];\n @state() private accessor verifyNext: \"newpass\" | \"signin_code\" | \"invite\" = \"signin_code\";\n @state() private accessor loading = false;\n @state() private accessor banner = \"\";\n @state() private accessor notice = \"\";\n @state() private accessor emailError = \"\";\n @state() private accessor passError = \"\";\n @state() private accessor newPassError = \"\";\n @state() private accessor attempts = 0;\n @state() private accessor needsMfaCode = false;\n\n private settingsCtl = new SettingsController(this);\n private bridge = new EventBridge(this);\n private uidBase = `sb-${Math.random().toString(36).slice(2, 8)}`;\n\n private uid(k: string) {\n return `${this.uidBase}-${k}`;\n }\n\n override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.settingsCtl.load(this.resolvedClient, this.settings);\n this.bridge.bind(this.resolvedClient);\n this.bindGoto(this.resolvedClient);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.gotoUnsubscribe?.();\n this.gotoUnsubscribe = undefined;\n this.gotoClient = null;\n this.abortController?.abort();\n }\n\n private gotoUnsubscribe?: () => void;\n private gotoClient: AuthClient | null = null;\n\n /**\n * Subscribes to auth.goto() so a host can drive every widget on the page\n * with one call. Bound here rather than in connectedCallback because the\n * app usually creates its SinglebaseAuth() instance *after* the widget\n * upgrades — at connect time there is often no client to subscribe to yet.\n */\n private bindGoto(client: AuthClient | null) {\n if (client === this.gotoClient) return;\n this.gotoUnsubscribe?.();\n this.gotoUnsubscribe = undefined;\n this.gotoClient = client;\n if (!client) return;\n\n const offGoto = client.on(\"goto\", ({ screen }) => {\n if (isScreen(screen)) this.goto(screen);\n });\n\n // Follow the redirect on an actual sign-in only. Doing this from the\n // authenticated *state* instead would also fire for a session restored\n // on page load, which is the case that should show the interstitial and\n // let the user choose.\n const offSignin = client.on(\"signin\", () => {\n this.followRedirect();\n });\n\n this.gotoUnsubscribe = () => {\n offGoto();\n offSignin();\n };\n }\n\n /** Shows a screen. The SPA-facing counterpart of the `screen` property. */\n goto(screen: Screen): void {\n if (this.screen === screen) return;\n this.screen = screen;\n this.step = 0;\n this.banner = \"\";\n this.notice = \"\";\n this.dispatchEvent(\n new CustomEvent(\"singlebase-screen-change\", {\n detail: { screen },\n bubbles: true,\n composed: true\n })\n );\n }\n\n // ── derived config: explicit props unless auth.settings says otherwise ──\n private get cfg() {\n const s = this.settings ?? this.settingsCtl.settings;\n if (!s) {\n return {\n authEnabled: this.authEnabled,\n allowEmailSignin: this.allowEmailSignin,\n allowEmailSignup: this.allowEmailSignup && this.allowAccountCreation,\n allowEmailOtp: this.allowEmailOtp,\n allowOauth: this.allowOauth,\n mfa: false\n };\n }\n const a = s.auth_settings;\n // Code-only signin is available only when the project does not require\n // password-plus-OTP MFA (the auth API's code sign-in).\n const mfa = a.second_factor === \"email_otp\";\n return {\n authEnabled: s.enabled && a.enabled && this.authEnabled,\n allowEmailSignin: a.allow_signin && this.allowEmailSignin,\n allowEmailSignup: a.allow_signup && this.allowEmailSignup && this.allowAccountCreation,\n allowEmailOtp: this.allowEmailOtp && a.allow_signin && !mfa,\n allowOauth: s.oauth_settings.enabled && this.allowOauth,\n mfa\n };\n }\n\n /** The screen the host asked for, before any guarding is applied. */\n private get requestedScreen(): Screen {\n const raw = this.screen || this.initialScreen || \"signin\";\n return isScreen(raw) ? raw : \"signin\";\n }\n\n /**\n * Resolves the screen actually rendered.\n *\n * This is the single place navigation is decided, so a protected screen\n * cannot be reached by setting an attribute, editing the URL, or calling\n * goto() — every route runs through the same auth check. The guest\n * fallbacks below additionally reflect what the project has enabled.\n */\n private get activeScreen(): Screen {\n if (this.isOAuthCallback) return \"oauth-callback\";\n\n const authenticated = this.auth.state.status === \"authenticated\";\n const requested = this.requestedScreen;\n\n if (isProtectedScreen(requested)) {\n // Never render a protected screen without a session.\n return authenticated ? requested : \"signin\";\n }\n\n if (authenticated) {\n // With no screen asked for, a signed-in visitor belongs on their\n // account. If the host *did* ask for a guest screen, honour it — the\n // interstitial below then offers to continue or sign out, rather than\n // showing a sign-in form to someone already signed in.\n const askedForOne = this.screen !== \"\" || this.initialScreen !== \"signin\";\n return askedForOne ? requested : \"account\";\n }\n\n const c = this.cfg;\n let screen = requested as GuestScreen;\n if (screen === \"signup\" && !c.allowEmailSignup) screen = \"signin\";\n if ((screen === \"forgot\" || screen === \"newpass\") && !c.allowEmailSignin) screen = \"signin\";\n if (screen === \"otp\" && !c.allowEmailOtp) screen = \"signin\";\n if (screen === \"signin\" && !c.allowEmailSignin && c.allowEmailOtp) screen = \"otp\";\n return screen;\n }\n\n /** True when a signed-in user is sitting on a guest screen (spec: offer continue/sign out). */\n private get showsSignedInInterstitial(): boolean {\n return this.auth.state.status === \"authenticated\" && isGuestScreen(this.activeScreen);\n }\n\n // ── redirect ──────────────────────────────────────────────\n\n /**\n * The post-login destination, or null when there is none.\n *\n * Only same-origin targets are accepted. A login widget that forwards to\n * an attacker-chosen host is a textbook open redirect, and the `redirect`\n * parameter it reads comes straight off the URL bar, so it is untrusted\n * input by definition.\n */\n private get redirectTarget(): string | null {\n return resolveRedirectTarget(\n this.redirectUrl || this.redirectParam,\n globalThis.location?.href,\n (reason) => console.warn(`[singlebase] ${reason}`)\n );\n }\n\n private get redirectParam(): string {\n const params = new URLSearchParams(globalThis.location?.search ?? \"\");\n return params.get(\"redirect\") ?? params.get(\"next\") ?? \"\";\n }\n\n /** Navigates to the post-login destination if there is a safe one. */\n private followRedirect(): boolean {\n const target = this.redirectTarget;\n if (!target) return false;\n globalThis.location?.assign(target);\n return true;\n }\n\n private get isOAuthCallback(): boolean {\n const params = new URLSearchParams(globalThis.location?.search ?? \"\");\n return params.has(\"access_code\") || params.has(\"error\");\n }\n\n // ── OAuth callback ────────────────────────────────────────\n //\n // Handled here rather than in a separate element: it is a screen of this\n // widget like any other, and giving it its own tag meant a second element\n // with its own copy of the loading/error handling.\n\n @state() private accessor callbackDone = false;\n\n /** Strips the provider's parameters so a reload cannot replay the exchange. */\n private cleanCallbackUrl(): void {\n const here = globalThis.location?.href;\n if (!here || !globalThis.history) return;\n const url = new URL(here);\n url.searchParams.delete(\"access_code\");\n url.searchParams.delete(\"error\");\n globalThis.history.replaceState({}, \"\", url.toString());\n }\n\n /**\n * Completes the provider round trip. Runs once per landing: the URL is\n * cleaned immediately so a refresh cannot resend a single-use access code.\n */\n private async handleOAuthCallback(): Promise<void> {\n if (this.callbackDone) return;\n this.callbackDone = true;\n\n const params = new URLSearchParams(globalThis.location?.search ?? \"\");\n const accessCode = params.get(\"access_code\");\n const denied = params.get(\"error\");\n const client = this.resolvedClient;\n\n if (denied) {\n this.cleanCallbackUrl();\n this.banner = this.msg.oauthDenied;\n return;\n }\n\n if (!accessCode || !client) return;\n\n const nonce = globalThis.sessionStorage?.getItem(this.nonceStorageKey);\n this.cleanCallbackUrl();\n\n if (!nonce) {\n // No nonce means this response cannot be tied to a flow this browser\n // started, so it is not safe to exchange.\n this.banner = this.msg.genericErrorMessage;\n return;\n }\n\n await this.withLoading(async () => {\n await client.completeOAuth({ access_code: accessCode, nonce }, this.signal());\n globalThis.sessionStorage?.removeItem(this.nonceStorageKey);\n });\n }\n\n /** The small logo above a screen title: image when given one, else text. */\n private renderLogo() {\n if (this.logoUrl) {\n return html`<img class=\"logo-img\" part=\"logo\" src=${this.logoUrl} alt=${this.logoText} />`;\n }\n return this.logoText ? html`<div class=\"logo-dot\" part=\"logo\">${this.logoText}</div>` : nothing;\n }\n\n /** The larger logo in the split layout's brand panel. */\n private renderBrandMark() {\n if (this.logoUrl) {\n return html`<img class=\"brand-img\" part=\"logo\" src=${this.logoUrl} alt=${this.logoText} />`;\n }\n return this.logoText\n ? html`<div class=\"brand-mark\" part=\"logo\">${this.logoText}</div>`\n : nothing;\n }\n\n private renderBranding() {\n if (!this.branding) return nothing;\n return html`<div class=\"branding\" part=\"branding\">\n <a href=\"https://singlebase.cloud\" target=\"_blank\" rel=\"noopener noreferrer\"\n >${this.msg.brandingLabel}</a\n >\n </div>`;\n }\n\n /** Every screen renders inside this, so the credit appears once and only once. */\n private panel(content: unknown) {\n return html`<div class=\"panel\">${content}${this.renderBranding()}</div>`;\n }\n\n private renderOAuthCallback() {\n return html`\n <div class=\"stack\">\n <div class=\"head\">\n ${this.renderLogo()}\n <h2 class=\"title\" part=\"title\">${this.msg.oauthCallbackTitle}</h2>\n <p class=\"sub\">${this.msg.oauthCallbackSub}</p>\n </div>\n ${\n this.banner\n ? html`<div class=\"banner\" part=\"banner\" role=\"alert\">${this.banner}</div>`\n : html`<div class=\"stack\" style=\"align-items:center;\">\n <span class=\"spinner\" part=\"spinner\"></span>\n </div>`\n }\n ${\n this.banner\n ? html`<button type=\"button\" class=\"ghost\" @click=${() => this.goto(\"signin\")}>\n <span>${this.msg.backCta}</span>\n </button>`\n : nothing\n }\n </div>\n `;\n }\n\n private setScreen(screen: GuestScreen, patch: Record<string, unknown> = {}) {\n const changed = this.screen !== screen;\n this.screen = screen;\n this.banner = \"\";\n this.emailError = \"\";\n this.passError = \"\";\n Object.assign(this, patch);\n if (changed) {\n this.dispatchEvent(\n new CustomEvent(\"singlebase-screen-change\", {\n detail: { screen },\n bubbles: true,\n composed: true\n })\n );\n }\n }\n\n // ── submit ────────────────────────────────────────────────\n private async withLoading(task: () => Promise<void>) {\n this.loading = true;\n this.banner = \"\";\n try {\n await task();\n } catch (error) {\n this.banner = this.describeError(error);\n } finally {\n this.loading = false;\n }\n }\n\n private describeError(error: unknown): string {\n if (error instanceof SinglebaseAuthError) {\n if (error.code === \"AUTH_RATE_LIMITED\") return this.msg.rateLimitedMessage;\n if (error.code === \"INVALID_TOKEN\") return \"That code is not valid. Check it and try again.\";\n }\n return this.msg.genericErrorMessage;\n }\n\n private get codeValue() {\n return this.code.join(\"\");\n }\n\n private async onSubmit(e?: Event) {\n e?.preventDefault();\n const client = this.resolvedClient;\n if (!client) return;\n const screen = this.activeScreen;\n const c = this.cfg;\n\n if (screen === \"forgot\" || screen === \"otp\") {\n if (!this.email.includes(\"@\")) {\n this.emailError = this.msg.invalidEmailError;\n return;\n }\n const purpose = screen === \"forgot\" ? \"password_reset\" : \"signin\";\n await this.withLoading(async () => {\n await client.requestCode({ email: this.email, purpose }, this.signal());\n this.notice = this.msg.codeSentNeutral;\n this.screen = \"verify\";\n this.verifyNext = screen === \"forgot\" ? \"newpass\" : \"signin_code\";\n this.code = [\"\", \"\", \"\", \"\", \"\", \"\"];\n });\n return;\n }\n\n if (screen === \"verify\") {\n if (this.codeValue.length < 6) {\n this.banner = this.msg.codeIncompleteError;\n return;\n }\n if (this.verifyNext === \"newpass\") {\n // Code is confirmed together with the new password by auth.confirm_code.\n this.setScreen(\"newpass\", { notice: \"\" });\n return;\n }\n await this.withLoading(async () => {\n await client.signIn(\n { email: this.email, grant_type: \"code\", code: this.codeValue },\n this.signal()\n );\n this.notice = \"\";\n });\n return;\n }\n\n if (screen === \"newpass\") {\n if (this.newPass.length < 10) {\n this.newPassError = this.msg.passwordMinError;\n return;\n }\n if (this.newPass !== this.confirmPass) {\n this.newPassError = this.msg.passwordMatchError;\n return;\n }\n await this.withLoading(async () => {\n await client.resetPassword(\n { email: this.email, code: this.codeValue, new_password: this.newPass },\n this.signal()\n );\n this.newPass = \"\";\n this.confirmPass = \"\";\n });\n return;\n }\n\n if (screen === \"invite\") {\n if (!this.firstName.trim() || !this.lastName.trim()) {\n this.banner = \"Enter your first and last name.\";\n return;\n }\n if (this.phone.replace(/\\D/g, \"\").length < 7) {\n this.banner = this.msg.invalidPhoneError;\n return;\n }\n if (this.password.length < 10) {\n this.passError = this.msg.passwordMinError;\n return;\n }\n const code = this.inviteCode || this.codeValue;\n if (code.length < 6) {\n this.banner = this.msg.codeIncompleteError;\n return;\n }\n await this.withLoading(async () => {\n await client.acceptInvite(\n {\n email: this.inviteEmail,\n grant_type: \"code\",\n purpose: \"invite\",\n code,\n password: this.password,\n phone: this.phone\n },\n this.signal()\n );\n });\n return;\n }\n\n if (\n this.stepped &&\n ((screen === \"signup\" && this.step < 2) || (screen === \"signin\" && this.step < 1))\n ) {\n if (!this.email.includes(\"@\")) {\n this.emailError = this.msg.invalidEmailError;\n return;\n }\n this.step += 1;\n return;\n }\n\n if (!this.email.includes(\"@\")) {\n this.emailError = this.msg.invalidEmailError;\n return;\n }\n\n if (screen === \"signup\") {\n if (this.password.length < 8) {\n this.passError = \"Password must be at least 8 characters.\";\n return;\n }\n const [first, ...rest] = this.name.trim().split(/\\s+/);\n await this.withLoading(async () => {\n const result = await client.signUp(\n {\n email: this.email,\n password: this.password,\n first_name: first || this.name,\n last_name: rest.join(\" \") || \"—\"\n },\n this.signal()\n );\n const next = resolveScreen({\n next_action: result.next_action,\n next_operation: result.next_operation\n });\n this.setScreen(\"signin\", {\n notice: \"Account created. Sign in to continue.\",\n step: 0,\n password: \"\",\n needsMfaCode: next === \"signin_with_code\"\n });\n });\n return;\n }\n\n // signin\n if (this.password.length < 8) {\n this.attempts += 1;\n this.passError = \"Password must be at least 8 characters.\";\n this.banner = this.attempts >= 3 ? this.msg.rateLimitedMessage : \"\";\n return;\n }\n await this.withLoading(async () => {\n try {\n await client.signIn(\n {\n email: this.email,\n password: this.password,\n ...(this.needsMfaCode ? { code: this.codeValue } : {})\n },\n this.signal()\n );\n this.step = 0;\n } catch (error) {\n if (error instanceof SinglebaseAuthError && error.code === \"CODE_REQUIRED\") {\n this.needsMfaCode = true;\n await client.requestCode({ email: this.email, purpose: \"signin\" }, this.signal());\n this.notice = this.msg.codeSentNeutral;\n return;\n }\n if (error instanceof SinglebaseAuthError && error.code === \"INVALID_CREDENTIALS\") {\n this.attempts += 1;\n this.banner =\n this.attempts >= 3\n ? this.msg.rateLimitedMessage\n : \"That email and password do not match.\";\n return;\n }\n throw error;\n }\n });\n }\n\n private abortController: AbortController | null = null;\n private signal(): AbortSignal {\n this.abortController?.abort();\n this.abortController = new AbortController();\n return this.abortController.signal;\n }\n\n private onCodeInput(index: number, e: Event) {\n const input = e.target as HTMLInputElement;\n const entered = input.value.replace(/\\D/g, \"\");\n\n // Autofill of a `one-time-code` field arrives as the whole code in one\n // cell; spread it instead of keeping only the last digit.\n if (entered.length > 1) {\n this.fillCode(index, entered);\n return;\n }\n\n const digit = entered.slice(-1);\n const next = this.code.slice();\n next[index] = digit;\n this.code = next;\n this.banner = \"\";\n if (digit) {\n const inputs = this.renderRoot.querySelectorAll<HTMLInputElement>(\n \".code-row input, .code-row-sm input\"\n );\n inputs[index + 1]?.focus();\n }\n }\n\n private onCodePaste(index: number, e: ClipboardEvent) {\n const digits = (e.clipboardData?.getData(\"text\") ?? \"\").replace(/\\D/g, \"\");\n if (!digits) return;\n e.preventDefault();\n this.fillCode(index, digits);\n }\n\n private fillCode(index: number, digits: string) {\n const next = this.code.slice();\n for (let i = 0; i < digits.length && index + i < next.length; i += 1) {\n next[index + i] = digits[i]!;\n }\n this.code = next;\n this.banner = \"\";\n\n const landed = Math.min(index + digits.length, next.length - 1);\n void this.updateComplete.then(() => {\n const inputs = this.renderRoot.querySelectorAll<HTMLInputElement>(\n \".code-row input, .code-row-sm input\"\n );\n inputs[landed]?.focus();\n });\n }\n\n private async onResend() {\n const client = this.resolvedClient;\n if (!client || this.loading) return;\n const purpose = this.verifyNext === \"newpass\" ? \"password_reset\" : \"signin\";\n await this.withLoading(async () => {\n await client.requestCode({ email: this.email, purpose }, this.signal());\n this.notice = \"New code sent.\";\n this.code = [\"\", \"\", \"\", \"\", \"\", \"\"];\n });\n }\n\n private goBack() {\n if (this.step > 0 && [\"forgot\", \"verify\", \"otp\", \"newpass\"].indexOf(this.activeScreen) < 0) {\n this.step -= 1;\n this.banner = \"\";\n this.notice = \"\";\n return;\n }\n this.setScreen(\"signin\", { step: 0, notice: \"\", code: [\"\", \"\", \"\", \"\", \"\", \"\"] });\n }\n\n // ── copy helpers (mirror the mock's titles/subs/ctas maps) ──\n private titleFor(screen: GuestScreen): string {\n const m = this.msg;\n switch (screen) {\n case \"signup\":\n return m.signUpTitle;\n case \"forgot\":\n return m.forgotTitle;\n case \"verify\":\n return m.verifyTitle;\n case \"otp\":\n return m.otpTitle;\n case \"newpass\":\n return m.newPassTitle;\n case \"invite\":\n return m.inviteTitle;\n default:\n return this.signInTitle || m.signInTitle;\n }\n }\n\n private subFor(screen: GuestScreen): string {\n const m = this.msg;\n const c = this.cfg;\n switch (screen) {\n case \"signup\":\n return m.signUpSub;\n case \"forgot\":\n return m.forgotSub;\n case \"verify\":\n return `We sent a 6-digit code to ${this.email || \"your inbox\"}. It expires in 10 minutes.`;\n case \"otp\":\n return m.otpSub;\n case \"newpass\":\n return `Your code is confirmed. Set a new password for ${this.email || \"your account\"}.`;\n case \"invite\":\n return `${this.inviteOrg || \"Acme\"} invited you to join. Set up your account to continue.`;\n default:\n if (!c.allowEmailSignin && !c.allowEmailOtp) return m.signInSubOauthOnly;\n return c.allowOauth ? m.signInSubEmailAndOauth : m.signInSubEmailOnly;\n }\n }\n\n private ctaFor(screen: GuestScreen): string {\n const m = this.msg;\n if (\n this.stepped &&\n ((screen === \"signup\" && this.step < 2) || (screen === \"signin\" && this.step < 1))\n ) {\n return m.continueCta;\n }\n switch (screen) {\n case \"signup\":\n return m.signUpCta;\n case \"forgot\":\n return m.forgotCta;\n case \"verify\":\n return m.verifyCta;\n case \"otp\":\n return m.otpCta;\n case \"newpass\":\n return m.newPassCta;\n case \"invite\":\n return m.inviteCta;\n default:\n return m.signInCta;\n }\n }\n\n private stepPct(): number {\n if (!this.stepped) return 100;\n const total = this.activeScreen === \"signup\" ? 3 : 2;\n return Math.round(((this.step + 1) / total) * 100);\n }\n\n // ── render pieces ─────────────────────────────────────────\n private renderPrimary(label: string) {\n return html`\n <button type=\"submit\" class=\"primary\" part=\"button-primary\" ?disabled=${this.loading}>\n ${this.loading ? html`<span class=\"spinner\" part=\"spinner\"></span>` : nothing}\n <span>${label}</span>\n </button>\n `;\n }\n\n private renderEmailField(id: string) {\n return html`\n <div class=\"field\">\n <label for=${id}>${this.msg.emailLabel}</label>\n <input\n id=${id}\n type=\"email\"\n part=\"input\"\n .value=${this.email}\n placeholder=${this.msg.emailPlaceholder}\n aria-invalid=${this.emailError ? \"true\" : \"false\"}\n ?disabled=${this.loading}\n @input=${(e: Event) => {\n this.email = (e.target as HTMLInputElement).value;\n this.emailError = \"\";\n this.banner = \"\";\n }}\n />\n ${this.emailError ? html`<p class=\"err\">${this.emailError}</p>` : nothing}\n </div>\n `;\n }\n\n private renderPasswordField(id: string, showForgot: boolean) {\n return html`\n <div class=\"field\">\n <div class=\"label-row\">\n <label for=${id}>${this.msg.passwordLabel}</label>\n ${\n showForgot\n ? html`<button\n type=\"button\"\n class=\"link-sm\"\n @click=${() => this.setScreen(\"forgot\", { step: 0 })}\n >\n ${this.msg.forgotLink}\n </button>`\n : nothing\n }\n </div>\n <input\n id=${id}\n type=\"password\"\n part=\"input\"\n .value=${this.password}\n placeholder=${this.msg.passwordPlaceholder}\n aria-invalid=${this.passError ? \"true\" : \"false\"}\n ?disabled=${this.loading}\n @input=${(e: Event) => {\n this.password = (e.target as HTMLInputElement).value;\n this.passError = \"\";\n this.banner = \"\";\n }}\n />\n ${this.passError ? html`<p class=\"err\">${this.passError}</p>` : nothing}\n </div>\n `;\n }\n\n private renderCodeRow(small = false) {\n return html`\n <div class=${small ? \"code-row-sm\" : \"code-row\"} role=\"group\" aria-label=\"Verification code\">\n ${this.code.map(\n (digit, i) => html`\n <input\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"1\"\n part=\"code-box\"\n aria-label=${`Digit ${i + 1}`}\n autocomplete=${i === 0 ? \"one-time-code\" : \"off\"}\n .value=${digit}\n ?disabled=${this.loading}\n @input=${(e: Event) => this.onCodeInput(i, e)}\n @paste=${(e: ClipboardEvent) => this.onCodePaste(i, e)}\n />\n `\n )}\n </div>\n `;\n }\n\n /** The email/password method accordion body for signin, signup and otp. */\n private renderEmailMethodBody(screen: GuestScreen) {\n const c = this.cfg;\n const stepped = this.stepped;\n const showName = screen === \"signup\" && (!stepped || this.step === 0);\n const showEmail =\n (screen === \"signup\" && (!stepped || this.step === 1)) ||\n (screen === \"signin\" && (!stepped || this.step === 0)) ||\n screen === \"otp\";\n const showPassword =\n (screen === \"signup\" && (!stepped || this.step === 2)) ||\n (screen === \"signin\" && (!stepped || this.step === 1));\n const showOtpLink =\n screen === \"signin\" && c.allowEmailSignin && c.allowEmailOtp && (!stepped || this.step === 0);\n\n return html`\n ${\n showName\n ? html`\n <div class=\"field\">\n <label for=${this.uid(\"name\")}>${this.msg.fullNameLabel}</label>\n <input\n id=${this.uid(\"name\")}\n type=\"text\"\n part=\"input\"\n .value=${this.name}\n placeholder=${this.msg.fullNamePlaceholder}\n ?disabled=${this.loading}\n @input=${(e: Event) => (this.name = (e.target as HTMLInputElement).value)}\n />\n </div>\n `\n : nothing\n }\n ${showEmail ? this.renderEmailField(this.uid(\"email\")) : nothing}\n ${showPassword ? this.renderPasswordField(this.uid(\"pass\"), c.allowEmailSignin && screen === \"signin\") : nothing}\n ${\n this.needsMfaCode && screen === \"signin\"\n ? html`\n <div class=\"field\">\n <span class=\"label\">Verification code</span>\n ${this.renderCodeRow(true)}\n </div>\n `\n : nothing\n }\n ${this.renderPrimary(this.ctaFor(screen))}\n ${\n showOtpLink\n ? html`<button\n type=\"button\"\n class=\"edit-link\"\n @click=${() => this.setScreen(\"otp\", { step: 0 })}\n >\n ${this.msg.otpInsteadLink}\n </button>`\n : nothing\n }\n `;\n }\n\n private renderAccordion(screen: GuestScreen) {\n const c = this.cfg;\n const hasEmail =\n (screen === \"signin\" && c.allowEmailSignin) ||\n (screen === \"signup\" && c.allowEmailSignup) ||\n (screen === \"otp\" && c.allowEmailOtp);\n const hasOauth = c.allowOauth;\n if (!hasEmail && !hasOauth) return nothing;\n\n const showHeads = hasEmail && hasOauth;\n const method = !hasEmail ? \"oauth\" : !hasOauth ? \"email\" : this.method || \"email\";\n const emailOpen = method === \"email\";\n const oauthOpen = method === \"oauth\";\n\n const emailTitle =\n screen === \"signup\" ? this.msg.emailMethodTitleSignUp : this.msg.emailMethodTitle;\n const emailMeta =\n screen === \"otp\"\n ? this.msg.emailMethodMetaOtp\n : screen === \"signup\"\n ? this.msg.emailMethodMetaSignUp\n : this.msg.emailMethodMeta;\n\n const item = (\n open: boolean,\n title: string,\n meta: string,\n body: unknown,\n onToggle: () => void,\n key: string\n ) => html`\n <div class=\"acc-item ${open ? \"open\" : \"\"} ${showHeads ? \"\" : \"bare\"}\" part=\"acc-item\">\n ${\n showHeads\n ? html`\n <button\n type=\"button\"\n class=\"acc-head\"\n aria-expanded=${open ? \"true\" : \"false\"}\n aria-controls=${this.uid(`acc-${key}`)}\n @click=${onToggle}\n >\n <span class=\"chev\" aria-hidden=\"true\">›</span>\n <span class=\"acc-title\">${title}</span>\n <span class=\"acc-meta\">${meta}</span>\n </button>\n `\n : nothing\n }\n <div class=\"acc-body\" id=${this.uid(`acc-${key}`)}>\n <div class=\"acc-clip\">\n <div class=\"acc-inner\">${body}</div>\n </div>\n </div>\n </div>\n `;\n\n const emailItem = hasEmail\n ? item(\n emailOpen,\n emailTitle,\n emailMeta,\n this.renderEmailMethodBody(screen),\n () => (this.method = emailOpen ? \"\" : \"email\"),\n \"email\"\n )\n : nothing;\n\n const oauthItem = hasOauth\n ? item(\n oauthOpen,\n this.msg.oauthMethodTitle,\n this.msg.oauthMethodMeta,\n html`<singlebase-authui-buttons\n type=\"oauth\"\n embedded\n theme=${ifDefined(this.theme)}\n density=${ifDefined(this.density)}\n field-style=${ifDefined(this.fieldStyle)}\n .client=${this.resolvedClient}\n .messages=${this.messages}\n .settings=${this.settings ?? this.settingsCtl.settings}\n intent=${screen === \"signup\" ? \"signup\" : \"signin\"}\n ></singlebase-authui-buttons>`,\n () => (this.method = oauthOpen ? \"\" : \"oauth\"),\n \"oauth\"\n )\n : nothing;\n\n return html`\n <div class=\"acc-wrap\">\n ${this.oauthPlacement === \"top\" ? html`${oauthItem}${emailItem}` : html`${emailItem}${oauthItem}`}\n </div>\n `;\n }\n\n private renderScreenBody(screen: GuestScreen) {\n const c = this.cfg;\n const showMethods = [\"signin\", \"signup\", \"otp\"].indexOf(screen) >= 0;\n\n if (showMethods) return this.renderAccordion(screen);\n\n if (screen === \"forgot\") {\n return html`<div class=\"fields\">${this.renderEmailField(this.uid(\"reset\"))}</div>`;\n }\n\n if (screen === \"verify\") {\n return html`\n ${this.renderCodeRow()}\n <div class=\"resend-row\">\n <span class=\"hint\">${this.msg.resendQuestion}</span>\n <button type=\"button\" class=\"link-sm\" ?disabled=${this.loading} @click=${this.onResend}>\n ${this.msg.resendCta}\n </button>\n </div>\n `;\n }\n\n if (screen === \"newpass\") {\n return html`\n <div class=\"fields\">\n <div class=\"field\">\n <label for=${this.uid(\"newpass\")}>${this.msg.newPasswordLabel}</label>\n <input\n id=${this.uid(\"newpass\")}\n type=\"password\"\n part=\"input\"\n .value=${this.newPass}\n placeholder=${this.msg.newPasswordPlaceholder}\n aria-invalid=${this.newPassError ? \"true\" : \"false\"}\n ?disabled=${this.loading}\n @input=${(e: Event) => {\n this.newPass = (e.target as HTMLInputElement).value;\n this.newPassError = \"\";\n }}\n />\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"confirmpass\")}>${this.msg.confirmPasswordLabel}</label>\n <input\n id=${this.uid(\"confirmpass\")}\n type=\"password\"\n part=\"input\"\n .value=${this.confirmPass}\n placeholder=${this.msg.confirmPasswordPlaceholder}\n aria-invalid=${this.newPassError ? \"true\" : \"false\"}\n ?disabled=${this.loading}\n @input=${(e: Event) => {\n this.confirmPass = (e.target as HTMLInputElement).value;\n this.newPassError = \"\";\n }}\n />\n ${this.newPassError ? html`<p class=\"err\">${this.newPassError}</p>` : nothing}\n </div>\n </div>\n `;\n }\n\n if (screen === \"invite\") {\n return html`\n <div class=\"fields\">\n <div class=\"invite-box\">\n <span class=\"invite-label\">${this.msg.invitedEmailLabel}</span>\n <span class=\"invite-email\">${this.inviteEmail}</span>\n </div>\n ${\n this.inviteCode\n ? nothing\n : html`<div class=\"field\">\n <span class=\"label\">Invite code</span>\n ${this.renderCodeRow(true)}\n </div>`\n }\n <div class=\"two-up\">\n <div class=\"field\">\n <label for=${this.uid(\"first\")}>${this.msg.firstNameLabel}</label>\n <input\n id=${this.uid(\"first\")}\n type=\"text\"\n part=\"input\"\n .value=${this.firstName}\n placeholder=${this.msg.firstNamePlaceholder}\n ?disabled=${this.loading}\n @input=${(e: Event) => (this.firstName = (e.target as HTMLInputElement).value)}\n />\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"last\")}>${this.msg.lastNameLabel}</label>\n <input\n id=${this.uid(\"last\")}\n type=\"text\"\n part=\"input\"\n .value=${this.lastName}\n placeholder=${this.msg.lastNamePlaceholder}\n ?disabled=${this.loading}\n @input=${(e: Event) => (this.lastName = (e.target as HTMLInputElement).value)}\n />\n </div>\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"phone\")}>${this.msg.phoneLabel}</label>\n <input\n id=${this.uid(\"phone\")}\n type=\"tel\"\n part=\"input\"\n .value=${this.phone}\n placeholder=${this.msg.phonePlaceholder}\n ?disabled=${this.loading}\n @input=${(e: Event) => (this.phone = (e.target as HTMLInputElement).value)}\n />\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"invitepass\")}>${this.msg.passwordLabel}</label>\n <input\n id=${this.uid(\"invitepass\")}\n type=\"password\"\n part=\"input\"\n .value=${this.password}\n placeholder=${this.msg.newPasswordPlaceholder}\n aria-invalid=${this.passError ? \"true\" : \"false\"}\n ?disabled=${this.loading}\n @input=${(e: Event) => {\n this.password = (e.target as HTMLInputElement).value;\n this.passError = \"\";\n }}\n />\n ${this.passError ? html`<p class=\"err\">${this.passError}</p>` : nothing}\n </div>\n </div>\n `;\n }\n\n return nothing;\n }\n\n private renderGuest(screen: GuestScreen) {\n const c = this.cfg;\n const showPrimary = [\"forgot\", \"verify\", \"newpass\", \"invite\"].indexOf(screen) >= 0;\n const showBack =\n (this.stepped && this.step > 0) ||\n [\"forgot\", \"verify\", \"otp\", \"newpass\"].indexOf(screen) >= 0;\n const showFoot =\n (screen === \"signin\" && c.allowEmailSignup) || (screen === \"signup\" && c.allowEmailSignin);\n const showStepBar = this.stepped && (screen === \"signin\" || screen === \"signup\");\n\n return html`\n <form class=\"stack\" @submit=${this.onSubmit} novalidate>\n <div class=\"head\">\n ${this.layout !== \"split\" ? this.renderLogo() : nothing}\n <h2 class=\"title\" part=\"title\">${this.titleFor(screen)}</h2>\n <p class=\"sub\">${this.subFor(screen)}</p>\n </div>\n\n ${\n showStepBar\n ? html`<div class=\"step-bar\">\n <div class=\"step-fill\" style=\"width:${this.stepPct()}%\"></div>\n </div>`\n : nothing\n }\n ${this.banner ? html`<div class=\"banner\" part=\"banner\" role=\"alert\">${this.banner}</div>` : nothing}\n ${this.notice ? html`<div class=\"notice\" part=\"notice\" role=\"status\">${this.notice}</div>` : nothing}\n ${this.renderScreenBody(screen)}\n ${\n showPrimary || showBack\n ? html`\n <div class=\"actions\">\n ${showPrimary ? this.renderPrimary(this.ctaFor(screen)) : nothing}\n ${\n showBack\n ? html`<button type=\"button\" class=\"ghost\" @click=${this.goBack}>\n ${this.msg.backCta}\n </button>`\n : nothing\n }\n </div>\n `\n : nothing\n }\n ${\n showFoot\n ? html`\n <p class=\"foot\">\n <span\n >${screen === \"signup\" ? this.msg.footTextSignUp : this.msg.footTextSignIn}</span\n >\n <button\n type=\"button\"\n class=\"link\"\n @click=${() =>\n this.setScreen(screen === \"signup\" ? \"signin\" : \"signup\", {\n step: 0,\n notice: \"\"\n })}\n >\n ${screen === \"signup\" ? this.msg.footActionSignUp : this.msg.footActionSignIn}\n </button>\n </p>\n `\n : nothing\n }\n ${this.renderConsent()}\n\n <span class=\"sr-only\" role=\"status\" aria-live=\"polite\">\n ${this.loading ? \"Submitting…\" : \"\"}\n </span>\n </form>\n `;\n }\n\n private renderBlocked() {\n const c = this.cfg;\n const disabled = !c.authEnabled;\n return html`\n <div class=\"stack\">\n <div class=\"head\">\n ${this.layout !== \"split\" ? this.renderLogo() : nothing}\n <h2 class=\"title\" part=\"title\">\n ${disabled ? this.msg.blockedTitleDisabled : this.msg.blockedTitleUnavailable}\n </h2>\n <p class=\"sub\">\n ${disabled ? this.msg.blockedBodyDisabled : this.msg.blockedBodyUnavailable}\n </p>\n </div>\n <div class=\"notice\" part=\"notice\" role=\"status\">${this.msg.blockedHint}</div>\n </div>\n `;\n }\n\n /**\n * Shown when a signed-in visitor lands on a guest screen. Rather than\n * presenting a sign-in form to someone already signed in, offer the two\n * things they could actually want: carry on, or switch accounts.\n */\n private renderSignedIn() {\n const user = this.auth.state.status === \"authenticated\" ? this.auth.state.user : null;\n const target = this.redirectTarget;\n\n return html`\n <div class=\"stack\">\n <div class=\"head\">\n ${this.renderLogo()}\n <h2 class=\"title\" part=\"title\">${this.msg.alreadySignedInTitle}</h2>\n <p class=\"sub\">\n ${\n user?.email\n ? `${this.msg.alreadySignedInSubPrefix} ${user.email}.`\n : this.msg.alreadySignedInSub\n }\n </p>\n </div>\n\n <div class=\"actions\">\n <button type=\"button\" class=\"primary\" part=\"button-primary\" @click=${this.onContinue}>\n <span>${this.msg.continueCta}</span>\n </button>\n <button type=\"button\" class=\"ghost\" @click=${this.onInterstitialSignOut}>\n <span>${this.msg.signOutCta}</span>\n </button>\n </div>\n\n ${target ? nothing : html`<p class=\"hint\">${this.msg.continueHint}</p>`}\n </div>\n `;\n }\n\n private onContinue = () => {\n if (this.followRedirect()) return;\n // Nothing to redirect to: show the account view and let the host route\n // off the event if it wants to.\n this.dispatchEvent(\n new CustomEvent(\"singlebase-continue\", {\n detail: { user: this.getUser() },\n bubbles: true,\n composed: true\n })\n );\n this.goto(\"account\");\n };\n\n private onInterstitialSignOut = async () => {\n await this.resolvedClient?.logout();\n this.goto(\"signin\");\n };\n\n /** The Terms/Privacy consent line, rendered only when the host supplies a link. */\n private renderConsent() {\n if (!this.tosUrl && !this.privacyUrl) return nothing;\n const tos = this.tosUrl\n ? html`<a class=\"link-sm\" href=${this.tosUrl} target=\"_blank\" rel=\"noopener noreferrer\"\n >${this.msg.termsLabel}</a\n >`\n : nothing;\n const privacy = this.privacyUrl\n ? html`<a class=\"link-sm\" href=${this.privacyUrl} target=\"_blank\" rel=\"noopener noreferrer\"\n >${this.msg.privacyLabel}</a\n >`\n : nothing;\n\n return html`\n <p class=\"hint\" part=\"consent\">\n ${this.msg.consentPrefix}\n ${tos}${\n this.tosUrl && this.privacyUrl ? html` ${this.msg.consentJoin} ` : nothing\n }${privacy}.\n </p>\n `;\n }\n\n protected override render() {\n const screen = this.activeScreen;\n\n if (screen === \"oauth-callback\") {\n void this.handleOAuthCallback();\n return this.panel(this.renderOAuthCallback());\n }\n\n if (screen === \"account\") {\n // `no-account-view` is the SPA case: render nothing and let the host\n // route away on the signin event instead.\n if (this.noAccountView) return nothing;\n return this.panel(html`\n <singlebase-authui-account\n theme=${ifDefined(this.theme)}\n density=${ifDefined(this.density)}\n field-style=${ifDefined(this.fieldStyle)}\n .client=${this.resolvedClient}\n .messages=${this.messages}\n logo-text=${this.logoText}\n logo-url=${this.logoUrl}\n ></singlebase-authui-account>\n `);\n }\n\n if (this.showsSignedInInterstitial) {\n if (this.noAccountView) return nothing;\n return this.panel(this.renderSignedIn());\n }\n\n const c = this.cfg;\n const noMethods = !c.allowEmailSignin && !c.allowEmailOtp && !c.allowOauth;\n const blocked = !c.authEnabled || (noMethods && isGuestScreen(screen));\n\n return html`\n ${\n this.layout === \"split\"\n ? html`\n <div class=\"brand-panel\">\n ${this.renderBrandMark()}\n ${this.brandLine ? html`<div class=\"brand-copy\">${this.brandLine}</div>` : nothing}\n ${this.brandFoot ? html`<div class=\"brand-foot\">${this.brandFoot}</div>` : nothing}\n </div>\n `\n : nothing\n }\n ${this.panel(blocked ? this.renderBlocked() : this.renderGuest(screen as GuestScreen))}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"singlebase-authui\": SinglebaseAuthScreen;\n }\n}\n","import { html } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { matchesPredicate, validatePredicate, type Predicate } from \"@singlebase/core\";\nimport { SinglebaseElementBase } from \"./base.js\";\n\nexport type GuardState = \"loading\" | \"authenticated\" | \"unauthenticated\";\n\nconst GUARD_STATES: GuardState[] = [\"loading\", \"authenticated\", \"unauthenticated\"];\n\n/**\n * Renders content conditionally on auth state, and optionally on a predicate\n * over the signed-in profile.\n *\n * Two shapes, because wrapping a single line of markup in a slotted <div> is\n * a lot of ceremony:\n *\n * <!-- long form: one guard, several states -->\n * <singlebase-authui-guard>\n * <div slot=\"loading\">Checking…</div>\n * <div slot=\"authenticated\">Welcome back</div>\n * <div slot=\"unauthenticated\"><singlebase-authui></singlebase-authui></div>\n * </singlebase-authui-guard>\n *\n * <!-- short form: the guard itself carries the state -->\n * <singlebase-authui-guard slot=\"loading\">Checking…</singlebase-authui-guard>\n *\n * With a predicate it also filters on the profile:\n *\n * <singlebase-authui-guard slot=\"authenticated\" predicate='{\"roles\":{\"$in\":[\"admin\"]}}'>\n * <admin-panel></admin-panel>\n * </singlebase-authui-guard>\n *\n * A predicate only ever narrows the *authenticated* state: a signed-out\n * visitor is unauthenticated whether or not a filter is present, so a guard\n * can never leak content by failing open.\n */\n@customElement(\"singlebase-authui-guard\")\nexport class SinglebaseAuthGuard extends SinglebaseElementBase {\n /**\n * Short form. When set, every child of this guard belongs to that state and\n * no per-child `slot` attributes are needed.\n *\n * Note this reuses the standard `slot` attribute name, which is inert here:\n * the guard is not itself inside another shadow root's slot, so the name is\n * free to mean \"the state these children belong to\".\n */\n @property({ reflect: true })\n accessor slot = \"\";\n\n /**\n * One-level, Mongo-style filter over the signed-in `user_profile`.\n * Dot notation reaches nested values; see core's predicate module for the\n * supported operators.\n */\n @property({\n converter: {\n fromAttribute: (value: string | null): Predicate | null => {\n if (!value) return null;\n try {\n return JSON.parse(value) as Predicate;\n } catch {\n console.error(\"[singlebase] guard predicate is not valid JSON:\", value);\n return null;\n }\n },\n toAttribute: (value: Predicate | null) => (value ? JSON.stringify(value) : null)\n }\n })\n accessor predicate: Predicate | null = null;\n\n /**\n * What to show when the user is signed in but the predicate does not match.\n * Defaults to \"unauthenticated\" so a filtered guard degrades to the\n * signed-out branch; set \"hidden\" to render nothing at all.\n */\n @property({ attribute: \"on-mismatch\" })\n accessor onMismatch: \"unauthenticated\" | \"hidden\" = \"unauthenticated\";\n\n private warnedFor: string | null = null;\n\n protected override createRenderRoot() {\n // Light DOM: the host's own markup stays the host's, and the hidden\n // toggling below applies to real light-DOM children.\n return this;\n }\n\n /** The state this guard currently resolves to, after applying the predicate. */\n get activeState(): GuardState | \"hidden\" {\n const status = this.auth.state.status;\n\n if (status === \"loading\") return \"loading\";\n if (status !== \"authenticated\") return \"unauthenticated\";\n\n if (!this.predicate) return \"authenticated\";\n\n this.warnOnce(this.predicate);\n const user = this.auth.state.user;\n if (matchesPredicate(user, this.predicate)) return \"authenticated\";\n return this.onMismatch === \"hidden\" ? \"hidden\" : \"unauthenticated\";\n }\n\n /** Surfaces a malformed predicate once, rather than silently never matching. */\n private warnOnce(predicate: Predicate) {\n const key = JSON.stringify(predicate);\n if (this.warnedFor === key) return;\n this.warnedFor = key;\n for (const problem of validatePredicate(predicate)) {\n console.warn(`[singlebase] <singlebase-authui-guard> predicate: ${problem}`);\n }\n }\n\n override render() {\n const active = this.activeState;\n\n if (this.slot) {\n // Short form: the whole guard is shown or hidden as one unit.\n const show = GUARD_STATES.includes(this.slot as GuardState) && this.slot === active;\n this.toggleAttribute(\"hidden\", !show);\n return html`<slot></slot>`;\n }\n\n this.toggleAttribute(\"hidden\", false);\n for (const child of Array.from(this.children)) {\n const childSlot = child.getAttribute(\"slot\");\n child.toggleAttribute(\"hidden\", childSlot !== active);\n }\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"singlebase-authui-guard\": SinglebaseAuthGuard;\n }\n}\n","import { css, html, nothing, type PropertyValues } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { getPath } from \"@singlebase/core\";\nimport { SinglebaseElementBase } from \"./base.js\";\nimport { initialsOf } from \"../utils/profile.js\";\n\n/** Where the avatar looks for its image when no path is given. */\nconst DEFAULT_AVATAR_PATH = \"profile_photo\";\n\n/**\n * Displays one value from the signed-in profile, as text or as an avatar.\n *\n * Hello <singlebase-authui-display path=\"first_name\" fallback=\"there\"></singlebase-authui-display>\n * <singlebase-authui-display avatar></singlebase-authui-display>\n *\n * Three rules shape the behaviour:\n *\n * - While auth state is still loading it renders nothing. Showing the\n * fallback first would mean every signed-in visitor watches \"Hello there\"\n * flip to \"Hello Ada\" on each page load.\n * - Values resolve against `user_profile` and nothing else. The element\n * deliberately cannot reach session or token data, which must never be\n * written into the DOM.\n * - Values are rendered as text, never as markup. Fields like first_name are\n * supplied by the user at signup, so they are untrusted by definition.\n */\n@customElement(\"singlebase-authui-display\")\nexport class SinglebaseAuthDisplay extends SinglebaseElementBase {\n static override styles = [\n ...SinglebaseElementBase.styles,\n css`\n /* Text sits in a sentence; an avatar is a box the host sizes. */\n :host {\n display: inline;\n }\n\n :host([avatar]) {\n display: inline-block;\n width: 42px;\n height: 42px;\n vertical-align: middle;\n }\n\n img,\n .initials {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: inherit;\n box-sizing: border-box;\n }\n\n img {\n object-fit: cover;\n }\n\n /* Matches the avatar in the account view. */\n .initials {\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--sb-surface-alt, #fafafa);\n border: 1px dashed var(--sb-border, #e4e6e9);\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 0.8em;\n color: var(--sb-muted-ink, #61666c);\n user-select: none;\n }\n `\n ];\n\n /**\n * Dot-notated path into the profile: \"first_name\", \"metadata.tier\". In\n * avatar mode it names the image field and defaults to \"profile_photo\".\n */\n @property() accessor path = \"\";\n\n /** Shown when signed out, or when the value is empty. Text mode only. */\n @property() accessor fallback = \"\";\n\n /** Render an image with an initials fallback instead of text. */\n @property({ type: Boolean, reflect: true }) accessor avatar = false;\n\n /**\n * Alternative text for the avatar image. Left empty the image is treated as\n * decorative, which is right when a name sits beside it — pass a value only\n * when the avatar is the sole identifier.\n */\n @property() accessor alt = \"\";\n\n /** Set when the image 404s, so a dead URL falls back to initials. */\n @state() private accessor imageFailed = false;\n\n override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n // A new source deserves a fresh attempt.\n if (changed.has(\"path\") || changed.has(\"avatar\")) this.imageFailed = false;\n }\n\n private get profile() {\n const state = this.auth.state;\n return state.status === \"authenticated\" ? state.user : null;\n }\n\n /** The resolved value as a string, or \"\" when there is nothing to show. */\n private get textValue(): string {\n const profile = this.profile;\n if (!profile || !this.path) return \"\";\n\n const value = getPath(profile, this.path);\n if (value === null || value === undefined || value === \"\") return \"\";\n if (Array.isArray(value)) return value.filter((v) => v != null).join(\", \");\n // An object would stringify to \"[object Object]\"; treat it as absent.\n if (typeof value === \"object\") return \"\";\n return String(value);\n }\n\n private get avatarSrc(): string {\n const profile = this.profile;\n if (!profile) return \"\";\n const value = getPath(profile, this.path || DEFAULT_AVATAR_PATH);\n return typeof value === \"string\" ? value : \"\";\n }\n\n protected override render() {\n // Nothing at all until the session has been read — see the class comment.\n if (this.auth.state.status === \"loading\") return nothing;\n\n if (this.avatar) return this.renderAvatar();\n\n const value = this.textValue;\n if (value) return html`<span part=\"text\">${value}</span>`;\n return this.fallback ? html`<span part=\"text\">${this.fallback}</span>` : nothing;\n }\n\n private renderAvatar() {\n const profile = this.profile;\n if (!profile) return nothing;\n\n const src = this.avatarSrc;\n if (src && !this.imageFailed) {\n return html`<img\n part=\"avatar-image\"\n src=${src}\n alt=${this.alt}\n @error=${() => (this.imageFailed = true)}\n />`;\n }\n\n return html`<span\n part=\"avatar-initials\"\n class=\"initials\"\n aria-hidden=${this.alt ? \"false\" : \"true\"}\n >${initialsOf(profile)}</span\n >`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"singlebase-authui-display\": SinglebaseAuthDisplay;\n }\n}\n","/**\n * Entry point for the self-contained `<script type=\"module\">` build.\n *\n * On top of registering every element it does two things the npm entry point\n * deliberately does not:\n *\n * 1. exposes the SDK on `window.Singlebase`, so a page with no bundler can\n * still reach `Singlebase.SinglebaseClient(...)`;\n * 2. reads configuration off its own <script> tag, so the common case —\n * \"drop in a tag, show a sign-in box\" — needs no JavaScript at all.\n *\n * Only the `wk_`-prefixed web key ever belongs in these attributes. They are\n * public page source; a root, server or agent key must never appear here.\n */\nimport { SinglebaseClient, type SinglebaseClientOptions } from \"@singlebase/singlebase-sdk\";\n\nexport * from \"./index.js\";\nexport { SinglebaseClient, SinglebaseAuth } from \"@singlebase/singlebase-sdk\";\n\nfunction autoConfig(): SinglebaseClientOptions | null {\n const script =\n (document.currentScript as HTMLScriptElement | null) ??\n document.querySelector<HTMLScriptElement>(\"script[data-singlebase-api-key]\");\n if (!script) return null;\n\n const { baseUrl, singlebaseUrlAccessKey, singlebaseApiKey, singlebaseBaseUrl } =\n script.dataset as Record<string, string | undefined>;\n\n const apiKey = singlebaseApiKey;\n if (!apiKey) return null;\n\n // Only what the tag actually sets: the SDK supplies the default base URL,\n // and the access key is optional.\n const config: SinglebaseClientOptions = { apiKey };\n const base = singlebaseBaseUrl ?? baseUrl;\n if (base) config.baseUrl = base;\n if (singlebaseUrlAccessKey) config.urlAccessKey = singlebaseUrlAccessKey;\n return config;\n}\n\nif (typeof document !== \"undefined\") {\n const config = autoConfig();\n if (config) {\n try {\n // Constructing the client registers it as the page default, which is\n // what lets a bare <singlebase-authui> find a session.\n SinglebaseClient(config);\n } catch (error) {\n console.error(\"[singlebase] auto-configuration failed:\", error);\n }\n }\n\n const globalScope = globalThis as unknown as Record<string, unknown>;\n globalScope.Singlebase = {\n ...(globalScope.Singlebase as Record<string, unknown> | undefined),\n SinglebaseClient\n };\n}\n"],"names":["g","r","L","z","e","k","p","C","P","n","t","B","m","s","o","i","h","j","X$1","A","K","V","l","E","d","I","R","M","b","w","S","T","D","H","G","te","re","ne","se","x","v","J","W","u","q","U","$","oe","ie","y","F","Y","ae","O","Q","a","N","_","Z","ce","le","fe","V$1","f","ee","X","n$3","c","y$1","_a","_b","AuthController","host","__publicField","client","state","TOKEN_DEFAULTS","tokenDefaults","css","unsafeCSS","sharedStyles","defaultMessages","resolveMessages","overrides","SinglebaseElementBase","LitElement","__privateAdd","_client","_messages","_theme","_density","_fieldStyle","__privateGet","__privateSet","getDefaultClient","shared","config","key","AUTHUI_PROP_KEYS","value","authUIAttributeFor","name","changed","__decorateClass","property","resolveRedirectTarget","candidate","currentHref","onRefused","here","target","SettingsController","override","pending","settings","error","BRIDGED_EVENTS","SPEC_ALIASES","callbackPropFor","event","__","EventBridge","detail","callback","init","alias","off","SinglebaseFormBase","_phase","_formError","_noticeMessage","task","SinglebaseAuthError","hint","mapErrorToHint","html","fullNameOf","user","initialsOf","word","email","defaultUploadMessages","resolveUploadMessages","fill","template","values","match","UNITS","parseSize","amount","formatSize","bytes","fileExtension","filename","dot","extensionOf","acceptsFile","accept","type","rules","rule","lowerName","lowerType","acceptSummary","parts","slash","fileKey","file","renameKeepingExtension","original","typed","clean","extension","UNKNOWN","PDF_HEAD","PDF_TAIL","MAX_STREAMS","MAX_INFLATED","OOXML","inspectFile","inspectPdf","inspectOoxml","isInspectable","head","bytesOf","tail","text","latin1","encrypted","pages","pageCountIn","pageCountInStreams","max","direct","inflated","streams","start","end","out","inflate","magic","isCompoundFile","app","readZipEntry","tag","byte","wanted","tailSize","eocd","size","offset","cd","decoder","method","compressed","nameLength","extraLength","commentLength","localOffset","local","data","blob","format","stream","jsonAttr","parsed","flagAttr","CONFIG_KEYS","SinglebaseUploader","_view","_dropzone","_allowRename","_autoUpload","_branding","_logoUrl","_logoText","_heading","_description","_maxFiles","_maxSize","_minSize","_accept","_rules","_bucket","_metadata","_options","_publicRead","_redirectUrl","_onComplete","_onError","_items","_notice","_busy","_dragging","_editing","active","item","sum","source","releasePreview","rowOf","inputs","input","result","progress","row","entry","completed","failed","errorMessage","list","finished","limit","next","before","staged","problem","maxBytes","minBytes","previewFor","facts","message","reason","dropped","kinds","nothing","editable","showDrop","customElement","PHOTO_OPTIONS","PHOTO_ACCEPT","SinglebaseAccountScreen","_settings","_nonceStorageKey","_editMode","_toast","_photoBusy","_photoFailed","_profileSaved","_passSaved","_profileError","_newPassError","_deleteStage","_confirmText","_dFirst","_dLast","_dPhone","_dEmail","_emailStep","_dNewEmail","_emailCode","_emailError","_emailSaved","_curPass","_newPass","_confirmPass","createFilesUploadApi","reading","locked","providerId","nonce","oauth_redirect_url","marks","id","photo","summary","label","providers","SinglebaseAuthButtons","_type","_intent","_provider","_providerName","_embedded","intent","linking","idToken","refreshToken","primary","rest","GUEST_SCREENS","PROTECTED_SCREENS","ALL_SCREENS","isGuestScreen","isProtectedScreen","isScreen","SinglebaseAuthScreen","_initialScreen","_screen","_noAccountView","_authEnabled","_allowEmailSignin","_allowEmailSignup","_allowEmailOtp","_allowOauth","_allowAccountCreation","_layout","_oauthPlacement","_stepped","_brandLine","_brandFoot","_signInTitle","_tosUrl","_privacyUrl","_inviteEmail","_inviteOrg","_inviteCode","_step","_method","_email","_password","_name","_firstName","_lastName","_phone","_code","_verifyNext","_loading","_banner","_passError","_attempts","_needsMfaCode","_callbackDone","offGoto","screen","offSignin","mfa","raw","authenticated","requested","params","url","accessCode","denied","content","patch","purpose","code","first","resolveScreen","index","entered","digit","digits","landed","total","showForgot","small","stepped","showName","showEmail","showPassword","showOtpLink","hasEmail","hasOauth","showHeads","emailOpen","oauthOpen","emailTitle","emailMeta","open","title","meta","body","onToggle","emailItem","oauthItem","ifDefined","showPrimary","showBack","showFoot","showStepBar","disabled","tos","privacy","noMethods","blocked","GUARD_STATES","SinglebaseAuthGuard","_slot","_predicate","_onMismatch","status","matchesPredicate","predicate","validatePredicate","show","child","childSlot","DEFAULT_AVATAR_PATH","SinglebaseAuthDisplay","_path","_fallback","_avatar","_alt","_imageFailed","profile","getPath","src","autoConfig","script","baseUrl","singlebaseUrlAccessKey","singlebaseApiKey","singlebaseBaseUrl","apiKey","base","SinglebaseClient","globalScope"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GC1C3CI,KAAeF;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,GCqKf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A;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AA+QF,CAAA;AAKSyB,EAAA;AAAA,EADRC,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","x_google_ignoreList":[2,3,4,5,6,7,8,9]}
1
+ {"version":3,"file":"singlebase-elements.min.js","sources":["../../core/dist/index.js","../../singlebase-sdk/dist/index.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/css-tag.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/reactive-element.js","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/lit-html.js","../../../node_modules/.pnpm/lit-element@4.2.2/node_modules/lit-element/lit-element.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/custom-element.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/property.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/state.js","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/if-defined.js","../src/controllers/auth-controller.ts","../src/styles/tokens.ts","../src/styles/shared.ts","../src/messages.ts","../src/elements/base.ts","../src/utils/redirect.ts","../src/controllers/settings-controller.ts","../src/controllers/event-bridge.ts","../src/elements/form-base.ts","../src/utils/profile.ts","../src/upload-messages.ts","../src/utils/files.ts","../src/utils/inspect.ts","../src/elements/uploader.ts","../src/elements/account-screen.ts","../src/elements/buttons.ts","../src/elements/auth-screen.ts","../src/elements/guard.ts","../src/elements/display.ts","../src/standalone.ts"],"sourcesContent":["class g extends Error {\n constructor(t, r) {\n super(t.message), this.name = \"SinglebaseError\", this.status = t.status, this.type = t.type, this.code = t.message, this.details = t.details, this.traceId = t.trace_id ?? null, this.cause = r;\n }\n static fromNetworkError(t) {\n return new g(\n {\n type: \"NETWORK_ERROR\",\n status: 0,\n message: \"NETWORK_ERROR\"\n },\n t\n );\n }\n}\nconst L = {\n INVALID_PAYLOAD: \"highlight_invalid_fields\",\n INVALID_CREDENTIALS: \"generic_credentials_message\",\n CODE_REQUIRED: \"reveal_code_input\",\n INVALID_TOKEN: \"expired_or_invalid_code_message\",\n INVALID_ID_TOKEN: \"attempt_refresh_or_signout\",\n INVALID_BEARER_TOKEN: \"attempt_refresh_or_signout\",\n INVALID_SESSION: \"clear_session_and_ask_signin\",\n INVALID_TOKEN_AUDIENCE: \"clear_session_config_error\",\n REQUIRE_PASSWORD_CHANGE: \"route_to_recovery_or_invite\",\n INVALID_PASSWORD: \"show_password_requirements\",\n MISSING_PROFILE_DATA: \"require_changed_field\",\n AUTH_RATE_LIMITED: \"disable_retry_show_rate_limited\",\n AUTH_DISABLED: \"render_auth_unavailable\",\n EMAIL_PROVIDER_DISABLED: \"hide_email_forms\",\n EMAIL_SIGNUP_DISABLED: \"hide_signup\",\n OAUTH_DISABLED: \"hide_oauth\",\n OAUTH_SIGNUP_DISABLED: \"remove_oauth_from_signup\",\n INVALID_OAUTH_PROVIDER: \"refresh_settings_hide_provider\",\n INVALID_NONCE: \"restart_oauth_new_nonce\",\n SIGN_IN_TO_LINK_PROVIDER: \"ask_signin_then_link\",\n AUTHENTICATION_REQUIRED: \"route_to_signin\",\n UNAUTHORIZED_DOMAIN: \"show_integrator_config_error\"\n};\nfunction z(e) {\n return L[e] ?? \"unknown\";\n}\nfunction k(e) {\n return e === \"localhost\" || e === \"127.0.0.1\" || e === \"0.0.0.0\";\n}\nconst p = \"https://v1.api.singlebase.io\";\nfunction C(e) {\n if (e.baseUrl === void 0) return p;\n if (e.baseUrl === null || String(e.baseUrl).trim() === \"\")\n throw new Error(\n `SinglebaseOptions.baseUrl cannot be null or empty. Omit it to use ${p}.`\n );\n return String(e.baseUrl).trim().replace(/\\/+$/, \"\");\n}\nfunction P(e) {\n var n;\n const t = C(e);\n B(t);\n const r = (n = e.urlAccessKey) == null ? void 0 : n.trim();\n return r ? `${t}/${encodeURIComponent(r)}` : t;\n}\nfunction B(e) {\n let t;\n try {\n t = new URL(e);\n } catch {\n throw new Error(`SinglebaseOptions.baseUrl is not a valid URL: ${e}`);\n }\n if (t.protocol !== \"https:\" && !k(t.hostname))\n throw new Error(\n `SinglebaseOptions.baseUrl must use HTTPS outside of localhost/127.0.0.1/0.0.0.0 (got ${t.protocol})`\n );\n}\nasync function m(e, t, r, n = {}) {\n const s = P(e), o = { operation: t, payload: r };\n n.options && (o.options = n.options);\n const a = { \"Content-Type\": \"application/json\" };\n e.apiKey && (a[\"X-API-Key\"] = e.apiKey), n.token && (a.Authorization = `Bearer ${n.token}`);\n const i = e.fetch ?? globalThis.fetch;\n let c;\n try {\n c = await i(s, {\n method: \"POST\",\n headers: a,\n body: JSON.stringify(o),\n signal: n.signal\n });\n } catch (h) {\n throw g.fromNetworkError(h);\n }\n let f;\n try {\n f = await c.json();\n } catch (h) {\n throw g.fromNetworkError(h);\n }\n if (\"error\" in f)\n throw new g(f.error);\n return f.data;\n}\nconst K = /* @__PURE__ */ new Set([\"INVALID_ID_TOKEN\", \"INVALID_BEARER_TOKEN\"]);\nclass X {\n constructor(t) {\n this.options = t, this.bridge = null, this.provider = null;\n }\n /** Registers the session owner (the auth client) as the token source. */\n setAuthBridge(t) {\n this.bridge = t;\n }\n /** Registers a factory that builds+hydrates the token source on first need. */\n setAuthProvider(t) {\n this.provider = t;\n }\n async resolveBridge() {\n return this.bridge ? this.bridge : this.provider ? (this.bridge = await this.provider(), this.bridge) : null;\n }\n /**\n * Sends one operation. Injects the session bearer unless told otherwise,\n * and on a stale-token error refreshes once and retries the call exactly\n * once — never looping.\n */\n async dispatch(t, { bearer: r, signal: n } = {}) {\n const s = r !== void 0, o = s ? null : await this.resolveBridge(), a = s ? r : (o == null ? void 0 : o.getToken()) ?? null, i = { token: a, signal: n, options: t.options };\n try {\n return await m(\n this.options,\n t.operation,\n t.payload ?? {},\n i\n );\n } catch (c) {\n const f = c instanceof g ? c.code : \"\";\n if (!(!s && a !== null && o !== null && K.has(f))) throw c;\n const A = await o.refresh();\n if (!A) throw c;\n return m(\n this.options,\n t.operation,\n t.payload ?? {},\n { ...i, token: A }\n );\n }\n }\n}\nconst j = \"singlebase-auth\", V = 1, l = \"session\", E = \"wrapping-key\", d = \"session\";\nfunction I() {\n let e = null;\n return {\n get: () => e,\n set: (t) => {\n e = t;\n },\n clear: () => {\n e = null;\n }\n };\n}\nfunction R(e, t) {\n return {\n get: () => {\n var n;\n const r = (n = e()) == null ? void 0 : n.getItem(t);\n if (!r) return null;\n try {\n return JSON.parse(r);\n } catch {\n return null;\n }\n },\n set: (r) => {\n var n;\n (n = e()) == null || n.setItem(t, JSON.stringify(r));\n },\n clear: () => {\n var r;\n (r = e()) == null || r.removeItem(t);\n }\n };\n}\nfunction ee(e = \"singlebase-auth-session\") {\n return R(() => globalThis.localStorage, e);\n}\nfunction M(e = \"singlebase-auth-session\") {\n return R(() => globalThis.sessionStorage, e);\n}\nfunction b(e) {\n return new Promise((t, r) => {\n e.onsuccess = () => t(e.result), e.onerror = () => r(e.error);\n });\n}\nfunction w() {\n return new Promise((e, t) => {\n const r = globalThis.indexedDB.open(j, V);\n r.onupgradeneeded = () => {\n r.result.objectStoreNames.contains(l) || r.result.createObjectStore(l);\n }, r.onsuccess = () => e(r.result), r.onerror = () => t(r.error), r.onblocked = () => t(new Error(\"indexedDB open blocked\"));\n });\n}\nasync function S(e) {\n const t = await w();\n try {\n const r = t.transaction(l, \"readonly\");\n return await b(r.objectStore(l).get(e));\n } finally {\n t.close();\n }\n}\nasync function T(e, t) {\n const r = await w();\n try {\n const n = r.transaction(l, \"readwrite\");\n await b(n.objectStore(l).put(t, e));\n } finally {\n r.close();\n }\n}\nasync function D(e) {\n const t = await w();\n try {\n const r = t.transaction(l, \"readwrite\");\n await b(r.objectStore(l).delete(e));\n } finally {\n t.close();\n }\n}\nfunction H() {\n return typeof globalThis.indexedDB < \"u\" && typeof globalThis.crypto < \"u\" && typeof globalThis.crypto.subtle < \"u\";\n}\nfunction G() {\n let e = null;\n async function t() {\n return e || (e = (async () => {\n const r = await S(E);\n if (r) return r;\n const n = await globalThis.crypto.subtle.generateKey(\n { name: \"AES-GCM\", length: 256 },\n // non-extractable: crypto.subtle can use it, JS can never read it\n !1,\n [\"encrypt\", \"decrypt\"]\n );\n return await T(E, n), n;\n })().catch((r) => {\n throw e = null, r;\n })), e;\n }\n return {\n async get() {\n const r = await S(d);\n if (!r) return null;\n try {\n const n = await t(), s = await globalThis.crypto.subtle.decrypt(\n { name: \"AES-GCM\", iv: r.iv },\n n,\n r.data\n );\n return JSON.parse(new TextDecoder().decode(s));\n } catch {\n return await D(d).catch(() => {\n }), null;\n }\n },\n async set(r) {\n const n = await t(), s = globalThis.crypto.getRandomValues(new Uint8Array(12)), o = await globalThis.crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv: s },\n n,\n new TextEncoder().encode(JSON.stringify(r))\n );\n await T(d, { iv: s, data: o });\n },\n async clear() {\n await D(d).catch(() => {\n });\n }\n };\n}\nfunction te() {\n let e = null, t = !1;\n async function r() {\n if (e) return e;\n if (!t) {\n if (t = !0, H()) {\n const n = G();\n try {\n return await n.get(), e = n, e;\n } catch {\n }\n }\n e = typeof globalThis.sessionStorage < \"u\" ? M() : I();\n }\n return e ?? I();\n }\n return {\n async get() {\n try {\n return await (await r()).get();\n } catch {\n return null;\n }\n },\n async set(n) {\n try {\n await (await r()).set(n);\n } catch {\n }\n },\n async clear() {\n try {\n await (await r()).clear();\n } catch {\n }\n }\n };\n}\nclass re {\n constructor() {\n this.listeners = /* @__PURE__ */ new Map();\n }\n on(t, r) {\n let n = this.listeners.get(t);\n return n || (n = /* @__PURE__ */ new Set(), this.listeners.set(t, n)), n.add(r), () => n.delete(r);\n }\n emit(t, r) {\n const n = this.listeners.get(t);\n if (n)\n for (const s of n) s(r);\n }\n}\nconst ne = [\n \"theme\",\n \"density\",\n \"fieldStyle\",\n \"layout\",\n \"oauthPlacement\",\n \"stepped\",\n \"logoUrl\",\n \"logoText\",\n \"brandLine\",\n \"brandFoot\",\n \"signInTitle\",\n \"branding\",\n \"initialScreen\",\n \"noAccountView\",\n \"redirectUrl\",\n \"tosUrl\",\n \"privacyUrl\",\n \"nonceStorageKey\",\n \"authEnabled\",\n \"allowEmailSignin\",\n \"allowEmailSignup\",\n \"allowEmailOtp\",\n \"allowOauth\",\n \"allowAccountCreation\",\n \"inviteEmail\",\n \"inviteOrg\",\n \"inviteCode\"\n];\nfunction se(e) {\n return e.replace(/[A-Z]/g, (t) => \"-\" + t.toLowerCase());\n}\nconst x = [\n \"$eq\",\n \"$ne\",\n \"$in\",\n \"$nin\",\n \"$gt\",\n \"$gte\",\n \"$lt\",\n \"$lte\",\n \"$elemMatch\"\n], v = new Set(x);\nfunction J(e) {\n if (e === null || typeof e != \"object\" || Array.isArray(e)) return !1;\n const t = Object.keys(e);\n return t.length > 0 && t.every((r) => v.has(r));\n}\nfunction W(e, t) {\n let r = e;\n for (const n of t.split(\".\")) {\n if (r == null || typeof r != \"object\") return;\n r = r[n];\n }\n return r;\n}\nfunction u(e, t) {\n if (e === t) return !0;\n if (Array.isArray(e) && Array.isArray(t))\n return e.length === t.length && e.every((r, n) => u(r, t[n]));\n if (e && t && typeof e == \"object\" && typeof t == \"object\") {\n const r = Object.keys(e), n = Object.keys(t);\n return r.length === n.length && r.every(\n (s) => u(e[s], t[s])\n );\n }\n return !1;\n}\nfunction q(e, t) {\n return typeof e == \"number\" && typeof t == \"number\" ? Number.isNaN(e) || Number.isNaN(t) ? null : e - t : typeof e == \"string\" && typeof t == \"string\" ? e < t ? -1 : e > t ? 1 : 0 : e instanceof Date && t instanceof Date ? e.getTime() - t.getTime() : null;\n}\nfunction U(e, t, r) {\n switch (e) {\n case \"$eq\":\n return u(t, r);\n case \"$ne\":\n return !u(t, r);\n case \"$in\":\n return Array.isArray(r) ? Array.isArray(t) ? t.some((n) => r.some((s) => u(n, s))) : r.some((n) => u(t, n)) : !1;\n case \"$nin\":\n return Array.isArray(r) ? !U(\"$in\", t, r) : !1;\n case \"$gt\":\n case \"$gte\":\n case \"$lt\":\n case \"$lte\": {\n const n = q(t, r);\n return n === null ? !1 : e === \"$gt\" ? n > 0 : e === \"$gte\" ? n >= 0 : e === \"$lt\" ? n < 0 : n <= 0;\n }\n case \"$elemMatch\":\n return Array.isArray(t) ? t.some((n) => $(n, r)) : !1;\n default:\n return !1;\n }\n}\nfunction $(e, t) {\n return J(t) ? Object.entries(t).every(\n ([r, n]) => U(r, e, n)\n ) : u(e, t);\n}\nfunction oe(e, t) {\n if (!t) return !0;\n const r = Object.entries(t);\n return r.length === 0 ? !0 : e == null ? !1 : r.every(([n, s]) => $(W(e, n), s));\n}\nfunction ie(e) {\n if (e == null) return [];\n if (typeof e != \"object\" || Array.isArray(e))\n return [\"predicate must be an object\"];\n const t = [];\n for (const [r, n] of Object.entries(e)) {\n if (r.startsWith(\"$\")) {\n t.push(`\"${r}\": top-level operators are not supported; use a field name`);\n continue;\n }\n if (n === null || typeof n != \"object\" || Array.isArray(n)) continue;\n const s = Object.keys(n), o = s.filter((a) => a.startsWith(\"$\"));\n if (o.length === 0) {\n t.push(\n `\"${r}\": nested objects are not supported; use dot notation, e.g. \"${r}.field\"`\n );\n continue;\n }\n o.length !== s.length && t.push(`\"${r}\": cannot mix operators with plain keys`);\n for (const a of o)\n v.has(a) || t.push(`\"${r}\": unsupported operator \"${a}\"`);\n }\n return t;\n}\nconst y = () => {\n};\nfunction F() {\n return { post: y, subscribe: () => y, close: y };\n}\nfunction Y() {\n const e = globalThis.crypto;\n return e && \"randomUUID\" in e ? e.randomUUID() : Math.random().toString(36).slice(2) + Date.now().toString(36);\n}\nfunction ae(e) {\n const t = Y(), r = globalThis.BroadcastChannel;\n if (r) {\n let n;\n try {\n n = new r(e);\n } catch {\n return O(e, t);\n }\n return {\n post(s) {\n try {\n n.postMessage({ signal: s, from: t, at: Date.now() });\n } catch {\n }\n },\n subscribe(s) {\n const o = (a) => {\n const i = a.data;\n !i || typeof i != \"object\" || i.from !== t && (i.signal !== \"session-changed\" && i.signal !== \"signout\" || s(i));\n };\n return n.addEventListener(\"message\", o), () => n.removeEventListener(\"message\", o);\n },\n close() {\n try {\n n.close();\n } catch {\n }\n }\n };\n }\n return O(e, t);\n}\nfunction O(e, t) {\n const r = Q();\n if (!r) return F();\n const n = `${e}:signal`;\n return {\n post(s) {\n try {\n r.setItem(n, JSON.stringify({ signal: s, from: t, at: Date.now() }));\n } catch {\n }\n },\n subscribe(s) {\n var a;\n const o = (i) => {\n if (!(i.key !== n || !i.newValue))\n try {\n const c = JSON.parse(i.newValue);\n if (c.from === t || c.signal !== \"session-changed\" && c.signal !== \"signout\") return;\n s(c);\n } catch {\n }\n };\n return (a = globalThis.addEventListener) == null || a.call(globalThis, \"storage\", o), () => {\n var i;\n return (i = globalThis.removeEventListener) == null ? void 0 : i.call(globalThis, \"storage\", o);\n };\n },\n close: y\n };\n}\nfunction Q() {\n try {\n const e = globalThis.localStorage;\n if (!e) return null;\n const t = \"__singlebase_probe__\";\n return e.setItem(t, \"1\"), e.removeItem(t), e;\n } catch {\n return null;\n }\n}\nconst N = Symbol.for(\"singlebase.client.registry\");\nfunction _() {\n const e = globalThis;\n let t = e[N];\n return t || (t = { instances: /* @__PURE__ */ new Map(), default: null }, e[N] = t), t;\n}\nfunction Z(e) {\n return [\n e.baseUrl ?? p,\n e.urlAccessKey ?? \"\",\n e.apiKey ?? \"\",\n e.audience ?? \"web\"\n ].join(\"|\");\n}\nfunction ce(e, t) {\n const r = _(), n = Z(e), s = r.instances.get(n);\n if (s) return s;\n const o = t();\n return r.instances.set(n, o), r.default || (r.default = o), o;\n}\nfunction le() {\n return _().default;\n}\nfunction ue(e) {\n _().default = e;\n}\nfunction fe(e) {\n const t = _();\n for (const [r, n] of t.instances)\n n === e && t.instances.delete(r);\n t.default === e && (t.default = t.instances.values().next().value ?? null);\n}\nexport {\n ne as AUTHUI_PROP_KEYS,\n p as DEFAULT_BASE_URL,\n re as EventEmitter,\n x as OPERATORS,\n X as RpcDispatcher,\n g as SinglebaseAuthError,\n g as SinglebaseError,\n B as assertSecureBaseUrl,\n se as authUIAttributeFor,\n H as canUseCryptoStorage,\n Z as clientKey,\n ae as crossTabChannel,\n te as defaultStorage,\n P as endpointFor,\n le as getDefaultClient,\n W as getPath,\n G as indexedDbCryptoStorage,\n ee as localStorageAdapter,\n z as mapErrorToHint,\n oe as matchesPredicate,\n I as memoryStorage,\n F as noopCrossTabChannel,\n m as request,\n C as resolveBaseUrl,\n ce as resolveClient,\n M as sessionStorageAdapter,\n ue as setDefaultClient,\n fe as unregisterClient,\n ie as validatePredicate\n};\n//# sourceMappingURL=index.js.map\n","import { EventEmitter as R, defaultStorage as P, RpcDispatcher as D, noopCrossTabChannel as N, crossTabChannel as U, DEFAULT_BASE_URL as F, SinglebaseError as S, resolveClient as M, unregisterClient as x } from \"@singlebase/core\";\nimport { SinglebaseAuthError as ae, SinglebaseError as re, getDefaultClient as ie, indexedDbCryptoStorage as oe, localStorageAdapter as ce, mapErrorToHint as ue, memoryStorage as le, sessionStorageAdapter as de, setDefaultClient as he } from \"@singlebase/core\";\nconst B = [\"pointerdown\", \"keydown\", \"scroll\", \"focus\", \"touchstart\"], b = {\n enabled: !0,\n skewSeconds: 60,\n idleAfterMs: 15 * 60 * 1e3,\n minIntervalMs: 30 * 1e3\n};\nclass W {\n constructor(e, s, r) {\n this.refresh = s, this.onFailure = r, this.timer = null, this.lastActivityAt = Date.now(), this.stopped = !1, this.listening = !1, this.pendingWake = !1, this.onActivityBound = () => this.onActivity(), this.options = {\n enabled: (e == null ? void 0 : e.enabled) ?? b.enabled,\n skewSeconds: (e == null ? void 0 : e.skewSeconds) ?? b.skewSeconds,\n idleAfterMs: (e == null ? void 0 : e.idleAfterMs) ?? b.idleAfterMs,\n minIntervalMs: (e == null ? void 0 : e.minIntervalMs) ?? b.minIntervalMs,\n activityEvents: (e == null ? void 0 : e.activityEvents) ?? B\n };\n }\n get isRunning() {\n return this.timer !== null;\n }\n /** (Re)arms the scheduler for the given session. */\n start(e) {\n !this.options.enabled || this.stopped || (this.listen(), this.schedule(e));\n }\n /** Pauses until the next `start()` — used on signout. */\n stop() {\n this.clearTimer(), this.unlisten();\n }\n /**\n * Stops for good. Used when a refresh fails: the session cannot be\n * recovered without a fresh sign-in, so the loop must not restart by\n * itself.\n */\n stopPermanently() {\n this.stopped = !0, this.stop();\n }\n /** Allows a future sign-in to resume auto-refresh after a permanent stop. */\n reset() {\n this.stopped = !1;\n }\n clearTimer() {\n this.timer && (clearTimeout(this.timer), this.timer = null);\n }\n listen() {\n var e;\n if (!(this.listening || typeof globalThis.addEventListener != \"function\")) {\n for (const s of this.options.activityEvents)\n globalThis.addEventListener(s, this.onActivityBound, { passive: !0, capture: !0 });\n (e = globalThis.addEventListener) == null || e.call(globalThis, \"visibilitychange\", this.onActivityBound, { passive: !0 }), this.listening = !0;\n }\n }\n unlisten() {\n var e;\n if (!(!this.listening || typeof globalThis.removeEventListener != \"function\")) {\n for (const s of this.options.activityEvents)\n globalThis.removeEventListener(s, this.onActivityBound, {\n capture: !0\n });\n (e = globalThis.removeEventListener) == null || e.call(globalThis, \"visibilitychange\", this.onActivityBound), this.listening = !1;\n }\n }\n /**\n * Marks the user as active. Called by the DOM listeners, and available to\n * hosts that know about activity the DOM cannot see — an SPA route change,\n * a websocket message, a background save.\n */\n notifyActivity() {\n this.onActivity();\n }\n onActivity() {\n this.lastActivityAt = Date.now(), this.pendingWake && !this.stopped && (this.pendingWake = !1, this.run());\n }\n get isIdle() {\n return Date.now() - this.lastActivityAt > this.options.idleAfterMs;\n }\n schedule(e) {\n if (this.clearTimer(), this.stopped || !this.options.enabled) return;\n const s = e.token_info.exp * 1e3 - Date.now(), r = Math.max(\n s - this.options.skewSeconds * 1e3,\n this.options.minIntervalMs\n );\n this.timer = setTimeout(() => {\n if (this.timer = null, this.isIdle) {\n this.pendingWake = !0;\n return;\n }\n this.run();\n }, r);\n }\n async run() {\n if (!this.stopped)\n try {\n const e = await this.refresh();\n this.schedule(e);\n } catch (e) {\n this.stopPermanently(), this.onFailure(e);\n }\n }\n}\nconst H = 60;\nclass V {\n constructor(e, s) {\n this.storage = e, this.refresher = s, this.state = { status: \"loading\", session: null, user: null }, this.listeners = /* @__PURE__ */ new Set(), this.refreshing = null, this.onLocalChange = null;\n }\n getState() {\n return this.state;\n }\n subscribe(e) {\n return this.listeners.add(e), () => this.listeners.delete(e);\n }\n setState(e) {\n this.state = e;\n for (const s of this.listeners) s(e);\n }\n /** Loads the persisted session (if any) and validates/refreshes it. */\n async initialize() {\n const e = await this.storage.get();\n if (!e) {\n this.setState({ status: \"unauthenticated\", session: null, user: null });\n return;\n }\n if (this.needsRefresh(e)) {\n try {\n const s = await this.refreshOnce(e);\n await this.adopt(s);\n } catch (s) {\n await this.clear(), this.setState({ status: \"error\", session: null, user: null, error: s });\n }\n return;\n }\n this.setState({ status: \"authenticated\", session: e, user: e.user_profile });\n }\n needsRefresh(e) {\n const s = Date.now() / 1e3;\n return e.token_info.exp - s <= H;\n }\n /** Adopts a freshly-returned session: persists it and updates state. */\n async adopt(e) {\n var s;\n await this.storage.set(e), this.setState({ status: \"authenticated\", session: e, user: e.user_profile }), (s = this.onLocalChange) == null || s.call(this, \"session-changed\");\n }\n /** Merges an updated profile (from user.get/user.update) into the current session. */\n async adoptProfile(e) {\n var r;\n if (this.state.status !== \"authenticated\") return;\n const s = { ...this.state.session, user_profile: e };\n await this.storage.set(s), this.setState({ status: \"authenticated\", session: s, user: e }), (r = this.onLocalChange) == null || r.call(this, \"session-changed\");\n }\n async clear() {\n var e;\n await this.storage.clear(), this.setState({ status: \"unauthenticated\", session: null, user: null }), (e = this.onLocalChange) == null || e.call(this, \"signout\");\n }\n /**\n * Re-reads shared storage after another tab reported a change, and adopts\n * whatever it finds. No network call and no refresh: the tab that made the\n * change already did that work, and this tab must not spend the single-use\n * refresh token a second time.\n */\n async syncFromStorage() {\n const e = await this.storage.get();\n return e ? this.state.status === \"authenticated\" && this.state.session.id_token === e.id_token ? \"unchanged\" : (this.setState({ status: \"authenticated\", session: e, user: e.user_profile }), \"adopted\") : this.state.status === \"unauthenticated\" ? \"unchanged\" : (this.setState({ status: \"unauthenticated\", session: null, user: null }), \"cleared\");\n }\n /**\n * Single-flight refresh: concurrent callers await the same in-flight\n * promise instead of each spending the single-use refresh token.\n */\n async refreshOnce(e) {\n return this.refreshing || (this.refreshing = this.refresher(e).finally(() => {\n this.refreshing = null;\n })), this.refreshing;\n }\n /**\n * For a protected call that just failed with an auth-shaped error: refresh\n * once (sharing any in-flight refresh) and hand back the new session, or\n * throw/clear if refresh itself fails. Callers retry their original\n * request exactly once with the result — never loop.\n */\n async refreshAfterFailure() {\n if (this.state.status !== \"authenticated\")\n throw new Error(\"Cannot refresh: no authenticated session\");\n try {\n const e = await this.refreshOnce(this.state.session);\n return await this.adopt(e), e;\n } catch (e) {\n throw await this.clear(), e;\n }\n }\n}\nconst l = {\n settings: \"auth.settings\",\n signup: \"auth.signup\",\n signin: \"auth.signin\",\n refresh: \"auth.refresh\",\n signout: \"auth.signout\",\n requestCode: \"auth.request_code\",\n confirmCode: \"auth.confirm_code\",\n changePassword: \"auth.change_password\",\n getAccount: \"user.get\",\n updateAccount: \"user.update\",\n nonce: \"auth.nonce\",\n oauthConnect: \"auth.oauth_connect\",\n oauthSignin: \"auth.oauth_signin\"\n};\nfunction q(a, e) {\n const s = a.audience ?? \"web\", r = new R(), y = a.storage ?? P(), f = e ?? new D(a);\n for (const [t, o] of Object.entries(a.on ?? {}))\n o && r.on(t, o);\n const g = async (t) => f.dispatch(\n {\n operation: l.refresh,\n payload: {\n id_token: t.id_token,\n refresh_token: t.refresh_token,\n aud: s\n }\n },\n { bearer: null }\n ), i = new V(y, g), c = a.crossTab === !1 ? N() : U(\n `singlebase-auth:${a.baseUrl ?? F}|${a.urlAccessKey ?? \"\"}`\n );\n i.onLocalChange = (t) => c.post(t);\n const d = c.subscribe(() => {\n w.then(async () => {\n const t = await i.syncFromStorage();\n if (t === \"unchanged\") return;\n if (t === \"cleared\") {\n r.emit(\"signout\", null), r.emit(\"session\", null);\n return;\n }\n const o = i.getState();\n o.status === \"authenticated\" && r.emit(\"session\", o.session);\n });\n }), m = typeof a.autoRefresh == \"boolean\" ? { enabled: a.autoRefresh } : a.autoRefresh, p = new W(\n m,\n async () => await A.refreshSession(),\n (t) => {\n i.clear();\n const o = t instanceof S ? t.code : \"REFRESH_FAILED\";\n r.emit(\"expired\", { reason: o }), r.emit(\"session\", null);\n }\n );\n f.setAuthBridge({\n getToken: () => {\n const t = i.getState();\n return t.status === \"authenticated\" ? t.session.id_token : null;\n },\n refresh: async () => {\n try {\n return (await i.refreshAfterFailure()).id_token;\n } catch {\n return null;\n }\n }\n }), i.subscribe((t) => {\n t.status === \"authenticated\" ? (p.reset(), p.start(t.session)) : p.stop();\n });\n const w = i.initialize().then(() => {\n r.emit(\"load\", i.getState());\n });\n async function u(t, o) {\n try {\n const n = await o();\n return r.emit(\"success\", { operation: t }), n;\n } catch (n) {\n const _ = n instanceof S ? n.code : \"UNKNOWN_ERROR\", T = n instanceof Error ? n.message : String(n);\n throw r.emit(\"error\", { code: _, message: T, operation: t }), n;\n }\n }\n const h = (t, o, n = {}) => f.dispatch({ operation: t, payload: o }, n), A = {\n ready: w,\n dispatcher: f,\n authui: a.authui ?? null,\n dispatch: (t, o) => f.dispatch(t, o),\n getSettings: (t) => u(l.settings, () => h(l.settings, {}, { bearer: null, signal: t })),\n signUp: (t, o) => u(l.signup, async () => {\n const n = await h(\n l.signup,\n { ...t, aud: t.aud ?? s },\n { bearer: null, signal: o }\n );\n return r.emit(\"signup\", n), r.emit(\"navigate\", {\n next_action: n.next_action,\n next_operation: n.next_operation\n }), n;\n }),\n signIn: (t, o) => u(l.signin, async () => {\n const n = await h(\n l.signin,\n { ...t, aud: t.aud ?? s },\n { bearer: null, signal: o }\n );\n return await i.adopt(n), r.emit(\"signin\", n), r.emit(\"session\", n), n;\n }),\n requestCode: (t, o) => u(l.requestCode, async () => {\n const n = await h(\n l.requestCode,\n { ...t, aud: t.aud ?? s },\n { bearer: null, signal: o }\n );\n return r.emit(\"navigate\", {\n next_action: n.next_action,\n next_operation: n.next_operation\n }), n;\n }),\n resetPassword: (t, o) => u(l.confirmCode, async () => {\n const n = await h(\n l.confirmCode,\n { ...t, purpose: \"password_reset\", aud: t.aud ?? s },\n { bearer: null, signal: o }\n );\n return await i.adopt(n), r.emit(\"signin\", n), r.emit(\"session\", n), n;\n }),\n acceptInvite: (t, o) => u(l.signin, async () => {\n const n = await h(\n l.signin,\n { ...t, aud: t.aud ?? s },\n { bearer: null, signal: o }\n );\n return await i.adopt(n), r.emit(\"signin\", n), r.emit(\"session\", n), n;\n }),\n refreshSession: () => u(l.refresh, async () => {\n const t = i.getState();\n if (t.status !== \"authenticated\")\n throw new Error(\"Cannot refresh: no authenticated session\");\n const o = await i.refreshOnce(t.session);\n return await i.adopt(o), r.emit(\"session\", o), o;\n }),\n async signOut() {\n const t = i.getState();\n if (p.stop(), t.status === \"authenticated\")\n try {\n await h(l.signout, {}, { bearer: t.session.id_token });\n } catch {\n }\n await i.clear(), r.emit(\"signout\", null), r.emit(\"session\", null), r.emit(\"success\", { operation: l.signout });\n },\n logout() {\n return A.signOut();\n },\n getAccount: (t) => u(l.getAccount, async () => {\n const o = await h(l.getAccount, {}, { signal: t });\n return await i.adoptProfile(o), o;\n }),\n updateAccount: (t, o) => u(l.updateAccount, async () => {\n const n = await h(l.updateAccount, t, {\n signal: o\n });\n return await i.adoptProfile(n), r.emit(\"account-updated\", n), n;\n }),\n changePassword: (t, o) => u(l.changePassword, async () => {\n const n = await h(\n l.changePassword,\n { ...t, aud: t.aud ?? s },\n { signal: o }\n );\n return await i.adopt(n), r.emit(\"password-change\", n), r.emit(\"session\", n), n;\n }),\n changeEmail: (t, o) => u(l.confirmCode, async () => {\n const n = await h(\n l.confirmCode,\n {\n email: t.email,\n purpose: \"email_change\",\n code: t.code,\n new_email: t.new_email,\n aud: t.aud ?? s\n },\n { signal: o }\n );\n return await i.adopt(n), r.emit(\"email-change\", n), r.emit(\"session\", n), n;\n }),\n changeUsername: (t, o) => u(l.confirmCode, async () => {\n const n = await h(\n l.confirmCode,\n {\n email: t.email,\n purpose: \"username_change\",\n code: t.code,\n new_username: t.new_username,\n aud: t.aud ?? s\n },\n { signal: o }\n );\n return await i.adopt(n), r.emit(\"username-change\", n), r.emit(\"session\", n), n;\n }),\n createOAuthNonce: (t) => u(l.nonce, async () => (await h(l.nonce, {}, { bearer: null, signal: t })).nonce),\n startOAuth: (t, o) => u(l.oauthConnect, async () => {\n const n = t.nonce ?? await A.createOAuthNonce(o);\n return h(\n l.oauthConnect,\n { ...t, nonce: n, intent: t.intent ?? \"signin\", aud: t.aud ?? s },\n { bearer: null, signal: o }\n );\n }),\n completeOAuth: (t, o) => u(l.oauthSignin, async () => {\n const n = await h(\n l.oauthSignin,\n { ...t, aud: t.aud ?? s },\n { bearer: null, signal: o }\n );\n return await i.adopt(n), r.emit(\"signin\", n), r.emit(\"session\", n), n;\n }),\n isAuthenticated: () => i.getState().status === \"authenticated\",\n getUser: () => {\n const t = i.getState();\n return t.status === \"authenticated\" ? t.user : null;\n },\n get user() {\n return A.getUser();\n },\n get authenticated() {\n return A.isAuthenticated();\n },\n async getSession() {\n await w;\n const t = i.getState();\n return t.status === \"authenticated\" ? t.session : null;\n },\n getState: () => i.getState(),\n subscribe: (t) => i.subscribe(t),\n on: r.on.bind(r),\n goto: (t) => r.emit(\"goto\", { screen: t }),\n destroy() {\n p.stopPermanently(), f.setAuthBridge(null), i.onLocalChange = null, d(), c.close();\n }\n };\n return A;\n}\nconst z = {\n SIGNIN: \"signin\",\n SIGNIN_WITH_CODE: \"signin_with_code\",\n ACCEPT_INVITE_WITH_CODE: \"accept_invite\",\n RESET_PASSWORD_WITH_CODE: \"reset_password_confirm\",\n CHANGE_EMAIL_WITH_CODE: \"change_email_confirm\",\n CHANGE_USERNAME_WITH_CODE: \"change_username_confirm\"\n};\nfunction ee(a) {\n return a.next_action === null ? \"authenticated\" : z[a.next_action];\n}\nconst E = 10;\nfunction v(a, e) {\n const s = [];\n for (let r = 0; r < a.length; r += e) s.push(a.slice(r, r + e));\n return s;\n}\nfunction C(a) {\n return typeof Blob < \"u\" && a instanceof Blob;\n}\nfunction k(a) {\n return C(a) ? { file: a } : a;\n}\nfunction L(a) {\n var s;\n const e = a.filename ?? ((s = a.file) == null ? void 0 : s.name);\n if (!e)\n throw new S({\n type: \"INVALID_PAYLOAD\",\n status: 0,\n message: \"MISSING_FILENAME\"\n });\n return e;\n}\nfunction G(a) {\n const e = a.file, s = { filename: L(a) }, r = a.contentType ?? (e && C(e) ? e.type : \"\");\n return r && (s.content_type = r), a.bucket && (s.bucket = a.bucket), a.newName && (s.new_name = a.newName), a.publicRead !== void 0 && (s.public_read = a.publicRead), a.metadata && (s.metadata = a.metadata), a.options && (s.options = a.options), s;\n}\nfunction O(a) {\n return new S({ type: \"INVALID_RESPONSE\", status: 0, message: a });\n}\nfunction K(a, e) {\n if (!Array.isArray(a) || a.length !== e)\n throw O(\"INVALID_UPLOAD_RESPONSE\");\n return a.map((s) => {\n var y;\n const r = (y = s == null ? void 0 : s.upload) == null ? void 0 : y.url;\n if (!(s != null && s.id) || !(s != null && s.upload_token) || typeof r != \"string\")\n throw O(\"INVALID_UPLOAD_RESPONSE\");\n return {\n id: String(s.id),\n upload: { url: r, fields: s.upload.fields ?? {} },\n uploadToken: String(s.upload_token)\n };\n });\n}\nfunction I(a) {\n if (a && typeof a == \"object\" && \"code\" in a && \"message\" in a) {\n const { code: s, message: r } = a;\n return { code: String(s), message: String(r).slice(0, 500) };\n }\n return { code: \"UPLOAD_FAILED\", message: (a instanceof Error ? a.message : String(a ?? \"\")).slice(0, 500) };\n}\nasync function $(a, e, s, r) {\n const y = await a(e, { method: \"POST\", body: s, signal: r });\n return y.status ?? (y.ok ? 200 : 500);\n}\nfunction X(a, e, s, r) {\n return new Promise((y, f) => {\n const g = new XMLHttpRequest();\n if (g.open(\"POST\", a), g.upload.onprogress = (i) => {\n s(i.loaded, i.lengthComputable ? i.total : 0);\n }, g.onload = () => y(g.status), g.onerror = () => f(new Error(\"NETWORK_ERROR\")), g.onabort = () => f(new Error(\"ABORTED\")), r) {\n if (r.aborted) {\n f(new Error(\"ABORTED\"));\n return;\n }\n r.addEventListener(\"abort\", () => g.abort(), { once: !0 });\n }\n g.send(e);\n });\n}\nfunction Y(a) {\n const e = (i, c, d) => a.dispatch({ operation: i, payload: { files: c } }, { signal: d == null ? void 0 : d.signal });\n async function s(i, c) {\n const d = Array.from(i, k), m = [];\n for (const p of v(d, E)) {\n const w = p.map(\n (h) => G(c != null && c.bucket ? { bucket: c.bucket, ...h } : h)\n ), u = await e(\"files.initiate_upload\", w, c);\n m.push(...K(u, p.length));\n }\n return m;\n }\n async function r(i, c, d) {\n const m = k(i), p = new FormData();\n for (const [n, _] of Object.entries(c.upload.fields ?? {}))\n p.append(n, _);\n const w = m.file, u = C(w) ? w : new Blob([w]), h = u.size ?? 0;\n p.append(\"file\", u, L(m));\n const A = d == null ? void 0 : d.onProgress, t = A ? (n, _) => A({\n input: m,\n id: c.id,\n loaded: n,\n total: _,\n percent: _ > 0 ? Math.min(100, Math.round(n / _ * 100)) : 0\n }) : void 0;\n let o;\n try {\n o = t && typeof XMLHttpRequest < \"u\" ? await X(c.upload.url, p, t, d == null ? void 0 : d.signal) : await $(\n a.options.fetch ?? globalThis.fetch,\n c.upload.url,\n p,\n d == null ? void 0 : d.signal\n );\n } catch (n) {\n throw new S(\n { type: \"UPLOAD_FAILED\", status: 0, message: \"UPLOAD_FAILED\" },\n n\n );\n }\n if (o >= 400)\n throw new S({ type: \"UPLOAD_FAILED\", status: o, message: \"UPLOAD_FAILED\" });\n return t == null || t(h, h), { id: c.id, uploadToken: c.uploadToken };\n }\n async function y(i, c) {\n const d = [];\n for (const m of v(i, E)) {\n const p = await e(\n \"files.complete_upload\",\n m.map(({ id: w, uploadToken: u }) => ({ id: w, upload_token: u })),\n c\n );\n if (!Array.isArray(p)) throw O(\"INVALID_UPLOAD_RESPONSE\");\n d.push(...p);\n }\n return d;\n }\n async function f(i, c) {\n for (const d of v(i, E))\n await e(\n \"files.fail_upload\",\n d.map(({ id: m, uploadToken: p, error: w }) => ({\n id: m,\n upload_token: p,\n error: I(w)\n })),\n c\n );\n }\n async function g(i, c) {\n const d = Array.from(i, k), m = { completed: [], failed: [] };\n for (const u of v(d, E)) {\n const h = await s(u, c), A = [], t = [];\n if (await Promise.all(\n u.map(async (o, n) => {\n const _ = h[n];\n try {\n A.push({ input: o, completion: await r(o, _, c) });\n } catch (T) {\n t.push({ input: o, id: _.id, uploadToken: _.uploadToken, error: T });\n }\n })\n ), A.length)\n try {\n const o = await y(\n A.map((n) => n.completion),\n c\n );\n A.forEach((n, _) => {\n m.completed.push({ input: n.input, id: n.completion.id, file: o[_] });\n });\n } catch (o) {\n const n = I(o);\n A.forEach((_) => {\n m.failed.push({ input: _.input, id: _.completion.id, error: n });\n });\n }\n if (t.length) {\n try {\n await f(\n t.map((o) => ({ id: o.id, uploadToken: o.uploadToken, error: o.error })),\n c\n );\n } catch {\n }\n t.forEach((o) => {\n m.failed.push({ input: o.input, id: o.id, error: I(o.error) });\n });\n }\n }\n const p = new Map(d.map((u, h) => [u, h])), w = (u) => p.get(u.input) ?? 0;\n return m.completed.sort((u, h) => w(u) - w(h)), m.failed.sort((u, h) => w(u) - w(h)), m;\n }\n return { initiateUpload: s, uploadToRemote: r, completeUpload: y, failUpload: f, upload: g };\n}\nfunction j(a, e, s) {\n const r = (f, g, i = {}) => {\n const { options: c, ...d } = i;\n return e(\n {\n operation: `${a}.${f}`,\n payload: g ?? {},\n options: c\n },\n d\n );\n }, y = { call: r, ...s };\n return new Proxy(y, {\n get(f, g) {\n const i = f;\n return typeof g == \"symbol\" || g in i ? i[g] : (c, d) => r(g, c, d);\n }\n });\n}\nfunction Z(a) {\n return M(a, () => J(a));\n}\nfunction J(a) {\n const e = new D(a);\n let s = null;\n function r() {\n if (!s) {\n const { auth: i, ...c } = a;\n s = q({ ...c, ...i }, e);\n }\n return s;\n }\n e.setAuthProvider(async () => {\n const i = r();\n return await i.ready, {\n getToken: () => i.isAuthenticated() ? i.getState().session.id_token : null,\n refresh: async () => {\n try {\n return (await i.refreshSession()).id_token;\n } catch {\n return null;\n }\n }\n };\n });\n const y = /* @__PURE__ */ new Map(), f = (i) => {\n let c = y.get(i);\n return c || (c = j(\n i,\n (d, m) => e.dispatch(d, m),\n // `files` is the one namespace with a flow the proxy can't express:\n // uploads go straight to storage, so they need real methods.\n i === \"files\" ? Y(e) : void 0\n ), y.set(i, c)), c;\n }, g = {\n get auth() {\n return r();\n },\n dispatcher: e,\n data: f(\"data\"),\n files: f(\"files\"),\n user: f(\"user\"),\n users: f(\"users\"),\n llm: f(\"llm\"),\n service: f,\n dispatch: (i, c) => e.dispatch(i, c),\n isAuthenticated: () => (s == null ? void 0 : s.isAuthenticated()) ?? !1,\n getUser: () => (s == null ? void 0 : s.getUser()) ?? null,\n destroy() {\n s == null || s.destroy(), x(g);\n }\n };\n return g;\n}\nfunction te(a) {\n return Z(a).auth;\n}\nexport {\n W as AutoRefreshScheduler,\n E as FILES_BATCH_SIZE,\n V as SessionStore,\n te as SinglebaseAuth,\n ae as SinglebaseAuthError,\n Z as SinglebaseClient,\n re as SinglebaseError,\n q as createAuthClient,\n Y as createFilesUploadApi,\n ie as getDefaultClient,\n oe as indexedDbCryptoStorage,\n ce as localStorageAdapter,\n ue as mapErrorToHint,\n le as memoryStorage,\n I as normalizeUploadError,\n ee as resolveScreen,\n de as sessionStorageAdapter,\n he as setDefaultClient\n};\n//# sourceMappingURL=index.js.map\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.3\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer(()=>{customElements.define(t,e)}):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","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","import type { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport type { AuthClient, AuthState } from \"@singlebase/singlebase-sdk\";\n\n/**\n * Subscribes a host element to an AuthClient's session state and triggers a\n * re-render on every change, so individual elements never hand-roll\n * subscribe/unsubscribe bookkeeping. Call bind(client) whenever the host's\n * resolved client changes (e.g. context updates, or .client is set).\n */\nexport class AuthController implements ReactiveController {\n private host: ReactiveControllerHost;\n private client: AuthClient | null = null;\n private unsubscribe: (() => void) | null = null;\n state: AuthState = { status: \"loading\", session: null, user: null };\n\n constructor(host: ReactiveControllerHost) {\n this.host = host;\n host.addController(this);\n }\n\n bind(client: AuthClient | null): void {\n if (client === this.client) return;\n this.unsubscribe?.();\n this.unsubscribe = null;\n this.client = client;\n if (!client) return;\n this.state = client.getState();\n this.unsubscribe = client.subscribe((state) => {\n this.state = state;\n this.host.requestUpdate();\n });\n this.host.requestUpdate();\n }\n\n hostDisconnected(): void {\n this.unsubscribe?.();\n this.unsubscribe = null;\n }\n}\n","import { css, unsafeCSS } from \"lit\";\n\n/**\n * Default values for every --sb-* design token, ported from the design\n * mock's tokens()/styles() functions. These are consumed as var(--sb-x,\n * DEFAULT) fallbacks at each point of use (see shared.ts) — never assigned\n * unconditionally on :host — so that a value set by a host application, or\n * by a theme/density attribute forwarded down from a composing parent\n * element, actually inherits through\n * nested shadow roots instead of being reset back to these defaults by every\n * descendant's own :host rule.\n */\nexport const TOKEN_DEFAULTS = {\n font: `\"Geist\", -apple-system, \"Segoe UI\", Helvetica, sans-serif`,\n mono: `\"Geist Mono\", ui-monospace, monospace`,\n accent: \"#111111\",\n onAccent: \"#ffffff\",\n radius: \"4px\",\n surface: \"#ffffff\",\n surfaceAlt: \"#fafafa\",\n ink: \"#16181a\",\n mutedInk: \"#61666c\",\n border: \"#e4e6e9\",\n borderStrong: \"#cdd1d6\",\n danger: \"#b4231a\",\n dangerBg: \"#fdf1f0\",\n dangerBorder: \"#f3d6d3\",\n dangerOutline: \"#e8c4c0\",\n dangerPanelBorder: \"#efd9d6\",\n dangerPanelBg: \"#fdf7f6\",\n ok: \"#0f6b4a\",\n okBg: \"#f0f7f3\",\n okBorder: \"#cfe5da\",\n gap: \"16px\",\n pad: \"20px\",\n fieldPad: \"11px 13px\"\n} as const;\n\n/**\n * Base host layout plus the theme=\"dark\"/density=\"compact\" attribute\n * overrides. These overrides are legitimate unconditional assignments —\n * they only fire when *this* element carries the attribute — but every\n * composite element (auth-screen, reset-password-form, etc.) must forward\n * theme/density/field-style to the singlebase-* children it renders for the\n * override to reach elements that don't carry the attribute directly.\n */\nexport const tokenDefaults = css`\n :host {\n display: block;\n box-sizing: border-box;\n font-family: var(--sb-font, ${unsafeCSS(TOKEN_DEFAULTS.font)});\n color: var(--sb-ink, ${unsafeCSS(TOKEN_DEFAULTS.ink)});\n }\n\n :host([theme=\"dark\"]) {\n /* The light default accent is near-black, which disappears on a dark\n surface — primary buttons and links both use it. A host that sets its\n own --sb-accent still wins: outer-page declarations beat :host rules. */\n --sb-accent: #f3f4f5;\n --sb-on-accent: #17181b;\n --sb-surface: #17181b;\n --sb-surface-alt: #202226;\n --sb-ink: #f3f4f5;\n --sb-muted-ink: #a2a8ae;\n --sb-border: #2c2f34;\n --sb-border-strong: #3a3e44;\n --sb-danger: #f08379;\n --sb-danger-bg: rgba(240, 131, 121, 0.1);\n --sb-danger-border: rgba(240, 131, 121, 0.3);\n --sb-danger-outline: rgba(240, 131, 121, 0.4);\n --sb-danger-panel-border: rgba(240, 131, 121, 0.3);\n --sb-danger-panel-bg: rgba(240, 131, 121, 0.06);\n --sb-ok: #6fd1a6;\n --sb-ok-bg: rgba(111, 209, 166, 0.1);\n --sb-ok-border: rgba(111, 209, 166, 0.28);\n }\n\n :host([density=\"compact\"]) {\n --sb-gap: 12px;\n --sb-pad: 16px;\n --sb-field-pad: 9px 11px;\n }\n`;\n","import { css } from \"lit\";\n\n/**\n * Shared internal styles, ported value-for-value from the design mock's\n * styles(t) / acc(t, open, bare) functions in project/AuthWidget.dc.html.\n * The mock computed these as inline style objects per render; here they are\n * static Shadow DOM CSS driven by the --sb-* tokens, with part hooks so\n * hosts can reach internals via ::part().\n */\nexport const sharedStyles = css`\n /* ── layout primitives ───────────────────────────────────── */\n .stack {\n display: flex;\n flex-direction: column;\n gap: var(--sb-gap, 16px);\n }\n\n .fields {\n display: flex;\n flex-direction: column;\n gap: var(--sb-gap, 16px);\n }\n\n .head {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .two-up {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--sb-gap, 16px);\n }\n\n .actions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .rule {\n height: 1px;\n background: var(--sb-border, #e4e6e9);\n }\n\n .between {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n }\n\n /* ── type ────────────────────────────────────────────────── */\n .logo-dot {\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 12px;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--sb-muted-ink, #61666c);\n margin-bottom: 6px;\n }\n\n .title {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n letter-spacing: -0.015em;\n color: var(--sb-ink, #16181a);\n }\n\n .sub {\n margin: 0;\n font-size: 13.5px;\n line-height: 1.5;\n color: var(--sb-muted-ink, #61666c);\n text-wrap: pretty;\n }\n\n .sec-title {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n letter-spacing: -0.01em;\n color: var(--sb-ink, #16181a);\n }\n\n .hint {\n margin: 0;\n font-size: 12.5px;\n line-height: 1.5;\n color: var(--sb-muted-ink, #61666c);\n text-wrap: pretty;\n }\n\n .sub-label {\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 11px;\n letter-spacing: 0.07em;\n text-transform: uppercase;\n color: var(--sb-muted-ink, #61666c);\n }\n\n /* ── fields ──────────────────────────────────────────────── */\n .field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .label-row {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: 8px;\n }\n\n label,\n .label {\n font-size: 12.5px;\n font-weight: 500;\n color: var(--sb-muted-ink, #61666c);\n letter-spacing: 0.01em;\n }\n\n input {\n width: 100%;\n box-sizing: border-box;\n font: inherit;\n font-size: 14px;\n color: var(--sb-ink, #16181a);\n background: var(--sb-surface-alt, #fafafa);\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: var(--sb-radius, 4px);\n padding: var(--sb-field-pad, 11px 13px);\n outline: none;\n }\n\n input:focus {\n border-color: var(--sb-accent, #111111);\n }\n\n input[aria-invalid=\"true\"] {\n border-color: var(--sb-danger, #b4231a);\n }\n\n /* field-style=\"underline\" — code boxes keep their box, they read as cells */\n :host([field-style=\"underline\"]) *:not(.code-row):not(.code-row-sm) > input {\n background: transparent;\n border: none;\n border-bottom: 1px solid var(--sb-border-strong, #cdd1d6);\n border-radius: 0;\n padding: 9px 2px;\n }\n\n p.err {\n margin: 0;\n font-size: 12.5px;\n color: var(--sb-danger, #b4231a);\n }\n\n /* ── code entry ──────────────────────────────────────────── */\n .code-row {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n gap: 8px;\n }\n\n .code-row input {\n text-align: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 18px;\n padding: 12px 0;\n }\n\n .code-row-sm {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n gap: 6px;\n }\n\n .code-row-sm input {\n text-align: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 14px;\n padding: 8px 0;\n }\n\n .resend-row {\n display: flex;\n align-items: baseline;\n gap: 8px;\n }\n\n /* ── buttons ─────────────────────────────────────────────── */\n button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n font: inherit;\n font-size: 13.5px;\n font-weight: 500;\n border-radius: var(--sb-radius, 4px);\n cursor: pointer;\n padding: 9px 14px;\n border: 1px solid transparent;\n transition:\n background 0.15s,\n border-color 0.15s,\n filter 0.15s,\n color 0.15s;\n }\n\n button:disabled {\n cursor: not-allowed;\n }\n\n button.primary {\n background: var(--sb-accent, #111111);\n color: var(--sb-on-accent, #ffffff);\n width: 100%;\n }\n\n button.primary:hover:not(:disabled) {\n filter: brightness(0.92);\n }\n\n button.primary-sm {\n background: var(--sb-accent, #111111);\n color: var(--sb-on-accent, #ffffff);\n padding: 7px 12px;\n }\n\n button.primary-sm:hover:not(:disabled) {\n filter: brightness(0.92);\n }\n\n button.ghost {\n background: transparent;\n color: var(--sb-muted-ink, #61666c);\n border: 1px solid var(--sb-border, #e4e6e9);\n width: 100%;\n }\n\n button.ghost-sm {\n background: transparent;\n color: var(--sb-muted-ink, #61666c);\n border: 1px solid var(--sb-border, #e4e6e9);\n padding: 7px 12px;\n }\n\n button.ghost:hover:not(:disabled),\n button.ghost-sm:hover:not(:disabled) {\n background: var(--sb-surface-alt, #fafafa);\n color: var(--sb-ink, #16181a);\n }\n\n button.secondary {\n background: var(--sb-surface, #ffffff);\n color: var(--sb-ink, #16181a);\n border: 1px solid var(--sb-border-strong, #cdd1d6);\n padding: 7px 12px;\n }\n\n button.secondary:hover:not(:disabled) {\n background: var(--sb-surface-alt, #fafafa);\n }\n\n button.link {\n font: inherit;\n font-size: 13px;\n font-weight: 500;\n color: var(--sb-accent, #111111);\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n text-decoration: underline;\n text-underline-offset: 3px;\n }\n\n button.link-sm {\n font: inherit;\n font-size: 12.5px;\n font-weight: 400;\n color: var(--sb-muted-ink, #61666c);\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n text-decoration: underline;\n text-underline-offset: 3px;\n }\n\n /* the mock's editLink: a muted underlined affordance that inks on hover */\n button.edit-link {\n align-self: flex-start;\n font: inherit;\n font-size: 12.5px;\n font-weight: 400;\n color: var(--sb-muted-ink, #61666c);\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n text-decoration: underline;\n text-underline-offset: 3px;\n transition: color 0.15s;\n }\n\n button.edit-link:hover:not(:disabled) {\n color: var(--sb-ink, #16181a);\n }\n\n button.edit-link:disabled {\n opacity: 0.4;\n }\n\n button.danger-link {\n align-self: flex-start;\n font: inherit;\n font-size: 12.5px;\n font-weight: 400;\n color: var(--sb-muted-ink, #61666c);\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n text-decoration: underline;\n text-underline-offset: 3px;\n transition: color 0.15s;\n }\n\n button.danger-link:hover:not(:disabled) {\n color: var(--sb-danger, #b4231a);\n }\n\n button.danger {\n padding: 7px 12px;\n background: transparent;\n color: var(--sb-danger, #b4231a);\n border: 1px solid var(--sb-danger-outline, #e8c4c0);\n }\n\n button.danger:hover:not(:disabled) {\n background: var(--sb-danger-bg, #fdf1f0);\n }\n\n button.danger:disabled {\n opacity: 0.45;\n }\n\n .btn-row {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n }\n\n .btn-row-end {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 12px;\n flex-wrap: wrap;\n }\n\n .edit-actions {\n display: flex;\n gap: 8px;\n padding-top: 2px;\n }\n\n /* ── feedback ────────────────────────────────────────────── */\n .banner,\n .notice {\n font-size: 13px;\n line-height: 1.45;\n border-radius: var(--sb-radius, 4px);\n padding: 10px 12px;\n }\n\n .banner {\n color: var(--sb-danger, #b4231a);\n background: var(--sb-danger-bg, #fdf1f0);\n border: 1px solid var(--sb-danger-border, #f3d6d3);\n }\n\n .notice {\n color: var(--sb-ok, #0f6b4a);\n background: var(--sb-ok-bg, #f0f7f3);\n border: 1px solid var(--sb-ok-border, #cfe5da);\n }\n\n .saved-note {\n font-size: 12.5px;\n font-weight: 500;\n color: var(--sb-ok, #0f6b4a);\n }\n\n .spinner {\n width: 13px;\n height: 13px;\n border: 2px solid rgba(255, 255, 255, 0.4);\n border-top-color: var(--sb-on-accent, #ffffff);\n border-radius: 50%;\n animation: sb-spin 0.7s linear infinite;\n }\n\n @keyframes sb-spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n }\n\n /* ── step bar ────────────────────────────────────────────── */\n .step-bar {\n height: 3px;\n background: var(--sb-border, #e4e6e9);\n border-radius: 99px;\n overflow: hidden;\n }\n\n .step-fill {\n height: 100%;\n background: var(--sb-accent, #111111);\n transition: width 0.3s;\n }\n\n /* ── footer link row ─────────────────────────────────────── */\n .foot {\n margin: 0;\n display: flex;\n gap: 6px;\n justify-content: center;\n font-size: 13px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n /* ── oauth ───────────────────────────────────────────────── */\n .oauth-primary {\n background: var(--sb-surface, #ffffff);\n color: var(--sb-ink, #16181a);\n border: 1px solid var(--sb-border-strong, #cdd1d6);\n width: 100%;\n }\n\n .oauth-primary:hover:not(:disabled) {\n background: var(--sb-surface-alt, #fafafa);\n }\n\n .g-mark {\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-weight: 500;\n font-size: 13px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .icon-row {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 8px;\n }\n\n .icon-btn {\n padding: 7px 0;\n background: var(--sb-surface, #ffffff);\n color: var(--sb-muted-ink, #61666c);\n border: 1px solid var(--sb-border, #e4e6e9);\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 13px;\n }\n\n .icon-btn:hover:not(:disabled) {\n background: var(--sb-surface-alt, #fafafa);\n color: var(--sb-ink, #16181a);\n }\n\n /* ── accordion (method picker) ───────────────────────────── */\n .acc-wrap {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .acc-item {\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: var(--sb-radius, 4px);\n overflow: hidden;\n background: transparent;\n transition:\n border-color 0.2s,\n background 0.2s;\n }\n\n .acc-item.open {\n border-color: var(--sb-border-strong, #cdd1d6);\n background: var(--sb-surface, #ffffff);\n }\n\n .acc-item.bare {\n border: none;\n background: transparent;\n }\n\n .acc-head {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n box-sizing: border-box;\n font: inherit;\n text-align: left;\n background: transparent;\n border: none;\n border-radius: 0;\n padding: 11px 12px;\n cursor: pointer;\n color: var(--sb-ink, #16181a);\n transition: background 0.15s;\n }\n\n .acc-head:hover {\n background: var(--sb-surface-alt, #fafafa);\n }\n\n .chev {\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 13px;\n color: var(--sb-muted-ink, #61666c);\n line-height: 1;\n transform: rotate(0deg);\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .acc-item.open .chev {\n transform: rotate(90deg);\n }\n\n .acc-title {\n font-size: 13.5px;\n font-weight: 500;\n color: var(--sb-ink, #16181a);\n letter-spacing: -0.005em;\n }\n\n .acc-meta {\n font-size: 12px;\n color: var(--sb-muted-ink, #61666c);\n margin-left: auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .acc-body {\n display: grid;\n grid-template-rows: 0fr;\n opacity: 0;\n transition:\n grid-template-rows 0.28s cubic-bezier(0.32, 0.72, 0, 1),\n opacity 0.16s ease;\n }\n\n .acc-item.open .acc-body {\n grid-template-rows: 1fr;\n opacity: 1;\n transition:\n grid-template-rows 0.34s cubic-bezier(0.32, 0.72, 0, 1),\n opacity 0.26s ease 0.06s;\n }\n\n .acc-clip {\n overflow: hidden;\n min-height: 0;\n }\n\n .acc-inner {\n display: flex;\n flex-direction: column;\n gap: var(--sb-gap, 16px);\n padding: 2px 12px 14px;\n transform: translateY(-4px);\n transition: transform 0.3s cubic-bezier(0.32, 0.72, 0, 1);\n }\n\n .acc-item.open .acc-inner {\n transform: translateY(0);\n }\n\n .acc-item.bare .acc-inner {\n padding: 0;\n }\n\n /* ── invite ──────────────────────────────────────────────── */\n .invite-box {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 10px 12px;\n background: var(--sb-surface-alt, #fafafa);\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: var(--sb-radius, 4px);\n }\n\n .invite-label {\n font-size: 11.5px;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n color: var(--sb-muted-ink, #61666c);\n }\n\n .invite-email {\n font-size: 14px;\n color: var(--sb-ink, #16181a);\n }\n\n /* ── account ─────────────────────────────────────────────── */\n .acct-root {\n display: flex;\n flex-direction: column;\n gap: 22px;\n width: 100%;\n }\n\n .acct-nav {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n padding-bottom: 18px;\n border-bottom: 1px solid var(--sb-border, #e4e6e9);\n }\n\n .acct-who {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .avatar-col {\n flex: 0 0 auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n }\n\n .avatar {\n flex: 0 0 auto;\n width: 42px;\n height: 42px;\n border-radius: 50%;\n background: var(--sb-surface-alt, #fafafa);\n border: 1px dashed var(--sb-border, #e4e6e9);\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 13px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .avatar.has-photo {\n border-style: solid;\n overflow: hidden;\n }\n .avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n .avatar-lg {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--sb-surface-alt, #fafafa);\n border: 1px dashed var(--sb-border-strong, #cdd1d6);\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 13px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .avatar-row {\n display: flex;\n align-items: center;\n gap: 14px;\n }\n\n .avatar-actions {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .acct-who-text {\n min-width: 0;\n }\n\n .acct-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--sb-ink, #16181a);\n letter-spacing: -0.01em;\n }\n\n .acct-email {\n font-size: 12.5px;\n color: var(--sb-muted-ink, #61666c);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .acct-body {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 22px;\n }\n\n .section {\n display: flex;\n flex-direction: column;\n gap: 14px;\n }\n\n .sum-list {\n display: flex;\n flex-direction: column;\n }\n\n .sum-row {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: 16px;\n padding: 15px 0;\n border-bottom: 1px solid var(--sb-border, #e4e6e9);\n }\n\n .sum-label {\n flex: 0 0 auto;\n font-size: 12.5px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .sum-value {\n min-width: 0;\n font-size: 13.5px;\n color: var(--sb-ink, #16181a);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .edit-card {\n display: flex;\n flex-direction: column;\n gap: var(--sb-gap, 16px);\n padding: 14px;\n background: var(--sb-surface-alt, #fafafa);\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: var(--sb-radius, 4px);\n }\n\n /* 2FA switch */\n .switch {\n flex: 0 0 auto;\n width: 42px;\n height: 24px;\n border-radius: 99px;\n border: 1px solid var(--sb-border-strong, #cdd1d6);\n background: var(--sb-surface-alt, #fafafa);\n cursor: pointer;\n padding: 2px;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n transition:\n background 0.15s,\n border-color 0.15s;\n }\n\n .switch[aria-pressed=\"true\"] {\n border-color: var(--sb-accent, #111111);\n background: var(--sb-accent, #111111);\n justify-content: flex-end;\n }\n\n .knob {\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--sb-muted-ink, #61666c);\n display: block;\n }\n\n .switch[aria-pressed=\"true\"] .knob {\n background: var(--sb-on-accent, #ffffff);\n }\n\n .qr-row {\n display: flex;\n gap: 14px;\n align-items: flex-start;\n }\n\n .qr-box {\n flex: 0 0 auto;\n width: 74px;\n height: 74px;\n border-radius: var(--sb-radius, 4px);\n background: var(--sb-surface-alt, #fafafa);\n border: 1px dashed var(--sb-border-strong, #cdd1d6);\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 12px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .qr-text {\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-width: 0;\n }\n\n /* connected accounts */\n .list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .conn-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 10px 12px;\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: var(--sb-radius, 4px);\n background: var(--sb-surface-alt, #fafafa);\n }\n\n .conn-left {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n }\n\n .conn-mark {\n flex: 0 0 auto;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background: var(--sb-surface, #ffffff);\n border: 1px solid var(--sb-border, #e4e6e9);\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 11px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .conn-name {\n font-size: 13.5px;\n font-weight: 500;\n color: var(--sb-ink, #16181a);\n }\n\n .meta-row {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .dot {\n flex: 0 0 auto;\n width: 5px;\n height: 5px;\n border-radius: 50%;\n background: var(--sb-ok, #0f6b4a);\n }\n\n .conn-meta {\n font-size: 12px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .tile-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(118px, 1fr));\n gap: 8px;\n }\n\n .tile {\n display: flex;\n align-items: center;\n gap: 8px;\n font: inherit;\n text-align: left;\n padding: 10px 11px;\n border-radius: var(--sb-radius, 4px);\n border: 1px dashed var(--sb-border-strong, #cdd1d6);\n background: transparent;\n cursor: pointer;\n transition:\n background 0.15s,\n border-color 0.15s,\n color 0.15s;\n }\n\n .tile:hover:not(:disabled) {\n background: var(--sb-surface-alt, #fafafa);\n border-color: var(--sb-accent, #111111);\n border-style: solid;\n }\n\n .tile-mark {\n flex: 0 0 auto;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n background: var(--sb-surface-alt, #fafafa);\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 10.5px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .tile-name {\n font-size: 13px;\n color: var(--sb-ink, #16181a);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .tile-plus {\n margin-left: auto;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 14px;\n line-height: 1;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .delete-panel {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 14px;\n border: 1px solid var(--sb-danger-panel-border, #efd9d6);\n border-radius: var(--sb-radius, 4px);\n background: var(--sb-danger-panel-bg, #fdf7f6);\n }\n\n .disabled-note {\n font-size: 12px;\n color: var(--sb-muted-ink, #61666c);\n font-style: italic;\n }\n`;\n","/**\n * Default UI copy, taken verbatim from the design mock's renderVals()\n * (titles/subs/ctas maps and inline strings in project/AuthWidget.dc.html).\n * Every element accepts a .messages property with a partial override of\n * this shape — spec: \"configurable labels and messages without changing flow\n * logic\". This is deliberately a flat string bag rather than a locale-file\n * system; hosts needing full i18n supply one populated object per language.\n */\nexport interface SinglebaseAuthMessages {\n // titles\n signInTitle: string;\n signUpTitle: string;\n forgotTitle: string;\n verifyTitle: string;\n otpTitle: string;\n newPassTitle: string;\n inviteTitle: string;\n\n // subtitles\n signInSubEmailAndOauth: string;\n signInSubEmailOnly: string;\n signInSubOauthOnly: string;\n signUpSub: string;\n forgotSub: string;\n otpSub: string;\n inviteSub: string;\n\n // ctas\n signInCta: string;\n signUpCta: string;\n forgotCta: string;\n verifyCta: string;\n otpCta: string;\n newPassCta: string;\n inviteCta: string;\n continueCta: string;\n backCta: string;\n\n // accordion\n emailMethodTitle: string;\n emailMethodTitleSignUp: string;\n emailMethodMeta: string;\n emailMethodMetaSignUp: string;\n emailMethodMetaOtp: string;\n oauthMethodTitle: string;\n oauthMethodMeta: string;\n\n // fields\n fullNameLabel: string;\n fullNamePlaceholder: string;\n emailLabel: string;\n emailPlaceholder: string;\n passwordLabel: string;\n passwordPlaceholder: string;\n newPasswordLabel: string;\n newPasswordPlaceholder: string;\n confirmPasswordLabel: string;\n confirmPasswordPlaceholder: string;\n currentPasswordLabel: string;\n firstNameLabel: string;\n firstNamePlaceholder: string;\n lastNameLabel: string;\n lastNamePlaceholder: string;\n phoneLabel: string;\n phonePlaceholder: string;\n invitedEmailLabel: string;\n\n // links / affordances\n forgotLink: string;\n otpInsteadLink: string;\n footTextSignIn: string;\n footActionSignIn: string;\n footTextSignUp: string;\n footActionSignUp: string;\n resendQuestion: string;\n resendCta: string;\n oauthPrimaryLabel: string;\n oauthContinueWith: string;\n\n // blocked\n blockedTitleDisabled: string;\n blockedTitleUnavailable: string;\n blockedBodyDisabled: string;\n blockedBodyUnavailable: string;\n blockedHint: string;\n\n // account\n signOutCta: string;\n addPhotoLink: string;\n changePhotoLink: string;\n photoUploading: string;\n photoUpdated: string;\n editingLabel: string;\n uploadPhotoCta: string;\n replacePhotoCta: string;\n photoHint: string;\n doneCta: string;\n cancelCta: string;\n editAccountCta: string;\n saveChangesCta: string;\n emailChangeHint: string;\n passwordSectionTitle: string;\n passwordChangedHint: string;\n changePasswordCta: string;\n updatePasswordCta: string;\n twoFaTitle: string;\n twoFaHintOff: string;\n twoFaHintOn: string;\n twoFaScanHint: string;\n connectedTitle: string;\n connectedHint: string;\n addAnotherLabel: string;\n disconnectCta: string;\n notConnectedLabel: string;\n deleteAccountCta: string;\n deleteAccountConfirmCta: string;\n deletePanelBody: string;\n deleteConfirmLabel: string;\n deleteConfirmPlaceholder: string;\n savedNote: string;\n passwordUpdatedNote: string;\n\n // standalone change-email / change-username forms\n changeEmailTitle: string;\n newEmailLabel: string;\n changeEmailCta: string;\n changeUsernameTitle: string;\n newUsernameLabel: string;\n changeUsernameCta: string;\n\n // generic async / errors\n genericErrorMessage: string;\n rateLimitedMessage: string;\n codeSentNeutral: string;\n invalidEmailError: string;\n requiredError: string;\n passwordMinError: string;\n passwordMatchError: string;\n codeIncompleteError: string;\n invalidPhoneError: string;\n notYetSupported: string;\n\n // already-signed-in interstitial\n alreadySignedInTitle: string;\n alreadySignedInSub: string;\n alreadySignedInSubPrefix: string;\n continueHint: string;\n\n // consent line\n consentPrefix: string;\n consentJoin: string;\n termsLabel: string;\n privacyLabel: string;\n\n emailUnchangedError: string;\n emailUpdatedNote: string;\n changeEmailCtaShort: string;\n changeEmailHint: string;\n changeEmailConfirmHint: string;\n changeEmailElsewhereHint: string;\n confirmChangeCta: string;\n codeLabel: string;\n /** The credit under the card. A brand name — translate only the \"Auth by\". */\n brandingLabel: string;\n\n // provider linking\n linkRequiresSignIn: string;\n\n // oauth callback screen\n oauthCallbackTitle: string;\n oauthCallbackSub: string;\n oauthDenied: string;\n}\n\nexport const defaultMessages: SinglebaseAuthMessages = {\n signInTitle: \"Sign in\",\n signUpTitle: \"Create your account\",\n forgotTitle: \"Reset your password\",\n verifyTitle: \"Enter your code\",\n otpTitle: \"Sign in with a code\",\n newPassTitle: \"Choose a new password\",\n inviteTitle: \"You have been invited\",\n\n signInSubEmailAndOauth: \"Use your email or a connected provider.\",\n signInSubEmailOnly: \"Use your email address and password.\",\n signInSubOauthOnly: \"Continue with a connected provider.\",\n signUpSub: \"Free to start. No card required.\",\n forgotSub: \"We will email you a six-digit code to confirm it is you.\",\n otpSub: \"No password needed — we will email you a six-digit code.\",\n inviteSub: \"Set up your account to continue.\",\n\n signInCta: \"Sign in\",\n signUpCta: \"Create account\",\n forgotCta: \"Send code\",\n verifyCta: \"Verify code\",\n otpCta: \"Email me a code\",\n newPassCta: \"Save password\",\n inviteCta: \"Create account\",\n continueCta: \"Continue\",\n backCta: \"Back\",\n\n emailMethodTitle: \"Email\",\n emailMethodTitleSignUp: \"Email and password\",\n emailMethodMeta: \"Password or one-time code\",\n emailMethodMetaSignUp: \"Create with an address\",\n emailMethodMetaOtp: \"One-time code\",\n oauthMethodTitle: \"Single sign-on\",\n oauthMethodMeta: \"Google, GitHub, and more\",\n\n fullNameLabel: \"Full name\",\n fullNamePlaceholder: \"Ada Lovelace\",\n emailLabel: \"Email\",\n emailPlaceholder: \"you@company.com\",\n passwordLabel: \"Password\",\n passwordPlaceholder: \"••••••••\",\n newPasswordLabel: \"New password\",\n newPasswordPlaceholder: \"At least 10 characters\",\n confirmPasswordLabel: \"Confirm password\",\n confirmPasswordPlaceholder: \"Repeat it\",\n currentPasswordLabel: \"Current password\",\n firstNameLabel: \"First name\",\n firstNamePlaceholder: \"Ada\",\n lastNameLabel: \"Last name\",\n lastNamePlaceholder: \"Lovelace\",\n phoneLabel: \"Phone number\",\n phonePlaceholder: \"+1 (555) 000-0000\",\n invitedEmailLabel: \"Invited email\",\n\n forgotLink: \"Forgot?\",\n otpInsteadLink: \"Email me a one-time code instead\",\n footTextSignIn: \"New here?\",\n footActionSignIn: \"Create an account\",\n footTextSignUp: \"Already have an account?\",\n footActionSignUp: \"Sign in\",\n resendQuestion: \"Did not get it?\",\n resendCta: \"Resend code\",\n oauthPrimaryLabel: \"Continue with Google\",\n oauthContinueWith: \"Continue with\",\n\n blockedTitleDisabled: \"Sign-in is turned off\",\n blockedTitleUnavailable: \"Sign-in unavailable\",\n blockedBodyDisabled: \"Authentication is currently disabled for this application.\",\n blockedBodyUnavailable: \"No sign-in methods are enabled for this application.\",\n blockedHint: \"Contact the site owner if you think this is a mistake.\",\n\n signOutCta: \"Sign out\",\n addPhotoLink: \"Add photo\",\n changePhotoLink: \"Change\",\n photoUploading: \"Uploading…\",\n photoUpdated: \"Photo updated\",\n editingLabel: \"Editing\",\n uploadPhotoCta: \"Upload photo\",\n replacePhotoCta: \"Replace photo\",\n photoHint: \"PNG or JPG, up to 2 MB.\",\n doneCta: \"Done\",\n cancelCta: \"Cancel\",\n editAccountCta: \"Edit account\",\n saveChangesCta: \"Save changes\",\n emailChangeHint: \"We will send a verification link to the new address.\",\n passwordSectionTitle: \"Password\",\n passwordChangedHint: \"Last changed three months ago.\",\n changePasswordCta: \"Change password\",\n updatePasswordCta: \"Update password\",\n twoFaTitle: \"Two-factor authentication\",\n twoFaHintOff: \"Add a second step when signing in.\",\n twoFaHintOn: \"Enabled with an authenticator app.\",\n twoFaScanHint: \"Scan with your authenticator app, then enter the 6-digit code.\",\n connectedTitle: \"Connected accounts\",\n connectedHint: \"Sign in with any provider you connect here.\",\n addAnotherLabel: \"Add another\",\n disconnectCta: \"Disconnect\",\n notConnectedLabel: \"Not connected\",\n deleteAccountCta: \"Delete account\",\n deleteAccountConfirmCta: \"Permanently delete account\",\n deletePanelBody:\n \"This removes your profile, sessions and connected providers. It cannot be undone.\",\n deleteConfirmLabel: \"Type DELETE to confirm\",\n deleteConfirmPlaceholder: \"DELETE\",\n savedNote: \"Saved\",\n passwordUpdatedNote: \"Password updated\",\n\n changeEmailTitle: \"Email\",\n newEmailLabel: \"New email\",\n changeEmailCta: \"Send verification code\",\n changeUsernameTitle: \"Username\",\n newUsernameLabel: \"New username\",\n changeUsernameCta: \"Send verification code\",\n\n genericErrorMessage: \"Something went wrong. Please try again.\",\n rateLimitedMessage: \"Too many attempts. Try again in 5 minutes or reset your password.\",\n codeSentNeutral: \"If an eligible account exists, a code has been sent.\",\n invalidEmailError: \"Enter a valid email address.\",\n requiredError: \"This cannot be empty.\",\n passwordMinError: \"Use at least 10 characters.\",\n passwordMatchError: \"Both passwords must match.\",\n codeIncompleteError: \"Enter all six digits.\",\n invalidPhoneError: \"Enter a valid phone number.\",\n notYetSupported: \"Not yet supported\",\n\n alreadySignedInTitle: \"You are already signed in\",\n alreadySignedInSub: \"Continue where you left off, or sign out to use another account.\",\n alreadySignedInSubPrefix: \"Signed in as\",\n continueHint: \"Continuing takes you to your account.\",\n\n consentPrefix: \"By continuing you agree to our\",\n consentJoin: \"and\",\n termsLabel: \"Terms\",\n privacyLabel: \"Privacy Policy\",\n\n emailUnchangedError: \"That is already your email address.\",\n emailUpdatedNote: \"Email updated\",\n changeEmailCtaShort: \"Change email\",\n changeEmailHint: \"We will send a code to your current address to confirm it is you.\",\n changeEmailConfirmHint: \"Enter the code we sent, and your email becomes\",\n changeEmailElsewhereHint: \"Your email is changed below, with a verification step.\",\n confirmChangeCta: \"Confirm change\",\n codeLabel: \"Verification code\",\n brandingLabel: \"Auth by Singlebase\",\n linkRequiresSignIn: \"Sign in first, then link a provider.\",\n\n oauthCallbackTitle: \"Finishing sign-in\",\n oauthCallbackSub: \"One moment while we complete your sign-in.\",\n oauthDenied: \"Sign-in was cancelled or denied.\"\n};\n\nexport function resolveMessages(\n overrides?: Partial<SinglebaseAuthMessages>\n): SinglebaseAuthMessages {\n return overrides ? { ...defaultMessages, ...overrides } : defaultMessages;\n}\n","import { LitElement, type PropertyValues } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport {\n AUTHUI_PROP_KEYS,\n authUIAttributeFor,\n getDefaultClient,\n type AuthUIConfig\n} from \"@singlebase/core\";\nimport type { AuthClient, UserProfile } from \"@singlebase/singlebase-sdk\";\nimport { AuthController } from \"../controllers/auth-controller.js\";\nimport { tokenDefaults } from \"../styles/tokens.js\";\nimport { sharedStyles } from \"../styles/shared.js\";\nimport { defaultMessages, resolveMessages, type SinglebaseAuthMessages } from \"../messages.js\";\n\n/**\n * Base class for every singlebase-* element: resolves an AuthClient, exposes\n * .messages overrides, and gives subclasses a live AuthController bound to\n * whichever client won.\n */\nexport abstract class SinglebaseElementBase extends LitElement {\n static styles = [tokenDefaults, sharedStyles];\n\n @property({ attribute: false })\n accessor client: AuthClient | null = null;\n\n @property({ attribute: false })\n accessor messages: Partial<SinglebaseAuthMessages> = {};\n\n /**\n * theme/density/field-style are plain reflected attributes so a composing\n * parent can forward them verbatim to the singlebase-* children it renders.\n * CSS custom properties inherit through shadow boundaries on their own,\n * but an *attribute* selector like :host([theme=\"dark\"]) only matches\n * the element that actually carries the attribute, so it must be\n * explicitly propagated down the composition tree.\n */\n @property({ reflect: true })\n accessor theme: \"light\" | \"dark\" | undefined = undefined;\n\n @property({ reflect: true })\n accessor density: \"comfortable\" | \"compact\" | undefined = undefined;\n\n /**\n * Input chrome: boxed (default) or a single bottom rule. Reflected for the\n * same reason as theme/density — the CSS is an attribute selector.\n */\n @property({ reflect: true, attribute: \"field-style\" })\n accessor fieldStyle: \"outline\" | \"underline\" | undefined = undefined;\n\n protected auth = new AuthController(this);\n\n /**\n * Resolution order: an explicit `.client`, then the page's default\n * SinglebaseClient()'s auth.\n *\n * That fallback is what lets several widgets sit on one page — a header\n * sign-in, a modal, an account panel — and share one session with no\n * wiring, since SinglebaseClient() is cached per project. A page talking to\n * two projects sets `.client` on the widgets belonging to the second.\n *\n * Reading `.auth` is also what *constructs* auth: a page that only drops\n * in a widget initializes it with no bootstrap code at all.\n */\n get resolvedClient(): AuthClient | null {\n if (this.client) return this.client;\n return getDefaultClient<{ auth: AuthClient }>()?.auth ?? null;\n }\n\n /** Page-wide UI config from SinglebaseClient({ authui }), if there is one. */\n get uiConfig(): AuthUIConfig | null {\n return this.resolvedClient?.authui ?? null;\n }\n\n /**\n * Config messages sit *under* the element's own, so a page-wide translation\n * can be overridden per widget without repeating the whole bag.\n */\n get msg(): SinglebaseAuthMessages {\n const shared = this.uiConfig?.messages;\n return resolveMessages(shared ? { ...shared, ...this.messages } : this.messages);\n }\n\n /** Config keys already applied, so a later render does not fight the host. */\n private appliedConfig = new Set<string>();\n\n /**\n * Copies the page-wide config onto this element.\n *\n * An attribute present in markup always wins — that is the whole precedence\n * rule, and it is checked per key rather than wholesale, so a widget can\n * override one thing and inherit the rest. Keys the element does not have\n * are skipped, which is how one config can serve every singlebase-authui-*\n * element without any of them knowing about the others.\n */\n protected applyUIConfig(): void {\n const config = this.uiConfig;\n if (!config) return;\n\n for (const key of AUTHUI_PROP_KEYS) {\n const value = config[key];\n if (value === undefined) continue;\n if (!(key in this)) continue;\n if (this.hasAttribute(authUIAttributeFor(key))) continue;\n if (this.appliedConfig.has(key)) continue;\n\n this.appliedConfig.add(key);\n (this as unknown as Record<string, unknown>)[key] = value;\n }\n\n for (const [name, value] of Object.entries(config.tokens ?? {})) {\n if (!name.startsWith(\"--\")) continue;\n // Anything already set inline came from the host and stays.\n if (this.style.getPropertyValue(name)) continue;\n this.style.setProperty(name, value);\n }\n }\n\n // ── public API mirrored from the client, for host/SPA code ──\n isAuthenticated(): boolean {\n return this.resolvedClient?.isAuthenticated() ?? false;\n }\n\n getUser(): UserProfile | null {\n return this.resolvedClient?.getUser() ?? null;\n }\n\n async refreshSession() {\n return this.resolvedClient?.refreshSession();\n }\n\n async logout(): Promise<void> {\n await this.resolvedClient?.logout();\n }\n\n override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.auth.bind(this.resolvedClient);\n this.applyUIConfig();\n }\n}\n\nexport { defaultMessages };\n","/**\n * Resolves a post-login destination, or null when there isn't a safe one.\n *\n * The candidate usually comes from a `?redirect=` parameter, which is\n * attacker-controllable: anyone can send a victim a link to your own login\n * page carrying `?redirect=https://evil.example`. If the widget followed it,\n * the victim would sign in on a page they trust and then be handed to a site\n * they don't — a textbook open redirect, and a convincing one precisely\n * because the login step was genuine.\n *\n * So the rule is same-origin only. Relative paths resolve against the current\n * page; anything landing on another origin is refused, and the caller is told\n * why rather than left wondering where the redirect went.\n */\nexport function resolveRedirectTarget(\n candidate: string | null | undefined,\n currentHref: string | null | undefined,\n onRefused?: (reason: string) => void\n): string | null {\n if (!candidate || !currentHref) return null;\n\n let here: URL;\n try {\n here = new URL(currentHref);\n } catch {\n return null;\n }\n\n let target: URL;\n try {\n target = new URL(candidate, here.href);\n } catch {\n onRefused?.(`\"${candidate}\" is not a valid URL`);\n return null;\n }\n\n // Only ever http(s). A `javascript:` or `data:` candidate resolves to a URL\n // object quite happily, and assigning it would execute script.\n if (target.protocol !== \"http:\" && target.protocol !== \"https:\") {\n onRefused?.(`refusing redirect to unsupported scheme \"${target.protocol}\"`);\n return null;\n }\n\n if (target.origin !== here.origin) {\n onRefused?.(`refusing cross-origin redirect to ${target.origin}; same-origin only`);\n return null;\n }\n\n // Already there — redirecting would just reload, and can loop.\n if (target.href === here.href) return null;\n\n return target.href;\n}\n","import type { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport type { AuthClient, AuthSettings } from \"@singlebase/singlebase-sdk\";\n\n/**\n * Loads auth.settings once per bound client and caches it, so composing\n * many form elements inside <singlebase-authui> doesn't mean many redundant\n * auth.settings calls. Each element may also be given .settings directly\n * (e.g. by a parent that already loaded them) to skip the fetch entirely.\n */\nexport class SettingsController implements ReactiveController {\n private host: ReactiveControllerHost;\n private client: AuthClient | null = null;\n private cache = new WeakMap<AuthClient, Promise<AuthSettings>>();\n settings: AuthSettings | null = null;\n error: unknown = null;\n\n constructor(host: ReactiveControllerHost) {\n this.host = host;\n host.addController(this);\n }\n\n hostConnected(): void {}\n\n load(client: AuthClient | null, override?: AuthSettings | null): void {\n if (override) {\n this.settings = override;\n return;\n }\n if (!client || client === this.client) return;\n this.client = client;\n let pending = this.cache.get(client);\n if (!pending) {\n pending = client.getSettings();\n this.cache.set(client, pending);\n }\n pending\n .then((settings) => {\n this.settings = settings;\n this.error = null;\n this.host.requestUpdate();\n })\n .catch((error) => {\n this.error = error;\n this.host.requestUpdate();\n });\n }\n}\n","import type { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport type { AuthClient, AuthEventName } from \"@singlebase/singlebase-sdk\";\n\nexport const BRIDGED_EVENTS = [\n \"load\",\n \"success\",\n \"error\",\n \"signin\",\n \"signup\",\n \"signout\",\n \"session\",\n \"account-updated\",\n \"password-change\",\n \"email-change\",\n \"username-change\",\n \"expired\",\n \"navigate\",\n \"goto\"\n] as const satisfies readonly AuthEventName[];\n\n/**\n * The auth API's event names mapped onto the\n * friendlier ones. Both are dispatched so either style works.\n */\nconst SPEC_ALIASES: Partial<Record<AuthEventName, string>> = {\n load: \"auth:ready\",\n signin: \"auth:signin\",\n signup: \"auth:signup\",\n session: \"auth:session\",\n \"account-updated\": \"auth:profile-update\",\n signout: \"auth:signout\",\n error: \"auth:error\",\n navigate: \"auth:navigate\"\n};\n\n/** \"account-updated\" -> \"onAccountUpdated\" */\nexport function callbackPropFor(event: string): string {\n return \"on\" + event.replace(/(^|-)([a-z])/g, (_, __, c: string) => c.toUpperCase());\n}\n\n/**\n * Re-publishes core auth events on the host element in the two ways host\n * apps actually consume them:\n *\n * - a DOM CustomEvent (`singlebase-signin`, and the spec's `auth:signin`),\n * bubbling and composed so `document.addEventListener` works;\n * - a callback property (`el.onSignin = fn`), since HTML attributes cannot\n * carry functions.\n *\n * Event details never include tokens — consumers read the session through\n * the client, per the spec's events rule.\n */\nexport class EventBridge implements ReactiveController {\n private unsubscribes: Array<() => void> = [];\n private client: AuthClient | null = null;\n\n constructor(private host: ReactiveControllerHost & HTMLElement) {\n host.addController(this);\n }\n\n bind(client: AuthClient | null): void {\n if (client === this.client) return;\n this.release();\n this.client = client;\n if (!client) return;\n\n this.unsubscribes = BRIDGED_EVENTS.map((event) =>\n client.on(event, (detail: unknown) => this.publish(event, detail))\n );\n }\n\n private publish(event: string, detail: unknown) {\n const callback = (this.host as unknown as Record<string, unknown>)[callbackPropFor(event)];\n if (typeof callback === \"function\") {\n try {\n (callback as (d: unknown) => void).call(this.host, detail);\n } catch (error) {\n console.error(`[singlebase] ${callbackPropFor(event)} threw:`, error);\n }\n }\n\n const init: CustomEventInit = { detail, bubbles: true, composed: true };\n this.host.dispatchEvent(new CustomEvent(`singlebase-${event}`, init));\n const alias = SPEC_ALIASES[event as AuthEventName];\n if (alias) this.host.dispatchEvent(new CustomEvent(alias, init));\n }\n\n private release() {\n this.unsubscribes.forEach((off) => off());\n this.unsubscribes = [];\n }\n\n hostDisconnected(): void {\n this.release();\n this.client = null;\n }\n}\n","import { html } from \"lit\";\nimport { state } from \"lit/decorators.js\";\nimport { SinglebaseAuthError, mapErrorToHint } from \"@singlebase/singlebase-sdk\";\nimport { SinglebaseElementBase } from \"./base.js\";\n\nexport type FormPhase = \"idle\" | \"submitting\" | \"success\" | \"error\";\n\n/**\n * Adds the spec's required cross-cutting form behavior to SinglebaseElementBase:\n * idle/submitting/success/error phase, a form-level error message, disabled\n * controls while submitting, an aria-live status region, and cancellation of\n * in-flight work on disconnect.\n */\nexport abstract class SinglebaseFormBase extends SinglebaseElementBase {\n @state()\n protected accessor phase: FormPhase = \"idle\";\n\n @state()\n protected accessor formError = \"\";\n\n @state()\n protected accessor noticeMessage = \"\";\n\n protected abortController: AbortController | null = null;\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.abortController?.abort();\n }\n\n protected get signal(): AbortSignal {\n this.abortController?.abort();\n this.abortController = new AbortController();\n return this.abortController.signal;\n }\n\n /** Runs task, tracking idle→submitting→success/error and mapping errors to a message. */\n protected async run(task: () => Promise<void>): Promise<void> {\n this.phase = \"submitting\";\n this.formError = \"\";\n try {\n await task();\n this.phase = \"success\";\n } catch (error) {\n if (this.isAbortError(error)) return;\n this.phase = \"error\";\n this.formError = this.describeError(error);\n }\n }\n\n private isAbortError(error: unknown): boolean {\n return error instanceof DOMException && error.name === \"AbortError\";\n }\n\n protected describeError(error: unknown): string {\n if (error instanceof SinglebaseAuthError) {\n const hint = mapErrorToHint(error.code);\n if (hint === \"disable_retry_show_rate_limited\") return this.msg.rateLimitedMessage;\n if (hint === \"generic_credentials_message\") return this.msg.genericErrorMessage;\n return this.msg.genericErrorMessage;\n }\n return this.msg.genericErrorMessage;\n }\n\n protected get submitting(): boolean {\n return this.phase === \"submitting\";\n }\n\n /** aria-live region for async status — spec requires one per form. */\n protected renderStatus() {\n return html`\n <div\n role=\"status\"\n aria-live=\"polite\"\n style=\"position:absolute;width:1px;height:1px;overflow:hidden;\"\n >\n ${this.phase === \"submitting\" ? \"Submitting…\" : \"\"}\n ${this.phase === \"success\" ? \"Done.\" : \"\"}\n </div>\n ${this.formError ? html`<p class=\"banner\" role=\"alert\">${this.formError}</p>` : null}\n ${this.noticeMessage ? html`<p class=\"notice\" role=\"status\">${this.noticeMessage}</p>` : null}\n `;\n }\n}\n","import type { UserProfile } from \"@singlebase/singlebase-sdk\";\n\n/** \"Ada Lovelace\", or \"\" when the profile carries no name at all. */\nexport function fullNameOf(user: Pick<UserProfile, \"first_name\" | \"last_name\"> | null): string {\n return [user?.first_name, user?.last_name].filter(Boolean).join(\" \").trim();\n}\n\n/**\n * Two-letter avatar initials. Falls back to the email's first letter, then to\n * a neutral glyph, so the avatar is never blank for a profile that only has\n * an address.\n */\nexport function initialsOf(\n user: Pick<UserProfile, \"first_name\" | \"last_name\" | \"email\"> | null\n): string {\n const name = fullNameOf(user);\n if (name) {\n return name\n .split(/\\s+/)\n .map((word) => word[0])\n .join(\"\")\n .slice(0, 2)\n .toUpperCase();\n }\n const email = user?.email ?? \"\";\n return email ? email[0]!.toUpperCase() : \"·\";\n}\n","/**\n * Default copy for <singlebase-uploader>. Same shape and contract as the\n * auth bag in messages.ts: a flat set of strings, overridable in whole or in\n * part through the element's `.messages` property.\n *\n * `{n}`, `{max}`, `{name}` and `{size}` are filled in by `fill()`.\n */\nexport interface SinglebaseUploadMessages {\n heading: string;\n description: string;\n\n // dropzone\n dropTitle: string;\n dropSub: string;\n hintUpTo: string;\n\n // controls\n chooseFiles: string;\n chooseFile: string;\n addMore: string;\n remove: string;\n rename: string;\n retry: string;\n uploadCtaOne: string;\n uploadCtaMany: string;\n\n // compact view\n attachments: string;\n dropOrChoose: string;\n\n // status\n checking: string;\n pagesLabel: string;\n countOne: string;\n countMany: string;\n uploading: string;\n uploaded: string;\n failedLabel: string;\n\n // problems\n errTooMany: string;\n errTooLarge: string;\n errTooSmall: string;\n errDuplicate: string;\n errType: string;\n errNoClient: string;\n errUpload: string;\n errProtected: string;\n errTooManyPages: string;\n\n brandingLabel: string;\n}\n\nexport const defaultUploadMessages: SinglebaseUploadMessages = {\n heading: \"Upload files\",\n description: \"Add one or more files. You can review the list before uploading.\",\n\n dropTitle: \"Drag and drop files here\",\n dropSub: \"or browse from your device\",\n hintUpTo: \"up to {size} each\",\n\n chooseFiles: \"Choose files\",\n chooseFile: \"Choose file\",\n addMore: \"+ Add more files\",\n remove: \"Remove\",\n rename: \"Rename\",\n retry: \"Retry\",\n uploadCtaOne: \"Upload {n} file\",\n uploadCtaMany: \"Upload {n} files\",\n\n attachments: \"Attachments\",\n dropOrChoose: \"Drop files or choose\",\n\n checking: \"Checking…\",\n pagesLabel: \"{n} pages\",\n countOne: \"{n} file of {max}\",\n countMany: \"{n} files of {max}\",\n uploading: \"Uploading…\",\n uploaded: \"Uploaded\",\n failedLabel: \"Failed\",\n\n errTooMany: \"You can upload up to {max} files.\",\n errTooLarge: \"{name} is larger than {size}.\",\n errTooSmall: \"{name} is smaller than {size}.\",\n errDuplicate: \"{name} is already in the list.\",\n errType: \"{name} isn't an accepted file type.\",\n errNoClient: \"No Singlebase client found on this page.\",\n errUpload: \"Upload failed.\",\n errProtected: \"{name} is password protected.\",\n errTooManyPages: \"{name} has {pages} pages; the limit is {max}.\",\n\n brandingLabel: \"Files by Singlebase\"\n};\n\nexport function resolveUploadMessages(\n overrides?: Partial<SinglebaseUploadMessages>\n): SinglebaseUploadMessages {\n return overrides ? { ...defaultUploadMessages, ...overrides } : defaultUploadMessages;\n}\n\n/** Fills `{token}` placeholders. Values are plain text and rendered as text. */\nexport function fill(template: string, values: Record<string, string | number>): string {\n return template.replace(/\\{(\\w+)\\}/g, (match, key) =>\n key in values ? String(values[key]) : match\n );\n}\n","/**\n * Small pure helpers for <singlebase-uploader>: parsing and printing\n * sizes, matching an `accept` list, and the identity a duplicate is judged by.\n * Kept out of the element so they can be tested without a DOM.\n */\n\nconst UNITS: Record<string, number> = {\n b: 1,\n kb: 1024,\n mb: 1024 * 1024,\n gb: 1024 * 1024 * 1024\n};\n\n/** \"25MB\" / \"500 kb\" / \"1048576\" → bytes. 0 means \"no limit\". */\nexport function parseSize(value: string | number | null | undefined): number {\n if (typeof value === \"number\") return value > 0 ? value : 0;\n if (!value) return 0;\n const match = String(value)\n .trim()\n .toLowerCase()\n .match(/^([\\d.]+)\\s*(b|kb|mb|gb)?$/);\n if (!match) return 0;\n const amount = Number.parseFloat(match[1]);\n if (!Number.isFinite(amount) || amount <= 0) return 0;\n return Math.round(amount * (UNITS[match[2] ?? \"b\"] ?? 1));\n}\n\nexport function formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${Math.round(bytes / 1024)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n}\n\n/** The extension in lowercase, without the dot. \"\" when there is none. */\nexport function fileExtension(filename: string): string {\n const dot = filename.lastIndexOf(\".\");\n if (dot <= 0 || dot === filename.length - 1) return \"\";\n return filename.slice(dot + 1).toLowerCase();\n}\n\n/** The extension, uppercased and clipped, for the little type chip. */\nexport function extensionOf(filename: string): string {\n return fileExtension(filename).toUpperCase().slice(0, 4);\n}\n\n/**\n * Matches one file against an `accept` list, using the same vocabulary as the\n * attribute on `<input type=\"file\">`: extensions (\".pdf\"), exact MIME types\n * (\"application/pdf\") and wildcards (\"image/*\"). An empty list accepts\n * everything.\n *\n * This is a convenience, not a security control — the browser's own file\n * dialog filter and this check are both trivially bypassed by a drop, so the\n * server remains the authority on what it will store.\n */\nexport function acceptsFile(accept: string, name: string, type: string): boolean {\n const rules = accept\n .split(\",\")\n .map((rule) => rule.trim().toLowerCase())\n .filter(Boolean);\n if (!rules.length) return true;\n\n const lowerName = name.toLowerCase();\n const lowerType = (type || \"\").toLowerCase();\n\n return rules.some((rule) => {\n if (rule.startsWith(\".\")) return lowerName.endsWith(rule);\n if (rule.endsWith(\"/*\")) return lowerType.startsWith(rule.slice(0, -1));\n return lowerType === rule;\n });\n}\n\n/** Human list of accepted kinds for the hint line: \".pdf,image/png\" → \"PDF, PNG\". */\nexport function acceptSummary(accept: string): string {\n const parts = accept\n .split(\",\")\n .map((rule) => rule.trim())\n .filter(Boolean)\n .map((rule) => {\n if (rule.startsWith(\".\")) return rule.slice(1).toUpperCase();\n if (rule.endsWith(\"/*\")) return rule.slice(0, -2).toUpperCase();\n const slash = rule.indexOf(\"/\");\n return (slash >= 0 ? rule.slice(slash + 1) : rule).toUpperCase();\n });\n return [...new Set(parts)].join(\", \");\n}\n\n/**\n * Two picks are the same file when name, size and mtime all match. Content\n * hashing would be exact but means reading every byte before the user has\n * even pressed upload; this is what a file manager uses, and it is enough to\n * stop the common case of dropping the same batch twice.\n */\nexport function fileKey(file: { name: string; size: number; lastModified?: number }): string {\n return `${file.name}:${file.size}:${file.lastModified ?? 0}`;\n}\n\n/** Replaces the base name, keeping the original extension. */\nexport function renameKeepingExtension(original: string, typed: string): string {\n const clean = typed.trim().replace(/[/\\\\]/g, \"\");\n if (!clean) return original;\n const dot = original.lastIndexOf(\".\");\n const extension = dot > 0 ? original.slice(dot) : \"\";\n if (!extension) return clean;\n return clean.toLowerCase().endsWith(extension.toLowerCase()) ? clean : clean + extension;\n}\n","/**\n * Reads a few facts out of a file before it is uploaded: how many pages it\n * has, and whether it is encrypted. Everything here runs in the browser on\n * the bytes the user picked — no upload, no dependency, no worker.\n *\n * Two honest caveats, both of which the documentation repeats:\n *\n * - **This is a convenience, not a security control.** Anyone can bypass it.\n * The server still has to enforce whatever actually matters.\n * - **Facts can be unknown.** A page count is `null` when the structure\n * can't be read, and callers treat unknown as \"rule doesn't apply\" rather\n * than rejecting a file they simply failed to parse.\n */\n\nexport interface FileFacts {\n /** Pages for PDF and DOCX, slides for PPTX. Null when undeterminable. */\n pages: number | null;\n /** True when encrypted, false when plainly not, null when unknown. */\n encrypted: boolean | null;\n}\n\nconst UNKNOWN: FileFacts = { pages: null, encrypted: null };\n\n/** How much of a large PDF to look at, from each end. */\nconst PDF_HEAD = 16 * 1024 * 1024;\nconst PDF_TAIL = 2 * 1024 * 1024;\n\n/** Ceilings for the compressed-PDF fallback, so a hostile file can't stall the tab. */\nconst MAX_STREAMS = 40;\nconst MAX_INFLATED = 4 * 1024 * 1024;\n\nconst OOXML = new Set([\"docx\", \"pptx\", \"xlsx\"]);\n\n/** Inspects one file. Never throws — an unreadable file is simply unknown. */\nexport async function inspectFile(file: Blob, extension: string): Promise<FileFacts> {\n try {\n if (extension === \"pdf\") return await inspectPdf(file);\n if (OOXML.has(extension)) return await inspectOoxml(file, extension);\n } catch {\n // A corrupt or surprising file is not a rejection reason on its own.\n }\n return UNKNOWN;\n}\n\n/** True when this extension has anything worth reading bytes for. */\nexport function isInspectable(extension: string): boolean {\n return extension === \"pdf\" || OOXML.has(extension);\n}\n\n// ── PDF ──────────────────────────────────────────────────────\n\nasync function inspectPdf(file: Blob): Promise<FileFacts> {\n const head = await bytesOf(file.slice(0, PDF_HEAD));\n const tail =\n file.size > PDF_HEAD ? await bytesOf(file.slice(Math.max(0, file.size - PDF_TAIL))) : null;\n\n const text = latin1(head) + (tail ? latin1(tail) : \"\");\n\n // An encrypted PDF names /Encrypt in its trailer. The whole file is still\n // readable — it is the content streams that are encrypted — so this is a\n // reliable marker rather than a guess.\n const encrypted = /\\/Encrypt[\\s/<>\\]]/.test(text);\n\n let pages = pageCountIn(text);\n if (pages === null) pages = await pageCountInStreams(head);\n\n return { pages, encrypted };\n}\n\n/**\n * The page tree's root node carries `/Count` with the document total, so the\n * largest `/Count` next to a `/Pages` node is the answer. Files that write\n * the tree without counts fall back to counting `/Type /Page` objects.\n */\nfunction pageCountIn(text: string): number | null {\n if (/\\/Type\\s*\\/Pages/.test(text)) {\n let max = 0;\n for (const match of text.matchAll(/\\/Count\\s+(\\d+)/g)) {\n max = Math.max(max, Number(match[1]));\n }\n if (max > 0) return max;\n }\n const direct = text.match(/\\/Type\\s*\\/Page[^s]/g);\n return direct?.length ? direct.length : null;\n}\n\n/**\n * PDF 1.5 and later may pack the page tree into compressed object streams,\n * where a plain scan sees nothing. Inflating the streams and scanning the\n * result recovers the count, using only DecompressionStream.\n */\nasync function pageCountInStreams(bytes: Uint8Array): Promise<number | null> {\n if (typeof DecompressionStream === \"undefined\") return null;\n\n const text = latin1(bytes);\n let inflated = \"\";\n let streams = 0;\n\n for (const match of text.matchAll(/stream\\r?\\n/g)) {\n if (streams >= MAX_STREAMS || inflated.length >= MAX_INFLATED) break;\n const start = match.index! + match[0].length;\n let end = text.indexOf(\"endstream\", start);\n if (end < 0) break;\n // Writers put an EOL between the data and the keyword. It has to come off:\n // the decompressor rejects anything trailing the compressed data.\n while (end > start && (text[end - 1] === \"\\n\" || text[end - 1] === \"\\r\")) end -= 1;\n streams += 1;\n try {\n const out = await inflate(bytes.subarray(start, end), \"deflate\");\n inflated += latin1(out);\n } catch {\n // Not a zlib stream (an image, or a different filter). Skip it.\n }\n }\n\n return inflated ? pageCountIn(inflated) : null;\n}\n\n// ── OOXML (docx / pptx / xlsx) ───────────────────────────────\n\nasync function inspectOoxml(file: Blob, extension: string): Promise<FileFacts> {\n const magic = await bytesOf(file.slice(0, 8));\n\n // A password-protected Office file is not a zip at all: Office encrypts the\n // package and wraps it in an OLE compound file. The magic bytes say so\n // outright, which makes this the one exact check in this module.\n if (isCompoundFile(magic)) return { pages: null, encrypted: true };\n if (magic[0] !== 0x50 || magic[1] !== 0x4b) return UNKNOWN;\n\n const app = await readZipEntry(file, \"docProps/app.xml\");\n if (!app) return { pages: null, encrypted: false };\n\n // Word records Pages, PowerPoint records Slides. Excel records neither.\n const tag = extension === \"pptx\" ? \"Slides\" : \"Pages\";\n const match = new TextDecoder().decode(app).match(new RegExp(`<${tag}>(\\\\d+)</${tag}>`));\n return { pages: match ? Number(match[1]) : null, encrypted: false };\n}\n\nfunction isCompoundFile(magic: Uint8Array): boolean {\n const SIGNATURE = [0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1];\n return SIGNATURE.every((byte, i) => magic[i] === byte);\n}\n\n/**\n * Pulls one entry out of a zip by walking the central directory. Enough of\n * the format to find a small known file, and no more: zip64 archives return\n * null, which reads as \"unknown\" upstream.\n */\nasync function readZipEntry(file: Blob, wanted: string): Promise<Uint8Array | null> {\n const tailSize = Math.min(file.size, 66_000);\n const tail = new DataView(await file.slice(file.size - tailSize).arrayBuffer());\n\n let eocd = -1;\n for (let i = tail.byteLength - 22; i >= 0; i--) {\n if (tail.getUint32(i, true) === 0x06054b50) {\n eocd = i;\n break;\n }\n }\n if (eocd < 0) return null;\n\n const size = tail.getUint32(eocd + 12, true);\n const offset = tail.getUint32(eocd + 16, true);\n if (!size || offset === 0xffffffff) return null;\n\n const cd = new DataView(await file.slice(offset, offset + size).arrayBuffer());\n const decoder = new TextDecoder();\n let p = 0;\n\n while (p + 46 <= cd.byteLength && cd.getUint32(p, true) === 0x02014b50) {\n const method = cd.getUint16(p + 10, true);\n const compressed = cd.getUint32(p + 20, true);\n const nameLength = cd.getUint16(p + 28, true);\n const extraLength = cd.getUint16(p + 30, true);\n const commentLength = cd.getUint16(p + 32, true);\n const localOffset = cd.getUint32(p + 42, true);\n const name = decoder.decode(new Uint8Array(cd.buffer, cd.byteOffset + p + 46, nameLength));\n\n if (name === wanted) {\n // The central directory's name/extra lengths may differ from the local\n // header's, so the data offset has to come from the local header.\n const local = new DataView(await file.slice(localOffset, localOffset + 30).arrayBuffer());\n const start = localOffset + 30 + local.getUint16(26, true) + local.getUint16(28, true);\n const data = await bytesOf(file.slice(start, start + compressed));\n if (method === 0) return data;\n if (method === 8 && typeof DecompressionStream !== \"undefined\") {\n return await inflate(data, \"deflate-raw\");\n }\n return null;\n }\n\n p += 46 + nameLength + extraLength + commentLength;\n }\n return null;\n}\n\n// ── plumbing ─────────────────────────────────────────────────\n\nasync function bytesOf(blob: Blob): Promise<Uint8Array> {\n return new Uint8Array(await blob.arrayBuffer());\n}\n\nasync function inflate(data: Uint8Array, format: \"deflate\" | \"deflate-raw\"): Promise<Uint8Array> {\n const stream = new Blob([data as BlobPart]).stream().pipeThrough(new DecompressionStream(format));\n return new Uint8Array(await new Response(stream).arrayBuffer());\n}\n\n/** Bytes as one char each, so PDF structure can be matched with a regex. */\nfunction latin1(bytes: Uint8Array): string {\n let out = \"\";\n const CHUNK = 32_768;\n for (let i = 0; i < bytes.length; i += CHUNK) {\n out += String.fromCharCode(...bytes.subarray(i, i + CHUNK));\n }\n return out;\n}\n","import { LitElement, css, html, nothing } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { getDefaultClient } from \"@singlebase/core\";\nimport type {\n FileUploadInput,\n FilesUploadApi,\n SinglebaseClientInstance,\n UploadProgress\n} from \"@singlebase/singlebase-sdk\";\n\n/** What the uploader needs from a client: `files.upload`, and nothing else. */\nexport type UploaderClient = { files: Pick<FilesUploadApi, \"upload\"> };\nimport { tokenDefaults } from \"../styles/tokens.js\";\nimport { sharedStyles } from \"../styles/shared.js\";\nimport { fill, resolveUploadMessages, type SinglebaseUploadMessages } from \"../upload-messages.js\";\nimport { resolveRedirectTarget } from \"../utils/redirect.js\";\nimport {\n acceptSummary,\n acceptsFile,\n extensionOf,\n fileExtension,\n fileKey,\n formatSize,\n parseSize,\n renameKeepingExtension\n} from \"../utils/files.js\";\nimport { inspectFile, isInspectable } from \"../utils/inspect.js\";\n\n/** JSON in markup, an object in JavaScript. Bad JSON is ignored, not thrown. */\nconst jsonAttr = {\n fromAttribute: (value: string | null) => {\n if (!value) return {};\n try {\n const parsed = JSON.parse(value);\n return parsed && typeof parsed === \"object\" ? parsed : {};\n } catch {\n console.warn(\"[singlebase-uploader] an attribute holds invalid JSON; ignoring it\");\n return {};\n }\n },\n toAttribute: (value: unknown) => JSON.stringify(value ?? {})\n};\n\n/** Present-but-empty means true, so `dropzone` and `dropzone=\"false\"` both read. */\nconst flagAttr = {\n fromAttribute: (value: string | null) => (value === null ? true : value !== \"false\"),\n toAttribute: (value: boolean) => (value ? null : \"false\")\n};\n\nexport type UploadView = \"full\" | \"compact\" | \"button\";\nexport type UploadItemStatus = \"checking\" | \"ready\" | \"uploading\" | \"done\" | \"error\";\n\n/**\n * Per-format limits, keyed by extension: `{ pdf: { maxPages: 10 } }`.\n *\n * `maxPages` and `allowProtected` need the file's bytes read, which only\n * works for `pdf`, `docx`, `pptx` and `xlsx`; the size bounds apply to any\n * extension and override the element-wide ones for that kind.\n */\nexport interface FileRule {\n maxPages?: number;\n maxSize?: string | number;\n minSize?: string | number;\n /** Set false to refuse password-protected files. Default: allowed. */\n allowProtected?: boolean;\n}\n\nexport type FileRules = Record<string, FileRule>;\n\nexport interface UploadItem {\n /** Identity for de-duplication: name, size and mtime. */\n key: string;\n file: File;\n /** The saved name, which the user may have edited. */\n name: string;\n status: UploadItemStatus;\n percent: number;\n error: string;\n /** The stored file record, once the upload completes. */\n record: unknown;\n /** Pages (slides for pptx) when they could be read, else null. */\n pages: number | null;\n /** Whether the file is encrypted, when that could be determined. */\n encrypted: boolean | null;\n /** A local object URL for image thumbnails; \"\" for everything else. */\n preview: string;\n}\n\n/**\n * Every setting in one object, for configuring an element from script. Keys\n * are the element's property names.\n */\nexport interface UploaderConfig {\n view: UploadView;\n dropzone: boolean;\n allowRename: boolean;\n autoUpload: boolean;\n branding: boolean;\n logoUrl: string;\n logoText: string;\n heading: string;\n description: string;\n maxFiles: number;\n maxSize: string | number;\n minSize: string | number;\n accept: string;\n rules: FileRules;\n bucket: string;\n publicRead: boolean;\n redirectUrl: string;\n metadata: Record<string, unknown>;\n options: Record<string, unknown>;\n messages: Partial<SinglebaseUploadMessages>;\n theme: \"light\" | \"dark\";\n density: \"comfortable\" | \"compact\";\n onComplete: SinglebaseUploader[\"onComplete\"];\n onError: SinglebaseUploader[\"onError\"];\n}\n\nconst CONFIG_KEYS: readonly (keyof UploaderConfig)[] = [\n \"view\",\n \"dropzone\",\n \"allowRename\",\n \"autoUpload\",\n \"branding\",\n \"logoUrl\",\n \"logoText\",\n \"heading\",\n \"description\",\n \"maxFiles\",\n \"maxSize\",\n \"minSize\",\n \"accept\",\n \"rules\",\n \"bucket\",\n \"publicRead\",\n \"redirectUrl\",\n \"metadata\",\n \"options\",\n \"messages\",\n \"theme\",\n \"density\",\n \"onComplete\",\n \"onError\"\n];\n\n/**\n * A file picker that uploads straight to storage.\n *\n * <singlebase-uploader></singlebase-uploader>\n * <singlebase-uploader view=\"compact\" accept=\".pdf,image/*\"></singlebase-uploader>\n * <singlebase-uploader view=\"button\" max-files=\"1\"></singlebase-uploader>\n *\n * It owns the staging list — picking, renaming, removing, validating, and the\n * progress of each file — and nothing else. When the batch finishes it emits\n * the stored records and stops; what the application does with them (attach\n * them to a record, show a gallery, save an avatar) is the application's\n * decision, not the widget's.\n *\n * Failures are per file. One rejected upload leaves the rest completed and\n * offers that row a retry, mirroring the SDK's own behaviour.\n */\n@customElement(\"singlebase-uploader\")\nexport class SinglebaseUploader extends LitElement {\n static styles = [\n tokenDefaults,\n sharedStyles,\n css`\n .card {\n display: flex;\n flex-direction: column;\n gap: 14px;\n box-sizing: border-box;\n padding: var(--sb-pad, 20px);\n background: var(--sb-surface, #ffffff);\n color: var(--sb-ink, #16181a);\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: calc(var(--sb-radius, 4px) + 4px);\n }\n\n .logo-img {\n display: block;\n align-self: flex-start;\n height: var(--sb-logo-height, 20px);\n width: auto;\n max-width: 100%;\n }\n\n .brand-mark {\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 13px;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--sb-ink, #16181a);\n }\n\n .head-block {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .count {\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 11.5px;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--sb-muted-ink, #61666c);\n }\n\n /* ── dropzone ─────────────────────────────────────── */\n .drop {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n padding: 30px 20px;\n text-align: center;\n border: 1px dashed var(--sb-border-strong, #cdd1d6);\n border-radius: calc(var(--sb-radius, 4px) + 2px);\n background: var(--sb-surface, #ffffff);\n transition:\n border-color 0.15s,\n background 0.15s;\n }\n\n .drop[data-drag=\"true\"] {\n border-color: var(--sb-accent, #111111);\n background: var(--sb-surface-alt, #fafafa);\n }\n\n .arrow {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 42px;\n height: 42px;\n margin-bottom: 4px;\n font-size: 18px;\n line-height: 1;\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: 50%;\n color: var(--sb-ink, #16181a);\n }\n\n .drop-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--sb-ink, #16181a);\n }\n\n /* the compact single-line dropzone */\n .strip {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 10px 12px;\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: calc(var(--sb-radius, 4px) + 2px);\n background: var(--sb-surface-alt, #fafafa);\n transition:\n border-color 0.15s,\n background 0.15s;\n }\n\n .strip[data-drag=\"true\"] {\n border-color: var(--sb-accent, #111111);\n }\n\n .strip-label {\n font-size: 14px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n /* ── file rows ────────────────────────────────────── */\n .rows {\n display: flex;\n flex-direction: column;\n }\n\n .row {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 0;\n border-top: 1px solid var(--sb-border, #e4e6e9);\n }\n\n .rows .row:first-child {\n border-top: none;\n }\n\n .chip {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n width: 46px;\n height: 46px;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 10.5px;\n letter-spacing: 0.04em;\n color: var(--sb-muted-ink, #61666c);\n background: var(--sb-surface-alt, #fafafa);\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: var(--sb-radius, 4px);\n overflow: hidden;\n }\n\n .thumb {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n .meta {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .name {\n font-size: 14px;\n font-weight: 500;\n color: var(--sb-ink, #16181a);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n button.name {\n align-self: flex-start;\n max-width: 100%;\n padding: 0;\n border: none;\n background: none;\n text-align: left;\n border-radius: 0;\n }\n\n button.name:hover {\n text-decoration: underline;\n text-underline-offset: 3px;\n }\n\n .name-input {\n font-size: 14px;\n padding: 6px 8px;\n }\n\n .sz {\n font-size: 12px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .sz[data-state=\"error\"] {\n color: var(--sb-danger, #b4231a);\n }\n\n .sz[data-state=\"done\"] {\n color: var(--sb-ok, #0f6b4a);\n }\n\n .bar {\n height: 3px;\n margin-top: 2px;\n border-radius: 999px;\n background: var(--sb-border, #e4e6e9);\n overflow: hidden;\n }\n\n .bar-fill {\n height: 100%;\n background: var(--sb-accent, #111111);\n transition: width 0.2s linear;\n }\n\n .row-act {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n /* ── the dashed \"add more\" affordance ─────────────── */\n button.add-more {\n width: 100%;\n padding: 14px;\n color: var(--sb-ink, #16181a);\n background: none;\n border: 1px dashed var(--sb-border-strong, #cdd1d6);\n border-radius: calc(var(--sb-radius, 4px) + 2px);\n }\n\n button.add-more:hover:not(:disabled) {\n background: var(--sb-surface-alt, #fafafa);\n }\n\n button.wide {\n width: 100%;\n padding: 13px;\n font-size: 14px;\n }\n\n .branding {\n text-align: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 10.5px;\n letter-spacing: 0.06em;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .branding a {\n color: inherit;\n text-decoration: none;\n }\n\n .branding a:hover {\n color: var(--sb-ink, #16181a);\n text-decoration: underline;\n text-underline-offset: 3px;\n }\n\n /* the button view is just a control, not a card */\n :host([view=\"button\"]) {\n display: inline-block;\n }\n\n .button-view {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n `\n ];\n\n // ── wiring ────────────────────────────────────────────────\n /** An explicit client. Omit it and the page's SinglebaseClient() is used. */\n @property({ attribute: false })\n accessor client: UploaderClient | null = null;\n\n @property({ attribute: false })\n accessor messages: Partial<SinglebaseUploadMessages> = {};\n\n @property({ reflect: true })\n accessor theme: \"light\" | \"dark\" | undefined = undefined;\n\n @property({ reflect: true })\n accessor density: \"comfortable\" | \"compact\" | undefined = undefined;\n\n // ── shape ─────────────────────────────────────────────────\n /**\n * `full` is the card with a dropzone and a reviewable list, `compact` the\n * one-line attachments row, `button` a single control that uploads as soon\n * as a file is chosen.\n */\n @property({ reflect: true })\n accessor view: UploadView = \"full\";\n\n /** Show the drop target. Off leaves the picker button on its own. */\n @property({ converter: flagAttr })\n accessor dropzone = true;\n\n /** Let the user edit the saved filename before uploading. */\n @property({ converter: flagAttr, attribute: \"allow-rename\" })\n accessor allowRename = true;\n\n /** Upload as soon as files are picked, with no review step. */\n @property({ type: Boolean, attribute: \"auto-upload\" })\n accessor autoUpload = false;\n\n /** The \"Files by Singlebase\" credit. A plain link — it makes no request. */\n @property({ converter: flagAttr })\n accessor branding = true;\n\n @property({ attribute: \"logo-url\" }) accessor logoUrl = \"\";\n @property({ attribute: \"logo-text\" }) accessor logoText = \"\";\n @property() accessor heading = \"\";\n @property() accessor description = \"\";\n\n // ── limits ────────────────────────────────────────────────\n @property({ type: Number, attribute: \"max-files\" }) accessor maxFiles = 10;\n\n /** Bytes, or a human size like \"25MB\". 0 or \"\" means no limit. */\n @property({ attribute: \"max-size\" }) accessor maxSize: string | number = \"25MB\";\n @property({ attribute: \"min-size\" }) accessor minSize: string | number = 0;\n\n /** Same vocabulary as `<input type=\"file\" accept>`. */\n @property() accessor accept = \"\";\n\n /**\n * Per-format limits, as JSON in markup or an object in JavaScript:\n *\n * rules='{\"pdf\":{\"maxPages\":10,\"allowProtected\":false}}'\n *\n * Checking pages and encryption means reading the file in the browser, so\n * it is a convenience for the person picking files — never a substitute\n * for the server enforcing the same limits.\n */\n @property({ converter: jsonAttr })\n accessor rules: FileRules = {};\n\n // ── destination ───────────────────────────────────────────\n @property() accessor bucket = \"default\";\n\n /** Metadata attached to every file this element uploads. */\n @property({ converter: jsonAttr })\n accessor metadata: Record<string, unknown> = {};\n\n /**\n * `options` sent with every file's upload request — for instance\n * `{ profile_photo: true }`, which makes the upload the account's photo.\n */\n @property({ converter: jsonAttr })\n accessor options: Record<string, unknown> = {};\n @property({ type: Boolean, attribute: \"public-read\" }) accessor publicRead = false;\n\n /** Where to go once every file has uploaded. Same-origin only. */\n @property({ attribute: \"redirect-url\" }) accessor redirectUrl = \"\";\n\n /** Callback forms of the two events, for frameworks that prefer props. */\n @property({ attribute: false })\n accessor onComplete:\n ((detail: { completed: UploadItem[]; failed: UploadItem[] }) => void) | null = null;\n\n @property({ attribute: false })\n accessor onError: ((detail: { message: string }) => void) | null = null;\n\n // ── state ─────────────────────────────────────────────────\n @state() private accessor items: UploadItem[] = [];\n @state() private accessor notice = \"\";\n @state() private accessor busy = false;\n @state() private accessor dragging = false;\n @state() private accessor editing = \"\";\n\n get msg(): SinglebaseUploadMessages {\n return resolveUploadMessages(this.messages);\n }\n\n /** An explicit `.client`, else the page default. */\n get resolvedClient(): UploaderClient | null {\n return this.client ?? getDefaultClient<SinglebaseClientInstance>() ?? null;\n }\n\n /** The staging list, for host code that wants to inspect or persist it. */\n get files(): readonly UploadItem[] {\n return this.items;\n }\n\n /** Overall progress across the current batch, 0–100. */\n get percent(): number {\n const active = this.items.filter((item) => item.status !== \"ready\");\n if (!active.length) return 0;\n return Math.round(active.reduce((sum, item) => sum + item.percent, 0) / active.length);\n }\n\n // ── public API ────────────────────────────────────────────\n /** Opens the file picker. */\n open(): void {\n this.renderRoot.querySelector<HTMLInputElement>(\"input[type=file]\")?.click();\n }\n\n /**\n * Applies several settings at once:\n *\n * document.getElementById(\"docs\").config = { maxFiles: 5, metadata: { folder: \"q3\" } };\n *\n * Unknown keys are ignored. Reading it returns the current settings.\n */\n set config(value: Partial<UploaderConfig>) {\n const target = this as unknown as Record<string, unknown>;\n for (const key of CONFIG_KEYS) {\n if (value && key in value) target[key] = value[key];\n }\n }\n\n get config(): Partial<UploaderConfig> {\n const source = this as unknown as Record<string, unknown>;\n return Object.fromEntries(CONFIG_KEYS.map((key) => [key, source[key]]));\n }\n\n /** Drops every staged file and any notice. */\n clear(): void {\n this.items.forEach(releasePreview);\n this.items = [];\n this.notice = \"\";\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.items.forEach(releasePreview);\n }\n\n /** Uploads everything staged. Rows that already succeeded are left alone. */\n async upload(): Promise<void> {\n if (this.busy) return;\n const pending = this.items.filter((item) => item.status === \"ready\" || item.status === \"error\");\n if (!pending.length) return;\n\n const client = this.resolvedClient;\n if (!client) {\n this.fail(this.msg.errNoClient);\n return;\n }\n\n this.busy = true;\n this.notice = \"\";\n for (const item of pending) {\n item.status = \"uploading\";\n item.percent = 0;\n item.error = \"\";\n }\n this.items = [...this.items];\n\n // The SDK hands each progress and result entry back the very input object\n // it was given, so identity is all that is needed to find the row again.\n const rowOf = new Map<FileUploadInput, UploadItem>();\n const inputs = pending.map((item) => {\n const input: FileUploadInput = { file: item.file, filename: item.file.name };\n if (this.bucket) input.bucket = this.bucket;\n if (this.publicRead) input.publicRead = true;\n if (item.name !== item.file.name) input.newName = item.name;\n if (Object.keys(this.metadata ?? {}).length) input.metadata = { ...this.metadata };\n if (Object.keys(this.options ?? {}).length) input.options = { ...this.options };\n rowOf.set(input, item);\n return input;\n });\n\n try {\n const result = await client.files.upload(inputs, {\n onProgress: (progress: UploadProgress) => {\n const row = rowOf.get(progress.input);\n if (!row) return;\n row.percent = progress.percent;\n this.items = [...this.items];\n this.emit(\"singlebase-upload-progress\", { file: row, percent: this.percent });\n }\n });\n\n for (const entry of result.completed) {\n const row = rowOf.get(entry.input);\n if (!row) continue;\n row.status = \"done\";\n row.percent = 100;\n row.record = entry.file;\n }\n for (const entry of result.failed) {\n const row = rowOf.get(entry.input);\n if (!row) continue;\n row.status = \"error\";\n row.error = entry.error.message || entry.error.code;\n }\n this.items = [...this.items];\n\n const completed = result.completed\n .map((entry) => rowOf.get(entry.input))\n .filter(Boolean) as UploadItem[];\n const failed = result.failed\n .map((entry) => rowOf.get(entry.input))\n .filter(Boolean) as UploadItem[];\n\n this.emit(\"singlebase-upload-complete\", { completed, failed });\n this.onComplete?.({ completed, failed });\n\n if (failed.length) {\n this.notice = this.msg.errUpload;\n } else {\n this.redirect();\n }\n } catch (error) {\n // Initiation failed for the whole batch — nothing reached storage.\n for (const item of pending) {\n item.status = \"error\";\n item.error = \"\";\n }\n this.items = [...this.items];\n this.fail(errorMessage(error) || this.msg.errUpload);\n } finally {\n this.busy = false;\n }\n }\n\n // ── staging ───────────────────────────────────────────────\n /** The rule for this filename's extension, if the host set one. */\n private ruleFor(filename: string): FileRule | null {\n const extension = fileExtension(filename);\n if (!extension) return null;\n for (const [key, rule] of Object.entries(this.rules ?? {})) {\n if (key.toLowerCase().replace(/^\\./, \"\") === extension) return rule;\n }\n return null;\n }\n\n private async add(list: ArrayLike<File>): Promise<void> {\n // The button view is a one-shot control: a new pick replaces whatever\n // finished last time, so a max-files=\"1\" button can be used again.\n if (this.view === \"button\") {\n const finished = this.items.filter((i) => i.status === \"done\" || i.status === \"error\");\n finished.forEach(releasePreview);\n this.items = this.items.filter((i) => !finished.includes(i));\n }\n const limit = this.maxFiles > 0 ? this.maxFiles : Number.POSITIVE_INFINITY;\n const next = [...this.items];\n const before = next.length;\n const staged: UploadItem[] = [];\n let problem = \"\";\n\n for (const file of Array.from(list)) {\n if (next.length >= limit) {\n problem = fill(this.msg.errTooMany, { max: limit });\n break;\n }\n if (this.accept && !acceptsFile(this.accept, file.name, file.type)) {\n problem = fill(this.msg.errType, { name: file.name });\n continue;\n }\n\n // A rule's own size bounds win over the element-wide ones for its kind.\n const rule = this.ruleFor(file.name);\n const maxBytes = parseSize(rule?.maxSize ?? this.maxSize);\n const minBytes = parseSize(rule?.minSize ?? this.minSize);\n if (maxBytes && file.size > maxBytes) {\n problem = fill(this.msg.errTooLarge, { name: file.name, size: formatSize(maxBytes) });\n continue;\n }\n if (minBytes && file.size < minBytes) {\n problem = fill(this.msg.errTooSmall, { name: file.name, size: formatSize(minBytes) });\n continue;\n }\n const key = fileKey(file);\n if (next.some((item) => item.key === key)) {\n problem = fill(this.msg.errDuplicate, { name: file.name });\n continue;\n }\n\n const item: UploadItem = {\n key,\n file,\n name: file.name,\n // Reading bytes takes a moment, so the row appears immediately as\n // \"checking\" rather than the widget freezing on a picked file.\n status: this.needsInspection(rule, file.name) ? \"checking\" : \"ready\",\n percent: 0,\n error: \"\",\n record: null,\n pages: null,\n encrypted: null,\n preview: previewFor(file)\n };\n next.push(item);\n staged.push(item);\n }\n\n this.notice = problem;\n if (problem) this.emit(\"singlebase-upload-rejected\", { message: problem });\n if (next.length === before) return;\n\n this.items = next;\n this.emit(\"singlebase-upload-selected\", { files: this.items });\n\n await Promise.all(\n staged\n .filter((item) => item.status === \"checking\")\n .map((item) => this.inspect(item, this.ruleFor(item.file.name)!))\n );\n\n if (this.autoUpload || this.view === \"button\") void this.upload();\n }\n\n private needsInspection(rule: FileRule | null, filename: string): boolean {\n if (!rule) return false;\n if (!isInspectable(fileExtension(filename))) return false;\n return rule.maxPages !== undefined || rule.allowProtected === false;\n }\n\n /**\n * Reads the file and applies the rule. A fact the reader could not\n * determine is not grounds for rejection — an unreadable page count means\n * the page rule simply doesn't apply to that file.\n */\n private async inspect(item: UploadItem, rule: FileRule): Promise<void> {\n const facts = await inspectFile(item.file, fileExtension(item.file.name));\n item.pages = facts.pages;\n item.encrypted = facts.encrypted;\n\n let problem = \"\";\n if (rule.allowProtected === false && facts.encrypted === true) {\n problem = fill(this.msg.errProtected, { name: item.name });\n } else if (rule.maxPages && facts.pages !== null && facts.pages > rule.maxPages) {\n problem = fill(this.msg.errTooManyPages, {\n name: item.name,\n pages: facts.pages,\n max: rule.maxPages\n });\n }\n\n if (problem) {\n releasePreview(item);\n this.items = this.items.filter((staged) => staged !== item);\n this.notice = problem;\n this.emit(\"singlebase-upload-rejected\", { message: problem });\n } else {\n item.status = \"ready\";\n this.items = [...this.items];\n }\n }\n\n /** Drops one staged file. Named for the row action, not Element.remove(). */\n private removeItem(key: string): void {\n this.items.filter((item) => item.key === key).forEach(releasePreview);\n this.items = this.items.filter((item) => item.key !== key);\n this.notice = \"\";\n }\n\n private commitRename(item: UploadItem, typed: string): void {\n item.name = renameKeepingExtension(item.file.name, typed);\n this.editing = \"\";\n this.items = [...this.items];\n }\n\n private fail(message: string): void {\n this.notice = message;\n this.emit(\"singlebase-upload-error\", { message });\n this.onError?.({ message });\n }\n\n private emit(name: string, detail: unknown): void {\n this.dispatchEvent(new CustomEvent(name, { detail, bubbles: true, composed: true }));\n }\n\n private redirect(): void {\n if (!this.redirectUrl || typeof location === \"undefined\") return;\n const target = resolveRedirectTarget(this.redirectUrl, location.href, (reason) =>\n console.warn(`[singlebase-uploader] ${reason}`)\n );\n if (target) location.assign(target);\n }\n\n // ── events ────────────────────────────────────────────────\n private onPick(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files?.length) this.add(input.files);\n // Reset, or picking the same file twice in a row fires no change event.\n input.value = \"\";\n }\n\n private onDrop(event: DragEvent): void {\n event.preventDefault();\n this.dragging = false;\n const dropped = event.dataTransfer?.files;\n if (dropped?.length) this.add(dropped);\n }\n\n private onDragOver(event: DragEvent): void {\n event.preventDefault();\n this.dragging = true;\n }\n\n private onDragLeave(): void {\n this.dragging = false;\n }\n\n // ── rendering ─────────────────────────────────────────────\n private get canAddMore(): boolean {\n return this.maxFiles <= 0 || this.items.length < this.maxFiles;\n }\n\n /** True while any staged file is still being read. */\n private get checking(): boolean {\n return this.items.some((item) => item.status === \"checking\");\n }\n\n private get pendingCount(): number {\n return this.items.filter((item) => item.status === \"ready\" || item.status === \"error\").length;\n }\n\n private get hint(): string {\n const kinds = acceptSummary(this.accept);\n const maxBytes = parseSize(this.maxSize);\n const size = maxBytes ? fill(this.msg.hintUpTo, { size: formatSize(maxBytes) }) : \"\";\n return [kinds, size].filter(Boolean).join(\" · \");\n }\n\n private renderInput() {\n return html`<input\n class=\"sr-only\"\n type=\"file\"\n ?multiple=${this.maxFiles !== 1}\n accept=${this.accept || nothing}\n @change=${this.onPick}\n />`;\n }\n\n private renderLogo() {\n if (this.logoUrl) {\n return html`<img\n class=\"logo-img\"\n src=${this.logoUrl}\n alt=${this.logoText || \"Logo\"}\n part=\"logo\"\n />`;\n }\n if (this.logoText) return html`<div class=\"brand-mark\" part=\"logo\">${this.logoText}</div>`;\n return nothing;\n }\n\n private renderBranding() {\n if (!this.branding) return nothing;\n return html`<div class=\"branding\" part=\"branding\">\n <a href=\"https://singlebase.cloud\" target=\"_blank\" rel=\"noopener noreferrer\"\n >${this.msg.brandingLabel}</a\n >\n </div>`;\n }\n\n private renderNotice() {\n if (!this.notice) return nothing;\n return html`<div class=\"banner\" role=\"alert\" part=\"error\">${this.notice}</div>`;\n }\n\n private renderCount() {\n if (!this.items.length) return nothing;\n const template = this.items.length === 1 ? this.msg.countOne : this.msg.countMany;\n return html`<div class=\"count\" part=\"count\">\n ${fill(template, { n: this.items.length, max: this.maxFiles })}\n </div>`;\n }\n\n private renderStatus(item: UploadItem): string {\n const size = formatSize(item.file.size);\n if (item.status === \"checking\") return `${size} · ${this.msg.checking}`;\n if (item.status === \"uploading\") return `${size} · ${this.msg.uploading}`;\n if (item.status === \"done\") return `${size} · ${this.msg.uploaded}`;\n if (item.status === \"error\") {\n return `${size} · ${item.error || this.msg.failedLabel}`;\n }\n // A page count is only shown once it has actually been read.\n const pages = item.pages ? ` · ${fill(this.msg.pagesLabel, { n: item.pages })}` : \"\";\n return size + pages;\n }\n\n private renderRow(item: UploadItem) {\n const editable = this.allowRename && item.status === \"ready\";\n const busyRow = item.status === \"uploading\" || item.status === \"done\";\n return html`<div class=\"row\" part=\"file\">\n <div class=\"chip\" part=\"file-type\">\n ${\n item.preview\n ? html`<img class=\"thumb\" src=${item.preview} alt=\"\" part=\"preview\" />`\n : extensionOf(item.name) || \"FILE\"\n }\n </div>\n <div class=\"meta\">\n ${\n this.editing === item.key\n ? html`<input\n class=\"name-input\"\n .value=${item.name}\n autofocus\n @keydown=${(event: KeyboardEvent) => {\n if (event.key === \"Enter\") {\n this.commitRename(item, (event.target as HTMLInputElement).value);\n } else if (event.key === \"Escape\") {\n this.editing = \"\";\n }\n }}\n @blur=${(event: FocusEvent) =>\n this.commitRename(item, (event.target as HTMLInputElement).value)}\n />`\n : editable\n ? html`<button\n class=\"name\"\n title=${this.msg.rename}\n @click=${() => {\n this.editing = item.key;\n }}\n >\n ${item.name}\n </button>`\n : html`<div class=\"name\">${item.name}</div>`\n }\n <div class=\"sz\" data-state=${item.status}>${this.renderStatus(item)}</div>\n ${\n item.status === \"uploading\"\n ? html`<div class=\"bar\" part=\"progress\">\n <div class=\"bar-fill\" style=\"width:${item.percent}%\"></div>\n </div>`\n : nothing\n }\n </div>\n <div class=\"row-act\">\n ${\n item.status === \"error\"\n ? html`<button class=\"link-sm\" @click=${() => void this.upload()}>\n ${this.msg.retry}\n </button>`\n : nothing\n }\n ${\n item.status === \"uploading\" || item.status === \"done\"\n ? nothing\n : html`<button class=\"link-sm\" @click=${() => this.removeItem(item.key)}>\n ${this.msg.remove}\n </button>`\n }\n </div>\n </div>`;\n }\n\n private renderRows() {\n if (!this.items.length) return nothing;\n return html`<div class=\"rows\" part=\"files\">\n ${this.items.map((item) => this.renderRow(item))}\n </div>`;\n }\n\n private renderDropzone() {\n return html`<div class=\"drop\" part=\"dropzone\" data-drag=${String(this.dragging)}>\n <div class=\"arrow\" aria-hidden=\"true\">↑</div>\n <div class=\"drop-title\">${this.msg.dropTitle}</div>\n <button class=\"link\" @click=${this.open}>${this.msg.dropSub}</button>\n ${this.hint ? html`<div class=\"hint\">${this.hint}</div>` : nothing}\n </div>`;\n }\n\n private renderUploadCta() {\n const n = this.pendingCount;\n // Kept on screen while busy: a primary button that vanishes mid-upload\n // makes the card jump just as the user is watching it.\n if (this.autoUpload || (!n && !this.busy)) return nothing;\n const template = n === 1 ? this.msg.uploadCtaOne : this.msg.uploadCtaMany;\n return html`<button\n class=\"primary wide\"\n part=\"submit\"\n ?disabled=${this.busy || this.checking}\n @click=${() => void this.upload()}\n >\n ${this.busy ? this.msg.uploading : fill(template, { n })}\n </button>`;\n }\n\n /**\n * The whole card is the drop surface. Once files are staged the big zone is\n * replaced by the \"add more\" control, and a drop should still land.\n */\n private renderFull() {\n const showDrop = this.dropzone && !this.items.length && this.canAddMore;\n return html`<div\n class=\"card\"\n part=\"card\"\n @dragover=${this.onDragOver}\n @dragleave=${this.onDragLeave}\n @drop=${this.onDrop}\n >\n ${\n this.logoUrl || this.logoText || this.heading || this.description\n ? html`<div class=\"head-block\">\n ${this.renderLogo()}\n ${this.heading ? html`<div class=\"title\">${this.heading}</div>` : nothing}\n ${this.description ? html`<div class=\"sub\">${this.description}</div>` : nothing}\n </div>`\n : nothing\n }\n ${this.renderCount()} ${this.renderNotice()} ${this.renderRows()}\n ${showDrop ? this.renderDropzone() : nothing}\n ${\n !showDrop && this.canAddMore\n ? html`<button class=\"add-more\" @click=${this.open}>${this.msg.addMore}</button>`\n : nothing\n }\n ${this.renderUploadCta()} ${this.renderBranding()}\n </div>`;\n }\n\n private renderCompact() {\n return html`<div\n class=\"card\"\n part=\"card\"\n @dragover=${this.onDragOver}\n @dragleave=${this.onDragLeave}\n @drop=${this.onDrop}\n >\n <div class=\"between\">\n <span class=\"sec-title\">${this.heading || this.msg.attachments}</span>\n <span class=\"count\">${this.items.length} / ${this.maxFiles}</span>\n </div>\n ${\n this.dropzone\n ? html`<div class=\"strip\" part=\"dropzone\" data-drag=${String(this.dragging)}>\n <span class=\"strip-label\">${this.msg.dropOrChoose}</span>\n <button class=\"secondary\" ?disabled=${!this.canAddMore} @click=${this.open}>\n ${this.msg.chooseFiles}\n </button>\n </div>`\n : html`<button class=\"secondary\" ?disabled=${!this.canAddMore} @click=${this.open}>\n ${this.msg.chooseFiles}\n </button>`\n }\n ${this.hint ? html`<div class=\"hint\">${this.hint}</div>` : nothing} ${this.renderNotice()}\n ${this.renderRows()} ${this.renderUploadCta()} ${this.renderBranding()}\n </div>`;\n }\n\n private renderButton() {\n const active = this.items[this.items.length - 1];\n return html`<div class=\"button-view\">\n <button class=\"primary\" ?disabled=${this.busy || !this.canAddMore} @click=${this.open}>\n ${this.busy ? this.msg.uploading : this.msg.chooseFile}\n </button>\n ${\n active && active.status !== \"ready\"\n ? html`<div class=\"sz\" data-state=${active.status}>${this.renderStatus(active)}</div>`\n : nothing\n }\n ${this.renderNotice()}\n </div>`;\n }\n\n override render() {\n return html`${this.renderInput()}${\n this.view === \"button\"\n ? this.renderButton()\n : this.view === \"compact\"\n ? this.renderCompact()\n : this.renderFull()\n }`;\n }\n}\n\n/**\n * A local thumbnail for images. The object URL points at the bytes already in\n * memory — nothing is uploaded to draw it — and it is revoked when the row\n * goes away so a long session doesn't leak blobs.\n */\nfunction previewFor(file: File): string {\n if (!file.type.startsWith(\"image/\") || typeof URL.createObjectURL !== \"function\") return \"\";\n return URL.createObjectURL(file);\n}\n\nfunction releasePreview(item: UploadItem): void {\n if (item.preview) URL.revokeObjectURL(item.preview);\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : \"\";\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"singlebase-uploader\": SinglebaseUploader;\n }\n}\n","import { html, nothing, type PropertyValues } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { createFilesUploadApi, type AuthSettings } from \"@singlebase/singlebase-sdk\";\nimport { SinglebaseFormBase } from \"./form-base.js\";\nimport { SettingsController } from \"../controllers/settings-controller.js\";\nimport { fullNameOf, initialsOf } from \"../utils/profile.js\";\nimport \"./uploader.js\";\nimport type { SinglebaseUploader } from \"./uploader.js\";\n\n/** Two-factor setup stays hidden until the backend supports enrolment. */\nconst SHOW_TWO_FACTOR = false;\n\n/** Account deletion stays hidden until the backend supports it. */\nconst SHOW_DELETE_ACCOUNT = false;\n\n/** Sent with the photo's upload request: the server makes it the account photo. */\nconst PHOTO_OPTIONS = { profile_photo: true };\nconst PHOTO_ACCEPT = \".jpg,.jpeg,.png,.webp,image/jpeg,image/png,image/webp\";\n\ntype EditMode = \"\" | \"avatar\" | \"profile\" | \"password\" | \"email\";\n\n/**\n * The authenticated account view, laid out exactly as the design mock's\n * isAuthed branch: identity header, profile summary with grouped edit\n * cards, password section, two-factor, connected accounts and danger zone.\n *\n * Two-factor setup and account deletion have no backing operation yet, so\n * they are hidden (SHOW_TWO_FACTOR, SHOW_DELETE_ACCOUNT). Listing and\n * unlinking providers isn't supported either, and says so; connecting\n * a *new* provider is supported, so those tiles are live.\n */\n@customElement(\"singlebase-authui-account\")\nexport class SinglebaseAccountScreen extends SinglebaseFormBase {\n @property({ attribute: \"logo-text\" }) accessor logoText = \"\";\n\n /** A logo image, used instead of `logo-text` when set. */\n @property({ attribute: \"logo-url\" }) accessor logoUrl = \"\";\n @property({ attribute: false }) accessor settings: AuthSettings | null = null;\n @property({ attribute: \"nonce-storage-key\" }) accessor nonceStorageKey = \"singlebase-oauth-nonce\";\n\n @state() private accessor editMode: EditMode = \"\";\n @state() private accessor toast = \"\";\n @state() private accessor photoBusy = false;\n /** A photo URL that failed to load, so the initials show instead of a broken image. */\n @state() private accessor photoFailed = \"\";\n @state() private accessor profileSaved = \"\";\n @state() private accessor passSaved = \"\";\n @state() private accessor profileError = \"\";\n @state() private accessor newPassError = \"\";\n @state() private accessor deleteStage = 0;\n @state() private accessor confirmText = \"\";\n\n // profile draft\n @state() private accessor dFirst = \"\";\n @state() private accessor dLast = \"\";\n @state() private accessor dPhone = \"\";\n @state() private accessor dEmail = \"\";\n\n // password draft\n // email change — a two-step verified flow, never a bare field save\n @state() private accessor emailStep: \"request\" | \"confirm\" = \"request\";\n @state() private accessor dNewEmail = \"\";\n @state() private accessor emailCode = \"\";\n @state() private accessor emailError = \"\";\n @state() private accessor emailSaved = \"\";\n\n @state() private accessor curPass = \"\";\n @state() private accessor newPass = \"\";\n @state() private accessor confirmPass = \"\";\n\n private settingsCtl = new SettingsController(this);\n private flashTimer?: ReturnType<typeof setTimeout>;\n private uidBase = `sb-acct-${Math.random().toString(36).slice(2, 8)}`;\n\n private uid(k: string) {\n return `${this.uidBase}-${k}`;\n }\n\n override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.settingsCtl.load(this.resolvedClient, this.settings);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n clearTimeout(this.flashTimer);\n }\n\n private flash(key: \"profileSaved\" | \"passSaved\" | \"emailSaved\", message: string) {\n this[key] = message;\n clearTimeout(this.flashTimer);\n this.flashTimer = setTimeout(() => {\n this[key] = \"\";\n }, 2600);\n }\n\n /** Matches the guest screens: image when given one, else the text label. */\n private renderLogo() {\n if (this.logoUrl) {\n return html`<img\n part=\"logo\"\n src=${this.logoUrl}\n alt=${this.logoText}\n style=\"display:block;align-self:flex-start;height:var(--sb-logo-height,20px);width:auto;max-width:100%\"\n />`;\n }\n return this.logoText ? html`<div class=\"logo-dot\" part=\"logo\">${this.logoText}</div>` : nothing;\n }\n\n private get user() {\n const state = this.auth.state;\n return state.status === \"authenticated\" ? state.user : null;\n }\n\n private get fullName() {\n return fullNameOf(this.user);\n }\n\n private get initials() {\n return initialsOf(this.user);\n }\n\n // ── profile photo ─────────────────────────────────────────\n private uploadClientFor: unknown = null;\n private uploadClientCache: { files: ReturnType<typeof createFilesUploadApi> } | null = null;\n\n /**\n * The upload API bound to the same dispatcher as this widget's auth client,\n * so the photo goes to the same project with the same bearer — including on\n * a page where this widget was given its own `.client`.\n */\n private get uploadClient() {\n const client = this.resolvedClient;\n if (!client) return null;\n if (this.uploadClientFor !== client) {\n this.uploadClientFor = client;\n this.uploadClientCache = { files: createFilesUploadApi(client.dispatcher) };\n }\n return this.uploadClientCache;\n }\n\n private onChoosePhoto = () => {\n this.formError = \"\";\n this.renderRoot.querySelector<SinglebaseUploader>(\"singlebase-uploader\")?.open();\n };\n\n private onPhotoSelected = () => {\n this.photoBusy = true;\n this.toast = \"\";\n };\n\n /** The server has set the photo; read the account back to get its URL. */\n private onPhotoUploaded = async (event: Event) => {\n const { completed, failed } = (event as CustomEvent).detail;\n try {\n if (completed.length) {\n await this.resolvedClient?.getAccount();\n this.photoFailed = \"\";\n this.toast = this.msg.photoUpdated;\n } else if (failed.length) {\n this.formError = failed[0].error || this.msg.genericErrorMessage;\n }\n } catch (error) {\n this.formError = this.describeError(error);\n } finally {\n this.photoBusy = false;\n }\n };\n\n private onPhotoProblem = (event: Event) => {\n this.photoBusy = false;\n this.formError = (event as CustomEvent).detail.message;\n };\n\n private startProfileEdit() {\n const u = this.user;\n if (!u) return;\n this.dFirst = u.first_name ?? \"\";\n this.dLast = u.last_name ?? \"\";\n this.dPhone = u.phone ?? \"\";\n this.dEmail = u.email;\n this.profileError = \"\";\n this.profileSaved = \"\";\n this.passSaved = \"\";\n this.toast = \"\";\n this.editMode = \"profile\";\n }\n\n private async onSaveProfile() {\n const client = this.resolvedClient;\n if (!client) return;\n if (!this.dFirst.trim() || !this.dLast.trim()) {\n this.profileError = \"First and last name cannot be empty.\";\n return;\n }\n if (this.dPhone.replace(/\\D/g, \"\").length < 7) {\n this.profileError = this.msg.invalidPhoneError;\n return;\n }\n await this.run(async () => {\n await client.updateAccount(\n { first_name: this.dFirst, last_name: this.dLast, phone: this.dPhone },\n this.signal\n );\n this.editMode = \"\";\n this.flash(\"profileSaved\", this.msg.savedNote);\n });\n }\n\n private startPassEdit() {\n this.curPass = \"\";\n this.newPass = \"\";\n this.confirmPass = \"\";\n this.newPassError = \"\";\n this.passSaved = \"\";\n this.profileSaved = \"\";\n this.toast = \"\";\n this.editMode = \"password\";\n }\n\n private async onChangePass() {\n const client = this.resolvedClient;\n if (!client) return;\n if (!this.curPass) {\n this.newPassError = \"Enter your current password.\";\n return;\n }\n if (this.newPass.length < 10) {\n this.newPassError = this.msg.passwordMinError;\n return;\n }\n if (this.newPass !== this.confirmPass) {\n this.newPassError = this.msg.passwordMatchError;\n return;\n }\n await this.run(async () => {\n await client.changePassword({ password: this.newPass }, this.signal);\n this.editMode = \"\";\n this.curPass = \"\";\n this.newPass = \"\";\n this.confirmPass = \"\";\n this.flash(\"passSaved\", this.msg.passwordUpdatedNote);\n });\n }\n\n // ── email change ─────────────────────────────────────────\n private startEmailEdit() {\n this.emailStep = \"request\";\n this.dNewEmail = \"\";\n this.emailCode = \"\";\n this.emailError = \"\";\n this.emailSaved = \"\";\n this.toast = \"\";\n this.editMode = \"email\";\n }\n\n /**\n * Step one: ask for a code. The code goes to the address on file, not to\n * the new one — that is what proves the person asking already controls the\n * account rather than merely knowing an address.\n */\n private async onRequestEmailCode() {\n const client = this.resolvedClient;\n if (!client || !this.user) return;\n if (!this.dNewEmail.includes(\"@\")) {\n this.emailError = this.msg.invalidEmailError;\n return;\n }\n if (this.dNewEmail.toLowerCase() === this.user.email.toLowerCase()) {\n this.emailError = this.msg.emailUnchangedError;\n return;\n }\n await this.run(async () => {\n await client.requestCode({ email: this.user!.email, purpose: \"email_change\" }, this.signal);\n this.emailStep = \"confirm\";\n this.emailError = \"\";\n });\n }\n\n /** Step two: confirm the code together with the new address. */\n private async onConfirmEmailChange() {\n const client = this.resolvedClient;\n if (!client || !this.user) return;\n if (this.emailCode.length < 6) {\n this.emailError = this.msg.codeIncompleteError;\n return;\n }\n await this.run(async () => {\n await client.changeEmail(\n { email: this.user!.email, code: this.emailCode, new_email: this.dNewEmail },\n this.signal\n );\n this.editMode = \"\";\n this.emailCode = \"\";\n this.dNewEmail = \"\";\n this.flash(\"emailSaved\", this.msg.emailUpdatedNote);\n });\n }\n\n private renderEmailSection() {\n const reading = this.editMode !== \"email\";\n const locked = this.editMode !== \"\" && this.editMode !== \"email\";\n\n return html`\n <div class=\"rule\"></div>\n <div class=\"section\">\n <h3 class=\"sec-title\">${this.msg.changeEmailTitle}</h3>\n ${\n reading\n ? html`\n <div class=\"between\">\n <p class=\"hint\">${this.user?.email ?? \"\"}</p>\n <div class=\"btn-row-end\">\n ${\n this.emailSaved\n ? html`<span role=\"status\" class=\"saved-note\">${this.emailSaved}</span>`\n : nothing\n }\n <button\n type=\"button\"\n class=\"edit-link\"\n ?disabled=${locked}\n @click=${this.startEmailEdit}\n >\n ${this.msg.changeEmailCtaShort}\n </button>\n </div>\n </div>\n `\n : this.emailStep === \"request\"\n ? html`\n <div class=\"edit-card\">\n <div class=\"field\">\n <label for=${this.uid(\"newemail\")}>${this.msg.newEmailLabel}</label>\n <input\n id=${this.uid(\"newemail\")}\n type=\"email\"\n part=\"input\"\n .value=${this.dNewEmail}\n placeholder=${this.msg.emailPlaceholder}\n aria-invalid=${this.emailError ? \"true\" : \"false\"}\n ?disabled=${this.submitting}\n @input=${(e: Event) => {\n this.dNewEmail = (e.target as HTMLInputElement).value;\n this.emailError = \"\";\n }}\n />\n <p class=\"hint\">${this.msg.changeEmailHint}</p>\n </div>\n ${this.emailError ? html`<p class=\"err\">${this.emailError}</p>` : nothing}\n <div class=\"edit-actions\">\n <button\n type=\"button\"\n class=\"primary-sm\"\n ?disabled=${this.submitting}\n @click=${this.onRequestEmailCode}\n >\n ${this.submitting ? html`<span class=\"spinner\"></span>` : nothing}\n <span>${this.msg.changeEmailCta}</span>\n </button>\n <button\n type=\"button\"\n class=\"ghost-sm\"\n @click=${() => {\n this.editMode = \"\";\n this.emailError = \"\";\n }}\n >\n ${this.msg.cancelCta}\n </button>\n </div>\n </div>\n `\n : html`\n <div class=\"edit-card\">\n <p class=\"hint\">${this.msg.codeSentNeutral}</p>\n <div class=\"field\">\n <label for=${this.uid(\"emailcode\")}>${this.msg.codeLabel}</label>\n <input\n id=${this.uid(\"emailcode\")}\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"one-time-code\"\n part=\"input\"\n .value=${this.emailCode}\n placeholder=\"000000\"\n aria-invalid=${this.emailError ? \"true\" : \"false\"}\n ?disabled=${this.submitting}\n @input=${(e: Event) => {\n this.emailCode = (e.target as HTMLInputElement).value\n .replace(/\\D/g, \"\")\n .slice(0, 6);\n this.emailError = \"\";\n }}\n />\n <p class=\"hint\">${this.msg.changeEmailConfirmHint} ${this.dNewEmail}</p>\n </div>\n ${this.emailError ? html`<p class=\"err\">${this.emailError}</p>` : nothing}\n <div class=\"edit-actions\">\n <button\n type=\"button\"\n class=\"primary-sm\"\n ?disabled=${this.submitting}\n @click=${this.onConfirmEmailChange}\n >\n ${this.submitting ? html`<span class=\"spinner\"></span>` : nothing}\n <span>${this.msg.confirmChangeCta}</span>\n </button>\n <button\n type=\"button\"\n class=\"ghost-sm\"\n @click=${() => {\n this.editMode = \"\";\n this.emailError = \"\";\n }}\n >\n ${this.msg.cancelCta}\n </button>\n </div>\n </div>\n `\n }\n </div>\n `;\n }\n\n private async onSignOut() {\n const client = this.resolvedClient;\n if (!client) return;\n await this.run(async () => {\n await client.signOut();\n });\n }\n\n private async onConnectProvider(providerId: string) {\n const client = this.resolvedClient;\n const state = this.auth.state;\n if (!client || state.status !== \"authenticated\") return;\n await this.run(async () => {\n const nonce = await client.createOAuthNonce(this.signal);\n globalThis.sessionStorage?.setItem(this.nonceStorageKey, nonce);\n const { oauth_redirect_url } = await client.startOAuth(\n {\n provider: providerId,\n nonce,\n intent: \"link\",\n id_token: state.session.id_token,\n refresh_token: state.session.refresh_token\n },\n this.signal\n );\n globalThis.location.assign(oauth_redirect_url);\n });\n }\n\n private get availableProviders(): Array<{ id: string; name: string; mark: string }> {\n const s = this.settings ?? this.settingsCtl.settings;\n if (!s || !s.oauth_settings.enabled) return [];\n const marks: Record<string, string> = {\n google: \"G\",\n github: \"GH\",\n linkedin: \"in\",\n facebook: \"f\"\n };\n return Object.entries(s.oauth_providers)\n .filter(([, p]) => p.enabled)\n .map(([id, p]) => ({\n id,\n name: p.provider_name,\n mark: marks[id] ?? p.provider_name.slice(0, 2)\n }));\n }\n\n // ── sections ──────────────────────────────────────────────\n private renderIdentity() {\n const u = this.user;\n const locked = this.editMode !== \"\" && this.editMode !== \"avatar\";\n const photo = u?.profile_photo && u.profile_photo !== this.photoFailed ? u.profile_photo : \"\";\n return html`\n <div class=\"acct-nav\">\n <div class=\"acct-who\">\n <div class=\"avatar-col\">\n <div class=\"avatar ${photo ? \"has-photo\" : \"\"}\" part=\"avatar\">\n ${\n photo\n ? html`<img\n src=${photo}\n alt=\"\"\n part=\"avatar-image\"\n @error=${() => (this.photoFailed = photo)}\n />`\n : this.initials\n }\n </div>\n <button\n type=\"button\"\n class=\"edit-link\"\n style=\"font-size:12px\"\n ?disabled=${this.photoBusy || locked}\n @click=${this.onChoosePhoto}\n >\n ${\n this.photoBusy\n ? this.msg.photoUploading\n : u?.profile_photo\n ? this.msg.changePhotoLink\n : this.msg.addPhotoLink\n }\n </button>\n <singlebase-uploader\n style=\"display:none\"\n view=\"button\"\n max-files=\"1\"\n branding=\"false\"\n accept=${PHOTO_ACCEPT}\n .client=${this.uploadClient}\n .options=${PHOTO_OPTIONS}\n @singlebase-upload-selected=${this.onPhotoSelected}\n @singlebase-upload-complete=${this.onPhotoUploaded}\n @singlebase-upload-error=${this.onPhotoProblem}\n @singlebase-upload-rejected=${this.onPhotoProblem}\n ></singlebase-uploader>\n </div>\n <div class=\"acct-who-text\">\n <div class=\"acct-name\">${this.fullName || \"—\"}</div>\n <div class=\"acct-email\">${u?.email ?? \"\"}</div>\n </div>\n </div>\n <button type=\"button\" class=\"link-sm\" ?disabled=${this.submitting} @click=${this.onSignOut}>\n ${this.msg.signOutCta}\n </button>\n </div>\n `;\n }\n\n private renderProfileSection() {\n const u = this.user;\n if (!u) return nothing;\n const reading = this.editMode !== \"profile\";\n const locked = this.editMode !== \"\" && this.editMode !== \"profile\";\n\n const summary: Array<[string, string]> = [\n [this.msg.firstNameLabel, u.first_name || \"—\"],\n [this.msg.lastNameLabel, u.last_name || \"—\"],\n [this.msg.phoneLabel, u.phone || \"—\"],\n [this.msg.emailLabel, u.email || \"—\"]\n ];\n\n return html`\n <div class=\"section\">\n ${\n reading\n ? html`\n <div class=\"sum-list\">\n ${summary.map(\n ([label, value]) => html`\n <div class=\"sum-row\">\n <span class=\"sum-label\">${label}</span>\n <span class=\"sum-value\">${value}</span>\n </div>\n `\n )}\n </div>\n <div class=\"btn-row-end\">\n ${\n this.profileSaved\n ? html`<span role=\"status\" class=\"saved-note\">${this.profileSaved}</span>`\n : nothing\n }\n <button\n type=\"button\"\n class=\"edit-link\"\n ?disabled=${locked}\n @click=${this.startProfileEdit}\n >\n ${this.msg.editAccountCta}\n </button>\n </div>\n `\n : html`\n <div class=\"edit-card\">\n <div class=\"two-up\">\n <div class=\"field\">\n <label for=${this.uid(\"first\")}>${this.msg.firstNameLabel}</label>\n <input\n id=${this.uid(\"first\")}\n type=\"text\"\n part=\"input\"\n .value=${this.dFirst}\n placeholder=${this.msg.firstNamePlaceholder}\n ?disabled=${this.submitting}\n @input=${(e: Event) => {\n this.dFirst = (e.target as HTMLInputElement).value;\n this.profileError = \"\";\n }}\n />\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"last\")}>${this.msg.lastNameLabel}</label>\n <input\n id=${this.uid(\"last\")}\n type=\"text\"\n part=\"input\"\n .value=${this.dLast}\n placeholder=${this.msg.lastNamePlaceholder}\n ?disabled=${this.submitting}\n @input=${(e: Event) => {\n this.dLast = (e.target as HTMLInputElement).value;\n this.profileError = \"\";\n }}\n />\n </div>\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"phone\")}>${this.msg.phoneLabel}</label>\n <input\n id=${this.uid(\"phone\")}\n type=\"tel\"\n part=\"input\"\n .value=${this.dPhone}\n placeholder=${this.msg.phonePlaceholder}\n ?disabled=${this.submitting}\n @input=${(e: Event) => {\n this.dPhone = (e.target as HTMLInputElement).value;\n this.profileError = \"\";\n }}\n />\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"email\")}>${this.msg.emailLabel}</label>\n <input\n id=${this.uid(\"email\")}\n type=\"email\"\n part=\"input\"\n .value=${this.dEmail}\n disabled\n title=${this.msg.notYetSupported}\n />\n <p class=\"hint\">${this.msg.changeEmailElsewhereHint}</p>\n </div>\n ${this.profileError ? html`<p class=\"err\">${this.profileError}</p>` : nothing}\n <div class=\"edit-actions\">\n <button\n type=\"button\"\n class=\"primary-sm\"\n ?disabled=${this.submitting}\n @click=${this.onSaveProfile}\n >\n ${this.submitting ? html`<span class=\"spinner\"></span>` : nothing}\n <span>${this.msg.saveChangesCta}</span>\n </button>\n <button\n type=\"button\"\n class=\"ghost-sm\"\n @click=${() => {\n this.editMode = \"\";\n this.profileError = \"\";\n }}\n >\n ${this.msg.cancelCta}\n </button>\n </div>\n </div>\n `\n }\n </div>\n `;\n }\n\n private renderPasswordSection() {\n const reading = this.editMode !== \"password\";\n const locked = this.editMode !== \"\" && this.editMode !== \"password\";\n return html`\n <div class=\"rule\"></div>\n <div class=\"section\">\n <h3 class=\"sec-title\">${this.msg.passwordSectionTitle}</h3>\n ${\n reading\n ? html`\n <div class=\"between\">\n <p class=\"hint\">${this.msg.passwordChangedHint}</p>\n <div class=\"btn-row-end\">\n ${\n this.passSaved\n ? html`<span role=\"status\" class=\"saved-note\">${this.passSaved}</span>`\n : nothing\n }\n <button\n type=\"button\"\n class=\"edit-link\"\n ?disabled=${locked}\n @click=${this.startPassEdit}\n >\n ${this.msg.changePasswordCta}\n </button>\n </div>\n </div>\n `\n : html`\n <div class=\"edit-card\">\n <div class=\"field\">\n <label for=${this.uid(\"curpass\")}>${this.msg.currentPasswordLabel}</label>\n <input\n id=${this.uid(\"curpass\")}\n type=\"password\"\n part=\"input\"\n .value=${this.curPass}\n placeholder=${this.msg.passwordPlaceholder}\n ?disabled=${this.submitting}\n @input=${(e: Event) => {\n this.curPass = (e.target as HTMLInputElement).value;\n this.newPassError = \"\";\n }}\n />\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"newpass\")}>${this.msg.newPasswordLabel}</label>\n <input\n id=${this.uid(\"newpass\")}\n type=\"password\"\n part=\"input\"\n .value=${this.newPass}\n placeholder=${this.msg.newPasswordPlaceholder}\n aria-invalid=${this.newPassError ? \"true\" : \"false\"}\n ?disabled=${this.submitting}\n @input=${(e: Event) => {\n this.newPass = (e.target as HTMLInputElement).value;\n this.newPassError = \"\";\n }}\n />\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"confirmpass\")}>Confirm new password</label>\n <input\n id=${this.uid(\"confirmpass\")}\n type=\"password\"\n part=\"input\"\n .value=${this.confirmPass}\n placeholder=${this.msg.confirmPasswordPlaceholder}\n aria-invalid=${this.newPassError ? \"true\" : \"false\"}\n ?disabled=${this.submitting}\n @input=${(e: Event) => {\n this.confirmPass = (e.target as HTMLInputElement).value;\n this.newPassError = \"\";\n }}\n />\n ${this.newPassError ? html`<p class=\"err\">${this.newPassError}</p>` : nothing}\n </div>\n <div class=\"edit-actions\">\n <button\n type=\"button\"\n class=\"primary-sm\"\n ?disabled=${this.submitting}\n @click=${this.onChangePass}\n >\n ${this.submitting ? html`<span class=\"spinner\"></span>` : nothing}\n <span>${this.msg.updatePasswordCta}</span>\n </button>\n <button type=\"button\" class=\"ghost-sm\" @click=${() => (this.editMode = \"\")}>\n ${this.msg.cancelCta}\n </button>\n </div>\n </div>\n `\n }\n </div>\n `;\n }\n\n /** Layout preserved from the mock; no enrolment operation exists yet. */\n private renderTwoFactorSection() {\n return html`\n <div class=\"rule\"></div>\n <div class=\"section\">\n <div class=\"between\">\n <div>\n <h3 class=\"sec-title\">${this.msg.twoFaTitle}</h3>\n <p class=\"hint\">${this.msg.twoFaHintOff}</p>\n </div>\n <button\n type=\"button\"\n class=\"switch\"\n aria-pressed=\"false\"\n aria-label=${`${this.msg.twoFaTitle} (${this.msg.notYetSupported})`}\n disabled\n title=${this.msg.notYetSupported}\n >\n <span class=\"knob\"></span>\n </button>\n </div>\n <p class=\"disabled-note\">\n ${this.msg.notYetSupported} — enrolling a second factor is not part of the current API.\n </p>\n </div>\n `;\n }\n\n private renderConnectedSection() {\n const providers = this.availableProviders;\n if (providers.length === 0) return nothing;\n return html`\n <div class=\"rule\"></div>\n <div class=\"section\">\n <h3 class=\"sec-title\">${this.msg.connectedTitle}</h3>\n <p class=\"hint\">${this.msg.connectedHint}</p>\n <span class=\"sub-label\">${this.msg.addAnotherLabel}</span>\n <div class=\"tile-grid\">\n ${providers.map(\n (p) => html`\n <button\n type=\"button\"\n class=\"tile\"\n aria-label=${`Connect ${p.name}`}\n ?disabled=${this.submitting}\n @click=${() => this.onConnectProvider(p.id)}\n >\n <span class=\"tile-mark\">${p.mark}</span>\n <span class=\"tile-name\">${p.name}</span>\n <span class=\"tile-plus\">+</span>\n </button>\n `\n )}\n </div>\n <p class=\"disabled-note\">\n ${this.msg.notYetSupported} — listing or disconnecting linked providers is not part of the\n current API.\n </p>\n </div>\n `;\n }\n\n private renderDangerSection() {\n return html`\n <div class=\"rule\"></div>\n <div class=\"section\">\n ${\n this.deleteStage === 0\n ? html`<button\n type=\"button\"\n class=\"danger-link\"\n disabled\n title=${this.msg.notYetSupported}\n >\n ${this.msg.deleteAccountCta}\n </button>`\n : nothing\n }\n <p class=\"disabled-note\">\n ${this.msg.notYetSupported} — account deletion is not part of the current API.\n </p>\n </div>\n `;\n }\n\n protected override render() {\n if (!this.user) return html`<p class=\"disabled-note\">Not signed in.</p>`;\n\n return html`\n <div class=\"acct-root\">\n ${this.renderLogo()} ${this.renderIdentity()}\n <div class=\"acct-body\">\n ${this.toast ? html`<div class=\"notice\" role=\"status\">${this.toast}</div>` : nothing}\n ${this.formError ? html`<div class=\"banner\" role=\"alert\">${this.formError}</div>` : nothing}\n ${this.renderProfileSection()} ${this.renderEmailSection()}\n ${this.renderPasswordSection()}\n ${SHOW_TWO_FACTOR ? this.renderTwoFactorSection() : nothing}\n ${this.renderConnectedSection()}\n ${SHOW_DELETE_ACCOUNT ? this.renderDangerSection() : nothing}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"singlebase-authui-account\": SinglebaseAccountScreen;\n }\n}\n","import { html, nothing, type PropertyValues } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport type { AuthSettings, OAuthIntent } from \"@singlebase/singlebase-sdk\";\nimport { SinglebaseFormBase } from \"./form-base.js\";\nimport { SettingsController } from \"../controllers/settings-controller.js\";\n\nexport type ButtonsType = \"signout\" | \"oauth\" | \"link\";\n\n/**\n * The widget's action buttons, selected with `type`:\n *\n * <singlebase-authui-buttons type=\"signout\"></singlebase-authui-buttons>\n * <singlebase-authui-buttons type=\"oauth\" intent=\"signup\"></singlebase-authui-buttons>\n * <singlebase-authui-buttons type=\"link\" provider=\"github\"></singlebase-authui-buttons>\n *\n * They live under one tag rather than three because they are the same thing\n * from a host's point of view — a button that performs one auth action — and\n * every custom element name is a global, unversioned claim on any page this\n * widget is dropped into.\n */\n@customElement(\"singlebase-authui-buttons\")\nexport class SinglebaseAuthButtons extends SinglebaseFormBase {\n @property() accessor type: ButtonsType = \"signout\";\n\n /** oauth: which flow the provider buttons start. */\n @property() accessor intent: OAuthIntent = \"signin\";\n\n /** link: the provider to connect to the signed-in account. */\n @property() accessor provider = \"\";\n\n /** link: display name, when it differs from the provider id. */\n @property({ attribute: \"provider-name\" }) accessor providerName = \"\";\n\n /** Inside a card that already supplies chrome, drop this element's own. */\n @property({ type: Boolean }) accessor embedded = false;\n\n @property({ attribute: false }) accessor settings: AuthSettings | null = null;\n\n @property({ attribute: \"nonce-storage-key\" })\n accessor nonceStorageKey = \"singlebase-oauth-nonce\";\n\n private settingsCtl = new SettingsController(this);\n\n override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n if (this.type === \"oauth\") this.settingsCtl.load(this.resolvedClient, this.settings);\n }\n\n private get effectiveSettings(): AuthSettings | null {\n return this.settings ?? this.settingsCtl.settings;\n }\n\n // ── oauth ────────────────────────────────────────────────\n private get providers(): Array<{ id: string; name: string; mark: string }> {\n const s = this.effectiveSettings;\n if (!s || !s.oauth_settings.enabled) return [];\n const allowed =\n this.intent === \"signup\" ? s.oauth_settings.allow_signup : s.oauth_settings.allow_signin;\n if (!allowed && this.intent !== \"link\") return [];\n\n const marks: Record<string, string> = {\n google: \"G\",\n github: \"GH\",\n linkedin: \"in\",\n facebook: \"f\"\n };\n return Object.entries(s.oauth_providers)\n .filter(([, p]) => p.enabled)\n .map(([id, p]) => ({\n id,\n name: p.provider_name,\n mark: marks[id] ?? p.provider_name.slice(0, 2)\n }));\n }\n\n /** Shared by the oauth and link flows: nonce, start, redirect. */\n private async startOAuth(providerId: string, intent: OAuthIntent, linking = false) {\n const client = this.resolvedClient;\n if (!client) return;\n\n let idToken: string | undefined;\n let refreshToken: string | undefined;\n if (linking) {\n const state = this.auth.state;\n if (state.status !== \"authenticated\") {\n this.formError = this.msg.linkRequiresSignIn;\n this.phase = \"error\";\n return;\n }\n idToken = state.session.id_token;\n refreshToken = state.session.refresh_token;\n }\n\n await this.run(async () => {\n const nonce = await client.createOAuthNonce(this.signal);\n globalThis.sessionStorage?.setItem(this.nonceStorageKey, nonce);\n const { oauth_redirect_url } = await client.startOAuth(\n {\n provider: providerId,\n nonce,\n intent,\n ...(linking ? { id_token: idToken, refresh_token: refreshToken } : {})\n },\n this.signal\n );\n globalThis.location.assign(oauth_redirect_url);\n });\n }\n\n private renderOAuth() {\n const providers = this.providers;\n if (providers.length === 0) return nothing;\n const [primary, ...rest] = providers;\n\n return html`\n <div class=\"stack\">\n ${\n this.formError\n ? html`<div class=\"banner\" part=\"banner\" role=\"alert\">${this.formError}</div>`\n : nothing\n }\n\n <button\n type=\"button\"\n class=\"oauth-primary\"\n part=\"oauth-button\"\n ?disabled=${this.submitting}\n @click=${() => this.startOAuth(primary!.id, this.intent)}\n >\n <span class=\"g-mark\">${primary!.mark}</span>\n <span>${this.msg.oauthContinueWith} ${primary!.name}</span>\n </button>\n\n ${\n rest.length\n ? html`\n <div class=\"icon-row\">\n ${rest.map(\n (p) => html`\n <button\n type=\"button\"\n class=\"icon-btn\"\n part=\"oauth-button\"\n aria-label=${`${this.msg.oauthContinueWith} ${p.name}`}\n title=${`${this.msg.oauthContinueWith} ${p.name}`}\n ?disabled=${this.submitting}\n @click=${() => this.startOAuth(p.id, this.intent)}\n >\n <span class=\"tile-mark\">${p.mark}</span>\n </button>\n `\n )}\n </div>\n `\n : nothing\n }\n </div>\n `;\n }\n\n // ── link ─────────────────────────────────────────────────\n private renderLink() {\n return html`\n <div class=\"stack\">\n ${this.renderStatus()}\n <button\n type=\"button\"\n class=\"secondary\"\n part=\"oauth-button\"\n ?disabled=${this.submitting}\n @click=${() => this.startOAuth(this.provider, \"link\", true)}\n >\n ${this.submitting ? html`<span class=\"spinner\"></span>` : nothing}\n <span>${this.msg.oauthContinueWith} ${this.providerName || this.provider}</span>\n </button>\n </div>\n `;\n }\n\n // ── signout ──────────────────────────────────────────────\n private async onSignOut() {\n const client = this.resolvedClient;\n if (!client) return;\n await this.run(async () => {\n await client.signOut();\n });\n }\n\n private renderSignOut() {\n if (this.embedded) {\n return html`<button\n type=\"button\"\n class=\"link-sm\"\n part=\"button-signout\"\n ?disabled=${this.submitting}\n @click=${this.onSignOut}\n >\n ${this.msg.signOutCta}\n </button>`;\n }\n\n return html`\n <div class=\"stack\">\n ${this.formError ? html`<p class=\"banner\" role=\"alert\">${this.formError}</p>` : nothing}\n <button\n type=\"button\"\n class=\"link-sm\"\n part=\"button-signout\"\n ?disabled=${this.submitting}\n @click=${this.onSignOut}\n >\n ${this.msg.signOutCta}\n </button>\n </div>\n `;\n }\n\n protected override render() {\n if (this.type === \"oauth\") return this.renderOAuth();\n if (this.type === \"link\") return this.renderLink();\n return this.renderSignOut();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"singlebase-authui-buttons\": SinglebaseAuthButtons;\n }\n}\n","import { html, css, nothing, type PropertyValues } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport {\n SinglebaseAuthError,\n resolveScreen,\n type AuthClient,\n type AuthSettings\n} from \"@singlebase/singlebase-sdk\";\nimport { SinglebaseElementBase } from \"./base.js\";\nimport { resolveRedirectTarget } from \"../utils/redirect.js\";\nimport { SettingsController } from \"../controllers/settings-controller.js\";\nimport { EventBridge } from \"../controllers/event-bridge.js\";\nimport \"./account-screen.js\";\nimport \"./buttons.js\";\n\n/** Screens a signed-out visitor may reach. */\nexport type GuestScreen = \"signin\" | \"signup\" | \"forgot\" | \"verify\" | \"otp\" | \"newpass\" | \"invite\";\n\n/** Screens that require a live session. */\nexport type ProtectedScreen = \"account\";\n\n/** Every value `screen` accepts. \"oauth-callback\" is entered by URL, not by hand. */\nexport type Screen = GuestScreen | ProtectedScreen | \"oauth-callback\";\n\nconst GUEST_SCREENS: GuestScreen[] = [\n \"signin\",\n \"signup\",\n \"forgot\",\n \"verify\",\n \"otp\",\n \"newpass\",\n \"invite\"\n];\n\nconst PROTECTED_SCREENS: ProtectedScreen[] = [\"account\"];\n\nconst ALL_SCREENS: Screen[] = [...GUEST_SCREENS, ...PROTECTED_SCREENS, \"oauth-callback\"];\n\nexport function isGuestScreen(value: string): value is GuestScreen {\n return (GUEST_SCREENS as string[]).includes(value);\n}\n\nexport function isProtectedScreen(value: string): value is ProtectedScreen {\n return (PROTECTED_SCREENS as string[]).includes(value);\n}\n\nexport function isScreen(value: string): value is Screen {\n return (ALL_SCREENS as string[]).includes(value);\n}\n\n/**\n * Converter for the allow-* flags, which default to true. Lit's Boolean\n * converter can only express \"present = true\", so it cannot turn a\n * default-true flag off from markup; this one reads `allow-x=\"false\"` as\n * false and leaves the default alone when the attribute is absent.\n */\nconst flagAttr = {\n // An absent attribute must mean \"default\" (true), not false. Lit calls\n // fromAttribute(null) when an attribute is *removed*, so returning false\n // there would make removing `allow-oauth=\"false\"` leave the flag off\n // forever instead of restoring the default.\n fromAttribute: (value: string | null) => (value === null ? true : value !== \"false\"),\n toAttribute: (value: boolean) => (value ? null : \"false\")\n};\n\n/**\n * The complete auth widget: routes among signin, signup, recovery, one-time\n * code, invite and OAuth-callback views (spec: AuthScreen), and renders the\n * design's full card chrome — brand panel, logo, method accordion, step bar,\n * banner/notice, actions and footer.\n *\n * Structure and styling follow project/AuthWidget.dc.html; the individual\n * sb-* form elements remain available for hosts that want to compose their\n * own screen instead of using this one.\n */\n@customElement(\"singlebase-authui\")\nexport class SinglebaseAuthScreen extends SinglebaseElementBase {\n static override styles = [\n ...SinglebaseElementBase.styles,\n css`\n /* the mock's root */\n :host {\n display: flex;\n width: 100%;\n box-sizing: border-box;\n background: var(--sb-surface, #ffffff);\n color: var(--sb-ink, #16181a);\n border: 1px solid var(--sb-border, #e4e6e9);\n border-radius: calc(var(--sb-radius, 4px) + 4px);\n overflow: hidden;\n }\n\n .brand-panel {\n flex: 0 0 40%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n gap: 24px;\n padding: var(--sb-pad, 20px);\n background: var(--sb-surface-alt, #fafafa);\n border-right: 1px solid var(--sb-border, #e4e6e9);\n }\n\n /* A flex column would stretch an image to full width and wreck its\n aspect ratio, so both logos opt out of the cross-axis stretch. */\n .logo-img {\n display: block;\n align-self: flex-start;\n height: var(--sb-logo-height, 20px);\n width: auto;\n max-width: 100%;\n margin-bottom: 6px;\n }\n\n .brand-img {\n display: block;\n align-self: flex-start;\n height: var(--sb-brand-logo-height, 28px);\n width: auto;\n max-width: 100%;\n }\n\n .brand-mark {\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 13px;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--sb-ink, #16181a);\n }\n\n .brand-copy {\n font-size: 20px;\n line-height: 1.35;\n letter-spacing: -0.01em;\n color: var(--sb-ink, #16181a);\n text-wrap: pretty;\n }\n\n .brand-foot {\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 11px;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .branding {\n margin-top: 18px;\n text-align: center;\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 10.5px;\n letter-spacing: 0.06em;\n color: var(--sb-muted-ink, #61666c);\n }\n\n .branding a {\n color: inherit;\n text-decoration: none;\n }\n\n .branding a:hover {\n color: var(--sb-ink, #16181a);\n text-decoration: underline;\n text-underline-offset: 3px;\n }\n\n /* the mock's panel */\n .panel {\n flex: 1;\n min-width: 0;\n padding: var(--sb-pad, 20px);\n }\n\n @media (max-width: 520px) {\n :host {\n flex-direction: column;\n }\n .brand-panel {\n flex: 0 0 auto;\n border-right: none;\n border-bottom: 1px solid var(--sb-border, #e4e6e9);\n }\n }\n `\n ];\n\n // ── configuration (mirrors the mock's props) ───────────────\n @property({ attribute: \"initial-screen\" }) accessor initialScreen: Screen = \"signin\";\n\n /**\n * Two-way screen binding for SPA routers: set it to deep-link a screen,\n * read it (or listen for `singlebase-screen-change`) to mirror the widget\n * into your URL. `goto()` is the imperative form.\n */\n @property({ reflect: true })\n accessor screen: Screen | \"\" = \"\";\n\n /**\n * By default the widget swaps to the account view once authenticated.\n * SPAs usually want to route away and unmount instead — set this and the\n * widget renders nothing when signed in, leaving navigation to the host.\n */\n @property({ type: Boolean, attribute: \"no-account-view\" })\n accessor noAccountView = false;\n @property({ attribute: false }) accessor settings: AuthSettings | null = null;\n\n @property({ converter: flagAttr, attribute: \"auth-enabled\" }) accessor authEnabled = true;\n @property({ converter: flagAttr, attribute: \"allow-email-signin\" }) accessor allowEmailSignin =\n true;\n @property({ converter: flagAttr, attribute: \"allow-email-signup\" }) accessor allowEmailSignup =\n true;\n @property({ converter: flagAttr, attribute: \"allow-email-otp\" }) accessor allowEmailOtp = true;\n @property({ converter: flagAttr, attribute: \"allow-oauth\" }) accessor allowOauth = true;\n @property({ converter: flagAttr, attribute: \"allow-account-creation\" })\n accessor allowAccountCreation = true;\n\n @property() accessor layout: \"card\" | \"split\" = \"card\";\n @property({ attribute: \"oauth-placement\" }) accessor oauthPlacement: \"top\" | \"bottom\" = \"bottom\";\n @property({ type: Boolean }) accessor stepped = false;\n\n /**\n * Branding is the host's, so these default to empty and the corresponding\n * slots simply do not render. (\"KEYRING\" and friends were the fictional\n * brand in the design mock — they must never ship as defaults.)\n */\n @property({ attribute: \"logo-text\" }) accessor logoText = \"\";\n\n /**\n * A logo image, used instead of `logo-text` when set. `logo-text` is still\n * worth supplying alongside it — it becomes the image's alt text.\n */\n @property({ attribute: \"logo-url\" }) accessor logoUrl = \"\";\n @property({ attribute: \"brand-line\" }) accessor brandLine = \"\";\n @property({ attribute: \"brand-foot\" }) accessor brandFoot = \"\";\n @property({ attribute: \"sign-in-title\" }) accessor signInTitle = \"\";\n\n /**\n * The \"Auth by Singlebase\" credit under the card. On by default; turn it\n * off with branding=\"false\", exactly like the allow-* flags.\n *\n * It is a plain link — no pixel, no beacon, no request of any kind. A\n * third-party network call originating from a sign-in form is the sort of\n * thing that fails a security review, and deservedly.\n */\n @property({ converter: flagAttr, attribute: \"branding\" }) accessor branding = true;\n\n /**\n * Where to send the user once a session exists. Same-origin only — an\n * absolute URL pointing anywhere else is refused, because a login widget\n * that forwards to an attacker-supplied host is an open redirect.\n *\n * When unset, a `?redirect=` (or `?next=`) parameter on the current URL is\n * used instead, so \"you were sent to the login page, now go back where you\n * were headed\" works without the host wiring anything.\n */\n @property({ attribute: \"redirect-url\" }) accessor redirectUrl = \"\";\n\n /** Shown as \"Terms\" in the consent line under the primary action. */\n @property({ attribute: \"tos-url\" }) accessor tosUrl = \"\";\n\n /** Shown as \"Privacy\" in the consent line under the primary action. */\n @property({ attribute: \"privacy-url\" }) accessor privacyUrl = \"\";\n\n /** Where the OAuth nonce is stashed between starting a flow and returning. */\n @property({ attribute: \"nonce-storage-key\" })\n accessor nonceStorageKey = \"singlebase-oauth-nonce\";\n @property({ attribute: \"invite-email\" }) accessor inviteEmail = \"\";\n @property({ attribute: \"invite-org\" }) accessor inviteOrg = \"\";\n /** Invite code carried by the invite link; when absent the widget asks for it. */\n @property({ attribute: \"invite-code\" }) accessor inviteCode = \"\";\n\n // ── state (mirrors the mock's state bag) ───────────────────\n @state() private accessor step = 0;\n @state() private accessor method = \"\";\n @state() private accessor email = \"\";\n @state() private accessor password = \"\";\n @state() private accessor name = \"\";\n @state() private accessor firstName = \"\";\n @state() private accessor lastName = \"\";\n @state() private accessor phone = \"\";\n @state() private accessor newPass = \"\";\n @state() private accessor confirmPass = \"\";\n @state() private accessor code: string[] = [\"\", \"\", \"\", \"\", \"\", \"\"];\n @state() private accessor verifyNext: \"newpass\" | \"signin_code\" | \"invite\" = \"signin_code\";\n @state() private accessor loading = false;\n @state() private accessor banner = \"\";\n @state() private accessor notice = \"\";\n @state() private accessor emailError = \"\";\n @state() private accessor passError = \"\";\n @state() private accessor newPassError = \"\";\n @state() private accessor attempts = 0;\n @state() private accessor needsMfaCode = false;\n\n private settingsCtl = new SettingsController(this);\n private bridge = new EventBridge(this);\n private uidBase = `sb-${Math.random().toString(36).slice(2, 8)}`;\n\n private uid(k: string) {\n return `${this.uidBase}-${k}`;\n }\n\n override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.settingsCtl.load(this.resolvedClient, this.settings);\n this.bridge.bind(this.resolvedClient);\n this.bindGoto(this.resolvedClient);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.gotoUnsubscribe?.();\n this.gotoUnsubscribe = undefined;\n this.gotoClient = null;\n this.abortController?.abort();\n }\n\n private gotoUnsubscribe?: () => void;\n private gotoClient: AuthClient | null = null;\n\n /**\n * Subscribes to auth.goto() so a host can drive every widget on the page\n * with one call. Bound here rather than in connectedCallback because the\n * app usually creates its SinglebaseAuth() instance *after* the widget\n * upgrades — at connect time there is often no client to subscribe to yet.\n */\n private bindGoto(client: AuthClient | null) {\n if (client === this.gotoClient) return;\n this.gotoUnsubscribe?.();\n this.gotoUnsubscribe = undefined;\n this.gotoClient = client;\n if (!client) return;\n\n const offGoto = client.on(\"goto\", ({ screen }) => {\n if (isScreen(screen)) this.goto(screen);\n });\n\n // Follow the redirect on an actual sign-in only. Doing this from the\n // authenticated *state* instead would also fire for a session restored\n // on page load, which is the case that should show the interstitial and\n // let the user choose.\n const offSignin = client.on(\"signin\", () => {\n this.followRedirect();\n });\n\n this.gotoUnsubscribe = () => {\n offGoto();\n offSignin();\n };\n }\n\n /** Shows a screen. The SPA-facing counterpart of the `screen` property. */\n goto(screen: Screen): void {\n if (this.screen === screen) return;\n this.screen = screen;\n this.step = 0;\n this.banner = \"\";\n this.notice = \"\";\n this.dispatchEvent(\n new CustomEvent(\"singlebase-screen-change\", {\n detail: { screen },\n bubbles: true,\n composed: true\n })\n );\n }\n\n // ── derived config: explicit props unless auth.settings says otherwise ──\n private get cfg() {\n const s = this.settings ?? this.settingsCtl.settings;\n if (!s) {\n return {\n authEnabled: this.authEnabled,\n allowEmailSignin: this.allowEmailSignin,\n allowEmailSignup: this.allowEmailSignup && this.allowAccountCreation,\n allowEmailOtp: this.allowEmailOtp,\n allowOauth: this.allowOauth,\n mfa: false\n };\n }\n const a = s.auth_settings;\n // Code-only signin is available only when the project does not require\n // password-plus-OTP MFA (the auth API's code sign-in).\n const mfa = a.second_factor === \"email_otp\";\n return {\n authEnabled: s.enabled && a.enabled && this.authEnabled,\n allowEmailSignin: a.allow_signin && this.allowEmailSignin,\n allowEmailSignup: a.allow_signup && this.allowEmailSignup && this.allowAccountCreation,\n allowEmailOtp: this.allowEmailOtp && a.allow_signin && !mfa,\n allowOauth: s.oauth_settings.enabled && this.allowOauth,\n mfa\n };\n }\n\n /** The screen the host asked for, before any guarding is applied. */\n private get requestedScreen(): Screen {\n const raw = this.screen || this.initialScreen || \"signin\";\n return isScreen(raw) ? raw : \"signin\";\n }\n\n /**\n * Resolves the screen actually rendered.\n *\n * This is the single place navigation is decided, so a protected screen\n * cannot be reached by setting an attribute, editing the URL, or calling\n * goto() — every route runs through the same auth check. The guest\n * fallbacks below additionally reflect what the project has enabled.\n */\n private get activeScreen(): Screen {\n if (this.isOAuthCallback) return \"oauth-callback\";\n\n const authenticated = this.auth.state.status === \"authenticated\";\n const requested = this.requestedScreen;\n\n if (isProtectedScreen(requested)) {\n // Never render a protected screen without a session.\n return authenticated ? requested : \"signin\";\n }\n\n if (authenticated) {\n // With no screen asked for, a signed-in visitor belongs on their\n // account. If the host *did* ask for a guest screen, honour it — the\n // interstitial below then offers to continue or sign out, rather than\n // showing a sign-in form to someone already signed in.\n const askedForOne = this.screen !== \"\" || this.initialScreen !== \"signin\";\n return askedForOne ? requested : \"account\";\n }\n\n const c = this.cfg;\n let screen = requested as GuestScreen;\n if (screen === \"signup\" && !c.allowEmailSignup) screen = \"signin\";\n if ((screen === \"forgot\" || screen === \"newpass\") && !c.allowEmailSignin) screen = \"signin\";\n if (screen === \"otp\" && !c.allowEmailOtp) screen = \"signin\";\n if (screen === \"signin\" && !c.allowEmailSignin && c.allowEmailOtp) screen = \"otp\";\n return screen;\n }\n\n /** True when a signed-in user is sitting on a guest screen (spec: offer continue/sign out). */\n private get showsSignedInInterstitial(): boolean {\n return this.auth.state.status === \"authenticated\" && isGuestScreen(this.activeScreen);\n }\n\n // ── redirect ──────────────────────────────────────────────\n\n /**\n * The post-login destination, or null when there is none.\n *\n * Only same-origin targets are accepted. A login widget that forwards to\n * an attacker-chosen host is a textbook open redirect, and the `redirect`\n * parameter it reads comes straight off the URL bar, so it is untrusted\n * input by definition.\n */\n private get redirectTarget(): string | null {\n return resolveRedirectTarget(\n this.redirectUrl || this.redirectParam,\n globalThis.location?.href,\n (reason) => console.warn(`[singlebase] ${reason}`)\n );\n }\n\n private get redirectParam(): string {\n const params = new URLSearchParams(globalThis.location?.search ?? \"\");\n return params.get(\"redirect\") ?? params.get(\"next\") ?? \"\";\n }\n\n /** Navigates to the post-login destination if there is a safe one. */\n private followRedirect(): boolean {\n const target = this.redirectTarget;\n if (!target) return false;\n globalThis.location?.assign(target);\n return true;\n }\n\n private get isOAuthCallback(): boolean {\n const params = new URLSearchParams(globalThis.location?.search ?? \"\");\n return params.has(\"access_code\") || params.has(\"error\");\n }\n\n // ── OAuth callback ────────────────────────────────────────\n //\n // Handled here rather than in a separate element: it is a screen of this\n // widget like any other, and giving it its own tag meant a second element\n // with its own copy of the loading/error handling.\n\n @state() private accessor callbackDone = false;\n\n /** Strips the provider's parameters so a reload cannot replay the exchange. */\n private cleanCallbackUrl(): void {\n const here = globalThis.location?.href;\n if (!here || !globalThis.history) return;\n const url = new URL(here);\n url.searchParams.delete(\"access_code\");\n url.searchParams.delete(\"error\");\n globalThis.history.replaceState({}, \"\", url.toString());\n }\n\n /**\n * Completes the provider round trip. Runs once per landing: the URL is\n * cleaned immediately so a refresh cannot resend a single-use access code.\n */\n private async handleOAuthCallback(): Promise<void> {\n if (this.callbackDone) return;\n this.callbackDone = true;\n\n const params = new URLSearchParams(globalThis.location?.search ?? \"\");\n const accessCode = params.get(\"access_code\");\n const denied = params.get(\"error\");\n const client = this.resolvedClient;\n\n if (denied) {\n this.cleanCallbackUrl();\n this.banner = this.msg.oauthDenied;\n return;\n }\n\n if (!accessCode || !client) return;\n\n const nonce = globalThis.sessionStorage?.getItem(this.nonceStorageKey);\n this.cleanCallbackUrl();\n\n if (!nonce) {\n // No nonce means this response cannot be tied to a flow this browser\n // started, so it is not safe to exchange.\n this.banner = this.msg.genericErrorMessage;\n return;\n }\n\n await this.withLoading(async () => {\n await client.completeOAuth({ access_code: accessCode, nonce }, this.signal());\n globalThis.sessionStorage?.removeItem(this.nonceStorageKey);\n });\n }\n\n /** The small logo above a screen title: image when given one, else text. */\n private renderLogo() {\n if (this.logoUrl) {\n return html`<img class=\"logo-img\" part=\"logo\" src=${this.logoUrl} alt=${this.logoText} />`;\n }\n return this.logoText ? html`<div class=\"logo-dot\" part=\"logo\">${this.logoText}</div>` : nothing;\n }\n\n /** The larger logo in the split layout's brand panel. */\n private renderBrandMark() {\n if (this.logoUrl) {\n return html`<img class=\"brand-img\" part=\"logo\" src=${this.logoUrl} alt=${this.logoText} />`;\n }\n return this.logoText\n ? html`<div class=\"brand-mark\" part=\"logo\">${this.logoText}</div>`\n : nothing;\n }\n\n private renderBranding() {\n if (!this.branding) return nothing;\n return html`<div class=\"branding\" part=\"branding\">\n <a href=\"https://singlebase.cloud\" target=\"_blank\" rel=\"noopener noreferrer\"\n >${this.msg.brandingLabel}</a\n >\n </div>`;\n }\n\n /** Every screen renders inside this, so the credit appears once and only once. */\n private panel(content: unknown) {\n return html`<div class=\"panel\">${content}${this.renderBranding()}</div>`;\n }\n\n private renderOAuthCallback() {\n return html`\n <div class=\"stack\">\n <div class=\"head\">\n ${this.renderLogo()}\n <h2 class=\"title\" part=\"title\">${this.msg.oauthCallbackTitle}</h2>\n <p class=\"sub\">${this.msg.oauthCallbackSub}</p>\n </div>\n ${\n this.banner\n ? html`<div class=\"banner\" part=\"banner\" role=\"alert\">${this.banner}</div>`\n : html`<div class=\"stack\" style=\"align-items:center;\">\n <span class=\"spinner\" part=\"spinner\"></span>\n </div>`\n }\n ${\n this.banner\n ? html`<button type=\"button\" class=\"ghost\" @click=${() => this.goto(\"signin\")}>\n <span>${this.msg.backCta}</span>\n </button>`\n : nothing\n }\n </div>\n `;\n }\n\n private setScreen(screen: GuestScreen, patch: Record<string, unknown> = {}) {\n const changed = this.screen !== screen;\n this.screen = screen;\n this.banner = \"\";\n this.emailError = \"\";\n this.passError = \"\";\n Object.assign(this, patch);\n if (changed) {\n this.dispatchEvent(\n new CustomEvent(\"singlebase-screen-change\", {\n detail: { screen },\n bubbles: true,\n composed: true\n })\n );\n }\n }\n\n // ── submit ────────────────────────────────────────────────\n private async withLoading(task: () => Promise<void>) {\n this.loading = true;\n this.banner = \"\";\n try {\n await task();\n } catch (error) {\n this.banner = this.describeError(error);\n } finally {\n this.loading = false;\n }\n }\n\n private describeError(error: unknown): string {\n if (error instanceof SinglebaseAuthError) {\n if (error.code === \"AUTH_RATE_LIMITED\") return this.msg.rateLimitedMessage;\n if (error.code === \"INVALID_TOKEN\") return \"That code is not valid. Check it and try again.\";\n }\n return this.msg.genericErrorMessage;\n }\n\n private get codeValue() {\n return this.code.join(\"\");\n }\n\n private async onSubmit(e?: Event) {\n e?.preventDefault();\n const client = this.resolvedClient;\n if (!client) return;\n const screen = this.activeScreen;\n const c = this.cfg;\n\n if (screen === \"forgot\" || screen === \"otp\") {\n if (!this.email.includes(\"@\")) {\n this.emailError = this.msg.invalidEmailError;\n return;\n }\n const purpose = screen === \"forgot\" ? \"password_reset\" : \"signin\";\n await this.withLoading(async () => {\n await client.requestCode({ email: this.email, purpose }, this.signal());\n this.notice = this.msg.codeSentNeutral;\n this.screen = \"verify\";\n this.verifyNext = screen === \"forgot\" ? \"newpass\" : \"signin_code\";\n this.code = [\"\", \"\", \"\", \"\", \"\", \"\"];\n });\n return;\n }\n\n if (screen === \"verify\") {\n if (this.codeValue.length < 6) {\n this.banner = this.msg.codeIncompleteError;\n return;\n }\n if (this.verifyNext === \"newpass\") {\n // Code is confirmed together with the new password by auth.confirm_code.\n this.setScreen(\"newpass\", { notice: \"\" });\n return;\n }\n await this.withLoading(async () => {\n await client.signIn(\n { email: this.email, grant_type: \"code\", code: this.codeValue },\n this.signal()\n );\n this.notice = \"\";\n });\n return;\n }\n\n if (screen === \"newpass\") {\n if (this.newPass.length < 10) {\n this.newPassError = this.msg.passwordMinError;\n return;\n }\n if (this.newPass !== this.confirmPass) {\n this.newPassError = this.msg.passwordMatchError;\n return;\n }\n await this.withLoading(async () => {\n await client.resetPassword(\n { email: this.email, code: this.codeValue, new_password: this.newPass },\n this.signal()\n );\n this.newPass = \"\";\n this.confirmPass = \"\";\n });\n return;\n }\n\n if (screen === \"invite\") {\n if (!this.firstName.trim() || !this.lastName.trim()) {\n this.banner = \"Enter your first and last name.\";\n return;\n }\n if (this.phone.replace(/\\D/g, \"\").length < 7) {\n this.banner = this.msg.invalidPhoneError;\n return;\n }\n if (this.password.length < 10) {\n this.passError = this.msg.passwordMinError;\n return;\n }\n const code = this.inviteCode || this.codeValue;\n if (code.length < 6) {\n this.banner = this.msg.codeIncompleteError;\n return;\n }\n await this.withLoading(async () => {\n await client.acceptInvite(\n {\n email: this.inviteEmail,\n grant_type: \"code\",\n purpose: \"invite\",\n code,\n password: this.password,\n phone: this.phone\n },\n this.signal()\n );\n });\n return;\n }\n\n if (\n this.stepped &&\n ((screen === \"signup\" && this.step < 2) || (screen === \"signin\" && this.step < 1))\n ) {\n if (!this.email.includes(\"@\")) {\n this.emailError = this.msg.invalidEmailError;\n return;\n }\n this.step += 1;\n return;\n }\n\n if (!this.email.includes(\"@\")) {\n this.emailError = this.msg.invalidEmailError;\n return;\n }\n\n if (screen === \"signup\") {\n if (this.password.length < 8) {\n this.passError = \"Password must be at least 8 characters.\";\n return;\n }\n const [first, ...rest] = this.name.trim().split(/\\s+/);\n await this.withLoading(async () => {\n const result = await client.signUp(\n {\n email: this.email,\n password: this.password,\n first_name: first || this.name,\n last_name: rest.join(\" \") || \"—\"\n },\n this.signal()\n );\n const next = resolveScreen({\n next_action: result.next_action,\n next_operation: result.next_operation\n });\n this.setScreen(\"signin\", {\n notice: \"Account created. Sign in to continue.\",\n step: 0,\n password: \"\",\n needsMfaCode: next === \"signin_with_code\"\n });\n });\n return;\n }\n\n // signin\n if (this.password.length < 8) {\n this.attempts += 1;\n this.passError = \"Password must be at least 8 characters.\";\n this.banner = this.attempts >= 3 ? this.msg.rateLimitedMessage : \"\";\n return;\n }\n await this.withLoading(async () => {\n try {\n await client.signIn(\n {\n email: this.email,\n password: this.password,\n ...(this.needsMfaCode ? { code: this.codeValue } : {})\n },\n this.signal()\n );\n this.step = 0;\n } catch (error) {\n if (error instanceof SinglebaseAuthError && error.code === \"CODE_REQUIRED\") {\n this.needsMfaCode = true;\n await client.requestCode({ email: this.email, purpose: \"signin\" }, this.signal());\n this.notice = this.msg.codeSentNeutral;\n return;\n }\n if (error instanceof SinglebaseAuthError && error.code === \"INVALID_CREDENTIALS\") {\n this.attempts += 1;\n this.banner =\n this.attempts >= 3\n ? this.msg.rateLimitedMessage\n : \"That email and password do not match.\";\n return;\n }\n throw error;\n }\n });\n }\n\n private abortController: AbortController | null = null;\n private signal(): AbortSignal {\n this.abortController?.abort();\n this.abortController = new AbortController();\n return this.abortController.signal;\n }\n\n private onCodeInput(index: number, e: Event) {\n const input = e.target as HTMLInputElement;\n const entered = input.value.replace(/\\D/g, \"\");\n\n // Autofill of a `one-time-code` field arrives as the whole code in one\n // cell; spread it instead of keeping only the last digit.\n if (entered.length > 1) {\n this.fillCode(index, entered);\n return;\n }\n\n const digit = entered.slice(-1);\n const next = this.code.slice();\n next[index] = digit;\n this.code = next;\n this.banner = \"\";\n if (digit) {\n const inputs = this.renderRoot.querySelectorAll<HTMLInputElement>(\n \".code-row input, .code-row-sm input\"\n );\n inputs[index + 1]?.focus();\n }\n }\n\n private onCodePaste(index: number, e: ClipboardEvent) {\n const digits = (e.clipboardData?.getData(\"text\") ?? \"\").replace(/\\D/g, \"\");\n if (!digits) return;\n e.preventDefault();\n this.fillCode(index, digits);\n }\n\n private fillCode(index: number, digits: string) {\n const next = this.code.slice();\n for (let i = 0; i < digits.length && index + i < next.length; i += 1) {\n next[index + i] = digits[i]!;\n }\n this.code = next;\n this.banner = \"\";\n\n const landed = Math.min(index + digits.length, next.length - 1);\n void this.updateComplete.then(() => {\n const inputs = this.renderRoot.querySelectorAll<HTMLInputElement>(\n \".code-row input, .code-row-sm input\"\n );\n inputs[landed]?.focus();\n });\n }\n\n private async onResend() {\n const client = this.resolvedClient;\n if (!client || this.loading) return;\n const purpose = this.verifyNext === \"newpass\" ? \"password_reset\" : \"signin\";\n await this.withLoading(async () => {\n await client.requestCode({ email: this.email, purpose }, this.signal());\n this.notice = \"New code sent.\";\n this.code = [\"\", \"\", \"\", \"\", \"\", \"\"];\n });\n }\n\n private goBack() {\n if (this.step > 0 && [\"forgot\", \"verify\", \"otp\", \"newpass\"].indexOf(this.activeScreen) < 0) {\n this.step -= 1;\n this.banner = \"\";\n this.notice = \"\";\n return;\n }\n this.setScreen(\"signin\", { step: 0, notice: \"\", code: [\"\", \"\", \"\", \"\", \"\", \"\"] });\n }\n\n // ── copy helpers (mirror the mock's titles/subs/ctas maps) ──\n private titleFor(screen: GuestScreen): string {\n const m = this.msg;\n switch (screen) {\n case \"signup\":\n return m.signUpTitle;\n case \"forgot\":\n return m.forgotTitle;\n case \"verify\":\n return m.verifyTitle;\n case \"otp\":\n return m.otpTitle;\n case \"newpass\":\n return m.newPassTitle;\n case \"invite\":\n return m.inviteTitle;\n default:\n return this.signInTitle || m.signInTitle;\n }\n }\n\n private subFor(screen: GuestScreen): string {\n const m = this.msg;\n const c = this.cfg;\n switch (screen) {\n case \"signup\":\n return m.signUpSub;\n case \"forgot\":\n return m.forgotSub;\n case \"verify\":\n return `We sent a 6-digit code to ${this.email || \"your inbox\"}. It expires in 10 minutes.`;\n case \"otp\":\n return m.otpSub;\n case \"newpass\":\n return `Your code is confirmed. Set a new password for ${this.email || \"your account\"}.`;\n case \"invite\":\n return `${this.inviteOrg || \"Acme\"} invited you to join. Set up your account to continue.`;\n default:\n if (!c.allowEmailSignin && !c.allowEmailOtp) return m.signInSubOauthOnly;\n return c.allowOauth ? m.signInSubEmailAndOauth : m.signInSubEmailOnly;\n }\n }\n\n private ctaFor(screen: GuestScreen): string {\n const m = this.msg;\n if (\n this.stepped &&\n ((screen === \"signup\" && this.step < 2) || (screen === \"signin\" && this.step < 1))\n ) {\n return m.continueCta;\n }\n switch (screen) {\n case \"signup\":\n return m.signUpCta;\n case \"forgot\":\n return m.forgotCta;\n case \"verify\":\n return m.verifyCta;\n case \"otp\":\n return m.otpCta;\n case \"newpass\":\n return m.newPassCta;\n case \"invite\":\n return m.inviteCta;\n default:\n return m.signInCta;\n }\n }\n\n private stepPct(): number {\n if (!this.stepped) return 100;\n const total = this.activeScreen === \"signup\" ? 3 : 2;\n return Math.round(((this.step + 1) / total) * 100);\n }\n\n // ── render pieces ─────────────────────────────────────────\n private renderPrimary(label: string) {\n return html`\n <button type=\"submit\" class=\"primary\" part=\"button-primary\" ?disabled=${this.loading}>\n ${this.loading ? html`<span class=\"spinner\" part=\"spinner\"></span>` : nothing}\n <span>${label}</span>\n </button>\n `;\n }\n\n private renderEmailField(id: string) {\n return html`\n <div class=\"field\">\n <label for=${id}>${this.msg.emailLabel}</label>\n <input\n id=${id}\n type=\"email\"\n part=\"input\"\n .value=${this.email}\n placeholder=${this.msg.emailPlaceholder}\n aria-invalid=${this.emailError ? \"true\" : \"false\"}\n ?disabled=${this.loading}\n @input=${(e: Event) => {\n this.email = (e.target as HTMLInputElement).value;\n this.emailError = \"\";\n this.banner = \"\";\n }}\n />\n ${this.emailError ? html`<p class=\"err\">${this.emailError}</p>` : nothing}\n </div>\n `;\n }\n\n private renderPasswordField(id: string, showForgot: boolean) {\n return html`\n <div class=\"field\">\n <div class=\"label-row\">\n <label for=${id}>${this.msg.passwordLabel}</label>\n ${\n showForgot\n ? html`<button\n type=\"button\"\n class=\"link-sm\"\n @click=${() => this.setScreen(\"forgot\", { step: 0 })}\n >\n ${this.msg.forgotLink}\n </button>`\n : nothing\n }\n </div>\n <input\n id=${id}\n type=\"password\"\n part=\"input\"\n .value=${this.password}\n placeholder=${this.msg.passwordPlaceholder}\n aria-invalid=${this.passError ? \"true\" : \"false\"}\n ?disabled=${this.loading}\n @input=${(e: Event) => {\n this.password = (e.target as HTMLInputElement).value;\n this.passError = \"\";\n this.banner = \"\";\n }}\n />\n ${this.passError ? html`<p class=\"err\">${this.passError}</p>` : nothing}\n </div>\n `;\n }\n\n private renderCodeRow(small = false) {\n return html`\n <div class=${small ? \"code-row-sm\" : \"code-row\"} role=\"group\" aria-label=\"Verification code\">\n ${this.code.map(\n (digit, i) => html`\n <input\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"1\"\n part=\"code-box\"\n aria-label=${`Digit ${i + 1}`}\n autocomplete=${i === 0 ? \"one-time-code\" : \"off\"}\n .value=${digit}\n ?disabled=${this.loading}\n @input=${(e: Event) => this.onCodeInput(i, e)}\n @paste=${(e: ClipboardEvent) => this.onCodePaste(i, e)}\n />\n `\n )}\n </div>\n `;\n }\n\n /** The email/password method accordion body for signin, signup and otp. */\n private renderEmailMethodBody(screen: GuestScreen) {\n const c = this.cfg;\n const stepped = this.stepped;\n const showName = screen === \"signup\" && (!stepped || this.step === 0);\n const showEmail =\n (screen === \"signup\" && (!stepped || this.step === 1)) ||\n (screen === \"signin\" && (!stepped || this.step === 0)) ||\n screen === \"otp\";\n const showPassword =\n (screen === \"signup\" && (!stepped || this.step === 2)) ||\n (screen === \"signin\" && (!stepped || this.step === 1));\n const showOtpLink =\n screen === \"signin\" && c.allowEmailSignin && c.allowEmailOtp && (!stepped || this.step === 0);\n\n return html`\n ${\n showName\n ? html`\n <div class=\"field\">\n <label for=${this.uid(\"name\")}>${this.msg.fullNameLabel}</label>\n <input\n id=${this.uid(\"name\")}\n type=\"text\"\n part=\"input\"\n .value=${this.name}\n placeholder=${this.msg.fullNamePlaceholder}\n ?disabled=${this.loading}\n @input=${(e: Event) => (this.name = (e.target as HTMLInputElement).value)}\n />\n </div>\n `\n : nothing\n }\n ${showEmail ? this.renderEmailField(this.uid(\"email\")) : nothing}\n ${showPassword ? this.renderPasswordField(this.uid(\"pass\"), c.allowEmailSignin && screen === \"signin\") : nothing}\n ${\n this.needsMfaCode && screen === \"signin\"\n ? html`\n <div class=\"field\">\n <span class=\"label\">Verification code</span>\n ${this.renderCodeRow(true)}\n </div>\n `\n : nothing\n }\n ${this.renderPrimary(this.ctaFor(screen))}\n ${\n showOtpLink\n ? html`<button\n type=\"button\"\n class=\"edit-link\"\n @click=${() => this.setScreen(\"otp\", { step: 0 })}\n >\n ${this.msg.otpInsteadLink}\n </button>`\n : nothing\n }\n `;\n }\n\n private renderAccordion(screen: GuestScreen) {\n const c = this.cfg;\n const hasEmail =\n (screen === \"signin\" && c.allowEmailSignin) ||\n (screen === \"signup\" && c.allowEmailSignup) ||\n (screen === \"otp\" && c.allowEmailOtp);\n const hasOauth = c.allowOauth;\n if (!hasEmail && !hasOauth) return nothing;\n\n const showHeads = hasEmail && hasOauth;\n const method = !hasEmail ? \"oauth\" : !hasOauth ? \"email\" : this.method || \"email\";\n const emailOpen = method === \"email\";\n const oauthOpen = method === \"oauth\";\n\n const emailTitle =\n screen === \"signup\" ? this.msg.emailMethodTitleSignUp : this.msg.emailMethodTitle;\n const emailMeta =\n screen === \"otp\"\n ? this.msg.emailMethodMetaOtp\n : screen === \"signup\"\n ? this.msg.emailMethodMetaSignUp\n : this.msg.emailMethodMeta;\n\n const item = (\n open: boolean,\n title: string,\n meta: string,\n body: unknown,\n onToggle: () => void,\n key: string\n ) => html`\n <div class=\"acc-item ${open ? \"open\" : \"\"} ${showHeads ? \"\" : \"bare\"}\" part=\"acc-item\">\n ${\n showHeads\n ? html`\n <button\n type=\"button\"\n class=\"acc-head\"\n aria-expanded=${open ? \"true\" : \"false\"}\n aria-controls=${this.uid(`acc-${key}`)}\n @click=${onToggle}\n >\n <span class=\"chev\" aria-hidden=\"true\">›</span>\n <span class=\"acc-title\">${title}</span>\n <span class=\"acc-meta\">${meta}</span>\n </button>\n `\n : nothing\n }\n <div class=\"acc-body\" id=${this.uid(`acc-${key}`)}>\n <div class=\"acc-clip\">\n <div class=\"acc-inner\">${body}</div>\n </div>\n </div>\n </div>\n `;\n\n const emailItem = hasEmail\n ? item(\n emailOpen,\n emailTitle,\n emailMeta,\n this.renderEmailMethodBody(screen),\n () => (this.method = emailOpen ? \"\" : \"email\"),\n \"email\"\n )\n : nothing;\n\n const oauthItem = hasOauth\n ? item(\n oauthOpen,\n this.msg.oauthMethodTitle,\n this.msg.oauthMethodMeta,\n html`<singlebase-authui-buttons\n type=\"oauth\"\n embedded\n theme=${ifDefined(this.theme)}\n density=${ifDefined(this.density)}\n field-style=${ifDefined(this.fieldStyle)}\n .client=${this.resolvedClient}\n .messages=${this.messages}\n .settings=${this.settings ?? this.settingsCtl.settings}\n intent=${screen === \"signup\" ? \"signup\" : \"signin\"}\n ></singlebase-authui-buttons>`,\n () => (this.method = oauthOpen ? \"\" : \"oauth\"),\n \"oauth\"\n )\n : nothing;\n\n return html`\n <div class=\"acc-wrap\">\n ${this.oauthPlacement === \"top\" ? html`${oauthItem}${emailItem}` : html`${emailItem}${oauthItem}`}\n </div>\n `;\n }\n\n private renderScreenBody(screen: GuestScreen) {\n const c = this.cfg;\n const showMethods = [\"signin\", \"signup\", \"otp\"].indexOf(screen) >= 0;\n\n if (showMethods) return this.renderAccordion(screen);\n\n if (screen === \"forgot\") {\n return html`<div class=\"fields\">${this.renderEmailField(this.uid(\"reset\"))}</div>`;\n }\n\n if (screen === \"verify\") {\n return html`\n ${this.renderCodeRow()}\n <div class=\"resend-row\">\n <span class=\"hint\">${this.msg.resendQuestion}</span>\n <button type=\"button\" class=\"link-sm\" ?disabled=${this.loading} @click=${this.onResend}>\n ${this.msg.resendCta}\n </button>\n </div>\n `;\n }\n\n if (screen === \"newpass\") {\n return html`\n <div class=\"fields\">\n <div class=\"field\">\n <label for=${this.uid(\"newpass\")}>${this.msg.newPasswordLabel}</label>\n <input\n id=${this.uid(\"newpass\")}\n type=\"password\"\n part=\"input\"\n .value=${this.newPass}\n placeholder=${this.msg.newPasswordPlaceholder}\n aria-invalid=${this.newPassError ? \"true\" : \"false\"}\n ?disabled=${this.loading}\n @input=${(e: Event) => {\n this.newPass = (e.target as HTMLInputElement).value;\n this.newPassError = \"\";\n }}\n />\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"confirmpass\")}>${this.msg.confirmPasswordLabel}</label>\n <input\n id=${this.uid(\"confirmpass\")}\n type=\"password\"\n part=\"input\"\n .value=${this.confirmPass}\n placeholder=${this.msg.confirmPasswordPlaceholder}\n aria-invalid=${this.newPassError ? \"true\" : \"false\"}\n ?disabled=${this.loading}\n @input=${(e: Event) => {\n this.confirmPass = (e.target as HTMLInputElement).value;\n this.newPassError = \"\";\n }}\n />\n ${this.newPassError ? html`<p class=\"err\">${this.newPassError}</p>` : nothing}\n </div>\n </div>\n `;\n }\n\n if (screen === \"invite\") {\n return html`\n <div class=\"fields\">\n <div class=\"invite-box\">\n <span class=\"invite-label\">${this.msg.invitedEmailLabel}</span>\n <span class=\"invite-email\">${this.inviteEmail}</span>\n </div>\n ${\n this.inviteCode\n ? nothing\n : html`<div class=\"field\">\n <span class=\"label\">Invite code</span>\n ${this.renderCodeRow(true)}\n </div>`\n }\n <div class=\"two-up\">\n <div class=\"field\">\n <label for=${this.uid(\"first\")}>${this.msg.firstNameLabel}</label>\n <input\n id=${this.uid(\"first\")}\n type=\"text\"\n part=\"input\"\n .value=${this.firstName}\n placeholder=${this.msg.firstNamePlaceholder}\n ?disabled=${this.loading}\n @input=${(e: Event) => (this.firstName = (e.target as HTMLInputElement).value)}\n />\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"last\")}>${this.msg.lastNameLabel}</label>\n <input\n id=${this.uid(\"last\")}\n type=\"text\"\n part=\"input\"\n .value=${this.lastName}\n placeholder=${this.msg.lastNamePlaceholder}\n ?disabled=${this.loading}\n @input=${(e: Event) => (this.lastName = (e.target as HTMLInputElement).value)}\n />\n </div>\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"phone\")}>${this.msg.phoneLabel}</label>\n <input\n id=${this.uid(\"phone\")}\n type=\"tel\"\n part=\"input\"\n .value=${this.phone}\n placeholder=${this.msg.phonePlaceholder}\n ?disabled=${this.loading}\n @input=${(e: Event) => (this.phone = (e.target as HTMLInputElement).value)}\n />\n </div>\n <div class=\"field\">\n <label for=${this.uid(\"invitepass\")}>${this.msg.passwordLabel}</label>\n <input\n id=${this.uid(\"invitepass\")}\n type=\"password\"\n part=\"input\"\n .value=${this.password}\n placeholder=${this.msg.newPasswordPlaceholder}\n aria-invalid=${this.passError ? \"true\" : \"false\"}\n ?disabled=${this.loading}\n @input=${(e: Event) => {\n this.password = (e.target as HTMLInputElement).value;\n this.passError = \"\";\n }}\n />\n ${this.passError ? html`<p class=\"err\">${this.passError}</p>` : nothing}\n </div>\n </div>\n `;\n }\n\n return nothing;\n }\n\n private renderGuest(screen: GuestScreen) {\n const c = this.cfg;\n const showPrimary = [\"forgot\", \"verify\", \"newpass\", \"invite\"].indexOf(screen) >= 0;\n const showBack =\n (this.stepped && this.step > 0) ||\n [\"forgot\", \"verify\", \"otp\", \"newpass\"].indexOf(screen) >= 0;\n const showFoot =\n (screen === \"signin\" && c.allowEmailSignup) || (screen === \"signup\" && c.allowEmailSignin);\n const showStepBar = this.stepped && (screen === \"signin\" || screen === \"signup\");\n\n return html`\n <form class=\"stack\" @submit=${this.onSubmit} novalidate>\n <div class=\"head\">\n ${this.layout !== \"split\" ? this.renderLogo() : nothing}\n <h2 class=\"title\" part=\"title\">${this.titleFor(screen)}</h2>\n <p class=\"sub\">${this.subFor(screen)}</p>\n </div>\n\n ${\n showStepBar\n ? html`<div class=\"step-bar\">\n <div class=\"step-fill\" style=\"width:${this.stepPct()}%\"></div>\n </div>`\n : nothing\n }\n ${this.banner ? html`<div class=\"banner\" part=\"banner\" role=\"alert\">${this.banner}</div>` : nothing}\n ${this.notice ? html`<div class=\"notice\" part=\"notice\" role=\"status\">${this.notice}</div>` : nothing}\n ${this.renderScreenBody(screen)}\n ${\n showPrimary || showBack\n ? html`\n <div class=\"actions\">\n ${showPrimary ? this.renderPrimary(this.ctaFor(screen)) : nothing}\n ${\n showBack\n ? html`<button type=\"button\" class=\"ghost\" @click=${this.goBack}>\n ${this.msg.backCta}\n </button>`\n : nothing\n }\n </div>\n `\n : nothing\n }\n ${\n showFoot\n ? html`\n <p class=\"foot\">\n <span\n >${screen === \"signup\" ? this.msg.footTextSignUp : this.msg.footTextSignIn}</span\n >\n <button\n type=\"button\"\n class=\"link\"\n @click=${() =>\n this.setScreen(screen === \"signup\" ? \"signin\" : \"signup\", {\n step: 0,\n notice: \"\"\n })}\n >\n ${screen === \"signup\" ? this.msg.footActionSignUp : this.msg.footActionSignIn}\n </button>\n </p>\n `\n : nothing\n }\n ${this.renderConsent()}\n\n <span class=\"sr-only\" role=\"status\" aria-live=\"polite\">\n ${this.loading ? \"Submitting…\" : \"\"}\n </span>\n </form>\n `;\n }\n\n private renderBlocked() {\n const c = this.cfg;\n const disabled = !c.authEnabled;\n return html`\n <div class=\"stack\">\n <div class=\"head\">\n ${this.layout !== \"split\" ? this.renderLogo() : nothing}\n <h2 class=\"title\" part=\"title\">\n ${disabled ? this.msg.blockedTitleDisabled : this.msg.blockedTitleUnavailable}\n </h2>\n <p class=\"sub\">\n ${disabled ? this.msg.blockedBodyDisabled : this.msg.blockedBodyUnavailable}\n </p>\n </div>\n <div class=\"notice\" part=\"notice\" role=\"status\">${this.msg.blockedHint}</div>\n </div>\n `;\n }\n\n /**\n * Shown when a signed-in visitor lands on a guest screen. Rather than\n * presenting a sign-in form to someone already signed in, offer the two\n * things they could actually want: carry on, or switch accounts.\n */\n private renderSignedIn() {\n const user = this.auth.state.status === \"authenticated\" ? this.auth.state.user : null;\n const target = this.redirectTarget;\n\n return html`\n <div class=\"stack\">\n <div class=\"head\">\n ${this.renderLogo()}\n <h2 class=\"title\" part=\"title\">${this.msg.alreadySignedInTitle}</h2>\n <p class=\"sub\">\n ${\n user?.email\n ? `${this.msg.alreadySignedInSubPrefix} ${user.email}.`\n : this.msg.alreadySignedInSub\n }\n </p>\n </div>\n\n <div class=\"actions\">\n <button type=\"button\" class=\"primary\" part=\"button-primary\" @click=${this.onContinue}>\n <span>${this.msg.continueCta}</span>\n </button>\n <button type=\"button\" class=\"ghost\" @click=${this.onInterstitialSignOut}>\n <span>${this.msg.signOutCta}</span>\n </button>\n </div>\n\n ${target ? nothing : html`<p class=\"hint\">${this.msg.continueHint}</p>`}\n </div>\n `;\n }\n\n private onContinue = () => {\n if (this.followRedirect()) return;\n // Nothing to redirect to: show the account view and let the host route\n // off the event if it wants to.\n this.dispatchEvent(\n new CustomEvent(\"singlebase-continue\", {\n detail: { user: this.getUser() },\n bubbles: true,\n composed: true\n })\n );\n this.goto(\"account\");\n };\n\n private onInterstitialSignOut = async () => {\n await this.resolvedClient?.logout();\n this.goto(\"signin\");\n };\n\n /** The Terms/Privacy consent line, rendered only when the host supplies a link. */\n private renderConsent() {\n if (!this.tosUrl && !this.privacyUrl) return nothing;\n const tos = this.tosUrl\n ? html`<a class=\"link-sm\" href=${this.tosUrl} target=\"_blank\" rel=\"noopener noreferrer\"\n >${this.msg.termsLabel}</a\n >`\n : nothing;\n const privacy = this.privacyUrl\n ? html`<a class=\"link-sm\" href=${this.privacyUrl} target=\"_blank\" rel=\"noopener noreferrer\"\n >${this.msg.privacyLabel}</a\n >`\n : nothing;\n\n return html`\n <p class=\"hint\" part=\"consent\">\n ${this.msg.consentPrefix}\n ${tos}${\n this.tosUrl && this.privacyUrl ? html` ${this.msg.consentJoin} ` : nothing\n }${privacy}.\n </p>\n `;\n }\n\n protected override render() {\n const screen = this.activeScreen;\n\n if (screen === \"oauth-callback\") {\n void this.handleOAuthCallback();\n return this.panel(this.renderOAuthCallback());\n }\n\n if (screen === \"account\") {\n // `no-account-view` is the SPA case: render nothing and let the host\n // route away on the signin event instead.\n if (this.noAccountView) return nothing;\n return this.panel(html`\n <singlebase-authui-account\n theme=${ifDefined(this.theme)}\n density=${ifDefined(this.density)}\n field-style=${ifDefined(this.fieldStyle)}\n .client=${this.resolvedClient}\n .messages=${this.messages}\n logo-text=${this.logoText}\n logo-url=${this.logoUrl}\n ></singlebase-authui-account>\n `);\n }\n\n if (this.showsSignedInInterstitial) {\n if (this.noAccountView) return nothing;\n return this.panel(this.renderSignedIn());\n }\n\n const c = this.cfg;\n const noMethods = !c.allowEmailSignin && !c.allowEmailOtp && !c.allowOauth;\n const blocked = !c.authEnabled || (noMethods && isGuestScreen(screen));\n\n return html`\n ${\n this.layout === \"split\"\n ? html`\n <div class=\"brand-panel\">\n ${this.renderBrandMark()}\n ${this.brandLine ? html`<div class=\"brand-copy\">${this.brandLine}</div>` : nothing}\n ${this.brandFoot ? html`<div class=\"brand-foot\">${this.brandFoot}</div>` : nothing}\n </div>\n `\n : nothing\n }\n ${this.panel(blocked ? this.renderBlocked() : this.renderGuest(screen as GuestScreen))}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"singlebase-authui\": SinglebaseAuthScreen;\n }\n}\n","import { html } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { matchesPredicate, validatePredicate, type Predicate } from \"@singlebase/core\";\nimport { SinglebaseElementBase } from \"./base.js\";\n\nexport type GuardState = \"loading\" | \"authenticated\" | \"unauthenticated\";\n\nconst GUARD_STATES: GuardState[] = [\"loading\", \"authenticated\", \"unauthenticated\"];\n\n/**\n * Renders content conditionally on auth state, and optionally on a predicate\n * over the signed-in profile.\n *\n * Two shapes, because wrapping a single line of markup in a slotted <div> is\n * a lot of ceremony:\n *\n * <!-- long form: one guard, several states -->\n * <singlebase-authui-guard>\n * <div slot=\"loading\">Checking…</div>\n * <div slot=\"authenticated\">Welcome back</div>\n * <div slot=\"unauthenticated\"><singlebase-authui></singlebase-authui></div>\n * </singlebase-authui-guard>\n *\n * <!-- short form: the guard itself carries the state -->\n * <singlebase-authui-guard slot=\"loading\">Checking…</singlebase-authui-guard>\n *\n * With a predicate it also filters on the profile:\n *\n * <singlebase-authui-guard slot=\"authenticated\" predicate='{\"roles\":{\"$in\":[\"admin\"]}}'>\n * <admin-panel></admin-panel>\n * </singlebase-authui-guard>\n *\n * A predicate only ever narrows the *authenticated* state: a signed-out\n * visitor is unauthenticated whether or not a filter is present, so a guard\n * can never leak content by failing open.\n */\n@customElement(\"singlebase-authui-guard\")\nexport class SinglebaseAuthGuard extends SinglebaseElementBase {\n /**\n * Short form. When set, every child of this guard belongs to that state and\n * no per-child `slot` attributes are needed.\n *\n * Note this reuses the standard `slot` attribute name, which is inert here:\n * the guard is not itself inside another shadow root's slot, so the name is\n * free to mean \"the state these children belong to\".\n */\n @property({ reflect: true })\n accessor slot = \"\";\n\n /**\n * One-level, Mongo-style filter over the signed-in `user_profile`.\n * Dot notation reaches nested values; see core's predicate module for the\n * supported operators.\n */\n @property({\n converter: {\n fromAttribute: (value: string | null): Predicate | null => {\n if (!value) return null;\n try {\n return JSON.parse(value) as Predicate;\n } catch {\n console.error(\"[singlebase] guard predicate is not valid JSON:\", value);\n return null;\n }\n },\n toAttribute: (value: Predicate | null) => (value ? JSON.stringify(value) : null)\n }\n })\n accessor predicate: Predicate | null = null;\n\n /**\n * What to show when the user is signed in but the predicate does not match.\n * Defaults to \"unauthenticated\" so a filtered guard degrades to the\n * signed-out branch; set \"hidden\" to render nothing at all.\n */\n @property({ attribute: \"on-mismatch\" })\n accessor onMismatch: \"unauthenticated\" | \"hidden\" = \"unauthenticated\";\n\n private warnedFor: string | null = null;\n\n protected override createRenderRoot() {\n // Light DOM: the host's own markup stays the host's, and the hidden\n // toggling below applies to real light-DOM children.\n return this;\n }\n\n /** The state this guard currently resolves to, after applying the predicate. */\n get activeState(): GuardState | \"hidden\" {\n const status = this.auth.state.status;\n\n if (status === \"loading\") return \"loading\";\n if (status !== \"authenticated\") return \"unauthenticated\";\n\n if (!this.predicate) return \"authenticated\";\n\n this.warnOnce(this.predicate);\n const user = this.auth.state.user;\n if (matchesPredicate(user, this.predicate)) return \"authenticated\";\n return this.onMismatch === \"hidden\" ? \"hidden\" : \"unauthenticated\";\n }\n\n /** Surfaces a malformed predicate once, rather than silently never matching. */\n private warnOnce(predicate: Predicate) {\n const key = JSON.stringify(predicate);\n if (this.warnedFor === key) return;\n this.warnedFor = key;\n for (const problem of validatePredicate(predicate)) {\n console.warn(`[singlebase] <singlebase-authui-guard> predicate: ${problem}`);\n }\n }\n\n override render() {\n const active = this.activeState;\n\n if (this.slot) {\n // Short form: the whole guard is shown or hidden as one unit.\n const show = GUARD_STATES.includes(this.slot as GuardState) && this.slot === active;\n this.toggleAttribute(\"hidden\", !show);\n return html`<slot></slot>`;\n }\n\n this.toggleAttribute(\"hidden\", false);\n for (const child of Array.from(this.children)) {\n const childSlot = child.getAttribute(\"slot\");\n child.toggleAttribute(\"hidden\", childSlot !== active);\n }\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"singlebase-authui-guard\": SinglebaseAuthGuard;\n }\n}\n","import { css, html, nothing, type PropertyValues } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { getPath } from \"@singlebase/core\";\nimport { SinglebaseElementBase } from \"./base.js\";\nimport { initialsOf } from \"../utils/profile.js\";\n\n/** Where the avatar looks for its image when no path is given. */\nconst DEFAULT_AVATAR_PATH = \"profile_photo\";\n\n/**\n * Displays one value from the signed-in profile, as text or as an avatar.\n *\n * Hello <singlebase-authui-display path=\"first_name\" fallback=\"there\"></singlebase-authui-display>\n * <singlebase-authui-display avatar></singlebase-authui-display>\n *\n * Three rules shape the behaviour:\n *\n * - While auth state is still loading it renders nothing. Showing the\n * fallback first would mean every signed-in visitor watches \"Hello there\"\n * flip to \"Hello Ada\" on each page load.\n * - Values resolve against `user_profile` and nothing else. The element\n * deliberately cannot reach session or token data, which must never be\n * written into the DOM.\n * - Values are rendered as text, never as markup. Fields like first_name are\n * supplied by the user at signup, so they are untrusted by definition.\n */\n@customElement(\"singlebase-authui-display\")\nexport class SinglebaseAuthDisplay extends SinglebaseElementBase {\n static override styles = [\n ...SinglebaseElementBase.styles,\n css`\n /* Text sits in a sentence; an avatar is a box the host sizes. */\n :host {\n display: inline;\n }\n\n :host([avatar]) {\n display: inline-block;\n width: 42px;\n height: 42px;\n vertical-align: middle;\n }\n\n img,\n .initials {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: inherit;\n box-sizing: border-box;\n }\n\n img {\n object-fit: cover;\n }\n\n /* Matches the avatar in the account view. */\n .initials {\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--sb-surface-alt, #fafafa);\n border: 1px dashed var(--sb-border, #e4e6e9);\n font-family: var(--sb-mono, \"Geist Mono\", ui-monospace, monospace);\n font-size: 0.8em;\n color: var(--sb-muted-ink, #61666c);\n user-select: none;\n }\n `\n ];\n\n /**\n * Dot-notated path into the profile: \"first_name\", \"metadata.tier\". In\n * avatar mode it names the image field and defaults to \"profile_photo\".\n */\n @property() accessor path = \"\";\n\n /** Shown when signed out, or when the value is empty. Text mode only. */\n @property() accessor fallback = \"\";\n\n /** Render an image with an initials fallback instead of text. */\n @property({ type: Boolean, reflect: true }) accessor avatar = false;\n\n /**\n * Alternative text for the avatar image. Left empty the image is treated as\n * decorative, which is right when a name sits beside it — pass a value only\n * when the avatar is the sole identifier.\n */\n @property() accessor alt = \"\";\n\n /** Set when the image 404s, so a dead URL falls back to initials. */\n @state() private accessor imageFailed = false;\n\n override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n // A new source deserves a fresh attempt.\n if (changed.has(\"path\") || changed.has(\"avatar\")) this.imageFailed = false;\n }\n\n private get profile() {\n const state = this.auth.state;\n return state.status === \"authenticated\" ? state.user : null;\n }\n\n /** The resolved value as a string, or \"\" when there is nothing to show. */\n private get textValue(): string {\n const profile = this.profile;\n if (!profile || !this.path) return \"\";\n\n const value = getPath(profile, this.path);\n if (value === null || value === undefined || value === \"\") return \"\";\n if (Array.isArray(value)) return value.filter((v) => v != null).join(\", \");\n // An object would stringify to \"[object Object]\"; treat it as absent.\n if (typeof value === \"object\") return \"\";\n return String(value);\n }\n\n private get avatarSrc(): string {\n const profile = this.profile;\n if (!profile) return \"\";\n const value = getPath(profile, this.path || DEFAULT_AVATAR_PATH);\n return typeof value === \"string\" ? value : \"\";\n }\n\n protected override render() {\n // Nothing at all until the session has been read — see the class comment.\n if (this.auth.state.status === \"loading\") return nothing;\n\n if (this.avatar) return this.renderAvatar();\n\n const value = this.textValue;\n if (value) return html`<span part=\"text\">${value}</span>`;\n return this.fallback ? html`<span part=\"text\">${this.fallback}</span>` : nothing;\n }\n\n private renderAvatar() {\n const profile = this.profile;\n if (!profile) return nothing;\n\n const src = this.avatarSrc;\n if (src && !this.imageFailed) {\n return html`<img\n part=\"avatar-image\"\n src=${src}\n alt=${this.alt}\n @error=${() => (this.imageFailed = true)}\n />`;\n }\n\n return html`<span\n part=\"avatar-initials\"\n class=\"initials\"\n aria-hidden=${this.alt ? \"false\" : \"true\"}\n >${initialsOf(profile)}</span\n >`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"singlebase-authui-display\": SinglebaseAuthDisplay;\n }\n}\n","/**\n * Entry point for the self-contained `<script type=\"module\">` build.\n *\n * On top of registering every element it does two things the npm entry point\n * deliberately does not:\n *\n * 1. exposes the SDK on `window.Singlebase`, so a page with no bundler can\n * still reach `Singlebase.SinglebaseClient(...)`;\n * 2. reads configuration off its own <script> tag, so the common case —\n * \"drop in a tag, show a sign-in box\" — needs no JavaScript at all.\n *\n * Only the `wk_`-prefixed web key ever belongs in these attributes. They are\n * public page source; a root, server or agent key must never appear here.\n */\nimport { SinglebaseClient, type SinglebaseClientOptions } from \"@singlebase/singlebase-sdk\";\n\nexport * from \"./index.js\";\nexport { SinglebaseClient, SinglebaseAuth } from \"@singlebase/singlebase-sdk\";\n\nfunction autoConfig(): SinglebaseClientOptions | null {\n const script =\n (document.currentScript as HTMLScriptElement | null) ??\n document.querySelector<HTMLScriptElement>(\n \"script[data-singlebase-api-key], script[data-singlebase-url-access-key], script[data-singlebase-base-url]\"\n );\n if (!script) return null;\n\n const { baseUrl, singlebaseUrlAccessKey, singlebaseApiKey, singlebaseBaseUrl } =\n script.dataset as Record<string, string | undefined>;\n\n // Every connection option is optional, so a tag configures a client when it\n // carries at least one of them. A bare tag is a plain library load: creating\n // a client then would claim the page default before the app's own call.\n const base = singlebaseBaseUrl ?? baseUrl;\n if (!singlebaseApiKey && !singlebaseUrlAccessKey && !base) return null;\n\n // Only what the tag actually sets: the SDK supplies the default base URL.\n const config: SinglebaseClientOptions = {};\n if (base) config.baseUrl = base;\n if (singlebaseUrlAccessKey) config.urlAccessKey = singlebaseUrlAccessKey;\n if (singlebaseApiKey) config.apiKey = singlebaseApiKey;\n return config;\n}\n\nif (typeof document !== \"undefined\") {\n const config = autoConfig();\n if (config) {\n try {\n // Constructing the client registers it as the page default, which is\n // what lets a bare <singlebase-authui> find a session.\n SinglebaseClient(config);\n } catch (error) {\n console.error(\"[singlebase] auto-configuration failed:\", error);\n }\n }\n\n const globalScope = globalThis as unknown as Record<string, unknown>;\n globalScope.Singlebase = {\n ...(globalScope.Singlebase as Record<string, unknown> | undefined),\n SinglebaseClient\n };\n}\n"],"names":["g","r","L","z","e","k","p","C","P","n","t","B","m","s","o","i","h","K","X$1","A","j","V","l","E","d","I","R","M","b","w","S","T","D","H","G","te","re","ne","se","x","v","J","W","u","q","U","$","oe","ie","y","F","Y","ae","O","Q","a","N","_","Z","ce","le","fe","V$1","f","ee","X","n$3","c","y$1","_a","_b","AuthController","host","__publicField","client","state","TOKEN_DEFAULTS","tokenDefaults","css","unsafeCSS","sharedStyles","defaultMessages","resolveMessages","overrides","SinglebaseElementBase","LitElement","__privateAdd","_client","_messages","_theme","_density","_fieldStyle","__privateGet","__privateSet","getDefaultClient","shared","config","key","AUTHUI_PROP_KEYS","value","authUIAttributeFor","name","changed","__decorateClass","property","resolveRedirectTarget","candidate","currentHref","onRefused","here","target","SettingsController","override","pending","settings","error","BRIDGED_EVENTS","SPEC_ALIASES","callbackPropFor","event","__","EventBridge","detail","callback","init","alias","off","SinglebaseFormBase","_phase","_formError","_noticeMessage","task","SinglebaseAuthError","hint","mapErrorToHint","html","fullNameOf","user","initialsOf","word","email","defaultUploadMessages","resolveUploadMessages","fill","template","values","match","UNITS","parseSize","amount","formatSize","bytes","fileExtension","filename","dot","extensionOf","acceptsFile","accept","type","rules","rule","lowerName","lowerType","acceptSummary","parts","slash","fileKey","file","renameKeepingExtension","original","typed","clean","extension","UNKNOWN","PDF_HEAD","PDF_TAIL","MAX_STREAMS","MAX_INFLATED","OOXML","inspectFile","inspectPdf","inspectOoxml","isInspectable","head","bytesOf","tail","text","latin1","encrypted","pages","pageCountIn","pageCountInStreams","max","direct","inflated","streams","start","end","out","inflate","magic","isCompoundFile","app","readZipEntry","tag","byte","wanted","tailSize","eocd","size","offset","cd","decoder","method","compressed","nameLength","extraLength","commentLength","localOffset","local","data","blob","format","stream","jsonAttr","parsed","flagAttr","CONFIG_KEYS","SinglebaseUploader","_view","_dropzone","_allowRename","_autoUpload","_branding","_logoUrl","_logoText","_heading","_description","_maxFiles","_maxSize","_minSize","_accept","_rules","_bucket","_metadata","_options","_publicRead","_redirectUrl","_onComplete","_onError","_items","_notice","_busy","_dragging","_editing","active","item","sum","source","releasePreview","rowOf","inputs","input","result","progress","row","entry","completed","failed","errorMessage","list","finished","limit","next","before","staged","problem","maxBytes","minBytes","previewFor","facts","message","reason","dropped","kinds","nothing","editable","showDrop","customElement","PHOTO_OPTIONS","PHOTO_ACCEPT","SinglebaseAccountScreen","_settings","_nonceStorageKey","_editMode","_toast","_photoBusy","_photoFailed","_profileSaved","_passSaved","_profileError","_newPassError","_deleteStage","_confirmText","_dFirst","_dLast","_dPhone","_dEmail","_emailStep","_dNewEmail","_emailCode","_emailError","_emailSaved","_curPass","_newPass","_confirmPass","createFilesUploadApi","reading","locked","providerId","nonce","oauth_redirect_url","marks","id","photo","summary","label","providers","SinglebaseAuthButtons","_type","_intent","_provider","_providerName","_embedded","intent","linking","idToken","refreshToken","primary","rest","GUEST_SCREENS","PROTECTED_SCREENS","ALL_SCREENS","isGuestScreen","isProtectedScreen","isScreen","SinglebaseAuthScreen","_initialScreen","_screen","_noAccountView","_authEnabled","_allowEmailSignin","_allowEmailSignup","_allowEmailOtp","_allowOauth","_allowAccountCreation","_layout","_oauthPlacement","_stepped","_brandLine","_brandFoot","_signInTitle","_tosUrl","_privacyUrl","_inviteEmail","_inviteOrg","_inviteCode","_step","_method","_email","_password","_name","_firstName","_lastName","_phone","_code","_verifyNext","_loading","_banner","_passError","_attempts","_needsMfaCode","_callbackDone","offGoto","screen","offSignin","mfa","raw","authenticated","requested","params","url","accessCode","denied","content","patch","purpose","code","first","resolveScreen","index","entered","digit","digits","landed","total","showForgot","small","stepped","showName","showEmail","showPassword","showOtpLink","hasEmail","hasOauth","showHeads","emailOpen","oauthOpen","emailTitle","emailMeta","open","title","meta","body","onToggle","emailItem","oauthItem","ifDefined","showPrimary","showBack","showFoot","showStepBar","disabled","tos","privacy","noMethods","blocked","GUARD_STATES","SinglebaseAuthGuard","_slot","_predicate","_onMismatch","status","matchesPredicate","predicate","validatePredicate","show","child","childSlot","DEFAULT_AVATAR_PATH","SinglebaseAuthDisplay","_path","_fallback","_avatar","_alt","_imageFailed","profile","getPath","src","autoConfig","script","baseUrl","singlebaseUrlAccessKey","singlebaseApiKey","singlebaseBaseUrl","base","SinglebaseClient","globalScope"],"mappings":"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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GC1C3CI,KAAeF;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA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A;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AA+QF,CAAA;AAKSyB,EAAA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","x_google_ignoreList":[2,3,4,5,6,7,8,9]}