@lumiapassport/ui-kit 1.14.24 → 1.14.26
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/dist/iframe/index.html +1 -1
- package/dist/iframe/main.js +1 -1
- package/dist/index.cjs +913 -1001
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +931 -1019
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -4342,8 +4342,9 @@ async function changeNickname(handle) {
|
|
|
4342
4342
|
}
|
|
4343
4343
|
async function checkNicknameAvailability(handle) {
|
|
4344
4344
|
const normalizedHandle = handle.toLowerCase().replace(/^@/, "");
|
|
4345
|
-
const response = await tssClient.
|
|
4346
|
-
|
|
4345
|
+
const response = await tssClient.post(
|
|
4346
|
+
"/api/auth/nicknames/check",
|
|
4347
|
+
{ handle: normalizedHandle },
|
|
4347
4348
|
false
|
|
4348
4349
|
// Public endpoint, no auth required
|
|
4349
4350
|
);
|
|
@@ -4355,14 +4356,15 @@ async function checkNicknameAvailability(handle) {
|
|
|
4355
4356
|
}
|
|
4356
4357
|
async function resolveNickname(handle) {
|
|
4357
4358
|
const normalizedHandle = handle.toLowerCase().replace(/^@/, "");
|
|
4358
|
-
const response = await tssClient.
|
|
4359
|
-
|
|
4359
|
+
const response = await tssClient.post(
|
|
4360
|
+
"/api/auth/nicknames/resolve",
|
|
4361
|
+
{ handle: normalizedHandle },
|
|
4360
4362
|
false
|
|
4361
4363
|
// Public endpoint, no auth required
|
|
4362
4364
|
);
|
|
4363
4365
|
if (!response.success || !response.data) {
|
|
4364
|
-
const errorData = response.data;
|
|
4365
|
-
if (errorData
|
|
4366
|
+
const errorData = response.data || {};
|
|
4367
|
+
if (errorData.code === "NICKNAME_NOT_FOUND") {
|
|
4366
4368
|
const error = new Error("Nickname not found");
|
|
4367
4369
|
error.code = "NICKNAME_NOT_FOUND";
|
|
4368
4370
|
throw error;
|
|
@@ -4474,7 +4476,7 @@ var init_profile = __esm({
|
|
|
4474
4476
|
});
|
|
4475
4477
|
|
|
4476
4478
|
// src/styles/built.css
|
|
4477
|
-
var built_default = '.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\\201C""\\201D""\\2018""\\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgba(17,24,39,.1);--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:hsla(0,0%,100%,.1);--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.lumia-scope .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.lumia-scope .pointer-events-none{pointer-events:none}.lumia-scope .pointer-events-auto{pointer-events:auto}.lumia-scope .visible{visibility:visible}.lumia-scope .invisible{visibility:hidden}.lumia-scope .collapse{visibility:collapse}.lumia-scope .static{position:static}.lumia-scope .fixed{position:fixed}.lumia-scope .absolute{position:absolute}.lumia-scope .relative{position:relative}.lumia-scope .inset-0{inset:0}.lumia-scope .inset-y-0{top:0;bottom:0}.lumia-scope .-bottom-1{bottom:-.25rem}.lumia-scope .-right-1{right:-.25rem}.lumia-scope .-right-2{right:-.5rem}.lumia-scope .-top-1{top:-.25rem}.lumia-scope .-top-2{top:-.5rem}.lumia-scope .-top-3{top:-.75rem}.lumia-scope .bottom-full{bottom:100%}.lumia-scope .left-0{left:0}.lumia-scope .left-1{left:.25rem}.lumia-scope .left-1\\/2{left:50%}.lumia-scope .left-3{left:.75rem}.lumia-scope .left-4{left:1rem}.lumia-scope .right-0{right:0}.lumia-scope .right-2{right:.5rem}.lumia-scope .right-3{right:.75rem}.lumia-scope .right-4{right:1rem}.lumia-scope .right-\\[var\\(--l-pass-pd\\)\\]{right:var(--l-pass-pd)}.lumia-scope .right-full{right:100%}.lumia-scope .top-0{top:0}.lumia-scope .top-1{top:.25rem}.lumia-scope .top-1\\/2{top:50%}.lumia-scope .top-3{top:.75rem}.lumia-scope .top-4{top:1rem}.lumia-scope .top-\\[var\\(--l-pass-pd\\)\\]{top:var(--l-pass-pd)}.lumia-scope .top-full{top:100%}.lumia-scope .z-10{z-index:10}.lumia-scope .z-50{z-index:50}.lumia-scope .z-\\[9998\\]{z-index:9998}.lumia-scope .z-\\[9999\\]{z-index:9999}.lumia-scope .-m-px{margin:-1px}.lumia-scope .m-0{margin:0}.lumia-scope .m-4{margin:1rem}.lumia-scope .-mx-1{margin-left:-.25rem;margin-right:-.25rem}.lumia-scope .-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.lumia-scope .mx-1{margin-left:.25rem;margin-right:.25rem}.lumia-scope .mx-auto{margin-left:auto;margin-right:auto}.lumia-scope .my-1{margin-top:.25rem;margin-bottom:.25rem}.lumia-scope .my-6{margin-top:1.5rem;margin-bottom:1.5rem}.lumia-scope .my-auto{margin-top:auto;margin-bottom:auto}.lumia-scope .-mt-5{margin-top:-1.25rem}.lumia-scope .mb-1{margin-bottom:.25rem}.lumia-scope .mb-2{margin-bottom:.5rem}.lumia-scope .mb-3{margin-bottom:.75rem}.lumia-scope .mb-4{margin-bottom:1rem}.lumia-scope .mb-6{margin-bottom:1.5rem}.lumia-scope .mb-8{margin-bottom:2rem}.lumia-scope .ml-1{margin-left:.25rem}.lumia-scope .ml-2{margin-left:.5rem}.lumia-scope .ml-3{margin-left:.75rem}.lumia-scope .ml-4{margin-left:1rem}.lumia-scope .ml-auto{margin-left:auto}.lumia-scope .mr-1{margin-right:.25rem}.lumia-scope .mr-2{margin-right:.5rem}.lumia-scope .mr-4{margin-right:1rem}.lumia-scope .mt-0{margin-top:0}.lumia-scope .mt-1{margin-top:.25rem}.lumia-scope .mt-2{margin-top:.5rem}.lumia-scope .mt-3{margin-top:.75rem}.lumia-scope .mt-4{margin-top:1rem}.lumia-scope .mt-6{margin-top:1.5rem}.lumia-scope .mt-\\[var\\(--l-pass-gap\\)\\]{margin-top:var(--l-pass-gap)}.lumia-scope .block{display:block}.lumia-scope .inline-block{display:inline-block}.lumia-scope .inline{display:inline}.lumia-scope .flex{display:flex}.lumia-scope .inline-flex{display:inline-flex}.lumia-scope .table{display:table}.lumia-scope .grid{display:grid}.lumia-scope .contents{display:contents}.lumia-scope .hidden{display:none}.lumia-scope .aspect-square{aspect-ratio:1/1}.lumia-scope .size-3{width:.75rem;height:.75rem}.lumia-scope .size-3\\.5{width:.875rem;height:.875rem}.lumia-scope .size-4{width:1rem;height:1rem}.lumia-scope .size-5{width:1.25rem;height:1.25rem}.lumia-scope .h-10{height:2.5rem}.lumia-scope .h-11{height:2.75rem}.lumia-scope .h-12{height:3rem}.lumia-scope .h-14{height:3.5rem}.lumia-scope .h-16{height:4rem}.lumia-scope .h-2{height:.5rem}.lumia-scope .h-2\\.5{height:.625rem}.lumia-scope .h-20{height:5rem}.lumia-scope .h-3{height:.75rem}.lumia-scope .h-3\\.5{height:.875rem}.lumia-scope .h-4{height:1rem}.lumia-scope .h-48{height:12rem}.lumia-scope .h-5{height:1.25rem}.lumia-scope .h-6{height:1.5rem}.lumia-scope .h-7{height:1.75rem}.lumia-scope .h-8{height:2rem}.lumia-scope .h-9{height:2.25rem}.lumia-scope .h-\\[100dvh\\]{height:100dvh}.lumia-scope .h-\\[48px\\]{height:48px}.lumia-scope .h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.lumia-scope .h-fit{height:-moz-fit-content;height:fit-content}.lumia-scope .h-full{height:100%}.lumia-scope .h-px{height:1px}.lumia-scope .max-h-24{max-height:6rem}.lumia-scope .max-h-96{max-height:24rem}.lumia-scope .max-h-\\[95dvh\\]{max-height:95dvh}.lumia-scope .w-10{width:2.5rem}.lumia-scope .w-12{width:3rem}.lumia-scope .w-16{width:4rem}.lumia-scope .w-2{width:.5rem}.lumia-scope .w-2\\.5{width:.625rem}.lumia-scope .w-20{width:5rem}.lumia-scope .w-3{width:.75rem}.lumia-scope .w-3\\.5{width:.875rem}.lumia-scope .w-4{width:1rem}.lumia-scope .w-48{width:12rem}.lumia-scope .w-5{width:1.25rem}.lumia-scope .w-6{width:1.5rem}.lumia-scope .w-8{width:2rem}.lumia-scope .w-9{width:2.25rem}.lumia-scope .w-\\[100dvw\\]{width:100dvw}.lumia-scope .w-\\[40px\\]{width:40px}.lumia-scope .w-\\[var\\(--l-pass-maw\\)\\]{width:var(--l-pass-maw)}.lumia-scope .w-fit{width:-moz-fit-content;width:fit-content}.lumia-scope .w-full{width:100%}.lumia-scope .w-px{width:1px}.lumia-scope .min-w-0{min-width:0}.lumia-scope .min-w-16{min-width:4rem}.lumia-scope .min-w-24{min-width:6rem}.lumia-scope .min-w-32{min-width:8rem}.lumia-scope .min-w-5{min-width:1.25rem}.lumia-scope .min-w-\\[256px\\]{min-width:256px}.lumia-scope .min-w-\\[8rem\\]{min-width:8rem}.lumia-scope .min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.lumia-scope .max-w-2xl{max-width:42rem}.lumia-scope .max-w-\\[144px\\]{max-width:144px}.lumia-scope .max-w-\\[150px\\]{max-width:150px}.lumia-scope .max-w-\\[160px\\]{max-width:160px}.lumia-scope .max-w-\\[680px\\]{max-width:680px}.lumia-scope .max-w-full{max-width:100%}.lumia-scope .max-w-lg{max-width:32rem}.lumia-scope .max-w-md{max-width:28rem}.lumia-scope .max-w-sm{max-width:24rem}.lumia-scope .flex-1{flex:1 1 0%}.lumia-scope .flex-none{flex:none}.lumia-scope .flex-shrink{flex-shrink:1}.lumia-scope .flex-shrink-0,.lumia-scope .shrink-0{flex-shrink:0}.lumia-scope .border-collapse{border-collapse:collapse}.lumia-scope .-translate-x-1{--tw-translate-x:-0.25rem}.lumia-scope .-translate-x-1,.lumia-scope .-translate-x-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .-translate-x-1\\/2{--tw-translate-x:-50%}.lumia-scope .-translate-x-\\[var\\(--l-pass-gap\\)\\]{--tw-translate-x:calc(var(--l-pass-gap)*-1)}.lumia-scope .-translate-x-\\[var\\(--l-pass-gap\\)\\],.lumia-scope .-translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .-translate-y-1{--tw-translate-y:-0.25rem}.lumia-scope .-translate-y-1\\/2{--tw-translate-y:-50%}.lumia-scope .-translate-y-1\\/2,.lumia-scope .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes glow-warning{0%,to{transform:scale(1);box-shadow:0 0 16px var(--l-pass-bg-warning)}50%{transform:scale(.97);box-shadow:0 0 4px var(--l-pass-bg-warning)}}.lumia-scope .animate-glow-warning{animation:glow-warning 2s ease infinite}@keyframes pulse-warning{0%,to{opacity:1}50%{opacity:.6}}.lumia-scope .animate-pulse-warning{animation:pulse-warning 2s ease infinite}@keyframes spin{to{transform:rotate(1turn)}}.lumia-scope .animate-spin{animation:spin 1s linear infinite}.lumia-scope .cursor-default{cursor:default}.lumia-scope .cursor-not-allowed{cursor:not-allowed}.lumia-scope .cursor-pointer{cursor:pointer}.lumia-scope .cursor-text{cursor:text}.lumia-scope .select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.lumia-scope .select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.lumia-scope .resize{resize:both}.lumia-scope .scroll-my-1{scroll-margin-top:.25rem;scroll-margin-bottom:.25rem}.lumia-scope .list-inside{list-style-position:inside}.lumia-scope .list-disc{list-style-type:disc}.lumia-scope .appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.lumia-scope .grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lumia-scope .grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lumia-scope .grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lumia-scope .grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lumia-scope .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lumia-scope .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lumia-scope .grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lumia-scope .grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lumia-scope .grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lumia-scope .grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lumia-scope .grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lumia-scope .flex-row{flex-direction:row}.lumia-scope .flex-col{flex-direction:column}.lumia-scope .flex-col-reverse{flex-direction:column-reverse}.lumia-scope .flex-wrap{flex-wrap:wrap}.lumia-scope .place-content-center{place-content:center}.lumia-scope .items-start{align-items:flex-start}.lumia-scope .items-end{align-items:flex-end}.lumia-scope .items-center{align-items:center}.lumia-scope .justify-start{justify-content:flex-start}.lumia-scope .justify-end{justify-content:flex-end}.lumia-scope .justify-center{justify-content:center}.lumia-scope .justify-between{justify-content:space-between}.lumia-scope .justify-evenly{justify-content:space-evenly}.lumia-scope .gap-0{gap:0}.lumia-scope .gap-0\\.5{gap:.125rem}.lumia-scope .gap-1{gap:.25rem}.lumia-scope .gap-1\\.5{gap:.375rem}.lumia-scope .gap-2{gap:.5rem}.lumia-scope .gap-3{gap:.75rem}.lumia-scope .gap-4{gap:1rem}.lumia-scope .gap-\\[10px\\]{gap:10px}.lumia-scope .gap-\\[var\\(--l-pass-gap\\)\\]{gap:var(--l-pass-gap)}.lumia-scope :is(.space-x-1>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-3>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.75rem*var(--tw-space-x-reverse));margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-4>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-y-0>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-0\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-3>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-4>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-6>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.lumia-scope .overflow-auto{overflow:auto}.lumia-scope .overflow-hidden{overflow:hidden}.lumia-scope .overflow-visible{overflow:visible}.lumia-scope .overflow-y-auto{overflow-y:auto}.lumia-scope .overflow-x-hidden{overflow-x:hidden}.lumia-scope .overflow-y-hidden{overflow-y:hidden}.lumia-scope .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lumia-scope .text-ellipsis{text-overflow:ellipsis}.lumia-scope .whitespace-nowrap{white-space:nowrap}.lumia-scope .whitespace-pre-line{white-space:pre-line}.lumia-scope .whitespace-pre-wrap{white-space:pre-wrap}.lumia-scope .break-normal{overflow-wrap:normal;word-break:normal}.lumia-scope .break-words{overflow-wrap:break-word}.lumia-scope .break-all{word-break:break-all}.lumia-scope .rounded{border-radius:.25rem}.lumia-scope .rounded-2xl{border-radius:1rem}.lumia-scope .rounded-3xl{border-radius:1.5rem}.lumia-scope .rounded-\\[10px\\]{border-radius:10px}.lumia-scope .rounded-\\[5px\\]{border-radius:5px}.lumia-scope .rounded-\\[var\\(--l-pass-bdrs\\)\\]{border-radius:var(--l-pass-bdrs)}.lumia-scope .rounded-\\[var\\(--l-pass-el-bdrs\\)\\]{border-radius:var(--l-pass-el-bdrs)}.lumia-scope .rounded-full{border-radius:9999px}.lumia-scope .rounded-lg{border-radius:.5rem}.lumia-scope .rounded-md{border-radius:.375rem}.lumia-scope .rounded-sm{border-radius:.125rem}.lumia-scope .rounded-xl{border-radius:.75rem}.lumia-scope .border{border-width:1px}.lumia-scope .border-0{border-width:0}.lumia-scope .border-2{border-width:2px}.lumia-scope .border-b{border-bottom-width:1px}.lumia-scope .border-b-2{border-bottom-width:2px}.lumia-scope .border-t{border-top-width:1px}.lumia-scope .border-dashed{border-style:dashed}.lumia-scope .border-\\[var\\(--l-pass-bd\\)\\]{border-color:var(--l-pass-bd)}.lumia-scope .border-\\[var\\(--l-pass-error\\)\\]{border-color:var(--l-pass-error)}.lumia-scope .border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.lumia-scope .border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.lumia-scope .border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity,1))}.lumia-scope .border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.lumia-scope .border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity,1))}.lumia-scope .border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.lumia-scope .border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.lumia-scope .border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.lumia-scope .border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.lumia-scope .border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity,1))}.lumia-scope .border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity,1))}.lumia-scope .border-current{border-color:currentColor}.lumia-scope .border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.lumia-scope .border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.lumia-scope .border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.lumia-scope .border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.lumia-scope .border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity,1))}.lumia-scope .border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.lumia-scope .border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity,1))}.lumia-scope .border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity,1))}.lumia-scope .border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity,1))}.lumia-scope .border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.lumia-scope .border-orange-800{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity,1))}.lumia-scope .border-orange-900{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity,1))}.lumia-scope .border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.lumia-scope .border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity,1))}.lumia-scope .border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity,1))}.lumia-scope .border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.lumia-scope .border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.lumia-scope .border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.lumia-scope .border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.lumia-scope .border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity,1))}.lumia-scope .border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity,1))}.lumia-scope .border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity,1))}.lumia-scope .border-sky-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity,1))}.lumia-scope .border-sky-900{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity,1))}.lumia-scope .border-transparent{border-color:transparent}.lumia-scope .border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.lumia-scope .border-t-transparent{border-top-color:transparent}.lumia-scope .bg-\\[\\#002c15\\]{--tw-bg-opacity:1;background-color:rgb(0 44 21/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#081f2c\\]{--tw-bg-opacity:1;background-color:rgb(8 31 44/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#f3ba2f\\]{--tw-bg-opacity:1;background-color:rgb(243 186 47/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[var\\(--l-pass-accent\\)\\]{background-color:var(--l-pass-accent)}.lumia-scope .bg-\\[var\\(--l-pass-bg\\)\\]{background-color:var(--l-pass-bg)}.lumia-scope .bg-\\[var\\(--l-pass-bg-error\\)\\]{background-color:var(--l-pass-bg-error)}.lumia-scope .bg-\\[var\\(--l-pass-bg-info\\)\\]{background-color:var(--l-pass-bg-info)}.lumia-scope .bg-\\[var\\(--l-pass-bg-muted\\)\\]{background-color:var(--l-pass-bg-muted)}.lumia-scope .bg-\\[var\\(--l-pass-bg-success\\)\\]{background-color:var(--l-pass-bg-success)}.lumia-scope .bg-\\[var\\(--l-pass-bg-warning\\)\\]{background-color:var(--l-pass-bg-warning)}.lumia-scope .bg-\\[var\\(--l-pass-error\\)\\]{background-color:var(--l-pass-error)}.lumia-scope .bg-\\[var\\(--l-pass-fg\\)\\]{background-color:var(--l-pass-fg)}.lumia-scope .bg-\\[var\\(--l-pass-fg-inverted\\)\\]{background-color:var(--l-pass-fg-inverted)}.lumia-scope .bg-\\[var\\(--l-pass-overlay\\)\\]{background-color:var(--l-pass-overlay)}.lumia-scope .bg-\\[var\\(--l-pass-primary\\)\\]{background-color:var(--l-pass-primary)}.lumia-scope .bg-\\[var\\(--l-pass-secondary\\)\\]{background-color:var(--l-pass-secondary)}.lumia-scope .bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-950{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity,1))}.lumia-scope .bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-700{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-800{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-900{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-950{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity,1))}.lumia-scope .bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.lumia-scope .bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.lumia-scope .bg-transparent{background-color:transparent}.lumia-scope .bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.lumia-scope .bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.lumia-scope .bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.lumia-scope .from-purple-100{--tw-gradient-from:#f3e8ff var(--tw-gradient-from-position);--tw-gradient-to:rgba(243,232,255,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .from-purple-500{--tw-gradient-from:#a855f7 var(--tw-gradient-from-position);--tw-gradient-to:rgba(168,85,247,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .from-purple-600{--tw-gradient-from:#9333ea var(--tw-gradient-from-position);--tw-gradient-to:rgba(147,51,234,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .to-blue-100{--tw-gradient-to:#dbeafe var(--tw-gradient-to-position)}.lumia-scope .to-blue-500{--tw-gradient-to:#3b82f6 var(--tw-gradient-to-position)}.lumia-scope .to-blue-600{--tw-gradient-to:#2563eb var(--tw-gradient-to-position)}.lumia-scope .object-contain{-o-object-fit:contain;object-fit:contain}.lumia-scope .object-cover{-o-object-fit:cover;object-fit:cover}.lumia-scope .p-0{padding:0}.lumia-scope .p-1{padding:.25rem}.lumia-scope .p-2{padding:.5rem}.lumia-scope .p-3{padding:.75rem}.lumia-scope .p-4{padding:1rem}.lumia-scope .p-5{padding:1.25rem}.lumia-scope .p-6{padding:1.5rem}.lumia-scope .p-8{padding:2rem}.lumia-scope .p-\\[var\\(--l-pass-gap\\)\\]{padding:var(--l-pass-gap)}.lumia-scope .p-\\[var\\(--l-pass-pd\\)\\]{padding:var(--l-pass-pd)}.lumia-scope .px-0{padding-left:0;padding-right:0}.lumia-scope .px-1{padding-left:.25rem;padding-right:.25rem}.lumia-scope .px-12{padding-left:3rem;padding-right:3rem}.lumia-scope .px-2{padding-left:.5rem;padding-right:.5rem}.lumia-scope .px-2\\.5{padding-left:.625rem;padding-right:.625rem}.lumia-scope .px-3{padding-left:.75rem;padding-right:.75rem}.lumia-scope .px-4{padding-left:1rem;padding-right:1rem}.lumia-scope .px-5{padding-left:1.25rem;padding-right:1.25rem}.lumia-scope .px-6{padding-left:1.5rem;padding-right:1.5rem}.lumia-scope .px-8{padding-left:2rem;padding-right:2rem}.lumia-scope .px-\\[var\\(--l-pass-gap\\)\\]{padding-left:var(--l-pass-gap);padding-right:var(--l-pass-gap)}.lumia-scope .px-\\[var\\(--l-pass-pd\\)\\]{padding-left:var(--l-pass-pd);padding-right:var(--l-pass-pd)}.lumia-scope .py-0{padding-top:0;padding-bottom:0}.lumia-scope .py-0\\.5{padding-top:.125rem;padding-bottom:.125rem}.lumia-scope .py-1{padding-top:.25rem;padding-bottom:.25rem}.lumia-scope .py-1\\.5{padding-top:.375rem;padding-bottom:.375rem}.lumia-scope .py-2{padding-top:.5rem;padding-bottom:.5rem}.lumia-scope .py-3{padding-top:.75rem;padding-bottom:.75rem}.lumia-scope .py-4{padding-top:1rem;padding-bottom:1rem}.lumia-scope .py-8{padding-top:2rem;padding-bottom:2rem}.lumia-scope .py-\\[10px\\]{padding-top:10px;padding-bottom:10px}.lumia-scope .py-\\[var\\(--l-pass-gap\\)\\]{padding-top:var(--l-pass-gap);padding-bottom:var(--l-pass-gap)}.lumia-scope .pb-2{padding-bottom:.5rem}.lumia-scope .pb-3{padding-bottom:.75rem}.lumia-scope .pb-4{padding-bottom:1rem}.lumia-scope .pb-5{padding-bottom:1.25rem}.lumia-scope .pb-6{padding-bottom:1.5rem}.lumia-scope .pl-11{padding-left:2.75rem}.lumia-scope .pl-2{padding-left:.5rem}.lumia-scope .pr-10{padding-right:2.5rem}.lumia-scope .pr-16{padding-right:4rem}.lumia-scope .pr-8{padding-right:2rem}.lumia-scope .pt-0{padding-top:0}.lumia-scope .pt-2{padding-top:.5rem}.lumia-scope .pt-3{padding-top:.75rem}.lumia-scope .pt-4{padding-top:1rem}.lumia-scope .pt-5{padding-top:1.25rem}.lumia-scope .text-left{text-align:left}.lumia-scope .text-center{text-align:center}.lumia-scope .text-right{text-align:right}.lumia-scope .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.lumia-scope .font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.lumia-scope .text-2xl{font-size:1.5rem;line-height:2rem}.lumia-scope .text-3xl{font-size:1.875rem;line-height:2.25rem}.lumia-scope .text-4xl{font-size:2.25rem;line-height:2.5rem}.lumia-scope .text-\\[10px\\]{font-size:10px}.lumia-scope .text-\\[14px\\]{font-size:14px}.lumia-scope .text-\\[16px\\]{font-size:16px}.lumia-scope .text-\\[8px\\]{font-size:8px}.lumia-scope .text-base{font-size:1rem;line-height:1.5rem}.lumia-scope .text-lg{font-size:1.125rem;line-height:1.75rem}.lumia-scope .text-sm{font-size:.875rem;line-height:1.25rem}.lumia-scope .text-xl{font-size:1.25rem;line-height:1.75rem}.lumia-scope .text-xs{font-size:.75rem;line-height:1rem}.lumia-scope .font-bold{font-weight:700}.lumia-scope .font-medium{font-weight:500}.lumia-scope .font-normal{font-weight:400}.lumia-scope .font-semibold{font-weight:600}.lumia-scope .uppercase{text-transform:uppercase}.lumia-scope .lowercase{text-transform:lowercase}.lumia-scope .italic{font-style:italic}.lumia-scope .leading-4{line-height:1rem}.lumia-scope .leading-5{line-height:1.25rem}.lumia-scope .leading-6{line-height:1.5rem}.lumia-scope .leading-8{line-height:2rem}.lumia-scope .leading-\\[8px\\]{line-height:8px}.lumia-scope .leading-none{line-height:1}.lumia-scope .leading-relaxed{line-height:1.625}.lumia-scope .leading-tight{line-height:1.25}.lumia-scope .tracking-tight{letter-spacing:-.025em}.lumia-scope .tracking-wide{letter-spacing:.025em}.lumia-scope .text-\\[\\#c3f53c\\]{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .text-\\[var\\(--l-pass-bg-error\\)\\]{color:var(--l-pass-bg-error)}.lumia-scope .text-\\[var\\(--l-pass-bg-success\\)\\]{color:var(--l-pass-bg-success)}.lumia-scope .text-\\[var\\(--l-pass-bg-warning\\)\\]{color:var(--l-pass-bg-warning)}.lumia-scope .text-\\[var\\(--l-pass-error\\)\\]{color:var(--l-pass-error)}.lumia-scope .text-\\[var\\(--l-pass-fg\\)\\]{color:var(--l-pass-fg)}.lumia-scope .text-\\[var\\(--l-pass-fg-inverted\\)\\]{color:var(--l-pass-fg-inverted)}.lumia-scope .text-\\[var\\(--l-pass-fg-muted\\)\\]{color:var(--l-pass-fg-muted)}.lumia-scope .text-\\[var\\(--l-pass-info\\)\\]{color:var(--l-pass-info)}.lumia-scope .text-\\[var\\(--l-pass-success\\)\\]{color:var(--l-pass-success)}.lumia-scope .text-\\[var\\(--l-pass-text-secondary\\)\\]{color:var(--l-pass-text-secondary)}.lumia-scope .text-\\[var\\(--l-pass-warning\\)\\]{color:var(--l-pass-warning)}.lumia-scope .text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity,1))}.lumia-scope .text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity,1))}.lumia-scope .text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity,1))}.lumia-scope .text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.lumia-scope .text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.lumia-scope .text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.lumia-scope .text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.lumia-scope .text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity,1))}.lumia-scope .text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.lumia-scope .text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.lumia-scope .text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.lumia-scope .text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.lumia-scope .text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.lumia-scope .text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.lumia-scope .text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.lumia-scope .text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.lumia-scope .text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.lumia-scope .text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.lumia-scope .text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.lumia-scope .text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.lumia-scope .text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.lumia-scope .text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.lumia-scope .text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity,1))}.lumia-scope .text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.lumia-scope .text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.lumia-scope .text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.lumia-scope .text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.lumia-scope .text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.lumia-scope .text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity,1))}.lumia-scope .text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.lumia-scope .text-orange-100{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity,1))}.lumia-scope .text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity,1))}.lumia-scope .text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity,1))}.lumia-scope .text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.lumia-scope .text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.lumia-scope .text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.lumia-scope .text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.lumia-scope .text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity,1))}.lumia-scope .text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.lumia-scope .text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.lumia-scope .text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.lumia-scope .text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.lumia-scope .text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.lumia-scope .text-red-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity,1))}.lumia-scope .text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.lumia-scope .text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.lumia-scope .text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.lumia-scope .text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.lumia-scope .text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.lumia-scope .text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.lumia-scope .text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.lumia-scope .text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.lumia-scope .text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity,1))}.lumia-scope .text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity,1))}.lumia-scope .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.lumia-scope .text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.lumia-scope .underline{text-decoration-line:underline}.lumia-scope .underline-offset-2{text-underline-offset:2px}.lumia-scope .underline-offset-4{text-underline-offset:4px}.lumia-scope .antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lumia-scope .opacity-0{opacity:0}.lumia-scope .opacity-100{opacity:1}.lumia-scope .opacity-40{opacity:.4}.lumia-scope .opacity-50{opacity:.5}.lumia-scope .opacity-60{opacity:.6}.lumia-scope .shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.lumia-scope .shadow,.lumia-scope .shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.lumia-scope .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.lumia-scope .shadow-lg,.lumia-scope .shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.lumia-scope .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.lumia-scope .shadow-sm,.lumia-scope .shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.lumia-scope .outline-none{outline:2px solid transparent;outline-offset:2px}.lumia-scope .outline{outline-style:solid}.lumia-scope .blur{--tw-blur:blur(8px)}.lumia-scope .blur,.lumia-scope .grayscale{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.lumia-scope .grayscale{--tw-grayscale:grayscale(100%)}.lumia-scope .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.lumia-scope .backdrop-blur{--tw-backdrop-blur:blur(8px)}.lumia-scope .backdrop-blur,.lumia-scope .backdrop-blur-sm{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.lumia-scope .backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.lumia-scope .backdrop-filter{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.lumia-scope .transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-\\[color\\2c box-shadow\\]{transition-property:color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-none{transition-property:none}.lumia-scope .transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .duration-200{transition-duration:.2s}.lumia-scope .ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.lumia-scope .ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.lumia-scope{--l-pass-ff:var(--lumia-passport-ff,-apple-system,BlinkMacSystemFont,"Inter",system-ui,sans-serif);--l-pass-maw:var(--lumia-passport-maw,384px);--l-pass-pd:var(--lumia-passport-pd,12px);--l-pass-gap:var(--lumia-passport-gap,10px);--l-pass-bdrs:var(--lumia-passport-bdrs,20px);--l-pass-el-bdrs:var(--lumia-passport-element-bdrs,10px);--l-pass-backdrop-blur:var(--lumia-passport-backdrop-blur,10px)}.lumia-scope[data-lumia-passport-mode=light]{--l-pass-overlay:var(--lumia-passport-overlay,hsla(0,0%,100%,.8));--l-pass-bg:var(--lumia-passport-bg,#fff);--l-pass-fg:var(--lumia-passport-fg,#000);--l-pass-fg-h:var(--lumia-passport-fg-h,rgba(0,0,0,.6));--l-pass-fg-a:var(--lumia-passport-fg-a,rgba(0,0,0,.4));--l-pass-fg-inverted:var(--lumia-passport-fg-inverted,#fff);--l-pass-fg-muted:var(--lumia-passport-fg-muted,rgba(0,0,0,.6));--l-pass-primary:var(--lumia-passport-primary,#000);--l-pass-primary-h:var(--lumia-passport-primary-h,rgba(0,0,0,.8));--l-pass-primary-a:var(--lumia-passport-primary-a,rgba(0,0,0,.6));--l-pass-secondary:var(--lumia-passport-secondary,#e4e4e4);--l-pass-secondary-h:var(--lumia-passport-secondary-h,hsla(0,0%,89%,.8));--l-pass-secondary-a:var(--lumia-passport-secondary-a,hsla(0,0%,89%,.6));--l-pass-bd:var(--lumia-passport-bd,#ebebeb);--l-pass-bd-intense:var(--lumia-passport-bd-intense,#a9a9a9);--l-pass-shadow-c:var(--lumia-passport-shadow-c,rgba(0,0,0,.1));--l-pass-info:var(--lumia-passport-info,var(--l-pass-fg));--l-pass-bg-info:var(--lumia-passport-bg-info,#e4e4e4);--l-pass-success:var(--lumia-passport-success,var(--l-pass-fg));--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,var(--l-pass-fg));--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#fff);--l-pass-bg-error:var(--lumia-passport-bg-error,#d6204e)}.lumia-scope[data-lumia-passport-mode=dark]{--l-pass-overlay:var(--lumia-passport-overlay,rgba(0,0,0,.8));--l-pass-bg:var(--lumia-passport-bg,#1a1a1a);--l-pass-fg:var(--lumia-passport-fg,#fff);--l-pass-fg-h:var(--lumia-passport-fg-h,hsla(0,0%,100%,.6));--l-pass-fg-a:var(--lumia-passport-fg-a,hsla(0,0%,100%,.4));--l-pass-fg-inverted:var(--lumia-passport-fg-inverted,#000);--l-pass-fg-muted:var(--lumia-passport-fg-muted,hsla(0,0%,100%,.6));--l-pass-primary:var(--lumia-passport-primary,#fff);--l-pass-primary-h:var(--lumia-passport-primary-h,hsla(0,0%,100%,.8));--l-pass-primary-a:var(--lumia-passport-primary-a,hsla(0,0%,100%,.6));--l-pass-secondary:var(--lumia-passport-secondary,#2a2a2a);--l-pass-secondary-h:var(--lumia-passport-secondary-h,rgba(42,42,42,.6));--l-pass-secondary-a:var(--lumia-passport-secondary-a,rgba(42,42,42,.4));--l-pass-bd:var(--lumia-passport-bd,#3a3a3a);--l-pass-bd-intense:var(--lumia-passport-bd-intense,#4a4a4a);--l-pass-shadow-c:var(--lumia-passport-shadow-c,rgba(0,0,0,.1));--l-pass-info:var(--lumia-passport-info,var(--l-pass-fg));--l-pass-bg-info:var(--lumia-passport-bg-info,#2a2a2a);--l-pass-success:var(--lumia-passport-success,var(--l-pass-fg-inverted));--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,var(--l-pass-fg-inverted));--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#fff);--l-pass-bg-error:var(--lumia-passport-bg-error,#d6204e)}.lumia-scope,.lumia-scope *{margin:0;box-sizing:border-box;font-family:var(--l-pass-ff);font-optical-sizing:auto;-webkit-tap-highlight-color:transparent;-moz-tap-highlight-color:transparent;-ms-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lumia-scope button,.lumia-scope h1,.lumia-scope h2,.lumia-scope h3,.lumia-scope h4,.lumia-scope h5,.lumia-scope h6,.lumia-scope input,.lumia-scope p,.lumia-scope select,.lumia-scope textarea{font-family:var(--l-pass-ff)!important;margin:0}.lumia-scope button,.lumia-scope input,.lumia-scope select,.lumia-scope textarea{border-style:solid;outline:none!important;appearance:none!important;-webkit-appearance:none;-moz-appearance:none}.lumia-scope input,.lumia-scope textarea{font-size:16px!important}.lumia-scope .lumia-passport-button{box-shadow:0 4px 20px var(--l-pass-shadow-c),inset 0 0 0 1px var(--l-pass-bd);transition:transform .25s ease}.lumia-scope .lumia-passport-button:hover{transform:scale(1.02)}.lumia-scope .lumia-passport-button:active{transform:scale(1)}@keyframes lumia-mobile-dialog-fade-in{0%{opacity:0;transform:translateY(64px)}to{opacity:1;transform:translateY(0)}}@keyframes lumia-mobile-dialog-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(64px)}}.lumia-scope .animate-mobile-dialog-in{animation:lumia-mobile-dialog-fade-in 375ms ease}.lumia-scope .animate-mobile-dialog-out{animation:lumia-mobile-dialog-fade-out 375ms ease}@keyframes lumia-dialog-fade-in{0%{opacity:0}to{opacity:1}}@keyframes lumia-dialog-fade-out{0%{opacity:1}to{opacity:0}}.lumia-scope .animate-dialog-in{animation:lumia-dialog-fade-in 375ms ease}.lumia-scope .animate-dialog-out{animation:lumia-dialog-fade-out 375ms ease}.lumia-scope .list-scrollbar-y{width:100%;padding-right:var(--l-pass-list-scrollbar-pd-r,0);overflow-y:auto;overflow-x:hidden;max-height:var(--l-pass-scrollbar-mah,300px)}.lumia-scope .list-scrollbar-y::-webkit-scrollbar{width:4px;height:4px}.lumia-scope .list-scrollbar-y::-webkit-scrollbar-thumb{cursor:pointer;width:4px;border-radius:2px;background-color:var(--l-pass-bd)}.lumia-scope .list-scrollbar-y::-webkit-scrollbar-track{margin-top:10px;margin-bottom:10px;background-color:transparent}.lumia-scope .noScrollbars::-webkit-scrollbar{display:none}.lumia-scope div[data-radix-popper-content-wrapper]{z-index:10000!important}.lumia-scope .file\\:mr-\\[var\\(--l-pass-gap\\)\\]::file-selector-button{margin-right:var(--l-pass-gap)}.lumia-scope .file\\:h-12::file-selector-button{height:3rem}.lumia-scope .file\\:cursor-pointer::file-selector-button{cursor:pointer}.lumia-scope .file\\:rounded-\\[var\\(--l-pass-el-bdrs\\)\\]::file-selector-button{border-radius:var(--l-pass-el-bdrs)}.lumia-scope .file\\:border-0::file-selector-button{border-width:0}.lumia-scope .file\\:bg-\\[var\\(--l-pass-primary\\)\\]::file-selector-button{background-color:var(--l-pass-primary)}.lumia-scope .file\\:bg-transparent::file-selector-button{background-color:transparent}.lumia-scope .file\\:px-\\[var\\(--l-pass-pd\\)\\]::file-selector-button{padding-left:var(--l-pass-pd);padding-right:var(--l-pass-pd)}.lumia-scope .file\\:text-\\[16px\\]::file-selector-button{font-size:16px}.lumia-scope .file\\:text-base::file-selector-button{font-size:1rem;line-height:1.5rem}.lumia-scope .file\\:font-medium::file-selector-button{font-weight:500}.lumia-scope .file\\:text-\\[var\\(--l-pass-fg-inverted\\)\\]::file-selector-button{color:var(--l-pass-fg-inverted)}.lumia-scope .placeholder\\:text-\\[var\\(--l-pass-fg-muted\\)\\]::-moz-placeholder{color:var(--l-pass-fg-muted)}.lumia-scope .placeholder\\:text-\\[var\\(--l-pass-fg-muted\\)\\]::placeholder{color:var(--l-pass-fg-muted)}.lumia-scope .focus-within\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:focus-within{background-color:var(--l-pass-secondary-a)}.lumia-scope .focus-within\\:outline-none:focus-within{outline:2px solid transparent;outline-offset:2px}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-bg\\)\\]:hover{background-color:var(--l-pass-bg)}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-primary-h\\)\\]:hover{background-color:var(--l-pass-primary-h)}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-secondary-h\\)\\]:hover{background-color:var(--l-pass-secondary-h)}.lumia-scope .hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-yellow-600:hover{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:text-\\[\\#c3f53c\\]:hover{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-\\[var\\(--l-pass-fg-h\\)\\]:hover{color:var(--l-pass-fg-h)}.lumia-scope .hover\\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.lumia-scope .hover\\:underline:hover{text-decoration-line:underline}.lumia-scope .file\\:hover\\:opacity-90:hover::file-selector-button{opacity:.9}.lumia-scope .focus\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:focus{background-color:var(--l-pass-secondary-a)}.lumia-scope .focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.lumia-scope .focus\\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px}.lumia-scope .focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.lumia-scope .focus-visible\\:ring-0:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus-visible\\:ring-\\[2px\\]:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus-visible\\:ring-transparent:focus-visible{--tw-ring-color:transparent}.lumia-scope .focus-visible\\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px}.lumia-scope .active\\:bg-\\[var\\(--l-pass-bg\\)\\]:active{background-color:var(--l-pass-bg)}.lumia-scope .active\\:bg-\\[var\\(--l-pass-primary-a\\)\\]:active{background-color:var(--l-pass-primary-a)}.lumia-scope .active\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:active{background-color:var(--l-pass-secondary-a)}.lumia-scope .active\\:text-\\[\\#c3f53c\\]:active{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .active\\:text-\\[var\\(--l-pass-fg-a\\)\\]:active{color:var(--l-pass-fg-a)}.lumia-scope .file\\:active\\:opacity-80:active::file-selector-button{opacity:.8}.lumia-scope .disabled\\:cursor-default:disabled{cursor:default}.lumia-scope .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.lumia-scope .disabled\\:opacity-50:disabled{opacity:.5}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-bg\\)\\]:hover:disabled{background-color:var(--l-pass-bg)}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-primary\\)\\]:hover:disabled{background-color:var(--l-pass-primary)}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-secondary\\)\\]:hover:disabled{background-color:var(--l-pass-secondary)}.lumia-scope .disabled\\:hover\\:text-\\[var\\(--l-pass-fg\\)\\]:hover:disabled{color:var(--l-pass-fg)}.lumia-scope .disabled\\:active\\:bg-\\[var\\(--l-pass-bg\\)\\]:active:disabled{background-color:var(--l-pass-bg)}.lumia-scope .disabled\\:active\\:bg-\\[var\\(--l-pass-primary\\)\\]:active:disabled{background-color:var(--l-pass-primary)}.lumia-scope .disabled\\:active\\:text-\\[var\\(--l-pass-fg\\)\\]:active:disabled{color:var(--l-pass-fg)}.lumia-scope :is(.group:hover .group-hover\\:opacity-100){opacity:1}.lumia-scope :is(.group:hover .group-hover\\:opacity-60){opacity:.6}.lumia-scope .data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.lumia-scope .data-\\[size\\=default\\]\\:h-12[data-size=default]{height:3rem}.lumia-scope .data-\\[size\\=sm\\]\\:h-10[data-size=sm]{height:2.5rem}.lumia-scope .data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.lumia-scope .data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom],.lumia-scope .data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.lumia-scope .data-\\[side\\=right\\]\\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.lumia-scope .data-\\[side\\=right\\]\\:translate-x-1[data-side=right],.lumia-scope .data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.lumia-scope .data-\\[state\\=checked\\]\\:border-\\[var\\(--l-pass-bd-intense\\)\\][data-state=checked]{border-color:var(--l-pass-bd-intense)}.lumia-scope .data-\\[state\\=checked\\]\\:bg-\\[var\\(--l-pass-secondary\\)\\][data-state=checked]{background-color:var(--l-pass-secondary)}.lumia-scope .data-\\[state\\=checked\\]\\:text-\\[var\\(--l-pass-fg\\)\\][data-state=checked]{color:var(--l-pass-fg)}.lumia-scope .data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1[data-slot=select-value]>*){overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:flex[data-slot=select-value]>*){display:flex}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:items-center[data-slot=select-value]>*){align-items:center}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:gap-\\[var\\(--l-pass-gap\\)\\][data-slot=select-value]>*){gap:var(--l-pass-gap)}@media (min-width:640px){.lumia-scope .sm\\:flex-row{flex-direction:row}.lumia-scope .sm\\:justify-end{justify-content:flex-end}.lumia-scope :is(.sm\\:space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope .sm\\:text-left{text-align:left}}@media (min-width:768px){.lumia-scope .md\\:h-8{height:2rem}.lumia-scope .md\\:w-8{width:2rem}.lumia-scope .md\\:gap-\\[var\\(--l-pass-gap\\)\\]{gap:var(--l-pass-gap)}.lumia-scope .md\\:py-1{padding-top:.25rem;padding-bottom:.25rem}}@media (prefers-color-scheme:dark){.lumia-scope .dark\\:bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-yellow-500:hover{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}}.lumia-scope :is(.\\[\\&_svg\\:not\\(\\[class\\*\\=\\\'size-\\\'\\]\\)\\]\\:size-4 svg:not([class*=size-])){width:1rem;height:1rem}.lumia-scope :is(.\\[\\&_svg\\]\\:pointer-events-none svg){pointer-events:none}.lumia-scope :is(.\\[\\&_svg\\]\\:shrink-0 svg){flex-shrink:0}';
|
|
4479
|
+
var built_default = '.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\\201C""\\201D""\\2018""\\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgba(17,24,39,.1);--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:hsla(0,0%,100%,.1);--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.lumia-scope .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.lumia-scope .pointer-events-none{pointer-events:none}.lumia-scope .pointer-events-auto{pointer-events:auto}.lumia-scope .visible{visibility:visible}.lumia-scope .invisible{visibility:hidden}.lumia-scope .collapse{visibility:collapse}.lumia-scope .static{position:static}.lumia-scope .fixed{position:fixed}.lumia-scope .absolute{position:absolute}.lumia-scope .relative{position:relative}.lumia-scope .inset-0{inset:0}.lumia-scope .inset-y-0{top:0;bottom:0}.lumia-scope .-bottom-1{bottom:-.25rem}.lumia-scope .-right-1{right:-.25rem}.lumia-scope .-right-2{right:-.5rem}.lumia-scope .-top-1{top:-.25rem}.lumia-scope .-top-2{top:-.5rem}.lumia-scope .-top-3{top:-.75rem}.lumia-scope .bottom-full{bottom:100%}.lumia-scope .left-0{left:0}.lumia-scope .left-1{left:.25rem}.lumia-scope .left-1\\/2{left:50%}.lumia-scope .left-3{left:.75rem}.lumia-scope .left-4{left:1rem}.lumia-scope .right-0{right:0}.lumia-scope .right-2{right:.5rem}.lumia-scope .right-3{right:.75rem}.lumia-scope .right-4{right:1rem}.lumia-scope .right-\\[var\\(--l-pass-pd\\)\\]{right:var(--l-pass-pd)}.lumia-scope .right-full{right:100%}.lumia-scope .top-0{top:0}.lumia-scope .top-1{top:.25rem}.lumia-scope .top-1\\/2{top:50%}.lumia-scope .top-3{top:.75rem}.lumia-scope .top-4{top:1rem}.lumia-scope .top-\\[var\\(--l-pass-pd\\)\\]{top:var(--l-pass-pd)}.lumia-scope .top-full{top:100%}.lumia-scope .z-10{z-index:10}.lumia-scope .z-50{z-index:50}.lumia-scope .z-\\[9998\\]{z-index:9998}.lumia-scope .z-\\[9999\\]{z-index:9999}.lumia-scope .-m-px{margin:-1px}.lumia-scope .m-0{margin:0}.lumia-scope .m-4{margin:1rem}.lumia-scope .-mx-1{margin-left:-.25rem;margin-right:-.25rem}.lumia-scope .-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.lumia-scope .mx-1{margin-left:.25rem;margin-right:.25rem}.lumia-scope .mx-auto{margin-left:auto;margin-right:auto}.lumia-scope .my-1{margin-top:.25rem;margin-bottom:.25rem}.lumia-scope .my-6{margin-top:1.5rem;margin-bottom:1.5rem}.lumia-scope .my-auto{margin-top:auto;margin-bottom:auto}.lumia-scope .-mt-5{margin-top:-1.25rem}.lumia-scope .mb-1{margin-bottom:.25rem}.lumia-scope .mb-2{margin-bottom:.5rem}.lumia-scope .mb-3{margin-bottom:.75rem}.lumia-scope .mb-4{margin-bottom:1rem}.lumia-scope .mb-6{margin-bottom:1.5rem}.lumia-scope .mb-8{margin-bottom:2rem}.lumia-scope .ml-1{margin-left:.25rem}.lumia-scope .ml-2{margin-left:.5rem}.lumia-scope .ml-3{margin-left:.75rem}.lumia-scope .ml-4{margin-left:1rem}.lumia-scope .ml-auto{margin-left:auto}.lumia-scope .mr-1{margin-right:.25rem}.lumia-scope .mr-2{margin-right:.5rem}.lumia-scope .mr-4{margin-right:1rem}.lumia-scope .mt-0{margin-top:0}.lumia-scope .mt-1{margin-top:.25rem}.lumia-scope .mt-2{margin-top:.5rem}.lumia-scope .mt-3{margin-top:.75rem}.lumia-scope .mt-4{margin-top:1rem}.lumia-scope .mt-6{margin-top:1.5rem}.lumia-scope .block{display:block}.lumia-scope .inline-block{display:inline-block}.lumia-scope .inline{display:inline}.lumia-scope .flex{display:flex}.lumia-scope .inline-flex{display:inline-flex}.lumia-scope .table{display:table}.lumia-scope .grid{display:grid}.lumia-scope .contents{display:contents}.lumia-scope .hidden{display:none}.lumia-scope .aspect-square{aspect-ratio:1/1}.lumia-scope .size-3{width:.75rem;height:.75rem}.lumia-scope .size-3\\.5{width:.875rem;height:.875rem}.lumia-scope .size-4{width:1rem;height:1rem}.lumia-scope .size-5{width:1.25rem;height:1.25rem}.lumia-scope .h-10{height:2.5rem}.lumia-scope .h-11{height:2.75rem}.lumia-scope .h-12{height:3rem}.lumia-scope .h-14{height:3.5rem}.lumia-scope .h-16{height:4rem}.lumia-scope .h-2{height:.5rem}.lumia-scope .h-2\\.5{height:.625rem}.lumia-scope .h-20{height:5rem}.lumia-scope .h-3{height:.75rem}.lumia-scope .h-3\\.5{height:.875rem}.lumia-scope .h-4{height:1rem}.lumia-scope .h-48{height:12rem}.lumia-scope .h-5{height:1.25rem}.lumia-scope .h-6{height:1.5rem}.lumia-scope .h-7{height:1.75rem}.lumia-scope .h-8{height:2rem}.lumia-scope .h-9{height:2.25rem}.lumia-scope .h-\\[100dvh\\]{height:100dvh}.lumia-scope .h-\\[48px\\]{height:48px}.lumia-scope .h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.lumia-scope .h-fit{height:-moz-fit-content;height:fit-content}.lumia-scope .h-full{height:100%}.lumia-scope .h-px{height:1px}.lumia-scope .max-h-24{max-height:6rem}.lumia-scope .max-h-96{max-height:24rem}.lumia-scope .max-h-\\[95dvh\\]{max-height:95dvh}.lumia-scope .w-10{width:2.5rem}.lumia-scope .w-12{width:3rem}.lumia-scope .w-16{width:4rem}.lumia-scope .w-2{width:.5rem}.lumia-scope .w-2\\.5{width:.625rem}.lumia-scope .w-20{width:5rem}.lumia-scope .w-3{width:.75rem}.lumia-scope .w-3\\.5{width:.875rem}.lumia-scope .w-4{width:1rem}.lumia-scope .w-48{width:12rem}.lumia-scope .w-5{width:1.25rem}.lumia-scope .w-6{width:1.5rem}.lumia-scope .w-8{width:2rem}.lumia-scope .w-9{width:2.25rem}.lumia-scope .w-\\[100dvw\\]{width:100dvw}.lumia-scope .w-\\[40px\\]{width:40px}.lumia-scope .w-\\[var\\(--l-pass-maw\\)\\]{width:var(--l-pass-maw)}.lumia-scope .w-fit{width:-moz-fit-content;width:fit-content}.lumia-scope .w-full{width:100%}.lumia-scope .w-px{width:1px}.lumia-scope .min-w-0{min-width:0}.lumia-scope .min-w-16{min-width:4rem}.lumia-scope .min-w-24{min-width:6rem}.lumia-scope .min-w-32{min-width:8rem}.lumia-scope .min-w-4{min-width:1rem}.lumia-scope .min-w-5{min-width:1.25rem}.lumia-scope .min-w-\\[256px\\]{min-width:256px}.lumia-scope .min-w-\\[8rem\\]{min-width:8rem}.lumia-scope .min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.lumia-scope .max-w-2xl{max-width:42rem}.lumia-scope .max-w-\\[144px\\]{max-width:144px}.lumia-scope .max-w-\\[150px\\]{max-width:150px}.lumia-scope .max-w-\\[160px\\]{max-width:160px}.lumia-scope .max-w-\\[256px\\]{max-width:256px}.lumia-scope .max-w-\\[680px\\]{max-width:680px}.lumia-scope .max-w-full{max-width:100%}.lumia-scope .max-w-lg{max-width:32rem}.lumia-scope .max-w-md{max-width:28rem}.lumia-scope .max-w-sm{max-width:24rem}.lumia-scope .flex-1{flex:1 1 0%}.lumia-scope .flex-none{flex:none}.lumia-scope .flex-shrink{flex-shrink:1}.lumia-scope .flex-shrink-0,.lumia-scope .shrink-0{flex-shrink:0}.lumia-scope .border-collapse{border-collapse:collapse}.lumia-scope .-translate-x-1{--tw-translate-x:-0.25rem}.lumia-scope .-translate-x-1,.lumia-scope .-translate-x-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .-translate-x-1\\/2{--tw-translate-x:-50%}.lumia-scope .-translate-x-\\[var\\(--l-pass-gap\\)\\]{--tw-translate-x:calc(var(--l-pass-gap)*-1)}.lumia-scope .-translate-x-\\[var\\(--l-pass-gap\\)\\],.lumia-scope .-translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .-translate-y-1{--tw-translate-y:-0.25rem}.lumia-scope .-translate-y-1\\/2{--tw-translate-y:-50%}.lumia-scope .-translate-y-1\\/2,.lumia-scope .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes glow-warning{0%,to{transform:scale(1);box-shadow:0 0 16px var(--l-pass-bg-warning)}50%{transform:scale(.97);box-shadow:0 0 4px var(--l-pass-bg-warning)}}.lumia-scope .animate-glow-warning{animation:glow-warning 2s ease infinite}@keyframes pulse-warning{0%,to{opacity:1}50%{opacity:.6}}.lumia-scope .animate-pulse-warning{animation:pulse-warning 2s ease infinite}@keyframes spin{to{transform:rotate(1turn)}}.lumia-scope .animate-spin{animation:spin 1s linear infinite}.lumia-scope .cursor-default{cursor:default}.lumia-scope .cursor-not-allowed{cursor:not-allowed}.lumia-scope .cursor-pointer{cursor:pointer}.lumia-scope .cursor-text{cursor:text}.lumia-scope .select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.lumia-scope .select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.lumia-scope .resize{resize:both}.lumia-scope .scroll-my-1{scroll-margin-top:.25rem;scroll-margin-bottom:.25rem}.lumia-scope .list-inside{list-style-position:inside}.lumia-scope .list-disc{list-style-type:disc}.lumia-scope .appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.lumia-scope .grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lumia-scope .grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lumia-scope .grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lumia-scope .grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lumia-scope .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lumia-scope .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lumia-scope .grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lumia-scope .grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lumia-scope .grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lumia-scope .grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lumia-scope .grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lumia-scope .flex-row{flex-direction:row}.lumia-scope .flex-col{flex-direction:column}.lumia-scope .flex-col-reverse{flex-direction:column-reverse}.lumia-scope .flex-wrap{flex-wrap:wrap}.lumia-scope .place-content-center{place-content:center}.lumia-scope .items-start{align-items:flex-start}.lumia-scope .items-end{align-items:flex-end}.lumia-scope .items-center{align-items:center}.lumia-scope .justify-start{justify-content:flex-start}.lumia-scope .justify-end{justify-content:flex-end}.lumia-scope .justify-center{justify-content:center}.lumia-scope .justify-between{justify-content:space-between}.lumia-scope .justify-evenly{justify-content:space-evenly}.lumia-scope .gap-0{gap:0}.lumia-scope .gap-0\\.5{gap:.125rem}.lumia-scope .gap-1{gap:.25rem}.lumia-scope .gap-1\\.5{gap:.375rem}.lumia-scope .gap-2{gap:.5rem}.lumia-scope .gap-3{gap:.75rem}.lumia-scope .gap-4{gap:1rem}.lumia-scope .gap-\\[10px\\]{gap:10px}.lumia-scope .gap-\\[var\\(--l-pass-gap\\)\\]{gap:var(--l-pass-gap)}.lumia-scope :is(.space-x-1>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-3>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.75rem*var(--tw-space-x-reverse));margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-4>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-y-0>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-0\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-3>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-4>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-6>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.lumia-scope .overflow-auto{overflow:auto}.lumia-scope .overflow-hidden{overflow:hidden}.lumia-scope .overflow-visible{overflow:visible}.lumia-scope .overflow-y-auto{overflow-y:auto}.lumia-scope .overflow-x-hidden{overflow-x:hidden}.lumia-scope .overflow-y-hidden{overflow-y:hidden}.lumia-scope .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lumia-scope .text-ellipsis{text-overflow:ellipsis}.lumia-scope .whitespace-nowrap{white-space:nowrap}.lumia-scope .whitespace-pre-line{white-space:pre-line}.lumia-scope .whitespace-pre-wrap{white-space:pre-wrap}.lumia-scope .break-normal{overflow-wrap:normal;word-break:normal}.lumia-scope .break-words{overflow-wrap:break-word}.lumia-scope .break-all{word-break:break-all}.lumia-scope .rounded{border-radius:.25rem}.lumia-scope .rounded-2xl{border-radius:1rem}.lumia-scope .rounded-3xl{border-radius:1.5rem}.lumia-scope .rounded-\\[10px\\]{border-radius:10px}.lumia-scope .rounded-\\[5px\\]{border-radius:5px}.lumia-scope .rounded-\\[var\\(--l-pass-bdrs\\)\\]{border-radius:var(--l-pass-bdrs)}.lumia-scope .rounded-\\[var\\(--l-pass-el-bdrs\\)\\]{border-radius:var(--l-pass-el-bdrs)}.lumia-scope .rounded-full{border-radius:9999px}.lumia-scope .rounded-lg{border-radius:.5rem}.lumia-scope .rounded-md{border-radius:.375rem}.lumia-scope .rounded-sm{border-radius:.125rem}.lumia-scope .rounded-xl{border-radius:.75rem}.lumia-scope .border{border-width:1px}.lumia-scope .border-0{border-width:0}.lumia-scope .border-2{border-width:2px}.lumia-scope .border-b{border-bottom-width:1px}.lumia-scope .border-b-2{border-bottom-width:2px}.lumia-scope .border-t{border-top-width:1px}.lumia-scope .border-dashed{border-style:dashed}.lumia-scope .border-\\[var\\(--l-pass-bd\\)\\]{border-color:var(--l-pass-bd)}.lumia-scope .border-\\[var\\(--l-pass-error\\)\\]{border-color:var(--l-pass-error)}.lumia-scope .border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.lumia-scope .border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.lumia-scope .border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity,1))}.lumia-scope .border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.lumia-scope .border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity,1))}.lumia-scope .border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.lumia-scope .border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.lumia-scope .border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.lumia-scope .border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.lumia-scope .border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity,1))}.lumia-scope .border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity,1))}.lumia-scope .border-current{border-color:currentColor}.lumia-scope .border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.lumia-scope .border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.lumia-scope .border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.lumia-scope .border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.lumia-scope .border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity,1))}.lumia-scope .border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.lumia-scope .border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity,1))}.lumia-scope .border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity,1))}.lumia-scope .border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity,1))}.lumia-scope .border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.lumia-scope .border-orange-800{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity,1))}.lumia-scope .border-orange-900{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity,1))}.lumia-scope .border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.lumia-scope .border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity,1))}.lumia-scope .border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity,1))}.lumia-scope .border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.lumia-scope .border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.lumia-scope .border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.lumia-scope .border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.lumia-scope .border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity,1))}.lumia-scope .border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity,1))}.lumia-scope .border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity,1))}.lumia-scope .border-sky-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity,1))}.lumia-scope .border-sky-900{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity,1))}.lumia-scope .border-transparent{border-color:transparent}.lumia-scope .border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.lumia-scope .border-t-transparent{border-top-color:transparent}.lumia-scope .bg-\\[\\#002c15\\]{--tw-bg-opacity:1;background-color:rgb(0 44 21/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#081f2c\\]{--tw-bg-opacity:1;background-color:rgb(8 31 44/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#f3ba2f\\]{--tw-bg-opacity:1;background-color:rgb(243 186 47/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[var\\(--l-pass-accent\\)\\]{background-color:var(--l-pass-accent)}.lumia-scope .bg-\\[var\\(--l-pass-bg\\)\\]{background-color:var(--l-pass-bg)}.lumia-scope .bg-\\[var\\(--l-pass-bg-error\\)\\]{background-color:var(--l-pass-bg-error)}.lumia-scope .bg-\\[var\\(--l-pass-bg-info\\)\\]{background-color:var(--l-pass-bg-info)}.lumia-scope .bg-\\[var\\(--l-pass-bg-muted\\)\\]{background-color:var(--l-pass-bg-muted)}.lumia-scope .bg-\\[var\\(--l-pass-bg-success\\)\\]{background-color:var(--l-pass-bg-success)}.lumia-scope .bg-\\[var\\(--l-pass-bg-warning\\)\\]{background-color:var(--l-pass-bg-warning)}.lumia-scope .bg-\\[var\\(--l-pass-error\\)\\]{background-color:var(--l-pass-error)}.lumia-scope .bg-\\[var\\(--l-pass-fg\\)\\]{background-color:var(--l-pass-fg)}.lumia-scope .bg-\\[var\\(--l-pass-overlay\\)\\]{background-color:var(--l-pass-overlay)}.lumia-scope .bg-\\[var\\(--l-pass-primary\\)\\]{background-color:var(--l-pass-primary)}.lumia-scope .bg-\\[var\\(--l-pass-secondary\\)\\]{background-color:var(--l-pass-secondary)}.lumia-scope .bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-950{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity,1))}.lumia-scope .bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-700{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-800{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-900{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-950{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity,1))}.lumia-scope .bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.lumia-scope .bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.lumia-scope .bg-transparent{background-color:transparent}.lumia-scope .bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.lumia-scope .bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.lumia-scope .bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.lumia-scope .from-purple-100{--tw-gradient-from:#f3e8ff var(--tw-gradient-from-position);--tw-gradient-to:rgba(243,232,255,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .from-purple-500{--tw-gradient-from:#a855f7 var(--tw-gradient-from-position);--tw-gradient-to:rgba(168,85,247,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .from-purple-600{--tw-gradient-from:#9333ea var(--tw-gradient-from-position);--tw-gradient-to:rgba(147,51,234,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .to-blue-100{--tw-gradient-to:#dbeafe var(--tw-gradient-to-position)}.lumia-scope .to-blue-500{--tw-gradient-to:#3b82f6 var(--tw-gradient-to-position)}.lumia-scope .to-blue-600{--tw-gradient-to:#2563eb var(--tw-gradient-to-position)}.lumia-scope .object-contain{-o-object-fit:contain;object-fit:contain}.lumia-scope .object-cover{-o-object-fit:cover;object-fit:cover}.lumia-scope .p-0{padding:0}.lumia-scope .p-1{padding:.25rem}.lumia-scope .p-2{padding:.5rem}.lumia-scope .p-3{padding:.75rem}.lumia-scope .p-4{padding:1rem}.lumia-scope .p-5{padding:1.25rem}.lumia-scope .p-6{padding:1.5rem}.lumia-scope .p-8{padding:2rem}.lumia-scope .p-\\[var\\(--l-pass-gap\\)\\]{padding:var(--l-pass-gap)}.lumia-scope .p-\\[var\\(--l-pass-pd\\)\\]{padding:var(--l-pass-pd)}.lumia-scope .px-0{padding-left:0;padding-right:0}.lumia-scope .px-1{padding-left:.25rem;padding-right:.25rem}.lumia-scope .px-12{padding-left:3rem;padding-right:3rem}.lumia-scope .px-2{padding-left:.5rem;padding-right:.5rem}.lumia-scope .px-2\\.5{padding-left:.625rem;padding-right:.625rem}.lumia-scope .px-3{padding-left:.75rem;padding-right:.75rem}.lumia-scope .px-4{padding-left:1rem;padding-right:1rem}.lumia-scope .px-5{padding-left:1.25rem;padding-right:1.25rem}.lumia-scope .px-6{padding-left:1.5rem;padding-right:1.5rem}.lumia-scope .px-8{padding-left:2rem;padding-right:2rem}.lumia-scope .px-\\[2px\\]{padding-left:2px;padding-right:2px}.lumia-scope .px-\\[var\\(--l-pass-gap\\)\\]{padding-left:var(--l-pass-gap);padding-right:var(--l-pass-gap)}.lumia-scope .px-\\[var\\(--l-pass-pd\\)\\]{padding-left:var(--l-pass-pd);padding-right:var(--l-pass-pd)}.lumia-scope .py-0{padding-top:0;padding-bottom:0}.lumia-scope .py-0\\.5{padding-top:.125rem;padding-bottom:.125rem}.lumia-scope .py-1{padding-top:.25rem;padding-bottom:.25rem}.lumia-scope .py-1\\.5{padding-top:.375rem;padding-bottom:.375rem}.lumia-scope .py-2{padding-top:.5rem;padding-bottom:.5rem}.lumia-scope .py-3{padding-top:.75rem;padding-bottom:.75rem}.lumia-scope .py-4{padding-top:1rem;padding-bottom:1rem}.lumia-scope .py-8{padding-top:2rem;padding-bottom:2rem}.lumia-scope .py-\\[10px\\]{padding-top:10px;padding-bottom:10px}.lumia-scope .py-\\[var\\(--l-pass-pd\\)\\]{padding-top:var(--l-pass-pd);padding-bottom:var(--l-pass-pd)}.lumia-scope .pb-2{padding-bottom:.5rem}.lumia-scope .pb-3{padding-bottom:.75rem}.lumia-scope .pb-4{padding-bottom:1rem}.lumia-scope .pb-5{padding-bottom:1.25rem}.lumia-scope .pb-6{padding-bottom:1.5rem}.lumia-scope .pl-11{padding-left:2.75rem}.lumia-scope .pl-2{padding-left:.5rem}.lumia-scope .pr-10{padding-right:2.5rem}.lumia-scope .pr-16{padding-right:4rem}.lumia-scope .pr-8{padding-right:2rem}.lumia-scope .pt-0{padding-top:0}.lumia-scope .pt-2{padding-top:.5rem}.lumia-scope .pt-3{padding-top:.75rem}.lumia-scope .pt-4{padding-top:1rem}.lumia-scope .pt-5{padding-top:1.25rem}.lumia-scope .text-left{text-align:left}.lumia-scope .text-center{text-align:center}.lumia-scope .text-right{text-align:right}.lumia-scope .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.lumia-scope .font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.lumia-scope .text-2xl{font-size:1.5rem;line-height:2rem}.lumia-scope .text-3xl{font-size:1.875rem;line-height:2.25rem}.lumia-scope .text-4xl{font-size:2.25rem;line-height:2.5rem}.lumia-scope .text-\\[10px\\]{font-size:10px}.lumia-scope .text-\\[14px\\]{font-size:14px}.lumia-scope .text-\\[16px\\]{font-size:16px}.lumia-scope .text-\\[8px\\]{font-size:8px}.lumia-scope .text-base{font-size:1rem;line-height:1.5rem}.lumia-scope .text-lg{font-size:1.125rem;line-height:1.75rem}.lumia-scope .text-sm{font-size:.875rem;line-height:1.25rem}.lumia-scope .text-xl{font-size:1.25rem;line-height:1.75rem}.lumia-scope .text-xs{font-size:.75rem;line-height:1rem}.lumia-scope .font-bold{font-weight:700}.lumia-scope .font-medium{font-weight:500}.lumia-scope .font-normal{font-weight:400}.lumia-scope .font-semibold{font-weight:600}.lumia-scope .uppercase{text-transform:uppercase}.lumia-scope .lowercase{text-transform:lowercase}.lumia-scope .italic{font-style:italic}.lumia-scope .leading-4{line-height:1rem}.lumia-scope .leading-5{line-height:1.25rem}.lumia-scope .leading-6{line-height:1.5rem}.lumia-scope .leading-8{line-height:2rem}.lumia-scope .leading-\\[8px\\]{line-height:8px}.lumia-scope .leading-none{line-height:1}.lumia-scope .leading-relaxed{line-height:1.625}.lumia-scope .leading-tight{line-height:1.25}.lumia-scope .tracking-tight{letter-spacing:-.025em}.lumia-scope .tracking-wide{letter-spacing:.025em}.lumia-scope .text-\\[\\#c3f53c\\]{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .text-\\[var\\(--l-pass-bg-error\\)\\]{color:var(--l-pass-bg-error)}.lumia-scope .text-\\[var\\(--l-pass-bg-success\\)\\]{color:var(--l-pass-bg-success)}.lumia-scope .text-\\[var\\(--l-pass-bg-warning\\)\\]{color:var(--l-pass-bg-warning)}.lumia-scope .text-\\[var\\(--l-pass-error\\)\\]{color:var(--l-pass-error)}.lumia-scope .text-\\[var\\(--l-pass-fg\\)\\]{color:var(--l-pass-fg)}.lumia-scope .text-\\[var\\(--l-pass-fg-inverted\\)\\]{color:var(--l-pass-fg-inverted)}.lumia-scope .text-\\[var\\(--l-pass-fg-muted\\)\\]{color:var(--l-pass-fg-muted)}.lumia-scope .text-\\[var\\(--l-pass-info\\)\\]{color:var(--l-pass-info)}.lumia-scope .text-\\[var\\(--l-pass-success\\)\\]{color:var(--l-pass-success)}.lumia-scope .text-\\[var\\(--l-pass-text-secondary\\)\\]{color:var(--l-pass-text-secondary)}.lumia-scope .text-\\[var\\(--l-pass-warning\\)\\]{color:var(--l-pass-warning)}.lumia-scope .text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity,1))}.lumia-scope .text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity,1))}.lumia-scope .text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity,1))}.lumia-scope .text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.lumia-scope .text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.lumia-scope .text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.lumia-scope .text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.lumia-scope .text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity,1))}.lumia-scope .text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.lumia-scope .text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.lumia-scope .text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.lumia-scope .text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.lumia-scope .text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.lumia-scope .text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.lumia-scope .text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.lumia-scope .text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.lumia-scope .text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.lumia-scope .text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.lumia-scope .text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.lumia-scope .text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.lumia-scope .text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.lumia-scope .text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.lumia-scope .text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity,1))}.lumia-scope .text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.lumia-scope .text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.lumia-scope .text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.lumia-scope .text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.lumia-scope .text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.lumia-scope .text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity,1))}.lumia-scope .text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.lumia-scope .text-orange-100{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity,1))}.lumia-scope .text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity,1))}.lumia-scope .text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity,1))}.lumia-scope .text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.lumia-scope .text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.lumia-scope .text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.lumia-scope .text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.lumia-scope .text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity,1))}.lumia-scope .text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.lumia-scope .text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.lumia-scope .text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.lumia-scope .text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.lumia-scope .text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.lumia-scope .text-red-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity,1))}.lumia-scope .text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.lumia-scope .text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.lumia-scope .text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.lumia-scope .text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.lumia-scope .text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.lumia-scope .text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.lumia-scope .text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.lumia-scope .text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.lumia-scope .text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity,1))}.lumia-scope .text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity,1))}.lumia-scope .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.lumia-scope .text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.lumia-scope .underline{text-decoration-line:underline}.lumia-scope .underline-offset-2{text-underline-offset:2px}.lumia-scope .underline-offset-4{text-underline-offset:4px}.lumia-scope .antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lumia-scope .opacity-0{opacity:0}.lumia-scope .opacity-100{opacity:1}.lumia-scope .opacity-40{opacity:.4}.lumia-scope .opacity-50{opacity:.5}.lumia-scope .opacity-60{opacity:.6}.lumia-scope .shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.lumia-scope .shadow,.lumia-scope .shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.lumia-scope .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.lumia-scope .shadow-lg,.lumia-scope .shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.lumia-scope .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.lumia-scope .shadow-sm,.lumia-scope .shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.lumia-scope .outline-none{outline:2px solid transparent;outline-offset:2px}.lumia-scope .outline{outline-style:solid}.lumia-scope .blur{--tw-blur:blur(8px)}.lumia-scope .blur,.lumia-scope .grayscale{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.lumia-scope .grayscale{--tw-grayscale:grayscale(100%)}.lumia-scope .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.lumia-scope .backdrop-blur{--tw-backdrop-blur:blur(8px)}.lumia-scope .backdrop-blur,.lumia-scope .backdrop-blur-sm{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.lumia-scope .backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.lumia-scope .backdrop-filter{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.lumia-scope .transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-\\[color\\2c box-shadow\\]{transition-property:color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-none{transition-property:none}.lumia-scope .transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .duration-200{transition-duration:.2s}.lumia-scope .ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.lumia-scope .ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.lumia-scope{--l-pass-ff:var(--lumia-passport-ff,-apple-system,BlinkMacSystemFont,"Inter",system-ui,sans-serif);--l-pass-maw:var(--lumia-passport-maw,384px);--l-pass-pd:var(--lumia-passport-pd,12px);--l-pass-gap:var(--lumia-passport-gap,10px);--l-pass-bdrs:var(--lumia-passport-bdrs,20px);--l-pass-el-bdrs:var(--lumia-passport-element-bdrs,10px);--l-pass-backdrop-blur:var(--lumia-passport-backdrop-blur,10px)}.lumia-scope[data-lumia-passport-mode=light]{--l-pass-overlay:var(--lumia-passport-overlay,hsla(0,0%,100%,.8));--l-pass-bg:var(--lumia-passport-bg,#fff);--l-pass-fg:var(--lumia-passport-fg,#000);--l-pass-fg-h:var(--lumia-passport-fg-h,rgba(0,0,0,.6));--l-pass-fg-a:var(--lumia-passport-fg-a,rgba(0,0,0,.4));--l-pass-fg-inverted:var(--lumia-passport-fg-inverted,#fff);--l-pass-fg-muted:var(--lumia-passport-fg-muted,rgba(0,0,0,.6));--l-pass-primary:var(--lumia-passport-primary,#000);--l-pass-primary-h:var(--lumia-passport-primary-h,rgba(0,0,0,.8));--l-pass-primary-a:var(--lumia-passport-primary-a,rgba(0,0,0,.6));--l-pass-secondary:var(--lumia-passport-secondary,#e4e4e4);--l-pass-secondary-h:var(--lumia-passport-secondary-h,hsla(0,0%,89%,.8));--l-pass-secondary-a:var(--lumia-passport-secondary-a,hsla(0,0%,89%,.6));--l-pass-bd:var(--lumia-passport-bd,#ebebeb);--l-pass-bd-intense:var(--lumia-passport-bd-intense,#a9a9a9);--l-pass-shadow-c:var(--lumia-passport-shadow-c,rgba(0,0,0,.1));--l-pass-info:var(--lumia-passport-info,var(--l-pass-fg));--l-pass-bg-info:var(--lumia-passport-bg-info,#e4e4e4);--l-pass-success:var(--lumia-passport-success,var(--l-pass-fg));--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,var(--l-pass-fg));--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#fff);--l-pass-bg-error:var(--lumia-passport-bg-error,#d6204e)}.lumia-scope[data-lumia-passport-mode=dark]{--l-pass-overlay:var(--lumia-passport-overlay,rgba(0,0,0,.8));--l-pass-bg:var(--lumia-passport-bg,#1a1a1a);--l-pass-fg:var(--lumia-passport-fg,#fff);--l-pass-fg-h:var(--lumia-passport-fg-h,hsla(0,0%,100%,.6));--l-pass-fg-a:var(--lumia-passport-fg-a,hsla(0,0%,100%,.4));--l-pass-fg-inverted:var(--lumia-passport-fg-inverted,#000);--l-pass-fg-muted:var(--lumia-passport-fg-muted,hsla(0,0%,100%,.6));--l-pass-primary:var(--lumia-passport-primary,#fff);--l-pass-primary-h:var(--lumia-passport-primary-h,hsla(0,0%,100%,.8));--l-pass-primary-a:var(--lumia-passport-primary-a,hsla(0,0%,100%,.6));--l-pass-secondary:var(--lumia-passport-secondary,#2a2a2a);--l-pass-secondary-h:var(--lumia-passport-secondary-h,rgba(42,42,42,.6));--l-pass-secondary-a:var(--lumia-passport-secondary-a,rgba(42,42,42,.4));--l-pass-bd:var(--lumia-passport-bd,#3a3a3a);--l-pass-bd-intense:var(--lumia-passport-bd-intense,#4a4a4a);--l-pass-shadow-c:var(--lumia-passport-shadow-c,rgba(0,0,0,.1));--l-pass-info:var(--lumia-passport-info,var(--l-pass-fg));--l-pass-bg-info:var(--lumia-passport-bg-info,#2a2a2a);--l-pass-success:var(--lumia-passport-success,var(--l-pass-fg-inverted));--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,var(--l-pass-fg-inverted));--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#fff);--l-pass-bg-error:var(--lumia-passport-bg-error,#d6204e)}.lumia-scope,.lumia-scope *{margin:0;box-sizing:border-box;font-family:var(--l-pass-ff);font-optical-sizing:auto;-webkit-tap-highlight-color:transparent;-moz-tap-highlight-color:transparent;-ms-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lumia-scope button,.lumia-scope h1,.lumia-scope h2,.lumia-scope h3,.lumia-scope h4,.lumia-scope h5,.lumia-scope h6,.lumia-scope input,.lumia-scope p,.lumia-scope select,.lumia-scope textarea{font-family:var(--l-pass-ff)!important;margin:0}.lumia-scope button,.lumia-scope input,.lumia-scope select,.lumia-scope textarea{border-style:solid;outline:none!important;appearance:none!important;-webkit-appearance:none;-moz-appearance:none}.lumia-scope input,.lumia-scope textarea{font-size:16px!important}.lumia-scope .lumia-passport-button{box-shadow:0 4px 20px var(--l-pass-shadow-c),inset 0 0 0 1px var(--l-pass-bd);transition:transform .25s ease}.lumia-scope .lumia-passport-button:hover{transform:scale(1.02)}.lumia-scope .lumia-passport-button:active{transform:scale(1)}@keyframes lumia-mobile-dialog-fade-in{0%{opacity:0;transform:translateY(64px)}to{opacity:1;transform:translateY(0)}}@keyframes lumia-mobile-dialog-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(64px)}}.lumia-scope .animate-mobile-dialog-in{animation:lumia-mobile-dialog-fade-in 375ms ease}.lumia-scope .animate-mobile-dialog-out{animation:lumia-mobile-dialog-fade-out 375ms ease}@keyframes lumia-dialog-fade-in{0%{opacity:0}to{opacity:1}}@keyframes lumia-dialog-fade-out{0%{opacity:1}to{opacity:0}}.lumia-scope .animate-dialog-in{animation:lumia-dialog-fade-in 375ms ease}.lumia-scope .animate-dialog-out{animation:lumia-dialog-fade-out 375ms ease}.lumia-scope .list-scrollbar-y{width:100%;padding-right:var(--l-pass-list-scrollbar-pd-r,0);overflow-y:auto;overflow-x:hidden;max-height:var(--l-pass-scrollbar-mah,300px)}.lumia-scope .list-scrollbar-y::-webkit-scrollbar{width:4px;height:4px}.lumia-scope .list-scrollbar-y::-webkit-scrollbar-thumb{cursor:pointer;width:4px;border-radius:2px;background-color:var(--l-pass-bd)}.lumia-scope .list-scrollbar-y::-webkit-scrollbar-track{margin-top:10px;margin-bottom:10px;background-color:transparent}.lumia-scope .noScrollbars::-webkit-scrollbar{display:none}.lumia-scope div[data-radix-popper-content-wrapper]{z-index:10000!important}.lumia-scope .file\\:mr-\\[var\\(--l-pass-gap\\)\\]::file-selector-button{margin-right:var(--l-pass-gap)}.lumia-scope .file\\:h-12::file-selector-button{height:3rem}.lumia-scope .file\\:cursor-pointer::file-selector-button{cursor:pointer}.lumia-scope .file\\:rounded-\\[var\\(--l-pass-el-bdrs\\)\\]::file-selector-button{border-radius:var(--l-pass-el-bdrs)}.lumia-scope .file\\:border-0::file-selector-button{border-width:0}.lumia-scope .file\\:bg-\\[var\\(--l-pass-primary\\)\\]::file-selector-button{background-color:var(--l-pass-primary)}.lumia-scope .file\\:bg-transparent::file-selector-button{background-color:transparent}.lumia-scope .file\\:px-\\[var\\(--l-pass-pd\\)\\]::file-selector-button{padding-left:var(--l-pass-pd);padding-right:var(--l-pass-pd)}.lumia-scope .file\\:text-\\[16px\\]::file-selector-button{font-size:16px}.lumia-scope .file\\:text-base::file-selector-button{font-size:1rem;line-height:1.5rem}.lumia-scope .file\\:font-medium::file-selector-button{font-weight:500}.lumia-scope .file\\:text-\\[var\\(--l-pass-fg-inverted\\)\\]::file-selector-button{color:var(--l-pass-fg-inverted)}.lumia-scope .placeholder\\:text-\\[var\\(--l-pass-fg-muted\\)\\]::-moz-placeholder{color:var(--l-pass-fg-muted)}.lumia-scope .placeholder\\:text-\\[var\\(--l-pass-fg-muted\\)\\]::placeholder{color:var(--l-pass-fg-muted)}.lumia-scope .focus-within\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:focus-within{background-color:var(--l-pass-secondary-a)}.lumia-scope .focus-within\\:outline-none:focus-within{outline:2px solid transparent;outline-offset:2px}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-bg\\)\\]:hover{background-color:var(--l-pass-bg)}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-primary-h\\)\\]:hover{background-color:var(--l-pass-primary-h)}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-secondary-h\\)\\]:hover{background-color:var(--l-pass-secondary-h)}.lumia-scope .hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-yellow-600:hover{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:text-\\[\\#c3f53c\\]:hover{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-\\[var\\(--l-pass-fg-h\\)\\]:hover{color:var(--l-pass-fg-h)}.lumia-scope .hover\\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.lumia-scope .hover\\:underline:hover{text-decoration-line:underline}.lumia-scope .file\\:hover\\:opacity-90:hover::file-selector-button{opacity:.9}.lumia-scope .focus\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:focus{background-color:var(--l-pass-secondary-a)}.lumia-scope .focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.lumia-scope .focus\\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px}.lumia-scope .focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.lumia-scope .focus-visible\\:ring-0:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus-visible\\:ring-\\[2px\\]:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus-visible\\:ring-transparent:focus-visible{--tw-ring-color:transparent}.lumia-scope .focus-visible\\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px}.lumia-scope .active\\:bg-\\[var\\(--l-pass-bg\\)\\]:active{background-color:var(--l-pass-bg)}.lumia-scope .active\\:bg-\\[var\\(--l-pass-primary-a\\)\\]:active{background-color:var(--l-pass-primary-a)}.lumia-scope .active\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:active{background-color:var(--l-pass-secondary-a)}.lumia-scope .active\\:text-\\[\\#c3f53c\\]:active{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .active\\:text-\\[var\\(--l-pass-fg-a\\)\\]:active{color:var(--l-pass-fg-a)}.lumia-scope .file\\:active\\:opacity-80:active::file-selector-button{opacity:.8}.lumia-scope .disabled\\:cursor-default:disabled{cursor:default}.lumia-scope .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.lumia-scope .disabled\\:opacity-50:disabled{opacity:.5}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-bg\\)\\]:hover:disabled{background-color:var(--l-pass-bg)}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-primary\\)\\]:hover:disabled{background-color:var(--l-pass-primary)}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-secondary\\)\\]:hover:disabled{background-color:var(--l-pass-secondary)}.lumia-scope .disabled\\:hover\\:text-\\[var\\(--l-pass-fg\\)\\]:hover:disabled{color:var(--l-pass-fg)}.lumia-scope .disabled\\:active\\:bg-\\[var\\(--l-pass-bg\\)\\]:active:disabled{background-color:var(--l-pass-bg)}.lumia-scope .disabled\\:active\\:bg-\\[var\\(--l-pass-primary\\)\\]:active:disabled{background-color:var(--l-pass-primary)}.lumia-scope .disabled\\:active\\:text-\\[var\\(--l-pass-fg\\)\\]:active:disabled{color:var(--l-pass-fg)}.lumia-scope :is(.group:hover .group-hover\\:opacity-100){opacity:1}.lumia-scope :is(.group:hover .group-hover\\:opacity-60){opacity:.6}.lumia-scope .data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.lumia-scope .data-\\[size\\=default\\]\\:h-12[data-size=default]{height:3rem}.lumia-scope .data-\\[size\\=sm\\]\\:h-10[data-size=sm]{height:2.5rem}.lumia-scope .data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.lumia-scope .data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom],.lumia-scope .data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.lumia-scope .data-\\[side\\=right\\]\\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.lumia-scope .data-\\[side\\=right\\]\\:translate-x-1[data-side=right],.lumia-scope .data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.lumia-scope .data-\\[state\\=checked\\]\\:border-\\[var\\(--l-pass-bd-intense\\)\\][data-state=checked]{border-color:var(--l-pass-bd-intense)}.lumia-scope .data-\\[state\\=checked\\]\\:bg-\\[var\\(--l-pass-secondary\\)\\][data-state=checked]{background-color:var(--l-pass-secondary)}.lumia-scope .data-\\[state\\=checked\\]\\:text-\\[var\\(--l-pass-fg\\)\\][data-state=checked]{color:var(--l-pass-fg)}.lumia-scope .data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1[data-slot=select-value]>*){overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:flex[data-slot=select-value]>*){display:flex}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:items-center[data-slot=select-value]>*){align-items:center}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:gap-\\[var\\(--l-pass-gap\\)\\][data-slot=select-value]>*){gap:var(--l-pass-gap)}@media (min-width:640px){.lumia-scope .sm\\:flex-row{flex-direction:row}.lumia-scope .sm\\:justify-end{justify-content:flex-end}.lumia-scope :is(.sm\\:space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope .sm\\:text-left{text-align:left}}@media (min-width:768px){.lumia-scope .md\\:h-8{height:2rem}.lumia-scope .md\\:w-8{width:2rem}.lumia-scope .md\\:gap-\\[var\\(--l-pass-gap\\)\\]{gap:var(--l-pass-gap)}.lumia-scope .md\\:py-1{padding-top:.25rem;padding-bottom:.25rem}}@media (prefers-color-scheme:dark){.lumia-scope .dark\\:bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-yellow-500:hover{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}}.lumia-scope :is(.\\[\\&_svg\\:not\\(\\[class\\*\\=\\\'size-\\\'\\]\\)\\]\\:size-4 svg:not([class*=size-])){width:1rem;height:1rem}.lumia-scope :is(.\\[\\&_svg\\]\\:pointer-events-none svg){pointer-events:none}.lumia-scope :is(.\\[\\&_svg\\]\\:shrink-0 svg){flex-shrink:0}';
|
|
4478
4480
|
|
|
4479
4481
|
// src/context/LumiaPassportContext.tsx
|
|
4480
4482
|
init_lumiaPassport();
|
|
@@ -4485,13 +4487,13 @@ import {
|
|
|
4485
4487
|
createContext,
|
|
4486
4488
|
useCallback as useCallback22,
|
|
4487
4489
|
useContext,
|
|
4488
|
-
useEffect as
|
|
4490
|
+
useEffect as useEffect33,
|
|
4489
4491
|
useMemo as useMemo5,
|
|
4490
|
-
useRef as
|
|
4492
|
+
useRef as useRef13
|
|
4491
4493
|
} from "react";
|
|
4492
4494
|
|
|
4493
4495
|
// src/context/LumiaPassportSessionContext.tsx
|
|
4494
|
-
import { Fragment as
|
|
4496
|
+
import { Fragment as Fragment27 } from "react";
|
|
4495
4497
|
import { create as create6 } from "zustand";
|
|
4496
4498
|
|
|
4497
4499
|
// src/internal/components/BalanceFeedProvider/BalanceFeedProvider.tsx
|
|
@@ -4510,7 +4512,7 @@ import { Key as Key2, Mail as Mail2, Wallet2 as Wallet22 } from "lucide-react";
|
|
|
4510
4512
|
var LOCAL_COLOR_MODE_KEY = "lumia-passport-theme";
|
|
4511
4513
|
var DEFAULT_AUTH_MENU_HEIGHT = 253;
|
|
4512
4514
|
var DEFAULT_MAIN_MENU_HEIGHT = 90;
|
|
4513
|
-
var DEFAULT_SETTINGS_MENU_HEIGHT =
|
|
4515
|
+
var DEFAULT_SETTINGS_MENU_HEIGHT = 404;
|
|
4514
4516
|
var MAX_CONTENT_HEIGHT = 640;
|
|
4515
4517
|
var MAIN_DIALOG_ANIMATION_SPEED = 375;
|
|
4516
4518
|
var Y_ANIMATION_SETUP = { duration: 0.15, ease: "easeInOut", height: { duration: 0.375 } };
|
|
@@ -4670,7 +4672,7 @@ function BalanceFeedProvider() {
|
|
|
4670
4672
|
|
|
4671
4673
|
// src/internal/components/Dialog/LumiaPassportDialog.tsx
|
|
4672
4674
|
import { AnimatePresence as AnimatePresence3, motion as motion3 } from "framer-motion";
|
|
4673
|
-
import { useEffect as
|
|
4675
|
+
import { useEffect as useEffect31 } from "react";
|
|
4674
4676
|
|
|
4675
4677
|
// src/internal/components/Footer/Footer.tsx
|
|
4676
4678
|
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
|
@@ -4989,7 +4991,7 @@ function LumiaIcon(props) {
|
|
|
4989
4991
|
|
|
4990
4992
|
// src/internal/components/Header/Header.tsx
|
|
4991
4993
|
import { useQuery as useQuery3 } from "@tanstack/react-query";
|
|
4992
|
-
import { Copy } from "lucide-react";
|
|
4994
|
+
import { Copy, Loader as Loader3 } from "lucide-react";
|
|
4993
4995
|
import { useState as useState3 } from "react";
|
|
4994
4996
|
|
|
4995
4997
|
// src/internal/assets/PositiveIcon.tsx
|
|
@@ -5344,23 +5346,20 @@ function KYCStatus() {
|
|
|
5344
5346
|
}
|
|
5345
5347
|
|
|
5346
5348
|
// src/internal/components/Header/Header.tsx
|
|
5347
|
-
import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
5349
|
+
import { Fragment as Fragment3, jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
5348
5350
|
function formatAddress(addr) {
|
|
5349
5351
|
if (!addr) return "";
|
|
5350
5352
|
return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
|
|
5351
5353
|
}
|
|
5352
5354
|
function Header() {
|
|
5353
|
-
const
|
|
5354
|
-
config: { current: config }
|
|
5355
|
-
} = useLumiaPassportConfig();
|
|
5355
|
+
const config = useLumiaPassportConfig().config;
|
|
5356
5356
|
const address = useLumiaPassportSession((st) => st.address);
|
|
5357
5357
|
const [copied, setCopied] = useState3(false);
|
|
5358
|
-
const { data: profile } = useQuery3({
|
|
5359
|
-
|
|
5360
|
-
queryFn: getUserProfile,
|
|
5358
|
+
const { data: profile, isLoading: isProfileLoading } = useQuery3({
|
|
5359
|
+
retry: false,
|
|
5361
5360
|
enabled: !!address,
|
|
5362
|
-
|
|
5363
|
-
|
|
5361
|
+
queryKey: [QUERY_KEYS.userProfile, address],
|
|
5362
|
+
queryFn: getUserProfile
|
|
5364
5363
|
});
|
|
5365
5364
|
const avatar = profile?.avatar || jwtTokenManager2.getAvatar();
|
|
5366
5365
|
const displayName = profile?.nicknameDisplay || profile?.displayName || jwtTokenManager2.getDisplayName();
|
|
@@ -5380,20 +5379,23 @@ function Header() {
|
|
|
5380
5379
|
style: { width: "calc(100% - 48px - var(--l-pass-gap))" },
|
|
5381
5380
|
className: "flex-1 flex flex-col justify-center gap-1",
|
|
5382
5381
|
children: [
|
|
5383
|
-
/* @__PURE__ */
|
|
5384
|
-
|
|
5385
|
-
|
|
5386
|
-
|
|
5387
|
-
|
|
5388
|
-
|
|
5389
|
-
|
|
5390
|
-
|
|
5391
|
-
|
|
5392
|
-
|
|
5393
|
-
|
|
5394
|
-
|
|
5395
|
-
|
|
5396
|
-
|
|
5382
|
+
isProfileLoading && /* @__PURE__ */ jsx12(Loader3, { className: "w-4 h-4 animate-spin" }),
|
|
5383
|
+
!!address && !isProfileLoading && !!profile && /* @__PURE__ */ jsxs11(Fragment3, { children: [
|
|
5384
|
+
/* @__PURE__ */ jsxs11("div", { className: "w-full flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
5385
|
+
/* @__PURE__ */ jsx12(
|
|
5386
|
+
"span",
|
|
5387
|
+
{
|
|
5388
|
+
className: cn(
|
|
5389
|
+
"text-[14px] leading-4 truncate max-w-[144px] font-medium",
|
|
5390
|
+
"text-ellipsis overflow-hidden whitespace-nowrap"
|
|
5391
|
+
),
|
|
5392
|
+
children: displayName || config.current?.ui?.title || "LumiaPassport"
|
|
5393
|
+
}
|
|
5394
|
+
),
|
|
5395
|
+
/* @__PURE__ */ jsx12(KYCStatus, {})
|
|
5396
|
+
] }),
|
|
5397
|
+
/* @__PURE__ */ jsx12(BalanceView, {})
|
|
5398
|
+
] })
|
|
5397
5399
|
]
|
|
5398
5400
|
}
|
|
5399
5401
|
)
|
|
@@ -5453,13 +5455,11 @@ function Header() {
|
|
|
5453
5455
|
}
|
|
5454
5456
|
);
|
|
5455
5457
|
}
|
|
5456
|
-
{
|
|
5457
|
-
}
|
|
5458
5458
|
|
|
5459
5459
|
// package.json
|
|
5460
5460
|
var package_default = {
|
|
5461
5461
|
name: "@lumiapassport/ui-kit",
|
|
5462
|
-
version: "1.14.
|
|
5462
|
+
version: "1.14.25",
|
|
5463
5463
|
description: "React UI components and hooks for Lumia Passport authentication and Account Abstraction",
|
|
5464
5464
|
type: "module",
|
|
5465
5465
|
main: "./dist/index.cjs",
|
|
@@ -5898,17 +5898,28 @@ import { useEffect as useEffect5 } from "react";
|
|
|
5898
5898
|
init_vaultClient();
|
|
5899
5899
|
function useBackupStatusChanges() {
|
|
5900
5900
|
const setHasServerVault = useLumiaPassportSession((st) => st.setHasServerVault);
|
|
5901
|
+
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
5901
5902
|
const { mutate: handleBackupStatusChanged } = useMutation2({
|
|
5902
5903
|
mutationFn: async (event) => {
|
|
5903
5904
|
const customEvent = event;
|
|
5904
|
-
|
|
5905
|
+
console.log("[BACKUP STATUS] changed:", customEvent?.detail);
|
|
5906
|
+
return { stats: await getShareRecoveryStats(), detail: customEvent?.detail };
|
|
5905
5907
|
},
|
|
5906
|
-
onSuccess: (stats) => {
|
|
5908
|
+
onSuccess: ({ stats, detail }) => {
|
|
5907
5909
|
const hasRecoveryData = stats && (!!stats.created || !!stats?.devices?.length);
|
|
5908
5910
|
if (!!hasRecoveryData) {
|
|
5911
|
+
console.log(
|
|
5912
|
+
"[BACKUP STATUS] Recovery data found after backup status change.\n Redirect to main menu:",
|
|
5913
|
+
detail?.navigateToMainMenu
|
|
5914
|
+
);
|
|
5909
5915
|
setHasServerVault(true);
|
|
5916
|
+
if (!!detail?.navigateToMainMenu) {
|
|
5917
|
+
setTimeout(() => setPage("main-menu" /* MAIN_MENU */), 1e3);
|
|
5918
|
+
}
|
|
5919
|
+
console.info("[BACKUP STATUS] Recovery data found in vault, marking as has-server-vault");
|
|
5910
5920
|
} else {
|
|
5911
5921
|
setHasServerVault(false);
|
|
5922
|
+
setPage("keysare-backup" /* KEYSARE_BACKUP */);
|
|
5912
5923
|
console.warn("[BACKUP STATUS] No recovery data found in vault, marking as no-server-vault");
|
|
5913
5924
|
}
|
|
5914
5925
|
},
|
|
@@ -5925,68 +5936,9 @@ function useBackupStatusChanges() {
|
|
|
5925
5936
|
}, []);
|
|
5926
5937
|
}
|
|
5927
5938
|
|
|
5928
|
-
// src/internal/hooks/useBackupWarning.ts
|
|
5929
|
-
import { useEffect as useEffect6, useRef as useRef3 } from "react";
|
|
5930
|
-
var WARNING_TIMEOUT_MS = 4500;
|
|
5931
|
-
function useBackupWarning() {
|
|
5932
|
-
const address = useLumiaPassportSession((st) => st.address);
|
|
5933
|
-
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
5934
|
-
const page = useLayoutDataStore((st) => st.page);
|
|
5935
|
-
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
5936
|
-
const timeoutRef = useRef3(null);
|
|
5937
|
-
const touchedRef = useRef3(false);
|
|
5938
|
-
useEffect6(() => {
|
|
5939
|
-
if (touchedRef.current) return;
|
|
5940
|
-
if (timeoutRef.current) {
|
|
5941
|
-
clearTimeout(timeoutRef.current);
|
|
5942
|
-
timeoutRef.current = null;
|
|
5943
|
-
}
|
|
5944
|
-
if (!address || !!hasServerVault || page === "keysare-backup" /* KEYSARE_BACKUP */) return;
|
|
5945
|
-
timeoutRef.current = setTimeout(() => {
|
|
5946
|
-
setPage("keysare-backup" /* KEYSARE_BACKUP */);
|
|
5947
|
-
touchedRef.current = true;
|
|
5948
|
-
timeoutRef.current = null;
|
|
5949
|
-
}, WARNING_TIMEOUT_MS);
|
|
5950
|
-
return () => {
|
|
5951
|
-
if (timeoutRef.current) {
|
|
5952
|
-
clearTimeout(timeoutRef.current);
|
|
5953
|
-
timeoutRef.current = null;
|
|
5954
|
-
}
|
|
5955
|
-
};
|
|
5956
|
-
}, [address, page, hasServerVault, setPage]);
|
|
5957
|
-
return null;
|
|
5958
|
-
}
|
|
5959
|
-
|
|
5960
|
-
// src/internal/hooks/useCheckVaultStatus.ts
|
|
5961
|
-
import { useMutation as useMutation3 } from "@tanstack/react-query";
|
|
5962
|
-
import { useEffect as useEffect7 } from "react";
|
|
5963
|
-
init_vaultClient();
|
|
5964
|
-
function useCheckVaultStatus() {
|
|
5965
|
-
const address = useLumiaPassportSession((st) => st.address);
|
|
5966
|
-
const setHasServerVault = useLumiaPassportSession((st) => st.setHasServerVault);
|
|
5967
|
-
const { mutate: checkVaultStatus } = useMutation3({
|
|
5968
|
-
mutationFn: async () => {
|
|
5969
|
-
const stats = await getShareRecoveryStats();
|
|
5970
|
-
const hasRecoveryData = stats && (stats.created || stats.devices && stats.devices.length > 0);
|
|
5971
|
-
return !!hasRecoveryData;
|
|
5972
|
-
},
|
|
5973
|
-
onSuccess: (hasRecoveryData) => {
|
|
5974
|
-
setHasServerVault(hasRecoveryData);
|
|
5975
|
-
},
|
|
5976
|
-
onError: (error) => {
|
|
5977
|
-
console.warn("[UI-KIT] Failed to check vault status:", error);
|
|
5978
|
-
setHasServerVault(false);
|
|
5979
|
-
}
|
|
5980
|
-
});
|
|
5981
|
-
useEffect7(() => {
|
|
5982
|
-
if (!address) return setHasServerVault(false);
|
|
5983
|
-
checkVaultStatus();
|
|
5984
|
-
}, [address, checkVaultStatus]);
|
|
5985
|
-
}
|
|
5986
|
-
|
|
5987
5939
|
// src/internal/hooks/useDetectMaxScrollHeight.ts
|
|
5988
5940
|
import { debounce } from "lodash-es";
|
|
5989
|
-
import { useCallback as useCallback3, useEffect as
|
|
5941
|
+
import { useCallback as useCallback3, useEffect as useEffect6 } from "react";
|
|
5990
5942
|
var DEBOUNCE_DELAY = 50;
|
|
5991
5943
|
function useDetectMaxScrollHeight() {
|
|
5992
5944
|
const page = useLayoutDataStore((state) => state.page);
|
|
@@ -6001,7 +5953,7 @@ function useDetectMaxScrollHeight() {
|
|
|
6001
5953
|
}, DEBOUNCE_DELAY),
|
|
6002
5954
|
[page, setMaxScrollHeight, setIsMobileView]
|
|
6003
5955
|
);
|
|
6004
|
-
|
|
5956
|
+
useEffect6(() => {
|
|
6005
5957
|
const obs = new ResizeObserver(([entry]) => onResize(entry.contentRect));
|
|
6006
5958
|
const doc = window.document.getElementsByTagName("html")[0];
|
|
6007
5959
|
if (doc) obs.observe(doc);
|
|
@@ -6010,20 +5962,20 @@ function useDetectMaxScrollHeight() {
|
|
|
6010
5962
|
}
|
|
6011
5963
|
|
|
6012
5964
|
// src/internal/hooks/usePageMapper.tsx
|
|
6013
|
-
import { useCallback as useCallback19, useEffect as
|
|
5965
|
+
import { useCallback as useCallback19, useEffect as useEffect28 } from "react";
|
|
6014
5966
|
|
|
6015
5967
|
// src/internal/components/AuthMenu/AuthMenu.tsx
|
|
6016
5968
|
import { AnimatePresence, motion } from "framer-motion";
|
|
6017
|
-
import { AlertTriangle as AlertTriangle2, Loader as
|
|
6018
|
-
import { useEffect as
|
|
5969
|
+
import { AlertTriangle as AlertTriangle2, Loader as Loader6 } from "lucide-react";
|
|
5970
|
+
import { useEffect as useEffect9, useMemo, useRef as useRef8, useState as useState6 } from "react";
|
|
6019
5971
|
|
|
6020
5972
|
// src/internal/components/Expandable/hooks/useExpandable.ts
|
|
6021
|
-
import { useCallback as useCallback4, useEffect as
|
|
5973
|
+
import { useCallback as useCallback4, useEffect as useEffect7, useRef as useRef3 } from "react";
|
|
6022
5974
|
var useExpandable = (props) => {
|
|
6023
5975
|
const { isExpanded = false, children, initHeight = 0, minHeight = 0 } = props;
|
|
6024
|
-
const expandableRef =
|
|
6025
|
-
const contentRef =
|
|
6026
|
-
|
|
5976
|
+
const expandableRef = useRef3(null);
|
|
5977
|
+
const contentRef = useRef3(null);
|
|
5978
|
+
useEffect7(() => {
|
|
6027
5979
|
if (!expandableRef.current) return;
|
|
6028
5980
|
expandableRef.current.style.setProperty("--ifo-basic-expandable-h", `${initHeight}px )`);
|
|
6029
5981
|
}, []);
|
|
@@ -6038,7 +5990,7 @@ var useExpandable = (props) => {
|
|
|
6038
5990
|
// ON_RESIZE_DELEAY),
|
|
6039
5991
|
[minHeight]
|
|
6040
5992
|
);
|
|
6041
|
-
|
|
5993
|
+
useEffect7(() => {
|
|
6042
5994
|
if (!contentRef.current || !expandableRef.current) return;
|
|
6043
5995
|
const obs = new ResizeObserver(() => setExpandableHeight(isExpanded));
|
|
6044
5996
|
obs.observe(expandableRef.current);
|
|
@@ -6199,7 +6151,7 @@ function PasskeyAddIcon(props) {
|
|
|
6199
6151
|
|
|
6200
6152
|
// src/internal/components/AuthMenu/PassKeyStep.tsx
|
|
6201
6153
|
init_auth();
|
|
6202
|
-
import { Fragment as
|
|
6154
|
+
import { Fragment as Fragment4, jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
6203
6155
|
function normalizeWebAuthnError(err) {
|
|
6204
6156
|
const raw = err?.message || String(err || "");
|
|
6205
6157
|
const lower = raw.toLowerCase();
|
|
@@ -6392,7 +6344,7 @@ function PassKeyStep(props) {
|
|
|
6392
6344
|
/* @__PURE__ */ jsx19(Key3, { className: "w-4 h-4" }),
|
|
6393
6345
|
"Sign in with existing Passkey"
|
|
6394
6346
|
] }),
|
|
6395
|
-
config.passkey.showCreateButton && /* @__PURE__ */ jsxs15(
|
|
6347
|
+
config.passkey.showCreateButton && /* @__PURE__ */ jsxs15(Fragment4, { children: [
|
|
6396
6348
|
/* @__PURE__ */ jsx19("span", { className: "block w-full text-center text-sm text-[var(--l-pass-fg-muted)]", children: "Don't have a passkey?" }),
|
|
6397
6349
|
/* @__PURE__ */ jsxs15(Button, { variant: "outline", size: "large", className: "w-full", onClick: onPasskeyRegister, disabled: isLoading, children: [
|
|
6398
6350
|
/* @__PURE__ */ jsx19(PasskeyAddIcon, { className: "w-4 h-4" }),
|
|
@@ -6406,21 +6358,21 @@ function PassKeyStep(props) {
|
|
|
6406
6358
|
|
|
6407
6359
|
// src/internal/components/AuthMenu/SignInStep/SignInStep.tsx
|
|
6408
6360
|
import { UserCircle } from "lucide-react";
|
|
6409
|
-
import { Fragment as
|
|
6361
|
+
import { Fragment as Fragment5 } from "react";
|
|
6410
6362
|
|
|
6411
6363
|
// src/internal/components/AuthMenu/SignInStep/Email.tsx
|
|
6412
6364
|
init_lumiaPassport();
|
|
6413
6365
|
init_projectId();
|
|
6414
|
-
import { useMutation as
|
|
6415
|
-
import { ChevronRight, Loader as
|
|
6416
|
-
import { useRef as
|
|
6366
|
+
import { useMutation as useMutation3 } from "@tanstack/react-query";
|
|
6367
|
+
import { ChevronRight, Loader as Loader4, Mail as Mail3 } from "lucide-react";
|
|
6368
|
+
import { useRef as useRef5 } from "react";
|
|
6417
6369
|
|
|
6418
6370
|
// src/internal/components/ui/input.tsx
|
|
6419
|
-
import React, { useImperativeHandle, useRef as
|
|
6371
|
+
import React, { useImperativeHandle, useRef as useRef4 } from "react";
|
|
6420
6372
|
import { jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
6421
6373
|
var Input = React.forwardRef((props, ref) => {
|
|
6422
6374
|
const { className, disabled, error, Icon: Icon2, element, ...inputProps } = props;
|
|
6423
|
-
const internalRef =
|
|
6375
|
+
const internalRef = useRef4(null);
|
|
6424
6376
|
useImperativeHandle(ref, () => internalRef.current);
|
|
6425
6377
|
return /* @__PURE__ */ jsxs16("div", { className: cn("w-full flex flex-col gap-1", className), children: [
|
|
6426
6378
|
/* @__PURE__ */ jsxs16(
|
|
@@ -6468,11 +6420,11 @@ Input.displayName = "Input";
|
|
|
6468
6420
|
import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
6469
6421
|
function Email() {
|
|
6470
6422
|
const { config, callbacks } = useLumiaPassportConfig();
|
|
6471
|
-
const buttonRef =
|
|
6423
|
+
const buttonRef = useRef5(null);
|
|
6472
6424
|
const isLoading = useLumiaPassportSession((st) => st.isLoading);
|
|
6473
6425
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
6474
6426
|
const { email, alert: alert2, setEmail, setExpiresIn, setStep, setAlert } = useAuthStore();
|
|
6475
|
-
const { mutate: onSendVerificationCode } =
|
|
6427
|
+
const { mutate: onSendVerificationCode } = useMutation3({
|
|
6476
6428
|
mutationFn: async (mail) => {
|
|
6477
6429
|
const isEmailValid = mail.length !== 0 && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(mail);
|
|
6478
6430
|
if (!isEmailValid) {
|
|
@@ -6559,7 +6511,7 @@ function Email() {
|
|
|
6559
6511
|
size: "large",
|
|
6560
6512
|
disabled: !email || isLoading,
|
|
6561
6513
|
onClick: () => onSendVerificationCode(email),
|
|
6562
|
-
children: isLoading ? /* @__PURE__ */ jsx21(
|
|
6514
|
+
children: isLoading ? /* @__PURE__ */ jsx21(Loader4, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ jsx21(ChevronRight, { className: "w-4 h-4" })
|
|
6563
6515
|
}
|
|
6564
6516
|
)
|
|
6565
6517
|
]
|
|
@@ -7043,7 +6995,7 @@ function SignInStep(props) {
|
|
|
7043
6995
|
/* @__PURE__ */ jsx24(UserCircle, { className: "w-6 h-6" }),
|
|
7044
6996
|
/* @__PURE__ */ jsx24("span", { className: "font-bold text-xl leading-6", children: "Sign In" })
|
|
7045
6997
|
] }),
|
|
7046
|
-
/* @__PURE__ */ jsx24("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: enabledSigninMethods.map((kind, idx) => /* @__PURE__ */ jsxs20(
|
|
6998
|
+
/* @__PURE__ */ jsx24("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: enabledSigninMethods.map((kind, idx) => /* @__PURE__ */ jsxs20(Fragment5, { children: [
|
|
7047
6999
|
idx > 0 && /* @__PURE__ */ jsxs20("div", { className: "flex items-center h-4", children: [
|
|
7048
7000
|
/* @__PURE__ */ jsx24("div", { style: { borderTop: "1px solid var(--l-pass-bd)" }, className: "flex-1" }),
|
|
7049
7001
|
/* @__PURE__ */ jsx24("div", { className: "text-[10px] px-2 flex-none leading-4", children: "Or sign in using" }),
|
|
@@ -7070,11 +7022,11 @@ function SignInStep(props) {
|
|
|
7070
7022
|
// src/internal/components/AuthMenu/useAuthMenuHanders.ts
|
|
7071
7023
|
init_auth();
|
|
7072
7024
|
import { useQueryClient as useQueryClient2 } from "@tanstack/react-query";
|
|
7073
|
-
import { useCallback as useCallback7, useRef as
|
|
7025
|
+
import { useCallback as useCallback7, useRef as useRef6, useState as useState4 } from "react";
|
|
7074
7026
|
function useAuthMenuHandlers() {
|
|
7075
7027
|
const { config, callbacks } = useLumiaPassportConfig();
|
|
7076
7028
|
const qc = useQueryClient2();
|
|
7077
|
-
const pendingLoginResponseRef =
|
|
7029
|
+
const pendingLoginResponseRef = useRef6(null);
|
|
7078
7030
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
7079
7031
|
const setIsDialogForced = useLayoutStore((st) => st.setIsDialogForced);
|
|
7080
7032
|
const [telegramCleanup, setTelegramCleanup] = useState4(null);
|
|
@@ -7159,6 +7111,7 @@ function useAuthMenuHandlers() {
|
|
|
7159
7111
|
callbacks?.onLumiaPassportAccount?.({ userId, address: addr, session: sess, hasKeyshare: hasServerKeyshare });
|
|
7160
7112
|
} catch {
|
|
7161
7113
|
}
|
|
7114
|
+
let hasKeyshareVaultBackup = false;
|
|
7162
7115
|
try {
|
|
7163
7116
|
const { checkServerBackupAvailability: checkServerBackupAvailability2, updateBackupStatus: updateBackupStatus2, getShareRecoveryStats: getShareRecoveryStats2 } = await Promise.resolve().then(() => (init_vaultClient(), vaultClient_exports));
|
|
7164
7117
|
const result = await checkServerBackupAvailability2();
|
|
@@ -7168,8 +7121,8 @@ function useAuthMenuHandlers() {
|
|
|
7168
7121
|
updateBackupStatus2(userId, "server", { enabled: false, error: "No server vault found" });
|
|
7169
7122
|
}
|
|
7170
7123
|
const stats = await getShareRecoveryStats2();
|
|
7171
|
-
|
|
7172
|
-
setHasServerVault(!!
|
|
7124
|
+
hasKeyshareVaultBackup = !!stats && (!!stats.created || !!stats.devices && stats.devices.length > 0);
|
|
7125
|
+
setHasServerVault(!!hasKeyshareVaultBackup);
|
|
7173
7126
|
qc.refetchQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY, addr] });
|
|
7174
7127
|
} catch (e) {
|
|
7175
7128
|
console.warn("[UI-KIT] Vault status check failed:", e);
|
|
@@ -7177,13 +7130,17 @@ function useAuthMenuHandlers() {
|
|
|
7177
7130
|
setSession(sess);
|
|
7178
7131
|
setAddress(addr);
|
|
7179
7132
|
setStatus("ready");
|
|
7180
|
-
|
|
7181
|
-
|
|
7182
|
-
|
|
7183
|
-
|
|
7184
|
-
|
|
7185
|
-
|
|
7186
|
-
|
|
7133
|
+
setTimeout(() => {
|
|
7134
|
+
if (!!jwt?.isNewUser || !hasKeyshareVaultBackup) {
|
|
7135
|
+
if (!!jwt?.isNewUser) console.log("[AuthMenu] New user detected - forcing backup flow");
|
|
7136
|
+
if (!hasKeyshareVaultBackup) console.log("[AuthMenu] No recovery data found - forcing backup flow");
|
|
7137
|
+
setIsDialogForced(true);
|
|
7138
|
+
setPage("keysare-backup" /* KEYSARE_BACKUP */);
|
|
7139
|
+
} else {
|
|
7140
|
+
setIsDialogForced(false);
|
|
7141
|
+
setPage(null);
|
|
7142
|
+
}
|
|
7143
|
+
}, 100);
|
|
7187
7144
|
} catch (error) {
|
|
7188
7145
|
if (error?.code === "KEYSHARE_RECOVERY_NEEDED") {
|
|
7189
7146
|
console.warn("[AuthMenu] Keyshare recovery needed for user:", userId);
|
|
@@ -7191,7 +7148,9 @@ function useAuthMenuHandlers() {
|
|
|
7191
7148
|
setError(null);
|
|
7192
7149
|
setRecoveryUserId(userId);
|
|
7193
7150
|
setStatus("recovery_needed");
|
|
7194
|
-
setTimeout(() =>
|
|
7151
|
+
setTimeout(() => {
|
|
7152
|
+
setPage("keyshare-restore" /* KEYSHARE_RESTORE */);
|
|
7153
|
+
}, 100);
|
|
7195
7154
|
} else {
|
|
7196
7155
|
pendingLoginResponseRef.current = null;
|
|
7197
7156
|
await jwtTokenManager2.clearTokens();
|
|
@@ -7207,7 +7166,6 @@ function useAuthMenuHandlers() {
|
|
|
7207
7166
|
setIsLoading(false);
|
|
7208
7167
|
}
|
|
7209
7168
|
}, [
|
|
7210
|
-
// config.projectId,
|
|
7211
7169
|
qc,
|
|
7212
7170
|
callbacks,
|
|
7213
7171
|
setPage,
|
|
@@ -7238,8 +7196,8 @@ function useAuthMenuHandlers() {
|
|
|
7238
7196
|
|
|
7239
7197
|
// src/internal/components/AuthMenu/VerifyStep/VerifyStep.tsx
|
|
7240
7198
|
init_lumiaPassport();
|
|
7241
|
-
import { useMutation as
|
|
7242
|
-
import { ArrowLeft as ArrowLeft4, Loader as
|
|
7199
|
+
import { useMutation as useMutation4 } from "@tanstack/react-query";
|
|
7200
|
+
import { ArrowLeft as ArrowLeft4, Loader as Loader5 } from "lucide-react";
|
|
7243
7201
|
|
|
7244
7202
|
// src/internal/assets/OtpIcon.tsx
|
|
7245
7203
|
import { jsx as jsx25 } from "react/jsx-runtime";
|
|
@@ -7258,21 +7216,21 @@ function OtpIcon(props) {
|
|
|
7258
7216
|
init_projectId();
|
|
7259
7217
|
|
|
7260
7218
|
// src/internal/components/AuthMenu/VerifyStep/VerificationCodeInput.tsx
|
|
7261
|
-
import { useEffect as
|
|
7219
|
+
import { useEffect as useEffect8, useRef as useRef7, useState as useState5 } from "react";
|
|
7262
7220
|
import { jsx as jsx26, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
7263
7221
|
var VerificationCodeInput = (props) => {
|
|
7264
7222
|
const { onVerifyCode, onResendCode, isLoading, expiresIn } = props;
|
|
7265
7223
|
const setAlert = useAuthStore((st) => st.setAlert);
|
|
7266
7224
|
const [timeLeft, setTimeLeft] = useState5(expiresIn);
|
|
7267
|
-
|
|
7268
|
-
|
|
7225
|
+
useEffect8(() => setTimeLeft(expiresIn), [expiresIn]);
|
|
7226
|
+
useEffect8(() => {
|
|
7269
7227
|
const t = setInterval(() => setTimeLeft((secs) => secs > 0 ? secs - 1 : 0), 1e3);
|
|
7270
7228
|
return () => clearInterval(t);
|
|
7271
7229
|
}, []);
|
|
7272
|
-
const lastSubmittedRef =
|
|
7273
|
-
const inputsRef =
|
|
7230
|
+
const lastSubmittedRef = useRef7(null);
|
|
7231
|
+
const inputsRef = useRef7([]);
|
|
7274
7232
|
const [digits, setDigits] = useState5(["", "", "", "", "", ""]);
|
|
7275
|
-
|
|
7233
|
+
useEffect8(() => {
|
|
7276
7234
|
const code = digits.join("");
|
|
7277
7235
|
if (code.length === 6 && digits.every((d) => d !== "") && !isLoading) {
|
|
7278
7236
|
if (lastSubmittedRef.current !== code) {
|
|
@@ -7281,7 +7239,7 @@ var VerificationCodeInput = (props) => {
|
|
|
7281
7239
|
}
|
|
7282
7240
|
}
|
|
7283
7241
|
}, [digits, isLoading, onVerifyCode]);
|
|
7284
|
-
|
|
7242
|
+
useEffect8(() => {
|
|
7285
7243
|
const t = setTimeout(() => {
|
|
7286
7244
|
inputsRef.current[0]?.focus();
|
|
7287
7245
|
}, 0);
|
|
@@ -7393,10 +7351,9 @@ import { jsx as jsx27, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
|
7393
7351
|
function VerifyStep(props) {
|
|
7394
7352
|
const { pendingLoginResponseRef, goBackToSignIn, onAuthSuccess } = props;
|
|
7395
7353
|
const { callbacks } = useLumiaPassportConfig();
|
|
7396
|
-
const
|
|
7354
|
+
const recoveryUserId = useLumiaPassportSession((st) => st.recoveryUserId);
|
|
7397
7355
|
const isSessionLoading = useLumiaPassportSession((st) => st.isLoading);
|
|
7398
7356
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
7399
|
-
const recoveryUserId = useLumiaPassportSession((st) => st.recoveryUserId);
|
|
7400
7357
|
const {
|
|
7401
7358
|
email,
|
|
7402
7359
|
expiresIn,
|
|
@@ -7406,7 +7363,7 @@ function VerifyStep(props) {
|
|
|
7406
7363
|
setExpiresIn,
|
|
7407
7364
|
setAlert
|
|
7408
7365
|
} = useAuthStore();
|
|
7409
|
-
const { mutate: onVerifyCode, isPending: isCodeVerifying } =
|
|
7366
|
+
const { mutate: onVerifyCode, isPending: isCodeVerifying } = useMutation4({
|
|
7410
7367
|
mutationFn: async (code) => {
|
|
7411
7368
|
setIsLoading(true);
|
|
7412
7369
|
setAlert(null);
|
|
@@ -7441,14 +7398,13 @@ function VerifyStep(props) {
|
|
|
7441
7398
|
const storage = typeof window !== "undefined" ? window.localStorage : void 0;
|
|
7442
7399
|
const localKeyshare = storage?.getItem(`tss.${loginResponse.userId}.keyshare`);
|
|
7443
7400
|
const needsRecovery = loginResponse.hasKeyshare && !loginResponse.isNewUser && !localKeyshare;
|
|
7444
|
-
await onAuthSuccess?.();
|
|
7445
|
-
console.log("[AuthModal] Authentication successful, closing modal");
|
|
7446
7401
|
if (!recoveryUserId && !needsRecovery) {
|
|
7447
7402
|
setStep("signin");
|
|
7448
7403
|
setEmail("");
|
|
7449
7404
|
setAlert(null);
|
|
7450
|
-
setPage(null);
|
|
7451
7405
|
}
|
|
7406
|
+
await onAuthSuccess?.();
|
|
7407
|
+
console.log("[AuthModal] Authentication successful");
|
|
7452
7408
|
setIsLoading(false);
|
|
7453
7409
|
},
|
|
7454
7410
|
onError: (error) => {
|
|
@@ -7473,7 +7429,7 @@ function VerifyStep(props) {
|
|
|
7473
7429
|
setIsLoading(false);
|
|
7474
7430
|
}
|
|
7475
7431
|
});
|
|
7476
|
-
const { mutate: onResendCode, isPending: isCodeResending } =
|
|
7432
|
+
const { mutate: onResendCode, isPending: isCodeResending } = useMutation4({
|
|
7477
7433
|
mutationFn: async () => {
|
|
7478
7434
|
setAlert(null);
|
|
7479
7435
|
setIsLoading(true);
|
|
@@ -7517,7 +7473,7 @@ function VerifyStep(props) {
|
|
|
7517
7473
|
/* @__PURE__ */ jsxs22("div", { className: "relative flex items-center justify-center gap-2 px-5 pt-3 pb-6", children: [
|
|
7518
7474
|
/* @__PURE__ */ jsx27(OtpIcon, { className: "w-6 h-6" }),
|
|
7519
7475
|
/* @__PURE__ */ jsx27("span", { className: "font-bold text-xl leading-6", children: "Verification code" }),
|
|
7520
|
-
isLoading && /* @__PURE__ */ jsx27(
|
|
7476
|
+
isLoading && /* @__PURE__ */ jsx27(Loader5, { className: "h-4 w-4 animate-spin" }),
|
|
7521
7477
|
/* @__PURE__ */ jsxs22(
|
|
7522
7478
|
Button,
|
|
7523
7479
|
{
|
|
@@ -7560,8 +7516,8 @@ var AuthMenu = () => {
|
|
|
7560
7516
|
const { step, alert: alert2, setStep, setPasskeyStatus, setEmail, setAlert } = useAuthStore();
|
|
7561
7517
|
const { pendingLoginResponseRef, onAuthSuccess, goBackToSignIn } = useAuthMenuHandlers();
|
|
7562
7518
|
const [isAlertShowReady, setIsAlertShowReady] = useState6(false);
|
|
7563
|
-
const readyTimeout =
|
|
7564
|
-
|
|
7519
|
+
const readyTimeout = useRef8(null);
|
|
7520
|
+
useEffect9(() => {
|
|
7565
7521
|
if (readyTimeout.current) {
|
|
7566
7522
|
clearTimeout(readyTimeout.current);
|
|
7567
7523
|
readyTimeout.current = null;
|
|
@@ -7569,7 +7525,7 @@ var AuthMenu = () => {
|
|
|
7569
7525
|
setIsAlertShowReady(false);
|
|
7570
7526
|
readyTimeout.current = setTimeout(() => setIsAlertShowReady(true), 750);
|
|
7571
7527
|
}, [step]);
|
|
7572
|
-
|
|
7528
|
+
useEffect9(() => {
|
|
7573
7529
|
setMainPageHeight(DEFAULT_AUTH_MENU_HEIGHT);
|
|
7574
7530
|
return () => {
|
|
7575
7531
|
setStep("signin");
|
|
@@ -7581,7 +7537,7 @@ var AuthMenu = () => {
|
|
|
7581
7537
|
}, []);
|
|
7582
7538
|
if (!isIframeReady) {
|
|
7583
7539
|
return /* @__PURE__ */ jsxs23("div", { className: "w-full p-8 flex flex-col justify-center items-center gap-[var(--l-pass-gap)]", children: [
|
|
7584
|
-
/* @__PURE__ */ jsx28(
|
|
7540
|
+
/* @__PURE__ */ jsx28(Loader6, { className: "w-5 h-5 animate-spin" }),
|
|
7585
7541
|
/* @__PURE__ */ jsx28("span", { className: "text-sm text-[var(--l-pass-fg-muted)]", children: "Initializing wallet..." })
|
|
7586
7542
|
] });
|
|
7587
7543
|
}
|
|
@@ -7596,20 +7552,8 @@ var AuthMenu = () => {
|
|
|
7596
7552
|
onAuthSuccess
|
|
7597
7553
|
}
|
|
7598
7554
|
),
|
|
7599
|
-
"signin": /* @__PURE__ */ jsx28(
|
|
7600
|
-
|
|
7601
|
-
{
|
|
7602
|
-
pendingLoginResponseRef,
|
|
7603
|
-
onAuthSuccess
|
|
7604
|
-
}
|
|
7605
|
-
),
|
|
7606
|
-
"signin-passkey": /* @__PURE__ */ jsx28(
|
|
7607
|
-
PassKeyStep,
|
|
7608
|
-
{
|
|
7609
|
-
pendingLoginResponseRef,
|
|
7610
|
-
onAuthSuccess
|
|
7611
|
-
}
|
|
7612
|
-
)
|
|
7555
|
+
"signin": /* @__PURE__ */ jsx28(SignInStep, { pendingLoginResponseRef, onAuthSuccess }),
|
|
7556
|
+
"signin-passkey": /* @__PURE__ */ jsx28(PassKeyStep, { pendingLoginResponseRef, onAuthSuccess })
|
|
7613
7557
|
}),
|
|
7614
7558
|
[onAuthSuccess, goBackToSignIn]
|
|
7615
7559
|
);
|
|
@@ -7738,9 +7682,9 @@ function RampnowIcon() {
|
|
|
7738
7682
|
}
|
|
7739
7683
|
|
|
7740
7684
|
// src/internal/components/BuyMenu/binance/Binance.tsx
|
|
7741
|
-
import { useMutation as
|
|
7685
|
+
import { useMutation as useMutation5, useQuery as useQuery4, useQueryClient as useQueryClient3 } from "@tanstack/react-query";
|
|
7742
7686
|
import { DollarSign, LoaderIcon as LoaderIcon2 } from "lucide-react";
|
|
7743
|
-
import { useEffect as
|
|
7687
|
+
import { useEffect as useEffect11, useRef as useRef9 } from "react";
|
|
7744
7688
|
|
|
7745
7689
|
// src/internal/components/BuyMenu/components/PaymentSelector.tsx
|
|
7746
7690
|
import { jsx as jsx31, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
@@ -7837,7 +7781,7 @@ async function createPreorderMutation(payload) {
|
|
|
7837
7781
|
}
|
|
7838
7782
|
|
|
7839
7783
|
// src/internal/components/BuyMenu/binance/useQueriesErrorHandler.ts
|
|
7840
|
-
import { useEffect as
|
|
7784
|
+
import { useEffect as useEffect10 } from "react";
|
|
7841
7785
|
|
|
7842
7786
|
// src/internal/components/BuyMenu/binance/utils.ts
|
|
7843
7787
|
function getPayMethodID(pm) {
|
|
@@ -7857,7 +7801,7 @@ function handleErrors(errors) {
|
|
|
7857
7801
|
// src/internal/components/BuyMenu/binance/useQueriesErrorHandler.ts
|
|
7858
7802
|
var useQueriesErrorHandler = (errors, stateUpdater) => {
|
|
7859
7803
|
const { error: errorTitle, message: errorMessage } = handleErrors(errors);
|
|
7860
|
-
|
|
7804
|
+
useEffect10(() => {
|
|
7861
7805
|
if (!errorTitle && !errorMessage) return;
|
|
7862
7806
|
console.error(`[BuyModal][Binance] ${errorTitle}: ${errorMessage}`);
|
|
7863
7807
|
stateUpdater(1);
|
|
@@ -7867,7 +7811,7 @@ var useQueriesErrorHandler = (errors, stateUpdater) => {
|
|
|
7867
7811
|
};
|
|
7868
7812
|
|
|
7869
7813
|
// src/internal/components/BuyMenu/binance/Binance.tsx
|
|
7870
|
-
import { Fragment as
|
|
7814
|
+
import { Fragment as Fragment6, jsx as jsx32, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
7871
7815
|
var BINANCE_LUMIA_NETWORK = "LUMIA";
|
|
7872
7816
|
function Binance(props) {
|
|
7873
7817
|
const { walletAddress, control } = props;
|
|
@@ -7905,15 +7849,15 @@ function Binance(props) {
|
|
|
7905
7849
|
queryKey: [QUERY_KEYS3.binancePaymentModes, walletAddress, isLumiaAvailable, srcQueryAmount],
|
|
7906
7850
|
queryFn: async () => getPaymentMethodsQuery({ totalAmount: String(srcQueryAmount || 1) })
|
|
7907
7851
|
});
|
|
7908
|
-
const lastLoadedPaymentModes =
|
|
7909
|
-
|
|
7852
|
+
const lastLoadedPaymentModes = useRef9([]);
|
|
7853
|
+
useEffect11(() => {
|
|
7910
7854
|
if (!paymentModes?.length) return;
|
|
7911
7855
|
setPaymentMode(getPayMethodID(paymentModes[0]));
|
|
7912
7856
|
lastLoadedPaymentModes.current = paymentModes;
|
|
7913
7857
|
}, [paymentModes]);
|
|
7914
7858
|
const selectedPaymentMode = paymentModes?.find((el) => getPayMethodID(el) === paymentMode) || null;
|
|
7915
7859
|
const minimum = Number(selectedPaymentMode?.fiatMinLimit || "0");
|
|
7916
|
-
|
|
7860
|
+
useEffect11(() => setMinAmount(minimum), [minimum]);
|
|
7917
7861
|
const {
|
|
7918
7862
|
data: quoteData = null,
|
|
7919
7863
|
isLoading: isQuoteDataLoading,
|
|
@@ -7934,7 +7878,7 @@ function Binance(props) {
|
|
|
7934
7878
|
[lumiaNetworkError, paymentMethodsError, quoteError],
|
|
7935
7879
|
setSrcInputAmount
|
|
7936
7880
|
);
|
|
7937
|
-
const { mutate: checkoutFundWalletOrder, isPending: isFundWalletOrderCheckouting } =
|
|
7881
|
+
const { mutate: checkoutFundWalletOrder, isPending: isFundWalletOrderCheckouting } = useMutation5({
|
|
7938
7882
|
mutationFn: async () => {
|
|
7939
7883
|
setRedirecting(true);
|
|
7940
7884
|
const returnUrl = window.location.href.split("?")[0];
|
|
@@ -7958,7 +7902,7 @@ function Binance(props) {
|
|
|
7958
7902
|
setRedirecting(false);
|
|
7959
7903
|
}
|
|
7960
7904
|
});
|
|
7961
|
-
|
|
7905
|
+
useEffect11(() => {
|
|
7962
7906
|
return () => {
|
|
7963
7907
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.binanceNetworksQuery] });
|
|
7964
7908
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.binancePaymentModes] });
|
|
@@ -7969,7 +7913,7 @@ function Binance(props) {
|
|
|
7969
7913
|
const isLoading = !!isLumiaNetworkLoading || !!isQuoteDataLoading || !!isPaymentModesLoading;
|
|
7970
7914
|
const isContinueDisabled = !!redirecting || !!isLoading || !!isFundWalletOrderCheckouting || !quoteData || srcInputAmount < minimum || srcInputAmount !== srcQueryAmount;
|
|
7971
7915
|
const localError = errorMessage?.length ? errorMessage : srcInputAmount < minimum ? `Provider min: $${minimum}` : void 0;
|
|
7972
|
-
return /* @__PURE__ */ jsxs26(
|
|
7916
|
+
return /* @__PURE__ */ jsxs26(Fragment6, { children: [
|
|
7973
7917
|
/* @__PURE__ */ jsx32(
|
|
7974
7918
|
Input,
|
|
7975
7919
|
{
|
|
@@ -8020,9 +7964,9 @@ function Binance(props) {
|
|
|
8020
7964
|
}
|
|
8021
7965
|
|
|
8022
7966
|
// src/internal/components/BuyMenu/rampnow/Rampnow.tsx
|
|
8023
|
-
import { useMutation as
|
|
7967
|
+
import { useMutation as useMutation6, useQuery as useQuery5, useQueryClient as useQueryClient4 } from "@tanstack/react-query";
|
|
8024
7968
|
import { DollarSign as DollarSign2, LoaderIcon as LoaderIcon3 } from "lucide-react";
|
|
8025
|
-
import { useEffect as
|
|
7969
|
+
import { useEffect as useEffect12 } from "react";
|
|
8026
7970
|
|
|
8027
7971
|
// src/internal/components/BuyMenu/rampnow/api.ts
|
|
8028
7972
|
init_iframe_manager();
|
|
@@ -8072,7 +8016,7 @@ var ORDER_URL_QUERIES = [
|
|
|
8072
8016
|
];
|
|
8073
8017
|
|
|
8074
8018
|
// src/internal/components/BuyMenu/rampnow/Rampnow.tsx
|
|
8075
|
-
import { Fragment as
|
|
8019
|
+
import { Fragment as Fragment7, jsx as jsx33, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
8076
8020
|
function Rampnow(props) {
|
|
8077
8021
|
const { walletAddress, control } = props;
|
|
8078
8022
|
const {
|
|
@@ -8087,7 +8031,7 @@ function Rampnow(props) {
|
|
|
8087
8031
|
setMinAmount
|
|
8088
8032
|
} = control;
|
|
8089
8033
|
const qc = useQueryClient4();
|
|
8090
|
-
|
|
8034
|
+
useEffect12(() => {
|
|
8091
8035
|
setMinAmount(MINIMUM_RAMP_AMOUNT);
|
|
8092
8036
|
setPaymentMode(PAYMENT_MODES[0].id);
|
|
8093
8037
|
}, []);
|
|
@@ -8115,7 +8059,7 @@ function Rampnow(props) {
|
|
|
8115
8059
|
paymentMode
|
|
8116
8060
|
})
|
|
8117
8061
|
});
|
|
8118
|
-
const { mutate: checkoutFundWalletOrder, isPending: isFundWalletOrderCheckouting } =
|
|
8062
|
+
const { mutate: checkoutFundWalletOrder, isPending: isFundWalletOrderCheckouting } = useMutation6({
|
|
8119
8063
|
mutationFn: async () => {
|
|
8120
8064
|
if (!configData?.apiKey?.length || !configData?.orderUrl?.length) {
|
|
8121
8065
|
throw new Error("RampNow order service is not available");
|
|
@@ -8144,7 +8088,7 @@ function Rampnow(props) {
|
|
|
8144
8088
|
console.error("Create CheckoutOrder failed:", err);
|
|
8145
8089
|
}
|
|
8146
8090
|
});
|
|
8147
|
-
|
|
8091
|
+
useEffect12(() => {
|
|
8148
8092
|
return () => {
|
|
8149
8093
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.getRampNowConfig] });
|
|
8150
8094
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.getRampNowQuote] });
|
|
@@ -8155,7 +8099,7 @@ function Rampnow(props) {
|
|
|
8155
8099
|
const isContinueDisabled = !!redirecting || !!isLoading || !!isFundWalletOrderCheckouting || !quoteData || srcInputAmount < MINIMUM_RAMP_AMOUNT || srcInputAmount !== srcQueryAmount;
|
|
8156
8100
|
const errorMessage = quoteError?.message || configError?.message || null;
|
|
8157
8101
|
const localError = errorMessage?.length ? errorMessage : srcInputAmount < MINIMUM_RAMP_AMOUNT ? `Provider min: $${MINIMUM_RAMP_AMOUNT}` : void 0;
|
|
8158
|
-
return /* @__PURE__ */ jsxs27(
|
|
8102
|
+
return /* @__PURE__ */ jsxs27(Fragment7, { children: [
|
|
8159
8103
|
/* @__PURE__ */ jsx33(
|
|
8160
8104
|
Input,
|
|
8161
8105
|
{
|
|
@@ -8226,7 +8170,7 @@ var RAMP_PROVIDERS = {
|
|
|
8226
8170
|
var REDIRECT_TIMEOUT_MS = 1500;
|
|
8227
8171
|
|
|
8228
8172
|
// src/internal/components/BuyMenu/useSelectables.ts
|
|
8229
|
-
import { useCallback as useCallback8, useEffect as
|
|
8173
|
+
import { useCallback as useCallback8, useEffect as useEffect13, useRef as useRef10, useState as useState7 } from "react";
|
|
8230
8174
|
|
|
8231
8175
|
// src/internal/utils/debounce.ts
|
|
8232
8176
|
function debounce2(func, waitFor) {
|
|
@@ -8243,7 +8187,7 @@ var useSelectables = () => {
|
|
|
8243
8187
|
const [redirecting, setRedirecting] = useState7(false);
|
|
8244
8188
|
const [rampProvider, setrRampProvider] = useState7("binance");
|
|
8245
8189
|
const [minAmount, setMinAmount] = useState7(0);
|
|
8246
|
-
const inputRef =
|
|
8190
|
+
const inputRef = useRef10(null);
|
|
8247
8191
|
const [srcQueryAmount, setSrcQueryAmount] = useState7(0);
|
|
8248
8192
|
const [srcInputAmount, setSrcInputAmount] = useState7(0);
|
|
8249
8193
|
const [paymentMode, setPaymentMode] = useState7(null);
|
|
@@ -8255,7 +8199,7 @@ var useSelectables = () => {
|
|
|
8255
8199
|
}, ON_INPUT_QUERY_DELAY),
|
|
8256
8200
|
[minAmount]
|
|
8257
8201
|
);
|
|
8258
|
-
|
|
8202
|
+
useEffect13(() => setQueryAmountDebounced(srcInputAmount), [srcInputAmount, setQueryAmountDebounced]);
|
|
8259
8203
|
return {
|
|
8260
8204
|
inputRef,
|
|
8261
8205
|
redirecting,
|
|
@@ -8317,19 +8261,78 @@ function BuyMenu() {
|
|
|
8317
8261
|
}
|
|
8318
8262
|
|
|
8319
8263
|
// src/internal/components/KeyshareRestoreMenu/KeyshareRestoreMenu.tsx
|
|
8320
|
-
import { useMutation as
|
|
8321
|
-
import { AlertCircle as AlertCircle2, CheckCircle2, CloudDownload as CloudDownload2, Loader as
|
|
8322
|
-
import { useEffect as
|
|
8264
|
+
import { useMutation as useMutation9, useQuery as useQuery7, useQueryClient as useQueryClient7 } from "@tanstack/react-query";
|
|
8265
|
+
import { AlertCircle as AlertCircle2, CheckCircle2, CloudDownload as CloudDownload2, Loader as Loader9, UserCircle as UserCircle2 } from "lucide-react";
|
|
8266
|
+
import { useEffect as useEffect18 } from "react";
|
|
8323
8267
|
init_vaultClient();
|
|
8324
8268
|
|
|
8269
|
+
// src/internal/components/ui/switch.tsx
|
|
8270
|
+
import { forwardRef as forwardRef4, useState as useState8 } from "react";
|
|
8271
|
+
import { jsx as jsx36, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
8272
|
+
var Switch = forwardRef4((props, ref) => {
|
|
8273
|
+
const { className, labels, ...inputProps } = props;
|
|
8274
|
+
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
8275
|
+
const [labelW, setLabelW] = useState8(0);
|
|
8276
|
+
return /* @__PURE__ */ jsx36(
|
|
8277
|
+
"div",
|
|
8278
|
+
{
|
|
8279
|
+
role: "switch",
|
|
8280
|
+
"aria-checked": inputProps.checked,
|
|
8281
|
+
className: cn(
|
|
8282
|
+
"block rounded-full w-fit h-5 px-[2px] outline-none flex-none",
|
|
8283
|
+
inputProps.checked ? "bg-[var(--l-pass-bg-success)]" : "bg-[var(--l-pass-bg-info)]",
|
|
8284
|
+
className
|
|
8285
|
+
),
|
|
8286
|
+
children: /* @__PURE__ */ jsxs29(
|
|
8287
|
+
"label",
|
|
8288
|
+
{
|
|
8289
|
+
className: "relative inline-block h-4 outline-none",
|
|
8290
|
+
style: {
|
|
8291
|
+
width: `calc(16px + ${labelW}px)`,
|
|
8292
|
+
transition: "width 200ms ease",
|
|
8293
|
+
cursor: inputProps.disabled ? "not-allowed" : "pointer"
|
|
8294
|
+
},
|
|
8295
|
+
children: [
|
|
8296
|
+
/* @__PURE__ */ jsx36("input", { type: "checkbox", className: "hidden sr-only peer outline-none", ref, ...inputProps }),
|
|
8297
|
+
/* @__PURE__ */ jsx36(
|
|
8298
|
+
"span",
|
|
8299
|
+
{
|
|
8300
|
+
ref: (inst) => {
|
|
8301
|
+
if (inst) setLabelW(inst.clientWidth);
|
|
8302
|
+
},
|
|
8303
|
+
style: {
|
|
8304
|
+
left: inputProps.checked ? "0px" : "16px",
|
|
8305
|
+
color: inputProps.checked ? colorMode === "dark" ? "var(--l-pass-fg-inverted)" : "var(--l-pass-fg)" : "var(--l-pass-fg)",
|
|
8306
|
+
transition: "left 200ms ease"
|
|
8307
|
+
},
|
|
8308
|
+
className: "absolute top-0 px-2 text-[10px] leading-4 font-semibold min-w-4 select-none",
|
|
8309
|
+
children: inputProps.checked ? labels?.checked : labels?.unchecked
|
|
8310
|
+
}
|
|
8311
|
+
),
|
|
8312
|
+
/* @__PURE__ */ jsx36(
|
|
8313
|
+
"span",
|
|
8314
|
+
{
|
|
8315
|
+
style: {
|
|
8316
|
+
left: inputProps.checked ? `${labelW}px` : "0px",
|
|
8317
|
+
transition: "left 200ms ease"
|
|
8318
|
+
},
|
|
8319
|
+
className: "absolute top-0 w-4 h-4 rounded-full bg-[var(--l-pass-fg)]"
|
|
8320
|
+
}
|
|
8321
|
+
)
|
|
8322
|
+
]
|
|
8323
|
+
}
|
|
8324
|
+
)
|
|
8325
|
+
}
|
|
8326
|
+
);
|
|
8327
|
+
});
|
|
8328
|
+
Switch.displayName = "Switch";
|
|
8329
|
+
|
|
8325
8330
|
// src/internal/components/KeyshareRestoreMenu/components/MethodSelector.tsx
|
|
8326
8331
|
import { Cloud, FileDown, FileUp } from "lucide-react";
|
|
8327
|
-
import { Fragment as
|
|
8332
|
+
import { Fragment as Fragment8, useMemo as useMemo2 } from "react";
|
|
8328
8333
|
|
|
8329
|
-
// src/internal/components/KeyshareRestoreMenu/hooks/
|
|
8330
|
-
|
|
8331
|
-
import { useQuery as useQuery6, useQueryClient as useQueryClient5 } from "@tanstack/react-query";
|
|
8332
|
-
import { useEffect as useEffect16 } from "react";
|
|
8334
|
+
// src/internal/components/KeyshareRestoreMenu/hooks/useOnRestoreSuccess.ts
|
|
8335
|
+
import { useCallback as useCallback9 } from "react";
|
|
8333
8336
|
|
|
8334
8337
|
// src/internal/components/KeyshareRestoreMenu/hooks/useRestoreStore.ts
|
|
8335
8338
|
import { create as create4 } from "zustand";
|
|
@@ -8358,47 +8361,7 @@ var useRestoreStore = create4((set) => ({
|
|
|
8358
8361
|
setSuccess: (success) => set({ success })
|
|
8359
8362
|
}));
|
|
8360
8363
|
|
|
8361
|
-
// src/internal/components/KeyshareRestoreMenu/hooks/useCheckBackupAvailability.ts
|
|
8362
|
-
function useCheckBackupAvailability() {
|
|
8363
|
-
const qc = useQueryClient5();
|
|
8364
|
-
const address = useLumiaPassportSession((st) => st.address);
|
|
8365
|
-
const { setError, setHasServerBackup, setCheckingBackup } = useRestoreStore();
|
|
8366
|
-
const {
|
|
8367
|
-
data: serverRecoveryData,
|
|
8368
|
-
isLoading: isRecoveryLoading,
|
|
8369
|
-
error: recoveryError
|
|
8370
|
-
} = useQuery6({
|
|
8371
|
-
retry: false,
|
|
8372
|
-
queryKey: [CHECK_BACKUP_QUERY_KEY, address],
|
|
8373
|
-
queryFn: async () => await getShareRecoveryStats()
|
|
8374
|
-
});
|
|
8375
|
-
useEffect16(() => {
|
|
8376
|
-
qc.invalidateQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY] });
|
|
8377
|
-
}, [qc]);
|
|
8378
|
-
useEffect16(() => {
|
|
8379
|
-
setCheckingBackup(isRecoveryLoading);
|
|
8380
|
-
if (!!isRecoveryLoading) return;
|
|
8381
|
-
if (!!recoveryError) {
|
|
8382
|
-
console.warn("[KeyshareRestoreMenu] Failed to check backup availability:", recoveryError);
|
|
8383
|
-
setError("Failed to check backup availability");
|
|
8384
|
-
setHasServerBackup(false);
|
|
8385
|
-
setCheckingBackup(false);
|
|
8386
|
-
return;
|
|
8387
|
-
}
|
|
8388
|
-
const hasRecoveryData = serverRecoveryData?.created || serverRecoveryData?.devices?.length > 0;
|
|
8389
|
-
setHasServerBackup(!!hasRecoveryData);
|
|
8390
|
-
setCheckingBackup(false);
|
|
8391
|
-
}, [serverRecoveryData, recoveryError, isRecoveryLoading]);
|
|
8392
|
-
return {
|
|
8393
|
-
serverRecoveryData,
|
|
8394
|
-
isRecoveryLoading,
|
|
8395
|
-
recoveryError,
|
|
8396
|
-
hasRecoveryData: serverRecoveryData?.created || serverRecoveryData?.devices?.length > 0
|
|
8397
|
-
};
|
|
8398
|
-
}
|
|
8399
|
-
|
|
8400
8364
|
// src/internal/components/KeyshareRestoreMenu/hooks/useOnRestoreSuccess.ts
|
|
8401
|
-
import { useCallback as useCallback9 } from "react";
|
|
8402
8365
|
function useOnRestoreSuccess() {
|
|
8403
8366
|
const { config, callbacks } = useLumiaPassportConfig();
|
|
8404
8367
|
const setIsDialogForced = useLayoutStore((st) => st.setIsDialogForced);
|
|
@@ -8446,14 +8409,9 @@ function useOnRestoreSuccess() {
|
|
|
8446
8409
|
if (recoveryUserId) {
|
|
8447
8410
|
try {
|
|
8448
8411
|
const { session: sess, address: addr } = await createSessionWithKeyshare(recoveryUserId, hasServerKeyshare);
|
|
8449
|
-
setSession(sess);
|
|
8450
|
-
setAddress(addr);
|
|
8451
|
-
setStatus("ready");
|
|
8452
8412
|
setRecoveryUserId(null);
|
|
8453
8413
|
setSuccess(null);
|
|
8454
8414
|
setError(null);
|
|
8455
|
-
setIsDialogForced(false);
|
|
8456
|
-
setPage("main-menu" /* MAIN_MENU */);
|
|
8457
8415
|
try {
|
|
8458
8416
|
callbacks?.onLumiaPassportConnect?.({
|
|
8459
8417
|
address: addr,
|
|
@@ -8485,11 +8443,17 @@ function useOnRestoreSuccess() {
|
|
|
8485
8443
|
} catch (e) {
|
|
8486
8444
|
console.warn("[UI-KIT] Failed to update backup status:", e);
|
|
8487
8445
|
}
|
|
8446
|
+
setSession(sess);
|
|
8447
|
+
setAddress(addr);
|
|
8448
|
+
setStatus("ready");
|
|
8449
|
+
setPage("main-menu" /* MAIN_MENU */);
|
|
8450
|
+
setTimeout(() => {
|
|
8451
|
+
setIsDialogForced(false);
|
|
8452
|
+
}, 375);
|
|
8488
8453
|
} catch (err) {
|
|
8489
8454
|
setSuccess(null);
|
|
8490
8455
|
setError(err?.message || String(err));
|
|
8491
8456
|
setStatus("error");
|
|
8492
|
-
setIsDialogForced(false);
|
|
8493
8457
|
}
|
|
8494
8458
|
}
|
|
8495
8459
|
}, [
|
|
@@ -8507,17 +8471,17 @@ function useOnRestoreSuccess() {
|
|
|
8507
8471
|
}
|
|
8508
8472
|
|
|
8509
8473
|
// src/internal/components/KeyshareRestoreMenu/hooks/useCreateBackup.ts
|
|
8510
|
-
import { useMutation as
|
|
8511
|
-
import { useEffect as
|
|
8474
|
+
import { useMutation as useMutation7, useQueryClient as useQueryClient5 } from "@tanstack/react-query";
|
|
8475
|
+
import { useEffect as useEffect14 } from "react";
|
|
8512
8476
|
init_iframe_manager();
|
|
8513
8477
|
function useCreateBackup() {
|
|
8514
|
-
const qc =
|
|
8478
|
+
const qc = useQueryClient5();
|
|
8515
8479
|
const session = useLumiaPassportSession((st) => st.session);
|
|
8516
8480
|
const address = useLumiaPassportSession((st) => st.address);
|
|
8517
8481
|
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
8518
8482
|
const setIsDialogForced = useLayoutStore((st) => st.setIsDialogForced);
|
|
8519
8483
|
const { usePasskey, restorePassword, selectedCloudProvider, setSuccess, setError, setMethod } = useRestoreStore();
|
|
8520
|
-
|
|
8484
|
+
useEffect14(() => {
|
|
8521
8485
|
if (!hasServerVault) {
|
|
8522
8486
|
setMethod("server");
|
|
8523
8487
|
setIsDialogForced(true);
|
|
@@ -8525,7 +8489,7 @@ function useCreateBackup() {
|
|
|
8525
8489
|
}, [hasServerVault, setIsDialogForced, setMethod]);
|
|
8526
8490
|
const passportUserId = session?.mpcUserId || "";
|
|
8527
8491
|
const onBackupSuccess = () => console.log("[ConnectWalletButton] Backup created successfully");
|
|
8528
|
-
const { mutate: createPasswordBackup, isPending: isPasswordBackupCreating } =
|
|
8492
|
+
const { mutate: createPasswordBackup, isPending: isPasswordBackupCreating } = useMutation7({
|
|
8529
8493
|
mutationFn: async () => {
|
|
8530
8494
|
const iframeManager = getIframeManager();
|
|
8531
8495
|
if (!iframeManager) {
|
|
@@ -8535,20 +8499,25 @@ function useCreateBackup() {
|
|
|
8535
8499
|
if (!usePasskey && !restorePassword) {
|
|
8536
8500
|
throw new Error("Please provide a password for the backup");
|
|
8537
8501
|
}
|
|
8538
|
-
|
|
8539
|
-
|
|
8540
|
-
|
|
8541
|
-
|
|
8542
|
-
|
|
8502
|
+
const navigateToMainMenu = jwt.isNewUser || !hasServerVault;
|
|
8503
|
+
console.log("[BACKUP STATUS] is new user:", jwt.isNewUser, !hasServerVault);
|
|
8504
|
+
return {
|
|
8505
|
+
response: await iframeManager.createBackup(
|
|
8506
|
+
passportUserId,
|
|
8507
|
+
{ method: "server", password: restorePassword },
|
|
8508
|
+
jwt.accessToken
|
|
8509
|
+
),
|
|
8510
|
+
navigateToMainMenu
|
|
8511
|
+
};
|
|
8543
8512
|
},
|
|
8544
|
-
onSuccess: async (response) => {
|
|
8513
|
+
onSuccess: async ({ response, navigateToMainMenu }) => {
|
|
8545
8514
|
qc.invalidateQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY, address] });
|
|
8546
8515
|
if (response.success) {
|
|
8547
8516
|
setSuccess("Successfully created server backup");
|
|
8548
8517
|
if (typeof window !== "undefined") {
|
|
8549
8518
|
window.dispatchEvent(
|
|
8550
8519
|
new CustomEvent("lumia-passport-backup-status-changed", {
|
|
8551
|
-
detail: { method: "server", success: true }
|
|
8520
|
+
detail: { method: "server", success: true, navigateToMainMenu }
|
|
8552
8521
|
})
|
|
8553
8522
|
);
|
|
8554
8523
|
}
|
|
@@ -8556,13 +8525,14 @@ function useCreateBackup() {
|
|
|
8556
8525
|
} else {
|
|
8557
8526
|
setError(response.error || "Server backup failed");
|
|
8558
8527
|
}
|
|
8528
|
+
setIsDialogForced(false);
|
|
8559
8529
|
},
|
|
8560
8530
|
onError: async (error) => {
|
|
8561
8531
|
setError(error?.message || "Backup creation failed");
|
|
8562
8532
|
qc.invalidateQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY, address] });
|
|
8563
8533
|
}
|
|
8564
8534
|
});
|
|
8565
|
-
const { mutate: createLocalBackup, isPending: isLocalBackupCreating } =
|
|
8535
|
+
const { mutate: createLocalBackup, isPending: isLocalBackupCreating } = useMutation7({
|
|
8566
8536
|
mutationFn: async () => {
|
|
8567
8537
|
const iframeManager = getIframeManager();
|
|
8568
8538
|
if (!usePasskey && !restorePassword) {
|
|
@@ -8596,7 +8566,7 @@ function useCreateBackup() {
|
|
|
8596
8566
|
qc.invalidateQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY, address] });
|
|
8597
8567
|
}
|
|
8598
8568
|
});
|
|
8599
|
-
const { mutate: createCloudBackup, isPending: isCloudBackupCreating } =
|
|
8569
|
+
const { mutate: createCloudBackup, isPending: isCloudBackupCreating } = useMutation7({
|
|
8600
8570
|
mutationFn: async () => {
|
|
8601
8571
|
const iframeManager = getIframeManager();
|
|
8602
8572
|
const encryptedData = await iframeManager.encryptBackupData(passportUserId);
|
|
@@ -8647,7 +8617,7 @@ function useCreateBackup() {
|
|
|
8647
8617
|
}
|
|
8648
8618
|
|
|
8649
8619
|
// src/internal/components/KeyshareRestoreMenu/hooks/useRestoreAccount.ts
|
|
8650
|
-
import { useMutation as
|
|
8620
|
+
import { useMutation as useMutation8 } from "@tanstack/react-query";
|
|
8651
8621
|
function useRestoreAccount() {
|
|
8652
8622
|
const recoveryUserId = useLumiaPassportSession((st) => st.recoveryUserId);
|
|
8653
8623
|
const {
|
|
@@ -8661,7 +8631,7 @@ function useRestoreAccount() {
|
|
|
8661
8631
|
setRestoreFile
|
|
8662
8632
|
} = useRestoreStore();
|
|
8663
8633
|
const { onRestoreSuccess } = useOnRestoreSuccess();
|
|
8664
|
-
const { mutate: restoreFromServer2, isPending: isRestoringFromServer } =
|
|
8634
|
+
const { mutate: restoreFromServer2, isPending: isRestoringFromServer } = useMutation8({
|
|
8665
8635
|
mutationFn: async () => {
|
|
8666
8636
|
setError(null);
|
|
8667
8637
|
setSuccess(null);
|
|
@@ -8691,18 +8661,16 @@ function useRestoreAccount() {
|
|
|
8691
8661
|
onRestoreSuccess();
|
|
8692
8662
|
} else {
|
|
8693
8663
|
console.error("[KeyshareRestoreMenu] Server restore failed:", response.error);
|
|
8694
|
-
setMethod(null);
|
|
8695
8664
|
setError(response.error || "Server restore failed");
|
|
8696
8665
|
}
|
|
8697
8666
|
},
|
|
8698
8667
|
onError: async (err) => {
|
|
8699
8668
|
console.error("[KeyshareRestoreMenu] Server restore exception:", err);
|
|
8700
8669
|
const errorMsg = err instanceof Error ? err.message : "Server restore failed";
|
|
8701
|
-
setMethod(null);
|
|
8702
8670
|
setError(errorMsg);
|
|
8703
8671
|
}
|
|
8704
8672
|
});
|
|
8705
|
-
const { mutate: restoreFromFile, isPending: isRestoringFromFile } =
|
|
8673
|
+
const { mutate: restoreFromFile, isPending: isRestoringFromFile } = useMutation8({
|
|
8706
8674
|
mutationFn: async () => {
|
|
8707
8675
|
if (!restoreFile) {
|
|
8708
8676
|
throw new Error("Please select a backup file");
|
|
@@ -8728,17 +8696,15 @@ function useRestoreAccount() {
|
|
|
8728
8696
|
setMethod(null);
|
|
8729
8697
|
onRestoreSuccess();
|
|
8730
8698
|
} else {
|
|
8731
|
-
setMethod(null);
|
|
8732
8699
|
setError(response.error || "File restore failed");
|
|
8733
8700
|
}
|
|
8734
8701
|
},
|
|
8735
8702
|
onError: async (err) => {
|
|
8736
8703
|
const errorMsg = err instanceof Error ? err.message : "Restore failed";
|
|
8737
|
-
setMethod(null);
|
|
8738
8704
|
setError(errorMsg);
|
|
8739
8705
|
}
|
|
8740
8706
|
});
|
|
8741
|
-
const { mutate: restoreFromCloud, isPending: isRestoringFromCloud } =
|
|
8707
|
+
const { mutate: restoreFromCloud, isPending: isRestoringFromCloud } = useMutation8({
|
|
8742
8708
|
mutationFn: async () => {
|
|
8743
8709
|
alert("Cloud restore not implemented yet");
|
|
8744
8710
|
return null;
|
|
@@ -8759,7 +8725,7 @@ function useRestoreAccount() {
|
|
|
8759
8725
|
}
|
|
8760
8726
|
|
|
8761
8727
|
// src/internal/components/KeyshareRestoreMenu/hooks/useValidateFileBackup.ts
|
|
8762
|
-
import { useEffect as
|
|
8728
|
+
import { useEffect as useEffect15 } from "react";
|
|
8763
8729
|
function validateRestoreFileFormat(parsedData) {
|
|
8764
8730
|
if (typeof parsedData !== "object" || parsedData === null) return false;
|
|
8765
8731
|
const data = parsedData;
|
|
@@ -8769,7 +8735,7 @@ function useValidateFileBackup() {
|
|
|
8769
8735
|
const restoreFile = useRestoreStore((st) => st.restoreFile);
|
|
8770
8736
|
const setError = useRestoreStore((st) => st.setError);
|
|
8771
8737
|
const setUsePasskey = useRestoreStore((st) => st.setUsePasskey);
|
|
8772
|
-
|
|
8738
|
+
useEffect15(() => {
|
|
8773
8739
|
if (!restoreFile) {
|
|
8774
8740
|
return;
|
|
8775
8741
|
}
|
|
@@ -8792,9 +8758,9 @@ function useValidateFileBackup() {
|
|
|
8792
8758
|
}
|
|
8793
8759
|
|
|
8794
8760
|
// src/internal/components/KeyshareRestoreMenu/components/MethodSelector.tsx
|
|
8795
|
-
import { jsx as
|
|
8761
|
+
import { jsx as jsx37, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
8796
8762
|
var getRecoveryRenderMethods = (mode) => [
|
|
8797
|
-
{ method:
|
|
8763
|
+
// { method: 'server', label: 'Password', Icon: OtpIcon },
|
|
8798
8764
|
{ method: "file", label: "Local File", Icon: mode === "restore" ? FileUp : FileDown },
|
|
8799
8765
|
{ method: "cloud", label: "Cloud", Icon: Cloud, disabled: true }
|
|
8800
8766
|
];
|
|
@@ -8824,51 +8790,48 @@ function MethodSelector(props) {
|
|
|
8824
8790
|
return methodsWithBackupData;
|
|
8825
8791
|
}, [mode, serverRecoveryStatus]);
|
|
8826
8792
|
if (!!selectedRecoveryMethod) return null;
|
|
8827
|
-
return /* @__PURE__ */
|
|
8828
|
-
|
|
8829
|
-
|
|
8830
|
-
|
|
8831
|
-
|
|
8832
|
-
|
|
8833
|
-
|
|
8834
|
-
|
|
8835
|
-
|
|
8836
|
-
|
|
8837
|
-
|
|
8838
|
-
|
|
8839
|
-
|
|
8840
|
-
|
|
8841
|
-
|
|
8842
|
-
|
|
8843
|
-
|
|
8844
|
-
|
|
8845
|
-
|
|
8846
|
-
|
|
8847
|
-
|
|
8848
|
-
|
|
8849
|
-
|
|
8850
|
-
|
|
8851
|
-
},
|
|
8852
|
-
children:
|
|
8853
|
-
|
|
8854
|
-
|
|
8855
|
-
|
|
8856
|
-
|
|
8857
|
-
|
|
8858
|
-
|
|
8859
|
-
|
|
8860
|
-
}
|
|
8861
|
-
)
|
|
8862
|
-
] });
|
|
8793
|
+
return /* @__PURE__ */ jsx37(Fragment8, { children: /* @__PURE__ */ jsx37(
|
|
8794
|
+
"div",
|
|
8795
|
+
{
|
|
8796
|
+
style: { gridTemplateColumns: `repeat(${recoveryRenderMethods.length}, minmax(0, 1fr))` },
|
|
8797
|
+
className: "w-full max-w-[256px] grid gap-[var(--l-pass-gap)] mx-auto py-[var(--l-pass-pd)]",
|
|
8798
|
+
children: recoveryRenderMethods.map(({ method: recoveryMethod, label, Icon: Icon2, data, disabled }) => /* @__PURE__ */ jsxs30("div", { className: "w-full h-full flex flex-col items-center gap-[var(--l-pass-gap)]", children: [
|
|
8799
|
+
/* @__PURE__ */ jsxs30(
|
|
8800
|
+
Button,
|
|
8801
|
+
{
|
|
8802
|
+
size: "icon",
|
|
8803
|
+
variant: "outline",
|
|
8804
|
+
type: "button",
|
|
8805
|
+
disabled,
|
|
8806
|
+
style: { height: "unset", maxWidth: "96px" },
|
|
8807
|
+
className: "relative w-full aspect-square h-unset rounded-[var(--l-pass-el-bdrs)]",
|
|
8808
|
+
onClick: () => {
|
|
8809
|
+
setRestorePassword("");
|
|
8810
|
+
setRestoreFile(null);
|
|
8811
|
+
setShowPassword(false);
|
|
8812
|
+
setError(null);
|
|
8813
|
+
setSuccess(null);
|
|
8814
|
+
setMethod(recoveryMethod);
|
|
8815
|
+
},
|
|
8816
|
+
children: [
|
|
8817
|
+
/* @__PURE__ */ jsx37(Icon2, { className: "w-5 h-5 md:w-8 md:h-8" }),
|
|
8818
|
+
!!data?.lastBackup && /* @__PURE__ */ jsx37("div", { className: "w-6 h-6 absolute -top-2 -right-2 flex items-center justify-center bg-transparent", children: /* @__PURE__ */ jsx37(PositiveIcon, { className: "w-4 h-4" }) })
|
|
8819
|
+
]
|
|
8820
|
+
}
|
|
8821
|
+
),
|
|
8822
|
+
/* @__PURE__ */ jsx37("span", { className: "text-xs font-bold leading-4", children: label })
|
|
8823
|
+
] }, recoveryMethod))
|
|
8824
|
+
}
|
|
8825
|
+
) });
|
|
8863
8826
|
}
|
|
8864
8827
|
|
|
8865
8828
|
// src/internal/components/KeyshareRestoreMenu/components/NoBackupFound.tsx
|
|
8866
8829
|
import { AlertCircle, FileUp as FileUp2, Upload, User } from "lucide-react";
|
|
8867
8830
|
|
|
8868
8831
|
// src/internal/components/KeyshareRestoreMenu/components/PasswordPasskey.tsx
|
|
8869
|
-
import { ChevronRight as ChevronRight2, Eye, EyeOff, Info, Loader as
|
|
8870
|
-
import { useRef as
|
|
8871
|
-
import { Fragment as
|
|
8832
|
+
import { ChevronRight as ChevronRight2, Eye, EyeOff, Info, Key as Key4, Loader as Loader7 } from "lucide-react";
|
|
8833
|
+
import { useRef as useRef11 } from "react";
|
|
8834
|
+
import { Fragment as Fragment9, jsx as jsx38, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
8872
8835
|
function PasswordPasskey(props) {
|
|
8873
8836
|
const {
|
|
8874
8837
|
mode = "restore",
|
|
@@ -8880,32 +8843,79 @@ function PasswordPasskey(props) {
|
|
|
8880
8843
|
actionHandler
|
|
8881
8844
|
} = props;
|
|
8882
8845
|
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
8883
|
-
const actionRef =
|
|
8884
|
-
const {
|
|
8885
|
-
|
|
8886
|
-
|
|
8887
|
-
|
|
8888
|
-
|
|
8889
|
-
|
|
8890
|
-
|
|
8891
|
-
|
|
8892
|
-
|
|
8893
|
-
|
|
8894
|
-
|
|
8895
|
-
|
|
8896
|
-
|
|
8897
|
-
|
|
8898
|
-
|
|
8899
|
-
|
|
8900
|
-
|
|
8901
|
-
|
|
8902
|
-
|
|
8846
|
+
const actionRef = useRef11(null);
|
|
8847
|
+
const {
|
|
8848
|
+
showPassword,
|
|
8849
|
+
restorePassword,
|
|
8850
|
+
usePasskey,
|
|
8851
|
+
error,
|
|
8852
|
+
setRestorePassword,
|
|
8853
|
+
setShowPassword,
|
|
8854
|
+
setUsePasskey,
|
|
8855
|
+
setRestoreFile
|
|
8856
|
+
} = useRestoreStore();
|
|
8857
|
+
return /* @__PURE__ */ jsxs31(Fragment9, { children: [
|
|
8858
|
+
mode === "backup" && /* @__PURE__ */ jsxs31("div", { className: "flex items-center justify-center px-[var(--l-pass-pd)]", children: [
|
|
8859
|
+
/* @__PURE__ */ jsxs31(
|
|
8860
|
+
Button,
|
|
8861
|
+
{
|
|
8862
|
+
size: "medium",
|
|
8863
|
+
variant: "ghost",
|
|
8864
|
+
onClick: () => {
|
|
8865
|
+
setUsePasskey(false);
|
|
8866
|
+
setRestoreFile(null);
|
|
8867
|
+
setRestorePassword("");
|
|
8868
|
+
},
|
|
8869
|
+
className: cn(usePasskey ? "opacity-50" : "opacity-100"),
|
|
8870
|
+
children: [
|
|
8871
|
+
/* @__PURE__ */ jsx38(OtpIcon, { className: "w-4 h-4 inline-block mr-1" }),
|
|
8872
|
+
"Password"
|
|
8873
|
+
]
|
|
8874
|
+
}
|
|
8875
|
+
),
|
|
8876
|
+
/* @__PURE__ */ jsxs31(
|
|
8877
|
+
Button,
|
|
8878
|
+
{
|
|
8879
|
+
size: "medium",
|
|
8880
|
+
variant: "ghost",
|
|
8881
|
+
onClick: () => {
|
|
8882
|
+
setUsePasskey(true);
|
|
8883
|
+
setRestoreFile(null);
|
|
8884
|
+
setRestorePassword("");
|
|
8885
|
+
},
|
|
8886
|
+
className: cn(usePasskey ? "opacity-100" : "opacity-50"),
|
|
8887
|
+
children: [
|
|
8888
|
+
/* @__PURE__ */ jsx38(Key4, { className: "w-4 h-4 inline-block mr-1" }),
|
|
8889
|
+
"Passkey"
|
|
8890
|
+
]
|
|
8891
|
+
}
|
|
8892
|
+
)
|
|
8893
|
+
] }),
|
|
8894
|
+
!hasServerVault && /* @__PURE__ */ jsxs31("span", { className: "block w-full text-[10px] leading-8 px-[var(--l-pass-pd)] truncate", children: [
|
|
8895
|
+
"Use your ",
|
|
8896
|
+
/* @__PURE__ */ jsx38("strong", { children: usePasskey ? "Passkey" : "Password" }),
|
|
8897
|
+
" to",
|
|
8898
|
+
" ",
|
|
8899
|
+
/* @__PURE__ */ jsx38("span", { children: mode === "backup" ? "complete account security setup." : "get access to your account." })
|
|
8900
|
+
] }),
|
|
8901
|
+
!usePasskey ? /* @__PURE__ */ jsxs31("div", { className: "w-full flex gap-[var(--l-pass-gap)]", children: [
|
|
8902
|
+
/* @__PURE__ */ jsx38(
|
|
8903
|
+
Input,
|
|
8904
|
+
{
|
|
8905
|
+
autoComplete: "off",
|
|
8906
|
+
Icon: OtpIcon,
|
|
8907
|
+
type: showPassword ? "text" : "password",
|
|
8908
|
+
placeholder: "Password",
|
|
8909
|
+
value: restorePassword,
|
|
8910
|
+
disabled: isLoading || disabled,
|
|
8911
|
+
className: "flex-1",
|
|
8912
|
+
onChange: (e) => {
|
|
8903
8913
|
setRestorePassword(e.target.value);
|
|
8904
8914
|
},
|
|
8905
8915
|
onKeyDown: (e) => {
|
|
8906
8916
|
if (e.key === "Enter" && !isLoading && restorePassword) actionRef.current?.click();
|
|
8907
8917
|
},
|
|
8908
|
-
element: /* @__PURE__ */
|
|
8918
|
+
element: /* @__PURE__ */ jsx38(
|
|
8909
8919
|
Button,
|
|
8910
8920
|
{
|
|
8911
8921
|
variant: "ghost",
|
|
@@ -8914,12 +8924,12 @@ function PasswordPasskey(props) {
|
|
|
8914
8924
|
title: "Toggle Password Visibility",
|
|
8915
8925
|
disabled: isLoading || disabled,
|
|
8916
8926
|
onClick: () => setShowPassword(!showPassword),
|
|
8917
|
-
children: showPassword ? /* @__PURE__ */
|
|
8927
|
+
children: showPassword ? /* @__PURE__ */ jsx38(EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx38(Eye, { className: "h-4 w-4" })
|
|
8918
8928
|
}
|
|
8919
8929
|
)
|
|
8920
8930
|
}
|
|
8921
8931
|
),
|
|
8922
|
-
/* @__PURE__ */
|
|
8932
|
+
/* @__PURE__ */ jsx38(
|
|
8923
8933
|
Button,
|
|
8924
8934
|
{
|
|
8925
8935
|
ref: actionRef,
|
|
@@ -8929,10 +8939,10 @@ function PasswordPasskey(props) {
|
|
|
8929
8939
|
title: actionCaption,
|
|
8930
8940
|
disabled: isLoading || disabled || error?.includes("Invalid backup file") || !usePasskey && !restorePassword,
|
|
8931
8941
|
className: "w-full w-12 h-12 flex-shrink-0 rounded-[var(--l-pass-el-bdrs)]",
|
|
8932
|
-
children: isLoading ? /* @__PURE__ */
|
|
8942
|
+
children: isLoading ? /* @__PURE__ */ jsx38(Loader7, { className: "animate-spin h-4 w-4" }) : /* @__PURE__ */ jsx38(ChevronRight2, { className: "h-4 w-4" })
|
|
8933
8943
|
}
|
|
8934
8944
|
)
|
|
8935
|
-
] }) : /* @__PURE__ */
|
|
8945
|
+
] }) : /* @__PURE__ */ jsxs31(
|
|
8936
8946
|
Button,
|
|
8937
8947
|
{
|
|
8938
8948
|
ref: actionRef,
|
|
@@ -8943,18 +8953,18 @@ function PasswordPasskey(props) {
|
|
|
8943
8953
|
disabled: isLoading || disabled || !!error || !usePasskey && !restorePassword,
|
|
8944
8954
|
className: "w-full",
|
|
8945
8955
|
children: [
|
|
8946
|
-
isLoading ? /* @__PURE__ */
|
|
8947
|
-
!isLoading && /* @__PURE__ */
|
|
8956
|
+
isLoading ? /* @__PURE__ */ jsx38(Loader7, { className: "animate-spin h-4 w-4" }) : /* @__PURE__ */ jsx38(ActionIcon, { className: "h-4 w-4" }),
|
|
8957
|
+
!isLoading && /* @__PURE__ */ jsx38("span", { children: actionCaption })
|
|
8948
8958
|
]
|
|
8949
8959
|
}
|
|
8950
8960
|
),
|
|
8951
|
-
!isEncryptionMethod && !!usePasskey && /* @__PURE__ */
|
|
8952
|
-
/* @__PURE__ */
|
|
8953
|
-
/* @__PURE__ */
|
|
8954
|
-
/* @__PURE__ */
|
|
8955
|
-
/* @__PURE__ */
|
|
8961
|
+
!isEncryptionMethod && !!usePasskey && /* @__PURE__ */ jsx38(Highlight, { type: "info", className: "w-full flex flex-col gap-[var(--l-pass-gap)] text-[10px]", children: mode === "backup" && /* @__PURE__ */ jsxs31("div", { className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
8962
|
+
/* @__PURE__ */ jsx38(Info, { className: "h-4 w-4 flex-shrink-0" }),
|
|
8963
|
+
/* @__PURE__ */ jsxs31("span", { className: "text-[var(--l-pass-fg-muted)] block flex-1", children: [
|
|
8964
|
+
/* @__PURE__ */ jsx38("span", { className: "block mb-1", children: "Your Backup must be encrypted with a password or a passkey, so only you can decrypt it no matter where backup is stored." }),
|
|
8965
|
+
/* @__PURE__ */ jsxs31("span", { className: "block", children: [
|
|
8956
8966
|
" Passkeys are a password-free alternative. ",
|
|
8957
|
-
/* @__PURE__ */
|
|
8967
|
+
/* @__PURE__ */ jsx38(
|
|
8958
8968
|
"a",
|
|
8959
8969
|
{
|
|
8960
8970
|
target: "_blank",
|
|
@@ -8971,7 +8981,7 @@ function PasswordPasskey(props) {
|
|
|
8971
8981
|
}
|
|
8972
8982
|
|
|
8973
8983
|
// src/internal/components/KeyshareRestoreMenu/components/NoBackupFound.tsx
|
|
8974
|
-
import { Fragment as
|
|
8984
|
+
import { Fragment as Fragment10, jsx as jsx39, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
8975
8985
|
function NoBackupFound(props) {
|
|
8976
8986
|
const { isLoading, restoreFromFile } = props;
|
|
8977
8987
|
const restoreFile = useRestoreStore((st) => st.restoreFile);
|
|
@@ -8980,33 +8990,33 @@ function NoBackupFound(props) {
|
|
|
8980
8990
|
const setRestoreFile = useRestoreStore((st) => st.setRestoreFile);
|
|
8981
8991
|
const setError = useRestoreStore((st) => st.setError);
|
|
8982
8992
|
useValidateFileBackup();
|
|
8983
|
-
return /* @__PURE__ */
|
|
8984
|
-
/* @__PURE__ */
|
|
8985
|
-
/* @__PURE__ */
|
|
8986
|
-
/* @__PURE__ */
|
|
8993
|
+
return /* @__PURE__ */ jsxs32(Fragment10, { children: [
|
|
8994
|
+
/* @__PURE__ */ jsxs32("div", { className: "flex items-center justify-center gap-2 px-5 pt-3 pb-6", children: [
|
|
8995
|
+
/* @__PURE__ */ jsx39(User, { className: "w-6 h-6" }),
|
|
8996
|
+
/* @__PURE__ */ jsx39("span", { className: "font-bold text-xl leading-6", children: "Account Recovery" })
|
|
8987
8997
|
] }),
|
|
8988
|
-
!restoreFile && /* @__PURE__ */
|
|
8989
|
-
/* @__PURE__ */
|
|
8990
|
-
/* @__PURE__ */
|
|
8991
|
-
/* @__PURE__ */
|
|
8992
|
-
/* @__PURE__ */
|
|
8993
|
-
/* @__PURE__ */
|
|
8994
|
-
/* @__PURE__ */
|
|
8998
|
+
!restoreFile && /* @__PURE__ */ jsxs32(Highlight, { type: "warning", className: "animate-glow-warning flex gap-[var(--l-pass-gap)]", children: [
|
|
8999
|
+
/* @__PURE__ */ jsx39(AlertCircle, { className: "h-4 w-4 flex-0" }),
|
|
9000
|
+
/* @__PURE__ */ jsxs32("div", { className: "w-full flex-1 flex flex-col gap-2", children: [
|
|
9001
|
+
/* @__PURE__ */ jsx39("span", { className: "block w-full text-sm leading-4 font-bold", children: "No Backup Found" }),
|
|
9002
|
+
/* @__PURE__ */ jsxs32("span", { className: "block w-full text-xs", children: [
|
|
9003
|
+
/* @__PURE__ */ jsx39("span", { className: "block mb-1", children: "This device doesn't have access to your wallet keyshare, and no backup was found." }),
|
|
9004
|
+
/* @__PURE__ */ jsx39("span", { className: "block w-full", children: "If you're using a different device, please return to the one where you created your account to create a backup, then restore access on this device." })
|
|
8995
9005
|
] })
|
|
8996
9006
|
] })
|
|
8997
9007
|
] }),
|
|
8998
|
-
!restoreFile && /* @__PURE__ */
|
|
8999
|
-
/* @__PURE__ */
|
|
9000
|
-
/* @__PURE__ */
|
|
9008
|
+
!restoreFile && /* @__PURE__ */ jsxs32(Highlight, { type: "info", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9009
|
+
/* @__PURE__ */ jsx39(Upload, { className: "h-4 w-4 flex-0" }),
|
|
9010
|
+
/* @__PURE__ */ jsx39("span", { className: "block w-full text-xs", children: "Upload a backup file if you have one" })
|
|
9001
9011
|
] }),
|
|
9002
|
-
/* @__PURE__ */
|
|
9012
|
+
/* @__PURE__ */ jsx39(
|
|
9003
9013
|
"label",
|
|
9004
9014
|
{
|
|
9005
9015
|
className: cn(
|
|
9006
9016
|
"block w-full flex items-center justify-center cursor-pointer",
|
|
9007
9017
|
"p-[var(--l-pass-gap)] bg-[var(--l-pass-secondary)] rounded-[var(--l-pass-el-bdrs)]"
|
|
9008
9018
|
),
|
|
9009
|
-
children: /* @__PURE__ */
|
|
9019
|
+
children: /* @__PURE__ */ jsx39(
|
|
9010
9020
|
"input",
|
|
9011
9021
|
{
|
|
9012
9022
|
type: "file",
|
|
@@ -9027,7 +9037,7 @@ function NoBackupFound(props) {
|
|
|
9027
9037
|
)
|
|
9028
9038
|
}
|
|
9029
9039
|
),
|
|
9030
|
-
restoreFile && /* @__PURE__ */
|
|
9040
|
+
restoreFile && /* @__PURE__ */ jsx39(
|
|
9031
9041
|
PasswordPasskey,
|
|
9032
9042
|
{
|
|
9033
9043
|
mode: "restore",
|
|
@@ -9042,125 +9052,16 @@ function NoBackupFound(props) {
|
|
|
9042
9052
|
}
|
|
9043
9053
|
|
|
9044
9054
|
// src/internal/components/KeyshareRestoreMenu/methods/File.tsx
|
|
9045
|
-
import {
|
|
9046
|
-
|
|
9047
|
-
// src/internal/components/ui/switch.tsx
|
|
9048
|
-
import { forwardRef as forwardRef4, useState as useState9 } from "react";
|
|
9049
|
-
import { jsx as jsx39, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
9050
|
-
var Switch = forwardRef4((props, ref) => {
|
|
9051
|
-
const { className, labels, ...inputProps } = props;
|
|
9052
|
-
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
9053
|
-
const [labelW, setLabelW] = useState9(0);
|
|
9054
|
-
return /* @__PURE__ */ jsx39(
|
|
9055
|
-
"div",
|
|
9056
|
-
{
|
|
9057
|
-
role: "switch",
|
|
9058
|
-
"aria-checked": inputProps.checked,
|
|
9059
|
-
className: cn(
|
|
9060
|
-
"block rounded-full w-fit h-7 p-1 outline-none flex-none",
|
|
9061
|
-
inputProps.checked ? "bg-[var(--l-pass-bg-success)]" : "bg-[var(--l-pass-bg-info)]",
|
|
9062
|
-
className
|
|
9063
|
-
),
|
|
9064
|
-
children: /* @__PURE__ */ jsxs32(
|
|
9065
|
-
"label",
|
|
9066
|
-
{
|
|
9067
|
-
className: "relative inline-block h-5 outline-none",
|
|
9068
|
-
style: {
|
|
9069
|
-
width: `calc(20px + ${labelW}px)`,
|
|
9070
|
-
transition: "width 200ms ease",
|
|
9071
|
-
cursor: inputProps.disabled ? "not-allowed" : "pointer"
|
|
9072
|
-
},
|
|
9073
|
-
children: [
|
|
9074
|
-
/* @__PURE__ */ jsx39("input", { type: "checkbox", className: "hidden sr-only peer outline-none", ref, ...inputProps }),
|
|
9075
|
-
/* @__PURE__ */ jsx39(
|
|
9076
|
-
"span",
|
|
9077
|
-
{
|
|
9078
|
-
ref: (inst) => {
|
|
9079
|
-
if (inst) setLabelW(inst.clientWidth);
|
|
9080
|
-
},
|
|
9081
|
-
style: {
|
|
9082
|
-
left: inputProps.checked ? "0px" : "20px",
|
|
9083
|
-
color: inputProps.checked ? colorMode === "dark" ? "var(--l-pass-fg-inverted)" : "var(--l-pass-fg)" : "var(--l-pass-fg)",
|
|
9084
|
-
transition: "left 200ms ease"
|
|
9085
|
-
},
|
|
9086
|
-
className: "absolute top-0 px-2 text-xs leading-5 font-semibold min-w-5 select-none",
|
|
9087
|
-
children: inputProps.checked ? labels?.checked : labels?.unchecked
|
|
9088
|
-
}
|
|
9089
|
-
),
|
|
9090
|
-
/* @__PURE__ */ jsx39(
|
|
9091
|
-
"span",
|
|
9092
|
-
{
|
|
9093
|
-
style: {
|
|
9094
|
-
left: inputProps.checked ? `${labelW}px` : "0px",
|
|
9095
|
-
transition: "left 200ms ease"
|
|
9096
|
-
},
|
|
9097
|
-
className: cn("absolute top-0 w-5 h-5 rounded-full bg-[var(--l-pass-fg)]", {
|
|
9098
|
-
// 'bg-[var(--l-pass-fg-inverted)]': inputProps.checked,
|
|
9099
|
-
// 'bg-[var(--l-pass-fg)]': !inputProps.checked
|
|
9100
|
-
})
|
|
9101
|
-
}
|
|
9102
|
-
)
|
|
9103
|
-
]
|
|
9104
|
-
}
|
|
9105
|
-
)
|
|
9106
|
-
}
|
|
9107
|
-
);
|
|
9108
|
-
});
|
|
9109
|
-
Switch.displayName = "Switch";
|
|
9110
|
-
|
|
9111
|
-
// src/internal/components/KeyshareRestoreMenu/methods/File.tsx
|
|
9112
|
-
import { Fragment as Fragment10, jsx as jsx40, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
9055
|
+
import { FileDown as FileDown2, FileUp as FileUp3 } from "lucide-react";
|
|
9056
|
+
import { Fragment as Fragment11, jsx as jsx40, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
9113
9057
|
function File2(props) {
|
|
9114
9058
|
const { isLoading, mode = "restore", fileHandler } = props;
|
|
9115
|
-
const {
|
|
9116
|
-
restoreFile,
|
|
9117
|
-
error,
|
|
9118
|
-
usePasskey,
|
|
9119
|
-
setRestorePassword,
|
|
9120
|
-
setMethod,
|
|
9121
|
-
setRestoreFile,
|
|
9122
|
-
setUsePasskey,
|
|
9123
|
-
setError,
|
|
9124
|
-
setSuccess
|
|
9125
|
-
} = useRestoreStore();
|
|
9059
|
+
const { restoreFile, error, setRestoreFile, setError } = useRestoreStore();
|
|
9126
9060
|
useValidateFileBackup();
|
|
9127
9061
|
const actionText = mode === "backup" ? "Download" : "Restore with";
|
|
9128
9062
|
const isPasswordPasskey = mode === "restore" && !!restoreFile || mode === "backup";
|
|
9129
|
-
return /* @__PURE__ */ jsxs33(
|
|
9130
|
-
/* @__PURE__ */
|
|
9131
|
-
/* @__PURE__ */ jsxs33("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9132
|
-
/* @__PURE__ */ jsx40(
|
|
9133
|
-
Button,
|
|
9134
|
-
{
|
|
9135
|
-
variant: "ghost",
|
|
9136
|
-
size: "icon",
|
|
9137
|
-
title: "Back",
|
|
9138
|
-
onClick: () => {
|
|
9139
|
-
setRestoreFile(null);
|
|
9140
|
-
setError(null);
|
|
9141
|
-
setSuccess(null);
|
|
9142
|
-
setUsePasskey(false);
|
|
9143
|
-
setMethod(null);
|
|
9144
|
-
},
|
|
9145
|
-
children: /* @__PURE__ */ jsx40(ArrowLeft6, { className: "h-4 w-4" })
|
|
9146
|
-
}
|
|
9147
|
-
),
|
|
9148
|
-
/* @__PURE__ */ jsx40("span", { className: "text-xl font-semibold", children: `${mode === "restore" ? "Restore with" : ""} File ${mode === "restore" ? "by" : "Backup by"}`.trim() })
|
|
9149
|
-
] }),
|
|
9150
|
-
mode !== "restore" && /* @__PURE__ */ jsx40(
|
|
9151
|
-
Switch,
|
|
9152
|
-
{
|
|
9153
|
-
name: "password-passkey-toggle",
|
|
9154
|
-
labels: { checked: "Password", unchecked: "Passkey" },
|
|
9155
|
-
disabled: isLoading || !!error,
|
|
9156
|
-
checked: !usePasskey,
|
|
9157
|
-
onChange: (e) => {
|
|
9158
|
-
if (!!e.target.checked) setRestorePassword("");
|
|
9159
|
-
setUsePasskey(!e.target.checked);
|
|
9160
|
-
}
|
|
9161
|
-
}
|
|
9162
|
-
)
|
|
9163
|
-
] }),
|
|
9063
|
+
return /* @__PURE__ */ jsxs33(Fragment11, { children: [
|
|
9064
|
+
/* @__PURE__ */ jsx40("span", { className: "block w-full text-[10px] text-center leading-8 px-[var(--l-pass-pd)] truncate", children: `${mode === "restore" ? "Restore with" : ""} File ${mode === "restore" ? "" : "Backup by"}`.trim() }),
|
|
9164
9065
|
mode === "restore" && /* @__PURE__ */ jsx40(
|
|
9165
9066
|
"label",
|
|
9166
9067
|
{
|
|
@@ -9204,61 +9105,23 @@ function File2(props) {
|
|
|
9204
9105
|
}
|
|
9205
9106
|
|
|
9206
9107
|
// src/internal/components/KeyshareRestoreMenu/methods/Server.tsx
|
|
9207
|
-
import { useQueryClient as
|
|
9108
|
+
import { useQueryClient as useQueryClient6 } from "@tanstack/react-query";
|
|
9208
9109
|
import dayjs from "dayjs";
|
|
9209
|
-
import {
|
|
9210
|
-
import { useEffect as
|
|
9211
|
-
import { Fragment as
|
|
9110
|
+
import { Download, Key as Key5, Upload as Upload2 } from "lucide-react";
|
|
9111
|
+
import { useEffect as useEffect16 } from "react";
|
|
9112
|
+
import { Fragment as Fragment12, jsx as jsx41, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
9212
9113
|
function Server(props) {
|
|
9213
9114
|
const { isLoading, mode = "restore", serverHandler } = props;
|
|
9214
|
-
const qc =
|
|
9115
|
+
const qc = useQueryClient6();
|
|
9215
9116
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9216
|
-
const
|
|
9217
|
-
const { usePasskey, error, setUsePasskey, setRestorePassword, setShowPassword, setMethod, setError, setSuccess } = useRestoreStore();
|
|
9117
|
+
const setUsePasskey = useRestoreStore((st) => st.setUsePasskey);
|
|
9218
9118
|
const serverRecoveryStatus = qc.getQueryData([CHECK_BACKUP_QUERY_KEY, address]);
|
|
9219
|
-
|
|
9119
|
+
useEffect16(() => {
|
|
9220
9120
|
if (mode === "backup" || !serverRecoveryStatus?.created?.encryptionMethod) return;
|
|
9221
9121
|
setUsePasskey(serverRecoveryStatus.created.encryptionMethod === "passkey");
|
|
9222
9122
|
}, [mode, serverRecoveryStatus, setUsePasskey]);
|
|
9223
9123
|
const isEncryptionMethod = mode === "restore" && !!serverRecoveryStatus?.created?.encryptionMethod;
|
|
9224
|
-
return /* @__PURE__ */ jsxs34(
|
|
9225
|
-
/* @__PURE__ */ jsxs34("div", { className: cn("flex items-center justify-between", { "px-[var(--l-pass-pd)]": !hasServerVault }), children: [
|
|
9226
|
-
/* @__PURE__ */ jsxs34("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9227
|
-
!!hasServerVault && /* @__PURE__ */ jsx41(
|
|
9228
|
-
Button,
|
|
9229
|
-
{
|
|
9230
|
-
variant: "ghost",
|
|
9231
|
-
size: "icon",
|
|
9232
|
-
title: "Back",
|
|
9233
|
-
onClick: () => {
|
|
9234
|
-
setShowPassword(false);
|
|
9235
|
-
setUsePasskey(false);
|
|
9236
|
-
setRestorePassword("");
|
|
9237
|
-
setUsePasskey(false);
|
|
9238
|
-
setError(null);
|
|
9239
|
-
setSuccess(null);
|
|
9240
|
-
setMethod(null);
|
|
9241
|
-
},
|
|
9242
|
-
children: /* @__PURE__ */ jsx41(ArrowLeft7, { className: "h-4 w-4" })
|
|
9243
|
-
}
|
|
9244
|
-
),
|
|
9245
|
-
/* @__PURE__ */ jsx41("span", { className: "text-xl font-semibold", children: mode === "restore" ? "Restore with" : usePasskey ? "Passkey" : "Password" })
|
|
9246
|
-
] }),
|
|
9247
|
-
!isEncryptionMethod && /* @__PURE__ */ jsx41(
|
|
9248
|
-
Switch,
|
|
9249
|
-
{
|
|
9250
|
-
name: "password-passkey-toggle",
|
|
9251
|
-
labels: { checked: "Password", unchecked: "Passkey" },
|
|
9252
|
-
disabled: isLoading,
|
|
9253
|
-
checked: !usePasskey,
|
|
9254
|
-
onChange: (e) => {
|
|
9255
|
-
if (!!error) setError(null);
|
|
9256
|
-
if (!!e.target.checked) setRestorePassword("");
|
|
9257
|
-
setUsePasskey(!e.target.checked);
|
|
9258
|
-
}
|
|
9259
|
-
}
|
|
9260
|
-
)
|
|
9261
|
-
] }),
|
|
9124
|
+
return /* @__PURE__ */ jsxs34(Fragment12, { children: [
|
|
9262
9125
|
/* @__PURE__ */ jsx41(
|
|
9263
9126
|
PasswordPasskey,
|
|
9264
9127
|
{
|
|
@@ -9271,7 +9134,7 @@ function Server(props) {
|
|
|
9271
9134
|
}
|
|
9272
9135
|
),
|
|
9273
9136
|
!!serverRecoveryStatus?.created?.at && /* @__PURE__ */ jsxs34(Highlight, { type: "success", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9274
|
-
serverRecoveryStatus.created.encryptionMethod === "password" ? /* @__PURE__ */ jsx41(OtpIcon, { className: "w-4 h-4 inline" }) : /* @__PURE__ */ jsx41(
|
|
9137
|
+
serverRecoveryStatus.created.encryptionMethod === "password" ? /* @__PURE__ */ jsx41(OtpIcon, { className: "w-4 h-4 inline" }) : /* @__PURE__ */ jsx41(Key5, { className: "w-4 h-4 inline" }),
|
|
9275
9138
|
/* @__PURE__ */ jsxs34("span", { className: "text-[10px] flex-1 block", children: [
|
|
9276
9139
|
/* @__PURE__ */ jsx41("span", { children: `We found a ${serverRecoveryStatus.created.encryptionMethod?.toUpperCase()} Backup` }),
|
|
9277
9140
|
/* @__PURE__ */ jsx41("br", {}),
|
|
@@ -9285,9 +9148,9 @@ function Server(props) {
|
|
|
9285
9148
|
}
|
|
9286
9149
|
|
|
9287
9150
|
// src/internal/components/KeyshareRestoreMenu/methods/Cloud.tsx
|
|
9288
|
-
import { useQuery as
|
|
9289
|
-
import { ArrowLeft as
|
|
9290
|
-
import { useEffect as
|
|
9151
|
+
import { useQuery as useQuery6 } from "@tanstack/react-query";
|
|
9152
|
+
import { ArrowLeft as ArrowLeft6, CloudDownload, CloudUpload, Loader as Loader8 } from "lucide-react";
|
|
9153
|
+
import { useEffect as useEffect17 } from "react";
|
|
9291
9154
|
|
|
9292
9155
|
// src/internal/components/ui/select.tsx
|
|
9293
9156
|
import * as SelectPrimitive from "@radix-ui/react-select";
|
|
@@ -9415,7 +9278,7 @@ function SelectScrollDownButton({
|
|
|
9415
9278
|
}
|
|
9416
9279
|
|
|
9417
9280
|
// src/internal/components/KeyshareRestoreMenu/methods/Cloud.tsx
|
|
9418
|
-
import { Fragment as
|
|
9281
|
+
import { Fragment as Fragment13, jsx as jsx43, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
9419
9282
|
function Cloud2(props) {
|
|
9420
9283
|
const { isLoading, mode = "restore", cloudHandler } = props;
|
|
9421
9284
|
const session = useLumiaPassportSession((st) => st.session);
|
|
@@ -9425,7 +9288,7 @@ function Cloud2(props) {
|
|
|
9425
9288
|
data: cloudProviders = [],
|
|
9426
9289
|
isLoading: isCloudProvidersLoading,
|
|
9427
9290
|
error: cloudProvidersError
|
|
9428
|
-
} =
|
|
9291
|
+
} = useQuery6({
|
|
9429
9292
|
retry: false,
|
|
9430
9293
|
enabled: !!passportUserId,
|
|
9431
9294
|
queryKey: [AVAILABLE_CLOUD_PROVIDERS_QUERY_KEY, passportUserId],
|
|
@@ -9435,7 +9298,7 @@ function Cloud2(props) {
|
|
|
9435
9298
|
return availableProviders.map((p) => ({ id: p.id, name: p.name, available: p.isAvailable() }));
|
|
9436
9299
|
}
|
|
9437
9300
|
});
|
|
9438
|
-
|
|
9301
|
+
useEffect17(() => {
|
|
9439
9302
|
if (isCloudProvidersLoading) return;
|
|
9440
9303
|
if (!!cloudProvidersError) {
|
|
9441
9304
|
console.error("[KeyshareBackup] Failed to load cloud providers:", cloudProvidersError);
|
|
@@ -9443,7 +9306,7 @@ function Cloud2(props) {
|
|
|
9443
9306
|
}
|
|
9444
9307
|
if (cloudProviders.length > 0 && !selectedCloudProvider) setSelectedCloudProvider(cloudProviders[0].id);
|
|
9445
9308
|
}, [cloudProviders, selectedCloudProvider, cloudProvidersError, isCloudProvidersLoading]);
|
|
9446
|
-
return /* @__PURE__ */ jsxs36(
|
|
9309
|
+
return /* @__PURE__ */ jsxs36(Fragment13, { children: [
|
|
9447
9310
|
/* @__PURE__ */ jsxs36("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9448
9311
|
/* @__PURE__ */ jsx43(
|
|
9449
9312
|
Button,
|
|
@@ -9457,12 +9320,12 @@ function Cloud2(props) {
|
|
|
9457
9320
|
setSelectedCloudProvider(null);
|
|
9458
9321
|
setMethod(null);
|
|
9459
9322
|
},
|
|
9460
|
-
children: /* @__PURE__ */ jsx43(
|
|
9323
|
+
children: /* @__PURE__ */ jsx43(ArrowLeft6, { className: "h-4 w-4" })
|
|
9461
9324
|
}
|
|
9462
9325
|
),
|
|
9463
9326
|
/* @__PURE__ */ jsx43("span", { className: "text-lg font-semibold", children: `${mode === "restore" ? "Restore" : "Create"} Cloud Backup` })
|
|
9464
9327
|
] }),
|
|
9465
|
-
isCloudProvidersLoading && /* @__PURE__ */ jsx43(
|
|
9328
|
+
isCloudProvidersLoading && /* @__PURE__ */ jsx43(Loader8, { className: "animate-spin w-4 h-4 mx-auto" }),
|
|
9466
9329
|
/* @__PURE__ */ jsx43("span", { className: "block text-[10px] text-[var(--l-pass-fg-muted)]", children: "1. Select Cloud Backup Vault" }),
|
|
9467
9330
|
/* @__PURE__ */ jsxs36(
|
|
9468
9331
|
Select,
|
|
@@ -9501,30 +9364,21 @@ function Cloud2(props) {
|
|
|
9501
9364
|
}
|
|
9502
9365
|
|
|
9503
9366
|
// src/internal/components/KeyshareRestoreMenu/KeyshareRestoreMenu.tsx
|
|
9504
|
-
import { Fragment as
|
|
9367
|
+
import { Fragment as Fragment14, jsx as jsx44, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
9505
9368
|
var RESTORE_COMPONENTS = {
|
|
9506
9369
|
server: Server,
|
|
9507
9370
|
cloud: Cloud2,
|
|
9508
9371
|
file: File2
|
|
9509
9372
|
};
|
|
9510
9373
|
var KeyshareRestoreMenu = () => {
|
|
9511
|
-
const qc =
|
|
9374
|
+
const qc = useQueryClient7();
|
|
9512
9375
|
const callbacks = useLumiaPassportConfig().callbacks;
|
|
9513
9376
|
const { address, setSession, setAddress, setStatus, setIsLoading } = useLumiaPassportSession();
|
|
9514
|
-
const { data: serverRecoveryStatus, isLoading: isBackupStatusLoading } = useQuery8({
|
|
9515
|
-
retry: false,
|
|
9516
|
-
queryKey: [CHECK_BACKUP_QUERY_KEY, address],
|
|
9517
|
-
queryFn: async () => await getShareRecoveryStats()
|
|
9518
|
-
});
|
|
9519
9377
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
9520
9378
|
const setIsDialogForced = useLayoutStore((st) => st.setIsDialogForced);
|
|
9521
9379
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
9522
|
-
useEffect21(() => setIsDialogForced(true), []);
|
|
9523
|
-
useCheckBackupAvailability();
|
|
9524
9380
|
const {
|
|
9525
9381
|
method: currentRestoreMethod,
|
|
9526
|
-
checkingBackup,
|
|
9527
|
-
hasServerBackup,
|
|
9528
9382
|
error,
|
|
9529
9383
|
success,
|
|
9530
9384
|
setError,
|
|
@@ -9535,6 +9389,16 @@ var KeyshareRestoreMenu = () => {
|
|
|
9535
9389
|
setSuccess,
|
|
9536
9390
|
setMethod
|
|
9537
9391
|
} = useRestoreStore();
|
|
9392
|
+
useEffect18(() => {
|
|
9393
|
+
setIsDialogForced(true);
|
|
9394
|
+
return () => {
|
|
9395
|
+
setRestoreFile(null);
|
|
9396
|
+
setShowPassword(false);
|
|
9397
|
+
setUsePasskey(false);
|
|
9398
|
+
setMethod(null);
|
|
9399
|
+
setIsDialogForced(false);
|
|
9400
|
+
};
|
|
9401
|
+
}, []);
|
|
9538
9402
|
const {
|
|
9539
9403
|
restoreFromServer: restoreFromServer2,
|
|
9540
9404
|
isRestoringFromServer,
|
|
@@ -9543,7 +9407,16 @@ var KeyshareRestoreMenu = () => {
|
|
|
9543
9407
|
restoreFromCloud,
|
|
9544
9408
|
isRestoringFromCloud
|
|
9545
9409
|
} = useRestoreAccount();
|
|
9546
|
-
const {
|
|
9410
|
+
const { data: serverRecoveryStatus, isLoading: isBackupStatusLoading } = useQuery7({
|
|
9411
|
+
retry: false,
|
|
9412
|
+
queryKey: [CHECK_BACKUP_QUERY_KEY, address],
|
|
9413
|
+
queryFn: async () => await getShareRecoveryStats()
|
|
9414
|
+
});
|
|
9415
|
+
const hasServerBackup = serverRecoveryStatus?.created || serverRecoveryStatus?.devices?.length > 0;
|
|
9416
|
+
useEffect18(() => {
|
|
9417
|
+
if (!!hasServerBackup) setMethod("server");
|
|
9418
|
+
}, [hasServerBackup]);
|
|
9419
|
+
const { mutate: disconnect, isPending: isDisconnecting } = useMutation9({
|
|
9547
9420
|
mutationFn: async () => {
|
|
9548
9421
|
setError(null);
|
|
9549
9422
|
setMethod(null);
|
|
@@ -9574,29 +9447,47 @@ var KeyshareRestoreMenu = () => {
|
|
|
9574
9447
|
}
|
|
9575
9448
|
});
|
|
9576
9449
|
const RestoreComponent = currentRestoreMethod ? RESTORE_COMPONENTS[currentRestoreMethod] : null;
|
|
9577
|
-
const isBackupChecking = checkingBackup || isBackupStatusLoading;
|
|
9578
9450
|
return /* @__PURE__ */ jsx44(
|
|
9579
9451
|
"div",
|
|
9580
9452
|
{
|
|
9581
9453
|
style: { "--l-pass-scrollbar-mah": `${maxScrollHeight}px` },
|
|
9582
9454
|
className: "list-scrollbar-y w-full",
|
|
9583
9455
|
children: /* @__PURE__ */ jsxs37(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: [
|
|
9584
|
-
|
|
9585
|
-
/* @__PURE__ */ jsx44(
|
|
9586
|
-
/* @__PURE__ */ jsx44("span", { className: "block w-full text-xs leading-4", children: "Checking for backups..." })
|
|
9587
|
-
/* @__PURE__ */ jsx44("span", { className: "block w-full text-xs leading-4", children: "Please wait while we check for available backups..." })
|
|
9456
|
+
isBackupStatusLoading && /* @__PURE__ */ jsxs37("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)] text-center justify-center items-center", children: [
|
|
9457
|
+
/* @__PURE__ */ jsx44(Loader9, { className: "w-5 h-5 animate-spin" }),
|
|
9458
|
+
/* @__PURE__ */ jsx44("span", { className: "block w-full text-xs leading-4", children: "Checking for backups..." })
|
|
9588
9459
|
] }),
|
|
9589
|
-
!success && !
|
|
9460
|
+
!success && !isBackupStatusLoading && !isDisconnecting && !hasServerBackup && /* @__PURE__ */ jsx44(
|
|
9590
9461
|
NoBackupFound,
|
|
9591
9462
|
{
|
|
9592
9463
|
isLoading: isRestoringFromServer || isRestoringFromCloud || isRestoringFromFile || isDisconnecting,
|
|
9593
9464
|
restoreFromFile
|
|
9594
9465
|
}
|
|
9595
9466
|
),
|
|
9596
|
-
!success && !
|
|
9597
|
-
/* @__PURE__ */ jsxs37("div", { className: "flex items-center justify-
|
|
9598
|
-
/* @__PURE__ */
|
|
9599
|
-
|
|
9467
|
+
!success && !isBackupStatusLoading && !isDisconnecting && hasServerBackup && /* @__PURE__ */ jsxs37(Fragment14, { children: [
|
|
9468
|
+
/* @__PURE__ */ jsxs37("div", { className: "flex items-center justify-between gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: [
|
|
9469
|
+
/* @__PURE__ */ jsxs37("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9470
|
+
/* @__PURE__ */ jsx44(CloudDownload2, { className: "w-6 h-6" }),
|
|
9471
|
+
/* @__PURE__ */ jsx44("span", { className: "font-bold text-xl leading-6", children: "Restore Account" })
|
|
9472
|
+
] }),
|
|
9473
|
+
/* @__PURE__ */ jsx44(
|
|
9474
|
+
Switch,
|
|
9475
|
+
{
|
|
9476
|
+
name: "advanced-restore-flow-toggle",
|
|
9477
|
+
labels: { checked: "Standard", unchecked: "Advanced" },
|
|
9478
|
+
checked: currentRestoreMethod !== "server",
|
|
9479
|
+
onChange: () => {
|
|
9480
|
+
if (!!error) setError(null);
|
|
9481
|
+
if (currentRestoreMethod === "server") {
|
|
9482
|
+
setRestorePassword("");
|
|
9483
|
+
setMethod(null);
|
|
9484
|
+
} else {
|
|
9485
|
+
setRestoreFile(null);
|
|
9486
|
+
setMethod("server");
|
|
9487
|
+
}
|
|
9488
|
+
}
|
|
9489
|
+
}
|
|
9490
|
+
)
|
|
9600
9491
|
] }),
|
|
9601
9492
|
/* @__PURE__ */ jsx44(MethodSelector, { mode: "restore", serverRecoveryStatus }),
|
|
9602
9493
|
!!currentRestoreMethod && /* @__PURE__ */ jsx44(
|
|
@@ -9609,32 +9500,29 @@ var KeyshareRestoreMenu = () => {
|
|
|
9609
9500
|
}
|
|
9610
9501
|
)
|
|
9611
9502
|
] }),
|
|
9612
|
-
!success && !
|
|
9613
|
-
|
|
9614
|
-
|
|
9615
|
-
|
|
9616
|
-
|
|
9617
|
-
|
|
9618
|
-
|
|
9619
|
-
|
|
9620
|
-
|
|
9621
|
-
|
|
9622
|
-
|
|
9623
|
-
|
|
9624
|
-
|
|
9625
|
-
|
|
9626
|
-
|
|
9627
|
-
|
|
9628
|
-
|
|
9629
|
-
|
|
9630
|
-
className: "w-
|
|
9631
|
-
children:
|
|
9632
|
-
|
|
9633
|
-
|
|
9634
|
-
|
|
9635
|
-
}
|
|
9636
|
-
)
|
|
9637
|
-
] }),
|
|
9503
|
+
!success && !isBackupStatusLoading && /* @__PURE__ */ jsxs37(
|
|
9504
|
+
Button,
|
|
9505
|
+
{
|
|
9506
|
+
size: "large",
|
|
9507
|
+
variant: "ghost",
|
|
9508
|
+
onClick: () => {
|
|
9509
|
+
setError(null);
|
|
9510
|
+
setShowPassword(false);
|
|
9511
|
+
setUsePasskey(false);
|
|
9512
|
+
setRestoreFile(null);
|
|
9513
|
+
setRestorePassword("");
|
|
9514
|
+
setSuccess(null);
|
|
9515
|
+
setMethod(null);
|
|
9516
|
+
disconnect();
|
|
9517
|
+
},
|
|
9518
|
+
disabled: isDisconnecting || isRestoringFromFile || isRestoringFromServer,
|
|
9519
|
+
className: "w-fit mx-auto",
|
|
9520
|
+
children: [
|
|
9521
|
+
isDisconnecting ? /* @__PURE__ */ jsx44(Loader9, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ jsx44(UserCircle2, { className: "w-4 h-4" }),
|
|
9522
|
+
/* @__PURE__ */ jsx44("span", { children: "Try Another Account" })
|
|
9523
|
+
]
|
|
9524
|
+
}
|
|
9525
|
+
),
|
|
9638
9526
|
error && /* @__PURE__ */ jsxs37(Highlight, { type: "error", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9639
9527
|
/* @__PURE__ */ jsx44(AlertCircle2, { className: "h-4 w-4 flex-shrink-0" }),
|
|
9640
9528
|
/* @__PURE__ */ jsx44("span", { className: "w-full flex-1 block", children: error })
|
|
@@ -9649,11 +9537,11 @@ var KeyshareRestoreMenu = () => {
|
|
|
9649
9537
|
};
|
|
9650
9538
|
|
|
9651
9539
|
// src/internal/components/KeyshareRestoreMenu/KeyshareBackupMenu.tsx
|
|
9652
|
-
import { useQuery as
|
|
9653
|
-
import { AlertCircle as AlertCircle3, ArrowLeft as
|
|
9654
|
-
import { useEffect as
|
|
9540
|
+
import { useQuery as useQuery8 } from "@tanstack/react-query";
|
|
9541
|
+
import { AlertCircle as AlertCircle3, ArrowLeft as ArrowLeft7, CheckCircle2 as CheckCircle22, Loader as Loader10, LockIcon } from "lucide-react";
|
|
9542
|
+
import { useEffect as useEffect19 } from "react";
|
|
9655
9543
|
init_vaultClient();
|
|
9656
|
-
import { Fragment as
|
|
9544
|
+
import { Fragment as Fragment15, jsx as jsx45, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
9657
9545
|
var COMPONENTS = {
|
|
9658
9546
|
server: Server,
|
|
9659
9547
|
file: File2,
|
|
@@ -9661,7 +9549,6 @@ var COMPONENTS = {
|
|
|
9661
9549
|
};
|
|
9662
9550
|
function KeyshareBackupMenu() {
|
|
9663
9551
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9664
|
-
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
9665
9552
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
9666
9553
|
const setMainPageHeight = useLayoutDataStore((st) => st.setMainPageHeight);
|
|
9667
9554
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
@@ -9678,18 +9565,27 @@ function KeyshareBackupMenu() {
|
|
|
9678
9565
|
setUsePasskey,
|
|
9679
9566
|
setMethod
|
|
9680
9567
|
} = useRestoreStore();
|
|
9681
|
-
|
|
9568
|
+
useEffect19(() => {
|
|
9682
9569
|
setMainPageHeight(DEFAULT_SETTINGS_MENU_HEIGHT);
|
|
9683
9570
|
return () => {
|
|
9571
|
+
setSuccess(null);
|
|
9572
|
+
setError(null);
|
|
9573
|
+
setRestoreFile(null);
|
|
9574
|
+
setRestorePassword("");
|
|
9575
|
+
setShowPassword(false);
|
|
9576
|
+
setUsePasskey(false);
|
|
9684
9577
|
setMethod(null);
|
|
9685
9578
|
};
|
|
9686
9579
|
}, []);
|
|
9687
|
-
const { data: serverRecoveryStatus } =
|
|
9580
|
+
const { data: serverRecoveryStatus, isLoading: isRecoveryLoading } = useQuery8({
|
|
9688
9581
|
retry: false,
|
|
9689
9582
|
queryKey: [CHECK_BACKUP_QUERY_KEY, address],
|
|
9690
9583
|
queryFn: async () => await getShareRecoveryStats()
|
|
9691
9584
|
});
|
|
9692
|
-
const
|
|
9585
|
+
const hasRecoveryData = serverRecoveryStatus?.created || serverRecoveryStatus?.devices?.length > 0;
|
|
9586
|
+
useEffect19(() => {
|
|
9587
|
+
if (!!hasRecoveryData) setMethod("server");
|
|
9588
|
+
}, [hasRecoveryData]);
|
|
9693
9589
|
const {
|
|
9694
9590
|
isPasswordBackupCreating,
|
|
9695
9591
|
createPasswordBackup,
|
|
@@ -9705,35 +9601,56 @@ function KeyshareBackupMenu() {
|
|
|
9705
9601
|
style: { "--l-pass-scrollbar-mah": `${maxScrollHeight}px` },
|
|
9706
9602
|
className: "list-scrollbar-y w-full",
|
|
9707
9603
|
children: /* @__PURE__ */ jsxs38(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: [
|
|
9708
|
-
|
|
9604
|
+
!!isRecoveryLoading && /* @__PURE__ */ jsx45("div", { className: "w-full flex items-center justify-center p-[var(--l-pass-pd)]", children: /* @__PURE__ */ jsx45(Loader10, { className: "h-5 w-5 animate-spin" }) }),
|
|
9605
|
+
!isRecoveryLoading && !hasRecoveryData && /* @__PURE__ */ jsxs38("div", { className: "flex items-center justify-center gap-2 px-5 py-[var(--l-pass-pd)]", children: [
|
|
9709
9606
|
/* @__PURE__ */ jsx45(LockIcon, { className: "w-6 h-6" }),
|
|
9710
9607
|
/* @__PURE__ */ jsx45("span", { className: "font-bold text-xl leading-6", children: "Secure Account" })
|
|
9711
9608
|
] }),
|
|
9712
|
-
|
|
9609
|
+
!isRecoveryLoading && !!hasRecoveryData && /* @__PURE__ */ jsxs38("div", { className: "flex items-center justify-between gap-[var(--l-pass-gap)]", children: [
|
|
9610
|
+
/* @__PURE__ */ jsxs38("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9611
|
+
/* @__PURE__ */ jsx45(
|
|
9612
|
+
Button,
|
|
9613
|
+
{
|
|
9614
|
+
variant: "ghost",
|
|
9615
|
+
size: "icon",
|
|
9616
|
+
title: "Back",
|
|
9617
|
+
onClick: () => {
|
|
9618
|
+
setRestorePassword("");
|
|
9619
|
+
setRestoreFile(null);
|
|
9620
|
+
setShowPassword(false);
|
|
9621
|
+
setSelectedCloudProvider(null);
|
|
9622
|
+
setUsePasskey(false);
|
|
9623
|
+
setError(null);
|
|
9624
|
+
setSuccess(null);
|
|
9625
|
+
setMethod(null);
|
|
9626
|
+
setPage("settings" /* SETTINGS */);
|
|
9627
|
+
},
|
|
9628
|
+
children: /* @__PURE__ */ jsx45(ArrowLeft7, { className: "h-4 w-4" })
|
|
9629
|
+
}
|
|
9630
|
+
),
|
|
9631
|
+
/* @__PURE__ */ jsx45("span", { className: "text-xl font-semibold leading-8", children: "Create Backup" })
|
|
9632
|
+
] }),
|
|
9713
9633
|
/* @__PURE__ */ jsx45(
|
|
9714
|
-
|
|
9634
|
+
Switch,
|
|
9715
9635
|
{
|
|
9716
|
-
|
|
9717
|
-
|
|
9718
|
-
|
|
9719
|
-
|
|
9720
|
-
|
|
9721
|
-
|
|
9722
|
-
|
|
9723
|
-
|
|
9724
|
-
|
|
9725
|
-
|
|
9726
|
-
|
|
9727
|
-
|
|
9728
|
-
|
|
9729
|
-
},
|
|
9730
|
-
children: /* @__PURE__ */ jsx45(ArrowLeft9, { className: "h-4 w-4" })
|
|
9636
|
+
name: "advanced-restore-flow-toggle",
|
|
9637
|
+
labels: { checked: "Standard", unchecked: "Advanced" },
|
|
9638
|
+
checked: currentBackupMethod !== "server",
|
|
9639
|
+
onChange: () => {
|
|
9640
|
+
if (!!error) setError(null);
|
|
9641
|
+
if (currentBackupMethod === "server") {
|
|
9642
|
+
setRestorePassword("");
|
|
9643
|
+
setMethod(null);
|
|
9644
|
+
} else {
|
|
9645
|
+
setRestoreFile(null);
|
|
9646
|
+
setMethod("server");
|
|
9647
|
+
}
|
|
9648
|
+
}
|
|
9731
9649
|
}
|
|
9732
|
-
)
|
|
9733
|
-
/* @__PURE__ */ jsx45("span", { className: "text-xl font-semibold leading-8", children: "Create Backup" })
|
|
9650
|
+
)
|
|
9734
9651
|
] }),
|
|
9735
|
-
|
|
9736
|
-
!!currentBackupMethod && /* @__PURE__ */ jsx45(
|
|
9652
|
+
!isRecoveryLoading && !!hasRecoveryData && /* @__PURE__ */ jsx45(MethodSelector, { mode: "backup", serverRecoveryStatus }),
|
|
9653
|
+
!isRecoveryLoading && !!currentBackupMethod && /* @__PURE__ */ jsx45(Fragment15, { children: /* @__PURE__ */ jsx45(
|
|
9737
9654
|
BackupComponent,
|
|
9738
9655
|
{
|
|
9739
9656
|
mode: "backup",
|
|
@@ -9745,13 +9662,7 @@ function KeyshareBackupMenu() {
|
|
|
9745
9662
|
) }),
|
|
9746
9663
|
!isRecoveryLoading && !currentBackupMethod && !hasRecoveryData && /* @__PURE__ */ jsxs38(Highlight, { type: "warning", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9747
9664
|
/* @__PURE__ */ jsx45(AlertCircle3, { className: "h-4 w-4 flex-shrink-0" }),
|
|
9748
|
-
/* @__PURE__ */
|
|
9749
|
-
/* @__PURE__ */ jsx45("span", { className: "font-semibold", children: "No Backup Found" }),
|
|
9750
|
-
/* @__PURE__ */ jsx45("br", {}),
|
|
9751
|
-
/* @__PURE__ */ jsx45("span", { className: "text-[10px]", children: "Create a backup to restore access if you switch devices or clear your browser." }),
|
|
9752
|
-
/* @__PURE__ */ jsx45("br", {}),
|
|
9753
|
-
/* @__PURE__ */ jsx45("span", { className: "text-[10px]", children: "You can ignore this if you already have a backup or don't want to use Keyshare Vault." })
|
|
9754
|
-
] })
|
|
9665
|
+
/* @__PURE__ */ jsx45("span", { className: "block flex-1 font-semibold", children: "No Backup Found" })
|
|
9755
9666
|
] }),
|
|
9756
9667
|
error && /* @__PURE__ */ jsxs38(Highlight, { type: "error", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9757
9668
|
/* @__PURE__ */ jsx45(AlertCircle3, { className: "h-4 w-4 flex-shrink-0" }),
|
|
@@ -9768,16 +9679,16 @@ function KeyshareBackupMenu() {
|
|
|
9768
9679
|
|
|
9769
9680
|
// src/internal/components/MainMenu/MainMenu.tsx
|
|
9770
9681
|
import { ChevronLeft, ChevronRight as ChevronRight3, DollarSign as DollarSign3, Wallet2 as Wallet23 } from "lucide-react";
|
|
9771
|
-
import { useEffect as
|
|
9682
|
+
import { useEffect as useEffect20 } from "react";
|
|
9772
9683
|
|
|
9773
9684
|
// src/internal/components/ManageWalletMenu/hooks/useProvidersList.ts
|
|
9774
9685
|
init_common();
|
|
9775
|
-
import { useQuery as
|
|
9686
|
+
import { useQuery as useQuery9 } from "@tanstack/react-query";
|
|
9776
9687
|
var PROVIDERS_QUERY_KEY = "lumia-passport-providers-query";
|
|
9777
9688
|
function useProvidersList() {
|
|
9778
9689
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9779
9690
|
const page = useLayoutDataStore((st) => st.page);
|
|
9780
|
-
return
|
|
9691
|
+
return useQuery9({
|
|
9781
9692
|
retry: false,
|
|
9782
9693
|
// hook is invoked on multiple pages to preload cache
|
|
9783
9694
|
enabled: !!address && (page === "manage-wallet" /* MANAGE_WALLET */ || page === "settings" /* SETTINGS */ || page === "main-menu" /* MAIN_MENU */),
|
|
@@ -9798,7 +9709,7 @@ function MainMenu() {
|
|
|
9798
9709
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9799
9710
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
9800
9711
|
const setMainPageHeight = useLayoutDataStore((st) => st.setMainPageHeight);
|
|
9801
|
-
|
|
9712
|
+
useEffect20(() => setMainPageHeight(DEFAULT_MAIN_MENU_HEIGHT), [setMainPageHeight]);
|
|
9802
9713
|
useProvidersList();
|
|
9803
9714
|
return /* @__PURE__ */ jsx46("div", { className: "w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]", children: /* @__PURE__ */ jsx46("div", { className: "w-full grid grid-cols-4 gap-0 md:gap-[var(--l-pass-gap)] py-[10px] md:py-1", children: MAIN_MENU_BUTTONS.map(({ id, label, icon: Icon2 }) => /* @__PURE__ */ jsxs39(
|
|
9804
9715
|
Button,
|
|
@@ -9819,11 +9730,11 @@ function MainMenu() {
|
|
|
9819
9730
|
|
|
9820
9731
|
// src/internal/components/ManageWalletMenu/ManageWallet.tsx
|
|
9821
9732
|
import { fromPairs } from "lodash-es";
|
|
9822
|
-
import { AlertTriangle as AlertTriangle3, ArrowLeft as
|
|
9733
|
+
import { AlertTriangle as AlertTriangle3, ArrowLeft as ArrowLeft8, Loader as Loader12 } from "lucide-react";
|
|
9823
9734
|
import { useMemo as useMemo3 } from "react";
|
|
9824
9735
|
|
|
9825
9736
|
// src/modules/linkedProfiles.ts
|
|
9826
|
-
import { useQuery as
|
|
9737
|
+
import { useQuery as useQuery10, useQueryClient as useQueryClient8 } from "@tanstack/react-query";
|
|
9827
9738
|
import { useCallback as useCallback10 } from "react";
|
|
9828
9739
|
init_auth();
|
|
9829
9740
|
init_common();
|
|
@@ -9844,13 +9755,13 @@ async function getLinkProfilesData() {
|
|
|
9844
9755
|
return { profiles: loadedProfiles, avatar };
|
|
9845
9756
|
}
|
|
9846
9757
|
function useLumiaPassportLinkedProfiles() {
|
|
9847
|
-
const qc =
|
|
9758
|
+
const qc = useQueryClient8();
|
|
9848
9759
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9849
9760
|
const {
|
|
9850
9761
|
data,
|
|
9851
9762
|
isFetching: isLoading,
|
|
9852
9763
|
error
|
|
9853
|
-
} =
|
|
9764
|
+
} = useQuery10({
|
|
9854
9765
|
retry: false,
|
|
9855
9766
|
enabled: !!address,
|
|
9856
9767
|
queryKey: [LINKED_PROFILES_QUERY_KEY, address],
|
|
@@ -9864,14 +9775,14 @@ function useLumiaPassportLinkedProfiles() {
|
|
|
9864
9775
|
}
|
|
9865
9776
|
|
|
9866
9777
|
// src/internal/components/ManageWalletMenu/AddProvider.tsx
|
|
9867
|
-
import { useQueryClient as
|
|
9778
|
+
import { useQueryClient as useQueryClient10 } from "@tanstack/react-query";
|
|
9868
9779
|
init_passkey2();
|
|
9869
9780
|
|
|
9870
9781
|
// src/internal/components/ManageWalletMenu/EmailForm.tsx
|
|
9871
9782
|
init_lumiaPassport();
|
|
9872
9783
|
init_projectId();
|
|
9873
|
-
import { useMutation as
|
|
9874
|
-
import { ChevronRight as ChevronRight4, Loader as
|
|
9784
|
+
import { useMutation as useMutation10 } from "@tanstack/react-query";
|
|
9785
|
+
import { ChevronRight as ChevronRight4, Loader as Loader11, Mail as Mail4 } from "lucide-react";
|
|
9875
9786
|
|
|
9876
9787
|
// src/internal/components/ManageWalletMenu/hooks/useStore.ts
|
|
9877
9788
|
import { create as create5 } from "zustand";
|
|
@@ -9904,7 +9815,7 @@ function EmailForm() {
|
|
|
9904
9815
|
const isLoading = useLumiaPassportSession((st) => st.isLoading);
|
|
9905
9816
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
9906
9817
|
const { email, setEmail, setAlert, setEmailCodeExpiresIn, setEmailStep } = useManageWalletStore();
|
|
9907
|
-
const { mutate: onSendVerificationCode } =
|
|
9818
|
+
const { mutate: onSendVerificationCode } = useMutation10({
|
|
9908
9819
|
mutationFn: async () => {
|
|
9909
9820
|
if (!email) return;
|
|
9910
9821
|
setIsLoading(true);
|
|
@@ -9984,7 +9895,7 @@ function EmailForm() {
|
|
|
9984
9895
|
size: "large",
|
|
9985
9896
|
disabled: !email || isLoading,
|
|
9986
9897
|
onClick: () => onSendVerificationCode(),
|
|
9987
|
-
children: isLoading ? /* @__PURE__ */ jsx47(
|
|
9898
|
+
children: isLoading ? /* @__PURE__ */ jsx47(Loader11, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ jsx47(ChevronRight4, { className: "w-4 h-4" })
|
|
9988
9899
|
}
|
|
9989
9900
|
)
|
|
9990
9901
|
] });
|
|
@@ -9992,12 +9903,12 @@ function EmailForm() {
|
|
|
9992
9903
|
|
|
9993
9904
|
// src/internal/components/ManageWalletMenu/hooks/useSendVerificationCode.ts
|
|
9994
9905
|
init_email();
|
|
9995
|
-
import { useMutation as
|
|
9906
|
+
import { useMutation as useMutation11 } from "@tanstack/react-query";
|
|
9996
9907
|
function useSendVerificationCode() {
|
|
9997
9908
|
const setAlert = useManageWalletStore((st) => st.setAlert);
|
|
9998
9909
|
const setLinkIsLoading = useManageWalletStore((st) => st.setLinkIsLoading);
|
|
9999
9910
|
const setEmailCodeExpiresIn = useManageWalletStore((st) => st.setEmailCodeExpiresIn);
|
|
10000
|
-
return
|
|
9911
|
+
return useMutation11({
|
|
10001
9912
|
mutationFn: async (email) => {
|
|
10002
9913
|
if (!email) {
|
|
10003
9914
|
throw new Error("Email is required");
|
|
@@ -10020,15 +9931,15 @@ function useSendVerificationCode() {
|
|
|
10020
9931
|
}
|
|
10021
9932
|
|
|
10022
9933
|
// src/internal/components/ManageWalletMenu/hooks/useVerifyCode.ts
|
|
10023
|
-
import { useMutation as
|
|
9934
|
+
import { useMutation as useMutation12, useQueryClient as useQueryClient9 } from "@tanstack/react-query";
|
|
10024
9935
|
init_email();
|
|
10025
9936
|
function useVerifyCode() {
|
|
10026
9937
|
const { callbacks } = useLumiaPassportConfig();
|
|
10027
|
-
const qc =
|
|
9938
|
+
const qc = useQueryClient9();
|
|
10028
9939
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10029
9940
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
10030
9941
|
const { email, emailCode, setEmail, setEmailStep, setEmailCode, setProviderType, setLinkIsLoading, setAlert } = useManageWalletStore();
|
|
10031
|
-
return
|
|
9942
|
+
return useMutation12({
|
|
10032
9943
|
mutationFn: async (codeToVerify) => {
|
|
10033
9944
|
const code = codeToVerify ?? emailCode;
|
|
10034
9945
|
if (!code) {
|
|
@@ -10064,7 +9975,7 @@ function useVerifyCode() {
|
|
|
10064
9975
|
}
|
|
10065
9976
|
|
|
10066
9977
|
// src/internal/components/ManageWalletMenu/AddProvider.tsx
|
|
10067
|
-
import { Fragment as
|
|
9978
|
+
import { Fragment as Fragment16, jsx as jsx48, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
10068
9979
|
function normalizePasskeyLinkError(msg) {
|
|
10069
9980
|
const lower = msg.toLowerCase();
|
|
10070
9981
|
if (lower.includes("already registered") || lower.includes("credential") && lower.includes("exists")) {
|
|
@@ -10076,7 +9987,7 @@ function normalizePasskeyLinkError(msg) {
|
|
|
10076
9987
|
return msg;
|
|
10077
9988
|
}
|
|
10078
9989
|
function AddProvider() {
|
|
10079
|
-
const qc =
|
|
9990
|
+
const qc = useQueryClient10();
|
|
10080
9991
|
const callbacks = useLumiaPassportConfig().callbacks;
|
|
10081
9992
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10082
9993
|
const {
|
|
@@ -10094,7 +10005,7 @@ function AddProvider() {
|
|
|
10094
10005
|
const { mutate: onVerifyCode, isPending: isCodeVerifying } = useVerifyCode();
|
|
10095
10006
|
const isLoading = linkIsLoading || isCodeSending || isCodeVerifying;
|
|
10096
10007
|
if (!providerType) return null;
|
|
10097
|
-
return /* @__PURE__ */ jsxs41(
|
|
10008
|
+
return /* @__PURE__ */ jsxs41(Fragment16, { children: [
|
|
10098
10009
|
providerType === "email" && emailStep === "input" && /* @__PURE__ */ jsxs41("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: [
|
|
10099
10010
|
/* @__PURE__ */ jsx48("div", { className: "w-full flex flex-col gap-1 text-center", children: /* @__PURE__ */ jsx48("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "Provide Email to connect" }) }),
|
|
10100
10011
|
/* @__PURE__ */ jsx48(EmailForm, {})
|
|
@@ -10236,11 +10147,11 @@ function EmailNotConnectedWarning() {
|
|
|
10236
10147
|
}
|
|
10237
10148
|
|
|
10238
10149
|
// src/internal/components/ManageWalletMenu/hooks/useLinkSocial.ts
|
|
10239
|
-
import { useQueryClient as
|
|
10240
|
-
import React5, { useEffect as
|
|
10150
|
+
import { useQueryClient as useQueryClient11 } from "@tanstack/react-query";
|
|
10151
|
+
import React5, { useEffect as useEffect21 } from "react";
|
|
10241
10152
|
init_auth();
|
|
10242
10153
|
function useLinkSocial() {
|
|
10243
|
-
const qc =
|
|
10154
|
+
const qc = useQueryClient11();
|
|
10244
10155
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10245
10156
|
const {
|
|
10246
10157
|
config: { current: config },
|
|
@@ -10302,7 +10213,7 @@ function useLinkSocial() {
|
|
|
10302
10213
|
[config.social?.providers, callbacks]
|
|
10303
10214
|
);
|
|
10304
10215
|
const [socialLinkStarted, setSocialLinkStarted] = React5.useState(false);
|
|
10305
|
-
|
|
10216
|
+
useEffect21(() => {
|
|
10306
10217
|
const key = providerType?.toLowerCase();
|
|
10307
10218
|
console.log("[useLinkSocial] Effect triggered:", { key, linkIsLoading, socialLinkStarted, isWalletLinking });
|
|
10308
10219
|
if (isWalletLinking) {
|
|
@@ -10323,14 +10234,14 @@ function useLinkSocial() {
|
|
|
10323
10234
|
|
|
10324
10235
|
// src/internal/components/ManageWalletMenu/hooks/useLinkTelegram.ts
|
|
10325
10236
|
init_telegram2();
|
|
10326
|
-
import { useQueryClient as
|
|
10327
|
-
import { useCallback as useCallback11, useEffect as
|
|
10237
|
+
import { useQueryClient as useQueryClient12 } from "@tanstack/react-query";
|
|
10238
|
+
import { useCallback as useCallback11, useEffect as useEffect22, useState as useState10 } from "react";
|
|
10328
10239
|
function useLinkTelegram() {
|
|
10329
10240
|
const {
|
|
10330
10241
|
config: { current: config },
|
|
10331
10242
|
callbacks
|
|
10332
10243
|
} = useLumiaPassportConfig();
|
|
10333
|
-
const qc =
|
|
10244
|
+
const qc = useQueryClient12();
|
|
10334
10245
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10335
10246
|
const isWalletLinking = useLayoutDataStore((st) => st.isWalletLinking);
|
|
10336
10247
|
const { providerType, linkIsLoading, setLinkIsLoading, setProviderType, setAlert } = useManageWalletStore();
|
|
@@ -10378,7 +10289,7 @@ function useLinkTelegram() {
|
|
|
10378
10289
|
}
|
|
10379
10290
|
}, [config.social?.providers, callbacks]);
|
|
10380
10291
|
const [telegramLinkStarted, setTelegramLinkStarted] = useState10(false);
|
|
10381
|
-
|
|
10292
|
+
useEffect22(() => {
|
|
10382
10293
|
console.log("[useLinkTelegram] Effect triggered:", {
|
|
10383
10294
|
providerType,
|
|
10384
10295
|
linkIsLoading,
|
|
@@ -10395,7 +10306,7 @@ function useLinkTelegram() {
|
|
|
10395
10306
|
handleLinkTelegram();
|
|
10396
10307
|
}
|
|
10397
10308
|
}, [providerType, handleLinkTelegram, linkIsLoading, telegramLinkStarted, isWalletLinking]);
|
|
10398
|
-
|
|
10309
|
+
useEffect22(() => {
|
|
10399
10310
|
if (providerType !== "telegram") {
|
|
10400
10311
|
setTelegramLinkStarted(false);
|
|
10401
10312
|
}
|
|
@@ -10456,7 +10367,7 @@ function ProviderCard(props) {
|
|
|
10456
10367
|
}
|
|
10457
10368
|
|
|
10458
10369
|
// src/internal/components/ManageWalletMenu/ManageWallet.tsx
|
|
10459
|
-
import { Fragment as
|
|
10370
|
+
import { Fragment as Fragment17, jsx as jsx51, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
10460
10371
|
var POSSIBLE_PROVIDERS = [
|
|
10461
10372
|
"email",
|
|
10462
10373
|
// 'google',
|
|
@@ -10597,19 +10508,19 @@ function ManageWalletMenu() {
|
|
|
10597
10508
|
if (!providerType) setPage("settings" /* SETTINGS */);
|
|
10598
10509
|
setProviderType(null);
|
|
10599
10510
|
},
|
|
10600
|
-
children: /* @__PURE__ */ jsx51(
|
|
10511
|
+
children: /* @__PURE__ */ jsx51(ArrowLeft8, { className: "h-4 w-4" })
|
|
10601
10512
|
}
|
|
10602
10513
|
),
|
|
10603
10514
|
/* @__PURE__ */ jsx51("span", { className: "text-xl font-semibold", children: "Profiles" })
|
|
10604
10515
|
] }),
|
|
10605
|
-
isProvidersLoading && /* @__PURE__ */ jsx51("div", { className: "flex items-center justify-center p-4 text-[var(--l-pass-fg-muted)]", children: /* @__PURE__ */ jsx51(
|
|
10516
|
+
isProvidersLoading && /* @__PURE__ */ jsx51("div", { className: "flex items-center justify-center p-4 text-[var(--l-pass-fg-muted)]", children: /* @__PURE__ */ jsx51(Loader12, { className: "w-5 h-5 animate-spin" }) }),
|
|
10606
10517
|
/* @__PURE__ */ jsx51(EmailNotConnectedWarning, {}),
|
|
10607
10518
|
showCurrentProviders && renderProviders.map((node) => node),
|
|
10608
10519
|
showExtraProvidersUi && /* @__PURE__ */ jsx51(AddProvider, {}),
|
|
10609
10520
|
combinedAlertMessage && /* @__PURE__ */ jsxs44(Highlight, { type: "error", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
10610
10521
|
/* @__PURE__ */ jsx51(AlertTriangle3, { className: "w-4 h-4 shrink-0" }),
|
|
10611
10522
|
/* @__PURE__ */ jsxs44("span", { className: "break-words whitespace-pre-wrap", children: [
|
|
10612
|
-
alert2?.title && /* @__PURE__ */ jsxs44(
|
|
10523
|
+
alert2?.title && /* @__PURE__ */ jsxs44(Fragment17, { children: [
|
|
10613
10524
|
/* @__PURE__ */ jsx51("strong", { children: alert2.title }),
|
|
10614
10525
|
/* @__PURE__ */ jsx51("br", {})
|
|
10615
10526
|
] }),
|
|
@@ -10622,19 +10533,19 @@ function ManageWalletMenu() {
|
|
|
10622
10533
|
}
|
|
10623
10534
|
|
|
10624
10535
|
// src/internal/components/ManageWalletMenu/UnlinkProviderMenu.tsx
|
|
10625
|
-
import { useMutation as
|
|
10626
|
-
import { Key as
|
|
10536
|
+
import { useMutation as useMutation13, useQueryClient as useQueryClient13 } from "@tanstack/react-query";
|
|
10537
|
+
import { Key as Key6, Loader as Loader13 } from "lucide-react";
|
|
10627
10538
|
import { useState as useState11 } from "react";
|
|
10628
10539
|
init_auth();
|
|
10629
10540
|
import { jsx as jsx52, jsxs as jsxs45 } from "react/jsx-runtime";
|
|
10630
10541
|
function UnlinkProviderMenu() {
|
|
10631
|
-
const qc =
|
|
10542
|
+
const qc = useQueryClient13();
|
|
10632
10543
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10633
10544
|
const { callbacks } = useLumiaPassportConfig();
|
|
10634
10545
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
10635
10546
|
const { confirmUnlink, setConfirmUnlink, setAlert } = useManageWalletStore();
|
|
10636
10547
|
const [confirmInput, setConfirmInput] = useState11("");
|
|
10637
|
-
const { mutate: handleUnlinkProvider, isPending: isProviderUnlinking } =
|
|
10548
|
+
const { mutate: handleUnlinkProvider, isPending: isProviderUnlinking } = useMutation13({
|
|
10638
10549
|
mutationFn: async () => {
|
|
10639
10550
|
if (!confirmUnlink) {
|
|
10640
10551
|
throw new Error("No provider to unlink");
|
|
@@ -10666,7 +10577,7 @@ function UnlinkProviderMenu() {
|
|
|
10666
10577
|
/* @__PURE__ */ jsx52(
|
|
10667
10578
|
Input,
|
|
10668
10579
|
{
|
|
10669
|
-
Icon:
|
|
10580
|
+
Icon: Key6,
|
|
10670
10581
|
value: confirmInput,
|
|
10671
10582
|
onChange: (e) => setConfirmInput(e.target.value),
|
|
10672
10583
|
placeholder: "Enter provider ID"
|
|
@@ -10697,7 +10608,7 @@ function UnlinkProviderMenu() {
|
|
|
10697
10608
|
disabled: !!isProviderUnlinking || !confirmUnlink || confirmInput !== confirmUnlink.externalId,
|
|
10698
10609
|
className: "w-full flex-1",
|
|
10699
10610
|
children: [
|
|
10700
|
-
isProviderUnlinking && /* @__PURE__ */ jsx52(
|
|
10611
|
+
isProviderUnlinking && /* @__PURE__ */ jsx52(Loader13, { className: "animate-spin h-4 w-4" }),
|
|
10701
10612
|
isProviderUnlinking ? "Removing\u2026" : "Remove"
|
|
10702
10613
|
]
|
|
10703
10614
|
}
|
|
@@ -10707,14 +10618,14 @@ function UnlinkProviderMenu() {
|
|
|
10707
10618
|
}
|
|
10708
10619
|
|
|
10709
10620
|
// src/internal/components/NicknameSettings/NicknameSettings.tsx
|
|
10710
|
-
import { ArrowLeft as
|
|
10621
|
+
import { ArrowLeft as ArrowLeft9, Loader as Loader16 } from "lucide-react";
|
|
10711
10622
|
|
|
10712
10623
|
// src/internal/hooks/useNicknameInfo.ts
|
|
10713
10624
|
init_nickname();
|
|
10714
10625
|
init_profile();
|
|
10715
|
-
import { useQuery as
|
|
10626
|
+
import { useQuery as useQuery11 } from "@tanstack/react-query";
|
|
10716
10627
|
function useNicknameInfo(enabled = true) {
|
|
10717
|
-
const query =
|
|
10628
|
+
const query = useQuery11({
|
|
10718
10629
|
queryKey: [QUERY_KEYS.nicknameInfo],
|
|
10719
10630
|
queryFn: getNicknameInfo,
|
|
10720
10631
|
enabled,
|
|
@@ -10731,82 +10642,17 @@ function useNicknameInfo(enabled = true) {
|
|
|
10731
10642
|
};
|
|
10732
10643
|
}
|
|
10733
10644
|
|
|
10734
|
-
// src/internal/lib/nickname-cooldown.ts
|
|
10735
|
-
function getDaysRemaining(cooldownEndsAt) {
|
|
10736
|
-
if (!cooldownEndsAt) return 0;
|
|
10737
|
-
const endDate = new Date(cooldownEndsAt);
|
|
10738
|
-
const now = /* @__PURE__ */ new Date();
|
|
10739
|
-
if (isNaN(endDate.getTime())) return 0;
|
|
10740
|
-
if (endDate <= now) return 0;
|
|
10741
|
-
const diffMs = endDate.getTime() - now.getTime();
|
|
10742
|
-
const diffDays = Math.ceil(diffMs / (1e3 * 60 * 60 * 24));
|
|
10743
|
-
return Math.max(0, diffDays);
|
|
10744
|
-
}
|
|
10745
|
-
function formatCooldownEndDate(cooldownEndsAt) {
|
|
10746
|
-
if (!cooldownEndsAt) return "";
|
|
10747
|
-
const endDate = new Date(cooldownEndsAt);
|
|
10748
|
-
if (isNaN(endDate.getTime())) return "";
|
|
10749
|
-
return endDate.toLocaleDateString(void 0, {
|
|
10750
|
-
year: "numeric",
|
|
10751
|
-
month: "short",
|
|
10752
|
-
day: "numeric"
|
|
10753
|
-
});
|
|
10754
|
-
}
|
|
10755
|
-
|
|
10756
|
-
// src/internal/components/NicknameSettings/NicknameInfoDisplay.tsx
|
|
10757
|
-
import { jsx as jsx53, jsxs as jsxs46 } from "react/jsx-runtime";
|
|
10758
|
-
function NicknameInfoDisplay({ info }) {
|
|
10759
|
-
const daysRemaining = getDaysRemaining(info.cooldownEndsAt);
|
|
10760
|
-
const cooldownEndDate = formatCooldownEndDate(info.cooldownEndsAt);
|
|
10761
|
-
return /* @__PURE__ */ jsxs46("div", { className: "w-full flex flex-col gap-3", children: [
|
|
10762
|
-
/* @__PURE__ */ jsxs46("div", { className: "flex flex-col gap-1", children: [
|
|
10763
|
-
/* @__PURE__ */ jsx53("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "Your nickname" }),
|
|
10764
|
-
/* @__PURE__ */ jsx53("span", { className: "text-lg font-bold text-[var(--l-pass-fg)]", children: info.displayHandle })
|
|
10765
|
-
] }),
|
|
10766
|
-
/* @__PURE__ */ jsxs46("div", { className: "flex items-center gap-4 text-xs text-[var(--l-pass-fg-muted)]", children: [
|
|
10767
|
-
/* @__PURE__ */ jsxs46("div", { className: "flex flex-col gap-0.5", children: [
|
|
10768
|
-
/* @__PURE__ */ jsx53("span", { children: "Created" }),
|
|
10769
|
-
/* @__PURE__ */ jsx53("span", { className: "text-[var(--l-pass-fg)]", children: new Date(info.createdAt).toLocaleDateString(void 0, {
|
|
10770
|
-
year: "numeric",
|
|
10771
|
-
month: "short",
|
|
10772
|
-
day: "numeric"
|
|
10773
|
-
}) })
|
|
10774
|
-
] }),
|
|
10775
|
-
info.changedAt && /* @__PURE__ */ jsxs46("div", { className: "flex flex-col gap-0.5", children: [
|
|
10776
|
-
/* @__PURE__ */ jsx53("span", { children: "Last changed" }),
|
|
10777
|
-
/* @__PURE__ */ jsx53("span", { className: "text-[var(--l-pass-fg)]", children: new Date(info.changedAt).toLocaleDateString(void 0, {
|
|
10778
|
-
year: "numeric",
|
|
10779
|
-
month: "short",
|
|
10780
|
-
day: "numeric"
|
|
10781
|
-
}) })
|
|
10782
|
-
] }),
|
|
10783
|
-
/* @__PURE__ */ jsxs46("div", { className: "flex flex-col gap-0.5", children: [
|
|
10784
|
-
/* @__PURE__ */ jsx53("span", { children: "Times changed" }),
|
|
10785
|
-
/* @__PURE__ */ jsx53("span", { className: "text-[var(--l-pass-fg)]", children: info.changeCount })
|
|
10786
|
-
] })
|
|
10787
|
-
] }),
|
|
10788
|
-
!info.canChange && info.cooldownEndsAt && /* @__PURE__ */ jsx53("div", { className: "p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-warning)]", children: /* @__PURE__ */ jsxs46("span", { className: "text-sm text-[var(--l-pass-warning)]", children: [
|
|
10789
|
-
"You can change your nickname again on ",
|
|
10790
|
-
cooldownEndDate,
|
|
10791
|
-
" (",
|
|
10792
|
-
daysRemaining,
|
|
10793
|
-
" days remaining)"
|
|
10794
|
-
] }) }),
|
|
10795
|
-
info.canChange && /* @__PURE__ */ jsx53("div", { className: "p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-success)]", children: /* @__PURE__ */ jsx53("span", { className: "text-sm text-[var(--l-pass-success)]", children: "You can change your nickname" }) })
|
|
10796
|
-
] });
|
|
10797
|
-
}
|
|
10798
|
-
|
|
10799
10645
|
// src/internal/components/NicknameSettings/NicknameEditForm.tsx
|
|
10800
|
-
import {
|
|
10801
|
-
import {
|
|
10646
|
+
import { Check as Check2, Loader as Loader15 } from "lucide-react";
|
|
10647
|
+
import { useCallback as useCallback13, useState as useState13 } from "react";
|
|
10802
10648
|
|
|
10803
10649
|
// src/internal/hooks/useChangeNickname.ts
|
|
10804
10650
|
init_nickname();
|
|
10805
10651
|
init_profile();
|
|
10806
|
-
import { useMutation as
|
|
10652
|
+
import { useMutation as useMutation14, useQueryClient as useQueryClient14 } from "@tanstack/react-query";
|
|
10807
10653
|
function useChangeNickname(options) {
|
|
10808
|
-
const queryClient3 =
|
|
10809
|
-
const mutation =
|
|
10654
|
+
const queryClient3 = useQueryClient14();
|
|
10655
|
+
const mutation = useMutation14({
|
|
10810
10656
|
mutationFn: (handle) => changeNickname(handle),
|
|
10811
10657
|
onSuccess: (result) => {
|
|
10812
10658
|
queryClient3.invalidateQueries({ queryKey: [QUERY_KEYS.nicknameInfo] });
|
|
@@ -10843,8 +10689,8 @@ function useChangeNickname(options) {
|
|
|
10843
10689
|
// src/internal/hooks/useNicknameAvailability.ts
|
|
10844
10690
|
init_nickname();
|
|
10845
10691
|
init_profile();
|
|
10846
|
-
import { useQuery as
|
|
10847
|
-
import { useState as useState12, useEffect as
|
|
10692
|
+
import { useQuery as useQuery12 } from "@tanstack/react-query";
|
|
10693
|
+
import { useState as useState12, useEffect as useEffect23 } from "react";
|
|
10848
10694
|
|
|
10849
10695
|
// src/internal/lib/nickname-validation.ts
|
|
10850
10696
|
var NICKNAME_MIN_LENGTH = 3;
|
|
@@ -10878,7 +10724,7 @@ function useNicknameAvailability(handle, enabled = true) {
|
|
|
10878
10724
|
const normalized = normalizeNickname(handle);
|
|
10879
10725
|
const validation = validateNickname(handle);
|
|
10880
10726
|
const isValidForCheck = validation.valid && normalized.length > 0;
|
|
10881
|
-
|
|
10727
|
+
useEffect23(() => {
|
|
10882
10728
|
if (!isValidForCheck || !enabled) {
|
|
10883
10729
|
setDebouncedHandle("");
|
|
10884
10730
|
setIsDebouncing(false);
|
|
@@ -10893,7 +10739,7 @@ function useNicknameAvailability(handle, enabled = true) {
|
|
|
10893
10739
|
clearTimeout(timer);
|
|
10894
10740
|
};
|
|
10895
10741
|
}, [normalized, isValidForCheck, enabled]);
|
|
10896
|
-
const query =
|
|
10742
|
+
const query = useQuery12({
|
|
10897
10743
|
queryKey: QUERY_KEYS.nicknameAvailability(debouncedHandle),
|
|
10898
10744
|
queryFn: () => checkNicknameAvailability(debouncedHandle),
|
|
10899
10745
|
enabled: enabled && isValidForCheck && debouncedHandle.length > 0,
|
|
@@ -10935,8 +10781,8 @@ function getNicknameErrorMessage(code, params) {
|
|
|
10935
10781
|
}
|
|
10936
10782
|
|
|
10937
10783
|
// src/internal/components/NicknameSettings/NicknameAvailabilityIndicator.tsx
|
|
10938
|
-
import { Loader as
|
|
10939
|
-
import { jsx as
|
|
10784
|
+
import { Loader as Loader14, Check, X as X2 } from "lucide-react";
|
|
10785
|
+
import { jsx as jsx53, jsxs as jsxs46 } from "react/jsx-runtime";
|
|
10940
10786
|
function NicknameAvailabilityIndicator({
|
|
10941
10787
|
isChecking,
|
|
10942
10788
|
availability,
|
|
@@ -10946,29 +10792,29 @@ function NicknameAvailabilityIndicator({
|
|
|
10946
10792
|
return null;
|
|
10947
10793
|
}
|
|
10948
10794
|
if (isChecking) {
|
|
10949
|
-
return /* @__PURE__ */
|
|
10950
|
-
/* @__PURE__ */
|
|
10951
|
-
/* @__PURE__ */
|
|
10795
|
+
return /* @__PURE__ */ jsxs46("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-fg-muted)]", children: [
|
|
10796
|
+
/* @__PURE__ */ jsx53(Loader14, { className: "w-3 h-3 animate-spin" }),
|
|
10797
|
+
/* @__PURE__ */ jsx53("span", { children: "Checking availability..." })
|
|
10952
10798
|
] });
|
|
10953
10799
|
}
|
|
10954
10800
|
if (!availability) {
|
|
10955
10801
|
return null;
|
|
10956
10802
|
}
|
|
10957
10803
|
if (availability.available) {
|
|
10958
|
-
return /* @__PURE__ */
|
|
10959
|
-
/* @__PURE__ */
|
|
10960
|
-
/* @__PURE__ */
|
|
10804
|
+
return /* @__PURE__ */ jsxs46("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-success)]", children: [
|
|
10805
|
+
/* @__PURE__ */ jsx53(Check, { className: "w-3 h-3" }),
|
|
10806
|
+
/* @__PURE__ */ jsx53("span", { children: "Nickname is available" })
|
|
10961
10807
|
] });
|
|
10962
10808
|
}
|
|
10963
10809
|
const reason = availability.reason ? getNicknameErrorMessage(availability.reason) : "This nickname is not available";
|
|
10964
|
-
return /* @__PURE__ */
|
|
10965
|
-
/* @__PURE__ */
|
|
10966
|
-
/* @__PURE__ */
|
|
10810
|
+
return /* @__PURE__ */ jsxs46("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-error)]", children: [
|
|
10811
|
+
/* @__PURE__ */ jsx53(X2, { className: "w-3 h-3" }),
|
|
10812
|
+
/* @__PURE__ */ jsx53("span", { children: reason })
|
|
10967
10813
|
] });
|
|
10968
10814
|
}
|
|
10969
10815
|
|
|
10970
10816
|
// src/internal/components/NicknameSettings/NicknameEditForm.tsx
|
|
10971
|
-
import { Fragment as
|
|
10817
|
+
import { Fragment as Fragment18, jsx as jsx54, jsxs as jsxs47 } from "react/jsx-runtime";
|
|
10972
10818
|
function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
10973
10819
|
const [inputValue, setInputValue] = useState13("");
|
|
10974
10820
|
const [clientError, setClientError] = useState13(null);
|
|
@@ -11025,29 +10871,97 @@ function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
|
11025
10871
|
if (!canChange) {
|
|
11026
10872
|
return null;
|
|
11027
10873
|
}
|
|
11028
|
-
return /* @__PURE__ */
|
|
10874
|
+
return /* @__PURE__ */ jsxs47("form", { onSubmit: handleSubmit, className: "w-full flex flex-col gap-3", children: [
|
|
10875
|
+
/* @__PURE__ */ jsxs47("div", { className: "flex flex-col gap-1", children: [
|
|
10876
|
+
/* @__PURE__ */ jsx54("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "New nickname" }),
|
|
10877
|
+
/* @__PURE__ */ jsx54(
|
|
10878
|
+
Input,
|
|
10879
|
+
{
|
|
10880
|
+
value: inputValue,
|
|
10881
|
+
onChange: handleInputChange,
|
|
10882
|
+
placeholder: "Enter new nickname",
|
|
10883
|
+
disabled: isLoading,
|
|
10884
|
+
error: displayError || void 0
|
|
10885
|
+
}
|
|
10886
|
+
),
|
|
10887
|
+
/* @__PURE__ */ jsx54("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsx54("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "3-20 characters, letters, numbers, and underscores only" }) }),
|
|
10888
|
+
shouldCheckAvailability && !clientError && /* @__PURE__ */ jsx54(NicknameAvailabilityIndicator, { isChecking, availability })
|
|
10889
|
+
] }),
|
|
10890
|
+
/* @__PURE__ */ jsx54(Button, { type: "submit", size: "large", disabled: isSubmitDisabled, className: "w-full", children: isLoading ? /* @__PURE__ */ jsxs47(Fragment18, { children: [
|
|
10891
|
+
/* @__PURE__ */ jsx54(Loader15, { className: "w-4 h-4 mr-2 animate-spin" }),
|
|
10892
|
+
"Changing..."
|
|
10893
|
+
] }) : isSuccess ? /* @__PURE__ */ jsxs47(Fragment18, { children: [
|
|
10894
|
+
/* @__PURE__ */ jsx54(Check2, { className: "w-4 h-4 mr-2" }),
|
|
10895
|
+
"Nickname changed!"
|
|
10896
|
+
] }) : "Change Nickname" })
|
|
10897
|
+
] });
|
|
10898
|
+
}
|
|
10899
|
+
|
|
10900
|
+
// src/internal/components/NicknameSettings/NicknameInfoDisplay.tsx
|
|
10901
|
+
import { Fragment as Fragment19 } from "react";
|
|
10902
|
+
|
|
10903
|
+
// src/internal/lib/nickname-cooldown.ts
|
|
10904
|
+
function getDaysRemaining(cooldownEndsAt) {
|
|
10905
|
+
if (!cooldownEndsAt) return 0;
|
|
10906
|
+
const endDate = new Date(cooldownEndsAt);
|
|
10907
|
+
const now = /* @__PURE__ */ new Date();
|
|
10908
|
+
if (isNaN(endDate.getTime())) return 0;
|
|
10909
|
+
if (endDate <= now) return 0;
|
|
10910
|
+
const diffMs = endDate.getTime() - now.getTime();
|
|
10911
|
+
const diffDays = Math.ceil(diffMs / (1e3 * 60 * 60 * 24));
|
|
10912
|
+
return Math.max(0, diffDays);
|
|
10913
|
+
}
|
|
10914
|
+
function formatCooldownEndDate(cooldownEndsAt) {
|
|
10915
|
+
if (!cooldownEndsAt) return "";
|
|
10916
|
+
const endDate = new Date(cooldownEndsAt);
|
|
10917
|
+
if (isNaN(endDate.getTime())) return "";
|
|
10918
|
+
return endDate.toLocaleDateString(void 0, {
|
|
10919
|
+
year: "numeric",
|
|
10920
|
+
month: "short",
|
|
10921
|
+
day: "numeric"
|
|
10922
|
+
});
|
|
10923
|
+
}
|
|
10924
|
+
|
|
10925
|
+
// src/internal/components/NicknameSettings/NicknameInfoDisplay.tsx
|
|
10926
|
+
import { jsx as jsx55, jsxs as jsxs48 } from "react/jsx-runtime";
|
|
10927
|
+
function NicknameInfoDisplay({ info }) {
|
|
10928
|
+
const daysRemaining = getDaysRemaining(info.cooldownEndsAt);
|
|
10929
|
+
const cooldownEndDate = formatCooldownEndDate(info.cooldownEndsAt);
|
|
10930
|
+
return /* @__PURE__ */ jsxs48(Fragment19, { children: [
|
|
11029
10931
|
/* @__PURE__ */ jsxs48("div", { className: "flex flex-col gap-1", children: [
|
|
11030
|
-
/* @__PURE__ */ jsx55("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "
|
|
11031
|
-
/* @__PURE__ */ jsx55(
|
|
11032
|
-
Input,
|
|
11033
|
-
{
|
|
11034
|
-
value: inputValue,
|
|
11035
|
-
onChange: handleInputChange,
|
|
11036
|
-
placeholder: "Enter new nickname",
|
|
11037
|
-
disabled: isLoading,
|
|
11038
|
-
error: displayError || void 0
|
|
11039
|
-
}
|
|
11040
|
-
),
|
|
11041
|
-
/* @__PURE__ */ jsx55("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsx55("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "3-20 characters, letters, numbers, and underscores only" }) }),
|
|
11042
|
-
shouldCheckAvailability && !clientError && /* @__PURE__ */ jsx55(NicknameAvailabilityIndicator, { isChecking, availability })
|
|
10932
|
+
/* @__PURE__ */ jsx55("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "Your nickname" }),
|
|
10933
|
+
/* @__PURE__ */ jsx55("span", { className: "text-lg font-bold text-[var(--l-pass-fg)]", children: info.displayHandle })
|
|
11043
10934
|
] }),
|
|
11044
|
-
/* @__PURE__ */
|
|
11045
|
-
/* @__PURE__ */
|
|
11046
|
-
|
|
11047
|
-
|
|
11048
|
-
|
|
11049
|
-
|
|
11050
|
-
|
|
10935
|
+
/* @__PURE__ */ jsxs48("div", { className: "flex items-center gap-4 text-xs text-[var(--l-pass-fg-muted)]", children: [
|
|
10936
|
+
/* @__PURE__ */ jsxs48("div", { className: "flex flex-col gap-0.5", children: [
|
|
10937
|
+
/* @__PURE__ */ jsx55("span", { children: "Created" }),
|
|
10938
|
+
/* @__PURE__ */ jsx55("span", { className: "text-[var(--l-pass-fg)]", children: new Date(info.createdAt).toLocaleDateString(void 0, {
|
|
10939
|
+
year: "numeric",
|
|
10940
|
+
month: "short",
|
|
10941
|
+
day: "numeric"
|
|
10942
|
+
}) })
|
|
10943
|
+
] }),
|
|
10944
|
+
info.changedAt && /* @__PURE__ */ jsxs48("div", { className: "flex flex-col gap-0.5", children: [
|
|
10945
|
+
/* @__PURE__ */ jsx55("span", { children: "Last changed" }),
|
|
10946
|
+
/* @__PURE__ */ jsx55("span", { className: "text-[var(--l-pass-fg)]", children: new Date(info.changedAt).toLocaleDateString(void 0, {
|
|
10947
|
+
year: "numeric",
|
|
10948
|
+
month: "short",
|
|
10949
|
+
day: "numeric"
|
|
10950
|
+
}) })
|
|
10951
|
+
] }),
|
|
10952
|
+
/* @__PURE__ */ jsxs48("div", { className: "flex flex-col gap-0.5", children: [
|
|
10953
|
+
/* @__PURE__ */ jsx55("span", { children: "Times changed" }),
|
|
10954
|
+
/* @__PURE__ */ jsx55("span", { className: "text-[var(--l-pass-fg)]", children: info.changeCount })
|
|
10955
|
+
] })
|
|
10956
|
+
] }),
|
|
10957
|
+
!info.canChange && info.cooldownEndsAt && /* @__PURE__ */ jsx55("div", { className: "p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-warning)]", children: /* @__PURE__ */ jsxs48("span", { className: "text-sm text-[var(--l-pass-warning)]", children: [
|
|
10958
|
+
"You can change your nickname again on ",
|
|
10959
|
+
cooldownEndDate,
|
|
10960
|
+
" (",
|
|
10961
|
+
daysRemaining,
|
|
10962
|
+
" days remaining)"
|
|
10963
|
+
] }) }),
|
|
10964
|
+
info.canChange && /* @__PURE__ */ jsx55("div", { className: "p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-success)]", children: /* @__PURE__ */ jsx55("span", { className: "text-sm text-[var(--l-pass-success)]", children: "You can change your nickname" }) })
|
|
11051
10965
|
] });
|
|
11052
10966
|
}
|
|
11053
10967
|
|
|
@@ -11055,54 +10969,44 @@ function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
|
11055
10969
|
import { jsx as jsx56, jsxs as jsxs49 } from "react/jsx-runtime";
|
|
11056
10970
|
function NicknameSettings() {
|
|
11057
10971
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
10972
|
+
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
11058
10973
|
const { data: nicknameInfo, isLoading, isError, error, refetch } = useNicknameInfo();
|
|
11059
|
-
return /* @__PURE__ */
|
|
11060
|
-
|
|
11061
|
-
|
|
11062
|
-
|
|
11063
|
-
|
|
11064
|
-
|
|
11065
|
-
{
|
|
11066
|
-
|
|
11067
|
-
|
|
11068
|
-
|
|
11069
|
-
|
|
11070
|
-
|
|
11071
|
-
|
|
11072
|
-
|
|
11073
|
-
|
|
11074
|
-
|
|
11075
|
-
|
|
11076
|
-
|
|
11077
|
-
|
|
11078
|
-
|
|
11079
|
-
|
|
11080
|
-
|
|
11081
|
-
|
|
11082
|
-
|
|
11083
|
-
isError && /* @__PURE__ */ jsx56("div", { className: "w-full p-4 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-error)]", children: /* @__PURE__ */ jsx56("span", { className: "text-sm text-[var(--l-pass-error)]", children: error?.message || "Failed to load nickname info" }) }),
|
|
11084
|
-
nicknameInfo && /* @__PURE__ */ jsx56(NicknameInfoDisplay, { info: nicknameInfo }),
|
|
11085
|
-
nicknameInfo && /* @__PURE__ */ jsx56(
|
|
11086
|
-
NicknameEditForm,
|
|
11087
|
-
{
|
|
11088
|
-
currentHandle: nicknameInfo.handle,
|
|
11089
|
-
canChange: nicknameInfo.canChange,
|
|
11090
|
-
onSuccess: refetch
|
|
11091
|
-
}
|
|
11092
|
-
)
|
|
11093
|
-
] });
|
|
10974
|
+
return /* @__PURE__ */ jsx56(
|
|
10975
|
+
"div",
|
|
10976
|
+
{
|
|
10977
|
+
style: { "--l-pass-scrollbar-mah": `${maxScrollHeight}px` },
|
|
10978
|
+
className: "list-scrollbar-y w-full",
|
|
10979
|
+
children: /* @__PURE__ */ jsxs49(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: [
|
|
10980
|
+
/* @__PURE__ */ jsxs49("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
10981
|
+
/* @__PURE__ */ jsx56(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("settings" /* SETTINGS */), children: /* @__PURE__ */ jsx56(ArrowLeft9, { className: "h-4 w-4" }) }),
|
|
10982
|
+
/* @__PURE__ */ jsx56("span", { className: "text-xl font-semibold", children: "Nickname" })
|
|
10983
|
+
] }),
|
|
10984
|
+
isLoading && /* @__PURE__ */ jsx56("div", { className: "w-full p-8 flex items-center justify-center", children: /* @__PURE__ */ jsx56(Loader16, { className: "w-5 h-5 animate-spin" }) }),
|
|
10985
|
+
nicknameInfo && /* @__PURE__ */ jsx56(NicknameInfoDisplay, { info: nicknameInfo }),
|
|
10986
|
+
nicknameInfo && /* @__PURE__ */ jsx56(
|
|
10987
|
+
NicknameEditForm,
|
|
10988
|
+
{
|
|
10989
|
+
currentHandle: nicknameInfo.handle,
|
|
10990
|
+
canChange: nicknameInfo.canChange,
|
|
10991
|
+
onSuccess: refetch
|
|
10992
|
+
}
|
|
10993
|
+
),
|
|
10994
|
+
isError && /* @__PURE__ */ jsx56(Highlight, { type: "error", children: error?.message || "Failed to load nickname info" })
|
|
10995
|
+
] })
|
|
10996
|
+
}
|
|
10997
|
+
);
|
|
11094
10998
|
}
|
|
11095
10999
|
|
|
11096
11000
|
// src/internal/components/PortfolioMenu/PortfolioMenu.tsx
|
|
11097
|
-
import { useQueryClient as
|
|
11098
|
-
import { AlertCircle as AlertCircle4, ArrowLeft as
|
|
11001
|
+
import { useQueryClient as useQueryClient16 } from "@tanstack/react-query";
|
|
11002
|
+
import { AlertCircle as AlertCircle4, ArrowLeft as ArrowLeft10, Gem, Loader as Loader18, RefreshCw } from "lucide-react";
|
|
11099
11003
|
import { useCallback as useCallback15 } from "react";
|
|
11100
11004
|
|
|
11101
11005
|
// src/internal/hooks/useBlockscoutAssets.ts
|
|
11102
11006
|
init_lumiaPassport();
|
|
11103
11007
|
init_base();
|
|
11104
|
-
import { useCallback as useCallback14, useMemo as useMemo4, useRef as
|
|
11105
|
-
import { useQuery as
|
|
11008
|
+
import { useCallback as useCallback14, useMemo as useMemo4, useRef as useRef12 } from "react";
|
|
11009
|
+
import { useQuery as useQuery13 } from "@tanstack/react-query";
|
|
11106
11010
|
import { useBalance as useBalance2, usePublicClient } from "wagmi";
|
|
11107
11011
|
import { formatUnits as formatUnits2 } from "viem";
|
|
11108
11012
|
import {
|
|
@@ -11249,7 +11153,7 @@ function useBlockscoutAssets(options) {
|
|
|
11249
11153
|
[blockscoutApiUrl]
|
|
11250
11154
|
);
|
|
11251
11155
|
const publicClient2 = usePublicClient({ chainId: lumiaBeam.id });
|
|
11252
|
-
const lastRefreshRef =
|
|
11156
|
+
const lastRefreshRef = useRef12(0);
|
|
11253
11157
|
const {
|
|
11254
11158
|
data: nativeBalanceData,
|
|
11255
11159
|
isLoading: nativeLoading,
|
|
@@ -11267,7 +11171,7 @@ function useBlockscoutAssets(options) {
|
|
|
11267
11171
|
error: tokensError,
|
|
11268
11172
|
refetch: refetchTokens,
|
|
11269
11173
|
dataUpdatedAt
|
|
11270
|
-
} =
|
|
11174
|
+
} = useQuery13({
|
|
11271
11175
|
queryKey: [BLOCKSCOUT_QUERY_KEY, address, blockscoutApiUrl],
|
|
11272
11176
|
queryFn: () => blockscoutClient.getTokenBalances(address),
|
|
11273
11177
|
enabled: !!address && enabled,
|
|
@@ -11280,7 +11184,7 @@ function useBlockscoutAssets(options) {
|
|
|
11280
11184
|
data: nftItems,
|
|
11281
11185
|
isLoading: nftsLoading,
|
|
11282
11186
|
refetch: refetchNfts
|
|
11283
|
-
} =
|
|
11187
|
+
} = useQuery13({
|
|
11284
11188
|
queryKey: [BLOCKSCOUT_QUERY_KEY, "nfts", address, blockscoutApiUrl],
|
|
11285
11189
|
queryFn: () => blockscoutClient.getNfts(address),
|
|
11286
11190
|
enabled: !!address && enabled,
|
|
@@ -11293,7 +11197,7 @@ function useBlockscoutAssets(options) {
|
|
|
11293
11197
|
if (!tokenBalances) return [];
|
|
11294
11198
|
return tokenBalances.filter((tb) => tb.token.type === "ERC-20").map((tb) => tb.token.address);
|
|
11295
11199
|
}, [tokenBalances]);
|
|
11296
|
-
const { data: erc3643Results } =
|
|
11200
|
+
const { data: erc3643Results } = useQuery13({
|
|
11297
11201
|
queryKey: [ERC3643_DETECTION_QUERY_KEY, address, erc20TokenAddresses],
|
|
11298
11202
|
queryFn: async () => {
|
|
11299
11203
|
if (!publicClient2 || erc20TokenAddresses.length === 0) {
|
|
@@ -11410,11 +11314,11 @@ function useBlockscoutAssets(options) {
|
|
|
11410
11314
|
|
|
11411
11315
|
// src/internal/components/PortfolioMenu/PortfolioItem.tsx
|
|
11412
11316
|
init_base();
|
|
11413
|
-
import { useQuery as
|
|
11414
|
-
import { Image as ImageIcon, Loader as
|
|
11317
|
+
import { useQuery as useQuery14, useQueryClient as useQueryClient15 } from "@tanstack/react-query";
|
|
11318
|
+
import { Image as ImageIcon, Loader as Loader17, Shield, Sparkles } from "lucide-react";
|
|
11415
11319
|
import { useState as useState14 } from "react";
|
|
11416
11320
|
import { formatUnits as formatUnits3 } from "viem";
|
|
11417
|
-
import { Fragment as
|
|
11321
|
+
import { Fragment as Fragment20, jsx as jsx57, jsxs as jsxs50 } from "react/jsx-runtime";
|
|
11418
11322
|
function openInExplorer(address) {
|
|
11419
11323
|
window.open(`${LUMIA_EXPLORER_URL}/address/${address}`, "_blank");
|
|
11420
11324
|
}
|
|
@@ -11452,13 +11356,13 @@ function PortfolioItem(props) {
|
|
|
11452
11356
|
const [nftImageError, setNftImageError] = useState14(false);
|
|
11453
11357
|
const [logoError, setLogoError] = useState14(false);
|
|
11454
11358
|
const { assets: projectAssets, showBalanceAs: showBalanceAsSymbol } = useLumiaPassportConfig().config.current.projectAssets || {};
|
|
11455
|
-
const qc =
|
|
11359
|
+
const qc = useQueryClient15();
|
|
11456
11360
|
const { balanceQueryKey } = projectAssets?.find((a) => a.symbol === showBalanceAsSymbol) || {};
|
|
11457
11361
|
const projectAssetBalance = !!balanceQueryKey ? qc.getQueryData(balanceQueryKey) : null;
|
|
11458
11362
|
const isNft = isNftAsset(asset);
|
|
11459
11363
|
const nftImage = getNftImage(asset);
|
|
11460
11364
|
const isSecurity = isSecurityToken(asset);
|
|
11461
|
-
const { data: assetRate, isLoading: isRateLoading } =
|
|
11365
|
+
const { data: assetRate, isLoading: isRateLoading } = useQuery14({
|
|
11462
11366
|
retry: false,
|
|
11463
11367
|
staleTime: 4 * 60 * 1e3,
|
|
11464
11368
|
enabled: !!address && !!isAssetRateAvailable(asset.symbol) && !isProjectAsset && !isNft && !isSecurity,
|
|
@@ -11536,18 +11440,18 @@ function PortfolioItem(props) {
|
|
|
11536
11440
|
!isSecurity && isNft && "type" in asset && /* @__PURE__ */ jsx57("span", { className: "uppercase text-[10px] px-1 bg-[var(--l-pass-bg-info)] rounded-full", children: asset.type === "erc721" ? "ERC-721" : "ERC-1155" }),
|
|
11537
11441
|
isSecurity && /* @__PURE__ */ jsx57("span", { className: "uppercase text-[10px] px-1 bg-[var(--l-pass-bg-warning)] rounded-full", children: "Security Token" })
|
|
11538
11442
|
] }),
|
|
11539
|
-
/* @__PURE__ */ jsx57("div", { className: "w-full flex items-center justify-between font-bold text-lg leading-5", children: isNft ? /* @__PURE__ */ jsxs50(
|
|
11443
|
+
/* @__PURE__ */ jsx57("div", { className: "w-full flex items-center justify-between font-bold text-lg leading-5", children: isNft ? /* @__PURE__ */ jsxs50(Fragment20, { children: [
|
|
11540
11444
|
/* @__PURE__ */ jsx57("span", { className: "truncate max-w-[160px]", title: asset.nftMetadata?.name || asset.symbol, children: asset.nftMetadata?.name || asset.symbol }),
|
|
11541
11445
|
"tokenId" in asset && asset.tokenId && /* @__PURE__ */ jsxs50("span", { className: "text-xs text-[var(--l-pass-fg-muted)] font-normal", children: [
|
|
11542
11446
|
"#",
|
|
11543
11447
|
asset.tokenId.length > 8 ? `${asset.tokenId.slice(0, 6)}...` : asset.tokenId
|
|
11544
11448
|
] })
|
|
11545
|
-
] }) : /* @__PURE__ */ jsxs50(
|
|
11449
|
+
] }) : /* @__PURE__ */ jsxs50(Fragment20, { children: [
|
|
11546
11450
|
/* @__PURE__ */ jsxs50("span", { children: [
|
|
11547
11451
|
/* @__PURE__ */ jsx57("span", { children: formatPrice(Number(renderBalance)) }),
|
|
11548
11452
|
/* @__PURE__ */ jsx57("span", { children: " " + asset.symbol })
|
|
11549
11453
|
] }),
|
|
11550
|
-
isRateLoading && /* @__PURE__ */ jsx57(
|
|
11454
|
+
isRateLoading && /* @__PURE__ */ jsx57(Loader17, { className: "h-4 w-4 animate-spin" }),
|
|
11551
11455
|
!isRateLoading && !!usdRenderBalance && /* @__PURE__ */ jsxs50("span", { children: [
|
|
11552
11456
|
/* @__PURE__ */ jsx57("span", { children: "$" }),
|
|
11553
11457
|
/* @__PURE__ */ jsx57("span", { children: formatPrice(usdRenderBalance) })
|
|
@@ -11563,7 +11467,7 @@ function PortfolioItem(props) {
|
|
|
11563
11467
|
import { jsx as jsx58, jsxs as jsxs51 } from "react/jsx-runtime";
|
|
11564
11468
|
function PortfolioMenu() {
|
|
11565
11469
|
const { assets: projectAssets = [] } = useLumiaPassportConfig().config.current?.projectAssets || {};
|
|
11566
|
-
const qc =
|
|
11470
|
+
const qc = useQueryClient16();
|
|
11567
11471
|
const address = useLumiaPassportSession((st) => st.address);
|
|
11568
11472
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
11569
11473
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
@@ -11590,7 +11494,7 @@ function PortfolioMenu() {
|
|
|
11590
11494
|
className: "list-scrollbar-y w-full p-[var(--l-pass-pd)]",
|
|
11591
11495
|
children: /* @__PURE__ */ jsxs51(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: [
|
|
11592
11496
|
/* @__PURE__ */ jsxs51("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
11593
|
-
/* @__PURE__ */ jsx58(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx58(
|
|
11497
|
+
/* @__PURE__ */ jsx58(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx58(ArrowLeft10, { className: "h-4 w-4" }) }),
|
|
11594
11498
|
/* @__PURE__ */ jsx58("span", { className: "text-xl font-semibold", children: "Your Assets" }),
|
|
11595
11499
|
/* @__PURE__ */ jsx58(
|
|
11596
11500
|
Button,
|
|
@@ -11600,11 +11504,11 @@ function PortfolioMenu() {
|
|
|
11600
11504
|
size: "icon",
|
|
11601
11505
|
onClick: refreshAllAssetsBalances,
|
|
11602
11506
|
disabled: isBlockscoutLoading,
|
|
11603
|
-
children: isBlockscoutLoading ? /* @__PURE__ */ jsx58(
|
|
11507
|
+
children: isBlockscoutLoading ? /* @__PURE__ */ jsx58(Loader18, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx58(RefreshCw, { className: "h-4 w-4" })
|
|
11604
11508
|
}
|
|
11605
11509
|
)
|
|
11606
11510
|
] }),
|
|
11607
|
-
isBlockscoutLoading && /* @__PURE__ */ jsx58("div", { className: "w-full flex items-center justify-center gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: /* @__PURE__ */ jsx58(
|
|
11511
|
+
isBlockscoutLoading && /* @__PURE__ */ jsx58("div", { className: "w-full flex items-center justify-center gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: /* @__PURE__ */ jsx58(Loader18, { className: "h-5 w-5 animate-spin" }) }),
|
|
11608
11512
|
!isBlockscoutLoading && blockscoutAssets?.length === 0 && /* @__PURE__ */ jsxs51(Highlight, { type: "info", className: "flex flex-col items-center justify-center gap-[var(--l-pass-gap)]", children: [
|
|
11609
11513
|
/* @__PURE__ */ jsx58(Gem, { className: "w-8 h-8" }),
|
|
11610
11514
|
/* @__PURE__ */ jsx58("span", { className: "block", children: "No assets found" })
|
|
@@ -11630,9 +11534,9 @@ function PortfolioMenu() {
|
|
|
11630
11534
|
// src/internal/components/SecurityMenu/SecurityMenu.tsx
|
|
11631
11535
|
init_auth();
|
|
11632
11536
|
init_keyshare();
|
|
11633
|
-
import { useQuery as
|
|
11537
|
+
import { useQuery as useQuery15, useQueryClient as useQueryClient17 } from "@tanstack/react-query";
|
|
11634
11538
|
import dayjs3 from "dayjs";
|
|
11635
|
-
import { ArrowLeft as
|
|
11539
|
+
import { ArrowLeft as ArrowLeft11, Loader as Loader21, Trash2 as Trash22 } from "lucide-react";
|
|
11636
11540
|
import { useState as useState15 } from "react";
|
|
11637
11541
|
init_iframe_manager();
|
|
11638
11542
|
init_vaultClient();
|
|
@@ -11641,7 +11545,7 @@ init_vaultClient();
|
|
|
11641
11545
|
var KEYSHARE_RECOVERY_STATS_QUERY = "keyshare-recovery-stats-query";
|
|
11642
11546
|
|
|
11643
11547
|
// src/internal/components/SecurityMenu/Keyshare/Keyshare.tsx
|
|
11644
|
-
import { Cloud as Cloud4, Laptop, Loader as
|
|
11548
|
+
import { Cloud as Cloud4, Laptop, Loader as Loader20, RefreshCw as RefreshCw2, Server as Server3 } from "lucide-react";
|
|
11645
11549
|
|
|
11646
11550
|
// src/internal/assets/NegativeIcon.tsx
|
|
11647
11551
|
import { jsx as jsx59, jsxs as jsxs52 } from "react/jsx-runtime";
|
|
@@ -11658,11 +11562,11 @@ function NegativeIcon(props) {
|
|
|
11658
11562
|
init_vaultClient();
|
|
11659
11563
|
|
|
11660
11564
|
// src/internal/components/SecurityMenu/Keyshare/KeyshareStatus.tsx
|
|
11661
|
-
import { Loader as
|
|
11565
|
+
import { Loader as Loader19 } from "lucide-react";
|
|
11662
11566
|
import { jsx as jsx60, jsxs as jsxs53 } from "react/jsx-runtime";
|
|
11663
11567
|
function KeyshareStatus(props) {
|
|
11664
11568
|
const { isLoading, content, icon: Icon2, children } = props;
|
|
11665
|
-
if (isLoading) return /* @__PURE__ */ jsx60(
|
|
11569
|
+
if (isLoading) return /* @__PURE__ */ jsx60(Loader19, { className: "w-4 h-4 animate-spin text-[var(--l-pass-fg-muted)]" });
|
|
11666
11570
|
return /* @__PURE__ */ jsxs53("div", { className: "group relative w-full h-full", children: [
|
|
11667
11571
|
children,
|
|
11668
11572
|
/* @__PURE__ */ jsx60(
|
|
@@ -11696,7 +11600,7 @@ function KeyshareStatus(props) {
|
|
|
11696
11600
|
// src/internal/components/SecurityMenu/Keyshare/LastBackup.tsx
|
|
11697
11601
|
import dayjs2 from "dayjs";
|
|
11698
11602
|
import { Cloud as Cloud3, HardDrive, Server as Server2 } from "lucide-react";
|
|
11699
|
-
import { Fragment as
|
|
11603
|
+
import { Fragment as Fragment21, jsx as jsx61, jsxs as jsxs54 } from "react/jsx-runtime";
|
|
11700
11604
|
function parseOS(ua) {
|
|
11701
11605
|
if (!ua) return null;
|
|
11702
11606
|
if (ua.includes("Mac OS X")) return "macOS";
|
|
@@ -11723,7 +11627,7 @@ function LastBackup(props) {
|
|
|
11723
11627
|
/* @__PURE__ */ jsx61(Server2, { className: "w-4 h-4 inline" }),
|
|
11724
11628
|
/* @__PURE__ */ jsx61("span", { children: "Last Keyshare Vault Backup" })
|
|
11725
11629
|
] }),
|
|
11726
|
-
recoveryCreatedAt && /* @__PURE__ */ jsxs54(
|
|
11630
|
+
recoveryCreatedAt && /* @__PURE__ */ jsxs54(Fragment21, { children: [
|
|
11727
11631
|
/* @__PURE__ */ jsx61("span", { children: dayjs2(recoveryCreatedAt).format("MMMM DD, YYYY HH:mm") }),
|
|
11728
11632
|
/* @__PURE__ */ jsx61("span", { children: `${recoveryBrowser || "UNKNOWN"} browser at ${recoveryDeviceName || "UNKNOWN"} device under ${parseOS(recoveryUa) || "UNKNOWN"} OS` })
|
|
11729
11633
|
] }),
|
|
@@ -11745,14 +11649,14 @@ function LastBackup(props) {
|
|
|
11745
11649
|
}
|
|
11746
11650
|
|
|
11747
11651
|
// src/internal/components/SecurityMenu/Keyshare/Keyshare.tsx
|
|
11748
|
-
import { Fragment as
|
|
11652
|
+
import { Fragment as Fragment22, jsx as jsx62, jsxs as jsxs55 } from "react/jsx-runtime";
|
|
11749
11653
|
function Keyshare(props) {
|
|
11750
11654
|
const { userId, serverHasKeyshare, localInfo, hasServerBackup, createdRecoveryStats, isLoading, refresh } = props;
|
|
11751
11655
|
const backup = userId ? getBackupStatus(userId) : { server: { enabled: false }, cloud: { enabled: false }, local: { enabled: false } };
|
|
11752
|
-
return /* @__PURE__ */ jsxs55(
|
|
11656
|
+
return /* @__PURE__ */ jsxs55(Fragment22, { children: [
|
|
11753
11657
|
/* @__PURE__ */ jsxs55("div", { className: "flex items-center justify-between gap-[var(--l-pass-gap)]", children: [
|
|
11754
11658
|
/* @__PURE__ */ jsx62("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "Keyshare Status" }),
|
|
11755
|
-
/* @__PURE__ */ jsx62(Button, { variant: "ghost", size: "icon", title: "Refresh", disabled: isLoading, onClick: refresh, children: isLoading ? /* @__PURE__ */ jsx62(
|
|
11659
|
+
/* @__PURE__ */ jsx62(Button, { variant: "ghost", size: "icon", title: "Refresh", disabled: isLoading, onClick: refresh, children: isLoading ? /* @__PURE__ */ jsx62(Loader20, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx62(RefreshCw2, { className: "h-4 w-4" }) })
|
|
11756
11660
|
] }),
|
|
11757
11661
|
/* @__PURE__ */ jsxs55("div", { className: "grid grid-cols-3 gap-[var(--l-pass-gap)] px-[var(--l-pass-gap)]", children: [
|
|
11758
11662
|
/* @__PURE__ */ jsx62(
|
|
@@ -11816,16 +11720,16 @@ function Keyshare(props) {
|
|
|
11816
11720
|
}
|
|
11817
11721
|
|
|
11818
11722
|
// src/internal/components/SecurityMenu/SecurityMenu.tsx
|
|
11819
|
-
import { Fragment as
|
|
11723
|
+
import { Fragment as Fragment23, jsx as jsx63, jsxs as jsxs56 } from "react/jsx-runtime";
|
|
11820
11724
|
function SecurityMenu() {
|
|
11821
|
-
const qc =
|
|
11725
|
+
const qc = useQueryClient17();
|
|
11822
11726
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
11823
11727
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
11824
11728
|
const userId = jwtTokenManager2.getUserId();
|
|
11825
11729
|
const serverHasKeyshare = jwtTokenManager2.getHasKeyshare() ?? false;
|
|
11826
11730
|
const [isRemoving, setIsRemoving] = useState15(false);
|
|
11827
11731
|
const [appToRemove, setAppToRemove] = useState15(null);
|
|
11828
|
-
const { data: recoveryData, isFetching: isRecoveryLoading } =
|
|
11732
|
+
const { data: recoveryData, isFetching: isRecoveryLoading } = useQuery15({
|
|
11829
11733
|
enabled: !!userId,
|
|
11830
11734
|
queryKey: [KEYSHARE_RECOVERY_STATS_QUERY, userId],
|
|
11831
11735
|
queryFn: async () => {
|
|
@@ -11884,12 +11788,12 @@ function SecurityMenu() {
|
|
|
11884
11788
|
if (!!appToRemove) setAppToRemove(null);
|
|
11885
11789
|
else setPage("settings" /* SETTINGS */);
|
|
11886
11790
|
},
|
|
11887
|
-
children: /* @__PURE__ */ jsx63(
|
|
11791
|
+
children: /* @__PURE__ */ jsx63(ArrowLeft11, { className: "h-4 w-4" })
|
|
11888
11792
|
}
|
|
11889
11793
|
),
|
|
11890
11794
|
/* @__PURE__ */ jsx63("span", { className: "text-xl font-semibold", children: "Security" })
|
|
11891
11795
|
] }),
|
|
11892
|
-
!appToRemove && /* @__PURE__ */ jsxs56(
|
|
11796
|
+
!appToRemove && /* @__PURE__ */ jsxs56(Fragment23, { children: [
|
|
11893
11797
|
/* @__PURE__ */ jsx63(
|
|
11894
11798
|
Keyshare,
|
|
11895
11799
|
{
|
|
@@ -11902,7 +11806,7 @@ function SecurityMenu() {
|
|
|
11902
11806
|
refresh: () => qc.invalidateQueries({ queryKey: [KEYSHARE_RECOVERY_STATS_QUERY, userId] })
|
|
11903
11807
|
}
|
|
11904
11808
|
),
|
|
11905
|
-
trustedApps.length > 0 && /* @__PURE__ */ jsxs56(
|
|
11809
|
+
trustedApps.length > 0 && /* @__PURE__ */ jsxs56(Fragment23, { children: [
|
|
11906
11810
|
/* @__PURE__ */ jsxs56("div", { className: "w-full space-y-2", children: [
|
|
11907
11811
|
/* @__PURE__ */ jsx63("div", { className: "font-medium text-xs text-[var(--l-pass-fg)]", children: `Trusted Applications (${trustedApps.length}):` }),
|
|
11908
11812
|
/* @__PURE__ */ jsx63("div", { className: "w-full space-y-1", children: trustedApps.map((app, index) => /* @__PURE__ */ jsxs56(
|
|
@@ -11978,7 +11882,7 @@ function SecurityMenu() {
|
|
|
11978
11882
|
className: "flex-1 bg-[var(--l-pass-error)] hover:bg-[var(--l-pass-error)]/60 active:bg-[var(--l-pass-error)]/40",
|
|
11979
11883
|
onClick: handleRemoveTrustedApp,
|
|
11980
11884
|
disabled: isRemoving,
|
|
11981
|
-
children: isRemoving ? /* @__PURE__ */ jsx63(
|
|
11885
|
+
children: isRemoving ? /* @__PURE__ */ jsx63(Loader21, { className: "h-4 w-4 animate-spin" }) : "Remove"
|
|
11982
11886
|
}
|
|
11983
11887
|
)
|
|
11984
11888
|
] })
|
|
@@ -11989,21 +11893,74 @@ function SecurityMenu() {
|
|
|
11989
11893
|
}
|
|
11990
11894
|
|
|
11991
11895
|
// src/internal/components/SendRecieveMenu/SendLumiaMenu.tsx
|
|
11992
|
-
import { AlertCircle as AlertCircle5, ArrowLeft as
|
|
11993
|
-
import { useEffect as
|
|
11896
|
+
import { AlertCircle as AlertCircle5, ArrowLeft as ArrowLeft12, AtSign, CheckCircle2 as CheckCircle23, Loader as Loader22, Wallet as Wallet3 } from "lucide-react";
|
|
11897
|
+
import { useEffect as useEffect25, useState as useState18 } from "react";
|
|
11994
11898
|
import { isAddress as isAddress2 } from "viem";
|
|
11995
11899
|
import { useBalance as useBalance4 } from "wagmi";
|
|
11996
11900
|
|
|
11901
|
+
// src/hooks/useNicknameResolve.ts
|
|
11902
|
+
init_nickname();
|
|
11903
|
+
init_profile();
|
|
11904
|
+
import { useQuery as useQuery16 } from "@tanstack/react-query";
|
|
11905
|
+
import { useState as useState16, useEffect as useEffect24 } from "react";
|
|
11906
|
+
var DEBOUNCE_MS2 = 300;
|
|
11907
|
+
function looksLikeNickname(input) {
|
|
11908
|
+
if (!input) return false;
|
|
11909
|
+
if (input.startsWith("0x")) return false;
|
|
11910
|
+
if (input.startsWith("@")) return true;
|
|
11911
|
+
const normalized = input.toLowerCase().trim();
|
|
11912
|
+
return /^[a-z0-9_]+$/.test(normalized);
|
|
11913
|
+
}
|
|
11914
|
+
function useNicknameResolve(input, enabled = true) {
|
|
11915
|
+
const [debouncedInput, setDebouncedInput] = useState16("");
|
|
11916
|
+
const [isDebouncing, setIsDebouncing] = useState16(false);
|
|
11917
|
+
const normalized = normalizeNickname(input);
|
|
11918
|
+
const isNicknameInput = looksLikeNickname(input) && normalized.length >= 3;
|
|
11919
|
+
useEffect24(() => {
|
|
11920
|
+
if (!isNicknameInput || !enabled) {
|
|
11921
|
+
setDebouncedInput("");
|
|
11922
|
+
setIsDebouncing(false);
|
|
11923
|
+
return;
|
|
11924
|
+
}
|
|
11925
|
+
setIsDebouncing(true);
|
|
11926
|
+
const timer = setTimeout(() => {
|
|
11927
|
+
setDebouncedInput(normalized);
|
|
11928
|
+
setIsDebouncing(false);
|
|
11929
|
+
}, DEBOUNCE_MS2);
|
|
11930
|
+
return () => {
|
|
11931
|
+
clearTimeout(timer);
|
|
11932
|
+
};
|
|
11933
|
+
}, [normalized, isNicknameInput, enabled]);
|
|
11934
|
+
const query = useQuery16({
|
|
11935
|
+
queryKey: QUERY_KEYS.nicknameResolve(debouncedInput),
|
|
11936
|
+
queryFn: () => resolveNickname(debouncedInput),
|
|
11937
|
+
enabled: enabled && isNicknameInput && debouncedInput.length > 0,
|
|
11938
|
+
staleTime: 1e3 * 60 * 5,
|
|
11939
|
+
// 5 minutes - addresses don't change often
|
|
11940
|
+
retry: 1
|
|
11941
|
+
});
|
|
11942
|
+
const isNotFound = query.isError && query.error?.code === "NICKNAME_NOT_FOUND";
|
|
11943
|
+
return {
|
|
11944
|
+
data: query.data,
|
|
11945
|
+
isLoading: query.isLoading,
|
|
11946
|
+
isResolving: isDebouncing || query.isFetching,
|
|
11947
|
+
isError: query.isError,
|
|
11948
|
+
isNotFound,
|
|
11949
|
+
error: query.error,
|
|
11950
|
+
resolvedAddress: query.data?.walletAddress || null
|
|
11951
|
+
};
|
|
11952
|
+
}
|
|
11953
|
+
|
|
11997
11954
|
// src/hooks/useSendTransaction.ts
|
|
11998
|
-
import { useCallback as useCallback16, useState as
|
|
11955
|
+
import { useCallback as useCallback16, useState as useState17 } from "react";
|
|
11999
11956
|
import { isAddress, parseEther as parseEther2 } from "viem";
|
|
12000
11957
|
init_account();
|
|
12001
11958
|
function useSendTransaction() {
|
|
12002
11959
|
const session = useLumiaPassportSession((st) => st.session);
|
|
12003
11960
|
const address = useLumiaPassportSession((st) => st.address);
|
|
12004
|
-
const [isLoading, setIsLoading] =
|
|
12005
|
-
const [error, setError] =
|
|
12006
|
-
const [userOpHash, setUserOpHash] =
|
|
11961
|
+
const [isLoading, setIsLoading] = useState17(false);
|
|
11962
|
+
const [error, setError] = useState17(null);
|
|
11963
|
+
const [userOpHash, setUserOpHash] = useState17(null);
|
|
12007
11964
|
const sendTransaction = useCallback16(
|
|
12008
11965
|
async (params) => {
|
|
12009
11966
|
if (!session || !address) {
|
|
@@ -12058,59 +12015,6 @@ function useSendTransaction() {
|
|
|
12058
12015
|
};
|
|
12059
12016
|
}
|
|
12060
12017
|
|
|
12061
|
-
// src/hooks/useNicknameResolve.ts
|
|
12062
|
-
init_nickname();
|
|
12063
|
-
init_profile();
|
|
12064
|
-
import { useQuery as useQuery17 } from "@tanstack/react-query";
|
|
12065
|
-
import { useState as useState17, useEffect as useEffect27 } from "react";
|
|
12066
|
-
var DEBOUNCE_MS2 = 300;
|
|
12067
|
-
function looksLikeNickname(input) {
|
|
12068
|
-
if (!input) return false;
|
|
12069
|
-
if (input.startsWith("0x")) return false;
|
|
12070
|
-
if (input.startsWith("@")) return true;
|
|
12071
|
-
const normalized = input.toLowerCase().trim();
|
|
12072
|
-
return /^[a-z0-9_]+$/.test(normalized);
|
|
12073
|
-
}
|
|
12074
|
-
function useNicknameResolve(input, enabled = true) {
|
|
12075
|
-
const [debouncedInput, setDebouncedInput] = useState17("");
|
|
12076
|
-
const [isDebouncing, setIsDebouncing] = useState17(false);
|
|
12077
|
-
const normalized = normalizeNickname(input);
|
|
12078
|
-
const isNicknameInput = looksLikeNickname(input) && normalized.length >= 3;
|
|
12079
|
-
useEffect27(() => {
|
|
12080
|
-
if (!isNicknameInput || !enabled) {
|
|
12081
|
-
setDebouncedInput("");
|
|
12082
|
-
setIsDebouncing(false);
|
|
12083
|
-
return;
|
|
12084
|
-
}
|
|
12085
|
-
setIsDebouncing(true);
|
|
12086
|
-
const timer = setTimeout(() => {
|
|
12087
|
-
setDebouncedInput(normalized);
|
|
12088
|
-
setIsDebouncing(false);
|
|
12089
|
-
}, DEBOUNCE_MS2);
|
|
12090
|
-
return () => {
|
|
12091
|
-
clearTimeout(timer);
|
|
12092
|
-
};
|
|
12093
|
-
}, [normalized, isNicknameInput, enabled]);
|
|
12094
|
-
const query = useQuery17({
|
|
12095
|
-
queryKey: QUERY_KEYS.nicknameResolve(debouncedInput),
|
|
12096
|
-
queryFn: () => resolveNickname(debouncedInput),
|
|
12097
|
-
enabled: enabled && isNicknameInput && debouncedInput.length > 0,
|
|
12098
|
-
staleTime: 1e3 * 60 * 5,
|
|
12099
|
-
// 5 minutes - addresses don't change often
|
|
12100
|
-
retry: 1
|
|
12101
|
-
});
|
|
12102
|
-
const isNotFound = query.isError && query.error?.code === "NICKNAME_NOT_FOUND";
|
|
12103
|
-
return {
|
|
12104
|
-
data: query.data,
|
|
12105
|
-
isLoading: query.isLoading,
|
|
12106
|
-
isResolving: isDebouncing || query.isFetching,
|
|
12107
|
-
isError: query.isError,
|
|
12108
|
-
isNotFound,
|
|
12109
|
-
error: query.error,
|
|
12110
|
-
resolvedAddress: query.data?.walletAddress || null
|
|
12111
|
-
};
|
|
12112
|
-
}
|
|
12113
|
-
|
|
12114
12018
|
// src/modules/assets.ts
|
|
12115
12019
|
init_base();
|
|
12116
12020
|
import React6 from "react";
|
|
@@ -12274,7 +12178,7 @@ function useTokenBalance(tokenAddress, userAddress) {
|
|
|
12274
12178
|
|
|
12275
12179
|
// src/internal/components/SendRecieveMenu/SendLumiaMenu.tsx
|
|
12276
12180
|
init_base();
|
|
12277
|
-
import { Fragment as
|
|
12181
|
+
import { Fragment as Fragment24, jsx as jsx64, jsxs as jsxs57 } from "react/jsx-runtime";
|
|
12278
12182
|
function SendLumiaMenu() {
|
|
12279
12183
|
const page = useLayoutDataStore((st) => st.page);
|
|
12280
12184
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
@@ -12291,11 +12195,16 @@ function SendLumiaMenu() {
|
|
|
12291
12195
|
const [txStep, setTxStep] = useState18("input");
|
|
12292
12196
|
const [validationError, setValidationError] = useState18(null);
|
|
12293
12197
|
const isNicknameInput = looksLikeNickname(recipient);
|
|
12294
|
-
const {
|
|
12198
|
+
const {
|
|
12199
|
+
resolvedAddress,
|
|
12200
|
+
isResolving,
|
|
12201
|
+
isNotFound,
|
|
12202
|
+
data: nicknameData
|
|
12203
|
+
} = useNicknameResolve(recipient, isNicknameInput);
|
|
12295
12204
|
const effectiveAddress = isNicknameInput ? resolvedAddress : recipient;
|
|
12296
12205
|
const nativeAsset = assets.find((a) => a.type === "native");
|
|
12297
12206
|
const balance = nativeAsset ? parseFloat(nativeAsset.formattedBalance) : 0;
|
|
12298
|
-
|
|
12207
|
+
useEffect25(() => {
|
|
12299
12208
|
if (open) {
|
|
12300
12209
|
setTxStep("input");
|
|
12301
12210
|
setValidationError(null);
|
|
@@ -12366,21 +12275,21 @@ function SendLumiaMenu() {
|
|
|
12366
12275
|
};
|
|
12367
12276
|
return /* @__PURE__ */ jsxs57("div", { className: "w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]", children: [
|
|
12368
12277
|
/* @__PURE__ */ jsxs57("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
12369
|
-
txStep === "input" && /* @__PURE__ */ jsx64(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx64(
|
|
12278
|
+
txStep === "input" && /* @__PURE__ */ jsx64(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx64(ArrowLeft12, { className: "h-4 w-4" }) }),
|
|
12370
12279
|
/* @__PURE__ */ jsx64("span", { className: "text-xl font-semibold", children: "Send LUMIA" })
|
|
12371
12280
|
] }),
|
|
12372
|
-
txStep === "input" && /* @__PURE__ */ jsxs57(
|
|
12281
|
+
txStep === "input" && /* @__PURE__ */ jsxs57(Fragment24, { children: [
|
|
12373
12282
|
/* @__PURE__ */ jsxs57("div", { className: "w-full flex flex-col gap-2", children: [
|
|
12374
12283
|
/* @__PURE__ */ jsx64("span", { className: "block text-sm font-medium mb-2 text-[var(--l-pass-fg-muted)]", children: "Recipient" }),
|
|
12375
12284
|
/* @__PURE__ */ jsx64(
|
|
12376
12285
|
Input,
|
|
12377
12286
|
{
|
|
12378
|
-
Icon: isNicknameInput ?
|
|
12287
|
+
Icon: isNicknameInput ? AtSign : Wallet3,
|
|
12379
12288
|
type: "text",
|
|
12380
12289
|
value: recipient,
|
|
12381
12290
|
onChange: (e) => setRecipient(e.target.value),
|
|
12382
12291
|
placeholder: "0x... or @nickname",
|
|
12383
|
-
element: isNicknameInput && isResolving ? /* @__PURE__ */ jsx64(
|
|
12292
|
+
element: isNicknameInput && isResolving ? /* @__PURE__ */ jsx64(Loader22, { className: "w-4 h-4 animate-spin text-[var(--l-pass-fg-muted)]" }) : null
|
|
12384
12293
|
}
|
|
12385
12294
|
),
|
|
12386
12295
|
isNicknameInput && resolvedAddress && !isResolving && /* @__PURE__ */ jsxs57("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-success)]", children: [
|
|
@@ -12401,30 +12310,18 @@ function SendLumiaMenu() {
|
|
|
12401
12310
|
" LUMIA"
|
|
12402
12311
|
] })
|
|
12403
12312
|
] }),
|
|
12404
|
-
/* @__PURE__ */
|
|
12405
|
-
|
|
12406
|
-
|
|
12407
|
-
|
|
12408
|
-
|
|
12409
|
-
|
|
12410
|
-
|
|
12411
|
-
|
|
12412
|
-
|
|
12413
|
-
|
|
12414
|
-
|
|
12415
|
-
|
|
12416
|
-
/* @__PURE__ */ jsx64(
|
|
12417
|
-
Button,
|
|
12418
|
-
{
|
|
12419
|
-
onClick: handleMaxAmount,
|
|
12420
|
-
variant: "ghost",
|
|
12421
|
-
size: "medium",
|
|
12422
|
-
style: { transform: "translateY(-50%)" },
|
|
12423
|
-
className: "absolute right-2 top-1/2",
|
|
12424
|
-
children: "MAX"
|
|
12425
|
-
}
|
|
12426
|
-
)
|
|
12427
|
-
] })
|
|
12313
|
+
/* @__PURE__ */ jsx64(
|
|
12314
|
+
Input,
|
|
12315
|
+
{
|
|
12316
|
+
Icon: LumiaIcon,
|
|
12317
|
+
type: "number",
|
|
12318
|
+
value: amount,
|
|
12319
|
+
onChange: (e) => setAmount(e.target.value),
|
|
12320
|
+
placeholder: "0.0",
|
|
12321
|
+
step: "0.000001",
|
|
12322
|
+
element: /* @__PURE__ */ jsx64(Button, { onClick: handleMaxAmount, variant: "ghost", size: "medium", children: "MAX" })
|
|
12323
|
+
}
|
|
12324
|
+
)
|
|
12428
12325
|
] }),
|
|
12429
12326
|
(validationError || error) && /* @__PURE__ */ jsxs57("div", { className: "flex items-center gap-2 p-3 bg-[var(--l-pass-bg-error)] text-[var(--l-pass-error)] rounded-[var(--l-pass-el-bdrs)]", children: [
|
|
12430
12327
|
/* @__PURE__ */ jsx64(AlertCircle5, { className: "h-4 w-4" }),
|
|
@@ -12432,7 +12329,7 @@ function SendLumiaMenu() {
|
|
|
12432
12329
|
] }),
|
|
12433
12330
|
/* @__PURE__ */ jsx64(Button, { onClick: handleSend, disabled: isLoading, className: "w-full", size: "large", children: "Continue" })
|
|
12434
12331
|
] }),
|
|
12435
|
-
txStep === "confirm" && effectiveAddress && /* @__PURE__ */ jsxs57(
|
|
12332
|
+
txStep === "confirm" && effectiveAddress && /* @__PURE__ */ jsxs57(Fragment24, { children: [
|
|
12436
12333
|
/* @__PURE__ */ jsxs57("div", { className: "bg-gray-50 rounded-lg p-4", children: [
|
|
12437
12334
|
/* @__PURE__ */ jsx64("h3", { className: "font-medium mb-3", children: "Transaction Details" }),
|
|
12438
12335
|
/* @__PURE__ */ jsxs57("div", { className: "space-y-2 text-sm", children: [
|
|
@@ -12459,19 +12356,19 @@ function SendLumiaMenu() {
|
|
|
12459
12356
|
/* @__PURE__ */ jsxs57("div", { className: "flex gap-2", children: [
|
|
12460
12357
|
/* @__PURE__ */ jsx64(Button, { onClick: () => setTxStep("input"), variant: "outline", className: "flex-1", size: "large", children: "Back" }),
|
|
12461
12358
|
/* @__PURE__ */ jsxs57(Button, { onClick: handleConfirm, disabled: isLoading, className: "flex-1", size: "large", children: [
|
|
12462
|
-
isLoading && /* @__PURE__ */ jsx64(
|
|
12359
|
+
isLoading && /* @__PURE__ */ jsx64(Loader22, { className: "h-4 w-4 animate-spin" }),
|
|
12463
12360
|
"Confirm"
|
|
12464
12361
|
] })
|
|
12465
12362
|
] })
|
|
12466
12363
|
] }),
|
|
12467
12364
|
txStep === "pending" && /* @__PURE__ */ jsxs57("div", { className: "py-8 text-center space-y-4", children: [
|
|
12468
|
-
/* @__PURE__ */ jsx64(
|
|
12365
|
+
/* @__PURE__ */ jsx64(Loader22, { className: "h-5 w-5 animate-spin mx-auto" }),
|
|
12469
12366
|
/* @__PURE__ */ jsxs57("div", { children: [
|
|
12470
12367
|
/* @__PURE__ */ jsx64("span", { className: "block font-medium", children: "Transaction Pending" }),
|
|
12471
12368
|
/* @__PURE__ */ jsx64("span", { className: "block text-sm mt-1", children: "Please wait while we process your transaction" })
|
|
12472
12369
|
] })
|
|
12473
12370
|
] }),
|
|
12474
|
-
txStep === "success" && userOpHash && /* @__PURE__ */ jsxs57(
|
|
12371
|
+
txStep === "success" && userOpHash && /* @__PURE__ */ jsxs57(Fragment24, { children: [
|
|
12475
12372
|
/* @__PURE__ */ jsxs57("div", { className: "text-center py-4", children: [
|
|
12476
12373
|
/* @__PURE__ */ jsx64(CheckCircle23, { className: "h-12 w-12 text-[var(--l-pass-success)] mx-auto mb-3" }),
|
|
12477
12374
|
/* @__PURE__ */ jsx64("p", { className: "font-medium", children: "Transaction Sent!" }),
|
|
@@ -12484,10 +12381,10 @@ function SendLumiaMenu() {
|
|
|
12484
12381
|
|
|
12485
12382
|
// src/internal/components/SendRecieveMenu/ReceiveLumiaMenu.tsx
|
|
12486
12383
|
init_clients();
|
|
12487
|
-
import { ArrowLeft as
|
|
12384
|
+
import { ArrowLeft as ArrowLeft13, CheckCircle2 as CheckCircle24, Copy as Copy2, Loader as Loader23 } from "lucide-react";
|
|
12488
12385
|
import QRCode from "qrcode";
|
|
12489
|
-
import { useCallback as useCallback17, useEffect as
|
|
12490
|
-
import { Fragment as
|
|
12386
|
+
import { useCallback as useCallback17, useEffect as useEffect26, useState as useState19 } from "react";
|
|
12387
|
+
import { Fragment as Fragment25, jsx as jsx65, jsxs as jsxs58 } from "react/jsx-runtime";
|
|
12491
12388
|
function ReceiveLumiaMenu() {
|
|
12492
12389
|
const address = useLumiaPassportSession((st) => st.address);
|
|
12493
12390
|
const page = useLayoutDataStore((st) => st.page);
|
|
@@ -12496,7 +12393,7 @@ function ReceiveLumiaMenu() {
|
|
|
12496
12393
|
const open = page === "receive";
|
|
12497
12394
|
const [qrCodeUrl, setQrCodeUrl] = useState19("");
|
|
12498
12395
|
const [copied, setCopied] = useState19(false);
|
|
12499
|
-
|
|
12396
|
+
useEffect26(() => {
|
|
12500
12397
|
if (open && address) {
|
|
12501
12398
|
QRCode.toDataURL(address, {
|
|
12502
12399
|
width: 200,
|
|
@@ -12529,20 +12426,20 @@ function ReceiveLumiaMenu() {
|
|
|
12529
12426
|
className: "list-scrollbar-y w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]",
|
|
12530
12427
|
children: [
|
|
12531
12428
|
/* @__PURE__ */ jsxs58("div", { className: "w-full flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
12532
|
-
/* @__PURE__ */ jsx65(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx65(
|
|
12429
|
+
/* @__PURE__ */ jsx65(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx65(ArrowLeft13, { className: "h-4 w-4" }) }),
|
|
12533
12430
|
/* @__PURE__ */ jsx65("span", { className: "text-xl font-semibold", children: "Receive LUMIA" })
|
|
12534
12431
|
] }),
|
|
12535
12432
|
/* @__PURE__ */ jsxs58(Highlight, { className: "text-center", type: "warning", children: [
|
|
12536
12433
|
/* @__PURE__ */ jsx65("strong", { className: "block w-full", children: `Network: ${lumiaBeam.name}` }),
|
|
12537
12434
|
/* @__PURE__ */ jsx65("span", { className: "block w-full", children: "Ensure sender is on the same network" })
|
|
12538
12435
|
] }),
|
|
12539
|
-
/* @__PURE__ */ jsx65("div", { className: "flex items-center justify-center p-[var(--l-pass-pd)]", style: { minHeight: "216px" }, children: qrCodeUrl ? /* @__PURE__ */ jsx65("img", { src: qrCodeUrl, alt: "Wallet QR Code", className: "w-48 h-48" }) : /* @__PURE__ */ jsx65(
|
|
12436
|
+
/* @__PURE__ */ jsx65("div", { className: "flex items-center justify-center p-[var(--l-pass-pd)]", style: { minHeight: "216px" }, children: qrCodeUrl ? /* @__PURE__ */ jsx65("img", { src: qrCodeUrl, alt: "Wallet QR Code", className: "w-48 h-48" }) : /* @__PURE__ */ jsx65(Loader23, { className: "w-5 h-5 animate-spin text-[var(--l-pass-fg-muted)]" }) }),
|
|
12540
12437
|
/* @__PURE__ */ jsxs58(Highlight, { type: "info", children: [
|
|
12541
12438
|
/* @__PURE__ */ jsx65("span", { className: "block w-full text-center font-mono text-[10px] break-all mb-2", children: address }),
|
|
12542
|
-
/* @__PURE__ */ jsx65(Button, { onClick: handleCopy, className: "w-full", size: "large", children: copied ? /* @__PURE__ */ jsxs58(
|
|
12439
|
+
/* @__PURE__ */ jsx65(Button, { onClick: handleCopy, className: "w-full", size: "large", children: copied ? /* @__PURE__ */ jsxs58(Fragment25, { children: [
|
|
12543
12440
|
/* @__PURE__ */ jsx65(CheckCircle24, { className: "h-4 w-4" }),
|
|
12544
12441
|
/* @__PURE__ */ jsx65("span", { children: "Copied!" })
|
|
12545
|
-
] }) : /* @__PURE__ */ jsxs58(
|
|
12442
|
+
] }) : /* @__PURE__ */ jsxs58(Fragment25, { children: [
|
|
12546
12443
|
/* @__PURE__ */ jsx65(Copy2, { className: "h-4 w-4" }),
|
|
12547
12444
|
/* @__PURE__ */ jsx65("span", { children: "Copy Address" })
|
|
12548
12445
|
] }) })
|
|
@@ -12554,11 +12451,11 @@ function ReceiveLumiaMenu() {
|
|
|
12554
12451
|
}
|
|
12555
12452
|
|
|
12556
12453
|
// src/internal/components/SettingsMenu/SettingsMenu.tsx
|
|
12557
|
-
import { ArrowLeft as
|
|
12558
|
-
import { useEffect as
|
|
12454
|
+
import { ArrowLeft as ArrowLeft14 } from "lucide-react";
|
|
12455
|
+
import { useEffect as useEffect27 } from "react";
|
|
12559
12456
|
|
|
12560
12457
|
// src/internal/components/SettingsMenu/constants.ts
|
|
12561
|
-
import { ArrowLeftRight, AtSign as
|
|
12458
|
+
import { ArrowLeftRight, AtSign as AtSign2, DatabaseBackup, LockKeyhole, UsersRound } from "lucide-react";
|
|
12562
12459
|
|
|
12563
12460
|
// src/internal/assets/KycIcon.tsx
|
|
12564
12461
|
import { jsx as jsx66 } from "react/jsx-runtime";
|
|
@@ -12577,7 +12474,7 @@ function KycIcon(props) {
|
|
|
12577
12474
|
var NAV_BUTTONS = [
|
|
12578
12475
|
{ id: "transactions" /* TRANSACTIONS */, name: "Transactions", Icon: ArrowLeftRight },
|
|
12579
12476
|
{ id: "kyc" /* KYC */, name: "KYC", Icon: KycIcon },
|
|
12580
|
-
{ id: "nickname-settings" /* NICKNAME_SETTINGS */, name: "Nickname", Icon:
|
|
12477
|
+
{ id: "nickname-settings" /* NICKNAME_SETTINGS */, name: "Nickname", Icon: AtSign2 },
|
|
12581
12478
|
{ id: "manage-wallet" /* MANAGE_WALLET */, name: "Profiles", Icon: UsersRound },
|
|
12582
12479
|
{ id: "security" /* SECURITY */, name: "Security", Icon: LockKeyhole },
|
|
12583
12480
|
{ id: "keysare-backup" /* KEYSARE_BACKUP */, name: "Backup", Icon: DatabaseBackup }
|
|
@@ -12590,39 +12487,50 @@ function SettingsMenu() {
|
|
|
12590
12487
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
12591
12488
|
const settingsNotifications = useLayoutDataStore((st) => st.settingsNotifications);
|
|
12592
12489
|
const setMainPageHeight = useLayoutDataStore((st) => st.setMainPageHeight);
|
|
12593
|
-
|
|
12490
|
+
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
12491
|
+
useEffect27(() => setMainPageHeight(DEFAULT_SETTINGS_MENU_HEIGHT), [setMainPageHeight]);
|
|
12594
12492
|
useProvidersList();
|
|
12595
12493
|
const navItems = NAV_BUTTONS.map((el) => ({ ...el, onClick: () => setPage(el.id) }));
|
|
12596
12494
|
const highlightedKeys = settingsNotifications.map((n) => n.target);
|
|
12597
|
-
return /* @__PURE__ */ jsxs59(
|
|
12598
|
-
|
|
12599
|
-
|
|
12600
|
-
|
|
12601
|
-
|
|
12602
|
-
|
|
12603
|
-
Button,
|
|
12604
|
-
{
|
|
12605
|
-
variant: "outline",
|
|
12606
|
-
size: "large",
|
|
12607
|
-
onClick,
|
|
12608
|
-
disabled: !address,
|
|
12609
|
-
className: cn(
|
|
12610
|
-
//
|
|
12611
|
-
"w-full items-center justify-start",
|
|
12612
|
-
highlightedKeys.includes(id) && "animate-glow-warning"
|
|
12613
|
-
),
|
|
12614
|
-
children: [
|
|
12615
|
-
/* @__PURE__ */ jsx67(Icon2, { className: "w-4 h-4" }),
|
|
12616
|
-
/* @__PURE__ */ jsx67("span", { children: name })
|
|
12617
|
-
]
|
|
12495
|
+
return /* @__PURE__ */ jsxs59(
|
|
12496
|
+
"div",
|
|
12497
|
+
{
|
|
12498
|
+
style: {
|
|
12499
|
+
"--l-pass-scrollbar-mah": `${maxScrollHeight}px`,
|
|
12500
|
+
"--l-pass-list-scrollbar-pd-r": "var(--l-pass-pd)"
|
|
12618
12501
|
},
|
|
12619
|
-
|
|
12620
|
-
|
|
12621
|
-
|
|
12502
|
+
className: "list-scrollbar-y w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]",
|
|
12503
|
+
children: [
|
|
12504
|
+
/* @__PURE__ */ jsxs59("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
12505
|
+
/* @__PURE__ */ jsx67(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx67(ArrowLeft14, { className: "h-4 w-4" }) }),
|
|
12506
|
+
/* @__PURE__ */ jsx67("span", { className: "text-xl font-semibold", children: "Settings" })
|
|
12507
|
+
] }),
|
|
12508
|
+
/* @__PURE__ */ jsx67("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: navItems.map(({ id, name, Icon: Icon2, onClick }) => /* @__PURE__ */ jsxs59(
|
|
12509
|
+
Button,
|
|
12510
|
+
{
|
|
12511
|
+
variant: "outline",
|
|
12512
|
+
size: "large",
|
|
12513
|
+
onClick,
|
|
12514
|
+
disabled: !address,
|
|
12515
|
+
className: cn(
|
|
12516
|
+
//
|
|
12517
|
+
"w-full items-center justify-start",
|
|
12518
|
+
highlightedKeys.includes(id) && "animate-glow-warning"
|
|
12519
|
+
),
|
|
12520
|
+
children: [
|
|
12521
|
+
/* @__PURE__ */ jsx67(Icon2, { className: "w-4 h-4" }),
|
|
12522
|
+
/* @__PURE__ */ jsx67("span", { children: name })
|
|
12523
|
+
]
|
|
12524
|
+
},
|
|
12525
|
+
id
|
|
12526
|
+
)) })
|
|
12527
|
+
]
|
|
12528
|
+
}
|
|
12529
|
+
);
|
|
12622
12530
|
}
|
|
12623
12531
|
|
|
12624
12532
|
// src/internal/components/TermsOfService.tsx
|
|
12625
|
-
import { ArrowLeft as
|
|
12533
|
+
import { ArrowLeft as ArrowLeft15 } from "lucide-react";
|
|
12626
12534
|
import { jsx as jsx68, jsxs as jsxs60 } from "react/jsx-runtime";
|
|
12627
12535
|
function TermsOfService() {
|
|
12628
12536
|
const address = useLumiaPassportSession((st) => st.address);
|
|
@@ -12636,7 +12544,7 @@ function TermsOfService() {
|
|
|
12636
12544
|
size: "icon",
|
|
12637
12545
|
title: "Back",
|
|
12638
12546
|
onClick: () => setPage(!!address ? "settings" /* SETTINGS */ : "auth" /* AUTH */),
|
|
12639
|
-
children: /* @__PURE__ */ jsx68(
|
|
12547
|
+
children: /* @__PURE__ */ jsx68(ArrowLeft15, { className: "h-4 w-4" })
|
|
12640
12548
|
}
|
|
12641
12549
|
),
|
|
12642
12550
|
/* @__PURE__ */ jsx68("span", { className: "text-xl font-semibold", children: "Terms of Service" })
|
|
@@ -12649,8 +12557,8 @@ function TermsOfService() {
|
|
|
12649
12557
|
}
|
|
12650
12558
|
|
|
12651
12559
|
// src/internal/components/TransactionsMenu/TransactionsMenu.tsx
|
|
12652
|
-
import { useQuery as
|
|
12653
|
-
import { ArrowLeft as
|
|
12560
|
+
import { useQuery as useQuery17, useQueryClient as useQueryClient18 } from "@tanstack/react-query";
|
|
12561
|
+
import { ArrowLeft as ArrowLeft16, Loader as Loader24, RefreshCw as RefreshCw3, XCircle as XCircle2 } from "lucide-react";
|
|
12654
12562
|
import { useCallback as useCallback18, useState as useState20 } from "react";
|
|
12655
12563
|
|
|
12656
12564
|
// src/internal/components/TransactionsMenu/api.ts
|
|
@@ -12989,7 +12897,7 @@ var formatTimestamp = (timestampMs) => {
|
|
|
12989
12897
|
};
|
|
12990
12898
|
|
|
12991
12899
|
// src/internal/components/TransactionsMenu/TransactionsGroup.tsx
|
|
12992
|
-
import { Fragment as
|
|
12900
|
+
import { Fragment as Fragment26, jsx as jsx69, jsxs as jsxs61 } from "react/jsx-runtime";
|
|
12993
12901
|
function InternalTransaction({ internal, assetSymbol, assetDecimals }) {
|
|
12994
12902
|
const internalSymbol = internal.assetSymbol || assetSymbol;
|
|
12995
12903
|
const internalDecimals = internal.decimals ?? assetDecimals;
|
|
@@ -13066,7 +12974,7 @@ function TransactionsGroup(props) {
|
|
|
13066
12974
|
)
|
|
13067
12975
|
] })
|
|
13068
12976
|
] }),
|
|
13069
|
-
internalsToRender.length > 0 && /* @__PURE__ */ jsxs61(
|
|
12977
|
+
internalsToRender.length > 0 && /* @__PURE__ */ jsxs61(Fragment26, { children: [
|
|
13070
12978
|
/* @__PURE__ */ jsxs61("div", { className: "w-full flex items-center", children: [
|
|
13071
12979
|
/* @__PURE__ */ jsx69("div", { style: { borderTop: "1px solid var(--l-pass-bd)" }, className: "flex-1" }),
|
|
13072
12980
|
/* @__PURE__ */ jsx69("div", { className: "flex-none font-bold px-2 text-xs leading-4 text-[var(--l-pass-fg-muted)]", children: "Internals" }),
|
|
@@ -13116,7 +13024,7 @@ function TransactionsGroup(props) {
|
|
|
13116
13024
|
// src/internal/components/TransactionsMenu/TransactionsMenu.tsx
|
|
13117
13025
|
import { jsx as jsx70, jsxs as jsxs62 } from "react/jsx-runtime";
|
|
13118
13026
|
function TransactionsMenu() {
|
|
13119
|
-
const qc =
|
|
13027
|
+
const qc = useQueryClient18();
|
|
13120
13028
|
const address = useLumiaPassportSession((st) => st.address);
|
|
13121
13029
|
const page = useLayoutDataStore((st) => st.page);
|
|
13122
13030
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
@@ -13127,7 +13035,7 @@ function TransactionsMenu() {
|
|
|
13127
13035
|
isLoading: isTxHistoryLoading,
|
|
13128
13036
|
isFetching: isTxHistoryFetching,
|
|
13129
13037
|
error: txHistoryError
|
|
13130
|
-
} =
|
|
13038
|
+
} = useQuery17({
|
|
13131
13039
|
retry: false,
|
|
13132
13040
|
enabled: !!address && page === "transactions",
|
|
13133
13041
|
queryKey: [TRANSACTIONS_HISTORY_QUERY_KEY, address],
|
|
@@ -13143,12 +13051,12 @@ function TransactionsMenu() {
|
|
|
13143
13051
|
{
|
|
13144
13052
|
style: {
|
|
13145
13053
|
"--l-pass-scrollbar-mah": `${maxScrollHeight}px`,
|
|
13146
|
-
"--l-pass-list-scrollbar-pd-r": "
|
|
13054
|
+
"--l-pass-list-scrollbar-pd-r": "var(--l-pass-pd)"
|
|
13147
13055
|
},
|
|
13148
13056
|
className: "list-scrollbar-y w-full p-[var(--l-pass-pd)]",
|
|
13149
13057
|
children: /* @__PURE__ */ jsxs62(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: [
|
|
13150
13058
|
/* @__PURE__ */ jsxs62("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
13151
|
-
/* @__PURE__ */ jsx70(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("settings" /* SETTINGS */), children: /* @__PURE__ */ jsx70(
|
|
13059
|
+
/* @__PURE__ */ jsx70(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("settings" /* SETTINGS */), children: /* @__PURE__ */ jsx70(ArrowLeft16, { className: "h-4 w-4" }) }),
|
|
13152
13060
|
/* @__PURE__ */ jsx70("span", { className: "text-xl font-semibold", children: "Transaction History" }),
|
|
13153
13061
|
/* @__PURE__ */ jsx70(
|
|
13154
13062
|
Button,
|
|
@@ -13158,11 +13066,11 @@ function TransactionsMenu() {
|
|
|
13158
13066
|
onClick: refreshTxHistory,
|
|
13159
13067
|
disabled: isTxHistoryFetching,
|
|
13160
13068
|
title: "Refresh transactions",
|
|
13161
|
-
children: isTxHistoryFetching ? /* @__PURE__ */ jsx70(
|
|
13069
|
+
children: isTxHistoryFetching ? /* @__PURE__ */ jsx70(Loader24, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx70(RefreshCw3, { className: "h-4 w-4" })
|
|
13162
13070
|
}
|
|
13163
13071
|
)
|
|
13164
13072
|
] }),
|
|
13165
|
-
isTxHistoryLoading && /* @__PURE__ */ jsx70("div", { className: "flex items-center justify-center p-8", children: /* @__PURE__ */ jsx70(
|
|
13073
|
+
isTxHistoryLoading && /* @__PURE__ */ jsx70("div", { className: "flex items-center justify-center p-8", children: /* @__PURE__ */ jsx70(Loader24, { className: "h-5 w-5 animate-spin" }) }),
|
|
13166
13074
|
!isTxHistoryLoading && txHistoryResolvedError && /* @__PURE__ */ jsxs62(Highlight, { type: "error", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
13167
13075
|
/* @__PURE__ */ jsx70(XCircle2, { className: "w-4 h-4 flex-none" }),
|
|
13168
13076
|
/* @__PURE__ */ jsx70("span", { className: "block w-full flex-1 text-center text-xs", children: txHistoryResolvedError })
|
|
@@ -13287,8 +13195,6 @@ import { jsx as jsx71 } from "react/jsx-runtime";
|
|
|
13287
13195
|
var CLEAR_DIALOG_TIMEOUT = MAIN_DIALOG_ANIMATION_SPEED + 5;
|
|
13288
13196
|
function usePageMapper() {
|
|
13289
13197
|
const page = useLayoutDataStore((st) => st.page);
|
|
13290
|
-
const session = useLumiaPassportSession((st) => st.session);
|
|
13291
|
-
const protectedRoutes = !!session ? PAGE_MAP : PAGE_MAP;
|
|
13292
13198
|
const {
|
|
13293
13199
|
setDialogTitle,
|
|
13294
13200
|
setDialogDescription,
|
|
@@ -13318,21 +13224,21 @@ function usePageMapper() {
|
|
|
13318
13224
|
},
|
|
13319
13225
|
[setDialogContent, setDialogDescription, setDialogTitle, setIsDialogOpen]
|
|
13320
13226
|
);
|
|
13321
|
-
|
|
13227
|
+
useEffect28(() => {
|
|
13322
13228
|
if (page === null) return closeDialog();
|
|
13323
|
-
const pageItem =
|
|
13229
|
+
const pageItem = PAGE_MAP[page];
|
|
13324
13230
|
if (!pageItem) {
|
|
13325
13231
|
alert(`[PASSPORT MAPPER]: Requested page "${page}" is not existing or not allowed. Closing dialog...`);
|
|
13326
13232
|
closeDialog();
|
|
13327
13233
|
return;
|
|
13328
13234
|
}
|
|
13329
13235
|
openDialog(pageItem);
|
|
13330
|
-
}, [
|
|
13236
|
+
}, [page, closeDialog, openDialog]);
|
|
13331
13237
|
}
|
|
13332
13238
|
|
|
13333
13239
|
// src/internal/hooks/useSettingsNotifications.ts
|
|
13334
13240
|
init_auth();
|
|
13335
|
-
import { useEffect as
|
|
13241
|
+
import { useEffect as useEffect29 } from "react";
|
|
13336
13242
|
var EMAIL_NOT_CONNECTED_NOTIFICATION = {
|
|
13337
13243
|
id: "email-not-connected",
|
|
13338
13244
|
target: "manage-wallet" /* MANAGE_WALLET */,
|
|
@@ -13342,7 +13248,7 @@ function useSettingsNotifications() {
|
|
|
13342
13248
|
const setSettingsNotifications = useLayoutDataStore((st) => st.setSettingsNotifications);
|
|
13343
13249
|
const providers = jwtTokenManager2.getProviders();
|
|
13344
13250
|
const hasEmail = providers.includes("email");
|
|
13345
|
-
|
|
13251
|
+
useEffect29(() => {
|
|
13346
13252
|
setSettingsNotifications({
|
|
13347
13253
|
...EMAIL_NOT_CONNECTED_NOTIFICATION,
|
|
13348
13254
|
status: hasEmail ? "resolved" : "active"
|
|
@@ -13351,7 +13257,7 @@ function useSettingsNotifications() {
|
|
|
13351
13257
|
}
|
|
13352
13258
|
|
|
13353
13259
|
// src/internal/hooks/useWalletStatus.ts
|
|
13354
|
-
import { useEffect as
|
|
13260
|
+
import { useEffect as useEffect30 } from "react";
|
|
13355
13261
|
init_auth();
|
|
13356
13262
|
function useWalletStatus() {
|
|
13357
13263
|
const isIframeReady = useLumiaPassportSession((st) => st.isIframeReady);
|
|
@@ -13361,7 +13267,7 @@ function useWalletStatus() {
|
|
|
13361
13267
|
config: { current: config },
|
|
13362
13268
|
callbacks
|
|
13363
13269
|
} = useLumiaPassportConfig();
|
|
13364
|
-
|
|
13270
|
+
useEffect30(() => {
|
|
13365
13271
|
if (!isIframeReady || !config.projectId || !callbacks?.onWalletReady) return;
|
|
13366
13272
|
const userId = jwtTokenManager2.getUserId();
|
|
13367
13273
|
const hasKeyshare = jwtTokenManager2.getHasKeyshare();
|
|
@@ -13391,15 +13297,13 @@ function LumiaPassportDialog() {
|
|
|
13391
13297
|
const mainPageHeight = useLayoutDataStore((st) => st.mainPageHeight);
|
|
13392
13298
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
13393
13299
|
const { colorMode, isDialogOpen, dialogTitle, dialogDescription, dialogContent, isDialogForced, setIsSettings } = useLayoutStore();
|
|
13394
|
-
|
|
13300
|
+
useEffect31(() => setIsSettings(!!session), [session, setIsSettings]);
|
|
13395
13301
|
usePageMapper();
|
|
13396
13302
|
useAutoConnect();
|
|
13397
|
-
useCheckVaultStatus();
|
|
13398
13303
|
useBackupStatusChanges();
|
|
13399
13304
|
useDetectMaxScrollHeight();
|
|
13400
13305
|
useSettingsNotifications();
|
|
13401
13306
|
useListenIframeAuthEvents();
|
|
13402
|
-
useBackupWarning();
|
|
13403
13307
|
useWalletStatus();
|
|
13404
13308
|
const isHeaderHidden = !session || page === "keysare-backup" /* KEYSARE_BACKUP */ && !hasServerVault;
|
|
13405
13309
|
return /* @__PURE__ */ jsx72(
|
|
@@ -13477,11 +13381,11 @@ var TssManagerWithRef = React8.forwardRef((props, ref) => {
|
|
|
13477
13381
|
// src/internal/components/WalletConnectHandler.tsx
|
|
13478
13382
|
init_wallet();
|
|
13479
13383
|
import { useConnectModal } from "@rainbow-me/rainbowkit";
|
|
13480
|
-
import { useMutation as
|
|
13481
|
-
import React9, { useCallback as useCallback21, useEffect as
|
|
13384
|
+
import { useMutation as useMutation15, useQueryClient as useQueryClient19 } from "@tanstack/react-query";
|
|
13385
|
+
import React9, { useCallback as useCallback21, useEffect as useEffect32 } from "react";
|
|
13482
13386
|
import { useAccount, useDisconnect, useSignMessage } from "wagmi";
|
|
13483
13387
|
function WalletConnectHandler() {
|
|
13484
|
-
const qc =
|
|
13388
|
+
const qc = useQueryClient19();
|
|
13485
13389
|
const callbacks = useLumiaPassportConfig().callbacks;
|
|
13486
13390
|
const passportWalletAddress = useLumiaPassportSession((st) => st.address);
|
|
13487
13391
|
const { address: walletAddress, isConnected, chain, connector } = useAccount();
|
|
@@ -13523,7 +13427,7 @@ function WalletConnectHandler() {
|
|
|
13523
13427
|
[qc, passportWalletAddress, callbacks, setProviderType, setPage, setIsWalletLinking]
|
|
13524
13428
|
);
|
|
13525
13429
|
const [hasStartedLinking, setHasStartedLinking] = React9.useState(false);
|
|
13526
|
-
|
|
13430
|
+
useEffect32(() => {
|
|
13527
13431
|
if (isWalletLinking && !hasStartedLinking) {
|
|
13528
13432
|
setHasStartedLinking(true);
|
|
13529
13433
|
setProviderType(null);
|
|
@@ -13543,14 +13447,14 @@ function WalletConnectHandler() {
|
|
|
13543
13447
|
if (isConnected) disconnect();
|
|
13544
13448
|
}
|
|
13545
13449
|
}, [isWalletLinking, hasStartedLinking, isConnected, openConnectModal, disconnect, setPage, setProviderType]);
|
|
13546
|
-
|
|
13450
|
+
useEffect32(() => {
|
|
13547
13451
|
if (hasStartedLinking && !connectModalOpen && !isConnected && isWalletLinking) {
|
|
13548
13452
|
console.log("[WalletConnectHandler] Modal closed without connecting");
|
|
13549
13453
|
onLinkingComplete(false);
|
|
13550
13454
|
setHasStartedLinking(false);
|
|
13551
13455
|
}
|
|
13552
13456
|
}, [connectModalOpen, hasStartedLinking, isConnected, isWalletLinking]);
|
|
13553
|
-
const { mutate: handleWalletSign, isPending: isWalletSigning } =
|
|
13457
|
+
const { mutate: handleWalletSign, isPending: isWalletSigning } = useMutation15({
|
|
13554
13458
|
mutationFn: async (payload) => {
|
|
13555
13459
|
const { chainId, signingWalletAddress } = payload;
|
|
13556
13460
|
if (!signingWalletAddress || !chainId) {
|
|
@@ -13619,7 +13523,7 @@ function WalletConnectHandler() {
|
|
|
13619
13523
|
setPage(passportWalletAddress ? "manage-wallet" /* MANAGE_WALLET */ : "auth" /* AUTH */);
|
|
13620
13524
|
}
|
|
13621
13525
|
});
|
|
13622
|
-
|
|
13526
|
+
useEffect32(() => {
|
|
13623
13527
|
if (!!chain?.id && isConnected && walletAddress && isWalletLinking && hasStartedLinking) {
|
|
13624
13528
|
console.log("[WalletConnectHandler] handleWalletSign triggered");
|
|
13625
13529
|
handleWalletSign({ chainId: chain.id, signingWalletAddress: walletAddress });
|
|
@@ -13655,7 +13559,7 @@ var useLumiaPassportSession = create6((set) => ({
|
|
|
13655
13559
|
}));
|
|
13656
13560
|
function LumiaPassportSessionProvider({ children }) {
|
|
13657
13561
|
const config = useLumiaPassportConfig().config;
|
|
13658
|
-
return /* @__PURE__ */ jsxs64(
|
|
13562
|
+
return /* @__PURE__ */ jsxs64(Fragment27, { children: [
|
|
13659
13563
|
children,
|
|
13660
13564
|
config.current?.wallet?.enabled && /* @__PURE__ */ jsx73(WalletConnectHandler, {}),
|
|
13661
13565
|
/* @__PURE__ */ jsx73(BalanceFeedProvider, {}),
|
|
@@ -13712,8 +13616,8 @@ function LumiaPassportProvider(props) {
|
|
|
13712
13616
|
const { children, projectId, initialConfig = {}, callbacks } = props;
|
|
13713
13617
|
const setIsIframeReady = useLumiaPassportSession((st) => st.setIsIframeReady);
|
|
13714
13618
|
const setWalletReadyStatus = useLumiaPassportSession((st) => st.setWalletReadyStatus);
|
|
13715
|
-
|
|
13716
|
-
const config =
|
|
13619
|
+
useEffect33(() => notifyNoProjetctId(projectId), [projectId]);
|
|
13620
|
+
const config = useRef13({ projectId, ...DEFAULT_LUMIA_PASSPORT_CONFIG });
|
|
13717
13621
|
const updateConfig = useCallback22((updates) => {
|
|
13718
13622
|
const prev = config.current;
|
|
13719
13623
|
const next = { ...prev };
|
|
@@ -13749,7 +13653,7 @@ function LumiaPassportProvider(props) {
|
|
|
13749
13653
|
}
|
|
13750
13654
|
config.current = next;
|
|
13751
13655
|
}, []);
|
|
13752
|
-
|
|
13656
|
+
useEffect33(() => {
|
|
13753
13657
|
if (typeof window === "undefined" || !projectId) return;
|
|
13754
13658
|
const mergedConfig = merge2(DEFAULT_LUMIA_PASSPORT_CONFIG, initialConfig);
|
|
13755
13659
|
updateConfig(mergedConfig);
|
|
@@ -13804,10 +13708,12 @@ var useLumiaPassportConfig = () => {
|
|
|
13804
13708
|
};
|
|
13805
13709
|
|
|
13806
13710
|
// src/components/ConnectWalletButton.tsx
|
|
13807
|
-
import {
|
|
13808
|
-
import {
|
|
13711
|
+
import { useQuery as useQuery18 } from "@tanstack/react-query";
|
|
13712
|
+
import { Cloud as Cloud5, Laptop as Laptop2, Loader as Loader25, Shield as Shield2 } from "lucide-react";
|
|
13713
|
+
import { useEffect as useEffect34, useMemo as useMemo6 } from "react";
|
|
13809
13714
|
init_auth();
|
|
13810
|
-
|
|
13715
|
+
init_profile();
|
|
13716
|
+
import { Fragment as Fragment28, jsx as jsx76, jsxs as jsxs65 } from "react/jsx-runtime";
|
|
13811
13717
|
function getFormattedStatus(label, status, showStatus) {
|
|
13812
13718
|
const isStatus = showStatus && status && status !== "idle" && status !== "ready";
|
|
13813
13719
|
if (!isStatus) return label;
|
|
@@ -13826,9 +13732,15 @@ function ConnectWalletButton(props) {
|
|
|
13826
13732
|
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
13827
13733
|
const { session, address, hasServerVault, isLoading, isIframeReady, status, setUsePaymaster } = useLumiaPassportSession();
|
|
13828
13734
|
const connectButtonLabel = getFormattedStatus(label || "Connect", status, isIframeReady);
|
|
13829
|
-
|
|
13735
|
+
useEffect34(() => setUsePaymaster(usePaymaster), [setUsePaymaster, usePaymaster]);
|
|
13736
|
+
const { data: profile, isLoading: isProfileLoading } = useQuery18({
|
|
13737
|
+
retry: false,
|
|
13738
|
+
enabled: !!address,
|
|
13739
|
+
queryKey: [QUERY_KEYS.userProfile, address],
|
|
13740
|
+
queryFn: getUserProfile
|
|
13741
|
+
});
|
|
13830
13742
|
const avatar = jwtTokenManager2.getAvatar();
|
|
13831
|
-
const displayName = jwtTokenManager2.getDisplayName();
|
|
13743
|
+
const displayName = profile?.nicknameDisplay || profile?.displayName || jwtTokenManager2.getDisplayName();
|
|
13832
13744
|
const indicators = useMemo6(() => {
|
|
13833
13745
|
const userId = jwtTokenManager2.getUserId();
|
|
13834
13746
|
if (!userId) return { server: false, local: false, backup: false };
|
|
@@ -13839,14 +13751,14 @@ function ConnectWalletButton(props) {
|
|
|
13839
13751
|
const isConnecting = connectButtonLabel !== label || isLoading;
|
|
13840
13752
|
return /* @__PURE__ */ jsx76("div", { "data-lumia-passport-mode": colorMode, className: cn("lumia-scope w-fit h-fit", className), children: !address ? (
|
|
13841
13753
|
/** external Buttons can be provided */
|
|
13842
|
-
/* @__PURE__ */ jsx76(
|
|
13754
|
+
/* @__PURE__ */ jsx76(Fragment28, { children: ConnectButton ? /* @__PURE__ */ jsxs65(
|
|
13843
13755
|
ConnectButton,
|
|
13844
13756
|
{
|
|
13845
13757
|
type: "button",
|
|
13846
13758
|
disabled: isConnecting,
|
|
13847
13759
|
onClick: () => setPage("auth" /* AUTH */),
|
|
13848
13760
|
children: [
|
|
13849
|
-
isConnecting && /* @__PURE__ */ jsx76(
|
|
13761
|
+
isConnecting && /* @__PURE__ */ jsx76(Loader25, { className: "w-4 h-4 animate-spin" }),
|
|
13850
13762
|
connectButtonLabel
|
|
13851
13763
|
]
|
|
13852
13764
|
}
|
|
@@ -13867,7 +13779,7 @@ function ConnectWalletButton(props) {
|
|
|
13867
13779
|
"disabled:hover:bg-[var(--l-pass-bg)] disabled:active:bg-[var(--l-pass-bg)]"
|
|
13868
13780
|
),
|
|
13869
13781
|
children: [
|
|
13870
|
-
isConnecting && /* @__PURE__ */ jsx76(
|
|
13782
|
+
isConnecting && /* @__PURE__ */ jsx76(Loader25, { className: "w-4 h-4 animate-spin" }),
|
|
13871
13783
|
connectButtonLabel.toUpperCase()
|
|
13872
13784
|
]
|
|
13873
13785
|
}
|
|
@@ -13888,7 +13800,7 @@ function ConnectWalletButton(props) {
|
|
|
13888
13800
|
/* @__PURE__ */ jsx76("div", { className: "w-12 h-12 rounded-full bg-[var(--l-pass-fg)] flex items-center justify-center flex-shrink-0", children: avatar ? /* @__PURE__ */ jsx76("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" }) : /* @__PURE__ */ jsx76(LumiaIcon, { width: 48, height: 48 }) }),
|
|
13889
13801
|
/* @__PURE__ */ jsxs65("div", { className: "text-left flex-1 min-w-0 text-[var(--l-pass-fg)]", children: [
|
|
13890
13802
|
/* @__PURE__ */ jsxs65("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
13891
|
-
/* @__PURE__ */ jsx76("span", { className: "w-fit text-[14px] leading-4 truncate max-w-[144px] text-[var(--l-pass-fg)]", children: displayName }),
|
|
13803
|
+
isProfileLoading ? /* @__PURE__ */ jsx76(Loader25, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ jsx76("span", { className: "w-fit text-[14px] leading-4 truncate max-w-[144px] text-[var(--l-pass-fg)]", children: displayName }),
|
|
13892
13804
|
/* @__PURE__ */ jsx76(KYCStatus, {})
|
|
13893
13805
|
] }),
|
|
13894
13806
|
/* @__PURE__ */ jsx76(BalanceView, {})
|
|
@@ -14022,7 +13934,7 @@ function useLumiaPassportOpen() {
|
|
|
14022
13934
|
}
|
|
14023
13935
|
|
|
14024
13936
|
// src/hooks/useLumiaPassportColorMode.ts
|
|
14025
|
-
import { useCallback as useCallback24, useEffect as
|
|
13937
|
+
import { useCallback as useCallback24, useEffect as useEffect35 } from "react";
|
|
14026
13938
|
function useLumiaPassportColorMode() {
|
|
14027
13939
|
const {
|
|
14028
13940
|
config: { current: config }
|
|
@@ -14037,7 +13949,7 @@ function useLumiaPassportColorMode() {
|
|
|
14037
13949
|
},
|
|
14038
13950
|
[handleStoreColorMode]
|
|
14039
13951
|
);
|
|
14040
|
-
|
|
13952
|
+
useEffect35(() => {
|
|
14041
13953
|
let targetColorMode = localStorage.getItem(LOCAL_COLOR_MODE_KEY);
|
|
14042
13954
|
if (!targetColorMode && !preferedColorMode) {
|
|
14043
13955
|
const systemMode = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
@@ -14308,7 +14220,7 @@ var rainbowTheme = {
|
|
|
14308
14220
|
|
|
14309
14221
|
// src/context/RainbowKitContext.tsx
|
|
14310
14222
|
import "@rainbow-me/rainbowkit/styles.css";
|
|
14311
|
-
import { Fragment as
|
|
14223
|
+
import { Fragment as Fragment29, jsx as jsx78 } from "react/jsx-runtime";
|
|
14312
14224
|
function LumiaRainbowKitProvider({ children }) {
|
|
14313
14225
|
const config = useLumiaPassportConfig().config;
|
|
14314
14226
|
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
@@ -14327,7 +14239,7 @@ function LumiaRainbowKitProvider({ children }) {
|
|
|
14327
14239
|
},
|
|
14328
14240
|
[colorMode]
|
|
14329
14241
|
);
|
|
14330
|
-
if (!config.current?.wallet?.enabled) return /* @__PURE__ */ jsx78(
|
|
14242
|
+
if (!config.current?.wallet?.enabled) return /* @__PURE__ */ jsx78(Fragment29, { children });
|
|
14331
14243
|
return /* @__PURE__ */ jsx78(WagmiProvider2, { config: rainbowConfig2, children: /* @__PURE__ */ jsx78(RainbowKitProvider, { theme: customTheme, modalSize: "compact", showRecentTransactions: true, children }) });
|
|
14332
14244
|
}
|
|
14333
14245
|
|
|
@@ -14766,13 +14678,13 @@ var Hash = ({
|
|
|
14766
14678
|
|
|
14767
14679
|
// src/internal/components/TransactionsMenu/TransactionsList.tsx
|
|
14768
14680
|
init_base();
|
|
14769
|
-
import { useEffect as
|
|
14681
|
+
import { useEffect as useEffect37, useState as useState24 } from "react";
|
|
14770
14682
|
import { jsx as jsx83, jsxs as jsxs69 } from "react/jsx-runtime";
|
|
14771
14683
|
var TransactionsList = ({ address, itemsCount = 10 }) => {
|
|
14772
14684
|
const [transactions, setTransactions] = useState24([]);
|
|
14773
14685
|
const [loading, setLoading] = useState24(true);
|
|
14774
14686
|
const [error, setError] = useState24(null);
|
|
14775
|
-
|
|
14687
|
+
useEffect37(() => {
|
|
14776
14688
|
const fetchTransactions = async () => {
|
|
14777
14689
|
try {
|
|
14778
14690
|
setLoading(true);
|