@getauthui/core 0.1.4 → 0.1.6
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.
- package/README.md +2 -2
- package/dist/{authui-user-button-CZBp3mFt.js → authui-user-button-CLVW46Q6.js} +630 -499
- package/dist/authui.cdn.js +107 -67
- package/dist/authui.cdn.mjs +1072 -941
- package/dist/authui.js +38 -35
- package/dist/components/authui-account.d.ts +4 -0
- package/dist/components/authui-account.d.ts.map +1 -1
- package/dist/components/authui-modal.d.ts +5 -0
- package/dist/components/authui-modal.d.ts.map +1 -1
- package/dist/components/authui-sign-in.d.ts.map +1 -1
- package/dist/components/authui-user-button.d.ts +4 -0
- package/dist/components/authui-user-button.d.ts.map +1 -1
- package/dist/i18n.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/last-method.d.ts +6 -0
- package/dist/last-method.d.ts.map +1 -1
- package/dist/react.js +1 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { state as
|
|
2
|
-
import { css as
|
|
3
|
-
import { Client as
|
|
4
|
-
const
|
|
1
|
+
import { state as d, property as g, customElement as R, query as st } from "lit/decorators.js";
|
|
2
|
+
import { css as O, LitElement as rt, nothing as o, html as r, svg as h } from "lit";
|
|
3
|
+
import { Client as lt, Account as ct, Teams as xt, ID as H, Avatars as kt } from "appwrite";
|
|
4
|
+
const Ct = {
|
|
5
5
|
signIn: "Sign in",
|
|
6
6
|
dialogSignIn: "Sign in",
|
|
7
7
|
signUp: "Sign up",
|
|
@@ -43,6 +43,7 @@ const wt = {
|
|
|
43
43
|
resetPassword: "Reset password",
|
|
44
44
|
resetLinkSent: "If an account exists for {email}, a reset link is on its way.",
|
|
45
45
|
passwordUpdated: "Your password was updated. You can sign in now.",
|
|
46
|
+
passwordChanged: "Your password was updated.",
|
|
46
47
|
sendResetLink: "Send reset link",
|
|
47
48
|
requestNewLink: "Request a new link",
|
|
48
49
|
agreeTo: "By continuing you agree to our",
|
|
@@ -169,13 +170,13 @@ const wt = {
|
|
|
169
170
|
guestAccountDescription: "Add an email and password to keep your data.",
|
|
170
171
|
preview: "Preview"
|
|
171
172
|
};
|
|
172
|
-
function
|
|
173
|
+
function St(e, t = {}) {
|
|
173
174
|
return e.replace(
|
|
174
175
|
/\{(\w+)\}/g,
|
|
175
176
|
(i, s) => s in t ? String(t[s]) : `{${s}}`
|
|
176
177
|
);
|
|
177
178
|
}
|
|
178
|
-
const
|
|
179
|
+
const At = {
|
|
179
180
|
amazon: "Amazon",
|
|
180
181
|
apple: "Apple",
|
|
181
182
|
appwrite: "Appwrite",
|
|
@@ -227,9 +228,9 @@ const xt = {
|
|
|
227
228
|
zoom: "Zoom"
|
|
228
229
|
};
|
|
229
230
|
function q(e) {
|
|
230
|
-
return
|
|
231
|
+
return At[e] ?? e.charAt(0).toUpperCase() + e.slice(1);
|
|
231
232
|
}
|
|
232
|
-
const
|
|
233
|
+
const j = (e, t, i = 401) => Object.assign(new Error(t), { type: e, code: i }), A = () => (/* @__PURE__ */ new Date()).toISOString(), U = (e) => new Date(Date.now() - e * 6e4).toISOString(), W = [
|
|
233
234
|
"amber",
|
|
234
235
|
"brave",
|
|
235
236
|
"calm",
|
|
@@ -242,13 +243,13 @@ const H = (e, t, i = 401) => Object.assign(new Error(t), { type: e, code: i }),
|
|
|
242
243
|
"juniper",
|
|
243
244
|
"kite",
|
|
244
245
|
"lumen"
|
|
245
|
-
],
|
|
246
|
+
], dt = () => `${W[Math.floor(Math.random() * W.length)]}-${W[Math.floor(Math.random() * W.length)]}`, _ = () => Math.random().toString(36).slice(2, 12), ht = () => Array.from({ length: 2 }, () => Math.random().toString(36).slice(2, 7)).join("-"), Pt = {
|
|
246
247
|
name: "Ada Lovelace",
|
|
247
248
|
email: "ada@example.com",
|
|
248
249
|
phone: "+15550100"
|
|
249
250
|
};
|
|
250
|
-
class
|
|
251
|
-
constructor(t =
|
|
251
|
+
class It {
|
|
252
|
+
constructor(t = Pt) {
|
|
252
253
|
this.seed = t, this.user = null, this.mfaPending = !1, this.mfaEnabled = !1, this.totpEnrolled = !1, this.recoveryCodes = [], this.lastChallenge = 0, this.sessions = [], this.identities = [], this.logs = [], this.tokens = /* @__PURE__ */ new Map(), this.pendingAuthenticator = null;
|
|
253
254
|
}
|
|
254
255
|
// ───────────────────────── helpers ─────────────────────────
|
|
@@ -257,7 +258,7 @@ class Ct {
|
|
|
257
258
|
return this.user = {
|
|
258
259
|
$id: "preview-user",
|
|
259
260
|
$createdAt: U(1440 * 30),
|
|
260
|
-
$updatedAt:
|
|
261
|
+
$updatedAt: A(),
|
|
261
262
|
name: i ? "" : t.name ?? this.seed.name,
|
|
262
263
|
registration: U(1440 * 30),
|
|
263
264
|
status: !0,
|
|
@@ -270,14 +271,14 @@ class Ct {
|
|
|
270
271
|
mfa: this.mfaEnabled,
|
|
271
272
|
prefs: {},
|
|
272
273
|
targets: [],
|
|
273
|
-
accessedAt:
|
|
274
|
+
accessedAt: A()
|
|
274
275
|
}, this.seedActivity(i ? "anonymous" : "email"), this.user;
|
|
275
276
|
}
|
|
276
277
|
seedActivity(t) {
|
|
277
278
|
if (this.sessions.length > 0) return;
|
|
278
279
|
const i = {
|
|
279
|
-
$createdAt:
|
|
280
|
-
$updatedAt:
|
|
280
|
+
$createdAt: A(),
|
|
281
|
+
$updatedAt: A(),
|
|
281
282
|
userId: "preview-user",
|
|
282
283
|
expire: new Date(Date.now() + 365 * 864e5).toISOString(),
|
|
283
284
|
providerUid: "",
|
|
@@ -312,7 +313,7 @@ class Ct {
|
|
|
312
313
|
},
|
|
313
314
|
{
|
|
314
315
|
...i,
|
|
315
|
-
$id:
|
|
316
|
+
$id: _(),
|
|
316
317
|
$createdAt: U(300),
|
|
317
318
|
provider: t,
|
|
318
319
|
ip: "198.51.100.7",
|
|
@@ -329,7 +330,7 @@ class Ct {
|
|
|
329
330
|
},
|
|
330
331
|
{
|
|
331
332
|
...i,
|
|
332
|
-
$id:
|
|
333
|
+
$id: _(),
|
|
333
334
|
$createdAt: U(1440 * 3),
|
|
334
335
|
provider: "oauth2",
|
|
335
336
|
ip: "192.0.2.90",
|
|
@@ -358,7 +359,7 @@ class Ct {
|
|
|
358
359
|
], this.logs = [
|
|
359
360
|
{
|
|
360
361
|
event: "session.create",
|
|
361
|
-
time:
|
|
362
|
+
time: A(),
|
|
362
363
|
clientName: "Chrome",
|
|
363
364
|
osName: "macOS",
|
|
364
365
|
countryName: "Germany",
|
|
@@ -384,9 +385,9 @@ class Ct {
|
|
|
384
385
|
}
|
|
385
386
|
requireUser() {
|
|
386
387
|
if (!this.user)
|
|
387
|
-
throw
|
|
388
|
+
throw j("general_unauthorized_scope", "User (role: guests) missing scope (account)");
|
|
388
389
|
if (this.mfaPending)
|
|
389
|
-
throw
|
|
390
|
+
throw j(
|
|
390
391
|
"user_more_factors_required",
|
|
391
392
|
"More factors are required to complete the sign in process."
|
|
392
393
|
);
|
|
@@ -394,7 +395,7 @@ class Ct {
|
|
|
394
395
|
}
|
|
395
396
|
requireRecentChallenge() {
|
|
396
397
|
if (Date.now() - this.lastChallenge > 30 * 6e4)
|
|
397
|
-
throw
|
|
398
|
+
throw j(
|
|
398
399
|
"user_challenge_required",
|
|
399
400
|
"A recently successful challenge is required to complete this action."
|
|
400
401
|
);
|
|
@@ -430,26 +431,26 @@ class Ct {
|
|
|
430
431
|
}
|
|
431
432
|
async createMagicURLToken(t, i) {
|
|
432
433
|
return this.tokens.set(t, { email: i }), this.delay({
|
|
433
|
-
$id:
|
|
434
|
-
$createdAt:
|
|
434
|
+
$id: _(),
|
|
435
|
+
$createdAt: A(),
|
|
435
436
|
userId: t,
|
|
436
437
|
secret: "",
|
|
437
438
|
expire: "",
|
|
438
|
-
phrase:
|
|
439
|
+
phrase: dt()
|
|
439
440
|
});
|
|
440
441
|
}
|
|
441
442
|
async createEmailToken(t, i) {
|
|
442
443
|
return this.tokens.set(t, { email: i }), this.delay({
|
|
443
|
-
$id:
|
|
444
|
-
$createdAt:
|
|
444
|
+
$id: _(),
|
|
445
|
+
$createdAt: A(),
|
|
445
446
|
userId: t,
|
|
446
447
|
secret: "",
|
|
447
448
|
expire: "",
|
|
448
|
-
phrase:
|
|
449
|
+
phrase: dt()
|
|
449
450
|
});
|
|
450
451
|
}
|
|
451
452
|
async createPhoneToken(t, i) {
|
|
452
|
-
return this.tokens.set(t, { phone: i }), this.delay({ $id:
|
|
453
|
+
return this.tokens.set(t, { phone: i }), this.delay({ $id: _(), $createdAt: A(), userId: t, secret: "", expire: "", phrase: "" });
|
|
453
454
|
}
|
|
454
455
|
async createSession(t) {
|
|
455
456
|
return this.delay(() => {
|
|
@@ -490,7 +491,7 @@ class Ct {
|
|
|
490
491
|
async updateEmail(t) {
|
|
491
492
|
return this.delay(() => {
|
|
492
493
|
const i = this.requireUser();
|
|
493
|
-
return i.email = t, i.emailVerification = !1, i.passwordUpdate =
|
|
494
|
+
return i.email = t, i.emailVerification = !1, i.passwordUpdate = A(), i;
|
|
494
495
|
});
|
|
495
496
|
}
|
|
496
497
|
async updatePhone(t) {
|
|
@@ -502,7 +503,7 @@ class Ct {
|
|
|
502
503
|
async updatePassword() {
|
|
503
504
|
return this.delay(() => {
|
|
504
505
|
const t = this.requireUser();
|
|
505
|
-
return t.passwordUpdate =
|
|
506
|
+
return t.passwordUpdate = A(), t;
|
|
506
507
|
});
|
|
507
508
|
}
|
|
508
509
|
async updateStatus() {
|
|
@@ -541,7 +542,7 @@ class Ct {
|
|
|
541
542
|
});
|
|
542
543
|
}
|
|
543
544
|
async createMFAChallenge() {
|
|
544
|
-
return this.delay({ $id:
|
|
545
|
+
return this.delay({ $id: _(), $createdAt: A(), userId: "preview-user", expire: "" });
|
|
545
546
|
}
|
|
546
547
|
async updateMFAChallenge() {
|
|
547
548
|
return this.delay(() => (this.mfaPending = !1, this.lastChallenge = Date.now(), this.sessions[0]));
|
|
@@ -570,32 +571,32 @@ class Ct {
|
|
|
570
571
|
async createMFARecoveryCodes() {
|
|
571
572
|
return this.delay(() => {
|
|
572
573
|
if (this.recoveryCodes.length > 0)
|
|
573
|
-
throw
|
|
574
|
-
return this.recoveryCodes = Array.from({ length: 6 },
|
|
574
|
+
throw j("user_recovery_codes_already_exists", "Recovery codes already generated.", 409);
|
|
575
|
+
return this.recoveryCodes = Array.from({ length: 6 }, ht), { recoveryCodes: this.recoveryCodes };
|
|
575
576
|
});
|
|
576
577
|
}
|
|
577
578
|
async getMFARecoveryCodes() {
|
|
578
579
|
return this.delay(() => (this.requireRecentChallenge(), { recoveryCodes: this.recoveryCodes }));
|
|
579
580
|
}
|
|
580
581
|
async updateMFARecoveryCodes() {
|
|
581
|
-
return this.delay(() => (this.requireRecentChallenge(), this.recoveryCodes = Array.from({ length: 6 },
|
|
582
|
+
return this.delay(() => (this.requireRecentChallenge(), this.recoveryCodes = Array.from({ length: 6 }, ht), { recoveryCodes: this.recoveryCodes }));
|
|
582
583
|
}
|
|
583
584
|
/** Forget everything, as a sign out would. */
|
|
584
585
|
reset() {
|
|
585
586
|
this.user = null, this.mfaPending = !1, this.sessions = [], this.identities = [], this.logs = [], this.tokens.clear();
|
|
586
587
|
}
|
|
587
588
|
}
|
|
588
|
-
function
|
|
589
|
+
function Et(e) {
|
|
589
590
|
let t = 2166136261;
|
|
590
591
|
const i = () => (t ^= t << 13, t ^= t >>> 17, t ^= t << 5, (t >>> 0) / 4294967296);
|
|
591
|
-
for (const
|
|
592
|
+
for (const $ of e) t = (t ^ $.charCodeAt(0)) * 16777619;
|
|
592
593
|
const s = 25;
|
|
593
594
|
let a = "";
|
|
594
|
-
const
|
|
595
|
-
for (let
|
|
596
|
-
for (let
|
|
597
|
-
!(
|
|
598
|
-
const u = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${s} ${s}" shape-rendering="crispEdges"><rect width="${s}" height="${s}" fill="#fff"/><g fill="#000">${
|
|
595
|
+
const c = ($, x) => `<rect x="${$}" y="${x}" width="7" height="7"/><rect x="${$ + 1}" y="${x + 1}" width="5" height="5" fill="#fff"/><rect x="${$ + 2}" y="${x + 2}" width="3" height="3"/>`;
|
|
596
|
+
for (let $ = 0; $ < s; $++)
|
|
597
|
+
for (let x = 0; x < s; x++)
|
|
598
|
+
!(x < 8 && $ < 8 || x >= s - 8 && $ < 8 || x < 8 && $ >= s - 8) && i() < 0.45 && (a += `<rect x="${x}" y="${$}" width="1" height="1"/>`);
|
|
599
|
+
const u = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${s} ${s}" shape-rendering="crispEdges"><rect width="${s}" height="${s}" fill="#fff"/><g fill="#000">${c(0, 0)}${c(s - 7, 0)}${c(0, s - 7)}${a}</g></svg>`;
|
|
599
600
|
return `data:image/svg+xml;utf8,${encodeURIComponent(u)}`;
|
|
600
601
|
}
|
|
601
602
|
const f = {
|
|
@@ -633,7 +634,7 @@ const f = {
|
|
|
633
634
|
targetAlreadyExists: "user_target_already_exists",
|
|
634
635
|
argumentInvalid: "general_argument_invalid"
|
|
635
636
|
};
|
|
636
|
-
function
|
|
637
|
+
function z(e) {
|
|
637
638
|
if (e && typeof e == "object") {
|
|
638
639
|
const t = e;
|
|
639
640
|
let i = typeof t.message == "string" ? t.message : "Unknown error";
|
|
@@ -646,10 +647,10 @@ function R(e) {
|
|
|
646
647
|
return { message: String(e), type: "", code: 0 };
|
|
647
648
|
}
|
|
648
649
|
function N(e, t) {
|
|
649
|
-
return
|
|
650
|
+
return z(e).type === t;
|
|
650
651
|
}
|
|
651
652
|
function K(e, t, i = "link") {
|
|
652
|
-
const s =
|
|
653
|
+
const s = z(e);
|
|
653
654
|
switch (s.type) {
|
|
654
655
|
case f.invalidCredentials:
|
|
655
656
|
return i === "password" ? t.errorCurrentPassword : t.errorInvalidCredentials;
|
|
@@ -691,23 +692,73 @@ function K(e, t, i = "link") {
|
|
|
691
692
|
}
|
|
692
693
|
return s.type === f.projectNotFound || s.type === f.unknownOrigin ? t.errorConfig : s.type === f.routeNotFound ? t.errorConfigEndpoint : s.code === 0 && /fetch|network/i.test(s.message) ? t.errorNetwork : /Invalid `\w+` param/i.test(s.message) ? t.errorGeneric : s.message ? s.message || t.errorGeneric : s.code === 404 || s.type === f.routeNotFound ? t.errorConfigEndpoint : t.errorGeneric;
|
|
693
694
|
}
|
|
694
|
-
function
|
|
695
|
-
const t =
|
|
695
|
+
function Ut(e) {
|
|
696
|
+
const t = z(e);
|
|
696
697
|
return !!(t.type === f.projectNotFound || t.type === f.unknownOrigin || t.type === f.routeNotFound || !t.message && t.code === 404 || t.code === 0 && /fetch|network|load failed|failed to fetch/i.test(t.message));
|
|
697
698
|
}
|
|
698
|
-
const
|
|
699
|
-
function
|
|
699
|
+
const J = (e) => `authui:active-team:${e}`;
|
|
700
|
+
function ut(e) {
|
|
700
701
|
if (typeof localStorage > "u" || !e) return null;
|
|
701
702
|
try {
|
|
702
|
-
return localStorage.getItem(
|
|
703
|
+
return localStorage.getItem(J(e));
|
|
703
704
|
} catch {
|
|
704
705
|
return null;
|
|
705
706
|
}
|
|
706
707
|
}
|
|
707
|
-
function
|
|
708
|
+
function Mt(e, t) {
|
|
708
709
|
if (!(typeof localStorage > "u" || !e))
|
|
709
710
|
try {
|
|
710
|
-
t ? localStorage.setItem(
|
|
711
|
+
t ? localStorage.setItem(J(e), t) : localStorage.removeItem(J(e));
|
|
712
|
+
} catch {
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
const at = "authui:last-method";
|
|
716
|
+
function V(e) {
|
|
717
|
+
if (!(typeof localStorage > "u")) {
|
|
718
|
+
if (!e || e === "mfa" || e === "sign-up")
|
|
719
|
+
if (e === "sign-up") e = "email-password";
|
|
720
|
+
else return;
|
|
721
|
+
try {
|
|
722
|
+
localStorage.setItem(at, e);
|
|
723
|
+
} catch {
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
function D() {
|
|
728
|
+
if (typeof localStorage > "u") return null;
|
|
729
|
+
try {
|
|
730
|
+
return localStorage.getItem(at);
|
|
731
|
+
} catch {
|
|
732
|
+
return null;
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
function ne() {
|
|
736
|
+
if (!(typeof localStorage > "u"))
|
|
737
|
+
try {
|
|
738
|
+
localStorage.removeItem(at);
|
|
739
|
+
} catch {
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
const G = "authui:pending-oauth";
|
|
743
|
+
function Ot(e) {
|
|
744
|
+
if (!(typeof sessionStorage > "u"))
|
|
745
|
+
try {
|
|
746
|
+
sessionStorage.setItem(G, e);
|
|
747
|
+
} catch {
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
function wt() {
|
|
751
|
+
if (!(typeof sessionStorage > "u"))
|
|
752
|
+
try {
|
|
753
|
+
const e = sessionStorage.getItem(G);
|
|
754
|
+
sessionStorage.removeItem(G), e && V(`oauth:${e}`);
|
|
755
|
+
} catch {
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
function pt() {
|
|
759
|
+
if (!(typeof sessionStorage > "u"))
|
|
760
|
+
try {
|
|
761
|
+
sessionStorage.removeItem(G);
|
|
711
762
|
} catch {
|
|
712
763
|
}
|
|
713
764
|
}
|
|
@@ -721,7 +772,7 @@ function S(e, t, i) {
|
|
|
721
772
|
new Error(`Appwrite SDK is missing ${t[0]}(). Update the appwrite package.`)
|
|
722
773
|
);
|
|
723
774
|
}
|
|
724
|
-
const
|
|
775
|
+
const tt = "authui", mt = ["userId", "secret", "expire", "project", "error", tt], ft = () => ({
|
|
725
776
|
status: "loading",
|
|
726
777
|
user: null,
|
|
727
778
|
mfaFactors: null,
|
|
@@ -729,9 +780,9 @@ const J = "authui", dt = ["userId", "secret", "expire", "project", "error", J],
|
|
|
729
780
|
configured: !1,
|
|
730
781
|
configError: null
|
|
731
782
|
});
|
|
732
|
-
class
|
|
783
|
+
class Ft {
|
|
733
784
|
constructor() {
|
|
734
|
-
this.client = null, this.account = null, this.config = null, this.state =
|
|
785
|
+
this.client = null, this.account = null, this.config = null, this.state = ft(), this.listeners = /* @__PURE__ */ new Map(), this.refreshPromise = null, this.preview = null, this.teams = null, this.activeTeamId = null;
|
|
735
786
|
}
|
|
736
787
|
// ───────────────────────────── configuration ─────────────────────────────
|
|
737
788
|
/** Configure the Appwrite client. Safe to call more than once; the last call wins. */
|
|
@@ -739,7 +790,7 @@ class Ut {
|
|
|
739
790
|
const i = t.endpoint.trim().replace(/\/+$/, "");
|
|
740
791
|
i && !i.endsWith("/v1") && console.warn(
|
|
741
792
|
`[authui] endpoint should end with /v1 (got "${t.endpoint}"). Without it Appwrite returns HTML 404 pages.`
|
|
742
|
-
), this.config = t, this.client = new
|
|
793
|
+
), this.config = t, this.client = new lt().setEndpoint(t.endpoint).setProject(t.project), this.preview = t.preview ? new It() : null, this.account = this.preview ? this.preview : new ct(this.client), this.teams = null, this.activeTeamId = ut(t.project), this.setState({ configured: !0, status: "loading", configError: null }), this.preview ? this.refresh() : typeof window < "u" && this.handleRedirect().then(() => this.refresh());
|
|
743
794
|
}
|
|
744
795
|
/**
|
|
745
796
|
* Called by <authui-config> when it is on the page but missing endpoint or project.
|
|
@@ -785,7 +836,7 @@ class Ut {
|
|
|
785
836
|
/** List teams the signed-in user belongs to. Empty in preview or when signed out. */
|
|
786
837
|
async listTeams() {
|
|
787
838
|
if (this.preview || !this.client || this.state.status !== "signed-in") return [];
|
|
788
|
-
this.teams ??= new
|
|
839
|
+
this.teams ??= new xt(this.client);
|
|
789
840
|
try {
|
|
790
841
|
return (await this.teams.list()).teams ?? [];
|
|
791
842
|
} catch (t) {
|
|
@@ -795,7 +846,7 @@ class Ut {
|
|
|
795
846
|
getActiveTeamId() {
|
|
796
847
|
if (this.activeTeamId) return this.activeTeamId;
|
|
797
848
|
const t = this.config?.project;
|
|
798
|
-
return t ? (this.activeTeamId =
|
|
849
|
+
return t ? (this.activeTeamId = ut(t), this.activeTeamId) : null;
|
|
799
850
|
}
|
|
800
851
|
/**
|
|
801
852
|
* Remember the active team locally and emit `active-team`.
|
|
@@ -803,10 +854,10 @@ class Ut {
|
|
|
803
854
|
*/
|
|
804
855
|
setActiveTeam(t) {
|
|
805
856
|
const i = this.config?.project;
|
|
806
|
-
i &&
|
|
857
|
+
i && Mt(i, t?.$id ?? null), this.activeTeamId = t?.$id ?? null, this.emit("active-team", { teamId: this.activeTeamId, team: t });
|
|
807
858
|
}
|
|
808
859
|
getStrings() {
|
|
809
|
-
return { ...
|
|
860
|
+
return { ...Ct, ...this.config?.strings ?? {} };
|
|
810
861
|
}
|
|
811
862
|
getState() {
|
|
812
863
|
return { ...this.state };
|
|
@@ -832,7 +883,7 @@ class Ut {
|
|
|
832
883
|
this.state = { ...this.state, ...t }, this.emit("change", this.getState());
|
|
833
884
|
}
|
|
834
885
|
fail(t) {
|
|
835
|
-
const i =
|
|
886
|
+
const i = z(t);
|
|
836
887
|
throw this.emit("error", i), t;
|
|
837
888
|
}
|
|
838
889
|
acct() {
|
|
@@ -874,13 +925,13 @@ class Ut {
|
|
|
874
925
|
message: this.getStrings().errorUserBlocked
|
|
875
926
|
}
|
|
876
927
|
}), t && this.emit("signed-out", void 0);
|
|
877
|
-
else if (!t &&
|
|
928
|
+
else if (!t && Ut(i)) {
|
|
878
929
|
const a = K(i, this.getStrings()) || this.getStrings().errorConfig;
|
|
879
930
|
console.warn(
|
|
880
931
|
`[authui] ${a} (endpoint=${this.config?.endpoint ?? "?"}, project=${this.config?.project ?? "?"})`
|
|
881
932
|
);
|
|
882
|
-
const
|
|
883
|
-
this.emit("error", { message: a, type:
|
|
933
|
+
const c = z(i);
|
|
934
|
+
this.emit("error", { message: a, type: c.type, code: c.code }), this.setState({
|
|
884
935
|
status: "signed-out",
|
|
885
936
|
user: null,
|
|
886
937
|
mfaFactors: null,
|
|
@@ -924,7 +975,7 @@ class Ut {
|
|
|
924
975
|
localStorage.removeItem("cookieFallback");
|
|
925
976
|
} catch {
|
|
926
977
|
}
|
|
927
|
-
this.config && !this.preview && (this.client = new
|
|
978
|
+
this.config && !this.preview && (this.client = new lt().setEndpoint(this.config.endpoint).setProject(this.config.project), this.account = new ct(this.client));
|
|
928
979
|
}
|
|
929
980
|
// ─────────────────────────────── sign in ───────────────────────────────
|
|
930
981
|
async signInWithEmailPassword(t, i) {
|
|
@@ -937,7 +988,7 @@ class Ut {
|
|
|
937
988
|
}
|
|
938
989
|
async signUp(t, i, s) {
|
|
939
990
|
try {
|
|
940
|
-
await this.acct().create(
|
|
991
|
+
await this.acct().create(H.unique(), t.trim(), i, s?.trim() || void 0), await this.acct().createEmailPasswordSession(t.trim(), i);
|
|
941
992
|
} catch (a) {
|
|
942
993
|
this.fail(a);
|
|
943
994
|
}
|
|
@@ -980,7 +1031,7 @@ class Ut {
|
|
|
980
1031
|
async sendMagicUrl(t) {
|
|
981
1032
|
try {
|
|
982
1033
|
return await this.acct().createMagicURLToken(
|
|
983
|
-
|
|
1034
|
+
H.unique(),
|
|
984
1035
|
t.trim(),
|
|
985
1036
|
this.redirectUrl("magic-url"),
|
|
986
1037
|
this.config?.securityPhrase ?? !0
|
|
@@ -992,7 +1043,7 @@ class Ut {
|
|
|
992
1043
|
async sendEmailOtp(t) {
|
|
993
1044
|
try {
|
|
994
1045
|
return await this.acct().createEmailToken(
|
|
995
|
-
|
|
1046
|
+
H.unique(),
|
|
996
1047
|
t.trim(),
|
|
997
1048
|
this.config?.securityPhrase ?? !0
|
|
998
1049
|
);
|
|
@@ -1002,7 +1053,7 @@ class Ut {
|
|
|
1002
1053
|
}
|
|
1003
1054
|
async sendPhoneOtp(t) {
|
|
1004
1055
|
try {
|
|
1005
|
-
return await this.acct().createPhoneToken(
|
|
1056
|
+
return await this.acct().createPhoneToken(H.unique(), t.replace(/[\s()-]/g, ""));
|
|
1006
1057
|
} catch (i) {
|
|
1007
1058
|
return this.fail(i);
|
|
1008
1059
|
}
|
|
@@ -1276,8 +1327,8 @@ class Ut {
|
|
|
1276
1327
|
/** Build the URL Appwrite should send the user back to for a given flow. */
|
|
1277
1328
|
redirectUrl(t) {
|
|
1278
1329
|
const i = this.config?.redirectUrl ?? (typeof window < "u" ? window.location.origin + window.location.pathname : ""), s = new URL(i, typeof window < "u" ? window.location.href : void 0);
|
|
1279
|
-
for (const a of
|
|
1280
|
-
return s.searchParams.set(
|
|
1330
|
+
for (const a of mt) s.searchParams.delete(a);
|
|
1331
|
+
return s.searchParams.set(tt, t), s.toString();
|
|
1281
1332
|
}
|
|
1282
1333
|
setPending(t) {
|
|
1283
1334
|
this.setState({ pending: t });
|
|
@@ -1288,11 +1339,11 @@ class Ut {
|
|
|
1288
1339
|
*/
|
|
1289
1340
|
async handleRedirect() {
|
|
1290
1341
|
if (typeof window > "u") return !1;
|
|
1291
|
-
const t = new URLSearchParams(window.location.search), i = t.get(
|
|
1342
|
+
const t = new URLSearchParams(window.location.search), i = t.get(tt);
|
|
1292
1343
|
if (!i) return !1;
|
|
1293
1344
|
const s = t.get("userId") ?? "", a = t.get("secret") ?? "";
|
|
1294
1345
|
this.cleanUrl();
|
|
1295
|
-
const
|
|
1346
|
+
const c = () => {
|
|
1296
1347
|
this.setState({
|
|
1297
1348
|
pending: {
|
|
1298
1349
|
type: "notice",
|
|
@@ -1305,13 +1356,19 @@ class Ut {
|
|
|
1305
1356
|
switch (i) {
|
|
1306
1357
|
case "oauth":
|
|
1307
1358
|
case "magic-url":
|
|
1308
|
-
s && a ? await this.acct().createSession(s, a) :
|
|
1359
|
+
s && a ? (await this.acct().createSession(s, a), i === "oauth" && wt()) : (i === "oauth" && pt(), c());
|
|
1309
1360
|
break;
|
|
1310
1361
|
case "oauth-failed":
|
|
1311
|
-
this.setState({
|
|
1362
|
+
pt(), this.setState({
|
|
1363
|
+
pending: {
|
|
1364
|
+
type: "notice",
|
|
1365
|
+
tone: "error",
|
|
1366
|
+
message: this.getStrings().errorOAuth
|
|
1367
|
+
}
|
|
1368
|
+
});
|
|
1312
1369
|
break;
|
|
1313
1370
|
case "recovery":
|
|
1314
|
-
s && a ? this.setState({ pending: { type: "reset-password", userId: s, secret: a } }) :
|
|
1371
|
+
s && a ? this.setState({ pending: { type: "reset-password", userId: s, secret: a } }) : c();
|
|
1315
1372
|
break;
|
|
1316
1373
|
case "verify-email":
|
|
1317
1374
|
s && a ? (await S(
|
|
@@ -1324,27 +1381,27 @@ class Ut {
|
|
|
1324
1381
|
message: this.getStrings().emailVerified,
|
|
1325
1382
|
tone: "success"
|
|
1326
1383
|
}
|
|
1327
|
-
})) :
|
|
1384
|
+
})) : c();
|
|
1328
1385
|
break;
|
|
1329
1386
|
}
|
|
1330
1387
|
} catch (u) {
|
|
1331
|
-
const
|
|
1332
|
-
this.emit("error",
|
|
1388
|
+
const $ = z(u), x = K(u, this.getStrings(), "link");
|
|
1389
|
+
this.emit("error", $), this.setState({ pending: { type: "notice", message: x, tone: "error" } });
|
|
1333
1390
|
}
|
|
1334
1391
|
return !0;
|
|
1335
1392
|
}
|
|
1336
1393
|
cleanUrl() {
|
|
1337
1394
|
const t = new URL(window.location.href);
|
|
1338
|
-
for (const i of
|
|
1395
|
+
for (const i of mt) t.searchParams.delete(i);
|
|
1339
1396
|
window.history.replaceState(window.history.state, "", t.toString());
|
|
1340
1397
|
}
|
|
1341
1398
|
/** Test helper. */
|
|
1342
1399
|
reset() {
|
|
1343
|
-
this.client = null, this.account = null, this.teams = null, this.activeTeamId = null, this.preview = null, this.config = null, this.state =
|
|
1400
|
+
this.client = null, this.account = null, this.teams = null, this.activeTeamId = null, this.preview = null, this.config = null, this.state = ft(), this.listeners.clear();
|
|
1344
1401
|
}
|
|
1345
1402
|
}
|
|
1346
|
-
const n = new
|
|
1347
|
-
class
|
|
1403
|
+
const n = new Ft();
|
|
1404
|
+
class Tt {
|
|
1348
1405
|
constructor() {
|
|
1349
1406
|
this.listeners = /* @__PURE__ */ new Set(), this.observer = null, this.media = null, this.notify = () => {
|
|
1350
1407
|
const t = this.isDark("auto");
|
|
@@ -1372,14 +1429,14 @@ class It {
|
|
|
1372
1429
|
this.observer?.disconnect(), this.observer = null, this.media?.removeEventListener?.("change", this.notify), this.media = null;
|
|
1373
1430
|
}
|
|
1374
1431
|
}
|
|
1375
|
-
const
|
|
1432
|
+
const gt = new Tt(), vt = {
|
|
1376
1433
|
none: "0px",
|
|
1377
1434
|
sm: "0.25rem",
|
|
1378
1435
|
md: "0.625rem",
|
|
1379
1436
|
lg: "0.875rem",
|
|
1380
1437
|
xl: "1.125rem",
|
|
1381
1438
|
full: "1.5rem"
|
|
1382
|
-
},
|
|
1439
|
+
}, Rt = O`
|
|
1383
1440
|
:host {
|
|
1384
1441
|
/* Light theme (matches :root in the console) */
|
|
1385
1442
|
--authui-background: oklch(1 0 0);
|
|
@@ -1457,7 +1514,7 @@ const ut = new It(), pt = {
|
|
|
1457
1514
|
--authui-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.5), 0 4px 6px -4px rgba(0, 0, 0, 0.5);
|
|
1458
1515
|
color-scheme: dark;
|
|
1459
1516
|
}
|
|
1460
|
-
`,
|
|
1517
|
+
`, _t = O`
|
|
1461
1518
|
*,
|
|
1462
1519
|
*::before,
|
|
1463
1520
|
*::after {
|
|
@@ -2262,25 +2319,25 @@ const ut = new It(), pt = {
|
|
|
2262
2319
|
}
|
|
2263
2320
|
}
|
|
2264
2321
|
`;
|
|
2265
|
-
var
|
|
2266
|
-
for (var a = void 0,
|
|
2267
|
-
(u = e[
|
|
2268
|
-
return a &&
|
|
2269
|
-
},
|
|
2270
|
-
const
|
|
2322
|
+
var Dt = Object.defineProperty, zt = (e, t, i, s) => {
|
|
2323
|
+
for (var a = void 0, c = e.length - 1, u; c >= 0; c--)
|
|
2324
|
+
(u = e[c]) && (a = u(t, i, a) || a);
|
|
2325
|
+
return a && Dt(t, i, a), a;
|
|
2326
|
+
}, M;
|
|
2327
|
+
const $t = (M = class extends rt {
|
|
2271
2328
|
constructor() {
|
|
2272
2329
|
super(...arguments), this.auth = n.getState(), this.unsubscribeStore = null, this.unsubscribeTheme = null, this.stopKeys = (t) => t.stopPropagation();
|
|
2273
2330
|
}
|
|
2274
2331
|
connectedCallback() {
|
|
2275
2332
|
super.connectedCallback();
|
|
2276
|
-
for (const t of
|
|
2333
|
+
for (const t of M.KEY_EVENTS) this.addEventListener(t, this.stopKeys);
|
|
2277
2334
|
this.auth = n.getState(), this.unsubscribeStore = n.on("change", (t) => {
|
|
2278
2335
|
this.auth = t, this.applyBranding();
|
|
2279
|
-
}), this.unsubscribeTheme =
|
|
2336
|
+
}), this.unsubscribeTheme = gt.subscribe(() => this.applyBranding()), this.applyBranding();
|
|
2280
2337
|
}
|
|
2281
2338
|
disconnectedCallback() {
|
|
2282
2339
|
super.disconnectedCallback();
|
|
2283
|
-
for (const t of
|
|
2340
|
+
for (const t of M.KEY_EVENTS) this.removeEventListener(t, this.stopKeys);
|
|
2284
2341
|
this.unsubscribeStore?.(), this.unsubscribeTheme?.(), this.unsubscribeStore = null, this.unsubscribeTheme = null;
|
|
2285
2342
|
}
|
|
2286
2343
|
get strings() {
|
|
@@ -2288,7 +2345,7 @@ const vt = (I = class extends it {
|
|
|
2288
2345
|
}
|
|
2289
2346
|
/** Translate a string key with optional `{placeholders}`. */
|
|
2290
2347
|
t(t, i) {
|
|
2291
|
-
return
|
|
2348
|
+
return St(this.strings[t], i);
|
|
2292
2349
|
}
|
|
2293
2350
|
get config() {
|
|
2294
2351
|
return n.getConfig();
|
|
@@ -2298,27 +2355,27 @@ const vt = (I = class extends it {
|
|
|
2298
2355
|
}
|
|
2299
2356
|
/** Push theme and branding from config onto the host element. */
|
|
2300
2357
|
applyBranding() {
|
|
2301
|
-
const t = this.config?.branding, i =
|
|
2358
|
+
const t = this.config?.branding, i = gt.isDark(t?.theme ?? "auto");
|
|
2302
2359
|
this.setAttribute("data-theme", i ? "dark" : "light"), t?.primary && (this.style.setProperty("--authui-primary", t.primary), this.style.setProperty(
|
|
2303
2360
|
"--authui-primary-foreground",
|
|
2304
2361
|
t.primaryForeground ?? "#ffffff"
|
|
2305
|
-
)), t?.radius &&
|
|
2362
|
+
)), t?.radius && vt[t.radius] && this.style.setProperty("--authui-radius", vt[t.radius]);
|
|
2306
2363
|
}
|
|
2307
2364
|
/** Emit a composed custom event from this element. */
|
|
2308
2365
|
fire(t, i) {
|
|
2309
2366
|
this.dispatchEvent(new CustomEvent(t, { detail: i, bubbles: !0, composed: !0 }));
|
|
2310
2367
|
}
|
|
2311
|
-
},
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
],
|
|
2315
|
-
let
|
|
2316
|
-
var
|
|
2317
|
-
for (var a = s > 1 ? void 0 : s ?
|
|
2318
|
-
(u = e[
|
|
2319
|
-
return s && a &&
|
|
2368
|
+
}, M.styles = [Rt, _t], M.KEY_EVENTS = ["keydown", "keyup", "keypress"], M);
|
|
2369
|
+
zt([
|
|
2370
|
+
d()
|
|
2371
|
+
], $t.prototype, "auth");
|
|
2372
|
+
let E = $t;
|
|
2373
|
+
var Lt = Object.defineProperty, Vt = Object.getOwnPropertyDescriptor, y = (e, t, i, s) => {
|
|
2374
|
+
for (var a = s > 1 ? void 0 : s ? Vt(t, i) : t, c = e.length - 1, u; c >= 0; c--)
|
|
2375
|
+
(u = e[c]) && (a = (s ? u(t, i, a) : u(a)) || a);
|
|
2376
|
+
return s && a && Lt(t, i, a), a;
|
|
2320
2377
|
};
|
|
2321
|
-
let b = class extends
|
|
2378
|
+
let b = class extends rt {
|
|
2322
2379
|
constructor() {
|
|
2323
2380
|
super(...arguments), this.endpoint = "", this.project = "", this.redirectUrl = "", this.successUrl = "", this.methods = "email-password", this.signUp = "true", this.requireName = "true", this.mfa = "true", this.securityPhrase = "true", this.name = "", this.logo = "", this.theme = "auto", this.radius = "", this.primary = "", this.primaryForeground = "", this.termsUrl = "", this.privacyUrl = "", this.preview = "";
|
|
2324
2381
|
}
|
|
@@ -2368,7 +2425,7 @@ let b = class extends it {
|
|
|
2368
2425
|
};
|
|
2369
2426
|
}
|
|
2370
2427
|
};
|
|
2371
|
-
b.styles =
|
|
2428
|
+
b.styles = O`
|
|
2372
2429
|
:host {
|
|
2373
2430
|
display: none;
|
|
2374
2431
|
}
|
|
@@ -2428,38 +2485,38 @@ y([
|
|
|
2428
2485
|
g({ type: String })
|
|
2429
2486
|
], b.prototype, "preview", 2);
|
|
2430
2487
|
b = y([
|
|
2431
|
-
|
|
2488
|
+
R("authui-config")
|
|
2432
2489
|
], b);
|
|
2433
|
-
var
|
|
2434
|
-
for (var a = s > 1 ? void 0 : s ?
|
|
2435
|
-
(u = e[
|
|
2436
|
-
return s && a &&
|
|
2490
|
+
var qt = Object.defineProperty, Nt = Object.getOwnPropertyDescriptor, Z = (e, t, i, s) => {
|
|
2491
|
+
for (var a = s > 1 ? void 0 : s ? Nt(t, i) : t, c = e.length - 1, u; c >= 0; c--)
|
|
2492
|
+
(u = e[c]) && (a = (s ? u(t, i, a) : u(a)) || a);
|
|
2493
|
+
return s && a && qt(t, i, a), a;
|
|
2437
2494
|
};
|
|
2438
|
-
const
|
|
2439
|
-
let
|
|
2440
|
-
function
|
|
2441
|
-
if (!(typeof document > "u" ||
|
|
2442
|
-
|
|
2495
|
+
const bt = "authui-show:not([ready]){display:none}", oe = "authui-show:not([ready]){display:none}authui-button:not(:defined),authui-user-button:not(:defined){visibility:hidden}";
|
|
2496
|
+
let yt = !1;
|
|
2497
|
+
function Bt() {
|
|
2498
|
+
if (!(typeof document > "u" || yt)) {
|
|
2499
|
+
yt = !0;
|
|
2443
2500
|
try {
|
|
2444
2501
|
if (typeof CSSStyleSheet < "u" && "adoptedStyleSheets" in Document.prototype) {
|
|
2445
2502
|
const e = new CSSStyleSheet();
|
|
2446
|
-
e.replaceSync(
|
|
2503
|
+
e.replaceSync(bt), document.adoptedStyleSheets = [...document.adoptedStyleSheets, e];
|
|
2447
2504
|
return;
|
|
2448
2505
|
}
|
|
2449
2506
|
} catch {
|
|
2450
2507
|
}
|
|
2451
2508
|
if (!document.getElementById("authui-fouc")) {
|
|
2452
2509
|
const e = document.createElement("style");
|
|
2453
|
-
e.id = "authui-fouc", e.textContent =
|
|
2510
|
+
e.id = "authui-fouc", e.textContent = bt, document.head.appendChild(e);
|
|
2454
2511
|
}
|
|
2455
2512
|
}
|
|
2456
2513
|
}
|
|
2457
|
-
|
|
2458
|
-
const
|
|
2459
|
-
function
|
|
2460
|
-
return e ? e.split(/[\s,]+/).map((t) => t.trim()).filter((t) =>
|
|
2514
|
+
Bt();
|
|
2515
|
+
const Ht = ["loading", "signed-out", "signed-in", "mfa-required"];
|
|
2516
|
+
function Q(e) {
|
|
2517
|
+
return e ? e.split(/[\s,]+/).map((t) => t.trim()).filter((t) => Ht.includes(t)) : [];
|
|
2461
2518
|
}
|
|
2462
|
-
let B = class extends
|
|
2519
|
+
let B = class extends rt {
|
|
2463
2520
|
constructor() {
|
|
2464
2521
|
super(...arguments), this.when = "", this.unless = "", this.status = n.getState().status, this.unsubscribe = null;
|
|
2465
2522
|
}
|
|
@@ -2471,29 +2528,29 @@ let B = class extends it {
|
|
|
2471
2528
|
}
|
|
2472
2529
|
/** Whether the current status satisfies `when` and `unless`. */
|
|
2473
2530
|
get visible() {
|
|
2474
|
-
const e =
|
|
2531
|
+
const e = Q(this.when), t = Q(this.unless);
|
|
2475
2532
|
return !(this.status === "loading" && !e.includes("loading") || e.length > 0 && !e.includes(this.status) || t.includes(this.status));
|
|
2476
2533
|
}
|
|
2477
2534
|
updated() {
|
|
2478
|
-
(this.status !== "loading" ||
|
|
2535
|
+
(this.status !== "loading" || Q(this.when).includes("loading")) && (this.setAttribute("ready", ""), this.style.display = "contents");
|
|
2479
2536
|
}
|
|
2480
2537
|
render() {
|
|
2481
2538
|
return this.visible ? r`<slot></slot>` : o;
|
|
2482
2539
|
}
|
|
2483
2540
|
};
|
|
2484
|
-
|
|
2541
|
+
Z([
|
|
2485
2542
|
g({ type: String })
|
|
2486
2543
|
], B.prototype, "when", 2);
|
|
2487
|
-
|
|
2544
|
+
Z([
|
|
2488
2545
|
g({ type: String })
|
|
2489
2546
|
], B.prototype, "unless", 2);
|
|
2490
|
-
|
|
2491
|
-
|
|
2547
|
+
Z([
|
|
2548
|
+
d()
|
|
2492
2549
|
], B.prototype, "status", 2);
|
|
2493
|
-
B =
|
|
2494
|
-
|
|
2550
|
+
B = Z([
|
|
2551
|
+
R("authui-show")
|
|
2495
2552
|
], B);
|
|
2496
|
-
const
|
|
2553
|
+
const jt = O`
|
|
2497
2554
|
:host {
|
|
2498
2555
|
display: block;
|
|
2499
2556
|
width: 100%;
|
|
@@ -2558,160 +2615,160 @@ const Vt = F`
|
|
|
2558
2615
|
aria-hidden="true"
|
|
2559
2616
|
>
|
|
2560
2617
|
${e}
|
|
2561
|
-
</svg>`,
|
|
2618
|
+
</svg>`, l = {
|
|
2562
2619
|
mail: v(
|
|
2563
|
-
|
|
2620
|
+
h`<rect width="20" height="16" x="2" y="4" rx="2"/><path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"/>`
|
|
2564
2621
|
),
|
|
2565
2622
|
phone: v(
|
|
2566
|
-
|
|
2623
|
+
h`<path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/>`
|
|
2567
2624
|
),
|
|
2568
2625
|
user: v(
|
|
2569
|
-
|
|
2626
|
+
h`<path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/>`
|
|
2570
2627
|
),
|
|
2571
2628
|
userX: v(
|
|
2572
|
-
|
|
2629
|
+
h`<path d="M2 21a8 8 0 0 1 11.873-7"/><circle cx="10" cy="8" r="5"/><path d="m17 17 5 5"/><path d="m22 17-5 5"/>`
|
|
2573
2630
|
),
|
|
2574
2631
|
lock: v(
|
|
2575
|
-
|
|
2632
|
+
h`<rect width="18" height="11" x="3" y="11" rx="2" ry="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/>`
|
|
2576
2633
|
),
|
|
2577
2634
|
key: v(
|
|
2578
|
-
|
|
2635
|
+
h`<path d="m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4"/><path d="m21 2-9.6 9.6"/><circle cx="7.5" cy="15.5" r="5.5"/>`
|
|
2579
2636
|
),
|
|
2580
2637
|
shield: v(
|
|
2581
|
-
|
|
2638
|
+
h`<path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/>`
|
|
2582
2639
|
),
|
|
2583
2640
|
shieldCheck: v(
|
|
2584
|
-
|
|
2641
|
+
h`<path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/><path d="m9 12 2 2 4-4"/>`
|
|
2585
2642
|
),
|
|
2586
2643
|
smartphone: v(
|
|
2587
|
-
|
|
2644
|
+
h`<rect width="14" height="20" x="5" y="2" rx="2" ry="2"/><path d="M12 18h.01"/>`
|
|
2588
2645
|
),
|
|
2589
2646
|
monitor: v(
|
|
2590
|
-
|
|
2647
|
+
h`<rect width="20" height="14" x="2" y="3" rx="2"/><line x1="8" x2="16" y1="21" y2="21"/><line x1="12" x2="12" y1="17" y2="21"/>`
|
|
2591
2648
|
),
|
|
2592
2649
|
globe: v(
|
|
2593
|
-
|
|
2650
|
+
h`<circle cx="12" cy="12" r="10"/><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"/><path d="M2 12h20"/>`
|
|
2594
2651
|
),
|
|
2595
2652
|
logOut: v(
|
|
2596
|
-
|
|
2653
|
+
h`<path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"/><polyline points="16 17 21 12 16 7"/><line x1="21" x2="9" y1="12" y2="12"/>`
|
|
2597
2654
|
),
|
|
2598
2655
|
settings: v(
|
|
2599
|
-
|
|
2656
|
+
h`<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/>`
|
|
2600
2657
|
),
|
|
2601
|
-
x: v(
|
|
2602
|
-
check: v(
|
|
2658
|
+
x: v(h`<path d="M18 6 6 18"/><path d="m6 6 12 12"/>`),
|
|
2659
|
+
check: v(h`<path d="M20 6 9 17l-5-5"/>`),
|
|
2603
2660
|
users: v(
|
|
2604
|
-
|
|
2661
|
+
h`<path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M22 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/>`
|
|
2605
2662
|
),
|
|
2606
2663
|
copy: v(
|
|
2607
|
-
|
|
2664
|
+
h`<rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/>`
|
|
2608
2665
|
),
|
|
2609
2666
|
eye: v(
|
|
2610
|
-
|
|
2667
|
+
h`<path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"/><circle cx="12" cy="12" r="3"/>`
|
|
2611
2668
|
),
|
|
2612
2669
|
eyeOff: v(
|
|
2613
|
-
|
|
2670
|
+
h`<path d="M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49"/><path d="M14.084 14.158a3 3 0 0 1-4.242-4.242"/><path d="M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143"/><path d="m2 2 20 20"/>`
|
|
2614
2671
|
),
|
|
2615
|
-
arrowLeft: v(
|
|
2672
|
+
arrowLeft: v(h`<path d="m12 19-7-7 7-7"/><path d="M19 12H5"/>`),
|
|
2616
2673
|
alert: v(
|
|
2617
|
-
|
|
2674
|
+
h`<circle cx="12" cy="12" r="10"/><line x1="12" x2="12" y1="8" y2="12"/><line x1="12" x2="12.01" y1="16" y2="16"/>`
|
|
2618
2675
|
),
|
|
2619
|
-
info: v(
|
|
2620
|
-
checkCircle: v(
|
|
2676
|
+
info: v(h`<circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/>`),
|
|
2677
|
+
checkCircle: v(h`<circle cx="12" cy="12" r="10"/><path d="m9 12 2 2 4-4"/>`),
|
|
2621
2678
|
link: v(
|
|
2622
|
-
|
|
2679
|
+
h`<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/>`
|
|
2623
2680
|
),
|
|
2624
2681
|
activity: v(
|
|
2625
|
-
|
|
2682
|
+
h`<path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"/>`
|
|
2626
2683
|
),
|
|
2627
2684
|
trash: v(
|
|
2628
|
-
|
|
2685
|
+
h`<path d="M3 6h18"/><path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"/><path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"/>`
|
|
2629
2686
|
),
|
|
2630
2687
|
sparkles: v(
|
|
2631
|
-
|
|
2688
|
+
h`<path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"/>`
|
|
2632
2689
|
),
|
|
2633
2690
|
refresh: v(
|
|
2634
|
-
|
|
2691
|
+
h`<path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/><path d="M21 3v5h-5"/><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"/><path d="M8 16H3v5"/>`
|
|
2635
2692
|
),
|
|
2636
|
-
chevronDown: v(
|
|
2693
|
+
chevronDown: v(h`<path d="m6 9 6 6 6-6"/>`),
|
|
2637
2694
|
ghost: v(
|
|
2638
|
-
|
|
2695
|
+
h`<path d="M9 10h.01"/><path d="M15 10h.01"/><path d="M12 2a8 8 0 0 0-8 8v12l3-3 2.5 2.5L12 19l2.5 2.5L17 19l3 3V10a8 8 0 0 0-8-8z"/>`
|
|
2639
2696
|
),
|
|
2640
2697
|
qr: v(
|
|
2641
|
-
|
|
2698
|
+
h`<rect width="5" height="5" x="3" y="3" rx="1"/><rect width="5" height="5" x="16" y="3" rx="1"/><rect width="5" height="5" x="3" y="16" rx="1"/><path d="M21 16h-3a2 2 0 0 0-2 2v3"/><path d="M21 21v.01"/><path d="M12 7v3a2 2 0 0 1-2 2H7"/><path d="M3 12h.01"/><path d="M12 3h.01"/><path d="M12 16v.01"/><path d="M16 12h1"/><path d="M21 12v.01"/><path d="M12 21v-1"/>`
|
|
2642
2699
|
)
|
|
2643
|
-
}, w = (e, t = "0 0 24 24") => r`<svg xmlns="http://www.w3.org/2000/svg" viewBox=${t} aria-hidden="true">${e}</svg>`,
|
|
2700
|
+
}, w = (e, t = "0 0 24 24") => r`<svg xmlns="http://www.w3.org/2000/svg" viewBox=${t} aria-hidden="true">${e}</svg>`, Wt = {
|
|
2644
2701
|
google: w(
|
|
2645
|
-
|
|
2702
|
+
h`<path fill="#4285F4" d="M23.49 12.27c0-.79-.07-1.54-.19-2.27H12v4.51h6.47a5.57 5.57 0 0 1-2.4 3.58v3h3.86c2.26-2.09 3.56-5.17 3.56-8.82z"/><path fill="#34A853" d="M12 24c3.24 0 5.95-1.08 7.93-2.91l-3.86-3c-1.08.72-2.45 1.16-4.07 1.16-3.13 0-5.78-2.11-6.73-4.96H1.29v3.09A11.99 11.99 0 0 0 12 24z"/><path fill="#FBBC05" d="M5.27 14.29A7.2 7.2 0 0 1 4.89 12c0-.8.14-1.57.38-2.29V6.62H1.29A11.97 11.97 0 0 0 0 12c0 1.94.46 3.77 1.29 5.38l3.98-3.09z"/><path fill="#EA4335" d="M12 4.75c1.77 0 3.35.61 4.6 1.8l3.42-3.42C17.95 1.19 15.24 0 12 0 7.31 0 3.26 2.69 1.29 6.62l3.98 3.09C6.22 6.86 8.87 4.75 12 4.75z"/>`
|
|
2646
2703
|
),
|
|
2647
2704
|
github: w(
|
|
2648
|
-
|
|
2705
|
+
h`<path fill="currentColor" d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0 0 24 12c0-6.63-5.37-12-12-12z"/>`
|
|
2649
2706
|
),
|
|
2650
2707
|
apple: w(
|
|
2651
|
-
|
|
2708
|
+
h`<path fill="currentColor" d="M17.05 20.28c-.98.95-2.05.8-3.08.35-1.09-.46-2.09-.48-3.24 0-1.44.62-2.2.44-3.06-.35C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.54 4.09zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z"/>`
|
|
2652
2709
|
),
|
|
2653
2710
|
facebook: w(
|
|
2654
|
-
|
|
2711
|
+
h`<path fill="#1877F2" d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/>`
|
|
2655
2712
|
),
|
|
2656
2713
|
x: w(
|
|
2657
|
-
|
|
2714
|
+
h`<path fill="currentColor" d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/>`
|
|
2658
2715
|
),
|
|
2659
2716
|
microsoft: w(
|
|
2660
|
-
|
|
2717
|
+
h`<path fill="#F25022" d="M1 1h10v10H1z"/><path fill="#7FBA00" d="M13 1h10v10H13z"/><path fill="#00A4EF" d="M1 13h10v10H1z"/><path fill="#FFB900" d="M13 13h10v10H13z"/>`
|
|
2661
2718
|
),
|
|
2662
2719
|
discord: w(
|
|
2663
|
-
|
|
2720
|
+
h`<path fill="#5865F2" d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z"/>`
|
|
2664
2721
|
),
|
|
2665
2722
|
gitlab: w(
|
|
2666
|
-
|
|
2723
|
+
h`<path fill="#FC6D26" d="m23.6 9.593-.033-.086L20.3.98a.851.851 0 0 0-.336-.405.876.876 0 0 0-1.001.054.874.874 0 0 0-.29.44l-2.205 6.748H7.535L5.33 1.069a.857.857 0 0 0-.29-.441.876.876 0 0 0-1.001-.054.86.86 0 0 0-.336.405L.436 9.502l-.032.086a6.066 6.066 0 0 0 2.012 7.01l.011.009.03.021 4.976 3.727 2.462 1.863 1.5 1.132a1.009 1.009 0 0 0 1.22 0l1.5-1.132 2.461-1.863 5.006-3.75.013-.01a6.068 6.068 0 0 0 2.006-7.002z"/>`
|
|
2667
2724
|
),
|
|
2668
2725
|
linkedin: w(
|
|
2669
|
-
|
|
2726
|
+
h`<path fill="#0A66C2" d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/>`
|
|
2670
2727
|
),
|
|
2671
2728
|
slack: w(
|
|
2672
|
-
|
|
2729
|
+
h`<path fill="#E01E5A" d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313z"/><path fill="#36C5F0" d="M8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312z"/><path fill="#2EB67D" d="M18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.27 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.163 0a2.528 2.528 0 0 1 2.523 2.522v6.312z"/><path fill="#ECB22E" d="M15.163 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.163 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.27a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.315A2.527 2.527 0 0 1 24 15.163a2.528 2.528 0 0 1-2.522 2.523h-6.315z"/>`
|
|
2673
2730
|
),
|
|
2674
2731
|
twitch: w(
|
|
2675
|
-
|
|
2732
|
+
h`<path fill="#9146FF" d="M11.571 4.714h1.715v5.143H11.57zm4.715 0H18v5.143h-1.714zM6 0 1.714 4.286v15.428h5.143V24l4.286-4.286h3.428L22.286 12V0zm14.571 11.143-3.428 3.428h-3.429l-3 3v-3H6.857V1.714h13.714Z"/>`
|
|
2676
2733
|
),
|
|
2677
2734
|
spotify: w(
|
|
2678
|
-
|
|
2735
|
+
h`<path fill="#1DB954" d="M12 0C5.4 0 0 5.4 0 12s5.4 12 12 12 12-5.4 12-12S18.66 0 12 0zm5.521 17.34c-.24.359-.66.48-1.021.24-2.82-1.74-6.36-2.101-10.561-1.141-.418.122-.779-.179-.899-.539-.12-.421.18-.78.54-.9 4.56-1.021 8.52-.6 11.64 1.32.42.18.479.659.301 1.02zm1.44-3.3c-.301.42-.841.6-1.262.3-3.239-1.98-8.159-2.58-11.939-1.38-.479.12-1.02-.12-1.14-.6-.12-.48.12-1.021.6-1.141C9.6 9.9 15 10.561 18.72 12.84c.361.181.54.78.241 1.2zm.12-3.36C15.24 8.4 8.82 8.16 5.16 9.301c-.6.179-1.2-.181-1.38-.721-.18-.601.18-1.2.72-1.381 4.26-1.26 11.28-1.02 15.721 1.621.539.3.719 1.02.419 1.56-.299.421-1.02.599-1.559.3z"/>`
|
|
2679
2736
|
),
|
|
2680
2737
|
notion: w(
|
|
2681
|
-
|
|
2738
|
+
h`<path fill="currentColor" d="M4.459 4.208c.746.606 1.026.56 2.428.466l13.215-.793c.28 0 .047-.28-.046-.326L17.86 1.968c-.42-.326-.981-.7-2.055-.607L3.01 2.295c-.466.046-.56.28-.374.466zm.793 3.08v13.904c0 .747.373 1.027 1.214.98l14.523-.84c.841-.046.935-.56.935-1.167V6.354c0-.606-.233-.933-.748-.887l-15.177.887c-.56.047-.747.327-.747.933zm14.337.745c.093.42 0 .84-.42.888l-.7.14v10.264c-.608.327-1.168.514-1.635.514-.748 0-.935-.234-1.495-.933l-4.577-7.186v6.952L12.21 19s0 .84-1.168.84l-3.222.186c-.093-.186 0-.653.327-.746l.84-.233V9.854L7.822 9.76c-.094-.42.14-1.026.793-1.073l3.456-.233 4.764 7.279v-6.44l-1.215-.139c-.093-.514.28-.887.747-.933zM1.936 1.035l13.31-.98c1.634-.14 2.055-.047 3.082.7l4.249 2.986c.7.513.934.653.934 1.213v16.378c0 1.026-.373 1.634-1.68 1.726l-15.458.934c-.98.047-1.448-.093-1.962-.747l-3.129-4.06c-.56-.747-.793-1.306-.793-1.96V2.667c0-.839.374-1.54 1.447-1.632z"/>`
|
|
2682
2739
|
),
|
|
2683
2740
|
dropbox: w(
|
|
2684
|
-
|
|
2741
|
+
h`<path fill="#0061FF" d="M6 1.807 0 5.629l6 3.822 6.001-3.822L6 1.807zm12 0-6 3.822 6 3.822 6-3.822-6-3.822zM0 13.274l6 3.822 6.001-3.822L6 9.452l-6 3.822zm18-3.822-6 3.822 6 3.822 6-3.822-6-3.822zM6 18.371l6.001 3.822 6-3.822-6-3.822L6 18.371z"/>`
|
|
2685
2742
|
),
|
|
2686
2743
|
figma: w(
|
|
2687
|
-
|
|
2744
|
+
h`<path fill="#F24E1E" d="M8 24a4 4 0 0 0 4-4v-4H8a4 4 0 0 0 0 8z"/><path fill="#A259FF" d="M4 12a4 4 0 0 1 4-4h4v8H8a4 4 0 0 1-4-4z"/><path fill="#FF7262" d="M4 4a4 4 0 0 1 4-4h4v8H8a4 4 0 0 1-4-4z"/><path fill="#1ABCFE" d="M12 0h4a4 4 0 0 1 0 8h-4V0z"/><path fill="#0ACF83" d="M20 12a4 4 0 1 1-8 0 4 4 0 0 1 8 0z"/>`
|
|
2688
2745
|
),
|
|
2689
2746
|
bitbucket: w(
|
|
2690
|
-
|
|
2747
|
+
h`<path fill="#2684FF" d="M.778 1.213a.768.768 0 0 0-.768.892l3.263 19.81c.084.5.515.868 1.022.873H19.95a.772.772 0 0 0 .77-.646l3.27-20.03a.768.768 0 0 0-.768-.891zM14.52 15.53H9.522L8.17 8.466h7.561z"/>`
|
|
2691
2748
|
),
|
|
2692
2749
|
amazon: w(
|
|
2693
|
-
|
|
2750
|
+
h`<path fill="currentColor" d="M.045 18.02c.072-.116.187-.124.348-.022 3.636 2.11 7.594 3.166 11.87 3.166 2.852 0 5.668-.533 8.447-1.595l.315-.14c.138-.06.234-.1.293-.13.226-.088.39-.046.525.13.12.174.09.336-.12.48-.256.19-.6.41-1.006.654-1.244.743-2.64 1.316-4.185 1.726a17.617 17.617 0 0 1-10.951-.577 17.88 17.88 0 0 1-5.43-3.35c-.1-.074-.151-.15-.151-.22 0-.047.021-.09.051-.13zm6.565-6.218c0-1.005.247-1.863.743-2.577.495-.71 1.17-1.25 2.04-1.615.796-.335 1.756-.575 2.912-.72.39-.046 1.033-.103 1.92-.174v-.37c0-.93-.105-1.558-.3-1.875-.302-.43-.78-.65-1.44-.65h-.182c-.48.046-.896.196-1.246.46-.35.27-.575.63-.675 1.096-.06.3-.206.465-.435.51l-2.52-.315c-.248-.06-.372-.18-.372-.39 0-.046.007-.09.022-.15.247-1.29.855-2.25 1.82-2.88.976-.616 2.1-.975 3.39-1.05h.54c1.65 0 2.957.434 3.888 1.29.135.15.27.3.405.48.12.165.224.314.283.45.075.134.15.33.195.57.06.254.105.42.135.51.03.104.062.3.076.615.01.313.02.493.02.553v5.28c0 .376.06.72.165 1.036.105.313.21.54.315.674l.51.674c.09.136.136.256.136.36 0 .12-.06.226-.18.314-1.2 1.05-1.86 1.62-1.963 1.71-.165.135-.373.15-.61.045a6.62 6.62 0 0 1-.526-.496l-.31-.347a9.858 9.858 0 0 1-.317-.42l-.3-.435c-.81.886-1.603 1.44-2.4 1.665-.494.15-1.093.227-1.83.227-1.11 0-2.04-.343-2.76-1.034-.72-.69-1.08-1.665-1.08-2.94l-.05-.076zm3.753-.438c0 .566.14 1.02.425 1.364.285.34.675.512 1.155.512.045 0 .106-.007.195-.02.09-.016.134-.023.166-.023.614-.16 1.08-.553 1.424-1.178.165-.28.285-.58.36-.91.09-.32.12-.59.135-.8.015-.195.015-.54.015-1.005v-.54c-.84 0-1.484.06-1.92.18-1.275.36-1.92 1.17-1.92 2.43l-.035-.01zm9.162 7.027c.03-.06.075-.11.132-.17.362-.243.714-.41 1.05-.5a8.094 8.094 0 0 1 1.612-.24c.14-.012.28 0 .41.03.65.06 1.05.168 1.172.33.063.09.099.228.099.39v.15c0 .51-.149 1.11-.424 1.8-.278.69-.664 1.248-1.156 1.68-.073.06-.14.09-.197.09-.03 0-.06 0-.09-.012-.09-.044-.107-.12-.064-.24.54-1.26.806-2.143.806-2.64 0-.15-.03-.27-.087-.344-.145-.166-.55-.257-1.224-.257-.243 0-.533.016-.87.045-.363.045-.7.09-1 .135-.09 0-.148-.014-.18-.044-.03-.03-.036-.06-.02-.106 0-.014.007-.03.02-.06z"/>`
|
|
2694
2751
|
),
|
|
2695
2752
|
paypal: w(
|
|
2696
|
-
|
|
2753
|
+
h`<path fill="#003087" d="M7.076 21.337H2.47a.641.641 0 0 1-.633-.74L4.944.901C5.026.382 5.474 0 5.998 0h7.46c2.57 0 4.578.543 5.69 1.81 1.01 1.15 1.304 2.42 1.012 4.287-.023.143-.047.288-.077.437-.983 5.05-4.349 6.797-8.647 6.797h-2.19c-.524 0-.968.382-1.05.9l-1.12 7.106zm14.146-14.42a3.35 3.35 0 0 0-.607-.541c-.013.076-.026.175-.041.254-.93 4.778-4.005 7.201-9.138 7.201h-2.19a.563.563 0 0 0-.556.479l-1.187 7.527h-.506l-.24 1.516a.56.56 0 0 0 .554.647h3.882c.46 0 .85-.334.922-.788.06-.26.76-4.852.816-5.09a.932.932 0 0 1 .923-.788h.58c3.76 0 6.705-1.528 7.565-5.946.36-1.847.174-3.388-.777-4.471z"/>`
|
|
2697
2754
|
)
|
|
2698
2755
|
};
|
|
2699
|
-
function
|
|
2700
|
-
return
|
|
2756
|
+
function et(e) {
|
|
2757
|
+
return Wt[e] ?? l.globe;
|
|
2701
2758
|
}
|
|
2702
|
-
function
|
|
2759
|
+
function nt(e) {
|
|
2703
2760
|
const t = (e.trim()[0] ?? "?").toUpperCase();
|
|
2704
|
-
return /[A-Z0-9]/i.test(t) ? t :
|
|
2761
|
+
return /[A-Z0-9]/i.test(t) ? t : l.user;
|
|
2705
2762
|
}
|
|
2706
|
-
function
|
|
2763
|
+
function Y(e) {
|
|
2707
2764
|
typeof document > "u" || (document.querySelector("authui-modal") || document.body.appendChild(document.createElement("authui-modal")), queueMicrotask(() => {
|
|
2708
2765
|
window.dispatchEvent(new CustomEvent("authui:open", { detail: { view: e } }));
|
|
2709
2766
|
}));
|
|
2710
2767
|
}
|
|
2711
|
-
function
|
|
2768
|
+
function le() {
|
|
2712
2769
|
typeof window > "u" || window.dispatchEvent(new CustomEvent("authui:close"));
|
|
2713
2770
|
}
|
|
2714
|
-
function
|
|
2771
|
+
function it(e) {
|
|
2715
2772
|
const t = {
|
|
2716
2773
|
length: e.length >= 8,
|
|
2717
2774
|
long: e.length >= 12,
|
|
@@ -2727,39 +2784,12 @@ function et(e) {
|
|
|
2727
2784
|
let s, a;
|
|
2728
2785
|
return !t.length || i <= 1 ? (s = 1, a = "passwordStrengthTooWeak") : i === 2 ? (s = 2, a = "passwordStrengthWeak") : i === 3 ? (s = 3, a = "passwordStrengthFair") : i >= 5 && t.long && t.lower && t.upper && t.number && t.symbol ? (s = 4, a = "passwordStrengthVeryStrong") : (s = 4, a = "passwordStrengthStrong"), { level: s, percent: s * 25, labelKey: a, checks: t };
|
|
2729
2786
|
}
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
|
|
2734
|
-
if (e === "sign-up") e = "email-password";
|
|
2735
|
-
else return;
|
|
2736
|
-
try {
|
|
2737
|
-
localStorage.setItem(rt, e);
|
|
2738
|
-
} catch {
|
|
2739
|
-
}
|
|
2740
|
-
}
|
|
2741
|
-
}
|
|
2742
|
-
function D() {
|
|
2743
|
-
if (typeof localStorage > "u") return null;
|
|
2744
|
-
try {
|
|
2745
|
-
return localStorage.getItem(rt);
|
|
2746
|
-
} catch {
|
|
2747
|
-
return null;
|
|
2748
|
-
}
|
|
2749
|
-
}
|
|
2750
|
-
function re() {
|
|
2751
|
-
if (!(typeof localStorage > "u"))
|
|
2752
|
-
try {
|
|
2753
|
-
localStorage.removeItem(rt);
|
|
2754
|
-
} catch {
|
|
2755
|
-
}
|
|
2756
|
-
}
|
|
2757
|
-
var Nt = Object.defineProperty, Bt = Object.getOwnPropertyDescriptor, k = (e, t, i, s) => {
|
|
2758
|
-
for (var a = s > 1 ? void 0 : s ? Bt(t, i) : t, l = e.length - 1, u; l >= 0; l--)
|
|
2759
|
-
(u = e[l]) && (a = (s ? u(t, i, a) : u(a)) || a);
|
|
2760
|
-
return s && a && Nt(t, i, a), a;
|
|
2787
|
+
var Kt = Object.defineProperty, Gt = Object.getOwnPropertyDescriptor, C = (e, t, i, s) => {
|
|
2788
|
+
for (var a = s > 1 ? void 0 : s ? Gt(t, i) : t, c = e.length - 1, u; c >= 0; c--)
|
|
2789
|
+
(u = e[c]) && (a = (s ? u(t, i, a) : u(a)) || a);
|
|
2790
|
+
return s && a && Kt(t, i, a), a;
|
|
2761
2791
|
};
|
|
2762
|
-
let
|
|
2792
|
+
let k = class extends E {
|
|
2763
2793
|
constructor() {
|
|
2764
2794
|
super(...arguments), this.view = "sign-in", this.embedded = !1, this.step = "sign-in", this.busy = !1, this.error = "", this.notice = null, this.showPassword = !1, this.token = null, this.focusOnStep = !1, this.resendCooldownUntil = 0, this.challenge = null, this.recovery = null, this.email = "", this.password = "", this.passwordConfirm = "", this.name = "", this.phone = "", this.code = "", this.onSignIn = (e) => {
|
|
2765
2795
|
e.preventDefault(), this.requireValid(e) && this.run(async () => {
|
|
@@ -2775,8 +2805,8 @@ let $ = class extends A {
|
|
|
2775
2805
|
});
|
|
2776
2806
|
}, this.onOAuth = (e) => {
|
|
2777
2807
|
this.run(async () => {
|
|
2778
|
-
if (
|
|
2779
|
-
this.fire("authui-success", { method: "oauth" });
|
|
2808
|
+
if (Ot(e), await n.signInWithOAuth(e), n.isPreview) {
|
|
2809
|
+
wt(), this.fire("authui-success", { method: "oauth" });
|
|
2780
2810
|
return;
|
|
2781
2811
|
}
|
|
2782
2812
|
await new Promise((t) => setTimeout(t, 4e3));
|
|
@@ -2793,7 +2823,7 @@ let $ = class extends A {
|
|
|
2793
2823
|
}
|
|
2794
2824
|
const t = this.recovery;
|
|
2795
2825
|
t && this.run(async () => {
|
|
2796
|
-
await n.completePasswordRecovery(t.userId, t.secret, this.password), this.password = "", this.passwordConfirm = "", this.recovery = null, this.auth.pending?.type === "reset-password" && n.setPending(null), this.notice = { tone: "success", message: this.t("passwordUpdated") }
|
|
2826
|
+
await n.completePasswordRecovery(t.userId, t.secret, this.password), this.password = "", this.passwordConfirm = "", this.recovery = null, this.auth.pending?.type === "reset-password" && n.setPending(null), this.go("sign-in"), this.notice = { tone: "success", message: this.t("passwordUpdated") };
|
|
2797
2827
|
});
|
|
2798
2828
|
}, this.onMagicUrl = (e) => {
|
|
2799
2829
|
e.preventDefault(), this.requireValid(e) && this.run(async () => {
|
|
@@ -2864,7 +2894,7 @@ let $ = class extends A {
|
|
|
2864
2894
|
const { status: e, pending: t } = this.auth;
|
|
2865
2895
|
e === "mfa-required" && this.step !== "mfa" && this.go("mfa");
|
|
2866
2896
|
const i = this.step === "reset-password" || t?.type === "reset-password" || this.recovery !== null;
|
|
2867
|
-
(e === "signed-in" || e === "signed-out") && !i && (this.step === "mfa" || this.step === "phone" || this.step === "email-otp" || this.step === "magic-url" || this.step === "forgot-password" || this.token !== null || this.challenge !== null || e === "signed-out") && (this.token = null, this.challenge = null, this.code = "", this.password = "", this.notice = null, this.go(this.view === "sign-up" ? "sign-up" : "sign-in")), t?.type === "reset-password" && this.step !== "reset-password" && (this.recovery = { userId: t.userId, secret: t.secret }, this.go("reset-password")), t?.type === "oauth-failed" && (this.notice = { tone: "error", message: this.t("errorOAuth") }
|
|
2897
|
+
(e === "signed-in" || e === "signed-out") && !i && (this.step === "mfa" || this.step === "phone" || this.step === "email-otp" || this.step === "magic-url" || this.step === "forgot-password" || this.token !== null || this.challenge !== null || e === "signed-out") && (this.token = null, this.challenge = null, this.code = "", this.password = "", this.notice = null, this.go(this.view === "sign-up" ? "sign-up" : "sign-in")), t?.type === "reset-password" && this.step !== "reset-password" && (this.recovery = { userId: t.userId, secret: t.secret }, this.go("reset-password")), t?.type === "oauth-failed" && (this.notice = { tone: "error", message: this.t("errorOAuth") }), t?.type === "notice" && !this.notice && (this.notice = {
|
|
2868
2898
|
tone: t.tone === "error" ? "error" : t.tone,
|
|
2869
2899
|
message: t.message
|
|
2870
2900
|
});
|
|
@@ -2874,7 +2904,7 @@ let $ = class extends A {
|
|
|
2874
2904
|
this.notice = null, this.auth.pending?.type === "notice" && n.setPending(null);
|
|
2875
2905
|
}
|
|
2876
2906
|
go(e) {
|
|
2877
|
-
e === "sign-up" && this.config?.signUp === !1 && (e = "sign-in"), this.focusOnStep = !0, this.step = e, this.error = "", this.notice = null, this.
|
|
2907
|
+
e === "sign-up" && this.config?.signUp === !1 && (e = "sign-in"), this.focusOnStep = !0, this.step = e, this.error = "", this.notice = null, this.busy = !1, this.showPassword = !1, this.password = "", this.passwordConfirm = "", e !== "mfa" && (this.challenge = null), e !== "email-otp" && e !== "phone" && e !== "magic-url" && (this.token = null), this.fire("authui-view", { view: e });
|
|
2878
2908
|
}
|
|
2879
2909
|
// ───────────────────────────── actions ─────────────────────────────
|
|
2880
2910
|
async run(e, t = "link") {
|
|
@@ -2906,14 +2936,14 @@ let $ = class extends A {
|
|
|
2906
2936
|
<div class="panel ${this.embedded ? "embedded" : ""}" part="panel">
|
|
2907
2937
|
${this.renderHeader()}
|
|
2908
2938
|
${this.notice ? r`<div class="alert alert-${this.notice.tone}" role="status">
|
|
2909
|
-
${this.notice.tone === "success" ?
|
|
2939
|
+
${this.notice.tone === "success" ? l.checkCircle : this.notice.tone === "error" ? l.alert : l.info}
|
|
2910
2940
|
<div class="alert-body">${this.notice.message}</div>
|
|
2911
2941
|
<button
|
|
2912
2942
|
class="btn btn-ghost btn-icon dismiss"
|
|
2913
2943
|
@click=${() => this.dismissNotice()}
|
|
2914
2944
|
aria-label=${this.t("close")}
|
|
2915
2945
|
>
|
|
2916
|
-
${
|
|
2946
|
+
${l.x}
|
|
2917
2947
|
</button>
|
|
2918
2948
|
</div>` : o}
|
|
2919
2949
|
${e}
|
|
@@ -2966,7 +2996,7 @@ let $ = class extends A {
|
|
|
2966
2996
|
}
|
|
2967
2997
|
renderError() {
|
|
2968
2998
|
return this.error ? r`<div class="alert alert-error" role="alert">
|
|
2969
|
-
${
|
|
2999
|
+
${l.alert}
|
|
2970
3000
|
<div class="alert-body">${this.error}</div>
|
|
2971
3001
|
</div>` : o;
|
|
2972
3002
|
}
|
|
@@ -2976,7 +3006,7 @@ let $ = class extends A {
|
|
|
2976
3006
|
</button>`;
|
|
2977
3007
|
}
|
|
2978
3008
|
passwordField(e) {
|
|
2979
|
-
const t = this[e.field], i = e.meter ?
|
|
3009
|
+
const t = this[e.field], i = e.meter ? it(t) : null;
|
|
2980
3010
|
return r`
|
|
2981
3011
|
<div class="field">
|
|
2982
3012
|
<label class="label" for=${e.id}>
|
|
@@ -3007,7 +3037,7 @@ let $ = class extends A {
|
|
|
3007
3037
|
aria-label=${this.showPassword ? this.t("hidePassword") : this.t("showPassword")}
|
|
3008
3038
|
tabindex="-1"
|
|
3009
3039
|
>
|
|
3010
|
-
${this.showPassword ?
|
|
3040
|
+
${this.showPassword ? l.eyeOff : l.eye}
|
|
3011
3041
|
</button>
|
|
3012
3042
|
</div>
|
|
3013
3043
|
${i && t ? r`<div class="strength" aria-live="polite">
|
|
@@ -3076,19 +3106,19 @@ let $ = class extends A {
|
|
|
3076
3106
|
backLink(e = "sign-in") {
|
|
3077
3107
|
return r`<div class="links">
|
|
3078
3108
|
<button type="button" class="btn btn-link" @click=${() => this.go(e)}>
|
|
3079
|
-
${
|
|
3109
|
+
${l.arrowLeft} ${this.t("back")}
|
|
3080
3110
|
</button>
|
|
3081
3111
|
</div>`;
|
|
3082
3112
|
}
|
|
3083
3113
|
renderStep() {
|
|
3084
3114
|
if (this.auth.configError)
|
|
3085
3115
|
return r`<div class="alert alert-error" role="alert">
|
|
3086
|
-
${
|
|
3116
|
+
${l.alert}
|
|
3087
3117
|
<div class="alert-body">${this.auth.configError}</div>
|
|
3088
3118
|
</div>`;
|
|
3089
3119
|
if (!this.auth.configured)
|
|
3090
3120
|
return r`<div class="alert alert-error" role="alert">
|
|
3091
|
-
${
|
|
3121
|
+
${l.alert}
|
|
3092
3122
|
<div class="alert-body">${this.t("errorNotConfigured")}</div>
|
|
3093
3123
|
</div>`;
|
|
3094
3124
|
if (this.auth.status === "loading")
|
|
@@ -3119,7 +3149,7 @@ let $ = class extends A {
|
|
|
3119
3149
|
<div class="stack">
|
|
3120
3150
|
<div class="row">
|
|
3121
3151
|
<div class="inline">
|
|
3122
|
-
<span class="avatar">${
|
|
3152
|
+
<span class="avatar">${nt(t)}</span>
|
|
3123
3153
|
<div class="row-main">
|
|
3124
3154
|
<span class="row-title" title=${t}>${t}</span>
|
|
3125
3155
|
${e.email && e.name ? r`<span class="row-sub" title=${e.email}>${e.email}</span>` : o}
|
|
@@ -3134,13 +3164,13 @@ let $ = class extends A {
|
|
|
3134
3164
|
<button
|
|
3135
3165
|
class="btn btn-outline btn-block"
|
|
3136
3166
|
@click=${() => {
|
|
3137
|
-
this.embedded ? this.fire("authui-open", { view: "account" }) :
|
|
3167
|
+
this.embedded ? this.fire("authui-open", { view: "account" }) : Y("account");
|
|
3138
3168
|
}}
|
|
3139
3169
|
>
|
|
3140
|
-
${
|
|
3170
|
+
${l.settings} ${this.t("manageAccount")}
|
|
3141
3171
|
</button>
|
|
3142
3172
|
<button class="btn btn-ghost btn-block" @click=${this.onSignOut} ?disabled=${this.busy}>
|
|
3143
|
-
${
|
|
3173
|
+
${l.logOut} ${this.t("signOut")}
|
|
3144
3174
|
</button>
|
|
3145
3175
|
</div>
|
|
3146
3176
|
</div>
|
|
@@ -3151,8 +3181,8 @@ let $ = class extends A {
|
|
|
3151
3181
|
if (e.length === 0) return o;
|
|
3152
3182
|
const t = D();
|
|
3153
3183
|
e.sort((s, a) => {
|
|
3154
|
-
const
|
|
3155
|
-
return
|
|
3184
|
+
const c = t === `oauth:${s}` ? 0 : 1, u = t === `oauth:${a}` ? 0 : 1;
|
|
3185
|
+
return c - u;
|
|
3156
3186
|
});
|
|
3157
3187
|
const i = e.length > 2;
|
|
3158
3188
|
return r`
|
|
@@ -3166,7 +3196,7 @@ let $ = class extends A {
|
|
|
3166
3196
|
?disabled=${this.busy}
|
|
3167
3197
|
aria-label=${this.t("continueWith", { provider: q(s) })}
|
|
3168
3198
|
>
|
|
3169
|
-
${
|
|
3199
|
+
${et(s)}
|
|
3170
3200
|
<span
|
|
3171
3201
|
>${i ? q(s) : this.t("continueWith", { provider: q(s) })}</span
|
|
3172
3202
|
>
|
|
@@ -3178,9 +3208,9 @@ let $ = class extends A {
|
|
|
3178
3208
|
}
|
|
3179
3209
|
renderSignIn() {
|
|
3180
3210
|
const e = this.config?.methods ?? {}, t = e.emailPassword !== !1, i = (e.oauth?.length ?? 0) > 0, s = [
|
|
3181
|
-
e.magicUrl ? { step: "magic-url", icon:
|
|
3182
|
-
e.emailOtp ? { step: "email-otp", icon:
|
|
3183
|
-
e.phone ? { step: "phone", icon:
|
|
3211
|
+
e.magicUrl ? { step: "magic-url", icon: l.link, label: this.t("sendMagicLink") } : null,
|
|
3212
|
+
e.emailOtp ? { step: "email-otp", icon: l.mail, label: this.t("continueWithEmail") } : null,
|
|
3213
|
+
e.phone ? { step: "phone", icon: l.smartphone, label: this.t("continueWithPhone") } : null
|
|
3184
3214
|
].filter(Boolean);
|
|
3185
3215
|
return r`
|
|
3186
3216
|
<div class="stack">
|
|
@@ -3200,14 +3230,14 @@ let $ = class extends A {
|
|
|
3200
3230
|
</form>` : this.renderError()}
|
|
3201
3231
|
${s.length > 0 ? r`<div class="stack-sm">
|
|
3202
3232
|
${s.map((a) => {
|
|
3203
|
-
const
|
|
3233
|
+
const c = D() === a.step;
|
|
3204
3234
|
return r`<button
|
|
3205
3235
|
type="button"
|
|
3206
|
-
class="btn btn-secondary btn-block ${
|
|
3236
|
+
class="btn btn-secondary btn-block ${c ? "last-used" : ""}"
|
|
3207
3237
|
@click=${() => this.go(a.step)}
|
|
3208
3238
|
>
|
|
3209
3239
|
${a.icon} ${a.label}
|
|
3210
|
-
${
|
|
3240
|
+
${c ? r`<span class="last-used-badge">${this.t("lastUsed")}</span>` : o}
|
|
3211
3241
|
</button>`;
|
|
3212
3242
|
})}
|
|
3213
3243
|
</div>` : o}
|
|
@@ -3217,7 +3247,7 @@ let $ = class extends A {
|
|
|
3217
3247
|
@click=${this.onGuest}
|
|
3218
3248
|
?disabled=${this.busy}
|
|
3219
3249
|
>
|
|
3220
|
-
${
|
|
3250
|
+
${l.ghost} ${this.t("continueAsGuest")}
|
|
3221
3251
|
${D() === "anonymous" ? r`<span class="last-used-badge">${this.t("lastUsed")}</span>` : o}
|
|
3222
3252
|
</button>` : o}
|
|
3223
3253
|
${t && this.config?.signUp !== !1 ? r`<div class="links">
|
|
@@ -3288,13 +3318,13 @@ let $ = class extends A {
|
|
|
3288
3318
|
this.step = "sign-in", this.error = "", this.notice = null, this.focusOnStep = !0, this.fire("authui-view", { view: "sign-in" });
|
|
3289
3319
|
}}
|
|
3290
3320
|
>
|
|
3291
|
-
${
|
|
3321
|
+
${l.arrowLeft} ${this.t("back")}
|
|
3292
3322
|
</button>
|
|
3293
3323
|
</div>
|
|
3294
3324
|
</div>
|
|
3295
3325
|
` : r`<div class="stack">
|
|
3296
3326
|
<div class="alert alert-error" role="alert">
|
|
3297
|
-
${
|
|
3327
|
+
${l.alert}
|
|
3298
3328
|
<div class="alert-body">${this.t("errorInvalidToken")}</div>
|
|
3299
3329
|
</div>
|
|
3300
3330
|
<div class="links">
|
|
@@ -3312,7 +3342,7 @@ let $ = class extends A {
|
|
|
3312
3342
|
}
|
|
3313
3343
|
phraseBox(e) {
|
|
3314
3344
|
return e ? r`<div class="alert alert-info">
|
|
3315
|
-
${
|
|
3345
|
+
${l.shield}
|
|
3316
3346
|
<div class="alert-title">
|
|
3317
3347
|
${this.t("securityPhrase")}: <span class="code">${e}</span>
|
|
3318
3348
|
</div>
|
|
@@ -3322,7 +3352,7 @@ let $ = class extends A {
|
|
|
3322
3352
|
renderMagicUrl() {
|
|
3323
3353
|
return this.token ? r`<div class="stack">
|
|
3324
3354
|
<div class="alert alert-success" role="status">
|
|
3325
|
-
${
|
|
3355
|
+
${l.mail}
|
|
3326
3356
|
<div class="alert-body">${this.t("magicLinkSent", { email: this.token.target })}</div>
|
|
3327
3357
|
</div>
|
|
3328
3358
|
${this.phraseBox(this.token.phrase)} ${this.backLink()}
|
|
@@ -3357,7 +3387,7 @@ let $ = class extends A {
|
|
|
3357
3387
|
const e = this.token?.kind === "phone", t = Date.now() < this.resendCooldownUntil;
|
|
3358
3388
|
return r`
|
|
3359
3389
|
<div class="alert alert-info" role="status">
|
|
3360
|
-
${e ?
|
|
3390
|
+
${e ? l.smartphone : l.mail}
|
|
3361
3391
|
<div class="alert-body">${this.t("codeSent", { target: this.token.target })}</div>
|
|
3362
3392
|
</div>
|
|
3363
3393
|
${this.phraseBox(this.token.phrase)}
|
|
@@ -3427,25 +3457,25 @@ let $ = class extends A {
|
|
|
3427
3457
|
const i = [
|
|
3428
3458
|
{
|
|
3429
3459
|
factor: "totp",
|
|
3430
|
-
icon:
|
|
3460
|
+
icon: l.smartphone,
|
|
3431
3461
|
label: this.t("mfaUseAuthenticator"),
|
|
3432
3462
|
available: e?.totp ?? !0
|
|
3433
3463
|
},
|
|
3434
3464
|
{
|
|
3435
3465
|
factor: "email",
|
|
3436
|
-
icon:
|
|
3466
|
+
icon: l.mail,
|
|
3437
3467
|
label: this.t("mfaUseEmail"),
|
|
3438
3468
|
available: e?.email ?? !0
|
|
3439
3469
|
},
|
|
3440
3470
|
{
|
|
3441
3471
|
factor: "phone",
|
|
3442
|
-
icon:
|
|
3472
|
+
icon: l.phone,
|
|
3443
3473
|
label: this.t("mfaUsePhone"),
|
|
3444
3474
|
available: e?.phone ?? !0
|
|
3445
3475
|
},
|
|
3446
3476
|
{
|
|
3447
3477
|
factor: "recoverycode",
|
|
3448
|
-
icon:
|
|
3478
|
+
icon: l.key,
|
|
3449
3479
|
label: this.t("mfaUseRecoveryCode"),
|
|
3450
3480
|
available: e?.recoveryCode ?? !0
|
|
3451
3481
|
}
|
|
@@ -3493,7 +3523,7 @@ let $ = class extends A {
|
|
|
3493
3523
|
</form>
|
|
3494
3524
|
<div class="links">
|
|
3495
3525
|
<button type="button" class="btn btn-link" @click=${() => this.challenge = null}>
|
|
3496
|
-
${
|
|
3526
|
+
${l.arrowLeft} ${this.t("back")}
|
|
3497
3527
|
</button>
|
|
3498
3528
|
<span aria-hidden="true">·</span>
|
|
3499
3529
|
<button type="button" class="btn btn-link" @click=${this.onCancelMfa}>
|
|
@@ -3504,57 +3534,57 @@ let $ = class extends A {
|
|
|
3504
3534
|
`;
|
|
3505
3535
|
}
|
|
3506
3536
|
};
|
|
3507
|
-
|
|
3508
|
-
|
|
3537
|
+
k.styles = [...E.styles, jt];
|
|
3538
|
+
C([
|
|
3509
3539
|
g({ type: String })
|
|
3510
|
-
],
|
|
3511
|
-
|
|
3540
|
+
], k.prototype, "view", 2);
|
|
3541
|
+
C([
|
|
3512
3542
|
g({ type: Boolean })
|
|
3513
|
-
],
|
|
3514
|
-
|
|
3515
|
-
|
|
3516
|
-
],
|
|
3517
|
-
|
|
3518
|
-
|
|
3519
|
-
],
|
|
3520
|
-
|
|
3521
|
-
|
|
3522
|
-
],
|
|
3523
|
-
|
|
3524
|
-
|
|
3525
|
-
],
|
|
3526
|
-
|
|
3527
|
-
|
|
3528
|
-
],
|
|
3529
|
-
|
|
3530
|
-
|
|
3531
|
-
],
|
|
3532
|
-
|
|
3533
|
-
|
|
3534
|
-
],
|
|
3535
|
-
|
|
3536
|
-
|
|
3537
|
-
],
|
|
3538
|
-
|
|
3539
|
-
|
|
3540
|
-
],
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
],
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
],
|
|
3547
|
-
var
|
|
3548
|
-
for (var a = s > 1 ? void 0 : s ?
|
|
3549
|
-
(u = e[
|
|
3550
|
-
return s && a &&
|
|
3543
|
+
], k.prototype, "embedded", 2);
|
|
3544
|
+
C([
|
|
3545
|
+
d()
|
|
3546
|
+
], k.prototype, "step", 2);
|
|
3547
|
+
C([
|
|
3548
|
+
d()
|
|
3549
|
+
], k.prototype, "busy", 2);
|
|
3550
|
+
C([
|
|
3551
|
+
d()
|
|
3552
|
+
], k.prototype, "error", 2);
|
|
3553
|
+
C([
|
|
3554
|
+
d()
|
|
3555
|
+
], k.prototype, "notice", 2);
|
|
3556
|
+
C([
|
|
3557
|
+
d()
|
|
3558
|
+
], k.prototype, "showPassword", 2);
|
|
3559
|
+
C([
|
|
3560
|
+
d()
|
|
3561
|
+
], k.prototype, "token", 2);
|
|
3562
|
+
C([
|
|
3563
|
+
d()
|
|
3564
|
+
], k.prototype, "resendCooldownUntil", 2);
|
|
3565
|
+
C([
|
|
3566
|
+
d()
|
|
3567
|
+
], k.prototype, "challenge", 2);
|
|
3568
|
+
C([
|
|
3569
|
+
d()
|
|
3570
|
+
], k.prototype, "recovery", 2);
|
|
3571
|
+
C([
|
|
3572
|
+
st("form input:not([type=hidden])")
|
|
3573
|
+
], k.prototype, "firstInput", 2);
|
|
3574
|
+
k = C([
|
|
3575
|
+
R("authui-sign-in")
|
|
3576
|
+
], k);
|
|
3577
|
+
var Yt = Object.defineProperty, Zt = Object.getOwnPropertyDescriptor, m = (e, t, i, s) => {
|
|
3578
|
+
for (var a = s > 1 ? void 0 : s ? Zt(t, i) : t, c = e.length - 1, u; c >= 0; c--)
|
|
3579
|
+
(u = e[c]) && (a = (s ? u(t, i, a) : u(a)) || a);
|
|
3580
|
+
return s && a && Yt(t, i, a), a;
|
|
3551
3581
|
};
|
|
3552
|
-
let p = class extends
|
|
3582
|
+
let p = class extends E {
|
|
3553
3583
|
constructor() {
|
|
3554
|
-
super(...arguments), this.embedded = !1, this.tab = "profile", this.active = "profile", this.busy = "", this.notice = null, this.errors = {}, this.nameInput = "", this.emailInput = "", this.emailPassword = "", this.phoneInput = "", this.phonePassword = "", this.phoneCode = "", this.phoneCodeSent = !1, this.guestName = "", this.oldPassword = "", this.newPassword = "", this.newPasswordConfirm = "", this.authenticator = null, this.authenticatorCode = "", this.factors = null, this.recoveryCodes = null, this.stepUp = null, this.stepUpCode = "", this.copied = !1, this.sessions = null, this.identities = null, this.logs = null, this.logsSupported = null, this.logsProbeStarted = !1, this.confirmDelete = !1, this.confirmRegenerate = !1, this.confirmRemoveAuthenticator = !1, this.confirmSignOutAll = !1, this.confirmDisconnectId = null, this.verifyEmailCooldownUntil = 0, this.onTabsKeydown = (e) => {
|
|
3584
|
+
super(...arguments), this.embedded = !1, this.tab = "profile", this.active = "profile", this.busy = "", this.notice = null, this.errors = {}, this.nameInput = "", this.emailInput = "", this.emailPassword = "", this.phoneInput = "", this.phonePassword = "", this.phoneCode = "", this.phoneCodeSent = !1, this.guestName = "", this.oldPassword = "", this.newPassword = "", this.newPasswordConfirm = "", this.authenticator = null, this.authenticatorCode = "", this.factors = null, this.recoveryCodes = null, this.stepUp = null, this.stepUpCode = "", this.copied = !1, this.sessions = null, this.identities = null, this.logs = null, this.logsSupported = null, this.logsProbeStarted = !1, this.confirmDelete = !1, this.confirmRegenerate = !1, this.confirmRemoveAuthenticator = !1, this.confirmSignOutAll = !1, this.confirmDisconnectId = null, this.verifyEmailCooldownUntil = 0, this.verifyEmailCooldownTimer = null, this.onTabsKeydown = (e) => {
|
|
3555
3585
|
const t = [...this.renderRoot?.querySelectorAll('[role="tab"]') ?? []];
|
|
3556
3586
|
if (!t.length) return;
|
|
3557
|
-
const i = t.findIndex((
|
|
3587
|
+
const i = t.findIndex((c) => c.getAttribute("aria-selected") === "true");
|
|
3558
3588
|
let s = i;
|
|
3559
3589
|
if (e.key === "ArrowRight" || e.key === "ArrowDown") s = (i + 1) % t.length;
|
|
3560
3590
|
else if (e.key === "ArrowLeft" || e.key === "ArrowUp")
|
|
@@ -3595,7 +3625,7 @@ let p = class extends A {
|
|
|
3595
3625
|
Date.now() < this.verifyEmailCooldownUntil || this.run(
|
|
3596
3626
|
"verify",
|
|
3597
3627
|
async () => {
|
|
3598
|
-
await n.sendEmailVerification(), this.
|
|
3628
|
+
await n.sendEmailVerification(), this.startVerifyEmailCooldown();
|
|
3599
3629
|
},
|
|
3600
3630
|
this.t("verificationSent")
|
|
3601
3631
|
);
|
|
@@ -3622,7 +3652,7 @@ let p = class extends A {
|
|
|
3622
3652
|
async () => {
|
|
3623
3653
|
await n.updatePassword(this.newPassword, this.oldPassword), this.oldPassword = this.newPassword = this.newPasswordConfirm = "";
|
|
3624
3654
|
},
|
|
3625
|
-
this.t("
|
|
3655
|
+
this.t("passwordChanged")
|
|
3626
3656
|
);
|
|
3627
3657
|
}
|
|
3628
3658
|
}, this.onToggleMfa = () => {
|
|
@@ -3692,9 +3722,12 @@ let p = class extends A {
|
|
|
3692
3722
|
}, this.onStepUpVerify = (e) => {
|
|
3693
3723
|
if (e.preventDefault(), !this.requireValid(e)) return;
|
|
3694
3724
|
const t = this.stepUp;
|
|
3695
|
-
t?.challenge &&
|
|
3696
|
-
|
|
3697
|
-
|
|
3725
|
+
t?.challenge && (async () => {
|
|
3726
|
+
let i = !1;
|
|
3727
|
+
await this.run("stepup-code", async () => {
|
|
3728
|
+
await n.completeMfaChallenge(t.challenge.id, this.stepUpCode, { signIn: !1 }), this.stepUp = null, this.stepUpCode = "", i = !0;
|
|
3729
|
+
}), i && await t.retry();
|
|
3730
|
+
})();
|
|
3698
3731
|
}, this.onDeleteSession = (e) => {
|
|
3699
3732
|
this.run(`session-${e}`, async () => {
|
|
3700
3733
|
if ((this.sessions ?? []).some((i) => i.$id === e && i.current)) {
|
|
@@ -3724,6 +3757,9 @@ let p = class extends A {
|
|
|
3724
3757
|
connectedCallback() {
|
|
3725
3758
|
super.connectedCallback(), this.active = this.tab, this.hydrate();
|
|
3726
3759
|
}
|
|
3760
|
+
disconnectedCallback() {
|
|
3761
|
+
super.disconnectedCallback(), this.clearVerifyEmailCooldownTimer(), this.noticeTimer && (clearTimeout(this.noticeTimer), this.noticeTimer = null);
|
|
3762
|
+
}
|
|
3727
3763
|
willUpdate(e) {
|
|
3728
3764
|
e.has("tab") && e.get("tab") !== void 0 && (this.active = this.tab), e.has("auth") && this.hydrate(), this.ensureLoaded();
|
|
3729
3765
|
}
|
|
@@ -3835,6 +3871,14 @@ let p = class extends A {
|
|
|
3835
3871
|
}
|
|
3836
3872
|
}
|
|
3837
3873
|
}
|
|
3874
|
+
startVerifyEmailCooldown() {
|
|
3875
|
+
this.verifyEmailCooldownUntil = Date.now() + 45e3, this.clearVerifyEmailCooldownTimer(), this.verifyEmailCooldownTimer = setInterval(() => {
|
|
3876
|
+
this.requestUpdate(), Date.now() >= this.verifyEmailCooldownUntil && this.clearVerifyEmailCooldownTimer();
|
|
3877
|
+
}, 1e3);
|
|
3878
|
+
}
|
|
3879
|
+
clearVerifyEmailCooldownTimer() {
|
|
3880
|
+
this.verifyEmailCooldownTimer && (clearInterval(this.verifyEmailCooldownTimer), this.verifyEmailCooldownTimer = null);
|
|
3881
|
+
}
|
|
3838
3882
|
bind(e) {
|
|
3839
3883
|
return (t) => {
|
|
3840
3884
|
this[e] = t.target.value;
|
|
@@ -3844,7 +3888,7 @@ let p = class extends A {
|
|
|
3844
3888
|
render() {
|
|
3845
3889
|
if (!this.auth.configured)
|
|
3846
3890
|
return r`<div class="alert alert-error" role="alert">
|
|
3847
|
-
${
|
|
3891
|
+
${l.alert}
|
|
3848
3892
|
<div class="alert-body">${this.t("errorNotConfigured")}</div>
|
|
3849
3893
|
</div>`;
|
|
3850
3894
|
if (this.auth.status === "loading")
|
|
@@ -3881,7 +3925,7 @@ let p = class extends A {
|
|
|
3881
3925
|
)}
|
|
3882
3926
|
</div>
|
|
3883
3927
|
${this.notice ? r`<div class="alert alert-${this.notice.tone}" role="status">
|
|
3884
|
-
${this.notice.tone === "success" ?
|
|
3928
|
+
${this.notice.tone === "success" ? l.checkCircle : l.info}
|
|
3885
3929
|
<div class="alert-body">${this.notice.message}</div>
|
|
3886
3930
|
<button
|
|
3887
3931
|
class="btn btn-ghost btn-icon dismiss"
|
|
@@ -3890,7 +3934,7 @@ let p = class extends A {
|
|
|
3890
3934
|
}}
|
|
3891
3935
|
aria-label=${this.t("close")}
|
|
3892
3936
|
>
|
|
3893
|
-
${
|
|
3937
|
+
${l.x}
|
|
3894
3938
|
</button>
|
|
3895
3939
|
</div>` : o}
|
|
3896
3940
|
${this.stepUp ? this.renderStepUp() : r`<div
|
|
@@ -3909,18 +3953,18 @@ let p = class extends A {
|
|
|
3909
3953
|
return r`
|
|
3910
3954
|
<div class="between">
|
|
3911
3955
|
<div class="identity">
|
|
3912
|
-
<span class="avatar">${
|
|
3956
|
+
<span class="avatar">${nt(t)}</span>
|
|
3913
3957
|
<div class="row-main">
|
|
3914
3958
|
<span class="row-title" title=${t}>
|
|
3915
3959
|
${t}
|
|
3916
|
-
${e.mfa ? r`<span class="badge badge-success">${
|
|
3960
|
+
${e.mfa ? r`<span class="badge badge-success">${l.shieldCheck} ${this.t("mfaBadge")}</span>` : o}
|
|
3917
3961
|
${n.isPreview ? r`<span class="badge badge-info">${this.t("preview")}</span>` : o}
|
|
3918
3962
|
</span>
|
|
3919
3963
|
${e.email && e.name ? r`<span class="row-sub" title=${e.email}>${e.email}</span>` : o}
|
|
3920
3964
|
</div>
|
|
3921
3965
|
</div>
|
|
3922
3966
|
<button class="btn btn-outline btn-sm" @click=${() => n.signOut()}>
|
|
3923
|
-
${
|
|
3967
|
+
${l.logOut} ${this.t("signOut")}
|
|
3924
3968
|
</button>
|
|
3925
3969
|
</div>
|
|
3926
3970
|
`;
|
|
@@ -3942,7 +3986,7 @@ let p = class extends A {
|
|
|
3942
3986
|
error(e) {
|
|
3943
3987
|
const t = this.errors[e];
|
|
3944
3988
|
return t ? r`<div class="alert alert-error" role="alert">
|
|
3945
|
-
${
|
|
3989
|
+
${l.alert}
|
|
3946
3990
|
<div class="alert-body">${t}</div>
|
|
3947
3991
|
</div>` : o;
|
|
3948
3992
|
}
|
|
@@ -3960,7 +4004,7 @@ let p = class extends A {
|
|
|
3960
4004
|
</section>`;
|
|
3961
4005
|
}
|
|
3962
4006
|
verifiedBadge(e) {
|
|
3963
|
-
return e ? r`<span class="badge badge-success">${
|
|
4007
|
+
return e ? r`<span class="badge badge-success">${l.check} ${this.t("verified")}</span>` : r`<span class="badge badge-warning">${this.t("unverified")}</span>`;
|
|
3964
4008
|
}
|
|
3965
4009
|
// ── Profile ──
|
|
3966
4010
|
renderProfile() {
|
|
@@ -4005,7 +4049,7 @@ let p = class extends A {
|
|
|
4005
4049
|
autocomplete="new-password"
|
|
4006
4050
|
/>
|
|
4007
4051
|
${this.emailPassword ? (() => {
|
|
4008
|
-
const t =
|
|
4052
|
+
const t = it(this.emailPassword);
|
|
4009
4053
|
return r`<div class="strength" aria-live="polite">
|
|
4010
4054
|
<div
|
|
4011
4055
|
class="strength-meter"
|
|
@@ -4225,7 +4269,7 @@ let p = class extends A {
|
|
|
4225
4269
|
class="btn btn-outline btn-sm warn"
|
|
4226
4270
|
@click=${() => this.confirmDelete = !0}
|
|
4227
4271
|
>
|
|
4228
|
-
${
|
|
4272
|
+
${l.userX} ${this.t("deleteAccount")}
|
|
4229
4273
|
</button>`}`,
|
|
4230
4274
|
void 0,
|
|
4231
4275
|
!0
|
|
@@ -4271,7 +4315,7 @@ let p = class extends A {
|
|
|
4271
4315
|
autocomplete="new-password"
|
|
4272
4316
|
/>
|
|
4273
4317
|
${this.newPassword ? (() => {
|
|
4274
|
-
const i =
|
|
4318
|
+
const i = it(this.newPassword);
|
|
4275
4319
|
return r`<div class="strength" aria-live="polite">
|
|
4276
4320
|
<div
|
|
4277
4321
|
class="strength-meter"
|
|
@@ -4320,7 +4364,7 @@ let p = class extends A {
|
|
|
4320
4364
|
</div>`;
|
|
4321
4365
|
}
|
|
4322
4366
|
renderMfaCard() {
|
|
4323
|
-
const e = this.user, t = this.factors?.totp ?? !1, i = this.authenticator ? n.isPreview ?
|
|
4367
|
+
const e = this.user, t = this.factors?.totp ?? !1, i = this.authenticator ? n.isPreview ? Et(this.authenticator.uri) : new kt(n.getClient()).getQR(this.authenticator.uri, 400, 1).toString() : "";
|
|
4324
4368
|
return this.card(
|
|
4325
4369
|
this.t("twoFactor"),
|
|
4326
4370
|
this.t("twoFactorDescription"),
|
|
@@ -4340,7 +4384,7 @@ let p = class extends A {
|
|
|
4340
4384
|
></button>
|
|
4341
4385
|
</div>
|
|
4342
4386
|
${e.mfa && !(this.factors?.totp || e.emailVerification || e.phoneVerification) ? r`<div class="alert alert-warning" role="status">
|
|
4343
|
-
${
|
|
4387
|
+
${l.alert}
|
|
4344
4388
|
<div class="alert-body">
|
|
4345
4389
|
${this.t("mfaNoFactorWarning")}
|
|
4346
4390
|
${this.factors?.totp ? o : r`<div class="links">
|
|
@@ -4360,7 +4404,7 @@ let p = class extends A {
|
|
|
4360
4404
|
<div class="toggle-row">
|
|
4361
4405
|
<div class="row-main">
|
|
4362
4406
|
<span class="row-title"
|
|
4363
|
-
>${
|
|
4407
|
+
>${l.smartphone} ${this.t("authenticatorApp")}
|
|
4364
4408
|
${t ? this.verifiedBadge(!0) : o}</span
|
|
4365
4409
|
>
|
|
4366
4410
|
</div>
|
|
@@ -4408,7 +4452,7 @@ let p = class extends A {
|
|
|
4408
4452
|
this.onCopySecret();
|
|
4409
4453
|
}}
|
|
4410
4454
|
>
|
|
4411
|
-
${this.copied ?
|
|
4455
|
+
${this.copied ? l.check : l.copy}
|
|
4412
4456
|
${this.copied ? this.t("copied") : this.t("authenticatorCopyKey")}
|
|
4413
4457
|
</button>
|
|
4414
4458
|
</div>
|
|
@@ -4450,7 +4494,7 @@ let p = class extends A {
|
|
|
4450
4494
|
this.t("recoveryCodesDescription") + " " + this.t("recoveryCodesOnceHint"),
|
|
4451
4495
|
r`<div class="kv">
|
|
4452
4496
|
${this.recoveryCodes ? r`<div class="alert alert-warning">
|
|
4453
|
-
${
|
|
4497
|
+
${l.alert}
|
|
4454
4498
|
<div class="alert-body">${this.t("recoveryCodesWarning")}</div>
|
|
4455
4499
|
</div>
|
|
4456
4500
|
<div class="codes">
|
|
@@ -4458,7 +4502,7 @@ let p = class extends A {
|
|
|
4458
4502
|
</div>
|
|
4459
4503
|
<div class="inline">
|
|
4460
4504
|
<button class="btn btn-outline btn-sm" @click=${this.onCopyCodes}>
|
|
4461
|
-
${this.copied ?
|
|
4505
|
+
${this.copied ? l.check : l.copy}
|
|
4462
4506
|
${this.copied ? this.t("copied") : this.t("copy")}
|
|
4463
4507
|
</button>
|
|
4464
4508
|
<button class="btn btn-ghost btn-sm" @click=${() => this.recoveryCodes = null}>
|
|
@@ -4470,7 +4514,7 @@ let p = class extends A {
|
|
|
4470
4514
|
@click=${this.onRecoveryCodes}
|
|
4471
4515
|
?disabled=${!!this.busy}
|
|
4472
4516
|
>
|
|
4473
|
-
${this.spinner("recovery")} ${
|
|
4517
|
+
${this.spinner("recovery")} ${l.key}
|
|
4474
4518
|
${e ? this.t("viewRecoveryCodes") : this.t("generateRecoveryCodes")}
|
|
4475
4519
|
</button>
|
|
4476
4520
|
${e ? this.confirmRegenerate ? r`<div class="inline">
|
|
@@ -4479,7 +4523,7 @@ let p = class extends A {
|
|
|
4479
4523
|
@click=${this.onRegenerateRecoveryCodes}
|
|
4480
4524
|
?disabled=${!!this.busy}
|
|
4481
4525
|
>
|
|
4482
|
-
${
|
|
4526
|
+
${l.refresh} ${this.t("regenerateRecoveryCodes")}
|
|
4483
4527
|
</button>
|
|
4484
4528
|
<button
|
|
4485
4529
|
class="btn btn-ghost btn-sm"
|
|
@@ -4492,7 +4536,7 @@ let p = class extends A {
|
|
|
4492
4536
|
@click=${this.onRegenerateRecoveryCodes}
|
|
4493
4537
|
?disabled=${!!this.busy}
|
|
4494
4538
|
>
|
|
4495
|
-
${
|
|
4539
|
+
${l.refresh} ${this.t("regenerateRecoveryCodes")}
|
|
4496
4540
|
</button>` : o}
|
|
4497
4541
|
</div>`}
|
|
4498
4542
|
${this.error("recovery")}
|
|
@@ -4504,25 +4548,25 @@ let p = class extends A {
|
|
|
4504
4548
|
const e = this.stepUp, t = this.factors, i = [
|
|
4505
4549
|
{
|
|
4506
4550
|
factor: "totp",
|
|
4507
|
-
icon:
|
|
4551
|
+
icon: l.smartphone,
|
|
4508
4552
|
label: this.t("mfaUseAuthenticator"),
|
|
4509
4553
|
available: t?.totp ?? !0
|
|
4510
4554
|
},
|
|
4511
4555
|
{
|
|
4512
4556
|
factor: "email",
|
|
4513
|
-
icon:
|
|
4557
|
+
icon: l.mail,
|
|
4514
4558
|
label: this.t("mfaUseEmail"),
|
|
4515
4559
|
available: t?.email ?? !0
|
|
4516
4560
|
},
|
|
4517
4561
|
{
|
|
4518
4562
|
factor: "phone",
|
|
4519
|
-
icon:
|
|
4563
|
+
icon: l.phone,
|
|
4520
4564
|
label: this.t("mfaUsePhone"),
|
|
4521
4565
|
available: t?.phone ?? !0
|
|
4522
4566
|
},
|
|
4523
4567
|
{
|
|
4524
4568
|
factor: "recoverycode",
|
|
4525
|
-
icon:
|
|
4569
|
+
icon: l.key,
|
|
4526
4570
|
label: this.t("mfaUseRecoveryCode"),
|
|
4527
4571
|
available: t?.recoveryCode ?? !0
|
|
4528
4572
|
}
|
|
@@ -4573,7 +4617,7 @@ let p = class extends A {
|
|
|
4573
4617
|
// ── Sessions ──
|
|
4574
4618
|
deviceIcon(e) {
|
|
4575
4619
|
const t = (e.deviceName || "").toLowerCase(), i = (e.osName || e.osCode || "").toLowerCase();
|
|
4576
|
-
return /phone|tablet|mobile/.test(t) || /ios|android|ipados/.test(i) ?
|
|
4620
|
+
return /phone|tablet|mobile/.test(t) || /ios|android|ipados/.test(i) ? l.smartphone : /desktop|browser/.test(t) || /mac|windows|linux|chrome os/.test(i) ? l.monitor : l.globe;
|
|
4577
4621
|
}
|
|
4578
4622
|
renderSessions() {
|
|
4579
4623
|
const e = this.sessions;
|
|
@@ -4605,7 +4649,7 @@ let p = class extends A {
|
|
|
4605
4649
|
?disabled=${!!this.busy}
|
|
4606
4650
|
aria-label=${this.t("signOutSession")}
|
|
4607
4651
|
>
|
|
4608
|
-
${
|
|
4652
|
+
${l.logOut}
|
|
4609
4653
|
</button>
|
|
4610
4654
|
</div>
|
|
4611
4655
|
</div>`
|
|
@@ -4621,7 +4665,7 @@ let p = class extends A {
|
|
|
4621
4665
|
@click=${this.onSignOutAll}
|
|
4622
4666
|
?disabled=${!!this.busy}
|
|
4623
4667
|
>
|
|
4624
|
-
${this.spinner("sessions-all")} ${
|
|
4668
|
+
${this.spinner("sessions-all")} ${l.logOut} ${this.t("signOutAllSessions")}
|
|
4625
4669
|
</button>
|
|
4626
4670
|
<button
|
|
4627
4671
|
class="btn btn-ghost btn-sm"
|
|
@@ -4634,7 +4678,7 @@ let p = class extends A {
|
|
|
4634
4678
|
@click=${this.onSignOutAll}
|
|
4635
4679
|
?disabled=${!!this.busy}
|
|
4636
4680
|
>
|
|
4637
|
-
${this.spinner("sessions-all")} ${
|
|
4681
|
+
${this.spinner("sessions-all")} ${l.logOut} ${this.t("signOutAllSessions")}
|
|
4638
4682
|
</button>`}`,
|
|
4639
4683
|
void 0,
|
|
4640
4684
|
!0
|
|
@@ -4652,7 +4696,7 @@ let p = class extends A {
|
|
|
4652
4696
|
${e === null ? r`<div class="empty"><span class="spinner"></span></div>` : e.length === 0 ? r`<div class="empty">${this.t("noConnections")}</div>` : e.map(
|
|
4653
4697
|
(i) => r`<div class="row">
|
|
4654
4698
|
<div class="inline">
|
|
4655
|
-
<span class="device">${
|
|
4699
|
+
<span class="device">${et(i.provider)}</span>
|
|
4656
4700
|
<div class="row-main">
|
|
4657
4701
|
<span class="row-title">${q(i.provider)}</span>
|
|
4658
4702
|
<span class="row-sub">${i.providerEmail || i.providerUid}</span>
|
|
@@ -4693,7 +4737,7 @@ let p = class extends A {
|
|
|
4693
4737
|
}}
|
|
4694
4738
|
?disabled=${!!this.busy}
|
|
4695
4739
|
>
|
|
4696
|
-
${this.spinner(`connect-${i}`)} ${
|
|
4740
|
+
${this.spinner(`connect-${i}`)} ${et(i)}
|
|
4697
4741
|
${this.t("connectProvider", { provider: q(i) })}
|
|
4698
4742
|
</button>`
|
|
4699
4743
|
)}` : void 0
|
|
@@ -4723,8 +4767,8 @@ let p = class extends A {
|
|
|
4723
4767
|
}
|
|
4724
4768
|
};
|
|
4725
4769
|
p.styles = [
|
|
4726
|
-
...
|
|
4727
|
-
|
|
4770
|
+
...E.styles,
|
|
4771
|
+
O`
|
|
4728
4772
|
:host {
|
|
4729
4773
|
display: block;
|
|
4730
4774
|
width: 100%;
|
|
@@ -4827,115 +4871,123 @@ m([
|
|
|
4827
4871
|
g({ type: String })
|
|
4828
4872
|
], p.prototype, "tab", 2);
|
|
4829
4873
|
m([
|
|
4830
|
-
|
|
4874
|
+
d()
|
|
4831
4875
|
], p.prototype, "active", 2);
|
|
4832
4876
|
m([
|
|
4833
|
-
|
|
4877
|
+
d()
|
|
4834
4878
|
], p.prototype, "busy", 2);
|
|
4835
4879
|
m([
|
|
4836
|
-
|
|
4880
|
+
d()
|
|
4837
4881
|
], p.prototype, "notice", 2);
|
|
4838
4882
|
m([
|
|
4839
|
-
|
|
4883
|
+
d()
|
|
4840
4884
|
], p.prototype, "errors", 2);
|
|
4841
4885
|
m([
|
|
4842
|
-
|
|
4886
|
+
d()
|
|
4843
4887
|
], p.prototype, "nameInput", 2);
|
|
4844
4888
|
m([
|
|
4845
|
-
|
|
4889
|
+
d()
|
|
4846
4890
|
], p.prototype, "emailInput", 2);
|
|
4847
4891
|
m([
|
|
4848
|
-
|
|
4892
|
+
d()
|
|
4849
4893
|
], p.prototype, "emailPassword", 2);
|
|
4850
4894
|
m([
|
|
4851
|
-
|
|
4895
|
+
d()
|
|
4852
4896
|
], p.prototype, "phoneInput", 2);
|
|
4853
4897
|
m([
|
|
4854
|
-
|
|
4898
|
+
d()
|
|
4855
4899
|
], p.prototype, "phonePassword", 2);
|
|
4856
4900
|
m([
|
|
4857
|
-
|
|
4901
|
+
d()
|
|
4858
4902
|
], p.prototype, "phoneCode", 2);
|
|
4859
4903
|
m([
|
|
4860
|
-
|
|
4904
|
+
d()
|
|
4861
4905
|
], p.prototype, "phoneCodeSent", 2);
|
|
4862
4906
|
m([
|
|
4863
|
-
|
|
4907
|
+
d()
|
|
4864
4908
|
], p.prototype, "guestName", 2);
|
|
4865
4909
|
m([
|
|
4866
|
-
|
|
4910
|
+
d()
|
|
4867
4911
|
], p.prototype, "oldPassword", 2);
|
|
4868
4912
|
m([
|
|
4869
|
-
|
|
4913
|
+
d()
|
|
4870
4914
|
], p.prototype, "newPassword", 2);
|
|
4871
4915
|
m([
|
|
4872
|
-
|
|
4916
|
+
d()
|
|
4873
4917
|
], p.prototype, "newPasswordConfirm", 2);
|
|
4874
4918
|
m([
|
|
4875
|
-
|
|
4919
|
+
d()
|
|
4876
4920
|
], p.prototype, "authenticator", 2);
|
|
4877
4921
|
m([
|
|
4878
|
-
|
|
4922
|
+
d()
|
|
4879
4923
|
], p.prototype, "authenticatorCode", 2);
|
|
4880
4924
|
m([
|
|
4881
|
-
|
|
4925
|
+
d()
|
|
4882
4926
|
], p.prototype, "factors", 2);
|
|
4883
4927
|
m([
|
|
4884
|
-
|
|
4928
|
+
d()
|
|
4885
4929
|
], p.prototype, "recoveryCodes", 2);
|
|
4886
4930
|
m([
|
|
4887
|
-
|
|
4931
|
+
d()
|
|
4888
4932
|
], p.prototype, "stepUp", 2);
|
|
4889
4933
|
m([
|
|
4890
|
-
|
|
4934
|
+
d()
|
|
4891
4935
|
], p.prototype, "stepUpCode", 2);
|
|
4892
4936
|
m([
|
|
4893
|
-
|
|
4937
|
+
d()
|
|
4894
4938
|
], p.prototype, "copied", 2);
|
|
4895
4939
|
m([
|
|
4896
|
-
|
|
4940
|
+
d()
|
|
4897
4941
|
], p.prototype, "sessions", 2);
|
|
4898
4942
|
m([
|
|
4899
|
-
|
|
4943
|
+
d()
|
|
4900
4944
|
], p.prototype, "identities", 2);
|
|
4901
4945
|
m([
|
|
4902
|
-
|
|
4946
|
+
d()
|
|
4903
4947
|
], p.prototype, "logs", 2);
|
|
4904
4948
|
m([
|
|
4905
|
-
|
|
4949
|
+
d()
|
|
4906
4950
|
], p.prototype, "logsSupported", 2);
|
|
4907
4951
|
m([
|
|
4908
|
-
|
|
4952
|
+
d()
|
|
4909
4953
|
], p.prototype, "confirmDelete", 2);
|
|
4910
4954
|
m([
|
|
4911
|
-
|
|
4955
|
+
d()
|
|
4912
4956
|
], p.prototype, "confirmRegenerate", 2);
|
|
4913
4957
|
m([
|
|
4914
|
-
|
|
4958
|
+
d()
|
|
4915
4959
|
], p.prototype, "confirmRemoveAuthenticator", 2);
|
|
4916
4960
|
m([
|
|
4917
|
-
|
|
4961
|
+
d()
|
|
4918
4962
|
], p.prototype, "confirmSignOutAll", 2);
|
|
4919
4963
|
m([
|
|
4920
|
-
|
|
4964
|
+
d()
|
|
4921
4965
|
], p.prototype, "confirmDisconnectId", 2);
|
|
4922
4966
|
m([
|
|
4923
|
-
|
|
4967
|
+
d()
|
|
4924
4968
|
], p.prototype, "verifyEmailCooldownUntil", 2);
|
|
4925
4969
|
p = m([
|
|
4926
|
-
|
|
4970
|
+
R("authui-account")
|
|
4927
4971
|
], p);
|
|
4928
|
-
var
|
|
4929
|
-
for (var a = s > 1 ? void 0 : s ?
|
|
4930
|
-
(u = e[
|
|
4931
|
-
return s && a &&
|
|
4972
|
+
var Xt = Object.defineProperty, Qt = Object.getOwnPropertyDescriptor, F = (e, t, i, s) => {
|
|
4973
|
+
for (var a = s > 1 ? void 0 : s ? Qt(t, i) : t, c = e.length - 1, u; c >= 0; c--)
|
|
4974
|
+
(u = e[c]) && (a = (s ? u(t, i, a) : u(a)) || a);
|
|
4975
|
+
return s && a && Xt(t, i, a), a;
|
|
4932
4976
|
};
|
|
4933
|
-
let
|
|
4977
|
+
let P = class extends E {
|
|
4934
4978
|
constructor() {
|
|
4935
|
-
super(...arguments), this.open = !1, this.view = "sign-in", this.closeOnSuccess = !0, this.handledPending = null, this.onOpenEvent = (e) => {
|
|
4979
|
+
super(...arguments), this.open = !1, this.view = "sign-in", this.closeOnSuccess = !0, this.handledPending = null, this.scrollCue = !1, this.bodyResizeObserver = null, this.onOpenEvent = (e) => {
|
|
4936
4980
|
const t = e.detail ?? {};
|
|
4937
4981
|
this.show(t.view);
|
|
4938
|
-
}, this.onCloseEvent = () => this.hide(), this.
|
|
4982
|
+
}, this.onCloseEvent = () => this.hide(), this.syncScrollCue = () => {
|
|
4983
|
+
const e = this.bodyEl;
|
|
4984
|
+
if (!e) {
|
|
4985
|
+
this.scrollCue = !1;
|
|
4986
|
+
return;
|
|
4987
|
+
}
|
|
4988
|
+
const t = e.scrollHeight > e.clientHeight + 1, i = e.scrollTop + e.clientHeight >= e.scrollHeight - 4, s = t && !i;
|
|
4989
|
+
s !== this.scrollCue && (this.scrollCue = s);
|
|
4990
|
+
}, this.onSuccess = () => {
|
|
4939
4991
|
this.fire("authui-signed-in", this.auth.user), this.closeOnSuccess && !this.config?.successUrl && this.hide();
|
|
4940
4992
|
}, this.onInnerOpen = (e) => {
|
|
4941
4993
|
const t = e.detail?.view;
|
|
@@ -4948,7 +5000,7 @@ let M = class extends A {
|
|
|
4948
5000
|
super.connectedCallback(), window.addEventListener("authui:open", this.onOpenEvent), window.addEventListener("authui:close", this.onCloseEvent);
|
|
4949
5001
|
}
|
|
4950
5002
|
disconnectedCallback() {
|
|
4951
|
-
super.disconnectedCallback(), window.removeEventListener("authui:open", this.onOpenEvent), window.removeEventListener("authui:close", this.onCloseEvent);
|
|
5003
|
+
super.disconnectedCallback(), window.removeEventListener("authui:open", this.onOpenEvent), window.removeEventListener("authui:close", this.onCloseEvent), this.bodyResizeObserver?.disconnect(), this.bodyResizeObserver = null;
|
|
4952
5004
|
}
|
|
4953
5005
|
show(e) {
|
|
4954
5006
|
e === "account" && this.auth.status !== "signed-in" ? this.view = "sign-in" : e ? this.view = e : this.auth.status === "signed-in" ? this.view = "account" : this.view = "sign-in", this.open = !0;
|
|
@@ -4956,11 +5008,23 @@ let M = class extends A {
|
|
|
4956
5008
|
hide() {
|
|
4957
5009
|
this.open = !1;
|
|
4958
5010
|
}
|
|
5011
|
+
observeBody() {
|
|
5012
|
+
this.bodyResizeObserver?.disconnect(), this.bodyResizeObserver = null;
|
|
5013
|
+
const e = this.bodyEl;
|
|
5014
|
+
if (!e || typeof ResizeObserver > "u") {
|
|
5015
|
+
this.syncScrollCue();
|
|
5016
|
+
return;
|
|
5017
|
+
}
|
|
5018
|
+
this.bodyResizeObserver = new ResizeObserver(() => this.syncScrollCue()), this.bodyResizeObserver.observe(e), e.firstElementChild && this.bodyResizeObserver.observe(e.firstElementChild), this.syncScrollCue();
|
|
5019
|
+
}
|
|
4959
5020
|
updated(e) {
|
|
4960
|
-
if (e.has("open") && this.dialog && (this.open && !this.dialog.open && (this.dialog.showModal(), requestAnimationFrame(() =>
|
|
5021
|
+
if (e.has("open") && this.dialog && (this.open && !this.dialog.open && (this.dialog.showModal(), requestAnimationFrame(() => {
|
|
5022
|
+
this.focusPrimary(), this.observeBody();
|
|
5023
|
+
})), !this.open && this.dialog.open && this.dialog.close(), this.open || (this.scrollCue = !1, this.bodyResizeObserver?.disconnect(), this.bodyResizeObserver = null)), e.has("auth")) {
|
|
4961
5024
|
const t = this.auth.pending;
|
|
4962
5025
|
t && t !== this.handledPending && t.type !== "notice" && (this.handledPending = t, this.view = "sign-in", this.open = !0), t?.type === "notice" && t !== this.handledPending && (this.handledPending = t, this.open = !0), this.open && this.view === "account" && this.auth.status !== "signed-in" && (this.view = "sign-in"), this.open && this.auth.status === "signed-out" && this.view === "account" && (this.view = "sign-in");
|
|
4963
5026
|
}
|
|
5027
|
+
this.open && (e.has("view") || e.has("auth") || e.has("open")) && requestAnimationFrame(() => this.observeBody());
|
|
4964
5028
|
}
|
|
4965
5029
|
focusPrimary() {
|
|
4966
5030
|
const e = this.dialog;
|
|
@@ -4984,26 +5048,31 @@ let M = class extends A {
|
|
|
4984
5048
|
@authui-open=${this.onInnerOpen}
|
|
4985
5049
|
@authui-success=${this.onSuccess}
|
|
4986
5050
|
>
|
|
4987
|
-
<div class="
|
|
4988
|
-
<
|
|
4989
|
-
|
|
4990
|
-
|
|
4991
|
-
|
|
4992
|
-
|
|
4993
|
-
|
|
4994
|
-
|
|
4995
|
-
|
|
4996
|
-
|
|
4997
|
-
|
|
4998
|
-
|
|
5051
|
+
<div class="frame">
|
|
5052
|
+
<div class="chrome">
|
|
5053
|
+
<button
|
|
5054
|
+
class="btn btn-ghost btn-icon close"
|
|
5055
|
+
@click=${this.hide}
|
|
5056
|
+
aria-label=${this.t("close")}
|
|
5057
|
+
>
|
|
5058
|
+
${l.x}
|
|
5059
|
+
</button>
|
|
5060
|
+
</div>
|
|
5061
|
+
<div class="body" @scroll=${this.syncScrollCue}>
|
|
5062
|
+
${this.open ? t ? r`<authui-account embedded></authui-account>` : r`<authui-sign-in
|
|
5063
|
+
embedded
|
|
5064
|
+
.view=${this.view === "account" ? "sign-in" : this.view}
|
|
5065
|
+
></authui-sign-in>` : o}
|
|
5066
|
+
</div>
|
|
5067
|
+
<div class="scroll-fade ${this.scrollCue ? "show" : ""}" aria-hidden="true"></div>
|
|
4999
5068
|
</div>
|
|
5000
5069
|
</dialog>
|
|
5001
5070
|
`;
|
|
5002
5071
|
}
|
|
5003
5072
|
};
|
|
5004
|
-
|
|
5005
|
-
...
|
|
5006
|
-
|
|
5073
|
+
P.styles = [
|
|
5074
|
+
...E.styles,
|
|
5075
|
+
O`
|
|
5007
5076
|
:host {
|
|
5008
5077
|
display: contents;
|
|
5009
5078
|
}
|
|
@@ -5040,15 +5109,29 @@ M.styles = [
|
|
|
5040
5109
|
transform: none;
|
|
5041
5110
|
}
|
|
5042
5111
|
}
|
|
5043
|
-
.
|
|
5044
|
-
|
|
5112
|
+
.frame {
|
|
5113
|
+
display: flex;
|
|
5114
|
+
flex-direction: column;
|
|
5045
5115
|
max-height: calc(100dvh - 2rem);
|
|
5116
|
+
min-height: 0;
|
|
5117
|
+
position: relative;
|
|
5118
|
+
}
|
|
5119
|
+
.chrome {
|
|
5120
|
+
flex-shrink: 0;
|
|
5121
|
+
display: flex;
|
|
5122
|
+
justify-content: flex-end;
|
|
5123
|
+
align-items: center;
|
|
5124
|
+
padding: 8px 8px 0;
|
|
5125
|
+
background: var(--authui-background);
|
|
5126
|
+
}
|
|
5127
|
+
.body {
|
|
5128
|
+
padding: 4px 24px 28px;
|
|
5046
5129
|
overflow-y: auto;
|
|
5130
|
+
flex: 1 1 auto;
|
|
5131
|
+
min-height: 0;
|
|
5132
|
+
-webkit-overflow-scrolling: touch;
|
|
5047
5133
|
}
|
|
5048
5134
|
.close {
|
|
5049
|
-
position: absolute;
|
|
5050
|
-
top: 12px;
|
|
5051
|
-
inset-inline-end: 12px;
|
|
5052
5135
|
width: 32px;
|
|
5053
5136
|
height: 32px;
|
|
5054
5137
|
border-radius: var(--authui-radius-sm);
|
|
@@ -5057,36 +5140,56 @@ M.styles = [
|
|
|
5057
5140
|
.close:hover {
|
|
5058
5141
|
opacity: 1;
|
|
5059
5142
|
}
|
|
5143
|
+
.scroll-fade {
|
|
5144
|
+
pointer-events: none;
|
|
5145
|
+
position: absolute;
|
|
5146
|
+
inset-inline: 0;
|
|
5147
|
+
bottom: 0;
|
|
5148
|
+
height: 40px;
|
|
5149
|
+
border-radius: 0 0 var(--authui-radius-lg) var(--authui-radius-lg);
|
|
5150
|
+
background: linear-gradient(to top, var(--authui-background), transparent);
|
|
5151
|
+
opacity: 0;
|
|
5152
|
+
transition: opacity 150ms;
|
|
5153
|
+
}
|
|
5154
|
+
.scroll-fade.show {
|
|
5155
|
+
opacity: 1;
|
|
5156
|
+
}
|
|
5060
5157
|
authui-sign-in,
|
|
5061
5158
|
authui-account {
|
|
5062
5159
|
max-width: none;
|
|
5063
5160
|
}
|
|
5064
5161
|
`
|
|
5065
5162
|
];
|
|
5066
|
-
|
|
5163
|
+
F([
|
|
5067
5164
|
g({ type: Boolean, reflect: !0 })
|
|
5068
|
-
],
|
|
5069
|
-
|
|
5165
|
+
], P.prototype, "open", 2);
|
|
5166
|
+
F([
|
|
5070
5167
|
g({ type: String })
|
|
5071
|
-
],
|
|
5072
|
-
|
|
5168
|
+
], P.prototype, "view", 2);
|
|
5169
|
+
F([
|
|
5073
5170
|
g({ type: Boolean, attribute: "close-on-success" })
|
|
5074
|
-
],
|
|
5075
|
-
|
|
5076
|
-
|
|
5077
|
-
],
|
|
5078
|
-
|
|
5079
|
-
|
|
5080
|
-
],
|
|
5081
|
-
|
|
5082
|
-
|
|
5083
|
-
],
|
|
5084
|
-
|
|
5085
|
-
|
|
5086
|
-
|
|
5087
|
-
|
|
5171
|
+
], P.prototype, "closeOnSuccess", 2);
|
|
5172
|
+
F([
|
|
5173
|
+
d()
|
|
5174
|
+
], P.prototype, "handledPending", 2);
|
|
5175
|
+
F([
|
|
5176
|
+
d()
|
|
5177
|
+
], P.prototype, "scrollCue", 2);
|
|
5178
|
+
F([
|
|
5179
|
+
st("dialog")
|
|
5180
|
+
], P.prototype, "dialog", 2);
|
|
5181
|
+
F([
|
|
5182
|
+
st(".body")
|
|
5183
|
+
], P.prototype, "bodyEl", 2);
|
|
5184
|
+
P = F([
|
|
5185
|
+
R("authui-modal")
|
|
5186
|
+
], P);
|
|
5187
|
+
var Jt = Object.defineProperty, te = Object.getOwnPropertyDescriptor, X = (e, t, i, s) => {
|
|
5188
|
+
for (var a = s > 1 ? void 0 : s ? te(t, i) : t, c = e.length - 1, u; c >= 0; c--)
|
|
5189
|
+
(u = e[c]) && (a = (s ? u(t, i, a) : u(a)) || a);
|
|
5190
|
+
return s && a && Jt(t, i, a), a;
|
|
5088
5191
|
};
|
|
5089
|
-
let
|
|
5192
|
+
let L = class extends E {
|
|
5090
5193
|
constructor() {
|
|
5091
5194
|
super(...arguments), this.view = "sign-in", this.variant = "primary", this.size = "md";
|
|
5092
5195
|
}
|
|
@@ -5094,7 +5197,7 @@ let z = class extends A {
|
|
|
5094
5197
|
const e = this.size === "md" ? "" : `btn-${this.size}`;
|
|
5095
5198
|
return r`<button
|
|
5096
5199
|
class="btn btn-${this.variant} ${e}"
|
|
5097
|
-
@click=${() =>
|
|
5200
|
+
@click=${() => Y(this.view)}
|
|
5098
5201
|
part="button"
|
|
5099
5202
|
>
|
|
5100
5203
|
<slot
|
|
@@ -5103,9 +5206,9 @@ let z = class extends A {
|
|
|
5103
5206
|
</button>`;
|
|
5104
5207
|
}
|
|
5105
5208
|
};
|
|
5106
|
-
|
|
5107
|
-
...
|
|
5108
|
-
|
|
5209
|
+
L.styles = [
|
|
5210
|
+
...E.styles,
|
|
5211
|
+
O`
|
|
5109
5212
|
:host {
|
|
5110
5213
|
display: inline-block;
|
|
5111
5214
|
}
|
|
@@ -5114,26 +5217,28 @@ z.styles = [
|
|
|
5114
5217
|
}
|
|
5115
5218
|
`
|
|
5116
5219
|
];
|
|
5117
|
-
|
|
5220
|
+
X([
|
|
5118
5221
|
g({ type: String })
|
|
5119
|
-
],
|
|
5120
|
-
|
|
5222
|
+
], L.prototype, "view", 2);
|
|
5223
|
+
X([
|
|
5121
5224
|
g({ type: String })
|
|
5122
|
-
],
|
|
5123
|
-
|
|
5225
|
+
], L.prototype, "variant", 2);
|
|
5226
|
+
X([
|
|
5124
5227
|
g({ type: String })
|
|
5125
|
-
],
|
|
5126
|
-
|
|
5127
|
-
|
|
5128
|
-
],
|
|
5129
|
-
var
|
|
5130
|
-
for (var a = s > 1 ? void 0 : s ?
|
|
5131
|
-
(u = e[
|
|
5132
|
-
return s && a &&
|
|
5228
|
+
], L.prototype, "size", 2);
|
|
5229
|
+
L = X([
|
|
5230
|
+
R("authui-button")
|
|
5231
|
+
], L);
|
|
5232
|
+
var ee = Object.defineProperty, ie = Object.getOwnPropertyDescriptor, T = (e, t, i, s) => {
|
|
5233
|
+
for (var a = s > 1 ? void 0 : s ? ie(t, i) : t, c = e.length - 1, u; c >= 0; c--)
|
|
5234
|
+
(u = e[c]) && (a = (s ? u(t, i, a) : u(a)) || a);
|
|
5235
|
+
return s && a && ee(t, i, a), a;
|
|
5133
5236
|
};
|
|
5134
|
-
let
|
|
5237
|
+
let I = class extends E {
|
|
5135
5238
|
constructor() {
|
|
5136
|
-
super(...arguments), this.showTeams = !1, this.src = "", this.menuOpen = !1, this.teams = [], this.teamsLoading = !1, this.activeTeamId = null, this.
|
|
5239
|
+
super(...arguments), this.showTeams = !1, this.src = "", this.menuOpen = !1, this.menuAbove = !1, this.teams = [], this.teamsLoading = !1, this.activeTeamId = null, this.onReposition = () => {
|
|
5240
|
+
this.menuOpen && this.placeMenu();
|
|
5241
|
+
}, this.onDocumentClick = (e) => {
|
|
5137
5242
|
e.composedPath().includes(this) || (this.menuOpen = !1);
|
|
5138
5243
|
}, this.onKeydown = (e) => {
|
|
5139
5244
|
if (!this.menuOpen) {
|
|
@@ -5163,10 +5268,21 @@ let E = class extends A {
|
|
|
5163
5268
|
};
|
|
5164
5269
|
}
|
|
5165
5270
|
connectedCallback() {
|
|
5166
|
-
super.connectedCallback(), document.addEventListener("click", this.onDocumentClick, !0), document.addEventListener("keydown", this.onKeydown), this.addEventListener("keydown", this.onKeydown);
|
|
5271
|
+
super.connectedCallback(), document.addEventListener("click", this.onDocumentClick, !0), document.addEventListener("keydown", this.onKeydown), this.addEventListener("keydown", this.onKeydown), window.addEventListener("resize", this.onReposition), window.addEventListener("scroll", this.onReposition, !0);
|
|
5167
5272
|
}
|
|
5168
5273
|
disconnectedCallback() {
|
|
5169
|
-
super.disconnectedCallback(), document.removeEventListener("click", this.onDocumentClick, !0), document.removeEventListener("keydown", this.onKeydown), this.removeEventListener("keydown", this.onKeydown);
|
|
5274
|
+
super.disconnectedCallback(), document.removeEventListener("click", this.onDocumentClick, !0), document.removeEventListener("keydown", this.onKeydown), this.removeEventListener("keydown", this.onKeydown), window.removeEventListener("resize", this.onReposition), window.removeEventListener("scroll", this.onReposition, !0);
|
|
5275
|
+
}
|
|
5276
|
+
/** Flip the menu above the trigger when there is not enough space below. */
|
|
5277
|
+
placeMenu() {
|
|
5278
|
+
const e = this.renderRoot?.querySelector(".trigger"), t = this.renderRoot?.querySelector(".menu");
|
|
5279
|
+
if (!e || !t) return;
|
|
5280
|
+
const i = e.getBoundingClientRect(), s = 6, a = 8;
|
|
5281
|
+
t.style.maxHeight = "";
|
|
5282
|
+
const c = t.offsetHeight + s, u = window.innerHeight - i.bottom, $ = i.top, x = u < c && $ > u;
|
|
5283
|
+
x !== this.menuAbove && (this.menuAbove = x);
|
|
5284
|
+
const ot = Math.max(80, (x ? $ : u) - s - a);
|
|
5285
|
+
t.style.maxHeight = `${ot}px`;
|
|
5170
5286
|
}
|
|
5171
5287
|
focusMenuItem(e) {
|
|
5172
5288
|
[
|
|
@@ -5174,7 +5290,9 @@ let E = class extends A {
|
|
|
5174
5290
|
][e]?.focus();
|
|
5175
5291
|
}
|
|
5176
5292
|
updated(e) {
|
|
5177
|
-
e.has("menuOpen") && this.menuOpen
|
|
5293
|
+
e.has("menuOpen") && (this.menuOpen ? (this.showTeams && this.loadTeams(), requestAnimationFrame(() => {
|
|
5294
|
+
this.placeMenu(), this.focusMenuItem(0);
|
|
5295
|
+
})) : this.menuAbove = !1), this.menuOpen && (e.has("teams") || e.has("teamsLoading")) && requestAnimationFrame(() => this.placeMenu());
|
|
5178
5296
|
}
|
|
5179
5297
|
async loadTeams() {
|
|
5180
5298
|
this.teamsLoading = !0, this.activeTeamId = n.getActiveTeamId();
|
|
@@ -5191,7 +5309,7 @@ let E = class extends A {
|
|
|
5191
5309
|
if (e === "loading" && i)
|
|
5192
5310
|
return r`<span class="avatar"><span class="spinner"></span></span>`;
|
|
5193
5311
|
if (e !== "signed-in" || !t)
|
|
5194
|
-
return r`<button class="btn btn-primary btn-sm" @click=${() =>
|
|
5312
|
+
return r`<button class="btn btn-primary btn-sm" @click=${() => Y("sign-in")}>
|
|
5195
5313
|
<slot>${this.t("signIn")}</slot>
|
|
5196
5314
|
</button>`;
|
|
5197
5315
|
const s = t.name || t.email || t.phone || this.t("guestAccount");
|
|
@@ -5204,10 +5322,10 @@ let E = class extends A {
|
|
|
5204
5322
|
aria-label=${s}
|
|
5205
5323
|
>
|
|
5206
5324
|
<span class="avatar"
|
|
5207
|
-
>${this.src ? r`<img src=${this.src} alt="" />` :
|
|
5325
|
+
>${this.src ? r`<img src=${this.src} alt="" />` : nt(s)}</span
|
|
5208
5326
|
>
|
|
5209
5327
|
</button>
|
|
5210
|
-
${this.menuOpen ? r`<div class="menu" role="menu">
|
|
5328
|
+
${this.menuOpen ? r`<div class="menu ${this.menuAbove ? "above" : ""}" role="menu">
|
|
5211
5329
|
<div class="menu-header">
|
|
5212
5330
|
<span class="row-title" title=${s}>${s}</span>
|
|
5213
5331
|
${t.email && t.name ? r`<span class="row-sub" title=${t.email}>${t.email}</span>` : o}
|
|
@@ -5223,9 +5341,9 @@ let E = class extends A {
|
|
|
5223
5341
|
aria-checked=${a.$id === this.activeTeamId ? "true" : "false"}
|
|
5224
5342
|
@click=${() => this.selectTeam(a)}
|
|
5225
5343
|
>
|
|
5226
|
-
${
|
|
5344
|
+
${l.users}
|
|
5227
5345
|
<span title=${a.name}>${a.name}</span>
|
|
5228
|
-
${a.$id === this.activeTeamId ? r`<span class="check">${
|
|
5346
|
+
${a.$id === this.activeTeamId ? r`<span class="check">${l.check}</span>` : o}
|
|
5229
5347
|
</button>`
|
|
5230
5348
|
)}
|
|
5231
5349
|
</div>` : o}
|
|
@@ -5233,10 +5351,10 @@ let E = class extends A {
|
|
|
5233
5351
|
class="menu-item"
|
|
5234
5352
|
role="menuitem"
|
|
5235
5353
|
@click=${() => {
|
|
5236
|
-
this.menuOpen = !1,
|
|
5354
|
+
this.menuOpen = !1, Y("account");
|
|
5237
5355
|
}}
|
|
5238
5356
|
>
|
|
5239
|
-
${
|
|
5357
|
+
${l.settings} ${this.t("manageAccount")}
|
|
5240
5358
|
</button>
|
|
5241
5359
|
<button
|
|
5242
5360
|
class="menu-item"
|
|
@@ -5245,15 +5363,15 @@ let E = class extends A {
|
|
|
5245
5363
|
this.menuOpen = !1, n.signOut();
|
|
5246
5364
|
}}
|
|
5247
5365
|
>
|
|
5248
|
-
${
|
|
5366
|
+
${l.logOut} ${this.t("signOut")}
|
|
5249
5367
|
</button>
|
|
5250
5368
|
</div>` : o}
|
|
5251
5369
|
`;
|
|
5252
5370
|
}
|
|
5253
5371
|
};
|
|
5254
|
-
|
|
5255
|
-
...
|
|
5256
|
-
|
|
5372
|
+
I.styles = [
|
|
5373
|
+
...E.styles,
|
|
5374
|
+
O`
|
|
5257
5375
|
:host {
|
|
5258
5376
|
display: inline-block;
|
|
5259
5377
|
position: relative;
|
|
@@ -5278,9 +5396,12 @@ E.styles = [
|
|
|
5278
5396
|
.menu {
|
|
5279
5397
|
position: absolute;
|
|
5280
5398
|
top: calc(100% + 6px);
|
|
5399
|
+
bottom: auto;
|
|
5281
5400
|
inset-inline-end: 0;
|
|
5282
5401
|
min-width: 220px;
|
|
5283
5402
|
max-width: min(320px, 90vw);
|
|
5403
|
+
max-height: min(360px, calc(100dvh - 16px));
|
|
5404
|
+
overflow-y: auto;
|
|
5284
5405
|
background: var(--authui-popover);
|
|
5285
5406
|
color: var(--authui-popover-foreground);
|
|
5286
5407
|
border: 1px solid var(--authui-border);
|
|
@@ -5292,6 +5413,10 @@ E.styles = [
|
|
|
5292
5413
|
flex-direction: column;
|
|
5293
5414
|
gap: 2px;
|
|
5294
5415
|
}
|
|
5416
|
+
.menu.above {
|
|
5417
|
+
top: auto;
|
|
5418
|
+
bottom: calc(100% + 6px);
|
|
5419
|
+
}
|
|
5295
5420
|
.menu-header {
|
|
5296
5421
|
min-width: 0;
|
|
5297
5422
|
overflow: hidden;
|
|
@@ -5362,53 +5487,59 @@ E.styles = [
|
|
|
5362
5487
|
}
|
|
5363
5488
|
`
|
|
5364
5489
|
];
|
|
5365
|
-
|
|
5490
|
+
T([
|
|
5366
5491
|
g({ type: Boolean, attribute: "show-teams" })
|
|
5367
|
-
],
|
|
5368
|
-
|
|
5492
|
+
], I.prototype, "showTeams", 2);
|
|
5493
|
+
T([
|
|
5369
5494
|
g({ type: String })
|
|
5370
|
-
],
|
|
5371
|
-
|
|
5372
|
-
|
|
5373
|
-
],
|
|
5374
|
-
|
|
5375
|
-
|
|
5376
|
-
],
|
|
5377
|
-
|
|
5378
|
-
|
|
5379
|
-
],
|
|
5380
|
-
|
|
5381
|
-
|
|
5382
|
-
],
|
|
5383
|
-
|
|
5384
|
-
|
|
5385
|
-
],
|
|
5495
|
+
], I.prototype, "src", 2);
|
|
5496
|
+
T([
|
|
5497
|
+
d()
|
|
5498
|
+
], I.prototype, "menuOpen", 2);
|
|
5499
|
+
T([
|
|
5500
|
+
d()
|
|
5501
|
+
], I.prototype, "menuAbove", 2);
|
|
5502
|
+
T([
|
|
5503
|
+
d()
|
|
5504
|
+
], I.prototype, "teams", 2);
|
|
5505
|
+
T([
|
|
5506
|
+
d()
|
|
5507
|
+
], I.prototype, "teamsLoading", 2);
|
|
5508
|
+
T([
|
|
5509
|
+
d()
|
|
5510
|
+
], I.prototype, "activeTeamId", 2);
|
|
5511
|
+
I = T([
|
|
5512
|
+
R("authui-user-button")
|
|
5513
|
+
], I);
|
|
5386
5514
|
export {
|
|
5387
|
-
|
|
5388
|
-
|
|
5515
|
+
Ft as A,
|
|
5516
|
+
oe as C,
|
|
5389
5517
|
f as E,
|
|
5390
|
-
|
|
5391
|
-
|
|
5518
|
+
bt as F,
|
|
5519
|
+
It as P,
|
|
5392
5520
|
n as a,
|
|
5393
5521
|
p as b,
|
|
5394
|
-
|
|
5395
|
-
|
|
5522
|
+
le as c,
|
|
5523
|
+
L as d,
|
|
5396
5524
|
b as e,
|
|
5397
|
-
|
|
5398
|
-
|
|
5525
|
+
E as f,
|
|
5526
|
+
P as g,
|
|
5399
5527
|
B as h,
|
|
5400
|
-
|
|
5401
|
-
|
|
5402
|
-
|
|
5403
|
-
|
|
5404
|
-
|
|
5405
|
-
|
|
5406
|
-
|
|
5407
|
-
|
|
5408
|
-
|
|
5409
|
-
|
|
5410
|
-
|
|
5411
|
-
|
|
5412
|
-
|
|
5413
|
-
|
|
5528
|
+
k as i,
|
|
5529
|
+
I as j,
|
|
5530
|
+
ne as k,
|
|
5531
|
+
pt as l,
|
|
5532
|
+
Ct as m,
|
|
5533
|
+
K as n,
|
|
5534
|
+
Y as o,
|
|
5535
|
+
D as p,
|
|
5536
|
+
ut as q,
|
|
5537
|
+
Ut as r,
|
|
5538
|
+
q as s,
|
|
5539
|
+
V as t,
|
|
5540
|
+
wt as u,
|
|
5541
|
+
it as v,
|
|
5542
|
+
Mt as w,
|
|
5543
|
+
Ot as x,
|
|
5544
|
+
z as y
|
|
5414
5545
|
};
|