@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.cjs
CHANGED
|
@@ -4335,8 +4335,9 @@ async function changeNickname(handle) {
|
|
|
4335
4335
|
}
|
|
4336
4336
|
async function checkNicknameAvailability(handle) {
|
|
4337
4337
|
const normalizedHandle = handle.toLowerCase().replace(/^@/, "");
|
|
4338
|
-
const response = await tssClient.
|
|
4339
|
-
|
|
4338
|
+
const response = await tssClient.post(
|
|
4339
|
+
"/api/auth/nicknames/check",
|
|
4340
|
+
{ handle: normalizedHandle },
|
|
4340
4341
|
false
|
|
4341
4342
|
// Public endpoint, no auth required
|
|
4342
4343
|
);
|
|
@@ -4348,14 +4349,15 @@ async function checkNicknameAvailability(handle) {
|
|
|
4348
4349
|
}
|
|
4349
4350
|
async function resolveNickname(handle) {
|
|
4350
4351
|
const normalizedHandle = handle.toLowerCase().replace(/^@/, "");
|
|
4351
|
-
const response = await tssClient.
|
|
4352
|
-
|
|
4352
|
+
const response = await tssClient.post(
|
|
4353
|
+
"/api/auth/nicknames/resolve",
|
|
4354
|
+
{ handle: normalizedHandle },
|
|
4353
4355
|
false
|
|
4354
4356
|
// Public endpoint, no auth required
|
|
4355
4357
|
);
|
|
4356
4358
|
if (!response.success || !response.data) {
|
|
4357
|
-
const errorData = response.data;
|
|
4358
|
-
if (errorData
|
|
4359
|
+
const errorData = response.data || {};
|
|
4360
|
+
if (errorData.code === "NICKNAME_NOT_FOUND") {
|
|
4359
4361
|
const error = new Error("Nickname not found");
|
|
4360
4362
|
error.code = "NICKNAME_NOT_FOUND";
|
|
4361
4363
|
throw error;
|
|
@@ -4529,17 +4531,17 @@ __export(index_exports, {
|
|
|
4529
4531
|
module.exports = __toCommonJS(index_exports);
|
|
4530
4532
|
|
|
4531
4533
|
// src/styles/built.css
|
|
4532
|
-
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}';
|
|
4534
|
+
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}';
|
|
4533
4535
|
|
|
4534
4536
|
// src/context/LumiaPassportContext.tsx
|
|
4535
4537
|
var import_error_tracking4 = require("@lumiapassport/core/internal/error-tracking");
|
|
4536
4538
|
var import_lodash_es4 = require("lodash-es");
|
|
4537
|
-
var
|
|
4539
|
+
var import_react61 = require("react");
|
|
4538
4540
|
init_lumiaPassport();
|
|
4539
4541
|
init_iframe_manager();
|
|
4540
4542
|
|
|
4541
4543
|
// src/context/LumiaPassportSessionContext.tsx
|
|
4542
|
-
var
|
|
4544
|
+
var import_react60 = require("react");
|
|
4543
4545
|
var import_zustand6 = require("zustand");
|
|
4544
4546
|
|
|
4545
4547
|
// src/internal/components/BalanceFeedProvider/BalanceFeedProvider.tsx
|
|
@@ -4558,7 +4560,7 @@ init_assets();
|
|
|
4558
4560
|
var LOCAL_COLOR_MODE_KEY = "lumia-passport-theme";
|
|
4559
4561
|
var DEFAULT_AUTH_MENU_HEIGHT = 253;
|
|
4560
4562
|
var DEFAULT_MAIN_MENU_HEIGHT = 90;
|
|
4561
|
-
var DEFAULT_SETTINGS_MENU_HEIGHT =
|
|
4563
|
+
var DEFAULT_SETTINGS_MENU_HEIGHT = 404;
|
|
4562
4564
|
var MAX_CONTENT_HEIGHT = 640;
|
|
4563
4565
|
var MAIN_DIALOG_ANIMATION_SPEED = 375;
|
|
4564
4566
|
var Y_ANIMATION_SETUP = { duration: 0.15, ease: "easeInOut", height: { duration: 0.375 } };
|
|
@@ -4718,7 +4720,7 @@ function BalanceFeedProvider() {
|
|
|
4718
4720
|
|
|
4719
4721
|
// src/internal/components/Dialog/LumiaPassportDialog.tsx
|
|
4720
4722
|
var import_framer_motion3 = require("framer-motion");
|
|
4721
|
-
var
|
|
4723
|
+
var import_react57 = require("react");
|
|
4722
4724
|
|
|
4723
4725
|
// src/internal/components/Footer/Footer.tsx
|
|
4724
4726
|
var import_react_query2 = require("@tanstack/react-query");
|
|
@@ -5398,17 +5400,14 @@ function formatAddress(addr) {
|
|
|
5398
5400
|
return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
|
|
5399
5401
|
}
|
|
5400
5402
|
function Header() {
|
|
5401
|
-
const
|
|
5402
|
-
config: { current: config }
|
|
5403
|
-
} = useLumiaPassportConfig();
|
|
5403
|
+
const config = useLumiaPassportConfig().config;
|
|
5404
5404
|
const address = useLumiaPassportSession((st) => st.address);
|
|
5405
5405
|
const [copied, setCopied] = (0, import_react5.useState)(false);
|
|
5406
|
-
const { data: profile } = (0, import_react_query5.useQuery)({
|
|
5407
|
-
|
|
5408
|
-
queryFn: getUserProfile,
|
|
5406
|
+
const { data: profile, isLoading: isProfileLoading } = (0, import_react_query5.useQuery)({
|
|
5407
|
+
retry: false,
|
|
5409
5408
|
enabled: !!address,
|
|
5410
|
-
|
|
5411
|
-
|
|
5409
|
+
queryKey: [QUERY_KEYS.userProfile, address],
|
|
5410
|
+
queryFn: getUserProfile
|
|
5412
5411
|
});
|
|
5413
5412
|
const avatar = profile?.avatar || import_auth3.jwtTokenManager.getAvatar();
|
|
5414
5413
|
const displayName = profile?.nicknameDisplay || profile?.displayName || import_auth3.jwtTokenManager.getDisplayName();
|
|
@@ -5428,20 +5427,23 @@ function Header() {
|
|
|
5428
5427
|
style: { width: "calc(100% - 48px - var(--l-pass-gap))" },
|
|
5429
5428
|
className: "flex-1 flex flex-col justify-center gap-1",
|
|
5430
5429
|
children: [
|
|
5431
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.
|
|
5432
|
-
|
|
5433
|
-
|
|
5434
|
-
|
|
5435
|
-
|
|
5436
|
-
|
|
5437
|
-
|
|
5438
|
-
|
|
5439
|
-
|
|
5440
|
-
|
|
5441
|
-
|
|
5442
|
-
|
|
5443
|
-
|
|
5444
|
-
|
|
5430
|
+
isProfileLoading && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react7.Loader, { className: "w-4 h-4 animate-spin" }),
|
|
5431
|
+
!!address && !isProfileLoading && !!profile && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
|
|
5432
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "w-full flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
5433
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
5434
|
+
"span",
|
|
5435
|
+
{
|
|
5436
|
+
className: cn(
|
|
5437
|
+
"text-[14px] leading-4 truncate max-w-[144px] font-medium",
|
|
5438
|
+
"text-ellipsis overflow-hidden whitespace-nowrap"
|
|
5439
|
+
),
|
|
5440
|
+
children: displayName || config.current?.ui?.title || "LumiaPassport"
|
|
5441
|
+
}
|
|
5442
|
+
),
|
|
5443
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(KYCStatus, {})
|
|
5444
|
+
] }),
|
|
5445
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(BalanceView, {})
|
|
5446
|
+
] })
|
|
5445
5447
|
]
|
|
5446
5448
|
}
|
|
5447
5449
|
)
|
|
@@ -5501,13 +5503,11 @@ function Header() {
|
|
|
5501
5503
|
}
|
|
5502
5504
|
);
|
|
5503
5505
|
}
|
|
5504
|
-
{
|
|
5505
|
-
}
|
|
5506
5506
|
|
|
5507
5507
|
// package.json
|
|
5508
5508
|
var package_default = {
|
|
5509
5509
|
name: "@lumiapassport/ui-kit",
|
|
5510
|
-
version: "1.14.
|
|
5510
|
+
version: "1.14.25",
|
|
5511
5511
|
description: "React UI components and hooks for Lumia Passport authentication and Account Abstraction",
|
|
5512
5512
|
type: "module",
|
|
5513
5513
|
main: "./dist/index.cjs",
|
|
@@ -5946,17 +5946,28 @@ var import_react9 = require("react");
|
|
|
5946
5946
|
init_vaultClient();
|
|
5947
5947
|
function useBackupStatusChanges() {
|
|
5948
5948
|
const setHasServerVault = useLumiaPassportSession((st) => st.setHasServerVault);
|
|
5949
|
+
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
5949
5950
|
const { mutate: handleBackupStatusChanged } = (0, import_react_query6.useMutation)({
|
|
5950
5951
|
mutationFn: async (event) => {
|
|
5951
5952
|
const customEvent = event;
|
|
5952
|
-
|
|
5953
|
+
console.log("[BACKUP STATUS] changed:", customEvent?.detail);
|
|
5954
|
+
return { stats: await getShareRecoveryStats(), detail: customEvent?.detail };
|
|
5953
5955
|
},
|
|
5954
|
-
onSuccess: (stats) => {
|
|
5956
|
+
onSuccess: ({ stats, detail }) => {
|
|
5955
5957
|
const hasRecoveryData = stats && (!!stats.created || !!stats?.devices?.length);
|
|
5956
5958
|
if (!!hasRecoveryData) {
|
|
5959
|
+
console.log(
|
|
5960
|
+
"[BACKUP STATUS] Recovery data found after backup status change.\n Redirect to main menu:",
|
|
5961
|
+
detail?.navigateToMainMenu
|
|
5962
|
+
);
|
|
5957
5963
|
setHasServerVault(true);
|
|
5964
|
+
if (!!detail?.navigateToMainMenu) {
|
|
5965
|
+
setTimeout(() => setPage("main-menu" /* MAIN_MENU */), 1e3);
|
|
5966
|
+
}
|
|
5967
|
+
console.info("[BACKUP STATUS] Recovery data found in vault, marking as has-server-vault");
|
|
5958
5968
|
} else {
|
|
5959
5969
|
setHasServerVault(false);
|
|
5970
|
+
setPage("keysare-backup" /* KEYSARE_BACKUP */);
|
|
5960
5971
|
console.warn("[BACKUP STATUS] No recovery data found in vault, marking as no-server-vault");
|
|
5961
5972
|
}
|
|
5962
5973
|
},
|
|
@@ -5973,74 +5984,15 @@ function useBackupStatusChanges() {
|
|
|
5973
5984
|
}, []);
|
|
5974
5985
|
}
|
|
5975
5986
|
|
|
5976
|
-
// src/internal/hooks/useBackupWarning.ts
|
|
5977
|
-
var import_react10 = require("react");
|
|
5978
|
-
var WARNING_TIMEOUT_MS = 4500;
|
|
5979
|
-
function useBackupWarning() {
|
|
5980
|
-
const address = useLumiaPassportSession((st) => st.address);
|
|
5981
|
-
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
5982
|
-
const page = useLayoutDataStore((st) => st.page);
|
|
5983
|
-
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
5984
|
-
const timeoutRef = (0, import_react10.useRef)(null);
|
|
5985
|
-
const touchedRef = (0, import_react10.useRef)(false);
|
|
5986
|
-
(0, import_react10.useEffect)(() => {
|
|
5987
|
-
if (touchedRef.current) return;
|
|
5988
|
-
if (timeoutRef.current) {
|
|
5989
|
-
clearTimeout(timeoutRef.current);
|
|
5990
|
-
timeoutRef.current = null;
|
|
5991
|
-
}
|
|
5992
|
-
if (!address || !!hasServerVault || page === "keysare-backup" /* KEYSARE_BACKUP */) return;
|
|
5993
|
-
timeoutRef.current = setTimeout(() => {
|
|
5994
|
-
setPage("keysare-backup" /* KEYSARE_BACKUP */);
|
|
5995
|
-
touchedRef.current = true;
|
|
5996
|
-
timeoutRef.current = null;
|
|
5997
|
-
}, WARNING_TIMEOUT_MS);
|
|
5998
|
-
return () => {
|
|
5999
|
-
if (timeoutRef.current) {
|
|
6000
|
-
clearTimeout(timeoutRef.current);
|
|
6001
|
-
timeoutRef.current = null;
|
|
6002
|
-
}
|
|
6003
|
-
};
|
|
6004
|
-
}, [address, page, hasServerVault, setPage]);
|
|
6005
|
-
return null;
|
|
6006
|
-
}
|
|
6007
|
-
|
|
6008
|
-
// src/internal/hooks/useCheckVaultStatus.ts
|
|
6009
|
-
var import_react_query7 = require("@tanstack/react-query");
|
|
6010
|
-
var import_react11 = require("react");
|
|
6011
|
-
init_vaultClient();
|
|
6012
|
-
function useCheckVaultStatus() {
|
|
6013
|
-
const address = useLumiaPassportSession((st) => st.address);
|
|
6014
|
-
const setHasServerVault = useLumiaPassportSession((st) => st.setHasServerVault);
|
|
6015
|
-
const { mutate: checkVaultStatus } = (0, import_react_query7.useMutation)({
|
|
6016
|
-
mutationFn: async () => {
|
|
6017
|
-
const stats = await getShareRecoveryStats();
|
|
6018
|
-
const hasRecoveryData = stats && (stats.created || stats.devices && stats.devices.length > 0);
|
|
6019
|
-
return !!hasRecoveryData;
|
|
6020
|
-
},
|
|
6021
|
-
onSuccess: (hasRecoveryData) => {
|
|
6022
|
-
setHasServerVault(hasRecoveryData);
|
|
6023
|
-
},
|
|
6024
|
-
onError: (error) => {
|
|
6025
|
-
console.warn("[UI-KIT] Failed to check vault status:", error);
|
|
6026
|
-
setHasServerVault(false);
|
|
6027
|
-
}
|
|
6028
|
-
});
|
|
6029
|
-
(0, import_react11.useEffect)(() => {
|
|
6030
|
-
if (!address) return setHasServerVault(false);
|
|
6031
|
-
checkVaultStatus();
|
|
6032
|
-
}, [address, checkVaultStatus]);
|
|
6033
|
-
}
|
|
6034
|
-
|
|
6035
5987
|
// src/internal/hooks/useDetectMaxScrollHeight.ts
|
|
6036
5988
|
var import_lodash_es2 = require("lodash-es");
|
|
6037
|
-
var
|
|
5989
|
+
var import_react10 = require("react");
|
|
6038
5990
|
var DEBOUNCE_DELAY = 50;
|
|
6039
5991
|
function useDetectMaxScrollHeight() {
|
|
6040
5992
|
const page = useLayoutDataStore((state) => state.page);
|
|
6041
5993
|
const setIsMobileView = useLayoutStore((state) => state.setIsMobileView);
|
|
6042
5994
|
const setMaxScrollHeight = useLayoutStore((state) => state.setMaxScrollHeight);
|
|
6043
|
-
const onResize = (0,
|
|
5995
|
+
const onResize = (0, import_react10.useCallback)(
|
|
6044
5996
|
(0, import_lodash_es2.debounce)(({ width, height }) => {
|
|
6045
5997
|
const headerHeight = page === "auth" /* AUTH */ || page === "keyshare-restore" /* KEYSHARE_RESTORE */ ? 0 : 116;
|
|
6046
5998
|
const limContentHeight = height * 0.92 - headerHeight - 57;
|
|
@@ -6049,7 +6001,7 @@ function useDetectMaxScrollHeight() {
|
|
|
6049
6001
|
}, DEBOUNCE_DELAY),
|
|
6050
6002
|
[page, setMaxScrollHeight, setIsMobileView]
|
|
6051
6003
|
);
|
|
6052
|
-
(0,
|
|
6004
|
+
(0, import_react10.useEffect)(() => {
|
|
6053
6005
|
const obs = new ResizeObserver(([entry]) => onResize(entry.contentRect));
|
|
6054
6006
|
const doc = window.document.getElementsByTagName("html")[0];
|
|
6055
6007
|
if (doc) obs.observe(doc);
|
|
@@ -6058,24 +6010,24 @@ function useDetectMaxScrollHeight() {
|
|
|
6058
6010
|
}
|
|
6059
6011
|
|
|
6060
6012
|
// src/internal/hooks/usePageMapper.tsx
|
|
6061
|
-
var
|
|
6013
|
+
var import_react54 = require("react");
|
|
6062
6014
|
|
|
6063
6015
|
// src/internal/components/AuthMenu/AuthMenu.tsx
|
|
6064
6016
|
var import_framer_motion = require("framer-motion");
|
|
6065
6017
|
var import_lucide_react14 = require("lucide-react");
|
|
6066
|
-
var
|
|
6018
|
+
var import_react19 = require("react");
|
|
6067
6019
|
|
|
6068
6020
|
// src/internal/components/Expandable/hooks/useExpandable.ts
|
|
6069
|
-
var
|
|
6021
|
+
var import_react11 = require("react");
|
|
6070
6022
|
var useExpandable = (props) => {
|
|
6071
6023
|
const { isExpanded = false, children, initHeight = 0, minHeight = 0 } = props;
|
|
6072
|
-
const expandableRef = (0,
|
|
6073
|
-
const contentRef = (0,
|
|
6074
|
-
(0,
|
|
6024
|
+
const expandableRef = (0, import_react11.useRef)(null);
|
|
6025
|
+
const contentRef = (0, import_react11.useRef)(null);
|
|
6026
|
+
(0, import_react11.useEffect)(() => {
|
|
6075
6027
|
if (!expandableRef.current) return;
|
|
6076
6028
|
expandableRef.current.style.setProperty("--ifo-basic-expandable-h", `${initHeight}px )`);
|
|
6077
6029
|
}, []);
|
|
6078
|
-
const setExpandableHeight = (0,
|
|
6030
|
+
const setExpandableHeight = (0, import_react11.useCallback)(
|
|
6079
6031
|
(isExpnd) => {
|
|
6080
6032
|
if (!contentRef.current || !expandableRef.current) return;
|
|
6081
6033
|
expandableRef.current.style.setProperty(
|
|
@@ -6086,7 +6038,7 @@ var useExpandable = (props) => {
|
|
|
6086
6038
|
// ON_RESIZE_DELEAY),
|
|
6087
6039
|
[minHeight]
|
|
6088
6040
|
);
|
|
6089
|
-
(0,
|
|
6041
|
+
(0, import_react11.useEffect)(() => {
|
|
6090
6042
|
if (!contentRef.current || !expandableRef.current) return;
|
|
6091
6043
|
const obs = new ResizeObserver(() => setExpandableHeight(isExpanded));
|
|
6092
6044
|
obs.observe(expandableRef.current);
|
|
@@ -6216,7 +6168,7 @@ function AuthFailedStep() {
|
|
|
6216
6168
|
|
|
6217
6169
|
// src/internal/components/AuthMenu/PassKeyStep.tsx
|
|
6218
6170
|
var import_lucide_react10 = require("lucide-react");
|
|
6219
|
-
var
|
|
6171
|
+
var import_react12 = require("react");
|
|
6220
6172
|
|
|
6221
6173
|
// src/internal/assets/PasskeyAddIcon.tsx
|
|
6222
6174
|
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
@@ -6270,7 +6222,7 @@ function PassKeyStep(props) {
|
|
|
6270
6222
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
6271
6223
|
const autoCloseOnSuccess = !recoveryUserId;
|
|
6272
6224
|
const { passkeyStatus, setStep, setPasskeyStatus, setAlert, setEmail, setFailedType } = useAuthStore();
|
|
6273
|
-
const onPasskeyRegister = (0,
|
|
6225
|
+
const onPasskeyRegister = (0, import_react12.useCallback)(async () => {
|
|
6274
6226
|
setAlert(null);
|
|
6275
6227
|
setPasskeyStatus("registering passkey...");
|
|
6276
6228
|
setIsLoading(true);
|
|
@@ -6329,7 +6281,7 @@ function PassKeyStep(props) {
|
|
|
6329
6281
|
setIsLoading(false);
|
|
6330
6282
|
}
|
|
6331
6283
|
}, [onAuthSuccess, setPage, callbacks]);
|
|
6332
|
-
const onPasskeyAuth = (0,
|
|
6284
|
+
const onPasskeyAuth = (0, import_react12.useCallback)(async () => {
|
|
6333
6285
|
setAlert(null);
|
|
6334
6286
|
setPasskeyStatus("checking available passkeys...");
|
|
6335
6287
|
setIsLoading(true);
|
|
@@ -6454,22 +6406,22 @@ function PassKeyStep(props) {
|
|
|
6454
6406
|
|
|
6455
6407
|
// src/internal/components/AuthMenu/SignInStep/SignInStep.tsx
|
|
6456
6408
|
var import_lucide_react12 = require("lucide-react");
|
|
6457
|
-
var
|
|
6409
|
+
var import_react16 = require("react");
|
|
6458
6410
|
|
|
6459
6411
|
// src/internal/components/AuthMenu/SignInStep/Email.tsx
|
|
6460
6412
|
init_lumiaPassport();
|
|
6461
|
-
var
|
|
6413
|
+
var import_react_query7 = require("@tanstack/react-query");
|
|
6462
6414
|
var import_lucide_react11 = require("lucide-react");
|
|
6463
|
-
var
|
|
6415
|
+
var import_react14 = require("react");
|
|
6464
6416
|
init_projectId();
|
|
6465
6417
|
|
|
6466
6418
|
// src/internal/components/ui/input.tsx
|
|
6467
|
-
var
|
|
6419
|
+
var import_react13 = __toESM(require("react"), 1);
|
|
6468
6420
|
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
6469
|
-
var Input =
|
|
6421
|
+
var Input = import_react13.default.forwardRef((props, ref) => {
|
|
6470
6422
|
const { className, disabled, error, Icon: Icon2, element, ...inputProps } = props;
|
|
6471
|
-
const internalRef = (0,
|
|
6472
|
-
(0,
|
|
6423
|
+
const internalRef = (0, import_react13.useRef)(null);
|
|
6424
|
+
(0, import_react13.useImperativeHandle)(ref, () => internalRef.current);
|
|
6473
6425
|
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: cn("w-full flex flex-col gap-1", className), children: [
|
|
6474
6426
|
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
6475
6427
|
"div",
|
|
@@ -6516,11 +6468,11 @@ Input.displayName = "Input";
|
|
|
6516
6468
|
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
6517
6469
|
function Email() {
|
|
6518
6470
|
const { config, callbacks } = useLumiaPassportConfig();
|
|
6519
|
-
const buttonRef = (0,
|
|
6471
|
+
const buttonRef = (0, import_react14.useRef)(null);
|
|
6520
6472
|
const isLoading = useLumiaPassportSession((st) => st.isLoading);
|
|
6521
6473
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
6522
6474
|
const { email, alert: alert2, setEmail, setExpiresIn, setStep, setAlert } = useAuthStore();
|
|
6523
|
-
const { mutate: onSendVerificationCode } = (0,
|
|
6475
|
+
const { mutate: onSendVerificationCode } = (0, import_react_query7.useMutation)({
|
|
6524
6476
|
mutationFn: async (mail) => {
|
|
6525
6477
|
const isEmailValid = mail.length !== 0 && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(mail);
|
|
6526
6478
|
if (!isEmailValid) {
|
|
@@ -6618,7 +6570,7 @@ function Email() {
|
|
|
6618
6570
|
// src/internal/components/AuthMenu/SignInStep/Social.tsx
|
|
6619
6571
|
init_assets();
|
|
6620
6572
|
init_lumiaPassport();
|
|
6621
|
-
var
|
|
6573
|
+
var import_react15 = require("react");
|
|
6622
6574
|
init_auth();
|
|
6623
6575
|
init_projectId();
|
|
6624
6576
|
|
|
@@ -6790,7 +6742,7 @@ function Social(props) {
|
|
|
6790
6742
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
6791
6743
|
const setIsWalletLinking = useLayoutDataStore((st) => st.setIsWalletLinking);
|
|
6792
6744
|
const { alert: alert2, setStep, setEmail, setFailedType, setAlert, setPasskeyStatus } = useAuthStore();
|
|
6793
|
-
const onSocialAuth = (0,
|
|
6745
|
+
const onSocialAuth = (0, import_react15.useCallback)(
|
|
6794
6746
|
async (providerId) => {
|
|
6795
6747
|
const normalizedProviderId = providerId.toLowerCase();
|
|
6796
6748
|
const provider = config.current?.social?.providers?.find(
|
|
@@ -7091,7 +7043,7 @@ function SignInStep(props) {
|
|
|
7091
7043
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react12.UserCircle, { className: "w-6 h-6" }),
|
|
7092
7044
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "font-bold text-xl leading-6", children: "Sign In" })
|
|
7093
7045
|
] }),
|
|
7094
|
-
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: enabledSigninMethods.map((kind, idx) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
|
|
7046
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: enabledSigninMethods.map((kind, idx) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_react16.Fragment, { children: [
|
|
7095
7047
|
idx > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center h-4", children: [
|
|
7096
7048
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { style: { borderTop: "1px solid var(--l-pass-bd)" }, className: "flex-1" }),
|
|
7097
7049
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "text-[10px] px-2 flex-none leading-4", children: "Or sign in using" }),
|
|
@@ -7116,16 +7068,16 @@ function SignInStep(props) {
|
|
|
7116
7068
|
}
|
|
7117
7069
|
|
|
7118
7070
|
// src/internal/components/AuthMenu/useAuthMenuHanders.ts
|
|
7119
|
-
var
|
|
7120
|
-
var
|
|
7071
|
+
var import_react_query8 = require("@tanstack/react-query");
|
|
7072
|
+
var import_react17 = require("react");
|
|
7121
7073
|
init_auth();
|
|
7122
7074
|
function useAuthMenuHandlers() {
|
|
7123
7075
|
const { config, callbacks } = useLumiaPassportConfig();
|
|
7124
|
-
const qc = (0,
|
|
7125
|
-
const pendingLoginResponseRef = (0,
|
|
7076
|
+
const qc = (0, import_react_query8.useQueryClient)();
|
|
7077
|
+
const pendingLoginResponseRef = (0, import_react17.useRef)(null);
|
|
7126
7078
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
7127
7079
|
const setIsDialogForced = useLayoutStore((st) => st.setIsDialogForced);
|
|
7128
|
-
const [telegramCleanup, setTelegramCleanup] = (0,
|
|
7080
|
+
const [telegramCleanup, setTelegramCleanup] = (0, import_react17.useState)(null);
|
|
7129
7081
|
const {
|
|
7130
7082
|
usePaymaster,
|
|
7131
7083
|
setError,
|
|
@@ -7138,7 +7090,7 @@ function useAuthMenuHandlers() {
|
|
|
7138
7090
|
} = useLumiaPassportSession();
|
|
7139
7091
|
const setStep = useAuthStore((st) => st.setStep);
|
|
7140
7092
|
const setAlert = useAuthStore((st) => st.setAlert);
|
|
7141
|
-
const createSessionWithKeyshare = (0,
|
|
7093
|
+
const createSessionWithKeyshare = (0, import_react17.useCallback)(
|
|
7142
7094
|
async (userId, hasServerKeyshare, isNewUser) => {
|
|
7143
7095
|
try {
|
|
7144
7096
|
try {
|
|
@@ -7172,7 +7124,7 @@ function useAuthMenuHandlers() {
|
|
|
7172
7124
|
},
|
|
7173
7125
|
[setStatus, callbacks, usePaymaster]
|
|
7174
7126
|
);
|
|
7175
|
-
const onAuthSuccess = (0,
|
|
7127
|
+
const onAuthSuccess = (0, import_react17.useCallback)(async () => {
|
|
7176
7128
|
setIsLoading(true);
|
|
7177
7129
|
const loginResponse = pendingLoginResponseRef.current;
|
|
7178
7130
|
if (!loginResponse || !loginResponse.userId) {
|
|
@@ -7207,6 +7159,7 @@ function useAuthMenuHandlers() {
|
|
|
7207
7159
|
callbacks?.onLumiaPassportAccount?.({ userId, address: addr, session: sess, hasKeyshare: hasServerKeyshare });
|
|
7208
7160
|
} catch {
|
|
7209
7161
|
}
|
|
7162
|
+
let hasKeyshareVaultBackup = false;
|
|
7210
7163
|
try {
|
|
7211
7164
|
const { checkServerBackupAvailability: checkServerBackupAvailability2, updateBackupStatus: updateBackupStatus2, getShareRecoveryStats: getShareRecoveryStats2 } = await Promise.resolve().then(() => (init_vaultClient(), vaultClient_exports));
|
|
7212
7165
|
const result = await checkServerBackupAvailability2();
|
|
@@ -7216,8 +7169,8 @@ function useAuthMenuHandlers() {
|
|
|
7216
7169
|
updateBackupStatus2(userId, "server", { enabled: false, error: "No server vault found" });
|
|
7217
7170
|
}
|
|
7218
7171
|
const stats = await getShareRecoveryStats2();
|
|
7219
|
-
|
|
7220
|
-
setHasServerVault(!!
|
|
7172
|
+
hasKeyshareVaultBackup = !!stats && (!!stats.created || !!stats.devices && stats.devices.length > 0);
|
|
7173
|
+
setHasServerVault(!!hasKeyshareVaultBackup);
|
|
7221
7174
|
qc.refetchQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY, addr] });
|
|
7222
7175
|
} catch (e) {
|
|
7223
7176
|
console.warn("[UI-KIT] Vault status check failed:", e);
|
|
@@ -7225,13 +7178,17 @@ function useAuthMenuHandlers() {
|
|
|
7225
7178
|
setSession(sess);
|
|
7226
7179
|
setAddress(addr);
|
|
7227
7180
|
setStatus("ready");
|
|
7228
|
-
|
|
7229
|
-
|
|
7230
|
-
|
|
7231
|
-
|
|
7232
|
-
|
|
7233
|
-
|
|
7234
|
-
|
|
7181
|
+
setTimeout(() => {
|
|
7182
|
+
if (!!jwt?.isNewUser || !hasKeyshareVaultBackup) {
|
|
7183
|
+
if (!!jwt?.isNewUser) console.log("[AuthMenu] New user detected - forcing backup flow");
|
|
7184
|
+
if (!hasKeyshareVaultBackup) console.log("[AuthMenu] No recovery data found - forcing backup flow");
|
|
7185
|
+
setIsDialogForced(true);
|
|
7186
|
+
setPage("keysare-backup" /* KEYSARE_BACKUP */);
|
|
7187
|
+
} else {
|
|
7188
|
+
setIsDialogForced(false);
|
|
7189
|
+
setPage(null);
|
|
7190
|
+
}
|
|
7191
|
+
}, 100);
|
|
7235
7192
|
} catch (error) {
|
|
7236
7193
|
if (error?.code === "KEYSHARE_RECOVERY_NEEDED") {
|
|
7237
7194
|
console.warn("[AuthMenu] Keyshare recovery needed for user:", userId);
|
|
@@ -7239,7 +7196,9 @@ function useAuthMenuHandlers() {
|
|
|
7239
7196
|
setError(null);
|
|
7240
7197
|
setRecoveryUserId(userId);
|
|
7241
7198
|
setStatus("recovery_needed");
|
|
7242
|
-
setTimeout(() =>
|
|
7199
|
+
setTimeout(() => {
|
|
7200
|
+
setPage("keyshare-restore" /* KEYSHARE_RESTORE */);
|
|
7201
|
+
}, 100);
|
|
7243
7202
|
} else {
|
|
7244
7203
|
pendingLoginResponseRef.current = null;
|
|
7245
7204
|
await import_auth3.jwtTokenManager.clearTokens();
|
|
@@ -7255,7 +7214,6 @@ function useAuthMenuHandlers() {
|
|
|
7255
7214
|
setIsLoading(false);
|
|
7256
7215
|
}
|
|
7257
7216
|
}, [
|
|
7258
|
-
// config.projectId,
|
|
7259
7217
|
qc,
|
|
7260
7218
|
callbacks,
|
|
7261
7219
|
setPage,
|
|
@@ -7269,7 +7227,7 @@ function useAuthMenuHandlers() {
|
|
|
7269
7227
|
setIsDialogForced,
|
|
7270
7228
|
createSessionWithKeyshare
|
|
7271
7229
|
]);
|
|
7272
|
-
const goBackToSignIn = (0,
|
|
7230
|
+
const goBackToSignIn = (0, import_react17.useCallback)(() => {
|
|
7273
7231
|
setStep("signin");
|
|
7274
7232
|
setAlert(null);
|
|
7275
7233
|
if (telegramCleanup) {
|
|
@@ -7286,7 +7244,7 @@ function useAuthMenuHandlers() {
|
|
|
7286
7244
|
|
|
7287
7245
|
// src/internal/components/AuthMenu/VerifyStep/VerifyStep.tsx
|
|
7288
7246
|
init_lumiaPassport();
|
|
7289
|
-
var
|
|
7247
|
+
var import_react_query9 = require("@tanstack/react-query");
|
|
7290
7248
|
var import_lucide_react13 = require("lucide-react");
|
|
7291
7249
|
|
|
7292
7250
|
// src/internal/assets/OtpIcon.tsx
|
|
@@ -7306,21 +7264,21 @@ function OtpIcon(props) {
|
|
|
7306
7264
|
init_projectId();
|
|
7307
7265
|
|
|
7308
7266
|
// src/internal/components/AuthMenu/VerifyStep/VerificationCodeInput.tsx
|
|
7309
|
-
var
|
|
7267
|
+
var import_react18 = require("react");
|
|
7310
7268
|
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
7311
7269
|
var VerificationCodeInput = (props) => {
|
|
7312
7270
|
const { onVerifyCode, onResendCode, isLoading, expiresIn } = props;
|
|
7313
7271
|
const setAlert = useAuthStore((st) => st.setAlert);
|
|
7314
|
-
const [timeLeft, setTimeLeft] = (0,
|
|
7315
|
-
(0,
|
|
7316
|
-
(0,
|
|
7272
|
+
const [timeLeft, setTimeLeft] = (0, import_react18.useState)(expiresIn);
|
|
7273
|
+
(0, import_react18.useEffect)(() => setTimeLeft(expiresIn), [expiresIn]);
|
|
7274
|
+
(0, import_react18.useEffect)(() => {
|
|
7317
7275
|
const t = setInterval(() => setTimeLeft((secs) => secs > 0 ? secs - 1 : 0), 1e3);
|
|
7318
7276
|
return () => clearInterval(t);
|
|
7319
7277
|
}, []);
|
|
7320
|
-
const lastSubmittedRef = (0,
|
|
7321
|
-
const inputsRef = (0,
|
|
7322
|
-
const [digits, setDigits] = (0,
|
|
7323
|
-
(0,
|
|
7278
|
+
const lastSubmittedRef = (0, import_react18.useRef)(null);
|
|
7279
|
+
const inputsRef = (0, import_react18.useRef)([]);
|
|
7280
|
+
const [digits, setDigits] = (0, import_react18.useState)(["", "", "", "", "", ""]);
|
|
7281
|
+
(0, import_react18.useEffect)(() => {
|
|
7324
7282
|
const code = digits.join("");
|
|
7325
7283
|
if (code.length === 6 && digits.every((d) => d !== "") && !isLoading) {
|
|
7326
7284
|
if (lastSubmittedRef.current !== code) {
|
|
@@ -7329,7 +7287,7 @@ var VerificationCodeInput = (props) => {
|
|
|
7329
7287
|
}
|
|
7330
7288
|
}
|
|
7331
7289
|
}, [digits, isLoading, onVerifyCode]);
|
|
7332
|
-
(0,
|
|
7290
|
+
(0, import_react18.useEffect)(() => {
|
|
7333
7291
|
const t = setTimeout(() => {
|
|
7334
7292
|
inputsRef.current[0]?.focus();
|
|
7335
7293
|
}, 0);
|
|
@@ -7441,10 +7399,9 @@ var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
|
7441
7399
|
function VerifyStep(props) {
|
|
7442
7400
|
const { pendingLoginResponseRef, goBackToSignIn, onAuthSuccess } = props;
|
|
7443
7401
|
const { callbacks } = useLumiaPassportConfig();
|
|
7444
|
-
const
|
|
7402
|
+
const recoveryUserId = useLumiaPassportSession((st) => st.recoveryUserId);
|
|
7445
7403
|
const isSessionLoading = useLumiaPassportSession((st) => st.isLoading);
|
|
7446
7404
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
7447
|
-
const recoveryUserId = useLumiaPassportSession((st) => st.recoveryUserId);
|
|
7448
7405
|
const {
|
|
7449
7406
|
email,
|
|
7450
7407
|
expiresIn,
|
|
@@ -7454,7 +7411,7 @@ function VerifyStep(props) {
|
|
|
7454
7411
|
setExpiresIn,
|
|
7455
7412
|
setAlert
|
|
7456
7413
|
} = useAuthStore();
|
|
7457
|
-
const { mutate: onVerifyCode, isPending: isCodeVerifying } = (0,
|
|
7414
|
+
const { mutate: onVerifyCode, isPending: isCodeVerifying } = (0, import_react_query9.useMutation)({
|
|
7458
7415
|
mutationFn: async (code) => {
|
|
7459
7416
|
setIsLoading(true);
|
|
7460
7417
|
setAlert(null);
|
|
@@ -7489,14 +7446,13 @@ function VerifyStep(props) {
|
|
|
7489
7446
|
const storage = typeof window !== "undefined" ? window.localStorage : void 0;
|
|
7490
7447
|
const localKeyshare = storage?.getItem(`tss.${loginResponse.userId}.keyshare`);
|
|
7491
7448
|
const needsRecovery = loginResponse.hasKeyshare && !loginResponse.isNewUser && !localKeyshare;
|
|
7492
|
-
await onAuthSuccess?.();
|
|
7493
|
-
console.log("[AuthModal] Authentication successful, closing modal");
|
|
7494
7449
|
if (!recoveryUserId && !needsRecovery) {
|
|
7495
7450
|
setStep("signin");
|
|
7496
7451
|
setEmail("");
|
|
7497
7452
|
setAlert(null);
|
|
7498
|
-
setPage(null);
|
|
7499
7453
|
}
|
|
7454
|
+
await onAuthSuccess?.();
|
|
7455
|
+
console.log("[AuthModal] Authentication successful");
|
|
7500
7456
|
setIsLoading(false);
|
|
7501
7457
|
},
|
|
7502
7458
|
onError: (error) => {
|
|
@@ -7521,7 +7477,7 @@ function VerifyStep(props) {
|
|
|
7521
7477
|
setIsLoading(false);
|
|
7522
7478
|
}
|
|
7523
7479
|
});
|
|
7524
|
-
const { mutate: onResendCode, isPending: isCodeResending } = (0,
|
|
7480
|
+
const { mutate: onResendCode, isPending: isCodeResending } = (0, import_react_query9.useMutation)({
|
|
7525
7481
|
mutationFn: async () => {
|
|
7526
7482
|
setAlert(null);
|
|
7527
7483
|
setIsLoading(true);
|
|
@@ -7607,9 +7563,9 @@ var AuthMenu = () => {
|
|
|
7607
7563
|
const setMainPageHeight = useLayoutDataStore((st) => st.setMainPageHeight);
|
|
7608
7564
|
const { step, alert: alert2, setStep, setPasskeyStatus, setEmail, setAlert } = useAuthStore();
|
|
7609
7565
|
const { pendingLoginResponseRef, onAuthSuccess, goBackToSignIn } = useAuthMenuHandlers();
|
|
7610
|
-
const [isAlertShowReady, setIsAlertShowReady] = (0,
|
|
7611
|
-
const readyTimeout = (0,
|
|
7612
|
-
(0,
|
|
7566
|
+
const [isAlertShowReady, setIsAlertShowReady] = (0, import_react19.useState)(false);
|
|
7567
|
+
const readyTimeout = (0, import_react19.useRef)(null);
|
|
7568
|
+
(0, import_react19.useEffect)(() => {
|
|
7613
7569
|
if (readyTimeout.current) {
|
|
7614
7570
|
clearTimeout(readyTimeout.current);
|
|
7615
7571
|
readyTimeout.current = null;
|
|
@@ -7617,7 +7573,7 @@ var AuthMenu = () => {
|
|
|
7617
7573
|
setIsAlertShowReady(false);
|
|
7618
7574
|
readyTimeout.current = setTimeout(() => setIsAlertShowReady(true), 750);
|
|
7619
7575
|
}, [step]);
|
|
7620
|
-
(0,
|
|
7576
|
+
(0, import_react19.useEffect)(() => {
|
|
7621
7577
|
setMainPageHeight(DEFAULT_AUTH_MENU_HEIGHT);
|
|
7622
7578
|
return () => {
|
|
7623
7579
|
setStep("signin");
|
|
@@ -7633,7 +7589,7 @@ var AuthMenu = () => {
|
|
|
7633
7589
|
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "text-sm text-[var(--l-pass-fg-muted)]", children: "Initializing wallet..." })
|
|
7634
7590
|
] });
|
|
7635
7591
|
}
|
|
7636
|
-
const stepContent = (0,
|
|
7592
|
+
const stepContent = (0, import_react19.useMemo)(
|
|
7637
7593
|
() => ({
|
|
7638
7594
|
"failed": /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(AuthFailedStep, {}),
|
|
7639
7595
|
"verify": /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
@@ -7644,20 +7600,8 @@ var AuthMenu = () => {
|
|
|
7644
7600
|
onAuthSuccess
|
|
7645
7601
|
}
|
|
7646
7602
|
),
|
|
7647
|
-
"signin": /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
7648
|
-
|
|
7649
|
-
{
|
|
7650
|
-
pendingLoginResponseRef,
|
|
7651
|
-
onAuthSuccess
|
|
7652
|
-
}
|
|
7653
|
-
),
|
|
7654
|
-
"signin-passkey": /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
7655
|
-
PassKeyStep,
|
|
7656
|
-
{
|
|
7657
|
-
pendingLoginResponseRef,
|
|
7658
|
-
onAuthSuccess
|
|
7659
|
-
}
|
|
7660
|
-
)
|
|
7603
|
+
"signin": /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(SignInStep, { pendingLoginResponseRef, onAuthSuccess }),
|
|
7604
|
+
"signin-passkey": /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(PassKeyStep, { pendingLoginResponseRef, onAuthSuccess })
|
|
7661
7605
|
}),
|
|
7662
7606
|
[onAuthSuccess, goBackToSignIn]
|
|
7663
7607
|
);
|
|
@@ -7786,9 +7730,9 @@ function RampnowIcon() {
|
|
|
7786
7730
|
}
|
|
7787
7731
|
|
|
7788
7732
|
// src/internal/components/BuyMenu/binance/Binance.tsx
|
|
7789
|
-
var
|
|
7733
|
+
var import_react_query10 = require("@tanstack/react-query");
|
|
7790
7734
|
var import_lucide_react15 = require("lucide-react");
|
|
7791
|
-
var
|
|
7735
|
+
var import_react21 = require("react");
|
|
7792
7736
|
|
|
7793
7737
|
// src/internal/components/BuyMenu/components/PaymentSelector.tsx
|
|
7794
7738
|
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
@@ -7885,7 +7829,7 @@ async function createPreorderMutation(payload) {
|
|
|
7885
7829
|
}
|
|
7886
7830
|
|
|
7887
7831
|
// src/internal/components/BuyMenu/binance/useQueriesErrorHandler.ts
|
|
7888
|
-
var
|
|
7832
|
+
var import_react20 = require("react");
|
|
7889
7833
|
|
|
7890
7834
|
// src/internal/components/BuyMenu/binance/utils.ts
|
|
7891
7835
|
function getPayMethodID(pm) {
|
|
@@ -7905,7 +7849,7 @@ function handleErrors(errors) {
|
|
|
7905
7849
|
// src/internal/components/BuyMenu/binance/useQueriesErrorHandler.ts
|
|
7906
7850
|
var useQueriesErrorHandler = (errors, stateUpdater) => {
|
|
7907
7851
|
const { error: errorTitle, message: errorMessage } = handleErrors(errors);
|
|
7908
|
-
(0,
|
|
7852
|
+
(0, import_react20.useEffect)(() => {
|
|
7909
7853
|
if (!errorTitle && !errorMessage) return;
|
|
7910
7854
|
console.error(`[BuyModal][Binance] ${errorTitle}: ${errorMessage}`);
|
|
7911
7855
|
stateUpdater(1);
|
|
@@ -7930,12 +7874,12 @@ function Binance(props) {
|
|
|
7930
7874
|
setMinAmount,
|
|
7931
7875
|
setSrcInputAmount
|
|
7932
7876
|
} = control;
|
|
7933
|
-
const qc = (0,
|
|
7877
|
+
const qc = (0, import_react_query10.useQueryClient)();
|
|
7934
7878
|
const {
|
|
7935
7879
|
data: lumiaNetwork,
|
|
7936
7880
|
isLoading: isLumiaNetworkLoading,
|
|
7937
7881
|
error: lumiaNetworkError
|
|
7938
|
-
} = (0,
|
|
7882
|
+
} = (0, import_react_query10.useQuery)({
|
|
7939
7883
|
retry: false,
|
|
7940
7884
|
enabled: !!walletAddress,
|
|
7941
7885
|
queryKey: [QUERY_KEYS3.binanceNetworksQuery, walletAddress],
|
|
@@ -7946,27 +7890,27 @@ function Binance(props) {
|
|
|
7946
7890
|
data: paymentModes = null,
|
|
7947
7891
|
isLoading: isPaymentModesLoading,
|
|
7948
7892
|
error: paymentMethodsError
|
|
7949
|
-
} = (0,
|
|
7893
|
+
} = (0, import_react_query10.useQuery)({
|
|
7950
7894
|
retry: false,
|
|
7951
7895
|
enabled: !!isLumiaAvailable && !!walletAddress,
|
|
7952
7896
|
// && srcQueryAmount > 0,
|
|
7953
7897
|
queryKey: [QUERY_KEYS3.binancePaymentModes, walletAddress, isLumiaAvailable, srcQueryAmount],
|
|
7954
7898
|
queryFn: async () => getPaymentMethodsQuery({ totalAmount: String(srcQueryAmount || 1) })
|
|
7955
7899
|
});
|
|
7956
|
-
const lastLoadedPaymentModes = (0,
|
|
7957
|
-
(0,
|
|
7900
|
+
const lastLoadedPaymentModes = (0, import_react21.useRef)([]);
|
|
7901
|
+
(0, import_react21.useEffect)(() => {
|
|
7958
7902
|
if (!paymentModes?.length) return;
|
|
7959
7903
|
setPaymentMode(getPayMethodID(paymentModes[0]));
|
|
7960
7904
|
lastLoadedPaymentModes.current = paymentModes;
|
|
7961
7905
|
}, [paymentModes]);
|
|
7962
7906
|
const selectedPaymentMode = paymentModes?.find((el) => getPayMethodID(el) === paymentMode) || null;
|
|
7963
7907
|
const minimum = Number(selectedPaymentMode?.fiatMinLimit || "0");
|
|
7964
|
-
(0,
|
|
7908
|
+
(0, import_react21.useEffect)(() => setMinAmount(minimum), [minimum]);
|
|
7965
7909
|
const {
|
|
7966
7910
|
data: quoteData = null,
|
|
7967
7911
|
isLoading: isQuoteDataLoading,
|
|
7968
7912
|
error: quoteError
|
|
7969
|
-
} = (0,
|
|
7913
|
+
} = (0, import_react_query10.useQuery)({
|
|
7970
7914
|
retry: false,
|
|
7971
7915
|
enabled: !!walletAddress && srcQueryAmount > 0 && minimum > 0 && srcQueryAmount >= minimum,
|
|
7972
7916
|
queryKey: [QUERY_KEYS3.binanceQuote, walletAddress, selectedPaymentMode, srcQueryAmount],
|
|
@@ -7982,7 +7926,7 @@ function Binance(props) {
|
|
|
7982
7926
|
[lumiaNetworkError, paymentMethodsError, quoteError],
|
|
7983
7927
|
setSrcInputAmount
|
|
7984
7928
|
);
|
|
7985
|
-
const { mutate: checkoutFundWalletOrder, isPending: isFundWalletOrderCheckouting } = (0,
|
|
7929
|
+
const { mutate: checkoutFundWalletOrder, isPending: isFundWalletOrderCheckouting } = (0, import_react_query10.useMutation)({
|
|
7986
7930
|
mutationFn: async () => {
|
|
7987
7931
|
setRedirecting(true);
|
|
7988
7932
|
const returnUrl = window.location.href.split("?")[0];
|
|
@@ -8006,7 +7950,7 @@ function Binance(props) {
|
|
|
8006
7950
|
setRedirecting(false);
|
|
8007
7951
|
}
|
|
8008
7952
|
});
|
|
8009
|
-
(0,
|
|
7953
|
+
(0, import_react21.useEffect)(() => {
|
|
8010
7954
|
return () => {
|
|
8011
7955
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.binanceNetworksQuery] });
|
|
8012
7956
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.binancePaymentModes] });
|
|
@@ -8068,9 +8012,9 @@ function Binance(props) {
|
|
|
8068
8012
|
}
|
|
8069
8013
|
|
|
8070
8014
|
// src/internal/components/BuyMenu/rampnow/Rampnow.tsx
|
|
8071
|
-
var
|
|
8015
|
+
var import_react_query11 = require("@tanstack/react-query");
|
|
8072
8016
|
var import_lucide_react16 = require("lucide-react");
|
|
8073
|
-
var
|
|
8017
|
+
var import_react22 = require("react");
|
|
8074
8018
|
|
|
8075
8019
|
// src/internal/components/BuyMenu/rampnow/api.ts
|
|
8076
8020
|
init_iframe_manager();
|
|
@@ -8134,8 +8078,8 @@ function Rampnow(props) {
|
|
|
8134
8078
|
setSrcInputAmount,
|
|
8135
8079
|
setMinAmount
|
|
8136
8080
|
} = control;
|
|
8137
|
-
const qc = (0,
|
|
8138
|
-
(0,
|
|
8081
|
+
const qc = (0, import_react_query11.useQueryClient)();
|
|
8082
|
+
(0, import_react22.useEffect)(() => {
|
|
8139
8083
|
setMinAmount(MINIMUM_RAMP_AMOUNT);
|
|
8140
8084
|
setPaymentMode(PAYMENT_MODES[0].id);
|
|
8141
8085
|
}, []);
|
|
@@ -8143,7 +8087,7 @@ function Rampnow(props) {
|
|
|
8143
8087
|
data: configData,
|
|
8144
8088
|
isLoading: isConfigLoading,
|
|
8145
8089
|
error: configError
|
|
8146
|
-
} = (0,
|
|
8090
|
+
} = (0, import_react_query11.useQuery)({
|
|
8147
8091
|
retry: false,
|
|
8148
8092
|
enabled: !!walletAddress,
|
|
8149
8093
|
queryKey: [QUERY_KEYS3.getRampNowConfig, walletAddress],
|
|
@@ -8153,7 +8097,7 @@ function Rampnow(props) {
|
|
|
8153
8097
|
data: quoteData,
|
|
8154
8098
|
isLoading: isQuoteDataLoading,
|
|
8155
8099
|
error: quoteError
|
|
8156
|
-
} = (0,
|
|
8100
|
+
} = (0, import_react_query11.useQuery)({
|
|
8157
8101
|
retry: false,
|
|
8158
8102
|
enabled: !!configData && !!walletAddress && !!paymentMode && srcQueryAmount >= MINIMUM_RAMP_AMOUNT,
|
|
8159
8103
|
queryKey: [QUERY_KEYS3.getRampNowQuote, walletAddress, srcQueryAmount, paymentMode],
|
|
@@ -8163,7 +8107,7 @@ function Rampnow(props) {
|
|
|
8163
8107
|
paymentMode
|
|
8164
8108
|
})
|
|
8165
8109
|
});
|
|
8166
|
-
const { mutate: checkoutFundWalletOrder, isPending: isFundWalletOrderCheckouting } = (0,
|
|
8110
|
+
const { mutate: checkoutFundWalletOrder, isPending: isFundWalletOrderCheckouting } = (0, import_react_query11.useMutation)({
|
|
8167
8111
|
mutationFn: async () => {
|
|
8168
8112
|
if (!configData?.apiKey?.length || !configData?.orderUrl?.length) {
|
|
8169
8113
|
throw new Error("RampNow order service is not available");
|
|
@@ -8192,7 +8136,7 @@ function Rampnow(props) {
|
|
|
8192
8136
|
console.error("Create CheckoutOrder failed:", err);
|
|
8193
8137
|
}
|
|
8194
8138
|
});
|
|
8195
|
-
(0,
|
|
8139
|
+
(0, import_react22.useEffect)(() => {
|
|
8196
8140
|
return () => {
|
|
8197
8141
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.getRampNowConfig] });
|
|
8198
8142
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.getRampNowQuote] });
|
|
@@ -8274,7 +8218,7 @@ var RAMP_PROVIDERS = {
|
|
|
8274
8218
|
var REDIRECT_TIMEOUT_MS = 1500;
|
|
8275
8219
|
|
|
8276
8220
|
// src/internal/components/BuyMenu/useSelectables.ts
|
|
8277
|
-
var
|
|
8221
|
+
var import_react23 = require("react");
|
|
8278
8222
|
|
|
8279
8223
|
// src/internal/utils/debounce.ts
|
|
8280
8224
|
function debounce2(func, waitFor) {
|
|
@@ -8288,14 +8232,14 @@ function debounce2(func, waitFor) {
|
|
|
8288
8232
|
// src/internal/components/BuyMenu/useSelectables.ts
|
|
8289
8233
|
var ON_INPUT_QUERY_DELAY = 2e3;
|
|
8290
8234
|
var useSelectables = () => {
|
|
8291
|
-
const [redirecting, setRedirecting] = (0,
|
|
8292
|
-
const [rampProvider, setrRampProvider] = (0,
|
|
8293
|
-
const [minAmount, setMinAmount] = (0,
|
|
8294
|
-
const inputRef = (0,
|
|
8295
|
-
const [srcQueryAmount, setSrcQueryAmount] = (0,
|
|
8296
|
-
const [srcInputAmount, setSrcInputAmount] = (0,
|
|
8297
|
-
const [paymentMode, setPaymentMode] = (0,
|
|
8298
|
-
const setQueryAmountDebounced = (0,
|
|
8235
|
+
const [redirecting, setRedirecting] = (0, import_react23.useState)(false);
|
|
8236
|
+
const [rampProvider, setrRampProvider] = (0, import_react23.useState)("binance");
|
|
8237
|
+
const [minAmount, setMinAmount] = (0, import_react23.useState)(0);
|
|
8238
|
+
const inputRef = (0, import_react23.useRef)(null);
|
|
8239
|
+
const [srcQueryAmount, setSrcQueryAmount] = (0, import_react23.useState)(0);
|
|
8240
|
+
const [srcInputAmount, setSrcInputAmount] = (0, import_react23.useState)(0);
|
|
8241
|
+
const [paymentMode, setPaymentMode] = (0, import_react23.useState)(null);
|
|
8242
|
+
const setQueryAmountDebounced = (0, import_react23.useCallback)(
|
|
8299
8243
|
debounce2((inputAmount) => {
|
|
8300
8244
|
const checkedValue = Math.max(inputAmount, minAmount);
|
|
8301
8245
|
setSrcInputAmount(checkedValue);
|
|
@@ -8303,7 +8247,7 @@ var useSelectables = () => {
|
|
|
8303
8247
|
}, ON_INPUT_QUERY_DELAY),
|
|
8304
8248
|
[minAmount]
|
|
8305
8249
|
);
|
|
8306
|
-
(0,
|
|
8250
|
+
(0, import_react23.useEffect)(() => setQueryAmountDebounced(srcInputAmount), [srcInputAmount, setQueryAmountDebounced]);
|
|
8307
8251
|
return {
|
|
8308
8252
|
inputRef,
|
|
8309
8253
|
redirecting,
|
|
@@ -8365,19 +8309,78 @@ function BuyMenu() {
|
|
|
8365
8309
|
}
|
|
8366
8310
|
|
|
8367
8311
|
// src/internal/components/KeyshareRestoreMenu/KeyshareRestoreMenu.tsx
|
|
8368
|
-
var
|
|
8312
|
+
var import_react_query16 = require("@tanstack/react-query");
|
|
8369
8313
|
var import_lucide_react25 = require("lucide-react");
|
|
8370
|
-
var
|
|
8314
|
+
var import_react32 = require("react");
|
|
8371
8315
|
init_vaultClient();
|
|
8372
8316
|
|
|
8317
|
+
// src/internal/components/ui/switch.tsx
|
|
8318
|
+
var import_react24 = require("react");
|
|
8319
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
8320
|
+
var Switch = (0, import_react24.forwardRef)((props, ref) => {
|
|
8321
|
+
const { className, labels, ...inputProps } = props;
|
|
8322
|
+
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
8323
|
+
const [labelW, setLabelW] = (0, import_react24.useState)(0);
|
|
8324
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
8325
|
+
"div",
|
|
8326
|
+
{
|
|
8327
|
+
role: "switch",
|
|
8328
|
+
"aria-checked": inputProps.checked,
|
|
8329
|
+
className: cn(
|
|
8330
|
+
"block rounded-full w-fit h-5 px-[2px] outline-none flex-none",
|
|
8331
|
+
inputProps.checked ? "bg-[var(--l-pass-bg-success)]" : "bg-[var(--l-pass-bg-info)]",
|
|
8332
|
+
className
|
|
8333
|
+
),
|
|
8334
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
|
|
8335
|
+
"label",
|
|
8336
|
+
{
|
|
8337
|
+
className: "relative inline-block h-4 outline-none",
|
|
8338
|
+
style: {
|
|
8339
|
+
width: `calc(16px + ${labelW}px)`,
|
|
8340
|
+
transition: "width 200ms ease",
|
|
8341
|
+
cursor: inputProps.disabled ? "not-allowed" : "pointer"
|
|
8342
|
+
},
|
|
8343
|
+
children: [
|
|
8344
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("input", { type: "checkbox", className: "hidden sr-only peer outline-none", ref, ...inputProps }),
|
|
8345
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
8346
|
+
"span",
|
|
8347
|
+
{
|
|
8348
|
+
ref: (inst) => {
|
|
8349
|
+
if (inst) setLabelW(inst.clientWidth);
|
|
8350
|
+
},
|
|
8351
|
+
style: {
|
|
8352
|
+
left: inputProps.checked ? "0px" : "16px",
|
|
8353
|
+
color: inputProps.checked ? colorMode === "dark" ? "var(--l-pass-fg-inverted)" : "var(--l-pass-fg)" : "var(--l-pass-fg)",
|
|
8354
|
+
transition: "left 200ms ease"
|
|
8355
|
+
},
|
|
8356
|
+
className: "absolute top-0 px-2 text-[10px] leading-4 font-semibold min-w-4 select-none",
|
|
8357
|
+
children: inputProps.checked ? labels?.checked : labels?.unchecked
|
|
8358
|
+
}
|
|
8359
|
+
),
|
|
8360
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
8361
|
+
"span",
|
|
8362
|
+
{
|
|
8363
|
+
style: {
|
|
8364
|
+
left: inputProps.checked ? `${labelW}px` : "0px",
|
|
8365
|
+
transition: "left 200ms ease"
|
|
8366
|
+
},
|
|
8367
|
+
className: "absolute top-0 w-4 h-4 rounded-full bg-[var(--l-pass-fg)]"
|
|
8368
|
+
}
|
|
8369
|
+
)
|
|
8370
|
+
]
|
|
8371
|
+
}
|
|
8372
|
+
)
|
|
8373
|
+
}
|
|
8374
|
+
);
|
|
8375
|
+
});
|
|
8376
|
+
Switch.displayName = "Switch";
|
|
8377
|
+
|
|
8373
8378
|
// src/internal/components/KeyshareRestoreMenu/components/MethodSelector.tsx
|
|
8374
8379
|
var import_lucide_react18 = require("lucide-react");
|
|
8375
|
-
var
|
|
8380
|
+
var import_react28 = require("react");
|
|
8376
8381
|
|
|
8377
|
-
// src/internal/components/KeyshareRestoreMenu/hooks/
|
|
8378
|
-
var
|
|
8379
|
-
var import_react26 = require("react");
|
|
8380
|
-
init_vaultClient();
|
|
8382
|
+
// src/internal/components/KeyshareRestoreMenu/hooks/useOnRestoreSuccess.ts
|
|
8383
|
+
var import_react25 = require("react");
|
|
8381
8384
|
|
|
8382
8385
|
// src/internal/components/KeyshareRestoreMenu/hooks/useRestoreStore.ts
|
|
8383
8386
|
var import_zustand4 = require("zustand");
|
|
@@ -8406,54 +8409,14 @@ var useRestoreStore = (0, import_zustand4.create)((set) => ({
|
|
|
8406
8409
|
setSuccess: (success) => set({ success })
|
|
8407
8410
|
}));
|
|
8408
8411
|
|
|
8409
|
-
// src/internal/components/KeyshareRestoreMenu/hooks/useCheckBackupAvailability.ts
|
|
8410
|
-
function useCheckBackupAvailability() {
|
|
8411
|
-
const qc = (0, import_react_query13.useQueryClient)();
|
|
8412
|
-
const address = useLumiaPassportSession((st) => st.address);
|
|
8413
|
-
const { setError, setHasServerBackup, setCheckingBackup } = useRestoreStore();
|
|
8414
|
-
const {
|
|
8415
|
-
data: serverRecoveryData,
|
|
8416
|
-
isLoading: isRecoveryLoading,
|
|
8417
|
-
error: recoveryError
|
|
8418
|
-
} = (0, import_react_query13.useQuery)({
|
|
8419
|
-
retry: false,
|
|
8420
|
-
queryKey: [CHECK_BACKUP_QUERY_KEY, address],
|
|
8421
|
-
queryFn: async () => await getShareRecoveryStats()
|
|
8422
|
-
});
|
|
8423
|
-
(0, import_react26.useEffect)(() => {
|
|
8424
|
-
qc.invalidateQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY] });
|
|
8425
|
-
}, [qc]);
|
|
8426
|
-
(0, import_react26.useEffect)(() => {
|
|
8427
|
-
setCheckingBackup(isRecoveryLoading);
|
|
8428
|
-
if (!!isRecoveryLoading) return;
|
|
8429
|
-
if (!!recoveryError) {
|
|
8430
|
-
console.warn("[KeyshareRestoreMenu] Failed to check backup availability:", recoveryError);
|
|
8431
|
-
setError("Failed to check backup availability");
|
|
8432
|
-
setHasServerBackup(false);
|
|
8433
|
-
setCheckingBackup(false);
|
|
8434
|
-
return;
|
|
8435
|
-
}
|
|
8436
|
-
const hasRecoveryData = serverRecoveryData?.created || serverRecoveryData?.devices?.length > 0;
|
|
8437
|
-
setHasServerBackup(!!hasRecoveryData);
|
|
8438
|
-
setCheckingBackup(false);
|
|
8439
|
-
}, [serverRecoveryData, recoveryError, isRecoveryLoading]);
|
|
8440
|
-
return {
|
|
8441
|
-
serverRecoveryData,
|
|
8442
|
-
isRecoveryLoading,
|
|
8443
|
-
recoveryError,
|
|
8444
|
-
hasRecoveryData: serverRecoveryData?.created || serverRecoveryData?.devices?.length > 0
|
|
8445
|
-
};
|
|
8446
|
-
}
|
|
8447
|
-
|
|
8448
8412
|
// src/internal/components/KeyshareRestoreMenu/hooks/useOnRestoreSuccess.ts
|
|
8449
|
-
var import_react27 = require("react");
|
|
8450
8413
|
function useOnRestoreSuccess() {
|
|
8451
8414
|
const { config, callbacks } = useLumiaPassportConfig();
|
|
8452
8415
|
const setIsDialogForced = useLayoutStore((st) => st.setIsDialogForced);
|
|
8453
8416
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
8454
8417
|
const { usePaymaster, recoveryUserId, setRecoveryUserId, setSession, setAddress, setStatus } = useLumiaPassportSession();
|
|
8455
8418
|
const { setError, setSuccess } = useRestoreStore();
|
|
8456
|
-
const createSessionWithKeyshare = (0,
|
|
8419
|
+
const createSessionWithKeyshare = (0, import_react25.useCallback)(
|
|
8457
8420
|
async (userId, hasServerKeyshare, isNewUser) => {
|
|
8458
8421
|
try {
|
|
8459
8422
|
try {
|
|
@@ -8487,21 +8450,16 @@ function useOnRestoreSuccess() {
|
|
|
8487
8450
|
},
|
|
8488
8451
|
[setStatus, callbacks, usePaymaster]
|
|
8489
8452
|
);
|
|
8490
|
-
const onRestoreSuccess = (0,
|
|
8453
|
+
const onRestoreSuccess = (0, import_react25.useCallback)(async () => {
|
|
8491
8454
|
const { verifyToken: verifyToken2, jwtTokenManager: jwtTokenManager4 } = await Promise.resolve().then(() => (init_auth(), auth_exports));
|
|
8492
8455
|
const verify = await verifyToken2();
|
|
8493
8456
|
const hasServerKeyshare = verify?.hasKeyshare ?? jwtTokenManager4.getHasKeyshare() ?? false;
|
|
8494
8457
|
if (recoveryUserId) {
|
|
8495
8458
|
try {
|
|
8496
8459
|
const { session: sess, address: addr } = await createSessionWithKeyshare(recoveryUserId, hasServerKeyshare);
|
|
8497
|
-
setSession(sess);
|
|
8498
|
-
setAddress(addr);
|
|
8499
|
-
setStatus("ready");
|
|
8500
8460
|
setRecoveryUserId(null);
|
|
8501
8461
|
setSuccess(null);
|
|
8502
8462
|
setError(null);
|
|
8503
|
-
setIsDialogForced(false);
|
|
8504
|
-
setPage("main-menu" /* MAIN_MENU */);
|
|
8505
8463
|
try {
|
|
8506
8464
|
callbacks?.onLumiaPassportConnect?.({
|
|
8507
8465
|
address: addr,
|
|
@@ -8533,11 +8491,17 @@ function useOnRestoreSuccess() {
|
|
|
8533
8491
|
} catch (e) {
|
|
8534
8492
|
console.warn("[UI-KIT] Failed to update backup status:", e);
|
|
8535
8493
|
}
|
|
8494
|
+
setSession(sess);
|
|
8495
|
+
setAddress(addr);
|
|
8496
|
+
setStatus("ready");
|
|
8497
|
+
setPage("main-menu" /* MAIN_MENU */);
|
|
8498
|
+
setTimeout(() => {
|
|
8499
|
+
setIsDialogForced(false);
|
|
8500
|
+
}, 375);
|
|
8536
8501
|
} catch (err) {
|
|
8537
8502
|
setSuccess(null);
|
|
8538
8503
|
setError(err?.message || String(err));
|
|
8539
8504
|
setStatus("error");
|
|
8540
|
-
setIsDialogForced(false);
|
|
8541
8505
|
}
|
|
8542
8506
|
}
|
|
8543
8507
|
}, [
|
|
@@ -8555,17 +8519,17 @@ function useOnRestoreSuccess() {
|
|
|
8555
8519
|
}
|
|
8556
8520
|
|
|
8557
8521
|
// src/internal/components/KeyshareRestoreMenu/hooks/useCreateBackup.ts
|
|
8558
|
-
var
|
|
8559
|
-
var
|
|
8522
|
+
var import_react_query12 = require("@tanstack/react-query");
|
|
8523
|
+
var import_react26 = require("react");
|
|
8560
8524
|
init_iframe_manager();
|
|
8561
8525
|
function useCreateBackup() {
|
|
8562
|
-
const qc = (0,
|
|
8526
|
+
const qc = (0, import_react_query12.useQueryClient)();
|
|
8563
8527
|
const session = useLumiaPassportSession((st) => st.session);
|
|
8564
8528
|
const address = useLumiaPassportSession((st) => st.address);
|
|
8565
8529
|
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
8566
8530
|
const setIsDialogForced = useLayoutStore((st) => st.setIsDialogForced);
|
|
8567
8531
|
const { usePasskey, restorePassword, selectedCloudProvider, setSuccess, setError, setMethod } = useRestoreStore();
|
|
8568
|
-
(0,
|
|
8532
|
+
(0, import_react26.useEffect)(() => {
|
|
8569
8533
|
if (!hasServerVault) {
|
|
8570
8534
|
setMethod("server");
|
|
8571
8535
|
setIsDialogForced(true);
|
|
@@ -8573,7 +8537,7 @@ function useCreateBackup() {
|
|
|
8573
8537
|
}, [hasServerVault, setIsDialogForced, setMethod]);
|
|
8574
8538
|
const passportUserId = session?.mpcUserId || "";
|
|
8575
8539
|
const onBackupSuccess = () => console.log("[ConnectWalletButton] Backup created successfully");
|
|
8576
|
-
const { mutate: createPasswordBackup, isPending: isPasswordBackupCreating } = (0,
|
|
8540
|
+
const { mutate: createPasswordBackup, isPending: isPasswordBackupCreating } = (0, import_react_query12.useMutation)({
|
|
8577
8541
|
mutationFn: async () => {
|
|
8578
8542
|
const iframeManager = getIframeManager();
|
|
8579
8543
|
if (!iframeManager) {
|
|
@@ -8583,20 +8547,25 @@ function useCreateBackup() {
|
|
|
8583
8547
|
if (!usePasskey && !restorePassword) {
|
|
8584
8548
|
throw new Error("Please provide a password for the backup");
|
|
8585
8549
|
}
|
|
8586
|
-
|
|
8587
|
-
|
|
8588
|
-
|
|
8589
|
-
|
|
8590
|
-
|
|
8550
|
+
const navigateToMainMenu = jwt.isNewUser || !hasServerVault;
|
|
8551
|
+
console.log("[BACKUP STATUS] is new user:", jwt.isNewUser, !hasServerVault);
|
|
8552
|
+
return {
|
|
8553
|
+
response: await iframeManager.createBackup(
|
|
8554
|
+
passportUserId,
|
|
8555
|
+
{ method: "server", password: restorePassword },
|
|
8556
|
+
jwt.accessToken
|
|
8557
|
+
),
|
|
8558
|
+
navigateToMainMenu
|
|
8559
|
+
};
|
|
8591
8560
|
},
|
|
8592
|
-
onSuccess: async (response) => {
|
|
8561
|
+
onSuccess: async ({ response, navigateToMainMenu }) => {
|
|
8593
8562
|
qc.invalidateQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY, address] });
|
|
8594
8563
|
if (response.success) {
|
|
8595
8564
|
setSuccess("Successfully created server backup");
|
|
8596
8565
|
if (typeof window !== "undefined") {
|
|
8597
8566
|
window.dispatchEvent(
|
|
8598
8567
|
new CustomEvent("lumia-passport-backup-status-changed", {
|
|
8599
|
-
detail: { method: "server", success: true }
|
|
8568
|
+
detail: { method: "server", success: true, navigateToMainMenu }
|
|
8600
8569
|
})
|
|
8601
8570
|
);
|
|
8602
8571
|
}
|
|
@@ -8604,13 +8573,14 @@ function useCreateBackup() {
|
|
|
8604
8573
|
} else {
|
|
8605
8574
|
setError(response.error || "Server backup failed");
|
|
8606
8575
|
}
|
|
8576
|
+
setIsDialogForced(false);
|
|
8607
8577
|
},
|
|
8608
8578
|
onError: async (error) => {
|
|
8609
8579
|
setError(error?.message || "Backup creation failed");
|
|
8610
8580
|
qc.invalidateQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY, address] });
|
|
8611
8581
|
}
|
|
8612
8582
|
});
|
|
8613
|
-
const { mutate: createLocalBackup, isPending: isLocalBackupCreating } = (0,
|
|
8583
|
+
const { mutate: createLocalBackup, isPending: isLocalBackupCreating } = (0, import_react_query12.useMutation)({
|
|
8614
8584
|
mutationFn: async () => {
|
|
8615
8585
|
const iframeManager = getIframeManager();
|
|
8616
8586
|
if (!usePasskey && !restorePassword) {
|
|
@@ -8644,7 +8614,7 @@ function useCreateBackup() {
|
|
|
8644
8614
|
qc.invalidateQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY, address] });
|
|
8645
8615
|
}
|
|
8646
8616
|
});
|
|
8647
|
-
const { mutate: createCloudBackup, isPending: isCloudBackupCreating } = (0,
|
|
8617
|
+
const { mutate: createCloudBackup, isPending: isCloudBackupCreating } = (0, import_react_query12.useMutation)({
|
|
8648
8618
|
mutationFn: async () => {
|
|
8649
8619
|
const iframeManager = getIframeManager();
|
|
8650
8620
|
const encryptedData = await iframeManager.encryptBackupData(passportUserId);
|
|
@@ -8695,7 +8665,7 @@ function useCreateBackup() {
|
|
|
8695
8665
|
}
|
|
8696
8666
|
|
|
8697
8667
|
// src/internal/components/KeyshareRestoreMenu/hooks/useRestoreAccount.ts
|
|
8698
|
-
var
|
|
8668
|
+
var import_react_query13 = require("@tanstack/react-query");
|
|
8699
8669
|
function useRestoreAccount() {
|
|
8700
8670
|
const recoveryUserId = useLumiaPassportSession((st) => st.recoveryUserId);
|
|
8701
8671
|
const {
|
|
@@ -8709,7 +8679,7 @@ function useRestoreAccount() {
|
|
|
8709
8679
|
setRestoreFile
|
|
8710
8680
|
} = useRestoreStore();
|
|
8711
8681
|
const { onRestoreSuccess } = useOnRestoreSuccess();
|
|
8712
|
-
const { mutate: restoreFromServer2, isPending: isRestoringFromServer } = (0,
|
|
8682
|
+
const { mutate: restoreFromServer2, isPending: isRestoringFromServer } = (0, import_react_query13.useMutation)({
|
|
8713
8683
|
mutationFn: async () => {
|
|
8714
8684
|
setError(null);
|
|
8715
8685
|
setSuccess(null);
|
|
@@ -8739,18 +8709,16 @@ function useRestoreAccount() {
|
|
|
8739
8709
|
onRestoreSuccess();
|
|
8740
8710
|
} else {
|
|
8741
8711
|
console.error("[KeyshareRestoreMenu] Server restore failed:", response.error);
|
|
8742
|
-
setMethod(null);
|
|
8743
8712
|
setError(response.error || "Server restore failed");
|
|
8744
8713
|
}
|
|
8745
8714
|
},
|
|
8746
8715
|
onError: async (err) => {
|
|
8747
8716
|
console.error("[KeyshareRestoreMenu] Server restore exception:", err);
|
|
8748
8717
|
const errorMsg = err instanceof Error ? err.message : "Server restore failed";
|
|
8749
|
-
setMethod(null);
|
|
8750
8718
|
setError(errorMsg);
|
|
8751
8719
|
}
|
|
8752
8720
|
});
|
|
8753
|
-
const { mutate: restoreFromFile, isPending: isRestoringFromFile } = (0,
|
|
8721
|
+
const { mutate: restoreFromFile, isPending: isRestoringFromFile } = (0, import_react_query13.useMutation)({
|
|
8754
8722
|
mutationFn: async () => {
|
|
8755
8723
|
if (!restoreFile) {
|
|
8756
8724
|
throw new Error("Please select a backup file");
|
|
@@ -8776,17 +8744,15 @@ function useRestoreAccount() {
|
|
|
8776
8744
|
setMethod(null);
|
|
8777
8745
|
onRestoreSuccess();
|
|
8778
8746
|
} else {
|
|
8779
|
-
setMethod(null);
|
|
8780
8747
|
setError(response.error || "File restore failed");
|
|
8781
8748
|
}
|
|
8782
8749
|
},
|
|
8783
8750
|
onError: async (err) => {
|
|
8784
8751
|
const errorMsg = err instanceof Error ? err.message : "Restore failed";
|
|
8785
|
-
setMethod(null);
|
|
8786
8752
|
setError(errorMsg);
|
|
8787
8753
|
}
|
|
8788
8754
|
});
|
|
8789
|
-
const { mutate: restoreFromCloud, isPending: isRestoringFromCloud } = (0,
|
|
8755
|
+
const { mutate: restoreFromCloud, isPending: isRestoringFromCloud } = (0, import_react_query13.useMutation)({
|
|
8790
8756
|
mutationFn: async () => {
|
|
8791
8757
|
alert("Cloud restore not implemented yet");
|
|
8792
8758
|
return null;
|
|
@@ -8807,7 +8773,7 @@ function useRestoreAccount() {
|
|
|
8807
8773
|
}
|
|
8808
8774
|
|
|
8809
8775
|
// src/internal/components/KeyshareRestoreMenu/hooks/useValidateFileBackup.ts
|
|
8810
|
-
var
|
|
8776
|
+
var import_react27 = require("react");
|
|
8811
8777
|
function validateRestoreFileFormat(parsedData) {
|
|
8812
8778
|
if (typeof parsedData !== "object" || parsedData === null) return false;
|
|
8813
8779
|
const data = parsedData;
|
|
@@ -8817,7 +8783,7 @@ function useValidateFileBackup() {
|
|
|
8817
8783
|
const restoreFile = useRestoreStore((st) => st.restoreFile);
|
|
8818
8784
|
const setError = useRestoreStore((st) => st.setError);
|
|
8819
8785
|
const setUsePasskey = useRestoreStore((st) => st.setUsePasskey);
|
|
8820
|
-
(0,
|
|
8786
|
+
(0, import_react27.useEffect)(() => {
|
|
8821
8787
|
if (!restoreFile) {
|
|
8822
8788
|
return;
|
|
8823
8789
|
}
|
|
@@ -8840,9 +8806,9 @@ function useValidateFileBackup() {
|
|
|
8840
8806
|
}
|
|
8841
8807
|
|
|
8842
8808
|
// src/internal/components/KeyshareRestoreMenu/components/MethodSelector.tsx
|
|
8843
|
-
var
|
|
8809
|
+
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
8844
8810
|
var getRecoveryRenderMethods = (mode) => [
|
|
8845
|
-
{ method:
|
|
8811
|
+
// { method: 'server', label: 'Password', Icon: OtpIcon },
|
|
8846
8812
|
{ method: "file", label: "Local File", Icon: mode === "restore" ? import_lucide_react18.FileUp : import_lucide_react18.FileDown },
|
|
8847
8813
|
{ method: "cloud", label: "Cloud", Icon: import_lucide_react18.Cloud, disabled: true }
|
|
8848
8814
|
];
|
|
@@ -8857,7 +8823,7 @@ function MethodSelector(props) {
|
|
|
8857
8823
|
setError,
|
|
8858
8824
|
setSuccess
|
|
8859
8825
|
} = useRestoreStore();
|
|
8860
|
-
const recoveryRenderMethods = (0,
|
|
8826
|
+
const recoveryRenderMethods = (0, import_react28.useMemo)(() => {
|
|
8861
8827
|
const methodsWithBackupData = getRecoveryRenderMethods(mode).map((mt) => {
|
|
8862
8828
|
let data = null;
|
|
8863
8829
|
switch (true) {
|
|
@@ -8872,42 +8838,39 @@ function MethodSelector(props) {
|
|
|
8872
8838
|
return methodsWithBackupData;
|
|
8873
8839
|
}, [mode, serverRecoveryStatus]);
|
|
8874
8840
|
if (!!selectedRecoveryMethod) return null;
|
|
8875
|
-
return /* @__PURE__ */ (0,
|
|
8876
|
-
|
|
8877
|
-
|
|
8878
|
-
|
|
8879
|
-
|
|
8880
|
-
|
|
8881
|
-
|
|
8882
|
-
|
|
8883
|
-
|
|
8884
|
-
|
|
8885
|
-
|
|
8886
|
-
|
|
8887
|
-
|
|
8888
|
-
|
|
8889
|
-
|
|
8890
|
-
|
|
8891
|
-
|
|
8892
|
-
|
|
8893
|
-
|
|
8894
|
-
|
|
8895
|
-
|
|
8896
|
-
|
|
8897
|
-
|
|
8898
|
-
|
|
8899
|
-
},
|
|
8900
|
-
children:
|
|
8901
|
-
|
|
8902
|
-
|
|
8903
|
-
|
|
8904
|
-
|
|
8905
|
-
|
|
8906
|
-
|
|
8907
|
-
|
|
8908
|
-
}
|
|
8909
|
-
)
|
|
8910
|
-
] });
|
|
8841
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react28.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
8842
|
+
"div",
|
|
8843
|
+
{
|
|
8844
|
+
style: { gridTemplateColumns: `repeat(${recoveryRenderMethods.length}, minmax(0, 1fr))` },
|
|
8845
|
+
className: "w-full max-w-[256px] grid gap-[var(--l-pass-gap)] mx-auto py-[var(--l-pass-pd)]",
|
|
8846
|
+
children: recoveryRenderMethods.map(({ method: recoveryMethod, label, Icon: Icon2, data, disabled }) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "w-full h-full flex flex-col items-center gap-[var(--l-pass-gap)]", children: [
|
|
8847
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
|
|
8848
|
+
Button,
|
|
8849
|
+
{
|
|
8850
|
+
size: "icon",
|
|
8851
|
+
variant: "outline",
|
|
8852
|
+
type: "button",
|
|
8853
|
+
disabled,
|
|
8854
|
+
style: { height: "unset", maxWidth: "96px" },
|
|
8855
|
+
className: "relative w-full aspect-square h-unset rounded-[var(--l-pass-el-bdrs)]",
|
|
8856
|
+
onClick: () => {
|
|
8857
|
+
setRestorePassword("");
|
|
8858
|
+
setRestoreFile(null);
|
|
8859
|
+
setShowPassword(false);
|
|
8860
|
+
setError(null);
|
|
8861
|
+
setSuccess(null);
|
|
8862
|
+
setMethod(recoveryMethod);
|
|
8863
|
+
},
|
|
8864
|
+
children: [
|
|
8865
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Icon2, { className: "w-5 h-5 md:w-8 md:h-8" }),
|
|
8866
|
+
!!data?.lastBackup && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "w-6 h-6 absolute -top-2 -right-2 flex items-center justify-center bg-transparent", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(PositiveIcon, { className: "w-4 h-4" }) })
|
|
8867
|
+
]
|
|
8868
|
+
}
|
|
8869
|
+
),
|
|
8870
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "text-xs font-bold leading-4", children: label })
|
|
8871
|
+
] }, recoveryMethod))
|
|
8872
|
+
}
|
|
8873
|
+
) });
|
|
8911
8874
|
}
|
|
8912
8875
|
|
|
8913
8876
|
// src/internal/components/KeyshareRestoreMenu/components/NoBackupFound.tsx
|
|
@@ -8915,8 +8878,8 @@ var import_lucide_react20 = require("lucide-react");
|
|
|
8915
8878
|
|
|
8916
8879
|
// src/internal/components/KeyshareRestoreMenu/components/PasswordPasskey.tsx
|
|
8917
8880
|
var import_lucide_react19 = require("lucide-react");
|
|
8918
|
-
var
|
|
8919
|
-
var
|
|
8881
|
+
var import_react29 = require("react");
|
|
8882
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
8920
8883
|
function PasswordPasskey(props) {
|
|
8921
8884
|
const {
|
|
8922
8885
|
mode = "restore",
|
|
@@ -8928,16 +8891,63 @@ function PasswordPasskey(props) {
|
|
|
8928
8891
|
actionHandler
|
|
8929
8892
|
} = props;
|
|
8930
8893
|
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
8931
|
-
const actionRef = (0,
|
|
8932
|
-
const {
|
|
8933
|
-
|
|
8934
|
-
|
|
8894
|
+
const actionRef = (0, import_react29.useRef)(null);
|
|
8895
|
+
const {
|
|
8896
|
+
showPassword,
|
|
8897
|
+
restorePassword,
|
|
8898
|
+
usePasskey,
|
|
8899
|
+
error,
|
|
8900
|
+
setRestorePassword,
|
|
8901
|
+
setShowPassword,
|
|
8902
|
+
setUsePasskey,
|
|
8903
|
+
setRestoreFile
|
|
8904
|
+
} = useRestoreStore();
|
|
8905
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8906
|
+
mode === "backup" && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-center justify-center px-[var(--l-pass-pd)]", children: [
|
|
8907
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8908
|
+
Button,
|
|
8909
|
+
{
|
|
8910
|
+
size: "medium",
|
|
8911
|
+
variant: "ghost",
|
|
8912
|
+
onClick: () => {
|
|
8913
|
+
setUsePasskey(false);
|
|
8914
|
+
setRestoreFile(null);
|
|
8915
|
+
setRestorePassword("");
|
|
8916
|
+
},
|
|
8917
|
+
className: cn(usePasskey ? "opacity-50" : "opacity-100"),
|
|
8918
|
+
children: [
|
|
8919
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(OtpIcon, { className: "w-4 h-4 inline-block mr-1" }),
|
|
8920
|
+
"Password"
|
|
8921
|
+
]
|
|
8922
|
+
}
|
|
8923
|
+
),
|
|
8924
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8925
|
+
Button,
|
|
8926
|
+
{
|
|
8927
|
+
size: "medium",
|
|
8928
|
+
variant: "ghost",
|
|
8929
|
+
onClick: () => {
|
|
8930
|
+
setUsePasskey(true);
|
|
8931
|
+
setRestoreFile(null);
|
|
8932
|
+
setRestorePassword("");
|
|
8933
|
+
},
|
|
8934
|
+
className: cn(usePasskey ? "opacity-100" : "opacity-50"),
|
|
8935
|
+
children: [
|
|
8936
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react19.Key, { className: "w-4 h-4 inline-block mr-1" }),
|
|
8937
|
+
"Passkey"
|
|
8938
|
+
]
|
|
8939
|
+
}
|
|
8940
|
+
)
|
|
8941
|
+
] }),
|
|
8942
|
+
!hasServerVault && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "block w-full text-[10px] leading-8 px-[var(--l-pass-pd)] truncate", children: [
|
|
8935
8943
|
"Use your ",
|
|
8936
|
-
/* @__PURE__ */ (0,
|
|
8937
|
-
" to
|
|
8944
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("strong", { children: usePasskey ? "Passkey" : "Password" }),
|
|
8945
|
+
" to",
|
|
8946
|
+
" ",
|
|
8947
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { children: mode === "backup" ? "complete account security setup." : "get access to your account." })
|
|
8938
8948
|
] }),
|
|
8939
|
-
!usePasskey ? /* @__PURE__ */ (0,
|
|
8940
|
-
/* @__PURE__ */ (0,
|
|
8949
|
+
!usePasskey ? /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "w-full flex gap-[var(--l-pass-gap)]", children: [
|
|
8950
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8941
8951
|
Input,
|
|
8942
8952
|
{
|
|
8943
8953
|
autoComplete: "off",
|
|
@@ -8953,7 +8963,7 @@ function PasswordPasskey(props) {
|
|
|
8953
8963
|
onKeyDown: (e) => {
|
|
8954
8964
|
if (e.key === "Enter" && !isLoading && restorePassword) actionRef.current?.click();
|
|
8955
8965
|
},
|
|
8956
|
-
element: /* @__PURE__ */ (0,
|
|
8966
|
+
element: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8957
8967
|
Button,
|
|
8958
8968
|
{
|
|
8959
8969
|
variant: "ghost",
|
|
@@ -8962,12 +8972,12 @@ function PasswordPasskey(props) {
|
|
|
8962
8972
|
title: "Toggle Password Visibility",
|
|
8963
8973
|
disabled: isLoading || disabled,
|
|
8964
8974
|
onClick: () => setShowPassword(!showPassword),
|
|
8965
|
-
children: showPassword ? /* @__PURE__ */ (0,
|
|
8975
|
+
children: showPassword ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react19.EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react19.Eye, { className: "h-4 w-4" })
|
|
8966
8976
|
}
|
|
8967
8977
|
)
|
|
8968
8978
|
}
|
|
8969
8979
|
),
|
|
8970
|
-
/* @__PURE__ */ (0,
|
|
8980
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8971
8981
|
Button,
|
|
8972
8982
|
{
|
|
8973
8983
|
ref: actionRef,
|
|
@@ -8977,10 +8987,10 @@ function PasswordPasskey(props) {
|
|
|
8977
8987
|
title: actionCaption,
|
|
8978
8988
|
disabled: isLoading || disabled || error?.includes("Invalid backup file") || !usePasskey && !restorePassword,
|
|
8979
8989
|
className: "w-full w-12 h-12 flex-shrink-0 rounded-[var(--l-pass-el-bdrs)]",
|
|
8980
|
-
children: isLoading ? /* @__PURE__ */ (0,
|
|
8990
|
+
children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react19.Loader, { className: "animate-spin h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react19.ChevronRight, { className: "h-4 w-4" })
|
|
8981
8991
|
}
|
|
8982
8992
|
)
|
|
8983
|
-
] }) : /* @__PURE__ */ (0,
|
|
8993
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8984
8994
|
Button,
|
|
8985
8995
|
{
|
|
8986
8996
|
ref: actionRef,
|
|
@@ -8991,18 +9001,18 @@ function PasswordPasskey(props) {
|
|
|
8991
9001
|
disabled: isLoading || disabled || !!error || !usePasskey && !restorePassword,
|
|
8992
9002
|
className: "w-full",
|
|
8993
9003
|
children: [
|
|
8994
|
-
isLoading ? /* @__PURE__ */ (0,
|
|
8995
|
-
!isLoading && /* @__PURE__ */ (0,
|
|
9004
|
+
isLoading ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react19.Loader, { className: "animate-spin h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ActionIcon, { className: "h-4 w-4" }),
|
|
9005
|
+
!isLoading && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { children: actionCaption })
|
|
8996
9006
|
]
|
|
8997
9007
|
}
|
|
8998
9008
|
),
|
|
8999
|
-
!isEncryptionMethod && !!usePasskey && /* @__PURE__ */ (0,
|
|
9000
|
-
/* @__PURE__ */ (0,
|
|
9001
|
-
/* @__PURE__ */ (0,
|
|
9002
|
-
/* @__PURE__ */ (0,
|
|
9003
|
-
/* @__PURE__ */ (0,
|
|
9009
|
+
!isEncryptionMethod && !!usePasskey && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Highlight, { type: "info", className: "w-full flex flex-col gap-[var(--l-pass-gap)] text-[10px]", children: mode === "backup" && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9010
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react19.Info, { className: "h-4 w-4 flex-shrink-0" }),
|
|
9011
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "text-[var(--l-pass-fg-muted)] block flex-1", children: [
|
|
9012
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("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." }),
|
|
9013
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "block", children: [
|
|
9004
9014
|
" Passkeys are a password-free alternative. ",
|
|
9005
|
-
/* @__PURE__ */ (0,
|
|
9015
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
9006
9016
|
"a",
|
|
9007
9017
|
{
|
|
9008
9018
|
target: "_blank",
|
|
@@ -9019,7 +9029,7 @@ function PasswordPasskey(props) {
|
|
|
9019
9029
|
}
|
|
9020
9030
|
|
|
9021
9031
|
// src/internal/components/KeyshareRestoreMenu/components/NoBackupFound.tsx
|
|
9022
|
-
var
|
|
9032
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
9023
9033
|
function NoBackupFound(props) {
|
|
9024
9034
|
const { isLoading, restoreFromFile } = props;
|
|
9025
9035
|
const restoreFile = useRestoreStore((st) => st.restoreFile);
|
|
@@ -9028,33 +9038,33 @@ function NoBackupFound(props) {
|
|
|
9028
9038
|
const setRestoreFile = useRestoreStore((st) => st.setRestoreFile);
|
|
9029
9039
|
const setError = useRestoreStore((st) => st.setError);
|
|
9030
9040
|
useValidateFileBackup();
|
|
9031
|
-
return /* @__PURE__ */ (0,
|
|
9032
|
-
/* @__PURE__ */ (0,
|
|
9033
|
-
/* @__PURE__ */ (0,
|
|
9034
|
-
/* @__PURE__ */ (0,
|
|
9041
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { children: [
|
|
9042
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "flex items-center justify-center gap-2 px-5 pt-3 pb-6", children: [
|
|
9043
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react20.User, { className: "w-6 h-6" }),
|
|
9044
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "font-bold text-xl leading-6", children: "Account Recovery" })
|
|
9035
9045
|
] }),
|
|
9036
|
-
!restoreFile && /* @__PURE__ */ (0,
|
|
9037
|
-
/* @__PURE__ */ (0,
|
|
9038
|
-
/* @__PURE__ */ (0,
|
|
9039
|
-
/* @__PURE__ */ (0,
|
|
9040
|
-
/* @__PURE__ */ (0,
|
|
9041
|
-
/* @__PURE__ */ (0,
|
|
9042
|
-
/* @__PURE__ */ (0,
|
|
9046
|
+
!restoreFile && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(Highlight, { type: "warning", className: "animate-glow-warning flex gap-[var(--l-pass-gap)]", children: [
|
|
9047
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react20.AlertCircle, { className: "h-4 w-4 flex-0" }),
|
|
9048
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "w-full flex-1 flex flex-col gap-2", children: [
|
|
9049
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "block w-full text-sm leading-4 font-bold", children: "No Backup Found" }),
|
|
9050
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("span", { className: "block w-full text-xs", children: [
|
|
9051
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "block mb-1", children: "This device doesn't have access to your wallet keyshare, and no backup was found." }),
|
|
9052
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("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." })
|
|
9043
9053
|
] })
|
|
9044
9054
|
] })
|
|
9045
9055
|
] }),
|
|
9046
|
-
!restoreFile && /* @__PURE__ */ (0,
|
|
9047
|
-
/* @__PURE__ */ (0,
|
|
9048
|
-
/* @__PURE__ */ (0,
|
|
9056
|
+
!restoreFile && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(Highlight, { type: "info", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9057
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react20.Upload, { className: "h-4 w-4 flex-0" }),
|
|
9058
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "block w-full text-xs", children: "Upload a backup file if you have one" })
|
|
9049
9059
|
] }),
|
|
9050
|
-
/* @__PURE__ */ (0,
|
|
9060
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
9051
9061
|
"label",
|
|
9052
9062
|
{
|
|
9053
9063
|
className: cn(
|
|
9054
9064
|
"block w-full flex items-center justify-center cursor-pointer",
|
|
9055
9065
|
"p-[var(--l-pass-gap)] bg-[var(--l-pass-secondary)] rounded-[var(--l-pass-el-bdrs)]"
|
|
9056
9066
|
),
|
|
9057
|
-
children: /* @__PURE__ */ (0,
|
|
9067
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
9058
9068
|
"input",
|
|
9059
9069
|
{
|
|
9060
9070
|
type: "file",
|
|
@@ -9075,7 +9085,7 @@ function NoBackupFound(props) {
|
|
|
9075
9085
|
)
|
|
9076
9086
|
}
|
|
9077
9087
|
),
|
|
9078
|
-
restoreFile && /* @__PURE__ */ (0,
|
|
9088
|
+
restoreFile && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
9079
9089
|
PasswordPasskey,
|
|
9080
9090
|
{
|
|
9081
9091
|
mode: "restore",
|
|
@@ -9091,124 +9101,15 @@ function NoBackupFound(props) {
|
|
|
9091
9101
|
|
|
9092
9102
|
// src/internal/components/KeyshareRestoreMenu/methods/File.tsx
|
|
9093
9103
|
var import_lucide_react21 = require("lucide-react");
|
|
9094
|
-
|
|
9095
|
-
// src/internal/components/ui/switch.tsx
|
|
9096
|
-
var import_react32 = require("react");
|
|
9097
|
-
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
9098
|
-
var Switch = (0, import_react32.forwardRef)((props, ref) => {
|
|
9099
|
-
const { className, labels, ...inputProps } = props;
|
|
9100
|
-
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
9101
|
-
const [labelW, setLabelW] = (0, import_react32.useState)(0);
|
|
9102
|
-
return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
9103
|
-
"div",
|
|
9104
|
-
{
|
|
9105
|
-
role: "switch",
|
|
9106
|
-
"aria-checked": inputProps.checked,
|
|
9107
|
-
className: cn(
|
|
9108
|
-
"block rounded-full w-fit h-7 p-1 outline-none flex-none",
|
|
9109
|
-
inputProps.checked ? "bg-[var(--l-pass-bg-success)]" : "bg-[var(--l-pass-bg-info)]",
|
|
9110
|
-
className
|
|
9111
|
-
),
|
|
9112
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
|
|
9113
|
-
"label",
|
|
9114
|
-
{
|
|
9115
|
-
className: "relative inline-block h-5 outline-none",
|
|
9116
|
-
style: {
|
|
9117
|
-
width: `calc(20px + ${labelW}px)`,
|
|
9118
|
-
transition: "width 200ms ease",
|
|
9119
|
-
cursor: inputProps.disabled ? "not-allowed" : "pointer"
|
|
9120
|
-
},
|
|
9121
|
-
children: [
|
|
9122
|
-
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("input", { type: "checkbox", className: "hidden sr-only peer outline-none", ref, ...inputProps }),
|
|
9123
|
-
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
9124
|
-
"span",
|
|
9125
|
-
{
|
|
9126
|
-
ref: (inst) => {
|
|
9127
|
-
if (inst) setLabelW(inst.clientWidth);
|
|
9128
|
-
},
|
|
9129
|
-
style: {
|
|
9130
|
-
left: inputProps.checked ? "0px" : "20px",
|
|
9131
|
-
color: inputProps.checked ? colorMode === "dark" ? "var(--l-pass-fg-inverted)" : "var(--l-pass-fg)" : "var(--l-pass-fg)",
|
|
9132
|
-
transition: "left 200ms ease"
|
|
9133
|
-
},
|
|
9134
|
-
className: "absolute top-0 px-2 text-xs leading-5 font-semibold min-w-5 select-none",
|
|
9135
|
-
children: inputProps.checked ? labels?.checked : labels?.unchecked
|
|
9136
|
-
}
|
|
9137
|
-
),
|
|
9138
|
-
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
9139
|
-
"span",
|
|
9140
|
-
{
|
|
9141
|
-
style: {
|
|
9142
|
-
left: inputProps.checked ? `${labelW}px` : "0px",
|
|
9143
|
-
transition: "left 200ms ease"
|
|
9144
|
-
},
|
|
9145
|
-
className: cn("absolute top-0 w-5 h-5 rounded-full bg-[var(--l-pass-fg)]", {
|
|
9146
|
-
// 'bg-[var(--l-pass-fg-inverted)]': inputProps.checked,
|
|
9147
|
-
// 'bg-[var(--l-pass-fg)]': !inputProps.checked
|
|
9148
|
-
})
|
|
9149
|
-
}
|
|
9150
|
-
)
|
|
9151
|
-
]
|
|
9152
|
-
}
|
|
9153
|
-
)
|
|
9154
|
-
}
|
|
9155
|
-
);
|
|
9156
|
-
});
|
|
9157
|
-
Switch.displayName = "Switch";
|
|
9158
|
-
|
|
9159
|
-
// src/internal/components/KeyshareRestoreMenu/methods/File.tsx
|
|
9160
9104
|
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
9161
9105
|
function File2(props) {
|
|
9162
9106
|
const { isLoading, mode = "restore", fileHandler } = props;
|
|
9163
|
-
const {
|
|
9164
|
-
restoreFile,
|
|
9165
|
-
error,
|
|
9166
|
-
usePasskey,
|
|
9167
|
-
setRestorePassword,
|
|
9168
|
-
setMethod,
|
|
9169
|
-
setRestoreFile,
|
|
9170
|
-
setUsePasskey,
|
|
9171
|
-
setError,
|
|
9172
|
-
setSuccess
|
|
9173
|
-
} = useRestoreStore();
|
|
9107
|
+
const { restoreFile, error, setRestoreFile, setError } = useRestoreStore();
|
|
9174
9108
|
useValidateFileBackup();
|
|
9175
9109
|
const actionText = mode === "backup" ? "Download" : "Restore with";
|
|
9176
9110
|
const isPasswordPasskey = mode === "restore" && !!restoreFile || mode === "backup";
|
|
9177
9111
|
return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_jsx_runtime40.Fragment, { children: [
|
|
9178
|
-
/* @__PURE__ */ (0, import_jsx_runtime40.
|
|
9179
|
-
/* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9180
|
-
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
9181
|
-
Button,
|
|
9182
|
-
{
|
|
9183
|
-
variant: "ghost",
|
|
9184
|
-
size: "icon",
|
|
9185
|
-
title: "Back",
|
|
9186
|
-
onClick: () => {
|
|
9187
|
-
setRestoreFile(null);
|
|
9188
|
-
setError(null);
|
|
9189
|
-
setSuccess(null);
|
|
9190
|
-
setUsePasskey(false);
|
|
9191
|
-
setMethod(null);
|
|
9192
|
-
},
|
|
9193
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react21.ArrowLeft, { className: "h-4 w-4" })
|
|
9194
|
-
}
|
|
9195
|
-
),
|
|
9196
|
-
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "text-xl font-semibold", children: `${mode === "restore" ? "Restore with" : ""} File ${mode === "restore" ? "by" : "Backup by"}`.trim() })
|
|
9197
|
-
] }),
|
|
9198
|
-
mode !== "restore" && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
9199
|
-
Switch,
|
|
9200
|
-
{
|
|
9201
|
-
name: "password-passkey-toggle",
|
|
9202
|
-
labels: { checked: "Password", unchecked: "Passkey" },
|
|
9203
|
-
disabled: isLoading || !!error,
|
|
9204
|
-
checked: !usePasskey,
|
|
9205
|
-
onChange: (e) => {
|
|
9206
|
-
if (!!e.target.checked) setRestorePassword("");
|
|
9207
|
-
setUsePasskey(!e.target.checked);
|
|
9208
|
-
}
|
|
9209
|
-
}
|
|
9210
|
-
)
|
|
9211
|
-
] }),
|
|
9112
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("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() }),
|
|
9212
9113
|
mode === "restore" && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
9213
9114
|
"label",
|
|
9214
9115
|
{
|
|
@@ -9252,61 +9153,23 @@ function File2(props) {
|
|
|
9252
9153
|
}
|
|
9253
9154
|
|
|
9254
9155
|
// src/internal/components/KeyshareRestoreMenu/methods/Server.tsx
|
|
9255
|
-
var
|
|
9156
|
+
var import_react_query14 = require("@tanstack/react-query");
|
|
9256
9157
|
var import_dayjs = __toESM(require("dayjs"), 1);
|
|
9257
9158
|
var import_lucide_react22 = require("lucide-react");
|
|
9258
|
-
var
|
|
9159
|
+
var import_react30 = require("react");
|
|
9259
9160
|
var import_jsx_runtime41 = require("react/jsx-runtime");
|
|
9260
9161
|
function Server(props) {
|
|
9261
9162
|
const { isLoading, mode = "restore", serverHandler } = props;
|
|
9262
|
-
const qc = (0,
|
|
9163
|
+
const qc = (0, import_react_query14.useQueryClient)();
|
|
9263
9164
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9264
|
-
const
|
|
9265
|
-
const { usePasskey, error, setUsePasskey, setRestorePassword, setShowPassword, setMethod, setError, setSuccess } = useRestoreStore();
|
|
9165
|
+
const setUsePasskey = useRestoreStore((st) => st.setUsePasskey);
|
|
9266
9166
|
const serverRecoveryStatus = qc.getQueryData([CHECK_BACKUP_QUERY_KEY, address]);
|
|
9267
|
-
(0,
|
|
9167
|
+
(0, import_react30.useEffect)(() => {
|
|
9268
9168
|
if (mode === "backup" || !serverRecoveryStatus?.created?.encryptionMethod) return;
|
|
9269
9169
|
setUsePasskey(serverRecoveryStatus.created.encryptionMethod === "passkey");
|
|
9270
9170
|
}, [mode, serverRecoveryStatus, setUsePasskey]);
|
|
9271
9171
|
const isEncryptionMethod = mode === "restore" && !!serverRecoveryStatus?.created?.encryptionMethod;
|
|
9272
9172
|
return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_jsx_runtime41.Fragment, { children: [
|
|
9273
|
-
/* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: cn("flex items-center justify-between", { "px-[var(--l-pass-pd)]": !hasServerVault }), children: [
|
|
9274
|
-
/* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9275
|
-
!!hasServerVault && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
9276
|
-
Button,
|
|
9277
|
-
{
|
|
9278
|
-
variant: "ghost",
|
|
9279
|
-
size: "icon",
|
|
9280
|
-
title: "Back",
|
|
9281
|
-
onClick: () => {
|
|
9282
|
-
setShowPassword(false);
|
|
9283
|
-
setUsePasskey(false);
|
|
9284
|
-
setRestorePassword("");
|
|
9285
|
-
setUsePasskey(false);
|
|
9286
|
-
setError(null);
|
|
9287
|
-
setSuccess(null);
|
|
9288
|
-
setMethod(null);
|
|
9289
|
-
},
|
|
9290
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react22.ArrowLeft, { className: "h-4 w-4" })
|
|
9291
|
-
}
|
|
9292
|
-
),
|
|
9293
|
-
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "text-xl font-semibold", children: mode === "restore" ? "Restore with" : usePasskey ? "Passkey" : "Password" })
|
|
9294
|
-
] }),
|
|
9295
|
-
!isEncryptionMethod && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
9296
|
-
Switch,
|
|
9297
|
-
{
|
|
9298
|
-
name: "password-passkey-toggle",
|
|
9299
|
-
labels: { checked: "Password", unchecked: "Passkey" },
|
|
9300
|
-
disabled: isLoading,
|
|
9301
|
-
checked: !usePasskey,
|
|
9302
|
-
onChange: (e) => {
|
|
9303
|
-
if (!!error) setError(null);
|
|
9304
|
-
if (!!e.target.checked) setRestorePassword("");
|
|
9305
|
-
setUsePasskey(!e.target.checked);
|
|
9306
|
-
}
|
|
9307
|
-
}
|
|
9308
|
-
)
|
|
9309
|
-
] }),
|
|
9310
9173
|
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
9311
9174
|
PasswordPasskey,
|
|
9312
9175
|
{
|
|
@@ -9333,9 +9196,9 @@ function Server(props) {
|
|
|
9333
9196
|
}
|
|
9334
9197
|
|
|
9335
9198
|
// src/internal/components/KeyshareRestoreMenu/methods/Cloud.tsx
|
|
9336
|
-
var
|
|
9199
|
+
var import_react_query15 = require("@tanstack/react-query");
|
|
9337
9200
|
var import_lucide_react24 = require("lucide-react");
|
|
9338
|
-
var
|
|
9201
|
+
var import_react31 = require("react");
|
|
9339
9202
|
|
|
9340
9203
|
// src/internal/components/ui/select.tsx
|
|
9341
9204
|
var SelectPrimitive = __toESM(require("@radix-ui/react-select"), 1);
|
|
@@ -9473,7 +9336,7 @@ function Cloud2(props) {
|
|
|
9473
9336
|
data: cloudProviders = [],
|
|
9474
9337
|
isLoading: isCloudProvidersLoading,
|
|
9475
9338
|
error: cloudProvidersError
|
|
9476
|
-
} = (0,
|
|
9339
|
+
} = (0, import_react_query15.useQuery)({
|
|
9477
9340
|
retry: false,
|
|
9478
9341
|
enabled: !!passportUserId,
|
|
9479
9342
|
queryKey: [AVAILABLE_CLOUD_PROVIDERS_QUERY_KEY, passportUserId],
|
|
@@ -9483,7 +9346,7 @@ function Cloud2(props) {
|
|
|
9483
9346
|
return availableProviders.map((p) => ({ id: p.id, name: p.name, available: p.isAvailable() }));
|
|
9484
9347
|
}
|
|
9485
9348
|
});
|
|
9486
|
-
(0,
|
|
9349
|
+
(0, import_react31.useEffect)(() => {
|
|
9487
9350
|
if (isCloudProvidersLoading) return;
|
|
9488
9351
|
if (!!cloudProvidersError) {
|
|
9489
9352
|
console.error("[KeyshareBackup] Failed to load cloud providers:", cloudProvidersError);
|
|
@@ -9556,23 +9419,14 @@ var RESTORE_COMPONENTS = {
|
|
|
9556
9419
|
file: File2
|
|
9557
9420
|
};
|
|
9558
9421
|
var KeyshareRestoreMenu = () => {
|
|
9559
|
-
const qc = (0,
|
|
9422
|
+
const qc = (0, import_react_query16.useQueryClient)();
|
|
9560
9423
|
const callbacks = useLumiaPassportConfig().callbacks;
|
|
9561
9424
|
const { address, setSession, setAddress, setStatus, setIsLoading } = useLumiaPassportSession();
|
|
9562
|
-
const { data: serverRecoveryStatus, isLoading: isBackupStatusLoading } = (0, import_react_query18.useQuery)({
|
|
9563
|
-
retry: false,
|
|
9564
|
-
queryKey: [CHECK_BACKUP_QUERY_KEY, address],
|
|
9565
|
-
queryFn: async () => await getShareRecoveryStats()
|
|
9566
|
-
});
|
|
9567
9425
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
9568
9426
|
const setIsDialogForced = useLayoutStore((st) => st.setIsDialogForced);
|
|
9569
9427
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
9570
|
-
(0, import_react35.useEffect)(() => setIsDialogForced(true), []);
|
|
9571
|
-
useCheckBackupAvailability();
|
|
9572
9428
|
const {
|
|
9573
9429
|
method: currentRestoreMethod,
|
|
9574
|
-
checkingBackup,
|
|
9575
|
-
hasServerBackup,
|
|
9576
9430
|
error,
|
|
9577
9431
|
success,
|
|
9578
9432
|
setError,
|
|
@@ -9583,6 +9437,16 @@ var KeyshareRestoreMenu = () => {
|
|
|
9583
9437
|
setSuccess,
|
|
9584
9438
|
setMethod
|
|
9585
9439
|
} = useRestoreStore();
|
|
9440
|
+
(0, import_react32.useEffect)(() => {
|
|
9441
|
+
setIsDialogForced(true);
|
|
9442
|
+
return () => {
|
|
9443
|
+
setRestoreFile(null);
|
|
9444
|
+
setShowPassword(false);
|
|
9445
|
+
setUsePasskey(false);
|
|
9446
|
+
setMethod(null);
|
|
9447
|
+
setIsDialogForced(false);
|
|
9448
|
+
};
|
|
9449
|
+
}, []);
|
|
9586
9450
|
const {
|
|
9587
9451
|
restoreFromServer: restoreFromServer2,
|
|
9588
9452
|
isRestoringFromServer,
|
|
@@ -9591,7 +9455,16 @@ var KeyshareRestoreMenu = () => {
|
|
|
9591
9455
|
restoreFromCloud,
|
|
9592
9456
|
isRestoringFromCloud
|
|
9593
9457
|
} = useRestoreAccount();
|
|
9594
|
-
const {
|
|
9458
|
+
const { data: serverRecoveryStatus, isLoading: isBackupStatusLoading } = (0, import_react_query16.useQuery)({
|
|
9459
|
+
retry: false,
|
|
9460
|
+
queryKey: [CHECK_BACKUP_QUERY_KEY, address],
|
|
9461
|
+
queryFn: async () => await getShareRecoveryStats()
|
|
9462
|
+
});
|
|
9463
|
+
const hasServerBackup = serverRecoveryStatus?.created || serverRecoveryStatus?.devices?.length > 0;
|
|
9464
|
+
(0, import_react32.useEffect)(() => {
|
|
9465
|
+
if (!!hasServerBackup) setMethod("server");
|
|
9466
|
+
}, [hasServerBackup]);
|
|
9467
|
+
const { mutate: disconnect, isPending: isDisconnecting } = (0, import_react_query16.useMutation)({
|
|
9595
9468
|
mutationFn: async () => {
|
|
9596
9469
|
setError(null);
|
|
9597
9470
|
setMethod(null);
|
|
@@ -9622,29 +9495,47 @@ var KeyshareRestoreMenu = () => {
|
|
|
9622
9495
|
}
|
|
9623
9496
|
});
|
|
9624
9497
|
const RestoreComponent = currentRestoreMethod ? RESTORE_COMPONENTS[currentRestoreMethod] : null;
|
|
9625
|
-
const isBackupChecking = checkingBackup || isBackupStatusLoading;
|
|
9626
9498
|
return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
9627
9499
|
"div",
|
|
9628
9500
|
{
|
|
9629
9501
|
style: { "--l-pass-scrollbar-mah": `${maxScrollHeight}px` },
|
|
9630
9502
|
className: "list-scrollbar-y w-full",
|
|
9631
9503
|
children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: [
|
|
9632
|
-
|
|
9504
|
+
isBackupStatusLoading && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)] text-center justify-center items-center", children: [
|
|
9633
9505
|
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react25.Loader, { className: "w-5 h-5 animate-spin" }),
|
|
9634
|
-
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "block w-full text-xs leading-4", children: "Checking for backups..." })
|
|
9635
|
-
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "block w-full text-xs leading-4", children: "Please wait while we check for available backups..." })
|
|
9506
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "block w-full text-xs leading-4", children: "Checking for backups..." })
|
|
9636
9507
|
] }),
|
|
9637
|
-
!success && !
|
|
9508
|
+
!success && !isBackupStatusLoading && !isDisconnecting && !hasServerBackup && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
9638
9509
|
NoBackupFound,
|
|
9639
9510
|
{
|
|
9640
9511
|
isLoading: isRestoringFromServer || isRestoringFromCloud || isRestoringFromFile || isDisconnecting,
|
|
9641
9512
|
restoreFromFile
|
|
9642
9513
|
}
|
|
9643
9514
|
),
|
|
9644
|
-
!success && !
|
|
9645
|
-
/* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "flex items-center justify-
|
|
9646
|
-
/* @__PURE__ */ (0, import_jsx_runtime44.
|
|
9647
|
-
|
|
9515
|
+
!success && !isBackupStatusLoading && !isDisconnecting && hasServerBackup && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_jsx_runtime44.Fragment, { children: [
|
|
9516
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "flex items-center justify-between gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: [
|
|
9517
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9518
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react25.CloudDownload, { className: "w-6 h-6" }),
|
|
9519
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "font-bold text-xl leading-6", children: "Restore Account" })
|
|
9520
|
+
] }),
|
|
9521
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
9522
|
+
Switch,
|
|
9523
|
+
{
|
|
9524
|
+
name: "advanced-restore-flow-toggle",
|
|
9525
|
+
labels: { checked: "Standard", unchecked: "Advanced" },
|
|
9526
|
+
checked: currentRestoreMethod !== "server",
|
|
9527
|
+
onChange: () => {
|
|
9528
|
+
if (!!error) setError(null);
|
|
9529
|
+
if (currentRestoreMethod === "server") {
|
|
9530
|
+
setRestorePassword("");
|
|
9531
|
+
setMethod(null);
|
|
9532
|
+
} else {
|
|
9533
|
+
setRestoreFile(null);
|
|
9534
|
+
setMethod("server");
|
|
9535
|
+
}
|
|
9536
|
+
}
|
|
9537
|
+
}
|
|
9538
|
+
)
|
|
9648
9539
|
] }),
|
|
9649
9540
|
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(MethodSelector, { mode: "restore", serverRecoveryStatus }),
|
|
9650
9541
|
!!currentRestoreMethod && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
@@ -9657,32 +9548,29 @@ var KeyshareRestoreMenu = () => {
|
|
|
9657
9548
|
}
|
|
9658
9549
|
)
|
|
9659
9550
|
] }),
|
|
9660
|
-
!success && !
|
|
9661
|
-
|
|
9662
|
-
|
|
9663
|
-
|
|
9664
|
-
|
|
9665
|
-
|
|
9666
|
-
|
|
9667
|
-
|
|
9668
|
-
|
|
9669
|
-
|
|
9670
|
-
|
|
9671
|
-
|
|
9672
|
-
|
|
9673
|
-
|
|
9674
|
-
|
|
9675
|
-
|
|
9676
|
-
|
|
9677
|
-
|
|
9678
|
-
className: "w-
|
|
9679
|
-
children:
|
|
9680
|
-
|
|
9681
|
-
|
|
9682
|
-
|
|
9683
|
-
}
|
|
9684
|
-
)
|
|
9685
|
-
] }),
|
|
9551
|
+
!success && !isBackupStatusLoading && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
|
|
9552
|
+
Button,
|
|
9553
|
+
{
|
|
9554
|
+
size: "large",
|
|
9555
|
+
variant: "ghost",
|
|
9556
|
+
onClick: () => {
|
|
9557
|
+
setError(null);
|
|
9558
|
+
setShowPassword(false);
|
|
9559
|
+
setUsePasskey(false);
|
|
9560
|
+
setRestoreFile(null);
|
|
9561
|
+
setRestorePassword("");
|
|
9562
|
+
setSuccess(null);
|
|
9563
|
+
setMethod(null);
|
|
9564
|
+
disconnect();
|
|
9565
|
+
},
|
|
9566
|
+
disabled: isDisconnecting || isRestoringFromFile || isRestoringFromServer,
|
|
9567
|
+
className: "w-fit mx-auto",
|
|
9568
|
+
children: [
|
|
9569
|
+
isDisconnecting ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react25.Loader, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react25.UserCircle, { className: "w-4 h-4" }),
|
|
9570
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { children: "Try Another Account" })
|
|
9571
|
+
]
|
|
9572
|
+
}
|
|
9573
|
+
),
|
|
9686
9574
|
error && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(Highlight, { type: "error", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9687
9575
|
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react25.AlertCircle, { className: "h-4 w-4 flex-shrink-0" }),
|
|
9688
9576
|
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "w-full flex-1 block", children: error })
|
|
@@ -9697,9 +9585,9 @@ var KeyshareRestoreMenu = () => {
|
|
|
9697
9585
|
};
|
|
9698
9586
|
|
|
9699
9587
|
// src/internal/components/KeyshareRestoreMenu/KeyshareBackupMenu.tsx
|
|
9700
|
-
var
|
|
9588
|
+
var import_react_query17 = require("@tanstack/react-query");
|
|
9701
9589
|
var import_lucide_react26 = require("lucide-react");
|
|
9702
|
-
var
|
|
9590
|
+
var import_react33 = require("react");
|
|
9703
9591
|
init_vaultClient();
|
|
9704
9592
|
var import_jsx_runtime45 = require("react/jsx-runtime");
|
|
9705
9593
|
var COMPONENTS = {
|
|
@@ -9709,7 +9597,6 @@ var COMPONENTS = {
|
|
|
9709
9597
|
};
|
|
9710
9598
|
function KeyshareBackupMenu() {
|
|
9711
9599
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9712
|
-
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
9713
9600
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
9714
9601
|
const setMainPageHeight = useLayoutDataStore((st) => st.setMainPageHeight);
|
|
9715
9602
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
@@ -9726,18 +9613,27 @@ function KeyshareBackupMenu() {
|
|
|
9726
9613
|
setUsePasskey,
|
|
9727
9614
|
setMethod
|
|
9728
9615
|
} = useRestoreStore();
|
|
9729
|
-
(0,
|
|
9616
|
+
(0, import_react33.useEffect)(() => {
|
|
9730
9617
|
setMainPageHeight(DEFAULT_SETTINGS_MENU_HEIGHT);
|
|
9731
9618
|
return () => {
|
|
9619
|
+
setSuccess(null);
|
|
9620
|
+
setError(null);
|
|
9621
|
+
setRestoreFile(null);
|
|
9622
|
+
setRestorePassword("");
|
|
9623
|
+
setShowPassword(false);
|
|
9624
|
+
setUsePasskey(false);
|
|
9732
9625
|
setMethod(null);
|
|
9733
9626
|
};
|
|
9734
9627
|
}, []);
|
|
9735
|
-
const { data: serverRecoveryStatus } = (0,
|
|
9628
|
+
const { data: serverRecoveryStatus, isLoading: isRecoveryLoading } = (0, import_react_query17.useQuery)({
|
|
9736
9629
|
retry: false,
|
|
9737
9630
|
queryKey: [CHECK_BACKUP_QUERY_KEY, address],
|
|
9738
9631
|
queryFn: async () => await getShareRecoveryStats()
|
|
9739
9632
|
});
|
|
9740
|
-
const
|
|
9633
|
+
const hasRecoveryData = serverRecoveryStatus?.created || serverRecoveryStatus?.devices?.length > 0;
|
|
9634
|
+
(0, import_react33.useEffect)(() => {
|
|
9635
|
+
if (!!hasRecoveryData) setMethod("server");
|
|
9636
|
+
}, [hasRecoveryData]);
|
|
9741
9637
|
const {
|
|
9742
9638
|
isPasswordBackupCreating,
|
|
9743
9639
|
createPasswordBackup,
|
|
@@ -9753,35 +9649,56 @@ function KeyshareBackupMenu() {
|
|
|
9753
9649
|
style: { "--l-pass-scrollbar-mah": `${maxScrollHeight}px` },
|
|
9754
9650
|
className: "list-scrollbar-y w-full",
|
|
9755
9651
|
children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: [
|
|
9756
|
-
|
|
9652
|
+
!!isRecoveryLoading && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "w-full flex items-center justify-center p-[var(--l-pass-pd)]", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react26.Loader, { className: "h-5 w-5 animate-spin" }) }),
|
|
9653
|
+
!isRecoveryLoading && !hasRecoveryData && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex items-center justify-center gap-2 px-5 py-[var(--l-pass-pd)]", children: [
|
|
9757
9654
|
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react26.LockIcon, { className: "w-6 h-6" }),
|
|
9758
9655
|
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "font-bold text-xl leading-6", children: "Secure Account" })
|
|
9759
9656
|
] }),
|
|
9760
|
-
|
|
9657
|
+
!isRecoveryLoading && !!hasRecoveryData && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex items-center justify-between gap-[var(--l-pass-gap)]", children: [
|
|
9658
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9659
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
9660
|
+
Button,
|
|
9661
|
+
{
|
|
9662
|
+
variant: "ghost",
|
|
9663
|
+
size: "icon",
|
|
9664
|
+
title: "Back",
|
|
9665
|
+
onClick: () => {
|
|
9666
|
+
setRestorePassword("");
|
|
9667
|
+
setRestoreFile(null);
|
|
9668
|
+
setShowPassword(false);
|
|
9669
|
+
setSelectedCloudProvider(null);
|
|
9670
|
+
setUsePasskey(false);
|
|
9671
|
+
setError(null);
|
|
9672
|
+
setSuccess(null);
|
|
9673
|
+
setMethod(null);
|
|
9674
|
+
setPage("settings" /* SETTINGS */);
|
|
9675
|
+
},
|
|
9676
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react26.ArrowLeft, { className: "h-4 w-4" })
|
|
9677
|
+
}
|
|
9678
|
+
),
|
|
9679
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "text-xl font-semibold leading-8", children: "Create Backup" })
|
|
9680
|
+
] }),
|
|
9761
9681
|
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
9762
|
-
|
|
9682
|
+
Switch,
|
|
9763
9683
|
{
|
|
9764
|
-
|
|
9765
|
-
|
|
9766
|
-
|
|
9767
|
-
|
|
9768
|
-
|
|
9769
|
-
|
|
9770
|
-
|
|
9771
|
-
|
|
9772
|
-
|
|
9773
|
-
|
|
9774
|
-
|
|
9775
|
-
|
|
9776
|
-
|
|
9777
|
-
},
|
|
9778
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react26.ArrowLeft, { className: "h-4 w-4" })
|
|
9684
|
+
name: "advanced-restore-flow-toggle",
|
|
9685
|
+
labels: { checked: "Standard", unchecked: "Advanced" },
|
|
9686
|
+
checked: currentBackupMethod !== "server",
|
|
9687
|
+
onChange: () => {
|
|
9688
|
+
if (!!error) setError(null);
|
|
9689
|
+
if (currentBackupMethod === "server") {
|
|
9690
|
+
setRestorePassword("");
|
|
9691
|
+
setMethod(null);
|
|
9692
|
+
} else {
|
|
9693
|
+
setRestoreFile(null);
|
|
9694
|
+
setMethod("server");
|
|
9695
|
+
}
|
|
9696
|
+
}
|
|
9779
9697
|
}
|
|
9780
|
-
)
|
|
9781
|
-
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "text-xl font-semibold leading-8", children: "Create Backup" })
|
|
9698
|
+
)
|
|
9782
9699
|
] }),
|
|
9783
|
-
|
|
9784
|
-
!!currentBackupMethod && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
9700
|
+
!isRecoveryLoading && !!hasRecoveryData && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(MethodSelector, { mode: "backup", serverRecoveryStatus }),
|
|
9701
|
+
!isRecoveryLoading && !!currentBackupMethod && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
9785
9702
|
BackupComponent,
|
|
9786
9703
|
{
|
|
9787
9704
|
mode: "backup",
|
|
@@ -9793,13 +9710,7 @@ function KeyshareBackupMenu() {
|
|
|
9793
9710
|
) }),
|
|
9794
9711
|
!isRecoveryLoading && !currentBackupMethod && !hasRecoveryData && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(Highlight, { type: "warning", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9795
9712
|
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react26.AlertCircle, { className: "h-4 w-4 flex-shrink-0" }),
|
|
9796
|
-
/* @__PURE__ */ (0, import_jsx_runtime45.
|
|
9797
|
-
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "font-semibold", children: "No Backup Found" }),
|
|
9798
|
-
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("br", {}),
|
|
9799
|
-
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "text-[10px]", children: "Create a backup to restore access if you switch devices or clear your browser." }),
|
|
9800
|
-
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("br", {}),
|
|
9801
|
-
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "text-[10px]", children: "You can ignore this if you already have a backup or don't want to use Keyshare Vault." })
|
|
9802
|
-
] })
|
|
9713
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "block flex-1 font-semibold", children: "No Backup Found" })
|
|
9803
9714
|
] }),
|
|
9804
9715
|
error && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(Highlight, { type: "error", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9805
9716
|
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react26.AlertCircle, { className: "h-4 w-4 flex-shrink-0" }),
|
|
@@ -9816,16 +9727,16 @@ function KeyshareBackupMenu() {
|
|
|
9816
9727
|
|
|
9817
9728
|
// src/internal/components/MainMenu/MainMenu.tsx
|
|
9818
9729
|
var import_lucide_react27 = require("lucide-react");
|
|
9819
|
-
var
|
|
9730
|
+
var import_react34 = require("react");
|
|
9820
9731
|
|
|
9821
9732
|
// src/internal/components/ManageWalletMenu/hooks/useProvidersList.ts
|
|
9822
|
-
var
|
|
9733
|
+
var import_react_query18 = require("@tanstack/react-query");
|
|
9823
9734
|
init_common();
|
|
9824
9735
|
var PROVIDERS_QUERY_KEY = "lumia-passport-providers-query";
|
|
9825
9736
|
function useProvidersList() {
|
|
9826
9737
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9827
9738
|
const page = useLayoutDataStore((st) => st.page);
|
|
9828
|
-
return (0,
|
|
9739
|
+
return (0, import_react_query18.useQuery)({
|
|
9829
9740
|
retry: false,
|
|
9830
9741
|
// hook is invoked on multiple pages to preload cache
|
|
9831
9742
|
enabled: !!address && (page === "manage-wallet" /* MANAGE_WALLET */ || page === "settings" /* SETTINGS */ || page === "main-menu" /* MAIN_MENU */),
|
|
@@ -9846,7 +9757,7 @@ function MainMenu() {
|
|
|
9846
9757
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9847
9758
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
9848
9759
|
const setMainPageHeight = useLayoutDataStore((st) => st.setMainPageHeight);
|
|
9849
|
-
(0,
|
|
9760
|
+
(0, import_react34.useEffect)(() => setMainPageHeight(DEFAULT_MAIN_MENU_HEIGHT), [setMainPageHeight]);
|
|
9850
9761
|
useProvidersList();
|
|
9851
9762
|
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("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__ */ (0, import_jsx_runtime46.jsxs)(
|
|
9852
9763
|
Button,
|
|
@@ -9868,11 +9779,11 @@ function MainMenu() {
|
|
|
9868
9779
|
// src/internal/components/ManageWalletMenu/ManageWallet.tsx
|
|
9869
9780
|
var import_lodash_es3 = require("lodash-es");
|
|
9870
9781
|
var import_lucide_react31 = require("lucide-react");
|
|
9871
|
-
var
|
|
9782
|
+
var import_react38 = require("react");
|
|
9872
9783
|
|
|
9873
9784
|
// src/modules/linkedProfiles.ts
|
|
9874
|
-
var
|
|
9875
|
-
var
|
|
9785
|
+
var import_react_query19 = require("@tanstack/react-query");
|
|
9786
|
+
var import_react35 = require("react");
|
|
9876
9787
|
init_auth();
|
|
9877
9788
|
init_common();
|
|
9878
9789
|
init_types();
|
|
@@ -9892,32 +9803,32 @@ async function getLinkProfilesData() {
|
|
|
9892
9803
|
return { profiles: loadedProfiles, avatar };
|
|
9893
9804
|
}
|
|
9894
9805
|
function useLumiaPassportLinkedProfiles() {
|
|
9895
|
-
const qc = (0,
|
|
9806
|
+
const qc = (0, import_react_query19.useQueryClient)();
|
|
9896
9807
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9897
9808
|
const {
|
|
9898
9809
|
data,
|
|
9899
9810
|
isFetching: isLoading,
|
|
9900
9811
|
error
|
|
9901
|
-
} = (0,
|
|
9812
|
+
} = (0, import_react_query19.useQuery)({
|
|
9902
9813
|
retry: false,
|
|
9903
9814
|
enabled: !!address,
|
|
9904
9815
|
queryKey: [LINKED_PROFILES_QUERY_KEY, address],
|
|
9905
9816
|
queryFn: getLinkProfilesData
|
|
9906
9817
|
});
|
|
9907
9818
|
const { profiles = [], avatar = null } = data || {};
|
|
9908
|
-
const refresh = (0,
|
|
9819
|
+
const refresh = (0, import_react35.useCallback)(async () => {
|
|
9909
9820
|
await qc.invalidateQueries({ queryKey: [LINKED_PROFILES_QUERY_KEY, address] });
|
|
9910
9821
|
}, [qc, address]);
|
|
9911
9822
|
return { profiles, avatar, isLoading, error, refresh };
|
|
9912
9823
|
}
|
|
9913
9824
|
|
|
9914
9825
|
// src/internal/components/ManageWalletMenu/AddProvider.tsx
|
|
9915
|
-
var
|
|
9826
|
+
var import_react_query23 = require("@tanstack/react-query");
|
|
9916
9827
|
init_passkey2();
|
|
9917
9828
|
|
|
9918
9829
|
// src/internal/components/ManageWalletMenu/EmailForm.tsx
|
|
9919
9830
|
init_lumiaPassport();
|
|
9920
|
-
var
|
|
9831
|
+
var import_react_query20 = require("@tanstack/react-query");
|
|
9921
9832
|
var import_lucide_react28 = require("lucide-react");
|
|
9922
9833
|
init_projectId();
|
|
9923
9834
|
|
|
@@ -9952,7 +9863,7 @@ function EmailForm() {
|
|
|
9952
9863
|
const isLoading = useLumiaPassportSession((st) => st.isLoading);
|
|
9953
9864
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
9954
9865
|
const { email, setEmail, setAlert, setEmailCodeExpiresIn, setEmailStep } = useManageWalletStore();
|
|
9955
|
-
const { mutate: onSendVerificationCode } = (0,
|
|
9866
|
+
const { mutate: onSendVerificationCode } = (0, import_react_query20.useMutation)({
|
|
9956
9867
|
mutationFn: async () => {
|
|
9957
9868
|
if (!email) return;
|
|
9958
9869
|
setIsLoading(true);
|
|
@@ -10039,13 +9950,13 @@ function EmailForm() {
|
|
|
10039
9950
|
}
|
|
10040
9951
|
|
|
10041
9952
|
// src/internal/components/ManageWalletMenu/hooks/useSendVerificationCode.ts
|
|
10042
|
-
var
|
|
9953
|
+
var import_react_query21 = require("@tanstack/react-query");
|
|
10043
9954
|
init_email();
|
|
10044
9955
|
function useSendVerificationCode() {
|
|
10045
9956
|
const setAlert = useManageWalletStore((st) => st.setAlert);
|
|
10046
9957
|
const setLinkIsLoading = useManageWalletStore((st) => st.setLinkIsLoading);
|
|
10047
9958
|
const setEmailCodeExpiresIn = useManageWalletStore((st) => st.setEmailCodeExpiresIn);
|
|
10048
|
-
return (0,
|
|
9959
|
+
return (0, import_react_query21.useMutation)({
|
|
10049
9960
|
mutationFn: async (email) => {
|
|
10050
9961
|
if (!email) {
|
|
10051
9962
|
throw new Error("Email is required");
|
|
@@ -10068,15 +9979,15 @@ function useSendVerificationCode() {
|
|
|
10068
9979
|
}
|
|
10069
9980
|
|
|
10070
9981
|
// src/internal/components/ManageWalletMenu/hooks/useVerifyCode.ts
|
|
10071
|
-
var
|
|
9982
|
+
var import_react_query22 = require("@tanstack/react-query");
|
|
10072
9983
|
init_email();
|
|
10073
9984
|
function useVerifyCode() {
|
|
10074
9985
|
const { callbacks } = useLumiaPassportConfig();
|
|
10075
|
-
const qc = (0,
|
|
9986
|
+
const qc = (0, import_react_query22.useQueryClient)();
|
|
10076
9987
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10077
9988
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
10078
9989
|
const { email, emailCode, setEmail, setEmailStep, setEmailCode, setProviderType, setLinkIsLoading, setAlert } = useManageWalletStore();
|
|
10079
|
-
return (0,
|
|
9990
|
+
return (0, import_react_query22.useMutation)({
|
|
10080
9991
|
mutationFn: async (codeToVerify) => {
|
|
10081
9992
|
const code = codeToVerify ?? emailCode;
|
|
10082
9993
|
if (!code) {
|
|
@@ -10124,7 +10035,7 @@ function normalizePasskeyLinkError(msg) {
|
|
|
10124
10035
|
return msg;
|
|
10125
10036
|
}
|
|
10126
10037
|
function AddProvider() {
|
|
10127
|
-
const qc = (0,
|
|
10038
|
+
const qc = (0, import_react_query23.useQueryClient)();
|
|
10128
10039
|
const callbacks = useLumiaPassportConfig().callbacks;
|
|
10129
10040
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10130
10041
|
const {
|
|
@@ -10284,11 +10195,11 @@ function EmailNotConnectedWarning() {
|
|
|
10284
10195
|
}
|
|
10285
10196
|
|
|
10286
10197
|
// src/internal/components/ManageWalletMenu/hooks/useLinkSocial.ts
|
|
10287
|
-
var
|
|
10288
|
-
var
|
|
10198
|
+
var import_react_query24 = require("@tanstack/react-query");
|
|
10199
|
+
var import_react36 = __toESM(require("react"), 1);
|
|
10289
10200
|
init_auth();
|
|
10290
10201
|
function useLinkSocial() {
|
|
10291
|
-
const qc = (0,
|
|
10202
|
+
const qc = (0, import_react_query24.useQueryClient)();
|
|
10292
10203
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10293
10204
|
const {
|
|
10294
10205
|
config: { current: config },
|
|
@@ -10297,7 +10208,7 @@ function useLinkSocial() {
|
|
|
10297
10208
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
10298
10209
|
const isWalletLinking = useLayoutDataStore((st) => st.isWalletLinking);
|
|
10299
10210
|
const { providerType, linkIsLoading, setProviderType, setAlert, setLinkIsLoading } = useManageWalletStore();
|
|
10300
|
-
const handleLinkSocialProvider =
|
|
10211
|
+
const handleLinkSocialProvider = import_react36.default.useCallback(
|
|
10301
10212
|
async (providerIdRaw) => {
|
|
10302
10213
|
const providerKey = providerIdRaw.toLowerCase();
|
|
10303
10214
|
const normalizedKey = providerKey === "twitter" ? "x" : providerKey;
|
|
@@ -10349,8 +10260,8 @@ function useLinkSocial() {
|
|
|
10349
10260
|
},
|
|
10350
10261
|
[config.social?.providers, callbacks]
|
|
10351
10262
|
);
|
|
10352
|
-
const [socialLinkStarted, setSocialLinkStarted] =
|
|
10353
|
-
(0,
|
|
10263
|
+
const [socialLinkStarted, setSocialLinkStarted] = import_react36.default.useState(false);
|
|
10264
|
+
(0, import_react36.useEffect)(() => {
|
|
10354
10265
|
const key = providerType?.toLowerCase();
|
|
10355
10266
|
console.log("[useLinkSocial] Effect triggered:", { key, linkIsLoading, socialLinkStarted, isWalletLinking });
|
|
10356
10267
|
if (isWalletLinking) {
|
|
@@ -10370,20 +10281,20 @@ function useLinkSocial() {
|
|
|
10370
10281
|
}
|
|
10371
10282
|
|
|
10372
10283
|
// src/internal/components/ManageWalletMenu/hooks/useLinkTelegram.ts
|
|
10373
|
-
var
|
|
10374
|
-
var
|
|
10284
|
+
var import_react_query25 = require("@tanstack/react-query");
|
|
10285
|
+
var import_react37 = require("react");
|
|
10375
10286
|
init_telegram2();
|
|
10376
10287
|
function useLinkTelegram() {
|
|
10377
10288
|
const {
|
|
10378
10289
|
config: { current: config },
|
|
10379
10290
|
callbacks
|
|
10380
10291
|
} = useLumiaPassportConfig();
|
|
10381
|
-
const qc = (0,
|
|
10292
|
+
const qc = (0, import_react_query25.useQueryClient)();
|
|
10382
10293
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10383
10294
|
const isWalletLinking = useLayoutDataStore((st) => st.isWalletLinking);
|
|
10384
10295
|
const { providerType, linkIsLoading, setLinkIsLoading, setProviderType, setAlert } = useManageWalletStore();
|
|
10385
10296
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
10386
|
-
const handleLinkTelegram = (0,
|
|
10297
|
+
const handleLinkTelegram = (0, import_react37.useCallback)(async () => {
|
|
10387
10298
|
try {
|
|
10388
10299
|
setLinkIsLoading(true);
|
|
10389
10300
|
setAlert(null);
|
|
@@ -10425,8 +10336,8 @@ function useLinkTelegram() {
|
|
|
10425
10336
|
setLinkIsLoading(false);
|
|
10426
10337
|
}
|
|
10427
10338
|
}, [config.social?.providers, callbacks]);
|
|
10428
|
-
const [telegramLinkStarted, setTelegramLinkStarted] = (0,
|
|
10429
|
-
(0,
|
|
10339
|
+
const [telegramLinkStarted, setTelegramLinkStarted] = (0, import_react37.useState)(false);
|
|
10340
|
+
(0, import_react37.useEffect)(() => {
|
|
10430
10341
|
console.log("[useLinkTelegram] Effect triggered:", {
|
|
10431
10342
|
providerType,
|
|
10432
10343
|
linkIsLoading,
|
|
@@ -10443,7 +10354,7 @@ function useLinkTelegram() {
|
|
|
10443
10354
|
handleLinkTelegram();
|
|
10444
10355
|
}
|
|
10445
10356
|
}, [providerType, handleLinkTelegram, linkIsLoading, telegramLinkStarted, isWalletLinking]);
|
|
10446
|
-
(0,
|
|
10357
|
+
(0, import_react37.useEffect)(() => {
|
|
10447
10358
|
if (providerType !== "telegram") {
|
|
10448
10359
|
setTelegramLinkStarted(false);
|
|
10449
10360
|
}
|
|
@@ -10552,7 +10463,7 @@ function ManageWalletMenu() {
|
|
|
10552
10463
|
} = useManageWalletStore();
|
|
10553
10464
|
const configuredProviders = getConfiguredProviders(config);
|
|
10554
10465
|
const { data: providers = [], isLoading: isProvidersLoading, error: providersError } = useProvidersList();
|
|
10555
|
-
const renderProviders = (0,
|
|
10466
|
+
const renderProviders = (0, import_react38.useMemo)(() => {
|
|
10556
10467
|
const normalizeProviderName = (name) => {
|
|
10557
10468
|
if (name === "x") return "twitter";
|
|
10558
10469
|
return name;
|
|
@@ -10670,19 +10581,19 @@ function ManageWalletMenu() {
|
|
|
10670
10581
|
}
|
|
10671
10582
|
|
|
10672
10583
|
// src/internal/components/ManageWalletMenu/UnlinkProviderMenu.tsx
|
|
10673
|
-
var
|
|
10584
|
+
var import_react_query26 = require("@tanstack/react-query");
|
|
10674
10585
|
var import_lucide_react32 = require("lucide-react");
|
|
10675
|
-
var
|
|
10586
|
+
var import_react39 = require("react");
|
|
10676
10587
|
init_auth();
|
|
10677
10588
|
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
10678
10589
|
function UnlinkProviderMenu() {
|
|
10679
|
-
const qc = (0,
|
|
10590
|
+
const qc = (0, import_react_query26.useQueryClient)();
|
|
10680
10591
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10681
10592
|
const { callbacks } = useLumiaPassportConfig();
|
|
10682
10593
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
10683
10594
|
const { confirmUnlink, setConfirmUnlink, setAlert } = useManageWalletStore();
|
|
10684
|
-
const [confirmInput, setConfirmInput] = (0,
|
|
10685
|
-
const { mutate: handleUnlinkProvider, isPending: isProviderUnlinking } = (0,
|
|
10595
|
+
const [confirmInput, setConfirmInput] = (0, import_react39.useState)("");
|
|
10596
|
+
const { mutate: handleUnlinkProvider, isPending: isProviderUnlinking } = (0, import_react_query26.useMutation)({
|
|
10686
10597
|
mutationFn: async () => {
|
|
10687
10598
|
if (!confirmUnlink) {
|
|
10688
10599
|
throw new Error("No provider to unlink");
|
|
@@ -10758,11 +10669,11 @@ function UnlinkProviderMenu() {
|
|
|
10758
10669
|
var import_lucide_react35 = require("lucide-react");
|
|
10759
10670
|
|
|
10760
10671
|
// src/internal/hooks/useNicknameInfo.ts
|
|
10761
|
-
var
|
|
10672
|
+
var import_react_query27 = require("@tanstack/react-query");
|
|
10762
10673
|
init_nickname();
|
|
10763
10674
|
init_profile();
|
|
10764
10675
|
function useNicknameInfo(enabled = true) {
|
|
10765
|
-
const query = (0,
|
|
10676
|
+
const query = (0, import_react_query27.useQuery)({
|
|
10766
10677
|
queryKey: [QUERY_KEYS.nicknameInfo],
|
|
10767
10678
|
queryFn: getNicknameInfo,
|
|
10768
10679
|
enabled,
|
|
@@ -10779,82 +10690,17 @@ function useNicknameInfo(enabled = true) {
|
|
|
10779
10690
|
};
|
|
10780
10691
|
}
|
|
10781
10692
|
|
|
10782
|
-
// src/internal/lib/nickname-cooldown.ts
|
|
10783
|
-
function getDaysRemaining(cooldownEndsAt) {
|
|
10784
|
-
if (!cooldownEndsAt) return 0;
|
|
10785
|
-
const endDate = new Date(cooldownEndsAt);
|
|
10786
|
-
const now = /* @__PURE__ */ new Date();
|
|
10787
|
-
if (isNaN(endDate.getTime())) return 0;
|
|
10788
|
-
if (endDate <= now) return 0;
|
|
10789
|
-
const diffMs = endDate.getTime() - now.getTime();
|
|
10790
|
-
const diffDays = Math.ceil(diffMs / (1e3 * 60 * 60 * 24));
|
|
10791
|
-
return Math.max(0, diffDays);
|
|
10792
|
-
}
|
|
10793
|
-
function formatCooldownEndDate(cooldownEndsAt) {
|
|
10794
|
-
if (!cooldownEndsAt) return "";
|
|
10795
|
-
const endDate = new Date(cooldownEndsAt);
|
|
10796
|
-
if (isNaN(endDate.getTime())) return "";
|
|
10797
|
-
return endDate.toLocaleDateString(void 0, {
|
|
10798
|
-
year: "numeric",
|
|
10799
|
-
month: "short",
|
|
10800
|
-
day: "numeric"
|
|
10801
|
-
});
|
|
10802
|
-
}
|
|
10803
|
-
|
|
10804
|
-
// src/internal/components/NicknameSettings/NicknameInfoDisplay.tsx
|
|
10805
|
-
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
10806
|
-
function NicknameInfoDisplay({ info }) {
|
|
10807
|
-
const daysRemaining = getDaysRemaining(info.cooldownEndsAt);
|
|
10808
|
-
const cooldownEndDate = formatCooldownEndDate(info.cooldownEndsAt);
|
|
10809
|
-
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "w-full flex flex-col gap-3", children: [
|
|
10810
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex flex-col gap-1", children: [
|
|
10811
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "Your nickname" }),
|
|
10812
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-lg font-bold text-[var(--l-pass-fg)]", children: info.displayHandle })
|
|
10813
|
-
] }),
|
|
10814
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-center gap-4 text-xs text-[var(--l-pass-fg-muted)]", children: [
|
|
10815
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
|
|
10816
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: "Created" }),
|
|
10817
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-[var(--l-pass-fg)]", children: new Date(info.createdAt).toLocaleDateString(void 0, {
|
|
10818
|
-
year: "numeric",
|
|
10819
|
-
month: "short",
|
|
10820
|
-
day: "numeric"
|
|
10821
|
-
}) })
|
|
10822
|
-
] }),
|
|
10823
|
-
info.changedAt && /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
|
|
10824
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: "Last changed" }),
|
|
10825
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-[var(--l-pass-fg)]", children: new Date(info.changedAt).toLocaleDateString(void 0, {
|
|
10826
|
-
year: "numeric",
|
|
10827
|
-
month: "short",
|
|
10828
|
-
day: "numeric"
|
|
10829
|
-
}) })
|
|
10830
|
-
] }),
|
|
10831
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
|
|
10832
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: "Times changed" }),
|
|
10833
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-[var(--l-pass-fg)]", children: info.changeCount })
|
|
10834
|
-
] })
|
|
10835
|
-
] }),
|
|
10836
|
-
!info.canChange && info.cooldownEndsAt && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-warning)]", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("span", { className: "text-sm text-[var(--l-pass-warning)]", children: [
|
|
10837
|
-
"You can change your nickname again on ",
|
|
10838
|
-
cooldownEndDate,
|
|
10839
|
-
" (",
|
|
10840
|
-
daysRemaining,
|
|
10841
|
-
" days remaining)"
|
|
10842
|
-
] }) }),
|
|
10843
|
-
info.canChange && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-success)]", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-sm text-[var(--l-pass-success)]", children: "You can change your nickname" }) })
|
|
10844
|
-
] });
|
|
10845
|
-
}
|
|
10846
|
-
|
|
10847
10693
|
// src/internal/components/NicknameSettings/NicknameEditForm.tsx
|
|
10848
|
-
var import_react44 = require("react");
|
|
10849
10694
|
var import_lucide_react34 = require("lucide-react");
|
|
10695
|
+
var import_react41 = require("react");
|
|
10850
10696
|
|
|
10851
10697
|
// src/internal/hooks/useChangeNickname.ts
|
|
10852
|
-
var
|
|
10698
|
+
var import_react_query28 = require("@tanstack/react-query");
|
|
10853
10699
|
init_nickname();
|
|
10854
10700
|
init_profile();
|
|
10855
10701
|
function useChangeNickname(options) {
|
|
10856
|
-
const queryClient3 = (0,
|
|
10857
|
-
const mutation = (0,
|
|
10702
|
+
const queryClient3 = (0, import_react_query28.useQueryClient)();
|
|
10703
|
+
const mutation = (0, import_react_query28.useMutation)({
|
|
10858
10704
|
mutationFn: (handle) => changeNickname(handle),
|
|
10859
10705
|
onSuccess: (result) => {
|
|
10860
10706
|
queryClient3.invalidateQueries({ queryKey: [QUERY_KEYS.nicknameInfo] });
|
|
@@ -10889,8 +10735,8 @@ function useChangeNickname(options) {
|
|
|
10889
10735
|
}
|
|
10890
10736
|
|
|
10891
10737
|
// src/internal/hooks/useNicknameAvailability.ts
|
|
10892
|
-
var
|
|
10893
|
-
var
|
|
10738
|
+
var import_react_query29 = require("@tanstack/react-query");
|
|
10739
|
+
var import_react40 = require("react");
|
|
10894
10740
|
init_nickname();
|
|
10895
10741
|
init_profile();
|
|
10896
10742
|
|
|
@@ -10921,12 +10767,12 @@ function normalizeNickname(handle) {
|
|
|
10921
10767
|
// src/internal/hooks/useNicknameAvailability.ts
|
|
10922
10768
|
var DEBOUNCE_MS = 300;
|
|
10923
10769
|
function useNicknameAvailability(handle, enabled = true) {
|
|
10924
|
-
const [debouncedHandle, setDebouncedHandle] = (0,
|
|
10925
|
-
const [isDebouncing, setIsDebouncing] = (0,
|
|
10770
|
+
const [debouncedHandle, setDebouncedHandle] = (0, import_react40.useState)("");
|
|
10771
|
+
const [isDebouncing, setIsDebouncing] = (0, import_react40.useState)(false);
|
|
10926
10772
|
const normalized = normalizeNickname(handle);
|
|
10927
10773
|
const validation = validateNickname(handle);
|
|
10928
10774
|
const isValidForCheck = validation.valid && normalized.length > 0;
|
|
10929
|
-
(0,
|
|
10775
|
+
(0, import_react40.useEffect)(() => {
|
|
10930
10776
|
if (!isValidForCheck || !enabled) {
|
|
10931
10777
|
setDebouncedHandle("");
|
|
10932
10778
|
setIsDebouncing(false);
|
|
@@ -10941,7 +10787,7 @@ function useNicknameAvailability(handle, enabled = true) {
|
|
|
10941
10787
|
clearTimeout(timer);
|
|
10942
10788
|
};
|
|
10943
10789
|
}, [normalized, isValidForCheck, enabled]);
|
|
10944
|
-
const query = (0,
|
|
10790
|
+
const query = (0, import_react_query29.useQuery)({
|
|
10945
10791
|
queryKey: QUERY_KEYS.nicknameAvailability(debouncedHandle),
|
|
10946
10792
|
queryFn: () => checkNicknameAvailability(debouncedHandle),
|
|
10947
10793
|
enabled: enabled && isValidForCheck && debouncedHandle.length > 0,
|
|
@@ -10984,7 +10830,7 @@ function getNicknameErrorMessage(code, params) {
|
|
|
10984
10830
|
|
|
10985
10831
|
// src/internal/components/NicknameSettings/NicknameAvailabilityIndicator.tsx
|
|
10986
10832
|
var import_lucide_react33 = require("lucide-react");
|
|
10987
|
-
var
|
|
10833
|
+
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
10988
10834
|
function NicknameAvailabilityIndicator({
|
|
10989
10835
|
isChecking,
|
|
10990
10836
|
availability,
|
|
@@ -10994,32 +10840,32 @@ function NicknameAvailabilityIndicator({
|
|
|
10994
10840
|
return null;
|
|
10995
10841
|
}
|
|
10996
10842
|
if (isChecking) {
|
|
10997
|
-
return /* @__PURE__ */ (0,
|
|
10998
|
-
/* @__PURE__ */ (0,
|
|
10999
|
-
/* @__PURE__ */ (0,
|
|
10843
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-fg-muted)]", children: [
|
|
10844
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react33.Loader, { className: "w-3 h-3 animate-spin" }),
|
|
10845
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: "Checking availability..." })
|
|
11000
10846
|
] });
|
|
11001
10847
|
}
|
|
11002
10848
|
if (!availability) {
|
|
11003
10849
|
return null;
|
|
11004
10850
|
}
|
|
11005
10851
|
if (availability.available) {
|
|
11006
|
-
return /* @__PURE__ */ (0,
|
|
11007
|
-
/* @__PURE__ */ (0,
|
|
11008
|
-
/* @__PURE__ */ (0,
|
|
10852
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-success)]", children: [
|
|
10853
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react33.Check, { className: "w-3 h-3" }),
|
|
10854
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: "Nickname is available" })
|
|
11009
10855
|
] });
|
|
11010
10856
|
}
|
|
11011
10857
|
const reason = availability.reason ? getNicknameErrorMessage(availability.reason) : "This nickname is not available";
|
|
11012
|
-
return /* @__PURE__ */ (0,
|
|
11013
|
-
/* @__PURE__ */ (0,
|
|
11014
|
-
/* @__PURE__ */ (0,
|
|
10858
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-error)]", children: [
|
|
10859
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react33.X, { className: "w-3 h-3" }),
|
|
10860
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: reason })
|
|
11015
10861
|
] });
|
|
11016
10862
|
}
|
|
11017
10863
|
|
|
11018
10864
|
// src/internal/components/NicknameSettings/NicknameEditForm.tsx
|
|
11019
|
-
var
|
|
10865
|
+
var import_jsx_runtime54 = require("react/jsx-runtime");
|
|
11020
10866
|
function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
11021
|
-
const [inputValue, setInputValue] = (0,
|
|
11022
|
-
const [clientError, setClientError] = (0,
|
|
10867
|
+
const [inputValue, setInputValue] = (0, import_react41.useState)("");
|
|
10868
|
+
const [clientError, setClientError] = (0, import_react41.useState)(null);
|
|
11023
10869
|
const normalized = normalizeNickname(inputValue);
|
|
11024
10870
|
const isSameAsCurrentHandle = normalized === currentHandle.toLowerCase();
|
|
11025
10871
|
const validation = validateNickname(inputValue);
|
|
@@ -11032,7 +10878,7 @@ function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
|
11032
10878
|
onSuccess?.();
|
|
11033
10879
|
}
|
|
11034
10880
|
});
|
|
11035
|
-
const handleInputChange = (0,
|
|
10881
|
+
const handleInputChange = (0, import_react41.useCallback)(
|
|
11036
10882
|
(e) => {
|
|
11037
10883
|
const value = e.target.value;
|
|
11038
10884
|
setInputValue(value);
|
|
@@ -11047,7 +10893,7 @@ function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
|
11047
10893
|
},
|
|
11048
10894
|
[clientError, isError, isSuccess, reset]
|
|
11049
10895
|
);
|
|
11050
|
-
const handleSubmit = (0,
|
|
10896
|
+
const handleSubmit = (0, import_react41.useCallback)(
|
|
11051
10897
|
(e) => {
|
|
11052
10898
|
e.preventDefault();
|
|
11053
10899
|
const normalized2 = normalizeNickname(inputValue);
|
|
@@ -11073,10 +10919,10 @@ function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
|
11073
10919
|
if (!canChange) {
|
|
11074
10920
|
return null;
|
|
11075
10921
|
}
|
|
11076
|
-
return /* @__PURE__ */ (0,
|
|
11077
|
-
/* @__PURE__ */ (0,
|
|
11078
|
-
/* @__PURE__ */ (0,
|
|
11079
|
-
/* @__PURE__ */ (0,
|
|
10922
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("form", { onSubmit: handleSubmit, className: "w-full flex flex-col gap-3", children: [
|
|
10923
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex flex-col gap-1", children: [
|
|
10924
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "New nickname" }),
|
|
10925
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
11080
10926
|
Input,
|
|
11081
10927
|
{
|
|
11082
10928
|
value: inputValue,
|
|
@@ -11086,16 +10932,84 @@ function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
|
11086
10932
|
error: displayError || void 0
|
|
11087
10933
|
}
|
|
11088
10934
|
),
|
|
11089
|
-
/* @__PURE__ */ (0,
|
|
11090
|
-
shouldCheckAvailability && !clientError && /* @__PURE__ */ (0,
|
|
10935
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "3-20 characters, letters, numbers, and underscores only" }) }),
|
|
10936
|
+
shouldCheckAvailability && !clientError && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(NicknameAvailabilityIndicator, { isChecking, availability })
|
|
10937
|
+
] }),
|
|
10938
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Button, { type: "submit", size: "large", disabled: isSubmitDisabled, className: "w-full", children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
|
|
10939
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react34.Loader, { className: "w-4 h-4 mr-2 animate-spin" }),
|
|
10940
|
+
"Changing..."
|
|
10941
|
+
] }) : isSuccess ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
|
|
10942
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react34.Check, { className: "w-4 h-4 mr-2" }),
|
|
10943
|
+
"Nickname changed!"
|
|
10944
|
+
] }) : "Change Nickname" })
|
|
10945
|
+
] });
|
|
10946
|
+
}
|
|
10947
|
+
|
|
10948
|
+
// src/internal/components/NicknameSettings/NicknameInfoDisplay.tsx
|
|
10949
|
+
var import_react42 = require("react");
|
|
10950
|
+
|
|
10951
|
+
// src/internal/lib/nickname-cooldown.ts
|
|
10952
|
+
function getDaysRemaining(cooldownEndsAt) {
|
|
10953
|
+
if (!cooldownEndsAt) return 0;
|
|
10954
|
+
const endDate = new Date(cooldownEndsAt);
|
|
10955
|
+
const now = /* @__PURE__ */ new Date();
|
|
10956
|
+
if (isNaN(endDate.getTime())) return 0;
|
|
10957
|
+
if (endDate <= now) return 0;
|
|
10958
|
+
const diffMs = endDate.getTime() - now.getTime();
|
|
10959
|
+
const diffDays = Math.ceil(diffMs / (1e3 * 60 * 60 * 24));
|
|
10960
|
+
return Math.max(0, diffDays);
|
|
10961
|
+
}
|
|
10962
|
+
function formatCooldownEndDate(cooldownEndsAt) {
|
|
10963
|
+
if (!cooldownEndsAt) return "";
|
|
10964
|
+
const endDate = new Date(cooldownEndsAt);
|
|
10965
|
+
if (isNaN(endDate.getTime())) return "";
|
|
10966
|
+
return endDate.toLocaleDateString(void 0, {
|
|
10967
|
+
year: "numeric",
|
|
10968
|
+
month: "short",
|
|
10969
|
+
day: "numeric"
|
|
10970
|
+
});
|
|
10971
|
+
}
|
|
10972
|
+
|
|
10973
|
+
// src/internal/components/NicknameSettings/NicknameInfoDisplay.tsx
|
|
10974
|
+
var import_jsx_runtime55 = require("react/jsx-runtime");
|
|
10975
|
+
function NicknameInfoDisplay({ info }) {
|
|
10976
|
+
const daysRemaining = getDaysRemaining(info.cooldownEndsAt);
|
|
10977
|
+
const cooldownEndDate = formatCooldownEndDate(info.cooldownEndsAt);
|
|
10978
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_react42.Fragment, { children: [
|
|
10979
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex flex-col gap-1", children: [
|
|
10980
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "Your nickname" }),
|
|
10981
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-lg font-bold text-[var(--l-pass-fg)]", children: info.displayHandle })
|
|
10982
|
+
] }),
|
|
10983
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex items-center gap-4 text-xs text-[var(--l-pass-fg-muted)]", children: [
|
|
10984
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
|
|
10985
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { children: "Created" }),
|
|
10986
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-[var(--l-pass-fg)]", children: new Date(info.createdAt).toLocaleDateString(void 0, {
|
|
10987
|
+
year: "numeric",
|
|
10988
|
+
month: "short",
|
|
10989
|
+
day: "numeric"
|
|
10990
|
+
}) })
|
|
10991
|
+
] }),
|
|
10992
|
+
info.changedAt && /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
|
|
10993
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { children: "Last changed" }),
|
|
10994
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-[var(--l-pass-fg)]", children: new Date(info.changedAt).toLocaleDateString(void 0, {
|
|
10995
|
+
year: "numeric",
|
|
10996
|
+
month: "short",
|
|
10997
|
+
day: "numeric"
|
|
10998
|
+
}) })
|
|
10999
|
+
] }),
|
|
11000
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
|
|
11001
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { children: "Times changed" }),
|
|
11002
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-[var(--l-pass-fg)]", children: info.changeCount })
|
|
11003
|
+
] })
|
|
11091
11004
|
] }),
|
|
11092
|
-
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
11093
|
-
|
|
11094
|
-
|
|
11095
|
-
|
|
11096
|
-
|
|
11097
|
-
"
|
|
11098
|
-
] })
|
|
11005
|
+
!info.canChange && info.cooldownEndsAt && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-warning)]", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("span", { className: "text-sm text-[var(--l-pass-warning)]", children: [
|
|
11006
|
+
"You can change your nickname again on ",
|
|
11007
|
+
cooldownEndDate,
|
|
11008
|
+
" (",
|
|
11009
|
+
daysRemaining,
|
|
11010
|
+
" days remaining)"
|
|
11011
|
+
] }) }),
|
|
11012
|
+
info.canChange && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-success)]", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-sm text-[var(--l-pass-success)]", children: "You can change your nickname" }) })
|
|
11099
11013
|
] });
|
|
11100
11014
|
}
|
|
11101
11015
|
|
|
@@ -11103,52 +11017,42 @@ function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
|
11103
11017
|
var import_jsx_runtime56 = require("react/jsx-runtime");
|
|
11104
11018
|
function NicknameSettings() {
|
|
11105
11019
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
11020
|
+
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
11106
11021
|
const { data: nicknameInfo, isLoading, isError, error, refetch } = useNicknameInfo();
|
|
11107
|
-
return /* @__PURE__ */ (0, import_jsx_runtime56.
|
|
11108
|
-
|
|
11109
|
-
|
|
11110
|
-
|
|
11111
|
-
|
|
11112
|
-
|
|
11113
|
-
{
|
|
11114
|
-
|
|
11115
|
-
|
|
11116
|
-
|
|
11117
|
-
|
|
11118
|
-
|
|
11119
|
-
|
|
11120
|
-
|
|
11121
|
-
|
|
11122
|
-
|
|
11123
|
-
|
|
11124
|
-
|
|
11125
|
-
|
|
11126
|
-
|
|
11127
|
-
|
|
11128
|
-
|
|
11129
|
-
|
|
11130
|
-
|
|
11131
|
-
isError && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "w-full p-4 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-error)]", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-sm text-[var(--l-pass-error)]", children: error?.message || "Failed to load nickname info" }) }),
|
|
11132
|
-
nicknameInfo && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(NicknameInfoDisplay, { info: nicknameInfo }),
|
|
11133
|
-
nicknameInfo && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
11134
|
-
NicknameEditForm,
|
|
11135
|
-
{
|
|
11136
|
-
currentHandle: nicknameInfo.handle,
|
|
11137
|
-
canChange: nicknameInfo.canChange,
|
|
11138
|
-
onSuccess: refetch
|
|
11139
|
-
}
|
|
11140
|
-
)
|
|
11141
|
-
] });
|
|
11022
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
11023
|
+
"div",
|
|
11024
|
+
{
|
|
11025
|
+
style: { "--l-pass-scrollbar-mah": `${maxScrollHeight}px` },
|
|
11026
|
+
className: "list-scrollbar-y w-full",
|
|
11027
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: [
|
|
11028
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
11029
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("settings" /* SETTINGS */), children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react35.ArrowLeft, { className: "h-4 w-4" }) }),
|
|
11030
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-xl font-semibold", children: "Nickname" })
|
|
11031
|
+
] }),
|
|
11032
|
+
isLoading && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "w-full p-8 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react35.Loader, { className: "w-5 h-5 animate-spin" }) }),
|
|
11033
|
+
nicknameInfo && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(NicknameInfoDisplay, { info: nicknameInfo }),
|
|
11034
|
+
nicknameInfo && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
11035
|
+
NicknameEditForm,
|
|
11036
|
+
{
|
|
11037
|
+
currentHandle: nicknameInfo.handle,
|
|
11038
|
+
canChange: nicknameInfo.canChange,
|
|
11039
|
+
onSuccess: refetch
|
|
11040
|
+
}
|
|
11041
|
+
),
|
|
11042
|
+
isError && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Highlight, { type: "error", children: error?.message || "Failed to load nickname info" })
|
|
11043
|
+
] })
|
|
11044
|
+
}
|
|
11045
|
+
);
|
|
11142
11046
|
}
|
|
11143
11047
|
|
|
11144
11048
|
// src/internal/components/PortfolioMenu/PortfolioMenu.tsx
|
|
11145
|
-
var
|
|
11049
|
+
var import_react_query32 = require("@tanstack/react-query");
|
|
11146
11050
|
var import_lucide_react37 = require("lucide-react");
|
|
11147
|
-
var
|
|
11051
|
+
var import_react45 = require("react");
|
|
11148
11052
|
|
|
11149
11053
|
// src/internal/hooks/useBlockscoutAssets.ts
|
|
11150
|
-
var
|
|
11151
|
-
var
|
|
11054
|
+
var import_react43 = require("react");
|
|
11055
|
+
var import_react_query30 = require("@tanstack/react-query");
|
|
11152
11056
|
var import_wagmi2 = require("wagmi");
|
|
11153
11057
|
var import_viem5 = require("viem");
|
|
11154
11058
|
var import_clients2 = require("@lumiapassport/core/clients");
|
|
@@ -11290,12 +11194,12 @@ function createError(error) {
|
|
|
11290
11194
|
function useBlockscoutAssets(options) {
|
|
11291
11195
|
const { address, enabled = true, detectSecurityTokens = true } = options;
|
|
11292
11196
|
const blockscoutApiUrl = getBlockscoutApiUrl();
|
|
11293
|
-
const blockscoutClient = (0,
|
|
11197
|
+
const blockscoutClient = (0, import_react43.useMemo)(
|
|
11294
11198
|
() => (0, import_clients2.createBlockscoutClient)({ baseUrl: blockscoutApiUrl }),
|
|
11295
11199
|
[blockscoutApiUrl]
|
|
11296
11200
|
);
|
|
11297
11201
|
const publicClient2 = (0, import_wagmi2.usePublicClient)({ chainId: lumiaBeam.id });
|
|
11298
|
-
const lastRefreshRef = (0,
|
|
11202
|
+
const lastRefreshRef = (0, import_react43.useRef)(0);
|
|
11299
11203
|
const {
|
|
11300
11204
|
data: nativeBalanceData,
|
|
11301
11205
|
isLoading: nativeLoading,
|
|
@@ -11313,7 +11217,7 @@ function useBlockscoutAssets(options) {
|
|
|
11313
11217
|
error: tokensError,
|
|
11314
11218
|
refetch: refetchTokens,
|
|
11315
11219
|
dataUpdatedAt
|
|
11316
|
-
} = (0,
|
|
11220
|
+
} = (0, import_react_query30.useQuery)({
|
|
11317
11221
|
queryKey: [BLOCKSCOUT_QUERY_KEY, address, blockscoutApiUrl],
|
|
11318
11222
|
queryFn: () => blockscoutClient.getTokenBalances(address),
|
|
11319
11223
|
enabled: !!address && enabled,
|
|
@@ -11326,7 +11230,7 @@ function useBlockscoutAssets(options) {
|
|
|
11326
11230
|
data: nftItems,
|
|
11327
11231
|
isLoading: nftsLoading,
|
|
11328
11232
|
refetch: refetchNfts
|
|
11329
|
-
} = (0,
|
|
11233
|
+
} = (0, import_react_query30.useQuery)({
|
|
11330
11234
|
queryKey: [BLOCKSCOUT_QUERY_KEY, "nfts", address, blockscoutApiUrl],
|
|
11331
11235
|
queryFn: () => blockscoutClient.getNfts(address),
|
|
11332
11236
|
enabled: !!address && enabled,
|
|
@@ -11335,11 +11239,11 @@ function useBlockscoutAssets(options) {
|
|
|
11335
11239
|
retry: 2,
|
|
11336
11240
|
retryDelay: 1e3
|
|
11337
11241
|
});
|
|
11338
|
-
const erc20TokenAddresses = (0,
|
|
11242
|
+
const erc20TokenAddresses = (0, import_react43.useMemo)(() => {
|
|
11339
11243
|
if (!tokenBalances) return [];
|
|
11340
11244
|
return tokenBalances.filter((tb) => tb.token.type === "ERC-20").map((tb) => tb.token.address);
|
|
11341
11245
|
}, [tokenBalances]);
|
|
11342
|
-
const { data: erc3643Results } = (0,
|
|
11246
|
+
const { data: erc3643Results } = (0, import_react_query30.useQuery)({
|
|
11343
11247
|
queryKey: [ERC3643_DETECTION_QUERY_KEY, address, erc20TokenAddresses],
|
|
11344
11248
|
queryFn: async () => {
|
|
11345
11249
|
if (!publicClient2 || erc20TokenAddresses.length === 0) {
|
|
@@ -11379,7 +11283,7 @@ function useBlockscoutAssets(options) {
|
|
|
11379
11283
|
gcTime: BLOCKSCOUT_QUERY_GC_TIME,
|
|
11380
11284
|
retry: 1
|
|
11381
11285
|
});
|
|
11382
|
-
const assets = (0,
|
|
11286
|
+
const assets = (0, import_react43.useMemo)(() => {
|
|
11383
11287
|
const result = [];
|
|
11384
11288
|
if (nativeBalanceData) {
|
|
11385
11289
|
result.push({
|
|
@@ -11415,7 +11319,7 @@ function useBlockscoutAssets(options) {
|
|
|
11415
11319
|
}
|
|
11416
11320
|
return result;
|
|
11417
11321
|
}, [nativeBalanceData, tokenBalances, nftItems, erc3643Results]);
|
|
11418
|
-
const nativeBalance = (0,
|
|
11322
|
+
const nativeBalance = (0, import_react43.useMemo)(() => {
|
|
11419
11323
|
if (!nativeBalanceData) return null;
|
|
11420
11324
|
return {
|
|
11421
11325
|
value: nativeBalanceData.value,
|
|
@@ -11423,11 +11327,11 @@ function useBlockscoutAssets(options) {
|
|
|
11423
11327
|
symbol: "LUMIA"
|
|
11424
11328
|
};
|
|
11425
11329
|
}, [nativeBalanceData]);
|
|
11426
|
-
const error = (0,
|
|
11330
|
+
const error = (0, import_react43.useMemo)(() => {
|
|
11427
11331
|
if (!tokensError) return null;
|
|
11428
11332
|
return createError(tokensError);
|
|
11429
11333
|
}, [tokensError]);
|
|
11430
|
-
const refreshBalances = (0,
|
|
11334
|
+
const refreshBalances = (0, import_react43.useCallback)(async () => {
|
|
11431
11335
|
const now = Date.now();
|
|
11432
11336
|
if (now - lastRefreshRef.current < BLOCKSCOUT_REFRESH_DEBOUNCE) {
|
|
11433
11337
|
return;
|
|
@@ -11435,7 +11339,7 @@ function useBlockscoutAssets(options) {
|
|
|
11435
11339
|
lastRefreshRef.current = now;
|
|
11436
11340
|
await Promise.all([refetchNative(), refetchTokens(), refetchNfts()]);
|
|
11437
11341
|
}, [refetchNative, refetchTokens, refetchNfts]);
|
|
11438
|
-
const getTokenBalance = (0,
|
|
11342
|
+
const getTokenBalance = (0, import_react43.useCallback)(
|
|
11439
11343
|
(tokenAddress) => {
|
|
11440
11344
|
return assets.find((a) => a.address?.toLowerCase() === tokenAddress.toLowerCase()) || null;
|
|
11441
11345
|
},
|
|
@@ -11455,9 +11359,9 @@ function useBlockscoutAssets(options) {
|
|
|
11455
11359
|
}
|
|
11456
11360
|
|
|
11457
11361
|
// src/internal/components/PortfolioMenu/PortfolioItem.tsx
|
|
11458
|
-
var
|
|
11362
|
+
var import_react_query31 = require("@tanstack/react-query");
|
|
11459
11363
|
var import_lucide_react36 = require("lucide-react");
|
|
11460
|
-
var
|
|
11364
|
+
var import_react44 = require("react");
|
|
11461
11365
|
var import_viem6 = require("viem");
|
|
11462
11366
|
init_base();
|
|
11463
11367
|
var import_jsx_runtime57 = require("react/jsx-runtime");
|
|
@@ -11495,16 +11399,16 @@ async function getAssetRate2(symbol) {
|
|
|
11495
11399
|
var ASSETS_RATES_QUERY_KEY = "lumia-passport-assets-rates-query-key";
|
|
11496
11400
|
function PortfolioItem(props) {
|
|
11497
11401
|
const { address, asset, isProjectAsset } = props;
|
|
11498
|
-
const [nftImageError, setNftImageError] = (0,
|
|
11499
|
-
const [logoError, setLogoError] = (0,
|
|
11402
|
+
const [nftImageError, setNftImageError] = (0, import_react44.useState)(false);
|
|
11403
|
+
const [logoError, setLogoError] = (0, import_react44.useState)(false);
|
|
11500
11404
|
const { assets: projectAssets, showBalanceAs: showBalanceAsSymbol } = useLumiaPassportConfig().config.current.projectAssets || {};
|
|
11501
|
-
const qc = (0,
|
|
11405
|
+
const qc = (0, import_react_query31.useQueryClient)();
|
|
11502
11406
|
const { balanceQueryKey } = projectAssets?.find((a) => a.symbol === showBalanceAsSymbol) || {};
|
|
11503
11407
|
const projectAssetBalance = !!balanceQueryKey ? qc.getQueryData(balanceQueryKey) : null;
|
|
11504
11408
|
const isNft = isNftAsset(asset);
|
|
11505
11409
|
const nftImage = getNftImage(asset);
|
|
11506
11410
|
const isSecurity = isSecurityToken(asset);
|
|
11507
|
-
const { data: assetRate, isLoading: isRateLoading } = (0,
|
|
11411
|
+
const { data: assetRate, isLoading: isRateLoading } = (0, import_react_query31.useQuery)({
|
|
11508
11412
|
retry: false,
|
|
11509
11413
|
staleTime: 4 * 60 * 1e3,
|
|
11510
11414
|
enabled: !!address && !!isAssetRateAvailable(asset.symbol) && !isProjectAsset && !isNft && !isSecurity,
|
|
@@ -11609,7 +11513,7 @@ function PortfolioItem(props) {
|
|
|
11609
11513
|
var import_jsx_runtime58 = require("react/jsx-runtime");
|
|
11610
11514
|
function PortfolioMenu() {
|
|
11611
11515
|
const { assets: projectAssets = [] } = useLumiaPassportConfig().config.current?.projectAssets || {};
|
|
11612
|
-
const qc = (0,
|
|
11516
|
+
const qc = (0, import_react_query32.useQueryClient)();
|
|
11613
11517
|
const address = useLumiaPassportSession((st) => st.address);
|
|
11614
11518
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
11615
11519
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
@@ -11622,7 +11526,7 @@ function PortfolioMenu() {
|
|
|
11622
11526
|
} = useBlockscoutAssets({
|
|
11623
11527
|
address
|
|
11624
11528
|
});
|
|
11625
|
-
const refreshAllAssetsBalances = (0,
|
|
11529
|
+
const refreshAllAssetsBalances = (0, import_react45.useCallback)(() => {
|
|
11626
11530
|
Promise.all(projectAssets.map((asset) => qc.invalidateQueries({ queryKey: asset.balanceQueryKey })));
|
|
11627
11531
|
refreshBlockscoutBalances();
|
|
11628
11532
|
}, [qc, projectAssets, refreshBlockscoutBalances]);
|
|
@@ -11674,10 +11578,10 @@ function PortfolioMenu() {
|
|
|
11674
11578
|
}
|
|
11675
11579
|
|
|
11676
11580
|
// src/internal/components/SecurityMenu/SecurityMenu.tsx
|
|
11677
|
-
var
|
|
11581
|
+
var import_react_query33 = require("@tanstack/react-query");
|
|
11678
11582
|
var import_dayjs3 = __toESM(require("dayjs"), 1);
|
|
11679
11583
|
var import_lucide_react41 = require("lucide-react");
|
|
11680
|
-
var
|
|
11584
|
+
var import_react46 = require("react");
|
|
11681
11585
|
init_auth();
|
|
11682
11586
|
init_keyshare();
|
|
11683
11587
|
init_iframe_manager();
|
|
@@ -11864,14 +11768,14 @@ function Keyshare(props) {
|
|
|
11864
11768
|
// src/internal/components/SecurityMenu/SecurityMenu.tsx
|
|
11865
11769
|
var import_jsx_runtime63 = require("react/jsx-runtime");
|
|
11866
11770
|
function SecurityMenu() {
|
|
11867
|
-
const qc = (0,
|
|
11771
|
+
const qc = (0, import_react_query33.useQueryClient)();
|
|
11868
11772
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
11869
11773
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
11870
11774
|
const userId = import_auth3.jwtTokenManager.getUserId();
|
|
11871
11775
|
const serverHasKeyshare = import_auth3.jwtTokenManager.getHasKeyshare() ?? false;
|
|
11872
|
-
const [isRemoving, setIsRemoving] = (0,
|
|
11873
|
-
const [appToRemove, setAppToRemove] = (0,
|
|
11874
|
-
const { data: recoveryData, isFetching: isRecoveryLoading } = (0,
|
|
11776
|
+
const [isRemoving, setIsRemoving] = (0, import_react46.useState)(false);
|
|
11777
|
+
const [appToRemove, setAppToRemove] = (0, import_react46.useState)(null);
|
|
11778
|
+
const { data: recoveryData, isFetching: isRecoveryLoading } = (0, import_react_query33.useQuery)({
|
|
11875
11779
|
enabled: !!userId,
|
|
11876
11780
|
queryKey: [KEYSHARE_RECOVERY_STATS_QUERY, userId],
|
|
11877
11781
|
queryFn: async () => {
|
|
@@ -12036,21 +11940,74 @@ function SecurityMenu() {
|
|
|
12036
11940
|
|
|
12037
11941
|
// src/internal/components/SendRecieveMenu/SendLumiaMenu.tsx
|
|
12038
11942
|
var import_lucide_react42 = require("lucide-react");
|
|
12039
|
-
var
|
|
11943
|
+
var import_react50 = require("react");
|
|
12040
11944
|
var import_viem9 = require("viem");
|
|
12041
11945
|
var import_wagmi4 = require("wagmi");
|
|
12042
11946
|
|
|
11947
|
+
// src/hooks/useNicknameResolve.ts
|
|
11948
|
+
var import_react_query34 = require("@tanstack/react-query");
|
|
11949
|
+
var import_react47 = require("react");
|
|
11950
|
+
init_nickname();
|
|
11951
|
+
init_profile();
|
|
11952
|
+
var DEBOUNCE_MS2 = 300;
|
|
11953
|
+
function looksLikeNickname(input) {
|
|
11954
|
+
if (!input) return false;
|
|
11955
|
+
if (input.startsWith("0x")) return false;
|
|
11956
|
+
if (input.startsWith("@")) return true;
|
|
11957
|
+
const normalized = input.toLowerCase().trim();
|
|
11958
|
+
return /^[a-z0-9_]+$/.test(normalized);
|
|
11959
|
+
}
|
|
11960
|
+
function useNicknameResolve(input, enabled = true) {
|
|
11961
|
+
const [debouncedInput, setDebouncedInput] = (0, import_react47.useState)("");
|
|
11962
|
+
const [isDebouncing, setIsDebouncing] = (0, import_react47.useState)(false);
|
|
11963
|
+
const normalized = normalizeNickname(input);
|
|
11964
|
+
const isNicknameInput = looksLikeNickname(input) && normalized.length >= 3;
|
|
11965
|
+
(0, import_react47.useEffect)(() => {
|
|
11966
|
+
if (!isNicknameInput || !enabled) {
|
|
11967
|
+
setDebouncedInput("");
|
|
11968
|
+
setIsDebouncing(false);
|
|
11969
|
+
return;
|
|
11970
|
+
}
|
|
11971
|
+
setIsDebouncing(true);
|
|
11972
|
+
const timer = setTimeout(() => {
|
|
11973
|
+
setDebouncedInput(normalized);
|
|
11974
|
+
setIsDebouncing(false);
|
|
11975
|
+
}, DEBOUNCE_MS2);
|
|
11976
|
+
return () => {
|
|
11977
|
+
clearTimeout(timer);
|
|
11978
|
+
};
|
|
11979
|
+
}, [normalized, isNicknameInput, enabled]);
|
|
11980
|
+
const query = (0, import_react_query34.useQuery)({
|
|
11981
|
+
queryKey: QUERY_KEYS.nicknameResolve(debouncedInput),
|
|
11982
|
+
queryFn: () => resolveNickname(debouncedInput),
|
|
11983
|
+
enabled: enabled && isNicknameInput && debouncedInput.length > 0,
|
|
11984
|
+
staleTime: 1e3 * 60 * 5,
|
|
11985
|
+
// 5 minutes - addresses don't change often
|
|
11986
|
+
retry: 1
|
|
11987
|
+
});
|
|
11988
|
+
const isNotFound = query.isError && query.error?.code === "NICKNAME_NOT_FOUND";
|
|
11989
|
+
return {
|
|
11990
|
+
data: query.data,
|
|
11991
|
+
isLoading: query.isLoading,
|
|
11992
|
+
isResolving: isDebouncing || query.isFetching,
|
|
11993
|
+
isError: query.isError,
|
|
11994
|
+
isNotFound,
|
|
11995
|
+
error: query.error,
|
|
11996
|
+
resolvedAddress: query.data?.walletAddress || null
|
|
11997
|
+
};
|
|
11998
|
+
}
|
|
11999
|
+
|
|
12043
12000
|
// src/hooks/useSendTransaction.ts
|
|
12044
|
-
var
|
|
12001
|
+
var import_react48 = require("react");
|
|
12045
12002
|
var import_viem7 = require("viem");
|
|
12046
12003
|
init_account();
|
|
12047
12004
|
function useSendTransaction() {
|
|
12048
12005
|
const session = useLumiaPassportSession((st) => st.session);
|
|
12049
12006
|
const address = useLumiaPassportSession((st) => st.address);
|
|
12050
|
-
const [isLoading, setIsLoading] = (0,
|
|
12051
|
-
const [error, setError] = (0,
|
|
12052
|
-
const [userOpHash, setUserOpHash] = (0,
|
|
12053
|
-
const sendTransaction = (0,
|
|
12007
|
+
const [isLoading, setIsLoading] = (0, import_react48.useState)(false);
|
|
12008
|
+
const [error, setError] = (0, import_react48.useState)(null);
|
|
12009
|
+
const [userOpHash, setUserOpHash] = (0, import_react48.useState)(null);
|
|
12010
|
+
const sendTransaction = (0, import_react48.useCallback)(
|
|
12054
12011
|
async (params) => {
|
|
12055
12012
|
if (!session || !address) {
|
|
12056
12013
|
setError("No active session");
|
|
@@ -12090,7 +12047,7 @@ function useSendTransaction() {
|
|
|
12090
12047
|
},
|
|
12091
12048
|
[session, address]
|
|
12092
12049
|
);
|
|
12093
|
-
const reset = (0,
|
|
12050
|
+
const reset = (0, import_react48.useCallback)(() => {
|
|
12094
12051
|
setError(null);
|
|
12095
12052
|
setUserOpHash(null);
|
|
12096
12053
|
setIsLoading(false);
|
|
@@ -12104,61 +12061,8 @@ function useSendTransaction() {
|
|
|
12104
12061
|
};
|
|
12105
12062
|
}
|
|
12106
12063
|
|
|
12107
|
-
// src/hooks/useNicknameResolve.ts
|
|
12108
|
-
var import_react_query36 = require("@tanstack/react-query");
|
|
12109
|
-
var import_react50 = require("react");
|
|
12110
|
-
init_nickname();
|
|
12111
|
-
init_profile();
|
|
12112
|
-
var DEBOUNCE_MS2 = 300;
|
|
12113
|
-
function looksLikeNickname(input) {
|
|
12114
|
-
if (!input) return false;
|
|
12115
|
-
if (input.startsWith("0x")) return false;
|
|
12116
|
-
if (input.startsWith("@")) return true;
|
|
12117
|
-
const normalized = input.toLowerCase().trim();
|
|
12118
|
-
return /^[a-z0-9_]+$/.test(normalized);
|
|
12119
|
-
}
|
|
12120
|
-
function useNicknameResolve(input, enabled = true) {
|
|
12121
|
-
const [debouncedInput, setDebouncedInput] = (0, import_react50.useState)("");
|
|
12122
|
-
const [isDebouncing, setIsDebouncing] = (0, import_react50.useState)(false);
|
|
12123
|
-
const normalized = normalizeNickname(input);
|
|
12124
|
-
const isNicknameInput = looksLikeNickname(input) && normalized.length >= 3;
|
|
12125
|
-
(0, import_react50.useEffect)(() => {
|
|
12126
|
-
if (!isNicknameInput || !enabled) {
|
|
12127
|
-
setDebouncedInput("");
|
|
12128
|
-
setIsDebouncing(false);
|
|
12129
|
-
return;
|
|
12130
|
-
}
|
|
12131
|
-
setIsDebouncing(true);
|
|
12132
|
-
const timer = setTimeout(() => {
|
|
12133
|
-
setDebouncedInput(normalized);
|
|
12134
|
-
setIsDebouncing(false);
|
|
12135
|
-
}, DEBOUNCE_MS2);
|
|
12136
|
-
return () => {
|
|
12137
|
-
clearTimeout(timer);
|
|
12138
|
-
};
|
|
12139
|
-
}, [normalized, isNicknameInput, enabled]);
|
|
12140
|
-
const query = (0, import_react_query36.useQuery)({
|
|
12141
|
-
queryKey: QUERY_KEYS.nicknameResolve(debouncedInput),
|
|
12142
|
-
queryFn: () => resolveNickname(debouncedInput),
|
|
12143
|
-
enabled: enabled && isNicknameInput && debouncedInput.length > 0,
|
|
12144
|
-
staleTime: 1e3 * 60 * 5,
|
|
12145
|
-
// 5 minutes - addresses don't change often
|
|
12146
|
-
retry: 1
|
|
12147
|
-
});
|
|
12148
|
-
const isNotFound = query.isError && query.error?.code === "NICKNAME_NOT_FOUND";
|
|
12149
|
-
return {
|
|
12150
|
-
data: query.data,
|
|
12151
|
-
isLoading: query.isLoading,
|
|
12152
|
-
isResolving: isDebouncing || query.isFetching,
|
|
12153
|
-
isError: query.isError,
|
|
12154
|
-
isNotFound,
|
|
12155
|
-
error: query.error,
|
|
12156
|
-
resolvedAddress: query.data?.walletAddress || null
|
|
12157
|
-
};
|
|
12158
|
-
}
|
|
12159
|
-
|
|
12160
12064
|
// src/modules/assets.ts
|
|
12161
|
-
var
|
|
12065
|
+
var import_react49 = __toESM(require("react"), 1);
|
|
12162
12066
|
var import_wagmi3 = require("wagmi");
|
|
12163
12067
|
var import_viem8 = require("viem");
|
|
12164
12068
|
init_base();
|
|
@@ -12305,7 +12209,7 @@ function useTokenBalance(tokenAddress, userAddress) {
|
|
|
12305
12209
|
}
|
|
12306
12210
|
});
|
|
12307
12211
|
const { tokenInfo } = useTokenInfo(tokenAddress);
|
|
12308
|
-
const formattedBalance =
|
|
12212
|
+
const formattedBalance = import_react49.default.useMemo(() => {
|
|
12309
12213
|
if (!balance || !tokenInfo) return "0";
|
|
12310
12214
|
return (0, import_viem8.formatUnits)(balance, tokenInfo.decimals);
|
|
12311
12215
|
}, [balance, tokenInfo]);
|
|
@@ -12332,16 +12236,21 @@ function SendLumiaMenu() {
|
|
|
12332
12236
|
address,
|
|
12333
12237
|
chainId: lumiaBeam.id
|
|
12334
12238
|
});
|
|
12335
|
-
const [recipient, setRecipient] = (0,
|
|
12336
|
-
const [amount, setAmount] = (0,
|
|
12337
|
-
const [txStep, setTxStep] = (0,
|
|
12338
|
-
const [validationError, setValidationError] = (0,
|
|
12239
|
+
const [recipient, setRecipient] = (0, import_react50.useState)("");
|
|
12240
|
+
const [amount, setAmount] = (0, import_react50.useState)("");
|
|
12241
|
+
const [txStep, setTxStep] = (0, import_react50.useState)("input");
|
|
12242
|
+
const [validationError, setValidationError] = (0, import_react50.useState)(null);
|
|
12339
12243
|
const isNicknameInput = looksLikeNickname(recipient);
|
|
12340
|
-
const {
|
|
12244
|
+
const {
|
|
12245
|
+
resolvedAddress,
|
|
12246
|
+
isResolving,
|
|
12247
|
+
isNotFound,
|
|
12248
|
+
data: nicknameData
|
|
12249
|
+
} = useNicknameResolve(recipient, isNicknameInput);
|
|
12341
12250
|
const effectiveAddress = isNicknameInput ? resolvedAddress : recipient;
|
|
12342
12251
|
const nativeAsset = assets.find((a) => a.type === "native");
|
|
12343
12252
|
const balance = nativeAsset ? parseFloat(nativeAsset.formattedBalance) : 0;
|
|
12344
|
-
(0,
|
|
12253
|
+
(0, import_react50.useEffect)(() => {
|
|
12345
12254
|
if (open) {
|
|
12346
12255
|
setTxStep("input");
|
|
12347
12256
|
setValidationError(null);
|
|
@@ -12447,30 +12356,18 @@ function SendLumiaMenu() {
|
|
|
12447
12356
|
" LUMIA"
|
|
12448
12357
|
] })
|
|
12449
12358
|
] }),
|
|
12450
|
-
/* @__PURE__ */ (0, import_jsx_runtime64.
|
|
12451
|
-
|
|
12452
|
-
|
|
12453
|
-
|
|
12454
|
-
|
|
12455
|
-
|
|
12456
|
-
|
|
12457
|
-
|
|
12458
|
-
|
|
12459
|
-
|
|
12460
|
-
|
|
12461
|
-
|
|
12462
|
-
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
|
|
12463
|
-
Button,
|
|
12464
|
-
{
|
|
12465
|
-
onClick: handleMaxAmount,
|
|
12466
|
-
variant: "ghost",
|
|
12467
|
-
size: "medium",
|
|
12468
|
-
style: { transform: "translateY(-50%)" },
|
|
12469
|
-
className: "absolute right-2 top-1/2",
|
|
12470
|
-
children: "MAX"
|
|
12471
|
-
}
|
|
12472
|
-
)
|
|
12473
|
-
] })
|
|
12359
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
|
|
12360
|
+
Input,
|
|
12361
|
+
{
|
|
12362
|
+
Icon: LumiaIcon,
|
|
12363
|
+
type: "number",
|
|
12364
|
+
value: amount,
|
|
12365
|
+
onChange: (e) => setAmount(e.target.value),
|
|
12366
|
+
placeholder: "0.0",
|
|
12367
|
+
step: "0.000001",
|
|
12368
|
+
element: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(Button, { onClick: handleMaxAmount, variant: "ghost", size: "medium", children: "MAX" })
|
|
12369
|
+
}
|
|
12370
|
+
)
|
|
12474
12371
|
] }),
|
|
12475
12372
|
(validationError || error) && /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("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: [
|
|
12476
12373
|
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_lucide_react42.AlertCircle, { className: "h-4 w-4" }),
|
|
@@ -12531,7 +12428,7 @@ function SendLumiaMenu() {
|
|
|
12531
12428
|
// src/internal/components/SendRecieveMenu/ReceiveLumiaMenu.tsx
|
|
12532
12429
|
var import_lucide_react43 = require("lucide-react");
|
|
12533
12430
|
var import_qrcode = __toESM(require("qrcode"), 1);
|
|
12534
|
-
var
|
|
12431
|
+
var import_react51 = require("react");
|
|
12535
12432
|
init_clients();
|
|
12536
12433
|
var import_jsx_runtime65 = require("react/jsx-runtime");
|
|
12537
12434
|
function ReceiveLumiaMenu() {
|
|
@@ -12540,9 +12437,9 @@ function ReceiveLumiaMenu() {
|
|
|
12540
12437
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
12541
12438
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
12542
12439
|
const open = page === "receive";
|
|
12543
|
-
const [qrCodeUrl, setQrCodeUrl] = (0,
|
|
12544
|
-
const [copied, setCopied] = (0,
|
|
12545
|
-
(0,
|
|
12440
|
+
const [qrCodeUrl, setQrCodeUrl] = (0, import_react51.useState)("");
|
|
12441
|
+
const [copied, setCopied] = (0, import_react51.useState)(false);
|
|
12442
|
+
(0, import_react51.useEffect)(() => {
|
|
12546
12443
|
if (open && address) {
|
|
12547
12444
|
import_qrcode.default.toDataURL(address, {
|
|
12548
12445
|
width: 200,
|
|
@@ -12555,7 +12452,7 @@ function ReceiveLumiaMenu() {
|
|
|
12555
12452
|
});
|
|
12556
12453
|
}
|
|
12557
12454
|
}, [open, address]);
|
|
12558
|
-
const handleCopy = (0,
|
|
12455
|
+
const handleCopy = (0, import_react51.useCallback)(async () => {
|
|
12559
12456
|
if (!address) return;
|
|
12560
12457
|
try {
|
|
12561
12458
|
await navigator.clipboard.writeText(address);
|
|
@@ -12601,7 +12498,7 @@ function ReceiveLumiaMenu() {
|
|
|
12601
12498
|
|
|
12602
12499
|
// src/internal/components/SettingsMenu/SettingsMenu.tsx
|
|
12603
12500
|
var import_lucide_react45 = require("lucide-react");
|
|
12604
|
-
var
|
|
12501
|
+
var import_react52 = require("react");
|
|
12605
12502
|
|
|
12606
12503
|
// src/internal/components/SettingsMenu/constants.ts
|
|
12607
12504
|
var import_lucide_react44 = require("lucide-react");
|
|
@@ -12636,35 +12533,46 @@ function SettingsMenu() {
|
|
|
12636
12533
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
12637
12534
|
const settingsNotifications = useLayoutDataStore((st) => st.settingsNotifications);
|
|
12638
12535
|
const setMainPageHeight = useLayoutDataStore((st) => st.setMainPageHeight);
|
|
12639
|
-
|
|
12536
|
+
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
12537
|
+
(0, import_react52.useEffect)(() => setMainPageHeight(DEFAULT_SETTINGS_MENU_HEIGHT), [setMainPageHeight]);
|
|
12640
12538
|
useProvidersList();
|
|
12641
12539
|
const navItems = NAV_BUTTONS.map((el) => ({ ...el, onClick: () => setPage(el.id) }));
|
|
12642
12540
|
const highlightedKeys = settingsNotifications.map((n) => n.target);
|
|
12643
|
-
return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
|
|
12644
|
-
|
|
12645
|
-
|
|
12646
|
-
|
|
12647
|
-
|
|
12648
|
-
|
|
12649
|
-
Button,
|
|
12650
|
-
{
|
|
12651
|
-
variant: "outline",
|
|
12652
|
-
size: "large",
|
|
12653
|
-
onClick,
|
|
12654
|
-
disabled: !address,
|
|
12655
|
-
className: cn(
|
|
12656
|
-
//
|
|
12657
|
-
"w-full items-center justify-start",
|
|
12658
|
-
highlightedKeys.includes(id) && "animate-glow-warning"
|
|
12659
|
-
),
|
|
12660
|
-
children: [
|
|
12661
|
-
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Icon2, { className: "w-4 h-4" }),
|
|
12662
|
-
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { children: name })
|
|
12663
|
-
]
|
|
12541
|
+
return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
|
|
12542
|
+
"div",
|
|
12543
|
+
{
|
|
12544
|
+
style: {
|
|
12545
|
+
"--l-pass-scrollbar-mah": `${maxScrollHeight}px`,
|
|
12546
|
+
"--l-pass-list-scrollbar-pd-r": "var(--l-pass-pd)"
|
|
12664
12547
|
},
|
|
12665
|
-
|
|
12666
|
-
|
|
12667
|
-
|
|
12548
|
+
className: "list-scrollbar-y w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]",
|
|
12549
|
+
children: [
|
|
12550
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
12551
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react45.ArrowLeft, { className: "h-4 w-4" }) }),
|
|
12552
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "text-xl font-semibold", children: "Settings" })
|
|
12553
|
+
] }),
|
|
12554
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: navItems.map(({ id, name, Icon: Icon2, onClick }) => /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
|
|
12555
|
+
Button,
|
|
12556
|
+
{
|
|
12557
|
+
variant: "outline",
|
|
12558
|
+
size: "large",
|
|
12559
|
+
onClick,
|
|
12560
|
+
disabled: !address,
|
|
12561
|
+
className: cn(
|
|
12562
|
+
//
|
|
12563
|
+
"w-full items-center justify-start",
|
|
12564
|
+
highlightedKeys.includes(id) && "animate-glow-warning"
|
|
12565
|
+
),
|
|
12566
|
+
children: [
|
|
12567
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Icon2, { className: "w-4 h-4" }),
|
|
12568
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { children: name })
|
|
12569
|
+
]
|
|
12570
|
+
},
|
|
12571
|
+
id
|
|
12572
|
+
)) })
|
|
12573
|
+
]
|
|
12574
|
+
}
|
|
12575
|
+
);
|
|
12668
12576
|
}
|
|
12669
12577
|
|
|
12670
12578
|
// src/internal/components/TermsOfService.tsx
|
|
@@ -12695,9 +12603,9 @@ function TermsOfService() {
|
|
|
12695
12603
|
}
|
|
12696
12604
|
|
|
12697
12605
|
// src/internal/components/TransactionsMenu/TransactionsMenu.tsx
|
|
12698
|
-
var
|
|
12606
|
+
var import_react_query35 = require("@tanstack/react-query");
|
|
12699
12607
|
var import_lucide_react48 = require("lucide-react");
|
|
12700
|
-
var
|
|
12608
|
+
var import_react53 = require("react");
|
|
12701
12609
|
|
|
12702
12610
|
// src/internal/components/TransactionsMenu/api.ts
|
|
12703
12611
|
init_base();
|
|
@@ -13162,24 +13070,24 @@ function TransactionsGroup(props) {
|
|
|
13162
13070
|
// src/internal/components/TransactionsMenu/TransactionsMenu.tsx
|
|
13163
13071
|
var import_jsx_runtime70 = require("react/jsx-runtime");
|
|
13164
13072
|
function TransactionsMenu() {
|
|
13165
|
-
const qc = (0,
|
|
13073
|
+
const qc = (0, import_react_query35.useQueryClient)();
|
|
13166
13074
|
const address = useLumiaPassportSession((st) => st.address);
|
|
13167
13075
|
const page = useLayoutDataStore((st) => st.page);
|
|
13168
13076
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
13169
13077
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
13170
|
-
const [expandedGroups, setExpandedGroups] = (0,
|
|
13078
|
+
const [expandedGroups, setExpandedGroups] = (0, import_react53.useState)({});
|
|
13171
13079
|
const {
|
|
13172
13080
|
data: txHistoryGroups = [],
|
|
13173
13081
|
isLoading: isTxHistoryLoading,
|
|
13174
13082
|
isFetching: isTxHistoryFetching,
|
|
13175
13083
|
error: txHistoryError
|
|
13176
|
-
} = (0,
|
|
13084
|
+
} = (0, import_react_query35.useQuery)({
|
|
13177
13085
|
retry: false,
|
|
13178
13086
|
enabled: !!address && page === "transactions",
|
|
13179
13087
|
queryKey: [TRANSACTIONS_HISTORY_QUERY_KEY, address],
|
|
13180
13088
|
queryFn: () => getTransactionsListQuery(address)
|
|
13181
13089
|
});
|
|
13182
|
-
const refreshTxHistory = (0,
|
|
13090
|
+
const refreshTxHistory = (0, import_react53.useCallback)(
|
|
13183
13091
|
() => qc.invalidateQueries({ queryKey: [TRANSACTIONS_HISTORY_QUERY_KEY, address] }),
|
|
13184
13092
|
[qc, address]
|
|
13185
13093
|
);
|
|
@@ -13189,7 +13097,7 @@ function TransactionsMenu() {
|
|
|
13189
13097
|
{
|
|
13190
13098
|
style: {
|
|
13191
13099
|
"--l-pass-scrollbar-mah": `${maxScrollHeight}px`,
|
|
13192
|
-
"--l-pass-list-scrollbar-pd-r": "
|
|
13100
|
+
"--l-pass-list-scrollbar-pd-r": "var(--l-pass-pd)"
|
|
13193
13101
|
},
|
|
13194
13102
|
className: "list-scrollbar-y w-full p-[var(--l-pass-pd)]",
|
|
13195
13103
|
children: /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: [
|
|
@@ -13333,8 +13241,6 @@ var import_jsx_runtime71 = require("react/jsx-runtime");
|
|
|
13333
13241
|
var CLEAR_DIALOG_TIMEOUT = MAIN_DIALOG_ANIMATION_SPEED + 5;
|
|
13334
13242
|
function usePageMapper() {
|
|
13335
13243
|
const page = useLayoutDataStore((st) => st.page);
|
|
13336
|
-
const session = useLumiaPassportSession((st) => st.session);
|
|
13337
|
-
const protectedRoutes = !!session ? PAGE_MAP : PAGE_MAP;
|
|
13338
13244
|
const {
|
|
13339
13245
|
setDialogTitle,
|
|
13340
13246
|
setDialogDescription,
|
|
@@ -13343,7 +13249,7 @@ function usePageMapper() {
|
|
|
13343
13249
|
setIsDialogOpen,
|
|
13344
13250
|
setIsDialogClosing
|
|
13345
13251
|
} = useLayoutStore();
|
|
13346
|
-
const closeDialog = (0,
|
|
13252
|
+
const closeDialog = (0, import_react54.useCallback)(() => {
|
|
13347
13253
|
setIsDialogClosing(true);
|
|
13348
13254
|
setTimeout(() => {
|
|
13349
13255
|
setDialogContent(null);
|
|
@@ -13354,7 +13260,7 @@ function usePageMapper() {
|
|
|
13354
13260
|
setIsDialogOpen(false);
|
|
13355
13261
|
}, CLEAR_DIALOG_TIMEOUT);
|
|
13356
13262
|
}, [setDialogContent, setDialogDescription, setDialogTitle, setIsDialogForced, setIsDialogOpen, setIsDialogClosing]);
|
|
13357
|
-
const openDialog = (0,
|
|
13263
|
+
const openDialog = (0, import_react54.useCallback)(
|
|
13358
13264
|
(pageItem) => {
|
|
13359
13265
|
const PageContentComponent = pageItem.component;
|
|
13360
13266
|
setDialogTitle(pageItem.title);
|
|
@@ -13364,20 +13270,20 @@ function usePageMapper() {
|
|
|
13364
13270
|
},
|
|
13365
13271
|
[setDialogContent, setDialogDescription, setDialogTitle, setIsDialogOpen]
|
|
13366
13272
|
);
|
|
13367
|
-
(0,
|
|
13273
|
+
(0, import_react54.useEffect)(() => {
|
|
13368
13274
|
if (page === null) return closeDialog();
|
|
13369
|
-
const pageItem =
|
|
13275
|
+
const pageItem = PAGE_MAP[page];
|
|
13370
13276
|
if (!pageItem) {
|
|
13371
13277
|
alert(`[PASSPORT MAPPER]: Requested page "${page}" is not existing or not allowed. Closing dialog...`);
|
|
13372
13278
|
closeDialog();
|
|
13373
13279
|
return;
|
|
13374
13280
|
}
|
|
13375
13281
|
openDialog(pageItem);
|
|
13376
|
-
}, [
|
|
13282
|
+
}, [page, closeDialog, openDialog]);
|
|
13377
13283
|
}
|
|
13378
13284
|
|
|
13379
13285
|
// src/internal/hooks/useSettingsNotifications.ts
|
|
13380
|
-
var
|
|
13286
|
+
var import_react55 = require("react");
|
|
13381
13287
|
init_auth();
|
|
13382
13288
|
var EMAIL_NOT_CONNECTED_NOTIFICATION = {
|
|
13383
13289
|
id: "email-not-connected",
|
|
@@ -13388,7 +13294,7 @@ function useSettingsNotifications() {
|
|
|
13388
13294
|
const setSettingsNotifications = useLayoutDataStore((st) => st.setSettingsNotifications);
|
|
13389
13295
|
const providers = import_auth3.jwtTokenManager.getProviders();
|
|
13390
13296
|
const hasEmail = providers.includes("email");
|
|
13391
|
-
(0,
|
|
13297
|
+
(0, import_react55.useEffect)(() => {
|
|
13392
13298
|
setSettingsNotifications({
|
|
13393
13299
|
...EMAIL_NOT_CONNECTED_NOTIFICATION,
|
|
13394
13300
|
status: hasEmail ? "resolved" : "active"
|
|
@@ -13397,7 +13303,7 @@ function useSettingsNotifications() {
|
|
|
13397
13303
|
}
|
|
13398
13304
|
|
|
13399
13305
|
// src/internal/hooks/useWalletStatus.ts
|
|
13400
|
-
var
|
|
13306
|
+
var import_react56 = require("react");
|
|
13401
13307
|
init_auth();
|
|
13402
13308
|
function useWalletStatus() {
|
|
13403
13309
|
const isIframeReady = useLumiaPassportSession((st) => st.isIframeReady);
|
|
@@ -13407,7 +13313,7 @@ function useWalletStatus() {
|
|
|
13407
13313
|
config: { current: config },
|
|
13408
13314
|
callbacks
|
|
13409
13315
|
} = useLumiaPassportConfig();
|
|
13410
|
-
(0,
|
|
13316
|
+
(0, import_react56.useEffect)(() => {
|
|
13411
13317
|
if (!isIframeReady || !config.projectId || !callbacks?.onWalletReady) return;
|
|
13412
13318
|
const userId = import_auth3.jwtTokenManager.getUserId();
|
|
13413
13319
|
const hasKeyshare = import_auth3.jwtTokenManager.getHasKeyshare();
|
|
@@ -13437,15 +13343,13 @@ function LumiaPassportDialog() {
|
|
|
13437
13343
|
const mainPageHeight = useLayoutDataStore((st) => st.mainPageHeight);
|
|
13438
13344
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
13439
13345
|
const { colorMode, isDialogOpen, dialogTitle, dialogDescription, dialogContent, isDialogForced, setIsSettings } = useLayoutStore();
|
|
13440
|
-
(0,
|
|
13346
|
+
(0, import_react57.useEffect)(() => setIsSettings(!!session), [session, setIsSettings]);
|
|
13441
13347
|
usePageMapper();
|
|
13442
13348
|
useAutoConnect();
|
|
13443
|
-
useCheckVaultStatus();
|
|
13444
13349
|
useBackupStatusChanges();
|
|
13445
13350
|
useDetectMaxScrollHeight();
|
|
13446
13351
|
useSettingsNotifications();
|
|
13447
13352
|
useListenIframeAuthEvents();
|
|
13448
|
-
useBackupWarning();
|
|
13449
13353
|
useWalletStatus();
|
|
13450
13354
|
const isHeaderHidden = !session || page === "keysare-backup" /* KEYSARE_BACKUP */ && !hasServerVault;
|
|
13451
13355
|
return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
|
|
@@ -13479,23 +13383,23 @@ function LumiaPassportDialog() {
|
|
|
13479
13383
|
}
|
|
13480
13384
|
|
|
13481
13385
|
// src/internal/components/TssManager.tsx
|
|
13482
|
-
var
|
|
13386
|
+
var import_react58 = __toESM(require("react"), 1);
|
|
13483
13387
|
init_auth();
|
|
13484
13388
|
init_clients();
|
|
13485
|
-
var TssManagerWithRef =
|
|
13389
|
+
var TssManagerWithRef = import_react58.default.forwardRef((props, ref) => {
|
|
13486
13390
|
const { mpcPin } = props;
|
|
13487
13391
|
const usePaymaster = useLumiaPassportSession((st) => st.usePaymaster);
|
|
13488
13392
|
const setStatus = useLumiaPassportSession((st) => st.setStatus);
|
|
13489
13393
|
const setSession = useLumiaPassportSession((st) => st.setSession);
|
|
13490
13394
|
const setAddress = useLumiaPassportSession((st) => st.setAddress);
|
|
13491
|
-
const onSessionCreated = (0,
|
|
13395
|
+
const onSessionCreated = (0, import_react58.useCallback)(
|
|
13492
13396
|
(session, address) => {
|
|
13493
13397
|
setSession(session);
|
|
13494
13398
|
setAddress(address);
|
|
13495
13399
|
},
|
|
13496
13400
|
[setSession, setAddress]
|
|
13497
13401
|
);
|
|
13498
|
-
const createSessionWithKeyshare =
|
|
13402
|
+
const createSessionWithKeyshare = import_react58.default.useCallback(
|
|
13499
13403
|
async (userId, hasServerKeyshare, isNewUser) => {
|
|
13500
13404
|
setStatus("checking key management setup...");
|
|
13501
13405
|
await ensureKeyshare(userId, hasServerKeyshare, setStatus, isNewUser);
|
|
@@ -13516,18 +13420,18 @@ var TssManagerWithRef = import_react60.default.forwardRef((props, ref) => {
|
|
|
13516
13420
|
},
|
|
13517
13421
|
[setStatus, usePaymaster, mpcPin]
|
|
13518
13422
|
);
|
|
13519
|
-
|
|
13423
|
+
import_react58.default.useImperativeHandle(ref, () => ({ createSessionWithKeyshare }), [createSessionWithKeyshare]);
|
|
13520
13424
|
return null;
|
|
13521
13425
|
});
|
|
13522
13426
|
|
|
13523
13427
|
// src/internal/components/WalletConnectHandler.tsx
|
|
13524
13428
|
var import_rainbowkit = require("@rainbow-me/rainbowkit");
|
|
13525
|
-
var
|
|
13526
|
-
var
|
|
13429
|
+
var import_react_query36 = require("@tanstack/react-query");
|
|
13430
|
+
var import_react59 = __toESM(require("react"), 1);
|
|
13527
13431
|
var import_wagmi5 = require("wagmi");
|
|
13528
13432
|
init_wallet();
|
|
13529
13433
|
function WalletConnectHandler() {
|
|
13530
|
-
const qc = (0,
|
|
13434
|
+
const qc = (0, import_react_query36.useQueryClient)();
|
|
13531
13435
|
const callbacks = useLumiaPassportConfig().callbacks;
|
|
13532
13436
|
const passportWalletAddress = useLumiaPassportSession((st) => st.address);
|
|
13533
13437
|
const { address: walletAddress, isConnected, chain, connector } = (0, import_wagmi5.useAccount)();
|
|
@@ -13541,7 +13445,7 @@ function WalletConnectHandler() {
|
|
|
13541
13445
|
const setManageWalletLinkError = useManageWalletStore((st) => st.setLinkError);
|
|
13542
13446
|
const setLinkIsLoading = useManageWalletStore((st) => st.setLinkIsLoading);
|
|
13543
13447
|
const setProviderType = useManageWalletStore((st) => st.setProviderType);
|
|
13544
|
-
const onLinkingComplete = (0,
|
|
13448
|
+
const onLinkingComplete = (0, import_react59.useCallback)(
|
|
13545
13449
|
async (success) => {
|
|
13546
13450
|
setIsWalletLinking(false);
|
|
13547
13451
|
if (!success && !passportWalletAddress) {
|
|
@@ -13568,8 +13472,8 @@ function WalletConnectHandler() {
|
|
|
13568
13472
|
},
|
|
13569
13473
|
[qc, passportWalletAddress, callbacks, setProviderType, setPage, setIsWalletLinking]
|
|
13570
13474
|
);
|
|
13571
|
-
const [hasStartedLinking, setHasStartedLinking] =
|
|
13572
|
-
(0,
|
|
13475
|
+
const [hasStartedLinking, setHasStartedLinking] = import_react59.default.useState(false);
|
|
13476
|
+
(0, import_react59.useEffect)(() => {
|
|
13573
13477
|
if (isWalletLinking && !hasStartedLinking) {
|
|
13574
13478
|
setHasStartedLinking(true);
|
|
13575
13479
|
setProviderType(null);
|
|
@@ -13589,14 +13493,14 @@ function WalletConnectHandler() {
|
|
|
13589
13493
|
if (isConnected) disconnect();
|
|
13590
13494
|
}
|
|
13591
13495
|
}, [isWalletLinking, hasStartedLinking, isConnected, openConnectModal, disconnect, setPage, setProviderType]);
|
|
13592
|
-
(0,
|
|
13496
|
+
(0, import_react59.useEffect)(() => {
|
|
13593
13497
|
if (hasStartedLinking && !connectModalOpen && !isConnected && isWalletLinking) {
|
|
13594
13498
|
console.log("[WalletConnectHandler] Modal closed without connecting");
|
|
13595
13499
|
onLinkingComplete(false);
|
|
13596
13500
|
setHasStartedLinking(false);
|
|
13597
13501
|
}
|
|
13598
13502
|
}, [connectModalOpen, hasStartedLinking, isConnected, isWalletLinking]);
|
|
13599
|
-
const { mutate: handleWalletSign, isPending: isWalletSigning } = (0,
|
|
13503
|
+
const { mutate: handleWalletSign, isPending: isWalletSigning } = (0, import_react_query36.useMutation)({
|
|
13600
13504
|
mutationFn: async (payload) => {
|
|
13601
13505
|
const { chainId, signingWalletAddress } = payload;
|
|
13602
13506
|
if (!signingWalletAddress || !chainId) {
|
|
@@ -13665,7 +13569,7 @@ function WalletConnectHandler() {
|
|
|
13665
13569
|
setPage(passportWalletAddress ? "manage-wallet" /* MANAGE_WALLET */ : "auth" /* AUTH */);
|
|
13666
13570
|
}
|
|
13667
13571
|
});
|
|
13668
|
-
(0,
|
|
13572
|
+
(0, import_react59.useEffect)(() => {
|
|
13669
13573
|
if (!!chain?.id && isConnected && walletAddress && isWalletLinking && hasStartedLinking) {
|
|
13670
13574
|
console.log("[WalletConnectHandler] handleWalletSign triggered");
|
|
13671
13575
|
handleWalletSign({ chainId: chain.id, signingWalletAddress: walletAddress });
|
|
@@ -13701,7 +13605,7 @@ var useLumiaPassportSession = (0, import_zustand6.create)((set) => ({
|
|
|
13701
13605
|
}));
|
|
13702
13606
|
function LumiaPassportSessionProvider({ children }) {
|
|
13703
13607
|
const config = useLumiaPassportConfig().config;
|
|
13704
|
-
return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(
|
|
13608
|
+
return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(import_react60.Fragment, { children: [
|
|
13705
13609
|
children,
|
|
13706
13610
|
config.current?.wallet?.enabled && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(WalletConnectHandler, {}),
|
|
13707
13611
|
/* @__PURE__ */ (0, import_jsx_runtime73.jsx)(BalanceFeedProvider, {}),
|
|
@@ -13753,14 +13657,14 @@ var LumiaWagmiProvider = ({ children }) => {
|
|
|
13753
13657
|
|
|
13754
13658
|
// src/context/LumiaPassportContext.tsx
|
|
13755
13659
|
var import_jsx_runtime75 = require("react/jsx-runtime");
|
|
13756
|
-
var LumiaPassportContext = (0,
|
|
13660
|
+
var LumiaPassportContext = (0, import_react61.createContext)(void 0);
|
|
13757
13661
|
function LumiaPassportProvider(props) {
|
|
13758
13662
|
const { children, projectId, initialConfig = {}, callbacks } = props;
|
|
13759
13663
|
const setIsIframeReady = useLumiaPassportSession((st) => st.setIsIframeReady);
|
|
13760
13664
|
const setWalletReadyStatus = useLumiaPassportSession((st) => st.setWalletReadyStatus);
|
|
13761
|
-
(0,
|
|
13762
|
-
const config = (0,
|
|
13763
|
-
const updateConfig = (0,
|
|
13665
|
+
(0, import_react61.useEffect)(() => notifyNoProjetctId(projectId), [projectId]);
|
|
13666
|
+
const config = (0, import_react61.useRef)({ projectId, ...DEFAULT_LUMIA_PASSPORT_CONFIG });
|
|
13667
|
+
const updateConfig = (0, import_react61.useCallback)((updates) => {
|
|
13764
13668
|
const prev = config.current;
|
|
13765
13669
|
const next = { ...prev };
|
|
13766
13670
|
if (updates.projectId !== void 0) next.projectId = updates.projectId;
|
|
@@ -13795,7 +13699,7 @@ function LumiaPassportProvider(props) {
|
|
|
13795
13699
|
}
|
|
13796
13700
|
config.current = next;
|
|
13797
13701
|
}, []);
|
|
13798
|
-
(0,
|
|
13702
|
+
(0, import_react61.useEffect)(() => {
|
|
13799
13703
|
if (typeof window === "undefined" || !projectId) return;
|
|
13800
13704
|
const mergedConfig = (0, import_lodash_es4.merge)(DEFAULT_LUMIA_PASSPORT_CONFIG, initialConfig);
|
|
13801
13705
|
updateConfig(mergedConfig);
|
|
@@ -13840,19 +13744,21 @@ function LumiaPassportProvider(props) {
|
|
|
13840
13744
|
console.error("[LumiaPassport] Error setting up iframe manager:", error);
|
|
13841
13745
|
}
|
|
13842
13746
|
}, [projectId, initialConfig, callbacks, updateConfig, setIsIframeReady, setWalletReadyStatus]);
|
|
13843
|
-
const contextValue = (0,
|
|
13747
|
+
const contextValue = (0, import_react61.useMemo)(() => ({ config, updateConfig, callbacks }), [config, updateConfig, callbacks]);
|
|
13844
13748
|
return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(LumiaWagmiProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(LumiaPassportContext.Provider, { value: contextValue, children }) });
|
|
13845
13749
|
}
|
|
13846
13750
|
var useLumiaPassportConfig = () => {
|
|
13847
|
-
const ctx = (0,
|
|
13751
|
+
const ctx = (0, import_react61.useContext)(LumiaPassportContext);
|
|
13848
13752
|
if (!ctx) throw new Error("useLumiaPassportConfig must be used within a LumiaPassportProvider");
|
|
13849
13753
|
return ctx;
|
|
13850
13754
|
};
|
|
13851
13755
|
|
|
13852
13756
|
// src/components/ConnectWalletButton.tsx
|
|
13757
|
+
var import_react_query37 = require("@tanstack/react-query");
|
|
13853
13758
|
var import_lucide_react49 = require("lucide-react");
|
|
13854
|
-
var
|
|
13759
|
+
var import_react62 = require("react");
|
|
13855
13760
|
init_auth();
|
|
13761
|
+
init_profile();
|
|
13856
13762
|
var import_jsx_runtime76 = (
|
|
13857
13763
|
/** external Buttons can be provided */
|
|
13858
13764
|
require("react/jsx-runtime")
|
|
@@ -13875,10 +13781,16 @@ function ConnectWalletButton(props) {
|
|
|
13875
13781
|
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
13876
13782
|
const { session, address, hasServerVault, isLoading, isIframeReady, status, setUsePaymaster } = useLumiaPassportSession();
|
|
13877
13783
|
const connectButtonLabel = getFormattedStatus(label || "Connect", status, isIframeReady);
|
|
13878
|
-
(0,
|
|
13784
|
+
(0, import_react62.useEffect)(() => setUsePaymaster(usePaymaster), [setUsePaymaster, usePaymaster]);
|
|
13785
|
+
const { data: profile, isLoading: isProfileLoading } = (0, import_react_query37.useQuery)({
|
|
13786
|
+
retry: false,
|
|
13787
|
+
enabled: !!address,
|
|
13788
|
+
queryKey: [QUERY_KEYS.userProfile, address],
|
|
13789
|
+
queryFn: getUserProfile
|
|
13790
|
+
});
|
|
13879
13791
|
const avatar = import_auth3.jwtTokenManager.getAvatar();
|
|
13880
|
-
const displayName = import_auth3.jwtTokenManager.getDisplayName();
|
|
13881
|
-
const indicators = (0,
|
|
13792
|
+
const displayName = profile?.nicknameDisplay || profile?.displayName || import_auth3.jwtTokenManager.getDisplayName();
|
|
13793
|
+
const indicators = (0, import_react62.useMemo)(() => {
|
|
13882
13794
|
const userId = import_auth3.jwtTokenManager.getUserId();
|
|
13883
13795
|
if (!userId) return { server: false, local: false, backup: false };
|
|
13884
13796
|
const server = import_auth3.jwtTokenManager.getHasKeyshare() ?? false;
|
|
@@ -13934,7 +13846,7 @@ function ConnectWalletButton(props) {
|
|
|
13934
13846
|
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "w-12 h-12 rounded-full bg-[var(--l-pass-fg)] flex items-center justify-center flex-shrink-0", children: avatar ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" }) : /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(LumiaIcon, { width: 48, height: 48 }) }),
|
|
13935
13847
|
/* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "text-left flex-1 min-w-0 text-[var(--l-pass-fg)]", children: [
|
|
13936
13848
|
/* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
13937
|
-
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "w-fit text-[14px] leading-4 truncate max-w-[144px] text-[var(--l-pass-fg)]", children: displayName }),
|
|
13849
|
+
isProfileLoading ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(import_lucide_react49.Loader, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "w-fit text-[14px] leading-4 truncate max-w-[144px] text-[var(--l-pass-fg)]", children: displayName }),
|
|
13938
13850
|
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)(KYCStatus, {})
|
|
13939
13851
|
] }),
|
|
13940
13852
|
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)(BalanceView, {})
|
|
@@ -14048,13 +13960,13 @@ var useLumiaPassportRecoveryUserId = () => useLumiaPassportSession((st) => st.re
|
|
|
14048
13960
|
var useLumiaPassportHasServerVault = () => useLumiaPassportSession((st) => st.hasServerVault);
|
|
14049
13961
|
|
|
14050
13962
|
// src/hooks/useLumiaPassportOpen.ts
|
|
14051
|
-
var
|
|
13963
|
+
var import_react63 = require("react");
|
|
14052
13964
|
function useLumiaPassportOpen() {
|
|
14053
13965
|
const page = useLayoutDataStore((st) => st.page);
|
|
14054
13966
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
14055
13967
|
const setPageParams = useLayoutDataStore((st) => st.setPageParams);
|
|
14056
13968
|
const address = useLumiaPassportSession((st) => st.address);
|
|
14057
|
-
const open = (0,
|
|
13969
|
+
const open = (0, import_react63.useCallback)(
|
|
14058
13970
|
(passportPage, params) => {
|
|
14059
13971
|
if (!address) return setPage("auth" /* AUTH */);
|
|
14060
13972
|
if (!!address && passportPage === "auth" /* AUTH */) return setPage("manage-wallet" /* MANAGE_WALLET */);
|
|
@@ -14063,12 +13975,12 @@ function useLumiaPassportOpen() {
|
|
|
14063
13975
|
},
|
|
14064
13976
|
[setPage, setPageParams, address]
|
|
14065
13977
|
);
|
|
14066
|
-
const close = (0,
|
|
13978
|
+
const close = (0, import_react63.useCallback)(() => setPage(null), [setPage]);
|
|
14067
13979
|
return { open, close, isOpen: page !== null };
|
|
14068
13980
|
}
|
|
14069
13981
|
|
|
14070
13982
|
// src/hooks/useLumiaPassportColorMode.ts
|
|
14071
|
-
var
|
|
13983
|
+
var import_react64 = require("react");
|
|
14072
13984
|
function useLumiaPassportColorMode() {
|
|
14073
13985
|
const {
|
|
14074
13986
|
config: { current: config }
|
|
@@ -14076,14 +13988,14 @@ function useLumiaPassportColorMode() {
|
|
|
14076
13988
|
const preferedColorMode = config?.preferedColorMode;
|
|
14077
13989
|
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
14078
13990
|
const handleStoreColorMode = useLayoutStore((st) => st.setColorMode);
|
|
14079
|
-
const setColorMode = (0,
|
|
13991
|
+
const setColorMode = (0, import_react64.useCallback)(
|
|
14080
13992
|
(mode) => {
|
|
14081
13993
|
localStorage.setItem(LOCAL_COLOR_MODE_KEY, mode);
|
|
14082
13994
|
handleStoreColorMode(mode);
|
|
14083
13995
|
},
|
|
14084
13996
|
[handleStoreColorMode]
|
|
14085
13997
|
);
|
|
14086
|
-
(0,
|
|
13998
|
+
(0, import_react64.useEffect)(() => {
|
|
14087
13999
|
let targetColorMode = localStorage.getItem(LOCAL_COLOR_MODE_KEY);
|
|
14088
14000
|
if (!targetColorMode && !preferedColorMode) {
|
|
14089
14001
|
const systemMode = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
@@ -14126,7 +14038,7 @@ function ThemeToggle(props) {
|
|
|
14126
14038
|
|
|
14127
14039
|
// src/context/RainbowKitContext.tsx
|
|
14128
14040
|
var import_rainbowkit3 = require("@rainbow-me/rainbowkit");
|
|
14129
|
-
var
|
|
14041
|
+
var import_react65 = require("react");
|
|
14130
14042
|
var import_wagmi9 = require("wagmi");
|
|
14131
14043
|
|
|
14132
14044
|
// src/config/rainbowkit.ts
|
|
@@ -14358,8 +14270,8 @@ var import_jsx_runtime78 = require("react/jsx-runtime");
|
|
|
14358
14270
|
function LumiaRainbowKitProvider({ children }) {
|
|
14359
14271
|
const config = useLumiaPassportConfig().config;
|
|
14360
14272
|
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
14361
|
-
const rainbowConfig2 = (0,
|
|
14362
|
-
const customTheme = (0,
|
|
14273
|
+
const rainbowConfig2 = (0, import_react65.useMemo)(() => createRainbowConfig(config.current?.wallet?.walletConnectProjectId), [config]);
|
|
14274
|
+
const customTheme = (0, import_react65.useMemo)(
|
|
14363
14275
|
() => colorMode === "dark" ? {
|
|
14364
14276
|
...(0, import_rainbowkit3.darkTheme)(),
|
|
14365
14277
|
colors: { ...(0, import_rainbowkit3.darkTheme)().colors, ...rainbowTheme.darkMode.colors },
|
|
@@ -14811,14 +14723,14 @@ var Hash = ({
|
|
|
14811
14723
|
};
|
|
14812
14724
|
|
|
14813
14725
|
// src/internal/components/TransactionsMenu/TransactionsList.tsx
|
|
14814
|
-
var
|
|
14726
|
+
var import_react66 = require("react");
|
|
14815
14727
|
init_base();
|
|
14816
14728
|
var import_jsx_runtime83 = require("react/jsx-runtime");
|
|
14817
14729
|
var TransactionsList = ({ address, itemsCount = 10 }) => {
|
|
14818
|
-
const [transactions, setTransactions] = (0,
|
|
14819
|
-
const [loading, setLoading] = (0,
|
|
14820
|
-
const [error, setError] = (0,
|
|
14821
|
-
(0,
|
|
14730
|
+
const [transactions, setTransactions] = (0, import_react66.useState)([]);
|
|
14731
|
+
const [loading, setLoading] = (0, import_react66.useState)(true);
|
|
14732
|
+
const [error, setError] = (0, import_react66.useState)(null);
|
|
14733
|
+
(0, import_react66.useEffect)(() => {
|
|
14822
14734
|
const fetchTransactions = async () => {
|
|
14823
14735
|
try {
|
|
14824
14736
|
setLoading(true);
|
|
@@ -15120,11 +15032,11 @@ function useUserOpStatus(options = {}) {
|
|
|
15120
15032
|
|
|
15121
15033
|
// src/hooks/useLogout.ts
|
|
15122
15034
|
var import_auth18 = require("@lumiapassport/core/auth");
|
|
15123
|
-
var
|
|
15035
|
+
var import_react67 = require("react");
|
|
15124
15036
|
function useLogout() {
|
|
15125
15037
|
const { setSession, setIsLoading, setAddress, setStatus, setError, address } = useLumiaPassportSession();
|
|
15126
15038
|
const { callbacks } = useLumiaPassportConfig();
|
|
15127
|
-
const logout2 = (0,
|
|
15039
|
+
const logout2 = (0, import_react67.useCallback)(async () => {
|
|
15128
15040
|
const prevAddress = address;
|
|
15129
15041
|
let userId = null;
|
|
15130
15042
|
setIsLoading(true);
|