@lumiapassport/ui-kit 1.14.24 → 1.14.25
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 +875 -987
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +890 -1002
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -4474,7 +4474,7 @@ var init_profile = __esm({
|
|
|
4474
4474
|
});
|
|
4475
4475
|
|
|
4476
4476
|
// src/styles/built.css
|
|
4477
|
-
var built_default = '.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\\201C""\\201D""\\2018""\\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgba(17,24,39,.1);--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:hsla(0,0%,100%,.1);--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.lumia-scope .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.lumia-scope .pointer-events-none{pointer-events:none}.lumia-scope .pointer-events-auto{pointer-events:auto}.lumia-scope .visible{visibility:visible}.lumia-scope .invisible{visibility:hidden}.lumia-scope .collapse{visibility:collapse}.lumia-scope .static{position:static}.lumia-scope .fixed{position:fixed}.lumia-scope .absolute{position:absolute}.lumia-scope .relative{position:relative}.lumia-scope .inset-0{inset:0}.lumia-scope .inset-y-0{top:0;bottom:0}.lumia-scope .-bottom-1{bottom:-.25rem}.lumia-scope .-right-1{right:-.25rem}.lumia-scope .-right-2{right:-.5rem}.lumia-scope .-top-1{top:-.25rem}.lumia-scope .-top-2{top:-.5rem}.lumia-scope .-top-3{top:-.75rem}.lumia-scope .bottom-full{bottom:100%}.lumia-scope .left-0{left:0}.lumia-scope .left-1{left:.25rem}.lumia-scope .left-1\\/2{left:50%}.lumia-scope .left-3{left:.75rem}.lumia-scope .left-4{left:1rem}.lumia-scope .right-0{right:0}.lumia-scope .right-2{right:.5rem}.lumia-scope .right-3{right:.75rem}.lumia-scope .right-4{right:1rem}.lumia-scope .right-\\[var\\(--l-pass-pd\\)\\]{right:var(--l-pass-pd)}.lumia-scope .right-full{right:100%}.lumia-scope .top-0{top:0}.lumia-scope .top-1{top:.25rem}.lumia-scope .top-1\\/2{top:50%}.lumia-scope .top-3{top:.75rem}.lumia-scope .top-4{top:1rem}.lumia-scope .top-\\[var\\(--l-pass-pd\\)\\]{top:var(--l-pass-pd)}.lumia-scope .top-full{top:100%}.lumia-scope .z-10{z-index:10}.lumia-scope .z-50{z-index:50}.lumia-scope .z-\\[9998\\]{z-index:9998}.lumia-scope .z-\\[9999\\]{z-index:9999}.lumia-scope .-m-px{margin:-1px}.lumia-scope .m-0{margin:0}.lumia-scope .m-4{margin:1rem}.lumia-scope .-mx-1{margin-left:-.25rem;margin-right:-.25rem}.lumia-scope .-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.lumia-scope .mx-1{margin-left:.25rem;margin-right:.25rem}.lumia-scope .mx-auto{margin-left:auto;margin-right:auto}.lumia-scope .my-1{margin-top:.25rem;margin-bottom:.25rem}.lumia-scope .my-6{margin-top:1.5rem;margin-bottom:1.5rem}.lumia-scope .my-auto{margin-top:auto;margin-bottom:auto}.lumia-scope .-mt-5{margin-top:-1.25rem}.lumia-scope .mb-1{margin-bottom:.25rem}.lumia-scope .mb-2{margin-bottom:.5rem}.lumia-scope .mb-3{margin-bottom:.75rem}.lumia-scope .mb-4{margin-bottom:1rem}.lumia-scope .mb-6{margin-bottom:1.5rem}.lumia-scope .mb-8{margin-bottom:2rem}.lumia-scope .ml-1{margin-left:.25rem}.lumia-scope .ml-2{margin-left:.5rem}.lumia-scope .ml-3{margin-left:.75rem}.lumia-scope .ml-4{margin-left:1rem}.lumia-scope .ml-auto{margin-left:auto}.lumia-scope .mr-1{margin-right:.25rem}.lumia-scope .mr-2{margin-right:.5rem}.lumia-scope .mr-4{margin-right:1rem}.lumia-scope .mt-0{margin-top:0}.lumia-scope .mt-1{margin-top:.25rem}.lumia-scope .mt-2{margin-top:.5rem}.lumia-scope .mt-3{margin-top:.75rem}.lumia-scope .mt-4{margin-top:1rem}.lumia-scope .mt-6{margin-top:1.5rem}.lumia-scope .mt-\\[var\\(--l-pass-gap\\)\\]{margin-top:var(--l-pass-gap)}.lumia-scope .block{display:block}.lumia-scope .inline-block{display:inline-block}.lumia-scope .inline{display:inline}.lumia-scope .flex{display:flex}.lumia-scope .inline-flex{display:inline-flex}.lumia-scope .table{display:table}.lumia-scope .grid{display:grid}.lumia-scope .contents{display:contents}.lumia-scope .hidden{display:none}.lumia-scope .aspect-square{aspect-ratio:1/1}.lumia-scope .size-3{width:.75rem;height:.75rem}.lumia-scope .size-3\\.5{width:.875rem;height:.875rem}.lumia-scope .size-4{width:1rem;height:1rem}.lumia-scope .size-5{width:1.25rem;height:1.25rem}.lumia-scope .h-10{height:2.5rem}.lumia-scope .h-11{height:2.75rem}.lumia-scope .h-12{height:3rem}.lumia-scope .h-14{height:3.5rem}.lumia-scope .h-16{height:4rem}.lumia-scope .h-2{height:.5rem}.lumia-scope .h-2\\.5{height:.625rem}.lumia-scope .h-20{height:5rem}.lumia-scope .h-3{height:.75rem}.lumia-scope .h-3\\.5{height:.875rem}.lumia-scope .h-4{height:1rem}.lumia-scope .h-48{height:12rem}.lumia-scope .h-5{height:1.25rem}.lumia-scope .h-6{height:1.5rem}.lumia-scope .h-7{height:1.75rem}.lumia-scope .h-8{height:2rem}.lumia-scope .h-9{height:2.25rem}.lumia-scope .h-\\[100dvh\\]{height:100dvh}.lumia-scope .h-\\[48px\\]{height:48px}.lumia-scope .h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.lumia-scope .h-fit{height:-moz-fit-content;height:fit-content}.lumia-scope .h-full{height:100%}.lumia-scope .h-px{height:1px}.lumia-scope .max-h-24{max-height:6rem}.lumia-scope .max-h-96{max-height:24rem}.lumia-scope .max-h-\\[95dvh\\]{max-height:95dvh}.lumia-scope .w-10{width:2.5rem}.lumia-scope .w-12{width:3rem}.lumia-scope .w-16{width:4rem}.lumia-scope .w-2{width:.5rem}.lumia-scope .w-2\\.5{width:.625rem}.lumia-scope .w-20{width:5rem}.lumia-scope .w-3{width:.75rem}.lumia-scope .w-3\\.5{width:.875rem}.lumia-scope .w-4{width:1rem}.lumia-scope .w-48{width:12rem}.lumia-scope .w-5{width:1.25rem}.lumia-scope .w-6{width:1.5rem}.lumia-scope .w-8{width:2rem}.lumia-scope .w-9{width:2.25rem}.lumia-scope .w-\\[100dvw\\]{width:100dvw}.lumia-scope .w-\\[40px\\]{width:40px}.lumia-scope .w-\\[var\\(--l-pass-maw\\)\\]{width:var(--l-pass-maw)}.lumia-scope .w-fit{width:-moz-fit-content;width:fit-content}.lumia-scope .w-full{width:100%}.lumia-scope .w-px{width:1px}.lumia-scope .min-w-0{min-width:0}.lumia-scope .min-w-16{min-width:4rem}.lumia-scope .min-w-24{min-width:6rem}.lumia-scope .min-w-32{min-width:8rem}.lumia-scope .min-w-5{min-width:1.25rem}.lumia-scope .min-w-\\[256px\\]{min-width:256px}.lumia-scope .min-w-\\[8rem\\]{min-width:8rem}.lumia-scope .min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.lumia-scope .max-w-2xl{max-width:42rem}.lumia-scope .max-w-\\[144px\\]{max-width:144px}.lumia-scope .max-w-\\[150px\\]{max-width:150px}.lumia-scope .max-w-\\[160px\\]{max-width:160px}.lumia-scope .max-w-\\[680px\\]{max-width:680px}.lumia-scope .max-w-full{max-width:100%}.lumia-scope .max-w-lg{max-width:32rem}.lumia-scope .max-w-md{max-width:28rem}.lumia-scope .max-w-sm{max-width:24rem}.lumia-scope .flex-1{flex:1 1 0%}.lumia-scope .flex-none{flex:none}.lumia-scope .flex-shrink{flex-shrink:1}.lumia-scope .flex-shrink-0,.lumia-scope .shrink-0{flex-shrink:0}.lumia-scope .border-collapse{border-collapse:collapse}.lumia-scope .-translate-x-1{--tw-translate-x:-0.25rem}.lumia-scope .-translate-x-1,.lumia-scope .-translate-x-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .-translate-x-1\\/2{--tw-translate-x:-50%}.lumia-scope .-translate-x-\\[var\\(--l-pass-gap\\)\\]{--tw-translate-x:calc(var(--l-pass-gap)*-1)}.lumia-scope .-translate-x-\\[var\\(--l-pass-gap\\)\\],.lumia-scope .-translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .-translate-y-1{--tw-translate-y:-0.25rem}.lumia-scope .-translate-y-1\\/2{--tw-translate-y:-50%}.lumia-scope .-translate-y-1\\/2,.lumia-scope .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes glow-warning{0%,to{transform:scale(1);box-shadow:0 0 16px var(--l-pass-bg-warning)}50%{transform:scale(.97);box-shadow:0 0 4px var(--l-pass-bg-warning)}}.lumia-scope .animate-glow-warning{animation:glow-warning 2s ease infinite}@keyframes pulse-warning{0%,to{opacity:1}50%{opacity:.6}}.lumia-scope .animate-pulse-warning{animation:pulse-warning 2s ease infinite}@keyframes spin{to{transform:rotate(1turn)}}.lumia-scope .animate-spin{animation:spin 1s linear infinite}.lumia-scope .cursor-default{cursor:default}.lumia-scope .cursor-not-allowed{cursor:not-allowed}.lumia-scope .cursor-pointer{cursor:pointer}.lumia-scope .cursor-text{cursor:text}.lumia-scope .select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.lumia-scope .select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.lumia-scope .resize{resize:both}.lumia-scope .scroll-my-1{scroll-margin-top:.25rem;scroll-margin-bottom:.25rem}.lumia-scope .list-inside{list-style-position:inside}.lumia-scope .list-disc{list-style-type:disc}.lumia-scope .appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.lumia-scope .grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lumia-scope .grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lumia-scope .grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lumia-scope .grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lumia-scope .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lumia-scope .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lumia-scope .grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lumia-scope .grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lumia-scope .grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lumia-scope .grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lumia-scope .grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lumia-scope .flex-row{flex-direction:row}.lumia-scope .flex-col{flex-direction:column}.lumia-scope .flex-col-reverse{flex-direction:column-reverse}.lumia-scope .flex-wrap{flex-wrap:wrap}.lumia-scope .place-content-center{place-content:center}.lumia-scope .items-start{align-items:flex-start}.lumia-scope .items-end{align-items:flex-end}.lumia-scope .items-center{align-items:center}.lumia-scope .justify-start{justify-content:flex-start}.lumia-scope .justify-end{justify-content:flex-end}.lumia-scope .justify-center{justify-content:center}.lumia-scope .justify-between{justify-content:space-between}.lumia-scope .justify-evenly{justify-content:space-evenly}.lumia-scope .gap-0{gap:0}.lumia-scope .gap-0\\.5{gap:.125rem}.lumia-scope .gap-1{gap:.25rem}.lumia-scope .gap-1\\.5{gap:.375rem}.lumia-scope .gap-2{gap:.5rem}.lumia-scope .gap-3{gap:.75rem}.lumia-scope .gap-4{gap:1rem}.lumia-scope .gap-\\[10px\\]{gap:10px}.lumia-scope .gap-\\[var\\(--l-pass-gap\\)\\]{gap:var(--l-pass-gap)}.lumia-scope :is(.space-x-1>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-3>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.75rem*var(--tw-space-x-reverse));margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-4>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-y-0>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-0\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-3>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-4>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-6>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.lumia-scope .overflow-auto{overflow:auto}.lumia-scope .overflow-hidden{overflow:hidden}.lumia-scope .overflow-visible{overflow:visible}.lumia-scope .overflow-y-auto{overflow-y:auto}.lumia-scope .overflow-x-hidden{overflow-x:hidden}.lumia-scope .overflow-y-hidden{overflow-y:hidden}.lumia-scope .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lumia-scope .text-ellipsis{text-overflow:ellipsis}.lumia-scope .whitespace-nowrap{white-space:nowrap}.lumia-scope .whitespace-pre-line{white-space:pre-line}.lumia-scope .whitespace-pre-wrap{white-space:pre-wrap}.lumia-scope .break-normal{overflow-wrap:normal;word-break:normal}.lumia-scope .break-words{overflow-wrap:break-word}.lumia-scope .break-all{word-break:break-all}.lumia-scope .rounded{border-radius:.25rem}.lumia-scope .rounded-2xl{border-radius:1rem}.lumia-scope .rounded-3xl{border-radius:1.5rem}.lumia-scope .rounded-\\[10px\\]{border-radius:10px}.lumia-scope .rounded-\\[5px\\]{border-radius:5px}.lumia-scope .rounded-\\[var\\(--l-pass-bdrs\\)\\]{border-radius:var(--l-pass-bdrs)}.lumia-scope .rounded-\\[var\\(--l-pass-el-bdrs\\)\\]{border-radius:var(--l-pass-el-bdrs)}.lumia-scope .rounded-full{border-radius:9999px}.lumia-scope .rounded-lg{border-radius:.5rem}.lumia-scope .rounded-md{border-radius:.375rem}.lumia-scope .rounded-sm{border-radius:.125rem}.lumia-scope .rounded-xl{border-radius:.75rem}.lumia-scope .border{border-width:1px}.lumia-scope .border-0{border-width:0}.lumia-scope .border-2{border-width:2px}.lumia-scope .border-b{border-bottom-width:1px}.lumia-scope .border-b-2{border-bottom-width:2px}.lumia-scope .border-t{border-top-width:1px}.lumia-scope .border-dashed{border-style:dashed}.lumia-scope .border-\\[var\\(--l-pass-bd\\)\\]{border-color:var(--l-pass-bd)}.lumia-scope .border-\\[var\\(--l-pass-error\\)\\]{border-color:var(--l-pass-error)}.lumia-scope .border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.lumia-scope .border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.lumia-scope .border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity,1))}.lumia-scope .border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.lumia-scope .border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity,1))}.lumia-scope .border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.lumia-scope .border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.lumia-scope .border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.lumia-scope .border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.lumia-scope .border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity,1))}.lumia-scope .border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity,1))}.lumia-scope .border-current{border-color:currentColor}.lumia-scope .border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.lumia-scope .border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.lumia-scope .border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.lumia-scope .border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.lumia-scope .border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity,1))}.lumia-scope .border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.lumia-scope .border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity,1))}.lumia-scope .border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity,1))}.lumia-scope .border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity,1))}.lumia-scope .border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.lumia-scope .border-orange-800{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity,1))}.lumia-scope .border-orange-900{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity,1))}.lumia-scope .border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.lumia-scope .border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity,1))}.lumia-scope .border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity,1))}.lumia-scope .border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.lumia-scope .border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.lumia-scope .border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.lumia-scope .border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.lumia-scope .border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity,1))}.lumia-scope .border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity,1))}.lumia-scope .border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity,1))}.lumia-scope .border-sky-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity,1))}.lumia-scope .border-sky-900{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity,1))}.lumia-scope .border-transparent{border-color:transparent}.lumia-scope .border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.lumia-scope .border-t-transparent{border-top-color:transparent}.lumia-scope .bg-\\[\\#002c15\\]{--tw-bg-opacity:1;background-color:rgb(0 44 21/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#081f2c\\]{--tw-bg-opacity:1;background-color:rgb(8 31 44/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#f3ba2f\\]{--tw-bg-opacity:1;background-color:rgb(243 186 47/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[var\\(--l-pass-accent\\)\\]{background-color:var(--l-pass-accent)}.lumia-scope .bg-\\[var\\(--l-pass-bg\\)\\]{background-color:var(--l-pass-bg)}.lumia-scope .bg-\\[var\\(--l-pass-bg-error\\)\\]{background-color:var(--l-pass-bg-error)}.lumia-scope .bg-\\[var\\(--l-pass-bg-info\\)\\]{background-color:var(--l-pass-bg-info)}.lumia-scope .bg-\\[var\\(--l-pass-bg-muted\\)\\]{background-color:var(--l-pass-bg-muted)}.lumia-scope .bg-\\[var\\(--l-pass-bg-success\\)\\]{background-color:var(--l-pass-bg-success)}.lumia-scope .bg-\\[var\\(--l-pass-bg-warning\\)\\]{background-color:var(--l-pass-bg-warning)}.lumia-scope .bg-\\[var\\(--l-pass-error\\)\\]{background-color:var(--l-pass-error)}.lumia-scope .bg-\\[var\\(--l-pass-fg\\)\\]{background-color:var(--l-pass-fg)}.lumia-scope .bg-\\[var\\(--l-pass-fg-inverted\\)\\]{background-color:var(--l-pass-fg-inverted)}.lumia-scope .bg-\\[var\\(--l-pass-overlay\\)\\]{background-color:var(--l-pass-overlay)}.lumia-scope .bg-\\[var\\(--l-pass-primary\\)\\]{background-color:var(--l-pass-primary)}.lumia-scope .bg-\\[var\\(--l-pass-secondary\\)\\]{background-color:var(--l-pass-secondary)}.lumia-scope .bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-950{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity,1))}.lumia-scope .bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-700{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-800{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-900{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-950{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity,1))}.lumia-scope .bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.lumia-scope .bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.lumia-scope .bg-transparent{background-color:transparent}.lumia-scope .bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.lumia-scope .bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.lumia-scope .bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.lumia-scope .from-purple-100{--tw-gradient-from:#f3e8ff var(--tw-gradient-from-position);--tw-gradient-to:rgba(243,232,255,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .from-purple-500{--tw-gradient-from:#a855f7 var(--tw-gradient-from-position);--tw-gradient-to:rgba(168,85,247,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .from-purple-600{--tw-gradient-from:#9333ea var(--tw-gradient-from-position);--tw-gradient-to:rgba(147,51,234,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .to-blue-100{--tw-gradient-to:#dbeafe var(--tw-gradient-to-position)}.lumia-scope .to-blue-500{--tw-gradient-to:#3b82f6 var(--tw-gradient-to-position)}.lumia-scope .to-blue-600{--tw-gradient-to:#2563eb var(--tw-gradient-to-position)}.lumia-scope .object-contain{-o-object-fit:contain;object-fit:contain}.lumia-scope .object-cover{-o-object-fit:cover;object-fit:cover}.lumia-scope .p-0{padding:0}.lumia-scope .p-1{padding:.25rem}.lumia-scope .p-2{padding:.5rem}.lumia-scope .p-3{padding:.75rem}.lumia-scope .p-4{padding:1rem}.lumia-scope .p-5{padding:1.25rem}.lumia-scope .p-6{padding:1.5rem}.lumia-scope .p-8{padding:2rem}.lumia-scope .p-\\[var\\(--l-pass-gap\\)\\]{padding:var(--l-pass-gap)}.lumia-scope .p-\\[var\\(--l-pass-pd\\)\\]{padding:var(--l-pass-pd)}.lumia-scope .px-0{padding-left:0;padding-right:0}.lumia-scope .px-1{padding-left:.25rem;padding-right:.25rem}.lumia-scope .px-12{padding-left:3rem;padding-right:3rem}.lumia-scope .px-2{padding-left:.5rem;padding-right:.5rem}.lumia-scope .px-2\\.5{padding-left:.625rem;padding-right:.625rem}.lumia-scope .px-3{padding-left:.75rem;padding-right:.75rem}.lumia-scope .px-4{padding-left:1rem;padding-right:1rem}.lumia-scope .px-5{padding-left:1.25rem;padding-right:1.25rem}.lumia-scope .px-6{padding-left:1.5rem;padding-right:1.5rem}.lumia-scope .px-8{padding-left:2rem;padding-right:2rem}.lumia-scope .px-\\[var\\(--l-pass-gap\\)\\]{padding-left:var(--l-pass-gap);padding-right:var(--l-pass-gap)}.lumia-scope .px-\\[var\\(--l-pass-pd\\)\\]{padding-left:var(--l-pass-pd);padding-right:var(--l-pass-pd)}.lumia-scope .py-0{padding-top:0;padding-bottom:0}.lumia-scope .py-0\\.5{padding-top:.125rem;padding-bottom:.125rem}.lumia-scope .py-1{padding-top:.25rem;padding-bottom:.25rem}.lumia-scope .py-1\\.5{padding-top:.375rem;padding-bottom:.375rem}.lumia-scope .py-2{padding-top:.5rem;padding-bottom:.5rem}.lumia-scope .py-3{padding-top:.75rem;padding-bottom:.75rem}.lumia-scope .py-4{padding-top:1rem;padding-bottom:1rem}.lumia-scope .py-8{padding-top:2rem;padding-bottom:2rem}.lumia-scope .py-\\[10px\\]{padding-top:10px;padding-bottom:10px}.lumia-scope .py-\\[var\\(--l-pass-gap\\)\\]{padding-top:var(--l-pass-gap);padding-bottom:var(--l-pass-gap)}.lumia-scope .pb-2{padding-bottom:.5rem}.lumia-scope .pb-3{padding-bottom:.75rem}.lumia-scope .pb-4{padding-bottom:1rem}.lumia-scope .pb-5{padding-bottom:1.25rem}.lumia-scope .pb-6{padding-bottom:1.5rem}.lumia-scope .pl-11{padding-left:2.75rem}.lumia-scope .pl-2{padding-left:.5rem}.lumia-scope .pr-10{padding-right:2.5rem}.lumia-scope .pr-16{padding-right:4rem}.lumia-scope .pr-8{padding-right:2rem}.lumia-scope .pt-0{padding-top:0}.lumia-scope .pt-2{padding-top:.5rem}.lumia-scope .pt-3{padding-top:.75rem}.lumia-scope .pt-4{padding-top:1rem}.lumia-scope .pt-5{padding-top:1.25rem}.lumia-scope .text-left{text-align:left}.lumia-scope .text-center{text-align:center}.lumia-scope .text-right{text-align:right}.lumia-scope .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.lumia-scope .font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.lumia-scope .text-2xl{font-size:1.5rem;line-height:2rem}.lumia-scope .text-3xl{font-size:1.875rem;line-height:2.25rem}.lumia-scope .text-4xl{font-size:2.25rem;line-height:2.5rem}.lumia-scope .text-\\[10px\\]{font-size:10px}.lumia-scope .text-\\[14px\\]{font-size:14px}.lumia-scope .text-\\[16px\\]{font-size:16px}.lumia-scope .text-\\[8px\\]{font-size:8px}.lumia-scope .text-base{font-size:1rem;line-height:1.5rem}.lumia-scope .text-lg{font-size:1.125rem;line-height:1.75rem}.lumia-scope .text-sm{font-size:.875rem;line-height:1.25rem}.lumia-scope .text-xl{font-size:1.25rem;line-height:1.75rem}.lumia-scope .text-xs{font-size:.75rem;line-height:1rem}.lumia-scope .font-bold{font-weight:700}.lumia-scope .font-medium{font-weight:500}.lumia-scope .font-normal{font-weight:400}.lumia-scope .font-semibold{font-weight:600}.lumia-scope .uppercase{text-transform:uppercase}.lumia-scope .lowercase{text-transform:lowercase}.lumia-scope .italic{font-style:italic}.lumia-scope .leading-4{line-height:1rem}.lumia-scope .leading-5{line-height:1.25rem}.lumia-scope .leading-6{line-height:1.5rem}.lumia-scope .leading-8{line-height:2rem}.lumia-scope .leading-\\[8px\\]{line-height:8px}.lumia-scope .leading-none{line-height:1}.lumia-scope .leading-relaxed{line-height:1.625}.lumia-scope .leading-tight{line-height:1.25}.lumia-scope .tracking-tight{letter-spacing:-.025em}.lumia-scope .tracking-wide{letter-spacing:.025em}.lumia-scope .text-\\[\\#c3f53c\\]{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .text-\\[var\\(--l-pass-bg-error\\)\\]{color:var(--l-pass-bg-error)}.lumia-scope .text-\\[var\\(--l-pass-bg-success\\)\\]{color:var(--l-pass-bg-success)}.lumia-scope .text-\\[var\\(--l-pass-bg-warning\\)\\]{color:var(--l-pass-bg-warning)}.lumia-scope .text-\\[var\\(--l-pass-error\\)\\]{color:var(--l-pass-error)}.lumia-scope .text-\\[var\\(--l-pass-fg\\)\\]{color:var(--l-pass-fg)}.lumia-scope .text-\\[var\\(--l-pass-fg-inverted\\)\\]{color:var(--l-pass-fg-inverted)}.lumia-scope .text-\\[var\\(--l-pass-fg-muted\\)\\]{color:var(--l-pass-fg-muted)}.lumia-scope .text-\\[var\\(--l-pass-info\\)\\]{color:var(--l-pass-info)}.lumia-scope .text-\\[var\\(--l-pass-success\\)\\]{color:var(--l-pass-success)}.lumia-scope .text-\\[var\\(--l-pass-text-secondary\\)\\]{color:var(--l-pass-text-secondary)}.lumia-scope .text-\\[var\\(--l-pass-warning\\)\\]{color:var(--l-pass-warning)}.lumia-scope .text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity,1))}.lumia-scope .text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity,1))}.lumia-scope .text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity,1))}.lumia-scope .text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.lumia-scope .text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.lumia-scope .text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.lumia-scope .text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.lumia-scope .text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity,1))}.lumia-scope .text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.lumia-scope .text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.lumia-scope .text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.lumia-scope .text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.lumia-scope .text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.lumia-scope .text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.lumia-scope .text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.lumia-scope .text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.lumia-scope .text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.lumia-scope .text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.lumia-scope .text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.lumia-scope .text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.lumia-scope .text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.lumia-scope .text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.lumia-scope .text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity,1))}.lumia-scope .text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.lumia-scope .text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.lumia-scope .text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.lumia-scope .text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.lumia-scope .text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.lumia-scope .text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity,1))}.lumia-scope .text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.lumia-scope .text-orange-100{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity,1))}.lumia-scope .text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity,1))}.lumia-scope .text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity,1))}.lumia-scope .text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.lumia-scope .text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.lumia-scope .text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.lumia-scope .text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.lumia-scope .text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity,1))}.lumia-scope .text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.lumia-scope .text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.lumia-scope .text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.lumia-scope .text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.lumia-scope .text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.lumia-scope .text-red-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity,1))}.lumia-scope .text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.lumia-scope .text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.lumia-scope .text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.lumia-scope .text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.lumia-scope .text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.lumia-scope .text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.lumia-scope .text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.lumia-scope .text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.lumia-scope .text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity,1))}.lumia-scope .text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity,1))}.lumia-scope .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.lumia-scope .text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.lumia-scope .underline{text-decoration-line:underline}.lumia-scope .underline-offset-2{text-underline-offset:2px}.lumia-scope .underline-offset-4{text-underline-offset:4px}.lumia-scope .antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lumia-scope .opacity-0{opacity:0}.lumia-scope .opacity-100{opacity:1}.lumia-scope .opacity-40{opacity:.4}.lumia-scope .opacity-50{opacity:.5}.lumia-scope .opacity-60{opacity:.6}.lumia-scope .shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.lumia-scope .shadow,.lumia-scope .shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.lumia-scope .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.lumia-scope .shadow-lg,.lumia-scope .shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.lumia-scope .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.lumia-scope .shadow-sm,.lumia-scope .shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.lumia-scope .outline-none{outline:2px solid transparent;outline-offset:2px}.lumia-scope .outline{outline-style:solid}.lumia-scope .blur{--tw-blur:blur(8px)}.lumia-scope .blur,.lumia-scope .grayscale{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.lumia-scope .grayscale{--tw-grayscale:grayscale(100%)}.lumia-scope .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.lumia-scope .backdrop-blur{--tw-backdrop-blur:blur(8px)}.lumia-scope .backdrop-blur,.lumia-scope .backdrop-blur-sm{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.lumia-scope .backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.lumia-scope .backdrop-filter{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.lumia-scope .transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-\\[color\\2c box-shadow\\]{transition-property:color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-none{transition-property:none}.lumia-scope .transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .duration-200{transition-duration:.2s}.lumia-scope .ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.lumia-scope .ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.lumia-scope{--l-pass-ff:var(--lumia-passport-ff,-apple-system,BlinkMacSystemFont,"Inter",system-ui,sans-serif);--l-pass-maw:var(--lumia-passport-maw,384px);--l-pass-pd:var(--lumia-passport-pd,12px);--l-pass-gap:var(--lumia-passport-gap,10px);--l-pass-bdrs:var(--lumia-passport-bdrs,20px);--l-pass-el-bdrs:var(--lumia-passport-element-bdrs,10px);--l-pass-backdrop-blur:var(--lumia-passport-backdrop-blur,10px)}.lumia-scope[data-lumia-passport-mode=light]{--l-pass-overlay:var(--lumia-passport-overlay,hsla(0,0%,100%,.8));--l-pass-bg:var(--lumia-passport-bg,#fff);--l-pass-fg:var(--lumia-passport-fg,#000);--l-pass-fg-h:var(--lumia-passport-fg-h,rgba(0,0,0,.6));--l-pass-fg-a:var(--lumia-passport-fg-a,rgba(0,0,0,.4));--l-pass-fg-inverted:var(--lumia-passport-fg-inverted,#fff);--l-pass-fg-muted:var(--lumia-passport-fg-muted,rgba(0,0,0,.6));--l-pass-primary:var(--lumia-passport-primary,#000);--l-pass-primary-h:var(--lumia-passport-primary-h,rgba(0,0,0,.8));--l-pass-primary-a:var(--lumia-passport-primary-a,rgba(0,0,0,.6));--l-pass-secondary:var(--lumia-passport-secondary,#e4e4e4);--l-pass-secondary-h:var(--lumia-passport-secondary-h,hsla(0,0%,89%,.8));--l-pass-secondary-a:var(--lumia-passport-secondary-a,hsla(0,0%,89%,.6));--l-pass-bd:var(--lumia-passport-bd,#ebebeb);--l-pass-bd-intense:var(--lumia-passport-bd-intense,#a9a9a9);--l-pass-shadow-c:var(--lumia-passport-shadow-c,rgba(0,0,0,.1));--l-pass-info:var(--lumia-passport-info,var(--l-pass-fg));--l-pass-bg-info:var(--lumia-passport-bg-info,#e4e4e4);--l-pass-success:var(--lumia-passport-success,var(--l-pass-fg));--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,var(--l-pass-fg));--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#fff);--l-pass-bg-error:var(--lumia-passport-bg-error,#d6204e)}.lumia-scope[data-lumia-passport-mode=dark]{--l-pass-overlay:var(--lumia-passport-overlay,rgba(0,0,0,.8));--l-pass-bg:var(--lumia-passport-bg,#1a1a1a);--l-pass-fg:var(--lumia-passport-fg,#fff);--l-pass-fg-h:var(--lumia-passport-fg-h,hsla(0,0%,100%,.6));--l-pass-fg-a:var(--lumia-passport-fg-a,hsla(0,0%,100%,.4));--l-pass-fg-inverted:var(--lumia-passport-fg-inverted,#000);--l-pass-fg-muted:var(--lumia-passport-fg-muted,hsla(0,0%,100%,.6));--l-pass-primary:var(--lumia-passport-primary,#fff);--l-pass-primary-h:var(--lumia-passport-primary-h,hsla(0,0%,100%,.8));--l-pass-primary-a:var(--lumia-passport-primary-a,hsla(0,0%,100%,.6));--l-pass-secondary:var(--lumia-passport-secondary,#2a2a2a);--l-pass-secondary-h:var(--lumia-passport-secondary-h,rgba(42,42,42,.6));--l-pass-secondary-a:var(--lumia-passport-secondary-a,rgba(42,42,42,.4));--l-pass-bd:var(--lumia-passport-bd,#3a3a3a);--l-pass-bd-intense:var(--lumia-passport-bd-intense,#4a4a4a);--l-pass-shadow-c:var(--lumia-passport-shadow-c,rgba(0,0,0,.1));--l-pass-info:var(--lumia-passport-info,var(--l-pass-fg));--l-pass-bg-info:var(--lumia-passport-bg-info,#2a2a2a);--l-pass-success:var(--lumia-passport-success,var(--l-pass-fg-inverted));--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,var(--l-pass-fg-inverted));--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#fff);--l-pass-bg-error:var(--lumia-passport-bg-error,#d6204e)}.lumia-scope,.lumia-scope *{margin:0;box-sizing:border-box;font-family:var(--l-pass-ff);font-optical-sizing:auto;-webkit-tap-highlight-color:transparent;-moz-tap-highlight-color:transparent;-ms-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lumia-scope button,.lumia-scope h1,.lumia-scope h2,.lumia-scope h3,.lumia-scope h4,.lumia-scope h5,.lumia-scope h6,.lumia-scope input,.lumia-scope p,.lumia-scope select,.lumia-scope textarea{font-family:var(--l-pass-ff)!important;margin:0}.lumia-scope button,.lumia-scope input,.lumia-scope select,.lumia-scope textarea{border-style:solid;outline:none!important;appearance:none!important;-webkit-appearance:none;-moz-appearance:none}.lumia-scope input,.lumia-scope textarea{font-size:16px!important}.lumia-scope .lumia-passport-button{box-shadow:0 4px 20px var(--l-pass-shadow-c),inset 0 0 0 1px var(--l-pass-bd);transition:transform .25s ease}.lumia-scope .lumia-passport-button:hover{transform:scale(1.02)}.lumia-scope .lumia-passport-button:active{transform:scale(1)}@keyframes lumia-mobile-dialog-fade-in{0%{opacity:0;transform:translateY(64px)}to{opacity:1;transform:translateY(0)}}@keyframes lumia-mobile-dialog-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(64px)}}.lumia-scope .animate-mobile-dialog-in{animation:lumia-mobile-dialog-fade-in 375ms ease}.lumia-scope .animate-mobile-dialog-out{animation:lumia-mobile-dialog-fade-out 375ms ease}@keyframes lumia-dialog-fade-in{0%{opacity:0}to{opacity:1}}@keyframes lumia-dialog-fade-out{0%{opacity:1}to{opacity:0}}.lumia-scope .animate-dialog-in{animation:lumia-dialog-fade-in 375ms ease}.lumia-scope .animate-dialog-out{animation:lumia-dialog-fade-out 375ms ease}.lumia-scope .list-scrollbar-y{width:100%;padding-right:var(--l-pass-list-scrollbar-pd-r,0);overflow-y:auto;overflow-x:hidden;max-height:var(--l-pass-scrollbar-mah,300px)}.lumia-scope .list-scrollbar-y::-webkit-scrollbar{width:4px;height:4px}.lumia-scope .list-scrollbar-y::-webkit-scrollbar-thumb{cursor:pointer;width:4px;border-radius:2px;background-color:var(--l-pass-bd)}.lumia-scope .list-scrollbar-y::-webkit-scrollbar-track{margin-top:10px;margin-bottom:10px;background-color:transparent}.lumia-scope .noScrollbars::-webkit-scrollbar{display:none}.lumia-scope div[data-radix-popper-content-wrapper]{z-index:10000!important}.lumia-scope .file\\:mr-\\[var\\(--l-pass-gap\\)\\]::file-selector-button{margin-right:var(--l-pass-gap)}.lumia-scope .file\\:h-12::file-selector-button{height:3rem}.lumia-scope .file\\:cursor-pointer::file-selector-button{cursor:pointer}.lumia-scope .file\\:rounded-\\[var\\(--l-pass-el-bdrs\\)\\]::file-selector-button{border-radius:var(--l-pass-el-bdrs)}.lumia-scope .file\\:border-0::file-selector-button{border-width:0}.lumia-scope .file\\:bg-\\[var\\(--l-pass-primary\\)\\]::file-selector-button{background-color:var(--l-pass-primary)}.lumia-scope .file\\:bg-transparent::file-selector-button{background-color:transparent}.lumia-scope .file\\:px-\\[var\\(--l-pass-pd\\)\\]::file-selector-button{padding-left:var(--l-pass-pd);padding-right:var(--l-pass-pd)}.lumia-scope .file\\:text-\\[16px\\]::file-selector-button{font-size:16px}.lumia-scope .file\\:text-base::file-selector-button{font-size:1rem;line-height:1.5rem}.lumia-scope .file\\:font-medium::file-selector-button{font-weight:500}.lumia-scope .file\\:text-\\[var\\(--l-pass-fg-inverted\\)\\]::file-selector-button{color:var(--l-pass-fg-inverted)}.lumia-scope .placeholder\\:text-\\[var\\(--l-pass-fg-muted\\)\\]::-moz-placeholder{color:var(--l-pass-fg-muted)}.lumia-scope .placeholder\\:text-\\[var\\(--l-pass-fg-muted\\)\\]::placeholder{color:var(--l-pass-fg-muted)}.lumia-scope .focus-within\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:focus-within{background-color:var(--l-pass-secondary-a)}.lumia-scope .focus-within\\:outline-none:focus-within{outline:2px solid transparent;outline-offset:2px}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-bg\\)\\]:hover{background-color:var(--l-pass-bg)}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-primary-h\\)\\]:hover{background-color:var(--l-pass-primary-h)}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-secondary-h\\)\\]:hover{background-color:var(--l-pass-secondary-h)}.lumia-scope .hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-yellow-600:hover{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:text-\\[\\#c3f53c\\]:hover{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-\\[var\\(--l-pass-fg-h\\)\\]:hover{color:var(--l-pass-fg-h)}.lumia-scope .hover\\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.lumia-scope .hover\\:underline:hover{text-decoration-line:underline}.lumia-scope .file\\:hover\\:opacity-90:hover::file-selector-button{opacity:.9}.lumia-scope .focus\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:focus{background-color:var(--l-pass-secondary-a)}.lumia-scope .focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.lumia-scope .focus\\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px}.lumia-scope .focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.lumia-scope .focus-visible\\:ring-0:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus-visible\\:ring-\\[2px\\]:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus-visible\\:ring-transparent:focus-visible{--tw-ring-color:transparent}.lumia-scope .focus-visible\\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px}.lumia-scope .active\\:bg-\\[var\\(--l-pass-bg\\)\\]:active{background-color:var(--l-pass-bg)}.lumia-scope .active\\:bg-\\[var\\(--l-pass-primary-a\\)\\]:active{background-color:var(--l-pass-primary-a)}.lumia-scope .active\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:active{background-color:var(--l-pass-secondary-a)}.lumia-scope .active\\:text-\\[\\#c3f53c\\]:active{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .active\\:text-\\[var\\(--l-pass-fg-a\\)\\]:active{color:var(--l-pass-fg-a)}.lumia-scope .file\\:active\\:opacity-80:active::file-selector-button{opacity:.8}.lumia-scope .disabled\\:cursor-default:disabled{cursor:default}.lumia-scope .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.lumia-scope .disabled\\:opacity-50:disabled{opacity:.5}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-bg\\)\\]:hover:disabled{background-color:var(--l-pass-bg)}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-primary\\)\\]:hover:disabled{background-color:var(--l-pass-primary)}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-secondary\\)\\]:hover:disabled{background-color:var(--l-pass-secondary)}.lumia-scope .disabled\\:hover\\:text-\\[var\\(--l-pass-fg\\)\\]:hover:disabled{color:var(--l-pass-fg)}.lumia-scope .disabled\\:active\\:bg-\\[var\\(--l-pass-bg\\)\\]:active:disabled{background-color:var(--l-pass-bg)}.lumia-scope .disabled\\:active\\:bg-\\[var\\(--l-pass-primary\\)\\]:active:disabled{background-color:var(--l-pass-primary)}.lumia-scope .disabled\\:active\\:text-\\[var\\(--l-pass-fg\\)\\]:active:disabled{color:var(--l-pass-fg)}.lumia-scope :is(.group:hover .group-hover\\:opacity-100){opacity:1}.lumia-scope :is(.group:hover .group-hover\\:opacity-60){opacity:.6}.lumia-scope .data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.lumia-scope .data-\\[size\\=default\\]\\:h-12[data-size=default]{height:3rem}.lumia-scope .data-\\[size\\=sm\\]\\:h-10[data-size=sm]{height:2.5rem}.lumia-scope .data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.lumia-scope .data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom],.lumia-scope .data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.lumia-scope .data-\\[side\\=right\\]\\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.lumia-scope .data-\\[side\\=right\\]\\:translate-x-1[data-side=right],.lumia-scope .data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.lumia-scope .data-\\[state\\=checked\\]\\:border-\\[var\\(--l-pass-bd-intense\\)\\][data-state=checked]{border-color:var(--l-pass-bd-intense)}.lumia-scope .data-\\[state\\=checked\\]\\:bg-\\[var\\(--l-pass-secondary\\)\\][data-state=checked]{background-color:var(--l-pass-secondary)}.lumia-scope .data-\\[state\\=checked\\]\\:text-\\[var\\(--l-pass-fg\\)\\][data-state=checked]{color:var(--l-pass-fg)}.lumia-scope .data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1[data-slot=select-value]>*){overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:flex[data-slot=select-value]>*){display:flex}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:items-center[data-slot=select-value]>*){align-items:center}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:gap-\\[var\\(--l-pass-gap\\)\\][data-slot=select-value]>*){gap:var(--l-pass-gap)}@media (min-width:640px){.lumia-scope .sm\\:flex-row{flex-direction:row}.lumia-scope .sm\\:justify-end{justify-content:flex-end}.lumia-scope :is(.sm\\:space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope .sm\\:text-left{text-align:left}}@media (min-width:768px){.lumia-scope .md\\:h-8{height:2rem}.lumia-scope .md\\:w-8{width:2rem}.lumia-scope .md\\:gap-\\[var\\(--l-pass-gap\\)\\]{gap:var(--l-pass-gap)}.lumia-scope .md\\:py-1{padding-top:.25rem;padding-bottom:.25rem}}@media (prefers-color-scheme:dark){.lumia-scope .dark\\:bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-yellow-500:hover{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}}.lumia-scope :is(.\\[\\&_svg\\:not\\(\\[class\\*\\=\\\'size-\\\'\\]\\)\\]\\:size-4 svg:not([class*=size-])){width:1rem;height:1rem}.lumia-scope :is(.\\[\\&_svg\\]\\:pointer-events-none svg){pointer-events:none}.lumia-scope :is(.\\[\\&_svg\\]\\:shrink-0 svg){flex-shrink:0}';
|
|
4477
|
+
var built_default = '.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\\201C""\\201D""\\2018""\\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgba(17,24,39,.1);--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:hsla(0,0%,100%,.1);--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.lumia-scope .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.lumia-scope .pointer-events-none{pointer-events:none}.lumia-scope .pointer-events-auto{pointer-events:auto}.lumia-scope .visible{visibility:visible}.lumia-scope .invisible{visibility:hidden}.lumia-scope .collapse{visibility:collapse}.lumia-scope .static{position:static}.lumia-scope .fixed{position:fixed}.lumia-scope .absolute{position:absolute}.lumia-scope .relative{position:relative}.lumia-scope .inset-0{inset:0}.lumia-scope .inset-y-0{top:0;bottom:0}.lumia-scope .-bottom-1{bottom:-.25rem}.lumia-scope .-right-1{right:-.25rem}.lumia-scope .-right-2{right:-.5rem}.lumia-scope .-top-1{top:-.25rem}.lumia-scope .-top-2{top:-.5rem}.lumia-scope .-top-3{top:-.75rem}.lumia-scope .bottom-full{bottom:100%}.lumia-scope .left-0{left:0}.lumia-scope .left-1{left:.25rem}.lumia-scope .left-1\\/2{left:50%}.lumia-scope .left-3{left:.75rem}.lumia-scope .left-4{left:1rem}.lumia-scope .right-0{right:0}.lumia-scope .right-2{right:.5rem}.lumia-scope .right-3{right:.75rem}.lumia-scope .right-4{right:1rem}.lumia-scope .right-\\[var\\(--l-pass-pd\\)\\]{right:var(--l-pass-pd)}.lumia-scope .right-full{right:100%}.lumia-scope .top-0{top:0}.lumia-scope .top-1{top:.25rem}.lumia-scope .top-1\\/2{top:50%}.lumia-scope .top-3{top:.75rem}.lumia-scope .top-4{top:1rem}.lumia-scope .top-\\[var\\(--l-pass-pd\\)\\]{top:var(--l-pass-pd)}.lumia-scope .top-full{top:100%}.lumia-scope .z-10{z-index:10}.lumia-scope .z-50{z-index:50}.lumia-scope .z-\\[9998\\]{z-index:9998}.lumia-scope .z-\\[9999\\]{z-index:9999}.lumia-scope .-m-px{margin:-1px}.lumia-scope .m-0{margin:0}.lumia-scope .m-4{margin:1rem}.lumia-scope .-mx-1{margin-left:-.25rem;margin-right:-.25rem}.lumia-scope .-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.lumia-scope .mx-1{margin-left:.25rem;margin-right:.25rem}.lumia-scope .mx-auto{margin-left:auto;margin-right:auto}.lumia-scope .my-1{margin-top:.25rem;margin-bottom:.25rem}.lumia-scope .my-6{margin-top:1.5rem;margin-bottom:1.5rem}.lumia-scope .my-auto{margin-top:auto;margin-bottom:auto}.lumia-scope .-mt-5{margin-top:-1.25rem}.lumia-scope .mb-1{margin-bottom:.25rem}.lumia-scope .mb-2{margin-bottom:.5rem}.lumia-scope .mb-3{margin-bottom:.75rem}.lumia-scope .mb-4{margin-bottom:1rem}.lumia-scope .mb-6{margin-bottom:1.5rem}.lumia-scope .mb-8{margin-bottom:2rem}.lumia-scope .ml-1{margin-left:.25rem}.lumia-scope .ml-2{margin-left:.5rem}.lumia-scope .ml-3{margin-left:.75rem}.lumia-scope .ml-4{margin-left:1rem}.lumia-scope .ml-auto{margin-left:auto}.lumia-scope .mr-1{margin-right:.25rem}.lumia-scope .mr-2{margin-right:.5rem}.lumia-scope .mr-4{margin-right:1rem}.lumia-scope .mt-0{margin-top:0}.lumia-scope .mt-1{margin-top:.25rem}.lumia-scope .mt-2{margin-top:.5rem}.lumia-scope .mt-3{margin-top:.75rem}.lumia-scope .mt-4{margin-top:1rem}.lumia-scope .mt-6{margin-top:1.5rem}.lumia-scope .block{display:block}.lumia-scope .inline-block{display:inline-block}.lumia-scope .inline{display:inline}.lumia-scope .flex{display:flex}.lumia-scope .inline-flex{display:inline-flex}.lumia-scope .table{display:table}.lumia-scope .grid{display:grid}.lumia-scope .contents{display:contents}.lumia-scope .hidden{display:none}.lumia-scope .aspect-square{aspect-ratio:1/1}.lumia-scope .size-3{width:.75rem;height:.75rem}.lumia-scope .size-3\\.5{width:.875rem;height:.875rem}.lumia-scope .size-4{width:1rem;height:1rem}.lumia-scope .size-5{width:1.25rem;height:1.25rem}.lumia-scope .h-10{height:2.5rem}.lumia-scope .h-11{height:2.75rem}.lumia-scope .h-12{height:3rem}.lumia-scope .h-14{height:3.5rem}.lumia-scope .h-16{height:4rem}.lumia-scope .h-2{height:.5rem}.lumia-scope .h-2\\.5{height:.625rem}.lumia-scope .h-20{height:5rem}.lumia-scope .h-3{height:.75rem}.lumia-scope .h-3\\.5{height:.875rem}.lumia-scope .h-4{height:1rem}.lumia-scope .h-48{height:12rem}.lumia-scope .h-5{height:1.25rem}.lumia-scope .h-6{height:1.5rem}.lumia-scope .h-7{height:1.75rem}.lumia-scope .h-8{height:2rem}.lumia-scope .h-9{height:2.25rem}.lumia-scope .h-\\[100dvh\\]{height:100dvh}.lumia-scope .h-\\[48px\\]{height:48px}.lumia-scope .h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.lumia-scope .h-fit{height:-moz-fit-content;height:fit-content}.lumia-scope .h-full{height:100%}.lumia-scope .h-px{height:1px}.lumia-scope .max-h-24{max-height:6rem}.lumia-scope .max-h-96{max-height:24rem}.lumia-scope .max-h-\\[95dvh\\]{max-height:95dvh}.lumia-scope .w-10{width:2.5rem}.lumia-scope .w-12{width:3rem}.lumia-scope .w-16{width:4rem}.lumia-scope .w-2{width:.5rem}.lumia-scope .w-2\\.5{width:.625rem}.lumia-scope .w-20{width:5rem}.lumia-scope .w-3{width:.75rem}.lumia-scope .w-3\\.5{width:.875rem}.lumia-scope .w-4{width:1rem}.lumia-scope .w-48{width:12rem}.lumia-scope .w-5{width:1.25rem}.lumia-scope .w-6{width:1.5rem}.lumia-scope .w-8{width:2rem}.lumia-scope .w-9{width:2.25rem}.lumia-scope .w-\\[100dvw\\]{width:100dvw}.lumia-scope .w-\\[40px\\]{width:40px}.lumia-scope .w-\\[var\\(--l-pass-maw\\)\\]{width:var(--l-pass-maw)}.lumia-scope .w-fit{width:-moz-fit-content;width:fit-content}.lumia-scope .w-full{width:100%}.lumia-scope .w-px{width:1px}.lumia-scope .min-w-0{min-width:0}.lumia-scope .min-w-16{min-width:4rem}.lumia-scope .min-w-24{min-width:6rem}.lumia-scope .min-w-32{min-width:8rem}.lumia-scope .min-w-4{min-width:1rem}.lumia-scope .min-w-5{min-width:1.25rem}.lumia-scope .min-w-\\[256px\\]{min-width:256px}.lumia-scope .min-w-\\[8rem\\]{min-width:8rem}.lumia-scope .min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.lumia-scope .max-w-2xl{max-width:42rem}.lumia-scope .max-w-\\[144px\\]{max-width:144px}.lumia-scope .max-w-\\[150px\\]{max-width:150px}.lumia-scope .max-w-\\[160px\\]{max-width:160px}.lumia-scope .max-w-\\[256px\\]{max-width:256px}.lumia-scope .max-w-\\[680px\\]{max-width:680px}.lumia-scope .max-w-full{max-width:100%}.lumia-scope .max-w-lg{max-width:32rem}.lumia-scope .max-w-md{max-width:28rem}.lumia-scope .max-w-sm{max-width:24rem}.lumia-scope .flex-1{flex:1 1 0%}.lumia-scope .flex-none{flex:none}.lumia-scope .flex-shrink{flex-shrink:1}.lumia-scope .flex-shrink-0,.lumia-scope .shrink-0{flex-shrink:0}.lumia-scope .border-collapse{border-collapse:collapse}.lumia-scope .-translate-x-1{--tw-translate-x:-0.25rem}.lumia-scope .-translate-x-1,.lumia-scope .-translate-x-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .-translate-x-1\\/2{--tw-translate-x:-50%}.lumia-scope .-translate-x-\\[var\\(--l-pass-gap\\)\\]{--tw-translate-x:calc(var(--l-pass-gap)*-1)}.lumia-scope .-translate-x-\\[var\\(--l-pass-gap\\)\\],.lumia-scope .-translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .-translate-y-1{--tw-translate-y:-0.25rem}.lumia-scope .-translate-y-1\\/2{--tw-translate-y:-50%}.lumia-scope .-translate-y-1\\/2,.lumia-scope .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes glow-warning{0%,to{transform:scale(1);box-shadow:0 0 16px var(--l-pass-bg-warning)}50%{transform:scale(.97);box-shadow:0 0 4px var(--l-pass-bg-warning)}}.lumia-scope .animate-glow-warning{animation:glow-warning 2s ease infinite}@keyframes pulse-warning{0%,to{opacity:1}50%{opacity:.6}}.lumia-scope .animate-pulse-warning{animation:pulse-warning 2s ease infinite}@keyframes spin{to{transform:rotate(1turn)}}.lumia-scope .animate-spin{animation:spin 1s linear infinite}.lumia-scope .cursor-default{cursor:default}.lumia-scope .cursor-not-allowed{cursor:not-allowed}.lumia-scope .cursor-pointer{cursor:pointer}.lumia-scope .cursor-text{cursor:text}.lumia-scope .select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.lumia-scope .select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.lumia-scope .resize{resize:both}.lumia-scope .scroll-my-1{scroll-margin-top:.25rem;scroll-margin-bottom:.25rem}.lumia-scope .list-inside{list-style-position:inside}.lumia-scope .list-disc{list-style-type:disc}.lumia-scope .appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.lumia-scope .grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lumia-scope .grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lumia-scope .grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lumia-scope .grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lumia-scope .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lumia-scope .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lumia-scope .grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lumia-scope .grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lumia-scope .grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lumia-scope .grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lumia-scope .grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lumia-scope .flex-row{flex-direction:row}.lumia-scope .flex-col{flex-direction:column}.lumia-scope .flex-col-reverse{flex-direction:column-reverse}.lumia-scope .flex-wrap{flex-wrap:wrap}.lumia-scope .place-content-center{place-content:center}.lumia-scope .items-start{align-items:flex-start}.lumia-scope .items-end{align-items:flex-end}.lumia-scope .items-center{align-items:center}.lumia-scope .justify-start{justify-content:flex-start}.lumia-scope .justify-end{justify-content:flex-end}.lumia-scope .justify-center{justify-content:center}.lumia-scope .justify-between{justify-content:space-between}.lumia-scope .justify-evenly{justify-content:space-evenly}.lumia-scope .gap-0{gap:0}.lumia-scope .gap-0\\.5{gap:.125rem}.lumia-scope .gap-1{gap:.25rem}.lumia-scope .gap-1\\.5{gap:.375rem}.lumia-scope .gap-2{gap:.5rem}.lumia-scope .gap-3{gap:.75rem}.lumia-scope .gap-4{gap:1rem}.lumia-scope .gap-\\[10px\\]{gap:10px}.lumia-scope .gap-\\[var\\(--l-pass-gap\\)\\]{gap:var(--l-pass-gap)}.lumia-scope :is(.space-x-1>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-3>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.75rem*var(--tw-space-x-reverse));margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-4>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-y-0>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-0\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-3>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-4>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-6>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.lumia-scope .overflow-auto{overflow:auto}.lumia-scope .overflow-hidden{overflow:hidden}.lumia-scope .overflow-visible{overflow:visible}.lumia-scope .overflow-y-auto{overflow-y:auto}.lumia-scope .overflow-x-hidden{overflow-x:hidden}.lumia-scope .overflow-y-hidden{overflow-y:hidden}.lumia-scope .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lumia-scope .text-ellipsis{text-overflow:ellipsis}.lumia-scope .whitespace-nowrap{white-space:nowrap}.lumia-scope .whitespace-pre-line{white-space:pre-line}.lumia-scope .whitespace-pre-wrap{white-space:pre-wrap}.lumia-scope .break-normal{overflow-wrap:normal;word-break:normal}.lumia-scope .break-words{overflow-wrap:break-word}.lumia-scope .break-all{word-break:break-all}.lumia-scope .rounded{border-radius:.25rem}.lumia-scope .rounded-2xl{border-radius:1rem}.lumia-scope .rounded-3xl{border-radius:1.5rem}.lumia-scope .rounded-\\[10px\\]{border-radius:10px}.lumia-scope .rounded-\\[5px\\]{border-radius:5px}.lumia-scope .rounded-\\[var\\(--l-pass-bdrs\\)\\]{border-radius:var(--l-pass-bdrs)}.lumia-scope .rounded-\\[var\\(--l-pass-el-bdrs\\)\\]{border-radius:var(--l-pass-el-bdrs)}.lumia-scope .rounded-full{border-radius:9999px}.lumia-scope .rounded-lg{border-radius:.5rem}.lumia-scope .rounded-md{border-radius:.375rem}.lumia-scope .rounded-sm{border-radius:.125rem}.lumia-scope .rounded-xl{border-radius:.75rem}.lumia-scope .border{border-width:1px}.lumia-scope .border-0{border-width:0}.lumia-scope .border-2{border-width:2px}.lumia-scope .border-b{border-bottom-width:1px}.lumia-scope .border-b-2{border-bottom-width:2px}.lumia-scope .border-t{border-top-width:1px}.lumia-scope .border-dashed{border-style:dashed}.lumia-scope .border-\\[var\\(--l-pass-bd\\)\\]{border-color:var(--l-pass-bd)}.lumia-scope .border-\\[var\\(--l-pass-error\\)\\]{border-color:var(--l-pass-error)}.lumia-scope .border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.lumia-scope .border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.lumia-scope .border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity,1))}.lumia-scope .border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.lumia-scope .border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity,1))}.lumia-scope .border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.lumia-scope .border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.lumia-scope .border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.lumia-scope .border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.lumia-scope .border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity,1))}.lumia-scope .border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity,1))}.lumia-scope .border-current{border-color:currentColor}.lumia-scope .border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.lumia-scope .border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.lumia-scope .border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.lumia-scope .border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.lumia-scope .border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity,1))}.lumia-scope .border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.lumia-scope .border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity,1))}.lumia-scope .border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity,1))}.lumia-scope .border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity,1))}.lumia-scope .border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.lumia-scope .border-orange-800{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity,1))}.lumia-scope .border-orange-900{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity,1))}.lumia-scope .border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.lumia-scope .border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity,1))}.lumia-scope .border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity,1))}.lumia-scope .border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.lumia-scope .border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.lumia-scope .border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.lumia-scope .border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.lumia-scope .border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity,1))}.lumia-scope .border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity,1))}.lumia-scope .border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity,1))}.lumia-scope .border-sky-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity,1))}.lumia-scope .border-sky-900{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity,1))}.lumia-scope .border-transparent{border-color:transparent}.lumia-scope .border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.lumia-scope .border-t-transparent{border-top-color:transparent}.lumia-scope .bg-\\[\\#002c15\\]{--tw-bg-opacity:1;background-color:rgb(0 44 21/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#081f2c\\]{--tw-bg-opacity:1;background-color:rgb(8 31 44/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#f3ba2f\\]{--tw-bg-opacity:1;background-color:rgb(243 186 47/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[var\\(--l-pass-accent\\)\\]{background-color:var(--l-pass-accent)}.lumia-scope .bg-\\[var\\(--l-pass-bg\\)\\]{background-color:var(--l-pass-bg)}.lumia-scope .bg-\\[var\\(--l-pass-bg-error\\)\\]{background-color:var(--l-pass-bg-error)}.lumia-scope .bg-\\[var\\(--l-pass-bg-info\\)\\]{background-color:var(--l-pass-bg-info)}.lumia-scope .bg-\\[var\\(--l-pass-bg-muted\\)\\]{background-color:var(--l-pass-bg-muted)}.lumia-scope .bg-\\[var\\(--l-pass-bg-success\\)\\]{background-color:var(--l-pass-bg-success)}.lumia-scope .bg-\\[var\\(--l-pass-bg-warning\\)\\]{background-color:var(--l-pass-bg-warning)}.lumia-scope .bg-\\[var\\(--l-pass-error\\)\\]{background-color:var(--l-pass-error)}.lumia-scope .bg-\\[var\\(--l-pass-fg\\)\\]{background-color:var(--l-pass-fg)}.lumia-scope .bg-\\[var\\(--l-pass-overlay\\)\\]{background-color:var(--l-pass-overlay)}.lumia-scope .bg-\\[var\\(--l-pass-primary\\)\\]{background-color:var(--l-pass-primary)}.lumia-scope .bg-\\[var\\(--l-pass-secondary\\)\\]{background-color:var(--l-pass-secondary)}.lumia-scope .bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-950{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity,1))}.lumia-scope .bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-700{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-800{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-900{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-950{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity,1))}.lumia-scope .bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.lumia-scope .bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.lumia-scope .bg-transparent{background-color:transparent}.lumia-scope .bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.lumia-scope .bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.lumia-scope .bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.lumia-scope .from-purple-100{--tw-gradient-from:#f3e8ff var(--tw-gradient-from-position);--tw-gradient-to:rgba(243,232,255,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .from-purple-500{--tw-gradient-from:#a855f7 var(--tw-gradient-from-position);--tw-gradient-to:rgba(168,85,247,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .from-purple-600{--tw-gradient-from:#9333ea var(--tw-gradient-from-position);--tw-gradient-to:rgba(147,51,234,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .to-blue-100{--tw-gradient-to:#dbeafe var(--tw-gradient-to-position)}.lumia-scope .to-blue-500{--tw-gradient-to:#3b82f6 var(--tw-gradient-to-position)}.lumia-scope .to-blue-600{--tw-gradient-to:#2563eb var(--tw-gradient-to-position)}.lumia-scope .object-contain{-o-object-fit:contain;object-fit:contain}.lumia-scope .object-cover{-o-object-fit:cover;object-fit:cover}.lumia-scope .p-0{padding:0}.lumia-scope .p-1{padding:.25rem}.lumia-scope .p-2{padding:.5rem}.lumia-scope .p-3{padding:.75rem}.lumia-scope .p-4{padding:1rem}.lumia-scope .p-5{padding:1.25rem}.lumia-scope .p-6{padding:1.5rem}.lumia-scope .p-8{padding:2rem}.lumia-scope .p-\\[var\\(--l-pass-gap\\)\\]{padding:var(--l-pass-gap)}.lumia-scope .p-\\[var\\(--l-pass-pd\\)\\]{padding:var(--l-pass-pd)}.lumia-scope .px-0{padding-left:0;padding-right:0}.lumia-scope .px-1{padding-left:.25rem;padding-right:.25rem}.lumia-scope .px-12{padding-left:3rem;padding-right:3rem}.lumia-scope .px-2{padding-left:.5rem;padding-right:.5rem}.lumia-scope .px-2\\.5{padding-left:.625rem;padding-right:.625rem}.lumia-scope .px-3{padding-left:.75rem;padding-right:.75rem}.lumia-scope .px-4{padding-left:1rem;padding-right:1rem}.lumia-scope .px-5{padding-left:1.25rem;padding-right:1.25rem}.lumia-scope .px-6{padding-left:1.5rem;padding-right:1.5rem}.lumia-scope .px-8{padding-left:2rem;padding-right:2rem}.lumia-scope .px-\\[2px\\]{padding-left:2px;padding-right:2px}.lumia-scope .px-\\[var\\(--l-pass-gap\\)\\]{padding-left:var(--l-pass-gap);padding-right:var(--l-pass-gap)}.lumia-scope .px-\\[var\\(--l-pass-pd\\)\\]{padding-left:var(--l-pass-pd);padding-right:var(--l-pass-pd)}.lumia-scope .py-0{padding-top:0;padding-bottom:0}.lumia-scope .py-0\\.5{padding-top:.125rem;padding-bottom:.125rem}.lumia-scope .py-1{padding-top:.25rem;padding-bottom:.25rem}.lumia-scope .py-1\\.5{padding-top:.375rem;padding-bottom:.375rem}.lumia-scope .py-2{padding-top:.5rem;padding-bottom:.5rem}.lumia-scope .py-3{padding-top:.75rem;padding-bottom:.75rem}.lumia-scope .py-4{padding-top:1rem;padding-bottom:1rem}.lumia-scope .py-8{padding-top:2rem;padding-bottom:2rem}.lumia-scope .py-\\[10px\\]{padding-top:10px;padding-bottom:10px}.lumia-scope .py-\\[var\\(--l-pass-pd\\)\\]{padding-top:var(--l-pass-pd);padding-bottom:var(--l-pass-pd)}.lumia-scope .pb-2{padding-bottom:.5rem}.lumia-scope .pb-3{padding-bottom:.75rem}.lumia-scope .pb-4{padding-bottom:1rem}.lumia-scope .pb-5{padding-bottom:1.25rem}.lumia-scope .pb-6{padding-bottom:1.5rem}.lumia-scope .pl-11{padding-left:2.75rem}.lumia-scope .pl-2{padding-left:.5rem}.lumia-scope .pr-10{padding-right:2.5rem}.lumia-scope .pr-16{padding-right:4rem}.lumia-scope .pr-8{padding-right:2rem}.lumia-scope .pt-0{padding-top:0}.lumia-scope .pt-2{padding-top:.5rem}.lumia-scope .pt-3{padding-top:.75rem}.lumia-scope .pt-4{padding-top:1rem}.lumia-scope .pt-5{padding-top:1.25rem}.lumia-scope .text-left{text-align:left}.lumia-scope .text-center{text-align:center}.lumia-scope .text-right{text-align:right}.lumia-scope .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.lumia-scope .font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.lumia-scope .text-2xl{font-size:1.5rem;line-height:2rem}.lumia-scope .text-3xl{font-size:1.875rem;line-height:2.25rem}.lumia-scope .text-4xl{font-size:2.25rem;line-height:2.5rem}.lumia-scope .text-\\[10px\\]{font-size:10px}.lumia-scope .text-\\[14px\\]{font-size:14px}.lumia-scope .text-\\[16px\\]{font-size:16px}.lumia-scope .text-\\[8px\\]{font-size:8px}.lumia-scope .text-base{font-size:1rem;line-height:1.5rem}.lumia-scope .text-lg{font-size:1.125rem;line-height:1.75rem}.lumia-scope .text-sm{font-size:.875rem;line-height:1.25rem}.lumia-scope .text-xl{font-size:1.25rem;line-height:1.75rem}.lumia-scope .text-xs{font-size:.75rem;line-height:1rem}.lumia-scope .font-bold{font-weight:700}.lumia-scope .font-medium{font-weight:500}.lumia-scope .font-normal{font-weight:400}.lumia-scope .font-semibold{font-weight:600}.lumia-scope .uppercase{text-transform:uppercase}.lumia-scope .lowercase{text-transform:lowercase}.lumia-scope .italic{font-style:italic}.lumia-scope .leading-4{line-height:1rem}.lumia-scope .leading-5{line-height:1.25rem}.lumia-scope .leading-6{line-height:1.5rem}.lumia-scope .leading-8{line-height:2rem}.lumia-scope .leading-\\[8px\\]{line-height:8px}.lumia-scope .leading-none{line-height:1}.lumia-scope .leading-relaxed{line-height:1.625}.lumia-scope .leading-tight{line-height:1.25}.lumia-scope .tracking-tight{letter-spacing:-.025em}.lumia-scope .tracking-wide{letter-spacing:.025em}.lumia-scope .text-\\[\\#c3f53c\\]{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .text-\\[var\\(--l-pass-bg-error\\)\\]{color:var(--l-pass-bg-error)}.lumia-scope .text-\\[var\\(--l-pass-bg-success\\)\\]{color:var(--l-pass-bg-success)}.lumia-scope .text-\\[var\\(--l-pass-bg-warning\\)\\]{color:var(--l-pass-bg-warning)}.lumia-scope .text-\\[var\\(--l-pass-error\\)\\]{color:var(--l-pass-error)}.lumia-scope .text-\\[var\\(--l-pass-fg\\)\\]{color:var(--l-pass-fg)}.lumia-scope .text-\\[var\\(--l-pass-fg-inverted\\)\\]{color:var(--l-pass-fg-inverted)}.lumia-scope .text-\\[var\\(--l-pass-fg-muted\\)\\]{color:var(--l-pass-fg-muted)}.lumia-scope .text-\\[var\\(--l-pass-info\\)\\]{color:var(--l-pass-info)}.lumia-scope .text-\\[var\\(--l-pass-success\\)\\]{color:var(--l-pass-success)}.lumia-scope .text-\\[var\\(--l-pass-text-secondary\\)\\]{color:var(--l-pass-text-secondary)}.lumia-scope .text-\\[var\\(--l-pass-warning\\)\\]{color:var(--l-pass-warning)}.lumia-scope .text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity,1))}.lumia-scope .text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity,1))}.lumia-scope .text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity,1))}.lumia-scope .text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.lumia-scope .text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.lumia-scope .text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.lumia-scope .text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.lumia-scope .text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity,1))}.lumia-scope .text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.lumia-scope .text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.lumia-scope .text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.lumia-scope .text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.lumia-scope .text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.lumia-scope .text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.lumia-scope .text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.lumia-scope .text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.lumia-scope .text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.lumia-scope .text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.lumia-scope .text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.lumia-scope .text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.lumia-scope .text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.lumia-scope .text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.lumia-scope .text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity,1))}.lumia-scope .text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.lumia-scope .text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.lumia-scope .text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.lumia-scope .text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.lumia-scope .text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.lumia-scope .text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity,1))}.lumia-scope .text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.lumia-scope .text-orange-100{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity,1))}.lumia-scope .text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity,1))}.lumia-scope .text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity,1))}.lumia-scope .text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.lumia-scope .text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.lumia-scope .text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.lumia-scope .text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.lumia-scope .text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity,1))}.lumia-scope .text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.lumia-scope .text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.lumia-scope .text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.lumia-scope .text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.lumia-scope .text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.lumia-scope .text-red-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity,1))}.lumia-scope .text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.lumia-scope .text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.lumia-scope .text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.lumia-scope .text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.lumia-scope .text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.lumia-scope .text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.lumia-scope .text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.lumia-scope .text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.lumia-scope .text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity,1))}.lumia-scope .text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity,1))}.lumia-scope .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.lumia-scope .text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.lumia-scope .underline{text-decoration-line:underline}.lumia-scope .underline-offset-2{text-underline-offset:2px}.lumia-scope .underline-offset-4{text-underline-offset:4px}.lumia-scope .antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lumia-scope .opacity-0{opacity:0}.lumia-scope .opacity-100{opacity:1}.lumia-scope .opacity-40{opacity:.4}.lumia-scope .opacity-50{opacity:.5}.lumia-scope .opacity-60{opacity:.6}.lumia-scope .shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.lumia-scope .shadow,.lumia-scope .shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.lumia-scope .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.lumia-scope .shadow-lg,.lumia-scope .shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.lumia-scope .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.lumia-scope .shadow-sm,.lumia-scope .shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.lumia-scope .outline-none{outline:2px solid transparent;outline-offset:2px}.lumia-scope .outline{outline-style:solid}.lumia-scope .blur{--tw-blur:blur(8px)}.lumia-scope .blur,.lumia-scope .grayscale{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.lumia-scope .grayscale{--tw-grayscale:grayscale(100%)}.lumia-scope .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.lumia-scope .backdrop-blur{--tw-backdrop-blur:blur(8px)}.lumia-scope .backdrop-blur,.lumia-scope .backdrop-blur-sm{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.lumia-scope .backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.lumia-scope .backdrop-filter{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.lumia-scope .transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-\\[color\\2c box-shadow\\]{transition-property:color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-none{transition-property:none}.lumia-scope .transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .duration-200{transition-duration:.2s}.lumia-scope .ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.lumia-scope .ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.lumia-scope{--l-pass-ff:var(--lumia-passport-ff,-apple-system,BlinkMacSystemFont,"Inter",system-ui,sans-serif);--l-pass-maw:var(--lumia-passport-maw,384px);--l-pass-pd:var(--lumia-passport-pd,12px);--l-pass-gap:var(--lumia-passport-gap,10px);--l-pass-bdrs:var(--lumia-passport-bdrs,20px);--l-pass-el-bdrs:var(--lumia-passport-element-bdrs,10px);--l-pass-backdrop-blur:var(--lumia-passport-backdrop-blur,10px)}.lumia-scope[data-lumia-passport-mode=light]{--l-pass-overlay:var(--lumia-passport-overlay,hsla(0,0%,100%,.8));--l-pass-bg:var(--lumia-passport-bg,#fff);--l-pass-fg:var(--lumia-passport-fg,#000);--l-pass-fg-h:var(--lumia-passport-fg-h,rgba(0,0,0,.6));--l-pass-fg-a:var(--lumia-passport-fg-a,rgba(0,0,0,.4));--l-pass-fg-inverted:var(--lumia-passport-fg-inverted,#fff);--l-pass-fg-muted:var(--lumia-passport-fg-muted,rgba(0,0,0,.6));--l-pass-primary:var(--lumia-passport-primary,#000);--l-pass-primary-h:var(--lumia-passport-primary-h,rgba(0,0,0,.8));--l-pass-primary-a:var(--lumia-passport-primary-a,rgba(0,0,0,.6));--l-pass-secondary:var(--lumia-passport-secondary,#e4e4e4);--l-pass-secondary-h:var(--lumia-passport-secondary-h,hsla(0,0%,89%,.8));--l-pass-secondary-a:var(--lumia-passport-secondary-a,hsla(0,0%,89%,.6));--l-pass-bd:var(--lumia-passport-bd,#ebebeb);--l-pass-bd-intense:var(--lumia-passport-bd-intense,#a9a9a9);--l-pass-shadow-c:var(--lumia-passport-shadow-c,rgba(0,0,0,.1));--l-pass-info:var(--lumia-passport-info,var(--l-pass-fg));--l-pass-bg-info:var(--lumia-passport-bg-info,#e4e4e4);--l-pass-success:var(--lumia-passport-success,var(--l-pass-fg));--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,var(--l-pass-fg));--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#fff);--l-pass-bg-error:var(--lumia-passport-bg-error,#d6204e)}.lumia-scope[data-lumia-passport-mode=dark]{--l-pass-overlay:var(--lumia-passport-overlay,rgba(0,0,0,.8));--l-pass-bg:var(--lumia-passport-bg,#1a1a1a);--l-pass-fg:var(--lumia-passport-fg,#fff);--l-pass-fg-h:var(--lumia-passport-fg-h,hsla(0,0%,100%,.6));--l-pass-fg-a:var(--lumia-passport-fg-a,hsla(0,0%,100%,.4));--l-pass-fg-inverted:var(--lumia-passport-fg-inverted,#000);--l-pass-fg-muted:var(--lumia-passport-fg-muted,hsla(0,0%,100%,.6));--l-pass-primary:var(--lumia-passport-primary,#fff);--l-pass-primary-h:var(--lumia-passport-primary-h,hsla(0,0%,100%,.8));--l-pass-primary-a:var(--lumia-passport-primary-a,hsla(0,0%,100%,.6));--l-pass-secondary:var(--lumia-passport-secondary,#2a2a2a);--l-pass-secondary-h:var(--lumia-passport-secondary-h,rgba(42,42,42,.6));--l-pass-secondary-a:var(--lumia-passport-secondary-a,rgba(42,42,42,.4));--l-pass-bd:var(--lumia-passport-bd,#3a3a3a);--l-pass-bd-intense:var(--lumia-passport-bd-intense,#4a4a4a);--l-pass-shadow-c:var(--lumia-passport-shadow-c,rgba(0,0,0,.1));--l-pass-info:var(--lumia-passport-info,var(--l-pass-fg));--l-pass-bg-info:var(--lumia-passport-bg-info,#2a2a2a);--l-pass-success:var(--lumia-passport-success,var(--l-pass-fg-inverted));--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,var(--l-pass-fg-inverted));--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#fff);--l-pass-bg-error:var(--lumia-passport-bg-error,#d6204e)}.lumia-scope,.lumia-scope *{margin:0;box-sizing:border-box;font-family:var(--l-pass-ff);font-optical-sizing:auto;-webkit-tap-highlight-color:transparent;-moz-tap-highlight-color:transparent;-ms-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lumia-scope button,.lumia-scope h1,.lumia-scope h2,.lumia-scope h3,.lumia-scope h4,.lumia-scope h5,.lumia-scope h6,.lumia-scope input,.lumia-scope p,.lumia-scope select,.lumia-scope textarea{font-family:var(--l-pass-ff)!important;margin:0}.lumia-scope button,.lumia-scope input,.lumia-scope select,.lumia-scope textarea{border-style:solid;outline:none!important;appearance:none!important;-webkit-appearance:none;-moz-appearance:none}.lumia-scope input,.lumia-scope textarea{font-size:16px!important}.lumia-scope .lumia-passport-button{box-shadow:0 4px 20px var(--l-pass-shadow-c),inset 0 0 0 1px var(--l-pass-bd);transition:transform .25s ease}.lumia-scope .lumia-passport-button:hover{transform:scale(1.02)}.lumia-scope .lumia-passport-button:active{transform:scale(1)}@keyframes lumia-mobile-dialog-fade-in{0%{opacity:0;transform:translateY(64px)}to{opacity:1;transform:translateY(0)}}@keyframes lumia-mobile-dialog-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(64px)}}.lumia-scope .animate-mobile-dialog-in{animation:lumia-mobile-dialog-fade-in 375ms ease}.lumia-scope .animate-mobile-dialog-out{animation:lumia-mobile-dialog-fade-out 375ms ease}@keyframes lumia-dialog-fade-in{0%{opacity:0}to{opacity:1}}@keyframes lumia-dialog-fade-out{0%{opacity:1}to{opacity:0}}.lumia-scope .animate-dialog-in{animation:lumia-dialog-fade-in 375ms ease}.lumia-scope .animate-dialog-out{animation:lumia-dialog-fade-out 375ms ease}.lumia-scope .list-scrollbar-y{width:100%;padding-right:var(--l-pass-list-scrollbar-pd-r,0);overflow-y:auto;overflow-x:hidden;max-height:var(--l-pass-scrollbar-mah,300px)}.lumia-scope .list-scrollbar-y::-webkit-scrollbar{width:4px;height:4px}.lumia-scope .list-scrollbar-y::-webkit-scrollbar-thumb{cursor:pointer;width:4px;border-radius:2px;background-color:var(--l-pass-bd)}.lumia-scope .list-scrollbar-y::-webkit-scrollbar-track{margin-top:10px;margin-bottom:10px;background-color:transparent}.lumia-scope .noScrollbars::-webkit-scrollbar{display:none}.lumia-scope div[data-radix-popper-content-wrapper]{z-index:10000!important}.lumia-scope .file\\:mr-\\[var\\(--l-pass-gap\\)\\]::file-selector-button{margin-right:var(--l-pass-gap)}.lumia-scope .file\\:h-12::file-selector-button{height:3rem}.lumia-scope .file\\:cursor-pointer::file-selector-button{cursor:pointer}.lumia-scope .file\\:rounded-\\[var\\(--l-pass-el-bdrs\\)\\]::file-selector-button{border-radius:var(--l-pass-el-bdrs)}.lumia-scope .file\\:border-0::file-selector-button{border-width:0}.lumia-scope .file\\:bg-\\[var\\(--l-pass-primary\\)\\]::file-selector-button{background-color:var(--l-pass-primary)}.lumia-scope .file\\:bg-transparent::file-selector-button{background-color:transparent}.lumia-scope .file\\:px-\\[var\\(--l-pass-pd\\)\\]::file-selector-button{padding-left:var(--l-pass-pd);padding-right:var(--l-pass-pd)}.lumia-scope .file\\:text-\\[16px\\]::file-selector-button{font-size:16px}.lumia-scope .file\\:text-base::file-selector-button{font-size:1rem;line-height:1.5rem}.lumia-scope .file\\:font-medium::file-selector-button{font-weight:500}.lumia-scope .file\\:text-\\[var\\(--l-pass-fg-inverted\\)\\]::file-selector-button{color:var(--l-pass-fg-inverted)}.lumia-scope .placeholder\\:text-\\[var\\(--l-pass-fg-muted\\)\\]::-moz-placeholder{color:var(--l-pass-fg-muted)}.lumia-scope .placeholder\\:text-\\[var\\(--l-pass-fg-muted\\)\\]::placeholder{color:var(--l-pass-fg-muted)}.lumia-scope .focus-within\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:focus-within{background-color:var(--l-pass-secondary-a)}.lumia-scope .focus-within\\:outline-none:focus-within{outline:2px solid transparent;outline-offset:2px}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-bg\\)\\]:hover{background-color:var(--l-pass-bg)}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-primary-h\\)\\]:hover{background-color:var(--l-pass-primary-h)}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-secondary-h\\)\\]:hover{background-color:var(--l-pass-secondary-h)}.lumia-scope .hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-yellow-600:hover{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:text-\\[\\#c3f53c\\]:hover{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-\\[var\\(--l-pass-fg-h\\)\\]:hover{color:var(--l-pass-fg-h)}.lumia-scope .hover\\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.lumia-scope .hover\\:underline:hover{text-decoration-line:underline}.lumia-scope .file\\:hover\\:opacity-90:hover::file-selector-button{opacity:.9}.lumia-scope .focus\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:focus{background-color:var(--l-pass-secondary-a)}.lumia-scope .focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.lumia-scope .focus\\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px}.lumia-scope .focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.lumia-scope .focus-visible\\:ring-0:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus-visible\\:ring-\\[2px\\]:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus-visible\\:ring-transparent:focus-visible{--tw-ring-color:transparent}.lumia-scope .focus-visible\\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px}.lumia-scope .active\\:bg-\\[var\\(--l-pass-bg\\)\\]:active{background-color:var(--l-pass-bg)}.lumia-scope .active\\:bg-\\[var\\(--l-pass-primary-a\\)\\]:active{background-color:var(--l-pass-primary-a)}.lumia-scope .active\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:active{background-color:var(--l-pass-secondary-a)}.lumia-scope .active\\:text-\\[\\#c3f53c\\]:active{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .active\\:text-\\[var\\(--l-pass-fg-a\\)\\]:active{color:var(--l-pass-fg-a)}.lumia-scope .file\\:active\\:opacity-80:active::file-selector-button{opacity:.8}.lumia-scope .disabled\\:cursor-default:disabled{cursor:default}.lumia-scope .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.lumia-scope .disabled\\:opacity-50:disabled{opacity:.5}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-bg\\)\\]:hover:disabled{background-color:var(--l-pass-bg)}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-primary\\)\\]:hover:disabled{background-color:var(--l-pass-primary)}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-secondary\\)\\]:hover:disabled{background-color:var(--l-pass-secondary)}.lumia-scope .disabled\\:hover\\:text-\\[var\\(--l-pass-fg\\)\\]:hover:disabled{color:var(--l-pass-fg)}.lumia-scope .disabled\\:active\\:bg-\\[var\\(--l-pass-bg\\)\\]:active:disabled{background-color:var(--l-pass-bg)}.lumia-scope .disabled\\:active\\:bg-\\[var\\(--l-pass-primary\\)\\]:active:disabled{background-color:var(--l-pass-primary)}.lumia-scope .disabled\\:active\\:text-\\[var\\(--l-pass-fg\\)\\]:active:disabled{color:var(--l-pass-fg)}.lumia-scope :is(.group:hover .group-hover\\:opacity-100){opacity:1}.lumia-scope :is(.group:hover .group-hover\\:opacity-60){opacity:.6}.lumia-scope .data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.lumia-scope .data-\\[size\\=default\\]\\:h-12[data-size=default]{height:3rem}.lumia-scope .data-\\[size\\=sm\\]\\:h-10[data-size=sm]{height:2.5rem}.lumia-scope .data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.lumia-scope .data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom],.lumia-scope .data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.lumia-scope .data-\\[side\\=right\\]\\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.lumia-scope .data-\\[side\\=right\\]\\:translate-x-1[data-side=right],.lumia-scope .data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.lumia-scope .data-\\[state\\=checked\\]\\:border-\\[var\\(--l-pass-bd-intense\\)\\][data-state=checked]{border-color:var(--l-pass-bd-intense)}.lumia-scope .data-\\[state\\=checked\\]\\:bg-\\[var\\(--l-pass-secondary\\)\\][data-state=checked]{background-color:var(--l-pass-secondary)}.lumia-scope .data-\\[state\\=checked\\]\\:text-\\[var\\(--l-pass-fg\\)\\][data-state=checked]{color:var(--l-pass-fg)}.lumia-scope .data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1[data-slot=select-value]>*){overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:flex[data-slot=select-value]>*){display:flex}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:items-center[data-slot=select-value]>*){align-items:center}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:gap-\\[var\\(--l-pass-gap\\)\\][data-slot=select-value]>*){gap:var(--l-pass-gap)}@media (min-width:640px){.lumia-scope .sm\\:flex-row{flex-direction:row}.lumia-scope .sm\\:justify-end{justify-content:flex-end}.lumia-scope :is(.sm\\:space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope .sm\\:text-left{text-align:left}}@media (min-width:768px){.lumia-scope .md\\:h-8{height:2rem}.lumia-scope .md\\:w-8{width:2rem}.lumia-scope .md\\:gap-\\[var\\(--l-pass-gap\\)\\]{gap:var(--l-pass-gap)}.lumia-scope .md\\:py-1{padding-top:.25rem;padding-bottom:.25rem}}@media (prefers-color-scheme:dark){.lumia-scope .dark\\:bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-yellow-500:hover{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}}.lumia-scope :is(.\\[\\&_svg\\:not\\(\\[class\\*\\=\\\'size-\\\'\\]\\)\\]\\:size-4 svg:not([class*=size-])){width:1rem;height:1rem}.lumia-scope :is(.\\[\\&_svg\\]\\:pointer-events-none svg){pointer-events:none}.lumia-scope :is(.\\[\\&_svg\\]\\:shrink-0 svg){flex-shrink:0}';
|
|
4478
4478
|
|
|
4479
4479
|
// src/context/LumiaPassportContext.tsx
|
|
4480
4480
|
init_lumiaPassport();
|
|
@@ -4485,13 +4485,13 @@ import {
|
|
|
4485
4485
|
createContext,
|
|
4486
4486
|
useCallback as useCallback22,
|
|
4487
4487
|
useContext,
|
|
4488
|
-
useEffect as
|
|
4488
|
+
useEffect as useEffect33,
|
|
4489
4489
|
useMemo as useMemo5,
|
|
4490
|
-
useRef as
|
|
4490
|
+
useRef as useRef13
|
|
4491
4491
|
} from "react";
|
|
4492
4492
|
|
|
4493
4493
|
// src/context/LumiaPassportSessionContext.tsx
|
|
4494
|
-
import { Fragment as
|
|
4494
|
+
import { Fragment as Fragment27 } from "react";
|
|
4495
4495
|
import { create as create6 } from "zustand";
|
|
4496
4496
|
|
|
4497
4497
|
// src/internal/components/BalanceFeedProvider/BalanceFeedProvider.tsx
|
|
@@ -4510,7 +4510,7 @@ import { Key as Key2, Mail as Mail2, Wallet2 as Wallet22 } from "lucide-react";
|
|
|
4510
4510
|
var LOCAL_COLOR_MODE_KEY = "lumia-passport-theme";
|
|
4511
4511
|
var DEFAULT_AUTH_MENU_HEIGHT = 253;
|
|
4512
4512
|
var DEFAULT_MAIN_MENU_HEIGHT = 90;
|
|
4513
|
-
var DEFAULT_SETTINGS_MENU_HEIGHT =
|
|
4513
|
+
var DEFAULT_SETTINGS_MENU_HEIGHT = 404;
|
|
4514
4514
|
var MAX_CONTENT_HEIGHT = 640;
|
|
4515
4515
|
var MAIN_DIALOG_ANIMATION_SPEED = 375;
|
|
4516
4516
|
var Y_ANIMATION_SETUP = { duration: 0.15, ease: "easeInOut", height: { duration: 0.375 } };
|
|
@@ -4670,7 +4670,7 @@ function BalanceFeedProvider() {
|
|
|
4670
4670
|
|
|
4671
4671
|
// src/internal/components/Dialog/LumiaPassportDialog.tsx
|
|
4672
4672
|
import { AnimatePresence as AnimatePresence3, motion as motion3 } from "framer-motion";
|
|
4673
|
-
import { useEffect as
|
|
4673
|
+
import { useEffect as useEffect31 } from "react";
|
|
4674
4674
|
|
|
4675
4675
|
// src/internal/components/Footer/Footer.tsx
|
|
4676
4676
|
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
|
@@ -4989,7 +4989,7 @@ function LumiaIcon(props) {
|
|
|
4989
4989
|
|
|
4990
4990
|
// src/internal/components/Header/Header.tsx
|
|
4991
4991
|
import { useQuery as useQuery3 } from "@tanstack/react-query";
|
|
4992
|
-
import { Copy } from "lucide-react";
|
|
4992
|
+
import { Copy, Loader as Loader3 } from "lucide-react";
|
|
4993
4993
|
import { useState as useState3 } from "react";
|
|
4994
4994
|
|
|
4995
4995
|
// src/internal/assets/PositiveIcon.tsx
|
|
@@ -5344,23 +5344,20 @@ function KYCStatus() {
|
|
|
5344
5344
|
}
|
|
5345
5345
|
|
|
5346
5346
|
// src/internal/components/Header/Header.tsx
|
|
5347
|
-
import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
5347
|
+
import { Fragment as Fragment3, jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
5348
5348
|
function formatAddress(addr) {
|
|
5349
5349
|
if (!addr) return "";
|
|
5350
5350
|
return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
|
|
5351
5351
|
}
|
|
5352
5352
|
function Header() {
|
|
5353
|
-
const
|
|
5354
|
-
config: { current: config }
|
|
5355
|
-
} = useLumiaPassportConfig();
|
|
5353
|
+
const config = useLumiaPassportConfig().config;
|
|
5356
5354
|
const address = useLumiaPassportSession((st) => st.address);
|
|
5357
5355
|
const [copied, setCopied] = useState3(false);
|
|
5358
|
-
const { data: profile } = useQuery3({
|
|
5359
|
-
|
|
5360
|
-
queryFn: getUserProfile,
|
|
5356
|
+
const { data: profile, isLoading: isProfileLoading } = useQuery3({
|
|
5357
|
+
retry: false,
|
|
5361
5358
|
enabled: !!address,
|
|
5362
|
-
|
|
5363
|
-
|
|
5359
|
+
queryKey: [QUERY_KEYS.userProfile, address],
|
|
5360
|
+
queryFn: getUserProfile
|
|
5364
5361
|
});
|
|
5365
5362
|
const avatar = profile?.avatar || jwtTokenManager2.getAvatar();
|
|
5366
5363
|
const displayName = profile?.nicknameDisplay || profile?.displayName || jwtTokenManager2.getDisplayName();
|
|
@@ -5380,20 +5377,23 @@ function Header() {
|
|
|
5380
5377
|
style: { width: "calc(100% - 48px - var(--l-pass-gap))" },
|
|
5381
5378
|
className: "flex-1 flex flex-col justify-center gap-1",
|
|
5382
5379
|
children: [
|
|
5383
|
-
/* @__PURE__ */
|
|
5384
|
-
|
|
5385
|
-
|
|
5386
|
-
|
|
5387
|
-
|
|
5388
|
-
|
|
5389
|
-
|
|
5390
|
-
|
|
5391
|
-
|
|
5392
|
-
|
|
5393
|
-
|
|
5394
|
-
|
|
5395
|
-
|
|
5396
|
-
|
|
5380
|
+
isProfileLoading && /* @__PURE__ */ jsx12(Loader3, { className: "w-4 h-4 animate-spin" }),
|
|
5381
|
+
!!address && !isProfileLoading && !!profile && /* @__PURE__ */ jsxs11(Fragment3, { children: [
|
|
5382
|
+
/* @__PURE__ */ jsxs11("div", { className: "w-full flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
5383
|
+
/* @__PURE__ */ jsx12(
|
|
5384
|
+
"span",
|
|
5385
|
+
{
|
|
5386
|
+
className: cn(
|
|
5387
|
+
"text-[14px] leading-4 truncate max-w-[144px] font-medium",
|
|
5388
|
+
"text-ellipsis overflow-hidden whitespace-nowrap"
|
|
5389
|
+
),
|
|
5390
|
+
children: displayName || config.current?.ui?.title || "LumiaPassport"
|
|
5391
|
+
}
|
|
5392
|
+
),
|
|
5393
|
+
/* @__PURE__ */ jsx12(KYCStatus, {})
|
|
5394
|
+
] }),
|
|
5395
|
+
/* @__PURE__ */ jsx12(BalanceView, {})
|
|
5396
|
+
] })
|
|
5397
5397
|
]
|
|
5398
5398
|
}
|
|
5399
5399
|
)
|
|
@@ -5453,13 +5453,11 @@ function Header() {
|
|
|
5453
5453
|
}
|
|
5454
5454
|
);
|
|
5455
5455
|
}
|
|
5456
|
-
{
|
|
5457
|
-
}
|
|
5458
5456
|
|
|
5459
5457
|
// package.json
|
|
5460
5458
|
var package_default = {
|
|
5461
5459
|
name: "@lumiapassport/ui-kit",
|
|
5462
|
-
version: "1.14.
|
|
5460
|
+
version: "1.14.25",
|
|
5463
5461
|
description: "React UI components and hooks for Lumia Passport authentication and Account Abstraction",
|
|
5464
5462
|
type: "module",
|
|
5465
5463
|
main: "./dist/index.cjs",
|
|
@@ -5898,6 +5896,7 @@ import { useEffect as useEffect5 } from "react";
|
|
|
5898
5896
|
init_vaultClient();
|
|
5899
5897
|
function useBackupStatusChanges() {
|
|
5900
5898
|
const setHasServerVault = useLumiaPassportSession((st) => st.setHasServerVault);
|
|
5899
|
+
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
5901
5900
|
const { mutate: handleBackupStatusChanged } = useMutation2({
|
|
5902
5901
|
mutationFn: async (event) => {
|
|
5903
5902
|
const customEvent = event;
|
|
@@ -5909,6 +5908,7 @@ function useBackupStatusChanges() {
|
|
|
5909
5908
|
setHasServerVault(true);
|
|
5910
5909
|
} else {
|
|
5911
5910
|
setHasServerVault(false);
|
|
5911
|
+
setPage("keysare-backup" /* KEYSARE_BACKUP */);
|
|
5912
5912
|
console.warn("[BACKUP STATUS] No recovery data found in vault, marking as no-server-vault");
|
|
5913
5913
|
}
|
|
5914
5914
|
},
|
|
@@ -5925,68 +5925,9 @@ function useBackupStatusChanges() {
|
|
|
5925
5925
|
}, []);
|
|
5926
5926
|
}
|
|
5927
5927
|
|
|
5928
|
-
// src/internal/hooks/useBackupWarning.ts
|
|
5929
|
-
import { useEffect as useEffect6, useRef as useRef3 } from "react";
|
|
5930
|
-
var WARNING_TIMEOUT_MS = 4500;
|
|
5931
|
-
function useBackupWarning() {
|
|
5932
|
-
const address = useLumiaPassportSession((st) => st.address);
|
|
5933
|
-
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
5934
|
-
const page = useLayoutDataStore((st) => st.page);
|
|
5935
|
-
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
5936
|
-
const timeoutRef = useRef3(null);
|
|
5937
|
-
const touchedRef = useRef3(false);
|
|
5938
|
-
useEffect6(() => {
|
|
5939
|
-
if (touchedRef.current) return;
|
|
5940
|
-
if (timeoutRef.current) {
|
|
5941
|
-
clearTimeout(timeoutRef.current);
|
|
5942
|
-
timeoutRef.current = null;
|
|
5943
|
-
}
|
|
5944
|
-
if (!address || !!hasServerVault || page === "keysare-backup" /* KEYSARE_BACKUP */) return;
|
|
5945
|
-
timeoutRef.current = setTimeout(() => {
|
|
5946
|
-
setPage("keysare-backup" /* KEYSARE_BACKUP */);
|
|
5947
|
-
touchedRef.current = true;
|
|
5948
|
-
timeoutRef.current = null;
|
|
5949
|
-
}, WARNING_TIMEOUT_MS);
|
|
5950
|
-
return () => {
|
|
5951
|
-
if (timeoutRef.current) {
|
|
5952
|
-
clearTimeout(timeoutRef.current);
|
|
5953
|
-
timeoutRef.current = null;
|
|
5954
|
-
}
|
|
5955
|
-
};
|
|
5956
|
-
}, [address, page, hasServerVault, setPage]);
|
|
5957
|
-
return null;
|
|
5958
|
-
}
|
|
5959
|
-
|
|
5960
|
-
// src/internal/hooks/useCheckVaultStatus.ts
|
|
5961
|
-
import { useMutation as useMutation3 } from "@tanstack/react-query";
|
|
5962
|
-
import { useEffect as useEffect7 } from "react";
|
|
5963
|
-
init_vaultClient();
|
|
5964
|
-
function useCheckVaultStatus() {
|
|
5965
|
-
const address = useLumiaPassportSession((st) => st.address);
|
|
5966
|
-
const setHasServerVault = useLumiaPassportSession((st) => st.setHasServerVault);
|
|
5967
|
-
const { mutate: checkVaultStatus } = useMutation3({
|
|
5968
|
-
mutationFn: async () => {
|
|
5969
|
-
const stats = await getShareRecoveryStats();
|
|
5970
|
-
const hasRecoveryData = stats && (stats.created || stats.devices && stats.devices.length > 0);
|
|
5971
|
-
return !!hasRecoveryData;
|
|
5972
|
-
},
|
|
5973
|
-
onSuccess: (hasRecoveryData) => {
|
|
5974
|
-
setHasServerVault(hasRecoveryData);
|
|
5975
|
-
},
|
|
5976
|
-
onError: (error) => {
|
|
5977
|
-
console.warn("[UI-KIT] Failed to check vault status:", error);
|
|
5978
|
-
setHasServerVault(false);
|
|
5979
|
-
}
|
|
5980
|
-
});
|
|
5981
|
-
useEffect7(() => {
|
|
5982
|
-
if (!address) return setHasServerVault(false);
|
|
5983
|
-
checkVaultStatus();
|
|
5984
|
-
}, [address, checkVaultStatus]);
|
|
5985
|
-
}
|
|
5986
|
-
|
|
5987
5928
|
// src/internal/hooks/useDetectMaxScrollHeight.ts
|
|
5988
5929
|
import { debounce } from "lodash-es";
|
|
5989
|
-
import { useCallback as useCallback3, useEffect as
|
|
5930
|
+
import { useCallback as useCallback3, useEffect as useEffect6 } from "react";
|
|
5990
5931
|
var DEBOUNCE_DELAY = 50;
|
|
5991
5932
|
function useDetectMaxScrollHeight() {
|
|
5992
5933
|
const page = useLayoutDataStore((state) => state.page);
|
|
@@ -6001,7 +5942,7 @@ function useDetectMaxScrollHeight() {
|
|
|
6001
5942
|
}, DEBOUNCE_DELAY),
|
|
6002
5943
|
[page, setMaxScrollHeight, setIsMobileView]
|
|
6003
5944
|
);
|
|
6004
|
-
|
|
5945
|
+
useEffect6(() => {
|
|
6005
5946
|
const obs = new ResizeObserver(([entry]) => onResize(entry.contentRect));
|
|
6006
5947
|
const doc = window.document.getElementsByTagName("html")[0];
|
|
6007
5948
|
if (doc) obs.observe(doc);
|
|
@@ -6010,20 +5951,20 @@ function useDetectMaxScrollHeight() {
|
|
|
6010
5951
|
}
|
|
6011
5952
|
|
|
6012
5953
|
// src/internal/hooks/usePageMapper.tsx
|
|
6013
|
-
import { useCallback as useCallback19, useEffect as
|
|
5954
|
+
import { useCallback as useCallback19, useEffect as useEffect28 } from "react";
|
|
6014
5955
|
|
|
6015
5956
|
// src/internal/components/AuthMenu/AuthMenu.tsx
|
|
6016
5957
|
import { AnimatePresence, motion } from "framer-motion";
|
|
6017
|
-
import { AlertTriangle as AlertTriangle2, Loader as
|
|
6018
|
-
import { useEffect as
|
|
5958
|
+
import { AlertTriangle as AlertTriangle2, Loader as Loader6 } from "lucide-react";
|
|
5959
|
+
import { useEffect as useEffect9, useMemo, useRef as useRef8, useState as useState6 } from "react";
|
|
6019
5960
|
|
|
6020
5961
|
// src/internal/components/Expandable/hooks/useExpandable.ts
|
|
6021
|
-
import { useCallback as useCallback4, useEffect as
|
|
5962
|
+
import { useCallback as useCallback4, useEffect as useEffect7, useRef as useRef3 } from "react";
|
|
6022
5963
|
var useExpandable = (props) => {
|
|
6023
5964
|
const { isExpanded = false, children, initHeight = 0, minHeight = 0 } = props;
|
|
6024
|
-
const expandableRef =
|
|
6025
|
-
const contentRef =
|
|
6026
|
-
|
|
5965
|
+
const expandableRef = useRef3(null);
|
|
5966
|
+
const contentRef = useRef3(null);
|
|
5967
|
+
useEffect7(() => {
|
|
6027
5968
|
if (!expandableRef.current) return;
|
|
6028
5969
|
expandableRef.current.style.setProperty("--ifo-basic-expandable-h", `${initHeight}px )`);
|
|
6029
5970
|
}, []);
|
|
@@ -6038,7 +5979,7 @@ var useExpandable = (props) => {
|
|
|
6038
5979
|
// ON_RESIZE_DELEAY),
|
|
6039
5980
|
[minHeight]
|
|
6040
5981
|
);
|
|
6041
|
-
|
|
5982
|
+
useEffect7(() => {
|
|
6042
5983
|
if (!contentRef.current || !expandableRef.current) return;
|
|
6043
5984
|
const obs = new ResizeObserver(() => setExpandableHeight(isExpanded));
|
|
6044
5985
|
obs.observe(expandableRef.current);
|
|
@@ -6199,7 +6140,7 @@ function PasskeyAddIcon(props) {
|
|
|
6199
6140
|
|
|
6200
6141
|
// src/internal/components/AuthMenu/PassKeyStep.tsx
|
|
6201
6142
|
init_auth();
|
|
6202
|
-
import { Fragment as
|
|
6143
|
+
import { Fragment as Fragment4, jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
6203
6144
|
function normalizeWebAuthnError(err) {
|
|
6204
6145
|
const raw = err?.message || String(err || "");
|
|
6205
6146
|
const lower = raw.toLowerCase();
|
|
@@ -6392,7 +6333,7 @@ function PassKeyStep(props) {
|
|
|
6392
6333
|
/* @__PURE__ */ jsx19(Key3, { className: "w-4 h-4" }),
|
|
6393
6334
|
"Sign in with existing Passkey"
|
|
6394
6335
|
] }),
|
|
6395
|
-
config.passkey.showCreateButton && /* @__PURE__ */ jsxs15(
|
|
6336
|
+
config.passkey.showCreateButton && /* @__PURE__ */ jsxs15(Fragment4, { children: [
|
|
6396
6337
|
/* @__PURE__ */ jsx19("span", { className: "block w-full text-center text-sm text-[var(--l-pass-fg-muted)]", children: "Don't have a passkey?" }),
|
|
6397
6338
|
/* @__PURE__ */ jsxs15(Button, { variant: "outline", size: "large", className: "w-full", onClick: onPasskeyRegister, disabled: isLoading, children: [
|
|
6398
6339
|
/* @__PURE__ */ jsx19(PasskeyAddIcon, { className: "w-4 h-4" }),
|
|
@@ -6406,21 +6347,21 @@ function PassKeyStep(props) {
|
|
|
6406
6347
|
|
|
6407
6348
|
// src/internal/components/AuthMenu/SignInStep/SignInStep.tsx
|
|
6408
6349
|
import { UserCircle } from "lucide-react";
|
|
6409
|
-
import { Fragment as
|
|
6350
|
+
import { Fragment as Fragment5 } from "react";
|
|
6410
6351
|
|
|
6411
6352
|
// src/internal/components/AuthMenu/SignInStep/Email.tsx
|
|
6412
6353
|
init_lumiaPassport();
|
|
6413
6354
|
init_projectId();
|
|
6414
|
-
import { useMutation as
|
|
6415
|
-
import { ChevronRight, Loader as
|
|
6416
|
-
import { useRef as
|
|
6355
|
+
import { useMutation as useMutation3 } from "@tanstack/react-query";
|
|
6356
|
+
import { ChevronRight, Loader as Loader4, Mail as Mail3 } from "lucide-react";
|
|
6357
|
+
import { useRef as useRef5 } from "react";
|
|
6417
6358
|
|
|
6418
6359
|
// src/internal/components/ui/input.tsx
|
|
6419
|
-
import React, { useImperativeHandle, useRef as
|
|
6360
|
+
import React, { useImperativeHandle, useRef as useRef4 } from "react";
|
|
6420
6361
|
import { jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
6421
6362
|
var Input = React.forwardRef((props, ref) => {
|
|
6422
6363
|
const { className, disabled, error, Icon: Icon2, element, ...inputProps } = props;
|
|
6423
|
-
const internalRef =
|
|
6364
|
+
const internalRef = useRef4(null);
|
|
6424
6365
|
useImperativeHandle(ref, () => internalRef.current);
|
|
6425
6366
|
return /* @__PURE__ */ jsxs16("div", { className: cn("w-full flex flex-col gap-1", className), children: [
|
|
6426
6367
|
/* @__PURE__ */ jsxs16(
|
|
@@ -6468,11 +6409,11 @@ Input.displayName = "Input";
|
|
|
6468
6409
|
import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
6469
6410
|
function Email() {
|
|
6470
6411
|
const { config, callbacks } = useLumiaPassportConfig();
|
|
6471
|
-
const buttonRef =
|
|
6412
|
+
const buttonRef = useRef5(null);
|
|
6472
6413
|
const isLoading = useLumiaPassportSession((st) => st.isLoading);
|
|
6473
6414
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
6474
6415
|
const { email, alert: alert2, setEmail, setExpiresIn, setStep, setAlert } = useAuthStore();
|
|
6475
|
-
const { mutate: onSendVerificationCode } =
|
|
6416
|
+
const { mutate: onSendVerificationCode } = useMutation3({
|
|
6476
6417
|
mutationFn: async (mail) => {
|
|
6477
6418
|
const isEmailValid = mail.length !== 0 && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(mail);
|
|
6478
6419
|
if (!isEmailValid) {
|
|
@@ -6559,7 +6500,7 @@ function Email() {
|
|
|
6559
6500
|
size: "large",
|
|
6560
6501
|
disabled: !email || isLoading,
|
|
6561
6502
|
onClick: () => onSendVerificationCode(email),
|
|
6562
|
-
children: isLoading ? /* @__PURE__ */ jsx21(
|
|
6503
|
+
children: isLoading ? /* @__PURE__ */ jsx21(Loader4, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ jsx21(ChevronRight, { className: "w-4 h-4" })
|
|
6563
6504
|
}
|
|
6564
6505
|
)
|
|
6565
6506
|
]
|
|
@@ -7043,7 +6984,7 @@ function SignInStep(props) {
|
|
|
7043
6984
|
/* @__PURE__ */ jsx24(UserCircle, { className: "w-6 h-6" }),
|
|
7044
6985
|
/* @__PURE__ */ jsx24("span", { className: "font-bold text-xl leading-6", children: "Sign In" })
|
|
7045
6986
|
] }),
|
|
7046
|
-
/* @__PURE__ */ jsx24("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: enabledSigninMethods.map((kind, idx) => /* @__PURE__ */ jsxs20(
|
|
6987
|
+
/* @__PURE__ */ jsx24("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: enabledSigninMethods.map((kind, idx) => /* @__PURE__ */ jsxs20(Fragment5, { children: [
|
|
7047
6988
|
idx > 0 && /* @__PURE__ */ jsxs20("div", { className: "flex items-center h-4", children: [
|
|
7048
6989
|
/* @__PURE__ */ jsx24("div", { style: { borderTop: "1px solid var(--l-pass-bd)" }, className: "flex-1" }),
|
|
7049
6990
|
/* @__PURE__ */ jsx24("div", { className: "text-[10px] px-2 flex-none leading-4", children: "Or sign in using" }),
|
|
@@ -7070,11 +7011,11 @@ function SignInStep(props) {
|
|
|
7070
7011
|
// src/internal/components/AuthMenu/useAuthMenuHanders.ts
|
|
7071
7012
|
init_auth();
|
|
7072
7013
|
import { useQueryClient as useQueryClient2 } from "@tanstack/react-query";
|
|
7073
|
-
import { useCallback as useCallback7, useRef as
|
|
7014
|
+
import { useCallback as useCallback7, useRef as useRef6, useState as useState4 } from "react";
|
|
7074
7015
|
function useAuthMenuHandlers() {
|
|
7075
7016
|
const { config, callbacks } = useLumiaPassportConfig();
|
|
7076
7017
|
const qc = useQueryClient2();
|
|
7077
|
-
const pendingLoginResponseRef =
|
|
7018
|
+
const pendingLoginResponseRef = useRef6(null);
|
|
7078
7019
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
7079
7020
|
const setIsDialogForced = useLayoutStore((st) => st.setIsDialogForced);
|
|
7080
7021
|
const [telegramCleanup, setTelegramCleanup] = useState4(null);
|
|
@@ -7159,6 +7100,7 @@ function useAuthMenuHandlers() {
|
|
|
7159
7100
|
callbacks?.onLumiaPassportAccount?.({ userId, address: addr, session: sess, hasKeyshare: hasServerKeyshare });
|
|
7160
7101
|
} catch {
|
|
7161
7102
|
}
|
|
7103
|
+
let hasKeyshareVaultBackup = false;
|
|
7162
7104
|
try {
|
|
7163
7105
|
const { checkServerBackupAvailability: checkServerBackupAvailability2, updateBackupStatus: updateBackupStatus2, getShareRecoveryStats: getShareRecoveryStats2 } = await Promise.resolve().then(() => (init_vaultClient(), vaultClient_exports));
|
|
7164
7106
|
const result = await checkServerBackupAvailability2();
|
|
@@ -7168,8 +7110,8 @@ function useAuthMenuHandlers() {
|
|
|
7168
7110
|
updateBackupStatus2(userId, "server", { enabled: false, error: "No server vault found" });
|
|
7169
7111
|
}
|
|
7170
7112
|
const stats = await getShareRecoveryStats2();
|
|
7171
|
-
|
|
7172
|
-
setHasServerVault(!!
|
|
7113
|
+
hasKeyshareVaultBackup = !!stats && (!!stats.created || !!stats.devices && stats.devices.length > 0);
|
|
7114
|
+
setHasServerVault(!!hasKeyshareVaultBackup);
|
|
7173
7115
|
qc.refetchQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY, addr] });
|
|
7174
7116
|
} catch (e) {
|
|
7175
7117
|
console.warn("[UI-KIT] Vault status check failed:", e);
|
|
@@ -7177,13 +7119,17 @@ function useAuthMenuHandlers() {
|
|
|
7177
7119
|
setSession(sess);
|
|
7178
7120
|
setAddress(addr);
|
|
7179
7121
|
setStatus("ready");
|
|
7180
|
-
|
|
7181
|
-
|
|
7182
|
-
|
|
7183
|
-
|
|
7184
|
-
|
|
7185
|
-
|
|
7186
|
-
|
|
7122
|
+
setTimeout(() => {
|
|
7123
|
+
if (!!jwt?.isNewUser || !hasKeyshareVaultBackup) {
|
|
7124
|
+
if (!!jwt?.isNewUser) console.log("[AuthMenu] New user detected - forcing backup flow");
|
|
7125
|
+
if (!hasKeyshareVaultBackup) console.log("[AuthMenu] No recovery data found - forcing backup flow");
|
|
7126
|
+
setIsDialogForced(true);
|
|
7127
|
+
setPage("keysare-backup" /* KEYSARE_BACKUP */);
|
|
7128
|
+
} else {
|
|
7129
|
+
setIsDialogForced(false);
|
|
7130
|
+
setPage(null);
|
|
7131
|
+
}
|
|
7132
|
+
}, 100);
|
|
7187
7133
|
} catch (error) {
|
|
7188
7134
|
if (error?.code === "KEYSHARE_RECOVERY_NEEDED") {
|
|
7189
7135
|
console.warn("[AuthMenu] Keyshare recovery needed for user:", userId);
|
|
@@ -7191,7 +7137,9 @@ function useAuthMenuHandlers() {
|
|
|
7191
7137
|
setError(null);
|
|
7192
7138
|
setRecoveryUserId(userId);
|
|
7193
7139
|
setStatus("recovery_needed");
|
|
7194
|
-
setTimeout(() =>
|
|
7140
|
+
setTimeout(() => {
|
|
7141
|
+
setPage("keyshare-restore" /* KEYSHARE_RESTORE */);
|
|
7142
|
+
}, 100);
|
|
7195
7143
|
} else {
|
|
7196
7144
|
pendingLoginResponseRef.current = null;
|
|
7197
7145
|
await jwtTokenManager2.clearTokens();
|
|
@@ -7207,7 +7155,6 @@ function useAuthMenuHandlers() {
|
|
|
7207
7155
|
setIsLoading(false);
|
|
7208
7156
|
}
|
|
7209
7157
|
}, [
|
|
7210
|
-
// config.projectId,
|
|
7211
7158
|
qc,
|
|
7212
7159
|
callbacks,
|
|
7213
7160
|
setPage,
|
|
@@ -7238,8 +7185,8 @@ function useAuthMenuHandlers() {
|
|
|
7238
7185
|
|
|
7239
7186
|
// src/internal/components/AuthMenu/VerifyStep/VerifyStep.tsx
|
|
7240
7187
|
init_lumiaPassport();
|
|
7241
|
-
import { useMutation as
|
|
7242
|
-
import { ArrowLeft as ArrowLeft4, Loader as
|
|
7188
|
+
import { useMutation as useMutation4 } from "@tanstack/react-query";
|
|
7189
|
+
import { ArrowLeft as ArrowLeft4, Loader as Loader5 } from "lucide-react";
|
|
7243
7190
|
|
|
7244
7191
|
// src/internal/assets/OtpIcon.tsx
|
|
7245
7192
|
import { jsx as jsx25 } from "react/jsx-runtime";
|
|
@@ -7258,21 +7205,21 @@ function OtpIcon(props) {
|
|
|
7258
7205
|
init_projectId();
|
|
7259
7206
|
|
|
7260
7207
|
// src/internal/components/AuthMenu/VerifyStep/VerificationCodeInput.tsx
|
|
7261
|
-
import { useEffect as
|
|
7208
|
+
import { useEffect as useEffect8, useRef as useRef7, useState as useState5 } from "react";
|
|
7262
7209
|
import { jsx as jsx26, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
7263
7210
|
var VerificationCodeInput = (props) => {
|
|
7264
7211
|
const { onVerifyCode, onResendCode, isLoading, expiresIn } = props;
|
|
7265
7212
|
const setAlert = useAuthStore((st) => st.setAlert);
|
|
7266
7213
|
const [timeLeft, setTimeLeft] = useState5(expiresIn);
|
|
7267
|
-
|
|
7268
|
-
|
|
7214
|
+
useEffect8(() => setTimeLeft(expiresIn), [expiresIn]);
|
|
7215
|
+
useEffect8(() => {
|
|
7269
7216
|
const t = setInterval(() => setTimeLeft((secs) => secs > 0 ? secs - 1 : 0), 1e3);
|
|
7270
7217
|
return () => clearInterval(t);
|
|
7271
7218
|
}, []);
|
|
7272
|
-
const lastSubmittedRef =
|
|
7273
|
-
const inputsRef =
|
|
7219
|
+
const lastSubmittedRef = useRef7(null);
|
|
7220
|
+
const inputsRef = useRef7([]);
|
|
7274
7221
|
const [digits, setDigits] = useState5(["", "", "", "", "", ""]);
|
|
7275
|
-
|
|
7222
|
+
useEffect8(() => {
|
|
7276
7223
|
const code = digits.join("");
|
|
7277
7224
|
if (code.length === 6 && digits.every((d) => d !== "") && !isLoading) {
|
|
7278
7225
|
if (lastSubmittedRef.current !== code) {
|
|
@@ -7281,7 +7228,7 @@ var VerificationCodeInput = (props) => {
|
|
|
7281
7228
|
}
|
|
7282
7229
|
}
|
|
7283
7230
|
}, [digits, isLoading, onVerifyCode]);
|
|
7284
|
-
|
|
7231
|
+
useEffect8(() => {
|
|
7285
7232
|
const t = setTimeout(() => {
|
|
7286
7233
|
inputsRef.current[0]?.focus();
|
|
7287
7234
|
}, 0);
|
|
@@ -7393,10 +7340,9 @@ import { jsx as jsx27, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
|
7393
7340
|
function VerifyStep(props) {
|
|
7394
7341
|
const { pendingLoginResponseRef, goBackToSignIn, onAuthSuccess } = props;
|
|
7395
7342
|
const { callbacks } = useLumiaPassportConfig();
|
|
7396
|
-
const
|
|
7343
|
+
const recoveryUserId = useLumiaPassportSession((st) => st.recoveryUserId);
|
|
7397
7344
|
const isSessionLoading = useLumiaPassportSession((st) => st.isLoading);
|
|
7398
7345
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
7399
|
-
const recoveryUserId = useLumiaPassportSession((st) => st.recoveryUserId);
|
|
7400
7346
|
const {
|
|
7401
7347
|
email,
|
|
7402
7348
|
expiresIn,
|
|
@@ -7406,7 +7352,7 @@ function VerifyStep(props) {
|
|
|
7406
7352
|
setExpiresIn,
|
|
7407
7353
|
setAlert
|
|
7408
7354
|
} = useAuthStore();
|
|
7409
|
-
const { mutate: onVerifyCode, isPending: isCodeVerifying } =
|
|
7355
|
+
const { mutate: onVerifyCode, isPending: isCodeVerifying } = useMutation4({
|
|
7410
7356
|
mutationFn: async (code) => {
|
|
7411
7357
|
setIsLoading(true);
|
|
7412
7358
|
setAlert(null);
|
|
@@ -7441,14 +7387,13 @@ function VerifyStep(props) {
|
|
|
7441
7387
|
const storage = typeof window !== "undefined" ? window.localStorage : void 0;
|
|
7442
7388
|
const localKeyshare = storage?.getItem(`tss.${loginResponse.userId}.keyshare`);
|
|
7443
7389
|
const needsRecovery = loginResponse.hasKeyshare && !loginResponse.isNewUser && !localKeyshare;
|
|
7444
|
-
await onAuthSuccess?.();
|
|
7445
|
-
console.log("[AuthModal] Authentication successful, closing modal");
|
|
7446
7390
|
if (!recoveryUserId && !needsRecovery) {
|
|
7447
7391
|
setStep("signin");
|
|
7448
7392
|
setEmail("");
|
|
7449
7393
|
setAlert(null);
|
|
7450
|
-
setPage(null);
|
|
7451
7394
|
}
|
|
7395
|
+
await onAuthSuccess?.();
|
|
7396
|
+
console.log("[AuthModal] Authentication successful");
|
|
7452
7397
|
setIsLoading(false);
|
|
7453
7398
|
},
|
|
7454
7399
|
onError: (error) => {
|
|
@@ -7473,7 +7418,7 @@ function VerifyStep(props) {
|
|
|
7473
7418
|
setIsLoading(false);
|
|
7474
7419
|
}
|
|
7475
7420
|
});
|
|
7476
|
-
const { mutate: onResendCode, isPending: isCodeResending } =
|
|
7421
|
+
const { mutate: onResendCode, isPending: isCodeResending } = useMutation4({
|
|
7477
7422
|
mutationFn: async () => {
|
|
7478
7423
|
setAlert(null);
|
|
7479
7424
|
setIsLoading(true);
|
|
@@ -7517,7 +7462,7 @@ function VerifyStep(props) {
|
|
|
7517
7462
|
/* @__PURE__ */ jsxs22("div", { className: "relative flex items-center justify-center gap-2 px-5 pt-3 pb-6", children: [
|
|
7518
7463
|
/* @__PURE__ */ jsx27(OtpIcon, { className: "w-6 h-6" }),
|
|
7519
7464
|
/* @__PURE__ */ jsx27("span", { className: "font-bold text-xl leading-6", children: "Verification code" }),
|
|
7520
|
-
isLoading && /* @__PURE__ */ jsx27(
|
|
7465
|
+
isLoading && /* @__PURE__ */ jsx27(Loader5, { className: "h-4 w-4 animate-spin" }),
|
|
7521
7466
|
/* @__PURE__ */ jsxs22(
|
|
7522
7467
|
Button,
|
|
7523
7468
|
{
|
|
@@ -7560,8 +7505,8 @@ var AuthMenu = () => {
|
|
|
7560
7505
|
const { step, alert: alert2, setStep, setPasskeyStatus, setEmail, setAlert } = useAuthStore();
|
|
7561
7506
|
const { pendingLoginResponseRef, onAuthSuccess, goBackToSignIn } = useAuthMenuHandlers();
|
|
7562
7507
|
const [isAlertShowReady, setIsAlertShowReady] = useState6(false);
|
|
7563
|
-
const readyTimeout =
|
|
7564
|
-
|
|
7508
|
+
const readyTimeout = useRef8(null);
|
|
7509
|
+
useEffect9(() => {
|
|
7565
7510
|
if (readyTimeout.current) {
|
|
7566
7511
|
clearTimeout(readyTimeout.current);
|
|
7567
7512
|
readyTimeout.current = null;
|
|
@@ -7569,7 +7514,7 @@ var AuthMenu = () => {
|
|
|
7569
7514
|
setIsAlertShowReady(false);
|
|
7570
7515
|
readyTimeout.current = setTimeout(() => setIsAlertShowReady(true), 750);
|
|
7571
7516
|
}, [step]);
|
|
7572
|
-
|
|
7517
|
+
useEffect9(() => {
|
|
7573
7518
|
setMainPageHeight(DEFAULT_AUTH_MENU_HEIGHT);
|
|
7574
7519
|
return () => {
|
|
7575
7520
|
setStep("signin");
|
|
@@ -7581,7 +7526,7 @@ var AuthMenu = () => {
|
|
|
7581
7526
|
}, []);
|
|
7582
7527
|
if (!isIframeReady) {
|
|
7583
7528
|
return /* @__PURE__ */ jsxs23("div", { className: "w-full p-8 flex flex-col justify-center items-center gap-[var(--l-pass-gap)]", children: [
|
|
7584
|
-
/* @__PURE__ */ jsx28(
|
|
7529
|
+
/* @__PURE__ */ jsx28(Loader6, { className: "w-5 h-5 animate-spin" }),
|
|
7585
7530
|
/* @__PURE__ */ jsx28("span", { className: "text-sm text-[var(--l-pass-fg-muted)]", children: "Initializing wallet..." })
|
|
7586
7531
|
] });
|
|
7587
7532
|
}
|
|
@@ -7596,20 +7541,8 @@ var AuthMenu = () => {
|
|
|
7596
7541
|
onAuthSuccess
|
|
7597
7542
|
}
|
|
7598
7543
|
),
|
|
7599
|
-
"signin": /* @__PURE__ */ jsx28(
|
|
7600
|
-
|
|
7601
|
-
{
|
|
7602
|
-
pendingLoginResponseRef,
|
|
7603
|
-
onAuthSuccess
|
|
7604
|
-
}
|
|
7605
|
-
),
|
|
7606
|
-
"signin-passkey": /* @__PURE__ */ jsx28(
|
|
7607
|
-
PassKeyStep,
|
|
7608
|
-
{
|
|
7609
|
-
pendingLoginResponseRef,
|
|
7610
|
-
onAuthSuccess
|
|
7611
|
-
}
|
|
7612
|
-
)
|
|
7544
|
+
"signin": /* @__PURE__ */ jsx28(SignInStep, { pendingLoginResponseRef, onAuthSuccess }),
|
|
7545
|
+
"signin-passkey": /* @__PURE__ */ jsx28(PassKeyStep, { pendingLoginResponseRef, onAuthSuccess })
|
|
7613
7546
|
}),
|
|
7614
7547
|
[onAuthSuccess, goBackToSignIn]
|
|
7615
7548
|
);
|
|
@@ -7738,9 +7671,9 @@ function RampnowIcon() {
|
|
|
7738
7671
|
}
|
|
7739
7672
|
|
|
7740
7673
|
// src/internal/components/BuyMenu/binance/Binance.tsx
|
|
7741
|
-
import { useMutation as
|
|
7674
|
+
import { useMutation as useMutation5, useQuery as useQuery4, useQueryClient as useQueryClient3 } from "@tanstack/react-query";
|
|
7742
7675
|
import { DollarSign, LoaderIcon as LoaderIcon2 } from "lucide-react";
|
|
7743
|
-
import { useEffect as
|
|
7676
|
+
import { useEffect as useEffect11, useRef as useRef9 } from "react";
|
|
7744
7677
|
|
|
7745
7678
|
// src/internal/components/BuyMenu/components/PaymentSelector.tsx
|
|
7746
7679
|
import { jsx as jsx31, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
@@ -7837,7 +7770,7 @@ async function createPreorderMutation(payload) {
|
|
|
7837
7770
|
}
|
|
7838
7771
|
|
|
7839
7772
|
// src/internal/components/BuyMenu/binance/useQueriesErrorHandler.ts
|
|
7840
|
-
import { useEffect as
|
|
7773
|
+
import { useEffect as useEffect10 } from "react";
|
|
7841
7774
|
|
|
7842
7775
|
// src/internal/components/BuyMenu/binance/utils.ts
|
|
7843
7776
|
function getPayMethodID(pm) {
|
|
@@ -7857,7 +7790,7 @@ function handleErrors(errors) {
|
|
|
7857
7790
|
// src/internal/components/BuyMenu/binance/useQueriesErrorHandler.ts
|
|
7858
7791
|
var useQueriesErrorHandler = (errors, stateUpdater) => {
|
|
7859
7792
|
const { error: errorTitle, message: errorMessage } = handleErrors(errors);
|
|
7860
|
-
|
|
7793
|
+
useEffect10(() => {
|
|
7861
7794
|
if (!errorTitle && !errorMessage) return;
|
|
7862
7795
|
console.error(`[BuyModal][Binance] ${errorTitle}: ${errorMessage}`);
|
|
7863
7796
|
stateUpdater(1);
|
|
@@ -7867,7 +7800,7 @@ var useQueriesErrorHandler = (errors, stateUpdater) => {
|
|
|
7867
7800
|
};
|
|
7868
7801
|
|
|
7869
7802
|
// src/internal/components/BuyMenu/binance/Binance.tsx
|
|
7870
|
-
import { Fragment as
|
|
7803
|
+
import { Fragment as Fragment6, jsx as jsx32, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
7871
7804
|
var BINANCE_LUMIA_NETWORK = "LUMIA";
|
|
7872
7805
|
function Binance(props) {
|
|
7873
7806
|
const { walletAddress, control } = props;
|
|
@@ -7905,15 +7838,15 @@ function Binance(props) {
|
|
|
7905
7838
|
queryKey: [QUERY_KEYS3.binancePaymentModes, walletAddress, isLumiaAvailable, srcQueryAmount],
|
|
7906
7839
|
queryFn: async () => getPaymentMethodsQuery({ totalAmount: String(srcQueryAmount || 1) })
|
|
7907
7840
|
});
|
|
7908
|
-
const lastLoadedPaymentModes =
|
|
7909
|
-
|
|
7841
|
+
const lastLoadedPaymentModes = useRef9([]);
|
|
7842
|
+
useEffect11(() => {
|
|
7910
7843
|
if (!paymentModes?.length) return;
|
|
7911
7844
|
setPaymentMode(getPayMethodID(paymentModes[0]));
|
|
7912
7845
|
lastLoadedPaymentModes.current = paymentModes;
|
|
7913
7846
|
}, [paymentModes]);
|
|
7914
7847
|
const selectedPaymentMode = paymentModes?.find((el) => getPayMethodID(el) === paymentMode) || null;
|
|
7915
7848
|
const minimum = Number(selectedPaymentMode?.fiatMinLimit || "0");
|
|
7916
|
-
|
|
7849
|
+
useEffect11(() => setMinAmount(minimum), [minimum]);
|
|
7917
7850
|
const {
|
|
7918
7851
|
data: quoteData = null,
|
|
7919
7852
|
isLoading: isQuoteDataLoading,
|
|
@@ -7934,7 +7867,7 @@ function Binance(props) {
|
|
|
7934
7867
|
[lumiaNetworkError, paymentMethodsError, quoteError],
|
|
7935
7868
|
setSrcInputAmount
|
|
7936
7869
|
);
|
|
7937
|
-
const { mutate: checkoutFundWalletOrder, isPending: isFundWalletOrderCheckouting } =
|
|
7870
|
+
const { mutate: checkoutFundWalletOrder, isPending: isFundWalletOrderCheckouting } = useMutation5({
|
|
7938
7871
|
mutationFn: async () => {
|
|
7939
7872
|
setRedirecting(true);
|
|
7940
7873
|
const returnUrl = window.location.href.split("?")[0];
|
|
@@ -7958,7 +7891,7 @@ function Binance(props) {
|
|
|
7958
7891
|
setRedirecting(false);
|
|
7959
7892
|
}
|
|
7960
7893
|
});
|
|
7961
|
-
|
|
7894
|
+
useEffect11(() => {
|
|
7962
7895
|
return () => {
|
|
7963
7896
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.binanceNetworksQuery] });
|
|
7964
7897
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.binancePaymentModes] });
|
|
@@ -7969,7 +7902,7 @@ function Binance(props) {
|
|
|
7969
7902
|
const isLoading = !!isLumiaNetworkLoading || !!isQuoteDataLoading || !!isPaymentModesLoading;
|
|
7970
7903
|
const isContinueDisabled = !!redirecting || !!isLoading || !!isFundWalletOrderCheckouting || !quoteData || srcInputAmount < minimum || srcInputAmount !== srcQueryAmount;
|
|
7971
7904
|
const localError = errorMessage?.length ? errorMessage : srcInputAmount < minimum ? `Provider min: $${minimum}` : void 0;
|
|
7972
|
-
return /* @__PURE__ */ jsxs26(
|
|
7905
|
+
return /* @__PURE__ */ jsxs26(Fragment6, { children: [
|
|
7973
7906
|
/* @__PURE__ */ jsx32(
|
|
7974
7907
|
Input,
|
|
7975
7908
|
{
|
|
@@ -8020,9 +7953,9 @@ function Binance(props) {
|
|
|
8020
7953
|
}
|
|
8021
7954
|
|
|
8022
7955
|
// src/internal/components/BuyMenu/rampnow/Rampnow.tsx
|
|
8023
|
-
import { useMutation as
|
|
7956
|
+
import { useMutation as useMutation6, useQuery as useQuery5, useQueryClient as useQueryClient4 } from "@tanstack/react-query";
|
|
8024
7957
|
import { DollarSign as DollarSign2, LoaderIcon as LoaderIcon3 } from "lucide-react";
|
|
8025
|
-
import { useEffect as
|
|
7958
|
+
import { useEffect as useEffect12 } from "react";
|
|
8026
7959
|
|
|
8027
7960
|
// src/internal/components/BuyMenu/rampnow/api.ts
|
|
8028
7961
|
init_iframe_manager();
|
|
@@ -8072,7 +8005,7 @@ var ORDER_URL_QUERIES = [
|
|
|
8072
8005
|
];
|
|
8073
8006
|
|
|
8074
8007
|
// src/internal/components/BuyMenu/rampnow/Rampnow.tsx
|
|
8075
|
-
import { Fragment as
|
|
8008
|
+
import { Fragment as Fragment7, jsx as jsx33, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
8076
8009
|
function Rampnow(props) {
|
|
8077
8010
|
const { walletAddress, control } = props;
|
|
8078
8011
|
const {
|
|
@@ -8087,7 +8020,7 @@ function Rampnow(props) {
|
|
|
8087
8020
|
setMinAmount
|
|
8088
8021
|
} = control;
|
|
8089
8022
|
const qc = useQueryClient4();
|
|
8090
|
-
|
|
8023
|
+
useEffect12(() => {
|
|
8091
8024
|
setMinAmount(MINIMUM_RAMP_AMOUNT);
|
|
8092
8025
|
setPaymentMode(PAYMENT_MODES[0].id);
|
|
8093
8026
|
}, []);
|
|
@@ -8115,7 +8048,7 @@ function Rampnow(props) {
|
|
|
8115
8048
|
paymentMode
|
|
8116
8049
|
})
|
|
8117
8050
|
});
|
|
8118
|
-
const { mutate: checkoutFundWalletOrder, isPending: isFundWalletOrderCheckouting } =
|
|
8051
|
+
const { mutate: checkoutFundWalletOrder, isPending: isFundWalletOrderCheckouting } = useMutation6({
|
|
8119
8052
|
mutationFn: async () => {
|
|
8120
8053
|
if (!configData?.apiKey?.length || !configData?.orderUrl?.length) {
|
|
8121
8054
|
throw new Error("RampNow order service is not available");
|
|
@@ -8144,7 +8077,7 @@ function Rampnow(props) {
|
|
|
8144
8077
|
console.error("Create CheckoutOrder failed:", err);
|
|
8145
8078
|
}
|
|
8146
8079
|
});
|
|
8147
|
-
|
|
8080
|
+
useEffect12(() => {
|
|
8148
8081
|
return () => {
|
|
8149
8082
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.getRampNowConfig] });
|
|
8150
8083
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.getRampNowQuote] });
|
|
@@ -8155,7 +8088,7 @@ function Rampnow(props) {
|
|
|
8155
8088
|
const isContinueDisabled = !!redirecting || !!isLoading || !!isFundWalletOrderCheckouting || !quoteData || srcInputAmount < MINIMUM_RAMP_AMOUNT || srcInputAmount !== srcQueryAmount;
|
|
8156
8089
|
const errorMessage = quoteError?.message || configError?.message || null;
|
|
8157
8090
|
const localError = errorMessage?.length ? errorMessage : srcInputAmount < MINIMUM_RAMP_AMOUNT ? `Provider min: $${MINIMUM_RAMP_AMOUNT}` : void 0;
|
|
8158
|
-
return /* @__PURE__ */ jsxs27(
|
|
8091
|
+
return /* @__PURE__ */ jsxs27(Fragment7, { children: [
|
|
8159
8092
|
/* @__PURE__ */ jsx33(
|
|
8160
8093
|
Input,
|
|
8161
8094
|
{
|
|
@@ -8226,7 +8159,7 @@ var RAMP_PROVIDERS = {
|
|
|
8226
8159
|
var REDIRECT_TIMEOUT_MS = 1500;
|
|
8227
8160
|
|
|
8228
8161
|
// src/internal/components/BuyMenu/useSelectables.ts
|
|
8229
|
-
import { useCallback as useCallback8, useEffect as
|
|
8162
|
+
import { useCallback as useCallback8, useEffect as useEffect13, useRef as useRef10, useState as useState7 } from "react";
|
|
8230
8163
|
|
|
8231
8164
|
// src/internal/utils/debounce.ts
|
|
8232
8165
|
function debounce2(func, waitFor) {
|
|
@@ -8243,7 +8176,7 @@ var useSelectables = () => {
|
|
|
8243
8176
|
const [redirecting, setRedirecting] = useState7(false);
|
|
8244
8177
|
const [rampProvider, setrRampProvider] = useState7("binance");
|
|
8245
8178
|
const [minAmount, setMinAmount] = useState7(0);
|
|
8246
|
-
const inputRef =
|
|
8179
|
+
const inputRef = useRef10(null);
|
|
8247
8180
|
const [srcQueryAmount, setSrcQueryAmount] = useState7(0);
|
|
8248
8181
|
const [srcInputAmount, setSrcInputAmount] = useState7(0);
|
|
8249
8182
|
const [paymentMode, setPaymentMode] = useState7(null);
|
|
@@ -8255,7 +8188,7 @@ var useSelectables = () => {
|
|
|
8255
8188
|
}, ON_INPUT_QUERY_DELAY),
|
|
8256
8189
|
[minAmount]
|
|
8257
8190
|
);
|
|
8258
|
-
|
|
8191
|
+
useEffect13(() => setQueryAmountDebounced(srcInputAmount), [srcInputAmount, setQueryAmountDebounced]);
|
|
8259
8192
|
return {
|
|
8260
8193
|
inputRef,
|
|
8261
8194
|
redirecting,
|
|
@@ -8317,19 +8250,75 @@ function BuyMenu() {
|
|
|
8317
8250
|
}
|
|
8318
8251
|
|
|
8319
8252
|
// src/internal/components/KeyshareRestoreMenu/KeyshareRestoreMenu.tsx
|
|
8320
|
-
import { useMutation as
|
|
8321
|
-
import { AlertCircle as AlertCircle2, CheckCircle2, CloudDownload as CloudDownload2, Loader as
|
|
8322
|
-
import { useEffect as
|
|
8253
|
+
import { useMutation as useMutation9, useQuery as useQuery7, useQueryClient as useQueryClient7 } from "@tanstack/react-query";
|
|
8254
|
+
import { AlertCircle as AlertCircle2, CheckCircle2, CloudDownload as CloudDownload2, Loader as Loader9, UserCircle as UserCircle2 } from "lucide-react";
|
|
8255
|
+
import { useEffect as useEffect18 } from "react";
|
|
8323
8256
|
init_vaultClient();
|
|
8324
8257
|
|
|
8258
|
+
// src/internal/components/ui/switch.tsx
|
|
8259
|
+
import { forwardRef as forwardRef4, useState as useState8 } from "react";
|
|
8260
|
+
import { jsx as jsx36, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
8261
|
+
var Switch = forwardRef4((props, ref) => {
|
|
8262
|
+
const { className, labels, ...inputProps } = props;
|
|
8263
|
+
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
8264
|
+
const [labelW, setLabelW] = useState8(0);
|
|
8265
|
+
return /* @__PURE__ */ jsx36(
|
|
8266
|
+
"div",
|
|
8267
|
+
{
|
|
8268
|
+
role: "switch",
|
|
8269
|
+
"aria-checked": inputProps.checked,
|
|
8270
|
+
className: cn(
|
|
8271
|
+
"block rounded-full w-fit h-5 px-[2px] outline-none flex-none",
|
|
8272
|
+
inputProps.checked ? "bg-[var(--l-pass-bg-success)]" : "bg-[var(--l-pass-bg-info)]",
|
|
8273
|
+
className
|
|
8274
|
+
),
|
|
8275
|
+
children: /* @__PURE__ */ jsxs29(
|
|
8276
|
+
"label",
|
|
8277
|
+
{
|
|
8278
|
+
className: "relative inline-block h-4 outline-none",
|
|
8279
|
+
style: {
|
|
8280
|
+
width: `calc(16px + ${labelW}px)`,
|
|
8281
|
+
transition: "width 200ms ease",
|
|
8282
|
+
cursor: inputProps.disabled ? "not-allowed" : "pointer"
|
|
8283
|
+
},
|
|
8284
|
+
children: [
|
|
8285
|
+
/* @__PURE__ */ jsx36("input", { type: "checkbox", className: "hidden sr-only peer outline-none", ref, ...inputProps }),
|
|
8286
|
+
/* @__PURE__ */ jsx36(
|
|
8287
|
+
"span",
|
|
8288
|
+
{
|
|
8289
|
+
ref: (inst) => {
|
|
8290
|
+
if (inst) setLabelW(inst.clientWidth);
|
|
8291
|
+
},
|
|
8292
|
+
style: {
|
|
8293
|
+
left: inputProps.checked ? "0px" : "16px",
|
|
8294
|
+
color: inputProps.checked ? colorMode === "dark" ? "var(--l-pass-fg-inverted)" : "var(--l-pass-fg)" : "var(--l-pass-fg)",
|
|
8295
|
+
transition: "left 200ms ease"
|
|
8296
|
+
},
|
|
8297
|
+
className: "absolute top-0 px-2 text-[10px] leading-4 font-semibold min-w-4 select-none",
|
|
8298
|
+
children: inputProps.checked ? labels?.checked : labels?.unchecked
|
|
8299
|
+
}
|
|
8300
|
+
),
|
|
8301
|
+
/* @__PURE__ */ jsx36(
|
|
8302
|
+
"span",
|
|
8303
|
+
{
|
|
8304
|
+
style: {
|
|
8305
|
+
left: inputProps.checked ? `${labelW}px` : "0px",
|
|
8306
|
+
transition: "left 200ms ease"
|
|
8307
|
+
},
|
|
8308
|
+
className: "absolute top-0 w-4 h-4 rounded-full bg-[var(--l-pass-fg)]"
|
|
8309
|
+
}
|
|
8310
|
+
)
|
|
8311
|
+
]
|
|
8312
|
+
}
|
|
8313
|
+
)
|
|
8314
|
+
}
|
|
8315
|
+
);
|
|
8316
|
+
});
|
|
8317
|
+
Switch.displayName = "Switch";
|
|
8318
|
+
|
|
8325
8319
|
// src/internal/components/KeyshareRestoreMenu/components/MethodSelector.tsx
|
|
8326
8320
|
import { Cloud, FileDown, FileUp } from "lucide-react";
|
|
8327
|
-
import { Fragment as
|
|
8328
|
-
|
|
8329
|
-
// src/internal/components/KeyshareRestoreMenu/hooks/useCheckBackupAvailability.ts
|
|
8330
|
-
init_vaultClient();
|
|
8331
|
-
import { useQuery as useQuery6, useQueryClient as useQueryClient5 } from "@tanstack/react-query";
|
|
8332
|
-
import { useEffect as useEffect16 } from "react";
|
|
8321
|
+
import { Fragment as Fragment8, useMemo as useMemo2 } from "react";
|
|
8333
8322
|
|
|
8334
8323
|
// src/internal/components/KeyshareRestoreMenu/hooks/useRestoreStore.ts
|
|
8335
8324
|
import { create as create4 } from "zustand";
|
|
@@ -8358,45 +8347,6 @@ var useRestoreStore = create4((set) => ({
|
|
|
8358
8347
|
setSuccess: (success) => set({ success })
|
|
8359
8348
|
}));
|
|
8360
8349
|
|
|
8361
|
-
// src/internal/components/KeyshareRestoreMenu/hooks/useCheckBackupAvailability.ts
|
|
8362
|
-
function useCheckBackupAvailability() {
|
|
8363
|
-
const qc = useQueryClient5();
|
|
8364
|
-
const address = useLumiaPassportSession((st) => st.address);
|
|
8365
|
-
const { setError, setHasServerBackup, setCheckingBackup } = useRestoreStore();
|
|
8366
|
-
const {
|
|
8367
|
-
data: serverRecoveryData,
|
|
8368
|
-
isLoading: isRecoveryLoading,
|
|
8369
|
-
error: recoveryError
|
|
8370
|
-
} = useQuery6({
|
|
8371
|
-
retry: false,
|
|
8372
|
-
queryKey: [CHECK_BACKUP_QUERY_KEY, address],
|
|
8373
|
-
queryFn: async () => await getShareRecoveryStats()
|
|
8374
|
-
});
|
|
8375
|
-
useEffect16(() => {
|
|
8376
|
-
qc.invalidateQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY] });
|
|
8377
|
-
}, [qc]);
|
|
8378
|
-
useEffect16(() => {
|
|
8379
|
-
setCheckingBackup(isRecoveryLoading);
|
|
8380
|
-
if (!!isRecoveryLoading) return;
|
|
8381
|
-
if (!!recoveryError) {
|
|
8382
|
-
console.warn("[KeyshareRestoreMenu] Failed to check backup availability:", recoveryError);
|
|
8383
|
-
setError("Failed to check backup availability");
|
|
8384
|
-
setHasServerBackup(false);
|
|
8385
|
-
setCheckingBackup(false);
|
|
8386
|
-
return;
|
|
8387
|
-
}
|
|
8388
|
-
const hasRecoveryData = serverRecoveryData?.created || serverRecoveryData?.devices?.length > 0;
|
|
8389
|
-
setHasServerBackup(!!hasRecoveryData);
|
|
8390
|
-
setCheckingBackup(false);
|
|
8391
|
-
}, [serverRecoveryData, recoveryError, isRecoveryLoading]);
|
|
8392
|
-
return {
|
|
8393
|
-
serverRecoveryData,
|
|
8394
|
-
isRecoveryLoading,
|
|
8395
|
-
recoveryError,
|
|
8396
|
-
hasRecoveryData: serverRecoveryData?.created || serverRecoveryData?.devices?.length > 0
|
|
8397
|
-
};
|
|
8398
|
-
}
|
|
8399
|
-
|
|
8400
8350
|
// src/internal/components/KeyshareRestoreMenu/hooks/useOnRestoreSuccess.ts
|
|
8401
8351
|
import { useCallback as useCallback9 } from "react";
|
|
8402
8352
|
function useOnRestoreSuccess() {
|
|
@@ -8446,14 +8396,9 @@ function useOnRestoreSuccess() {
|
|
|
8446
8396
|
if (recoveryUserId) {
|
|
8447
8397
|
try {
|
|
8448
8398
|
const { session: sess, address: addr } = await createSessionWithKeyshare(recoveryUserId, hasServerKeyshare);
|
|
8449
|
-
setSession(sess);
|
|
8450
|
-
setAddress(addr);
|
|
8451
|
-
setStatus("ready");
|
|
8452
8399
|
setRecoveryUserId(null);
|
|
8453
8400
|
setSuccess(null);
|
|
8454
8401
|
setError(null);
|
|
8455
|
-
setIsDialogForced(false);
|
|
8456
|
-
setPage("main-menu" /* MAIN_MENU */);
|
|
8457
8402
|
try {
|
|
8458
8403
|
callbacks?.onLumiaPassportConnect?.({
|
|
8459
8404
|
address: addr,
|
|
@@ -8485,11 +8430,17 @@ function useOnRestoreSuccess() {
|
|
|
8485
8430
|
} catch (e) {
|
|
8486
8431
|
console.warn("[UI-KIT] Failed to update backup status:", e);
|
|
8487
8432
|
}
|
|
8433
|
+
setSession(sess);
|
|
8434
|
+
setAddress(addr);
|
|
8435
|
+
setStatus("ready");
|
|
8436
|
+
setPage("main-menu" /* MAIN_MENU */);
|
|
8437
|
+
setTimeout(() => {
|
|
8438
|
+
setIsDialogForced(false);
|
|
8439
|
+
}, 375);
|
|
8488
8440
|
} catch (err) {
|
|
8489
8441
|
setSuccess(null);
|
|
8490
8442
|
setError(err?.message || String(err));
|
|
8491
8443
|
setStatus("error");
|
|
8492
|
-
setIsDialogForced(false);
|
|
8493
8444
|
}
|
|
8494
8445
|
}
|
|
8495
8446
|
}, [
|
|
@@ -8507,17 +8458,17 @@ function useOnRestoreSuccess() {
|
|
|
8507
8458
|
}
|
|
8508
8459
|
|
|
8509
8460
|
// src/internal/components/KeyshareRestoreMenu/hooks/useCreateBackup.ts
|
|
8510
|
-
import { useMutation as
|
|
8511
|
-
import { useEffect as
|
|
8461
|
+
import { useMutation as useMutation7, useQueryClient as useQueryClient5 } from "@tanstack/react-query";
|
|
8462
|
+
import { useEffect as useEffect14 } from "react";
|
|
8512
8463
|
init_iframe_manager();
|
|
8513
8464
|
function useCreateBackup() {
|
|
8514
|
-
const qc =
|
|
8465
|
+
const qc = useQueryClient5();
|
|
8515
8466
|
const session = useLumiaPassportSession((st) => st.session);
|
|
8516
8467
|
const address = useLumiaPassportSession((st) => st.address);
|
|
8517
8468
|
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
8518
8469
|
const setIsDialogForced = useLayoutStore((st) => st.setIsDialogForced);
|
|
8519
8470
|
const { usePasskey, restorePassword, selectedCloudProvider, setSuccess, setError, setMethod } = useRestoreStore();
|
|
8520
|
-
|
|
8471
|
+
useEffect14(() => {
|
|
8521
8472
|
if (!hasServerVault) {
|
|
8522
8473
|
setMethod("server");
|
|
8523
8474
|
setIsDialogForced(true);
|
|
@@ -8525,7 +8476,7 @@ function useCreateBackup() {
|
|
|
8525
8476
|
}, [hasServerVault, setIsDialogForced, setMethod]);
|
|
8526
8477
|
const passportUserId = session?.mpcUserId || "";
|
|
8527
8478
|
const onBackupSuccess = () => console.log("[ConnectWalletButton] Backup created successfully");
|
|
8528
|
-
const { mutate: createPasswordBackup, isPending: isPasswordBackupCreating } =
|
|
8479
|
+
const { mutate: createPasswordBackup, isPending: isPasswordBackupCreating } = useMutation7({
|
|
8529
8480
|
mutationFn: async () => {
|
|
8530
8481
|
const iframeManager = getIframeManager();
|
|
8531
8482
|
if (!iframeManager) {
|
|
@@ -8556,13 +8507,14 @@ function useCreateBackup() {
|
|
|
8556
8507
|
} else {
|
|
8557
8508
|
setError(response.error || "Server backup failed");
|
|
8558
8509
|
}
|
|
8510
|
+
setIsDialogForced(false);
|
|
8559
8511
|
},
|
|
8560
8512
|
onError: async (error) => {
|
|
8561
8513
|
setError(error?.message || "Backup creation failed");
|
|
8562
8514
|
qc.invalidateQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY, address] });
|
|
8563
8515
|
}
|
|
8564
8516
|
});
|
|
8565
|
-
const { mutate: createLocalBackup, isPending: isLocalBackupCreating } =
|
|
8517
|
+
const { mutate: createLocalBackup, isPending: isLocalBackupCreating } = useMutation7({
|
|
8566
8518
|
mutationFn: async () => {
|
|
8567
8519
|
const iframeManager = getIframeManager();
|
|
8568
8520
|
if (!usePasskey && !restorePassword) {
|
|
@@ -8596,7 +8548,7 @@ function useCreateBackup() {
|
|
|
8596
8548
|
qc.invalidateQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY, address] });
|
|
8597
8549
|
}
|
|
8598
8550
|
});
|
|
8599
|
-
const { mutate: createCloudBackup, isPending: isCloudBackupCreating } =
|
|
8551
|
+
const { mutate: createCloudBackup, isPending: isCloudBackupCreating } = useMutation7({
|
|
8600
8552
|
mutationFn: async () => {
|
|
8601
8553
|
const iframeManager = getIframeManager();
|
|
8602
8554
|
const encryptedData = await iframeManager.encryptBackupData(passportUserId);
|
|
@@ -8647,7 +8599,7 @@ function useCreateBackup() {
|
|
|
8647
8599
|
}
|
|
8648
8600
|
|
|
8649
8601
|
// src/internal/components/KeyshareRestoreMenu/hooks/useRestoreAccount.ts
|
|
8650
|
-
import { useMutation as
|
|
8602
|
+
import { useMutation as useMutation8 } from "@tanstack/react-query";
|
|
8651
8603
|
function useRestoreAccount() {
|
|
8652
8604
|
const recoveryUserId = useLumiaPassportSession((st) => st.recoveryUserId);
|
|
8653
8605
|
const {
|
|
@@ -8661,7 +8613,7 @@ function useRestoreAccount() {
|
|
|
8661
8613
|
setRestoreFile
|
|
8662
8614
|
} = useRestoreStore();
|
|
8663
8615
|
const { onRestoreSuccess } = useOnRestoreSuccess();
|
|
8664
|
-
const { mutate: restoreFromServer2, isPending: isRestoringFromServer } =
|
|
8616
|
+
const { mutate: restoreFromServer2, isPending: isRestoringFromServer } = useMutation8({
|
|
8665
8617
|
mutationFn: async () => {
|
|
8666
8618
|
setError(null);
|
|
8667
8619
|
setSuccess(null);
|
|
@@ -8691,18 +8643,16 @@ function useRestoreAccount() {
|
|
|
8691
8643
|
onRestoreSuccess();
|
|
8692
8644
|
} else {
|
|
8693
8645
|
console.error("[KeyshareRestoreMenu] Server restore failed:", response.error);
|
|
8694
|
-
setMethod(null);
|
|
8695
8646
|
setError(response.error || "Server restore failed");
|
|
8696
8647
|
}
|
|
8697
8648
|
},
|
|
8698
8649
|
onError: async (err) => {
|
|
8699
8650
|
console.error("[KeyshareRestoreMenu] Server restore exception:", err);
|
|
8700
8651
|
const errorMsg = err instanceof Error ? err.message : "Server restore failed";
|
|
8701
|
-
setMethod(null);
|
|
8702
8652
|
setError(errorMsg);
|
|
8703
8653
|
}
|
|
8704
8654
|
});
|
|
8705
|
-
const { mutate: restoreFromFile, isPending: isRestoringFromFile } =
|
|
8655
|
+
const { mutate: restoreFromFile, isPending: isRestoringFromFile } = useMutation8({
|
|
8706
8656
|
mutationFn: async () => {
|
|
8707
8657
|
if (!restoreFile) {
|
|
8708
8658
|
throw new Error("Please select a backup file");
|
|
@@ -8728,17 +8678,15 @@ function useRestoreAccount() {
|
|
|
8728
8678
|
setMethod(null);
|
|
8729
8679
|
onRestoreSuccess();
|
|
8730
8680
|
} else {
|
|
8731
|
-
setMethod(null);
|
|
8732
8681
|
setError(response.error || "File restore failed");
|
|
8733
8682
|
}
|
|
8734
8683
|
},
|
|
8735
8684
|
onError: async (err) => {
|
|
8736
8685
|
const errorMsg = err instanceof Error ? err.message : "Restore failed";
|
|
8737
|
-
setMethod(null);
|
|
8738
8686
|
setError(errorMsg);
|
|
8739
8687
|
}
|
|
8740
8688
|
});
|
|
8741
|
-
const { mutate: restoreFromCloud, isPending: isRestoringFromCloud } =
|
|
8689
|
+
const { mutate: restoreFromCloud, isPending: isRestoringFromCloud } = useMutation8({
|
|
8742
8690
|
mutationFn: async () => {
|
|
8743
8691
|
alert("Cloud restore not implemented yet");
|
|
8744
8692
|
return null;
|
|
@@ -8759,7 +8707,7 @@ function useRestoreAccount() {
|
|
|
8759
8707
|
}
|
|
8760
8708
|
|
|
8761
8709
|
// src/internal/components/KeyshareRestoreMenu/hooks/useValidateFileBackup.ts
|
|
8762
|
-
import { useEffect as
|
|
8710
|
+
import { useEffect as useEffect15 } from "react";
|
|
8763
8711
|
function validateRestoreFileFormat(parsedData) {
|
|
8764
8712
|
if (typeof parsedData !== "object" || parsedData === null) return false;
|
|
8765
8713
|
const data = parsedData;
|
|
@@ -8769,7 +8717,7 @@ function useValidateFileBackup() {
|
|
|
8769
8717
|
const restoreFile = useRestoreStore((st) => st.restoreFile);
|
|
8770
8718
|
const setError = useRestoreStore((st) => st.setError);
|
|
8771
8719
|
const setUsePasskey = useRestoreStore((st) => st.setUsePasskey);
|
|
8772
|
-
|
|
8720
|
+
useEffect15(() => {
|
|
8773
8721
|
if (!restoreFile) {
|
|
8774
8722
|
return;
|
|
8775
8723
|
}
|
|
@@ -8792,9 +8740,9 @@ function useValidateFileBackup() {
|
|
|
8792
8740
|
}
|
|
8793
8741
|
|
|
8794
8742
|
// src/internal/components/KeyshareRestoreMenu/components/MethodSelector.tsx
|
|
8795
|
-
import { jsx as
|
|
8743
|
+
import { jsx as jsx37, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
8796
8744
|
var getRecoveryRenderMethods = (mode) => [
|
|
8797
|
-
{ method:
|
|
8745
|
+
// { method: 'server', label: 'Password', Icon: OtpIcon },
|
|
8798
8746
|
{ method: "file", label: "Local File", Icon: mode === "restore" ? FileUp : FileDown },
|
|
8799
8747
|
{ method: "cloud", label: "Cloud", Icon: Cloud, disabled: true }
|
|
8800
8748
|
];
|
|
@@ -8824,51 +8772,48 @@ function MethodSelector(props) {
|
|
|
8824
8772
|
return methodsWithBackupData;
|
|
8825
8773
|
}, [mode, serverRecoveryStatus]);
|
|
8826
8774
|
if (!!selectedRecoveryMethod) return null;
|
|
8827
|
-
return /* @__PURE__ */
|
|
8828
|
-
|
|
8829
|
-
|
|
8830
|
-
|
|
8831
|
-
|
|
8832
|
-
|
|
8833
|
-
|
|
8834
|
-
|
|
8835
|
-
|
|
8836
|
-
|
|
8837
|
-
|
|
8838
|
-
|
|
8839
|
-
|
|
8840
|
-
|
|
8841
|
-
|
|
8842
|
-
|
|
8843
|
-
|
|
8844
|
-
|
|
8845
|
-
|
|
8846
|
-
|
|
8847
|
-
|
|
8848
|
-
|
|
8849
|
-
|
|
8850
|
-
|
|
8851
|
-
},
|
|
8852
|
-
children:
|
|
8853
|
-
|
|
8854
|
-
|
|
8855
|
-
|
|
8856
|
-
|
|
8857
|
-
|
|
8858
|
-
|
|
8859
|
-
|
|
8860
|
-
}
|
|
8861
|
-
)
|
|
8862
|
-
] });
|
|
8775
|
+
return /* @__PURE__ */ jsx37(Fragment8, { children: /* @__PURE__ */ jsx37(
|
|
8776
|
+
"div",
|
|
8777
|
+
{
|
|
8778
|
+
style: { gridTemplateColumns: `repeat(${recoveryRenderMethods.length}, minmax(0, 1fr))` },
|
|
8779
|
+
className: "w-full max-w-[256px] grid gap-[var(--l-pass-gap)] mx-auto py-[var(--l-pass-pd)]",
|
|
8780
|
+
children: recoveryRenderMethods.map(({ method: recoveryMethod, label, Icon: Icon2, data, disabled }) => /* @__PURE__ */ jsxs30("div", { className: "w-full h-full flex flex-col items-center gap-[var(--l-pass-gap)]", children: [
|
|
8781
|
+
/* @__PURE__ */ jsxs30(
|
|
8782
|
+
Button,
|
|
8783
|
+
{
|
|
8784
|
+
size: "icon",
|
|
8785
|
+
variant: "outline",
|
|
8786
|
+
type: "button",
|
|
8787
|
+
disabled,
|
|
8788
|
+
style: { height: "unset", maxWidth: "96px" },
|
|
8789
|
+
className: "relative w-full aspect-square h-unset rounded-[var(--l-pass-el-bdrs)]",
|
|
8790
|
+
onClick: () => {
|
|
8791
|
+
setRestorePassword("");
|
|
8792
|
+
setRestoreFile(null);
|
|
8793
|
+
setShowPassword(false);
|
|
8794
|
+
setError(null);
|
|
8795
|
+
setSuccess(null);
|
|
8796
|
+
setMethod(recoveryMethod);
|
|
8797
|
+
},
|
|
8798
|
+
children: [
|
|
8799
|
+
/* @__PURE__ */ jsx37(Icon2, { className: "w-5 h-5 md:w-8 md:h-8" }),
|
|
8800
|
+
!!data?.lastBackup && /* @__PURE__ */ jsx37("div", { className: "w-6 h-6 absolute -top-2 -right-2 flex items-center justify-center bg-transparent", children: /* @__PURE__ */ jsx37(PositiveIcon, { className: "w-4 h-4" }) })
|
|
8801
|
+
]
|
|
8802
|
+
}
|
|
8803
|
+
),
|
|
8804
|
+
/* @__PURE__ */ jsx37("span", { className: "text-xs font-bold leading-4", children: label })
|
|
8805
|
+
] }, recoveryMethod))
|
|
8806
|
+
}
|
|
8807
|
+
) });
|
|
8863
8808
|
}
|
|
8864
8809
|
|
|
8865
8810
|
// src/internal/components/KeyshareRestoreMenu/components/NoBackupFound.tsx
|
|
8866
8811
|
import { AlertCircle, FileUp as FileUp2, Upload, User } from "lucide-react";
|
|
8867
8812
|
|
|
8868
8813
|
// src/internal/components/KeyshareRestoreMenu/components/PasswordPasskey.tsx
|
|
8869
|
-
import { ChevronRight as ChevronRight2, Eye, EyeOff, Info, Loader as
|
|
8870
|
-
import { useRef as
|
|
8871
|
-
import { Fragment as
|
|
8814
|
+
import { ChevronRight as ChevronRight2, Eye, EyeOff, Info, Key as Key4, Loader as Loader7 } from "lucide-react";
|
|
8815
|
+
import { useRef as useRef11 } from "react";
|
|
8816
|
+
import { Fragment as Fragment9, jsx as jsx38, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
8872
8817
|
function PasswordPasskey(props) {
|
|
8873
8818
|
const {
|
|
8874
8819
|
mode = "restore",
|
|
@@ -8880,32 +8825,79 @@ function PasswordPasskey(props) {
|
|
|
8880
8825
|
actionHandler
|
|
8881
8826
|
} = props;
|
|
8882
8827
|
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
8883
|
-
const actionRef =
|
|
8884
|
-
const {
|
|
8885
|
-
|
|
8886
|
-
|
|
8887
|
-
|
|
8888
|
-
|
|
8889
|
-
|
|
8890
|
-
|
|
8891
|
-
|
|
8892
|
-
|
|
8893
|
-
|
|
8828
|
+
const actionRef = useRef11(null);
|
|
8829
|
+
const {
|
|
8830
|
+
showPassword,
|
|
8831
|
+
restorePassword,
|
|
8832
|
+
usePasskey,
|
|
8833
|
+
error,
|
|
8834
|
+
setRestorePassword,
|
|
8835
|
+
setShowPassword,
|
|
8836
|
+
setUsePasskey,
|
|
8837
|
+
setRestoreFile
|
|
8838
|
+
} = useRestoreStore();
|
|
8839
|
+
return /* @__PURE__ */ jsxs31(Fragment9, { children: [
|
|
8840
|
+
mode === "backup" && /* @__PURE__ */ jsxs31("div", { className: "flex items-center justify-center px-[var(--l-pass-pd)]", children: [
|
|
8841
|
+
/* @__PURE__ */ jsxs31(
|
|
8842
|
+
Button,
|
|
8894
8843
|
{
|
|
8895
|
-
|
|
8896
|
-
|
|
8897
|
-
|
|
8898
|
-
|
|
8899
|
-
|
|
8900
|
-
|
|
8901
|
-
|
|
8844
|
+
size: "medium",
|
|
8845
|
+
variant: "ghost",
|
|
8846
|
+
onClick: () => {
|
|
8847
|
+
setUsePasskey(false);
|
|
8848
|
+
setRestoreFile(null);
|
|
8849
|
+
setRestorePassword("");
|
|
8850
|
+
},
|
|
8851
|
+
className: cn(usePasskey ? "opacity-50" : "opacity-100"),
|
|
8852
|
+
children: [
|
|
8853
|
+
/* @__PURE__ */ jsx38(OtpIcon, { className: "w-4 h-4 inline-block mr-1" }),
|
|
8854
|
+
"Password"
|
|
8855
|
+
]
|
|
8856
|
+
}
|
|
8857
|
+
),
|
|
8858
|
+
/* @__PURE__ */ jsxs31(
|
|
8859
|
+
Button,
|
|
8860
|
+
{
|
|
8861
|
+
size: "medium",
|
|
8862
|
+
variant: "ghost",
|
|
8863
|
+
onClick: () => {
|
|
8864
|
+
setUsePasskey(true);
|
|
8865
|
+
setRestoreFile(null);
|
|
8866
|
+
setRestorePassword("");
|
|
8867
|
+
},
|
|
8868
|
+
className: cn(usePasskey ? "opacity-100" : "opacity-50"),
|
|
8869
|
+
children: [
|
|
8870
|
+
/* @__PURE__ */ jsx38(Key4, { className: "w-4 h-4 inline-block mr-1" }),
|
|
8871
|
+
"Passkey"
|
|
8872
|
+
]
|
|
8873
|
+
}
|
|
8874
|
+
)
|
|
8875
|
+
] }),
|
|
8876
|
+
!hasServerVault && /* @__PURE__ */ jsxs31("span", { className: "block w-full text-[10px] leading-8 px-[var(--l-pass-pd)] truncate", children: [
|
|
8877
|
+
"Use your ",
|
|
8878
|
+
/* @__PURE__ */ jsx38("strong", { children: usePasskey ? "Passkey" : "Password" }),
|
|
8879
|
+
" to",
|
|
8880
|
+
" ",
|
|
8881
|
+
/* @__PURE__ */ jsx38("span", { children: mode === "backup" ? "complete account security setup." : "get access to your account." })
|
|
8882
|
+
] }),
|
|
8883
|
+
!usePasskey ? /* @__PURE__ */ jsxs31("div", { className: "w-full flex gap-[var(--l-pass-gap)]", children: [
|
|
8884
|
+
/* @__PURE__ */ jsx38(
|
|
8885
|
+
Input,
|
|
8886
|
+
{
|
|
8887
|
+
autoComplete: "off",
|
|
8888
|
+
Icon: OtpIcon,
|
|
8889
|
+
type: showPassword ? "text" : "password",
|
|
8890
|
+
placeholder: "Password",
|
|
8891
|
+
value: restorePassword,
|
|
8892
|
+
disabled: isLoading || disabled,
|
|
8893
|
+
className: "flex-1",
|
|
8902
8894
|
onChange: (e) => {
|
|
8903
8895
|
setRestorePassword(e.target.value);
|
|
8904
8896
|
},
|
|
8905
8897
|
onKeyDown: (e) => {
|
|
8906
8898
|
if (e.key === "Enter" && !isLoading && restorePassword) actionRef.current?.click();
|
|
8907
8899
|
},
|
|
8908
|
-
element: /* @__PURE__ */
|
|
8900
|
+
element: /* @__PURE__ */ jsx38(
|
|
8909
8901
|
Button,
|
|
8910
8902
|
{
|
|
8911
8903
|
variant: "ghost",
|
|
@@ -8914,12 +8906,12 @@ function PasswordPasskey(props) {
|
|
|
8914
8906
|
title: "Toggle Password Visibility",
|
|
8915
8907
|
disabled: isLoading || disabled,
|
|
8916
8908
|
onClick: () => setShowPassword(!showPassword),
|
|
8917
|
-
children: showPassword ? /* @__PURE__ */
|
|
8909
|
+
children: showPassword ? /* @__PURE__ */ jsx38(EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx38(Eye, { className: "h-4 w-4" })
|
|
8918
8910
|
}
|
|
8919
8911
|
)
|
|
8920
8912
|
}
|
|
8921
8913
|
),
|
|
8922
|
-
/* @__PURE__ */
|
|
8914
|
+
/* @__PURE__ */ jsx38(
|
|
8923
8915
|
Button,
|
|
8924
8916
|
{
|
|
8925
8917
|
ref: actionRef,
|
|
@@ -8929,10 +8921,10 @@ function PasswordPasskey(props) {
|
|
|
8929
8921
|
title: actionCaption,
|
|
8930
8922
|
disabled: isLoading || disabled || error?.includes("Invalid backup file") || !usePasskey && !restorePassword,
|
|
8931
8923
|
className: "w-full w-12 h-12 flex-shrink-0 rounded-[var(--l-pass-el-bdrs)]",
|
|
8932
|
-
children: isLoading ? /* @__PURE__ */
|
|
8924
|
+
children: isLoading ? /* @__PURE__ */ jsx38(Loader7, { className: "animate-spin h-4 w-4" }) : /* @__PURE__ */ jsx38(ChevronRight2, { className: "h-4 w-4" })
|
|
8933
8925
|
}
|
|
8934
8926
|
)
|
|
8935
|
-
] }) : /* @__PURE__ */
|
|
8927
|
+
] }) : /* @__PURE__ */ jsxs31(
|
|
8936
8928
|
Button,
|
|
8937
8929
|
{
|
|
8938
8930
|
ref: actionRef,
|
|
@@ -8943,18 +8935,18 @@ function PasswordPasskey(props) {
|
|
|
8943
8935
|
disabled: isLoading || disabled || !!error || !usePasskey && !restorePassword,
|
|
8944
8936
|
className: "w-full",
|
|
8945
8937
|
children: [
|
|
8946
|
-
isLoading ? /* @__PURE__ */
|
|
8947
|
-
!isLoading && /* @__PURE__ */
|
|
8938
|
+
isLoading ? /* @__PURE__ */ jsx38(Loader7, { className: "animate-spin h-4 w-4" }) : /* @__PURE__ */ jsx38(ActionIcon, { className: "h-4 w-4" }),
|
|
8939
|
+
!isLoading && /* @__PURE__ */ jsx38("span", { children: actionCaption })
|
|
8948
8940
|
]
|
|
8949
8941
|
}
|
|
8950
8942
|
),
|
|
8951
|
-
!isEncryptionMethod && !!usePasskey && /* @__PURE__ */
|
|
8952
|
-
/* @__PURE__ */
|
|
8953
|
-
/* @__PURE__ */
|
|
8954
|
-
/* @__PURE__ */
|
|
8955
|
-
/* @__PURE__ */
|
|
8943
|
+
!isEncryptionMethod && !!usePasskey && /* @__PURE__ */ jsx38(Highlight, { type: "info", className: "w-full flex flex-col gap-[var(--l-pass-gap)] text-[10px]", children: mode === "backup" && /* @__PURE__ */ jsxs31("div", { className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
8944
|
+
/* @__PURE__ */ jsx38(Info, { className: "h-4 w-4 flex-shrink-0" }),
|
|
8945
|
+
/* @__PURE__ */ jsxs31("span", { className: "text-[var(--l-pass-fg-muted)] block flex-1", children: [
|
|
8946
|
+
/* @__PURE__ */ jsx38("span", { className: "block mb-1", children: "Your Backup must be encrypted with a password or a passkey, so only you can decrypt it no matter where backup is stored." }),
|
|
8947
|
+
/* @__PURE__ */ jsxs31("span", { className: "block", children: [
|
|
8956
8948
|
" Passkeys are a password-free alternative. ",
|
|
8957
|
-
/* @__PURE__ */
|
|
8949
|
+
/* @__PURE__ */ jsx38(
|
|
8958
8950
|
"a",
|
|
8959
8951
|
{
|
|
8960
8952
|
target: "_blank",
|
|
@@ -8971,7 +8963,7 @@ function PasswordPasskey(props) {
|
|
|
8971
8963
|
}
|
|
8972
8964
|
|
|
8973
8965
|
// src/internal/components/KeyshareRestoreMenu/components/NoBackupFound.tsx
|
|
8974
|
-
import { Fragment as
|
|
8966
|
+
import { Fragment as Fragment10, jsx as jsx39, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
8975
8967
|
function NoBackupFound(props) {
|
|
8976
8968
|
const { isLoading, restoreFromFile } = props;
|
|
8977
8969
|
const restoreFile = useRestoreStore((st) => st.restoreFile);
|
|
@@ -8980,33 +8972,33 @@ function NoBackupFound(props) {
|
|
|
8980
8972
|
const setRestoreFile = useRestoreStore((st) => st.setRestoreFile);
|
|
8981
8973
|
const setError = useRestoreStore((st) => st.setError);
|
|
8982
8974
|
useValidateFileBackup();
|
|
8983
|
-
return /* @__PURE__ */
|
|
8984
|
-
/* @__PURE__ */
|
|
8985
|
-
/* @__PURE__ */
|
|
8986
|
-
/* @__PURE__ */
|
|
8975
|
+
return /* @__PURE__ */ jsxs32(Fragment10, { children: [
|
|
8976
|
+
/* @__PURE__ */ jsxs32("div", { className: "flex items-center justify-center gap-2 px-5 pt-3 pb-6", children: [
|
|
8977
|
+
/* @__PURE__ */ jsx39(User, { className: "w-6 h-6" }),
|
|
8978
|
+
/* @__PURE__ */ jsx39("span", { className: "font-bold text-xl leading-6", children: "Account Recovery" })
|
|
8987
8979
|
] }),
|
|
8988
|
-
!restoreFile && /* @__PURE__ */
|
|
8989
|
-
/* @__PURE__ */
|
|
8990
|
-
/* @__PURE__ */
|
|
8991
|
-
/* @__PURE__ */
|
|
8992
|
-
/* @__PURE__ */
|
|
8993
|
-
/* @__PURE__ */
|
|
8994
|
-
/* @__PURE__ */
|
|
8980
|
+
!restoreFile && /* @__PURE__ */ jsxs32(Highlight, { type: "warning", className: "animate-glow-warning flex gap-[var(--l-pass-gap)]", children: [
|
|
8981
|
+
/* @__PURE__ */ jsx39(AlertCircle, { className: "h-4 w-4 flex-0" }),
|
|
8982
|
+
/* @__PURE__ */ jsxs32("div", { className: "w-full flex-1 flex flex-col gap-2", children: [
|
|
8983
|
+
/* @__PURE__ */ jsx39("span", { className: "block w-full text-sm leading-4 font-bold", children: "No Backup Found" }),
|
|
8984
|
+
/* @__PURE__ */ jsxs32("span", { className: "block w-full text-xs", children: [
|
|
8985
|
+
/* @__PURE__ */ jsx39("span", { className: "block mb-1", children: "This device doesn't have access to your wallet keyshare, and no backup was found." }),
|
|
8986
|
+
/* @__PURE__ */ jsx39("span", { className: "block w-full", children: "If you're using a different device, please return to the one where you created your account to create a backup, then restore access on this device." })
|
|
8995
8987
|
] })
|
|
8996
8988
|
] })
|
|
8997
8989
|
] }),
|
|
8998
|
-
!restoreFile && /* @__PURE__ */
|
|
8999
|
-
/* @__PURE__ */
|
|
9000
|
-
/* @__PURE__ */
|
|
8990
|
+
!restoreFile && /* @__PURE__ */ jsxs32(Highlight, { type: "info", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
8991
|
+
/* @__PURE__ */ jsx39(Upload, { className: "h-4 w-4 flex-0" }),
|
|
8992
|
+
/* @__PURE__ */ jsx39("span", { className: "block w-full text-xs", children: "Upload a backup file if you have one" })
|
|
9001
8993
|
] }),
|
|
9002
|
-
/* @__PURE__ */
|
|
8994
|
+
/* @__PURE__ */ jsx39(
|
|
9003
8995
|
"label",
|
|
9004
8996
|
{
|
|
9005
8997
|
className: cn(
|
|
9006
8998
|
"block w-full flex items-center justify-center cursor-pointer",
|
|
9007
8999
|
"p-[var(--l-pass-gap)] bg-[var(--l-pass-secondary)] rounded-[var(--l-pass-el-bdrs)]"
|
|
9008
9000
|
),
|
|
9009
|
-
children: /* @__PURE__ */
|
|
9001
|
+
children: /* @__PURE__ */ jsx39(
|
|
9010
9002
|
"input",
|
|
9011
9003
|
{
|
|
9012
9004
|
type: "file",
|
|
@@ -9027,7 +9019,7 @@ function NoBackupFound(props) {
|
|
|
9027
9019
|
)
|
|
9028
9020
|
}
|
|
9029
9021
|
),
|
|
9030
|
-
restoreFile && /* @__PURE__ */
|
|
9022
|
+
restoreFile && /* @__PURE__ */ jsx39(
|
|
9031
9023
|
PasswordPasskey,
|
|
9032
9024
|
{
|
|
9033
9025
|
mode: "restore",
|
|
@@ -9042,125 +9034,16 @@ function NoBackupFound(props) {
|
|
|
9042
9034
|
}
|
|
9043
9035
|
|
|
9044
9036
|
// src/internal/components/KeyshareRestoreMenu/methods/File.tsx
|
|
9045
|
-
import {
|
|
9046
|
-
|
|
9047
|
-
// src/internal/components/ui/switch.tsx
|
|
9048
|
-
import { forwardRef as forwardRef4, useState as useState9 } from "react";
|
|
9049
|
-
import { jsx as jsx39, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
9050
|
-
var Switch = forwardRef4((props, ref) => {
|
|
9051
|
-
const { className, labels, ...inputProps } = props;
|
|
9052
|
-
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
9053
|
-
const [labelW, setLabelW] = useState9(0);
|
|
9054
|
-
return /* @__PURE__ */ jsx39(
|
|
9055
|
-
"div",
|
|
9056
|
-
{
|
|
9057
|
-
role: "switch",
|
|
9058
|
-
"aria-checked": inputProps.checked,
|
|
9059
|
-
className: cn(
|
|
9060
|
-
"block rounded-full w-fit h-7 p-1 outline-none flex-none",
|
|
9061
|
-
inputProps.checked ? "bg-[var(--l-pass-bg-success)]" : "bg-[var(--l-pass-bg-info)]",
|
|
9062
|
-
className
|
|
9063
|
-
),
|
|
9064
|
-
children: /* @__PURE__ */ jsxs32(
|
|
9065
|
-
"label",
|
|
9066
|
-
{
|
|
9067
|
-
className: "relative inline-block h-5 outline-none",
|
|
9068
|
-
style: {
|
|
9069
|
-
width: `calc(20px + ${labelW}px)`,
|
|
9070
|
-
transition: "width 200ms ease",
|
|
9071
|
-
cursor: inputProps.disabled ? "not-allowed" : "pointer"
|
|
9072
|
-
},
|
|
9073
|
-
children: [
|
|
9074
|
-
/* @__PURE__ */ jsx39("input", { type: "checkbox", className: "hidden sr-only peer outline-none", ref, ...inputProps }),
|
|
9075
|
-
/* @__PURE__ */ jsx39(
|
|
9076
|
-
"span",
|
|
9077
|
-
{
|
|
9078
|
-
ref: (inst) => {
|
|
9079
|
-
if (inst) setLabelW(inst.clientWidth);
|
|
9080
|
-
},
|
|
9081
|
-
style: {
|
|
9082
|
-
left: inputProps.checked ? "0px" : "20px",
|
|
9083
|
-
color: inputProps.checked ? colorMode === "dark" ? "var(--l-pass-fg-inverted)" : "var(--l-pass-fg)" : "var(--l-pass-fg)",
|
|
9084
|
-
transition: "left 200ms ease"
|
|
9085
|
-
},
|
|
9086
|
-
className: "absolute top-0 px-2 text-xs leading-5 font-semibold min-w-5 select-none",
|
|
9087
|
-
children: inputProps.checked ? labels?.checked : labels?.unchecked
|
|
9088
|
-
}
|
|
9089
|
-
),
|
|
9090
|
-
/* @__PURE__ */ jsx39(
|
|
9091
|
-
"span",
|
|
9092
|
-
{
|
|
9093
|
-
style: {
|
|
9094
|
-
left: inputProps.checked ? `${labelW}px` : "0px",
|
|
9095
|
-
transition: "left 200ms ease"
|
|
9096
|
-
},
|
|
9097
|
-
className: cn("absolute top-0 w-5 h-5 rounded-full bg-[var(--l-pass-fg)]", {
|
|
9098
|
-
// 'bg-[var(--l-pass-fg-inverted)]': inputProps.checked,
|
|
9099
|
-
// 'bg-[var(--l-pass-fg)]': !inputProps.checked
|
|
9100
|
-
})
|
|
9101
|
-
}
|
|
9102
|
-
)
|
|
9103
|
-
]
|
|
9104
|
-
}
|
|
9105
|
-
)
|
|
9106
|
-
}
|
|
9107
|
-
);
|
|
9108
|
-
});
|
|
9109
|
-
Switch.displayName = "Switch";
|
|
9110
|
-
|
|
9111
|
-
// src/internal/components/KeyshareRestoreMenu/methods/File.tsx
|
|
9112
|
-
import { Fragment as Fragment10, jsx as jsx40, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
9037
|
+
import { FileDown as FileDown2, FileUp as FileUp3 } from "lucide-react";
|
|
9038
|
+
import { Fragment as Fragment11, jsx as jsx40, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
9113
9039
|
function File2(props) {
|
|
9114
9040
|
const { isLoading, mode = "restore", fileHandler } = props;
|
|
9115
|
-
const {
|
|
9116
|
-
restoreFile,
|
|
9117
|
-
error,
|
|
9118
|
-
usePasskey,
|
|
9119
|
-
setRestorePassword,
|
|
9120
|
-
setMethod,
|
|
9121
|
-
setRestoreFile,
|
|
9122
|
-
setUsePasskey,
|
|
9123
|
-
setError,
|
|
9124
|
-
setSuccess
|
|
9125
|
-
} = useRestoreStore();
|
|
9041
|
+
const { restoreFile, error, setRestoreFile, setError } = useRestoreStore();
|
|
9126
9042
|
useValidateFileBackup();
|
|
9127
9043
|
const actionText = mode === "backup" ? "Download" : "Restore with";
|
|
9128
9044
|
const isPasswordPasskey = mode === "restore" && !!restoreFile || mode === "backup";
|
|
9129
|
-
return /* @__PURE__ */ jsxs33(
|
|
9130
|
-
/* @__PURE__ */
|
|
9131
|
-
/* @__PURE__ */ jsxs33("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9132
|
-
/* @__PURE__ */ jsx40(
|
|
9133
|
-
Button,
|
|
9134
|
-
{
|
|
9135
|
-
variant: "ghost",
|
|
9136
|
-
size: "icon",
|
|
9137
|
-
title: "Back",
|
|
9138
|
-
onClick: () => {
|
|
9139
|
-
setRestoreFile(null);
|
|
9140
|
-
setError(null);
|
|
9141
|
-
setSuccess(null);
|
|
9142
|
-
setUsePasskey(false);
|
|
9143
|
-
setMethod(null);
|
|
9144
|
-
},
|
|
9145
|
-
children: /* @__PURE__ */ jsx40(ArrowLeft6, { className: "h-4 w-4" })
|
|
9146
|
-
}
|
|
9147
|
-
),
|
|
9148
|
-
/* @__PURE__ */ jsx40("span", { className: "text-xl font-semibold", children: `${mode === "restore" ? "Restore with" : ""} File ${mode === "restore" ? "by" : "Backup by"}`.trim() })
|
|
9149
|
-
] }),
|
|
9150
|
-
mode !== "restore" && /* @__PURE__ */ jsx40(
|
|
9151
|
-
Switch,
|
|
9152
|
-
{
|
|
9153
|
-
name: "password-passkey-toggle",
|
|
9154
|
-
labels: { checked: "Password", unchecked: "Passkey" },
|
|
9155
|
-
disabled: isLoading || !!error,
|
|
9156
|
-
checked: !usePasskey,
|
|
9157
|
-
onChange: (e) => {
|
|
9158
|
-
if (!!e.target.checked) setRestorePassword("");
|
|
9159
|
-
setUsePasskey(!e.target.checked);
|
|
9160
|
-
}
|
|
9161
|
-
}
|
|
9162
|
-
)
|
|
9163
|
-
] }),
|
|
9045
|
+
return /* @__PURE__ */ jsxs33(Fragment11, { children: [
|
|
9046
|
+
/* @__PURE__ */ jsx40("span", { className: "block w-full text-[10px] text-center leading-8 px-[var(--l-pass-pd)] truncate", children: `${mode === "restore" ? "Restore with" : ""} File ${mode === "restore" ? "" : "Backup by"}`.trim() }),
|
|
9164
9047
|
mode === "restore" && /* @__PURE__ */ jsx40(
|
|
9165
9048
|
"label",
|
|
9166
9049
|
{
|
|
@@ -9204,61 +9087,23 @@ function File2(props) {
|
|
|
9204
9087
|
}
|
|
9205
9088
|
|
|
9206
9089
|
// src/internal/components/KeyshareRestoreMenu/methods/Server.tsx
|
|
9207
|
-
import { useQueryClient as
|
|
9090
|
+
import { useQueryClient as useQueryClient6 } from "@tanstack/react-query";
|
|
9208
9091
|
import dayjs from "dayjs";
|
|
9209
|
-
import {
|
|
9210
|
-
import { useEffect as
|
|
9211
|
-
import { Fragment as
|
|
9092
|
+
import { Download, Key as Key5, Upload as Upload2 } from "lucide-react";
|
|
9093
|
+
import { useEffect as useEffect16 } from "react";
|
|
9094
|
+
import { Fragment as Fragment12, jsx as jsx41, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
9212
9095
|
function Server(props) {
|
|
9213
9096
|
const { isLoading, mode = "restore", serverHandler } = props;
|
|
9214
|
-
const qc =
|
|
9097
|
+
const qc = useQueryClient6();
|
|
9215
9098
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9216
|
-
const
|
|
9217
|
-
const { usePasskey, error, setUsePasskey, setRestorePassword, setShowPassword, setMethod, setError, setSuccess } = useRestoreStore();
|
|
9099
|
+
const setUsePasskey = useRestoreStore((st) => st.setUsePasskey);
|
|
9218
9100
|
const serverRecoveryStatus = qc.getQueryData([CHECK_BACKUP_QUERY_KEY, address]);
|
|
9219
|
-
|
|
9101
|
+
useEffect16(() => {
|
|
9220
9102
|
if (mode === "backup" || !serverRecoveryStatus?.created?.encryptionMethod) return;
|
|
9221
9103
|
setUsePasskey(serverRecoveryStatus.created.encryptionMethod === "passkey");
|
|
9222
9104
|
}, [mode, serverRecoveryStatus, setUsePasskey]);
|
|
9223
9105
|
const isEncryptionMethod = mode === "restore" && !!serverRecoveryStatus?.created?.encryptionMethod;
|
|
9224
|
-
return /* @__PURE__ */ jsxs34(
|
|
9225
|
-
/* @__PURE__ */ jsxs34("div", { className: cn("flex items-center justify-between", { "px-[var(--l-pass-pd)]": !hasServerVault }), children: [
|
|
9226
|
-
/* @__PURE__ */ jsxs34("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9227
|
-
!!hasServerVault && /* @__PURE__ */ jsx41(
|
|
9228
|
-
Button,
|
|
9229
|
-
{
|
|
9230
|
-
variant: "ghost",
|
|
9231
|
-
size: "icon",
|
|
9232
|
-
title: "Back",
|
|
9233
|
-
onClick: () => {
|
|
9234
|
-
setShowPassword(false);
|
|
9235
|
-
setUsePasskey(false);
|
|
9236
|
-
setRestorePassword("");
|
|
9237
|
-
setUsePasskey(false);
|
|
9238
|
-
setError(null);
|
|
9239
|
-
setSuccess(null);
|
|
9240
|
-
setMethod(null);
|
|
9241
|
-
},
|
|
9242
|
-
children: /* @__PURE__ */ jsx41(ArrowLeft7, { className: "h-4 w-4" })
|
|
9243
|
-
}
|
|
9244
|
-
),
|
|
9245
|
-
/* @__PURE__ */ jsx41("span", { className: "text-xl font-semibold", children: mode === "restore" ? "Restore with" : usePasskey ? "Passkey" : "Password" })
|
|
9246
|
-
] }),
|
|
9247
|
-
!isEncryptionMethod && /* @__PURE__ */ jsx41(
|
|
9248
|
-
Switch,
|
|
9249
|
-
{
|
|
9250
|
-
name: "password-passkey-toggle",
|
|
9251
|
-
labels: { checked: "Password", unchecked: "Passkey" },
|
|
9252
|
-
disabled: isLoading,
|
|
9253
|
-
checked: !usePasskey,
|
|
9254
|
-
onChange: (e) => {
|
|
9255
|
-
if (!!error) setError(null);
|
|
9256
|
-
if (!!e.target.checked) setRestorePassword("");
|
|
9257
|
-
setUsePasskey(!e.target.checked);
|
|
9258
|
-
}
|
|
9259
|
-
}
|
|
9260
|
-
)
|
|
9261
|
-
] }),
|
|
9106
|
+
return /* @__PURE__ */ jsxs34(Fragment12, { children: [
|
|
9262
9107
|
/* @__PURE__ */ jsx41(
|
|
9263
9108
|
PasswordPasskey,
|
|
9264
9109
|
{
|
|
@@ -9271,7 +9116,7 @@ function Server(props) {
|
|
|
9271
9116
|
}
|
|
9272
9117
|
),
|
|
9273
9118
|
!!serverRecoveryStatus?.created?.at && /* @__PURE__ */ jsxs34(Highlight, { type: "success", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9274
|
-
serverRecoveryStatus.created.encryptionMethod === "password" ? /* @__PURE__ */ jsx41(OtpIcon, { className: "w-4 h-4 inline" }) : /* @__PURE__ */ jsx41(
|
|
9119
|
+
serverRecoveryStatus.created.encryptionMethod === "password" ? /* @__PURE__ */ jsx41(OtpIcon, { className: "w-4 h-4 inline" }) : /* @__PURE__ */ jsx41(Key5, { className: "w-4 h-4 inline" }),
|
|
9275
9120
|
/* @__PURE__ */ jsxs34("span", { className: "text-[10px] flex-1 block", children: [
|
|
9276
9121
|
/* @__PURE__ */ jsx41("span", { children: `We found a ${serverRecoveryStatus.created.encryptionMethod?.toUpperCase()} Backup` }),
|
|
9277
9122
|
/* @__PURE__ */ jsx41("br", {}),
|
|
@@ -9285,9 +9130,9 @@ function Server(props) {
|
|
|
9285
9130
|
}
|
|
9286
9131
|
|
|
9287
9132
|
// src/internal/components/KeyshareRestoreMenu/methods/Cloud.tsx
|
|
9288
|
-
import { useQuery as
|
|
9289
|
-
import { ArrowLeft as
|
|
9290
|
-
import { useEffect as
|
|
9133
|
+
import { useQuery as useQuery6 } from "@tanstack/react-query";
|
|
9134
|
+
import { ArrowLeft as ArrowLeft6, CloudDownload, CloudUpload, Loader as Loader8 } from "lucide-react";
|
|
9135
|
+
import { useEffect as useEffect17 } from "react";
|
|
9291
9136
|
|
|
9292
9137
|
// src/internal/components/ui/select.tsx
|
|
9293
9138
|
import * as SelectPrimitive from "@radix-ui/react-select";
|
|
@@ -9415,7 +9260,7 @@ function SelectScrollDownButton({
|
|
|
9415
9260
|
}
|
|
9416
9261
|
|
|
9417
9262
|
// src/internal/components/KeyshareRestoreMenu/methods/Cloud.tsx
|
|
9418
|
-
import { Fragment as
|
|
9263
|
+
import { Fragment as Fragment13, jsx as jsx43, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
9419
9264
|
function Cloud2(props) {
|
|
9420
9265
|
const { isLoading, mode = "restore", cloudHandler } = props;
|
|
9421
9266
|
const session = useLumiaPassportSession((st) => st.session);
|
|
@@ -9425,7 +9270,7 @@ function Cloud2(props) {
|
|
|
9425
9270
|
data: cloudProviders = [],
|
|
9426
9271
|
isLoading: isCloudProvidersLoading,
|
|
9427
9272
|
error: cloudProvidersError
|
|
9428
|
-
} =
|
|
9273
|
+
} = useQuery6({
|
|
9429
9274
|
retry: false,
|
|
9430
9275
|
enabled: !!passportUserId,
|
|
9431
9276
|
queryKey: [AVAILABLE_CLOUD_PROVIDERS_QUERY_KEY, passportUserId],
|
|
@@ -9435,7 +9280,7 @@ function Cloud2(props) {
|
|
|
9435
9280
|
return availableProviders.map((p) => ({ id: p.id, name: p.name, available: p.isAvailable() }));
|
|
9436
9281
|
}
|
|
9437
9282
|
});
|
|
9438
|
-
|
|
9283
|
+
useEffect17(() => {
|
|
9439
9284
|
if (isCloudProvidersLoading) return;
|
|
9440
9285
|
if (!!cloudProvidersError) {
|
|
9441
9286
|
console.error("[KeyshareBackup] Failed to load cloud providers:", cloudProvidersError);
|
|
@@ -9443,7 +9288,7 @@ function Cloud2(props) {
|
|
|
9443
9288
|
}
|
|
9444
9289
|
if (cloudProviders.length > 0 && !selectedCloudProvider) setSelectedCloudProvider(cloudProviders[0].id);
|
|
9445
9290
|
}, [cloudProviders, selectedCloudProvider, cloudProvidersError, isCloudProvidersLoading]);
|
|
9446
|
-
return /* @__PURE__ */ jsxs36(
|
|
9291
|
+
return /* @__PURE__ */ jsxs36(Fragment13, { children: [
|
|
9447
9292
|
/* @__PURE__ */ jsxs36("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9448
9293
|
/* @__PURE__ */ jsx43(
|
|
9449
9294
|
Button,
|
|
@@ -9457,12 +9302,12 @@ function Cloud2(props) {
|
|
|
9457
9302
|
setSelectedCloudProvider(null);
|
|
9458
9303
|
setMethod(null);
|
|
9459
9304
|
},
|
|
9460
|
-
children: /* @__PURE__ */ jsx43(
|
|
9305
|
+
children: /* @__PURE__ */ jsx43(ArrowLeft6, { className: "h-4 w-4" })
|
|
9461
9306
|
}
|
|
9462
9307
|
),
|
|
9463
9308
|
/* @__PURE__ */ jsx43("span", { className: "text-lg font-semibold", children: `${mode === "restore" ? "Restore" : "Create"} Cloud Backup` })
|
|
9464
9309
|
] }),
|
|
9465
|
-
isCloudProvidersLoading && /* @__PURE__ */ jsx43(
|
|
9310
|
+
isCloudProvidersLoading && /* @__PURE__ */ jsx43(Loader8, { className: "animate-spin w-4 h-4 mx-auto" }),
|
|
9466
9311
|
/* @__PURE__ */ jsx43("span", { className: "block text-[10px] text-[var(--l-pass-fg-muted)]", children: "1. Select Cloud Backup Vault" }),
|
|
9467
9312
|
/* @__PURE__ */ jsxs36(
|
|
9468
9313
|
Select,
|
|
@@ -9501,30 +9346,21 @@ function Cloud2(props) {
|
|
|
9501
9346
|
}
|
|
9502
9347
|
|
|
9503
9348
|
// src/internal/components/KeyshareRestoreMenu/KeyshareRestoreMenu.tsx
|
|
9504
|
-
import { Fragment as
|
|
9349
|
+
import { Fragment as Fragment14, jsx as jsx44, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
9505
9350
|
var RESTORE_COMPONENTS = {
|
|
9506
9351
|
server: Server,
|
|
9507
9352
|
cloud: Cloud2,
|
|
9508
9353
|
file: File2
|
|
9509
9354
|
};
|
|
9510
9355
|
var KeyshareRestoreMenu = () => {
|
|
9511
|
-
const qc =
|
|
9356
|
+
const qc = useQueryClient7();
|
|
9512
9357
|
const callbacks = useLumiaPassportConfig().callbacks;
|
|
9513
9358
|
const { address, setSession, setAddress, setStatus, setIsLoading } = useLumiaPassportSession();
|
|
9514
|
-
const { data: serverRecoveryStatus, isLoading: isBackupStatusLoading } = useQuery8({
|
|
9515
|
-
retry: false,
|
|
9516
|
-
queryKey: [CHECK_BACKUP_QUERY_KEY, address],
|
|
9517
|
-
queryFn: async () => await getShareRecoveryStats()
|
|
9518
|
-
});
|
|
9519
9359
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
9520
9360
|
const setIsDialogForced = useLayoutStore((st) => st.setIsDialogForced);
|
|
9521
9361
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
9522
|
-
useEffect21(() => setIsDialogForced(true), []);
|
|
9523
|
-
useCheckBackupAvailability();
|
|
9524
9362
|
const {
|
|
9525
9363
|
method: currentRestoreMethod,
|
|
9526
|
-
checkingBackup,
|
|
9527
|
-
hasServerBackup,
|
|
9528
9364
|
error,
|
|
9529
9365
|
success,
|
|
9530
9366
|
setError,
|
|
@@ -9535,6 +9371,16 @@ var KeyshareRestoreMenu = () => {
|
|
|
9535
9371
|
setSuccess,
|
|
9536
9372
|
setMethod
|
|
9537
9373
|
} = useRestoreStore();
|
|
9374
|
+
useEffect18(() => {
|
|
9375
|
+
setIsDialogForced(true);
|
|
9376
|
+
return () => {
|
|
9377
|
+
setRestoreFile(null);
|
|
9378
|
+
setShowPassword(false);
|
|
9379
|
+
setUsePasskey(false);
|
|
9380
|
+
setMethod(null);
|
|
9381
|
+
setIsDialogForced(false);
|
|
9382
|
+
};
|
|
9383
|
+
}, []);
|
|
9538
9384
|
const {
|
|
9539
9385
|
restoreFromServer: restoreFromServer2,
|
|
9540
9386
|
isRestoringFromServer,
|
|
@@ -9543,7 +9389,16 @@ var KeyshareRestoreMenu = () => {
|
|
|
9543
9389
|
restoreFromCloud,
|
|
9544
9390
|
isRestoringFromCloud
|
|
9545
9391
|
} = useRestoreAccount();
|
|
9546
|
-
const {
|
|
9392
|
+
const { data: serverRecoveryStatus, isLoading: isBackupStatusLoading } = useQuery7({
|
|
9393
|
+
retry: false,
|
|
9394
|
+
queryKey: [CHECK_BACKUP_QUERY_KEY, address],
|
|
9395
|
+
queryFn: async () => await getShareRecoveryStats()
|
|
9396
|
+
});
|
|
9397
|
+
const hasServerBackup = serverRecoveryStatus?.created || serverRecoveryStatus?.devices?.length > 0;
|
|
9398
|
+
useEffect18(() => {
|
|
9399
|
+
if (!!hasServerBackup) setMethod("server");
|
|
9400
|
+
}, [hasServerBackup]);
|
|
9401
|
+
const { mutate: disconnect, isPending: isDisconnecting } = useMutation9({
|
|
9547
9402
|
mutationFn: async () => {
|
|
9548
9403
|
setError(null);
|
|
9549
9404
|
setMethod(null);
|
|
@@ -9574,29 +9429,47 @@ var KeyshareRestoreMenu = () => {
|
|
|
9574
9429
|
}
|
|
9575
9430
|
});
|
|
9576
9431
|
const RestoreComponent = currentRestoreMethod ? RESTORE_COMPONENTS[currentRestoreMethod] : null;
|
|
9577
|
-
const isBackupChecking = checkingBackup || isBackupStatusLoading;
|
|
9578
9432
|
return /* @__PURE__ */ jsx44(
|
|
9579
9433
|
"div",
|
|
9580
9434
|
{
|
|
9581
9435
|
style: { "--l-pass-scrollbar-mah": `${maxScrollHeight}px` },
|
|
9582
9436
|
className: "list-scrollbar-y w-full",
|
|
9583
9437
|
children: /* @__PURE__ */ jsxs37(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: [
|
|
9584
|
-
|
|
9585
|
-
/* @__PURE__ */ jsx44(
|
|
9586
|
-
/* @__PURE__ */ jsx44("span", { className: "block w-full text-xs leading-4", children: "Checking for backups..." })
|
|
9587
|
-
/* @__PURE__ */ jsx44("span", { className: "block w-full text-xs leading-4", children: "Please wait while we check for available backups..." })
|
|
9438
|
+
isBackupStatusLoading && /* @__PURE__ */ jsxs37("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)] text-center justify-center items-center", children: [
|
|
9439
|
+
/* @__PURE__ */ jsx44(Loader9, { className: "w-5 h-5 animate-spin" }),
|
|
9440
|
+
/* @__PURE__ */ jsx44("span", { className: "block w-full text-xs leading-4", children: "Checking for backups..." })
|
|
9588
9441
|
] }),
|
|
9589
|
-
!success && !
|
|
9442
|
+
!success && !isBackupStatusLoading && !isDisconnecting && !hasServerBackup && /* @__PURE__ */ jsx44(
|
|
9590
9443
|
NoBackupFound,
|
|
9591
9444
|
{
|
|
9592
9445
|
isLoading: isRestoringFromServer || isRestoringFromCloud || isRestoringFromFile || isDisconnecting,
|
|
9593
9446
|
restoreFromFile
|
|
9594
9447
|
}
|
|
9595
9448
|
),
|
|
9596
|
-
!success && !
|
|
9597
|
-
/* @__PURE__ */ jsxs37("div", { className: "flex items-center justify-
|
|
9598
|
-
/* @__PURE__ */
|
|
9599
|
-
|
|
9449
|
+
!success && !isBackupStatusLoading && !isDisconnecting && hasServerBackup && /* @__PURE__ */ jsxs37(Fragment14, { children: [
|
|
9450
|
+
/* @__PURE__ */ jsxs37("div", { className: "flex items-center justify-between gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: [
|
|
9451
|
+
/* @__PURE__ */ jsxs37("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9452
|
+
/* @__PURE__ */ jsx44(CloudDownload2, { className: "w-6 h-6" }),
|
|
9453
|
+
/* @__PURE__ */ jsx44("span", { className: "font-bold text-xl leading-6", children: "Restore Account" })
|
|
9454
|
+
] }),
|
|
9455
|
+
/* @__PURE__ */ jsx44(
|
|
9456
|
+
Switch,
|
|
9457
|
+
{
|
|
9458
|
+
name: "advanced-restore-flow-toggle",
|
|
9459
|
+
labels: { checked: "Standard", unchecked: "Advanced" },
|
|
9460
|
+
checked: currentRestoreMethod !== "server",
|
|
9461
|
+
onChange: () => {
|
|
9462
|
+
if (!!error) setError(null);
|
|
9463
|
+
if (currentRestoreMethod === "server") {
|
|
9464
|
+
setRestorePassword("");
|
|
9465
|
+
setMethod(null);
|
|
9466
|
+
} else {
|
|
9467
|
+
setRestoreFile(null);
|
|
9468
|
+
setMethod("server");
|
|
9469
|
+
}
|
|
9470
|
+
}
|
|
9471
|
+
}
|
|
9472
|
+
)
|
|
9600
9473
|
] }),
|
|
9601
9474
|
/* @__PURE__ */ jsx44(MethodSelector, { mode: "restore", serverRecoveryStatus }),
|
|
9602
9475
|
!!currentRestoreMethod && /* @__PURE__ */ jsx44(
|
|
@@ -9609,32 +9482,29 @@ var KeyshareRestoreMenu = () => {
|
|
|
9609
9482
|
}
|
|
9610
9483
|
)
|
|
9611
9484
|
] }),
|
|
9612
|
-
!success && !
|
|
9613
|
-
|
|
9614
|
-
|
|
9615
|
-
|
|
9616
|
-
|
|
9617
|
-
|
|
9618
|
-
|
|
9619
|
-
|
|
9620
|
-
|
|
9621
|
-
|
|
9622
|
-
|
|
9623
|
-
|
|
9624
|
-
|
|
9625
|
-
|
|
9626
|
-
|
|
9627
|
-
|
|
9628
|
-
|
|
9629
|
-
|
|
9630
|
-
className: "w-
|
|
9631
|
-
children:
|
|
9632
|
-
|
|
9633
|
-
|
|
9634
|
-
|
|
9635
|
-
}
|
|
9636
|
-
)
|
|
9637
|
-
] }),
|
|
9485
|
+
!success && !isBackupStatusLoading && /* @__PURE__ */ jsxs37(
|
|
9486
|
+
Button,
|
|
9487
|
+
{
|
|
9488
|
+
size: "large",
|
|
9489
|
+
variant: "ghost",
|
|
9490
|
+
onClick: () => {
|
|
9491
|
+
setError(null);
|
|
9492
|
+
setShowPassword(false);
|
|
9493
|
+
setUsePasskey(false);
|
|
9494
|
+
setRestoreFile(null);
|
|
9495
|
+
setRestorePassword("");
|
|
9496
|
+
setSuccess(null);
|
|
9497
|
+
setMethod(null);
|
|
9498
|
+
disconnect();
|
|
9499
|
+
},
|
|
9500
|
+
disabled: isDisconnecting || isRestoringFromFile || isRestoringFromServer,
|
|
9501
|
+
className: "w-fit mx-auto",
|
|
9502
|
+
children: [
|
|
9503
|
+
isDisconnecting ? /* @__PURE__ */ jsx44(Loader9, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ jsx44(UserCircle2, { className: "w-4 h-4" }),
|
|
9504
|
+
/* @__PURE__ */ jsx44("span", { children: "Try Another Account" })
|
|
9505
|
+
]
|
|
9506
|
+
}
|
|
9507
|
+
),
|
|
9638
9508
|
error && /* @__PURE__ */ jsxs37(Highlight, { type: "error", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9639
9509
|
/* @__PURE__ */ jsx44(AlertCircle2, { className: "h-4 w-4 flex-shrink-0" }),
|
|
9640
9510
|
/* @__PURE__ */ jsx44("span", { className: "w-full flex-1 block", children: error })
|
|
@@ -9649,11 +9519,11 @@ var KeyshareRestoreMenu = () => {
|
|
|
9649
9519
|
};
|
|
9650
9520
|
|
|
9651
9521
|
// src/internal/components/KeyshareRestoreMenu/KeyshareBackupMenu.tsx
|
|
9652
|
-
import { useQuery as
|
|
9653
|
-
import { AlertCircle as AlertCircle3, ArrowLeft as
|
|
9654
|
-
import { useEffect as
|
|
9522
|
+
import { useQuery as useQuery8 } from "@tanstack/react-query";
|
|
9523
|
+
import { AlertCircle as AlertCircle3, ArrowLeft as ArrowLeft7, CheckCircle2 as CheckCircle22, Loader as Loader10, LockIcon } from "lucide-react";
|
|
9524
|
+
import { useEffect as useEffect19 } from "react";
|
|
9655
9525
|
init_vaultClient();
|
|
9656
|
-
import { Fragment as
|
|
9526
|
+
import { Fragment as Fragment15, jsx as jsx45, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
9657
9527
|
var COMPONENTS = {
|
|
9658
9528
|
server: Server,
|
|
9659
9529
|
file: File2,
|
|
@@ -9661,7 +9531,6 @@ var COMPONENTS = {
|
|
|
9661
9531
|
};
|
|
9662
9532
|
function KeyshareBackupMenu() {
|
|
9663
9533
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9664
|
-
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
9665
9534
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
9666
9535
|
const setMainPageHeight = useLayoutDataStore((st) => st.setMainPageHeight);
|
|
9667
9536
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
@@ -9678,18 +9547,21 @@ function KeyshareBackupMenu() {
|
|
|
9678
9547
|
setUsePasskey,
|
|
9679
9548
|
setMethod
|
|
9680
9549
|
} = useRestoreStore();
|
|
9681
|
-
|
|
9550
|
+
useEffect19(() => {
|
|
9682
9551
|
setMainPageHeight(DEFAULT_SETTINGS_MENU_HEIGHT);
|
|
9683
9552
|
return () => {
|
|
9684
9553
|
setMethod(null);
|
|
9685
9554
|
};
|
|
9686
9555
|
}, []);
|
|
9687
|
-
const { data: serverRecoveryStatus } =
|
|
9556
|
+
const { data: serverRecoveryStatus, isLoading: isRecoveryLoading } = useQuery8({
|
|
9688
9557
|
retry: false,
|
|
9689
9558
|
queryKey: [CHECK_BACKUP_QUERY_KEY, address],
|
|
9690
9559
|
queryFn: async () => await getShareRecoveryStats()
|
|
9691
9560
|
});
|
|
9692
|
-
const
|
|
9561
|
+
const hasRecoveryData = serverRecoveryStatus?.created || serverRecoveryStatus?.devices?.length > 0;
|
|
9562
|
+
useEffect19(() => {
|
|
9563
|
+
if (!!hasRecoveryData) setMethod("server");
|
|
9564
|
+
}, [hasRecoveryData]);
|
|
9693
9565
|
const {
|
|
9694
9566
|
isPasswordBackupCreating,
|
|
9695
9567
|
createPasswordBackup,
|
|
@@ -9705,35 +9577,56 @@ function KeyshareBackupMenu() {
|
|
|
9705
9577
|
style: { "--l-pass-scrollbar-mah": `${maxScrollHeight}px` },
|
|
9706
9578
|
className: "list-scrollbar-y w-full",
|
|
9707
9579
|
children: /* @__PURE__ */ jsxs38(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: [
|
|
9708
|
-
|
|
9580
|
+
!!isRecoveryLoading && /* @__PURE__ */ jsx45("div", { className: "w-full flex items-center justify-center p-[var(--l-pass-pd)]", children: /* @__PURE__ */ jsx45(Loader10, { className: "h-5 w-5 animate-spin" }) }),
|
|
9581
|
+
!isRecoveryLoading && !hasRecoveryData && /* @__PURE__ */ jsxs38("div", { className: "flex items-center justify-center gap-2 px-5 py-[var(--l-pass-pd)]", children: [
|
|
9709
9582
|
/* @__PURE__ */ jsx45(LockIcon, { className: "w-6 h-6" }),
|
|
9710
9583
|
/* @__PURE__ */ jsx45("span", { className: "font-bold text-xl leading-6", children: "Secure Account" })
|
|
9711
9584
|
] }),
|
|
9712
|
-
|
|
9585
|
+
!isRecoveryLoading && !!hasRecoveryData && /* @__PURE__ */ jsxs38("div", { className: "flex items-center justify-between gap-[var(--l-pass-gap)]", children: [
|
|
9586
|
+
/* @__PURE__ */ jsxs38("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9587
|
+
/* @__PURE__ */ jsx45(
|
|
9588
|
+
Button,
|
|
9589
|
+
{
|
|
9590
|
+
variant: "ghost",
|
|
9591
|
+
size: "icon",
|
|
9592
|
+
title: "Back",
|
|
9593
|
+
onClick: () => {
|
|
9594
|
+
setRestorePassword("");
|
|
9595
|
+
setRestoreFile(null);
|
|
9596
|
+
setShowPassword(false);
|
|
9597
|
+
setSelectedCloudProvider(null);
|
|
9598
|
+
setUsePasskey(false);
|
|
9599
|
+
setError(null);
|
|
9600
|
+
setSuccess(null);
|
|
9601
|
+
setMethod(null);
|
|
9602
|
+
setPage("settings" /* SETTINGS */);
|
|
9603
|
+
},
|
|
9604
|
+
children: /* @__PURE__ */ jsx45(ArrowLeft7, { className: "h-4 w-4" })
|
|
9605
|
+
}
|
|
9606
|
+
),
|
|
9607
|
+
/* @__PURE__ */ jsx45("span", { className: "text-xl font-semibold leading-8", children: "Create Backup" })
|
|
9608
|
+
] }),
|
|
9713
9609
|
/* @__PURE__ */ jsx45(
|
|
9714
|
-
|
|
9610
|
+
Switch,
|
|
9715
9611
|
{
|
|
9716
|
-
|
|
9717
|
-
|
|
9718
|
-
|
|
9719
|
-
|
|
9720
|
-
|
|
9721
|
-
|
|
9722
|
-
|
|
9723
|
-
|
|
9724
|
-
|
|
9725
|
-
|
|
9726
|
-
|
|
9727
|
-
|
|
9728
|
-
|
|
9729
|
-
},
|
|
9730
|
-
children: /* @__PURE__ */ jsx45(ArrowLeft9, { className: "h-4 w-4" })
|
|
9612
|
+
name: "advanced-restore-flow-toggle",
|
|
9613
|
+
labels: { checked: "Standard", unchecked: "Advanced" },
|
|
9614
|
+
checked: currentBackupMethod !== "server",
|
|
9615
|
+
onChange: () => {
|
|
9616
|
+
if (!!error) setError(null);
|
|
9617
|
+
if (currentBackupMethod === "server") {
|
|
9618
|
+
setRestorePassword("");
|
|
9619
|
+
setMethod(null);
|
|
9620
|
+
} else {
|
|
9621
|
+
setRestoreFile(null);
|
|
9622
|
+
setMethod("server");
|
|
9623
|
+
}
|
|
9624
|
+
}
|
|
9731
9625
|
}
|
|
9732
|
-
)
|
|
9733
|
-
/* @__PURE__ */ jsx45("span", { className: "text-xl font-semibold leading-8", children: "Create Backup" })
|
|
9626
|
+
)
|
|
9734
9627
|
] }),
|
|
9735
|
-
|
|
9736
|
-
!!currentBackupMethod && /* @__PURE__ */ jsx45(
|
|
9628
|
+
!isRecoveryLoading && !!hasRecoveryData && /* @__PURE__ */ jsx45(MethodSelector, { mode: "backup", serverRecoveryStatus }),
|
|
9629
|
+
!isRecoveryLoading && !!currentBackupMethod && /* @__PURE__ */ jsx45(Fragment15, { children: /* @__PURE__ */ jsx45(
|
|
9737
9630
|
BackupComponent,
|
|
9738
9631
|
{
|
|
9739
9632
|
mode: "backup",
|
|
@@ -9745,13 +9638,7 @@ function KeyshareBackupMenu() {
|
|
|
9745
9638
|
) }),
|
|
9746
9639
|
!isRecoveryLoading && !currentBackupMethod && !hasRecoveryData && /* @__PURE__ */ jsxs38(Highlight, { type: "warning", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9747
9640
|
/* @__PURE__ */ jsx45(AlertCircle3, { className: "h-4 w-4 flex-shrink-0" }),
|
|
9748
|
-
/* @__PURE__ */
|
|
9749
|
-
/* @__PURE__ */ jsx45("span", { className: "font-semibold", children: "No Backup Found" }),
|
|
9750
|
-
/* @__PURE__ */ jsx45("br", {}),
|
|
9751
|
-
/* @__PURE__ */ jsx45("span", { className: "text-[10px]", children: "Create a backup to restore access if you switch devices or clear your browser." }),
|
|
9752
|
-
/* @__PURE__ */ jsx45("br", {}),
|
|
9753
|
-
/* @__PURE__ */ jsx45("span", { className: "text-[10px]", children: "You can ignore this if you already have a backup or don't want to use Keyshare Vault." })
|
|
9754
|
-
] })
|
|
9641
|
+
/* @__PURE__ */ jsx45("span", { className: "block flex-1 font-semibold", children: "No Backup Found" })
|
|
9755
9642
|
] }),
|
|
9756
9643
|
error && /* @__PURE__ */ jsxs38(Highlight, { type: "error", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9757
9644
|
/* @__PURE__ */ jsx45(AlertCircle3, { className: "h-4 w-4 flex-shrink-0" }),
|
|
@@ -9768,16 +9655,16 @@ function KeyshareBackupMenu() {
|
|
|
9768
9655
|
|
|
9769
9656
|
// src/internal/components/MainMenu/MainMenu.tsx
|
|
9770
9657
|
import { ChevronLeft, ChevronRight as ChevronRight3, DollarSign as DollarSign3, Wallet2 as Wallet23 } from "lucide-react";
|
|
9771
|
-
import { useEffect as
|
|
9658
|
+
import { useEffect as useEffect20 } from "react";
|
|
9772
9659
|
|
|
9773
9660
|
// src/internal/components/ManageWalletMenu/hooks/useProvidersList.ts
|
|
9774
9661
|
init_common();
|
|
9775
|
-
import { useQuery as
|
|
9662
|
+
import { useQuery as useQuery9 } from "@tanstack/react-query";
|
|
9776
9663
|
var PROVIDERS_QUERY_KEY = "lumia-passport-providers-query";
|
|
9777
9664
|
function useProvidersList() {
|
|
9778
9665
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9779
9666
|
const page = useLayoutDataStore((st) => st.page);
|
|
9780
|
-
return
|
|
9667
|
+
return useQuery9({
|
|
9781
9668
|
retry: false,
|
|
9782
9669
|
// hook is invoked on multiple pages to preload cache
|
|
9783
9670
|
enabled: !!address && (page === "manage-wallet" /* MANAGE_WALLET */ || page === "settings" /* SETTINGS */ || page === "main-menu" /* MAIN_MENU */),
|
|
@@ -9798,7 +9685,7 @@ function MainMenu() {
|
|
|
9798
9685
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9799
9686
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
9800
9687
|
const setMainPageHeight = useLayoutDataStore((st) => st.setMainPageHeight);
|
|
9801
|
-
|
|
9688
|
+
useEffect20(() => setMainPageHeight(DEFAULT_MAIN_MENU_HEIGHT), [setMainPageHeight]);
|
|
9802
9689
|
useProvidersList();
|
|
9803
9690
|
return /* @__PURE__ */ jsx46("div", { className: "w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]", children: /* @__PURE__ */ jsx46("div", { className: "w-full grid grid-cols-4 gap-0 md:gap-[var(--l-pass-gap)] py-[10px] md:py-1", children: MAIN_MENU_BUTTONS.map(({ id, label, icon: Icon2 }) => /* @__PURE__ */ jsxs39(
|
|
9804
9691
|
Button,
|
|
@@ -9819,11 +9706,11 @@ function MainMenu() {
|
|
|
9819
9706
|
|
|
9820
9707
|
// src/internal/components/ManageWalletMenu/ManageWallet.tsx
|
|
9821
9708
|
import { fromPairs } from "lodash-es";
|
|
9822
|
-
import { AlertTriangle as AlertTriangle3, ArrowLeft as
|
|
9709
|
+
import { AlertTriangle as AlertTriangle3, ArrowLeft as ArrowLeft8, Loader as Loader12 } from "lucide-react";
|
|
9823
9710
|
import { useMemo as useMemo3 } from "react";
|
|
9824
9711
|
|
|
9825
9712
|
// src/modules/linkedProfiles.ts
|
|
9826
|
-
import { useQuery as
|
|
9713
|
+
import { useQuery as useQuery10, useQueryClient as useQueryClient8 } from "@tanstack/react-query";
|
|
9827
9714
|
import { useCallback as useCallback10 } from "react";
|
|
9828
9715
|
init_auth();
|
|
9829
9716
|
init_common();
|
|
@@ -9844,13 +9731,13 @@ async function getLinkProfilesData() {
|
|
|
9844
9731
|
return { profiles: loadedProfiles, avatar };
|
|
9845
9732
|
}
|
|
9846
9733
|
function useLumiaPassportLinkedProfiles() {
|
|
9847
|
-
const qc =
|
|
9734
|
+
const qc = useQueryClient8();
|
|
9848
9735
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9849
9736
|
const {
|
|
9850
9737
|
data,
|
|
9851
9738
|
isFetching: isLoading,
|
|
9852
9739
|
error
|
|
9853
|
-
} =
|
|
9740
|
+
} = useQuery10({
|
|
9854
9741
|
retry: false,
|
|
9855
9742
|
enabled: !!address,
|
|
9856
9743
|
queryKey: [LINKED_PROFILES_QUERY_KEY, address],
|
|
@@ -9864,14 +9751,14 @@ function useLumiaPassportLinkedProfiles() {
|
|
|
9864
9751
|
}
|
|
9865
9752
|
|
|
9866
9753
|
// src/internal/components/ManageWalletMenu/AddProvider.tsx
|
|
9867
|
-
import { useQueryClient as
|
|
9754
|
+
import { useQueryClient as useQueryClient10 } from "@tanstack/react-query";
|
|
9868
9755
|
init_passkey2();
|
|
9869
9756
|
|
|
9870
9757
|
// src/internal/components/ManageWalletMenu/EmailForm.tsx
|
|
9871
9758
|
init_lumiaPassport();
|
|
9872
9759
|
init_projectId();
|
|
9873
|
-
import { useMutation as
|
|
9874
|
-
import { ChevronRight as ChevronRight4, Loader as
|
|
9760
|
+
import { useMutation as useMutation10 } from "@tanstack/react-query";
|
|
9761
|
+
import { ChevronRight as ChevronRight4, Loader as Loader11, Mail as Mail4 } from "lucide-react";
|
|
9875
9762
|
|
|
9876
9763
|
// src/internal/components/ManageWalletMenu/hooks/useStore.ts
|
|
9877
9764
|
import { create as create5 } from "zustand";
|
|
@@ -9904,7 +9791,7 @@ function EmailForm() {
|
|
|
9904
9791
|
const isLoading = useLumiaPassportSession((st) => st.isLoading);
|
|
9905
9792
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
9906
9793
|
const { email, setEmail, setAlert, setEmailCodeExpiresIn, setEmailStep } = useManageWalletStore();
|
|
9907
|
-
const { mutate: onSendVerificationCode } =
|
|
9794
|
+
const { mutate: onSendVerificationCode } = useMutation10({
|
|
9908
9795
|
mutationFn: async () => {
|
|
9909
9796
|
if (!email) return;
|
|
9910
9797
|
setIsLoading(true);
|
|
@@ -9984,7 +9871,7 @@ function EmailForm() {
|
|
|
9984
9871
|
size: "large",
|
|
9985
9872
|
disabled: !email || isLoading,
|
|
9986
9873
|
onClick: () => onSendVerificationCode(),
|
|
9987
|
-
children: isLoading ? /* @__PURE__ */ jsx47(
|
|
9874
|
+
children: isLoading ? /* @__PURE__ */ jsx47(Loader11, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ jsx47(ChevronRight4, { className: "w-4 h-4" })
|
|
9988
9875
|
}
|
|
9989
9876
|
)
|
|
9990
9877
|
] });
|
|
@@ -9992,12 +9879,12 @@ function EmailForm() {
|
|
|
9992
9879
|
|
|
9993
9880
|
// src/internal/components/ManageWalletMenu/hooks/useSendVerificationCode.ts
|
|
9994
9881
|
init_email();
|
|
9995
|
-
import { useMutation as
|
|
9882
|
+
import { useMutation as useMutation11 } from "@tanstack/react-query";
|
|
9996
9883
|
function useSendVerificationCode() {
|
|
9997
9884
|
const setAlert = useManageWalletStore((st) => st.setAlert);
|
|
9998
9885
|
const setLinkIsLoading = useManageWalletStore((st) => st.setLinkIsLoading);
|
|
9999
9886
|
const setEmailCodeExpiresIn = useManageWalletStore((st) => st.setEmailCodeExpiresIn);
|
|
10000
|
-
return
|
|
9887
|
+
return useMutation11({
|
|
10001
9888
|
mutationFn: async (email) => {
|
|
10002
9889
|
if (!email) {
|
|
10003
9890
|
throw new Error("Email is required");
|
|
@@ -10020,15 +9907,15 @@ function useSendVerificationCode() {
|
|
|
10020
9907
|
}
|
|
10021
9908
|
|
|
10022
9909
|
// src/internal/components/ManageWalletMenu/hooks/useVerifyCode.ts
|
|
10023
|
-
import { useMutation as
|
|
9910
|
+
import { useMutation as useMutation12, useQueryClient as useQueryClient9 } from "@tanstack/react-query";
|
|
10024
9911
|
init_email();
|
|
10025
9912
|
function useVerifyCode() {
|
|
10026
9913
|
const { callbacks } = useLumiaPassportConfig();
|
|
10027
|
-
const qc =
|
|
9914
|
+
const qc = useQueryClient9();
|
|
10028
9915
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10029
9916
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
10030
9917
|
const { email, emailCode, setEmail, setEmailStep, setEmailCode, setProviderType, setLinkIsLoading, setAlert } = useManageWalletStore();
|
|
10031
|
-
return
|
|
9918
|
+
return useMutation12({
|
|
10032
9919
|
mutationFn: async (codeToVerify) => {
|
|
10033
9920
|
const code = codeToVerify ?? emailCode;
|
|
10034
9921
|
if (!code) {
|
|
@@ -10064,7 +9951,7 @@ function useVerifyCode() {
|
|
|
10064
9951
|
}
|
|
10065
9952
|
|
|
10066
9953
|
// src/internal/components/ManageWalletMenu/AddProvider.tsx
|
|
10067
|
-
import { Fragment as
|
|
9954
|
+
import { Fragment as Fragment16, jsx as jsx48, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
10068
9955
|
function normalizePasskeyLinkError(msg) {
|
|
10069
9956
|
const lower = msg.toLowerCase();
|
|
10070
9957
|
if (lower.includes("already registered") || lower.includes("credential") && lower.includes("exists")) {
|
|
@@ -10076,7 +9963,7 @@ function normalizePasskeyLinkError(msg) {
|
|
|
10076
9963
|
return msg;
|
|
10077
9964
|
}
|
|
10078
9965
|
function AddProvider() {
|
|
10079
|
-
const qc =
|
|
9966
|
+
const qc = useQueryClient10();
|
|
10080
9967
|
const callbacks = useLumiaPassportConfig().callbacks;
|
|
10081
9968
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10082
9969
|
const {
|
|
@@ -10094,7 +9981,7 @@ function AddProvider() {
|
|
|
10094
9981
|
const { mutate: onVerifyCode, isPending: isCodeVerifying } = useVerifyCode();
|
|
10095
9982
|
const isLoading = linkIsLoading || isCodeSending || isCodeVerifying;
|
|
10096
9983
|
if (!providerType) return null;
|
|
10097
|
-
return /* @__PURE__ */ jsxs41(
|
|
9984
|
+
return /* @__PURE__ */ jsxs41(Fragment16, { children: [
|
|
10098
9985
|
providerType === "email" && emailStep === "input" && /* @__PURE__ */ jsxs41("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: [
|
|
10099
9986
|
/* @__PURE__ */ jsx48("div", { className: "w-full flex flex-col gap-1 text-center", children: /* @__PURE__ */ jsx48("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "Provide Email to connect" }) }),
|
|
10100
9987
|
/* @__PURE__ */ jsx48(EmailForm, {})
|
|
@@ -10236,11 +10123,11 @@ function EmailNotConnectedWarning() {
|
|
|
10236
10123
|
}
|
|
10237
10124
|
|
|
10238
10125
|
// src/internal/components/ManageWalletMenu/hooks/useLinkSocial.ts
|
|
10239
|
-
import { useQueryClient as
|
|
10240
|
-
import React5, { useEffect as
|
|
10126
|
+
import { useQueryClient as useQueryClient11 } from "@tanstack/react-query";
|
|
10127
|
+
import React5, { useEffect as useEffect21 } from "react";
|
|
10241
10128
|
init_auth();
|
|
10242
10129
|
function useLinkSocial() {
|
|
10243
|
-
const qc =
|
|
10130
|
+
const qc = useQueryClient11();
|
|
10244
10131
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10245
10132
|
const {
|
|
10246
10133
|
config: { current: config },
|
|
@@ -10302,7 +10189,7 @@ function useLinkSocial() {
|
|
|
10302
10189
|
[config.social?.providers, callbacks]
|
|
10303
10190
|
);
|
|
10304
10191
|
const [socialLinkStarted, setSocialLinkStarted] = React5.useState(false);
|
|
10305
|
-
|
|
10192
|
+
useEffect21(() => {
|
|
10306
10193
|
const key = providerType?.toLowerCase();
|
|
10307
10194
|
console.log("[useLinkSocial] Effect triggered:", { key, linkIsLoading, socialLinkStarted, isWalletLinking });
|
|
10308
10195
|
if (isWalletLinking) {
|
|
@@ -10323,14 +10210,14 @@ function useLinkSocial() {
|
|
|
10323
10210
|
|
|
10324
10211
|
// src/internal/components/ManageWalletMenu/hooks/useLinkTelegram.ts
|
|
10325
10212
|
init_telegram2();
|
|
10326
|
-
import { useQueryClient as
|
|
10327
|
-
import { useCallback as useCallback11, useEffect as
|
|
10213
|
+
import { useQueryClient as useQueryClient12 } from "@tanstack/react-query";
|
|
10214
|
+
import { useCallback as useCallback11, useEffect as useEffect22, useState as useState10 } from "react";
|
|
10328
10215
|
function useLinkTelegram() {
|
|
10329
10216
|
const {
|
|
10330
10217
|
config: { current: config },
|
|
10331
10218
|
callbacks
|
|
10332
10219
|
} = useLumiaPassportConfig();
|
|
10333
|
-
const qc =
|
|
10220
|
+
const qc = useQueryClient12();
|
|
10334
10221
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10335
10222
|
const isWalletLinking = useLayoutDataStore((st) => st.isWalletLinking);
|
|
10336
10223
|
const { providerType, linkIsLoading, setLinkIsLoading, setProviderType, setAlert } = useManageWalletStore();
|
|
@@ -10378,7 +10265,7 @@ function useLinkTelegram() {
|
|
|
10378
10265
|
}
|
|
10379
10266
|
}, [config.social?.providers, callbacks]);
|
|
10380
10267
|
const [telegramLinkStarted, setTelegramLinkStarted] = useState10(false);
|
|
10381
|
-
|
|
10268
|
+
useEffect22(() => {
|
|
10382
10269
|
console.log("[useLinkTelegram] Effect triggered:", {
|
|
10383
10270
|
providerType,
|
|
10384
10271
|
linkIsLoading,
|
|
@@ -10395,7 +10282,7 @@ function useLinkTelegram() {
|
|
|
10395
10282
|
handleLinkTelegram();
|
|
10396
10283
|
}
|
|
10397
10284
|
}, [providerType, handleLinkTelegram, linkIsLoading, telegramLinkStarted, isWalletLinking]);
|
|
10398
|
-
|
|
10285
|
+
useEffect22(() => {
|
|
10399
10286
|
if (providerType !== "telegram") {
|
|
10400
10287
|
setTelegramLinkStarted(false);
|
|
10401
10288
|
}
|
|
@@ -10456,7 +10343,7 @@ function ProviderCard(props) {
|
|
|
10456
10343
|
}
|
|
10457
10344
|
|
|
10458
10345
|
// src/internal/components/ManageWalletMenu/ManageWallet.tsx
|
|
10459
|
-
import { Fragment as
|
|
10346
|
+
import { Fragment as Fragment17, jsx as jsx51, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
10460
10347
|
var POSSIBLE_PROVIDERS = [
|
|
10461
10348
|
"email",
|
|
10462
10349
|
// 'google',
|
|
@@ -10597,19 +10484,19 @@ function ManageWalletMenu() {
|
|
|
10597
10484
|
if (!providerType) setPage("settings" /* SETTINGS */);
|
|
10598
10485
|
setProviderType(null);
|
|
10599
10486
|
},
|
|
10600
|
-
children: /* @__PURE__ */ jsx51(
|
|
10487
|
+
children: /* @__PURE__ */ jsx51(ArrowLeft8, { className: "h-4 w-4" })
|
|
10601
10488
|
}
|
|
10602
10489
|
),
|
|
10603
10490
|
/* @__PURE__ */ jsx51("span", { className: "text-xl font-semibold", children: "Profiles" })
|
|
10604
10491
|
] }),
|
|
10605
|
-
isProvidersLoading && /* @__PURE__ */ jsx51("div", { className: "flex items-center justify-center p-4 text-[var(--l-pass-fg-muted)]", children: /* @__PURE__ */ jsx51(
|
|
10492
|
+
isProvidersLoading && /* @__PURE__ */ jsx51("div", { className: "flex items-center justify-center p-4 text-[var(--l-pass-fg-muted)]", children: /* @__PURE__ */ jsx51(Loader12, { className: "w-5 h-5 animate-spin" }) }),
|
|
10606
10493
|
/* @__PURE__ */ jsx51(EmailNotConnectedWarning, {}),
|
|
10607
10494
|
showCurrentProviders && renderProviders.map((node) => node),
|
|
10608
10495
|
showExtraProvidersUi && /* @__PURE__ */ jsx51(AddProvider, {}),
|
|
10609
10496
|
combinedAlertMessage && /* @__PURE__ */ jsxs44(Highlight, { type: "error", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
10610
10497
|
/* @__PURE__ */ jsx51(AlertTriangle3, { className: "w-4 h-4 shrink-0" }),
|
|
10611
10498
|
/* @__PURE__ */ jsxs44("span", { className: "break-words whitespace-pre-wrap", children: [
|
|
10612
|
-
alert2?.title && /* @__PURE__ */ jsxs44(
|
|
10499
|
+
alert2?.title && /* @__PURE__ */ jsxs44(Fragment17, { children: [
|
|
10613
10500
|
/* @__PURE__ */ jsx51("strong", { children: alert2.title }),
|
|
10614
10501
|
/* @__PURE__ */ jsx51("br", {})
|
|
10615
10502
|
] }),
|
|
@@ -10622,19 +10509,19 @@ function ManageWalletMenu() {
|
|
|
10622
10509
|
}
|
|
10623
10510
|
|
|
10624
10511
|
// src/internal/components/ManageWalletMenu/UnlinkProviderMenu.tsx
|
|
10625
|
-
import { useMutation as
|
|
10626
|
-
import { Key as
|
|
10512
|
+
import { useMutation as useMutation13, useQueryClient as useQueryClient13 } from "@tanstack/react-query";
|
|
10513
|
+
import { Key as Key6, Loader as Loader13 } from "lucide-react";
|
|
10627
10514
|
import { useState as useState11 } from "react";
|
|
10628
10515
|
init_auth();
|
|
10629
10516
|
import { jsx as jsx52, jsxs as jsxs45 } from "react/jsx-runtime";
|
|
10630
10517
|
function UnlinkProviderMenu() {
|
|
10631
|
-
const qc =
|
|
10518
|
+
const qc = useQueryClient13();
|
|
10632
10519
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10633
10520
|
const { callbacks } = useLumiaPassportConfig();
|
|
10634
10521
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
10635
10522
|
const { confirmUnlink, setConfirmUnlink, setAlert } = useManageWalletStore();
|
|
10636
10523
|
const [confirmInput, setConfirmInput] = useState11("");
|
|
10637
|
-
const { mutate: handleUnlinkProvider, isPending: isProviderUnlinking } =
|
|
10524
|
+
const { mutate: handleUnlinkProvider, isPending: isProviderUnlinking } = useMutation13({
|
|
10638
10525
|
mutationFn: async () => {
|
|
10639
10526
|
if (!confirmUnlink) {
|
|
10640
10527
|
throw new Error("No provider to unlink");
|
|
@@ -10666,7 +10553,7 @@ function UnlinkProviderMenu() {
|
|
|
10666
10553
|
/* @__PURE__ */ jsx52(
|
|
10667
10554
|
Input,
|
|
10668
10555
|
{
|
|
10669
|
-
Icon:
|
|
10556
|
+
Icon: Key6,
|
|
10670
10557
|
value: confirmInput,
|
|
10671
10558
|
onChange: (e) => setConfirmInput(e.target.value),
|
|
10672
10559
|
placeholder: "Enter provider ID"
|
|
@@ -10697,7 +10584,7 @@ function UnlinkProviderMenu() {
|
|
|
10697
10584
|
disabled: !!isProviderUnlinking || !confirmUnlink || confirmInput !== confirmUnlink.externalId,
|
|
10698
10585
|
className: "w-full flex-1",
|
|
10699
10586
|
children: [
|
|
10700
|
-
isProviderUnlinking && /* @__PURE__ */ jsx52(
|
|
10587
|
+
isProviderUnlinking && /* @__PURE__ */ jsx52(Loader13, { className: "animate-spin h-4 w-4" }),
|
|
10701
10588
|
isProviderUnlinking ? "Removing\u2026" : "Remove"
|
|
10702
10589
|
]
|
|
10703
10590
|
}
|
|
@@ -10707,14 +10594,14 @@ function UnlinkProviderMenu() {
|
|
|
10707
10594
|
}
|
|
10708
10595
|
|
|
10709
10596
|
// src/internal/components/NicknameSettings/NicknameSettings.tsx
|
|
10710
|
-
import { ArrowLeft as
|
|
10597
|
+
import { ArrowLeft as ArrowLeft9, Loader as Loader16 } from "lucide-react";
|
|
10711
10598
|
|
|
10712
10599
|
// src/internal/hooks/useNicknameInfo.ts
|
|
10713
10600
|
init_nickname();
|
|
10714
10601
|
init_profile();
|
|
10715
|
-
import { useQuery as
|
|
10602
|
+
import { useQuery as useQuery11 } from "@tanstack/react-query";
|
|
10716
10603
|
function useNicknameInfo(enabled = true) {
|
|
10717
|
-
const query =
|
|
10604
|
+
const query = useQuery11({
|
|
10718
10605
|
queryKey: [QUERY_KEYS.nicknameInfo],
|
|
10719
10606
|
queryFn: getNicknameInfo,
|
|
10720
10607
|
enabled,
|
|
@@ -10731,82 +10618,17 @@ function useNicknameInfo(enabled = true) {
|
|
|
10731
10618
|
};
|
|
10732
10619
|
}
|
|
10733
10620
|
|
|
10734
|
-
// src/internal/lib/nickname-cooldown.ts
|
|
10735
|
-
function getDaysRemaining(cooldownEndsAt) {
|
|
10736
|
-
if (!cooldownEndsAt) return 0;
|
|
10737
|
-
const endDate = new Date(cooldownEndsAt);
|
|
10738
|
-
const now = /* @__PURE__ */ new Date();
|
|
10739
|
-
if (isNaN(endDate.getTime())) return 0;
|
|
10740
|
-
if (endDate <= now) return 0;
|
|
10741
|
-
const diffMs = endDate.getTime() - now.getTime();
|
|
10742
|
-
const diffDays = Math.ceil(diffMs / (1e3 * 60 * 60 * 24));
|
|
10743
|
-
return Math.max(0, diffDays);
|
|
10744
|
-
}
|
|
10745
|
-
function formatCooldownEndDate(cooldownEndsAt) {
|
|
10746
|
-
if (!cooldownEndsAt) return "";
|
|
10747
|
-
const endDate = new Date(cooldownEndsAt);
|
|
10748
|
-
if (isNaN(endDate.getTime())) return "";
|
|
10749
|
-
return endDate.toLocaleDateString(void 0, {
|
|
10750
|
-
year: "numeric",
|
|
10751
|
-
month: "short",
|
|
10752
|
-
day: "numeric"
|
|
10753
|
-
});
|
|
10754
|
-
}
|
|
10755
|
-
|
|
10756
|
-
// src/internal/components/NicknameSettings/NicknameInfoDisplay.tsx
|
|
10757
|
-
import { jsx as jsx53, jsxs as jsxs46 } from "react/jsx-runtime";
|
|
10758
|
-
function NicknameInfoDisplay({ info }) {
|
|
10759
|
-
const daysRemaining = getDaysRemaining(info.cooldownEndsAt);
|
|
10760
|
-
const cooldownEndDate = formatCooldownEndDate(info.cooldownEndsAt);
|
|
10761
|
-
return /* @__PURE__ */ jsxs46("div", { className: "w-full flex flex-col gap-3", children: [
|
|
10762
|
-
/* @__PURE__ */ jsxs46("div", { className: "flex flex-col gap-1", children: [
|
|
10763
|
-
/* @__PURE__ */ jsx53("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "Your nickname" }),
|
|
10764
|
-
/* @__PURE__ */ jsx53("span", { className: "text-lg font-bold text-[var(--l-pass-fg)]", children: info.displayHandle })
|
|
10765
|
-
] }),
|
|
10766
|
-
/* @__PURE__ */ jsxs46("div", { className: "flex items-center gap-4 text-xs text-[var(--l-pass-fg-muted)]", children: [
|
|
10767
|
-
/* @__PURE__ */ jsxs46("div", { className: "flex flex-col gap-0.5", children: [
|
|
10768
|
-
/* @__PURE__ */ jsx53("span", { children: "Created" }),
|
|
10769
|
-
/* @__PURE__ */ jsx53("span", { className: "text-[var(--l-pass-fg)]", children: new Date(info.createdAt).toLocaleDateString(void 0, {
|
|
10770
|
-
year: "numeric",
|
|
10771
|
-
month: "short",
|
|
10772
|
-
day: "numeric"
|
|
10773
|
-
}) })
|
|
10774
|
-
] }),
|
|
10775
|
-
info.changedAt && /* @__PURE__ */ jsxs46("div", { className: "flex flex-col gap-0.5", children: [
|
|
10776
|
-
/* @__PURE__ */ jsx53("span", { children: "Last changed" }),
|
|
10777
|
-
/* @__PURE__ */ jsx53("span", { className: "text-[var(--l-pass-fg)]", children: new Date(info.changedAt).toLocaleDateString(void 0, {
|
|
10778
|
-
year: "numeric",
|
|
10779
|
-
month: "short",
|
|
10780
|
-
day: "numeric"
|
|
10781
|
-
}) })
|
|
10782
|
-
] }),
|
|
10783
|
-
/* @__PURE__ */ jsxs46("div", { className: "flex flex-col gap-0.5", children: [
|
|
10784
|
-
/* @__PURE__ */ jsx53("span", { children: "Times changed" }),
|
|
10785
|
-
/* @__PURE__ */ jsx53("span", { className: "text-[var(--l-pass-fg)]", children: info.changeCount })
|
|
10786
|
-
] })
|
|
10787
|
-
] }),
|
|
10788
|
-
!info.canChange && info.cooldownEndsAt && /* @__PURE__ */ jsx53("div", { className: "p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-warning)]", children: /* @__PURE__ */ jsxs46("span", { className: "text-sm text-[var(--l-pass-warning)]", children: [
|
|
10789
|
-
"You can change your nickname again on ",
|
|
10790
|
-
cooldownEndDate,
|
|
10791
|
-
" (",
|
|
10792
|
-
daysRemaining,
|
|
10793
|
-
" days remaining)"
|
|
10794
|
-
] }) }),
|
|
10795
|
-
info.canChange && /* @__PURE__ */ jsx53("div", { className: "p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-success)]", children: /* @__PURE__ */ jsx53("span", { className: "text-sm text-[var(--l-pass-success)]", children: "You can change your nickname" }) })
|
|
10796
|
-
] });
|
|
10797
|
-
}
|
|
10798
|
-
|
|
10799
10621
|
// src/internal/components/NicknameSettings/NicknameEditForm.tsx
|
|
10800
|
-
import {
|
|
10801
|
-
import {
|
|
10622
|
+
import { Check as Check2, Loader as Loader15 } from "lucide-react";
|
|
10623
|
+
import { useCallback as useCallback13, useState as useState13 } from "react";
|
|
10802
10624
|
|
|
10803
10625
|
// src/internal/hooks/useChangeNickname.ts
|
|
10804
10626
|
init_nickname();
|
|
10805
10627
|
init_profile();
|
|
10806
|
-
import { useMutation as
|
|
10628
|
+
import { useMutation as useMutation14, useQueryClient as useQueryClient14 } from "@tanstack/react-query";
|
|
10807
10629
|
function useChangeNickname(options) {
|
|
10808
|
-
const queryClient3 =
|
|
10809
|
-
const mutation =
|
|
10630
|
+
const queryClient3 = useQueryClient14();
|
|
10631
|
+
const mutation = useMutation14({
|
|
10810
10632
|
mutationFn: (handle) => changeNickname(handle),
|
|
10811
10633
|
onSuccess: (result) => {
|
|
10812
10634
|
queryClient3.invalidateQueries({ queryKey: [QUERY_KEYS.nicknameInfo] });
|
|
@@ -10843,8 +10665,8 @@ function useChangeNickname(options) {
|
|
|
10843
10665
|
// src/internal/hooks/useNicknameAvailability.ts
|
|
10844
10666
|
init_nickname();
|
|
10845
10667
|
init_profile();
|
|
10846
|
-
import { useQuery as
|
|
10847
|
-
import { useState as useState12, useEffect as
|
|
10668
|
+
import { useQuery as useQuery12 } from "@tanstack/react-query";
|
|
10669
|
+
import { useState as useState12, useEffect as useEffect23 } from "react";
|
|
10848
10670
|
|
|
10849
10671
|
// src/internal/lib/nickname-validation.ts
|
|
10850
10672
|
var NICKNAME_MIN_LENGTH = 3;
|
|
@@ -10878,7 +10700,7 @@ function useNicknameAvailability(handle, enabled = true) {
|
|
|
10878
10700
|
const normalized = normalizeNickname(handle);
|
|
10879
10701
|
const validation = validateNickname(handle);
|
|
10880
10702
|
const isValidForCheck = validation.valid && normalized.length > 0;
|
|
10881
|
-
|
|
10703
|
+
useEffect23(() => {
|
|
10882
10704
|
if (!isValidForCheck || !enabled) {
|
|
10883
10705
|
setDebouncedHandle("");
|
|
10884
10706
|
setIsDebouncing(false);
|
|
@@ -10893,7 +10715,7 @@ function useNicknameAvailability(handle, enabled = true) {
|
|
|
10893
10715
|
clearTimeout(timer);
|
|
10894
10716
|
};
|
|
10895
10717
|
}, [normalized, isValidForCheck, enabled]);
|
|
10896
|
-
const query =
|
|
10718
|
+
const query = useQuery12({
|
|
10897
10719
|
queryKey: QUERY_KEYS.nicknameAvailability(debouncedHandle),
|
|
10898
10720
|
queryFn: () => checkNicknameAvailability(debouncedHandle),
|
|
10899
10721
|
enabled: enabled && isValidForCheck && debouncedHandle.length > 0,
|
|
@@ -10935,8 +10757,8 @@ function getNicknameErrorMessage(code, params) {
|
|
|
10935
10757
|
}
|
|
10936
10758
|
|
|
10937
10759
|
// src/internal/components/NicknameSettings/NicknameAvailabilityIndicator.tsx
|
|
10938
|
-
import { Loader as
|
|
10939
|
-
import { jsx as
|
|
10760
|
+
import { Loader as Loader14, Check, X as X2 } from "lucide-react";
|
|
10761
|
+
import { jsx as jsx53, jsxs as jsxs46 } from "react/jsx-runtime";
|
|
10940
10762
|
function NicknameAvailabilityIndicator({
|
|
10941
10763
|
isChecking,
|
|
10942
10764
|
availability,
|
|
@@ -10946,29 +10768,29 @@ function NicknameAvailabilityIndicator({
|
|
|
10946
10768
|
return null;
|
|
10947
10769
|
}
|
|
10948
10770
|
if (isChecking) {
|
|
10949
|
-
return /* @__PURE__ */
|
|
10950
|
-
/* @__PURE__ */
|
|
10951
|
-
/* @__PURE__ */
|
|
10771
|
+
return /* @__PURE__ */ jsxs46("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-fg-muted)]", children: [
|
|
10772
|
+
/* @__PURE__ */ jsx53(Loader14, { className: "w-3 h-3 animate-spin" }),
|
|
10773
|
+
/* @__PURE__ */ jsx53("span", { children: "Checking availability..." })
|
|
10952
10774
|
] });
|
|
10953
10775
|
}
|
|
10954
10776
|
if (!availability) {
|
|
10955
10777
|
return null;
|
|
10956
10778
|
}
|
|
10957
10779
|
if (availability.available) {
|
|
10958
|
-
return /* @__PURE__ */
|
|
10959
|
-
/* @__PURE__ */
|
|
10960
|
-
/* @__PURE__ */
|
|
10780
|
+
return /* @__PURE__ */ jsxs46("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-success)]", children: [
|
|
10781
|
+
/* @__PURE__ */ jsx53(Check, { className: "w-3 h-3" }),
|
|
10782
|
+
/* @__PURE__ */ jsx53("span", { children: "Nickname is available" })
|
|
10961
10783
|
] });
|
|
10962
10784
|
}
|
|
10963
10785
|
const reason = availability.reason ? getNicknameErrorMessage(availability.reason) : "This nickname is not available";
|
|
10964
|
-
return /* @__PURE__ */
|
|
10965
|
-
/* @__PURE__ */
|
|
10966
|
-
/* @__PURE__ */
|
|
10786
|
+
return /* @__PURE__ */ jsxs46("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-error)]", children: [
|
|
10787
|
+
/* @__PURE__ */ jsx53(X2, { className: "w-3 h-3" }),
|
|
10788
|
+
/* @__PURE__ */ jsx53("span", { children: reason })
|
|
10967
10789
|
] });
|
|
10968
10790
|
}
|
|
10969
10791
|
|
|
10970
10792
|
// src/internal/components/NicknameSettings/NicknameEditForm.tsx
|
|
10971
|
-
import { Fragment as
|
|
10793
|
+
import { Fragment as Fragment18, jsx as jsx54, jsxs as jsxs47 } from "react/jsx-runtime";
|
|
10972
10794
|
function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
10973
10795
|
const [inputValue, setInputValue] = useState13("");
|
|
10974
10796
|
const [clientError, setClientError] = useState13(null);
|
|
@@ -11025,29 +10847,97 @@ function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
|
11025
10847
|
if (!canChange) {
|
|
11026
10848
|
return null;
|
|
11027
10849
|
}
|
|
11028
|
-
return /* @__PURE__ */
|
|
10850
|
+
return /* @__PURE__ */ jsxs47("form", { onSubmit: handleSubmit, className: "w-full flex flex-col gap-3", children: [
|
|
10851
|
+
/* @__PURE__ */ jsxs47("div", { className: "flex flex-col gap-1", children: [
|
|
10852
|
+
/* @__PURE__ */ jsx54("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "New nickname" }),
|
|
10853
|
+
/* @__PURE__ */ jsx54(
|
|
10854
|
+
Input,
|
|
10855
|
+
{
|
|
10856
|
+
value: inputValue,
|
|
10857
|
+
onChange: handleInputChange,
|
|
10858
|
+
placeholder: "Enter new nickname",
|
|
10859
|
+
disabled: isLoading,
|
|
10860
|
+
error: displayError || void 0
|
|
10861
|
+
}
|
|
10862
|
+
),
|
|
10863
|
+
/* @__PURE__ */ jsx54("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsx54("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "3-20 characters, letters, numbers, and underscores only" }) }),
|
|
10864
|
+
shouldCheckAvailability && !clientError && /* @__PURE__ */ jsx54(NicknameAvailabilityIndicator, { isChecking, availability })
|
|
10865
|
+
] }),
|
|
10866
|
+
/* @__PURE__ */ jsx54(Button, { type: "submit", size: "large", disabled: isSubmitDisabled, className: "w-full", children: isLoading ? /* @__PURE__ */ jsxs47(Fragment18, { children: [
|
|
10867
|
+
/* @__PURE__ */ jsx54(Loader15, { className: "w-4 h-4 mr-2 animate-spin" }),
|
|
10868
|
+
"Changing..."
|
|
10869
|
+
] }) : isSuccess ? /* @__PURE__ */ jsxs47(Fragment18, { children: [
|
|
10870
|
+
/* @__PURE__ */ jsx54(Check2, { className: "w-4 h-4 mr-2" }),
|
|
10871
|
+
"Nickname changed!"
|
|
10872
|
+
] }) : "Change Nickname" })
|
|
10873
|
+
] });
|
|
10874
|
+
}
|
|
10875
|
+
|
|
10876
|
+
// src/internal/components/NicknameSettings/NicknameInfoDisplay.tsx
|
|
10877
|
+
import { Fragment as Fragment19 } from "react";
|
|
10878
|
+
|
|
10879
|
+
// src/internal/lib/nickname-cooldown.ts
|
|
10880
|
+
function getDaysRemaining(cooldownEndsAt) {
|
|
10881
|
+
if (!cooldownEndsAt) return 0;
|
|
10882
|
+
const endDate = new Date(cooldownEndsAt);
|
|
10883
|
+
const now = /* @__PURE__ */ new Date();
|
|
10884
|
+
if (isNaN(endDate.getTime())) return 0;
|
|
10885
|
+
if (endDate <= now) return 0;
|
|
10886
|
+
const diffMs = endDate.getTime() - now.getTime();
|
|
10887
|
+
const diffDays = Math.ceil(diffMs / (1e3 * 60 * 60 * 24));
|
|
10888
|
+
return Math.max(0, diffDays);
|
|
10889
|
+
}
|
|
10890
|
+
function formatCooldownEndDate(cooldownEndsAt) {
|
|
10891
|
+
if (!cooldownEndsAt) return "";
|
|
10892
|
+
const endDate = new Date(cooldownEndsAt);
|
|
10893
|
+
if (isNaN(endDate.getTime())) return "";
|
|
10894
|
+
return endDate.toLocaleDateString(void 0, {
|
|
10895
|
+
year: "numeric",
|
|
10896
|
+
month: "short",
|
|
10897
|
+
day: "numeric"
|
|
10898
|
+
});
|
|
10899
|
+
}
|
|
10900
|
+
|
|
10901
|
+
// src/internal/components/NicknameSettings/NicknameInfoDisplay.tsx
|
|
10902
|
+
import { jsx as jsx55, jsxs as jsxs48 } from "react/jsx-runtime";
|
|
10903
|
+
function NicknameInfoDisplay({ info }) {
|
|
10904
|
+
const daysRemaining = getDaysRemaining(info.cooldownEndsAt);
|
|
10905
|
+
const cooldownEndDate = formatCooldownEndDate(info.cooldownEndsAt);
|
|
10906
|
+
return /* @__PURE__ */ jsxs48(Fragment19, { children: [
|
|
11029
10907
|
/* @__PURE__ */ jsxs48("div", { className: "flex flex-col gap-1", children: [
|
|
11030
|
-
/* @__PURE__ */ jsx55("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "
|
|
11031
|
-
/* @__PURE__ */ jsx55(
|
|
11032
|
-
Input,
|
|
11033
|
-
{
|
|
11034
|
-
value: inputValue,
|
|
11035
|
-
onChange: handleInputChange,
|
|
11036
|
-
placeholder: "Enter new nickname",
|
|
11037
|
-
disabled: isLoading,
|
|
11038
|
-
error: displayError || void 0
|
|
11039
|
-
}
|
|
11040
|
-
),
|
|
11041
|
-
/* @__PURE__ */ jsx55("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsx55("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "3-20 characters, letters, numbers, and underscores only" }) }),
|
|
11042
|
-
shouldCheckAvailability && !clientError && /* @__PURE__ */ jsx55(NicknameAvailabilityIndicator, { isChecking, availability })
|
|
10908
|
+
/* @__PURE__ */ jsx55("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "Your nickname" }),
|
|
10909
|
+
/* @__PURE__ */ jsx55("span", { className: "text-lg font-bold text-[var(--l-pass-fg)]", children: info.displayHandle })
|
|
11043
10910
|
] }),
|
|
11044
|
-
/* @__PURE__ */
|
|
11045
|
-
/* @__PURE__ */
|
|
11046
|
-
|
|
11047
|
-
|
|
11048
|
-
|
|
11049
|
-
|
|
11050
|
-
|
|
10911
|
+
/* @__PURE__ */ jsxs48("div", { className: "flex items-center gap-4 text-xs text-[var(--l-pass-fg-muted)]", children: [
|
|
10912
|
+
/* @__PURE__ */ jsxs48("div", { className: "flex flex-col gap-0.5", children: [
|
|
10913
|
+
/* @__PURE__ */ jsx55("span", { children: "Created" }),
|
|
10914
|
+
/* @__PURE__ */ jsx55("span", { className: "text-[var(--l-pass-fg)]", children: new Date(info.createdAt).toLocaleDateString(void 0, {
|
|
10915
|
+
year: "numeric",
|
|
10916
|
+
month: "short",
|
|
10917
|
+
day: "numeric"
|
|
10918
|
+
}) })
|
|
10919
|
+
] }),
|
|
10920
|
+
info.changedAt && /* @__PURE__ */ jsxs48("div", { className: "flex flex-col gap-0.5", children: [
|
|
10921
|
+
/* @__PURE__ */ jsx55("span", { children: "Last changed" }),
|
|
10922
|
+
/* @__PURE__ */ jsx55("span", { className: "text-[var(--l-pass-fg)]", children: new Date(info.changedAt).toLocaleDateString(void 0, {
|
|
10923
|
+
year: "numeric",
|
|
10924
|
+
month: "short",
|
|
10925
|
+
day: "numeric"
|
|
10926
|
+
}) })
|
|
10927
|
+
] }),
|
|
10928
|
+
/* @__PURE__ */ jsxs48("div", { className: "flex flex-col gap-0.5", children: [
|
|
10929
|
+
/* @__PURE__ */ jsx55("span", { children: "Times changed" }),
|
|
10930
|
+
/* @__PURE__ */ jsx55("span", { className: "text-[var(--l-pass-fg)]", children: info.changeCount })
|
|
10931
|
+
] })
|
|
10932
|
+
] }),
|
|
10933
|
+
!info.canChange && info.cooldownEndsAt && /* @__PURE__ */ jsx55("div", { className: "p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-warning)]", children: /* @__PURE__ */ jsxs48("span", { className: "text-sm text-[var(--l-pass-warning)]", children: [
|
|
10934
|
+
"You can change your nickname again on ",
|
|
10935
|
+
cooldownEndDate,
|
|
10936
|
+
" (",
|
|
10937
|
+
daysRemaining,
|
|
10938
|
+
" days remaining)"
|
|
10939
|
+
] }) }),
|
|
10940
|
+
info.canChange && /* @__PURE__ */ jsx55("div", { className: "p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-success)]", children: /* @__PURE__ */ jsx55("span", { className: "text-sm text-[var(--l-pass-success)]", children: "You can change your nickname" }) })
|
|
11051
10941
|
] });
|
|
11052
10942
|
}
|
|
11053
10943
|
|
|
@@ -11055,54 +10945,44 @@ function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
|
11055
10945
|
import { jsx as jsx56, jsxs as jsxs49 } from "react/jsx-runtime";
|
|
11056
10946
|
function NicknameSettings() {
|
|
11057
10947
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
10948
|
+
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
11058
10949
|
const { data: nicknameInfo, isLoading, isError, error, refetch } = useNicknameInfo();
|
|
11059
|
-
return /* @__PURE__ */
|
|
11060
|
-
|
|
11061
|
-
|
|
11062
|
-
|
|
11063
|
-
|
|
11064
|
-
|
|
11065
|
-
{
|
|
11066
|
-
|
|
11067
|
-
|
|
11068
|
-
|
|
11069
|
-
|
|
11070
|
-
|
|
11071
|
-
|
|
11072
|
-
|
|
11073
|
-
|
|
11074
|
-
|
|
11075
|
-
|
|
11076
|
-
|
|
11077
|
-
|
|
11078
|
-
|
|
11079
|
-
|
|
11080
|
-
|
|
11081
|
-
|
|
11082
|
-
|
|
11083
|
-
isError && /* @__PURE__ */ jsx56("div", { className: "w-full p-4 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-error)]", children: /* @__PURE__ */ jsx56("span", { className: "text-sm text-[var(--l-pass-error)]", children: error?.message || "Failed to load nickname info" }) }),
|
|
11084
|
-
nicknameInfo && /* @__PURE__ */ jsx56(NicknameInfoDisplay, { info: nicknameInfo }),
|
|
11085
|
-
nicknameInfo && /* @__PURE__ */ jsx56(
|
|
11086
|
-
NicknameEditForm,
|
|
11087
|
-
{
|
|
11088
|
-
currentHandle: nicknameInfo.handle,
|
|
11089
|
-
canChange: nicknameInfo.canChange,
|
|
11090
|
-
onSuccess: refetch
|
|
11091
|
-
}
|
|
11092
|
-
)
|
|
11093
|
-
] });
|
|
10950
|
+
return /* @__PURE__ */ jsx56(
|
|
10951
|
+
"div",
|
|
10952
|
+
{
|
|
10953
|
+
style: { "--l-pass-scrollbar-mah": `${maxScrollHeight}px` },
|
|
10954
|
+
className: "list-scrollbar-y w-full",
|
|
10955
|
+
children: /* @__PURE__ */ jsxs49(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: [
|
|
10956
|
+
/* @__PURE__ */ jsxs49("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
10957
|
+
/* @__PURE__ */ jsx56(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("settings" /* SETTINGS */), children: /* @__PURE__ */ jsx56(ArrowLeft9, { className: "h-4 w-4" }) }),
|
|
10958
|
+
/* @__PURE__ */ jsx56("span", { className: "text-xl font-semibold", children: "Nickname" })
|
|
10959
|
+
] }),
|
|
10960
|
+
isLoading && /* @__PURE__ */ jsx56("div", { className: "w-full p-8 flex items-center justify-center", children: /* @__PURE__ */ jsx56(Loader16, { className: "w-5 h-5 animate-spin" }) }),
|
|
10961
|
+
nicknameInfo && /* @__PURE__ */ jsx56(NicknameInfoDisplay, { info: nicknameInfo }),
|
|
10962
|
+
nicknameInfo && /* @__PURE__ */ jsx56(
|
|
10963
|
+
NicknameEditForm,
|
|
10964
|
+
{
|
|
10965
|
+
currentHandle: nicknameInfo.handle,
|
|
10966
|
+
canChange: nicknameInfo.canChange,
|
|
10967
|
+
onSuccess: refetch
|
|
10968
|
+
}
|
|
10969
|
+
),
|
|
10970
|
+
isError && /* @__PURE__ */ jsx56(Highlight, { type: "error", children: error?.message || "Failed to load nickname info" })
|
|
10971
|
+
] })
|
|
10972
|
+
}
|
|
10973
|
+
);
|
|
11094
10974
|
}
|
|
11095
10975
|
|
|
11096
10976
|
// src/internal/components/PortfolioMenu/PortfolioMenu.tsx
|
|
11097
|
-
import { useQueryClient as
|
|
11098
|
-
import { AlertCircle as AlertCircle4, ArrowLeft as
|
|
10977
|
+
import { useQueryClient as useQueryClient16 } from "@tanstack/react-query";
|
|
10978
|
+
import { AlertCircle as AlertCircle4, ArrowLeft as ArrowLeft10, Gem, Loader as Loader18, RefreshCw } from "lucide-react";
|
|
11099
10979
|
import { useCallback as useCallback15 } from "react";
|
|
11100
10980
|
|
|
11101
10981
|
// src/internal/hooks/useBlockscoutAssets.ts
|
|
11102
10982
|
init_lumiaPassport();
|
|
11103
10983
|
init_base();
|
|
11104
|
-
import { useCallback as useCallback14, useMemo as useMemo4, useRef as
|
|
11105
|
-
import { useQuery as
|
|
10984
|
+
import { useCallback as useCallback14, useMemo as useMemo4, useRef as useRef12 } from "react";
|
|
10985
|
+
import { useQuery as useQuery13 } from "@tanstack/react-query";
|
|
11106
10986
|
import { useBalance as useBalance2, usePublicClient } from "wagmi";
|
|
11107
10987
|
import { formatUnits as formatUnits2 } from "viem";
|
|
11108
10988
|
import {
|
|
@@ -11249,7 +11129,7 @@ function useBlockscoutAssets(options) {
|
|
|
11249
11129
|
[blockscoutApiUrl]
|
|
11250
11130
|
);
|
|
11251
11131
|
const publicClient2 = usePublicClient({ chainId: lumiaBeam.id });
|
|
11252
|
-
const lastRefreshRef =
|
|
11132
|
+
const lastRefreshRef = useRef12(0);
|
|
11253
11133
|
const {
|
|
11254
11134
|
data: nativeBalanceData,
|
|
11255
11135
|
isLoading: nativeLoading,
|
|
@@ -11267,7 +11147,7 @@ function useBlockscoutAssets(options) {
|
|
|
11267
11147
|
error: tokensError,
|
|
11268
11148
|
refetch: refetchTokens,
|
|
11269
11149
|
dataUpdatedAt
|
|
11270
|
-
} =
|
|
11150
|
+
} = useQuery13({
|
|
11271
11151
|
queryKey: [BLOCKSCOUT_QUERY_KEY, address, blockscoutApiUrl],
|
|
11272
11152
|
queryFn: () => blockscoutClient.getTokenBalances(address),
|
|
11273
11153
|
enabled: !!address && enabled,
|
|
@@ -11280,7 +11160,7 @@ function useBlockscoutAssets(options) {
|
|
|
11280
11160
|
data: nftItems,
|
|
11281
11161
|
isLoading: nftsLoading,
|
|
11282
11162
|
refetch: refetchNfts
|
|
11283
|
-
} =
|
|
11163
|
+
} = useQuery13({
|
|
11284
11164
|
queryKey: [BLOCKSCOUT_QUERY_KEY, "nfts", address, blockscoutApiUrl],
|
|
11285
11165
|
queryFn: () => blockscoutClient.getNfts(address),
|
|
11286
11166
|
enabled: !!address && enabled,
|
|
@@ -11293,7 +11173,7 @@ function useBlockscoutAssets(options) {
|
|
|
11293
11173
|
if (!tokenBalances) return [];
|
|
11294
11174
|
return tokenBalances.filter((tb) => tb.token.type === "ERC-20").map((tb) => tb.token.address);
|
|
11295
11175
|
}, [tokenBalances]);
|
|
11296
|
-
const { data: erc3643Results } =
|
|
11176
|
+
const { data: erc3643Results } = useQuery13({
|
|
11297
11177
|
queryKey: [ERC3643_DETECTION_QUERY_KEY, address, erc20TokenAddresses],
|
|
11298
11178
|
queryFn: async () => {
|
|
11299
11179
|
if (!publicClient2 || erc20TokenAddresses.length === 0) {
|
|
@@ -11410,11 +11290,11 @@ function useBlockscoutAssets(options) {
|
|
|
11410
11290
|
|
|
11411
11291
|
// src/internal/components/PortfolioMenu/PortfolioItem.tsx
|
|
11412
11292
|
init_base();
|
|
11413
|
-
import { useQuery as
|
|
11414
|
-
import { Image as ImageIcon, Loader as
|
|
11293
|
+
import { useQuery as useQuery14, useQueryClient as useQueryClient15 } from "@tanstack/react-query";
|
|
11294
|
+
import { Image as ImageIcon, Loader as Loader17, Shield, Sparkles } from "lucide-react";
|
|
11415
11295
|
import { useState as useState14 } from "react";
|
|
11416
11296
|
import { formatUnits as formatUnits3 } from "viem";
|
|
11417
|
-
import { Fragment as
|
|
11297
|
+
import { Fragment as Fragment20, jsx as jsx57, jsxs as jsxs50 } from "react/jsx-runtime";
|
|
11418
11298
|
function openInExplorer(address) {
|
|
11419
11299
|
window.open(`${LUMIA_EXPLORER_URL}/address/${address}`, "_blank");
|
|
11420
11300
|
}
|
|
@@ -11452,13 +11332,13 @@ function PortfolioItem(props) {
|
|
|
11452
11332
|
const [nftImageError, setNftImageError] = useState14(false);
|
|
11453
11333
|
const [logoError, setLogoError] = useState14(false);
|
|
11454
11334
|
const { assets: projectAssets, showBalanceAs: showBalanceAsSymbol } = useLumiaPassportConfig().config.current.projectAssets || {};
|
|
11455
|
-
const qc =
|
|
11335
|
+
const qc = useQueryClient15();
|
|
11456
11336
|
const { balanceQueryKey } = projectAssets?.find((a) => a.symbol === showBalanceAsSymbol) || {};
|
|
11457
11337
|
const projectAssetBalance = !!balanceQueryKey ? qc.getQueryData(balanceQueryKey) : null;
|
|
11458
11338
|
const isNft = isNftAsset(asset);
|
|
11459
11339
|
const nftImage = getNftImage(asset);
|
|
11460
11340
|
const isSecurity = isSecurityToken(asset);
|
|
11461
|
-
const { data: assetRate, isLoading: isRateLoading } =
|
|
11341
|
+
const { data: assetRate, isLoading: isRateLoading } = useQuery14({
|
|
11462
11342
|
retry: false,
|
|
11463
11343
|
staleTime: 4 * 60 * 1e3,
|
|
11464
11344
|
enabled: !!address && !!isAssetRateAvailable(asset.symbol) && !isProjectAsset && !isNft && !isSecurity,
|
|
@@ -11536,18 +11416,18 @@ function PortfolioItem(props) {
|
|
|
11536
11416
|
!isSecurity && isNft && "type" in asset && /* @__PURE__ */ jsx57("span", { className: "uppercase text-[10px] px-1 bg-[var(--l-pass-bg-info)] rounded-full", children: asset.type === "erc721" ? "ERC-721" : "ERC-1155" }),
|
|
11537
11417
|
isSecurity && /* @__PURE__ */ jsx57("span", { className: "uppercase text-[10px] px-1 bg-[var(--l-pass-bg-warning)] rounded-full", children: "Security Token" })
|
|
11538
11418
|
] }),
|
|
11539
|
-
/* @__PURE__ */ jsx57("div", { className: "w-full flex items-center justify-between font-bold text-lg leading-5", children: isNft ? /* @__PURE__ */ jsxs50(
|
|
11419
|
+
/* @__PURE__ */ jsx57("div", { className: "w-full flex items-center justify-between font-bold text-lg leading-5", children: isNft ? /* @__PURE__ */ jsxs50(Fragment20, { children: [
|
|
11540
11420
|
/* @__PURE__ */ jsx57("span", { className: "truncate max-w-[160px]", title: asset.nftMetadata?.name || asset.symbol, children: asset.nftMetadata?.name || asset.symbol }),
|
|
11541
11421
|
"tokenId" in asset && asset.tokenId && /* @__PURE__ */ jsxs50("span", { className: "text-xs text-[var(--l-pass-fg-muted)] font-normal", children: [
|
|
11542
11422
|
"#",
|
|
11543
11423
|
asset.tokenId.length > 8 ? `${asset.tokenId.slice(0, 6)}...` : asset.tokenId
|
|
11544
11424
|
] })
|
|
11545
|
-
] }) : /* @__PURE__ */ jsxs50(
|
|
11425
|
+
] }) : /* @__PURE__ */ jsxs50(Fragment20, { children: [
|
|
11546
11426
|
/* @__PURE__ */ jsxs50("span", { children: [
|
|
11547
11427
|
/* @__PURE__ */ jsx57("span", { children: formatPrice(Number(renderBalance)) }),
|
|
11548
11428
|
/* @__PURE__ */ jsx57("span", { children: " " + asset.symbol })
|
|
11549
11429
|
] }),
|
|
11550
|
-
isRateLoading && /* @__PURE__ */ jsx57(
|
|
11430
|
+
isRateLoading && /* @__PURE__ */ jsx57(Loader17, { className: "h-4 w-4 animate-spin" }),
|
|
11551
11431
|
!isRateLoading && !!usdRenderBalance && /* @__PURE__ */ jsxs50("span", { children: [
|
|
11552
11432
|
/* @__PURE__ */ jsx57("span", { children: "$" }),
|
|
11553
11433
|
/* @__PURE__ */ jsx57("span", { children: formatPrice(usdRenderBalance) })
|
|
@@ -11563,7 +11443,7 @@ function PortfolioItem(props) {
|
|
|
11563
11443
|
import { jsx as jsx58, jsxs as jsxs51 } from "react/jsx-runtime";
|
|
11564
11444
|
function PortfolioMenu() {
|
|
11565
11445
|
const { assets: projectAssets = [] } = useLumiaPassportConfig().config.current?.projectAssets || {};
|
|
11566
|
-
const qc =
|
|
11446
|
+
const qc = useQueryClient16();
|
|
11567
11447
|
const address = useLumiaPassportSession((st) => st.address);
|
|
11568
11448
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
11569
11449
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
@@ -11590,7 +11470,7 @@ function PortfolioMenu() {
|
|
|
11590
11470
|
className: "list-scrollbar-y w-full p-[var(--l-pass-pd)]",
|
|
11591
11471
|
children: /* @__PURE__ */ jsxs51(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: [
|
|
11592
11472
|
/* @__PURE__ */ jsxs51("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
11593
|
-
/* @__PURE__ */ jsx58(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx58(
|
|
11473
|
+
/* @__PURE__ */ jsx58(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx58(ArrowLeft10, { className: "h-4 w-4" }) }),
|
|
11594
11474
|
/* @__PURE__ */ jsx58("span", { className: "text-xl font-semibold", children: "Your Assets" }),
|
|
11595
11475
|
/* @__PURE__ */ jsx58(
|
|
11596
11476
|
Button,
|
|
@@ -11600,11 +11480,11 @@ function PortfolioMenu() {
|
|
|
11600
11480
|
size: "icon",
|
|
11601
11481
|
onClick: refreshAllAssetsBalances,
|
|
11602
11482
|
disabled: isBlockscoutLoading,
|
|
11603
|
-
children: isBlockscoutLoading ? /* @__PURE__ */ jsx58(
|
|
11483
|
+
children: isBlockscoutLoading ? /* @__PURE__ */ jsx58(Loader18, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx58(RefreshCw, { className: "h-4 w-4" })
|
|
11604
11484
|
}
|
|
11605
11485
|
)
|
|
11606
11486
|
] }),
|
|
11607
|
-
isBlockscoutLoading && /* @__PURE__ */ jsx58("div", { className: "w-full flex items-center justify-center gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: /* @__PURE__ */ jsx58(
|
|
11487
|
+
isBlockscoutLoading && /* @__PURE__ */ jsx58("div", { className: "w-full flex items-center justify-center gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: /* @__PURE__ */ jsx58(Loader18, { className: "h-5 w-5 animate-spin" }) }),
|
|
11608
11488
|
!isBlockscoutLoading && blockscoutAssets?.length === 0 && /* @__PURE__ */ jsxs51(Highlight, { type: "info", className: "flex flex-col items-center justify-center gap-[var(--l-pass-gap)]", children: [
|
|
11609
11489
|
/* @__PURE__ */ jsx58(Gem, { className: "w-8 h-8" }),
|
|
11610
11490
|
/* @__PURE__ */ jsx58("span", { className: "block", children: "No assets found" })
|
|
@@ -11630,9 +11510,9 @@ function PortfolioMenu() {
|
|
|
11630
11510
|
// src/internal/components/SecurityMenu/SecurityMenu.tsx
|
|
11631
11511
|
init_auth();
|
|
11632
11512
|
init_keyshare();
|
|
11633
|
-
import { useQuery as
|
|
11513
|
+
import { useQuery as useQuery15, useQueryClient as useQueryClient17 } from "@tanstack/react-query";
|
|
11634
11514
|
import dayjs3 from "dayjs";
|
|
11635
|
-
import { ArrowLeft as
|
|
11515
|
+
import { ArrowLeft as ArrowLeft11, Loader as Loader21, Trash2 as Trash22 } from "lucide-react";
|
|
11636
11516
|
import { useState as useState15 } from "react";
|
|
11637
11517
|
init_iframe_manager();
|
|
11638
11518
|
init_vaultClient();
|
|
@@ -11641,7 +11521,7 @@ init_vaultClient();
|
|
|
11641
11521
|
var KEYSHARE_RECOVERY_STATS_QUERY = "keyshare-recovery-stats-query";
|
|
11642
11522
|
|
|
11643
11523
|
// src/internal/components/SecurityMenu/Keyshare/Keyshare.tsx
|
|
11644
|
-
import { Cloud as Cloud4, Laptop, Loader as
|
|
11524
|
+
import { Cloud as Cloud4, Laptop, Loader as Loader20, RefreshCw as RefreshCw2, Server as Server3 } from "lucide-react";
|
|
11645
11525
|
|
|
11646
11526
|
// src/internal/assets/NegativeIcon.tsx
|
|
11647
11527
|
import { jsx as jsx59, jsxs as jsxs52 } from "react/jsx-runtime";
|
|
@@ -11658,11 +11538,11 @@ function NegativeIcon(props) {
|
|
|
11658
11538
|
init_vaultClient();
|
|
11659
11539
|
|
|
11660
11540
|
// src/internal/components/SecurityMenu/Keyshare/KeyshareStatus.tsx
|
|
11661
|
-
import { Loader as
|
|
11541
|
+
import { Loader as Loader19 } from "lucide-react";
|
|
11662
11542
|
import { jsx as jsx60, jsxs as jsxs53 } from "react/jsx-runtime";
|
|
11663
11543
|
function KeyshareStatus(props) {
|
|
11664
11544
|
const { isLoading, content, icon: Icon2, children } = props;
|
|
11665
|
-
if (isLoading) return /* @__PURE__ */ jsx60(
|
|
11545
|
+
if (isLoading) return /* @__PURE__ */ jsx60(Loader19, { className: "w-4 h-4 animate-spin text-[var(--l-pass-fg-muted)]" });
|
|
11666
11546
|
return /* @__PURE__ */ jsxs53("div", { className: "group relative w-full h-full", children: [
|
|
11667
11547
|
children,
|
|
11668
11548
|
/* @__PURE__ */ jsx60(
|
|
@@ -11696,7 +11576,7 @@ function KeyshareStatus(props) {
|
|
|
11696
11576
|
// src/internal/components/SecurityMenu/Keyshare/LastBackup.tsx
|
|
11697
11577
|
import dayjs2 from "dayjs";
|
|
11698
11578
|
import { Cloud as Cloud3, HardDrive, Server as Server2 } from "lucide-react";
|
|
11699
|
-
import { Fragment as
|
|
11579
|
+
import { Fragment as Fragment21, jsx as jsx61, jsxs as jsxs54 } from "react/jsx-runtime";
|
|
11700
11580
|
function parseOS(ua) {
|
|
11701
11581
|
if (!ua) return null;
|
|
11702
11582
|
if (ua.includes("Mac OS X")) return "macOS";
|
|
@@ -11723,7 +11603,7 @@ function LastBackup(props) {
|
|
|
11723
11603
|
/* @__PURE__ */ jsx61(Server2, { className: "w-4 h-4 inline" }),
|
|
11724
11604
|
/* @__PURE__ */ jsx61("span", { children: "Last Keyshare Vault Backup" })
|
|
11725
11605
|
] }),
|
|
11726
|
-
recoveryCreatedAt && /* @__PURE__ */ jsxs54(
|
|
11606
|
+
recoveryCreatedAt && /* @__PURE__ */ jsxs54(Fragment21, { children: [
|
|
11727
11607
|
/* @__PURE__ */ jsx61("span", { children: dayjs2(recoveryCreatedAt).format("MMMM DD, YYYY HH:mm") }),
|
|
11728
11608
|
/* @__PURE__ */ jsx61("span", { children: `${recoveryBrowser || "UNKNOWN"} browser at ${recoveryDeviceName || "UNKNOWN"} device under ${parseOS(recoveryUa) || "UNKNOWN"} OS` })
|
|
11729
11609
|
] }),
|
|
@@ -11745,14 +11625,14 @@ function LastBackup(props) {
|
|
|
11745
11625
|
}
|
|
11746
11626
|
|
|
11747
11627
|
// src/internal/components/SecurityMenu/Keyshare/Keyshare.tsx
|
|
11748
|
-
import { Fragment as
|
|
11628
|
+
import { Fragment as Fragment22, jsx as jsx62, jsxs as jsxs55 } from "react/jsx-runtime";
|
|
11749
11629
|
function Keyshare(props) {
|
|
11750
11630
|
const { userId, serverHasKeyshare, localInfo, hasServerBackup, createdRecoveryStats, isLoading, refresh } = props;
|
|
11751
11631
|
const backup = userId ? getBackupStatus(userId) : { server: { enabled: false }, cloud: { enabled: false }, local: { enabled: false } };
|
|
11752
|
-
return /* @__PURE__ */ jsxs55(
|
|
11632
|
+
return /* @__PURE__ */ jsxs55(Fragment22, { children: [
|
|
11753
11633
|
/* @__PURE__ */ jsxs55("div", { className: "flex items-center justify-between gap-[var(--l-pass-gap)]", children: [
|
|
11754
11634
|
/* @__PURE__ */ jsx62("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "Keyshare Status" }),
|
|
11755
|
-
/* @__PURE__ */ jsx62(Button, { variant: "ghost", size: "icon", title: "Refresh", disabled: isLoading, onClick: refresh, children: isLoading ? /* @__PURE__ */ jsx62(
|
|
11635
|
+
/* @__PURE__ */ jsx62(Button, { variant: "ghost", size: "icon", title: "Refresh", disabled: isLoading, onClick: refresh, children: isLoading ? /* @__PURE__ */ jsx62(Loader20, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx62(RefreshCw2, { className: "h-4 w-4" }) })
|
|
11756
11636
|
] }),
|
|
11757
11637
|
/* @__PURE__ */ jsxs55("div", { className: "grid grid-cols-3 gap-[var(--l-pass-gap)] px-[var(--l-pass-gap)]", children: [
|
|
11758
11638
|
/* @__PURE__ */ jsx62(
|
|
@@ -11816,16 +11696,16 @@ function Keyshare(props) {
|
|
|
11816
11696
|
}
|
|
11817
11697
|
|
|
11818
11698
|
// src/internal/components/SecurityMenu/SecurityMenu.tsx
|
|
11819
|
-
import { Fragment as
|
|
11699
|
+
import { Fragment as Fragment23, jsx as jsx63, jsxs as jsxs56 } from "react/jsx-runtime";
|
|
11820
11700
|
function SecurityMenu() {
|
|
11821
|
-
const qc =
|
|
11701
|
+
const qc = useQueryClient17();
|
|
11822
11702
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
11823
11703
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
11824
11704
|
const userId = jwtTokenManager2.getUserId();
|
|
11825
11705
|
const serverHasKeyshare = jwtTokenManager2.getHasKeyshare() ?? false;
|
|
11826
11706
|
const [isRemoving, setIsRemoving] = useState15(false);
|
|
11827
11707
|
const [appToRemove, setAppToRemove] = useState15(null);
|
|
11828
|
-
const { data: recoveryData, isFetching: isRecoveryLoading } =
|
|
11708
|
+
const { data: recoveryData, isFetching: isRecoveryLoading } = useQuery15({
|
|
11829
11709
|
enabled: !!userId,
|
|
11830
11710
|
queryKey: [KEYSHARE_RECOVERY_STATS_QUERY, userId],
|
|
11831
11711
|
queryFn: async () => {
|
|
@@ -11884,12 +11764,12 @@ function SecurityMenu() {
|
|
|
11884
11764
|
if (!!appToRemove) setAppToRemove(null);
|
|
11885
11765
|
else setPage("settings" /* SETTINGS */);
|
|
11886
11766
|
},
|
|
11887
|
-
children: /* @__PURE__ */ jsx63(
|
|
11767
|
+
children: /* @__PURE__ */ jsx63(ArrowLeft11, { className: "h-4 w-4" })
|
|
11888
11768
|
}
|
|
11889
11769
|
),
|
|
11890
11770
|
/* @__PURE__ */ jsx63("span", { className: "text-xl font-semibold", children: "Security" })
|
|
11891
11771
|
] }),
|
|
11892
|
-
!appToRemove && /* @__PURE__ */ jsxs56(
|
|
11772
|
+
!appToRemove && /* @__PURE__ */ jsxs56(Fragment23, { children: [
|
|
11893
11773
|
/* @__PURE__ */ jsx63(
|
|
11894
11774
|
Keyshare,
|
|
11895
11775
|
{
|
|
@@ -11902,7 +11782,7 @@ function SecurityMenu() {
|
|
|
11902
11782
|
refresh: () => qc.invalidateQueries({ queryKey: [KEYSHARE_RECOVERY_STATS_QUERY, userId] })
|
|
11903
11783
|
}
|
|
11904
11784
|
),
|
|
11905
|
-
trustedApps.length > 0 && /* @__PURE__ */ jsxs56(
|
|
11785
|
+
trustedApps.length > 0 && /* @__PURE__ */ jsxs56(Fragment23, { children: [
|
|
11906
11786
|
/* @__PURE__ */ jsxs56("div", { className: "w-full space-y-2", children: [
|
|
11907
11787
|
/* @__PURE__ */ jsx63("div", { className: "font-medium text-xs text-[var(--l-pass-fg)]", children: `Trusted Applications (${trustedApps.length}):` }),
|
|
11908
11788
|
/* @__PURE__ */ jsx63("div", { className: "w-full space-y-1", children: trustedApps.map((app, index) => /* @__PURE__ */ jsxs56(
|
|
@@ -11978,7 +11858,7 @@ function SecurityMenu() {
|
|
|
11978
11858
|
className: "flex-1 bg-[var(--l-pass-error)] hover:bg-[var(--l-pass-error)]/60 active:bg-[var(--l-pass-error)]/40",
|
|
11979
11859
|
onClick: handleRemoveTrustedApp,
|
|
11980
11860
|
disabled: isRemoving,
|
|
11981
|
-
children: isRemoving ? /* @__PURE__ */ jsx63(
|
|
11861
|
+
children: isRemoving ? /* @__PURE__ */ jsx63(Loader21, { className: "h-4 w-4 animate-spin" }) : "Remove"
|
|
11982
11862
|
}
|
|
11983
11863
|
)
|
|
11984
11864
|
] })
|
|
@@ -11989,21 +11869,74 @@ function SecurityMenu() {
|
|
|
11989
11869
|
}
|
|
11990
11870
|
|
|
11991
11871
|
// src/internal/components/SendRecieveMenu/SendLumiaMenu.tsx
|
|
11992
|
-
import { AlertCircle as AlertCircle5, ArrowLeft as
|
|
11993
|
-
import { useEffect as
|
|
11872
|
+
import { AlertCircle as AlertCircle5, ArrowLeft as ArrowLeft12, AtSign, CheckCircle2 as CheckCircle23, Loader as Loader22, Wallet as Wallet3 } from "lucide-react";
|
|
11873
|
+
import { useEffect as useEffect25, useState as useState18 } from "react";
|
|
11994
11874
|
import { isAddress as isAddress2 } from "viem";
|
|
11995
11875
|
import { useBalance as useBalance4 } from "wagmi";
|
|
11996
11876
|
|
|
11877
|
+
// src/hooks/useNicknameResolve.ts
|
|
11878
|
+
init_nickname();
|
|
11879
|
+
init_profile();
|
|
11880
|
+
import { useQuery as useQuery16 } from "@tanstack/react-query";
|
|
11881
|
+
import { useState as useState16, useEffect as useEffect24 } from "react";
|
|
11882
|
+
var DEBOUNCE_MS2 = 300;
|
|
11883
|
+
function looksLikeNickname(input) {
|
|
11884
|
+
if (!input) return false;
|
|
11885
|
+
if (input.startsWith("0x")) return false;
|
|
11886
|
+
if (input.startsWith("@")) return true;
|
|
11887
|
+
const normalized = input.toLowerCase().trim();
|
|
11888
|
+
return /^[a-z0-9_]+$/.test(normalized);
|
|
11889
|
+
}
|
|
11890
|
+
function useNicknameResolve(input, enabled = true) {
|
|
11891
|
+
const [debouncedInput, setDebouncedInput] = useState16("");
|
|
11892
|
+
const [isDebouncing, setIsDebouncing] = useState16(false);
|
|
11893
|
+
const normalized = normalizeNickname(input);
|
|
11894
|
+
const isNicknameInput = looksLikeNickname(input) && normalized.length >= 3;
|
|
11895
|
+
useEffect24(() => {
|
|
11896
|
+
if (!isNicknameInput || !enabled) {
|
|
11897
|
+
setDebouncedInput("");
|
|
11898
|
+
setIsDebouncing(false);
|
|
11899
|
+
return;
|
|
11900
|
+
}
|
|
11901
|
+
setIsDebouncing(true);
|
|
11902
|
+
const timer = setTimeout(() => {
|
|
11903
|
+
setDebouncedInput(normalized);
|
|
11904
|
+
setIsDebouncing(false);
|
|
11905
|
+
}, DEBOUNCE_MS2);
|
|
11906
|
+
return () => {
|
|
11907
|
+
clearTimeout(timer);
|
|
11908
|
+
};
|
|
11909
|
+
}, [normalized, isNicknameInput, enabled]);
|
|
11910
|
+
const query = useQuery16({
|
|
11911
|
+
queryKey: QUERY_KEYS.nicknameResolve(debouncedInput),
|
|
11912
|
+
queryFn: () => resolveNickname(debouncedInput),
|
|
11913
|
+
enabled: enabled && isNicknameInput && debouncedInput.length > 0,
|
|
11914
|
+
staleTime: 1e3 * 60 * 5,
|
|
11915
|
+
// 5 minutes - addresses don't change often
|
|
11916
|
+
retry: 1
|
|
11917
|
+
});
|
|
11918
|
+
const isNotFound = query.isError && query.error?.code === "NICKNAME_NOT_FOUND";
|
|
11919
|
+
return {
|
|
11920
|
+
data: query.data,
|
|
11921
|
+
isLoading: query.isLoading,
|
|
11922
|
+
isResolving: isDebouncing || query.isFetching,
|
|
11923
|
+
isError: query.isError,
|
|
11924
|
+
isNotFound,
|
|
11925
|
+
error: query.error,
|
|
11926
|
+
resolvedAddress: query.data?.walletAddress || null
|
|
11927
|
+
};
|
|
11928
|
+
}
|
|
11929
|
+
|
|
11997
11930
|
// src/hooks/useSendTransaction.ts
|
|
11998
|
-
import { useCallback as useCallback16, useState as
|
|
11931
|
+
import { useCallback as useCallback16, useState as useState17 } from "react";
|
|
11999
11932
|
import { isAddress, parseEther as parseEther2 } from "viem";
|
|
12000
11933
|
init_account();
|
|
12001
11934
|
function useSendTransaction() {
|
|
12002
11935
|
const session = useLumiaPassportSession((st) => st.session);
|
|
12003
11936
|
const address = useLumiaPassportSession((st) => st.address);
|
|
12004
|
-
const [isLoading, setIsLoading] =
|
|
12005
|
-
const [error, setError] =
|
|
12006
|
-
const [userOpHash, setUserOpHash] =
|
|
11937
|
+
const [isLoading, setIsLoading] = useState17(false);
|
|
11938
|
+
const [error, setError] = useState17(null);
|
|
11939
|
+
const [userOpHash, setUserOpHash] = useState17(null);
|
|
12007
11940
|
const sendTransaction = useCallback16(
|
|
12008
11941
|
async (params) => {
|
|
12009
11942
|
if (!session || !address) {
|
|
@@ -12058,59 +11991,6 @@ function useSendTransaction() {
|
|
|
12058
11991
|
};
|
|
12059
11992
|
}
|
|
12060
11993
|
|
|
12061
|
-
// src/hooks/useNicknameResolve.ts
|
|
12062
|
-
init_nickname();
|
|
12063
|
-
init_profile();
|
|
12064
|
-
import { useQuery as useQuery17 } from "@tanstack/react-query";
|
|
12065
|
-
import { useState as useState17, useEffect as useEffect27 } from "react";
|
|
12066
|
-
var DEBOUNCE_MS2 = 300;
|
|
12067
|
-
function looksLikeNickname(input) {
|
|
12068
|
-
if (!input) return false;
|
|
12069
|
-
if (input.startsWith("0x")) return false;
|
|
12070
|
-
if (input.startsWith("@")) return true;
|
|
12071
|
-
const normalized = input.toLowerCase().trim();
|
|
12072
|
-
return /^[a-z0-9_]+$/.test(normalized);
|
|
12073
|
-
}
|
|
12074
|
-
function useNicknameResolve(input, enabled = true) {
|
|
12075
|
-
const [debouncedInput, setDebouncedInput] = useState17("");
|
|
12076
|
-
const [isDebouncing, setIsDebouncing] = useState17(false);
|
|
12077
|
-
const normalized = normalizeNickname(input);
|
|
12078
|
-
const isNicknameInput = looksLikeNickname(input) && normalized.length >= 3;
|
|
12079
|
-
useEffect27(() => {
|
|
12080
|
-
if (!isNicknameInput || !enabled) {
|
|
12081
|
-
setDebouncedInput("");
|
|
12082
|
-
setIsDebouncing(false);
|
|
12083
|
-
return;
|
|
12084
|
-
}
|
|
12085
|
-
setIsDebouncing(true);
|
|
12086
|
-
const timer = setTimeout(() => {
|
|
12087
|
-
setDebouncedInput(normalized);
|
|
12088
|
-
setIsDebouncing(false);
|
|
12089
|
-
}, DEBOUNCE_MS2);
|
|
12090
|
-
return () => {
|
|
12091
|
-
clearTimeout(timer);
|
|
12092
|
-
};
|
|
12093
|
-
}, [normalized, isNicknameInput, enabled]);
|
|
12094
|
-
const query = useQuery17({
|
|
12095
|
-
queryKey: QUERY_KEYS.nicknameResolve(debouncedInput),
|
|
12096
|
-
queryFn: () => resolveNickname(debouncedInput),
|
|
12097
|
-
enabled: enabled && isNicknameInput && debouncedInput.length > 0,
|
|
12098
|
-
staleTime: 1e3 * 60 * 5,
|
|
12099
|
-
// 5 minutes - addresses don't change often
|
|
12100
|
-
retry: 1
|
|
12101
|
-
});
|
|
12102
|
-
const isNotFound = query.isError && query.error?.code === "NICKNAME_NOT_FOUND";
|
|
12103
|
-
return {
|
|
12104
|
-
data: query.data,
|
|
12105
|
-
isLoading: query.isLoading,
|
|
12106
|
-
isResolving: isDebouncing || query.isFetching,
|
|
12107
|
-
isError: query.isError,
|
|
12108
|
-
isNotFound,
|
|
12109
|
-
error: query.error,
|
|
12110
|
-
resolvedAddress: query.data?.walletAddress || null
|
|
12111
|
-
};
|
|
12112
|
-
}
|
|
12113
|
-
|
|
12114
11994
|
// src/modules/assets.ts
|
|
12115
11995
|
init_base();
|
|
12116
11996
|
import React6 from "react";
|
|
@@ -12274,7 +12154,7 @@ function useTokenBalance(tokenAddress, userAddress) {
|
|
|
12274
12154
|
|
|
12275
12155
|
// src/internal/components/SendRecieveMenu/SendLumiaMenu.tsx
|
|
12276
12156
|
init_base();
|
|
12277
|
-
import { Fragment as
|
|
12157
|
+
import { Fragment as Fragment24, jsx as jsx64, jsxs as jsxs57 } from "react/jsx-runtime";
|
|
12278
12158
|
function SendLumiaMenu() {
|
|
12279
12159
|
const page = useLayoutDataStore((st) => st.page);
|
|
12280
12160
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
@@ -12291,11 +12171,16 @@ function SendLumiaMenu() {
|
|
|
12291
12171
|
const [txStep, setTxStep] = useState18("input");
|
|
12292
12172
|
const [validationError, setValidationError] = useState18(null);
|
|
12293
12173
|
const isNicknameInput = looksLikeNickname(recipient);
|
|
12294
|
-
const {
|
|
12174
|
+
const {
|
|
12175
|
+
resolvedAddress,
|
|
12176
|
+
isResolving,
|
|
12177
|
+
isNotFound,
|
|
12178
|
+
data: nicknameData
|
|
12179
|
+
} = useNicknameResolve(recipient, isNicknameInput);
|
|
12295
12180
|
const effectiveAddress = isNicknameInput ? resolvedAddress : recipient;
|
|
12296
12181
|
const nativeAsset = assets.find((a) => a.type === "native");
|
|
12297
12182
|
const balance = nativeAsset ? parseFloat(nativeAsset.formattedBalance) : 0;
|
|
12298
|
-
|
|
12183
|
+
useEffect25(() => {
|
|
12299
12184
|
if (open) {
|
|
12300
12185
|
setTxStep("input");
|
|
12301
12186
|
setValidationError(null);
|
|
@@ -12366,21 +12251,21 @@ function SendLumiaMenu() {
|
|
|
12366
12251
|
};
|
|
12367
12252
|
return /* @__PURE__ */ jsxs57("div", { className: "w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]", children: [
|
|
12368
12253
|
/* @__PURE__ */ jsxs57("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
12369
|
-
txStep === "input" && /* @__PURE__ */ jsx64(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx64(
|
|
12254
|
+
txStep === "input" && /* @__PURE__ */ jsx64(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx64(ArrowLeft12, { className: "h-4 w-4" }) }),
|
|
12370
12255
|
/* @__PURE__ */ jsx64("span", { className: "text-xl font-semibold", children: "Send LUMIA" })
|
|
12371
12256
|
] }),
|
|
12372
|
-
txStep === "input" && /* @__PURE__ */ jsxs57(
|
|
12257
|
+
txStep === "input" && /* @__PURE__ */ jsxs57(Fragment24, { children: [
|
|
12373
12258
|
/* @__PURE__ */ jsxs57("div", { className: "w-full flex flex-col gap-2", children: [
|
|
12374
12259
|
/* @__PURE__ */ jsx64("span", { className: "block text-sm font-medium mb-2 text-[var(--l-pass-fg-muted)]", children: "Recipient" }),
|
|
12375
12260
|
/* @__PURE__ */ jsx64(
|
|
12376
12261
|
Input,
|
|
12377
12262
|
{
|
|
12378
|
-
Icon: isNicknameInput ?
|
|
12263
|
+
Icon: isNicknameInput ? AtSign : Wallet3,
|
|
12379
12264
|
type: "text",
|
|
12380
12265
|
value: recipient,
|
|
12381
12266
|
onChange: (e) => setRecipient(e.target.value),
|
|
12382
12267
|
placeholder: "0x... or @nickname",
|
|
12383
|
-
element: isNicknameInput && isResolving ? /* @__PURE__ */ jsx64(
|
|
12268
|
+
element: isNicknameInput && isResolving ? /* @__PURE__ */ jsx64(Loader22, { className: "w-4 h-4 animate-spin text-[var(--l-pass-fg-muted)]" }) : null
|
|
12384
12269
|
}
|
|
12385
12270
|
),
|
|
12386
12271
|
isNicknameInput && resolvedAddress && !isResolving && /* @__PURE__ */ jsxs57("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-success)]", children: [
|
|
@@ -12401,30 +12286,18 @@ function SendLumiaMenu() {
|
|
|
12401
12286
|
" LUMIA"
|
|
12402
12287
|
] })
|
|
12403
12288
|
] }),
|
|
12404
|
-
/* @__PURE__ */
|
|
12405
|
-
|
|
12406
|
-
|
|
12407
|
-
|
|
12408
|
-
|
|
12409
|
-
|
|
12410
|
-
|
|
12411
|
-
|
|
12412
|
-
|
|
12413
|
-
|
|
12414
|
-
|
|
12415
|
-
|
|
12416
|
-
/* @__PURE__ */ jsx64(
|
|
12417
|
-
Button,
|
|
12418
|
-
{
|
|
12419
|
-
onClick: handleMaxAmount,
|
|
12420
|
-
variant: "ghost",
|
|
12421
|
-
size: "medium",
|
|
12422
|
-
style: { transform: "translateY(-50%)" },
|
|
12423
|
-
className: "absolute right-2 top-1/2",
|
|
12424
|
-
children: "MAX"
|
|
12425
|
-
}
|
|
12426
|
-
)
|
|
12427
|
-
] })
|
|
12289
|
+
/* @__PURE__ */ jsx64(
|
|
12290
|
+
Input,
|
|
12291
|
+
{
|
|
12292
|
+
Icon: LumiaIcon,
|
|
12293
|
+
type: "number",
|
|
12294
|
+
value: amount,
|
|
12295
|
+
onChange: (e) => setAmount(e.target.value),
|
|
12296
|
+
placeholder: "0.0",
|
|
12297
|
+
step: "0.000001",
|
|
12298
|
+
element: /* @__PURE__ */ jsx64(Button, { onClick: handleMaxAmount, variant: "ghost", size: "medium", children: "MAX" })
|
|
12299
|
+
}
|
|
12300
|
+
)
|
|
12428
12301
|
] }),
|
|
12429
12302
|
(validationError || error) && /* @__PURE__ */ jsxs57("div", { className: "flex items-center gap-2 p-3 bg-[var(--l-pass-bg-error)] text-[var(--l-pass-error)] rounded-[var(--l-pass-el-bdrs)]", children: [
|
|
12430
12303
|
/* @__PURE__ */ jsx64(AlertCircle5, { className: "h-4 w-4" }),
|
|
@@ -12432,7 +12305,7 @@ function SendLumiaMenu() {
|
|
|
12432
12305
|
] }),
|
|
12433
12306
|
/* @__PURE__ */ jsx64(Button, { onClick: handleSend, disabled: isLoading, className: "w-full", size: "large", children: "Continue" })
|
|
12434
12307
|
] }),
|
|
12435
|
-
txStep === "confirm" && effectiveAddress && /* @__PURE__ */ jsxs57(
|
|
12308
|
+
txStep === "confirm" && effectiveAddress && /* @__PURE__ */ jsxs57(Fragment24, { children: [
|
|
12436
12309
|
/* @__PURE__ */ jsxs57("div", { className: "bg-gray-50 rounded-lg p-4", children: [
|
|
12437
12310
|
/* @__PURE__ */ jsx64("h3", { className: "font-medium mb-3", children: "Transaction Details" }),
|
|
12438
12311
|
/* @__PURE__ */ jsxs57("div", { className: "space-y-2 text-sm", children: [
|
|
@@ -12459,19 +12332,19 @@ function SendLumiaMenu() {
|
|
|
12459
12332
|
/* @__PURE__ */ jsxs57("div", { className: "flex gap-2", children: [
|
|
12460
12333
|
/* @__PURE__ */ jsx64(Button, { onClick: () => setTxStep("input"), variant: "outline", className: "flex-1", size: "large", children: "Back" }),
|
|
12461
12334
|
/* @__PURE__ */ jsxs57(Button, { onClick: handleConfirm, disabled: isLoading, className: "flex-1", size: "large", children: [
|
|
12462
|
-
isLoading && /* @__PURE__ */ jsx64(
|
|
12335
|
+
isLoading && /* @__PURE__ */ jsx64(Loader22, { className: "h-4 w-4 animate-spin" }),
|
|
12463
12336
|
"Confirm"
|
|
12464
12337
|
] })
|
|
12465
12338
|
] })
|
|
12466
12339
|
] }),
|
|
12467
12340
|
txStep === "pending" && /* @__PURE__ */ jsxs57("div", { className: "py-8 text-center space-y-4", children: [
|
|
12468
|
-
/* @__PURE__ */ jsx64(
|
|
12341
|
+
/* @__PURE__ */ jsx64(Loader22, { className: "h-5 w-5 animate-spin mx-auto" }),
|
|
12469
12342
|
/* @__PURE__ */ jsxs57("div", { children: [
|
|
12470
12343
|
/* @__PURE__ */ jsx64("span", { className: "block font-medium", children: "Transaction Pending" }),
|
|
12471
12344
|
/* @__PURE__ */ jsx64("span", { className: "block text-sm mt-1", children: "Please wait while we process your transaction" })
|
|
12472
12345
|
] })
|
|
12473
12346
|
] }),
|
|
12474
|
-
txStep === "success" && userOpHash && /* @__PURE__ */ jsxs57(
|
|
12347
|
+
txStep === "success" && userOpHash && /* @__PURE__ */ jsxs57(Fragment24, { children: [
|
|
12475
12348
|
/* @__PURE__ */ jsxs57("div", { className: "text-center py-4", children: [
|
|
12476
12349
|
/* @__PURE__ */ jsx64(CheckCircle23, { className: "h-12 w-12 text-[var(--l-pass-success)] mx-auto mb-3" }),
|
|
12477
12350
|
/* @__PURE__ */ jsx64("p", { className: "font-medium", children: "Transaction Sent!" }),
|
|
@@ -12484,10 +12357,10 @@ function SendLumiaMenu() {
|
|
|
12484
12357
|
|
|
12485
12358
|
// src/internal/components/SendRecieveMenu/ReceiveLumiaMenu.tsx
|
|
12486
12359
|
init_clients();
|
|
12487
|
-
import { ArrowLeft as
|
|
12360
|
+
import { ArrowLeft as ArrowLeft13, CheckCircle2 as CheckCircle24, Copy as Copy2, Loader as Loader23 } from "lucide-react";
|
|
12488
12361
|
import QRCode from "qrcode";
|
|
12489
|
-
import { useCallback as useCallback17, useEffect as
|
|
12490
|
-
import { Fragment as
|
|
12362
|
+
import { useCallback as useCallback17, useEffect as useEffect26, useState as useState19 } from "react";
|
|
12363
|
+
import { Fragment as Fragment25, jsx as jsx65, jsxs as jsxs58 } from "react/jsx-runtime";
|
|
12491
12364
|
function ReceiveLumiaMenu() {
|
|
12492
12365
|
const address = useLumiaPassportSession((st) => st.address);
|
|
12493
12366
|
const page = useLayoutDataStore((st) => st.page);
|
|
@@ -12496,7 +12369,7 @@ function ReceiveLumiaMenu() {
|
|
|
12496
12369
|
const open = page === "receive";
|
|
12497
12370
|
const [qrCodeUrl, setQrCodeUrl] = useState19("");
|
|
12498
12371
|
const [copied, setCopied] = useState19(false);
|
|
12499
|
-
|
|
12372
|
+
useEffect26(() => {
|
|
12500
12373
|
if (open && address) {
|
|
12501
12374
|
QRCode.toDataURL(address, {
|
|
12502
12375
|
width: 200,
|
|
@@ -12529,20 +12402,20 @@ function ReceiveLumiaMenu() {
|
|
|
12529
12402
|
className: "list-scrollbar-y w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]",
|
|
12530
12403
|
children: [
|
|
12531
12404
|
/* @__PURE__ */ jsxs58("div", { className: "w-full flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
12532
|
-
/* @__PURE__ */ jsx65(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx65(
|
|
12405
|
+
/* @__PURE__ */ jsx65(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx65(ArrowLeft13, { className: "h-4 w-4" }) }),
|
|
12533
12406
|
/* @__PURE__ */ jsx65("span", { className: "text-xl font-semibold", children: "Receive LUMIA" })
|
|
12534
12407
|
] }),
|
|
12535
12408
|
/* @__PURE__ */ jsxs58(Highlight, { className: "text-center", type: "warning", children: [
|
|
12536
12409
|
/* @__PURE__ */ jsx65("strong", { className: "block w-full", children: `Network: ${lumiaBeam.name}` }),
|
|
12537
12410
|
/* @__PURE__ */ jsx65("span", { className: "block w-full", children: "Ensure sender is on the same network" })
|
|
12538
12411
|
] }),
|
|
12539
|
-
/* @__PURE__ */ jsx65("div", { className: "flex items-center justify-center p-[var(--l-pass-pd)]", style: { minHeight: "216px" }, children: qrCodeUrl ? /* @__PURE__ */ jsx65("img", { src: qrCodeUrl, alt: "Wallet QR Code", className: "w-48 h-48" }) : /* @__PURE__ */ jsx65(
|
|
12412
|
+
/* @__PURE__ */ jsx65("div", { className: "flex items-center justify-center p-[var(--l-pass-pd)]", style: { minHeight: "216px" }, children: qrCodeUrl ? /* @__PURE__ */ jsx65("img", { src: qrCodeUrl, alt: "Wallet QR Code", className: "w-48 h-48" }) : /* @__PURE__ */ jsx65(Loader23, { className: "w-5 h-5 animate-spin text-[var(--l-pass-fg-muted)]" }) }),
|
|
12540
12413
|
/* @__PURE__ */ jsxs58(Highlight, { type: "info", children: [
|
|
12541
12414
|
/* @__PURE__ */ jsx65("span", { className: "block w-full text-center font-mono text-[10px] break-all mb-2", children: address }),
|
|
12542
|
-
/* @__PURE__ */ jsx65(Button, { onClick: handleCopy, className: "w-full", size: "large", children: copied ? /* @__PURE__ */ jsxs58(
|
|
12415
|
+
/* @__PURE__ */ jsx65(Button, { onClick: handleCopy, className: "w-full", size: "large", children: copied ? /* @__PURE__ */ jsxs58(Fragment25, { children: [
|
|
12543
12416
|
/* @__PURE__ */ jsx65(CheckCircle24, { className: "h-4 w-4" }),
|
|
12544
12417
|
/* @__PURE__ */ jsx65("span", { children: "Copied!" })
|
|
12545
|
-
] }) : /* @__PURE__ */ jsxs58(
|
|
12418
|
+
] }) : /* @__PURE__ */ jsxs58(Fragment25, { children: [
|
|
12546
12419
|
/* @__PURE__ */ jsx65(Copy2, { className: "h-4 w-4" }),
|
|
12547
12420
|
/* @__PURE__ */ jsx65("span", { children: "Copy Address" })
|
|
12548
12421
|
] }) })
|
|
@@ -12554,11 +12427,11 @@ function ReceiveLumiaMenu() {
|
|
|
12554
12427
|
}
|
|
12555
12428
|
|
|
12556
12429
|
// src/internal/components/SettingsMenu/SettingsMenu.tsx
|
|
12557
|
-
import { ArrowLeft as
|
|
12558
|
-
import { useEffect as
|
|
12430
|
+
import { ArrowLeft as ArrowLeft14 } from "lucide-react";
|
|
12431
|
+
import { useEffect as useEffect27 } from "react";
|
|
12559
12432
|
|
|
12560
12433
|
// src/internal/components/SettingsMenu/constants.ts
|
|
12561
|
-
import { ArrowLeftRight, AtSign as
|
|
12434
|
+
import { ArrowLeftRight, AtSign as AtSign2, DatabaseBackup, LockKeyhole, UsersRound } from "lucide-react";
|
|
12562
12435
|
|
|
12563
12436
|
// src/internal/assets/KycIcon.tsx
|
|
12564
12437
|
import { jsx as jsx66 } from "react/jsx-runtime";
|
|
@@ -12577,7 +12450,7 @@ function KycIcon(props) {
|
|
|
12577
12450
|
var NAV_BUTTONS = [
|
|
12578
12451
|
{ id: "transactions" /* TRANSACTIONS */, name: "Transactions", Icon: ArrowLeftRight },
|
|
12579
12452
|
{ id: "kyc" /* KYC */, name: "KYC", Icon: KycIcon },
|
|
12580
|
-
{ id: "nickname-settings" /* NICKNAME_SETTINGS */, name: "Nickname", Icon:
|
|
12453
|
+
{ id: "nickname-settings" /* NICKNAME_SETTINGS */, name: "Nickname", Icon: AtSign2 },
|
|
12581
12454
|
{ id: "manage-wallet" /* MANAGE_WALLET */, name: "Profiles", Icon: UsersRound },
|
|
12582
12455
|
{ id: "security" /* SECURITY */, name: "Security", Icon: LockKeyhole },
|
|
12583
12456
|
{ id: "keysare-backup" /* KEYSARE_BACKUP */, name: "Backup", Icon: DatabaseBackup }
|
|
@@ -12590,39 +12463,50 @@ function SettingsMenu() {
|
|
|
12590
12463
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
12591
12464
|
const settingsNotifications = useLayoutDataStore((st) => st.settingsNotifications);
|
|
12592
12465
|
const setMainPageHeight = useLayoutDataStore((st) => st.setMainPageHeight);
|
|
12593
|
-
|
|
12466
|
+
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
12467
|
+
useEffect27(() => setMainPageHeight(DEFAULT_SETTINGS_MENU_HEIGHT), [setMainPageHeight]);
|
|
12594
12468
|
useProvidersList();
|
|
12595
12469
|
const navItems = NAV_BUTTONS.map((el) => ({ ...el, onClick: () => setPage(el.id) }));
|
|
12596
12470
|
const highlightedKeys = settingsNotifications.map((n) => n.target);
|
|
12597
|
-
return /* @__PURE__ */ jsxs59(
|
|
12598
|
-
|
|
12599
|
-
|
|
12600
|
-
|
|
12601
|
-
|
|
12602
|
-
|
|
12603
|
-
Button,
|
|
12604
|
-
{
|
|
12605
|
-
variant: "outline",
|
|
12606
|
-
size: "large",
|
|
12607
|
-
onClick,
|
|
12608
|
-
disabled: !address,
|
|
12609
|
-
className: cn(
|
|
12610
|
-
//
|
|
12611
|
-
"w-full items-center justify-start",
|
|
12612
|
-
highlightedKeys.includes(id) && "animate-glow-warning"
|
|
12613
|
-
),
|
|
12614
|
-
children: [
|
|
12615
|
-
/* @__PURE__ */ jsx67(Icon2, { className: "w-4 h-4" }),
|
|
12616
|
-
/* @__PURE__ */ jsx67("span", { children: name })
|
|
12617
|
-
]
|
|
12471
|
+
return /* @__PURE__ */ jsxs59(
|
|
12472
|
+
"div",
|
|
12473
|
+
{
|
|
12474
|
+
style: {
|
|
12475
|
+
"--l-pass-scrollbar-mah": `${maxScrollHeight}px`,
|
|
12476
|
+
"--l-pass-list-scrollbar-pd-r": "var(--l-pass-pd)"
|
|
12618
12477
|
},
|
|
12619
|
-
|
|
12620
|
-
|
|
12621
|
-
|
|
12478
|
+
className: "list-scrollbar-y w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]",
|
|
12479
|
+
children: [
|
|
12480
|
+
/* @__PURE__ */ jsxs59("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
12481
|
+
/* @__PURE__ */ jsx67(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx67(ArrowLeft14, { className: "h-4 w-4" }) }),
|
|
12482
|
+
/* @__PURE__ */ jsx67("span", { className: "text-xl font-semibold", children: "Settings" })
|
|
12483
|
+
] }),
|
|
12484
|
+
/* @__PURE__ */ jsx67("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: navItems.map(({ id, name, Icon: Icon2, onClick }) => /* @__PURE__ */ jsxs59(
|
|
12485
|
+
Button,
|
|
12486
|
+
{
|
|
12487
|
+
variant: "outline",
|
|
12488
|
+
size: "large",
|
|
12489
|
+
onClick,
|
|
12490
|
+
disabled: !address,
|
|
12491
|
+
className: cn(
|
|
12492
|
+
//
|
|
12493
|
+
"w-full items-center justify-start",
|
|
12494
|
+
highlightedKeys.includes(id) && "animate-glow-warning"
|
|
12495
|
+
),
|
|
12496
|
+
children: [
|
|
12497
|
+
/* @__PURE__ */ jsx67(Icon2, { className: "w-4 h-4" }),
|
|
12498
|
+
/* @__PURE__ */ jsx67("span", { children: name })
|
|
12499
|
+
]
|
|
12500
|
+
},
|
|
12501
|
+
id
|
|
12502
|
+
)) })
|
|
12503
|
+
]
|
|
12504
|
+
}
|
|
12505
|
+
);
|
|
12622
12506
|
}
|
|
12623
12507
|
|
|
12624
12508
|
// src/internal/components/TermsOfService.tsx
|
|
12625
|
-
import { ArrowLeft as
|
|
12509
|
+
import { ArrowLeft as ArrowLeft15 } from "lucide-react";
|
|
12626
12510
|
import { jsx as jsx68, jsxs as jsxs60 } from "react/jsx-runtime";
|
|
12627
12511
|
function TermsOfService() {
|
|
12628
12512
|
const address = useLumiaPassportSession((st) => st.address);
|
|
@@ -12636,7 +12520,7 @@ function TermsOfService() {
|
|
|
12636
12520
|
size: "icon",
|
|
12637
12521
|
title: "Back",
|
|
12638
12522
|
onClick: () => setPage(!!address ? "settings" /* SETTINGS */ : "auth" /* AUTH */),
|
|
12639
|
-
children: /* @__PURE__ */ jsx68(
|
|
12523
|
+
children: /* @__PURE__ */ jsx68(ArrowLeft15, { className: "h-4 w-4" })
|
|
12640
12524
|
}
|
|
12641
12525
|
),
|
|
12642
12526
|
/* @__PURE__ */ jsx68("span", { className: "text-xl font-semibold", children: "Terms of Service" })
|
|
@@ -12649,8 +12533,8 @@ function TermsOfService() {
|
|
|
12649
12533
|
}
|
|
12650
12534
|
|
|
12651
12535
|
// src/internal/components/TransactionsMenu/TransactionsMenu.tsx
|
|
12652
|
-
import { useQuery as
|
|
12653
|
-
import { ArrowLeft as
|
|
12536
|
+
import { useQuery as useQuery17, useQueryClient as useQueryClient18 } from "@tanstack/react-query";
|
|
12537
|
+
import { ArrowLeft as ArrowLeft16, Loader as Loader24, RefreshCw as RefreshCw3, XCircle as XCircle2 } from "lucide-react";
|
|
12654
12538
|
import { useCallback as useCallback18, useState as useState20 } from "react";
|
|
12655
12539
|
|
|
12656
12540
|
// src/internal/components/TransactionsMenu/api.ts
|
|
@@ -12989,7 +12873,7 @@ var formatTimestamp = (timestampMs) => {
|
|
|
12989
12873
|
};
|
|
12990
12874
|
|
|
12991
12875
|
// src/internal/components/TransactionsMenu/TransactionsGroup.tsx
|
|
12992
|
-
import { Fragment as
|
|
12876
|
+
import { Fragment as Fragment26, jsx as jsx69, jsxs as jsxs61 } from "react/jsx-runtime";
|
|
12993
12877
|
function InternalTransaction({ internal, assetSymbol, assetDecimals }) {
|
|
12994
12878
|
const internalSymbol = internal.assetSymbol || assetSymbol;
|
|
12995
12879
|
const internalDecimals = internal.decimals ?? assetDecimals;
|
|
@@ -13066,7 +12950,7 @@ function TransactionsGroup(props) {
|
|
|
13066
12950
|
)
|
|
13067
12951
|
] })
|
|
13068
12952
|
] }),
|
|
13069
|
-
internalsToRender.length > 0 && /* @__PURE__ */ jsxs61(
|
|
12953
|
+
internalsToRender.length > 0 && /* @__PURE__ */ jsxs61(Fragment26, { children: [
|
|
13070
12954
|
/* @__PURE__ */ jsxs61("div", { className: "w-full flex items-center", children: [
|
|
13071
12955
|
/* @__PURE__ */ jsx69("div", { style: { borderTop: "1px solid var(--l-pass-bd)" }, className: "flex-1" }),
|
|
13072
12956
|
/* @__PURE__ */ jsx69("div", { className: "flex-none font-bold px-2 text-xs leading-4 text-[var(--l-pass-fg-muted)]", children: "Internals" }),
|
|
@@ -13116,7 +13000,7 @@ function TransactionsGroup(props) {
|
|
|
13116
13000
|
// src/internal/components/TransactionsMenu/TransactionsMenu.tsx
|
|
13117
13001
|
import { jsx as jsx70, jsxs as jsxs62 } from "react/jsx-runtime";
|
|
13118
13002
|
function TransactionsMenu() {
|
|
13119
|
-
const qc =
|
|
13003
|
+
const qc = useQueryClient18();
|
|
13120
13004
|
const address = useLumiaPassportSession((st) => st.address);
|
|
13121
13005
|
const page = useLayoutDataStore((st) => st.page);
|
|
13122
13006
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
@@ -13127,7 +13011,7 @@ function TransactionsMenu() {
|
|
|
13127
13011
|
isLoading: isTxHistoryLoading,
|
|
13128
13012
|
isFetching: isTxHistoryFetching,
|
|
13129
13013
|
error: txHistoryError
|
|
13130
|
-
} =
|
|
13014
|
+
} = useQuery17({
|
|
13131
13015
|
retry: false,
|
|
13132
13016
|
enabled: !!address && page === "transactions",
|
|
13133
13017
|
queryKey: [TRANSACTIONS_HISTORY_QUERY_KEY, address],
|
|
@@ -13143,12 +13027,12 @@ function TransactionsMenu() {
|
|
|
13143
13027
|
{
|
|
13144
13028
|
style: {
|
|
13145
13029
|
"--l-pass-scrollbar-mah": `${maxScrollHeight}px`,
|
|
13146
|
-
"--l-pass-list-scrollbar-pd-r": "
|
|
13030
|
+
"--l-pass-list-scrollbar-pd-r": "var(--l-pass-pd)"
|
|
13147
13031
|
},
|
|
13148
13032
|
className: "list-scrollbar-y w-full p-[var(--l-pass-pd)]",
|
|
13149
13033
|
children: /* @__PURE__ */ jsxs62(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: [
|
|
13150
13034
|
/* @__PURE__ */ jsxs62("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
13151
|
-
/* @__PURE__ */ jsx70(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("settings" /* SETTINGS */), children: /* @__PURE__ */ jsx70(
|
|
13035
|
+
/* @__PURE__ */ jsx70(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("settings" /* SETTINGS */), children: /* @__PURE__ */ jsx70(ArrowLeft16, { className: "h-4 w-4" }) }),
|
|
13152
13036
|
/* @__PURE__ */ jsx70("span", { className: "text-xl font-semibold", children: "Transaction History" }),
|
|
13153
13037
|
/* @__PURE__ */ jsx70(
|
|
13154
13038
|
Button,
|
|
@@ -13158,11 +13042,11 @@ function TransactionsMenu() {
|
|
|
13158
13042
|
onClick: refreshTxHistory,
|
|
13159
13043
|
disabled: isTxHistoryFetching,
|
|
13160
13044
|
title: "Refresh transactions",
|
|
13161
|
-
children: isTxHistoryFetching ? /* @__PURE__ */ jsx70(
|
|
13045
|
+
children: isTxHistoryFetching ? /* @__PURE__ */ jsx70(Loader24, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx70(RefreshCw3, { className: "h-4 w-4" })
|
|
13162
13046
|
}
|
|
13163
13047
|
)
|
|
13164
13048
|
] }),
|
|
13165
|
-
isTxHistoryLoading && /* @__PURE__ */ jsx70("div", { className: "flex items-center justify-center p-8", children: /* @__PURE__ */ jsx70(
|
|
13049
|
+
isTxHistoryLoading && /* @__PURE__ */ jsx70("div", { className: "flex items-center justify-center p-8", children: /* @__PURE__ */ jsx70(Loader24, { className: "h-5 w-5 animate-spin" }) }),
|
|
13166
13050
|
!isTxHistoryLoading && txHistoryResolvedError && /* @__PURE__ */ jsxs62(Highlight, { type: "error", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
13167
13051
|
/* @__PURE__ */ jsx70(XCircle2, { className: "w-4 h-4 flex-none" }),
|
|
13168
13052
|
/* @__PURE__ */ jsx70("span", { className: "block w-full flex-1 text-center text-xs", children: txHistoryResolvedError })
|
|
@@ -13287,8 +13171,6 @@ import { jsx as jsx71 } from "react/jsx-runtime";
|
|
|
13287
13171
|
var CLEAR_DIALOG_TIMEOUT = MAIN_DIALOG_ANIMATION_SPEED + 5;
|
|
13288
13172
|
function usePageMapper() {
|
|
13289
13173
|
const page = useLayoutDataStore((st) => st.page);
|
|
13290
|
-
const session = useLumiaPassportSession((st) => st.session);
|
|
13291
|
-
const protectedRoutes = !!session ? PAGE_MAP : PAGE_MAP;
|
|
13292
13174
|
const {
|
|
13293
13175
|
setDialogTitle,
|
|
13294
13176
|
setDialogDescription,
|
|
@@ -13318,21 +13200,21 @@ function usePageMapper() {
|
|
|
13318
13200
|
},
|
|
13319
13201
|
[setDialogContent, setDialogDescription, setDialogTitle, setIsDialogOpen]
|
|
13320
13202
|
);
|
|
13321
|
-
|
|
13203
|
+
useEffect28(() => {
|
|
13322
13204
|
if (page === null) return closeDialog();
|
|
13323
|
-
const pageItem =
|
|
13205
|
+
const pageItem = PAGE_MAP[page];
|
|
13324
13206
|
if (!pageItem) {
|
|
13325
13207
|
alert(`[PASSPORT MAPPER]: Requested page "${page}" is not existing or not allowed. Closing dialog...`);
|
|
13326
13208
|
closeDialog();
|
|
13327
13209
|
return;
|
|
13328
13210
|
}
|
|
13329
13211
|
openDialog(pageItem);
|
|
13330
|
-
}, [
|
|
13212
|
+
}, [page, closeDialog, openDialog]);
|
|
13331
13213
|
}
|
|
13332
13214
|
|
|
13333
13215
|
// src/internal/hooks/useSettingsNotifications.ts
|
|
13334
13216
|
init_auth();
|
|
13335
|
-
import { useEffect as
|
|
13217
|
+
import { useEffect as useEffect29 } from "react";
|
|
13336
13218
|
var EMAIL_NOT_CONNECTED_NOTIFICATION = {
|
|
13337
13219
|
id: "email-not-connected",
|
|
13338
13220
|
target: "manage-wallet" /* MANAGE_WALLET */,
|
|
@@ -13342,7 +13224,7 @@ function useSettingsNotifications() {
|
|
|
13342
13224
|
const setSettingsNotifications = useLayoutDataStore((st) => st.setSettingsNotifications);
|
|
13343
13225
|
const providers = jwtTokenManager2.getProviders();
|
|
13344
13226
|
const hasEmail = providers.includes("email");
|
|
13345
|
-
|
|
13227
|
+
useEffect29(() => {
|
|
13346
13228
|
setSettingsNotifications({
|
|
13347
13229
|
...EMAIL_NOT_CONNECTED_NOTIFICATION,
|
|
13348
13230
|
status: hasEmail ? "resolved" : "active"
|
|
@@ -13351,7 +13233,7 @@ function useSettingsNotifications() {
|
|
|
13351
13233
|
}
|
|
13352
13234
|
|
|
13353
13235
|
// src/internal/hooks/useWalletStatus.ts
|
|
13354
|
-
import { useEffect as
|
|
13236
|
+
import { useEffect as useEffect30 } from "react";
|
|
13355
13237
|
init_auth();
|
|
13356
13238
|
function useWalletStatus() {
|
|
13357
13239
|
const isIframeReady = useLumiaPassportSession((st) => st.isIframeReady);
|
|
@@ -13361,7 +13243,7 @@ function useWalletStatus() {
|
|
|
13361
13243
|
config: { current: config },
|
|
13362
13244
|
callbacks
|
|
13363
13245
|
} = useLumiaPassportConfig();
|
|
13364
|
-
|
|
13246
|
+
useEffect30(() => {
|
|
13365
13247
|
if (!isIframeReady || !config.projectId || !callbacks?.onWalletReady) return;
|
|
13366
13248
|
const userId = jwtTokenManager2.getUserId();
|
|
13367
13249
|
const hasKeyshare = jwtTokenManager2.getHasKeyshare();
|
|
@@ -13391,15 +13273,13 @@ function LumiaPassportDialog() {
|
|
|
13391
13273
|
const mainPageHeight = useLayoutDataStore((st) => st.mainPageHeight);
|
|
13392
13274
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
13393
13275
|
const { colorMode, isDialogOpen, dialogTitle, dialogDescription, dialogContent, isDialogForced, setIsSettings } = useLayoutStore();
|
|
13394
|
-
|
|
13276
|
+
useEffect31(() => setIsSettings(!!session), [session, setIsSettings]);
|
|
13395
13277
|
usePageMapper();
|
|
13396
13278
|
useAutoConnect();
|
|
13397
|
-
useCheckVaultStatus();
|
|
13398
13279
|
useBackupStatusChanges();
|
|
13399
13280
|
useDetectMaxScrollHeight();
|
|
13400
13281
|
useSettingsNotifications();
|
|
13401
13282
|
useListenIframeAuthEvents();
|
|
13402
|
-
useBackupWarning();
|
|
13403
13283
|
useWalletStatus();
|
|
13404
13284
|
const isHeaderHidden = !session || page === "keysare-backup" /* KEYSARE_BACKUP */ && !hasServerVault;
|
|
13405
13285
|
return /* @__PURE__ */ jsx72(
|
|
@@ -13477,11 +13357,11 @@ var TssManagerWithRef = React8.forwardRef((props, ref) => {
|
|
|
13477
13357
|
// src/internal/components/WalletConnectHandler.tsx
|
|
13478
13358
|
init_wallet();
|
|
13479
13359
|
import { useConnectModal } from "@rainbow-me/rainbowkit";
|
|
13480
|
-
import { useMutation as
|
|
13481
|
-
import React9, { useCallback as useCallback21, useEffect as
|
|
13360
|
+
import { useMutation as useMutation15, useQueryClient as useQueryClient19 } from "@tanstack/react-query";
|
|
13361
|
+
import React9, { useCallback as useCallback21, useEffect as useEffect32 } from "react";
|
|
13482
13362
|
import { useAccount, useDisconnect, useSignMessage } from "wagmi";
|
|
13483
13363
|
function WalletConnectHandler() {
|
|
13484
|
-
const qc =
|
|
13364
|
+
const qc = useQueryClient19();
|
|
13485
13365
|
const callbacks = useLumiaPassportConfig().callbacks;
|
|
13486
13366
|
const passportWalletAddress = useLumiaPassportSession((st) => st.address);
|
|
13487
13367
|
const { address: walletAddress, isConnected, chain, connector } = useAccount();
|
|
@@ -13523,7 +13403,7 @@ function WalletConnectHandler() {
|
|
|
13523
13403
|
[qc, passportWalletAddress, callbacks, setProviderType, setPage, setIsWalletLinking]
|
|
13524
13404
|
);
|
|
13525
13405
|
const [hasStartedLinking, setHasStartedLinking] = React9.useState(false);
|
|
13526
|
-
|
|
13406
|
+
useEffect32(() => {
|
|
13527
13407
|
if (isWalletLinking && !hasStartedLinking) {
|
|
13528
13408
|
setHasStartedLinking(true);
|
|
13529
13409
|
setProviderType(null);
|
|
@@ -13543,14 +13423,14 @@ function WalletConnectHandler() {
|
|
|
13543
13423
|
if (isConnected) disconnect();
|
|
13544
13424
|
}
|
|
13545
13425
|
}, [isWalletLinking, hasStartedLinking, isConnected, openConnectModal, disconnect, setPage, setProviderType]);
|
|
13546
|
-
|
|
13426
|
+
useEffect32(() => {
|
|
13547
13427
|
if (hasStartedLinking && !connectModalOpen && !isConnected && isWalletLinking) {
|
|
13548
13428
|
console.log("[WalletConnectHandler] Modal closed without connecting");
|
|
13549
13429
|
onLinkingComplete(false);
|
|
13550
13430
|
setHasStartedLinking(false);
|
|
13551
13431
|
}
|
|
13552
13432
|
}, [connectModalOpen, hasStartedLinking, isConnected, isWalletLinking]);
|
|
13553
|
-
const { mutate: handleWalletSign, isPending: isWalletSigning } =
|
|
13433
|
+
const { mutate: handleWalletSign, isPending: isWalletSigning } = useMutation15({
|
|
13554
13434
|
mutationFn: async (payload) => {
|
|
13555
13435
|
const { chainId, signingWalletAddress } = payload;
|
|
13556
13436
|
if (!signingWalletAddress || !chainId) {
|
|
@@ -13619,7 +13499,7 @@ function WalletConnectHandler() {
|
|
|
13619
13499
|
setPage(passportWalletAddress ? "manage-wallet" /* MANAGE_WALLET */ : "auth" /* AUTH */);
|
|
13620
13500
|
}
|
|
13621
13501
|
});
|
|
13622
|
-
|
|
13502
|
+
useEffect32(() => {
|
|
13623
13503
|
if (!!chain?.id && isConnected && walletAddress && isWalletLinking && hasStartedLinking) {
|
|
13624
13504
|
console.log("[WalletConnectHandler] handleWalletSign triggered");
|
|
13625
13505
|
handleWalletSign({ chainId: chain.id, signingWalletAddress: walletAddress });
|
|
@@ -13655,7 +13535,7 @@ var useLumiaPassportSession = create6((set) => ({
|
|
|
13655
13535
|
}));
|
|
13656
13536
|
function LumiaPassportSessionProvider({ children }) {
|
|
13657
13537
|
const config = useLumiaPassportConfig().config;
|
|
13658
|
-
return /* @__PURE__ */ jsxs64(
|
|
13538
|
+
return /* @__PURE__ */ jsxs64(Fragment27, { children: [
|
|
13659
13539
|
children,
|
|
13660
13540
|
config.current?.wallet?.enabled && /* @__PURE__ */ jsx73(WalletConnectHandler, {}),
|
|
13661
13541
|
/* @__PURE__ */ jsx73(BalanceFeedProvider, {}),
|
|
@@ -13712,8 +13592,8 @@ function LumiaPassportProvider(props) {
|
|
|
13712
13592
|
const { children, projectId, initialConfig = {}, callbacks } = props;
|
|
13713
13593
|
const setIsIframeReady = useLumiaPassportSession((st) => st.setIsIframeReady);
|
|
13714
13594
|
const setWalletReadyStatus = useLumiaPassportSession((st) => st.setWalletReadyStatus);
|
|
13715
|
-
|
|
13716
|
-
const config =
|
|
13595
|
+
useEffect33(() => notifyNoProjetctId(projectId), [projectId]);
|
|
13596
|
+
const config = useRef13({ projectId, ...DEFAULT_LUMIA_PASSPORT_CONFIG });
|
|
13717
13597
|
const updateConfig = useCallback22((updates) => {
|
|
13718
13598
|
const prev = config.current;
|
|
13719
13599
|
const next = { ...prev };
|
|
@@ -13749,7 +13629,7 @@ function LumiaPassportProvider(props) {
|
|
|
13749
13629
|
}
|
|
13750
13630
|
config.current = next;
|
|
13751
13631
|
}, []);
|
|
13752
|
-
|
|
13632
|
+
useEffect33(() => {
|
|
13753
13633
|
if (typeof window === "undefined" || !projectId) return;
|
|
13754
13634
|
const mergedConfig = merge2(DEFAULT_LUMIA_PASSPORT_CONFIG, initialConfig);
|
|
13755
13635
|
updateConfig(mergedConfig);
|
|
@@ -13804,10 +13684,12 @@ var useLumiaPassportConfig = () => {
|
|
|
13804
13684
|
};
|
|
13805
13685
|
|
|
13806
13686
|
// src/components/ConnectWalletButton.tsx
|
|
13807
|
-
import {
|
|
13808
|
-
import {
|
|
13687
|
+
import { useQuery as useQuery18 } from "@tanstack/react-query";
|
|
13688
|
+
import { Cloud as Cloud5, Laptop as Laptop2, Loader as Loader25, Shield as Shield2 } from "lucide-react";
|
|
13689
|
+
import { useEffect as useEffect34, useMemo as useMemo6 } from "react";
|
|
13809
13690
|
init_auth();
|
|
13810
|
-
|
|
13691
|
+
init_profile();
|
|
13692
|
+
import { Fragment as Fragment28, jsx as jsx76, jsxs as jsxs65 } from "react/jsx-runtime";
|
|
13811
13693
|
function getFormattedStatus(label, status, showStatus) {
|
|
13812
13694
|
const isStatus = showStatus && status && status !== "idle" && status !== "ready";
|
|
13813
13695
|
if (!isStatus) return label;
|
|
@@ -13826,9 +13708,15 @@ function ConnectWalletButton(props) {
|
|
|
13826
13708
|
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
13827
13709
|
const { session, address, hasServerVault, isLoading, isIframeReady, status, setUsePaymaster } = useLumiaPassportSession();
|
|
13828
13710
|
const connectButtonLabel = getFormattedStatus(label || "Connect", status, isIframeReady);
|
|
13829
|
-
|
|
13711
|
+
useEffect34(() => setUsePaymaster(usePaymaster), [setUsePaymaster, usePaymaster]);
|
|
13712
|
+
const { data: profile, isLoading: isProfileLoading } = useQuery18({
|
|
13713
|
+
retry: false,
|
|
13714
|
+
enabled: !!address,
|
|
13715
|
+
queryKey: [QUERY_KEYS.userProfile, address],
|
|
13716
|
+
queryFn: getUserProfile
|
|
13717
|
+
});
|
|
13830
13718
|
const avatar = jwtTokenManager2.getAvatar();
|
|
13831
|
-
const displayName = jwtTokenManager2.getDisplayName();
|
|
13719
|
+
const displayName = profile?.nicknameDisplay || profile?.displayName || jwtTokenManager2.getDisplayName();
|
|
13832
13720
|
const indicators = useMemo6(() => {
|
|
13833
13721
|
const userId = jwtTokenManager2.getUserId();
|
|
13834
13722
|
if (!userId) return { server: false, local: false, backup: false };
|
|
@@ -13839,14 +13727,14 @@ function ConnectWalletButton(props) {
|
|
|
13839
13727
|
const isConnecting = connectButtonLabel !== label || isLoading;
|
|
13840
13728
|
return /* @__PURE__ */ jsx76("div", { "data-lumia-passport-mode": colorMode, className: cn("lumia-scope w-fit h-fit", className), children: !address ? (
|
|
13841
13729
|
/** external Buttons can be provided */
|
|
13842
|
-
/* @__PURE__ */ jsx76(
|
|
13730
|
+
/* @__PURE__ */ jsx76(Fragment28, { children: ConnectButton ? /* @__PURE__ */ jsxs65(
|
|
13843
13731
|
ConnectButton,
|
|
13844
13732
|
{
|
|
13845
13733
|
type: "button",
|
|
13846
13734
|
disabled: isConnecting,
|
|
13847
13735
|
onClick: () => setPage("auth" /* AUTH */),
|
|
13848
13736
|
children: [
|
|
13849
|
-
isConnecting && /* @__PURE__ */ jsx76(
|
|
13737
|
+
isConnecting && /* @__PURE__ */ jsx76(Loader25, { className: "w-4 h-4 animate-spin" }),
|
|
13850
13738
|
connectButtonLabel
|
|
13851
13739
|
]
|
|
13852
13740
|
}
|
|
@@ -13867,7 +13755,7 @@ function ConnectWalletButton(props) {
|
|
|
13867
13755
|
"disabled:hover:bg-[var(--l-pass-bg)] disabled:active:bg-[var(--l-pass-bg)]"
|
|
13868
13756
|
),
|
|
13869
13757
|
children: [
|
|
13870
|
-
isConnecting && /* @__PURE__ */ jsx76(
|
|
13758
|
+
isConnecting && /* @__PURE__ */ jsx76(Loader25, { className: "w-4 h-4 animate-spin" }),
|
|
13871
13759
|
connectButtonLabel.toUpperCase()
|
|
13872
13760
|
]
|
|
13873
13761
|
}
|
|
@@ -13888,7 +13776,7 @@ function ConnectWalletButton(props) {
|
|
|
13888
13776
|
/* @__PURE__ */ jsx76("div", { className: "w-12 h-12 rounded-full bg-[var(--l-pass-fg)] flex items-center justify-center flex-shrink-0", children: avatar ? /* @__PURE__ */ jsx76("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" }) : /* @__PURE__ */ jsx76(LumiaIcon, { width: 48, height: 48 }) }),
|
|
13889
13777
|
/* @__PURE__ */ jsxs65("div", { className: "text-left flex-1 min-w-0 text-[var(--l-pass-fg)]", children: [
|
|
13890
13778
|
/* @__PURE__ */ jsxs65("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
13891
|
-
/* @__PURE__ */ jsx76("span", { className: "w-fit text-[14px] leading-4 truncate max-w-[144px] text-[var(--l-pass-fg)]", children: displayName }),
|
|
13779
|
+
isProfileLoading ? /* @__PURE__ */ jsx76(Loader25, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ jsx76("span", { className: "w-fit text-[14px] leading-4 truncate max-w-[144px] text-[var(--l-pass-fg)]", children: displayName }),
|
|
13892
13780
|
/* @__PURE__ */ jsx76(KYCStatus, {})
|
|
13893
13781
|
] }),
|
|
13894
13782
|
/* @__PURE__ */ jsx76(BalanceView, {})
|
|
@@ -14022,7 +13910,7 @@ function useLumiaPassportOpen() {
|
|
|
14022
13910
|
}
|
|
14023
13911
|
|
|
14024
13912
|
// src/hooks/useLumiaPassportColorMode.ts
|
|
14025
|
-
import { useCallback as useCallback24, useEffect as
|
|
13913
|
+
import { useCallback as useCallback24, useEffect as useEffect35 } from "react";
|
|
14026
13914
|
function useLumiaPassportColorMode() {
|
|
14027
13915
|
const {
|
|
14028
13916
|
config: { current: config }
|
|
@@ -14037,7 +13925,7 @@ function useLumiaPassportColorMode() {
|
|
|
14037
13925
|
},
|
|
14038
13926
|
[handleStoreColorMode]
|
|
14039
13927
|
);
|
|
14040
|
-
|
|
13928
|
+
useEffect35(() => {
|
|
14041
13929
|
let targetColorMode = localStorage.getItem(LOCAL_COLOR_MODE_KEY);
|
|
14042
13930
|
if (!targetColorMode && !preferedColorMode) {
|
|
14043
13931
|
const systemMode = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
@@ -14308,7 +14196,7 @@ var rainbowTheme = {
|
|
|
14308
14196
|
|
|
14309
14197
|
// src/context/RainbowKitContext.tsx
|
|
14310
14198
|
import "@rainbow-me/rainbowkit/styles.css";
|
|
14311
|
-
import { Fragment as
|
|
14199
|
+
import { Fragment as Fragment29, jsx as jsx78 } from "react/jsx-runtime";
|
|
14312
14200
|
function LumiaRainbowKitProvider({ children }) {
|
|
14313
14201
|
const config = useLumiaPassportConfig().config;
|
|
14314
14202
|
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
@@ -14327,7 +14215,7 @@ function LumiaRainbowKitProvider({ children }) {
|
|
|
14327
14215
|
},
|
|
14328
14216
|
[colorMode]
|
|
14329
14217
|
);
|
|
14330
|
-
if (!config.current?.wallet?.enabled) return /* @__PURE__ */ jsx78(
|
|
14218
|
+
if (!config.current?.wallet?.enabled) return /* @__PURE__ */ jsx78(Fragment29, { children });
|
|
14331
14219
|
return /* @__PURE__ */ jsx78(WagmiProvider2, { config: rainbowConfig2, children: /* @__PURE__ */ jsx78(RainbowKitProvider, { theme: customTheme, modalSize: "compact", showRecentTransactions: true, children }) });
|
|
14332
14220
|
}
|
|
14333
14221
|
|
|
@@ -14766,13 +14654,13 @@ var Hash = ({
|
|
|
14766
14654
|
|
|
14767
14655
|
// src/internal/components/TransactionsMenu/TransactionsList.tsx
|
|
14768
14656
|
init_base();
|
|
14769
|
-
import { useEffect as
|
|
14657
|
+
import { useEffect as useEffect37, useState as useState24 } from "react";
|
|
14770
14658
|
import { jsx as jsx83, jsxs as jsxs69 } from "react/jsx-runtime";
|
|
14771
14659
|
var TransactionsList = ({ address, itemsCount = 10 }) => {
|
|
14772
14660
|
const [transactions, setTransactions] = useState24([]);
|
|
14773
14661
|
const [loading, setLoading] = useState24(true);
|
|
14774
14662
|
const [error, setError] = useState24(null);
|
|
14775
|
-
|
|
14663
|
+
useEffect37(() => {
|
|
14776
14664
|
const fetchTransactions = async () => {
|
|
14777
14665
|
try {
|
|
14778
14666
|
setLoading(true);
|