@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.cjs
CHANGED
|
@@ -4529,17 +4529,17 @@ __export(index_exports, {
|
|
|
4529
4529
|
module.exports = __toCommonJS(index_exports);
|
|
4530
4530
|
|
|
4531
4531
|
// src/styles/built.css
|
|
4532
|
-
var built_default = '.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\\201C""\\201D""\\2018""\\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgba(17,24,39,.1);--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:hsla(0,0%,100%,.1);--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.lumia-scope .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.lumia-scope .pointer-events-none{pointer-events:none}.lumia-scope .pointer-events-auto{pointer-events:auto}.lumia-scope .visible{visibility:visible}.lumia-scope .invisible{visibility:hidden}.lumia-scope .collapse{visibility:collapse}.lumia-scope .static{position:static}.lumia-scope .fixed{position:fixed}.lumia-scope .absolute{position:absolute}.lumia-scope .relative{position:relative}.lumia-scope .inset-0{inset:0}.lumia-scope .inset-y-0{top:0;bottom:0}.lumia-scope .-bottom-1{bottom:-.25rem}.lumia-scope .-right-1{right:-.25rem}.lumia-scope .-right-2{right:-.5rem}.lumia-scope .-top-1{top:-.25rem}.lumia-scope .-top-2{top:-.5rem}.lumia-scope .-top-3{top:-.75rem}.lumia-scope .bottom-full{bottom:100%}.lumia-scope .left-0{left:0}.lumia-scope .left-1{left:.25rem}.lumia-scope .left-1\\/2{left:50%}.lumia-scope .left-3{left:.75rem}.lumia-scope .left-4{left:1rem}.lumia-scope .right-0{right:0}.lumia-scope .right-2{right:.5rem}.lumia-scope .right-3{right:.75rem}.lumia-scope .right-4{right:1rem}.lumia-scope .right-\\[var\\(--l-pass-pd\\)\\]{right:var(--l-pass-pd)}.lumia-scope .right-full{right:100%}.lumia-scope .top-0{top:0}.lumia-scope .top-1{top:.25rem}.lumia-scope .top-1\\/2{top:50%}.lumia-scope .top-3{top:.75rem}.lumia-scope .top-4{top:1rem}.lumia-scope .top-\\[var\\(--l-pass-pd\\)\\]{top:var(--l-pass-pd)}.lumia-scope .top-full{top:100%}.lumia-scope .z-10{z-index:10}.lumia-scope .z-50{z-index:50}.lumia-scope .z-\\[9998\\]{z-index:9998}.lumia-scope .z-\\[9999\\]{z-index:9999}.lumia-scope .-m-px{margin:-1px}.lumia-scope .m-0{margin:0}.lumia-scope .m-4{margin:1rem}.lumia-scope .-mx-1{margin-left:-.25rem;margin-right:-.25rem}.lumia-scope .-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.lumia-scope .mx-1{margin-left:.25rem;margin-right:.25rem}.lumia-scope .mx-auto{margin-left:auto;margin-right:auto}.lumia-scope .my-1{margin-top:.25rem;margin-bottom:.25rem}.lumia-scope .my-6{margin-top:1.5rem;margin-bottom:1.5rem}.lumia-scope .my-auto{margin-top:auto;margin-bottom:auto}.lumia-scope .-mt-5{margin-top:-1.25rem}.lumia-scope .mb-1{margin-bottom:.25rem}.lumia-scope .mb-2{margin-bottom:.5rem}.lumia-scope .mb-3{margin-bottom:.75rem}.lumia-scope .mb-4{margin-bottom:1rem}.lumia-scope .mb-6{margin-bottom:1.5rem}.lumia-scope .mb-8{margin-bottom:2rem}.lumia-scope .ml-1{margin-left:.25rem}.lumia-scope .ml-2{margin-left:.5rem}.lumia-scope .ml-3{margin-left:.75rem}.lumia-scope .ml-4{margin-left:1rem}.lumia-scope .ml-auto{margin-left:auto}.lumia-scope .mr-1{margin-right:.25rem}.lumia-scope .mr-2{margin-right:.5rem}.lumia-scope .mr-4{margin-right:1rem}.lumia-scope .mt-0{margin-top:0}.lumia-scope .mt-1{margin-top:.25rem}.lumia-scope .mt-2{margin-top:.5rem}.lumia-scope .mt-3{margin-top:.75rem}.lumia-scope .mt-4{margin-top:1rem}.lumia-scope .mt-6{margin-top:1.5rem}.lumia-scope .mt-\\[var\\(--l-pass-gap\\)\\]{margin-top:var(--l-pass-gap)}.lumia-scope .block{display:block}.lumia-scope .inline-block{display:inline-block}.lumia-scope .inline{display:inline}.lumia-scope .flex{display:flex}.lumia-scope .inline-flex{display:inline-flex}.lumia-scope .table{display:table}.lumia-scope .grid{display:grid}.lumia-scope .contents{display:contents}.lumia-scope .hidden{display:none}.lumia-scope .aspect-square{aspect-ratio:1/1}.lumia-scope .size-3{width:.75rem;height:.75rem}.lumia-scope .size-3\\.5{width:.875rem;height:.875rem}.lumia-scope .size-4{width:1rem;height:1rem}.lumia-scope .size-5{width:1.25rem;height:1.25rem}.lumia-scope .h-10{height:2.5rem}.lumia-scope .h-11{height:2.75rem}.lumia-scope .h-12{height:3rem}.lumia-scope .h-14{height:3.5rem}.lumia-scope .h-16{height:4rem}.lumia-scope .h-2{height:.5rem}.lumia-scope .h-2\\.5{height:.625rem}.lumia-scope .h-20{height:5rem}.lumia-scope .h-3{height:.75rem}.lumia-scope .h-3\\.5{height:.875rem}.lumia-scope .h-4{height:1rem}.lumia-scope .h-48{height:12rem}.lumia-scope .h-5{height:1.25rem}.lumia-scope .h-6{height:1.5rem}.lumia-scope .h-7{height:1.75rem}.lumia-scope .h-8{height:2rem}.lumia-scope .h-9{height:2.25rem}.lumia-scope .h-\\[100dvh\\]{height:100dvh}.lumia-scope .h-\\[48px\\]{height:48px}.lumia-scope .h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.lumia-scope .h-fit{height:-moz-fit-content;height:fit-content}.lumia-scope .h-full{height:100%}.lumia-scope .h-px{height:1px}.lumia-scope .max-h-24{max-height:6rem}.lumia-scope .max-h-96{max-height:24rem}.lumia-scope .max-h-\\[95dvh\\]{max-height:95dvh}.lumia-scope .w-10{width:2.5rem}.lumia-scope .w-12{width:3rem}.lumia-scope .w-16{width:4rem}.lumia-scope .w-2{width:.5rem}.lumia-scope .w-2\\.5{width:.625rem}.lumia-scope .w-20{width:5rem}.lumia-scope .w-3{width:.75rem}.lumia-scope .w-3\\.5{width:.875rem}.lumia-scope .w-4{width:1rem}.lumia-scope .w-48{width:12rem}.lumia-scope .w-5{width:1.25rem}.lumia-scope .w-6{width:1.5rem}.lumia-scope .w-8{width:2rem}.lumia-scope .w-9{width:2.25rem}.lumia-scope .w-\\[100dvw\\]{width:100dvw}.lumia-scope .w-\\[40px\\]{width:40px}.lumia-scope .w-\\[var\\(--l-pass-maw\\)\\]{width:var(--l-pass-maw)}.lumia-scope .w-fit{width:-moz-fit-content;width:fit-content}.lumia-scope .w-full{width:100%}.lumia-scope .w-px{width:1px}.lumia-scope .min-w-0{min-width:0}.lumia-scope .min-w-16{min-width:4rem}.lumia-scope .min-w-24{min-width:6rem}.lumia-scope .min-w-32{min-width:8rem}.lumia-scope .min-w-5{min-width:1.25rem}.lumia-scope .min-w-\\[256px\\]{min-width:256px}.lumia-scope .min-w-\\[8rem\\]{min-width:8rem}.lumia-scope .min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.lumia-scope .max-w-2xl{max-width:42rem}.lumia-scope .max-w-\\[144px\\]{max-width:144px}.lumia-scope .max-w-\\[150px\\]{max-width:150px}.lumia-scope .max-w-\\[160px\\]{max-width:160px}.lumia-scope .max-w-\\[680px\\]{max-width:680px}.lumia-scope .max-w-full{max-width:100%}.lumia-scope .max-w-lg{max-width:32rem}.lumia-scope .max-w-md{max-width:28rem}.lumia-scope .max-w-sm{max-width:24rem}.lumia-scope .flex-1{flex:1 1 0%}.lumia-scope .flex-none{flex:none}.lumia-scope .flex-shrink{flex-shrink:1}.lumia-scope .flex-shrink-0,.lumia-scope .shrink-0{flex-shrink:0}.lumia-scope .border-collapse{border-collapse:collapse}.lumia-scope .-translate-x-1{--tw-translate-x:-0.25rem}.lumia-scope .-translate-x-1,.lumia-scope .-translate-x-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .-translate-x-1\\/2{--tw-translate-x:-50%}.lumia-scope .-translate-x-\\[var\\(--l-pass-gap\\)\\]{--tw-translate-x:calc(var(--l-pass-gap)*-1)}.lumia-scope .-translate-x-\\[var\\(--l-pass-gap\\)\\],.lumia-scope .-translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .-translate-y-1{--tw-translate-y:-0.25rem}.lumia-scope .-translate-y-1\\/2{--tw-translate-y:-50%}.lumia-scope .-translate-y-1\\/2,.lumia-scope .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes glow-warning{0%,to{transform:scale(1);box-shadow:0 0 16px var(--l-pass-bg-warning)}50%{transform:scale(.97);box-shadow:0 0 4px var(--l-pass-bg-warning)}}.lumia-scope .animate-glow-warning{animation:glow-warning 2s ease infinite}@keyframes pulse-warning{0%,to{opacity:1}50%{opacity:.6}}.lumia-scope .animate-pulse-warning{animation:pulse-warning 2s ease infinite}@keyframes spin{to{transform:rotate(1turn)}}.lumia-scope .animate-spin{animation:spin 1s linear infinite}.lumia-scope .cursor-default{cursor:default}.lumia-scope .cursor-not-allowed{cursor:not-allowed}.lumia-scope .cursor-pointer{cursor:pointer}.lumia-scope .cursor-text{cursor:text}.lumia-scope .select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.lumia-scope .select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.lumia-scope .resize{resize:both}.lumia-scope .scroll-my-1{scroll-margin-top:.25rem;scroll-margin-bottom:.25rem}.lumia-scope .list-inside{list-style-position:inside}.lumia-scope .list-disc{list-style-type:disc}.lumia-scope .appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.lumia-scope .grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lumia-scope .grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lumia-scope .grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lumia-scope .grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lumia-scope .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lumia-scope .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lumia-scope .grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lumia-scope .grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lumia-scope .grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lumia-scope .grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lumia-scope .grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lumia-scope .flex-row{flex-direction:row}.lumia-scope .flex-col{flex-direction:column}.lumia-scope .flex-col-reverse{flex-direction:column-reverse}.lumia-scope .flex-wrap{flex-wrap:wrap}.lumia-scope .place-content-center{place-content:center}.lumia-scope .items-start{align-items:flex-start}.lumia-scope .items-end{align-items:flex-end}.lumia-scope .items-center{align-items:center}.lumia-scope .justify-start{justify-content:flex-start}.lumia-scope .justify-end{justify-content:flex-end}.lumia-scope .justify-center{justify-content:center}.lumia-scope .justify-between{justify-content:space-between}.lumia-scope .justify-evenly{justify-content:space-evenly}.lumia-scope .gap-0{gap:0}.lumia-scope .gap-0\\.5{gap:.125rem}.lumia-scope .gap-1{gap:.25rem}.lumia-scope .gap-1\\.5{gap:.375rem}.lumia-scope .gap-2{gap:.5rem}.lumia-scope .gap-3{gap:.75rem}.lumia-scope .gap-4{gap:1rem}.lumia-scope .gap-\\[10px\\]{gap:10px}.lumia-scope .gap-\\[var\\(--l-pass-gap\\)\\]{gap:var(--l-pass-gap)}.lumia-scope :is(.space-x-1>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-3>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.75rem*var(--tw-space-x-reverse));margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-4>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-y-0>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-0\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-3>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-4>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-6>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.lumia-scope .overflow-auto{overflow:auto}.lumia-scope .overflow-hidden{overflow:hidden}.lumia-scope .overflow-visible{overflow:visible}.lumia-scope .overflow-y-auto{overflow-y:auto}.lumia-scope .overflow-x-hidden{overflow-x:hidden}.lumia-scope .overflow-y-hidden{overflow-y:hidden}.lumia-scope .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lumia-scope .text-ellipsis{text-overflow:ellipsis}.lumia-scope .whitespace-nowrap{white-space:nowrap}.lumia-scope .whitespace-pre-line{white-space:pre-line}.lumia-scope .whitespace-pre-wrap{white-space:pre-wrap}.lumia-scope .break-normal{overflow-wrap:normal;word-break:normal}.lumia-scope .break-words{overflow-wrap:break-word}.lumia-scope .break-all{word-break:break-all}.lumia-scope .rounded{border-radius:.25rem}.lumia-scope .rounded-2xl{border-radius:1rem}.lumia-scope .rounded-3xl{border-radius:1.5rem}.lumia-scope .rounded-\\[10px\\]{border-radius:10px}.lumia-scope .rounded-\\[5px\\]{border-radius:5px}.lumia-scope .rounded-\\[var\\(--l-pass-bdrs\\)\\]{border-radius:var(--l-pass-bdrs)}.lumia-scope .rounded-\\[var\\(--l-pass-el-bdrs\\)\\]{border-radius:var(--l-pass-el-bdrs)}.lumia-scope .rounded-full{border-radius:9999px}.lumia-scope .rounded-lg{border-radius:.5rem}.lumia-scope .rounded-md{border-radius:.375rem}.lumia-scope .rounded-sm{border-radius:.125rem}.lumia-scope .rounded-xl{border-radius:.75rem}.lumia-scope .border{border-width:1px}.lumia-scope .border-0{border-width:0}.lumia-scope .border-2{border-width:2px}.lumia-scope .border-b{border-bottom-width:1px}.lumia-scope .border-b-2{border-bottom-width:2px}.lumia-scope .border-t{border-top-width:1px}.lumia-scope .border-dashed{border-style:dashed}.lumia-scope .border-\\[var\\(--l-pass-bd\\)\\]{border-color:var(--l-pass-bd)}.lumia-scope .border-\\[var\\(--l-pass-error\\)\\]{border-color:var(--l-pass-error)}.lumia-scope .border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.lumia-scope .border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.lumia-scope .border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity,1))}.lumia-scope .border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.lumia-scope .border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity,1))}.lumia-scope .border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.lumia-scope .border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.lumia-scope .border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.lumia-scope .border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.lumia-scope .border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity,1))}.lumia-scope .border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity,1))}.lumia-scope .border-current{border-color:currentColor}.lumia-scope .border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.lumia-scope .border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.lumia-scope .border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.lumia-scope .border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.lumia-scope .border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity,1))}.lumia-scope .border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.lumia-scope .border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity,1))}.lumia-scope .border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity,1))}.lumia-scope .border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity,1))}.lumia-scope .border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.lumia-scope .border-orange-800{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity,1))}.lumia-scope .border-orange-900{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity,1))}.lumia-scope .border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.lumia-scope .border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity,1))}.lumia-scope .border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity,1))}.lumia-scope .border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.lumia-scope .border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.lumia-scope .border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.lumia-scope .border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.lumia-scope .border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity,1))}.lumia-scope .border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity,1))}.lumia-scope .border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity,1))}.lumia-scope .border-sky-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity,1))}.lumia-scope .border-sky-900{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity,1))}.lumia-scope .border-transparent{border-color:transparent}.lumia-scope .border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.lumia-scope .border-t-transparent{border-top-color:transparent}.lumia-scope .bg-\\[\\#002c15\\]{--tw-bg-opacity:1;background-color:rgb(0 44 21/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#081f2c\\]{--tw-bg-opacity:1;background-color:rgb(8 31 44/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#f3ba2f\\]{--tw-bg-opacity:1;background-color:rgb(243 186 47/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[var\\(--l-pass-accent\\)\\]{background-color:var(--l-pass-accent)}.lumia-scope .bg-\\[var\\(--l-pass-bg\\)\\]{background-color:var(--l-pass-bg)}.lumia-scope .bg-\\[var\\(--l-pass-bg-error\\)\\]{background-color:var(--l-pass-bg-error)}.lumia-scope .bg-\\[var\\(--l-pass-bg-info\\)\\]{background-color:var(--l-pass-bg-info)}.lumia-scope .bg-\\[var\\(--l-pass-bg-muted\\)\\]{background-color:var(--l-pass-bg-muted)}.lumia-scope .bg-\\[var\\(--l-pass-bg-success\\)\\]{background-color:var(--l-pass-bg-success)}.lumia-scope .bg-\\[var\\(--l-pass-bg-warning\\)\\]{background-color:var(--l-pass-bg-warning)}.lumia-scope .bg-\\[var\\(--l-pass-error\\)\\]{background-color:var(--l-pass-error)}.lumia-scope .bg-\\[var\\(--l-pass-fg\\)\\]{background-color:var(--l-pass-fg)}.lumia-scope .bg-\\[var\\(--l-pass-fg-inverted\\)\\]{background-color:var(--l-pass-fg-inverted)}.lumia-scope .bg-\\[var\\(--l-pass-overlay\\)\\]{background-color:var(--l-pass-overlay)}.lumia-scope .bg-\\[var\\(--l-pass-primary\\)\\]{background-color:var(--l-pass-primary)}.lumia-scope .bg-\\[var\\(--l-pass-secondary\\)\\]{background-color:var(--l-pass-secondary)}.lumia-scope .bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-950{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity,1))}.lumia-scope .bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-700{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-800{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-900{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-950{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity,1))}.lumia-scope .bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.lumia-scope .bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.lumia-scope .bg-transparent{background-color:transparent}.lumia-scope .bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.lumia-scope .bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.lumia-scope .bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.lumia-scope .from-purple-100{--tw-gradient-from:#f3e8ff var(--tw-gradient-from-position);--tw-gradient-to:rgba(243,232,255,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .from-purple-500{--tw-gradient-from:#a855f7 var(--tw-gradient-from-position);--tw-gradient-to:rgba(168,85,247,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .from-purple-600{--tw-gradient-from:#9333ea var(--tw-gradient-from-position);--tw-gradient-to:rgba(147,51,234,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .to-blue-100{--tw-gradient-to:#dbeafe var(--tw-gradient-to-position)}.lumia-scope .to-blue-500{--tw-gradient-to:#3b82f6 var(--tw-gradient-to-position)}.lumia-scope .to-blue-600{--tw-gradient-to:#2563eb var(--tw-gradient-to-position)}.lumia-scope .object-contain{-o-object-fit:contain;object-fit:contain}.lumia-scope .object-cover{-o-object-fit:cover;object-fit:cover}.lumia-scope .p-0{padding:0}.lumia-scope .p-1{padding:.25rem}.lumia-scope .p-2{padding:.5rem}.lumia-scope .p-3{padding:.75rem}.lumia-scope .p-4{padding:1rem}.lumia-scope .p-5{padding:1.25rem}.lumia-scope .p-6{padding:1.5rem}.lumia-scope .p-8{padding:2rem}.lumia-scope .p-\\[var\\(--l-pass-gap\\)\\]{padding:var(--l-pass-gap)}.lumia-scope .p-\\[var\\(--l-pass-pd\\)\\]{padding:var(--l-pass-pd)}.lumia-scope .px-0{padding-left:0;padding-right:0}.lumia-scope .px-1{padding-left:.25rem;padding-right:.25rem}.lumia-scope .px-12{padding-left:3rem;padding-right:3rem}.lumia-scope .px-2{padding-left:.5rem;padding-right:.5rem}.lumia-scope .px-2\\.5{padding-left:.625rem;padding-right:.625rem}.lumia-scope .px-3{padding-left:.75rem;padding-right:.75rem}.lumia-scope .px-4{padding-left:1rem;padding-right:1rem}.lumia-scope .px-5{padding-left:1.25rem;padding-right:1.25rem}.lumia-scope .px-6{padding-left:1.5rem;padding-right:1.5rem}.lumia-scope .px-8{padding-left:2rem;padding-right:2rem}.lumia-scope .px-\\[var\\(--l-pass-gap\\)\\]{padding-left:var(--l-pass-gap);padding-right:var(--l-pass-gap)}.lumia-scope .px-\\[var\\(--l-pass-pd\\)\\]{padding-left:var(--l-pass-pd);padding-right:var(--l-pass-pd)}.lumia-scope .py-0{padding-top:0;padding-bottom:0}.lumia-scope .py-0\\.5{padding-top:.125rem;padding-bottom:.125rem}.lumia-scope .py-1{padding-top:.25rem;padding-bottom:.25rem}.lumia-scope .py-1\\.5{padding-top:.375rem;padding-bottom:.375rem}.lumia-scope .py-2{padding-top:.5rem;padding-bottom:.5rem}.lumia-scope .py-3{padding-top:.75rem;padding-bottom:.75rem}.lumia-scope .py-4{padding-top:1rem;padding-bottom:1rem}.lumia-scope .py-8{padding-top:2rem;padding-bottom:2rem}.lumia-scope .py-\\[10px\\]{padding-top:10px;padding-bottom:10px}.lumia-scope .py-\\[var\\(--l-pass-gap\\)\\]{padding-top:var(--l-pass-gap);padding-bottom:var(--l-pass-gap)}.lumia-scope .pb-2{padding-bottom:.5rem}.lumia-scope .pb-3{padding-bottom:.75rem}.lumia-scope .pb-4{padding-bottom:1rem}.lumia-scope .pb-5{padding-bottom:1.25rem}.lumia-scope .pb-6{padding-bottom:1.5rem}.lumia-scope .pl-11{padding-left:2.75rem}.lumia-scope .pl-2{padding-left:.5rem}.lumia-scope .pr-10{padding-right:2.5rem}.lumia-scope .pr-16{padding-right:4rem}.lumia-scope .pr-8{padding-right:2rem}.lumia-scope .pt-0{padding-top:0}.lumia-scope .pt-2{padding-top:.5rem}.lumia-scope .pt-3{padding-top:.75rem}.lumia-scope .pt-4{padding-top:1rem}.lumia-scope .pt-5{padding-top:1.25rem}.lumia-scope .text-left{text-align:left}.lumia-scope .text-center{text-align:center}.lumia-scope .text-right{text-align:right}.lumia-scope .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.lumia-scope .font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.lumia-scope .text-2xl{font-size:1.5rem;line-height:2rem}.lumia-scope .text-3xl{font-size:1.875rem;line-height:2.25rem}.lumia-scope .text-4xl{font-size:2.25rem;line-height:2.5rem}.lumia-scope .text-\\[10px\\]{font-size:10px}.lumia-scope .text-\\[14px\\]{font-size:14px}.lumia-scope .text-\\[16px\\]{font-size:16px}.lumia-scope .text-\\[8px\\]{font-size:8px}.lumia-scope .text-base{font-size:1rem;line-height:1.5rem}.lumia-scope .text-lg{font-size:1.125rem;line-height:1.75rem}.lumia-scope .text-sm{font-size:.875rem;line-height:1.25rem}.lumia-scope .text-xl{font-size:1.25rem;line-height:1.75rem}.lumia-scope .text-xs{font-size:.75rem;line-height:1rem}.lumia-scope .font-bold{font-weight:700}.lumia-scope .font-medium{font-weight:500}.lumia-scope .font-normal{font-weight:400}.lumia-scope .font-semibold{font-weight:600}.lumia-scope .uppercase{text-transform:uppercase}.lumia-scope .lowercase{text-transform:lowercase}.lumia-scope .italic{font-style:italic}.lumia-scope .leading-4{line-height:1rem}.lumia-scope .leading-5{line-height:1.25rem}.lumia-scope .leading-6{line-height:1.5rem}.lumia-scope .leading-8{line-height:2rem}.lumia-scope .leading-\\[8px\\]{line-height:8px}.lumia-scope .leading-none{line-height:1}.lumia-scope .leading-relaxed{line-height:1.625}.lumia-scope .leading-tight{line-height:1.25}.lumia-scope .tracking-tight{letter-spacing:-.025em}.lumia-scope .tracking-wide{letter-spacing:.025em}.lumia-scope .text-\\[\\#c3f53c\\]{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .text-\\[var\\(--l-pass-bg-error\\)\\]{color:var(--l-pass-bg-error)}.lumia-scope .text-\\[var\\(--l-pass-bg-success\\)\\]{color:var(--l-pass-bg-success)}.lumia-scope .text-\\[var\\(--l-pass-bg-warning\\)\\]{color:var(--l-pass-bg-warning)}.lumia-scope .text-\\[var\\(--l-pass-error\\)\\]{color:var(--l-pass-error)}.lumia-scope .text-\\[var\\(--l-pass-fg\\)\\]{color:var(--l-pass-fg)}.lumia-scope .text-\\[var\\(--l-pass-fg-inverted\\)\\]{color:var(--l-pass-fg-inverted)}.lumia-scope .text-\\[var\\(--l-pass-fg-muted\\)\\]{color:var(--l-pass-fg-muted)}.lumia-scope .text-\\[var\\(--l-pass-info\\)\\]{color:var(--l-pass-info)}.lumia-scope .text-\\[var\\(--l-pass-success\\)\\]{color:var(--l-pass-success)}.lumia-scope .text-\\[var\\(--l-pass-text-secondary\\)\\]{color:var(--l-pass-text-secondary)}.lumia-scope .text-\\[var\\(--l-pass-warning\\)\\]{color:var(--l-pass-warning)}.lumia-scope .text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity,1))}.lumia-scope .text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity,1))}.lumia-scope .text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity,1))}.lumia-scope .text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.lumia-scope .text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.lumia-scope .text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.lumia-scope .text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.lumia-scope .text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity,1))}.lumia-scope .text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.lumia-scope .text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.lumia-scope .text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.lumia-scope .text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.lumia-scope .text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.lumia-scope .text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.lumia-scope .text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.lumia-scope .text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.lumia-scope .text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.lumia-scope .text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.lumia-scope .text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.lumia-scope .text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.lumia-scope .text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.lumia-scope .text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.lumia-scope .text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity,1))}.lumia-scope .text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.lumia-scope .text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.lumia-scope .text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.lumia-scope .text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.lumia-scope .text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.lumia-scope .text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity,1))}.lumia-scope .text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.lumia-scope .text-orange-100{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity,1))}.lumia-scope .text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity,1))}.lumia-scope .text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity,1))}.lumia-scope .text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.lumia-scope .text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.lumia-scope .text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.lumia-scope .text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.lumia-scope .text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity,1))}.lumia-scope .text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.lumia-scope .text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.lumia-scope .text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.lumia-scope .text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.lumia-scope .text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.lumia-scope .text-red-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity,1))}.lumia-scope .text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.lumia-scope .text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.lumia-scope .text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.lumia-scope .text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.lumia-scope .text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.lumia-scope .text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.lumia-scope .text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.lumia-scope .text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.lumia-scope .text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity,1))}.lumia-scope .text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity,1))}.lumia-scope .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.lumia-scope .text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.lumia-scope .underline{text-decoration-line:underline}.lumia-scope .underline-offset-2{text-underline-offset:2px}.lumia-scope .underline-offset-4{text-underline-offset:4px}.lumia-scope .antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lumia-scope .opacity-0{opacity:0}.lumia-scope .opacity-100{opacity:1}.lumia-scope .opacity-40{opacity:.4}.lumia-scope .opacity-50{opacity:.5}.lumia-scope .opacity-60{opacity:.6}.lumia-scope .shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.lumia-scope .shadow,.lumia-scope .shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.lumia-scope .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.lumia-scope .shadow-lg,.lumia-scope .shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.lumia-scope .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.lumia-scope .shadow-sm,.lumia-scope .shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.lumia-scope .outline-none{outline:2px solid transparent;outline-offset:2px}.lumia-scope .outline{outline-style:solid}.lumia-scope .blur{--tw-blur:blur(8px)}.lumia-scope .blur,.lumia-scope .grayscale{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.lumia-scope .grayscale{--tw-grayscale:grayscale(100%)}.lumia-scope .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.lumia-scope .backdrop-blur{--tw-backdrop-blur:blur(8px)}.lumia-scope .backdrop-blur,.lumia-scope .backdrop-blur-sm{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.lumia-scope .backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.lumia-scope .backdrop-filter{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.lumia-scope .transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-\\[color\\2c box-shadow\\]{transition-property:color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-none{transition-property:none}.lumia-scope .transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .duration-200{transition-duration:.2s}.lumia-scope .ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.lumia-scope .ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.lumia-scope{--l-pass-ff:var(--lumia-passport-ff,-apple-system,BlinkMacSystemFont,"Inter",system-ui,sans-serif);--l-pass-maw:var(--lumia-passport-maw,384px);--l-pass-pd:var(--lumia-passport-pd,12px);--l-pass-gap:var(--lumia-passport-gap,10px);--l-pass-bdrs:var(--lumia-passport-bdrs,20px);--l-pass-el-bdrs:var(--lumia-passport-element-bdrs,10px);--l-pass-backdrop-blur:var(--lumia-passport-backdrop-blur,10px)}.lumia-scope[data-lumia-passport-mode=light]{--l-pass-overlay:var(--lumia-passport-overlay,hsla(0,0%,100%,.8));--l-pass-bg:var(--lumia-passport-bg,#fff);--l-pass-fg:var(--lumia-passport-fg,#000);--l-pass-fg-h:var(--lumia-passport-fg-h,rgba(0,0,0,.6));--l-pass-fg-a:var(--lumia-passport-fg-a,rgba(0,0,0,.4));--l-pass-fg-inverted:var(--lumia-passport-fg-inverted,#fff);--l-pass-fg-muted:var(--lumia-passport-fg-muted,rgba(0,0,0,.6));--l-pass-primary:var(--lumia-passport-primary,#000);--l-pass-primary-h:var(--lumia-passport-primary-h,rgba(0,0,0,.8));--l-pass-primary-a:var(--lumia-passport-primary-a,rgba(0,0,0,.6));--l-pass-secondary:var(--lumia-passport-secondary,#e4e4e4);--l-pass-secondary-h:var(--lumia-passport-secondary-h,hsla(0,0%,89%,.8));--l-pass-secondary-a:var(--lumia-passport-secondary-a,hsla(0,0%,89%,.6));--l-pass-bd:var(--lumia-passport-bd,#ebebeb);--l-pass-bd-intense:var(--lumia-passport-bd-intense,#a9a9a9);--l-pass-shadow-c:var(--lumia-passport-shadow-c,rgba(0,0,0,.1));--l-pass-info:var(--lumia-passport-info,var(--l-pass-fg));--l-pass-bg-info:var(--lumia-passport-bg-info,#e4e4e4);--l-pass-success:var(--lumia-passport-success,var(--l-pass-fg));--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,var(--l-pass-fg));--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#fff);--l-pass-bg-error:var(--lumia-passport-bg-error,#d6204e)}.lumia-scope[data-lumia-passport-mode=dark]{--l-pass-overlay:var(--lumia-passport-overlay,rgba(0,0,0,.8));--l-pass-bg:var(--lumia-passport-bg,#1a1a1a);--l-pass-fg:var(--lumia-passport-fg,#fff);--l-pass-fg-h:var(--lumia-passport-fg-h,hsla(0,0%,100%,.6));--l-pass-fg-a:var(--lumia-passport-fg-a,hsla(0,0%,100%,.4));--l-pass-fg-inverted:var(--lumia-passport-fg-inverted,#000);--l-pass-fg-muted:var(--lumia-passport-fg-muted,hsla(0,0%,100%,.6));--l-pass-primary:var(--lumia-passport-primary,#fff);--l-pass-primary-h:var(--lumia-passport-primary-h,hsla(0,0%,100%,.8));--l-pass-primary-a:var(--lumia-passport-primary-a,hsla(0,0%,100%,.6));--l-pass-secondary:var(--lumia-passport-secondary,#2a2a2a);--l-pass-secondary-h:var(--lumia-passport-secondary-h,rgba(42,42,42,.6));--l-pass-secondary-a:var(--lumia-passport-secondary-a,rgba(42,42,42,.4));--l-pass-bd:var(--lumia-passport-bd,#3a3a3a);--l-pass-bd-intense:var(--lumia-passport-bd-intense,#4a4a4a);--l-pass-shadow-c:var(--lumia-passport-shadow-c,rgba(0,0,0,.1));--l-pass-info:var(--lumia-passport-info,var(--l-pass-fg));--l-pass-bg-info:var(--lumia-passport-bg-info,#2a2a2a);--l-pass-success:var(--lumia-passport-success,var(--l-pass-fg-inverted));--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,var(--l-pass-fg-inverted));--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#fff);--l-pass-bg-error:var(--lumia-passport-bg-error,#d6204e)}.lumia-scope,.lumia-scope *{margin:0;box-sizing:border-box;font-family:var(--l-pass-ff);font-optical-sizing:auto;-webkit-tap-highlight-color:transparent;-moz-tap-highlight-color:transparent;-ms-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lumia-scope button,.lumia-scope h1,.lumia-scope h2,.lumia-scope h3,.lumia-scope h4,.lumia-scope h5,.lumia-scope h6,.lumia-scope input,.lumia-scope p,.lumia-scope select,.lumia-scope textarea{font-family:var(--l-pass-ff)!important;margin:0}.lumia-scope button,.lumia-scope input,.lumia-scope select,.lumia-scope textarea{border-style:solid;outline:none!important;appearance:none!important;-webkit-appearance:none;-moz-appearance:none}.lumia-scope input,.lumia-scope textarea{font-size:16px!important}.lumia-scope .lumia-passport-button{box-shadow:0 4px 20px var(--l-pass-shadow-c),inset 0 0 0 1px var(--l-pass-bd);transition:transform .25s ease}.lumia-scope .lumia-passport-button:hover{transform:scale(1.02)}.lumia-scope .lumia-passport-button:active{transform:scale(1)}@keyframes lumia-mobile-dialog-fade-in{0%{opacity:0;transform:translateY(64px)}to{opacity:1;transform:translateY(0)}}@keyframes lumia-mobile-dialog-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(64px)}}.lumia-scope .animate-mobile-dialog-in{animation:lumia-mobile-dialog-fade-in 375ms ease}.lumia-scope .animate-mobile-dialog-out{animation:lumia-mobile-dialog-fade-out 375ms ease}@keyframes lumia-dialog-fade-in{0%{opacity:0}to{opacity:1}}@keyframes lumia-dialog-fade-out{0%{opacity:1}to{opacity:0}}.lumia-scope .animate-dialog-in{animation:lumia-dialog-fade-in 375ms ease}.lumia-scope .animate-dialog-out{animation:lumia-dialog-fade-out 375ms ease}.lumia-scope .list-scrollbar-y{width:100%;padding-right:var(--l-pass-list-scrollbar-pd-r,0);overflow-y:auto;overflow-x:hidden;max-height:var(--l-pass-scrollbar-mah,300px)}.lumia-scope .list-scrollbar-y::-webkit-scrollbar{width:4px;height:4px}.lumia-scope .list-scrollbar-y::-webkit-scrollbar-thumb{cursor:pointer;width:4px;border-radius:2px;background-color:var(--l-pass-bd)}.lumia-scope .list-scrollbar-y::-webkit-scrollbar-track{margin-top:10px;margin-bottom:10px;background-color:transparent}.lumia-scope .noScrollbars::-webkit-scrollbar{display:none}.lumia-scope div[data-radix-popper-content-wrapper]{z-index:10000!important}.lumia-scope .file\\:mr-\\[var\\(--l-pass-gap\\)\\]::file-selector-button{margin-right:var(--l-pass-gap)}.lumia-scope .file\\:h-12::file-selector-button{height:3rem}.lumia-scope .file\\:cursor-pointer::file-selector-button{cursor:pointer}.lumia-scope .file\\:rounded-\\[var\\(--l-pass-el-bdrs\\)\\]::file-selector-button{border-radius:var(--l-pass-el-bdrs)}.lumia-scope .file\\:border-0::file-selector-button{border-width:0}.lumia-scope .file\\:bg-\\[var\\(--l-pass-primary\\)\\]::file-selector-button{background-color:var(--l-pass-primary)}.lumia-scope .file\\:bg-transparent::file-selector-button{background-color:transparent}.lumia-scope .file\\:px-\\[var\\(--l-pass-pd\\)\\]::file-selector-button{padding-left:var(--l-pass-pd);padding-right:var(--l-pass-pd)}.lumia-scope .file\\:text-\\[16px\\]::file-selector-button{font-size:16px}.lumia-scope .file\\:text-base::file-selector-button{font-size:1rem;line-height:1.5rem}.lumia-scope .file\\:font-medium::file-selector-button{font-weight:500}.lumia-scope .file\\:text-\\[var\\(--l-pass-fg-inverted\\)\\]::file-selector-button{color:var(--l-pass-fg-inverted)}.lumia-scope .placeholder\\:text-\\[var\\(--l-pass-fg-muted\\)\\]::-moz-placeholder{color:var(--l-pass-fg-muted)}.lumia-scope .placeholder\\:text-\\[var\\(--l-pass-fg-muted\\)\\]::placeholder{color:var(--l-pass-fg-muted)}.lumia-scope .focus-within\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:focus-within{background-color:var(--l-pass-secondary-a)}.lumia-scope .focus-within\\:outline-none:focus-within{outline:2px solid transparent;outline-offset:2px}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-bg\\)\\]:hover{background-color:var(--l-pass-bg)}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-primary-h\\)\\]:hover{background-color:var(--l-pass-primary-h)}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-secondary-h\\)\\]:hover{background-color:var(--l-pass-secondary-h)}.lumia-scope .hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-yellow-600:hover{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:text-\\[\\#c3f53c\\]:hover{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-\\[var\\(--l-pass-fg-h\\)\\]:hover{color:var(--l-pass-fg-h)}.lumia-scope .hover\\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.lumia-scope .hover\\:underline:hover{text-decoration-line:underline}.lumia-scope .file\\:hover\\:opacity-90:hover::file-selector-button{opacity:.9}.lumia-scope .focus\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:focus{background-color:var(--l-pass-secondary-a)}.lumia-scope .focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.lumia-scope .focus\\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px}.lumia-scope .focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.lumia-scope .focus-visible\\:ring-0:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus-visible\\:ring-\\[2px\\]:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus-visible\\:ring-transparent:focus-visible{--tw-ring-color:transparent}.lumia-scope .focus-visible\\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px}.lumia-scope .active\\:bg-\\[var\\(--l-pass-bg\\)\\]:active{background-color:var(--l-pass-bg)}.lumia-scope .active\\:bg-\\[var\\(--l-pass-primary-a\\)\\]:active{background-color:var(--l-pass-primary-a)}.lumia-scope .active\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:active{background-color:var(--l-pass-secondary-a)}.lumia-scope .active\\:text-\\[\\#c3f53c\\]:active{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .active\\:text-\\[var\\(--l-pass-fg-a\\)\\]:active{color:var(--l-pass-fg-a)}.lumia-scope .file\\:active\\:opacity-80:active::file-selector-button{opacity:.8}.lumia-scope .disabled\\:cursor-default:disabled{cursor:default}.lumia-scope .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.lumia-scope .disabled\\:opacity-50:disabled{opacity:.5}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-bg\\)\\]:hover:disabled{background-color:var(--l-pass-bg)}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-primary\\)\\]:hover:disabled{background-color:var(--l-pass-primary)}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-secondary\\)\\]:hover:disabled{background-color:var(--l-pass-secondary)}.lumia-scope .disabled\\:hover\\:text-\\[var\\(--l-pass-fg\\)\\]:hover:disabled{color:var(--l-pass-fg)}.lumia-scope .disabled\\:active\\:bg-\\[var\\(--l-pass-bg\\)\\]:active:disabled{background-color:var(--l-pass-bg)}.lumia-scope .disabled\\:active\\:bg-\\[var\\(--l-pass-primary\\)\\]:active:disabled{background-color:var(--l-pass-primary)}.lumia-scope .disabled\\:active\\:text-\\[var\\(--l-pass-fg\\)\\]:active:disabled{color:var(--l-pass-fg)}.lumia-scope :is(.group:hover .group-hover\\:opacity-100){opacity:1}.lumia-scope :is(.group:hover .group-hover\\:opacity-60){opacity:.6}.lumia-scope .data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.lumia-scope .data-\\[size\\=default\\]\\:h-12[data-size=default]{height:3rem}.lumia-scope .data-\\[size\\=sm\\]\\:h-10[data-size=sm]{height:2.5rem}.lumia-scope .data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.lumia-scope .data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom],.lumia-scope .data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.lumia-scope .data-\\[side\\=right\\]\\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.lumia-scope .data-\\[side\\=right\\]\\:translate-x-1[data-side=right],.lumia-scope .data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.lumia-scope .data-\\[state\\=checked\\]\\:border-\\[var\\(--l-pass-bd-intense\\)\\][data-state=checked]{border-color:var(--l-pass-bd-intense)}.lumia-scope .data-\\[state\\=checked\\]\\:bg-\\[var\\(--l-pass-secondary\\)\\][data-state=checked]{background-color:var(--l-pass-secondary)}.lumia-scope .data-\\[state\\=checked\\]\\:text-\\[var\\(--l-pass-fg\\)\\][data-state=checked]{color:var(--l-pass-fg)}.lumia-scope .data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1[data-slot=select-value]>*){overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:flex[data-slot=select-value]>*){display:flex}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:items-center[data-slot=select-value]>*){align-items:center}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:gap-\\[var\\(--l-pass-gap\\)\\][data-slot=select-value]>*){gap:var(--l-pass-gap)}@media (min-width:640px){.lumia-scope .sm\\:flex-row{flex-direction:row}.lumia-scope .sm\\:justify-end{justify-content:flex-end}.lumia-scope :is(.sm\\:space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope .sm\\:text-left{text-align:left}}@media (min-width:768px){.lumia-scope .md\\:h-8{height:2rem}.lumia-scope .md\\:w-8{width:2rem}.lumia-scope .md\\:gap-\\[var\\(--l-pass-gap\\)\\]{gap:var(--l-pass-gap)}.lumia-scope .md\\:py-1{padding-top:.25rem;padding-bottom:.25rem}}@media (prefers-color-scheme:dark){.lumia-scope .dark\\:bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-yellow-500:hover{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}}.lumia-scope :is(.\\[\\&_svg\\:not\\(\\[class\\*\\=\\\'size-\\\'\\]\\)\\]\\:size-4 svg:not([class*=size-])){width:1rem;height:1rem}.lumia-scope :is(.\\[\\&_svg\\]\\:pointer-events-none svg){pointer-events:none}.lumia-scope :is(.\\[\\&_svg\\]\\:shrink-0 svg){flex-shrink:0}';
|
|
4532
|
+
var built_default = '.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\\201C""\\201D""\\2018""\\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgba(17,24,39,.1);--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:hsla(0,0%,100%,.1);--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.lumia-scope .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.lumia-scope .pointer-events-none{pointer-events:none}.lumia-scope .pointer-events-auto{pointer-events:auto}.lumia-scope .visible{visibility:visible}.lumia-scope .invisible{visibility:hidden}.lumia-scope .collapse{visibility:collapse}.lumia-scope .static{position:static}.lumia-scope .fixed{position:fixed}.lumia-scope .absolute{position:absolute}.lumia-scope .relative{position:relative}.lumia-scope .inset-0{inset:0}.lumia-scope .inset-y-0{top:0;bottom:0}.lumia-scope .-bottom-1{bottom:-.25rem}.lumia-scope .-right-1{right:-.25rem}.lumia-scope .-right-2{right:-.5rem}.lumia-scope .-top-1{top:-.25rem}.lumia-scope .-top-2{top:-.5rem}.lumia-scope .-top-3{top:-.75rem}.lumia-scope .bottom-full{bottom:100%}.lumia-scope .left-0{left:0}.lumia-scope .left-1{left:.25rem}.lumia-scope .left-1\\/2{left:50%}.lumia-scope .left-3{left:.75rem}.lumia-scope .left-4{left:1rem}.lumia-scope .right-0{right:0}.lumia-scope .right-2{right:.5rem}.lumia-scope .right-3{right:.75rem}.lumia-scope .right-4{right:1rem}.lumia-scope .right-\\[var\\(--l-pass-pd\\)\\]{right:var(--l-pass-pd)}.lumia-scope .right-full{right:100%}.lumia-scope .top-0{top:0}.lumia-scope .top-1{top:.25rem}.lumia-scope .top-1\\/2{top:50%}.lumia-scope .top-3{top:.75rem}.lumia-scope .top-4{top:1rem}.lumia-scope .top-\\[var\\(--l-pass-pd\\)\\]{top:var(--l-pass-pd)}.lumia-scope .top-full{top:100%}.lumia-scope .z-10{z-index:10}.lumia-scope .z-50{z-index:50}.lumia-scope .z-\\[9998\\]{z-index:9998}.lumia-scope .z-\\[9999\\]{z-index:9999}.lumia-scope .-m-px{margin:-1px}.lumia-scope .m-0{margin:0}.lumia-scope .m-4{margin:1rem}.lumia-scope .-mx-1{margin-left:-.25rem;margin-right:-.25rem}.lumia-scope .-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.lumia-scope .mx-1{margin-left:.25rem;margin-right:.25rem}.lumia-scope .mx-auto{margin-left:auto;margin-right:auto}.lumia-scope .my-1{margin-top:.25rem;margin-bottom:.25rem}.lumia-scope .my-6{margin-top:1.5rem;margin-bottom:1.5rem}.lumia-scope .my-auto{margin-top:auto;margin-bottom:auto}.lumia-scope .-mt-5{margin-top:-1.25rem}.lumia-scope .mb-1{margin-bottom:.25rem}.lumia-scope .mb-2{margin-bottom:.5rem}.lumia-scope .mb-3{margin-bottom:.75rem}.lumia-scope .mb-4{margin-bottom:1rem}.lumia-scope .mb-6{margin-bottom:1.5rem}.lumia-scope .mb-8{margin-bottom:2rem}.lumia-scope .ml-1{margin-left:.25rem}.lumia-scope .ml-2{margin-left:.5rem}.lumia-scope .ml-3{margin-left:.75rem}.lumia-scope .ml-4{margin-left:1rem}.lumia-scope .ml-auto{margin-left:auto}.lumia-scope .mr-1{margin-right:.25rem}.lumia-scope .mr-2{margin-right:.5rem}.lumia-scope .mr-4{margin-right:1rem}.lumia-scope .mt-0{margin-top:0}.lumia-scope .mt-1{margin-top:.25rem}.lumia-scope .mt-2{margin-top:.5rem}.lumia-scope .mt-3{margin-top:.75rem}.lumia-scope .mt-4{margin-top:1rem}.lumia-scope .mt-6{margin-top:1.5rem}.lumia-scope .block{display:block}.lumia-scope .inline-block{display:inline-block}.lumia-scope .inline{display:inline}.lumia-scope .flex{display:flex}.lumia-scope .inline-flex{display:inline-flex}.lumia-scope .table{display:table}.lumia-scope .grid{display:grid}.lumia-scope .contents{display:contents}.lumia-scope .hidden{display:none}.lumia-scope .aspect-square{aspect-ratio:1/1}.lumia-scope .size-3{width:.75rem;height:.75rem}.lumia-scope .size-3\\.5{width:.875rem;height:.875rem}.lumia-scope .size-4{width:1rem;height:1rem}.lumia-scope .size-5{width:1.25rem;height:1.25rem}.lumia-scope .h-10{height:2.5rem}.lumia-scope .h-11{height:2.75rem}.lumia-scope .h-12{height:3rem}.lumia-scope .h-14{height:3.5rem}.lumia-scope .h-16{height:4rem}.lumia-scope .h-2{height:.5rem}.lumia-scope .h-2\\.5{height:.625rem}.lumia-scope .h-20{height:5rem}.lumia-scope .h-3{height:.75rem}.lumia-scope .h-3\\.5{height:.875rem}.lumia-scope .h-4{height:1rem}.lumia-scope .h-48{height:12rem}.lumia-scope .h-5{height:1.25rem}.lumia-scope .h-6{height:1.5rem}.lumia-scope .h-7{height:1.75rem}.lumia-scope .h-8{height:2rem}.lumia-scope .h-9{height:2.25rem}.lumia-scope .h-\\[100dvh\\]{height:100dvh}.lumia-scope .h-\\[48px\\]{height:48px}.lumia-scope .h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.lumia-scope .h-fit{height:-moz-fit-content;height:fit-content}.lumia-scope .h-full{height:100%}.lumia-scope .h-px{height:1px}.lumia-scope .max-h-24{max-height:6rem}.lumia-scope .max-h-96{max-height:24rem}.lumia-scope .max-h-\\[95dvh\\]{max-height:95dvh}.lumia-scope .w-10{width:2.5rem}.lumia-scope .w-12{width:3rem}.lumia-scope .w-16{width:4rem}.lumia-scope .w-2{width:.5rem}.lumia-scope .w-2\\.5{width:.625rem}.lumia-scope .w-20{width:5rem}.lumia-scope .w-3{width:.75rem}.lumia-scope .w-3\\.5{width:.875rem}.lumia-scope .w-4{width:1rem}.lumia-scope .w-48{width:12rem}.lumia-scope .w-5{width:1.25rem}.lumia-scope .w-6{width:1.5rem}.lumia-scope .w-8{width:2rem}.lumia-scope .w-9{width:2.25rem}.lumia-scope .w-\\[100dvw\\]{width:100dvw}.lumia-scope .w-\\[40px\\]{width:40px}.lumia-scope .w-\\[var\\(--l-pass-maw\\)\\]{width:var(--l-pass-maw)}.lumia-scope .w-fit{width:-moz-fit-content;width:fit-content}.lumia-scope .w-full{width:100%}.lumia-scope .w-px{width:1px}.lumia-scope .min-w-0{min-width:0}.lumia-scope .min-w-16{min-width:4rem}.lumia-scope .min-w-24{min-width:6rem}.lumia-scope .min-w-32{min-width:8rem}.lumia-scope .min-w-4{min-width:1rem}.lumia-scope .min-w-5{min-width:1.25rem}.lumia-scope .min-w-\\[256px\\]{min-width:256px}.lumia-scope .min-w-\\[8rem\\]{min-width:8rem}.lumia-scope .min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.lumia-scope .max-w-2xl{max-width:42rem}.lumia-scope .max-w-\\[144px\\]{max-width:144px}.lumia-scope .max-w-\\[150px\\]{max-width:150px}.lumia-scope .max-w-\\[160px\\]{max-width:160px}.lumia-scope .max-w-\\[256px\\]{max-width:256px}.lumia-scope .max-w-\\[680px\\]{max-width:680px}.lumia-scope .max-w-full{max-width:100%}.lumia-scope .max-w-lg{max-width:32rem}.lumia-scope .max-w-md{max-width:28rem}.lumia-scope .max-w-sm{max-width:24rem}.lumia-scope .flex-1{flex:1 1 0%}.lumia-scope .flex-none{flex:none}.lumia-scope .flex-shrink{flex-shrink:1}.lumia-scope .flex-shrink-0,.lumia-scope .shrink-0{flex-shrink:0}.lumia-scope .border-collapse{border-collapse:collapse}.lumia-scope .-translate-x-1{--tw-translate-x:-0.25rem}.lumia-scope .-translate-x-1,.lumia-scope .-translate-x-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .-translate-x-1\\/2{--tw-translate-x:-50%}.lumia-scope .-translate-x-\\[var\\(--l-pass-gap\\)\\]{--tw-translate-x:calc(var(--l-pass-gap)*-1)}.lumia-scope .-translate-x-\\[var\\(--l-pass-gap\\)\\],.lumia-scope .-translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .-translate-y-1{--tw-translate-y:-0.25rem}.lumia-scope .-translate-y-1\\/2{--tw-translate-y:-50%}.lumia-scope .-translate-y-1\\/2,.lumia-scope .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes glow-warning{0%,to{transform:scale(1);box-shadow:0 0 16px var(--l-pass-bg-warning)}50%{transform:scale(.97);box-shadow:0 0 4px var(--l-pass-bg-warning)}}.lumia-scope .animate-glow-warning{animation:glow-warning 2s ease infinite}@keyframes pulse-warning{0%,to{opacity:1}50%{opacity:.6}}.lumia-scope .animate-pulse-warning{animation:pulse-warning 2s ease infinite}@keyframes spin{to{transform:rotate(1turn)}}.lumia-scope .animate-spin{animation:spin 1s linear infinite}.lumia-scope .cursor-default{cursor:default}.lumia-scope .cursor-not-allowed{cursor:not-allowed}.lumia-scope .cursor-pointer{cursor:pointer}.lumia-scope .cursor-text{cursor:text}.lumia-scope .select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.lumia-scope .select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.lumia-scope .resize{resize:both}.lumia-scope .scroll-my-1{scroll-margin-top:.25rem;scroll-margin-bottom:.25rem}.lumia-scope .list-inside{list-style-position:inside}.lumia-scope .list-disc{list-style-type:disc}.lumia-scope .appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.lumia-scope .grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lumia-scope .grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lumia-scope .grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lumia-scope .grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lumia-scope .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lumia-scope .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lumia-scope .grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lumia-scope .grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lumia-scope .grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lumia-scope .grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lumia-scope .grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lumia-scope .flex-row{flex-direction:row}.lumia-scope .flex-col{flex-direction:column}.lumia-scope .flex-col-reverse{flex-direction:column-reverse}.lumia-scope .flex-wrap{flex-wrap:wrap}.lumia-scope .place-content-center{place-content:center}.lumia-scope .items-start{align-items:flex-start}.lumia-scope .items-end{align-items:flex-end}.lumia-scope .items-center{align-items:center}.lumia-scope .justify-start{justify-content:flex-start}.lumia-scope .justify-end{justify-content:flex-end}.lumia-scope .justify-center{justify-content:center}.lumia-scope .justify-between{justify-content:space-between}.lumia-scope .justify-evenly{justify-content:space-evenly}.lumia-scope .gap-0{gap:0}.lumia-scope .gap-0\\.5{gap:.125rem}.lumia-scope .gap-1{gap:.25rem}.lumia-scope .gap-1\\.5{gap:.375rem}.lumia-scope .gap-2{gap:.5rem}.lumia-scope .gap-3{gap:.75rem}.lumia-scope .gap-4{gap:1rem}.lumia-scope .gap-\\[10px\\]{gap:10px}.lumia-scope .gap-\\[var\\(--l-pass-gap\\)\\]{gap:var(--l-pass-gap)}.lumia-scope :is(.space-x-1>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-3>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.75rem*var(--tw-space-x-reverse));margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-4>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-y-0>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-0\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-3>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-4>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-6>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.lumia-scope .overflow-auto{overflow:auto}.lumia-scope .overflow-hidden{overflow:hidden}.lumia-scope .overflow-visible{overflow:visible}.lumia-scope .overflow-y-auto{overflow-y:auto}.lumia-scope .overflow-x-hidden{overflow-x:hidden}.lumia-scope .overflow-y-hidden{overflow-y:hidden}.lumia-scope .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lumia-scope .text-ellipsis{text-overflow:ellipsis}.lumia-scope .whitespace-nowrap{white-space:nowrap}.lumia-scope .whitespace-pre-line{white-space:pre-line}.lumia-scope .whitespace-pre-wrap{white-space:pre-wrap}.lumia-scope .break-normal{overflow-wrap:normal;word-break:normal}.lumia-scope .break-words{overflow-wrap:break-word}.lumia-scope .break-all{word-break:break-all}.lumia-scope .rounded{border-radius:.25rem}.lumia-scope .rounded-2xl{border-radius:1rem}.lumia-scope .rounded-3xl{border-radius:1.5rem}.lumia-scope .rounded-\\[10px\\]{border-radius:10px}.lumia-scope .rounded-\\[5px\\]{border-radius:5px}.lumia-scope .rounded-\\[var\\(--l-pass-bdrs\\)\\]{border-radius:var(--l-pass-bdrs)}.lumia-scope .rounded-\\[var\\(--l-pass-el-bdrs\\)\\]{border-radius:var(--l-pass-el-bdrs)}.lumia-scope .rounded-full{border-radius:9999px}.lumia-scope .rounded-lg{border-radius:.5rem}.lumia-scope .rounded-md{border-radius:.375rem}.lumia-scope .rounded-sm{border-radius:.125rem}.lumia-scope .rounded-xl{border-radius:.75rem}.lumia-scope .border{border-width:1px}.lumia-scope .border-0{border-width:0}.lumia-scope .border-2{border-width:2px}.lumia-scope .border-b{border-bottom-width:1px}.lumia-scope .border-b-2{border-bottom-width:2px}.lumia-scope .border-t{border-top-width:1px}.lumia-scope .border-dashed{border-style:dashed}.lumia-scope .border-\\[var\\(--l-pass-bd\\)\\]{border-color:var(--l-pass-bd)}.lumia-scope .border-\\[var\\(--l-pass-error\\)\\]{border-color:var(--l-pass-error)}.lumia-scope .border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.lumia-scope .border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.lumia-scope .border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity,1))}.lumia-scope .border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.lumia-scope .border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity,1))}.lumia-scope .border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.lumia-scope .border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.lumia-scope .border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.lumia-scope .border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.lumia-scope .border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity,1))}.lumia-scope .border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity,1))}.lumia-scope .border-current{border-color:currentColor}.lumia-scope .border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.lumia-scope .border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.lumia-scope .border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.lumia-scope .border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.lumia-scope .border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity,1))}.lumia-scope .border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.lumia-scope .border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity,1))}.lumia-scope .border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity,1))}.lumia-scope .border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity,1))}.lumia-scope .border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.lumia-scope .border-orange-800{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity,1))}.lumia-scope .border-orange-900{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity,1))}.lumia-scope .border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.lumia-scope .border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity,1))}.lumia-scope .border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity,1))}.lumia-scope .border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.lumia-scope .border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.lumia-scope .border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.lumia-scope .border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.lumia-scope .border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity,1))}.lumia-scope .border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity,1))}.lumia-scope .border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity,1))}.lumia-scope .border-sky-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity,1))}.lumia-scope .border-sky-900{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity,1))}.lumia-scope .border-transparent{border-color:transparent}.lumia-scope .border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.lumia-scope .border-t-transparent{border-top-color:transparent}.lumia-scope .bg-\\[\\#002c15\\]{--tw-bg-opacity:1;background-color:rgb(0 44 21/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#081f2c\\]{--tw-bg-opacity:1;background-color:rgb(8 31 44/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#f3ba2f\\]{--tw-bg-opacity:1;background-color:rgb(243 186 47/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[var\\(--l-pass-accent\\)\\]{background-color:var(--l-pass-accent)}.lumia-scope .bg-\\[var\\(--l-pass-bg\\)\\]{background-color:var(--l-pass-bg)}.lumia-scope .bg-\\[var\\(--l-pass-bg-error\\)\\]{background-color:var(--l-pass-bg-error)}.lumia-scope .bg-\\[var\\(--l-pass-bg-info\\)\\]{background-color:var(--l-pass-bg-info)}.lumia-scope .bg-\\[var\\(--l-pass-bg-muted\\)\\]{background-color:var(--l-pass-bg-muted)}.lumia-scope .bg-\\[var\\(--l-pass-bg-success\\)\\]{background-color:var(--l-pass-bg-success)}.lumia-scope .bg-\\[var\\(--l-pass-bg-warning\\)\\]{background-color:var(--l-pass-bg-warning)}.lumia-scope .bg-\\[var\\(--l-pass-error\\)\\]{background-color:var(--l-pass-error)}.lumia-scope .bg-\\[var\\(--l-pass-fg\\)\\]{background-color:var(--l-pass-fg)}.lumia-scope .bg-\\[var\\(--l-pass-overlay\\)\\]{background-color:var(--l-pass-overlay)}.lumia-scope .bg-\\[var\\(--l-pass-primary\\)\\]{background-color:var(--l-pass-primary)}.lumia-scope .bg-\\[var\\(--l-pass-secondary\\)\\]{background-color:var(--l-pass-secondary)}.lumia-scope .bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-950{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity,1))}.lumia-scope .bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-700{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-800{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-900{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-950{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity,1))}.lumia-scope .bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.lumia-scope .bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.lumia-scope .bg-transparent{background-color:transparent}.lumia-scope .bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.lumia-scope .bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.lumia-scope .bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.lumia-scope .from-purple-100{--tw-gradient-from:#f3e8ff var(--tw-gradient-from-position);--tw-gradient-to:rgba(243,232,255,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .from-purple-500{--tw-gradient-from:#a855f7 var(--tw-gradient-from-position);--tw-gradient-to:rgba(168,85,247,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .from-purple-600{--tw-gradient-from:#9333ea var(--tw-gradient-from-position);--tw-gradient-to:rgba(147,51,234,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .to-blue-100{--tw-gradient-to:#dbeafe var(--tw-gradient-to-position)}.lumia-scope .to-blue-500{--tw-gradient-to:#3b82f6 var(--tw-gradient-to-position)}.lumia-scope .to-blue-600{--tw-gradient-to:#2563eb var(--tw-gradient-to-position)}.lumia-scope .object-contain{-o-object-fit:contain;object-fit:contain}.lumia-scope .object-cover{-o-object-fit:cover;object-fit:cover}.lumia-scope .p-0{padding:0}.lumia-scope .p-1{padding:.25rem}.lumia-scope .p-2{padding:.5rem}.lumia-scope .p-3{padding:.75rem}.lumia-scope .p-4{padding:1rem}.lumia-scope .p-5{padding:1.25rem}.lumia-scope .p-6{padding:1.5rem}.lumia-scope .p-8{padding:2rem}.lumia-scope .p-\\[var\\(--l-pass-gap\\)\\]{padding:var(--l-pass-gap)}.lumia-scope .p-\\[var\\(--l-pass-pd\\)\\]{padding:var(--l-pass-pd)}.lumia-scope .px-0{padding-left:0;padding-right:0}.lumia-scope .px-1{padding-left:.25rem;padding-right:.25rem}.lumia-scope .px-12{padding-left:3rem;padding-right:3rem}.lumia-scope .px-2{padding-left:.5rem;padding-right:.5rem}.lumia-scope .px-2\\.5{padding-left:.625rem;padding-right:.625rem}.lumia-scope .px-3{padding-left:.75rem;padding-right:.75rem}.lumia-scope .px-4{padding-left:1rem;padding-right:1rem}.lumia-scope .px-5{padding-left:1.25rem;padding-right:1.25rem}.lumia-scope .px-6{padding-left:1.5rem;padding-right:1.5rem}.lumia-scope .px-8{padding-left:2rem;padding-right:2rem}.lumia-scope .px-\\[2px\\]{padding-left:2px;padding-right:2px}.lumia-scope .px-\\[var\\(--l-pass-gap\\)\\]{padding-left:var(--l-pass-gap);padding-right:var(--l-pass-gap)}.lumia-scope .px-\\[var\\(--l-pass-pd\\)\\]{padding-left:var(--l-pass-pd);padding-right:var(--l-pass-pd)}.lumia-scope .py-0{padding-top:0;padding-bottom:0}.lumia-scope .py-0\\.5{padding-top:.125rem;padding-bottom:.125rem}.lumia-scope .py-1{padding-top:.25rem;padding-bottom:.25rem}.lumia-scope .py-1\\.5{padding-top:.375rem;padding-bottom:.375rem}.lumia-scope .py-2{padding-top:.5rem;padding-bottom:.5rem}.lumia-scope .py-3{padding-top:.75rem;padding-bottom:.75rem}.lumia-scope .py-4{padding-top:1rem;padding-bottom:1rem}.lumia-scope .py-8{padding-top:2rem;padding-bottom:2rem}.lumia-scope .py-\\[10px\\]{padding-top:10px;padding-bottom:10px}.lumia-scope .py-\\[var\\(--l-pass-pd\\)\\]{padding-top:var(--l-pass-pd);padding-bottom:var(--l-pass-pd)}.lumia-scope .pb-2{padding-bottom:.5rem}.lumia-scope .pb-3{padding-bottom:.75rem}.lumia-scope .pb-4{padding-bottom:1rem}.lumia-scope .pb-5{padding-bottom:1.25rem}.lumia-scope .pb-6{padding-bottom:1.5rem}.lumia-scope .pl-11{padding-left:2.75rem}.lumia-scope .pl-2{padding-left:.5rem}.lumia-scope .pr-10{padding-right:2.5rem}.lumia-scope .pr-16{padding-right:4rem}.lumia-scope .pr-8{padding-right:2rem}.lumia-scope .pt-0{padding-top:0}.lumia-scope .pt-2{padding-top:.5rem}.lumia-scope .pt-3{padding-top:.75rem}.lumia-scope .pt-4{padding-top:1rem}.lumia-scope .pt-5{padding-top:1.25rem}.lumia-scope .text-left{text-align:left}.lumia-scope .text-center{text-align:center}.lumia-scope .text-right{text-align:right}.lumia-scope .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.lumia-scope .font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.lumia-scope .text-2xl{font-size:1.5rem;line-height:2rem}.lumia-scope .text-3xl{font-size:1.875rem;line-height:2.25rem}.lumia-scope .text-4xl{font-size:2.25rem;line-height:2.5rem}.lumia-scope .text-\\[10px\\]{font-size:10px}.lumia-scope .text-\\[14px\\]{font-size:14px}.lumia-scope .text-\\[16px\\]{font-size:16px}.lumia-scope .text-\\[8px\\]{font-size:8px}.lumia-scope .text-base{font-size:1rem;line-height:1.5rem}.lumia-scope .text-lg{font-size:1.125rem;line-height:1.75rem}.lumia-scope .text-sm{font-size:.875rem;line-height:1.25rem}.lumia-scope .text-xl{font-size:1.25rem;line-height:1.75rem}.lumia-scope .text-xs{font-size:.75rem;line-height:1rem}.lumia-scope .font-bold{font-weight:700}.lumia-scope .font-medium{font-weight:500}.lumia-scope .font-normal{font-weight:400}.lumia-scope .font-semibold{font-weight:600}.lumia-scope .uppercase{text-transform:uppercase}.lumia-scope .lowercase{text-transform:lowercase}.lumia-scope .italic{font-style:italic}.lumia-scope .leading-4{line-height:1rem}.lumia-scope .leading-5{line-height:1.25rem}.lumia-scope .leading-6{line-height:1.5rem}.lumia-scope .leading-8{line-height:2rem}.lumia-scope .leading-\\[8px\\]{line-height:8px}.lumia-scope .leading-none{line-height:1}.lumia-scope .leading-relaxed{line-height:1.625}.lumia-scope .leading-tight{line-height:1.25}.lumia-scope .tracking-tight{letter-spacing:-.025em}.lumia-scope .tracking-wide{letter-spacing:.025em}.lumia-scope .text-\\[\\#c3f53c\\]{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .text-\\[var\\(--l-pass-bg-error\\)\\]{color:var(--l-pass-bg-error)}.lumia-scope .text-\\[var\\(--l-pass-bg-success\\)\\]{color:var(--l-pass-bg-success)}.lumia-scope .text-\\[var\\(--l-pass-bg-warning\\)\\]{color:var(--l-pass-bg-warning)}.lumia-scope .text-\\[var\\(--l-pass-error\\)\\]{color:var(--l-pass-error)}.lumia-scope .text-\\[var\\(--l-pass-fg\\)\\]{color:var(--l-pass-fg)}.lumia-scope .text-\\[var\\(--l-pass-fg-inverted\\)\\]{color:var(--l-pass-fg-inverted)}.lumia-scope .text-\\[var\\(--l-pass-fg-muted\\)\\]{color:var(--l-pass-fg-muted)}.lumia-scope .text-\\[var\\(--l-pass-info\\)\\]{color:var(--l-pass-info)}.lumia-scope .text-\\[var\\(--l-pass-success\\)\\]{color:var(--l-pass-success)}.lumia-scope .text-\\[var\\(--l-pass-text-secondary\\)\\]{color:var(--l-pass-text-secondary)}.lumia-scope .text-\\[var\\(--l-pass-warning\\)\\]{color:var(--l-pass-warning)}.lumia-scope .text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity,1))}.lumia-scope .text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity,1))}.lumia-scope .text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity,1))}.lumia-scope .text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.lumia-scope .text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.lumia-scope .text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.lumia-scope .text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.lumia-scope .text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity,1))}.lumia-scope .text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.lumia-scope .text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.lumia-scope .text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.lumia-scope .text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.lumia-scope .text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.lumia-scope .text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.lumia-scope .text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.lumia-scope .text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.lumia-scope .text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.lumia-scope .text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.lumia-scope .text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.lumia-scope .text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.lumia-scope .text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.lumia-scope .text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.lumia-scope .text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity,1))}.lumia-scope .text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.lumia-scope .text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.lumia-scope .text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.lumia-scope .text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.lumia-scope .text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.lumia-scope .text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity,1))}.lumia-scope .text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.lumia-scope .text-orange-100{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity,1))}.lumia-scope .text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity,1))}.lumia-scope .text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity,1))}.lumia-scope .text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.lumia-scope .text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.lumia-scope .text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.lumia-scope .text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.lumia-scope .text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity,1))}.lumia-scope .text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.lumia-scope .text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.lumia-scope .text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.lumia-scope .text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.lumia-scope .text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.lumia-scope .text-red-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity,1))}.lumia-scope .text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.lumia-scope .text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.lumia-scope .text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.lumia-scope .text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.lumia-scope .text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.lumia-scope .text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.lumia-scope .text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.lumia-scope .text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.lumia-scope .text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity,1))}.lumia-scope .text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity,1))}.lumia-scope .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.lumia-scope .text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.lumia-scope .underline{text-decoration-line:underline}.lumia-scope .underline-offset-2{text-underline-offset:2px}.lumia-scope .underline-offset-4{text-underline-offset:4px}.lumia-scope .antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lumia-scope .opacity-0{opacity:0}.lumia-scope .opacity-100{opacity:1}.lumia-scope .opacity-40{opacity:.4}.lumia-scope .opacity-50{opacity:.5}.lumia-scope .opacity-60{opacity:.6}.lumia-scope .shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.lumia-scope .shadow,.lumia-scope .shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.lumia-scope .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.lumia-scope .shadow-lg,.lumia-scope .shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.lumia-scope .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.lumia-scope .shadow-sm,.lumia-scope .shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.lumia-scope .outline-none{outline:2px solid transparent;outline-offset:2px}.lumia-scope .outline{outline-style:solid}.lumia-scope .blur{--tw-blur:blur(8px)}.lumia-scope .blur,.lumia-scope .grayscale{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.lumia-scope .grayscale{--tw-grayscale:grayscale(100%)}.lumia-scope .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.lumia-scope .backdrop-blur{--tw-backdrop-blur:blur(8px)}.lumia-scope .backdrop-blur,.lumia-scope .backdrop-blur-sm{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.lumia-scope .backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.lumia-scope .backdrop-filter{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.lumia-scope .transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-\\[color\\2c box-shadow\\]{transition-property:color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-none{transition-property:none}.lumia-scope .transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .duration-200{transition-duration:.2s}.lumia-scope .ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.lumia-scope .ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.lumia-scope{--l-pass-ff:var(--lumia-passport-ff,-apple-system,BlinkMacSystemFont,"Inter",system-ui,sans-serif);--l-pass-maw:var(--lumia-passport-maw,384px);--l-pass-pd:var(--lumia-passport-pd,12px);--l-pass-gap:var(--lumia-passport-gap,10px);--l-pass-bdrs:var(--lumia-passport-bdrs,20px);--l-pass-el-bdrs:var(--lumia-passport-element-bdrs,10px);--l-pass-backdrop-blur:var(--lumia-passport-backdrop-blur,10px)}.lumia-scope[data-lumia-passport-mode=light]{--l-pass-overlay:var(--lumia-passport-overlay,hsla(0,0%,100%,.8));--l-pass-bg:var(--lumia-passport-bg,#fff);--l-pass-fg:var(--lumia-passport-fg,#000);--l-pass-fg-h:var(--lumia-passport-fg-h,rgba(0,0,0,.6));--l-pass-fg-a:var(--lumia-passport-fg-a,rgba(0,0,0,.4));--l-pass-fg-inverted:var(--lumia-passport-fg-inverted,#fff);--l-pass-fg-muted:var(--lumia-passport-fg-muted,rgba(0,0,0,.6));--l-pass-primary:var(--lumia-passport-primary,#000);--l-pass-primary-h:var(--lumia-passport-primary-h,rgba(0,0,0,.8));--l-pass-primary-a:var(--lumia-passport-primary-a,rgba(0,0,0,.6));--l-pass-secondary:var(--lumia-passport-secondary,#e4e4e4);--l-pass-secondary-h:var(--lumia-passport-secondary-h,hsla(0,0%,89%,.8));--l-pass-secondary-a:var(--lumia-passport-secondary-a,hsla(0,0%,89%,.6));--l-pass-bd:var(--lumia-passport-bd,#ebebeb);--l-pass-bd-intense:var(--lumia-passport-bd-intense,#a9a9a9);--l-pass-shadow-c:var(--lumia-passport-shadow-c,rgba(0,0,0,.1));--l-pass-info:var(--lumia-passport-info,var(--l-pass-fg));--l-pass-bg-info:var(--lumia-passport-bg-info,#e4e4e4);--l-pass-success:var(--lumia-passport-success,var(--l-pass-fg));--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,var(--l-pass-fg));--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#fff);--l-pass-bg-error:var(--lumia-passport-bg-error,#d6204e)}.lumia-scope[data-lumia-passport-mode=dark]{--l-pass-overlay:var(--lumia-passport-overlay,rgba(0,0,0,.8));--l-pass-bg:var(--lumia-passport-bg,#1a1a1a);--l-pass-fg:var(--lumia-passport-fg,#fff);--l-pass-fg-h:var(--lumia-passport-fg-h,hsla(0,0%,100%,.6));--l-pass-fg-a:var(--lumia-passport-fg-a,hsla(0,0%,100%,.4));--l-pass-fg-inverted:var(--lumia-passport-fg-inverted,#000);--l-pass-fg-muted:var(--lumia-passport-fg-muted,hsla(0,0%,100%,.6));--l-pass-primary:var(--lumia-passport-primary,#fff);--l-pass-primary-h:var(--lumia-passport-primary-h,hsla(0,0%,100%,.8));--l-pass-primary-a:var(--lumia-passport-primary-a,hsla(0,0%,100%,.6));--l-pass-secondary:var(--lumia-passport-secondary,#2a2a2a);--l-pass-secondary-h:var(--lumia-passport-secondary-h,rgba(42,42,42,.6));--l-pass-secondary-a:var(--lumia-passport-secondary-a,rgba(42,42,42,.4));--l-pass-bd:var(--lumia-passport-bd,#3a3a3a);--l-pass-bd-intense:var(--lumia-passport-bd-intense,#4a4a4a);--l-pass-shadow-c:var(--lumia-passport-shadow-c,rgba(0,0,0,.1));--l-pass-info:var(--lumia-passport-info,var(--l-pass-fg));--l-pass-bg-info:var(--lumia-passport-bg-info,#2a2a2a);--l-pass-success:var(--lumia-passport-success,var(--l-pass-fg-inverted));--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,var(--l-pass-fg-inverted));--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#fff);--l-pass-bg-error:var(--lumia-passport-bg-error,#d6204e)}.lumia-scope,.lumia-scope *{margin:0;box-sizing:border-box;font-family:var(--l-pass-ff);font-optical-sizing:auto;-webkit-tap-highlight-color:transparent;-moz-tap-highlight-color:transparent;-ms-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lumia-scope button,.lumia-scope h1,.lumia-scope h2,.lumia-scope h3,.lumia-scope h4,.lumia-scope h5,.lumia-scope h6,.lumia-scope input,.lumia-scope p,.lumia-scope select,.lumia-scope textarea{font-family:var(--l-pass-ff)!important;margin:0}.lumia-scope button,.lumia-scope input,.lumia-scope select,.lumia-scope textarea{border-style:solid;outline:none!important;appearance:none!important;-webkit-appearance:none;-moz-appearance:none}.lumia-scope input,.lumia-scope textarea{font-size:16px!important}.lumia-scope .lumia-passport-button{box-shadow:0 4px 20px var(--l-pass-shadow-c),inset 0 0 0 1px var(--l-pass-bd);transition:transform .25s ease}.lumia-scope .lumia-passport-button:hover{transform:scale(1.02)}.lumia-scope .lumia-passport-button:active{transform:scale(1)}@keyframes lumia-mobile-dialog-fade-in{0%{opacity:0;transform:translateY(64px)}to{opacity:1;transform:translateY(0)}}@keyframes lumia-mobile-dialog-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(64px)}}.lumia-scope .animate-mobile-dialog-in{animation:lumia-mobile-dialog-fade-in 375ms ease}.lumia-scope .animate-mobile-dialog-out{animation:lumia-mobile-dialog-fade-out 375ms ease}@keyframes lumia-dialog-fade-in{0%{opacity:0}to{opacity:1}}@keyframes lumia-dialog-fade-out{0%{opacity:1}to{opacity:0}}.lumia-scope .animate-dialog-in{animation:lumia-dialog-fade-in 375ms ease}.lumia-scope .animate-dialog-out{animation:lumia-dialog-fade-out 375ms ease}.lumia-scope .list-scrollbar-y{width:100%;padding-right:var(--l-pass-list-scrollbar-pd-r,0);overflow-y:auto;overflow-x:hidden;max-height:var(--l-pass-scrollbar-mah,300px)}.lumia-scope .list-scrollbar-y::-webkit-scrollbar{width:4px;height:4px}.lumia-scope .list-scrollbar-y::-webkit-scrollbar-thumb{cursor:pointer;width:4px;border-radius:2px;background-color:var(--l-pass-bd)}.lumia-scope .list-scrollbar-y::-webkit-scrollbar-track{margin-top:10px;margin-bottom:10px;background-color:transparent}.lumia-scope .noScrollbars::-webkit-scrollbar{display:none}.lumia-scope div[data-radix-popper-content-wrapper]{z-index:10000!important}.lumia-scope .file\\:mr-\\[var\\(--l-pass-gap\\)\\]::file-selector-button{margin-right:var(--l-pass-gap)}.lumia-scope .file\\:h-12::file-selector-button{height:3rem}.lumia-scope .file\\:cursor-pointer::file-selector-button{cursor:pointer}.lumia-scope .file\\:rounded-\\[var\\(--l-pass-el-bdrs\\)\\]::file-selector-button{border-radius:var(--l-pass-el-bdrs)}.lumia-scope .file\\:border-0::file-selector-button{border-width:0}.lumia-scope .file\\:bg-\\[var\\(--l-pass-primary\\)\\]::file-selector-button{background-color:var(--l-pass-primary)}.lumia-scope .file\\:bg-transparent::file-selector-button{background-color:transparent}.lumia-scope .file\\:px-\\[var\\(--l-pass-pd\\)\\]::file-selector-button{padding-left:var(--l-pass-pd);padding-right:var(--l-pass-pd)}.lumia-scope .file\\:text-\\[16px\\]::file-selector-button{font-size:16px}.lumia-scope .file\\:text-base::file-selector-button{font-size:1rem;line-height:1.5rem}.lumia-scope .file\\:font-medium::file-selector-button{font-weight:500}.lumia-scope .file\\:text-\\[var\\(--l-pass-fg-inverted\\)\\]::file-selector-button{color:var(--l-pass-fg-inverted)}.lumia-scope .placeholder\\:text-\\[var\\(--l-pass-fg-muted\\)\\]::-moz-placeholder{color:var(--l-pass-fg-muted)}.lumia-scope .placeholder\\:text-\\[var\\(--l-pass-fg-muted\\)\\]::placeholder{color:var(--l-pass-fg-muted)}.lumia-scope .focus-within\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:focus-within{background-color:var(--l-pass-secondary-a)}.lumia-scope .focus-within\\:outline-none:focus-within{outline:2px solid transparent;outline-offset:2px}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-bg\\)\\]:hover{background-color:var(--l-pass-bg)}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-primary-h\\)\\]:hover{background-color:var(--l-pass-primary-h)}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-secondary-h\\)\\]:hover{background-color:var(--l-pass-secondary-h)}.lumia-scope .hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-yellow-600:hover{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:text-\\[\\#c3f53c\\]:hover{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-\\[var\\(--l-pass-fg-h\\)\\]:hover{color:var(--l-pass-fg-h)}.lumia-scope .hover\\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.lumia-scope .hover\\:underline:hover{text-decoration-line:underline}.lumia-scope .file\\:hover\\:opacity-90:hover::file-selector-button{opacity:.9}.lumia-scope .focus\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:focus{background-color:var(--l-pass-secondary-a)}.lumia-scope .focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.lumia-scope .focus\\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px}.lumia-scope .focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.lumia-scope .focus-visible\\:ring-0:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus-visible\\:ring-\\[2px\\]:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus-visible\\:ring-transparent:focus-visible{--tw-ring-color:transparent}.lumia-scope .focus-visible\\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px}.lumia-scope .active\\:bg-\\[var\\(--l-pass-bg\\)\\]:active{background-color:var(--l-pass-bg)}.lumia-scope .active\\:bg-\\[var\\(--l-pass-primary-a\\)\\]:active{background-color:var(--l-pass-primary-a)}.lumia-scope .active\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:active{background-color:var(--l-pass-secondary-a)}.lumia-scope .active\\:text-\\[\\#c3f53c\\]:active{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .active\\:text-\\[var\\(--l-pass-fg-a\\)\\]:active{color:var(--l-pass-fg-a)}.lumia-scope .file\\:active\\:opacity-80:active::file-selector-button{opacity:.8}.lumia-scope .disabled\\:cursor-default:disabled{cursor:default}.lumia-scope .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.lumia-scope .disabled\\:opacity-50:disabled{opacity:.5}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-bg\\)\\]:hover:disabled{background-color:var(--l-pass-bg)}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-primary\\)\\]:hover:disabled{background-color:var(--l-pass-primary)}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-secondary\\)\\]:hover:disabled{background-color:var(--l-pass-secondary)}.lumia-scope .disabled\\:hover\\:text-\\[var\\(--l-pass-fg\\)\\]:hover:disabled{color:var(--l-pass-fg)}.lumia-scope .disabled\\:active\\:bg-\\[var\\(--l-pass-bg\\)\\]:active:disabled{background-color:var(--l-pass-bg)}.lumia-scope .disabled\\:active\\:bg-\\[var\\(--l-pass-primary\\)\\]:active:disabled{background-color:var(--l-pass-primary)}.lumia-scope .disabled\\:active\\:text-\\[var\\(--l-pass-fg\\)\\]:active:disabled{color:var(--l-pass-fg)}.lumia-scope :is(.group:hover .group-hover\\:opacity-100){opacity:1}.lumia-scope :is(.group:hover .group-hover\\:opacity-60){opacity:.6}.lumia-scope .data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.lumia-scope .data-\\[size\\=default\\]\\:h-12[data-size=default]{height:3rem}.lumia-scope .data-\\[size\\=sm\\]\\:h-10[data-size=sm]{height:2.5rem}.lumia-scope .data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.lumia-scope .data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom],.lumia-scope .data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.lumia-scope .data-\\[side\\=right\\]\\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.lumia-scope .data-\\[side\\=right\\]\\:translate-x-1[data-side=right],.lumia-scope .data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.lumia-scope .data-\\[state\\=checked\\]\\:border-\\[var\\(--l-pass-bd-intense\\)\\][data-state=checked]{border-color:var(--l-pass-bd-intense)}.lumia-scope .data-\\[state\\=checked\\]\\:bg-\\[var\\(--l-pass-secondary\\)\\][data-state=checked]{background-color:var(--l-pass-secondary)}.lumia-scope .data-\\[state\\=checked\\]\\:text-\\[var\\(--l-pass-fg\\)\\][data-state=checked]{color:var(--l-pass-fg)}.lumia-scope .data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1[data-slot=select-value]>*){overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:flex[data-slot=select-value]>*){display:flex}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:items-center[data-slot=select-value]>*){align-items:center}.lumia-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:gap-\\[var\\(--l-pass-gap\\)\\][data-slot=select-value]>*){gap:var(--l-pass-gap)}@media (min-width:640px){.lumia-scope .sm\\:flex-row{flex-direction:row}.lumia-scope .sm\\:justify-end{justify-content:flex-end}.lumia-scope :is(.sm\\:space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope .sm\\:text-left{text-align:left}}@media (min-width:768px){.lumia-scope .md\\:h-8{height:2rem}.lumia-scope .md\\:w-8{width:2rem}.lumia-scope .md\\:gap-\\[var\\(--l-pass-gap\\)\\]{gap:var(--l-pass-gap)}.lumia-scope .md\\:py-1{padding-top:.25rem;padding-bottom:.25rem}}@media (prefers-color-scheme:dark){.lumia-scope .dark\\:bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-yellow-500:hover{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}}.lumia-scope :is(.\\[\\&_svg\\:not\\(\\[class\\*\\=\\\'size-\\\'\\]\\)\\]\\:size-4 svg:not([class*=size-])){width:1rem;height:1rem}.lumia-scope :is(.\\[\\&_svg\\]\\:pointer-events-none svg){pointer-events:none}.lumia-scope :is(.\\[\\&_svg\\]\\:shrink-0 svg){flex-shrink:0}';
|
|
4533
4533
|
|
|
4534
4534
|
// src/context/LumiaPassportContext.tsx
|
|
4535
4535
|
var import_error_tracking4 = require("@lumiapassport/core/internal/error-tracking");
|
|
4536
4536
|
var import_lodash_es4 = require("lodash-es");
|
|
4537
|
-
var
|
|
4537
|
+
var import_react61 = require("react");
|
|
4538
4538
|
init_lumiaPassport();
|
|
4539
4539
|
init_iframe_manager();
|
|
4540
4540
|
|
|
4541
4541
|
// src/context/LumiaPassportSessionContext.tsx
|
|
4542
|
-
var
|
|
4542
|
+
var import_react60 = require("react");
|
|
4543
4543
|
var import_zustand6 = require("zustand");
|
|
4544
4544
|
|
|
4545
4545
|
// src/internal/components/BalanceFeedProvider/BalanceFeedProvider.tsx
|
|
@@ -4558,7 +4558,7 @@ init_assets();
|
|
|
4558
4558
|
var LOCAL_COLOR_MODE_KEY = "lumia-passport-theme";
|
|
4559
4559
|
var DEFAULT_AUTH_MENU_HEIGHT = 253;
|
|
4560
4560
|
var DEFAULT_MAIN_MENU_HEIGHT = 90;
|
|
4561
|
-
var DEFAULT_SETTINGS_MENU_HEIGHT =
|
|
4561
|
+
var DEFAULT_SETTINGS_MENU_HEIGHT = 404;
|
|
4562
4562
|
var MAX_CONTENT_HEIGHT = 640;
|
|
4563
4563
|
var MAIN_DIALOG_ANIMATION_SPEED = 375;
|
|
4564
4564
|
var Y_ANIMATION_SETUP = { duration: 0.15, ease: "easeInOut", height: { duration: 0.375 } };
|
|
@@ -4718,7 +4718,7 @@ function BalanceFeedProvider() {
|
|
|
4718
4718
|
|
|
4719
4719
|
// src/internal/components/Dialog/LumiaPassportDialog.tsx
|
|
4720
4720
|
var import_framer_motion3 = require("framer-motion");
|
|
4721
|
-
var
|
|
4721
|
+
var import_react57 = require("react");
|
|
4722
4722
|
|
|
4723
4723
|
// src/internal/components/Footer/Footer.tsx
|
|
4724
4724
|
var import_react_query2 = require("@tanstack/react-query");
|
|
@@ -5398,17 +5398,14 @@ function formatAddress(addr) {
|
|
|
5398
5398
|
return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
|
|
5399
5399
|
}
|
|
5400
5400
|
function Header() {
|
|
5401
|
-
const
|
|
5402
|
-
config: { current: config }
|
|
5403
|
-
} = useLumiaPassportConfig();
|
|
5401
|
+
const config = useLumiaPassportConfig().config;
|
|
5404
5402
|
const address = useLumiaPassportSession((st) => st.address);
|
|
5405
5403
|
const [copied, setCopied] = (0, import_react5.useState)(false);
|
|
5406
|
-
const { data: profile } = (0, import_react_query5.useQuery)({
|
|
5407
|
-
|
|
5408
|
-
queryFn: getUserProfile,
|
|
5404
|
+
const { data: profile, isLoading: isProfileLoading } = (0, import_react_query5.useQuery)({
|
|
5405
|
+
retry: false,
|
|
5409
5406
|
enabled: !!address,
|
|
5410
|
-
|
|
5411
|
-
|
|
5407
|
+
queryKey: [QUERY_KEYS.userProfile, address],
|
|
5408
|
+
queryFn: getUserProfile
|
|
5412
5409
|
});
|
|
5413
5410
|
const avatar = profile?.avatar || import_auth3.jwtTokenManager.getAvatar();
|
|
5414
5411
|
const displayName = profile?.nicknameDisplay || profile?.displayName || import_auth3.jwtTokenManager.getDisplayName();
|
|
@@ -5428,20 +5425,23 @@ function Header() {
|
|
|
5428
5425
|
style: { width: "calc(100% - 48px - var(--l-pass-gap))" },
|
|
5429
5426
|
className: "flex-1 flex flex-col justify-center gap-1",
|
|
5430
5427
|
children: [
|
|
5431
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.
|
|
5432
|
-
|
|
5433
|
-
|
|
5434
|
-
|
|
5435
|
-
|
|
5436
|
-
|
|
5437
|
-
|
|
5438
|
-
|
|
5439
|
-
|
|
5440
|
-
|
|
5441
|
-
|
|
5442
|
-
|
|
5443
|
-
|
|
5444
|
-
|
|
5428
|
+
isProfileLoading && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react7.Loader, { className: "w-4 h-4 animate-spin" }),
|
|
5429
|
+
!!address && !isProfileLoading && !!profile && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
|
|
5430
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "w-full flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
5431
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
5432
|
+
"span",
|
|
5433
|
+
{
|
|
5434
|
+
className: cn(
|
|
5435
|
+
"text-[14px] leading-4 truncate max-w-[144px] font-medium",
|
|
5436
|
+
"text-ellipsis overflow-hidden whitespace-nowrap"
|
|
5437
|
+
),
|
|
5438
|
+
children: displayName || config.current?.ui?.title || "LumiaPassport"
|
|
5439
|
+
}
|
|
5440
|
+
),
|
|
5441
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(KYCStatus, {})
|
|
5442
|
+
] }),
|
|
5443
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(BalanceView, {})
|
|
5444
|
+
] })
|
|
5445
5445
|
]
|
|
5446
5446
|
}
|
|
5447
5447
|
)
|
|
@@ -5501,13 +5501,11 @@ function Header() {
|
|
|
5501
5501
|
}
|
|
5502
5502
|
);
|
|
5503
5503
|
}
|
|
5504
|
-
{
|
|
5505
|
-
}
|
|
5506
5504
|
|
|
5507
5505
|
// package.json
|
|
5508
5506
|
var package_default = {
|
|
5509
5507
|
name: "@lumiapassport/ui-kit",
|
|
5510
|
-
version: "1.14.
|
|
5508
|
+
version: "1.14.25",
|
|
5511
5509
|
description: "React UI components and hooks for Lumia Passport authentication and Account Abstraction",
|
|
5512
5510
|
type: "module",
|
|
5513
5511
|
main: "./dist/index.cjs",
|
|
@@ -5946,6 +5944,7 @@ var import_react9 = require("react");
|
|
|
5946
5944
|
init_vaultClient();
|
|
5947
5945
|
function useBackupStatusChanges() {
|
|
5948
5946
|
const setHasServerVault = useLumiaPassportSession((st) => st.setHasServerVault);
|
|
5947
|
+
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
5949
5948
|
const { mutate: handleBackupStatusChanged } = (0, import_react_query6.useMutation)({
|
|
5950
5949
|
mutationFn: async (event) => {
|
|
5951
5950
|
const customEvent = event;
|
|
@@ -5957,6 +5956,7 @@ function useBackupStatusChanges() {
|
|
|
5957
5956
|
setHasServerVault(true);
|
|
5958
5957
|
} else {
|
|
5959
5958
|
setHasServerVault(false);
|
|
5959
|
+
setPage("keysare-backup" /* KEYSARE_BACKUP */);
|
|
5960
5960
|
console.warn("[BACKUP STATUS] No recovery data found in vault, marking as no-server-vault");
|
|
5961
5961
|
}
|
|
5962
5962
|
},
|
|
@@ -5973,74 +5973,15 @@ function useBackupStatusChanges() {
|
|
|
5973
5973
|
}, []);
|
|
5974
5974
|
}
|
|
5975
5975
|
|
|
5976
|
-
// src/internal/hooks/useBackupWarning.ts
|
|
5977
|
-
var import_react10 = require("react");
|
|
5978
|
-
var WARNING_TIMEOUT_MS = 4500;
|
|
5979
|
-
function useBackupWarning() {
|
|
5980
|
-
const address = useLumiaPassportSession((st) => st.address);
|
|
5981
|
-
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
5982
|
-
const page = useLayoutDataStore((st) => st.page);
|
|
5983
|
-
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
5984
|
-
const timeoutRef = (0, import_react10.useRef)(null);
|
|
5985
|
-
const touchedRef = (0, import_react10.useRef)(false);
|
|
5986
|
-
(0, import_react10.useEffect)(() => {
|
|
5987
|
-
if (touchedRef.current) return;
|
|
5988
|
-
if (timeoutRef.current) {
|
|
5989
|
-
clearTimeout(timeoutRef.current);
|
|
5990
|
-
timeoutRef.current = null;
|
|
5991
|
-
}
|
|
5992
|
-
if (!address || !!hasServerVault || page === "keysare-backup" /* KEYSARE_BACKUP */) return;
|
|
5993
|
-
timeoutRef.current = setTimeout(() => {
|
|
5994
|
-
setPage("keysare-backup" /* KEYSARE_BACKUP */);
|
|
5995
|
-
touchedRef.current = true;
|
|
5996
|
-
timeoutRef.current = null;
|
|
5997
|
-
}, WARNING_TIMEOUT_MS);
|
|
5998
|
-
return () => {
|
|
5999
|
-
if (timeoutRef.current) {
|
|
6000
|
-
clearTimeout(timeoutRef.current);
|
|
6001
|
-
timeoutRef.current = null;
|
|
6002
|
-
}
|
|
6003
|
-
};
|
|
6004
|
-
}, [address, page, hasServerVault, setPage]);
|
|
6005
|
-
return null;
|
|
6006
|
-
}
|
|
6007
|
-
|
|
6008
|
-
// src/internal/hooks/useCheckVaultStatus.ts
|
|
6009
|
-
var import_react_query7 = require("@tanstack/react-query");
|
|
6010
|
-
var import_react11 = require("react");
|
|
6011
|
-
init_vaultClient();
|
|
6012
|
-
function useCheckVaultStatus() {
|
|
6013
|
-
const address = useLumiaPassportSession((st) => st.address);
|
|
6014
|
-
const setHasServerVault = useLumiaPassportSession((st) => st.setHasServerVault);
|
|
6015
|
-
const { mutate: checkVaultStatus } = (0, import_react_query7.useMutation)({
|
|
6016
|
-
mutationFn: async () => {
|
|
6017
|
-
const stats = await getShareRecoveryStats();
|
|
6018
|
-
const hasRecoveryData = stats && (stats.created || stats.devices && stats.devices.length > 0);
|
|
6019
|
-
return !!hasRecoveryData;
|
|
6020
|
-
},
|
|
6021
|
-
onSuccess: (hasRecoveryData) => {
|
|
6022
|
-
setHasServerVault(hasRecoveryData);
|
|
6023
|
-
},
|
|
6024
|
-
onError: (error) => {
|
|
6025
|
-
console.warn("[UI-KIT] Failed to check vault status:", error);
|
|
6026
|
-
setHasServerVault(false);
|
|
6027
|
-
}
|
|
6028
|
-
});
|
|
6029
|
-
(0, import_react11.useEffect)(() => {
|
|
6030
|
-
if (!address) return setHasServerVault(false);
|
|
6031
|
-
checkVaultStatus();
|
|
6032
|
-
}, [address, checkVaultStatus]);
|
|
6033
|
-
}
|
|
6034
|
-
|
|
6035
5976
|
// src/internal/hooks/useDetectMaxScrollHeight.ts
|
|
6036
5977
|
var import_lodash_es2 = require("lodash-es");
|
|
6037
|
-
var
|
|
5978
|
+
var import_react10 = require("react");
|
|
6038
5979
|
var DEBOUNCE_DELAY = 50;
|
|
6039
5980
|
function useDetectMaxScrollHeight() {
|
|
6040
5981
|
const page = useLayoutDataStore((state) => state.page);
|
|
6041
5982
|
const setIsMobileView = useLayoutStore((state) => state.setIsMobileView);
|
|
6042
5983
|
const setMaxScrollHeight = useLayoutStore((state) => state.setMaxScrollHeight);
|
|
6043
|
-
const onResize = (0,
|
|
5984
|
+
const onResize = (0, import_react10.useCallback)(
|
|
6044
5985
|
(0, import_lodash_es2.debounce)(({ width, height }) => {
|
|
6045
5986
|
const headerHeight = page === "auth" /* AUTH */ || page === "keyshare-restore" /* KEYSHARE_RESTORE */ ? 0 : 116;
|
|
6046
5987
|
const limContentHeight = height * 0.92 - headerHeight - 57;
|
|
@@ -6049,7 +5990,7 @@ function useDetectMaxScrollHeight() {
|
|
|
6049
5990
|
}, DEBOUNCE_DELAY),
|
|
6050
5991
|
[page, setMaxScrollHeight, setIsMobileView]
|
|
6051
5992
|
);
|
|
6052
|
-
(0,
|
|
5993
|
+
(0, import_react10.useEffect)(() => {
|
|
6053
5994
|
const obs = new ResizeObserver(([entry]) => onResize(entry.contentRect));
|
|
6054
5995
|
const doc = window.document.getElementsByTagName("html")[0];
|
|
6055
5996
|
if (doc) obs.observe(doc);
|
|
@@ -6058,24 +5999,24 @@ function useDetectMaxScrollHeight() {
|
|
|
6058
5999
|
}
|
|
6059
6000
|
|
|
6060
6001
|
// src/internal/hooks/usePageMapper.tsx
|
|
6061
|
-
var
|
|
6002
|
+
var import_react54 = require("react");
|
|
6062
6003
|
|
|
6063
6004
|
// src/internal/components/AuthMenu/AuthMenu.tsx
|
|
6064
6005
|
var import_framer_motion = require("framer-motion");
|
|
6065
6006
|
var import_lucide_react14 = require("lucide-react");
|
|
6066
|
-
var
|
|
6007
|
+
var import_react19 = require("react");
|
|
6067
6008
|
|
|
6068
6009
|
// src/internal/components/Expandable/hooks/useExpandable.ts
|
|
6069
|
-
var
|
|
6010
|
+
var import_react11 = require("react");
|
|
6070
6011
|
var useExpandable = (props) => {
|
|
6071
6012
|
const { isExpanded = false, children, initHeight = 0, minHeight = 0 } = props;
|
|
6072
|
-
const expandableRef = (0,
|
|
6073
|
-
const contentRef = (0,
|
|
6074
|
-
(0,
|
|
6013
|
+
const expandableRef = (0, import_react11.useRef)(null);
|
|
6014
|
+
const contentRef = (0, import_react11.useRef)(null);
|
|
6015
|
+
(0, import_react11.useEffect)(() => {
|
|
6075
6016
|
if (!expandableRef.current) return;
|
|
6076
6017
|
expandableRef.current.style.setProperty("--ifo-basic-expandable-h", `${initHeight}px )`);
|
|
6077
6018
|
}, []);
|
|
6078
|
-
const setExpandableHeight = (0,
|
|
6019
|
+
const setExpandableHeight = (0, import_react11.useCallback)(
|
|
6079
6020
|
(isExpnd) => {
|
|
6080
6021
|
if (!contentRef.current || !expandableRef.current) return;
|
|
6081
6022
|
expandableRef.current.style.setProperty(
|
|
@@ -6086,7 +6027,7 @@ var useExpandable = (props) => {
|
|
|
6086
6027
|
// ON_RESIZE_DELEAY),
|
|
6087
6028
|
[minHeight]
|
|
6088
6029
|
);
|
|
6089
|
-
(0,
|
|
6030
|
+
(0, import_react11.useEffect)(() => {
|
|
6090
6031
|
if (!contentRef.current || !expandableRef.current) return;
|
|
6091
6032
|
const obs = new ResizeObserver(() => setExpandableHeight(isExpanded));
|
|
6092
6033
|
obs.observe(expandableRef.current);
|
|
@@ -6216,7 +6157,7 @@ function AuthFailedStep() {
|
|
|
6216
6157
|
|
|
6217
6158
|
// src/internal/components/AuthMenu/PassKeyStep.tsx
|
|
6218
6159
|
var import_lucide_react10 = require("lucide-react");
|
|
6219
|
-
var
|
|
6160
|
+
var import_react12 = require("react");
|
|
6220
6161
|
|
|
6221
6162
|
// src/internal/assets/PasskeyAddIcon.tsx
|
|
6222
6163
|
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
@@ -6270,7 +6211,7 @@ function PassKeyStep(props) {
|
|
|
6270
6211
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
6271
6212
|
const autoCloseOnSuccess = !recoveryUserId;
|
|
6272
6213
|
const { passkeyStatus, setStep, setPasskeyStatus, setAlert, setEmail, setFailedType } = useAuthStore();
|
|
6273
|
-
const onPasskeyRegister = (0,
|
|
6214
|
+
const onPasskeyRegister = (0, import_react12.useCallback)(async () => {
|
|
6274
6215
|
setAlert(null);
|
|
6275
6216
|
setPasskeyStatus("registering passkey...");
|
|
6276
6217
|
setIsLoading(true);
|
|
@@ -6329,7 +6270,7 @@ function PassKeyStep(props) {
|
|
|
6329
6270
|
setIsLoading(false);
|
|
6330
6271
|
}
|
|
6331
6272
|
}, [onAuthSuccess, setPage, callbacks]);
|
|
6332
|
-
const onPasskeyAuth = (0,
|
|
6273
|
+
const onPasskeyAuth = (0, import_react12.useCallback)(async () => {
|
|
6333
6274
|
setAlert(null);
|
|
6334
6275
|
setPasskeyStatus("checking available passkeys...");
|
|
6335
6276
|
setIsLoading(true);
|
|
@@ -6454,22 +6395,22 @@ function PassKeyStep(props) {
|
|
|
6454
6395
|
|
|
6455
6396
|
// src/internal/components/AuthMenu/SignInStep/SignInStep.tsx
|
|
6456
6397
|
var import_lucide_react12 = require("lucide-react");
|
|
6457
|
-
var
|
|
6398
|
+
var import_react16 = require("react");
|
|
6458
6399
|
|
|
6459
6400
|
// src/internal/components/AuthMenu/SignInStep/Email.tsx
|
|
6460
6401
|
init_lumiaPassport();
|
|
6461
|
-
var
|
|
6402
|
+
var import_react_query7 = require("@tanstack/react-query");
|
|
6462
6403
|
var import_lucide_react11 = require("lucide-react");
|
|
6463
|
-
var
|
|
6404
|
+
var import_react14 = require("react");
|
|
6464
6405
|
init_projectId();
|
|
6465
6406
|
|
|
6466
6407
|
// src/internal/components/ui/input.tsx
|
|
6467
|
-
var
|
|
6408
|
+
var import_react13 = __toESM(require("react"), 1);
|
|
6468
6409
|
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
6469
|
-
var Input =
|
|
6410
|
+
var Input = import_react13.default.forwardRef((props, ref) => {
|
|
6470
6411
|
const { className, disabled, error, Icon: Icon2, element, ...inputProps } = props;
|
|
6471
|
-
const internalRef = (0,
|
|
6472
|
-
(0,
|
|
6412
|
+
const internalRef = (0, import_react13.useRef)(null);
|
|
6413
|
+
(0, import_react13.useImperativeHandle)(ref, () => internalRef.current);
|
|
6473
6414
|
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: cn("w-full flex flex-col gap-1", className), children: [
|
|
6474
6415
|
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
6475
6416
|
"div",
|
|
@@ -6516,11 +6457,11 @@ Input.displayName = "Input";
|
|
|
6516
6457
|
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
6517
6458
|
function Email() {
|
|
6518
6459
|
const { config, callbacks } = useLumiaPassportConfig();
|
|
6519
|
-
const buttonRef = (0,
|
|
6460
|
+
const buttonRef = (0, import_react14.useRef)(null);
|
|
6520
6461
|
const isLoading = useLumiaPassportSession((st) => st.isLoading);
|
|
6521
6462
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
6522
6463
|
const { email, alert: alert2, setEmail, setExpiresIn, setStep, setAlert } = useAuthStore();
|
|
6523
|
-
const { mutate: onSendVerificationCode } = (0,
|
|
6464
|
+
const { mutate: onSendVerificationCode } = (0, import_react_query7.useMutation)({
|
|
6524
6465
|
mutationFn: async (mail) => {
|
|
6525
6466
|
const isEmailValid = mail.length !== 0 && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(mail);
|
|
6526
6467
|
if (!isEmailValid) {
|
|
@@ -6618,7 +6559,7 @@ function Email() {
|
|
|
6618
6559
|
// src/internal/components/AuthMenu/SignInStep/Social.tsx
|
|
6619
6560
|
init_assets();
|
|
6620
6561
|
init_lumiaPassport();
|
|
6621
|
-
var
|
|
6562
|
+
var import_react15 = require("react");
|
|
6622
6563
|
init_auth();
|
|
6623
6564
|
init_projectId();
|
|
6624
6565
|
|
|
@@ -6790,7 +6731,7 @@ function Social(props) {
|
|
|
6790
6731
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
6791
6732
|
const setIsWalletLinking = useLayoutDataStore((st) => st.setIsWalletLinking);
|
|
6792
6733
|
const { alert: alert2, setStep, setEmail, setFailedType, setAlert, setPasskeyStatus } = useAuthStore();
|
|
6793
|
-
const onSocialAuth = (0,
|
|
6734
|
+
const onSocialAuth = (0, import_react15.useCallback)(
|
|
6794
6735
|
async (providerId) => {
|
|
6795
6736
|
const normalizedProviderId = providerId.toLowerCase();
|
|
6796
6737
|
const provider = config.current?.social?.providers?.find(
|
|
@@ -7091,7 +7032,7 @@ function SignInStep(props) {
|
|
|
7091
7032
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react12.UserCircle, { className: "w-6 h-6" }),
|
|
7092
7033
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "font-bold text-xl leading-6", children: "Sign In" })
|
|
7093
7034
|
] }),
|
|
7094
|
-
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: enabledSigninMethods.map((kind, idx) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
|
|
7035
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: enabledSigninMethods.map((kind, idx) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_react16.Fragment, { children: [
|
|
7095
7036
|
idx > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center h-4", children: [
|
|
7096
7037
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { style: { borderTop: "1px solid var(--l-pass-bd)" }, className: "flex-1" }),
|
|
7097
7038
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "text-[10px] px-2 flex-none leading-4", children: "Or sign in using" }),
|
|
@@ -7116,16 +7057,16 @@ function SignInStep(props) {
|
|
|
7116
7057
|
}
|
|
7117
7058
|
|
|
7118
7059
|
// src/internal/components/AuthMenu/useAuthMenuHanders.ts
|
|
7119
|
-
var
|
|
7120
|
-
var
|
|
7060
|
+
var import_react_query8 = require("@tanstack/react-query");
|
|
7061
|
+
var import_react17 = require("react");
|
|
7121
7062
|
init_auth();
|
|
7122
7063
|
function useAuthMenuHandlers() {
|
|
7123
7064
|
const { config, callbacks } = useLumiaPassportConfig();
|
|
7124
|
-
const qc = (0,
|
|
7125
|
-
const pendingLoginResponseRef = (0,
|
|
7065
|
+
const qc = (0, import_react_query8.useQueryClient)();
|
|
7066
|
+
const pendingLoginResponseRef = (0, import_react17.useRef)(null);
|
|
7126
7067
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
7127
7068
|
const setIsDialogForced = useLayoutStore((st) => st.setIsDialogForced);
|
|
7128
|
-
const [telegramCleanup, setTelegramCleanup] = (0,
|
|
7069
|
+
const [telegramCleanup, setTelegramCleanup] = (0, import_react17.useState)(null);
|
|
7129
7070
|
const {
|
|
7130
7071
|
usePaymaster,
|
|
7131
7072
|
setError,
|
|
@@ -7138,7 +7079,7 @@ function useAuthMenuHandlers() {
|
|
|
7138
7079
|
} = useLumiaPassportSession();
|
|
7139
7080
|
const setStep = useAuthStore((st) => st.setStep);
|
|
7140
7081
|
const setAlert = useAuthStore((st) => st.setAlert);
|
|
7141
|
-
const createSessionWithKeyshare = (0,
|
|
7082
|
+
const createSessionWithKeyshare = (0, import_react17.useCallback)(
|
|
7142
7083
|
async (userId, hasServerKeyshare, isNewUser) => {
|
|
7143
7084
|
try {
|
|
7144
7085
|
try {
|
|
@@ -7172,7 +7113,7 @@ function useAuthMenuHandlers() {
|
|
|
7172
7113
|
},
|
|
7173
7114
|
[setStatus, callbacks, usePaymaster]
|
|
7174
7115
|
);
|
|
7175
|
-
const onAuthSuccess = (0,
|
|
7116
|
+
const onAuthSuccess = (0, import_react17.useCallback)(async () => {
|
|
7176
7117
|
setIsLoading(true);
|
|
7177
7118
|
const loginResponse = pendingLoginResponseRef.current;
|
|
7178
7119
|
if (!loginResponse || !loginResponse.userId) {
|
|
@@ -7207,6 +7148,7 @@ function useAuthMenuHandlers() {
|
|
|
7207
7148
|
callbacks?.onLumiaPassportAccount?.({ userId, address: addr, session: sess, hasKeyshare: hasServerKeyshare });
|
|
7208
7149
|
} catch {
|
|
7209
7150
|
}
|
|
7151
|
+
let hasKeyshareVaultBackup = false;
|
|
7210
7152
|
try {
|
|
7211
7153
|
const { checkServerBackupAvailability: checkServerBackupAvailability2, updateBackupStatus: updateBackupStatus2, getShareRecoveryStats: getShareRecoveryStats2 } = await Promise.resolve().then(() => (init_vaultClient(), vaultClient_exports));
|
|
7212
7154
|
const result = await checkServerBackupAvailability2();
|
|
@@ -7216,8 +7158,8 @@ function useAuthMenuHandlers() {
|
|
|
7216
7158
|
updateBackupStatus2(userId, "server", { enabled: false, error: "No server vault found" });
|
|
7217
7159
|
}
|
|
7218
7160
|
const stats = await getShareRecoveryStats2();
|
|
7219
|
-
|
|
7220
|
-
setHasServerVault(!!
|
|
7161
|
+
hasKeyshareVaultBackup = !!stats && (!!stats.created || !!stats.devices && stats.devices.length > 0);
|
|
7162
|
+
setHasServerVault(!!hasKeyshareVaultBackup);
|
|
7221
7163
|
qc.refetchQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY, addr] });
|
|
7222
7164
|
} catch (e) {
|
|
7223
7165
|
console.warn("[UI-KIT] Vault status check failed:", e);
|
|
@@ -7225,13 +7167,17 @@ function useAuthMenuHandlers() {
|
|
|
7225
7167
|
setSession(sess);
|
|
7226
7168
|
setAddress(addr);
|
|
7227
7169
|
setStatus("ready");
|
|
7228
|
-
|
|
7229
|
-
|
|
7230
|
-
|
|
7231
|
-
|
|
7232
|
-
|
|
7233
|
-
|
|
7234
|
-
|
|
7170
|
+
setTimeout(() => {
|
|
7171
|
+
if (!!jwt?.isNewUser || !hasKeyshareVaultBackup) {
|
|
7172
|
+
if (!!jwt?.isNewUser) console.log("[AuthMenu] New user detected - forcing backup flow");
|
|
7173
|
+
if (!hasKeyshareVaultBackup) console.log("[AuthMenu] No recovery data found - forcing backup flow");
|
|
7174
|
+
setIsDialogForced(true);
|
|
7175
|
+
setPage("keysare-backup" /* KEYSARE_BACKUP */);
|
|
7176
|
+
} else {
|
|
7177
|
+
setIsDialogForced(false);
|
|
7178
|
+
setPage(null);
|
|
7179
|
+
}
|
|
7180
|
+
}, 100);
|
|
7235
7181
|
} catch (error) {
|
|
7236
7182
|
if (error?.code === "KEYSHARE_RECOVERY_NEEDED") {
|
|
7237
7183
|
console.warn("[AuthMenu] Keyshare recovery needed for user:", userId);
|
|
@@ -7239,7 +7185,9 @@ function useAuthMenuHandlers() {
|
|
|
7239
7185
|
setError(null);
|
|
7240
7186
|
setRecoveryUserId(userId);
|
|
7241
7187
|
setStatus("recovery_needed");
|
|
7242
|
-
setTimeout(() =>
|
|
7188
|
+
setTimeout(() => {
|
|
7189
|
+
setPage("keyshare-restore" /* KEYSHARE_RESTORE */);
|
|
7190
|
+
}, 100);
|
|
7243
7191
|
} else {
|
|
7244
7192
|
pendingLoginResponseRef.current = null;
|
|
7245
7193
|
await import_auth3.jwtTokenManager.clearTokens();
|
|
@@ -7255,7 +7203,6 @@ function useAuthMenuHandlers() {
|
|
|
7255
7203
|
setIsLoading(false);
|
|
7256
7204
|
}
|
|
7257
7205
|
}, [
|
|
7258
|
-
// config.projectId,
|
|
7259
7206
|
qc,
|
|
7260
7207
|
callbacks,
|
|
7261
7208
|
setPage,
|
|
@@ -7269,7 +7216,7 @@ function useAuthMenuHandlers() {
|
|
|
7269
7216
|
setIsDialogForced,
|
|
7270
7217
|
createSessionWithKeyshare
|
|
7271
7218
|
]);
|
|
7272
|
-
const goBackToSignIn = (0,
|
|
7219
|
+
const goBackToSignIn = (0, import_react17.useCallback)(() => {
|
|
7273
7220
|
setStep("signin");
|
|
7274
7221
|
setAlert(null);
|
|
7275
7222
|
if (telegramCleanup) {
|
|
@@ -7286,7 +7233,7 @@ function useAuthMenuHandlers() {
|
|
|
7286
7233
|
|
|
7287
7234
|
// src/internal/components/AuthMenu/VerifyStep/VerifyStep.tsx
|
|
7288
7235
|
init_lumiaPassport();
|
|
7289
|
-
var
|
|
7236
|
+
var import_react_query9 = require("@tanstack/react-query");
|
|
7290
7237
|
var import_lucide_react13 = require("lucide-react");
|
|
7291
7238
|
|
|
7292
7239
|
// src/internal/assets/OtpIcon.tsx
|
|
@@ -7306,21 +7253,21 @@ function OtpIcon(props) {
|
|
|
7306
7253
|
init_projectId();
|
|
7307
7254
|
|
|
7308
7255
|
// src/internal/components/AuthMenu/VerifyStep/VerificationCodeInput.tsx
|
|
7309
|
-
var
|
|
7256
|
+
var import_react18 = require("react");
|
|
7310
7257
|
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
7311
7258
|
var VerificationCodeInput = (props) => {
|
|
7312
7259
|
const { onVerifyCode, onResendCode, isLoading, expiresIn } = props;
|
|
7313
7260
|
const setAlert = useAuthStore((st) => st.setAlert);
|
|
7314
|
-
const [timeLeft, setTimeLeft] = (0,
|
|
7315
|
-
(0,
|
|
7316
|
-
(0,
|
|
7261
|
+
const [timeLeft, setTimeLeft] = (0, import_react18.useState)(expiresIn);
|
|
7262
|
+
(0, import_react18.useEffect)(() => setTimeLeft(expiresIn), [expiresIn]);
|
|
7263
|
+
(0, import_react18.useEffect)(() => {
|
|
7317
7264
|
const t = setInterval(() => setTimeLeft((secs) => secs > 0 ? secs - 1 : 0), 1e3);
|
|
7318
7265
|
return () => clearInterval(t);
|
|
7319
7266
|
}, []);
|
|
7320
|
-
const lastSubmittedRef = (0,
|
|
7321
|
-
const inputsRef = (0,
|
|
7322
|
-
const [digits, setDigits] = (0,
|
|
7323
|
-
(0,
|
|
7267
|
+
const lastSubmittedRef = (0, import_react18.useRef)(null);
|
|
7268
|
+
const inputsRef = (0, import_react18.useRef)([]);
|
|
7269
|
+
const [digits, setDigits] = (0, import_react18.useState)(["", "", "", "", "", ""]);
|
|
7270
|
+
(0, import_react18.useEffect)(() => {
|
|
7324
7271
|
const code = digits.join("");
|
|
7325
7272
|
if (code.length === 6 && digits.every((d) => d !== "") && !isLoading) {
|
|
7326
7273
|
if (lastSubmittedRef.current !== code) {
|
|
@@ -7329,7 +7276,7 @@ var VerificationCodeInput = (props) => {
|
|
|
7329
7276
|
}
|
|
7330
7277
|
}
|
|
7331
7278
|
}, [digits, isLoading, onVerifyCode]);
|
|
7332
|
-
(0,
|
|
7279
|
+
(0, import_react18.useEffect)(() => {
|
|
7333
7280
|
const t = setTimeout(() => {
|
|
7334
7281
|
inputsRef.current[0]?.focus();
|
|
7335
7282
|
}, 0);
|
|
@@ -7441,10 +7388,9 @@ var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
|
7441
7388
|
function VerifyStep(props) {
|
|
7442
7389
|
const { pendingLoginResponseRef, goBackToSignIn, onAuthSuccess } = props;
|
|
7443
7390
|
const { callbacks } = useLumiaPassportConfig();
|
|
7444
|
-
const
|
|
7391
|
+
const recoveryUserId = useLumiaPassportSession((st) => st.recoveryUserId);
|
|
7445
7392
|
const isSessionLoading = useLumiaPassportSession((st) => st.isLoading);
|
|
7446
7393
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
7447
|
-
const recoveryUserId = useLumiaPassportSession((st) => st.recoveryUserId);
|
|
7448
7394
|
const {
|
|
7449
7395
|
email,
|
|
7450
7396
|
expiresIn,
|
|
@@ -7454,7 +7400,7 @@ function VerifyStep(props) {
|
|
|
7454
7400
|
setExpiresIn,
|
|
7455
7401
|
setAlert
|
|
7456
7402
|
} = useAuthStore();
|
|
7457
|
-
const { mutate: onVerifyCode, isPending: isCodeVerifying } = (0,
|
|
7403
|
+
const { mutate: onVerifyCode, isPending: isCodeVerifying } = (0, import_react_query9.useMutation)({
|
|
7458
7404
|
mutationFn: async (code) => {
|
|
7459
7405
|
setIsLoading(true);
|
|
7460
7406
|
setAlert(null);
|
|
@@ -7489,14 +7435,13 @@ function VerifyStep(props) {
|
|
|
7489
7435
|
const storage = typeof window !== "undefined" ? window.localStorage : void 0;
|
|
7490
7436
|
const localKeyshare = storage?.getItem(`tss.${loginResponse.userId}.keyshare`);
|
|
7491
7437
|
const needsRecovery = loginResponse.hasKeyshare && !loginResponse.isNewUser && !localKeyshare;
|
|
7492
|
-
await onAuthSuccess?.();
|
|
7493
|
-
console.log("[AuthModal] Authentication successful, closing modal");
|
|
7494
7438
|
if (!recoveryUserId && !needsRecovery) {
|
|
7495
7439
|
setStep("signin");
|
|
7496
7440
|
setEmail("");
|
|
7497
7441
|
setAlert(null);
|
|
7498
|
-
setPage(null);
|
|
7499
7442
|
}
|
|
7443
|
+
await onAuthSuccess?.();
|
|
7444
|
+
console.log("[AuthModal] Authentication successful");
|
|
7500
7445
|
setIsLoading(false);
|
|
7501
7446
|
},
|
|
7502
7447
|
onError: (error) => {
|
|
@@ -7521,7 +7466,7 @@ function VerifyStep(props) {
|
|
|
7521
7466
|
setIsLoading(false);
|
|
7522
7467
|
}
|
|
7523
7468
|
});
|
|
7524
|
-
const { mutate: onResendCode, isPending: isCodeResending } = (0,
|
|
7469
|
+
const { mutate: onResendCode, isPending: isCodeResending } = (0, import_react_query9.useMutation)({
|
|
7525
7470
|
mutationFn: async () => {
|
|
7526
7471
|
setAlert(null);
|
|
7527
7472
|
setIsLoading(true);
|
|
@@ -7607,9 +7552,9 @@ var AuthMenu = () => {
|
|
|
7607
7552
|
const setMainPageHeight = useLayoutDataStore((st) => st.setMainPageHeight);
|
|
7608
7553
|
const { step, alert: alert2, setStep, setPasskeyStatus, setEmail, setAlert } = useAuthStore();
|
|
7609
7554
|
const { pendingLoginResponseRef, onAuthSuccess, goBackToSignIn } = useAuthMenuHandlers();
|
|
7610
|
-
const [isAlertShowReady, setIsAlertShowReady] = (0,
|
|
7611
|
-
const readyTimeout = (0,
|
|
7612
|
-
(0,
|
|
7555
|
+
const [isAlertShowReady, setIsAlertShowReady] = (0, import_react19.useState)(false);
|
|
7556
|
+
const readyTimeout = (0, import_react19.useRef)(null);
|
|
7557
|
+
(0, import_react19.useEffect)(() => {
|
|
7613
7558
|
if (readyTimeout.current) {
|
|
7614
7559
|
clearTimeout(readyTimeout.current);
|
|
7615
7560
|
readyTimeout.current = null;
|
|
@@ -7617,7 +7562,7 @@ var AuthMenu = () => {
|
|
|
7617
7562
|
setIsAlertShowReady(false);
|
|
7618
7563
|
readyTimeout.current = setTimeout(() => setIsAlertShowReady(true), 750);
|
|
7619
7564
|
}, [step]);
|
|
7620
|
-
(0,
|
|
7565
|
+
(0, import_react19.useEffect)(() => {
|
|
7621
7566
|
setMainPageHeight(DEFAULT_AUTH_MENU_HEIGHT);
|
|
7622
7567
|
return () => {
|
|
7623
7568
|
setStep("signin");
|
|
@@ -7633,7 +7578,7 @@ var AuthMenu = () => {
|
|
|
7633
7578
|
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "text-sm text-[var(--l-pass-fg-muted)]", children: "Initializing wallet..." })
|
|
7634
7579
|
] });
|
|
7635
7580
|
}
|
|
7636
|
-
const stepContent = (0,
|
|
7581
|
+
const stepContent = (0, import_react19.useMemo)(
|
|
7637
7582
|
() => ({
|
|
7638
7583
|
"failed": /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(AuthFailedStep, {}),
|
|
7639
7584
|
"verify": /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
@@ -7644,20 +7589,8 @@ var AuthMenu = () => {
|
|
|
7644
7589
|
onAuthSuccess
|
|
7645
7590
|
}
|
|
7646
7591
|
),
|
|
7647
|
-
"signin": /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
7648
|
-
|
|
7649
|
-
{
|
|
7650
|
-
pendingLoginResponseRef,
|
|
7651
|
-
onAuthSuccess
|
|
7652
|
-
}
|
|
7653
|
-
),
|
|
7654
|
-
"signin-passkey": /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
7655
|
-
PassKeyStep,
|
|
7656
|
-
{
|
|
7657
|
-
pendingLoginResponseRef,
|
|
7658
|
-
onAuthSuccess
|
|
7659
|
-
}
|
|
7660
|
-
)
|
|
7592
|
+
"signin": /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(SignInStep, { pendingLoginResponseRef, onAuthSuccess }),
|
|
7593
|
+
"signin-passkey": /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(PassKeyStep, { pendingLoginResponseRef, onAuthSuccess })
|
|
7661
7594
|
}),
|
|
7662
7595
|
[onAuthSuccess, goBackToSignIn]
|
|
7663
7596
|
);
|
|
@@ -7786,9 +7719,9 @@ function RampnowIcon() {
|
|
|
7786
7719
|
}
|
|
7787
7720
|
|
|
7788
7721
|
// src/internal/components/BuyMenu/binance/Binance.tsx
|
|
7789
|
-
var
|
|
7722
|
+
var import_react_query10 = require("@tanstack/react-query");
|
|
7790
7723
|
var import_lucide_react15 = require("lucide-react");
|
|
7791
|
-
var
|
|
7724
|
+
var import_react21 = require("react");
|
|
7792
7725
|
|
|
7793
7726
|
// src/internal/components/BuyMenu/components/PaymentSelector.tsx
|
|
7794
7727
|
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
@@ -7885,7 +7818,7 @@ async function createPreorderMutation(payload) {
|
|
|
7885
7818
|
}
|
|
7886
7819
|
|
|
7887
7820
|
// src/internal/components/BuyMenu/binance/useQueriesErrorHandler.ts
|
|
7888
|
-
var
|
|
7821
|
+
var import_react20 = require("react");
|
|
7889
7822
|
|
|
7890
7823
|
// src/internal/components/BuyMenu/binance/utils.ts
|
|
7891
7824
|
function getPayMethodID(pm) {
|
|
@@ -7905,7 +7838,7 @@ function handleErrors(errors) {
|
|
|
7905
7838
|
// src/internal/components/BuyMenu/binance/useQueriesErrorHandler.ts
|
|
7906
7839
|
var useQueriesErrorHandler = (errors, stateUpdater) => {
|
|
7907
7840
|
const { error: errorTitle, message: errorMessage } = handleErrors(errors);
|
|
7908
|
-
(0,
|
|
7841
|
+
(0, import_react20.useEffect)(() => {
|
|
7909
7842
|
if (!errorTitle && !errorMessage) return;
|
|
7910
7843
|
console.error(`[BuyModal][Binance] ${errorTitle}: ${errorMessage}`);
|
|
7911
7844
|
stateUpdater(1);
|
|
@@ -7930,12 +7863,12 @@ function Binance(props) {
|
|
|
7930
7863
|
setMinAmount,
|
|
7931
7864
|
setSrcInputAmount
|
|
7932
7865
|
} = control;
|
|
7933
|
-
const qc = (0,
|
|
7866
|
+
const qc = (0, import_react_query10.useQueryClient)();
|
|
7934
7867
|
const {
|
|
7935
7868
|
data: lumiaNetwork,
|
|
7936
7869
|
isLoading: isLumiaNetworkLoading,
|
|
7937
7870
|
error: lumiaNetworkError
|
|
7938
|
-
} = (0,
|
|
7871
|
+
} = (0, import_react_query10.useQuery)({
|
|
7939
7872
|
retry: false,
|
|
7940
7873
|
enabled: !!walletAddress,
|
|
7941
7874
|
queryKey: [QUERY_KEYS3.binanceNetworksQuery, walletAddress],
|
|
@@ -7946,27 +7879,27 @@ function Binance(props) {
|
|
|
7946
7879
|
data: paymentModes = null,
|
|
7947
7880
|
isLoading: isPaymentModesLoading,
|
|
7948
7881
|
error: paymentMethodsError
|
|
7949
|
-
} = (0,
|
|
7882
|
+
} = (0, import_react_query10.useQuery)({
|
|
7950
7883
|
retry: false,
|
|
7951
7884
|
enabled: !!isLumiaAvailable && !!walletAddress,
|
|
7952
7885
|
// && srcQueryAmount > 0,
|
|
7953
7886
|
queryKey: [QUERY_KEYS3.binancePaymentModes, walletAddress, isLumiaAvailable, srcQueryAmount],
|
|
7954
7887
|
queryFn: async () => getPaymentMethodsQuery({ totalAmount: String(srcQueryAmount || 1) })
|
|
7955
7888
|
});
|
|
7956
|
-
const lastLoadedPaymentModes = (0,
|
|
7957
|
-
(0,
|
|
7889
|
+
const lastLoadedPaymentModes = (0, import_react21.useRef)([]);
|
|
7890
|
+
(0, import_react21.useEffect)(() => {
|
|
7958
7891
|
if (!paymentModes?.length) return;
|
|
7959
7892
|
setPaymentMode(getPayMethodID(paymentModes[0]));
|
|
7960
7893
|
lastLoadedPaymentModes.current = paymentModes;
|
|
7961
7894
|
}, [paymentModes]);
|
|
7962
7895
|
const selectedPaymentMode = paymentModes?.find((el) => getPayMethodID(el) === paymentMode) || null;
|
|
7963
7896
|
const minimum = Number(selectedPaymentMode?.fiatMinLimit || "0");
|
|
7964
|
-
(0,
|
|
7897
|
+
(0, import_react21.useEffect)(() => setMinAmount(minimum), [minimum]);
|
|
7965
7898
|
const {
|
|
7966
7899
|
data: quoteData = null,
|
|
7967
7900
|
isLoading: isQuoteDataLoading,
|
|
7968
7901
|
error: quoteError
|
|
7969
|
-
} = (0,
|
|
7902
|
+
} = (0, import_react_query10.useQuery)({
|
|
7970
7903
|
retry: false,
|
|
7971
7904
|
enabled: !!walletAddress && srcQueryAmount > 0 && minimum > 0 && srcQueryAmount >= minimum,
|
|
7972
7905
|
queryKey: [QUERY_KEYS3.binanceQuote, walletAddress, selectedPaymentMode, srcQueryAmount],
|
|
@@ -7982,7 +7915,7 @@ function Binance(props) {
|
|
|
7982
7915
|
[lumiaNetworkError, paymentMethodsError, quoteError],
|
|
7983
7916
|
setSrcInputAmount
|
|
7984
7917
|
);
|
|
7985
|
-
const { mutate: checkoutFundWalletOrder, isPending: isFundWalletOrderCheckouting } = (0,
|
|
7918
|
+
const { mutate: checkoutFundWalletOrder, isPending: isFundWalletOrderCheckouting } = (0, import_react_query10.useMutation)({
|
|
7986
7919
|
mutationFn: async () => {
|
|
7987
7920
|
setRedirecting(true);
|
|
7988
7921
|
const returnUrl = window.location.href.split("?")[0];
|
|
@@ -8006,7 +7939,7 @@ function Binance(props) {
|
|
|
8006
7939
|
setRedirecting(false);
|
|
8007
7940
|
}
|
|
8008
7941
|
});
|
|
8009
|
-
(0,
|
|
7942
|
+
(0, import_react21.useEffect)(() => {
|
|
8010
7943
|
return () => {
|
|
8011
7944
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.binanceNetworksQuery] });
|
|
8012
7945
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.binancePaymentModes] });
|
|
@@ -8068,9 +8001,9 @@ function Binance(props) {
|
|
|
8068
8001
|
}
|
|
8069
8002
|
|
|
8070
8003
|
// src/internal/components/BuyMenu/rampnow/Rampnow.tsx
|
|
8071
|
-
var
|
|
8004
|
+
var import_react_query11 = require("@tanstack/react-query");
|
|
8072
8005
|
var import_lucide_react16 = require("lucide-react");
|
|
8073
|
-
var
|
|
8006
|
+
var import_react22 = require("react");
|
|
8074
8007
|
|
|
8075
8008
|
// src/internal/components/BuyMenu/rampnow/api.ts
|
|
8076
8009
|
init_iframe_manager();
|
|
@@ -8134,8 +8067,8 @@ function Rampnow(props) {
|
|
|
8134
8067
|
setSrcInputAmount,
|
|
8135
8068
|
setMinAmount
|
|
8136
8069
|
} = control;
|
|
8137
|
-
const qc = (0,
|
|
8138
|
-
(0,
|
|
8070
|
+
const qc = (0, import_react_query11.useQueryClient)();
|
|
8071
|
+
(0, import_react22.useEffect)(() => {
|
|
8139
8072
|
setMinAmount(MINIMUM_RAMP_AMOUNT);
|
|
8140
8073
|
setPaymentMode(PAYMENT_MODES[0].id);
|
|
8141
8074
|
}, []);
|
|
@@ -8143,7 +8076,7 @@ function Rampnow(props) {
|
|
|
8143
8076
|
data: configData,
|
|
8144
8077
|
isLoading: isConfigLoading,
|
|
8145
8078
|
error: configError
|
|
8146
|
-
} = (0,
|
|
8079
|
+
} = (0, import_react_query11.useQuery)({
|
|
8147
8080
|
retry: false,
|
|
8148
8081
|
enabled: !!walletAddress,
|
|
8149
8082
|
queryKey: [QUERY_KEYS3.getRampNowConfig, walletAddress],
|
|
@@ -8153,7 +8086,7 @@ function Rampnow(props) {
|
|
|
8153
8086
|
data: quoteData,
|
|
8154
8087
|
isLoading: isQuoteDataLoading,
|
|
8155
8088
|
error: quoteError
|
|
8156
|
-
} = (0,
|
|
8089
|
+
} = (0, import_react_query11.useQuery)({
|
|
8157
8090
|
retry: false,
|
|
8158
8091
|
enabled: !!configData && !!walletAddress && !!paymentMode && srcQueryAmount >= MINIMUM_RAMP_AMOUNT,
|
|
8159
8092
|
queryKey: [QUERY_KEYS3.getRampNowQuote, walletAddress, srcQueryAmount, paymentMode],
|
|
@@ -8163,7 +8096,7 @@ function Rampnow(props) {
|
|
|
8163
8096
|
paymentMode
|
|
8164
8097
|
})
|
|
8165
8098
|
});
|
|
8166
|
-
const { mutate: checkoutFundWalletOrder, isPending: isFundWalletOrderCheckouting } = (0,
|
|
8099
|
+
const { mutate: checkoutFundWalletOrder, isPending: isFundWalletOrderCheckouting } = (0, import_react_query11.useMutation)({
|
|
8167
8100
|
mutationFn: async () => {
|
|
8168
8101
|
if (!configData?.apiKey?.length || !configData?.orderUrl?.length) {
|
|
8169
8102
|
throw new Error("RampNow order service is not available");
|
|
@@ -8192,7 +8125,7 @@ function Rampnow(props) {
|
|
|
8192
8125
|
console.error("Create CheckoutOrder failed:", err);
|
|
8193
8126
|
}
|
|
8194
8127
|
});
|
|
8195
|
-
(0,
|
|
8128
|
+
(0, import_react22.useEffect)(() => {
|
|
8196
8129
|
return () => {
|
|
8197
8130
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.getRampNowConfig] });
|
|
8198
8131
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.getRampNowQuote] });
|
|
@@ -8274,7 +8207,7 @@ var RAMP_PROVIDERS = {
|
|
|
8274
8207
|
var REDIRECT_TIMEOUT_MS = 1500;
|
|
8275
8208
|
|
|
8276
8209
|
// src/internal/components/BuyMenu/useSelectables.ts
|
|
8277
|
-
var
|
|
8210
|
+
var import_react23 = require("react");
|
|
8278
8211
|
|
|
8279
8212
|
// src/internal/utils/debounce.ts
|
|
8280
8213
|
function debounce2(func, waitFor) {
|
|
@@ -8288,14 +8221,14 @@ function debounce2(func, waitFor) {
|
|
|
8288
8221
|
// src/internal/components/BuyMenu/useSelectables.ts
|
|
8289
8222
|
var ON_INPUT_QUERY_DELAY = 2e3;
|
|
8290
8223
|
var useSelectables = () => {
|
|
8291
|
-
const [redirecting, setRedirecting] = (0,
|
|
8292
|
-
const [rampProvider, setrRampProvider] = (0,
|
|
8293
|
-
const [minAmount, setMinAmount] = (0,
|
|
8294
|
-
const inputRef = (0,
|
|
8295
|
-
const [srcQueryAmount, setSrcQueryAmount] = (0,
|
|
8296
|
-
const [srcInputAmount, setSrcInputAmount] = (0,
|
|
8297
|
-
const [paymentMode, setPaymentMode] = (0,
|
|
8298
|
-
const setQueryAmountDebounced = (0,
|
|
8224
|
+
const [redirecting, setRedirecting] = (0, import_react23.useState)(false);
|
|
8225
|
+
const [rampProvider, setrRampProvider] = (0, import_react23.useState)("binance");
|
|
8226
|
+
const [minAmount, setMinAmount] = (0, import_react23.useState)(0);
|
|
8227
|
+
const inputRef = (0, import_react23.useRef)(null);
|
|
8228
|
+
const [srcQueryAmount, setSrcQueryAmount] = (0, import_react23.useState)(0);
|
|
8229
|
+
const [srcInputAmount, setSrcInputAmount] = (0, import_react23.useState)(0);
|
|
8230
|
+
const [paymentMode, setPaymentMode] = (0, import_react23.useState)(null);
|
|
8231
|
+
const setQueryAmountDebounced = (0, import_react23.useCallback)(
|
|
8299
8232
|
debounce2((inputAmount) => {
|
|
8300
8233
|
const checkedValue = Math.max(inputAmount, minAmount);
|
|
8301
8234
|
setSrcInputAmount(checkedValue);
|
|
@@ -8303,7 +8236,7 @@ var useSelectables = () => {
|
|
|
8303
8236
|
}, ON_INPUT_QUERY_DELAY),
|
|
8304
8237
|
[minAmount]
|
|
8305
8238
|
);
|
|
8306
|
-
(0,
|
|
8239
|
+
(0, import_react23.useEffect)(() => setQueryAmountDebounced(srcInputAmount), [srcInputAmount, setQueryAmountDebounced]);
|
|
8307
8240
|
return {
|
|
8308
8241
|
inputRef,
|
|
8309
8242
|
redirecting,
|
|
@@ -8365,19 +8298,75 @@ function BuyMenu() {
|
|
|
8365
8298
|
}
|
|
8366
8299
|
|
|
8367
8300
|
// src/internal/components/KeyshareRestoreMenu/KeyshareRestoreMenu.tsx
|
|
8368
|
-
var
|
|
8301
|
+
var import_react_query16 = require("@tanstack/react-query");
|
|
8369
8302
|
var import_lucide_react25 = require("lucide-react");
|
|
8370
|
-
var
|
|
8303
|
+
var import_react32 = require("react");
|
|
8371
8304
|
init_vaultClient();
|
|
8372
8305
|
|
|
8306
|
+
// src/internal/components/ui/switch.tsx
|
|
8307
|
+
var import_react24 = require("react");
|
|
8308
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
8309
|
+
var Switch = (0, import_react24.forwardRef)((props, ref) => {
|
|
8310
|
+
const { className, labels, ...inputProps } = props;
|
|
8311
|
+
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
8312
|
+
const [labelW, setLabelW] = (0, import_react24.useState)(0);
|
|
8313
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
8314
|
+
"div",
|
|
8315
|
+
{
|
|
8316
|
+
role: "switch",
|
|
8317
|
+
"aria-checked": inputProps.checked,
|
|
8318
|
+
className: cn(
|
|
8319
|
+
"block rounded-full w-fit h-5 px-[2px] outline-none flex-none",
|
|
8320
|
+
inputProps.checked ? "bg-[var(--l-pass-bg-success)]" : "bg-[var(--l-pass-bg-info)]",
|
|
8321
|
+
className
|
|
8322
|
+
),
|
|
8323
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
|
|
8324
|
+
"label",
|
|
8325
|
+
{
|
|
8326
|
+
className: "relative inline-block h-4 outline-none",
|
|
8327
|
+
style: {
|
|
8328
|
+
width: `calc(16px + ${labelW}px)`,
|
|
8329
|
+
transition: "width 200ms ease",
|
|
8330
|
+
cursor: inputProps.disabled ? "not-allowed" : "pointer"
|
|
8331
|
+
},
|
|
8332
|
+
children: [
|
|
8333
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("input", { type: "checkbox", className: "hidden sr-only peer outline-none", ref, ...inputProps }),
|
|
8334
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
8335
|
+
"span",
|
|
8336
|
+
{
|
|
8337
|
+
ref: (inst) => {
|
|
8338
|
+
if (inst) setLabelW(inst.clientWidth);
|
|
8339
|
+
},
|
|
8340
|
+
style: {
|
|
8341
|
+
left: inputProps.checked ? "0px" : "16px",
|
|
8342
|
+
color: inputProps.checked ? colorMode === "dark" ? "var(--l-pass-fg-inverted)" : "var(--l-pass-fg)" : "var(--l-pass-fg)",
|
|
8343
|
+
transition: "left 200ms ease"
|
|
8344
|
+
},
|
|
8345
|
+
className: "absolute top-0 px-2 text-[10px] leading-4 font-semibold min-w-4 select-none",
|
|
8346
|
+
children: inputProps.checked ? labels?.checked : labels?.unchecked
|
|
8347
|
+
}
|
|
8348
|
+
),
|
|
8349
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
8350
|
+
"span",
|
|
8351
|
+
{
|
|
8352
|
+
style: {
|
|
8353
|
+
left: inputProps.checked ? `${labelW}px` : "0px",
|
|
8354
|
+
transition: "left 200ms ease"
|
|
8355
|
+
},
|
|
8356
|
+
className: "absolute top-0 w-4 h-4 rounded-full bg-[var(--l-pass-fg)]"
|
|
8357
|
+
}
|
|
8358
|
+
)
|
|
8359
|
+
]
|
|
8360
|
+
}
|
|
8361
|
+
)
|
|
8362
|
+
}
|
|
8363
|
+
);
|
|
8364
|
+
});
|
|
8365
|
+
Switch.displayName = "Switch";
|
|
8366
|
+
|
|
8373
8367
|
// src/internal/components/KeyshareRestoreMenu/components/MethodSelector.tsx
|
|
8374
8368
|
var import_lucide_react18 = require("lucide-react");
|
|
8375
|
-
var
|
|
8376
|
-
|
|
8377
|
-
// src/internal/components/KeyshareRestoreMenu/hooks/useCheckBackupAvailability.ts
|
|
8378
|
-
var import_react_query13 = require("@tanstack/react-query");
|
|
8379
|
-
var import_react26 = require("react");
|
|
8380
|
-
init_vaultClient();
|
|
8369
|
+
var import_react28 = require("react");
|
|
8381
8370
|
|
|
8382
8371
|
// src/internal/components/KeyshareRestoreMenu/hooks/useRestoreStore.ts
|
|
8383
8372
|
var import_zustand4 = require("zustand");
|
|
@@ -8406,54 +8395,15 @@ var useRestoreStore = (0, import_zustand4.create)((set) => ({
|
|
|
8406
8395
|
setSuccess: (success) => set({ success })
|
|
8407
8396
|
}));
|
|
8408
8397
|
|
|
8409
|
-
// src/internal/components/KeyshareRestoreMenu/hooks/useCheckBackupAvailability.ts
|
|
8410
|
-
function useCheckBackupAvailability() {
|
|
8411
|
-
const qc = (0, import_react_query13.useQueryClient)();
|
|
8412
|
-
const address = useLumiaPassportSession((st) => st.address);
|
|
8413
|
-
const { setError, setHasServerBackup, setCheckingBackup } = useRestoreStore();
|
|
8414
|
-
const {
|
|
8415
|
-
data: serverRecoveryData,
|
|
8416
|
-
isLoading: isRecoveryLoading,
|
|
8417
|
-
error: recoveryError
|
|
8418
|
-
} = (0, import_react_query13.useQuery)({
|
|
8419
|
-
retry: false,
|
|
8420
|
-
queryKey: [CHECK_BACKUP_QUERY_KEY, address],
|
|
8421
|
-
queryFn: async () => await getShareRecoveryStats()
|
|
8422
|
-
});
|
|
8423
|
-
(0, import_react26.useEffect)(() => {
|
|
8424
|
-
qc.invalidateQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY] });
|
|
8425
|
-
}, [qc]);
|
|
8426
|
-
(0, import_react26.useEffect)(() => {
|
|
8427
|
-
setCheckingBackup(isRecoveryLoading);
|
|
8428
|
-
if (!!isRecoveryLoading) return;
|
|
8429
|
-
if (!!recoveryError) {
|
|
8430
|
-
console.warn("[KeyshareRestoreMenu] Failed to check backup availability:", recoveryError);
|
|
8431
|
-
setError("Failed to check backup availability");
|
|
8432
|
-
setHasServerBackup(false);
|
|
8433
|
-
setCheckingBackup(false);
|
|
8434
|
-
return;
|
|
8435
|
-
}
|
|
8436
|
-
const hasRecoveryData = serverRecoveryData?.created || serverRecoveryData?.devices?.length > 0;
|
|
8437
|
-
setHasServerBackup(!!hasRecoveryData);
|
|
8438
|
-
setCheckingBackup(false);
|
|
8439
|
-
}, [serverRecoveryData, recoveryError, isRecoveryLoading]);
|
|
8440
|
-
return {
|
|
8441
|
-
serverRecoveryData,
|
|
8442
|
-
isRecoveryLoading,
|
|
8443
|
-
recoveryError,
|
|
8444
|
-
hasRecoveryData: serverRecoveryData?.created || serverRecoveryData?.devices?.length > 0
|
|
8445
|
-
};
|
|
8446
|
-
}
|
|
8447
|
-
|
|
8448
8398
|
// src/internal/components/KeyshareRestoreMenu/hooks/useOnRestoreSuccess.ts
|
|
8449
|
-
var
|
|
8399
|
+
var import_react25 = require("react");
|
|
8450
8400
|
function useOnRestoreSuccess() {
|
|
8451
8401
|
const { config, callbacks } = useLumiaPassportConfig();
|
|
8452
8402
|
const setIsDialogForced = useLayoutStore((st) => st.setIsDialogForced);
|
|
8453
8403
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
8454
8404
|
const { usePaymaster, recoveryUserId, setRecoveryUserId, setSession, setAddress, setStatus } = useLumiaPassportSession();
|
|
8455
8405
|
const { setError, setSuccess } = useRestoreStore();
|
|
8456
|
-
const createSessionWithKeyshare = (0,
|
|
8406
|
+
const createSessionWithKeyshare = (0, import_react25.useCallback)(
|
|
8457
8407
|
async (userId, hasServerKeyshare, isNewUser) => {
|
|
8458
8408
|
try {
|
|
8459
8409
|
try {
|
|
@@ -8487,21 +8437,16 @@ function useOnRestoreSuccess() {
|
|
|
8487
8437
|
},
|
|
8488
8438
|
[setStatus, callbacks, usePaymaster]
|
|
8489
8439
|
);
|
|
8490
|
-
const onRestoreSuccess = (0,
|
|
8440
|
+
const onRestoreSuccess = (0, import_react25.useCallback)(async () => {
|
|
8491
8441
|
const { verifyToken: verifyToken2, jwtTokenManager: jwtTokenManager4 } = await Promise.resolve().then(() => (init_auth(), auth_exports));
|
|
8492
8442
|
const verify = await verifyToken2();
|
|
8493
8443
|
const hasServerKeyshare = verify?.hasKeyshare ?? jwtTokenManager4.getHasKeyshare() ?? false;
|
|
8494
8444
|
if (recoveryUserId) {
|
|
8495
8445
|
try {
|
|
8496
8446
|
const { session: sess, address: addr } = await createSessionWithKeyshare(recoveryUserId, hasServerKeyshare);
|
|
8497
|
-
setSession(sess);
|
|
8498
|
-
setAddress(addr);
|
|
8499
|
-
setStatus("ready");
|
|
8500
8447
|
setRecoveryUserId(null);
|
|
8501
8448
|
setSuccess(null);
|
|
8502
8449
|
setError(null);
|
|
8503
|
-
setIsDialogForced(false);
|
|
8504
|
-
setPage("main-menu" /* MAIN_MENU */);
|
|
8505
8450
|
try {
|
|
8506
8451
|
callbacks?.onLumiaPassportConnect?.({
|
|
8507
8452
|
address: addr,
|
|
@@ -8533,11 +8478,17 @@ function useOnRestoreSuccess() {
|
|
|
8533
8478
|
} catch (e) {
|
|
8534
8479
|
console.warn("[UI-KIT] Failed to update backup status:", e);
|
|
8535
8480
|
}
|
|
8481
|
+
setSession(sess);
|
|
8482
|
+
setAddress(addr);
|
|
8483
|
+
setStatus("ready");
|
|
8484
|
+
setPage("main-menu" /* MAIN_MENU */);
|
|
8485
|
+
setTimeout(() => {
|
|
8486
|
+
setIsDialogForced(false);
|
|
8487
|
+
}, 375);
|
|
8536
8488
|
} catch (err) {
|
|
8537
8489
|
setSuccess(null);
|
|
8538
8490
|
setError(err?.message || String(err));
|
|
8539
8491
|
setStatus("error");
|
|
8540
|
-
setIsDialogForced(false);
|
|
8541
8492
|
}
|
|
8542
8493
|
}
|
|
8543
8494
|
}, [
|
|
@@ -8555,17 +8506,17 @@ function useOnRestoreSuccess() {
|
|
|
8555
8506
|
}
|
|
8556
8507
|
|
|
8557
8508
|
// src/internal/components/KeyshareRestoreMenu/hooks/useCreateBackup.ts
|
|
8558
|
-
var
|
|
8559
|
-
var
|
|
8509
|
+
var import_react_query12 = require("@tanstack/react-query");
|
|
8510
|
+
var import_react26 = require("react");
|
|
8560
8511
|
init_iframe_manager();
|
|
8561
8512
|
function useCreateBackup() {
|
|
8562
|
-
const qc = (0,
|
|
8513
|
+
const qc = (0, import_react_query12.useQueryClient)();
|
|
8563
8514
|
const session = useLumiaPassportSession((st) => st.session);
|
|
8564
8515
|
const address = useLumiaPassportSession((st) => st.address);
|
|
8565
8516
|
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
8566
8517
|
const setIsDialogForced = useLayoutStore((st) => st.setIsDialogForced);
|
|
8567
8518
|
const { usePasskey, restorePassword, selectedCloudProvider, setSuccess, setError, setMethod } = useRestoreStore();
|
|
8568
|
-
(0,
|
|
8519
|
+
(0, import_react26.useEffect)(() => {
|
|
8569
8520
|
if (!hasServerVault) {
|
|
8570
8521
|
setMethod("server");
|
|
8571
8522
|
setIsDialogForced(true);
|
|
@@ -8573,7 +8524,7 @@ function useCreateBackup() {
|
|
|
8573
8524
|
}, [hasServerVault, setIsDialogForced, setMethod]);
|
|
8574
8525
|
const passportUserId = session?.mpcUserId || "";
|
|
8575
8526
|
const onBackupSuccess = () => console.log("[ConnectWalletButton] Backup created successfully");
|
|
8576
|
-
const { mutate: createPasswordBackup, isPending: isPasswordBackupCreating } = (0,
|
|
8527
|
+
const { mutate: createPasswordBackup, isPending: isPasswordBackupCreating } = (0, import_react_query12.useMutation)({
|
|
8577
8528
|
mutationFn: async () => {
|
|
8578
8529
|
const iframeManager = getIframeManager();
|
|
8579
8530
|
if (!iframeManager) {
|
|
@@ -8604,13 +8555,14 @@ function useCreateBackup() {
|
|
|
8604
8555
|
} else {
|
|
8605
8556
|
setError(response.error || "Server backup failed");
|
|
8606
8557
|
}
|
|
8558
|
+
setIsDialogForced(false);
|
|
8607
8559
|
},
|
|
8608
8560
|
onError: async (error) => {
|
|
8609
8561
|
setError(error?.message || "Backup creation failed");
|
|
8610
8562
|
qc.invalidateQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY, address] });
|
|
8611
8563
|
}
|
|
8612
8564
|
});
|
|
8613
|
-
const { mutate: createLocalBackup, isPending: isLocalBackupCreating } = (0,
|
|
8565
|
+
const { mutate: createLocalBackup, isPending: isLocalBackupCreating } = (0, import_react_query12.useMutation)({
|
|
8614
8566
|
mutationFn: async () => {
|
|
8615
8567
|
const iframeManager = getIframeManager();
|
|
8616
8568
|
if (!usePasskey && !restorePassword) {
|
|
@@ -8644,7 +8596,7 @@ function useCreateBackup() {
|
|
|
8644
8596
|
qc.invalidateQueries({ queryKey: [CHECK_BACKUP_QUERY_KEY, address] });
|
|
8645
8597
|
}
|
|
8646
8598
|
});
|
|
8647
|
-
const { mutate: createCloudBackup, isPending: isCloudBackupCreating } = (0,
|
|
8599
|
+
const { mutate: createCloudBackup, isPending: isCloudBackupCreating } = (0, import_react_query12.useMutation)({
|
|
8648
8600
|
mutationFn: async () => {
|
|
8649
8601
|
const iframeManager = getIframeManager();
|
|
8650
8602
|
const encryptedData = await iframeManager.encryptBackupData(passportUserId);
|
|
@@ -8695,7 +8647,7 @@ function useCreateBackup() {
|
|
|
8695
8647
|
}
|
|
8696
8648
|
|
|
8697
8649
|
// src/internal/components/KeyshareRestoreMenu/hooks/useRestoreAccount.ts
|
|
8698
|
-
var
|
|
8650
|
+
var import_react_query13 = require("@tanstack/react-query");
|
|
8699
8651
|
function useRestoreAccount() {
|
|
8700
8652
|
const recoveryUserId = useLumiaPassportSession((st) => st.recoveryUserId);
|
|
8701
8653
|
const {
|
|
@@ -8709,7 +8661,7 @@ function useRestoreAccount() {
|
|
|
8709
8661
|
setRestoreFile
|
|
8710
8662
|
} = useRestoreStore();
|
|
8711
8663
|
const { onRestoreSuccess } = useOnRestoreSuccess();
|
|
8712
|
-
const { mutate: restoreFromServer2, isPending: isRestoringFromServer } = (0,
|
|
8664
|
+
const { mutate: restoreFromServer2, isPending: isRestoringFromServer } = (0, import_react_query13.useMutation)({
|
|
8713
8665
|
mutationFn: async () => {
|
|
8714
8666
|
setError(null);
|
|
8715
8667
|
setSuccess(null);
|
|
@@ -8739,18 +8691,16 @@ function useRestoreAccount() {
|
|
|
8739
8691
|
onRestoreSuccess();
|
|
8740
8692
|
} else {
|
|
8741
8693
|
console.error("[KeyshareRestoreMenu] Server restore failed:", response.error);
|
|
8742
|
-
setMethod(null);
|
|
8743
8694
|
setError(response.error || "Server restore failed");
|
|
8744
8695
|
}
|
|
8745
8696
|
},
|
|
8746
8697
|
onError: async (err) => {
|
|
8747
8698
|
console.error("[KeyshareRestoreMenu] Server restore exception:", err);
|
|
8748
8699
|
const errorMsg = err instanceof Error ? err.message : "Server restore failed";
|
|
8749
|
-
setMethod(null);
|
|
8750
8700
|
setError(errorMsg);
|
|
8751
8701
|
}
|
|
8752
8702
|
});
|
|
8753
|
-
const { mutate: restoreFromFile, isPending: isRestoringFromFile } = (0,
|
|
8703
|
+
const { mutate: restoreFromFile, isPending: isRestoringFromFile } = (0, import_react_query13.useMutation)({
|
|
8754
8704
|
mutationFn: async () => {
|
|
8755
8705
|
if (!restoreFile) {
|
|
8756
8706
|
throw new Error("Please select a backup file");
|
|
@@ -8776,17 +8726,15 @@ function useRestoreAccount() {
|
|
|
8776
8726
|
setMethod(null);
|
|
8777
8727
|
onRestoreSuccess();
|
|
8778
8728
|
} else {
|
|
8779
|
-
setMethod(null);
|
|
8780
8729
|
setError(response.error || "File restore failed");
|
|
8781
8730
|
}
|
|
8782
8731
|
},
|
|
8783
8732
|
onError: async (err) => {
|
|
8784
8733
|
const errorMsg = err instanceof Error ? err.message : "Restore failed";
|
|
8785
|
-
setMethod(null);
|
|
8786
8734
|
setError(errorMsg);
|
|
8787
8735
|
}
|
|
8788
8736
|
});
|
|
8789
|
-
const { mutate: restoreFromCloud, isPending: isRestoringFromCloud } = (0,
|
|
8737
|
+
const { mutate: restoreFromCloud, isPending: isRestoringFromCloud } = (0, import_react_query13.useMutation)({
|
|
8790
8738
|
mutationFn: async () => {
|
|
8791
8739
|
alert("Cloud restore not implemented yet");
|
|
8792
8740
|
return null;
|
|
@@ -8807,7 +8755,7 @@ function useRestoreAccount() {
|
|
|
8807
8755
|
}
|
|
8808
8756
|
|
|
8809
8757
|
// src/internal/components/KeyshareRestoreMenu/hooks/useValidateFileBackup.ts
|
|
8810
|
-
var
|
|
8758
|
+
var import_react27 = require("react");
|
|
8811
8759
|
function validateRestoreFileFormat(parsedData) {
|
|
8812
8760
|
if (typeof parsedData !== "object" || parsedData === null) return false;
|
|
8813
8761
|
const data = parsedData;
|
|
@@ -8817,7 +8765,7 @@ function useValidateFileBackup() {
|
|
|
8817
8765
|
const restoreFile = useRestoreStore((st) => st.restoreFile);
|
|
8818
8766
|
const setError = useRestoreStore((st) => st.setError);
|
|
8819
8767
|
const setUsePasskey = useRestoreStore((st) => st.setUsePasskey);
|
|
8820
|
-
(0,
|
|
8768
|
+
(0, import_react27.useEffect)(() => {
|
|
8821
8769
|
if (!restoreFile) {
|
|
8822
8770
|
return;
|
|
8823
8771
|
}
|
|
@@ -8840,9 +8788,9 @@ function useValidateFileBackup() {
|
|
|
8840
8788
|
}
|
|
8841
8789
|
|
|
8842
8790
|
// src/internal/components/KeyshareRestoreMenu/components/MethodSelector.tsx
|
|
8843
|
-
var
|
|
8791
|
+
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
8844
8792
|
var getRecoveryRenderMethods = (mode) => [
|
|
8845
|
-
{ method:
|
|
8793
|
+
// { method: 'server', label: 'Password', Icon: OtpIcon },
|
|
8846
8794
|
{ method: "file", label: "Local File", Icon: mode === "restore" ? import_lucide_react18.FileUp : import_lucide_react18.FileDown },
|
|
8847
8795
|
{ method: "cloud", label: "Cloud", Icon: import_lucide_react18.Cloud, disabled: true }
|
|
8848
8796
|
];
|
|
@@ -8857,7 +8805,7 @@ function MethodSelector(props) {
|
|
|
8857
8805
|
setError,
|
|
8858
8806
|
setSuccess
|
|
8859
8807
|
} = useRestoreStore();
|
|
8860
|
-
const recoveryRenderMethods = (0,
|
|
8808
|
+
const recoveryRenderMethods = (0, import_react28.useMemo)(() => {
|
|
8861
8809
|
const methodsWithBackupData = getRecoveryRenderMethods(mode).map((mt) => {
|
|
8862
8810
|
let data = null;
|
|
8863
8811
|
switch (true) {
|
|
@@ -8872,42 +8820,39 @@ function MethodSelector(props) {
|
|
|
8872
8820
|
return methodsWithBackupData;
|
|
8873
8821
|
}, [mode, serverRecoveryStatus]);
|
|
8874
8822
|
if (!!selectedRecoveryMethod) return null;
|
|
8875
|
-
return /* @__PURE__ */ (0,
|
|
8876
|
-
|
|
8877
|
-
|
|
8878
|
-
|
|
8879
|
-
|
|
8880
|
-
|
|
8881
|
-
|
|
8882
|
-
|
|
8883
|
-
|
|
8884
|
-
|
|
8885
|
-
|
|
8886
|
-
|
|
8887
|
-
|
|
8888
|
-
|
|
8889
|
-
|
|
8890
|
-
|
|
8891
|
-
|
|
8892
|
-
|
|
8893
|
-
|
|
8894
|
-
|
|
8895
|
-
|
|
8896
|
-
|
|
8897
|
-
|
|
8898
|
-
|
|
8899
|
-
},
|
|
8900
|
-
children:
|
|
8901
|
-
|
|
8902
|
-
|
|
8903
|
-
|
|
8904
|
-
|
|
8905
|
-
|
|
8906
|
-
|
|
8907
|
-
|
|
8908
|
-
}
|
|
8909
|
-
)
|
|
8910
|
-
] });
|
|
8823
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react28.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
8824
|
+
"div",
|
|
8825
|
+
{
|
|
8826
|
+
style: { gridTemplateColumns: `repeat(${recoveryRenderMethods.length}, minmax(0, 1fr))` },
|
|
8827
|
+
className: "w-full max-w-[256px] grid gap-[var(--l-pass-gap)] mx-auto py-[var(--l-pass-pd)]",
|
|
8828
|
+
children: recoveryRenderMethods.map(({ method: recoveryMethod, label, Icon: Icon2, data, disabled }) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "w-full h-full flex flex-col items-center gap-[var(--l-pass-gap)]", children: [
|
|
8829
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
|
|
8830
|
+
Button,
|
|
8831
|
+
{
|
|
8832
|
+
size: "icon",
|
|
8833
|
+
variant: "outline",
|
|
8834
|
+
type: "button",
|
|
8835
|
+
disabled,
|
|
8836
|
+
style: { height: "unset", maxWidth: "96px" },
|
|
8837
|
+
className: "relative w-full aspect-square h-unset rounded-[var(--l-pass-el-bdrs)]",
|
|
8838
|
+
onClick: () => {
|
|
8839
|
+
setRestorePassword("");
|
|
8840
|
+
setRestoreFile(null);
|
|
8841
|
+
setShowPassword(false);
|
|
8842
|
+
setError(null);
|
|
8843
|
+
setSuccess(null);
|
|
8844
|
+
setMethod(recoveryMethod);
|
|
8845
|
+
},
|
|
8846
|
+
children: [
|
|
8847
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Icon2, { className: "w-5 h-5 md:w-8 md:h-8" }),
|
|
8848
|
+
!!data?.lastBackup && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "w-6 h-6 absolute -top-2 -right-2 flex items-center justify-center bg-transparent", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(PositiveIcon, { className: "w-4 h-4" }) })
|
|
8849
|
+
]
|
|
8850
|
+
}
|
|
8851
|
+
),
|
|
8852
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "text-xs font-bold leading-4", children: label })
|
|
8853
|
+
] }, recoveryMethod))
|
|
8854
|
+
}
|
|
8855
|
+
) });
|
|
8911
8856
|
}
|
|
8912
8857
|
|
|
8913
8858
|
// src/internal/components/KeyshareRestoreMenu/components/NoBackupFound.tsx
|
|
@@ -8915,8 +8860,8 @@ var import_lucide_react20 = require("lucide-react");
|
|
|
8915
8860
|
|
|
8916
8861
|
// src/internal/components/KeyshareRestoreMenu/components/PasswordPasskey.tsx
|
|
8917
8862
|
var import_lucide_react19 = require("lucide-react");
|
|
8918
|
-
var
|
|
8919
|
-
var
|
|
8863
|
+
var import_react29 = require("react");
|
|
8864
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
8920
8865
|
function PasswordPasskey(props) {
|
|
8921
8866
|
const {
|
|
8922
8867
|
mode = "restore",
|
|
@@ -8928,16 +8873,63 @@ function PasswordPasskey(props) {
|
|
|
8928
8873
|
actionHandler
|
|
8929
8874
|
} = props;
|
|
8930
8875
|
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
8931
|
-
const actionRef = (0,
|
|
8932
|
-
const {
|
|
8933
|
-
|
|
8934
|
-
|
|
8876
|
+
const actionRef = (0, import_react29.useRef)(null);
|
|
8877
|
+
const {
|
|
8878
|
+
showPassword,
|
|
8879
|
+
restorePassword,
|
|
8880
|
+
usePasskey,
|
|
8881
|
+
error,
|
|
8882
|
+
setRestorePassword,
|
|
8883
|
+
setShowPassword,
|
|
8884
|
+
setUsePasskey,
|
|
8885
|
+
setRestoreFile
|
|
8886
|
+
} = useRestoreStore();
|
|
8887
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8888
|
+
mode === "backup" && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-center justify-center px-[var(--l-pass-pd)]", children: [
|
|
8889
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8890
|
+
Button,
|
|
8891
|
+
{
|
|
8892
|
+
size: "medium",
|
|
8893
|
+
variant: "ghost",
|
|
8894
|
+
onClick: () => {
|
|
8895
|
+
setUsePasskey(false);
|
|
8896
|
+
setRestoreFile(null);
|
|
8897
|
+
setRestorePassword("");
|
|
8898
|
+
},
|
|
8899
|
+
className: cn(usePasskey ? "opacity-50" : "opacity-100"),
|
|
8900
|
+
children: [
|
|
8901
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(OtpIcon, { className: "w-4 h-4 inline-block mr-1" }),
|
|
8902
|
+
"Password"
|
|
8903
|
+
]
|
|
8904
|
+
}
|
|
8905
|
+
),
|
|
8906
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8907
|
+
Button,
|
|
8908
|
+
{
|
|
8909
|
+
size: "medium",
|
|
8910
|
+
variant: "ghost",
|
|
8911
|
+
onClick: () => {
|
|
8912
|
+
setUsePasskey(true);
|
|
8913
|
+
setRestoreFile(null);
|
|
8914
|
+
setRestorePassword("");
|
|
8915
|
+
},
|
|
8916
|
+
className: cn(usePasskey ? "opacity-100" : "opacity-50"),
|
|
8917
|
+
children: [
|
|
8918
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react19.Key, { className: "w-4 h-4 inline-block mr-1" }),
|
|
8919
|
+
"Passkey"
|
|
8920
|
+
]
|
|
8921
|
+
}
|
|
8922
|
+
)
|
|
8923
|
+
] }),
|
|
8924
|
+
!hasServerVault && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "block w-full text-[10px] leading-8 px-[var(--l-pass-pd)] truncate", children: [
|
|
8935
8925
|
"Use your ",
|
|
8936
|
-
/* @__PURE__ */ (0,
|
|
8937
|
-
" to
|
|
8926
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("strong", { children: usePasskey ? "Passkey" : "Password" }),
|
|
8927
|
+
" to",
|
|
8928
|
+
" ",
|
|
8929
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { children: mode === "backup" ? "complete account security setup." : "get access to your account." })
|
|
8938
8930
|
] }),
|
|
8939
|
-
!usePasskey ? /* @__PURE__ */ (0,
|
|
8940
|
-
/* @__PURE__ */ (0,
|
|
8931
|
+
!usePasskey ? /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "w-full flex gap-[var(--l-pass-gap)]", children: [
|
|
8932
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8941
8933
|
Input,
|
|
8942
8934
|
{
|
|
8943
8935
|
autoComplete: "off",
|
|
@@ -8953,7 +8945,7 @@ function PasswordPasskey(props) {
|
|
|
8953
8945
|
onKeyDown: (e) => {
|
|
8954
8946
|
if (e.key === "Enter" && !isLoading && restorePassword) actionRef.current?.click();
|
|
8955
8947
|
},
|
|
8956
|
-
element: /* @__PURE__ */ (0,
|
|
8948
|
+
element: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8957
8949
|
Button,
|
|
8958
8950
|
{
|
|
8959
8951
|
variant: "ghost",
|
|
@@ -8962,12 +8954,12 @@ function PasswordPasskey(props) {
|
|
|
8962
8954
|
title: "Toggle Password Visibility",
|
|
8963
8955
|
disabled: isLoading || disabled,
|
|
8964
8956
|
onClick: () => setShowPassword(!showPassword),
|
|
8965
|
-
children: showPassword ? /* @__PURE__ */ (0,
|
|
8957
|
+
children: showPassword ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react19.EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react19.Eye, { className: "h-4 w-4" })
|
|
8966
8958
|
}
|
|
8967
8959
|
)
|
|
8968
8960
|
}
|
|
8969
8961
|
),
|
|
8970
|
-
/* @__PURE__ */ (0,
|
|
8962
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8971
8963
|
Button,
|
|
8972
8964
|
{
|
|
8973
8965
|
ref: actionRef,
|
|
@@ -8977,10 +8969,10 @@ function PasswordPasskey(props) {
|
|
|
8977
8969
|
title: actionCaption,
|
|
8978
8970
|
disabled: isLoading || disabled || error?.includes("Invalid backup file") || !usePasskey && !restorePassword,
|
|
8979
8971
|
className: "w-full w-12 h-12 flex-shrink-0 rounded-[var(--l-pass-el-bdrs)]",
|
|
8980
|
-
children: isLoading ? /* @__PURE__ */ (0,
|
|
8972
|
+
children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react19.Loader, { className: "animate-spin h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react19.ChevronRight, { className: "h-4 w-4" })
|
|
8981
8973
|
}
|
|
8982
8974
|
)
|
|
8983
|
-
] }) : /* @__PURE__ */ (0,
|
|
8975
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8984
8976
|
Button,
|
|
8985
8977
|
{
|
|
8986
8978
|
ref: actionRef,
|
|
@@ -8991,18 +8983,18 @@ function PasswordPasskey(props) {
|
|
|
8991
8983
|
disabled: isLoading || disabled || !!error || !usePasskey && !restorePassword,
|
|
8992
8984
|
className: "w-full",
|
|
8993
8985
|
children: [
|
|
8994
|
-
isLoading ? /* @__PURE__ */ (0,
|
|
8995
|
-
!isLoading && /* @__PURE__ */ (0,
|
|
8986
|
+
isLoading ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react19.Loader, { className: "animate-spin h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ActionIcon, { className: "h-4 w-4" }),
|
|
8987
|
+
!isLoading && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { children: actionCaption })
|
|
8996
8988
|
]
|
|
8997
8989
|
}
|
|
8998
8990
|
),
|
|
8999
|
-
!isEncryptionMethod && !!usePasskey && /* @__PURE__ */ (0,
|
|
9000
|
-
/* @__PURE__ */ (0,
|
|
9001
|
-
/* @__PURE__ */ (0,
|
|
9002
|
-
/* @__PURE__ */ (0,
|
|
9003
|
-
/* @__PURE__ */ (0,
|
|
8991
|
+
!isEncryptionMethod && !!usePasskey && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Highlight, { type: "info", className: "w-full flex flex-col gap-[var(--l-pass-gap)] text-[10px]", children: mode === "backup" && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
8992
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react19.Info, { className: "h-4 w-4 flex-shrink-0" }),
|
|
8993
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "text-[var(--l-pass-fg-muted)] block flex-1", children: [
|
|
8994
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "block mb-1", children: "Your Backup must be encrypted with a password or a passkey, so only you can decrypt it no matter where backup is stored." }),
|
|
8995
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "block", children: [
|
|
9004
8996
|
" Passkeys are a password-free alternative. ",
|
|
9005
|
-
/* @__PURE__ */ (0,
|
|
8997
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
9006
8998
|
"a",
|
|
9007
8999
|
{
|
|
9008
9000
|
target: "_blank",
|
|
@@ -9019,7 +9011,7 @@ function PasswordPasskey(props) {
|
|
|
9019
9011
|
}
|
|
9020
9012
|
|
|
9021
9013
|
// src/internal/components/KeyshareRestoreMenu/components/NoBackupFound.tsx
|
|
9022
|
-
var
|
|
9014
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
9023
9015
|
function NoBackupFound(props) {
|
|
9024
9016
|
const { isLoading, restoreFromFile } = props;
|
|
9025
9017
|
const restoreFile = useRestoreStore((st) => st.restoreFile);
|
|
@@ -9028,33 +9020,33 @@ function NoBackupFound(props) {
|
|
|
9028
9020
|
const setRestoreFile = useRestoreStore((st) => st.setRestoreFile);
|
|
9029
9021
|
const setError = useRestoreStore((st) => st.setError);
|
|
9030
9022
|
useValidateFileBackup();
|
|
9031
|
-
return /* @__PURE__ */ (0,
|
|
9032
|
-
/* @__PURE__ */ (0,
|
|
9033
|
-
/* @__PURE__ */ (0,
|
|
9034
|
-
/* @__PURE__ */ (0,
|
|
9023
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { children: [
|
|
9024
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "flex items-center justify-center gap-2 px-5 pt-3 pb-6", children: [
|
|
9025
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react20.User, { className: "w-6 h-6" }),
|
|
9026
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "font-bold text-xl leading-6", children: "Account Recovery" })
|
|
9035
9027
|
] }),
|
|
9036
|
-
!restoreFile && /* @__PURE__ */ (0,
|
|
9037
|
-
/* @__PURE__ */ (0,
|
|
9038
|
-
/* @__PURE__ */ (0,
|
|
9039
|
-
/* @__PURE__ */ (0,
|
|
9040
|
-
/* @__PURE__ */ (0,
|
|
9041
|
-
/* @__PURE__ */ (0,
|
|
9042
|
-
/* @__PURE__ */ (0,
|
|
9028
|
+
!restoreFile && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(Highlight, { type: "warning", className: "animate-glow-warning flex gap-[var(--l-pass-gap)]", children: [
|
|
9029
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react20.AlertCircle, { className: "h-4 w-4 flex-0" }),
|
|
9030
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "w-full flex-1 flex flex-col gap-2", children: [
|
|
9031
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "block w-full text-sm leading-4 font-bold", children: "No Backup Found" }),
|
|
9032
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("span", { className: "block w-full text-xs", children: [
|
|
9033
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "block mb-1", children: "This device doesn't have access to your wallet keyshare, and no backup was found." }),
|
|
9034
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "block w-full", children: "If you're using a different device, please return to the one where you created your account to create a backup, then restore access on this device." })
|
|
9043
9035
|
] })
|
|
9044
9036
|
] })
|
|
9045
9037
|
] }),
|
|
9046
|
-
!restoreFile && /* @__PURE__ */ (0,
|
|
9047
|
-
/* @__PURE__ */ (0,
|
|
9048
|
-
/* @__PURE__ */ (0,
|
|
9038
|
+
!restoreFile && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(Highlight, { type: "info", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9039
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react20.Upload, { className: "h-4 w-4 flex-0" }),
|
|
9040
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "block w-full text-xs", children: "Upload a backup file if you have one" })
|
|
9049
9041
|
] }),
|
|
9050
|
-
/* @__PURE__ */ (0,
|
|
9042
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
9051
9043
|
"label",
|
|
9052
9044
|
{
|
|
9053
9045
|
className: cn(
|
|
9054
9046
|
"block w-full flex items-center justify-center cursor-pointer",
|
|
9055
9047
|
"p-[var(--l-pass-gap)] bg-[var(--l-pass-secondary)] rounded-[var(--l-pass-el-bdrs)]"
|
|
9056
9048
|
),
|
|
9057
|
-
children: /* @__PURE__ */ (0,
|
|
9049
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
9058
9050
|
"input",
|
|
9059
9051
|
{
|
|
9060
9052
|
type: "file",
|
|
@@ -9075,7 +9067,7 @@ function NoBackupFound(props) {
|
|
|
9075
9067
|
)
|
|
9076
9068
|
}
|
|
9077
9069
|
),
|
|
9078
|
-
restoreFile && /* @__PURE__ */ (0,
|
|
9070
|
+
restoreFile && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
9079
9071
|
PasswordPasskey,
|
|
9080
9072
|
{
|
|
9081
9073
|
mode: "restore",
|
|
@@ -9091,124 +9083,15 @@ function NoBackupFound(props) {
|
|
|
9091
9083
|
|
|
9092
9084
|
// src/internal/components/KeyshareRestoreMenu/methods/File.tsx
|
|
9093
9085
|
var import_lucide_react21 = require("lucide-react");
|
|
9094
|
-
|
|
9095
|
-
// src/internal/components/ui/switch.tsx
|
|
9096
|
-
var import_react32 = require("react");
|
|
9097
|
-
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
9098
|
-
var Switch = (0, import_react32.forwardRef)((props, ref) => {
|
|
9099
|
-
const { className, labels, ...inputProps } = props;
|
|
9100
|
-
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
9101
|
-
const [labelW, setLabelW] = (0, import_react32.useState)(0);
|
|
9102
|
-
return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
9103
|
-
"div",
|
|
9104
|
-
{
|
|
9105
|
-
role: "switch",
|
|
9106
|
-
"aria-checked": inputProps.checked,
|
|
9107
|
-
className: cn(
|
|
9108
|
-
"block rounded-full w-fit h-7 p-1 outline-none flex-none",
|
|
9109
|
-
inputProps.checked ? "bg-[var(--l-pass-bg-success)]" : "bg-[var(--l-pass-bg-info)]",
|
|
9110
|
-
className
|
|
9111
|
-
),
|
|
9112
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
|
|
9113
|
-
"label",
|
|
9114
|
-
{
|
|
9115
|
-
className: "relative inline-block h-5 outline-none",
|
|
9116
|
-
style: {
|
|
9117
|
-
width: `calc(20px + ${labelW}px)`,
|
|
9118
|
-
transition: "width 200ms ease",
|
|
9119
|
-
cursor: inputProps.disabled ? "not-allowed" : "pointer"
|
|
9120
|
-
},
|
|
9121
|
-
children: [
|
|
9122
|
-
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("input", { type: "checkbox", className: "hidden sr-only peer outline-none", ref, ...inputProps }),
|
|
9123
|
-
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
9124
|
-
"span",
|
|
9125
|
-
{
|
|
9126
|
-
ref: (inst) => {
|
|
9127
|
-
if (inst) setLabelW(inst.clientWidth);
|
|
9128
|
-
},
|
|
9129
|
-
style: {
|
|
9130
|
-
left: inputProps.checked ? "0px" : "20px",
|
|
9131
|
-
color: inputProps.checked ? colorMode === "dark" ? "var(--l-pass-fg-inverted)" : "var(--l-pass-fg)" : "var(--l-pass-fg)",
|
|
9132
|
-
transition: "left 200ms ease"
|
|
9133
|
-
},
|
|
9134
|
-
className: "absolute top-0 px-2 text-xs leading-5 font-semibold min-w-5 select-none",
|
|
9135
|
-
children: inputProps.checked ? labels?.checked : labels?.unchecked
|
|
9136
|
-
}
|
|
9137
|
-
),
|
|
9138
|
-
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
9139
|
-
"span",
|
|
9140
|
-
{
|
|
9141
|
-
style: {
|
|
9142
|
-
left: inputProps.checked ? `${labelW}px` : "0px",
|
|
9143
|
-
transition: "left 200ms ease"
|
|
9144
|
-
},
|
|
9145
|
-
className: cn("absolute top-0 w-5 h-5 rounded-full bg-[var(--l-pass-fg)]", {
|
|
9146
|
-
// 'bg-[var(--l-pass-fg-inverted)]': inputProps.checked,
|
|
9147
|
-
// 'bg-[var(--l-pass-fg)]': !inputProps.checked
|
|
9148
|
-
})
|
|
9149
|
-
}
|
|
9150
|
-
)
|
|
9151
|
-
]
|
|
9152
|
-
}
|
|
9153
|
-
)
|
|
9154
|
-
}
|
|
9155
|
-
);
|
|
9156
|
-
});
|
|
9157
|
-
Switch.displayName = "Switch";
|
|
9158
|
-
|
|
9159
|
-
// src/internal/components/KeyshareRestoreMenu/methods/File.tsx
|
|
9160
9086
|
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
9161
9087
|
function File2(props) {
|
|
9162
9088
|
const { isLoading, mode = "restore", fileHandler } = props;
|
|
9163
|
-
const {
|
|
9164
|
-
restoreFile,
|
|
9165
|
-
error,
|
|
9166
|
-
usePasskey,
|
|
9167
|
-
setRestorePassword,
|
|
9168
|
-
setMethod,
|
|
9169
|
-
setRestoreFile,
|
|
9170
|
-
setUsePasskey,
|
|
9171
|
-
setError,
|
|
9172
|
-
setSuccess
|
|
9173
|
-
} = useRestoreStore();
|
|
9089
|
+
const { restoreFile, error, setRestoreFile, setError } = useRestoreStore();
|
|
9174
9090
|
useValidateFileBackup();
|
|
9175
9091
|
const actionText = mode === "backup" ? "Download" : "Restore with";
|
|
9176
9092
|
const isPasswordPasskey = mode === "restore" && !!restoreFile || mode === "backup";
|
|
9177
9093
|
return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_jsx_runtime40.Fragment, { children: [
|
|
9178
|
-
/* @__PURE__ */ (0, import_jsx_runtime40.
|
|
9179
|
-
/* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9180
|
-
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
9181
|
-
Button,
|
|
9182
|
-
{
|
|
9183
|
-
variant: "ghost",
|
|
9184
|
-
size: "icon",
|
|
9185
|
-
title: "Back",
|
|
9186
|
-
onClick: () => {
|
|
9187
|
-
setRestoreFile(null);
|
|
9188
|
-
setError(null);
|
|
9189
|
-
setSuccess(null);
|
|
9190
|
-
setUsePasskey(false);
|
|
9191
|
-
setMethod(null);
|
|
9192
|
-
},
|
|
9193
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react21.ArrowLeft, { className: "h-4 w-4" })
|
|
9194
|
-
}
|
|
9195
|
-
),
|
|
9196
|
-
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "text-xl font-semibold", children: `${mode === "restore" ? "Restore with" : ""} File ${mode === "restore" ? "by" : "Backup by"}`.trim() })
|
|
9197
|
-
] }),
|
|
9198
|
-
mode !== "restore" && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
9199
|
-
Switch,
|
|
9200
|
-
{
|
|
9201
|
-
name: "password-passkey-toggle",
|
|
9202
|
-
labels: { checked: "Password", unchecked: "Passkey" },
|
|
9203
|
-
disabled: isLoading || !!error,
|
|
9204
|
-
checked: !usePasskey,
|
|
9205
|
-
onChange: (e) => {
|
|
9206
|
-
if (!!e.target.checked) setRestorePassword("");
|
|
9207
|
-
setUsePasskey(!e.target.checked);
|
|
9208
|
-
}
|
|
9209
|
-
}
|
|
9210
|
-
)
|
|
9211
|
-
] }),
|
|
9094
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "block w-full text-[10px] text-center leading-8 px-[var(--l-pass-pd)] truncate", children: `${mode === "restore" ? "Restore with" : ""} File ${mode === "restore" ? "" : "Backup by"}`.trim() }),
|
|
9212
9095
|
mode === "restore" && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
9213
9096
|
"label",
|
|
9214
9097
|
{
|
|
@@ -9252,61 +9135,23 @@ function File2(props) {
|
|
|
9252
9135
|
}
|
|
9253
9136
|
|
|
9254
9137
|
// src/internal/components/KeyshareRestoreMenu/methods/Server.tsx
|
|
9255
|
-
var
|
|
9138
|
+
var import_react_query14 = require("@tanstack/react-query");
|
|
9256
9139
|
var import_dayjs = __toESM(require("dayjs"), 1);
|
|
9257
9140
|
var import_lucide_react22 = require("lucide-react");
|
|
9258
|
-
var
|
|
9141
|
+
var import_react30 = require("react");
|
|
9259
9142
|
var import_jsx_runtime41 = require("react/jsx-runtime");
|
|
9260
9143
|
function Server(props) {
|
|
9261
9144
|
const { isLoading, mode = "restore", serverHandler } = props;
|
|
9262
|
-
const qc = (0,
|
|
9145
|
+
const qc = (0, import_react_query14.useQueryClient)();
|
|
9263
9146
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9264
|
-
const
|
|
9265
|
-
const { usePasskey, error, setUsePasskey, setRestorePassword, setShowPassword, setMethod, setError, setSuccess } = useRestoreStore();
|
|
9147
|
+
const setUsePasskey = useRestoreStore((st) => st.setUsePasskey);
|
|
9266
9148
|
const serverRecoveryStatus = qc.getQueryData([CHECK_BACKUP_QUERY_KEY, address]);
|
|
9267
|
-
(0,
|
|
9149
|
+
(0, import_react30.useEffect)(() => {
|
|
9268
9150
|
if (mode === "backup" || !serverRecoveryStatus?.created?.encryptionMethod) return;
|
|
9269
9151
|
setUsePasskey(serverRecoveryStatus.created.encryptionMethod === "passkey");
|
|
9270
9152
|
}, [mode, serverRecoveryStatus, setUsePasskey]);
|
|
9271
9153
|
const isEncryptionMethod = mode === "restore" && !!serverRecoveryStatus?.created?.encryptionMethod;
|
|
9272
9154
|
return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_jsx_runtime41.Fragment, { children: [
|
|
9273
|
-
/* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: cn("flex items-center justify-between", { "px-[var(--l-pass-pd)]": !hasServerVault }), children: [
|
|
9274
|
-
/* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9275
|
-
!!hasServerVault && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
9276
|
-
Button,
|
|
9277
|
-
{
|
|
9278
|
-
variant: "ghost",
|
|
9279
|
-
size: "icon",
|
|
9280
|
-
title: "Back",
|
|
9281
|
-
onClick: () => {
|
|
9282
|
-
setShowPassword(false);
|
|
9283
|
-
setUsePasskey(false);
|
|
9284
|
-
setRestorePassword("");
|
|
9285
|
-
setUsePasskey(false);
|
|
9286
|
-
setError(null);
|
|
9287
|
-
setSuccess(null);
|
|
9288
|
-
setMethod(null);
|
|
9289
|
-
},
|
|
9290
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react22.ArrowLeft, { className: "h-4 w-4" })
|
|
9291
|
-
}
|
|
9292
|
-
),
|
|
9293
|
-
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "text-xl font-semibold", children: mode === "restore" ? "Restore with" : usePasskey ? "Passkey" : "Password" })
|
|
9294
|
-
] }),
|
|
9295
|
-
!isEncryptionMethod && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
9296
|
-
Switch,
|
|
9297
|
-
{
|
|
9298
|
-
name: "password-passkey-toggle",
|
|
9299
|
-
labels: { checked: "Password", unchecked: "Passkey" },
|
|
9300
|
-
disabled: isLoading,
|
|
9301
|
-
checked: !usePasskey,
|
|
9302
|
-
onChange: (e) => {
|
|
9303
|
-
if (!!error) setError(null);
|
|
9304
|
-
if (!!e.target.checked) setRestorePassword("");
|
|
9305
|
-
setUsePasskey(!e.target.checked);
|
|
9306
|
-
}
|
|
9307
|
-
}
|
|
9308
|
-
)
|
|
9309
|
-
] }),
|
|
9310
9155
|
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
9311
9156
|
PasswordPasskey,
|
|
9312
9157
|
{
|
|
@@ -9333,9 +9178,9 @@ function Server(props) {
|
|
|
9333
9178
|
}
|
|
9334
9179
|
|
|
9335
9180
|
// src/internal/components/KeyshareRestoreMenu/methods/Cloud.tsx
|
|
9336
|
-
var
|
|
9181
|
+
var import_react_query15 = require("@tanstack/react-query");
|
|
9337
9182
|
var import_lucide_react24 = require("lucide-react");
|
|
9338
|
-
var
|
|
9183
|
+
var import_react31 = require("react");
|
|
9339
9184
|
|
|
9340
9185
|
// src/internal/components/ui/select.tsx
|
|
9341
9186
|
var SelectPrimitive = __toESM(require("@radix-ui/react-select"), 1);
|
|
@@ -9473,7 +9318,7 @@ function Cloud2(props) {
|
|
|
9473
9318
|
data: cloudProviders = [],
|
|
9474
9319
|
isLoading: isCloudProvidersLoading,
|
|
9475
9320
|
error: cloudProvidersError
|
|
9476
|
-
} = (0,
|
|
9321
|
+
} = (0, import_react_query15.useQuery)({
|
|
9477
9322
|
retry: false,
|
|
9478
9323
|
enabled: !!passportUserId,
|
|
9479
9324
|
queryKey: [AVAILABLE_CLOUD_PROVIDERS_QUERY_KEY, passportUserId],
|
|
@@ -9483,7 +9328,7 @@ function Cloud2(props) {
|
|
|
9483
9328
|
return availableProviders.map((p) => ({ id: p.id, name: p.name, available: p.isAvailable() }));
|
|
9484
9329
|
}
|
|
9485
9330
|
});
|
|
9486
|
-
(0,
|
|
9331
|
+
(0, import_react31.useEffect)(() => {
|
|
9487
9332
|
if (isCloudProvidersLoading) return;
|
|
9488
9333
|
if (!!cloudProvidersError) {
|
|
9489
9334
|
console.error("[KeyshareBackup] Failed to load cloud providers:", cloudProvidersError);
|
|
@@ -9556,23 +9401,14 @@ var RESTORE_COMPONENTS = {
|
|
|
9556
9401
|
file: File2
|
|
9557
9402
|
};
|
|
9558
9403
|
var KeyshareRestoreMenu = () => {
|
|
9559
|
-
const qc = (0,
|
|
9404
|
+
const qc = (0, import_react_query16.useQueryClient)();
|
|
9560
9405
|
const callbacks = useLumiaPassportConfig().callbacks;
|
|
9561
9406
|
const { address, setSession, setAddress, setStatus, setIsLoading } = useLumiaPassportSession();
|
|
9562
|
-
const { data: serverRecoveryStatus, isLoading: isBackupStatusLoading } = (0, import_react_query18.useQuery)({
|
|
9563
|
-
retry: false,
|
|
9564
|
-
queryKey: [CHECK_BACKUP_QUERY_KEY, address],
|
|
9565
|
-
queryFn: async () => await getShareRecoveryStats()
|
|
9566
|
-
});
|
|
9567
9407
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
9568
9408
|
const setIsDialogForced = useLayoutStore((st) => st.setIsDialogForced);
|
|
9569
9409
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
9570
|
-
(0, import_react35.useEffect)(() => setIsDialogForced(true), []);
|
|
9571
|
-
useCheckBackupAvailability();
|
|
9572
9410
|
const {
|
|
9573
9411
|
method: currentRestoreMethod,
|
|
9574
|
-
checkingBackup,
|
|
9575
|
-
hasServerBackup,
|
|
9576
9412
|
error,
|
|
9577
9413
|
success,
|
|
9578
9414
|
setError,
|
|
@@ -9583,6 +9419,16 @@ var KeyshareRestoreMenu = () => {
|
|
|
9583
9419
|
setSuccess,
|
|
9584
9420
|
setMethod
|
|
9585
9421
|
} = useRestoreStore();
|
|
9422
|
+
(0, import_react32.useEffect)(() => {
|
|
9423
|
+
setIsDialogForced(true);
|
|
9424
|
+
return () => {
|
|
9425
|
+
setRestoreFile(null);
|
|
9426
|
+
setShowPassword(false);
|
|
9427
|
+
setUsePasskey(false);
|
|
9428
|
+
setMethod(null);
|
|
9429
|
+
setIsDialogForced(false);
|
|
9430
|
+
};
|
|
9431
|
+
}, []);
|
|
9586
9432
|
const {
|
|
9587
9433
|
restoreFromServer: restoreFromServer2,
|
|
9588
9434
|
isRestoringFromServer,
|
|
@@ -9591,7 +9437,16 @@ var KeyshareRestoreMenu = () => {
|
|
|
9591
9437
|
restoreFromCloud,
|
|
9592
9438
|
isRestoringFromCloud
|
|
9593
9439
|
} = useRestoreAccount();
|
|
9594
|
-
const {
|
|
9440
|
+
const { data: serverRecoveryStatus, isLoading: isBackupStatusLoading } = (0, import_react_query16.useQuery)({
|
|
9441
|
+
retry: false,
|
|
9442
|
+
queryKey: [CHECK_BACKUP_QUERY_KEY, address],
|
|
9443
|
+
queryFn: async () => await getShareRecoveryStats()
|
|
9444
|
+
});
|
|
9445
|
+
const hasServerBackup = serverRecoveryStatus?.created || serverRecoveryStatus?.devices?.length > 0;
|
|
9446
|
+
(0, import_react32.useEffect)(() => {
|
|
9447
|
+
if (!!hasServerBackup) setMethod("server");
|
|
9448
|
+
}, [hasServerBackup]);
|
|
9449
|
+
const { mutate: disconnect, isPending: isDisconnecting } = (0, import_react_query16.useMutation)({
|
|
9595
9450
|
mutationFn: async () => {
|
|
9596
9451
|
setError(null);
|
|
9597
9452
|
setMethod(null);
|
|
@@ -9622,29 +9477,47 @@ var KeyshareRestoreMenu = () => {
|
|
|
9622
9477
|
}
|
|
9623
9478
|
});
|
|
9624
9479
|
const RestoreComponent = currentRestoreMethod ? RESTORE_COMPONENTS[currentRestoreMethod] : null;
|
|
9625
|
-
const isBackupChecking = checkingBackup || isBackupStatusLoading;
|
|
9626
9480
|
return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
9627
9481
|
"div",
|
|
9628
9482
|
{
|
|
9629
9483
|
style: { "--l-pass-scrollbar-mah": `${maxScrollHeight}px` },
|
|
9630
9484
|
className: "list-scrollbar-y w-full",
|
|
9631
9485
|
children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: [
|
|
9632
|
-
|
|
9486
|
+
isBackupStatusLoading && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)] text-center justify-center items-center", children: [
|
|
9633
9487
|
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react25.Loader, { className: "w-5 h-5 animate-spin" }),
|
|
9634
|
-
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "block w-full text-xs leading-4", children: "Checking for backups..." })
|
|
9635
|
-
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "block w-full text-xs leading-4", children: "Please wait while we check for available backups..." })
|
|
9488
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "block w-full text-xs leading-4", children: "Checking for backups..." })
|
|
9636
9489
|
] }),
|
|
9637
|
-
!success && !
|
|
9490
|
+
!success && !isBackupStatusLoading && !isDisconnecting && !hasServerBackup && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
9638
9491
|
NoBackupFound,
|
|
9639
9492
|
{
|
|
9640
9493
|
isLoading: isRestoringFromServer || isRestoringFromCloud || isRestoringFromFile || isDisconnecting,
|
|
9641
9494
|
restoreFromFile
|
|
9642
9495
|
}
|
|
9643
9496
|
),
|
|
9644
|
-
!success && !
|
|
9645
|
-
/* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "flex items-center justify-
|
|
9646
|
-
/* @__PURE__ */ (0, import_jsx_runtime44.
|
|
9647
|
-
|
|
9497
|
+
!success && !isBackupStatusLoading && !isDisconnecting && hasServerBackup && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_jsx_runtime44.Fragment, { children: [
|
|
9498
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "flex items-center justify-between gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: [
|
|
9499
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9500
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react25.CloudDownload, { className: "w-6 h-6" }),
|
|
9501
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "font-bold text-xl leading-6", children: "Restore Account" })
|
|
9502
|
+
] }),
|
|
9503
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
9504
|
+
Switch,
|
|
9505
|
+
{
|
|
9506
|
+
name: "advanced-restore-flow-toggle",
|
|
9507
|
+
labels: { checked: "Standard", unchecked: "Advanced" },
|
|
9508
|
+
checked: currentRestoreMethod !== "server",
|
|
9509
|
+
onChange: () => {
|
|
9510
|
+
if (!!error) setError(null);
|
|
9511
|
+
if (currentRestoreMethod === "server") {
|
|
9512
|
+
setRestorePassword("");
|
|
9513
|
+
setMethod(null);
|
|
9514
|
+
} else {
|
|
9515
|
+
setRestoreFile(null);
|
|
9516
|
+
setMethod("server");
|
|
9517
|
+
}
|
|
9518
|
+
}
|
|
9519
|
+
}
|
|
9520
|
+
)
|
|
9648
9521
|
] }),
|
|
9649
9522
|
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(MethodSelector, { mode: "restore", serverRecoveryStatus }),
|
|
9650
9523
|
!!currentRestoreMethod && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
@@ -9657,32 +9530,29 @@ var KeyshareRestoreMenu = () => {
|
|
|
9657
9530
|
}
|
|
9658
9531
|
)
|
|
9659
9532
|
] }),
|
|
9660
|
-
!success && !
|
|
9661
|
-
|
|
9662
|
-
|
|
9663
|
-
|
|
9664
|
-
|
|
9665
|
-
|
|
9666
|
-
|
|
9667
|
-
|
|
9668
|
-
|
|
9669
|
-
|
|
9670
|
-
|
|
9671
|
-
|
|
9672
|
-
|
|
9673
|
-
|
|
9674
|
-
|
|
9675
|
-
|
|
9676
|
-
|
|
9677
|
-
|
|
9678
|
-
className: "w-
|
|
9679
|
-
children:
|
|
9680
|
-
|
|
9681
|
-
|
|
9682
|
-
|
|
9683
|
-
}
|
|
9684
|
-
)
|
|
9685
|
-
] }),
|
|
9533
|
+
!success && !isBackupStatusLoading && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
|
|
9534
|
+
Button,
|
|
9535
|
+
{
|
|
9536
|
+
size: "large",
|
|
9537
|
+
variant: "ghost",
|
|
9538
|
+
onClick: () => {
|
|
9539
|
+
setError(null);
|
|
9540
|
+
setShowPassword(false);
|
|
9541
|
+
setUsePasskey(false);
|
|
9542
|
+
setRestoreFile(null);
|
|
9543
|
+
setRestorePassword("");
|
|
9544
|
+
setSuccess(null);
|
|
9545
|
+
setMethod(null);
|
|
9546
|
+
disconnect();
|
|
9547
|
+
},
|
|
9548
|
+
disabled: isDisconnecting || isRestoringFromFile || isRestoringFromServer,
|
|
9549
|
+
className: "w-fit mx-auto",
|
|
9550
|
+
children: [
|
|
9551
|
+
isDisconnecting ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react25.Loader, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react25.UserCircle, { className: "w-4 h-4" }),
|
|
9552
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { children: "Try Another Account" })
|
|
9553
|
+
]
|
|
9554
|
+
}
|
|
9555
|
+
),
|
|
9686
9556
|
error && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(Highlight, { type: "error", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9687
9557
|
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react25.AlertCircle, { className: "h-4 w-4 flex-shrink-0" }),
|
|
9688
9558
|
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "w-full flex-1 block", children: error })
|
|
@@ -9697,9 +9567,9 @@ var KeyshareRestoreMenu = () => {
|
|
|
9697
9567
|
};
|
|
9698
9568
|
|
|
9699
9569
|
// src/internal/components/KeyshareRestoreMenu/KeyshareBackupMenu.tsx
|
|
9700
|
-
var
|
|
9570
|
+
var import_react_query17 = require("@tanstack/react-query");
|
|
9701
9571
|
var import_lucide_react26 = require("lucide-react");
|
|
9702
|
-
var
|
|
9572
|
+
var import_react33 = require("react");
|
|
9703
9573
|
init_vaultClient();
|
|
9704
9574
|
var import_jsx_runtime45 = require("react/jsx-runtime");
|
|
9705
9575
|
var COMPONENTS = {
|
|
@@ -9709,7 +9579,6 @@ var COMPONENTS = {
|
|
|
9709
9579
|
};
|
|
9710
9580
|
function KeyshareBackupMenu() {
|
|
9711
9581
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9712
|
-
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
9713
9582
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
9714
9583
|
const setMainPageHeight = useLayoutDataStore((st) => st.setMainPageHeight);
|
|
9715
9584
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
@@ -9726,18 +9595,21 @@ function KeyshareBackupMenu() {
|
|
|
9726
9595
|
setUsePasskey,
|
|
9727
9596
|
setMethod
|
|
9728
9597
|
} = useRestoreStore();
|
|
9729
|
-
(0,
|
|
9598
|
+
(0, import_react33.useEffect)(() => {
|
|
9730
9599
|
setMainPageHeight(DEFAULT_SETTINGS_MENU_HEIGHT);
|
|
9731
9600
|
return () => {
|
|
9732
9601
|
setMethod(null);
|
|
9733
9602
|
};
|
|
9734
9603
|
}, []);
|
|
9735
|
-
const { data: serverRecoveryStatus } = (0,
|
|
9604
|
+
const { data: serverRecoveryStatus, isLoading: isRecoveryLoading } = (0, import_react_query17.useQuery)({
|
|
9736
9605
|
retry: false,
|
|
9737
9606
|
queryKey: [CHECK_BACKUP_QUERY_KEY, address],
|
|
9738
9607
|
queryFn: async () => await getShareRecoveryStats()
|
|
9739
9608
|
});
|
|
9740
|
-
const
|
|
9609
|
+
const hasRecoveryData = serverRecoveryStatus?.created || serverRecoveryStatus?.devices?.length > 0;
|
|
9610
|
+
(0, import_react33.useEffect)(() => {
|
|
9611
|
+
if (!!hasRecoveryData) setMethod("server");
|
|
9612
|
+
}, [hasRecoveryData]);
|
|
9741
9613
|
const {
|
|
9742
9614
|
isPasswordBackupCreating,
|
|
9743
9615
|
createPasswordBackup,
|
|
@@ -9753,35 +9625,56 @@ function KeyshareBackupMenu() {
|
|
|
9753
9625
|
style: { "--l-pass-scrollbar-mah": `${maxScrollHeight}px` },
|
|
9754
9626
|
className: "list-scrollbar-y w-full",
|
|
9755
9627
|
children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: [
|
|
9756
|
-
|
|
9628
|
+
!!isRecoveryLoading && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "w-full flex items-center justify-center p-[var(--l-pass-pd)]", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react26.Loader, { className: "h-5 w-5 animate-spin" }) }),
|
|
9629
|
+
!isRecoveryLoading && !hasRecoveryData && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex items-center justify-center gap-2 px-5 py-[var(--l-pass-pd)]", children: [
|
|
9757
9630
|
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react26.LockIcon, { className: "w-6 h-6" }),
|
|
9758
9631
|
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "font-bold text-xl leading-6", children: "Secure Account" })
|
|
9759
9632
|
] }),
|
|
9760
|
-
|
|
9633
|
+
!isRecoveryLoading && !!hasRecoveryData && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex items-center justify-between gap-[var(--l-pass-gap)]", children: [
|
|
9634
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
9635
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
9636
|
+
Button,
|
|
9637
|
+
{
|
|
9638
|
+
variant: "ghost",
|
|
9639
|
+
size: "icon",
|
|
9640
|
+
title: "Back",
|
|
9641
|
+
onClick: () => {
|
|
9642
|
+
setRestorePassword("");
|
|
9643
|
+
setRestoreFile(null);
|
|
9644
|
+
setShowPassword(false);
|
|
9645
|
+
setSelectedCloudProvider(null);
|
|
9646
|
+
setUsePasskey(false);
|
|
9647
|
+
setError(null);
|
|
9648
|
+
setSuccess(null);
|
|
9649
|
+
setMethod(null);
|
|
9650
|
+
setPage("settings" /* SETTINGS */);
|
|
9651
|
+
},
|
|
9652
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react26.ArrowLeft, { className: "h-4 w-4" })
|
|
9653
|
+
}
|
|
9654
|
+
),
|
|
9655
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "text-xl font-semibold leading-8", children: "Create Backup" })
|
|
9656
|
+
] }),
|
|
9761
9657
|
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
9762
|
-
|
|
9658
|
+
Switch,
|
|
9763
9659
|
{
|
|
9764
|
-
|
|
9765
|
-
|
|
9766
|
-
|
|
9767
|
-
|
|
9768
|
-
|
|
9769
|
-
|
|
9770
|
-
|
|
9771
|
-
|
|
9772
|
-
|
|
9773
|
-
|
|
9774
|
-
|
|
9775
|
-
|
|
9776
|
-
|
|
9777
|
-
},
|
|
9778
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react26.ArrowLeft, { className: "h-4 w-4" })
|
|
9660
|
+
name: "advanced-restore-flow-toggle",
|
|
9661
|
+
labels: { checked: "Standard", unchecked: "Advanced" },
|
|
9662
|
+
checked: currentBackupMethod !== "server",
|
|
9663
|
+
onChange: () => {
|
|
9664
|
+
if (!!error) setError(null);
|
|
9665
|
+
if (currentBackupMethod === "server") {
|
|
9666
|
+
setRestorePassword("");
|
|
9667
|
+
setMethod(null);
|
|
9668
|
+
} else {
|
|
9669
|
+
setRestoreFile(null);
|
|
9670
|
+
setMethod("server");
|
|
9671
|
+
}
|
|
9672
|
+
}
|
|
9779
9673
|
}
|
|
9780
|
-
)
|
|
9781
|
-
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "text-xl font-semibold leading-8", children: "Create Backup" })
|
|
9674
|
+
)
|
|
9782
9675
|
] }),
|
|
9783
|
-
|
|
9784
|
-
!!currentBackupMethod && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
9676
|
+
!isRecoveryLoading && !!hasRecoveryData && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(MethodSelector, { mode: "backup", serverRecoveryStatus }),
|
|
9677
|
+
!isRecoveryLoading && !!currentBackupMethod && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
9785
9678
|
BackupComponent,
|
|
9786
9679
|
{
|
|
9787
9680
|
mode: "backup",
|
|
@@ -9793,13 +9686,7 @@ function KeyshareBackupMenu() {
|
|
|
9793
9686
|
) }),
|
|
9794
9687
|
!isRecoveryLoading && !currentBackupMethod && !hasRecoveryData && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(Highlight, { type: "warning", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9795
9688
|
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react26.AlertCircle, { className: "h-4 w-4 flex-shrink-0" }),
|
|
9796
|
-
/* @__PURE__ */ (0, import_jsx_runtime45.
|
|
9797
|
-
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "font-semibold", children: "No Backup Found" }),
|
|
9798
|
-
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("br", {}),
|
|
9799
|
-
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "text-[10px]", children: "Create a backup to restore access if you switch devices or clear your browser." }),
|
|
9800
|
-
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("br", {}),
|
|
9801
|
-
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "text-[10px]", children: "You can ignore this if you already have a backup or don't want to use Keyshare Vault." })
|
|
9802
|
-
] })
|
|
9689
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "block flex-1 font-semibold", children: "No Backup Found" })
|
|
9803
9690
|
] }),
|
|
9804
9691
|
error && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(Highlight, { type: "error", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
9805
9692
|
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react26.AlertCircle, { className: "h-4 w-4 flex-shrink-0" }),
|
|
@@ -9816,16 +9703,16 @@ function KeyshareBackupMenu() {
|
|
|
9816
9703
|
|
|
9817
9704
|
// src/internal/components/MainMenu/MainMenu.tsx
|
|
9818
9705
|
var import_lucide_react27 = require("lucide-react");
|
|
9819
|
-
var
|
|
9706
|
+
var import_react34 = require("react");
|
|
9820
9707
|
|
|
9821
9708
|
// src/internal/components/ManageWalletMenu/hooks/useProvidersList.ts
|
|
9822
|
-
var
|
|
9709
|
+
var import_react_query18 = require("@tanstack/react-query");
|
|
9823
9710
|
init_common();
|
|
9824
9711
|
var PROVIDERS_QUERY_KEY = "lumia-passport-providers-query";
|
|
9825
9712
|
function useProvidersList() {
|
|
9826
9713
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9827
9714
|
const page = useLayoutDataStore((st) => st.page);
|
|
9828
|
-
return (0,
|
|
9715
|
+
return (0, import_react_query18.useQuery)({
|
|
9829
9716
|
retry: false,
|
|
9830
9717
|
// hook is invoked on multiple pages to preload cache
|
|
9831
9718
|
enabled: !!address && (page === "manage-wallet" /* MANAGE_WALLET */ || page === "settings" /* SETTINGS */ || page === "main-menu" /* MAIN_MENU */),
|
|
@@ -9846,7 +9733,7 @@ function MainMenu() {
|
|
|
9846
9733
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9847
9734
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
9848
9735
|
const setMainPageHeight = useLayoutDataStore((st) => st.setMainPageHeight);
|
|
9849
|
-
(0,
|
|
9736
|
+
(0, import_react34.useEffect)(() => setMainPageHeight(DEFAULT_MAIN_MENU_HEIGHT), [setMainPageHeight]);
|
|
9850
9737
|
useProvidersList();
|
|
9851
9738
|
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "w-full grid grid-cols-4 gap-0 md:gap-[var(--l-pass-gap)] py-[10px] md:py-1", children: MAIN_MENU_BUTTONS.map(({ id, label, icon: Icon2 }) => /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
|
|
9852
9739
|
Button,
|
|
@@ -9868,11 +9755,11 @@ function MainMenu() {
|
|
|
9868
9755
|
// src/internal/components/ManageWalletMenu/ManageWallet.tsx
|
|
9869
9756
|
var import_lodash_es3 = require("lodash-es");
|
|
9870
9757
|
var import_lucide_react31 = require("lucide-react");
|
|
9871
|
-
var
|
|
9758
|
+
var import_react38 = require("react");
|
|
9872
9759
|
|
|
9873
9760
|
// src/modules/linkedProfiles.ts
|
|
9874
|
-
var
|
|
9875
|
-
var
|
|
9761
|
+
var import_react_query19 = require("@tanstack/react-query");
|
|
9762
|
+
var import_react35 = require("react");
|
|
9876
9763
|
init_auth();
|
|
9877
9764
|
init_common();
|
|
9878
9765
|
init_types();
|
|
@@ -9892,32 +9779,32 @@ async function getLinkProfilesData() {
|
|
|
9892
9779
|
return { profiles: loadedProfiles, avatar };
|
|
9893
9780
|
}
|
|
9894
9781
|
function useLumiaPassportLinkedProfiles() {
|
|
9895
|
-
const qc = (0,
|
|
9782
|
+
const qc = (0, import_react_query19.useQueryClient)();
|
|
9896
9783
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9897
9784
|
const {
|
|
9898
9785
|
data,
|
|
9899
9786
|
isFetching: isLoading,
|
|
9900
9787
|
error
|
|
9901
|
-
} = (0,
|
|
9788
|
+
} = (0, import_react_query19.useQuery)({
|
|
9902
9789
|
retry: false,
|
|
9903
9790
|
enabled: !!address,
|
|
9904
9791
|
queryKey: [LINKED_PROFILES_QUERY_KEY, address],
|
|
9905
9792
|
queryFn: getLinkProfilesData
|
|
9906
9793
|
});
|
|
9907
9794
|
const { profiles = [], avatar = null } = data || {};
|
|
9908
|
-
const refresh = (0,
|
|
9795
|
+
const refresh = (0, import_react35.useCallback)(async () => {
|
|
9909
9796
|
await qc.invalidateQueries({ queryKey: [LINKED_PROFILES_QUERY_KEY, address] });
|
|
9910
9797
|
}, [qc, address]);
|
|
9911
9798
|
return { profiles, avatar, isLoading, error, refresh };
|
|
9912
9799
|
}
|
|
9913
9800
|
|
|
9914
9801
|
// src/internal/components/ManageWalletMenu/AddProvider.tsx
|
|
9915
|
-
var
|
|
9802
|
+
var import_react_query23 = require("@tanstack/react-query");
|
|
9916
9803
|
init_passkey2();
|
|
9917
9804
|
|
|
9918
9805
|
// src/internal/components/ManageWalletMenu/EmailForm.tsx
|
|
9919
9806
|
init_lumiaPassport();
|
|
9920
|
-
var
|
|
9807
|
+
var import_react_query20 = require("@tanstack/react-query");
|
|
9921
9808
|
var import_lucide_react28 = require("lucide-react");
|
|
9922
9809
|
init_projectId();
|
|
9923
9810
|
|
|
@@ -9952,7 +9839,7 @@ function EmailForm() {
|
|
|
9952
9839
|
const isLoading = useLumiaPassportSession((st) => st.isLoading);
|
|
9953
9840
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
9954
9841
|
const { email, setEmail, setAlert, setEmailCodeExpiresIn, setEmailStep } = useManageWalletStore();
|
|
9955
|
-
const { mutate: onSendVerificationCode } = (0,
|
|
9842
|
+
const { mutate: onSendVerificationCode } = (0, import_react_query20.useMutation)({
|
|
9956
9843
|
mutationFn: async () => {
|
|
9957
9844
|
if (!email) return;
|
|
9958
9845
|
setIsLoading(true);
|
|
@@ -10039,13 +9926,13 @@ function EmailForm() {
|
|
|
10039
9926
|
}
|
|
10040
9927
|
|
|
10041
9928
|
// src/internal/components/ManageWalletMenu/hooks/useSendVerificationCode.ts
|
|
10042
|
-
var
|
|
9929
|
+
var import_react_query21 = require("@tanstack/react-query");
|
|
10043
9930
|
init_email();
|
|
10044
9931
|
function useSendVerificationCode() {
|
|
10045
9932
|
const setAlert = useManageWalletStore((st) => st.setAlert);
|
|
10046
9933
|
const setLinkIsLoading = useManageWalletStore((st) => st.setLinkIsLoading);
|
|
10047
9934
|
const setEmailCodeExpiresIn = useManageWalletStore((st) => st.setEmailCodeExpiresIn);
|
|
10048
|
-
return (0,
|
|
9935
|
+
return (0, import_react_query21.useMutation)({
|
|
10049
9936
|
mutationFn: async (email) => {
|
|
10050
9937
|
if (!email) {
|
|
10051
9938
|
throw new Error("Email is required");
|
|
@@ -10068,15 +9955,15 @@ function useSendVerificationCode() {
|
|
|
10068
9955
|
}
|
|
10069
9956
|
|
|
10070
9957
|
// src/internal/components/ManageWalletMenu/hooks/useVerifyCode.ts
|
|
10071
|
-
var
|
|
9958
|
+
var import_react_query22 = require("@tanstack/react-query");
|
|
10072
9959
|
init_email();
|
|
10073
9960
|
function useVerifyCode() {
|
|
10074
9961
|
const { callbacks } = useLumiaPassportConfig();
|
|
10075
|
-
const qc = (0,
|
|
9962
|
+
const qc = (0, import_react_query22.useQueryClient)();
|
|
10076
9963
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10077
9964
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
10078
9965
|
const { email, emailCode, setEmail, setEmailStep, setEmailCode, setProviderType, setLinkIsLoading, setAlert } = useManageWalletStore();
|
|
10079
|
-
return (0,
|
|
9966
|
+
return (0, import_react_query22.useMutation)({
|
|
10080
9967
|
mutationFn: async (codeToVerify) => {
|
|
10081
9968
|
const code = codeToVerify ?? emailCode;
|
|
10082
9969
|
if (!code) {
|
|
@@ -10124,7 +10011,7 @@ function normalizePasskeyLinkError(msg) {
|
|
|
10124
10011
|
return msg;
|
|
10125
10012
|
}
|
|
10126
10013
|
function AddProvider() {
|
|
10127
|
-
const qc = (0,
|
|
10014
|
+
const qc = (0, import_react_query23.useQueryClient)();
|
|
10128
10015
|
const callbacks = useLumiaPassportConfig().callbacks;
|
|
10129
10016
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10130
10017
|
const {
|
|
@@ -10284,11 +10171,11 @@ function EmailNotConnectedWarning() {
|
|
|
10284
10171
|
}
|
|
10285
10172
|
|
|
10286
10173
|
// src/internal/components/ManageWalletMenu/hooks/useLinkSocial.ts
|
|
10287
|
-
var
|
|
10288
|
-
var
|
|
10174
|
+
var import_react_query24 = require("@tanstack/react-query");
|
|
10175
|
+
var import_react36 = __toESM(require("react"), 1);
|
|
10289
10176
|
init_auth();
|
|
10290
10177
|
function useLinkSocial() {
|
|
10291
|
-
const qc = (0,
|
|
10178
|
+
const qc = (0, import_react_query24.useQueryClient)();
|
|
10292
10179
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10293
10180
|
const {
|
|
10294
10181
|
config: { current: config },
|
|
@@ -10297,7 +10184,7 @@ function useLinkSocial() {
|
|
|
10297
10184
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
10298
10185
|
const isWalletLinking = useLayoutDataStore((st) => st.isWalletLinking);
|
|
10299
10186
|
const { providerType, linkIsLoading, setProviderType, setAlert, setLinkIsLoading } = useManageWalletStore();
|
|
10300
|
-
const handleLinkSocialProvider =
|
|
10187
|
+
const handleLinkSocialProvider = import_react36.default.useCallback(
|
|
10301
10188
|
async (providerIdRaw) => {
|
|
10302
10189
|
const providerKey = providerIdRaw.toLowerCase();
|
|
10303
10190
|
const normalizedKey = providerKey === "twitter" ? "x" : providerKey;
|
|
@@ -10349,8 +10236,8 @@ function useLinkSocial() {
|
|
|
10349
10236
|
},
|
|
10350
10237
|
[config.social?.providers, callbacks]
|
|
10351
10238
|
);
|
|
10352
|
-
const [socialLinkStarted, setSocialLinkStarted] =
|
|
10353
|
-
(0,
|
|
10239
|
+
const [socialLinkStarted, setSocialLinkStarted] = import_react36.default.useState(false);
|
|
10240
|
+
(0, import_react36.useEffect)(() => {
|
|
10354
10241
|
const key = providerType?.toLowerCase();
|
|
10355
10242
|
console.log("[useLinkSocial] Effect triggered:", { key, linkIsLoading, socialLinkStarted, isWalletLinking });
|
|
10356
10243
|
if (isWalletLinking) {
|
|
@@ -10370,20 +10257,20 @@ function useLinkSocial() {
|
|
|
10370
10257
|
}
|
|
10371
10258
|
|
|
10372
10259
|
// src/internal/components/ManageWalletMenu/hooks/useLinkTelegram.ts
|
|
10373
|
-
var
|
|
10374
|
-
var
|
|
10260
|
+
var import_react_query25 = require("@tanstack/react-query");
|
|
10261
|
+
var import_react37 = require("react");
|
|
10375
10262
|
init_telegram2();
|
|
10376
10263
|
function useLinkTelegram() {
|
|
10377
10264
|
const {
|
|
10378
10265
|
config: { current: config },
|
|
10379
10266
|
callbacks
|
|
10380
10267
|
} = useLumiaPassportConfig();
|
|
10381
|
-
const qc = (0,
|
|
10268
|
+
const qc = (0, import_react_query25.useQueryClient)();
|
|
10382
10269
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10383
10270
|
const isWalletLinking = useLayoutDataStore((st) => st.isWalletLinking);
|
|
10384
10271
|
const { providerType, linkIsLoading, setLinkIsLoading, setProviderType, setAlert } = useManageWalletStore();
|
|
10385
10272
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
10386
|
-
const handleLinkTelegram = (0,
|
|
10273
|
+
const handleLinkTelegram = (0, import_react37.useCallback)(async () => {
|
|
10387
10274
|
try {
|
|
10388
10275
|
setLinkIsLoading(true);
|
|
10389
10276
|
setAlert(null);
|
|
@@ -10425,8 +10312,8 @@ function useLinkTelegram() {
|
|
|
10425
10312
|
setLinkIsLoading(false);
|
|
10426
10313
|
}
|
|
10427
10314
|
}, [config.social?.providers, callbacks]);
|
|
10428
|
-
const [telegramLinkStarted, setTelegramLinkStarted] = (0,
|
|
10429
|
-
(0,
|
|
10315
|
+
const [telegramLinkStarted, setTelegramLinkStarted] = (0, import_react37.useState)(false);
|
|
10316
|
+
(0, import_react37.useEffect)(() => {
|
|
10430
10317
|
console.log("[useLinkTelegram] Effect triggered:", {
|
|
10431
10318
|
providerType,
|
|
10432
10319
|
linkIsLoading,
|
|
@@ -10443,7 +10330,7 @@ function useLinkTelegram() {
|
|
|
10443
10330
|
handleLinkTelegram();
|
|
10444
10331
|
}
|
|
10445
10332
|
}, [providerType, handleLinkTelegram, linkIsLoading, telegramLinkStarted, isWalletLinking]);
|
|
10446
|
-
(0,
|
|
10333
|
+
(0, import_react37.useEffect)(() => {
|
|
10447
10334
|
if (providerType !== "telegram") {
|
|
10448
10335
|
setTelegramLinkStarted(false);
|
|
10449
10336
|
}
|
|
@@ -10552,7 +10439,7 @@ function ManageWalletMenu() {
|
|
|
10552
10439
|
} = useManageWalletStore();
|
|
10553
10440
|
const configuredProviders = getConfiguredProviders(config);
|
|
10554
10441
|
const { data: providers = [], isLoading: isProvidersLoading, error: providersError } = useProvidersList();
|
|
10555
|
-
const renderProviders = (0,
|
|
10442
|
+
const renderProviders = (0, import_react38.useMemo)(() => {
|
|
10556
10443
|
const normalizeProviderName = (name) => {
|
|
10557
10444
|
if (name === "x") return "twitter";
|
|
10558
10445
|
return name;
|
|
@@ -10670,19 +10557,19 @@ function ManageWalletMenu() {
|
|
|
10670
10557
|
}
|
|
10671
10558
|
|
|
10672
10559
|
// src/internal/components/ManageWalletMenu/UnlinkProviderMenu.tsx
|
|
10673
|
-
var
|
|
10560
|
+
var import_react_query26 = require("@tanstack/react-query");
|
|
10674
10561
|
var import_lucide_react32 = require("lucide-react");
|
|
10675
|
-
var
|
|
10562
|
+
var import_react39 = require("react");
|
|
10676
10563
|
init_auth();
|
|
10677
10564
|
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
10678
10565
|
function UnlinkProviderMenu() {
|
|
10679
|
-
const qc = (0,
|
|
10566
|
+
const qc = (0, import_react_query26.useQueryClient)();
|
|
10680
10567
|
const address = useLumiaPassportSession((st) => st.address);
|
|
10681
10568
|
const { callbacks } = useLumiaPassportConfig();
|
|
10682
10569
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
10683
10570
|
const { confirmUnlink, setConfirmUnlink, setAlert } = useManageWalletStore();
|
|
10684
|
-
const [confirmInput, setConfirmInput] = (0,
|
|
10685
|
-
const { mutate: handleUnlinkProvider, isPending: isProviderUnlinking } = (0,
|
|
10571
|
+
const [confirmInput, setConfirmInput] = (0, import_react39.useState)("");
|
|
10572
|
+
const { mutate: handleUnlinkProvider, isPending: isProviderUnlinking } = (0, import_react_query26.useMutation)({
|
|
10686
10573
|
mutationFn: async () => {
|
|
10687
10574
|
if (!confirmUnlink) {
|
|
10688
10575
|
throw new Error("No provider to unlink");
|
|
@@ -10758,11 +10645,11 @@ function UnlinkProviderMenu() {
|
|
|
10758
10645
|
var import_lucide_react35 = require("lucide-react");
|
|
10759
10646
|
|
|
10760
10647
|
// src/internal/hooks/useNicknameInfo.ts
|
|
10761
|
-
var
|
|
10648
|
+
var import_react_query27 = require("@tanstack/react-query");
|
|
10762
10649
|
init_nickname();
|
|
10763
10650
|
init_profile();
|
|
10764
10651
|
function useNicknameInfo(enabled = true) {
|
|
10765
|
-
const query = (0,
|
|
10652
|
+
const query = (0, import_react_query27.useQuery)({
|
|
10766
10653
|
queryKey: [QUERY_KEYS.nicknameInfo],
|
|
10767
10654
|
queryFn: getNicknameInfo,
|
|
10768
10655
|
enabled,
|
|
@@ -10779,82 +10666,17 @@ function useNicknameInfo(enabled = true) {
|
|
|
10779
10666
|
};
|
|
10780
10667
|
}
|
|
10781
10668
|
|
|
10782
|
-
// src/internal/lib/nickname-cooldown.ts
|
|
10783
|
-
function getDaysRemaining(cooldownEndsAt) {
|
|
10784
|
-
if (!cooldownEndsAt) return 0;
|
|
10785
|
-
const endDate = new Date(cooldownEndsAt);
|
|
10786
|
-
const now = /* @__PURE__ */ new Date();
|
|
10787
|
-
if (isNaN(endDate.getTime())) return 0;
|
|
10788
|
-
if (endDate <= now) return 0;
|
|
10789
|
-
const diffMs = endDate.getTime() - now.getTime();
|
|
10790
|
-
const diffDays = Math.ceil(diffMs / (1e3 * 60 * 60 * 24));
|
|
10791
|
-
return Math.max(0, diffDays);
|
|
10792
|
-
}
|
|
10793
|
-
function formatCooldownEndDate(cooldownEndsAt) {
|
|
10794
|
-
if (!cooldownEndsAt) return "";
|
|
10795
|
-
const endDate = new Date(cooldownEndsAt);
|
|
10796
|
-
if (isNaN(endDate.getTime())) return "";
|
|
10797
|
-
return endDate.toLocaleDateString(void 0, {
|
|
10798
|
-
year: "numeric",
|
|
10799
|
-
month: "short",
|
|
10800
|
-
day: "numeric"
|
|
10801
|
-
});
|
|
10802
|
-
}
|
|
10803
|
-
|
|
10804
|
-
// src/internal/components/NicknameSettings/NicknameInfoDisplay.tsx
|
|
10805
|
-
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
10806
|
-
function NicknameInfoDisplay({ info }) {
|
|
10807
|
-
const daysRemaining = getDaysRemaining(info.cooldownEndsAt);
|
|
10808
|
-
const cooldownEndDate = formatCooldownEndDate(info.cooldownEndsAt);
|
|
10809
|
-
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "w-full flex flex-col gap-3", children: [
|
|
10810
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex flex-col gap-1", children: [
|
|
10811
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "Your nickname" }),
|
|
10812
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-lg font-bold text-[var(--l-pass-fg)]", children: info.displayHandle })
|
|
10813
|
-
] }),
|
|
10814
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-center gap-4 text-xs text-[var(--l-pass-fg-muted)]", children: [
|
|
10815
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
|
|
10816
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: "Created" }),
|
|
10817
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-[var(--l-pass-fg)]", children: new Date(info.createdAt).toLocaleDateString(void 0, {
|
|
10818
|
-
year: "numeric",
|
|
10819
|
-
month: "short",
|
|
10820
|
-
day: "numeric"
|
|
10821
|
-
}) })
|
|
10822
|
-
] }),
|
|
10823
|
-
info.changedAt && /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
|
|
10824
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: "Last changed" }),
|
|
10825
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-[var(--l-pass-fg)]", children: new Date(info.changedAt).toLocaleDateString(void 0, {
|
|
10826
|
-
year: "numeric",
|
|
10827
|
-
month: "short",
|
|
10828
|
-
day: "numeric"
|
|
10829
|
-
}) })
|
|
10830
|
-
] }),
|
|
10831
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
|
|
10832
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: "Times changed" }),
|
|
10833
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-[var(--l-pass-fg)]", children: info.changeCount })
|
|
10834
|
-
] })
|
|
10835
|
-
] }),
|
|
10836
|
-
!info.canChange && info.cooldownEndsAt && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-warning)]", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("span", { className: "text-sm text-[var(--l-pass-warning)]", children: [
|
|
10837
|
-
"You can change your nickname again on ",
|
|
10838
|
-
cooldownEndDate,
|
|
10839
|
-
" (",
|
|
10840
|
-
daysRemaining,
|
|
10841
|
-
" days remaining)"
|
|
10842
|
-
] }) }),
|
|
10843
|
-
info.canChange && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-success)]", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-sm text-[var(--l-pass-success)]", children: "You can change your nickname" }) })
|
|
10844
|
-
] });
|
|
10845
|
-
}
|
|
10846
|
-
|
|
10847
10669
|
// src/internal/components/NicknameSettings/NicknameEditForm.tsx
|
|
10848
|
-
var import_react44 = require("react");
|
|
10849
10670
|
var import_lucide_react34 = require("lucide-react");
|
|
10671
|
+
var import_react41 = require("react");
|
|
10850
10672
|
|
|
10851
10673
|
// src/internal/hooks/useChangeNickname.ts
|
|
10852
|
-
var
|
|
10674
|
+
var import_react_query28 = require("@tanstack/react-query");
|
|
10853
10675
|
init_nickname();
|
|
10854
10676
|
init_profile();
|
|
10855
10677
|
function useChangeNickname(options) {
|
|
10856
|
-
const queryClient3 = (0,
|
|
10857
|
-
const mutation = (0,
|
|
10678
|
+
const queryClient3 = (0, import_react_query28.useQueryClient)();
|
|
10679
|
+
const mutation = (0, import_react_query28.useMutation)({
|
|
10858
10680
|
mutationFn: (handle) => changeNickname(handle),
|
|
10859
10681
|
onSuccess: (result) => {
|
|
10860
10682
|
queryClient3.invalidateQueries({ queryKey: [QUERY_KEYS.nicknameInfo] });
|
|
@@ -10889,8 +10711,8 @@ function useChangeNickname(options) {
|
|
|
10889
10711
|
}
|
|
10890
10712
|
|
|
10891
10713
|
// src/internal/hooks/useNicknameAvailability.ts
|
|
10892
|
-
var
|
|
10893
|
-
var
|
|
10714
|
+
var import_react_query29 = require("@tanstack/react-query");
|
|
10715
|
+
var import_react40 = require("react");
|
|
10894
10716
|
init_nickname();
|
|
10895
10717
|
init_profile();
|
|
10896
10718
|
|
|
@@ -10921,12 +10743,12 @@ function normalizeNickname(handle) {
|
|
|
10921
10743
|
// src/internal/hooks/useNicknameAvailability.ts
|
|
10922
10744
|
var DEBOUNCE_MS = 300;
|
|
10923
10745
|
function useNicknameAvailability(handle, enabled = true) {
|
|
10924
|
-
const [debouncedHandle, setDebouncedHandle] = (0,
|
|
10925
|
-
const [isDebouncing, setIsDebouncing] = (0,
|
|
10746
|
+
const [debouncedHandle, setDebouncedHandle] = (0, import_react40.useState)("");
|
|
10747
|
+
const [isDebouncing, setIsDebouncing] = (0, import_react40.useState)(false);
|
|
10926
10748
|
const normalized = normalizeNickname(handle);
|
|
10927
10749
|
const validation = validateNickname(handle);
|
|
10928
10750
|
const isValidForCheck = validation.valid && normalized.length > 0;
|
|
10929
|
-
(0,
|
|
10751
|
+
(0, import_react40.useEffect)(() => {
|
|
10930
10752
|
if (!isValidForCheck || !enabled) {
|
|
10931
10753
|
setDebouncedHandle("");
|
|
10932
10754
|
setIsDebouncing(false);
|
|
@@ -10941,7 +10763,7 @@ function useNicknameAvailability(handle, enabled = true) {
|
|
|
10941
10763
|
clearTimeout(timer);
|
|
10942
10764
|
};
|
|
10943
10765
|
}, [normalized, isValidForCheck, enabled]);
|
|
10944
|
-
const query = (0,
|
|
10766
|
+
const query = (0, import_react_query29.useQuery)({
|
|
10945
10767
|
queryKey: QUERY_KEYS.nicknameAvailability(debouncedHandle),
|
|
10946
10768
|
queryFn: () => checkNicknameAvailability(debouncedHandle),
|
|
10947
10769
|
enabled: enabled && isValidForCheck && debouncedHandle.length > 0,
|
|
@@ -10984,7 +10806,7 @@ function getNicknameErrorMessage(code, params) {
|
|
|
10984
10806
|
|
|
10985
10807
|
// src/internal/components/NicknameSettings/NicknameAvailabilityIndicator.tsx
|
|
10986
10808
|
var import_lucide_react33 = require("lucide-react");
|
|
10987
|
-
var
|
|
10809
|
+
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
10988
10810
|
function NicknameAvailabilityIndicator({
|
|
10989
10811
|
isChecking,
|
|
10990
10812
|
availability,
|
|
@@ -10994,32 +10816,32 @@ function NicknameAvailabilityIndicator({
|
|
|
10994
10816
|
return null;
|
|
10995
10817
|
}
|
|
10996
10818
|
if (isChecking) {
|
|
10997
|
-
return /* @__PURE__ */ (0,
|
|
10998
|
-
/* @__PURE__ */ (0,
|
|
10999
|
-
/* @__PURE__ */ (0,
|
|
10819
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-fg-muted)]", children: [
|
|
10820
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react33.Loader, { className: "w-3 h-3 animate-spin" }),
|
|
10821
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: "Checking availability..." })
|
|
11000
10822
|
] });
|
|
11001
10823
|
}
|
|
11002
10824
|
if (!availability) {
|
|
11003
10825
|
return null;
|
|
11004
10826
|
}
|
|
11005
10827
|
if (availability.available) {
|
|
11006
|
-
return /* @__PURE__ */ (0,
|
|
11007
|
-
/* @__PURE__ */ (0,
|
|
11008
|
-
/* @__PURE__ */ (0,
|
|
10828
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-success)]", children: [
|
|
10829
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react33.Check, { className: "w-3 h-3" }),
|
|
10830
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: "Nickname is available" })
|
|
11009
10831
|
] });
|
|
11010
10832
|
}
|
|
11011
10833
|
const reason = availability.reason ? getNicknameErrorMessage(availability.reason) : "This nickname is not available";
|
|
11012
|
-
return /* @__PURE__ */ (0,
|
|
11013
|
-
/* @__PURE__ */ (0,
|
|
11014
|
-
/* @__PURE__ */ (0,
|
|
10834
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-error)]", children: [
|
|
10835
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react33.X, { className: "w-3 h-3" }),
|
|
10836
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: reason })
|
|
11015
10837
|
] });
|
|
11016
10838
|
}
|
|
11017
10839
|
|
|
11018
10840
|
// src/internal/components/NicknameSettings/NicknameEditForm.tsx
|
|
11019
|
-
var
|
|
10841
|
+
var import_jsx_runtime54 = require("react/jsx-runtime");
|
|
11020
10842
|
function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
11021
|
-
const [inputValue, setInputValue] = (0,
|
|
11022
|
-
const [clientError, setClientError] = (0,
|
|
10843
|
+
const [inputValue, setInputValue] = (0, import_react41.useState)("");
|
|
10844
|
+
const [clientError, setClientError] = (0, import_react41.useState)(null);
|
|
11023
10845
|
const normalized = normalizeNickname(inputValue);
|
|
11024
10846
|
const isSameAsCurrentHandle = normalized === currentHandle.toLowerCase();
|
|
11025
10847
|
const validation = validateNickname(inputValue);
|
|
@@ -11032,7 +10854,7 @@ function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
|
11032
10854
|
onSuccess?.();
|
|
11033
10855
|
}
|
|
11034
10856
|
});
|
|
11035
|
-
const handleInputChange = (0,
|
|
10857
|
+
const handleInputChange = (0, import_react41.useCallback)(
|
|
11036
10858
|
(e) => {
|
|
11037
10859
|
const value = e.target.value;
|
|
11038
10860
|
setInputValue(value);
|
|
@@ -11047,7 +10869,7 @@ function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
|
11047
10869
|
},
|
|
11048
10870
|
[clientError, isError, isSuccess, reset]
|
|
11049
10871
|
);
|
|
11050
|
-
const handleSubmit = (0,
|
|
10872
|
+
const handleSubmit = (0, import_react41.useCallback)(
|
|
11051
10873
|
(e) => {
|
|
11052
10874
|
e.preventDefault();
|
|
11053
10875
|
const normalized2 = normalizeNickname(inputValue);
|
|
@@ -11073,10 +10895,10 @@ function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
|
11073
10895
|
if (!canChange) {
|
|
11074
10896
|
return null;
|
|
11075
10897
|
}
|
|
11076
|
-
return /* @__PURE__ */ (0,
|
|
11077
|
-
/* @__PURE__ */ (0,
|
|
11078
|
-
/* @__PURE__ */ (0,
|
|
11079
|
-
/* @__PURE__ */ (0,
|
|
10898
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("form", { onSubmit: handleSubmit, className: "w-full flex flex-col gap-3", children: [
|
|
10899
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex flex-col gap-1", children: [
|
|
10900
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "New nickname" }),
|
|
10901
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
11080
10902
|
Input,
|
|
11081
10903
|
{
|
|
11082
10904
|
value: inputValue,
|
|
@@ -11086,16 +10908,84 @@ function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
|
11086
10908
|
error: displayError || void 0
|
|
11087
10909
|
}
|
|
11088
10910
|
),
|
|
11089
|
-
/* @__PURE__ */ (0,
|
|
11090
|
-
shouldCheckAvailability && !clientError && /* @__PURE__ */ (0,
|
|
10911
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "3-20 characters, letters, numbers, and underscores only" }) }),
|
|
10912
|
+
shouldCheckAvailability && !clientError && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(NicknameAvailabilityIndicator, { isChecking, availability })
|
|
10913
|
+
] }),
|
|
10914
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Button, { type: "submit", size: "large", disabled: isSubmitDisabled, className: "w-full", children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
|
|
10915
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react34.Loader, { className: "w-4 h-4 mr-2 animate-spin" }),
|
|
10916
|
+
"Changing..."
|
|
10917
|
+
] }) : isSuccess ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
|
|
10918
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react34.Check, { className: "w-4 h-4 mr-2" }),
|
|
10919
|
+
"Nickname changed!"
|
|
10920
|
+
] }) : "Change Nickname" })
|
|
10921
|
+
] });
|
|
10922
|
+
}
|
|
10923
|
+
|
|
10924
|
+
// src/internal/components/NicknameSettings/NicknameInfoDisplay.tsx
|
|
10925
|
+
var import_react42 = require("react");
|
|
10926
|
+
|
|
10927
|
+
// src/internal/lib/nickname-cooldown.ts
|
|
10928
|
+
function getDaysRemaining(cooldownEndsAt) {
|
|
10929
|
+
if (!cooldownEndsAt) return 0;
|
|
10930
|
+
const endDate = new Date(cooldownEndsAt);
|
|
10931
|
+
const now = /* @__PURE__ */ new Date();
|
|
10932
|
+
if (isNaN(endDate.getTime())) return 0;
|
|
10933
|
+
if (endDate <= now) return 0;
|
|
10934
|
+
const diffMs = endDate.getTime() - now.getTime();
|
|
10935
|
+
const diffDays = Math.ceil(diffMs / (1e3 * 60 * 60 * 24));
|
|
10936
|
+
return Math.max(0, diffDays);
|
|
10937
|
+
}
|
|
10938
|
+
function formatCooldownEndDate(cooldownEndsAt) {
|
|
10939
|
+
if (!cooldownEndsAt) return "";
|
|
10940
|
+
const endDate = new Date(cooldownEndsAt);
|
|
10941
|
+
if (isNaN(endDate.getTime())) return "";
|
|
10942
|
+
return endDate.toLocaleDateString(void 0, {
|
|
10943
|
+
year: "numeric",
|
|
10944
|
+
month: "short",
|
|
10945
|
+
day: "numeric"
|
|
10946
|
+
});
|
|
10947
|
+
}
|
|
10948
|
+
|
|
10949
|
+
// src/internal/components/NicknameSettings/NicknameInfoDisplay.tsx
|
|
10950
|
+
var import_jsx_runtime55 = require("react/jsx-runtime");
|
|
10951
|
+
function NicknameInfoDisplay({ info }) {
|
|
10952
|
+
const daysRemaining = getDaysRemaining(info.cooldownEndsAt);
|
|
10953
|
+
const cooldownEndDate = formatCooldownEndDate(info.cooldownEndsAt);
|
|
10954
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_react42.Fragment, { children: [
|
|
10955
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex flex-col gap-1", children: [
|
|
10956
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: "Your nickname" }),
|
|
10957
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-lg font-bold text-[var(--l-pass-fg)]", children: info.displayHandle })
|
|
10958
|
+
] }),
|
|
10959
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex items-center gap-4 text-xs text-[var(--l-pass-fg-muted)]", children: [
|
|
10960
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
|
|
10961
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { children: "Created" }),
|
|
10962
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-[var(--l-pass-fg)]", children: new Date(info.createdAt).toLocaleDateString(void 0, {
|
|
10963
|
+
year: "numeric",
|
|
10964
|
+
month: "short",
|
|
10965
|
+
day: "numeric"
|
|
10966
|
+
}) })
|
|
10967
|
+
] }),
|
|
10968
|
+
info.changedAt && /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
|
|
10969
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { children: "Last changed" }),
|
|
10970
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-[var(--l-pass-fg)]", children: new Date(info.changedAt).toLocaleDateString(void 0, {
|
|
10971
|
+
year: "numeric",
|
|
10972
|
+
month: "short",
|
|
10973
|
+
day: "numeric"
|
|
10974
|
+
}) })
|
|
10975
|
+
] }),
|
|
10976
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
|
|
10977
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { children: "Times changed" }),
|
|
10978
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-[var(--l-pass-fg)]", children: info.changeCount })
|
|
10979
|
+
] })
|
|
11091
10980
|
] }),
|
|
11092
|
-
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
11093
|
-
|
|
11094
|
-
|
|
11095
|
-
|
|
11096
|
-
|
|
11097
|
-
"
|
|
11098
|
-
] })
|
|
10981
|
+
!info.canChange && info.cooldownEndsAt && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-warning)]", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("span", { className: "text-sm text-[var(--l-pass-warning)]", children: [
|
|
10982
|
+
"You can change your nickname again on ",
|
|
10983
|
+
cooldownEndDate,
|
|
10984
|
+
" (",
|
|
10985
|
+
daysRemaining,
|
|
10986
|
+
" days remaining)"
|
|
10987
|
+
] }) }),
|
|
10988
|
+
info.canChange && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-success)]", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-sm text-[var(--l-pass-success)]", children: "You can change your nickname" }) })
|
|
11099
10989
|
] });
|
|
11100
10990
|
}
|
|
11101
10991
|
|
|
@@ -11103,52 +10993,42 @@ function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
|
11103
10993
|
var import_jsx_runtime56 = require("react/jsx-runtime");
|
|
11104
10994
|
function NicknameSettings() {
|
|
11105
10995
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
10996
|
+
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
11106
10997
|
const { data: nicknameInfo, isLoading, isError, error, refetch } = useNicknameInfo();
|
|
11107
|
-
return /* @__PURE__ */ (0, import_jsx_runtime56.
|
|
11108
|
-
|
|
11109
|
-
|
|
11110
|
-
|
|
11111
|
-
|
|
11112
|
-
|
|
11113
|
-
{
|
|
11114
|
-
|
|
11115
|
-
|
|
11116
|
-
|
|
11117
|
-
|
|
11118
|
-
|
|
11119
|
-
|
|
11120
|
-
|
|
11121
|
-
|
|
11122
|
-
|
|
11123
|
-
|
|
11124
|
-
|
|
11125
|
-
|
|
11126
|
-
|
|
11127
|
-
|
|
11128
|
-
|
|
11129
|
-
|
|
11130
|
-
|
|
11131
|
-
isError && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "w-full p-4 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-error)]", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-sm text-[var(--l-pass-error)]", children: error?.message || "Failed to load nickname info" }) }),
|
|
11132
|
-
nicknameInfo && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(NicknameInfoDisplay, { info: nicknameInfo }),
|
|
11133
|
-
nicknameInfo && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
11134
|
-
NicknameEditForm,
|
|
11135
|
-
{
|
|
11136
|
-
currentHandle: nicknameInfo.handle,
|
|
11137
|
-
canChange: nicknameInfo.canChange,
|
|
11138
|
-
onSuccess: refetch
|
|
11139
|
-
}
|
|
11140
|
-
)
|
|
11141
|
-
] });
|
|
10998
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
10999
|
+
"div",
|
|
11000
|
+
{
|
|
11001
|
+
style: { "--l-pass-scrollbar-mah": `${maxScrollHeight}px` },
|
|
11002
|
+
className: "list-scrollbar-y w-full",
|
|
11003
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: [
|
|
11004
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
11005
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("settings" /* SETTINGS */), children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react35.ArrowLeft, { className: "h-4 w-4" }) }),
|
|
11006
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-xl font-semibold", children: "Nickname" })
|
|
11007
|
+
] }),
|
|
11008
|
+
isLoading && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "w-full p-8 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react35.Loader, { className: "w-5 h-5 animate-spin" }) }),
|
|
11009
|
+
nicknameInfo && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(NicknameInfoDisplay, { info: nicknameInfo }),
|
|
11010
|
+
nicknameInfo && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
11011
|
+
NicknameEditForm,
|
|
11012
|
+
{
|
|
11013
|
+
currentHandle: nicknameInfo.handle,
|
|
11014
|
+
canChange: nicknameInfo.canChange,
|
|
11015
|
+
onSuccess: refetch
|
|
11016
|
+
}
|
|
11017
|
+
),
|
|
11018
|
+
isError && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Highlight, { type: "error", children: error?.message || "Failed to load nickname info" })
|
|
11019
|
+
] })
|
|
11020
|
+
}
|
|
11021
|
+
);
|
|
11142
11022
|
}
|
|
11143
11023
|
|
|
11144
11024
|
// src/internal/components/PortfolioMenu/PortfolioMenu.tsx
|
|
11145
|
-
var
|
|
11025
|
+
var import_react_query32 = require("@tanstack/react-query");
|
|
11146
11026
|
var import_lucide_react37 = require("lucide-react");
|
|
11147
|
-
var
|
|
11027
|
+
var import_react45 = require("react");
|
|
11148
11028
|
|
|
11149
11029
|
// src/internal/hooks/useBlockscoutAssets.ts
|
|
11150
|
-
var
|
|
11151
|
-
var
|
|
11030
|
+
var import_react43 = require("react");
|
|
11031
|
+
var import_react_query30 = require("@tanstack/react-query");
|
|
11152
11032
|
var import_wagmi2 = require("wagmi");
|
|
11153
11033
|
var import_viem5 = require("viem");
|
|
11154
11034
|
var import_clients2 = require("@lumiapassport/core/clients");
|
|
@@ -11290,12 +11170,12 @@ function createError(error) {
|
|
|
11290
11170
|
function useBlockscoutAssets(options) {
|
|
11291
11171
|
const { address, enabled = true, detectSecurityTokens = true } = options;
|
|
11292
11172
|
const blockscoutApiUrl = getBlockscoutApiUrl();
|
|
11293
|
-
const blockscoutClient = (0,
|
|
11173
|
+
const blockscoutClient = (0, import_react43.useMemo)(
|
|
11294
11174
|
() => (0, import_clients2.createBlockscoutClient)({ baseUrl: blockscoutApiUrl }),
|
|
11295
11175
|
[blockscoutApiUrl]
|
|
11296
11176
|
);
|
|
11297
11177
|
const publicClient2 = (0, import_wagmi2.usePublicClient)({ chainId: lumiaBeam.id });
|
|
11298
|
-
const lastRefreshRef = (0,
|
|
11178
|
+
const lastRefreshRef = (0, import_react43.useRef)(0);
|
|
11299
11179
|
const {
|
|
11300
11180
|
data: nativeBalanceData,
|
|
11301
11181
|
isLoading: nativeLoading,
|
|
@@ -11313,7 +11193,7 @@ function useBlockscoutAssets(options) {
|
|
|
11313
11193
|
error: tokensError,
|
|
11314
11194
|
refetch: refetchTokens,
|
|
11315
11195
|
dataUpdatedAt
|
|
11316
|
-
} = (0,
|
|
11196
|
+
} = (0, import_react_query30.useQuery)({
|
|
11317
11197
|
queryKey: [BLOCKSCOUT_QUERY_KEY, address, blockscoutApiUrl],
|
|
11318
11198
|
queryFn: () => blockscoutClient.getTokenBalances(address),
|
|
11319
11199
|
enabled: !!address && enabled,
|
|
@@ -11326,7 +11206,7 @@ function useBlockscoutAssets(options) {
|
|
|
11326
11206
|
data: nftItems,
|
|
11327
11207
|
isLoading: nftsLoading,
|
|
11328
11208
|
refetch: refetchNfts
|
|
11329
|
-
} = (0,
|
|
11209
|
+
} = (0, import_react_query30.useQuery)({
|
|
11330
11210
|
queryKey: [BLOCKSCOUT_QUERY_KEY, "nfts", address, blockscoutApiUrl],
|
|
11331
11211
|
queryFn: () => blockscoutClient.getNfts(address),
|
|
11332
11212
|
enabled: !!address && enabled,
|
|
@@ -11335,11 +11215,11 @@ function useBlockscoutAssets(options) {
|
|
|
11335
11215
|
retry: 2,
|
|
11336
11216
|
retryDelay: 1e3
|
|
11337
11217
|
});
|
|
11338
|
-
const erc20TokenAddresses = (0,
|
|
11218
|
+
const erc20TokenAddresses = (0, import_react43.useMemo)(() => {
|
|
11339
11219
|
if (!tokenBalances) return [];
|
|
11340
11220
|
return tokenBalances.filter((tb) => tb.token.type === "ERC-20").map((tb) => tb.token.address);
|
|
11341
11221
|
}, [tokenBalances]);
|
|
11342
|
-
const { data: erc3643Results } = (0,
|
|
11222
|
+
const { data: erc3643Results } = (0, import_react_query30.useQuery)({
|
|
11343
11223
|
queryKey: [ERC3643_DETECTION_QUERY_KEY, address, erc20TokenAddresses],
|
|
11344
11224
|
queryFn: async () => {
|
|
11345
11225
|
if (!publicClient2 || erc20TokenAddresses.length === 0) {
|
|
@@ -11379,7 +11259,7 @@ function useBlockscoutAssets(options) {
|
|
|
11379
11259
|
gcTime: BLOCKSCOUT_QUERY_GC_TIME,
|
|
11380
11260
|
retry: 1
|
|
11381
11261
|
});
|
|
11382
|
-
const assets = (0,
|
|
11262
|
+
const assets = (0, import_react43.useMemo)(() => {
|
|
11383
11263
|
const result = [];
|
|
11384
11264
|
if (nativeBalanceData) {
|
|
11385
11265
|
result.push({
|
|
@@ -11415,7 +11295,7 @@ function useBlockscoutAssets(options) {
|
|
|
11415
11295
|
}
|
|
11416
11296
|
return result;
|
|
11417
11297
|
}, [nativeBalanceData, tokenBalances, nftItems, erc3643Results]);
|
|
11418
|
-
const nativeBalance = (0,
|
|
11298
|
+
const nativeBalance = (0, import_react43.useMemo)(() => {
|
|
11419
11299
|
if (!nativeBalanceData) return null;
|
|
11420
11300
|
return {
|
|
11421
11301
|
value: nativeBalanceData.value,
|
|
@@ -11423,11 +11303,11 @@ function useBlockscoutAssets(options) {
|
|
|
11423
11303
|
symbol: "LUMIA"
|
|
11424
11304
|
};
|
|
11425
11305
|
}, [nativeBalanceData]);
|
|
11426
|
-
const error = (0,
|
|
11306
|
+
const error = (0, import_react43.useMemo)(() => {
|
|
11427
11307
|
if (!tokensError) return null;
|
|
11428
11308
|
return createError(tokensError);
|
|
11429
11309
|
}, [tokensError]);
|
|
11430
|
-
const refreshBalances = (0,
|
|
11310
|
+
const refreshBalances = (0, import_react43.useCallback)(async () => {
|
|
11431
11311
|
const now = Date.now();
|
|
11432
11312
|
if (now - lastRefreshRef.current < BLOCKSCOUT_REFRESH_DEBOUNCE) {
|
|
11433
11313
|
return;
|
|
@@ -11435,7 +11315,7 @@ function useBlockscoutAssets(options) {
|
|
|
11435
11315
|
lastRefreshRef.current = now;
|
|
11436
11316
|
await Promise.all([refetchNative(), refetchTokens(), refetchNfts()]);
|
|
11437
11317
|
}, [refetchNative, refetchTokens, refetchNfts]);
|
|
11438
|
-
const getTokenBalance = (0,
|
|
11318
|
+
const getTokenBalance = (0, import_react43.useCallback)(
|
|
11439
11319
|
(tokenAddress) => {
|
|
11440
11320
|
return assets.find((a) => a.address?.toLowerCase() === tokenAddress.toLowerCase()) || null;
|
|
11441
11321
|
},
|
|
@@ -11455,9 +11335,9 @@ function useBlockscoutAssets(options) {
|
|
|
11455
11335
|
}
|
|
11456
11336
|
|
|
11457
11337
|
// src/internal/components/PortfolioMenu/PortfolioItem.tsx
|
|
11458
|
-
var
|
|
11338
|
+
var import_react_query31 = require("@tanstack/react-query");
|
|
11459
11339
|
var import_lucide_react36 = require("lucide-react");
|
|
11460
|
-
var
|
|
11340
|
+
var import_react44 = require("react");
|
|
11461
11341
|
var import_viem6 = require("viem");
|
|
11462
11342
|
init_base();
|
|
11463
11343
|
var import_jsx_runtime57 = require("react/jsx-runtime");
|
|
@@ -11495,16 +11375,16 @@ async function getAssetRate2(symbol) {
|
|
|
11495
11375
|
var ASSETS_RATES_QUERY_KEY = "lumia-passport-assets-rates-query-key";
|
|
11496
11376
|
function PortfolioItem(props) {
|
|
11497
11377
|
const { address, asset, isProjectAsset } = props;
|
|
11498
|
-
const [nftImageError, setNftImageError] = (0,
|
|
11499
|
-
const [logoError, setLogoError] = (0,
|
|
11378
|
+
const [nftImageError, setNftImageError] = (0, import_react44.useState)(false);
|
|
11379
|
+
const [logoError, setLogoError] = (0, import_react44.useState)(false);
|
|
11500
11380
|
const { assets: projectAssets, showBalanceAs: showBalanceAsSymbol } = useLumiaPassportConfig().config.current.projectAssets || {};
|
|
11501
|
-
const qc = (0,
|
|
11381
|
+
const qc = (0, import_react_query31.useQueryClient)();
|
|
11502
11382
|
const { balanceQueryKey } = projectAssets?.find((a) => a.symbol === showBalanceAsSymbol) || {};
|
|
11503
11383
|
const projectAssetBalance = !!balanceQueryKey ? qc.getQueryData(balanceQueryKey) : null;
|
|
11504
11384
|
const isNft = isNftAsset(asset);
|
|
11505
11385
|
const nftImage = getNftImage(asset);
|
|
11506
11386
|
const isSecurity = isSecurityToken(asset);
|
|
11507
|
-
const { data: assetRate, isLoading: isRateLoading } = (0,
|
|
11387
|
+
const { data: assetRate, isLoading: isRateLoading } = (0, import_react_query31.useQuery)({
|
|
11508
11388
|
retry: false,
|
|
11509
11389
|
staleTime: 4 * 60 * 1e3,
|
|
11510
11390
|
enabled: !!address && !!isAssetRateAvailable(asset.symbol) && !isProjectAsset && !isNft && !isSecurity,
|
|
@@ -11609,7 +11489,7 @@ function PortfolioItem(props) {
|
|
|
11609
11489
|
var import_jsx_runtime58 = require("react/jsx-runtime");
|
|
11610
11490
|
function PortfolioMenu() {
|
|
11611
11491
|
const { assets: projectAssets = [] } = useLumiaPassportConfig().config.current?.projectAssets || {};
|
|
11612
|
-
const qc = (0,
|
|
11492
|
+
const qc = (0, import_react_query32.useQueryClient)();
|
|
11613
11493
|
const address = useLumiaPassportSession((st) => st.address);
|
|
11614
11494
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
11615
11495
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
@@ -11622,7 +11502,7 @@ function PortfolioMenu() {
|
|
|
11622
11502
|
} = useBlockscoutAssets({
|
|
11623
11503
|
address
|
|
11624
11504
|
});
|
|
11625
|
-
const refreshAllAssetsBalances = (0,
|
|
11505
|
+
const refreshAllAssetsBalances = (0, import_react45.useCallback)(() => {
|
|
11626
11506
|
Promise.all(projectAssets.map((asset) => qc.invalidateQueries({ queryKey: asset.balanceQueryKey })));
|
|
11627
11507
|
refreshBlockscoutBalances();
|
|
11628
11508
|
}, [qc, projectAssets, refreshBlockscoutBalances]);
|
|
@@ -11674,10 +11554,10 @@ function PortfolioMenu() {
|
|
|
11674
11554
|
}
|
|
11675
11555
|
|
|
11676
11556
|
// src/internal/components/SecurityMenu/SecurityMenu.tsx
|
|
11677
|
-
var
|
|
11557
|
+
var import_react_query33 = require("@tanstack/react-query");
|
|
11678
11558
|
var import_dayjs3 = __toESM(require("dayjs"), 1);
|
|
11679
11559
|
var import_lucide_react41 = require("lucide-react");
|
|
11680
|
-
var
|
|
11560
|
+
var import_react46 = require("react");
|
|
11681
11561
|
init_auth();
|
|
11682
11562
|
init_keyshare();
|
|
11683
11563
|
init_iframe_manager();
|
|
@@ -11864,14 +11744,14 @@ function Keyshare(props) {
|
|
|
11864
11744
|
// src/internal/components/SecurityMenu/SecurityMenu.tsx
|
|
11865
11745
|
var import_jsx_runtime63 = require("react/jsx-runtime");
|
|
11866
11746
|
function SecurityMenu() {
|
|
11867
|
-
const qc = (0,
|
|
11747
|
+
const qc = (0, import_react_query33.useQueryClient)();
|
|
11868
11748
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
11869
11749
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
11870
11750
|
const userId = import_auth3.jwtTokenManager.getUserId();
|
|
11871
11751
|
const serverHasKeyshare = import_auth3.jwtTokenManager.getHasKeyshare() ?? false;
|
|
11872
|
-
const [isRemoving, setIsRemoving] = (0,
|
|
11873
|
-
const [appToRemove, setAppToRemove] = (0,
|
|
11874
|
-
const { data: recoveryData, isFetching: isRecoveryLoading } = (0,
|
|
11752
|
+
const [isRemoving, setIsRemoving] = (0, import_react46.useState)(false);
|
|
11753
|
+
const [appToRemove, setAppToRemove] = (0, import_react46.useState)(null);
|
|
11754
|
+
const { data: recoveryData, isFetching: isRecoveryLoading } = (0, import_react_query33.useQuery)({
|
|
11875
11755
|
enabled: !!userId,
|
|
11876
11756
|
queryKey: [KEYSHARE_RECOVERY_STATS_QUERY, userId],
|
|
11877
11757
|
queryFn: async () => {
|
|
@@ -12036,21 +11916,74 @@ function SecurityMenu() {
|
|
|
12036
11916
|
|
|
12037
11917
|
// src/internal/components/SendRecieveMenu/SendLumiaMenu.tsx
|
|
12038
11918
|
var import_lucide_react42 = require("lucide-react");
|
|
12039
|
-
var
|
|
11919
|
+
var import_react50 = require("react");
|
|
12040
11920
|
var import_viem9 = require("viem");
|
|
12041
11921
|
var import_wagmi4 = require("wagmi");
|
|
12042
11922
|
|
|
11923
|
+
// src/hooks/useNicknameResolve.ts
|
|
11924
|
+
var import_react_query34 = require("@tanstack/react-query");
|
|
11925
|
+
var import_react47 = require("react");
|
|
11926
|
+
init_nickname();
|
|
11927
|
+
init_profile();
|
|
11928
|
+
var DEBOUNCE_MS2 = 300;
|
|
11929
|
+
function looksLikeNickname(input) {
|
|
11930
|
+
if (!input) return false;
|
|
11931
|
+
if (input.startsWith("0x")) return false;
|
|
11932
|
+
if (input.startsWith("@")) return true;
|
|
11933
|
+
const normalized = input.toLowerCase().trim();
|
|
11934
|
+
return /^[a-z0-9_]+$/.test(normalized);
|
|
11935
|
+
}
|
|
11936
|
+
function useNicknameResolve(input, enabled = true) {
|
|
11937
|
+
const [debouncedInput, setDebouncedInput] = (0, import_react47.useState)("");
|
|
11938
|
+
const [isDebouncing, setIsDebouncing] = (0, import_react47.useState)(false);
|
|
11939
|
+
const normalized = normalizeNickname(input);
|
|
11940
|
+
const isNicknameInput = looksLikeNickname(input) && normalized.length >= 3;
|
|
11941
|
+
(0, import_react47.useEffect)(() => {
|
|
11942
|
+
if (!isNicknameInput || !enabled) {
|
|
11943
|
+
setDebouncedInput("");
|
|
11944
|
+
setIsDebouncing(false);
|
|
11945
|
+
return;
|
|
11946
|
+
}
|
|
11947
|
+
setIsDebouncing(true);
|
|
11948
|
+
const timer = setTimeout(() => {
|
|
11949
|
+
setDebouncedInput(normalized);
|
|
11950
|
+
setIsDebouncing(false);
|
|
11951
|
+
}, DEBOUNCE_MS2);
|
|
11952
|
+
return () => {
|
|
11953
|
+
clearTimeout(timer);
|
|
11954
|
+
};
|
|
11955
|
+
}, [normalized, isNicknameInput, enabled]);
|
|
11956
|
+
const query = (0, import_react_query34.useQuery)({
|
|
11957
|
+
queryKey: QUERY_KEYS.nicknameResolve(debouncedInput),
|
|
11958
|
+
queryFn: () => resolveNickname(debouncedInput),
|
|
11959
|
+
enabled: enabled && isNicknameInput && debouncedInput.length > 0,
|
|
11960
|
+
staleTime: 1e3 * 60 * 5,
|
|
11961
|
+
// 5 minutes - addresses don't change often
|
|
11962
|
+
retry: 1
|
|
11963
|
+
});
|
|
11964
|
+
const isNotFound = query.isError && query.error?.code === "NICKNAME_NOT_FOUND";
|
|
11965
|
+
return {
|
|
11966
|
+
data: query.data,
|
|
11967
|
+
isLoading: query.isLoading,
|
|
11968
|
+
isResolving: isDebouncing || query.isFetching,
|
|
11969
|
+
isError: query.isError,
|
|
11970
|
+
isNotFound,
|
|
11971
|
+
error: query.error,
|
|
11972
|
+
resolvedAddress: query.data?.walletAddress || null
|
|
11973
|
+
};
|
|
11974
|
+
}
|
|
11975
|
+
|
|
12043
11976
|
// src/hooks/useSendTransaction.ts
|
|
12044
|
-
var
|
|
11977
|
+
var import_react48 = require("react");
|
|
12045
11978
|
var import_viem7 = require("viem");
|
|
12046
11979
|
init_account();
|
|
12047
11980
|
function useSendTransaction() {
|
|
12048
11981
|
const session = useLumiaPassportSession((st) => st.session);
|
|
12049
11982
|
const address = useLumiaPassportSession((st) => st.address);
|
|
12050
|
-
const [isLoading, setIsLoading] = (0,
|
|
12051
|
-
const [error, setError] = (0,
|
|
12052
|
-
const [userOpHash, setUserOpHash] = (0,
|
|
12053
|
-
const sendTransaction = (0,
|
|
11983
|
+
const [isLoading, setIsLoading] = (0, import_react48.useState)(false);
|
|
11984
|
+
const [error, setError] = (0, import_react48.useState)(null);
|
|
11985
|
+
const [userOpHash, setUserOpHash] = (0, import_react48.useState)(null);
|
|
11986
|
+
const sendTransaction = (0, import_react48.useCallback)(
|
|
12054
11987
|
async (params) => {
|
|
12055
11988
|
if (!session || !address) {
|
|
12056
11989
|
setError("No active session");
|
|
@@ -12090,7 +12023,7 @@ function useSendTransaction() {
|
|
|
12090
12023
|
},
|
|
12091
12024
|
[session, address]
|
|
12092
12025
|
);
|
|
12093
|
-
const reset = (0,
|
|
12026
|
+
const reset = (0, import_react48.useCallback)(() => {
|
|
12094
12027
|
setError(null);
|
|
12095
12028
|
setUserOpHash(null);
|
|
12096
12029
|
setIsLoading(false);
|
|
@@ -12104,61 +12037,8 @@ function useSendTransaction() {
|
|
|
12104
12037
|
};
|
|
12105
12038
|
}
|
|
12106
12039
|
|
|
12107
|
-
// src/hooks/useNicknameResolve.ts
|
|
12108
|
-
var import_react_query36 = require("@tanstack/react-query");
|
|
12109
|
-
var import_react50 = require("react");
|
|
12110
|
-
init_nickname();
|
|
12111
|
-
init_profile();
|
|
12112
|
-
var DEBOUNCE_MS2 = 300;
|
|
12113
|
-
function looksLikeNickname(input) {
|
|
12114
|
-
if (!input) return false;
|
|
12115
|
-
if (input.startsWith("0x")) return false;
|
|
12116
|
-
if (input.startsWith("@")) return true;
|
|
12117
|
-
const normalized = input.toLowerCase().trim();
|
|
12118
|
-
return /^[a-z0-9_]+$/.test(normalized);
|
|
12119
|
-
}
|
|
12120
|
-
function useNicknameResolve(input, enabled = true) {
|
|
12121
|
-
const [debouncedInput, setDebouncedInput] = (0, import_react50.useState)("");
|
|
12122
|
-
const [isDebouncing, setIsDebouncing] = (0, import_react50.useState)(false);
|
|
12123
|
-
const normalized = normalizeNickname(input);
|
|
12124
|
-
const isNicknameInput = looksLikeNickname(input) && normalized.length >= 3;
|
|
12125
|
-
(0, import_react50.useEffect)(() => {
|
|
12126
|
-
if (!isNicknameInput || !enabled) {
|
|
12127
|
-
setDebouncedInput("");
|
|
12128
|
-
setIsDebouncing(false);
|
|
12129
|
-
return;
|
|
12130
|
-
}
|
|
12131
|
-
setIsDebouncing(true);
|
|
12132
|
-
const timer = setTimeout(() => {
|
|
12133
|
-
setDebouncedInput(normalized);
|
|
12134
|
-
setIsDebouncing(false);
|
|
12135
|
-
}, DEBOUNCE_MS2);
|
|
12136
|
-
return () => {
|
|
12137
|
-
clearTimeout(timer);
|
|
12138
|
-
};
|
|
12139
|
-
}, [normalized, isNicknameInput, enabled]);
|
|
12140
|
-
const query = (0, import_react_query36.useQuery)({
|
|
12141
|
-
queryKey: QUERY_KEYS.nicknameResolve(debouncedInput),
|
|
12142
|
-
queryFn: () => resolveNickname(debouncedInput),
|
|
12143
|
-
enabled: enabled && isNicknameInput && debouncedInput.length > 0,
|
|
12144
|
-
staleTime: 1e3 * 60 * 5,
|
|
12145
|
-
// 5 minutes - addresses don't change often
|
|
12146
|
-
retry: 1
|
|
12147
|
-
});
|
|
12148
|
-
const isNotFound = query.isError && query.error?.code === "NICKNAME_NOT_FOUND";
|
|
12149
|
-
return {
|
|
12150
|
-
data: query.data,
|
|
12151
|
-
isLoading: query.isLoading,
|
|
12152
|
-
isResolving: isDebouncing || query.isFetching,
|
|
12153
|
-
isError: query.isError,
|
|
12154
|
-
isNotFound,
|
|
12155
|
-
error: query.error,
|
|
12156
|
-
resolvedAddress: query.data?.walletAddress || null
|
|
12157
|
-
};
|
|
12158
|
-
}
|
|
12159
|
-
|
|
12160
12040
|
// src/modules/assets.ts
|
|
12161
|
-
var
|
|
12041
|
+
var import_react49 = __toESM(require("react"), 1);
|
|
12162
12042
|
var import_wagmi3 = require("wagmi");
|
|
12163
12043
|
var import_viem8 = require("viem");
|
|
12164
12044
|
init_base();
|
|
@@ -12305,7 +12185,7 @@ function useTokenBalance(tokenAddress, userAddress) {
|
|
|
12305
12185
|
}
|
|
12306
12186
|
});
|
|
12307
12187
|
const { tokenInfo } = useTokenInfo(tokenAddress);
|
|
12308
|
-
const formattedBalance =
|
|
12188
|
+
const formattedBalance = import_react49.default.useMemo(() => {
|
|
12309
12189
|
if (!balance || !tokenInfo) return "0";
|
|
12310
12190
|
return (0, import_viem8.formatUnits)(balance, tokenInfo.decimals);
|
|
12311
12191
|
}, [balance, tokenInfo]);
|
|
@@ -12332,16 +12212,21 @@ function SendLumiaMenu() {
|
|
|
12332
12212
|
address,
|
|
12333
12213
|
chainId: lumiaBeam.id
|
|
12334
12214
|
});
|
|
12335
|
-
const [recipient, setRecipient] = (0,
|
|
12336
|
-
const [amount, setAmount] = (0,
|
|
12337
|
-
const [txStep, setTxStep] = (0,
|
|
12338
|
-
const [validationError, setValidationError] = (0,
|
|
12215
|
+
const [recipient, setRecipient] = (0, import_react50.useState)("");
|
|
12216
|
+
const [amount, setAmount] = (0, import_react50.useState)("");
|
|
12217
|
+
const [txStep, setTxStep] = (0, import_react50.useState)("input");
|
|
12218
|
+
const [validationError, setValidationError] = (0, import_react50.useState)(null);
|
|
12339
12219
|
const isNicknameInput = looksLikeNickname(recipient);
|
|
12340
|
-
const {
|
|
12220
|
+
const {
|
|
12221
|
+
resolvedAddress,
|
|
12222
|
+
isResolving,
|
|
12223
|
+
isNotFound,
|
|
12224
|
+
data: nicknameData
|
|
12225
|
+
} = useNicknameResolve(recipient, isNicknameInput);
|
|
12341
12226
|
const effectiveAddress = isNicknameInput ? resolvedAddress : recipient;
|
|
12342
12227
|
const nativeAsset = assets.find((a) => a.type === "native");
|
|
12343
12228
|
const balance = nativeAsset ? parseFloat(nativeAsset.formattedBalance) : 0;
|
|
12344
|
-
(0,
|
|
12229
|
+
(0, import_react50.useEffect)(() => {
|
|
12345
12230
|
if (open) {
|
|
12346
12231
|
setTxStep("input");
|
|
12347
12232
|
setValidationError(null);
|
|
@@ -12447,30 +12332,18 @@ function SendLumiaMenu() {
|
|
|
12447
12332
|
" LUMIA"
|
|
12448
12333
|
] })
|
|
12449
12334
|
] }),
|
|
12450
|
-
/* @__PURE__ */ (0, import_jsx_runtime64.
|
|
12451
|
-
|
|
12452
|
-
|
|
12453
|
-
|
|
12454
|
-
|
|
12455
|
-
|
|
12456
|
-
|
|
12457
|
-
|
|
12458
|
-
|
|
12459
|
-
|
|
12460
|
-
|
|
12461
|
-
|
|
12462
|
-
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
|
|
12463
|
-
Button,
|
|
12464
|
-
{
|
|
12465
|
-
onClick: handleMaxAmount,
|
|
12466
|
-
variant: "ghost",
|
|
12467
|
-
size: "medium",
|
|
12468
|
-
style: { transform: "translateY(-50%)" },
|
|
12469
|
-
className: "absolute right-2 top-1/2",
|
|
12470
|
-
children: "MAX"
|
|
12471
|
-
}
|
|
12472
|
-
)
|
|
12473
|
-
] })
|
|
12335
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
|
|
12336
|
+
Input,
|
|
12337
|
+
{
|
|
12338
|
+
Icon: LumiaIcon,
|
|
12339
|
+
type: "number",
|
|
12340
|
+
value: amount,
|
|
12341
|
+
onChange: (e) => setAmount(e.target.value),
|
|
12342
|
+
placeholder: "0.0",
|
|
12343
|
+
step: "0.000001",
|
|
12344
|
+
element: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(Button, { onClick: handleMaxAmount, variant: "ghost", size: "medium", children: "MAX" })
|
|
12345
|
+
}
|
|
12346
|
+
)
|
|
12474
12347
|
] }),
|
|
12475
12348
|
(validationError || error) && /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "flex items-center gap-2 p-3 bg-[var(--l-pass-bg-error)] text-[var(--l-pass-error)] rounded-[var(--l-pass-el-bdrs)]", children: [
|
|
12476
12349
|
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_lucide_react42.AlertCircle, { className: "h-4 w-4" }),
|
|
@@ -12531,7 +12404,7 @@ function SendLumiaMenu() {
|
|
|
12531
12404
|
// src/internal/components/SendRecieveMenu/ReceiveLumiaMenu.tsx
|
|
12532
12405
|
var import_lucide_react43 = require("lucide-react");
|
|
12533
12406
|
var import_qrcode = __toESM(require("qrcode"), 1);
|
|
12534
|
-
var
|
|
12407
|
+
var import_react51 = require("react");
|
|
12535
12408
|
init_clients();
|
|
12536
12409
|
var import_jsx_runtime65 = require("react/jsx-runtime");
|
|
12537
12410
|
function ReceiveLumiaMenu() {
|
|
@@ -12540,9 +12413,9 @@ function ReceiveLumiaMenu() {
|
|
|
12540
12413
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
12541
12414
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
12542
12415
|
const open = page === "receive";
|
|
12543
|
-
const [qrCodeUrl, setQrCodeUrl] = (0,
|
|
12544
|
-
const [copied, setCopied] = (0,
|
|
12545
|
-
(0,
|
|
12416
|
+
const [qrCodeUrl, setQrCodeUrl] = (0, import_react51.useState)("");
|
|
12417
|
+
const [copied, setCopied] = (0, import_react51.useState)(false);
|
|
12418
|
+
(0, import_react51.useEffect)(() => {
|
|
12546
12419
|
if (open && address) {
|
|
12547
12420
|
import_qrcode.default.toDataURL(address, {
|
|
12548
12421
|
width: 200,
|
|
@@ -12555,7 +12428,7 @@ function ReceiveLumiaMenu() {
|
|
|
12555
12428
|
});
|
|
12556
12429
|
}
|
|
12557
12430
|
}, [open, address]);
|
|
12558
|
-
const handleCopy = (0,
|
|
12431
|
+
const handleCopy = (0, import_react51.useCallback)(async () => {
|
|
12559
12432
|
if (!address) return;
|
|
12560
12433
|
try {
|
|
12561
12434
|
await navigator.clipboard.writeText(address);
|
|
@@ -12601,7 +12474,7 @@ function ReceiveLumiaMenu() {
|
|
|
12601
12474
|
|
|
12602
12475
|
// src/internal/components/SettingsMenu/SettingsMenu.tsx
|
|
12603
12476
|
var import_lucide_react45 = require("lucide-react");
|
|
12604
|
-
var
|
|
12477
|
+
var import_react52 = require("react");
|
|
12605
12478
|
|
|
12606
12479
|
// src/internal/components/SettingsMenu/constants.ts
|
|
12607
12480
|
var import_lucide_react44 = require("lucide-react");
|
|
@@ -12636,35 +12509,46 @@ function SettingsMenu() {
|
|
|
12636
12509
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
12637
12510
|
const settingsNotifications = useLayoutDataStore((st) => st.settingsNotifications);
|
|
12638
12511
|
const setMainPageHeight = useLayoutDataStore((st) => st.setMainPageHeight);
|
|
12639
|
-
|
|
12512
|
+
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
12513
|
+
(0, import_react52.useEffect)(() => setMainPageHeight(DEFAULT_SETTINGS_MENU_HEIGHT), [setMainPageHeight]);
|
|
12640
12514
|
useProvidersList();
|
|
12641
12515
|
const navItems = NAV_BUTTONS.map((el) => ({ ...el, onClick: () => setPage(el.id) }));
|
|
12642
12516
|
const highlightedKeys = settingsNotifications.map((n) => n.target);
|
|
12643
|
-
return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
|
|
12644
|
-
|
|
12645
|
-
|
|
12646
|
-
|
|
12647
|
-
|
|
12648
|
-
|
|
12649
|
-
Button,
|
|
12650
|
-
{
|
|
12651
|
-
variant: "outline",
|
|
12652
|
-
size: "large",
|
|
12653
|
-
onClick,
|
|
12654
|
-
disabled: !address,
|
|
12655
|
-
className: cn(
|
|
12656
|
-
//
|
|
12657
|
-
"w-full items-center justify-start",
|
|
12658
|
-
highlightedKeys.includes(id) && "animate-glow-warning"
|
|
12659
|
-
),
|
|
12660
|
-
children: [
|
|
12661
|
-
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Icon2, { className: "w-4 h-4" }),
|
|
12662
|
-
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { children: name })
|
|
12663
|
-
]
|
|
12517
|
+
return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
|
|
12518
|
+
"div",
|
|
12519
|
+
{
|
|
12520
|
+
style: {
|
|
12521
|
+
"--l-pass-scrollbar-mah": `${maxScrollHeight}px`,
|
|
12522
|
+
"--l-pass-list-scrollbar-pd-r": "var(--l-pass-pd)"
|
|
12664
12523
|
},
|
|
12665
|
-
|
|
12666
|
-
|
|
12667
|
-
|
|
12524
|
+
className: "list-scrollbar-y w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]",
|
|
12525
|
+
children: [
|
|
12526
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
12527
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react45.ArrowLeft, { className: "h-4 w-4" }) }),
|
|
12528
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "text-xl font-semibold", children: "Settings" })
|
|
12529
|
+
] }),
|
|
12530
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: navItems.map(({ id, name, Icon: Icon2, onClick }) => /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
|
|
12531
|
+
Button,
|
|
12532
|
+
{
|
|
12533
|
+
variant: "outline",
|
|
12534
|
+
size: "large",
|
|
12535
|
+
onClick,
|
|
12536
|
+
disabled: !address,
|
|
12537
|
+
className: cn(
|
|
12538
|
+
//
|
|
12539
|
+
"w-full items-center justify-start",
|
|
12540
|
+
highlightedKeys.includes(id) && "animate-glow-warning"
|
|
12541
|
+
),
|
|
12542
|
+
children: [
|
|
12543
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Icon2, { className: "w-4 h-4" }),
|
|
12544
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { children: name })
|
|
12545
|
+
]
|
|
12546
|
+
},
|
|
12547
|
+
id
|
|
12548
|
+
)) })
|
|
12549
|
+
]
|
|
12550
|
+
}
|
|
12551
|
+
);
|
|
12668
12552
|
}
|
|
12669
12553
|
|
|
12670
12554
|
// src/internal/components/TermsOfService.tsx
|
|
@@ -12695,9 +12579,9 @@ function TermsOfService() {
|
|
|
12695
12579
|
}
|
|
12696
12580
|
|
|
12697
12581
|
// src/internal/components/TransactionsMenu/TransactionsMenu.tsx
|
|
12698
|
-
var
|
|
12582
|
+
var import_react_query35 = require("@tanstack/react-query");
|
|
12699
12583
|
var import_lucide_react48 = require("lucide-react");
|
|
12700
|
-
var
|
|
12584
|
+
var import_react53 = require("react");
|
|
12701
12585
|
|
|
12702
12586
|
// src/internal/components/TransactionsMenu/api.ts
|
|
12703
12587
|
init_base();
|
|
@@ -13162,24 +13046,24 @@ function TransactionsGroup(props) {
|
|
|
13162
13046
|
// src/internal/components/TransactionsMenu/TransactionsMenu.tsx
|
|
13163
13047
|
var import_jsx_runtime70 = require("react/jsx-runtime");
|
|
13164
13048
|
function TransactionsMenu() {
|
|
13165
|
-
const qc = (0,
|
|
13049
|
+
const qc = (0, import_react_query35.useQueryClient)();
|
|
13166
13050
|
const address = useLumiaPassportSession((st) => st.address);
|
|
13167
13051
|
const page = useLayoutDataStore((st) => st.page);
|
|
13168
13052
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
13169
13053
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
13170
|
-
const [expandedGroups, setExpandedGroups] = (0,
|
|
13054
|
+
const [expandedGroups, setExpandedGroups] = (0, import_react53.useState)({});
|
|
13171
13055
|
const {
|
|
13172
13056
|
data: txHistoryGroups = [],
|
|
13173
13057
|
isLoading: isTxHistoryLoading,
|
|
13174
13058
|
isFetching: isTxHistoryFetching,
|
|
13175
13059
|
error: txHistoryError
|
|
13176
|
-
} = (0,
|
|
13060
|
+
} = (0, import_react_query35.useQuery)({
|
|
13177
13061
|
retry: false,
|
|
13178
13062
|
enabled: !!address && page === "transactions",
|
|
13179
13063
|
queryKey: [TRANSACTIONS_HISTORY_QUERY_KEY, address],
|
|
13180
13064
|
queryFn: () => getTransactionsListQuery(address)
|
|
13181
13065
|
});
|
|
13182
|
-
const refreshTxHistory = (0,
|
|
13066
|
+
const refreshTxHistory = (0, import_react53.useCallback)(
|
|
13183
13067
|
() => qc.invalidateQueries({ queryKey: [TRANSACTIONS_HISTORY_QUERY_KEY, address] }),
|
|
13184
13068
|
[qc, address]
|
|
13185
13069
|
);
|
|
@@ -13189,7 +13073,7 @@ function TransactionsMenu() {
|
|
|
13189
13073
|
{
|
|
13190
13074
|
style: {
|
|
13191
13075
|
"--l-pass-scrollbar-mah": `${maxScrollHeight}px`,
|
|
13192
|
-
"--l-pass-list-scrollbar-pd-r": "
|
|
13076
|
+
"--l-pass-list-scrollbar-pd-r": "var(--l-pass-pd)"
|
|
13193
13077
|
},
|
|
13194
13078
|
className: "list-scrollbar-y w-full p-[var(--l-pass-pd)]",
|
|
13195
13079
|
children: /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: [
|
|
@@ -13333,8 +13217,6 @@ var import_jsx_runtime71 = require("react/jsx-runtime");
|
|
|
13333
13217
|
var CLEAR_DIALOG_TIMEOUT = MAIN_DIALOG_ANIMATION_SPEED + 5;
|
|
13334
13218
|
function usePageMapper() {
|
|
13335
13219
|
const page = useLayoutDataStore((st) => st.page);
|
|
13336
|
-
const session = useLumiaPassportSession((st) => st.session);
|
|
13337
|
-
const protectedRoutes = !!session ? PAGE_MAP : PAGE_MAP;
|
|
13338
13220
|
const {
|
|
13339
13221
|
setDialogTitle,
|
|
13340
13222
|
setDialogDescription,
|
|
@@ -13343,7 +13225,7 @@ function usePageMapper() {
|
|
|
13343
13225
|
setIsDialogOpen,
|
|
13344
13226
|
setIsDialogClosing
|
|
13345
13227
|
} = useLayoutStore();
|
|
13346
|
-
const closeDialog = (0,
|
|
13228
|
+
const closeDialog = (0, import_react54.useCallback)(() => {
|
|
13347
13229
|
setIsDialogClosing(true);
|
|
13348
13230
|
setTimeout(() => {
|
|
13349
13231
|
setDialogContent(null);
|
|
@@ -13354,7 +13236,7 @@ function usePageMapper() {
|
|
|
13354
13236
|
setIsDialogOpen(false);
|
|
13355
13237
|
}, CLEAR_DIALOG_TIMEOUT);
|
|
13356
13238
|
}, [setDialogContent, setDialogDescription, setDialogTitle, setIsDialogForced, setIsDialogOpen, setIsDialogClosing]);
|
|
13357
|
-
const openDialog = (0,
|
|
13239
|
+
const openDialog = (0, import_react54.useCallback)(
|
|
13358
13240
|
(pageItem) => {
|
|
13359
13241
|
const PageContentComponent = pageItem.component;
|
|
13360
13242
|
setDialogTitle(pageItem.title);
|
|
@@ -13364,20 +13246,20 @@ function usePageMapper() {
|
|
|
13364
13246
|
},
|
|
13365
13247
|
[setDialogContent, setDialogDescription, setDialogTitle, setIsDialogOpen]
|
|
13366
13248
|
);
|
|
13367
|
-
(0,
|
|
13249
|
+
(0, import_react54.useEffect)(() => {
|
|
13368
13250
|
if (page === null) return closeDialog();
|
|
13369
|
-
const pageItem =
|
|
13251
|
+
const pageItem = PAGE_MAP[page];
|
|
13370
13252
|
if (!pageItem) {
|
|
13371
13253
|
alert(`[PASSPORT MAPPER]: Requested page "${page}" is not existing or not allowed. Closing dialog...`);
|
|
13372
13254
|
closeDialog();
|
|
13373
13255
|
return;
|
|
13374
13256
|
}
|
|
13375
13257
|
openDialog(pageItem);
|
|
13376
|
-
}, [
|
|
13258
|
+
}, [page, closeDialog, openDialog]);
|
|
13377
13259
|
}
|
|
13378
13260
|
|
|
13379
13261
|
// src/internal/hooks/useSettingsNotifications.ts
|
|
13380
|
-
var
|
|
13262
|
+
var import_react55 = require("react");
|
|
13381
13263
|
init_auth();
|
|
13382
13264
|
var EMAIL_NOT_CONNECTED_NOTIFICATION = {
|
|
13383
13265
|
id: "email-not-connected",
|
|
@@ -13388,7 +13270,7 @@ function useSettingsNotifications() {
|
|
|
13388
13270
|
const setSettingsNotifications = useLayoutDataStore((st) => st.setSettingsNotifications);
|
|
13389
13271
|
const providers = import_auth3.jwtTokenManager.getProviders();
|
|
13390
13272
|
const hasEmail = providers.includes("email");
|
|
13391
|
-
(0,
|
|
13273
|
+
(0, import_react55.useEffect)(() => {
|
|
13392
13274
|
setSettingsNotifications({
|
|
13393
13275
|
...EMAIL_NOT_CONNECTED_NOTIFICATION,
|
|
13394
13276
|
status: hasEmail ? "resolved" : "active"
|
|
@@ -13397,7 +13279,7 @@ function useSettingsNotifications() {
|
|
|
13397
13279
|
}
|
|
13398
13280
|
|
|
13399
13281
|
// src/internal/hooks/useWalletStatus.ts
|
|
13400
|
-
var
|
|
13282
|
+
var import_react56 = require("react");
|
|
13401
13283
|
init_auth();
|
|
13402
13284
|
function useWalletStatus() {
|
|
13403
13285
|
const isIframeReady = useLumiaPassportSession((st) => st.isIframeReady);
|
|
@@ -13407,7 +13289,7 @@ function useWalletStatus() {
|
|
|
13407
13289
|
config: { current: config },
|
|
13408
13290
|
callbacks
|
|
13409
13291
|
} = useLumiaPassportConfig();
|
|
13410
|
-
(0,
|
|
13292
|
+
(0, import_react56.useEffect)(() => {
|
|
13411
13293
|
if (!isIframeReady || !config.projectId || !callbacks?.onWalletReady) return;
|
|
13412
13294
|
const userId = import_auth3.jwtTokenManager.getUserId();
|
|
13413
13295
|
const hasKeyshare = import_auth3.jwtTokenManager.getHasKeyshare();
|
|
@@ -13437,15 +13319,13 @@ function LumiaPassportDialog() {
|
|
|
13437
13319
|
const mainPageHeight = useLayoutDataStore((st) => st.mainPageHeight);
|
|
13438
13320
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
13439
13321
|
const { colorMode, isDialogOpen, dialogTitle, dialogDescription, dialogContent, isDialogForced, setIsSettings } = useLayoutStore();
|
|
13440
|
-
(0,
|
|
13322
|
+
(0, import_react57.useEffect)(() => setIsSettings(!!session), [session, setIsSettings]);
|
|
13441
13323
|
usePageMapper();
|
|
13442
13324
|
useAutoConnect();
|
|
13443
|
-
useCheckVaultStatus();
|
|
13444
13325
|
useBackupStatusChanges();
|
|
13445
13326
|
useDetectMaxScrollHeight();
|
|
13446
13327
|
useSettingsNotifications();
|
|
13447
13328
|
useListenIframeAuthEvents();
|
|
13448
|
-
useBackupWarning();
|
|
13449
13329
|
useWalletStatus();
|
|
13450
13330
|
const isHeaderHidden = !session || page === "keysare-backup" /* KEYSARE_BACKUP */ && !hasServerVault;
|
|
13451
13331
|
return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
|
|
@@ -13479,23 +13359,23 @@ function LumiaPassportDialog() {
|
|
|
13479
13359
|
}
|
|
13480
13360
|
|
|
13481
13361
|
// src/internal/components/TssManager.tsx
|
|
13482
|
-
var
|
|
13362
|
+
var import_react58 = __toESM(require("react"), 1);
|
|
13483
13363
|
init_auth();
|
|
13484
13364
|
init_clients();
|
|
13485
|
-
var TssManagerWithRef =
|
|
13365
|
+
var TssManagerWithRef = import_react58.default.forwardRef((props, ref) => {
|
|
13486
13366
|
const { mpcPin } = props;
|
|
13487
13367
|
const usePaymaster = useLumiaPassportSession((st) => st.usePaymaster);
|
|
13488
13368
|
const setStatus = useLumiaPassportSession((st) => st.setStatus);
|
|
13489
13369
|
const setSession = useLumiaPassportSession((st) => st.setSession);
|
|
13490
13370
|
const setAddress = useLumiaPassportSession((st) => st.setAddress);
|
|
13491
|
-
const onSessionCreated = (0,
|
|
13371
|
+
const onSessionCreated = (0, import_react58.useCallback)(
|
|
13492
13372
|
(session, address) => {
|
|
13493
13373
|
setSession(session);
|
|
13494
13374
|
setAddress(address);
|
|
13495
13375
|
},
|
|
13496
13376
|
[setSession, setAddress]
|
|
13497
13377
|
);
|
|
13498
|
-
const createSessionWithKeyshare =
|
|
13378
|
+
const createSessionWithKeyshare = import_react58.default.useCallback(
|
|
13499
13379
|
async (userId, hasServerKeyshare, isNewUser) => {
|
|
13500
13380
|
setStatus("checking key management setup...");
|
|
13501
13381
|
await ensureKeyshare(userId, hasServerKeyshare, setStatus, isNewUser);
|
|
@@ -13516,18 +13396,18 @@ var TssManagerWithRef = import_react60.default.forwardRef((props, ref) => {
|
|
|
13516
13396
|
},
|
|
13517
13397
|
[setStatus, usePaymaster, mpcPin]
|
|
13518
13398
|
);
|
|
13519
|
-
|
|
13399
|
+
import_react58.default.useImperativeHandle(ref, () => ({ createSessionWithKeyshare }), [createSessionWithKeyshare]);
|
|
13520
13400
|
return null;
|
|
13521
13401
|
});
|
|
13522
13402
|
|
|
13523
13403
|
// src/internal/components/WalletConnectHandler.tsx
|
|
13524
13404
|
var import_rainbowkit = require("@rainbow-me/rainbowkit");
|
|
13525
|
-
var
|
|
13526
|
-
var
|
|
13405
|
+
var import_react_query36 = require("@tanstack/react-query");
|
|
13406
|
+
var import_react59 = __toESM(require("react"), 1);
|
|
13527
13407
|
var import_wagmi5 = require("wagmi");
|
|
13528
13408
|
init_wallet();
|
|
13529
13409
|
function WalletConnectHandler() {
|
|
13530
|
-
const qc = (0,
|
|
13410
|
+
const qc = (0, import_react_query36.useQueryClient)();
|
|
13531
13411
|
const callbacks = useLumiaPassportConfig().callbacks;
|
|
13532
13412
|
const passportWalletAddress = useLumiaPassportSession((st) => st.address);
|
|
13533
13413
|
const { address: walletAddress, isConnected, chain, connector } = (0, import_wagmi5.useAccount)();
|
|
@@ -13541,7 +13421,7 @@ function WalletConnectHandler() {
|
|
|
13541
13421
|
const setManageWalletLinkError = useManageWalletStore((st) => st.setLinkError);
|
|
13542
13422
|
const setLinkIsLoading = useManageWalletStore((st) => st.setLinkIsLoading);
|
|
13543
13423
|
const setProviderType = useManageWalletStore((st) => st.setProviderType);
|
|
13544
|
-
const onLinkingComplete = (0,
|
|
13424
|
+
const onLinkingComplete = (0, import_react59.useCallback)(
|
|
13545
13425
|
async (success) => {
|
|
13546
13426
|
setIsWalletLinking(false);
|
|
13547
13427
|
if (!success && !passportWalletAddress) {
|
|
@@ -13568,8 +13448,8 @@ function WalletConnectHandler() {
|
|
|
13568
13448
|
},
|
|
13569
13449
|
[qc, passportWalletAddress, callbacks, setProviderType, setPage, setIsWalletLinking]
|
|
13570
13450
|
);
|
|
13571
|
-
const [hasStartedLinking, setHasStartedLinking] =
|
|
13572
|
-
(0,
|
|
13451
|
+
const [hasStartedLinking, setHasStartedLinking] = import_react59.default.useState(false);
|
|
13452
|
+
(0, import_react59.useEffect)(() => {
|
|
13573
13453
|
if (isWalletLinking && !hasStartedLinking) {
|
|
13574
13454
|
setHasStartedLinking(true);
|
|
13575
13455
|
setProviderType(null);
|
|
@@ -13589,14 +13469,14 @@ function WalletConnectHandler() {
|
|
|
13589
13469
|
if (isConnected) disconnect();
|
|
13590
13470
|
}
|
|
13591
13471
|
}, [isWalletLinking, hasStartedLinking, isConnected, openConnectModal, disconnect, setPage, setProviderType]);
|
|
13592
|
-
(0,
|
|
13472
|
+
(0, import_react59.useEffect)(() => {
|
|
13593
13473
|
if (hasStartedLinking && !connectModalOpen && !isConnected && isWalletLinking) {
|
|
13594
13474
|
console.log("[WalletConnectHandler] Modal closed without connecting");
|
|
13595
13475
|
onLinkingComplete(false);
|
|
13596
13476
|
setHasStartedLinking(false);
|
|
13597
13477
|
}
|
|
13598
13478
|
}, [connectModalOpen, hasStartedLinking, isConnected, isWalletLinking]);
|
|
13599
|
-
const { mutate: handleWalletSign, isPending: isWalletSigning } = (0,
|
|
13479
|
+
const { mutate: handleWalletSign, isPending: isWalletSigning } = (0, import_react_query36.useMutation)({
|
|
13600
13480
|
mutationFn: async (payload) => {
|
|
13601
13481
|
const { chainId, signingWalletAddress } = payload;
|
|
13602
13482
|
if (!signingWalletAddress || !chainId) {
|
|
@@ -13665,7 +13545,7 @@ function WalletConnectHandler() {
|
|
|
13665
13545
|
setPage(passportWalletAddress ? "manage-wallet" /* MANAGE_WALLET */ : "auth" /* AUTH */);
|
|
13666
13546
|
}
|
|
13667
13547
|
});
|
|
13668
|
-
(0,
|
|
13548
|
+
(0, import_react59.useEffect)(() => {
|
|
13669
13549
|
if (!!chain?.id && isConnected && walletAddress && isWalletLinking && hasStartedLinking) {
|
|
13670
13550
|
console.log("[WalletConnectHandler] handleWalletSign triggered");
|
|
13671
13551
|
handleWalletSign({ chainId: chain.id, signingWalletAddress: walletAddress });
|
|
@@ -13701,7 +13581,7 @@ var useLumiaPassportSession = (0, import_zustand6.create)((set) => ({
|
|
|
13701
13581
|
}));
|
|
13702
13582
|
function LumiaPassportSessionProvider({ children }) {
|
|
13703
13583
|
const config = useLumiaPassportConfig().config;
|
|
13704
|
-
return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(
|
|
13584
|
+
return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(import_react60.Fragment, { children: [
|
|
13705
13585
|
children,
|
|
13706
13586
|
config.current?.wallet?.enabled && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(WalletConnectHandler, {}),
|
|
13707
13587
|
/* @__PURE__ */ (0, import_jsx_runtime73.jsx)(BalanceFeedProvider, {}),
|
|
@@ -13753,14 +13633,14 @@ var LumiaWagmiProvider = ({ children }) => {
|
|
|
13753
13633
|
|
|
13754
13634
|
// src/context/LumiaPassportContext.tsx
|
|
13755
13635
|
var import_jsx_runtime75 = require("react/jsx-runtime");
|
|
13756
|
-
var LumiaPassportContext = (0,
|
|
13636
|
+
var LumiaPassportContext = (0, import_react61.createContext)(void 0);
|
|
13757
13637
|
function LumiaPassportProvider(props) {
|
|
13758
13638
|
const { children, projectId, initialConfig = {}, callbacks } = props;
|
|
13759
13639
|
const setIsIframeReady = useLumiaPassportSession((st) => st.setIsIframeReady);
|
|
13760
13640
|
const setWalletReadyStatus = useLumiaPassportSession((st) => st.setWalletReadyStatus);
|
|
13761
|
-
(0,
|
|
13762
|
-
const config = (0,
|
|
13763
|
-
const updateConfig = (0,
|
|
13641
|
+
(0, import_react61.useEffect)(() => notifyNoProjetctId(projectId), [projectId]);
|
|
13642
|
+
const config = (0, import_react61.useRef)({ projectId, ...DEFAULT_LUMIA_PASSPORT_CONFIG });
|
|
13643
|
+
const updateConfig = (0, import_react61.useCallback)((updates) => {
|
|
13764
13644
|
const prev = config.current;
|
|
13765
13645
|
const next = { ...prev };
|
|
13766
13646
|
if (updates.projectId !== void 0) next.projectId = updates.projectId;
|
|
@@ -13795,7 +13675,7 @@ function LumiaPassportProvider(props) {
|
|
|
13795
13675
|
}
|
|
13796
13676
|
config.current = next;
|
|
13797
13677
|
}, []);
|
|
13798
|
-
(0,
|
|
13678
|
+
(0, import_react61.useEffect)(() => {
|
|
13799
13679
|
if (typeof window === "undefined" || !projectId) return;
|
|
13800
13680
|
const mergedConfig = (0, import_lodash_es4.merge)(DEFAULT_LUMIA_PASSPORT_CONFIG, initialConfig);
|
|
13801
13681
|
updateConfig(mergedConfig);
|
|
@@ -13840,19 +13720,21 @@ function LumiaPassportProvider(props) {
|
|
|
13840
13720
|
console.error("[LumiaPassport] Error setting up iframe manager:", error);
|
|
13841
13721
|
}
|
|
13842
13722
|
}, [projectId, initialConfig, callbacks, updateConfig, setIsIframeReady, setWalletReadyStatus]);
|
|
13843
|
-
const contextValue = (0,
|
|
13723
|
+
const contextValue = (0, import_react61.useMemo)(() => ({ config, updateConfig, callbacks }), [config, updateConfig, callbacks]);
|
|
13844
13724
|
return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(LumiaWagmiProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(LumiaPassportContext.Provider, { value: contextValue, children }) });
|
|
13845
13725
|
}
|
|
13846
13726
|
var useLumiaPassportConfig = () => {
|
|
13847
|
-
const ctx = (0,
|
|
13727
|
+
const ctx = (0, import_react61.useContext)(LumiaPassportContext);
|
|
13848
13728
|
if (!ctx) throw new Error("useLumiaPassportConfig must be used within a LumiaPassportProvider");
|
|
13849
13729
|
return ctx;
|
|
13850
13730
|
};
|
|
13851
13731
|
|
|
13852
13732
|
// src/components/ConnectWalletButton.tsx
|
|
13733
|
+
var import_react_query37 = require("@tanstack/react-query");
|
|
13853
13734
|
var import_lucide_react49 = require("lucide-react");
|
|
13854
|
-
var
|
|
13735
|
+
var import_react62 = require("react");
|
|
13855
13736
|
init_auth();
|
|
13737
|
+
init_profile();
|
|
13856
13738
|
var import_jsx_runtime76 = (
|
|
13857
13739
|
/** external Buttons can be provided */
|
|
13858
13740
|
require("react/jsx-runtime")
|
|
@@ -13875,10 +13757,16 @@ function ConnectWalletButton(props) {
|
|
|
13875
13757
|
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
13876
13758
|
const { session, address, hasServerVault, isLoading, isIframeReady, status, setUsePaymaster } = useLumiaPassportSession();
|
|
13877
13759
|
const connectButtonLabel = getFormattedStatus(label || "Connect", status, isIframeReady);
|
|
13878
|
-
(0,
|
|
13760
|
+
(0, import_react62.useEffect)(() => setUsePaymaster(usePaymaster), [setUsePaymaster, usePaymaster]);
|
|
13761
|
+
const { data: profile, isLoading: isProfileLoading } = (0, import_react_query37.useQuery)({
|
|
13762
|
+
retry: false,
|
|
13763
|
+
enabled: !!address,
|
|
13764
|
+
queryKey: [QUERY_KEYS.userProfile, address],
|
|
13765
|
+
queryFn: getUserProfile
|
|
13766
|
+
});
|
|
13879
13767
|
const avatar = import_auth3.jwtTokenManager.getAvatar();
|
|
13880
|
-
const displayName = import_auth3.jwtTokenManager.getDisplayName();
|
|
13881
|
-
const indicators = (0,
|
|
13768
|
+
const displayName = profile?.nicknameDisplay || profile?.displayName || import_auth3.jwtTokenManager.getDisplayName();
|
|
13769
|
+
const indicators = (0, import_react62.useMemo)(() => {
|
|
13882
13770
|
const userId = import_auth3.jwtTokenManager.getUserId();
|
|
13883
13771
|
if (!userId) return { server: false, local: false, backup: false };
|
|
13884
13772
|
const server = import_auth3.jwtTokenManager.getHasKeyshare() ?? false;
|
|
@@ -13934,7 +13822,7 @@ function ConnectWalletButton(props) {
|
|
|
13934
13822
|
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "w-12 h-12 rounded-full bg-[var(--l-pass-fg)] flex items-center justify-center flex-shrink-0", children: avatar ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" }) : /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(LumiaIcon, { width: 48, height: 48 }) }),
|
|
13935
13823
|
/* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "text-left flex-1 min-w-0 text-[var(--l-pass-fg)]", children: [
|
|
13936
13824
|
/* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
13937
|
-
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "w-fit text-[14px] leading-4 truncate max-w-[144px] text-[var(--l-pass-fg)]", children: displayName }),
|
|
13825
|
+
isProfileLoading ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(import_lucide_react49.Loader, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "w-fit text-[14px] leading-4 truncate max-w-[144px] text-[var(--l-pass-fg)]", children: displayName }),
|
|
13938
13826
|
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)(KYCStatus, {})
|
|
13939
13827
|
] }),
|
|
13940
13828
|
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)(BalanceView, {})
|
|
@@ -14048,13 +13936,13 @@ var useLumiaPassportRecoveryUserId = () => useLumiaPassportSession((st) => st.re
|
|
|
14048
13936
|
var useLumiaPassportHasServerVault = () => useLumiaPassportSession((st) => st.hasServerVault);
|
|
14049
13937
|
|
|
14050
13938
|
// src/hooks/useLumiaPassportOpen.ts
|
|
14051
|
-
var
|
|
13939
|
+
var import_react63 = require("react");
|
|
14052
13940
|
function useLumiaPassportOpen() {
|
|
14053
13941
|
const page = useLayoutDataStore((st) => st.page);
|
|
14054
13942
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
14055
13943
|
const setPageParams = useLayoutDataStore((st) => st.setPageParams);
|
|
14056
13944
|
const address = useLumiaPassportSession((st) => st.address);
|
|
14057
|
-
const open = (0,
|
|
13945
|
+
const open = (0, import_react63.useCallback)(
|
|
14058
13946
|
(passportPage, params) => {
|
|
14059
13947
|
if (!address) return setPage("auth" /* AUTH */);
|
|
14060
13948
|
if (!!address && passportPage === "auth" /* AUTH */) return setPage("manage-wallet" /* MANAGE_WALLET */);
|
|
@@ -14063,12 +13951,12 @@ function useLumiaPassportOpen() {
|
|
|
14063
13951
|
},
|
|
14064
13952
|
[setPage, setPageParams, address]
|
|
14065
13953
|
);
|
|
14066
|
-
const close = (0,
|
|
13954
|
+
const close = (0, import_react63.useCallback)(() => setPage(null), [setPage]);
|
|
14067
13955
|
return { open, close, isOpen: page !== null };
|
|
14068
13956
|
}
|
|
14069
13957
|
|
|
14070
13958
|
// src/hooks/useLumiaPassportColorMode.ts
|
|
14071
|
-
var
|
|
13959
|
+
var import_react64 = require("react");
|
|
14072
13960
|
function useLumiaPassportColorMode() {
|
|
14073
13961
|
const {
|
|
14074
13962
|
config: { current: config }
|
|
@@ -14076,14 +13964,14 @@ function useLumiaPassportColorMode() {
|
|
|
14076
13964
|
const preferedColorMode = config?.preferedColorMode;
|
|
14077
13965
|
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
14078
13966
|
const handleStoreColorMode = useLayoutStore((st) => st.setColorMode);
|
|
14079
|
-
const setColorMode = (0,
|
|
13967
|
+
const setColorMode = (0, import_react64.useCallback)(
|
|
14080
13968
|
(mode) => {
|
|
14081
13969
|
localStorage.setItem(LOCAL_COLOR_MODE_KEY, mode);
|
|
14082
13970
|
handleStoreColorMode(mode);
|
|
14083
13971
|
},
|
|
14084
13972
|
[handleStoreColorMode]
|
|
14085
13973
|
);
|
|
14086
|
-
(0,
|
|
13974
|
+
(0, import_react64.useEffect)(() => {
|
|
14087
13975
|
let targetColorMode = localStorage.getItem(LOCAL_COLOR_MODE_KEY);
|
|
14088
13976
|
if (!targetColorMode && !preferedColorMode) {
|
|
14089
13977
|
const systemMode = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
@@ -14126,7 +14014,7 @@ function ThemeToggle(props) {
|
|
|
14126
14014
|
|
|
14127
14015
|
// src/context/RainbowKitContext.tsx
|
|
14128
14016
|
var import_rainbowkit3 = require("@rainbow-me/rainbowkit");
|
|
14129
|
-
var
|
|
14017
|
+
var import_react65 = require("react");
|
|
14130
14018
|
var import_wagmi9 = require("wagmi");
|
|
14131
14019
|
|
|
14132
14020
|
// src/config/rainbowkit.ts
|
|
@@ -14358,8 +14246,8 @@ var import_jsx_runtime78 = require("react/jsx-runtime");
|
|
|
14358
14246
|
function LumiaRainbowKitProvider({ children }) {
|
|
14359
14247
|
const config = useLumiaPassportConfig().config;
|
|
14360
14248
|
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
14361
|
-
const rainbowConfig2 = (0,
|
|
14362
|
-
const customTheme = (0,
|
|
14249
|
+
const rainbowConfig2 = (0, import_react65.useMemo)(() => createRainbowConfig(config.current?.wallet?.walletConnectProjectId), [config]);
|
|
14250
|
+
const customTheme = (0, import_react65.useMemo)(
|
|
14363
14251
|
() => colorMode === "dark" ? {
|
|
14364
14252
|
...(0, import_rainbowkit3.darkTheme)(),
|
|
14365
14253
|
colors: { ...(0, import_rainbowkit3.darkTheme)().colors, ...rainbowTheme.darkMode.colors },
|
|
@@ -14811,14 +14699,14 @@ var Hash = ({
|
|
|
14811
14699
|
};
|
|
14812
14700
|
|
|
14813
14701
|
// src/internal/components/TransactionsMenu/TransactionsList.tsx
|
|
14814
|
-
var
|
|
14702
|
+
var import_react66 = require("react");
|
|
14815
14703
|
init_base();
|
|
14816
14704
|
var import_jsx_runtime83 = require("react/jsx-runtime");
|
|
14817
14705
|
var TransactionsList = ({ address, itemsCount = 10 }) => {
|
|
14818
|
-
const [transactions, setTransactions] = (0,
|
|
14819
|
-
const [loading, setLoading] = (0,
|
|
14820
|
-
const [error, setError] = (0,
|
|
14821
|
-
(0,
|
|
14706
|
+
const [transactions, setTransactions] = (0, import_react66.useState)([]);
|
|
14707
|
+
const [loading, setLoading] = (0, import_react66.useState)(true);
|
|
14708
|
+
const [error, setError] = (0, import_react66.useState)(null);
|
|
14709
|
+
(0, import_react66.useEffect)(() => {
|
|
14822
14710
|
const fetchTransactions = async () => {
|
|
14823
14711
|
try {
|
|
14824
14712
|
setLoading(true);
|
|
@@ -15120,11 +15008,11 @@ function useUserOpStatus(options = {}) {
|
|
|
15120
15008
|
|
|
15121
15009
|
// src/hooks/useLogout.ts
|
|
15122
15010
|
var import_auth18 = require("@lumiapassport/core/auth");
|
|
15123
|
-
var
|
|
15011
|
+
var import_react67 = require("react");
|
|
15124
15012
|
function useLogout() {
|
|
15125
15013
|
const { setSession, setIsLoading, setAddress, setStatus, setError, address } = useLumiaPassportSession();
|
|
15126
15014
|
const { callbacks } = useLumiaPassportConfig();
|
|
15127
|
-
const logout2 = (0,
|
|
15015
|
+
const logout2 = (0, import_react67.useCallback)(async () => {
|
|
15128
15016
|
const prevAddress = address;
|
|
15129
15017
|
let userId = null;
|
|
15130
15018
|
setIsLoading(true);
|