@lumiapassport/ui-kit 1.15.2 → 1.15.4
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 +1360 -637
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +48 -1
- package/dist/index.d.ts +48 -1
- package/dist/index.js +1512 -778
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -4528,7 +4528,7 @@ var init_profile = __esm({
|
|
|
4528
4528
|
});
|
|
4529
4529
|
|
|
4530
4530
|
// src/styles/built.css
|
|
4531
|
-
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-border\\)\\]{border-color:var(--l-pass-border)}.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-secondary\\)\\]{background-color:var(--l-pass-bg-secondary)}.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}';
|
|
4531
|
+
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 .sticky{position:sticky}.lumia-scope .inset-0{inset:0}.lumia-scope .inset-y-0{top:0;bottom:0}.lumia-scope .-bottom-1{bottom:-.25rem}.lumia-scope .-right-0{right:0}.lumia-scope .-right-0\\.5{right:-.125rem}.lumia-scope .-right-1{right:-.25rem}.lumia-scope .-right-2{right:-.5rem}.lumia-scope .-top-0{top:0}.lumia-scope .-top-0\\.5{top:-.125rem}.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-1{height:.25rem}.lumia-scope .h-1\\.5{height:.375rem}.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-64{max-height:16rem}.lumia-scope .max-h-80{max-height:20rem}.lumia-scope .max-h-96{max-height:24rem}.lumia-scope .max-h-\\[95dvh\\]{max-height:95dvh}.lumia-scope .max-h-full{max-height:100%}.lumia-scope .w-1{width:.25rem}.lumia-scope .w-1\\.5{width:.375rem}.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-72{width:18rem}.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-\\[80px\\]{max-width:80px}.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 .rotate-180{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 .rotate-180{--tw-rotate:180deg}.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-help{cursor:help}.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-border\\)\\]{border-color:var(--l-pass-border)}.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-secondary\\)\\]{background-color:var(--l-pass-bg-secondary)}.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-black\\/90{background-color:rgba(0,0,0,.9)}.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 .tracking-wider{letter-spacing:.05em}.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 .transition-transform{transition-property:transform;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,#16a34a);--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,#ca8a04);--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#dc2626);--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,#22c55e);--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,#eab308);--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#ef4444);--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-bg-secondary\\)\\]:hover{background-color:var(--l-pass-bg-secondary)}.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-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.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\\:bg-transparent:focus{background-color:transparent}.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
4532
|
|
|
4533
4533
|
// src/context/LumiaPassportContext.tsx
|
|
4534
4534
|
init_lumiaPassport();
|
|
@@ -4537,15 +4537,15 @@ import { initSdkErrorTracking } from "@lumiapassport/core/internal/error-trackin
|
|
|
4537
4537
|
import { merge as merge2 } from "lodash-es";
|
|
4538
4538
|
import {
|
|
4539
4539
|
createContext,
|
|
4540
|
-
useCallback as
|
|
4540
|
+
useCallback as useCallback23,
|
|
4541
4541
|
useContext,
|
|
4542
|
-
useEffect as
|
|
4543
|
-
useMemo as
|
|
4544
|
-
useRef as
|
|
4542
|
+
useEffect as useEffect35,
|
|
4543
|
+
useMemo as useMemo8,
|
|
4544
|
+
useRef as useRef15
|
|
4545
4545
|
} from "react";
|
|
4546
4546
|
|
|
4547
4547
|
// src/context/LumiaPassportSessionContext.tsx
|
|
4548
|
-
import { Fragment as
|
|
4548
|
+
import { Fragment as Fragment28 } from "react";
|
|
4549
4549
|
import { create as create6 } from "zustand";
|
|
4550
4550
|
|
|
4551
4551
|
// src/internal/components/BalanceFeedProvider/BalanceFeedProvider.tsx
|
|
@@ -4724,7 +4724,7 @@ function BalanceFeedProvider() {
|
|
|
4724
4724
|
|
|
4725
4725
|
// src/internal/components/Dialog/LumiaPassportDialog.tsx
|
|
4726
4726
|
import { AnimatePresence as AnimatePresence3, motion as motion3 } from "framer-motion";
|
|
4727
|
-
import { useEffect as
|
|
4727
|
+
import { useEffect as useEffect33 } from "react";
|
|
4728
4728
|
|
|
4729
4729
|
// src/internal/components/Footer/Footer.tsx
|
|
4730
4730
|
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
|
@@ -5043,8 +5043,8 @@ function LumiaIcon(props) {
|
|
|
5043
5043
|
|
|
5044
5044
|
// src/internal/components/Header/Header.tsx
|
|
5045
5045
|
import { useQuery as useQuery3 } from "@tanstack/react-query";
|
|
5046
|
-
import { Copy, Loader as Loader3 } from "lucide-react";
|
|
5047
|
-
import { useState as useState3 } from "react";
|
|
5046
|
+
import { Copy, Loader as Loader3, X } from "lucide-react";
|
|
5047
|
+
import { useCallback, useRef as useRef2, useState as useState3 } from "react";
|
|
5048
5048
|
|
|
5049
5049
|
// src/internal/assets/PositiveIcon.tsx
|
|
5050
5050
|
import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
@@ -5407,6 +5407,23 @@ function Header() {
|
|
|
5407
5407
|
const config = useLumiaPassportConfig().config;
|
|
5408
5408
|
const address = useLumiaPassportSession((st) => st.address);
|
|
5409
5409
|
const [copied, setCopied] = useState3(false);
|
|
5410
|
+
const [showEasterEgg, setShowEasterEgg] = useState3(false);
|
|
5411
|
+
const clickCountRef = useRef2(0);
|
|
5412
|
+
const clickTimerRef = useRef2(null);
|
|
5413
|
+
const handleAvatarClick = useCallback(() => {
|
|
5414
|
+
clickCountRef.current += 1;
|
|
5415
|
+
if (clickTimerRef.current) {
|
|
5416
|
+
clearTimeout(clickTimerRef.current);
|
|
5417
|
+
}
|
|
5418
|
+
if (clickCountRef.current >= 5) {
|
|
5419
|
+
clickCountRef.current = 0;
|
|
5420
|
+
setShowEasterEgg(true);
|
|
5421
|
+
} else {
|
|
5422
|
+
clickTimerRef.current = setTimeout(() => {
|
|
5423
|
+
clickCountRef.current = 0;
|
|
5424
|
+
}, 1e3);
|
|
5425
|
+
}
|
|
5426
|
+
}, []);
|
|
5410
5427
|
const { data: profile, isLoading: isProfileLoading } = useQuery3({
|
|
5411
5428
|
retry: false,
|
|
5412
5429
|
enabled: !!address,
|
|
@@ -5424,7 +5441,14 @@ function Header() {
|
|
|
5424
5441
|
className: "w-full flex flex-col gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)] pt-5",
|
|
5425
5442
|
children: [
|
|
5426
5443
|
/* @__PURE__ */ jsxs11("div", { className: "w-full flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
5427
|
-
/* @__PURE__ */ jsx12(
|
|
5444
|
+
/* @__PURE__ */ jsx12(
|
|
5445
|
+
"div",
|
|
5446
|
+
{
|
|
5447
|
+
className: "flex-none w-12 h-12 flex items-center justify-center cursor-pointer select-none",
|
|
5448
|
+
onClick: handleAvatarClick,
|
|
5449
|
+
children: avatar ? /* @__PURE__ */ jsx12("img", { src: avatar, alt: displayName, className: "w-full h-full object-cover rounded-full" }) : /* @__PURE__ */ jsx12(LumiaIcon, { width: 48, height: 48 })
|
|
5450
|
+
}
|
|
5451
|
+
),
|
|
5428
5452
|
/* @__PURE__ */ jsxs11(
|
|
5429
5453
|
"div",
|
|
5430
5454
|
{
|
|
@@ -5502,7 +5526,35 @@ function Header() {
|
|
|
5502
5526
|
}
|
|
5503
5527
|
)
|
|
5504
5528
|
] })
|
|
5505
|
-
] })
|
|
5529
|
+
] }),
|
|
5530
|
+
showEasterEgg && /* @__PURE__ */ jsxs11(
|
|
5531
|
+
"div",
|
|
5532
|
+
{
|
|
5533
|
+
className: "fixed inset-0 z-[9999] bg-black/90 flex items-center justify-center",
|
|
5534
|
+
onClick: () => setShowEasterEgg(false),
|
|
5535
|
+
children: [
|
|
5536
|
+
/* @__PURE__ */ jsx12(
|
|
5537
|
+
"button",
|
|
5538
|
+
{
|
|
5539
|
+
className: "absolute top-4 right-4 text-white hover:text-gray-300 transition-colors",
|
|
5540
|
+
onClick: () => setShowEasterEgg(false),
|
|
5541
|
+
children: /* @__PURE__ */ jsx12(X, { className: "w-8 h-8" })
|
|
5542
|
+
}
|
|
5543
|
+
),
|
|
5544
|
+
/* @__PURE__ */ jsx12(
|
|
5545
|
+
"video",
|
|
5546
|
+
{
|
|
5547
|
+
autoPlay: true,
|
|
5548
|
+
controls: true,
|
|
5549
|
+
className: "max-w-full max-h-full",
|
|
5550
|
+
onEnded: () => setShowEasterEgg(false),
|
|
5551
|
+
onClick: (e) => e.stopPropagation(),
|
|
5552
|
+
children: /* @__PURE__ */ jsx12("source", { src: "https://github.com/cyberkostyan/ABrobot-ESP32-C3/raw/main/2026.webm", type: "video/webm" })
|
|
5553
|
+
}
|
|
5554
|
+
)
|
|
5555
|
+
]
|
|
5556
|
+
}
|
|
5557
|
+
)
|
|
5506
5558
|
]
|
|
5507
5559
|
}
|
|
5508
5560
|
);
|
|
@@ -5511,7 +5563,7 @@ function Header() {
|
|
|
5511
5563
|
// package.json
|
|
5512
5564
|
var package_default = {
|
|
5513
5565
|
name: "@lumiapassport/ui-kit",
|
|
5514
|
-
version: "1.15.
|
|
5566
|
+
version: "1.15.4",
|
|
5515
5567
|
description: "React UI components and hooks for Lumia Passport authentication and Account Abstraction",
|
|
5516
5568
|
type: "module",
|
|
5517
5569
|
main: "./dist/index.cjs",
|
|
@@ -5602,7 +5654,7 @@ var package_default = {
|
|
|
5602
5654
|
// src/internal/components/ui/dialog.tsx
|
|
5603
5655
|
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
5604
5656
|
import { merge } from "lodash-es";
|
|
5605
|
-
import { ArrowLeft as ArrowLeft2, SlidersHorizontal, X } from "lucide-react";
|
|
5657
|
+
import { ArrowLeft as ArrowLeft2, SlidersHorizontal, X as X2 } from "lucide-react";
|
|
5606
5658
|
import { forwardRef as forwardRef3 } from "react";
|
|
5607
5659
|
import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
5608
5660
|
var Dialog = DialogPrimitive.Root;
|
|
@@ -5707,7 +5759,7 @@ var DialogContent = forwardRef3(
|
|
|
5707
5759
|
}
|
|
5708
5760
|
),
|
|
5709
5761
|
/* @__PURE__ */ jsx13(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ jsxs12(Button, { variant: "ghost", size: "icon", className: "w-4 h-4", children: [
|
|
5710
|
-
/* @__PURE__ */ jsx13(
|
|
5762
|
+
/* @__PURE__ */ jsx13(X2, { className: "h-4 w-4" }),
|
|
5711
5763
|
/* @__PURE__ */ jsx13("span", { className: "sr-only", children: "Close" })
|
|
5712
5764
|
] }) })
|
|
5713
5765
|
]
|
|
@@ -5743,11 +5795,11 @@ import { jsx as jsx14 } from "react/jsx-runtime";
|
|
|
5743
5795
|
var VisuallyHidden = ({ children }) => /* @__PURE__ */ jsx14("span", { className: "sr-only absolute w-px h-px p-0 -m-px overflow-hidden whitespace-nowrap border-0", children });
|
|
5744
5796
|
|
|
5745
5797
|
// src/internal/hooks/useListenIframeAuthEvents.ts
|
|
5746
|
-
import { useCallback, useEffect as useEffect3 } from "react";
|
|
5798
|
+
import { useCallback as useCallback2, useEffect as useEffect3 } from "react";
|
|
5747
5799
|
function useListenIframeAuthEvents() {
|
|
5748
5800
|
const setPage = useLayoutDataStore((state) => state.setPage);
|
|
5749
5801
|
const setIsIframeReady = useLumiaPassportSession((state) => state.setIsIframeReady);
|
|
5750
|
-
const handleIframeMessage =
|
|
5802
|
+
const handleIframeMessage = useCallback2(
|
|
5751
5803
|
(event) => {
|
|
5752
5804
|
if (event.data?.type === "LUMIA_PASSPORT_IFRAME_READY") {
|
|
5753
5805
|
console.log("[ IFRAME MESSAGE CACTHED ] Iframe is ready");
|
|
@@ -5769,7 +5821,7 @@ function useListenIframeAuthEvents() {
|
|
|
5769
5821
|
}
|
|
5770
5822
|
|
|
5771
5823
|
// src/internal/hooks/useAutoConnect.ts
|
|
5772
|
-
import { useCallback as
|
|
5824
|
+
import { useCallback as useCallback3, useEffect as useEffect4, useRef as useRef3 } from "react";
|
|
5773
5825
|
function useAutoConnect() {
|
|
5774
5826
|
const {
|
|
5775
5827
|
config: { current: config },
|
|
@@ -5789,7 +5841,7 @@ function useAutoConnect() {
|
|
|
5789
5841
|
setIsIframeReady,
|
|
5790
5842
|
setIsLoading
|
|
5791
5843
|
} = useLumiaPassportSession();
|
|
5792
|
-
const createSessionWithKeyshare =
|
|
5844
|
+
const createSessionWithKeyshare = useCallback3(
|
|
5793
5845
|
async (userId, hasServerKeyshare, isNewUser) => {
|
|
5794
5846
|
try {
|
|
5795
5847
|
try {
|
|
@@ -5823,7 +5875,7 @@ function useAutoConnect() {
|
|
|
5823
5875
|
},
|
|
5824
5876
|
[usePaymaster, setStatus, callbacks]
|
|
5825
5877
|
);
|
|
5826
|
-
const autoConnectAttemptedRef =
|
|
5878
|
+
const autoConnectAttemptedRef = useRef3(false);
|
|
5827
5879
|
useEffect4(() => {
|
|
5828
5880
|
if (autoConnectAttemptedRef.current) return;
|
|
5829
5881
|
setIsLoading(true);
|
|
@@ -5990,13 +6042,13 @@ function useBackupStatusChanges() {
|
|
|
5990
6042
|
|
|
5991
6043
|
// src/internal/hooks/useDetectMaxScrollHeight.ts
|
|
5992
6044
|
import { debounce } from "lodash-es";
|
|
5993
|
-
import { useCallback as
|
|
6045
|
+
import { useCallback as useCallback4, useEffect as useEffect6 } from "react";
|
|
5994
6046
|
var DEBOUNCE_DELAY = 50;
|
|
5995
6047
|
function useDetectMaxScrollHeight() {
|
|
5996
6048
|
const page = useLayoutDataStore((state) => state.page);
|
|
5997
6049
|
const setIsMobileView = useLayoutStore((state) => state.setIsMobileView);
|
|
5998
6050
|
const setMaxScrollHeight = useLayoutStore((state) => state.setMaxScrollHeight);
|
|
5999
|
-
const onResize =
|
|
6051
|
+
const onResize = useCallback4(
|
|
6000
6052
|
debounce(({ width, height }) => {
|
|
6001
6053
|
const headerHeight = page === "auth" /* AUTH */ || page === "keyshare-restore" /* KEYSHARE_RESTORE */ ? 0 : 116;
|
|
6002
6054
|
const limContentHeight = height * 0.92 - headerHeight - 57;
|
|
@@ -6014,24 +6066,24 @@ function useDetectMaxScrollHeight() {
|
|
|
6014
6066
|
}
|
|
6015
6067
|
|
|
6016
6068
|
// src/internal/hooks/usePageMapper.tsx
|
|
6017
|
-
import { useCallback as
|
|
6069
|
+
import { useCallback as useCallback20, useEffect as useEffect30 } from "react";
|
|
6018
6070
|
|
|
6019
6071
|
// src/internal/components/AuthMenu/AuthMenu.tsx
|
|
6020
6072
|
import { AnimatePresence, motion } from "framer-motion";
|
|
6021
6073
|
import { AlertTriangle as AlertTriangle2, Loader as Loader6 } from "lucide-react";
|
|
6022
|
-
import { useEffect as
|
|
6074
|
+
import { useEffect as useEffect10, useMemo, useRef as useRef9, useState as useState6 } from "react";
|
|
6023
6075
|
|
|
6024
6076
|
// src/internal/components/Expandable/hooks/useExpandable.ts
|
|
6025
|
-
import { useCallback as
|
|
6077
|
+
import { useCallback as useCallback5, useEffect as useEffect7, useRef as useRef4 } from "react";
|
|
6026
6078
|
var useExpandable = (props) => {
|
|
6027
6079
|
const { isExpanded = false, children, initHeight = 0, minHeight = 0 } = props;
|
|
6028
|
-
const expandableRef =
|
|
6029
|
-
const contentRef =
|
|
6080
|
+
const expandableRef = useRef4(null);
|
|
6081
|
+
const contentRef = useRef4(null);
|
|
6030
6082
|
useEffect7(() => {
|
|
6031
6083
|
if (!expandableRef.current) return;
|
|
6032
6084
|
expandableRef.current.style.setProperty("--ifo-basic-expandable-h", `${initHeight}px )`);
|
|
6033
6085
|
}, []);
|
|
6034
|
-
const setExpandableHeight =
|
|
6086
|
+
const setExpandableHeight = useCallback5(
|
|
6035
6087
|
(isExpnd) => {
|
|
6036
6088
|
if (!contentRef.current || !expandableRef.current) return;
|
|
6037
6089
|
expandableRef.current.style.setProperty(
|
|
@@ -6172,7 +6224,7 @@ function AuthFailedStep() {
|
|
|
6172
6224
|
|
|
6173
6225
|
// src/internal/components/AuthMenu/PassKeyStep.tsx
|
|
6174
6226
|
import { ArrowLeft as ArrowLeft3, Key as Key3 } from "lucide-react";
|
|
6175
|
-
import { useCallback as
|
|
6227
|
+
import { useCallback as useCallback6 } from "react";
|
|
6176
6228
|
|
|
6177
6229
|
// src/internal/assets/PasskeyAddIcon.tsx
|
|
6178
6230
|
import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
@@ -6226,7 +6278,7 @@ function PassKeyStep(props) {
|
|
|
6226
6278
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
6227
6279
|
const autoCloseOnSuccess = !recoveryUserId;
|
|
6228
6280
|
const { passkeyStatus, setStep, setPasskeyStatus, setAlert, setEmail, setFailedType } = useAuthStore();
|
|
6229
|
-
const onPasskeyRegister =
|
|
6281
|
+
const onPasskeyRegister = useCallback6(async () => {
|
|
6230
6282
|
setAlert(null);
|
|
6231
6283
|
setPasskeyStatus("registering passkey...");
|
|
6232
6284
|
setIsLoading(true);
|
|
@@ -6285,7 +6337,7 @@ function PassKeyStep(props) {
|
|
|
6285
6337
|
setIsLoading(false);
|
|
6286
6338
|
}
|
|
6287
6339
|
}, [onAuthSuccess, setPage, callbacks]);
|
|
6288
|
-
const onPasskeyAuth =
|
|
6340
|
+
const onPasskeyAuth = useCallback6(async () => {
|
|
6289
6341
|
setAlert(null);
|
|
6290
6342
|
setPasskeyStatus("checking available passkeys...");
|
|
6291
6343
|
setIsLoading(true);
|
|
@@ -6414,17 +6466,17 @@ import { Fragment as Fragment5 } from "react";
|
|
|
6414
6466
|
|
|
6415
6467
|
// src/internal/components/AuthMenu/SignInStep/Email.tsx
|
|
6416
6468
|
init_lumiaPassport();
|
|
6417
|
-
init_projectId();
|
|
6418
6469
|
import { useMutation as useMutation3 } from "@tanstack/react-query";
|
|
6419
6470
|
import { ChevronRight, Loader as Loader4, Mail as Mail3 } from "lucide-react";
|
|
6420
|
-
import { useRef as
|
|
6471
|
+
import { useEffect as useEffect8, useRef as useRef6 } from "react";
|
|
6472
|
+
init_projectId();
|
|
6421
6473
|
|
|
6422
6474
|
// src/internal/components/ui/input.tsx
|
|
6423
|
-
import React, { useImperativeHandle, useRef as
|
|
6475
|
+
import React, { useImperativeHandle, useRef as useRef5 } from "react";
|
|
6424
6476
|
import { jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
6425
6477
|
var Input = React.forwardRef((props, ref) => {
|
|
6426
6478
|
const { className, disabled, error, Icon: Icon2, element, ...inputProps } = props;
|
|
6427
|
-
const internalRef =
|
|
6479
|
+
const internalRef = useRef5(null);
|
|
6428
6480
|
useImperativeHandle(ref, () => internalRef.current);
|
|
6429
6481
|
return /* @__PURE__ */ jsxs16("div", { className: cn("w-full flex flex-col gap-1", className), children: [
|
|
6430
6482
|
/* @__PURE__ */ jsxs16(
|
|
@@ -6472,9 +6524,12 @@ Input.displayName = "Input";
|
|
|
6472
6524
|
import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
6473
6525
|
function Email() {
|
|
6474
6526
|
const { config, callbacks } = useLumiaPassportConfig();
|
|
6475
|
-
const
|
|
6527
|
+
const focusRef = useRef6(null);
|
|
6528
|
+
const inputRef = useRef6(null);
|
|
6529
|
+
const buttonRef = useRef6(null);
|
|
6476
6530
|
const isLoading = useLumiaPassportSession((st) => st.isLoading);
|
|
6477
6531
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
6532
|
+
const isMobileView = useLayoutStore((st) => st.isMobileView);
|
|
6478
6533
|
const { email, alert: alert2, setEmail, setExpiresIn, setStep, setAlert } = useAuthStore();
|
|
6479
6534
|
const { mutate: onSendVerificationCode } = useMutation3({
|
|
6480
6535
|
mutationFn: async (mail) => {
|
|
@@ -6527,55 +6582,74 @@ function Email() {
|
|
|
6527
6582
|
setIsLoading(false);
|
|
6528
6583
|
}
|
|
6529
6584
|
});
|
|
6530
|
-
|
|
6531
|
-
|
|
6532
|
-
|
|
6533
|
-
|
|
6534
|
-
|
|
6535
|
-
|
|
6536
|
-
|
|
6537
|
-
|
|
6538
|
-
|
|
6539
|
-
|
|
6540
|
-
|
|
6541
|
-
|
|
6542
|
-
|
|
6543
|
-
|
|
6544
|
-
|
|
6545
|
-
|
|
6546
|
-
|
|
6547
|
-
|
|
6548
|
-
|
|
6549
|
-
|
|
6550
|
-
|
|
6551
|
-
|
|
6552
|
-
|
|
6553
|
-
setEmail(e.target.value);
|
|
6554
|
-
}
|
|
6555
|
-
}
|
|
6556
|
-
),
|
|
6557
|
-
/* @__PURE__ */ jsx21(
|
|
6558
|
-
Button,
|
|
6559
|
-
{
|
|
6560
|
-
ref: buttonRef,
|
|
6561
|
-
className: "w-12 h-12 flex-none",
|
|
6562
|
-
variant: "default",
|
|
6563
|
-
size: "large",
|
|
6564
|
-
disabled: !email || isLoading,
|
|
6565
|
-
onClick: () => onSendVerificationCode(email),
|
|
6566
|
-
children: isLoading ? /* @__PURE__ */ jsx21(Loader4, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ jsx21(ChevronRight, { className: "w-4 h-4" })
|
|
6585
|
+
useEffect8(() => {
|
|
6586
|
+
if (!focusRef.current || !isMobileView) return;
|
|
6587
|
+
focusRef.current?.focus();
|
|
6588
|
+
setTimeout(() => {
|
|
6589
|
+
inputRef.current?.focus();
|
|
6590
|
+
}, 375 * 3);
|
|
6591
|
+
}, [isMobileView]);
|
|
6592
|
+
return /* @__PURE__ */ jsxs17("div", { className: "relative w-full flex flex-col gap-[var(--l-pass-gap)]", children: [
|
|
6593
|
+
/* @__PURE__ */ jsx21(
|
|
6594
|
+
"div",
|
|
6595
|
+
{
|
|
6596
|
+
ref: focusRef,
|
|
6597
|
+
className: "absolute top-4 left-4 w-1 h-1 rounded-full focus:bg-transparent outline-none",
|
|
6598
|
+
tabIndex: -1
|
|
6599
|
+
}
|
|
6600
|
+
),
|
|
6601
|
+
/* @__PURE__ */ jsxs17(
|
|
6602
|
+
"div",
|
|
6603
|
+
{
|
|
6604
|
+
className: "w-full flex gap-[10px] items-center",
|
|
6605
|
+
onKeyDown: (e) => {
|
|
6606
|
+
if (e.key === "Enter" && !isLoading && email) {
|
|
6607
|
+
buttonRef.current?.click();
|
|
6567
6608
|
}
|
|
6568
|
-
|
|
6569
|
-
|
|
6570
|
-
|
|
6571
|
-
|
|
6609
|
+
},
|
|
6610
|
+
children: [
|
|
6611
|
+
/* @__PURE__ */ jsx21(
|
|
6612
|
+
Input,
|
|
6613
|
+
{
|
|
6614
|
+
ref: inputRef,
|
|
6615
|
+
name: "signin-email",
|
|
6616
|
+
Icon: Mail3,
|
|
6617
|
+
type: "email",
|
|
6618
|
+
autoComplete: "off",
|
|
6619
|
+
autoFocus: !isMobileView,
|
|
6620
|
+
placeholder: config.current?.email?.placeholder || "Enter your email",
|
|
6621
|
+
value: email,
|
|
6622
|
+
disabled: isLoading,
|
|
6623
|
+
className: "flex-1 w-full",
|
|
6624
|
+
onChange: (e) => {
|
|
6625
|
+
if (alert2) setAlert(null);
|
|
6626
|
+
setEmail(e.target.value);
|
|
6627
|
+
}
|
|
6628
|
+
}
|
|
6629
|
+
),
|
|
6630
|
+
/* @__PURE__ */ jsx21(
|
|
6631
|
+
Button,
|
|
6632
|
+
{
|
|
6633
|
+
ref: buttonRef,
|
|
6634
|
+
className: "w-12 h-12 flex-none",
|
|
6635
|
+
variant: "default",
|
|
6636
|
+
size: "large",
|
|
6637
|
+
disabled: !email || isLoading,
|
|
6638
|
+
onClick: () => onSendVerificationCode(email),
|
|
6639
|
+
children: isLoading ? /* @__PURE__ */ jsx21(Loader4, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ jsx21(ChevronRight, { className: "w-4 h-4" })
|
|
6640
|
+
}
|
|
6641
|
+
)
|
|
6642
|
+
]
|
|
6643
|
+
}
|
|
6644
|
+
)
|
|
6645
|
+
] });
|
|
6572
6646
|
}
|
|
6573
6647
|
|
|
6574
6648
|
// src/internal/components/AuthMenu/SignInStep/Social.tsx
|
|
6575
6649
|
init_assets();
|
|
6576
6650
|
init_lumiaPassport();
|
|
6577
6651
|
init_auth();
|
|
6578
|
-
import { useCallback as
|
|
6652
|
+
import { useCallback as useCallback7 } from "react";
|
|
6579
6653
|
init_projectId();
|
|
6580
6654
|
|
|
6581
6655
|
// src/internal/components/AuthMenu/SignInStep/utils.ts
|
|
@@ -6746,7 +6820,7 @@ function Social(props) {
|
|
|
6746
6820
|
const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
|
|
6747
6821
|
const setIsWalletLinking = useLayoutDataStore((st) => st.setIsWalletLinking);
|
|
6748
6822
|
const { alert: alert2, setStep, setEmail, setFailedType, setAlert, setPasskeyStatus } = useAuthStore();
|
|
6749
|
-
const onSocialAuth =
|
|
6823
|
+
const onSocialAuth = useCallback7(
|
|
6750
6824
|
async (providerId) => {
|
|
6751
6825
|
const normalizedProviderId = providerId.toLowerCase();
|
|
6752
6826
|
const provider = config.current?.social?.providers?.find(
|
|
@@ -7074,11 +7148,11 @@ function SignInStep(props) {
|
|
|
7074
7148
|
// src/internal/components/AuthMenu/useAuthMenuHanders.ts
|
|
7075
7149
|
init_auth();
|
|
7076
7150
|
import { useQueryClient as useQueryClient2 } from "@tanstack/react-query";
|
|
7077
|
-
import { useCallback as
|
|
7151
|
+
import { useCallback as useCallback8, useRef as useRef7, useState as useState4 } from "react";
|
|
7078
7152
|
function useAuthMenuHandlers() {
|
|
7079
7153
|
const { config, callbacks } = useLumiaPassportConfig();
|
|
7080
7154
|
const qc = useQueryClient2();
|
|
7081
|
-
const pendingLoginResponseRef =
|
|
7155
|
+
const pendingLoginResponseRef = useRef7(null);
|
|
7082
7156
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
7083
7157
|
const setIsDialogForced = useLayoutStore((st) => st.setIsDialogForced);
|
|
7084
7158
|
const [telegramCleanup, setTelegramCleanup] = useState4(null);
|
|
@@ -7094,7 +7168,7 @@ function useAuthMenuHandlers() {
|
|
|
7094
7168
|
} = useLumiaPassportSession();
|
|
7095
7169
|
const setStep = useAuthStore((st) => st.setStep);
|
|
7096
7170
|
const setAlert = useAuthStore((st) => st.setAlert);
|
|
7097
|
-
const createSessionWithKeyshare =
|
|
7171
|
+
const createSessionWithKeyshare = useCallback8(
|
|
7098
7172
|
async (userId, hasServerKeyshare, isNewUser) => {
|
|
7099
7173
|
try {
|
|
7100
7174
|
try {
|
|
@@ -7128,7 +7202,7 @@ function useAuthMenuHandlers() {
|
|
|
7128
7202
|
},
|
|
7129
7203
|
[setStatus, callbacks, usePaymaster]
|
|
7130
7204
|
);
|
|
7131
|
-
const onAuthSuccess =
|
|
7205
|
+
const onAuthSuccess = useCallback8(async () => {
|
|
7132
7206
|
setIsLoading(true);
|
|
7133
7207
|
const loginResponse = pendingLoginResponseRef.current;
|
|
7134
7208
|
if (!loginResponse || !loginResponse.userId) {
|
|
@@ -7231,7 +7305,7 @@ function useAuthMenuHandlers() {
|
|
|
7231
7305
|
setIsDialogForced,
|
|
7232
7306
|
createSessionWithKeyshare
|
|
7233
7307
|
]);
|
|
7234
|
-
const goBackToSignIn =
|
|
7308
|
+
const goBackToSignIn = useCallback8(() => {
|
|
7235
7309
|
setStep("signin");
|
|
7236
7310
|
setAlert(null);
|
|
7237
7311
|
if (telegramCleanup) {
|
|
@@ -7268,21 +7342,21 @@ function OtpIcon(props) {
|
|
|
7268
7342
|
init_projectId();
|
|
7269
7343
|
|
|
7270
7344
|
// src/internal/components/AuthMenu/VerifyStep/VerificationCodeInput.tsx
|
|
7271
|
-
import { useEffect as
|
|
7345
|
+
import { useEffect as useEffect9, useRef as useRef8, useState as useState5 } from "react";
|
|
7272
7346
|
import { jsx as jsx26, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
7273
7347
|
var VerificationCodeInput = (props) => {
|
|
7274
7348
|
const { onVerifyCode, onResendCode, isLoading, expiresIn } = props;
|
|
7275
7349
|
const setAlert = useAuthStore((st) => st.setAlert);
|
|
7276
7350
|
const [timeLeft, setTimeLeft] = useState5(expiresIn);
|
|
7277
|
-
|
|
7278
|
-
|
|
7351
|
+
useEffect9(() => setTimeLeft(expiresIn), [expiresIn]);
|
|
7352
|
+
useEffect9(() => {
|
|
7279
7353
|
const t = setInterval(() => setTimeLeft((secs) => secs > 0 ? secs - 1 : 0), 1e3);
|
|
7280
7354
|
return () => clearInterval(t);
|
|
7281
7355
|
}, []);
|
|
7282
|
-
const lastSubmittedRef =
|
|
7283
|
-
const inputsRef =
|
|
7356
|
+
const lastSubmittedRef = useRef8(null);
|
|
7357
|
+
const inputsRef = useRef8([]);
|
|
7284
7358
|
const [digits, setDigits] = useState5(["", "", "", "", "", ""]);
|
|
7285
|
-
|
|
7359
|
+
useEffect9(() => {
|
|
7286
7360
|
const code = digits.join("");
|
|
7287
7361
|
if (code.length === 6 && digits.every((d) => d !== "") && !isLoading) {
|
|
7288
7362
|
if (lastSubmittedRef.current !== code) {
|
|
@@ -7291,7 +7365,7 @@ var VerificationCodeInput = (props) => {
|
|
|
7291
7365
|
}
|
|
7292
7366
|
}
|
|
7293
7367
|
}, [digits, isLoading, onVerifyCode]);
|
|
7294
|
-
|
|
7368
|
+
useEffect9(() => {
|
|
7295
7369
|
const t = setTimeout(() => {
|
|
7296
7370
|
inputsRef.current[0]?.focus();
|
|
7297
7371
|
}, 0);
|
|
@@ -7568,8 +7642,8 @@ var AuthMenu = () => {
|
|
|
7568
7642
|
const { step, alert: alert2, setStep, setPasskeyStatus, setEmail, setAlert } = useAuthStore();
|
|
7569
7643
|
const { pendingLoginResponseRef, onAuthSuccess, goBackToSignIn } = useAuthMenuHandlers();
|
|
7570
7644
|
const [isAlertShowReady, setIsAlertShowReady] = useState6(false);
|
|
7571
|
-
const readyTimeout =
|
|
7572
|
-
|
|
7645
|
+
const readyTimeout = useRef9(null);
|
|
7646
|
+
useEffect10(() => {
|
|
7573
7647
|
if (readyTimeout.current) {
|
|
7574
7648
|
clearTimeout(readyTimeout.current);
|
|
7575
7649
|
readyTimeout.current = null;
|
|
@@ -7577,7 +7651,7 @@ var AuthMenu = () => {
|
|
|
7577
7651
|
setIsAlertShowReady(false);
|
|
7578
7652
|
readyTimeout.current = setTimeout(() => setIsAlertShowReady(true), 750);
|
|
7579
7653
|
}, [step]);
|
|
7580
|
-
|
|
7654
|
+
useEffect10(() => {
|
|
7581
7655
|
setMainPageHeight(DEFAULT_AUTH_MENU_HEIGHT);
|
|
7582
7656
|
return () => {
|
|
7583
7657
|
setStep("signin");
|
|
@@ -7736,7 +7810,7 @@ function RampnowIcon() {
|
|
|
7736
7810
|
// src/internal/components/BuyMenu/binance/Binance.tsx
|
|
7737
7811
|
import { useMutation as useMutation5, useQuery as useQuery4, useQueryClient as useQueryClient3 } from "@tanstack/react-query";
|
|
7738
7812
|
import { DollarSign, LoaderIcon as LoaderIcon2 } from "lucide-react";
|
|
7739
|
-
import { useEffect as
|
|
7813
|
+
import { useEffect as useEffect12, useRef as useRef10 } from "react";
|
|
7740
7814
|
|
|
7741
7815
|
// src/internal/components/BuyMenu/components/PaymentSelector.tsx
|
|
7742
7816
|
import { jsx as jsx31, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
@@ -7833,7 +7907,7 @@ async function createPreorderMutation(payload) {
|
|
|
7833
7907
|
}
|
|
7834
7908
|
|
|
7835
7909
|
// src/internal/components/BuyMenu/binance/useQueriesErrorHandler.ts
|
|
7836
|
-
import { useEffect as
|
|
7910
|
+
import { useEffect as useEffect11 } from "react";
|
|
7837
7911
|
|
|
7838
7912
|
// src/internal/components/BuyMenu/binance/utils.ts
|
|
7839
7913
|
function getPayMethodID(pm) {
|
|
@@ -7853,7 +7927,7 @@ function handleErrors(errors) {
|
|
|
7853
7927
|
// src/internal/components/BuyMenu/binance/useQueriesErrorHandler.ts
|
|
7854
7928
|
var useQueriesErrorHandler = (errors, stateUpdater) => {
|
|
7855
7929
|
const { error: errorTitle, message: errorMessage } = handleErrors(errors);
|
|
7856
|
-
|
|
7930
|
+
useEffect11(() => {
|
|
7857
7931
|
if (!errorTitle && !errorMessage) return;
|
|
7858
7932
|
console.error(`[BuyModal][Binance] ${errorTitle}: ${errorMessage}`);
|
|
7859
7933
|
stateUpdater(1);
|
|
@@ -7901,15 +7975,15 @@ function Binance(props) {
|
|
|
7901
7975
|
queryKey: [QUERY_KEYS3.binancePaymentModes, walletAddress, isLumiaAvailable, srcQueryAmount],
|
|
7902
7976
|
queryFn: async () => getPaymentMethodsQuery({ totalAmount: String(srcQueryAmount || 1) })
|
|
7903
7977
|
});
|
|
7904
|
-
const lastLoadedPaymentModes =
|
|
7905
|
-
|
|
7978
|
+
const lastLoadedPaymentModes = useRef10([]);
|
|
7979
|
+
useEffect12(() => {
|
|
7906
7980
|
if (!paymentModes?.length) return;
|
|
7907
7981
|
setPaymentMode(getPayMethodID(paymentModes[0]));
|
|
7908
7982
|
lastLoadedPaymentModes.current = paymentModes;
|
|
7909
7983
|
}, [paymentModes]);
|
|
7910
7984
|
const selectedPaymentMode = paymentModes?.find((el) => getPayMethodID(el) === paymentMode) || null;
|
|
7911
7985
|
const minimum = Number(selectedPaymentMode?.fiatMinLimit || "0");
|
|
7912
|
-
|
|
7986
|
+
useEffect12(() => setMinAmount(minimum), [minimum]);
|
|
7913
7987
|
const {
|
|
7914
7988
|
data: quoteData = null,
|
|
7915
7989
|
isLoading: isQuoteDataLoading,
|
|
@@ -7954,7 +8028,7 @@ function Binance(props) {
|
|
|
7954
8028
|
setRedirecting(false);
|
|
7955
8029
|
}
|
|
7956
8030
|
});
|
|
7957
|
-
|
|
8031
|
+
useEffect12(() => {
|
|
7958
8032
|
return () => {
|
|
7959
8033
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.binanceNetworksQuery] });
|
|
7960
8034
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.binancePaymentModes] });
|
|
@@ -8018,7 +8092,7 @@ function Binance(props) {
|
|
|
8018
8092
|
// src/internal/components/BuyMenu/rampnow/Rampnow.tsx
|
|
8019
8093
|
import { useMutation as useMutation6, useQuery as useQuery5, useQueryClient as useQueryClient4 } from "@tanstack/react-query";
|
|
8020
8094
|
import { DollarSign as DollarSign2, LoaderIcon as LoaderIcon3 } from "lucide-react";
|
|
8021
|
-
import { useEffect as
|
|
8095
|
+
import { useEffect as useEffect13 } from "react";
|
|
8022
8096
|
|
|
8023
8097
|
// src/internal/components/BuyMenu/rampnow/api.ts
|
|
8024
8098
|
init_iframe_manager();
|
|
@@ -8083,7 +8157,7 @@ function Rampnow(props) {
|
|
|
8083
8157
|
setMinAmount
|
|
8084
8158
|
} = control;
|
|
8085
8159
|
const qc = useQueryClient4();
|
|
8086
|
-
|
|
8160
|
+
useEffect13(() => {
|
|
8087
8161
|
setMinAmount(MINIMUM_RAMP_AMOUNT);
|
|
8088
8162
|
setPaymentMode(PAYMENT_MODES[0].id);
|
|
8089
8163
|
}, []);
|
|
@@ -8140,7 +8214,7 @@ function Rampnow(props) {
|
|
|
8140
8214
|
console.error("Create CheckoutOrder failed:", err);
|
|
8141
8215
|
}
|
|
8142
8216
|
});
|
|
8143
|
-
|
|
8217
|
+
useEffect13(() => {
|
|
8144
8218
|
return () => {
|
|
8145
8219
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.getRampNowConfig] });
|
|
8146
8220
|
qc.resetQueries({ queryKey: [QUERY_KEYS3.getRampNowQuote] });
|
|
@@ -8222,7 +8296,7 @@ var RAMP_PROVIDERS = {
|
|
|
8222
8296
|
var REDIRECT_TIMEOUT_MS = 1500;
|
|
8223
8297
|
|
|
8224
8298
|
// src/internal/components/BuyMenu/useSelectables.ts
|
|
8225
|
-
import { useCallback as
|
|
8299
|
+
import { useCallback as useCallback9, useEffect as useEffect14, useRef as useRef11, useState as useState7 } from "react";
|
|
8226
8300
|
|
|
8227
8301
|
// src/internal/utils/debounce.ts
|
|
8228
8302
|
function debounce2(func, waitFor) {
|
|
@@ -8239,11 +8313,11 @@ var useSelectables = () => {
|
|
|
8239
8313
|
const [redirecting, setRedirecting] = useState7(false);
|
|
8240
8314
|
const [rampProvider, setrRampProvider] = useState7("binance");
|
|
8241
8315
|
const [minAmount, setMinAmount] = useState7(0);
|
|
8242
|
-
const inputRef =
|
|
8316
|
+
const inputRef = useRef11(null);
|
|
8243
8317
|
const [srcQueryAmount, setSrcQueryAmount] = useState7(0);
|
|
8244
8318
|
const [srcInputAmount, setSrcInputAmount] = useState7(0);
|
|
8245
8319
|
const [paymentMode, setPaymentMode] = useState7(null);
|
|
8246
|
-
const setQueryAmountDebounced =
|
|
8320
|
+
const setQueryAmountDebounced = useCallback9(
|
|
8247
8321
|
debounce2((inputAmount) => {
|
|
8248
8322
|
const checkedValue = Math.max(inputAmount, minAmount);
|
|
8249
8323
|
setSrcInputAmount(checkedValue);
|
|
@@ -8251,7 +8325,7 @@ var useSelectables = () => {
|
|
|
8251
8325
|
}, ON_INPUT_QUERY_DELAY),
|
|
8252
8326
|
[minAmount]
|
|
8253
8327
|
);
|
|
8254
|
-
|
|
8328
|
+
useEffect14(() => setQueryAmountDebounced(srcInputAmount), [srcInputAmount, setQueryAmountDebounced]);
|
|
8255
8329
|
return {
|
|
8256
8330
|
inputRef,
|
|
8257
8331
|
redirecting,
|
|
@@ -8315,7 +8389,7 @@ function BuyMenu() {
|
|
|
8315
8389
|
// src/internal/components/KeyshareRestoreMenu/KeyshareRestoreMenu.tsx
|
|
8316
8390
|
import { useMutation as useMutation9, useQuery as useQuery7, useQueryClient as useQueryClient7 } from "@tanstack/react-query";
|
|
8317
8391
|
import { AlertCircle as AlertCircle2, CheckCircle2, CloudDownload as CloudDownload2, Loader as Loader9, UserCircle as UserCircle2 } from "lucide-react";
|
|
8318
|
-
import { useEffect as
|
|
8392
|
+
import { useEffect as useEffect19 } from "react";
|
|
8319
8393
|
init_vaultClient();
|
|
8320
8394
|
|
|
8321
8395
|
// src/internal/components/ui/switch.tsx
|
|
@@ -8384,7 +8458,7 @@ import { Cloud, FileDown, FileUp } from "lucide-react";
|
|
|
8384
8458
|
import { Fragment as Fragment8, useMemo as useMemo2 } from "react";
|
|
8385
8459
|
|
|
8386
8460
|
// src/internal/components/KeyshareRestoreMenu/hooks/useOnRestoreSuccess.ts
|
|
8387
|
-
import { useCallback as
|
|
8461
|
+
import { useCallback as useCallback10 } from "react";
|
|
8388
8462
|
|
|
8389
8463
|
// src/internal/components/KeyshareRestoreMenu/hooks/useRestoreStore.ts
|
|
8390
8464
|
import { create as create4 } from "zustand";
|
|
@@ -8420,7 +8494,7 @@ function useOnRestoreSuccess() {
|
|
|
8420
8494
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
8421
8495
|
const { usePaymaster, recoveryUserId, setRecoveryUserId, setSession, setAddress, setStatus } = useLumiaPassportSession();
|
|
8422
8496
|
const { setError, setSuccess } = useRestoreStore();
|
|
8423
|
-
const createSessionWithKeyshare =
|
|
8497
|
+
const createSessionWithKeyshare = useCallback10(
|
|
8424
8498
|
async (userId, hasServerKeyshare, isNewUser) => {
|
|
8425
8499
|
try {
|
|
8426
8500
|
try {
|
|
@@ -8454,7 +8528,7 @@ function useOnRestoreSuccess() {
|
|
|
8454
8528
|
},
|
|
8455
8529
|
[setStatus, callbacks, usePaymaster]
|
|
8456
8530
|
);
|
|
8457
|
-
const onRestoreSuccess =
|
|
8531
|
+
const onRestoreSuccess = useCallback10(async () => {
|
|
8458
8532
|
const { verifyToken: verifyToken2, jwtTokenManager: jwtTokenManager4 } = await Promise.resolve().then(() => (init_auth(), auth_exports));
|
|
8459
8533
|
const verify = await verifyToken2();
|
|
8460
8534
|
const hasServerKeyshare = verify?.hasKeyshare ?? jwtTokenManager4.getHasKeyshare() ?? false;
|
|
@@ -8524,7 +8598,7 @@ function useOnRestoreSuccess() {
|
|
|
8524
8598
|
|
|
8525
8599
|
// src/internal/components/KeyshareRestoreMenu/hooks/useCreateBackup.ts
|
|
8526
8600
|
import { useMutation as useMutation7, useQueryClient as useQueryClient5 } from "@tanstack/react-query";
|
|
8527
|
-
import { useEffect as
|
|
8601
|
+
import { useEffect as useEffect15 } from "react";
|
|
8528
8602
|
init_iframe_manager();
|
|
8529
8603
|
function useCreateBackup() {
|
|
8530
8604
|
const qc = useQueryClient5();
|
|
@@ -8533,7 +8607,7 @@ function useCreateBackup() {
|
|
|
8533
8607
|
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
8534
8608
|
const setIsDialogForced = useLayoutStore((st) => st.setIsDialogForced);
|
|
8535
8609
|
const { usePasskey, restorePassword, selectedCloudProvider, setSuccess, setError, setMethod } = useRestoreStore();
|
|
8536
|
-
|
|
8610
|
+
useEffect15(() => {
|
|
8537
8611
|
if (!hasServerVault) {
|
|
8538
8612
|
setMethod("server");
|
|
8539
8613
|
setIsDialogForced(true);
|
|
@@ -8777,7 +8851,7 @@ function useRestoreAccount() {
|
|
|
8777
8851
|
}
|
|
8778
8852
|
|
|
8779
8853
|
// src/internal/components/KeyshareRestoreMenu/hooks/useValidateFileBackup.ts
|
|
8780
|
-
import { useEffect as
|
|
8854
|
+
import { useEffect as useEffect16 } from "react";
|
|
8781
8855
|
function validateRestoreFileFormat(parsedData) {
|
|
8782
8856
|
if (typeof parsedData !== "object" || parsedData === null) return false;
|
|
8783
8857
|
const data = parsedData;
|
|
@@ -8787,7 +8861,7 @@ function useValidateFileBackup() {
|
|
|
8787
8861
|
const restoreFile = useRestoreStore((st) => st.restoreFile);
|
|
8788
8862
|
const setError = useRestoreStore((st) => st.setError);
|
|
8789
8863
|
const setUsePasskey = useRestoreStore((st) => st.setUsePasskey);
|
|
8790
|
-
|
|
8864
|
+
useEffect16(() => {
|
|
8791
8865
|
if (!restoreFile) {
|
|
8792
8866
|
return;
|
|
8793
8867
|
}
|
|
@@ -8882,7 +8956,7 @@ import { AlertCircle, FileUp as FileUp2, Upload, User } from "lucide-react";
|
|
|
8882
8956
|
|
|
8883
8957
|
// src/internal/components/KeyshareRestoreMenu/components/PasswordPasskey.tsx
|
|
8884
8958
|
import { ChevronRight as ChevronRight2, Eye, EyeOff, Info, Key as Key4, Loader as Loader7 } from "lucide-react";
|
|
8885
|
-
import { useRef as
|
|
8959
|
+
import { useRef as useRef12 } from "react";
|
|
8886
8960
|
import { Fragment as Fragment9, jsx as jsx38, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
8887
8961
|
function PasswordPasskey(props) {
|
|
8888
8962
|
const {
|
|
@@ -8895,7 +8969,7 @@ function PasswordPasskey(props) {
|
|
|
8895
8969
|
actionHandler
|
|
8896
8970
|
} = props;
|
|
8897
8971
|
const hasServerVault = useLumiaPassportSession((st) => st.hasServerVault);
|
|
8898
|
-
const actionRef =
|
|
8972
|
+
const actionRef = useRef12(null);
|
|
8899
8973
|
const {
|
|
8900
8974
|
showPassword,
|
|
8901
8975
|
restorePassword,
|
|
@@ -9160,7 +9234,7 @@ function File2(props) {
|
|
|
9160
9234
|
import { useQueryClient as useQueryClient6 } from "@tanstack/react-query";
|
|
9161
9235
|
import dayjs from "dayjs";
|
|
9162
9236
|
import { Download, Key as Key5, Upload as Upload2 } from "lucide-react";
|
|
9163
|
-
import { useEffect as
|
|
9237
|
+
import { useEffect as useEffect17 } from "react";
|
|
9164
9238
|
import { Fragment as Fragment12, jsx as jsx41, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
9165
9239
|
function Server(props) {
|
|
9166
9240
|
const { isLoading, mode = "restore", serverHandler } = props;
|
|
@@ -9168,7 +9242,7 @@ function Server(props) {
|
|
|
9168
9242
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9169
9243
|
const setUsePasskey = useRestoreStore((st) => st.setUsePasskey);
|
|
9170
9244
|
const serverRecoveryStatus = qc.getQueryData([CHECK_BACKUP_QUERY_KEY, address]);
|
|
9171
|
-
|
|
9245
|
+
useEffect17(() => {
|
|
9172
9246
|
if (mode === "backup" || !serverRecoveryStatus?.created?.encryptionMethod) return;
|
|
9173
9247
|
setUsePasskey(serverRecoveryStatus.created.encryptionMethod === "passkey");
|
|
9174
9248
|
}, [mode, serverRecoveryStatus, setUsePasskey]);
|
|
@@ -9202,7 +9276,7 @@ function Server(props) {
|
|
|
9202
9276
|
// src/internal/components/KeyshareRestoreMenu/methods/Cloud.tsx
|
|
9203
9277
|
import { useQuery as useQuery6 } from "@tanstack/react-query";
|
|
9204
9278
|
import { ArrowLeft as ArrowLeft6, CloudDownload, CloudUpload, Loader as Loader8 } from "lucide-react";
|
|
9205
|
-
import { useEffect as
|
|
9279
|
+
import { useEffect as useEffect18 } from "react";
|
|
9206
9280
|
|
|
9207
9281
|
// src/internal/components/ui/select.tsx
|
|
9208
9282
|
import * as SelectPrimitive from "@radix-ui/react-select";
|
|
@@ -9350,7 +9424,7 @@ function Cloud2(props) {
|
|
|
9350
9424
|
return availableProviders.map((p) => ({ id: p.id, name: p.name, available: p.isAvailable() }));
|
|
9351
9425
|
}
|
|
9352
9426
|
});
|
|
9353
|
-
|
|
9427
|
+
useEffect18(() => {
|
|
9354
9428
|
if (isCloudProvidersLoading) return;
|
|
9355
9429
|
if (!!cloudProvidersError) {
|
|
9356
9430
|
console.error("[KeyshareBackup] Failed to load cloud providers:", cloudProvidersError);
|
|
@@ -9441,7 +9515,7 @@ var KeyshareRestoreMenu = () => {
|
|
|
9441
9515
|
setSuccess,
|
|
9442
9516
|
setMethod
|
|
9443
9517
|
} = useRestoreStore();
|
|
9444
|
-
|
|
9518
|
+
useEffect19(() => {
|
|
9445
9519
|
setIsDialogForced(true);
|
|
9446
9520
|
return () => {
|
|
9447
9521
|
setRestoreFile(null);
|
|
@@ -9465,7 +9539,7 @@ var KeyshareRestoreMenu = () => {
|
|
|
9465
9539
|
queryFn: async () => await getShareRecoveryStats()
|
|
9466
9540
|
});
|
|
9467
9541
|
const hasServerBackup = serverRecoveryStatus?.created || serverRecoveryStatus?.devices?.length > 0;
|
|
9468
|
-
|
|
9542
|
+
useEffect19(() => {
|
|
9469
9543
|
if (!!hasServerBackup) setMethod("server");
|
|
9470
9544
|
}, [hasServerBackup]);
|
|
9471
9545
|
const { mutate: disconnect, isPending: isDisconnecting } = useMutation9({
|
|
@@ -9591,7 +9665,7 @@ var KeyshareRestoreMenu = () => {
|
|
|
9591
9665
|
// src/internal/components/KeyshareRestoreMenu/KeyshareBackupMenu.tsx
|
|
9592
9666
|
import { useQuery as useQuery8 } from "@tanstack/react-query";
|
|
9593
9667
|
import { AlertCircle as AlertCircle3, ArrowLeft as ArrowLeft7, CheckCircle2 as CheckCircle22, Loader as Loader10, LockIcon } from "lucide-react";
|
|
9594
|
-
import { useEffect as
|
|
9668
|
+
import { useEffect as useEffect20 } from "react";
|
|
9595
9669
|
init_vaultClient();
|
|
9596
9670
|
import { Fragment as Fragment15, jsx as jsx45, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
9597
9671
|
var COMPONENTS = {
|
|
@@ -9617,7 +9691,7 @@ function KeyshareBackupMenu() {
|
|
|
9617
9691
|
setUsePasskey,
|
|
9618
9692
|
setMethod
|
|
9619
9693
|
} = useRestoreStore();
|
|
9620
|
-
|
|
9694
|
+
useEffect20(() => {
|
|
9621
9695
|
setMainPageHeight(DEFAULT_SETTINGS_MENU_HEIGHT);
|
|
9622
9696
|
return () => {
|
|
9623
9697
|
setSuccess(null);
|
|
@@ -9635,7 +9709,7 @@ function KeyshareBackupMenu() {
|
|
|
9635
9709
|
queryFn: async () => await getShareRecoveryStats()
|
|
9636
9710
|
});
|
|
9637
9711
|
const hasRecoveryData = serverRecoveryStatus?.created || serverRecoveryStatus?.devices?.length > 0;
|
|
9638
|
-
|
|
9712
|
+
useEffect20(() => {
|
|
9639
9713
|
if (!!hasRecoveryData) setMethod("server");
|
|
9640
9714
|
}, [hasRecoveryData]);
|
|
9641
9715
|
const {
|
|
@@ -9731,7 +9805,7 @@ function KeyshareBackupMenu() {
|
|
|
9731
9805
|
|
|
9732
9806
|
// src/internal/components/MainMenu/MainMenu.tsx
|
|
9733
9807
|
import { ChevronLeft, ChevronRight as ChevronRight3, DollarSign as DollarSign3, Wallet2 as Wallet23 } from "lucide-react";
|
|
9734
|
-
import { useEffect as
|
|
9808
|
+
import { useEffect as useEffect21 } from "react";
|
|
9735
9809
|
|
|
9736
9810
|
// src/internal/components/ManageWalletMenu/hooks/useProvidersList.ts
|
|
9737
9811
|
init_common();
|
|
@@ -9761,7 +9835,7 @@ function MainMenu() {
|
|
|
9761
9835
|
const address = useLumiaPassportSession((st) => st.address);
|
|
9762
9836
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
9763
9837
|
const setMainPageHeight = useLayoutDataStore((st) => st.setMainPageHeight);
|
|
9764
|
-
|
|
9838
|
+
useEffect21(() => setMainPageHeight(DEFAULT_MAIN_MENU_HEIGHT), [setMainPageHeight]);
|
|
9765
9839
|
useProvidersList();
|
|
9766
9840
|
return /* @__PURE__ */ jsx46("div", { className: "w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]", children: /* @__PURE__ */ jsx46("div", { className: "w-full grid grid-cols-4 gap-0 md:gap-[var(--l-pass-gap)] py-[10px] md:py-1", children: MAIN_MENU_BUTTONS.map(({ id, label, icon: Icon2 }) => /* @__PURE__ */ jsxs39(
|
|
9767
9841
|
Button,
|
|
@@ -9787,7 +9861,7 @@ import { useMemo as useMemo3 } from "react";
|
|
|
9787
9861
|
|
|
9788
9862
|
// src/modules/linkedProfiles.ts
|
|
9789
9863
|
import { useQuery as useQuery10, useQueryClient as useQueryClient8 } from "@tanstack/react-query";
|
|
9790
|
-
import { useCallback as
|
|
9864
|
+
import { useCallback as useCallback11 } from "react";
|
|
9791
9865
|
init_auth();
|
|
9792
9866
|
init_common();
|
|
9793
9867
|
init_types();
|
|
@@ -9820,7 +9894,7 @@ function useLumiaPassportLinkedProfiles() {
|
|
|
9820
9894
|
queryFn: getLinkProfilesData
|
|
9821
9895
|
});
|
|
9822
9896
|
const { profiles = [], avatar = null } = data || {};
|
|
9823
|
-
const refresh =
|
|
9897
|
+
const refresh = useCallback11(async () => {
|
|
9824
9898
|
await qc.invalidateQueries({ queryKey: [LINKED_PROFILES_QUERY_KEY, address] });
|
|
9825
9899
|
}, [qc, address]);
|
|
9826
9900
|
return { profiles, avatar, isLoading, error, refresh };
|
|
@@ -10200,7 +10274,7 @@ function EmailNotConnectedWarning() {
|
|
|
10200
10274
|
|
|
10201
10275
|
// src/internal/components/ManageWalletMenu/hooks/useLinkSocial.ts
|
|
10202
10276
|
import { useQueryClient as useQueryClient11 } from "@tanstack/react-query";
|
|
10203
|
-
import React5, { useEffect as
|
|
10277
|
+
import React5, { useEffect as useEffect22 } from "react";
|
|
10204
10278
|
init_auth();
|
|
10205
10279
|
function useLinkSocial() {
|
|
10206
10280
|
const qc = useQueryClient11();
|
|
@@ -10265,7 +10339,7 @@ function useLinkSocial() {
|
|
|
10265
10339
|
[config.social?.providers, callbacks]
|
|
10266
10340
|
);
|
|
10267
10341
|
const [socialLinkStarted, setSocialLinkStarted] = React5.useState(false);
|
|
10268
|
-
|
|
10342
|
+
useEffect22(() => {
|
|
10269
10343
|
const key = providerType?.toLowerCase();
|
|
10270
10344
|
console.log("[useLinkSocial] Effect triggered:", { key, linkIsLoading, socialLinkStarted, isWalletLinking });
|
|
10271
10345
|
if (isWalletLinking) {
|
|
@@ -10287,7 +10361,7 @@ function useLinkSocial() {
|
|
|
10287
10361
|
// src/internal/components/ManageWalletMenu/hooks/useLinkTelegram.ts
|
|
10288
10362
|
init_telegram2();
|
|
10289
10363
|
import { useQueryClient as useQueryClient12 } from "@tanstack/react-query";
|
|
10290
|
-
import { useCallback as
|
|
10364
|
+
import { useCallback as useCallback12, useEffect as useEffect23, useState as useState10 } from "react";
|
|
10291
10365
|
function useLinkTelegram() {
|
|
10292
10366
|
const {
|
|
10293
10367
|
config: { current: config },
|
|
@@ -10298,7 +10372,7 @@ function useLinkTelegram() {
|
|
|
10298
10372
|
const isWalletLinking = useLayoutDataStore((st) => st.isWalletLinking);
|
|
10299
10373
|
const { providerType, linkIsLoading, setLinkIsLoading, setProviderType, setAlert } = useManageWalletStore();
|
|
10300
10374
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
10301
|
-
const handleLinkTelegram =
|
|
10375
|
+
const handleLinkTelegram = useCallback12(async () => {
|
|
10302
10376
|
try {
|
|
10303
10377
|
setLinkIsLoading(true);
|
|
10304
10378
|
setAlert(null);
|
|
@@ -10341,7 +10415,7 @@ function useLinkTelegram() {
|
|
|
10341
10415
|
}
|
|
10342
10416
|
}, [config.social?.providers, callbacks]);
|
|
10343
10417
|
const [telegramLinkStarted, setTelegramLinkStarted] = useState10(false);
|
|
10344
|
-
|
|
10418
|
+
useEffect23(() => {
|
|
10345
10419
|
console.log("[useLinkTelegram] Effect triggered:", {
|
|
10346
10420
|
providerType,
|
|
10347
10421
|
linkIsLoading,
|
|
@@ -10358,7 +10432,7 @@ function useLinkTelegram() {
|
|
|
10358
10432
|
handleLinkTelegram();
|
|
10359
10433
|
}
|
|
10360
10434
|
}, [providerType, handleLinkTelegram, linkIsLoading, telegramLinkStarted, isWalletLinking]);
|
|
10361
|
-
|
|
10435
|
+
useEffect23(() => {
|
|
10362
10436
|
if (providerType !== "telegram") {
|
|
10363
10437
|
setTelegramLinkStarted(false);
|
|
10364
10438
|
}
|
|
@@ -10696,7 +10770,7 @@ function useNicknameInfo(enabled = true) {
|
|
|
10696
10770
|
|
|
10697
10771
|
// src/internal/components/NicknameSettings/NicknameEditForm.tsx
|
|
10698
10772
|
import { Check as Check2, Loader as Loader15 } from "lucide-react";
|
|
10699
|
-
import { useCallback as
|
|
10773
|
+
import { useCallback as useCallback14, useState as useState13 } from "react";
|
|
10700
10774
|
|
|
10701
10775
|
// src/internal/hooks/useChangeNickname.ts
|
|
10702
10776
|
init_nickname();
|
|
@@ -10742,7 +10816,7 @@ function useChangeNickname(options) {
|
|
|
10742
10816
|
init_nickname();
|
|
10743
10817
|
init_profile();
|
|
10744
10818
|
import { useQuery as useQuery12 } from "@tanstack/react-query";
|
|
10745
|
-
import { useState as useState12, useEffect as
|
|
10819
|
+
import { useState as useState12, useEffect as useEffect24 } from "react";
|
|
10746
10820
|
|
|
10747
10821
|
// src/internal/lib/nickname-validation.ts
|
|
10748
10822
|
var NICKNAME_MIN_LENGTH = 3;
|
|
@@ -10776,7 +10850,7 @@ function useNicknameAvailability(handle, enabled = true) {
|
|
|
10776
10850
|
const normalized = normalizeNickname(handle);
|
|
10777
10851
|
const validation = validateNickname(handle);
|
|
10778
10852
|
const isValidForCheck = validation.valid && normalized.length > 0;
|
|
10779
|
-
|
|
10853
|
+
useEffect24(() => {
|
|
10780
10854
|
if (!isValidForCheck || !enabled) {
|
|
10781
10855
|
setDebouncedHandle("");
|
|
10782
10856
|
setIsDebouncing(false);
|
|
@@ -10833,7 +10907,7 @@ function getNicknameErrorMessage(code, params) {
|
|
|
10833
10907
|
}
|
|
10834
10908
|
|
|
10835
10909
|
// src/internal/components/NicknameSettings/NicknameAvailabilityIndicator.tsx
|
|
10836
|
-
import { Loader as Loader14, Check, X as
|
|
10910
|
+
import { Loader as Loader14, Check, X as X3 } from "lucide-react";
|
|
10837
10911
|
import { jsx as jsx53, jsxs as jsxs46 } from "react/jsx-runtime";
|
|
10838
10912
|
function NicknameAvailabilityIndicator({
|
|
10839
10913
|
isChecking,
|
|
@@ -10860,7 +10934,7 @@ function NicknameAvailabilityIndicator({
|
|
|
10860
10934
|
}
|
|
10861
10935
|
const reason = availability.reason ? getNicknameErrorMessage(availability.reason) : "This nickname is not available";
|
|
10862
10936
|
return /* @__PURE__ */ jsxs46("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-error)]", children: [
|
|
10863
|
-
/* @__PURE__ */ jsx53(
|
|
10937
|
+
/* @__PURE__ */ jsx53(X3, { className: "w-3 h-3" }),
|
|
10864
10938
|
/* @__PURE__ */ jsx53("span", { children: reason })
|
|
10865
10939
|
] });
|
|
10866
10940
|
}
|
|
@@ -10882,7 +10956,7 @@ function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
|
10882
10956
|
onSuccess?.();
|
|
10883
10957
|
}
|
|
10884
10958
|
});
|
|
10885
|
-
const handleInputChange =
|
|
10959
|
+
const handleInputChange = useCallback14(
|
|
10886
10960
|
(e) => {
|
|
10887
10961
|
const value = e.target.value;
|
|
10888
10962
|
setInputValue(value);
|
|
@@ -10897,7 +10971,7 @@ function NicknameEditForm({ currentHandle, canChange, onSuccess }) {
|
|
|
10897
10971
|
},
|
|
10898
10972
|
[clientError, isError, isSuccess, reset]
|
|
10899
10973
|
);
|
|
10900
|
-
const handleSubmit =
|
|
10974
|
+
const handleSubmit = useCallback14(
|
|
10901
10975
|
(e) => {
|
|
10902
10976
|
e.preventDefault();
|
|
10903
10977
|
const normalized2 = normalizeNickname(inputValue);
|
|
@@ -11052,12 +11126,12 @@ function NicknameSettings() {
|
|
|
11052
11126
|
// src/internal/components/PortfolioMenu/PortfolioMenu.tsx
|
|
11053
11127
|
import { useQueryClient as useQueryClient16 } from "@tanstack/react-query";
|
|
11054
11128
|
import { AlertCircle as AlertCircle4, ArrowLeft as ArrowLeft10, Gem, Loader as Loader18, RefreshCw } from "lucide-react";
|
|
11055
|
-
import { useCallback as
|
|
11129
|
+
import { useCallback as useCallback16 } from "react";
|
|
11056
11130
|
|
|
11057
11131
|
// src/internal/hooks/useBlockscoutAssets.ts
|
|
11058
11132
|
init_lumiaPassport();
|
|
11059
11133
|
init_base();
|
|
11060
|
-
import { useCallback as
|
|
11134
|
+
import { useCallback as useCallback15, useMemo as useMemo4, useRef as useRef13 } from "react";
|
|
11061
11135
|
import { useQuery as useQuery13 } from "@tanstack/react-query";
|
|
11062
11136
|
import { useBalance as useBalance2, usePublicClient } from "wagmi";
|
|
11063
11137
|
import { formatUnits as formatUnits2 } from "viem";
|
|
@@ -11205,7 +11279,7 @@ function useBlockscoutAssets(options) {
|
|
|
11205
11279
|
[blockscoutApiUrl]
|
|
11206
11280
|
);
|
|
11207
11281
|
const publicClient2 = usePublicClient({ chainId: lumiaBeam.id });
|
|
11208
|
-
const lastRefreshRef =
|
|
11282
|
+
const lastRefreshRef = useRef13(0);
|
|
11209
11283
|
const {
|
|
11210
11284
|
data: nativeBalanceData,
|
|
11211
11285
|
isLoading: nativeLoading,
|
|
@@ -11337,7 +11411,7 @@ function useBlockscoutAssets(options) {
|
|
|
11337
11411
|
if (!tokensError) return null;
|
|
11338
11412
|
return createError(tokensError);
|
|
11339
11413
|
}, [tokensError]);
|
|
11340
|
-
const refreshBalances =
|
|
11414
|
+
const refreshBalances = useCallback15(async () => {
|
|
11341
11415
|
const now = Date.now();
|
|
11342
11416
|
if (now - lastRefreshRef.current < BLOCKSCOUT_REFRESH_DEBOUNCE) {
|
|
11343
11417
|
return;
|
|
@@ -11345,7 +11419,7 @@ function useBlockscoutAssets(options) {
|
|
|
11345
11419
|
lastRefreshRef.current = now;
|
|
11346
11420
|
await Promise.all([refetchNative(), refetchTokens(), refetchNfts()]);
|
|
11347
11421
|
}, [refetchNative, refetchTokens, refetchNfts]);
|
|
11348
|
-
const getTokenBalance =
|
|
11422
|
+
const getTokenBalance = useCallback15(
|
|
11349
11423
|
(tokenAddress) => {
|
|
11350
11424
|
return assets.find((a) => a.address?.toLowerCase() === tokenAddress.toLowerCase()) || null;
|
|
11351
11425
|
},
|
|
@@ -11532,7 +11606,7 @@ function PortfolioMenu() {
|
|
|
11532
11606
|
} = useBlockscoutAssets({
|
|
11533
11607
|
address
|
|
11534
11608
|
});
|
|
11535
|
-
const refreshAllAssetsBalances =
|
|
11609
|
+
const refreshAllAssetsBalances = useCallback16(() => {
|
|
11536
11610
|
Promise.all(projectAssets.map((asset) => qc.invalidateQueries({ queryKey: asset.balanceQueryKey })));
|
|
11537
11611
|
refreshBlockscoutBalances();
|
|
11538
11612
|
}, [qc, projectAssets, refreshBlockscoutBalances]);
|
|
@@ -11945,16 +12019,87 @@ function SecurityMenu() {
|
|
|
11945
12019
|
}
|
|
11946
12020
|
|
|
11947
12021
|
// src/internal/components/SendRecieveMenu/SendLumiaMenu.tsx
|
|
11948
|
-
import {
|
|
11949
|
-
|
|
11950
|
-
|
|
11951
|
-
|
|
12022
|
+
import {
|
|
12023
|
+
AlertCircle as AlertCircle5,
|
|
12024
|
+
AlertTriangle as AlertTriangle4,
|
|
12025
|
+
ArrowLeft as ArrowLeft12,
|
|
12026
|
+
AtSign,
|
|
12027
|
+
CheckCircle2 as CheckCircle23,
|
|
12028
|
+
Image as ImageIcon3,
|
|
12029
|
+
Loader as Loader22,
|
|
12030
|
+
Shield as Shield3,
|
|
12031
|
+
ShieldAlert,
|
|
12032
|
+
Sparkles as Sparkles3,
|
|
12033
|
+
Wallet as Wallet3
|
|
12034
|
+
} from "lucide-react";
|
|
12035
|
+
import { useEffect as useEffect27, useMemo as useMemo6, useState as useState19 } from "react";
|
|
12036
|
+
import { formatUnits as formatUnits5, isAddress as isAddress2, parseUnits as parseUnits2 } from "viem";
|
|
12037
|
+
|
|
12038
|
+
// src/hooks/useErc3643Compliance.ts
|
|
12039
|
+
init_base();
|
|
12040
|
+
import { useReadContract } from "wagmi";
|
|
12041
|
+
var ERC3643_CAN_TRANSFER_ABI = [
|
|
12042
|
+
{
|
|
12043
|
+
type: "function",
|
|
12044
|
+
name: "canTransfer",
|
|
12045
|
+
inputs: [
|
|
12046
|
+
{ name: "_to", type: "address" },
|
|
12047
|
+
{ name: "_value", type: "uint256" }
|
|
12048
|
+
],
|
|
12049
|
+
outputs: [{ name: "", type: "bool" }]
|
|
12050
|
+
}
|
|
12051
|
+
];
|
|
12052
|
+
function useErc3643Compliance(options) {
|
|
12053
|
+
const { tokenAddress, to, amount, enabled = true } = options;
|
|
12054
|
+
const isQueryEnabled = enabled && !!tokenAddress && !!to && amount !== void 0;
|
|
12055
|
+
const {
|
|
12056
|
+
data: canTransferResult,
|
|
12057
|
+
isLoading,
|
|
12058
|
+
error: queryError,
|
|
12059
|
+
refetch
|
|
12060
|
+
} = useReadContract({
|
|
12061
|
+
address: tokenAddress,
|
|
12062
|
+
abi: ERC3643_CAN_TRANSFER_ABI,
|
|
12063
|
+
functionName: "canTransfer",
|
|
12064
|
+
args: to && amount !== void 0 ? [to, amount] : void 0,
|
|
12065
|
+
chainId: lumiaBeam.id,
|
|
12066
|
+
query: {
|
|
12067
|
+
enabled: isQueryEnabled
|
|
12068
|
+
}
|
|
12069
|
+
});
|
|
12070
|
+
let error = null;
|
|
12071
|
+
if (queryError) {
|
|
12072
|
+
const errorMessage = queryError.message || "";
|
|
12073
|
+
if (errorMessage.includes("IDENTITY_NOT_VERIFIED")) {
|
|
12074
|
+
error = "Recipient identity is not verified for this security token";
|
|
12075
|
+
} else if (errorMessage.includes("COUNTRY_NOT_ALLOWED")) {
|
|
12076
|
+
error = "Transfer not allowed to recipient country";
|
|
12077
|
+
} else if (errorMessage.includes("INVESTOR_LIMIT_EXCEEDED")) {
|
|
12078
|
+
error = "Maximum investor limit exceeded for this token";
|
|
12079
|
+
} else if (errorMessage.includes("HOLDING_PERIOD_NOT_MET")) {
|
|
12080
|
+
error = "Holding period requirement not met";
|
|
12081
|
+
} else if (errorMessage.includes("AMOUNT_EXCEEDS_LIMIT")) {
|
|
12082
|
+
error = "Transfer amount exceeds allowed limit";
|
|
12083
|
+
} else {
|
|
12084
|
+
error = "Compliance check failed. Transfer may not be allowed.";
|
|
12085
|
+
}
|
|
12086
|
+
} else if (canTransferResult === false) {
|
|
12087
|
+
error = "Transfer not allowed by token compliance rules";
|
|
12088
|
+
}
|
|
12089
|
+
const canTransfer = typeof canTransferResult === "boolean" ? canTransferResult : void 0;
|
|
12090
|
+
return {
|
|
12091
|
+
canTransfer,
|
|
12092
|
+
isLoading,
|
|
12093
|
+
error,
|
|
12094
|
+
refetch
|
|
12095
|
+
};
|
|
12096
|
+
}
|
|
11952
12097
|
|
|
11953
12098
|
// src/hooks/useNicknameResolve.ts
|
|
11954
12099
|
init_nickname();
|
|
11955
12100
|
init_profile();
|
|
11956
12101
|
import { useQuery as useQuery16 } from "@tanstack/react-query";
|
|
11957
|
-
import { useState as useState16, useEffect as
|
|
12102
|
+
import { useState as useState16, useEffect as useEffect25, useMemo as useMemo5 } from "react";
|
|
11958
12103
|
|
|
11959
12104
|
// src/internal/lib/nickname-fingerprint.ts
|
|
11960
12105
|
import { keccak256 as keccak2562, getAddress as getAddress2 } from "viem";
|
|
@@ -12046,7 +12191,7 @@ function useNicknameResolve(input, options) {
|
|
|
12046
12191
|
const [isDebouncing, setIsDebouncing] = useState16(false);
|
|
12047
12192
|
const normalized = normalizeNickname(input);
|
|
12048
12193
|
const isNicknameInput = looksLikeNickname(input) && normalized.length >= 3;
|
|
12049
|
-
|
|
12194
|
+
useEffect25(() => {
|
|
12050
12195
|
if (!isNicknameInput || !enabled) {
|
|
12051
12196
|
setDebouncedInput("");
|
|
12052
12197
|
setIsDebouncing(false);
|
|
@@ -12096,16 +12241,53 @@ function useNicknameResolve(input, options) {
|
|
|
12096
12241
|
}
|
|
12097
12242
|
|
|
12098
12243
|
// src/hooks/useSendTransaction.ts
|
|
12099
|
-
import { useCallback as
|
|
12100
|
-
import { isAddress, parseEther as parseEther2 } from "viem";
|
|
12244
|
+
import { useCallback as useCallback17, useState as useState17 } from "react";
|
|
12245
|
+
import { encodeFunctionData as encodeFunctionData2, isAddress, parseEther as parseEther2, parseUnits } from "viem";
|
|
12101
12246
|
init_account();
|
|
12247
|
+
var ERC20_TRANSFER_ABI = [
|
|
12248
|
+
{
|
|
12249
|
+
type: "function",
|
|
12250
|
+
name: "transfer",
|
|
12251
|
+
inputs: [
|
|
12252
|
+
{ name: "to", type: "address" },
|
|
12253
|
+
{ name: "amount", type: "uint256" }
|
|
12254
|
+
],
|
|
12255
|
+
outputs: [{ name: "", type: "bool" }]
|
|
12256
|
+
}
|
|
12257
|
+
];
|
|
12258
|
+
var ERC721_SAFE_TRANSFER_ABI = [
|
|
12259
|
+
{
|
|
12260
|
+
type: "function",
|
|
12261
|
+
name: "safeTransferFrom",
|
|
12262
|
+
inputs: [
|
|
12263
|
+
{ name: "from", type: "address" },
|
|
12264
|
+
{ name: "to", type: "address" },
|
|
12265
|
+
{ name: "tokenId", type: "uint256" }
|
|
12266
|
+
],
|
|
12267
|
+
outputs: []
|
|
12268
|
+
}
|
|
12269
|
+
];
|
|
12270
|
+
var ERC1155_SAFE_TRANSFER_ABI = [
|
|
12271
|
+
{
|
|
12272
|
+
type: "function",
|
|
12273
|
+
name: "safeTransferFrom",
|
|
12274
|
+
inputs: [
|
|
12275
|
+
{ name: "from", type: "address" },
|
|
12276
|
+
{ name: "to", type: "address" },
|
|
12277
|
+
{ name: "id", type: "uint256" },
|
|
12278
|
+
{ name: "amount", type: "uint256" },
|
|
12279
|
+
{ name: "data", type: "bytes" }
|
|
12280
|
+
],
|
|
12281
|
+
outputs: []
|
|
12282
|
+
}
|
|
12283
|
+
];
|
|
12102
12284
|
function useSendTransaction() {
|
|
12103
12285
|
const session = useLumiaPassportSession((st) => st.session);
|
|
12104
12286
|
const address = useLumiaPassportSession((st) => st.address);
|
|
12105
12287
|
const [isLoading, setIsLoading] = useState17(false);
|
|
12106
12288
|
const [error, setError] = useState17(null);
|
|
12107
12289
|
const [userOpHash, setUserOpHash] = useState17(null);
|
|
12108
|
-
const sendTransaction =
|
|
12290
|
+
const sendTransaction = useCallback17(
|
|
12109
12291
|
async (params) => {
|
|
12110
12292
|
if (!session || !address) {
|
|
12111
12293
|
setError("No active session");
|
|
@@ -12115,21 +12297,80 @@ function useSendTransaction() {
|
|
|
12115
12297
|
setError("Invalid recipient address");
|
|
12116
12298
|
return null;
|
|
12117
12299
|
}
|
|
12118
|
-
const
|
|
12119
|
-
if (
|
|
12120
|
-
|
|
12300
|
+
const assetType = params.assetType || "native";
|
|
12301
|
+
if (assetType !== "erc721") {
|
|
12302
|
+
const value = parseFloat(params.value);
|
|
12303
|
+
if (isNaN(value) || value < 0) {
|
|
12304
|
+
setError("Invalid amount");
|
|
12305
|
+
return null;
|
|
12306
|
+
}
|
|
12307
|
+
}
|
|
12308
|
+
if (assetType !== "native" && !params.tokenAddress) {
|
|
12309
|
+
setError("Token address is required for token transfers");
|
|
12310
|
+
return null;
|
|
12311
|
+
}
|
|
12312
|
+
if ((assetType === "erc721" || assetType === "erc1155") && !params.tokenId) {
|
|
12313
|
+
setError("Token ID is required for NFT transfers");
|
|
12121
12314
|
return null;
|
|
12122
12315
|
}
|
|
12123
12316
|
setIsLoading(true);
|
|
12124
12317
|
setError(null);
|
|
12125
12318
|
setUserOpHash(null);
|
|
12126
12319
|
try {
|
|
12127
|
-
|
|
12320
|
+
let callTarget;
|
|
12321
|
+
let valueWei;
|
|
12322
|
+
let innerData;
|
|
12323
|
+
switch (assetType) {
|
|
12324
|
+
case "native": {
|
|
12325
|
+
callTarget = params.to;
|
|
12326
|
+
valueWei = parseEther2(params.value).toString();
|
|
12327
|
+
innerData = params.data || "0x";
|
|
12328
|
+
break;
|
|
12329
|
+
}
|
|
12330
|
+
case "erc20":
|
|
12331
|
+
case "erc3643": {
|
|
12332
|
+
const decimals = params.decimals ?? 18;
|
|
12333
|
+
const amount = parseUnits(params.value, decimals);
|
|
12334
|
+
callTarget = params.tokenAddress;
|
|
12335
|
+
valueWei = "0";
|
|
12336
|
+
innerData = encodeFunctionData2({
|
|
12337
|
+
abi: ERC20_TRANSFER_ABI,
|
|
12338
|
+
functionName: "transfer",
|
|
12339
|
+
args: [params.to, amount]
|
|
12340
|
+
});
|
|
12341
|
+
break;
|
|
12342
|
+
}
|
|
12343
|
+
case "erc721": {
|
|
12344
|
+
callTarget = params.tokenAddress;
|
|
12345
|
+
valueWei = "0";
|
|
12346
|
+
innerData = encodeFunctionData2({
|
|
12347
|
+
abi: ERC721_SAFE_TRANSFER_ABI,
|
|
12348
|
+
functionName: "safeTransferFrom",
|
|
12349
|
+
args: [address, params.to, BigInt(params.tokenId)]
|
|
12350
|
+
});
|
|
12351
|
+
break;
|
|
12352
|
+
}
|
|
12353
|
+
case "erc1155": {
|
|
12354
|
+
const amount = params.value ? BigInt(params.value) : 1n;
|
|
12355
|
+
callTarget = params.tokenAddress;
|
|
12356
|
+
valueWei = "0";
|
|
12357
|
+
innerData = encodeFunctionData2({
|
|
12358
|
+
abi: ERC1155_SAFE_TRANSFER_ABI,
|
|
12359
|
+
functionName: "safeTransferFrom",
|
|
12360
|
+
args: [address, params.to, BigInt(params.tokenId), amount, "0x"]
|
|
12361
|
+
});
|
|
12362
|
+
break;
|
|
12363
|
+
}
|
|
12364
|
+
default: {
|
|
12365
|
+
setError(`Unsupported asset type: ${assetType}`);
|
|
12366
|
+
return null;
|
|
12367
|
+
}
|
|
12368
|
+
}
|
|
12128
12369
|
const hash = await sendUserOperation(
|
|
12129
12370
|
session,
|
|
12130
|
-
|
|
12371
|
+
callTarget,
|
|
12131
12372
|
valueWei,
|
|
12132
|
-
|
|
12373
|
+
innerData,
|
|
12133
12374
|
"standard",
|
|
12134
12375
|
"v0.7"
|
|
12135
12376
|
);
|
|
@@ -12145,7 +12386,7 @@ function useSendTransaction() {
|
|
|
12145
12386
|
},
|
|
12146
12387
|
[session, address]
|
|
12147
12388
|
);
|
|
12148
|
-
const reset =
|
|
12389
|
+
const reset = useCallback17(() => {
|
|
12149
12390
|
setError(null);
|
|
12150
12391
|
setUserOpHash(null);
|
|
12151
12392
|
setIsLoading(false);
|
|
@@ -12159,185 +12400,331 @@ function useSendTransaction() {
|
|
|
12159
12400
|
};
|
|
12160
12401
|
}
|
|
12161
12402
|
|
|
12162
|
-
// src/
|
|
12403
|
+
// src/internal/components/SendRecieveMenu/SendLumiaMenu.tsx
|
|
12163
12404
|
init_base();
|
|
12164
|
-
|
|
12165
|
-
|
|
12166
|
-
import {
|
|
12167
|
-
|
|
12168
|
-
|
|
12169
|
-
|
|
12170
|
-
|
|
12171
|
-
|
|
12172
|
-
|
|
12173
|
-
|
|
12174
|
-
|
|
12175
|
-
|
|
12176
|
-
|
|
12177
|
-
|
|
12178
|
-
|
|
12179
|
-
|
|
12180
|
-
|
|
12181
|
-
|
|
12182
|
-
|
|
12405
|
+
|
|
12406
|
+
// src/internal/components/SendRecieveMenu/AssetSelector.tsx
|
|
12407
|
+
import { ChevronDown, Image as ImageIcon2, Shield as Shield2, Sparkles as Sparkles2, X as X4 } from "lucide-react";
|
|
12408
|
+
import { useState as useState18, useRef as useRef14, useEffect as useEffect26 } from "react";
|
|
12409
|
+
import { formatUnits as formatUnits4 } from "viem";
|
|
12410
|
+
import { Fragment as Fragment24, jsx as jsx64, jsxs as jsxs57 } from "react/jsx-runtime";
|
|
12411
|
+
function isNftAsset2(asset) {
|
|
12412
|
+
return asset.type === "erc721" || asset.type === "erc1155";
|
|
12413
|
+
}
|
|
12414
|
+
function isSecurityToken2(asset) {
|
|
12415
|
+
return asset.type === "erc3643";
|
|
12416
|
+
}
|
|
12417
|
+
function getAssetBalance(asset) {
|
|
12418
|
+
if (isNftAsset2(asset)) {
|
|
12419
|
+
return "1";
|
|
12420
|
+
}
|
|
12421
|
+
const balance = Number(formatUnits4(BigInt(asset?.balance || "0"), asset?.decimals || 18));
|
|
12422
|
+
if (balance >= 1e6) {
|
|
12423
|
+
return `${(balance / 1e6).toFixed(2)}M`;
|
|
12424
|
+
}
|
|
12425
|
+
if (balance >= 1e3) {
|
|
12426
|
+
return `${(balance / 1e3).toFixed(2)}K`;
|
|
12427
|
+
}
|
|
12428
|
+
return balance.toFixed(4);
|
|
12429
|
+
}
|
|
12430
|
+
function AssetIcon({ asset, size = "sm" }) {
|
|
12431
|
+
const [imageError, setImageError] = useState18(false);
|
|
12432
|
+
const sizeClasses = size === "sm" ? "w-6 h-6" : "w-10 h-10";
|
|
12433
|
+
const textSize = size === "sm" ? "text-xs" : "text-sm";
|
|
12434
|
+
const isNft = isNftAsset2(asset);
|
|
12435
|
+
const nftImage = asset.image || asset.nftMetadata?.image;
|
|
12436
|
+
const isSecurity = isSecurityToken2(asset);
|
|
12437
|
+
if (isNft && nftImage && !imageError) {
|
|
12438
|
+
return /* @__PURE__ */ jsxs57("div", { className: cn(sizeClasses, "rounded-[var(--l-pass-el-bdrs)] overflow-hidden relative flex-shrink-0"), children: [
|
|
12439
|
+
/* @__PURE__ */ jsx64(
|
|
12440
|
+
"img",
|
|
12441
|
+
{
|
|
12442
|
+
src: nftImage,
|
|
12443
|
+
alt: asset.nftMetadata?.name || asset.name,
|
|
12444
|
+
className: "w-full h-full object-cover",
|
|
12445
|
+
onError: () => setImageError(true)
|
|
12446
|
+
}
|
|
12447
|
+
),
|
|
12448
|
+
/* @__PURE__ */ jsx64("div", { className: "absolute -top-0.5 -right-0.5 w-3 h-3 rounded-full bg-[var(--l-pass-accent)] flex items-center justify-center", children: /* @__PURE__ */ jsx64(Sparkles2, { className: "w-2 h-2 text-[var(--l-pass-fg-inverted)]" }) })
|
|
12449
|
+
] });
|
|
12450
|
+
}
|
|
12451
|
+
if (isNft) {
|
|
12452
|
+
return /* @__PURE__ */ jsxs57("div", { className: cn(sizeClasses, "rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-fg)] flex items-center justify-center relative flex-shrink-0"), children: [
|
|
12453
|
+
/* @__PURE__ */ jsx64(ImageIcon2, { className: cn(size === "sm" ? "w-3 h-3" : "w-5 h-5", "text-[var(--l-pass-fg-inverted)]") }),
|
|
12454
|
+
/* @__PURE__ */ jsx64("div", { className: "absolute -top-0.5 -right-0.5 w-3 h-3 rounded-full bg-[var(--l-pass-accent)] flex items-center justify-center", children: /* @__PURE__ */ jsx64(Sparkles2, { className: "w-2 h-2 text-[var(--l-pass-fg-inverted)]" }) })
|
|
12455
|
+
] });
|
|
12456
|
+
}
|
|
12457
|
+
if (asset.logo && !imageError) {
|
|
12458
|
+
return /* @__PURE__ */ jsxs57("div", { className: cn(sizeClasses, "rounded-full overflow-hidden relative flex-shrink-0"), children: [
|
|
12459
|
+
/* @__PURE__ */ jsx64(
|
|
12460
|
+
"img",
|
|
12461
|
+
{
|
|
12462
|
+
src: asset.logo,
|
|
12463
|
+
alt: asset.symbol,
|
|
12464
|
+
className: "w-full h-full object-cover",
|
|
12465
|
+
onError: () => setImageError(true)
|
|
12466
|
+
}
|
|
12467
|
+
),
|
|
12468
|
+
isSecurity && /* @__PURE__ */ jsx64("div", { className: "absolute -top-0.5 -right-0.5 w-3 h-3 rounded-full bg-amber-500 flex items-center justify-center", children: /* @__PURE__ */ jsx64(Shield2, { className: "w-2 h-2 text-white" }) })
|
|
12469
|
+
] });
|
|
12470
|
+
}
|
|
12471
|
+
return /* @__PURE__ */ jsxs57("div", { className: cn(sizeClasses, "rounded-full bg-[var(--l-pass-fg)] flex items-center justify-center relative flex-shrink-0"), children: [
|
|
12472
|
+
/* @__PURE__ */ jsx64("span", { className: cn("text-[var(--l-pass-fg-inverted)] font-bold", textSize), children: asset.symbol.charAt(0) }),
|
|
12473
|
+
isSecurity && /* @__PURE__ */ jsx64("div", { className: "absolute -top-0.5 -right-0.5 w-3 h-3 rounded-full bg-amber-500 flex items-center justify-center", children: /* @__PURE__ */ jsx64(Shield2, { className: "w-2 h-2 text-white" }) })
|
|
12474
|
+
] });
|
|
12475
|
+
}
|
|
12476
|
+
function AssetListItem({ asset, onSelect, isSelected }) {
|
|
12477
|
+
const isNft = isNftAsset2(asset);
|
|
12478
|
+
const handleClick = (e) => {
|
|
12479
|
+
e.preventDefault();
|
|
12480
|
+
e.stopPropagation();
|
|
12481
|
+
onSelect();
|
|
12482
|
+
};
|
|
12483
|
+
return /* @__PURE__ */ jsxs57(
|
|
12484
|
+
"button",
|
|
12485
|
+
{
|
|
12486
|
+
type: "button",
|
|
12487
|
+
className: cn(
|
|
12488
|
+
"w-full flex items-center gap-3 p-3 rounded-[var(--l-pass-el-bdrs)]",
|
|
12489
|
+
"hover:bg-[var(--l-pass-bg-secondary)] transition-colors cursor-pointer",
|
|
12490
|
+
isSelected && "bg-[var(--l-pass-bg-secondary)]"
|
|
12491
|
+
),
|
|
12492
|
+
onClick: handleClick,
|
|
12493
|
+
children: [
|
|
12494
|
+
/* @__PURE__ */ jsx64(AssetIcon, { asset, size: "md" }),
|
|
12495
|
+
/* @__PURE__ */ jsxs57("div", { className: "flex-1 min-w-0 text-left", children: [
|
|
12496
|
+
/* @__PURE__ */ jsx64("div", { className: "font-semibold text-[var(--l-pass-fg)] truncate", children: isNft ? asset.nftMetadata?.name || asset.name : asset.name }),
|
|
12497
|
+
/* @__PURE__ */ jsx64("div", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: isNft ? /* @__PURE__ */ jsxs57(Fragment24, { children: [
|
|
12498
|
+
asset.symbol,
|
|
12499
|
+
asset.tokenId && /* @__PURE__ */ jsxs57("span", { className: "ml-1", children: [
|
|
12500
|
+
"#",
|
|
12501
|
+
asset.tokenId.length > 6 ? `${asset.tokenId.slice(0, 4)}...` : asset.tokenId
|
|
12502
|
+
] })
|
|
12503
|
+
] }) : /* @__PURE__ */ jsxs57(Fragment24, { children: [
|
|
12504
|
+
getAssetBalance(asset),
|
|
12505
|
+
" ",
|
|
12506
|
+
asset.symbol
|
|
12507
|
+
] }) })
|
|
12508
|
+
] })
|
|
12509
|
+
]
|
|
12183
12510
|
}
|
|
12184
|
-
|
|
12185
|
-
|
|
12186
|
-
|
|
12187
|
-
|
|
12188
|
-
|
|
12189
|
-
|
|
12190
|
-
|
|
12191
|
-
|
|
12192
|
-
|
|
12193
|
-
|
|
12194
|
-
|
|
12195
|
-
|
|
12511
|
+
);
|
|
12512
|
+
}
|
|
12513
|
+
function AssetSelector({ assets, selectedAsset, onSelect, disabled }) {
|
|
12514
|
+
const [isOpen, setIsOpen] = useState18(false);
|
|
12515
|
+
const dropdownRef = useRef14(null);
|
|
12516
|
+
const buttonRef = useRef14(null);
|
|
12517
|
+
useEffect26(() => {
|
|
12518
|
+
function handleClickOutside(event) {
|
|
12519
|
+
if (dropdownRef.current && !dropdownRef.current.contains(event.target) && buttonRef.current && !buttonRef.current.contains(event.target)) {
|
|
12520
|
+
setIsOpen(false);
|
|
12521
|
+
}
|
|
12522
|
+
}
|
|
12523
|
+
if (isOpen) {
|
|
12524
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
12525
|
+
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
12196
12526
|
}
|
|
12527
|
+
}, [isOpen]);
|
|
12528
|
+
const transferableAssets = assets.filter((asset) => {
|
|
12529
|
+
if (isNftAsset2(asset)) return true;
|
|
12530
|
+
const balance = BigInt(asset.balance || "0");
|
|
12531
|
+
return balance > 0n;
|
|
12197
12532
|
});
|
|
12198
|
-
const
|
|
12199
|
-
const
|
|
12200
|
-
|
|
12201
|
-
|
|
12202
|
-
|
|
12203
|
-
|
|
12204
|
-
|
|
12205
|
-
symbol: "LUMIA",
|
|
12206
|
-
balance: nativeBalance.value.toString(),
|
|
12207
|
-
formattedBalance: parseFloat(nativeBalance.formatted).toFixed(4),
|
|
12208
|
-
decimals: 18
|
|
12209
|
-
});
|
|
12210
|
-
}
|
|
12211
|
-
if (tokenBalances && COMMON_TOKENS.length > 0) {
|
|
12212
|
-
tokenBalances.forEach((balance, index) => {
|
|
12213
|
-
const token = COMMON_TOKENS[index];
|
|
12214
|
-
if (balance.status === "success" && balance.result) {
|
|
12215
|
-
const balanceValue = balance.result;
|
|
12216
|
-
const formattedBalance = formatUnits4(balanceValue, token.decimals);
|
|
12217
|
-
assets.push({
|
|
12218
|
-
type: "erc20",
|
|
12219
|
-
address: token.address,
|
|
12220
|
-
name: token.name,
|
|
12221
|
-
symbol: token.symbol,
|
|
12222
|
-
balance: balanceValue.toString(),
|
|
12223
|
-
formattedBalance: parseFloat(formattedBalance).toFixed(4),
|
|
12224
|
-
decimals: token.decimals,
|
|
12225
|
-
logo: token.logo
|
|
12226
|
-
});
|
|
12227
|
-
}
|
|
12228
|
-
});
|
|
12229
|
-
}
|
|
12230
|
-
return assets;
|
|
12533
|
+
const nativeAssets = transferableAssets.filter((a) => a.type === "native");
|
|
12534
|
+
const tokenAssets = transferableAssets.filter((a) => a.type === "erc20");
|
|
12535
|
+
const securityAssets = transferableAssets.filter((a) => a.type === "erc3643");
|
|
12536
|
+
const nftAssets = transferableAssets.filter((a) => a.type === "erc721" || a.type === "erc1155");
|
|
12537
|
+
const handleSelect = (asset) => {
|
|
12538
|
+
onSelect(asset);
|
|
12539
|
+
setIsOpen(false);
|
|
12231
12540
|
};
|
|
12232
|
-
const
|
|
12233
|
-
|
|
12234
|
-
|
|
12235
|
-
)
|
|
12236
|
-
|
|
12237
|
-
return null;
|
|
12238
|
-
}
|
|
12239
|
-
const balance = tokenBalances[tokenIndex];
|
|
12240
|
-
const token = COMMON_TOKENS[tokenIndex];
|
|
12241
|
-
if (balance.status === "success" && balance.result) {
|
|
12242
|
-
const balanceValue = balance.result;
|
|
12243
|
-
const formattedBalance = formatUnits4(balanceValue, token.decimals);
|
|
12244
|
-
return {
|
|
12245
|
-
address: token.address,
|
|
12246
|
-
name: token.name,
|
|
12247
|
-
symbol: token.symbol,
|
|
12248
|
-
decimals: token.decimals,
|
|
12249
|
-
balance: balanceValue.toString(),
|
|
12250
|
-
formattedBalance: parseFloat(formattedBalance).toFixed(4),
|
|
12251
|
-
logo: token.logo
|
|
12252
|
-
};
|
|
12541
|
+
const handleToggle = (e) => {
|
|
12542
|
+
e.preventDefault();
|
|
12543
|
+
e.stopPropagation();
|
|
12544
|
+
if (!disabled) {
|
|
12545
|
+
setIsOpen(!isOpen);
|
|
12253
12546
|
}
|
|
12254
|
-
return null;
|
|
12255
12547
|
};
|
|
12256
|
-
const
|
|
12257
|
-
|
|
12258
|
-
|
|
12259
|
-
|
|
12260
|
-
]);
|
|
12548
|
+
const handleClose = (e) => {
|
|
12549
|
+
e.preventDefault();
|
|
12550
|
+
e.stopPropagation();
|
|
12551
|
+
setIsOpen(false);
|
|
12261
12552
|
};
|
|
12262
|
-
|
|
12263
|
-
|
|
12264
|
-
tokenBalances,
|
|
12265
|
-
assets: getAllAssets(),
|
|
12266
|
-
getTokenBalance,
|
|
12267
|
-
refreshBalances,
|
|
12268
|
-
isLoading: nativeBalanceLoading || tokenBalancesLoading,
|
|
12269
|
-
isConnected: !!address
|
|
12270
|
-
};
|
|
12271
|
-
}
|
|
12272
|
-
function useTokenInfo(tokenAddress) {
|
|
12273
|
-
const readContractsResult = useReadContracts({
|
|
12274
|
-
contracts: [
|
|
12275
|
-
{ address: tokenAddress, abi: erc20Abi, functionName: "name", chainId: lumiaBeam.id },
|
|
12276
|
-
{ address: tokenAddress, abi: erc20Abi, functionName: "symbol", chainId: lumiaBeam.id },
|
|
12277
|
-
{ address: tokenAddress, abi: erc20Abi, functionName: "decimals", chainId: lumiaBeam.id }
|
|
12278
|
-
]
|
|
12279
|
-
});
|
|
12280
|
-
const { data: tokenData, isLoading } = readContractsResult;
|
|
12281
|
-
if (!tokenData || isLoading) {
|
|
12282
|
-
return { isLoading, tokenInfo: null };
|
|
12553
|
+
if (!selectedAsset) {
|
|
12554
|
+
return null;
|
|
12283
12555
|
}
|
|
12284
|
-
const
|
|
12285
|
-
|
|
12286
|
-
|
|
12287
|
-
|
|
12288
|
-
|
|
12289
|
-
|
|
12290
|
-
|
|
12291
|
-
|
|
12292
|
-
|
|
12556
|
+
const isNft = isNftAsset2(selectedAsset);
|
|
12557
|
+
return /* @__PURE__ */ jsxs57("div", { className: "relative", style: { zIndex: isOpen ? 100 : "auto" }, children: [
|
|
12558
|
+
/* @__PURE__ */ jsxs57(
|
|
12559
|
+
"button",
|
|
12560
|
+
{
|
|
12561
|
+
ref: buttonRef,
|
|
12562
|
+
type: "button",
|
|
12563
|
+
disabled,
|
|
12564
|
+
className: cn(
|
|
12565
|
+
"flex items-center gap-1.5 px-2 py-1 rounded-[var(--l-pass-el-bdrs)]",
|
|
12566
|
+
"bg-[var(--l-pass-bg)] hover:bg-[var(--l-pass-bg-secondary)]",
|
|
12567
|
+
"transition-colors cursor-pointer",
|
|
12568
|
+
disabled && "opacity-50 cursor-not-allowed"
|
|
12569
|
+
),
|
|
12570
|
+
onClick: handleToggle,
|
|
12571
|
+
children: [
|
|
12572
|
+
/* @__PURE__ */ jsx64(AssetIcon, { asset: selectedAsset, size: "sm" }),
|
|
12573
|
+
/* @__PURE__ */ jsx64("span", { className: "text-sm font-semibold text-[var(--l-pass-fg)] max-w-[80px] truncate", children: isNft ? selectedAsset.nftMetadata?.name || selectedAsset.symbol : selectedAsset.symbol }),
|
|
12574
|
+
/* @__PURE__ */ jsx64(ChevronDown, { className: cn("w-4 h-4 text-[var(--l-pass-fg-muted)] transition-transform", isOpen && "rotate-180") })
|
|
12575
|
+
]
|
|
12293
12576
|
}
|
|
12294
|
-
|
|
12295
|
-
|
|
12296
|
-
|
|
12297
|
-
|
|
12298
|
-
|
|
12299
|
-
|
|
12300
|
-
|
|
12301
|
-
|
|
12302
|
-
|
|
12303
|
-
|
|
12304
|
-
|
|
12305
|
-
|
|
12306
|
-
|
|
12307
|
-
|
|
12308
|
-
|
|
12309
|
-
|
|
12310
|
-
|
|
12311
|
-
|
|
12312
|
-
|
|
12313
|
-
|
|
12314
|
-
|
|
12315
|
-
|
|
12316
|
-
|
|
12317
|
-
|
|
12318
|
-
|
|
12319
|
-
|
|
12320
|
-
|
|
12577
|
+
),
|
|
12578
|
+
isOpen && /* @__PURE__ */ jsxs57(
|
|
12579
|
+
"div",
|
|
12580
|
+
{
|
|
12581
|
+
ref: dropdownRef,
|
|
12582
|
+
className: cn(
|
|
12583
|
+
"absolute left-0 bottom-full mb-2",
|
|
12584
|
+
"w-72 max-h-64 overflow-y-auto",
|
|
12585
|
+
"bg-[var(--l-pass-bg)] border border-[var(--l-pass-bd)]",
|
|
12586
|
+
"rounded-[var(--l-pass-el-bdrs)] shadow-lg"
|
|
12587
|
+
),
|
|
12588
|
+
style: { zIndex: 100 },
|
|
12589
|
+
onClick: (e) => e.stopPropagation(),
|
|
12590
|
+
children: [
|
|
12591
|
+
/* @__PURE__ */ jsxs57("div", { className: "sticky top-0 flex items-center justify-between px-3 py-2 bg-[var(--l-pass-bg)] border-b border-[var(--l-pass-bd)]", children: [
|
|
12592
|
+
/* @__PURE__ */ jsx64("span", { className: "text-sm font-semibold text-[var(--l-pass-fg)]", children: "Select Asset" }),
|
|
12593
|
+
/* @__PURE__ */ jsx64(Button, { variant: "ghost", size: "icon", onClick: handleClose, children: /* @__PURE__ */ jsx64(X4, { className: "w-4 h-4" }) })
|
|
12594
|
+
] }),
|
|
12595
|
+
/* @__PURE__ */ jsxs57("div", { className: "p-2", children: [
|
|
12596
|
+
nativeAssets.length > 0 && /* @__PURE__ */ jsx64(Fragment24, { children: nativeAssets.map((asset) => /* @__PURE__ */ jsx64(
|
|
12597
|
+
AssetListItem,
|
|
12598
|
+
{
|
|
12599
|
+
asset,
|
|
12600
|
+
onSelect: () => handleSelect(asset),
|
|
12601
|
+
isSelected: selectedAsset?.type === asset.type && selectedAsset?.symbol === asset.symbol
|
|
12602
|
+
},
|
|
12603
|
+
`native-${asset.symbol}`
|
|
12604
|
+
)) }),
|
|
12605
|
+
tokenAssets.length > 0 && /* @__PURE__ */ jsxs57(Fragment24, { children: [
|
|
12606
|
+
/* @__PURE__ */ jsx64("div", { className: "px-3 py-1 text-xs text-[var(--l-pass-fg-muted)] uppercase tracking-wider mt-2", children: "Tokens" }),
|
|
12607
|
+
tokenAssets.map((asset) => /* @__PURE__ */ jsx64(
|
|
12608
|
+
AssetListItem,
|
|
12609
|
+
{
|
|
12610
|
+
asset,
|
|
12611
|
+
onSelect: () => handleSelect(asset),
|
|
12612
|
+
isSelected: selectedAsset?.address === asset.address && selectedAsset?.type === asset.type
|
|
12613
|
+
},
|
|
12614
|
+
`token-${asset.address}`
|
|
12615
|
+
))
|
|
12616
|
+
] }),
|
|
12617
|
+
securityAssets.length > 0 && /* @__PURE__ */ jsxs57(Fragment24, { children: [
|
|
12618
|
+
/* @__PURE__ */ jsx64("div", { className: "px-3 py-1 text-xs text-[var(--l-pass-fg-muted)] uppercase tracking-wider mt-2", children: "Security Tokens" }),
|
|
12619
|
+
securityAssets.map((asset) => /* @__PURE__ */ jsx64(
|
|
12620
|
+
AssetListItem,
|
|
12621
|
+
{
|
|
12622
|
+
asset,
|
|
12623
|
+
onSelect: () => handleSelect(asset),
|
|
12624
|
+
isSelected: selectedAsset?.address === asset.address && selectedAsset?.type === asset.type
|
|
12625
|
+
},
|
|
12626
|
+
`security-${asset.address}`
|
|
12627
|
+
))
|
|
12628
|
+
] }),
|
|
12629
|
+
nftAssets.length > 0 && /* @__PURE__ */ jsxs57(Fragment24, { children: [
|
|
12630
|
+
/* @__PURE__ */ jsx64("div", { className: "px-3 py-1 text-xs text-[var(--l-pass-fg-muted)] uppercase tracking-wider mt-2", children: "NFTs" }),
|
|
12631
|
+
nftAssets.map((asset) => /* @__PURE__ */ jsx64(
|
|
12632
|
+
AssetListItem,
|
|
12633
|
+
{
|
|
12634
|
+
asset,
|
|
12635
|
+
onSelect: () => handleSelect(asset),
|
|
12636
|
+
isSelected: selectedAsset?.address === asset.address && selectedAsset?.tokenId === asset.tokenId
|
|
12637
|
+
},
|
|
12638
|
+
`nft-${asset.address}-${asset.tokenId}`
|
|
12639
|
+
))
|
|
12640
|
+
] }),
|
|
12641
|
+
transferableAssets.length === 0 && /* @__PURE__ */ jsx64("div", { className: "p-4 text-center text-sm text-[var(--l-pass-fg-muted)]", children: "No assets available" })
|
|
12642
|
+
] })
|
|
12643
|
+
]
|
|
12644
|
+
}
|
|
12645
|
+
)
|
|
12646
|
+
] });
|
|
12321
12647
|
}
|
|
12322
12648
|
|
|
12323
12649
|
// src/internal/components/SendRecieveMenu/SendLumiaMenu.tsx
|
|
12324
|
-
|
|
12325
|
-
|
|
12650
|
+
import { Fragment as Fragment25, jsx as jsx65, jsxs as jsxs58 } from "react/jsx-runtime";
|
|
12651
|
+
function isNftAsset3(asset) {
|
|
12652
|
+
if (!asset) return false;
|
|
12653
|
+
return asset.type === "erc721" || asset.type === "erc1155";
|
|
12654
|
+
}
|
|
12655
|
+
function isSecurityToken3(asset) {
|
|
12656
|
+
if (!asset) return false;
|
|
12657
|
+
return asset.type === "erc3643";
|
|
12658
|
+
}
|
|
12659
|
+
function getAssetBalance2(asset) {
|
|
12660
|
+
if (!asset) return 0;
|
|
12661
|
+
if (isNftAsset3(asset)) return 1;
|
|
12662
|
+
return Number(formatUnits5(BigInt(asset.balance || "0"), asset.decimals || 18));
|
|
12663
|
+
}
|
|
12664
|
+
function formatBalance(balance, decimals = 4) {
|
|
12665
|
+
if (balance >= 1e6) {
|
|
12666
|
+
return `${(balance / 1e6).toFixed(2)}M`;
|
|
12667
|
+
}
|
|
12668
|
+
if (balance >= 1e3) {
|
|
12669
|
+
return `${(balance / 1e3).toFixed(2)}K`;
|
|
12670
|
+
}
|
|
12671
|
+
return balance.toFixed(decimals);
|
|
12672
|
+
}
|
|
12673
|
+
function NftDisplayCard({ asset }) {
|
|
12674
|
+
const [imageError, setImageError] = useState19(false);
|
|
12675
|
+
const nftImage = asset.image || asset.nftMetadata?.image;
|
|
12676
|
+
return /* @__PURE__ */ jsxs58("div", { className: "flex items-center gap-3 p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-secondary)]", children: [
|
|
12677
|
+
nftImage && !imageError ? /* @__PURE__ */ jsx65(
|
|
12678
|
+
"img",
|
|
12679
|
+
{
|
|
12680
|
+
src: nftImage,
|
|
12681
|
+
alt: asset.nftMetadata?.name || asset.name,
|
|
12682
|
+
className: "w-16 h-16 rounded-[var(--l-pass-el-bdrs)] object-cover",
|
|
12683
|
+
onError: () => setImageError(true)
|
|
12684
|
+
}
|
|
12685
|
+
) : /* @__PURE__ */ jsx65("div", { className: "w-16 h-16 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-fg)] flex items-center justify-center", children: /* @__PURE__ */ jsx65(ImageIcon3, { className: "w-8 h-8 text-[var(--l-pass-fg-inverted)]" }) }),
|
|
12686
|
+
/* @__PURE__ */ jsxs58("div", { className: "flex-1 min-w-0", children: [
|
|
12687
|
+
/* @__PURE__ */ jsx65("div", { className: "font-semibold text-[var(--l-pass-fg)] truncate", children: asset.nftMetadata?.name || asset.name }),
|
|
12688
|
+
/* @__PURE__ */ jsxs58("div", { className: "text-sm text-[var(--l-pass-fg-muted)]", children: [
|
|
12689
|
+
asset.symbol,
|
|
12690
|
+
asset.tokenId && /* @__PURE__ */ jsxs58("span", { className: "ml-1", children: [
|
|
12691
|
+
"#",
|
|
12692
|
+
asset.tokenId.length > 8 ? `${asset.tokenId.slice(0, 6)}...` : asset.tokenId
|
|
12693
|
+
] })
|
|
12694
|
+
] }),
|
|
12695
|
+
/* @__PURE__ */ jsxs58("div", { className: "text-xs text-[var(--l-pass-fg-muted)] mt-1 flex items-center gap-1", children: [
|
|
12696
|
+
/* @__PURE__ */ jsx65(Sparkles3, { className: "w-3 h-3" }),
|
|
12697
|
+
/* @__PURE__ */ jsx65("span", { children: asset.type === "erc721" ? "ERC-721" : "ERC-1155" })
|
|
12698
|
+
] })
|
|
12699
|
+
] })
|
|
12700
|
+
] });
|
|
12701
|
+
}
|
|
12326
12702
|
function SendLumiaMenu() {
|
|
12327
12703
|
const page = useLayoutDataStore((st) => st.page);
|
|
12328
12704
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
12329
12705
|
const open = page === "send";
|
|
12330
12706
|
const address = useLumiaPassportSession((st) => st.address);
|
|
12331
|
-
const {
|
|
12332
|
-
|
|
12333
|
-
|
|
12334
|
-
|
|
12335
|
-
|
|
12707
|
+
const {
|
|
12708
|
+
assets,
|
|
12709
|
+
refreshBalances,
|
|
12710
|
+
isLoading: isAssetsLoading
|
|
12711
|
+
} = useBlockscoutAssets({
|
|
12712
|
+
address
|
|
12336
12713
|
});
|
|
12337
|
-
const
|
|
12338
|
-
const [
|
|
12339
|
-
const [
|
|
12340
|
-
const [
|
|
12714
|
+
const { sendTransaction, isLoading, error, userOpHash, reset } = useSendTransaction();
|
|
12715
|
+
const [recipient, setRecipient] = useState19("");
|
|
12716
|
+
const [amount, setAmount] = useState19("");
|
|
12717
|
+
const [selectedAsset, setSelectedAsset] = useState19(null);
|
|
12718
|
+
const [txStep, setTxStep] = useState19("input");
|
|
12719
|
+
const [validationError, setValidationError] = useState19(null);
|
|
12720
|
+
useEffect27(() => {
|
|
12721
|
+
if (assets.length > 0 && !selectedAsset) {
|
|
12722
|
+
const nativeAsset = assets.find((a) => a.type === "native");
|
|
12723
|
+
if (nativeAsset) {
|
|
12724
|
+
setSelectedAsset(nativeAsset);
|
|
12725
|
+
}
|
|
12726
|
+
}
|
|
12727
|
+
}, [assets, selectedAsset]);
|
|
12341
12728
|
const isNicknameInput = looksLikeNickname(recipient);
|
|
12342
12729
|
const {
|
|
12343
12730
|
resolvedAddress,
|
|
@@ -12346,22 +12733,46 @@ function SendLumiaMenu() {
|
|
|
12346
12733
|
isWalletNotSetup,
|
|
12347
12734
|
isFrozen,
|
|
12348
12735
|
isFingerprintVerified,
|
|
12349
|
-
fingerprintVerification,
|
|
12350
12736
|
data: nicknameData
|
|
12351
12737
|
} = useNicknameResolve(recipient, {
|
|
12352
12738
|
enabled: isNicknameInput,
|
|
12353
12739
|
chainId: lumiaBeam.id
|
|
12354
12740
|
});
|
|
12355
12741
|
const effectiveAddress = isNicknameInput ? resolvedAddress : recipient;
|
|
12356
|
-
const
|
|
12357
|
-
const
|
|
12358
|
-
|
|
12742
|
+
const balance = getAssetBalance2(selectedAsset);
|
|
12743
|
+
const isNft = isNftAsset3(selectedAsset);
|
|
12744
|
+
const isSecurity = isSecurityToken3(selectedAsset);
|
|
12745
|
+
const complianceAmount = useMemo6(() => {
|
|
12746
|
+
if (!isSecurity || !amount || !selectedAsset) return void 0;
|
|
12747
|
+
try {
|
|
12748
|
+
return parseUnits2(amount, selectedAsset.decimals || 18);
|
|
12749
|
+
} catch {
|
|
12750
|
+
return void 0;
|
|
12751
|
+
}
|
|
12752
|
+
}, [isSecurity, amount, selectedAsset]);
|
|
12753
|
+
const {
|
|
12754
|
+
canTransfer: erc3643CanTransfer,
|
|
12755
|
+
isLoading: isComplianceLoading,
|
|
12756
|
+
error: complianceError
|
|
12757
|
+
} = useErc3643Compliance({
|
|
12758
|
+
tokenAddress: selectedAsset?.address,
|
|
12759
|
+
to: effectiveAddress,
|
|
12760
|
+
amount: complianceAmount,
|
|
12761
|
+
enabled: isSecurity && !!effectiveAddress && !!complianceAmount
|
|
12762
|
+
});
|
|
12763
|
+
useEffect27(() => {
|
|
12359
12764
|
if (open) {
|
|
12360
12765
|
setTxStep("input");
|
|
12361
12766
|
setValidationError(null);
|
|
12767
|
+
setRecipient("");
|
|
12768
|
+
setAmount("");
|
|
12362
12769
|
reset();
|
|
12770
|
+
const nativeAsset = assets.find((a) => a.type === "native");
|
|
12771
|
+
if (nativeAsset) {
|
|
12772
|
+
setSelectedAsset(nativeAsset);
|
|
12773
|
+
}
|
|
12363
12774
|
}
|
|
12364
|
-
}, [open, reset]);
|
|
12775
|
+
}, [open, reset, assets]);
|
|
12365
12776
|
const validateInput = () => {
|
|
12366
12777
|
if (!recipient) {
|
|
12367
12778
|
setValidationError("Please enter a recipient address or @nickname");
|
|
@@ -12396,14 +12807,34 @@ function SendLumiaMenu() {
|
|
|
12396
12807
|
setValidationError("Cannot send to yourself");
|
|
12397
12808
|
return false;
|
|
12398
12809
|
}
|
|
12399
|
-
|
|
12400
|
-
|
|
12401
|
-
setValidationError("Please enter a valid amount");
|
|
12810
|
+
if (!selectedAsset) {
|
|
12811
|
+
setValidationError("Please select an asset to send");
|
|
12402
12812
|
return false;
|
|
12403
12813
|
}
|
|
12404
|
-
if (
|
|
12405
|
-
|
|
12406
|
-
|
|
12814
|
+
if (!isNft) {
|
|
12815
|
+
const amountNum = parseFloat(amount);
|
|
12816
|
+
if (!amount || isNaN(amountNum) || amountNum <= 0) {
|
|
12817
|
+
setValidationError("Please enter a valid amount");
|
|
12818
|
+
return false;
|
|
12819
|
+
}
|
|
12820
|
+
if (amountNum > balance) {
|
|
12821
|
+
setValidationError("Insufficient balance");
|
|
12822
|
+
return false;
|
|
12823
|
+
}
|
|
12824
|
+
}
|
|
12825
|
+
if (isSecurity) {
|
|
12826
|
+
if (isComplianceLoading) {
|
|
12827
|
+
setValidationError("Checking compliance...");
|
|
12828
|
+
return false;
|
|
12829
|
+
}
|
|
12830
|
+
if (complianceError) {
|
|
12831
|
+
setValidationError(complianceError);
|
|
12832
|
+
return false;
|
|
12833
|
+
}
|
|
12834
|
+
if (erc3643CanTransfer === false) {
|
|
12835
|
+
setValidationError("Transfer not allowed by token compliance rules");
|
|
12836
|
+
return false;
|
|
12837
|
+
}
|
|
12407
12838
|
}
|
|
12408
12839
|
setValidationError(null);
|
|
12409
12840
|
return true;
|
|
@@ -12413,34 +12844,51 @@ function SendLumiaMenu() {
|
|
|
12413
12844
|
setTxStep("confirm");
|
|
12414
12845
|
};
|
|
12415
12846
|
const handleConfirm = async () => {
|
|
12416
|
-
if (!effectiveAddress) return;
|
|
12847
|
+
if (!effectiveAddress || !selectedAsset) return;
|
|
12417
12848
|
setTxStep("pending");
|
|
12849
|
+
const txAmount = isNft ? "1" : amount;
|
|
12418
12850
|
const hash = await sendTransaction({
|
|
12419
12851
|
to: effectiveAddress,
|
|
12420
|
-
value:
|
|
12852
|
+
value: txAmount,
|
|
12853
|
+
assetType: selectedAsset.type,
|
|
12854
|
+
tokenAddress: selectedAsset.address,
|
|
12855
|
+
tokenId: selectedAsset.tokenId,
|
|
12856
|
+
decimals: selectedAsset.decimals
|
|
12421
12857
|
});
|
|
12422
12858
|
if (hash) {
|
|
12423
12859
|
setTxStep("success");
|
|
12424
|
-
setTimeout(() =>
|
|
12425
|
-
refetchBalance();
|
|
12426
|
-
}, 2e3);
|
|
12860
|
+
setTimeout(() => refreshBalances(), 3e3);
|
|
12427
12861
|
} else {
|
|
12428
12862
|
setTxStep("input");
|
|
12429
12863
|
}
|
|
12430
12864
|
};
|
|
12431
12865
|
const handleMaxAmount = () => {
|
|
12432
|
-
|
|
12433
|
-
|
|
12866
|
+
if (!selectedAsset || isNft) return;
|
|
12867
|
+
if (selectedAsset.type === "native") {
|
|
12868
|
+
const maxAmount = Math.max(0, balance - 1e-3);
|
|
12869
|
+
setAmount(maxAmount.toFixed(6));
|
|
12870
|
+
} else {
|
|
12871
|
+
setAmount(formatUnits5(BigInt(selectedAsset.balance || "0"), selectedAsset.decimals || 18));
|
|
12872
|
+
}
|
|
12434
12873
|
};
|
|
12435
|
-
|
|
12436
|
-
|
|
12437
|
-
|
|
12438
|
-
|
|
12874
|
+
const handleAssetSelect = (asset) => {
|
|
12875
|
+
setSelectedAsset(asset);
|
|
12876
|
+
setAmount("");
|
|
12877
|
+
};
|
|
12878
|
+
const getPageTitle = () => {
|
|
12879
|
+
if (!selectedAsset) return "Send";
|
|
12880
|
+
if (isNft) return `Send NFT`;
|
|
12881
|
+
return `Send ${selectedAsset.symbol}`;
|
|
12882
|
+
};
|
|
12883
|
+
return /* @__PURE__ */ jsxs58("div", { className: "w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]", children: [
|
|
12884
|
+
/* @__PURE__ */ jsxs58("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
12885
|
+
txStep === "input" && /* @__PURE__ */ jsx65(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx65(ArrowLeft12, { className: "h-4 w-4" }) }),
|
|
12886
|
+
/* @__PURE__ */ jsx65("span", { className: "text-xl font-semibold", children: getPageTitle() })
|
|
12439
12887
|
] }),
|
|
12440
|
-
txStep === "input" && /* @__PURE__ */
|
|
12441
|
-
/* @__PURE__ */
|
|
12442
|
-
/* @__PURE__ */
|
|
12443
|
-
/* @__PURE__ */
|
|
12888
|
+
txStep === "input" && /* @__PURE__ */ jsxs58(Fragment25, { children: [
|
|
12889
|
+
/* @__PURE__ */ jsxs58("div", { className: "w-full flex flex-col gap-2", children: [
|
|
12890
|
+
/* @__PURE__ */ jsx65("span", { className: "block text-sm font-medium mb-2 text-[var(--l-pass-fg-muted)]", children: "Recipient" }),
|
|
12891
|
+
/* @__PURE__ */ jsx65(
|
|
12444
12892
|
Input,
|
|
12445
12893
|
{
|
|
12446
12894
|
Icon: isNicknameInput ? AtSign : Wallet3,
|
|
@@ -12448,180 +12896,276 @@ function SendLumiaMenu() {
|
|
|
12448
12896
|
value: recipient,
|
|
12449
12897
|
onChange: (e) => setRecipient(e.target.value),
|
|
12450
12898
|
placeholder: "0x... or @nickname",
|
|
12451
|
-
element: isNicknameInput && isResolving ? /* @__PURE__ */
|
|
12899
|
+
element: isNicknameInput && isResolving ? /* @__PURE__ */ jsx65(Loader22, { className: "w-4 h-4 animate-spin text-[var(--l-pass-fg-muted)]" }) : null
|
|
12452
12900
|
}
|
|
12453
12901
|
),
|
|
12454
|
-
isNicknameInput && resolvedAddress && !isResolving && nicknameData && /* @__PURE__ */
|
|
12455
|
-
nicknameData.avatarSvg ? /* @__PURE__ */
|
|
12902
|
+
isNicknameInput && resolvedAddress && !isResolving && nicknameData && /* @__PURE__ */ jsxs58("div", { className: "flex items-start gap-3 p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-secondary)]", children: [
|
|
12903
|
+
nicknameData.avatarSvg ? /* @__PURE__ */ jsx65(
|
|
12456
12904
|
"img",
|
|
12457
12905
|
{
|
|
12458
12906
|
src: nicknameData.avatarSvg,
|
|
12459
12907
|
alt: nicknameData.handle,
|
|
12460
12908
|
className: "w-10 h-10 rounded-full object-cover flex-shrink-0"
|
|
12461
12909
|
}
|
|
12462
|
-
) : /* @__PURE__ */
|
|
12463
|
-
/* @__PURE__ */
|
|
12464
|
-
/* @__PURE__ */
|
|
12465
|
-
/* @__PURE__ */
|
|
12466
|
-
/* @__PURE__ */
|
|
12910
|
+
) : /* @__PURE__ */ jsx65("div", { className: "w-10 h-10 rounded-full bg-[var(--l-pass-bg)] flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx65(AtSign, { className: "w-5 h-5 text-[var(--l-pass-fg-muted)]" }) }),
|
|
12911
|
+
/* @__PURE__ */ jsxs58("div", { className: "flex flex-col gap-1 min-w-0", children: [
|
|
12912
|
+
/* @__PURE__ */ jsxs58("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-bg-success)]", children: [
|
|
12913
|
+
/* @__PURE__ */ jsx65(CheckCircle23, { className: "w-3 h-3 flex-shrink-0" }),
|
|
12914
|
+
/* @__PURE__ */ jsx65("span", { className: "font-mono", children: `${resolvedAddress.slice(0, 6)}...${resolvedAddress.slice(-4)}` })
|
|
12467
12915
|
] }),
|
|
12468
|
-
nicknameData.fingerprint && /* @__PURE__ */
|
|
12469
|
-
isFingerprintVerified ? /* @__PURE__ */
|
|
12470
|
-
/* @__PURE__ */
|
|
12916
|
+
nicknameData.fingerprint && /* @__PURE__ */ jsxs58("div", { className: `flex items-center gap-1.5 text-xs ${isFingerprintVerified ? "text-[var(--l-pass-bg-success)]" : "text-[var(--l-pass-bg-error)]"}`, children: [
|
|
12917
|
+
isFingerprintVerified ? /* @__PURE__ */ jsx65(Shield3, { className: "w-3 h-3 flex-shrink-0" }) : /* @__PURE__ */ jsx65(ShieldAlert, { className: "w-3 h-3 flex-shrink-0" }),
|
|
12918
|
+
/* @__PURE__ */ jsxs58("span", { children: [
|
|
12471
12919
|
"Fingerprint: ",
|
|
12472
12920
|
nicknameData.fingerprint
|
|
12473
12921
|
] }),
|
|
12474
|
-
/* @__PURE__ */
|
|
12922
|
+
/* @__PURE__ */ jsx65("span", { children: isFingerprintVerified ? "Verified" : "FAILED" })
|
|
12475
12923
|
] })
|
|
12476
12924
|
] })
|
|
12477
12925
|
] }),
|
|
12478
|
-
isNicknameInput && isFrozen && !isResolving && /* @__PURE__ */
|
|
12479
|
-
/* @__PURE__ */
|
|
12480
|
-
/* @__PURE__ */
|
|
12926
|
+
isNicknameInput && isFrozen && !isResolving && /* @__PURE__ */ jsxs58("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-bg-warning)]", children: [
|
|
12927
|
+
/* @__PURE__ */ jsx65(AlertTriangle4, { className: "w-3 h-3" }),
|
|
12928
|
+
/* @__PURE__ */ jsx65("span", { children: "This handle is frozen. Proceed with caution." })
|
|
12481
12929
|
] }),
|
|
12482
|
-
isNicknameInput && isWalletNotSetup && !isResolving && /* @__PURE__ */
|
|
12483
|
-
/* @__PURE__ */
|
|
12484
|
-
/* @__PURE__ */
|
|
12930
|
+
isNicknameInput && isWalletNotSetup && !isResolving && /* @__PURE__ */ jsxs58("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-bg-error)]", children: [
|
|
12931
|
+
/* @__PURE__ */ jsx65(AlertCircle5, { className: "w-3 h-3" }),
|
|
12932
|
+
/* @__PURE__ */ jsx65("span", { children: "This user has not set up their wallet yet" })
|
|
12485
12933
|
] }),
|
|
12486
|
-
isNicknameInput && isNotFound && !isResolving && /* @__PURE__ */
|
|
12487
|
-
/* @__PURE__ */
|
|
12488
|
-
/* @__PURE__ */
|
|
12934
|
+
isNicknameInput && isNotFound && !isResolving && /* @__PURE__ */ jsxs58("div", { className: "flex items-center gap-1.5 text-xs text-[var(--l-pass-bg-error)]", children: [
|
|
12935
|
+
/* @__PURE__ */ jsx65(AlertCircle5, { className: "w-3 h-3" }),
|
|
12936
|
+
/* @__PURE__ */ jsx65("span", { children: "Nickname not found" })
|
|
12489
12937
|
] })
|
|
12490
12938
|
] }),
|
|
12491
|
-
/* @__PURE__ */
|
|
12492
|
-
/* @__PURE__ */
|
|
12493
|
-
/* @__PURE__ */
|
|
12494
|
-
/* @__PURE__ */
|
|
12939
|
+
/* @__PURE__ */ jsxs58("div", { className: "w-full flex flex-col gap-2", children: [
|
|
12940
|
+
/* @__PURE__ */ jsxs58("div", { className: "flex justify-between items-center", children: [
|
|
12941
|
+
/* @__PURE__ */ jsx65("span", { className: "block text-sm font-medium text-[var(--l-pass-fg-muted)]", children: isNft ? "Asset" : "Amount" }),
|
|
12942
|
+
!isNft && selectedAsset && /* @__PURE__ */ jsxs58("span", { className: "block text-sm text-[var(--l-pass-fg-muted)]", children: [
|
|
12495
12943
|
"Balance: ",
|
|
12496
|
-
balance
|
|
12497
|
-
"
|
|
12944
|
+
formatBalance(balance),
|
|
12945
|
+
" ",
|
|
12946
|
+
selectedAsset.symbol
|
|
12498
12947
|
] })
|
|
12499
12948
|
] }),
|
|
12500
|
-
|
|
12501
|
-
|
|
12502
|
-
{
|
|
12503
|
-
|
|
12504
|
-
|
|
12505
|
-
|
|
12506
|
-
|
|
12507
|
-
|
|
12508
|
-
|
|
12509
|
-
|
|
12510
|
-
|
|
12511
|
-
|
|
12949
|
+
isNft && selectedAsset ? (
|
|
12950
|
+
// NFT display card
|
|
12951
|
+
/* @__PURE__ */ jsx65(NftDisplayCard, { asset: selectedAsset })
|
|
12952
|
+
) : (
|
|
12953
|
+
// Fungible token amount input
|
|
12954
|
+
/* @__PURE__ */ jsxs58("div", { className: "flex h-12 w-full rounded-[var(--l-pass-el-bdrs)] items-center gap-[var(--l-pass-gap)] px-[var(--l-pass-pd)] bg-[var(--l-pass-secondary)] hover:bg-[var(--l-pass-secondary-h)] transition-colors duration-200 ease-in-out focus-within:bg-[var(--l-pass-secondary-a)]", children: [
|
|
12955
|
+
selectedAsset && /* @__PURE__ */ jsx65(
|
|
12956
|
+
AssetSelector,
|
|
12957
|
+
{
|
|
12958
|
+
assets,
|
|
12959
|
+
selectedAsset,
|
|
12960
|
+
onSelect: handleAssetSelect,
|
|
12961
|
+
disabled: isAssetsLoading
|
|
12962
|
+
}
|
|
12963
|
+
),
|
|
12964
|
+
/* @__PURE__ */ jsx65(
|
|
12965
|
+
"input",
|
|
12966
|
+
{
|
|
12967
|
+
type: "number",
|
|
12968
|
+
value: amount,
|
|
12969
|
+
onChange: (e) => setAmount(e.target.value),
|
|
12970
|
+
placeholder: "0.0",
|
|
12971
|
+
step: "0.000001",
|
|
12972
|
+
className: cn(
|
|
12973
|
+
"text-[16px] text-[var(--l-pass-fg)] font-semibold",
|
|
12974
|
+
"placeholder:text-[var(--l-pass-fg-muted)]",
|
|
12975
|
+
"focus-visible:outline-none focus-visible:ring-0",
|
|
12976
|
+
"w-full h-full flex-1 border-0 bg-transparent px-0"
|
|
12977
|
+
)
|
|
12978
|
+
}
|
|
12979
|
+
),
|
|
12980
|
+
/* @__PURE__ */ jsx65(Button, { onClick: handleMaxAmount, variant: "ghost", size: "medium", children: "MAX" })
|
|
12981
|
+
] })
|
|
12982
|
+
),
|
|
12983
|
+
isNft && selectedAsset && /* @__PURE__ */ jsxs58("div", { className: "flex items-center gap-2 mt-2", children: [
|
|
12984
|
+
/* @__PURE__ */ jsx65("span", { className: "text-sm text-[var(--l-pass-fg-muted)]", children: "Change asset:" }),
|
|
12985
|
+
/* @__PURE__ */ jsx65(
|
|
12986
|
+
AssetSelector,
|
|
12987
|
+
{
|
|
12988
|
+
assets,
|
|
12989
|
+
selectedAsset,
|
|
12990
|
+
onSelect: handleAssetSelect,
|
|
12991
|
+
disabled: isAssetsLoading
|
|
12992
|
+
}
|
|
12993
|
+
)
|
|
12994
|
+
] })
|
|
12512
12995
|
] }),
|
|
12513
|
-
|
|
12514
|
-
|
|
12515
|
-
|
|
12996
|
+
isSecurity && effectiveAddress && amount && /* @__PURE__ */ jsx65("div", { className: cn(
|
|
12997
|
+
"flex items-center gap-2 p-3 rounded-[var(--l-pass-el-bdrs)]",
|
|
12998
|
+
isComplianceLoading && "bg-[var(--l-pass-bg-info)] text-[var(--l-pass-info)]",
|
|
12999
|
+
!isComplianceLoading && erc3643CanTransfer && "bg-[var(--l-pass-bg-success)] text-[var(--l-pass-success)]",
|
|
13000
|
+
!isComplianceLoading && !erc3643CanTransfer && "bg-[var(--l-pass-bg-error)] text-[var(--l-pass-error)]"
|
|
13001
|
+
), children: isComplianceLoading ? /* @__PURE__ */ jsxs58(Fragment25, { children: [
|
|
13002
|
+
/* @__PURE__ */ jsx65(Loader22, { className: "h-4 w-4 animate-spin" }),
|
|
13003
|
+
/* @__PURE__ */ jsx65("span", { className: "text-sm", children: "Checking compliance..." })
|
|
13004
|
+
] }) : erc3643CanTransfer ? /* @__PURE__ */ jsxs58(Fragment25, { children: [
|
|
13005
|
+
/* @__PURE__ */ jsx65(CheckCircle23, { className: "h-4 w-4" }),
|
|
13006
|
+
/* @__PURE__ */ jsx65("span", { className: "text-sm", children: "Transfer compliant" })
|
|
13007
|
+
] }) : /* @__PURE__ */ jsxs58(Fragment25, { children: [
|
|
13008
|
+
/* @__PURE__ */ jsx65(AlertCircle5, { className: "h-4 w-4" }),
|
|
13009
|
+
/* @__PURE__ */ jsx65("span", { className: "text-sm", children: complianceError || "Transfer not allowed" })
|
|
13010
|
+
] }) }),
|
|
13011
|
+
(validationError || error) && /* @__PURE__ */ jsxs58("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: [
|
|
13012
|
+
/* @__PURE__ */ jsx65(AlertCircle5, { className: "h-4 w-4" }),
|
|
13013
|
+
/* @__PURE__ */ jsx65("span", { className: "text-sm", children: validationError || error })
|
|
12516
13014
|
] }),
|
|
12517
|
-
/* @__PURE__ */
|
|
13015
|
+
/* @__PURE__ */ jsx65(Button, { onClick: handleSend, disabled: isLoading || isComplianceLoading, className: "w-full", size: "large", children: "Continue" })
|
|
12518
13016
|
] }),
|
|
12519
|
-
txStep === "confirm" && effectiveAddress && /* @__PURE__ */
|
|
12520
|
-
isNicknameInput && isFrozen && /* @__PURE__ */
|
|
12521
|
-
/* @__PURE__ */
|
|
12522
|
-
/* @__PURE__ */
|
|
13017
|
+
txStep === "confirm" && effectiveAddress && selectedAsset && /* @__PURE__ */ jsxs58(Fragment25, { children: [
|
|
13018
|
+
isNicknameInput && isFrozen && /* @__PURE__ */ jsxs58("div", { className: "flex items-center gap-2 p-3 bg-[var(--l-pass-bg-warning)] text-[var(--l-pass-warning)] rounded-[var(--l-pass-el-bdrs)]", children: [
|
|
13019
|
+
/* @__PURE__ */ jsx65(AlertTriangle4, { className: "h-4 w-4 flex-shrink-0" }),
|
|
13020
|
+
/* @__PURE__ */ jsx65("span", { className: "text-sm font-medium", children: "This handle is frozen. Proceed with caution." })
|
|
13021
|
+
] }),
|
|
13022
|
+
isSecurity && erc3643CanTransfer && /* @__PURE__ */ jsxs58("div", { className: "flex items-center gap-2 p-3 bg-[var(--l-pass-bg-success)] text-[var(--l-pass-success)] rounded-[var(--l-pass-el-bdrs)]", children: [
|
|
13023
|
+
/* @__PURE__ */ jsx65(Shield3, { className: "h-4 w-4 flex-shrink-0" }),
|
|
13024
|
+
/* @__PURE__ */ jsx65("span", { className: "text-sm font-medium", children: "Security token compliance verified" })
|
|
12523
13025
|
] }),
|
|
12524
|
-
/* @__PURE__ */
|
|
12525
|
-
/* @__PURE__ */
|
|
12526
|
-
nicknameData.avatarSvg ? /* @__PURE__ */
|
|
13026
|
+
/* @__PURE__ */ jsx65("div", { className: "bg-[var(--l-pass-bg-secondary)] rounded-[var(--l-pass-el-bdrs)] p-4", children: isNicknameInput && nicknameData ? /* @__PURE__ */ jsxs58(Fragment25, { children: [
|
|
13027
|
+
/* @__PURE__ */ jsxs58("div", { className: "flex items-start gap-3 mb-4", children: [
|
|
13028
|
+
nicknameData.avatarSvg ? /* @__PURE__ */ jsx65(
|
|
12527
13029
|
"img",
|
|
12528
13030
|
{
|
|
12529
13031
|
src: nicknameData.avatarSvg,
|
|
12530
13032
|
alt: nicknameData.handle,
|
|
12531
13033
|
className: "w-12 h-12 rounded-full object-cover flex-shrink-0"
|
|
12532
13034
|
}
|
|
12533
|
-
) : /* @__PURE__ */
|
|
12534
|
-
/* @__PURE__ */
|
|
12535
|
-
/* @__PURE__ */
|
|
12536
|
-
nicknameData.fingerprint && /* @__PURE__ */
|
|
12537
|
-
isFingerprintVerified ? /* @__PURE__ */
|
|
12538
|
-
/* @__PURE__ */
|
|
13035
|
+
) : /* @__PURE__ */ jsx65("div", { className: "w-12 h-12 rounded-full bg-[var(--l-pass-bg)] flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx65(AtSign, { className: "w-6 h-6 text-[var(--l-pass-fg-muted)]" }) }),
|
|
13036
|
+
/* @__PURE__ */ jsxs58("div", { className: "flex flex-col gap-1 min-w-0", children: [
|
|
13037
|
+
/* @__PURE__ */ jsx65("span", { className: "font-semibold text-lg text-[var(--l-pass-fg)] truncate", children: nicknameData.handle }),
|
|
13038
|
+
nicknameData.fingerprint && /* @__PURE__ */ jsxs58("div", { className: `flex items-center gap-1.5 text-sm ${isFingerprintVerified ? "text-[var(--l-pass-bg-success)]" : "text-[var(--l-pass-bg-error)]"}`, children: [
|
|
13039
|
+
isFingerprintVerified ? /* @__PURE__ */ jsx65(Shield3, { className: "w-4 h-4 flex-shrink-0" }) : /* @__PURE__ */ jsx65(ShieldAlert, { className: "w-4 h-4 flex-shrink-0" }),
|
|
13040
|
+
/* @__PURE__ */ jsxs58("span", { children: [
|
|
12539
13041
|
"Fingerprint: ",
|
|
12540
13042
|
nicknameData.fingerprint
|
|
12541
13043
|
] }),
|
|
12542
|
-
isFingerprintVerified && /* @__PURE__ */
|
|
12543
|
-
/* @__PURE__ */
|
|
13044
|
+
isFingerprintVerified && /* @__PURE__ */ jsx65(CheckCircle23, { className: "w-3 h-3" }),
|
|
13045
|
+
/* @__PURE__ */ jsx65("span", { className: "text-xs", children: isFingerprintVerified ? "Verified" : "FAILED" })
|
|
12544
13046
|
] }),
|
|
12545
|
-
/* @__PURE__ */
|
|
13047
|
+
/* @__PURE__ */ jsxs58("span", { className: "font-mono text-xs text-[var(--l-pass-fg-muted)]", children: [
|
|
12546
13048
|
"Address: ",
|
|
12547
13049
|
`${effectiveAddress.slice(0, 6)}...${effectiveAddress.slice(-6)}`
|
|
12548
13050
|
] })
|
|
12549
13051
|
] })
|
|
12550
13052
|
] }),
|
|
12551
|
-
/* @__PURE__ */
|
|
12552
|
-
|
|
12553
|
-
|
|
12554
|
-
/* @__PURE__ */
|
|
12555
|
-
|
|
12556
|
-
"
|
|
13053
|
+
/* @__PURE__ */ jsxs58("div", { className: "border-t border-[var(--l-pass-border)] pt-3 space-y-2 text-sm text-[var(--l-pass-fg)]", children: [
|
|
13054
|
+
isNft ? (
|
|
13055
|
+
// NFT details
|
|
13056
|
+
/* @__PURE__ */ jsx65(Fragment25, { children: /* @__PURE__ */ jsxs58("div", { className: "flex justify-between items-start", children: [
|
|
13057
|
+
/* @__PURE__ */ jsx65("span", { className: "text-[var(--l-pass-fg-muted)]", children: "NFT:" }),
|
|
13058
|
+
/* @__PURE__ */ jsxs58("div", { className: "text-right", children: [
|
|
13059
|
+
/* @__PURE__ */ jsx65("span", { className: "font-semibold block", children: selectedAsset.nftMetadata?.name || selectedAsset.name }),
|
|
13060
|
+
selectedAsset.tokenId && /* @__PURE__ */ jsxs58("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: [
|
|
13061
|
+
"#",
|
|
13062
|
+
selectedAsset.tokenId.length > 10 ? `${selectedAsset.tokenId.slice(0, 8)}...` : selectedAsset.tokenId
|
|
13063
|
+
] })
|
|
13064
|
+
] })
|
|
13065
|
+
] }) })
|
|
13066
|
+
) : (
|
|
13067
|
+
// Fungible token details
|
|
13068
|
+
/* @__PURE__ */ jsxs58("div", { className: "flex justify-between", children: [
|
|
13069
|
+
/* @__PURE__ */ jsx65("span", { className: "text-[var(--l-pass-fg-muted)]", children: "Amount:" }),
|
|
13070
|
+
/* @__PURE__ */ jsxs58("span", { className: "font-semibold", children: [
|
|
13071
|
+
amount,
|
|
13072
|
+
" ",
|
|
13073
|
+
selectedAsset.symbol
|
|
13074
|
+
] })
|
|
12557
13075
|
] })
|
|
12558
|
-
|
|
12559
|
-
/* @__PURE__ */
|
|
12560
|
-
/* @__PURE__ */
|
|
12561
|
-
/* @__PURE__ */
|
|
13076
|
+
),
|
|
13077
|
+
/* @__PURE__ */ jsxs58("div", { className: "flex justify-between", children: [
|
|
13078
|
+
/* @__PURE__ */ jsx65("span", { className: "text-[var(--l-pass-fg-muted)]", children: "Network:" }),
|
|
13079
|
+
/* @__PURE__ */ jsx65("span", { children: "Lumia Beam" })
|
|
12562
13080
|
] })
|
|
12563
13081
|
] })
|
|
12564
|
-
] }) : /* @__PURE__ */
|
|
12565
|
-
/* @__PURE__ */
|
|
12566
|
-
/* @__PURE__ */
|
|
12567
|
-
/* @__PURE__ */
|
|
12568
|
-
/* @__PURE__ */
|
|
12569
|
-
/* @__PURE__ */
|
|
13082
|
+
] }) : /* @__PURE__ */ jsxs58(Fragment25, { children: [
|
|
13083
|
+
/* @__PURE__ */ jsx65("h3", { className: "font-medium mb-3 text-[var(--l-pass-fg)]", children: "Transaction Details" }),
|
|
13084
|
+
/* @__PURE__ */ jsxs58("div", { className: "space-y-2 text-sm text-[var(--l-pass-fg)]", children: [
|
|
13085
|
+
/* @__PURE__ */ jsxs58("div", { className: "flex justify-between", children: [
|
|
13086
|
+
/* @__PURE__ */ jsx65("span", { className: "text-[var(--l-pass-fg-muted)]", children: "To:" }),
|
|
13087
|
+
/* @__PURE__ */ jsx65("span", { className: "font-mono text-xs", children: `${effectiveAddress.slice(0, 6)}...${effectiveAddress.slice(-4)}` })
|
|
12570
13088
|
] }),
|
|
12571
|
-
|
|
12572
|
-
|
|
12573
|
-
/* @__PURE__ */
|
|
12574
|
-
|
|
12575
|
-
"
|
|
13089
|
+
isNft ? (
|
|
13090
|
+
// NFT details
|
|
13091
|
+
/* @__PURE__ */ jsx65(Fragment25, { children: /* @__PURE__ */ jsxs58("div", { className: "flex justify-between items-start", children: [
|
|
13092
|
+
/* @__PURE__ */ jsx65("span", { className: "text-[var(--l-pass-fg-muted)]", children: "NFT:" }),
|
|
13093
|
+
/* @__PURE__ */ jsxs58("div", { className: "text-right", children: [
|
|
13094
|
+
/* @__PURE__ */ jsx65("span", { className: "font-semibold block", children: selectedAsset.nftMetadata?.name || selectedAsset.name }),
|
|
13095
|
+
selectedAsset.tokenId && /* @__PURE__ */ jsxs58("span", { className: "text-xs text-[var(--l-pass-fg-muted)]", children: [
|
|
13096
|
+
"#",
|
|
13097
|
+
selectedAsset.tokenId.length > 10 ? `${selectedAsset.tokenId.slice(0, 8)}...` : selectedAsset.tokenId
|
|
13098
|
+
] })
|
|
13099
|
+
] })
|
|
13100
|
+
] }) })
|
|
13101
|
+
) : (
|
|
13102
|
+
// Fungible token details
|
|
13103
|
+
/* @__PURE__ */ jsxs58("div", { className: "flex justify-between", children: [
|
|
13104
|
+
/* @__PURE__ */ jsx65("span", { className: "text-[var(--l-pass-fg-muted)]", children: "Amount:" }),
|
|
13105
|
+
/* @__PURE__ */ jsxs58("span", { className: "font-semibold", children: [
|
|
13106
|
+
amount,
|
|
13107
|
+
" ",
|
|
13108
|
+
selectedAsset.symbol
|
|
13109
|
+
] })
|
|
12576
13110
|
] })
|
|
12577
|
-
|
|
12578
|
-
/* @__PURE__ */
|
|
12579
|
-
/* @__PURE__ */
|
|
12580
|
-
/* @__PURE__ */
|
|
13111
|
+
),
|
|
13112
|
+
/* @__PURE__ */ jsxs58("div", { className: "flex justify-between", children: [
|
|
13113
|
+
/* @__PURE__ */ jsx65("span", { className: "text-[var(--l-pass-fg-muted)]", children: "Network:" }),
|
|
13114
|
+
/* @__PURE__ */ jsx65("span", { children: "Lumia Beam" })
|
|
12581
13115
|
] })
|
|
12582
13116
|
] })
|
|
12583
13117
|
] }) }),
|
|
12584
|
-
/* @__PURE__ */
|
|
12585
|
-
/* @__PURE__ */
|
|
12586
|
-
/* @__PURE__ */
|
|
12587
|
-
isLoading && /* @__PURE__ */
|
|
13118
|
+
/* @__PURE__ */ jsxs58("div", { className: "flex gap-2", children: [
|
|
13119
|
+
/* @__PURE__ */ jsx65(Button, { onClick: () => setTxStep("input"), variant: "outline", className: "flex-1", size: "large", children: "Back" }),
|
|
13120
|
+
/* @__PURE__ */ jsxs58(Button, { onClick: handleConfirm, disabled: isLoading, className: "flex-1", size: "large", children: [
|
|
13121
|
+
isLoading && /* @__PURE__ */ jsx65(Loader22, { className: "h-4 w-4 animate-spin" }),
|
|
12588
13122
|
"Confirm"
|
|
12589
13123
|
] })
|
|
12590
13124
|
] })
|
|
12591
13125
|
] }),
|
|
12592
|
-
txStep === "pending" && /* @__PURE__ */
|
|
12593
|
-
/* @__PURE__ */
|
|
12594
|
-
/* @__PURE__ */
|
|
12595
|
-
/* @__PURE__ */
|
|
12596
|
-
/* @__PURE__ */
|
|
13126
|
+
txStep === "pending" && /* @__PURE__ */ jsxs58("div", { className: "py-8 text-center space-y-4", children: [
|
|
13127
|
+
/* @__PURE__ */ jsx65(Loader22, { className: "h-5 w-5 animate-spin mx-auto" }),
|
|
13128
|
+
/* @__PURE__ */ jsxs58("div", { children: [
|
|
13129
|
+
/* @__PURE__ */ jsx65("span", { className: "block font-medium", children: "Transaction Pending" }),
|
|
13130
|
+
/* @__PURE__ */ jsx65("span", { className: "block text-sm mt-1", children: "Please wait while we process your transaction" })
|
|
12597
13131
|
] })
|
|
12598
13132
|
] }),
|
|
12599
|
-
txStep === "success" && userOpHash && /* @__PURE__ */
|
|
12600
|
-
/* @__PURE__ */
|
|
12601
|
-
/* @__PURE__ */
|
|
12602
|
-
/* @__PURE__ */
|
|
12603
|
-
/* @__PURE__ */
|
|
13133
|
+
txStep === "success" && userOpHash && /* @__PURE__ */ jsxs58(Fragment25, { children: [
|
|
13134
|
+
/* @__PURE__ */ jsxs58("div", { className: "text-center py-4", children: [
|
|
13135
|
+
/* @__PURE__ */ jsx65(CheckCircle23, { className: "h-12 w-12 text-[var(--l-pass-success)] mx-auto mb-3" }),
|
|
13136
|
+
/* @__PURE__ */ jsx65("p", { className: "font-medium", children: "Transaction Sent!" }),
|
|
13137
|
+
/* @__PURE__ */ jsx65("p", { className: "text-sm mt-1", children: "Your transaction is being processed" })
|
|
12604
13138
|
] }),
|
|
12605
|
-
/* @__PURE__ */
|
|
13139
|
+
/* @__PURE__ */ jsx65(Button, { onClick: () => setPage("transactions" /* TRANSACTIONS */), className: "w-full", size: "large", children: "Done" })
|
|
12606
13140
|
] })
|
|
12607
13141
|
] });
|
|
12608
13142
|
}
|
|
12609
13143
|
|
|
12610
13144
|
// src/internal/components/SendRecieveMenu/ReceiveLumiaMenu.tsx
|
|
12611
|
-
|
|
12612
|
-
import { ArrowLeft as ArrowLeft13, CheckCircle2 as CheckCircle24, Copy as Copy2, Loader as Loader23 } from "lucide-react";
|
|
13145
|
+
import { ArrowLeft as ArrowLeft13, CheckCircle2 as CheckCircle24, Copy as Copy2, Info as Info2, Loader as Loader23, Shield as Shield4 } from "lucide-react";
|
|
12613
13146
|
import QRCode from "qrcode";
|
|
12614
|
-
import { useCallback as
|
|
12615
|
-
|
|
13147
|
+
import { useCallback as useCallback18, useEffect as useEffect28, useMemo as useMemo7, useState as useState20 } from "react";
|
|
13148
|
+
init_clients();
|
|
13149
|
+
import { Fragment as Fragment26, jsx as jsx66, jsxs as jsxs59 } from "react/jsx-runtime";
|
|
12616
13150
|
function ReceiveLumiaMenu() {
|
|
12617
|
-
const
|
|
13151
|
+
const session = useLumiaPassportSession((st) => st.session);
|
|
13152
|
+
const address = session?.smartAccountAddress ?? null;
|
|
12618
13153
|
const page = useLayoutDataStore((st) => st.page);
|
|
12619
13154
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
12620
13155
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
12621
13156
|
const open = page === "receive";
|
|
12622
|
-
const [qrCodeUrl, setQrCodeUrl] =
|
|
12623
|
-
const [copied, setCopied] =
|
|
12624
|
-
|
|
13157
|
+
const [qrCodeUrl, setQrCodeUrl] = useState20("");
|
|
13158
|
+
const [copied, setCopied] = useState20(false);
|
|
13159
|
+
const [fingerprintCopied, setFingerprintCopied] = useState20(false);
|
|
13160
|
+
const fingerprint = useMemo7(() => {
|
|
13161
|
+
if (!session?.ownerAddress) return null;
|
|
13162
|
+
try {
|
|
13163
|
+
return generateFingerprint(session.ownerAddress);
|
|
13164
|
+
} catch {
|
|
13165
|
+
return null;
|
|
13166
|
+
}
|
|
13167
|
+
}, [session?.ownerAddress]);
|
|
13168
|
+
useEffect28(() => {
|
|
12625
13169
|
if (open && address) {
|
|
12626
13170
|
QRCode.toDataURL(address, {
|
|
12627
13171
|
width: 200,
|
|
@@ -12634,7 +13178,7 @@ function ReceiveLumiaMenu() {
|
|
|
12634
13178
|
});
|
|
12635
13179
|
}
|
|
12636
13180
|
}, [open, address]);
|
|
12637
|
-
const handleCopy =
|
|
13181
|
+
const handleCopy = useCallback18(async () => {
|
|
12638
13182
|
if (!address) return;
|
|
12639
13183
|
try {
|
|
12640
13184
|
await navigator.clipboard.writeText(address);
|
|
@@ -12644,7 +13188,17 @@ function ReceiveLumiaMenu() {
|
|
|
12644
13188
|
console.error("Failed to copy address:", error);
|
|
12645
13189
|
}
|
|
12646
13190
|
}, [address]);
|
|
12647
|
-
|
|
13191
|
+
const handleCopyFingerprint = useCallback18(async () => {
|
|
13192
|
+
if (!fingerprint) return;
|
|
13193
|
+
try {
|
|
13194
|
+
await navigator.clipboard.writeText(fingerprint);
|
|
13195
|
+
setFingerprintCopied(true);
|
|
13196
|
+
setTimeout(() => setFingerprintCopied(false), 2e3);
|
|
13197
|
+
} catch (error) {
|
|
13198
|
+
console.error("Failed to copy fingerprint:", error);
|
|
13199
|
+
}
|
|
13200
|
+
}, [fingerprint]);
|
|
13201
|
+
return /* @__PURE__ */ jsxs59(
|
|
12648
13202
|
"div",
|
|
12649
13203
|
{
|
|
12650
13204
|
style: {
|
|
@@ -12653,26 +13207,44 @@ function ReceiveLumiaMenu() {
|
|
|
12653
13207
|
},
|
|
12654
13208
|
className: "list-scrollbar-y w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]",
|
|
12655
13209
|
children: [
|
|
12656
|
-
/* @__PURE__ */
|
|
12657
|
-
/* @__PURE__ */
|
|
12658
|
-
/* @__PURE__ */
|
|
13210
|
+
/* @__PURE__ */ jsxs59("div", { className: "w-full flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
13211
|
+
/* @__PURE__ */ jsx66(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx66(ArrowLeft13, { className: "h-4 w-4" }) }),
|
|
13212
|
+
/* @__PURE__ */ jsx66("span", { className: "text-xl font-semibold", children: "Receive LUMIA" })
|
|
13213
|
+
] }),
|
|
13214
|
+
/* @__PURE__ */ jsxs59(Highlight, { className: "text-center", type: "warning", children: [
|
|
13215
|
+
/* @__PURE__ */ jsx66("strong", { className: "block w-full", children: `Network: ${lumiaBeam.name}` }),
|
|
13216
|
+
/* @__PURE__ */ jsx66("span", { className: "block w-full", children: "Ensure sender is on the same network" })
|
|
12659
13217
|
] }),
|
|
12660
|
-
/* @__PURE__ */
|
|
12661
|
-
|
|
12662
|
-
/* @__PURE__ */
|
|
13218
|
+
/* @__PURE__ */ jsx66("div", { className: "flex items-center justify-center p-[var(--l-pass-pd)]", style: { minHeight: "216px" }, children: qrCodeUrl ? /* @__PURE__ */ jsx66("img", { src: qrCodeUrl, alt: "Wallet QR Code", className: "w-48 h-48" }) : /* @__PURE__ */ jsx66(Loader23, { className: "w-5 h-5 animate-spin text-[var(--l-pass-fg-muted)]" }) }),
|
|
13219
|
+
fingerprint && /* @__PURE__ */ jsxs59("div", { className: "flex items-center justify-center gap-2 p-3 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-secondary)]", children: [
|
|
13220
|
+
/* @__PURE__ */ jsx66(Shield4, { className: "w-4 h-4 text-[var(--l-pass-bg-success)]" }),
|
|
13221
|
+
/* @__PURE__ */ jsx66("span", { className: "text-sm text-[var(--l-pass-fg-muted)]", children: "Fingerprint:" }),
|
|
13222
|
+
/* @__PURE__ */ jsx66("span", { className: "font-mono text-sm font-semibold text-[var(--l-pass-fg)]", children: fingerprint }),
|
|
13223
|
+
/* @__PURE__ */ jsxs59("div", { className: "relative group", children: [
|
|
13224
|
+
/* @__PURE__ */ jsx66(Info2, { className: "w-3.5 h-3.5 text-[var(--l-pass-fg-muted)] cursor-help" }),
|
|
13225
|
+
/* @__PURE__ */ jsx66("div", { className: "absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 text-xs bg-[var(--l-pass-bg)] text-[var(--l-pass-fg)] rounded shadow-lg opacity-0 group-hover:opacity-100 transition-opacity whitespace-nowrap pointer-events-none z-10", children: "Share this to verify your identity" })
|
|
13226
|
+
] }),
|
|
13227
|
+
/* @__PURE__ */ jsx66(
|
|
13228
|
+
"button",
|
|
13229
|
+
{
|
|
13230
|
+
onClick: handleCopyFingerprint,
|
|
13231
|
+
className: "p-1 rounded hover:bg-[var(--l-pass-bg)] transition-colors",
|
|
13232
|
+
title: "Copy fingerprint",
|
|
13233
|
+
children: fingerprintCopied ? /* @__PURE__ */ jsx66(CheckCircle24, { className: "w-3.5 h-3.5 text-[var(--l-pass-bg-success)]" }) : /* @__PURE__ */ jsx66(Copy2, { className: "w-3.5 h-3.5 text-[var(--l-pass-fg-muted)]" })
|
|
13234
|
+
}
|
|
13235
|
+
)
|
|
12663
13236
|
] }),
|
|
12664
|
-
/* @__PURE__ */
|
|
12665
|
-
|
|
12666
|
-
/* @__PURE__ */
|
|
12667
|
-
|
|
12668
|
-
/* @__PURE__ */
|
|
12669
|
-
|
|
12670
|
-
|
|
12671
|
-
/* @__PURE__ */
|
|
12672
|
-
/* @__PURE__ */ jsx65("span", { children: "Copy Address" })
|
|
13237
|
+
/* @__PURE__ */ jsxs59(Highlight, { type: "info", children: [
|
|
13238
|
+
/* @__PURE__ */ jsx66("span", { className: "block w-full text-center font-mono text-[10px] break-all mb-2", children: address }),
|
|
13239
|
+
/* @__PURE__ */ jsx66(Button, { onClick: handleCopy, className: "w-full", size: "large", children: copied ? /* @__PURE__ */ jsxs59(Fragment26, { children: [
|
|
13240
|
+
/* @__PURE__ */ jsx66(CheckCircle24, { className: "h-4 w-4" }),
|
|
13241
|
+
/* @__PURE__ */ jsx66("span", { children: "Copied!" })
|
|
13242
|
+
] }) : /* @__PURE__ */ jsxs59(Fragment26, { children: [
|
|
13243
|
+
/* @__PURE__ */ jsx66(Copy2, { className: "h-4 w-4" }),
|
|
13244
|
+
/* @__PURE__ */ jsx66("span", { children: "Copy Address" })
|
|
12673
13245
|
] }) })
|
|
12674
13246
|
] }),
|
|
12675
|
-
/* @__PURE__ */
|
|
13247
|
+
/* @__PURE__ */ jsx66("div", { className: "text-center text-xs text-[var(--l-pass-fg-muted)]", children: /* @__PURE__ */ jsx66("span", { className: "block", children: "Share this address to receive LUMIA tokens." }) })
|
|
12676
13248
|
]
|
|
12677
13249
|
}
|
|
12678
13250
|
);
|
|
@@ -12680,16 +13252,16 @@ function ReceiveLumiaMenu() {
|
|
|
12680
13252
|
|
|
12681
13253
|
// src/internal/components/SettingsMenu/SettingsMenu.tsx
|
|
12682
13254
|
import { ArrowLeft as ArrowLeft14 } from "lucide-react";
|
|
12683
|
-
import { useEffect as
|
|
13255
|
+
import { useEffect as useEffect29 } from "react";
|
|
12684
13256
|
|
|
12685
13257
|
// src/internal/components/SettingsMenu/constants.ts
|
|
12686
13258
|
import { ArrowLeftRight, AtSign as AtSign2, DatabaseBackup, LockKeyhole, UsersRound } from "lucide-react";
|
|
12687
13259
|
|
|
12688
13260
|
// src/internal/assets/KycIcon.tsx
|
|
12689
|
-
import { jsx as
|
|
13261
|
+
import { jsx as jsx67 } from "react/jsx-runtime";
|
|
12690
13262
|
function KycIcon(props) {
|
|
12691
13263
|
const { width = "24", height = "24", ...rest } = props;
|
|
12692
|
-
return /* @__PURE__ */
|
|
13264
|
+
return /* @__PURE__ */ jsx67("svg", { ...rest, width, height, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx67(
|
|
12693
13265
|
"path",
|
|
12694
13266
|
{
|
|
12695
13267
|
d: "M12 18.5455C10.1727 18.5455 8.625 17.9114 7.35682 16.6432C6.08864 15.375 5.45455 13.8273 5.45455 12C5.45455 10.1727 6.08864 8.625 7.35682 7.35682C8.625 6.08864 10.1727 5.45455 12 5.45455C13.8273 5.45455 15.375 6.08864 16.6432 7.35682C17.9114 8.625 18.5455 10.1727 18.5455 12C18.5455 13.8273 17.9114 15.375 16.6432 16.6432C15.375 17.9114 13.8273 18.5455 12 18.5455ZM12 16.9091C13.3636 16.9091 14.5227 16.4318 15.4773 15.4773C16.4318 14.5227 16.9091 13.3636 16.9091 12C16.9091 11.7682 16.892 11.5398 16.858 11.3148C16.8239 11.0898 16.7727 10.8682 16.7045 10.65C16.5 10.6909 16.2955 10.7216 16.0909 10.742C15.8864 10.7625 15.6818 10.7727 15.4773 10.7727C14.6182 10.7727 13.8 10.6091 13.0227 10.2818C12.2455 9.95455 11.55 9.47727 10.9364 8.85C10.5545 9.62727 10.0295 10.3023 9.36136 10.875C8.69318 11.4477 7.93636 11.8636 7.09091 12.1227C7.13182 13.4591 7.62614 14.5909 8.57386 15.5182C9.52159 16.4455 10.6636 16.9091 12 16.9091ZM7.41818 10.2409C8.01818 9.92727 8.475 9.5625 8.78864 9.14659C9.10227 8.73068 9.40909 8.23636 9.70909 7.66364C9.19091 7.93636 8.73409 8.29432 8.33864 8.7375C7.94318 9.18068 7.63636 9.68182 7.41818 10.2409ZM9.95455 13.6364C9.72273 13.6364 9.52841 13.558 9.37159 13.4011C9.21477 13.2443 9.13636 13.05 9.13636 12.8182C9.13636 12.5864 9.21477 12.392 9.37159 12.2352C9.52841 12.0784 9.72273 12 9.95455 12C10.1864 12 10.3807 12.0784 10.5375 12.2352C10.6943 12.392 10.7727 12.5864 10.7727 12.8182C10.7727 13.05 10.6943 13.2443 10.5375 13.4011C10.3807 13.558 10.1864 13.6364 9.95455 13.6364ZM15.4773 9.13636H15.7227C15.8045 9.13636 15.8864 9.12955 15.9682 9.11591C15.5182 8.50227 14.9489 8.01136 14.2602 7.64318C13.5716 7.275 12.8182 7.09091 12 7.09091H11.7545C11.6727 7.09091 11.5977 7.09773 11.5295 7.11136C12.0614 7.725 12.6239 8.21591 13.217 8.58409C13.8102 8.95227 14.5636 9.13636 15.4773 9.13636ZM14.0455 13.6364C13.8136 13.6364 13.6193 13.558 13.4625 13.4011C13.3057 13.2443 13.2273 13.05 13.2273 12.8182C13.2273 12.5864 13.3057 12.392 13.4625 12.2352C13.6193 12.0784 13.8136 12 14.0455 12C14.2773 12 14.4716 12.0784 14.6284 12.2352C14.7852 12.392 14.8636 12.5864 14.8636 12.8182C14.8636 13.05 14.7852 13.2443 14.6284 13.4011C14.4716 13.558 14.2773 13.6364 14.0455 13.6364ZM3 7.09091V4.63636C3 4.18636 3.16023 3.80114 3.48068 3.48068C3.80114 3.16023 4.18636 3 4.63636 3H7.09091V4.63636H4.63636V7.09091H3ZM7.09091 21H4.63636C4.18636 21 3.80114 20.8398 3.48068 20.5193C3.16023 20.1989 3 19.8136 3 19.3636V16.9091H4.63636V19.3636H7.09091V21ZM16.9091 21V19.3636H19.3636V16.9091H21V19.3636C21 19.8136 20.8398 20.1989 20.5193 20.5193C20.1989 20.8398 19.8136 21 19.3636 21H16.9091ZM19.3636 7.09091V4.63636H16.9091V3H19.3636C19.8136 3 20.1989 3.16023 20.5193 3.48068C20.8398 3.80114 21 4.18636 21 4.63636V7.09091H19.3636Z",
|
|
@@ -12709,18 +13281,18 @@ var NAV_BUTTONS = [
|
|
|
12709
13281
|
];
|
|
12710
13282
|
|
|
12711
13283
|
// src/internal/components/SettingsMenu/SettingsMenu.tsx
|
|
12712
|
-
import { jsx as
|
|
13284
|
+
import { jsx as jsx68, jsxs as jsxs60 } from "react/jsx-runtime";
|
|
12713
13285
|
function SettingsMenu() {
|
|
12714
13286
|
const address = useLumiaPassportSession((st) => st.address);
|
|
12715
13287
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
12716
13288
|
const settingsNotifications = useLayoutDataStore((st) => st.settingsNotifications);
|
|
12717
13289
|
const setMainPageHeight = useLayoutDataStore((st) => st.setMainPageHeight);
|
|
12718
13290
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
12719
|
-
|
|
13291
|
+
useEffect29(() => setMainPageHeight(DEFAULT_SETTINGS_MENU_HEIGHT), [setMainPageHeight]);
|
|
12720
13292
|
useProvidersList();
|
|
12721
13293
|
const navItems = NAV_BUTTONS.map((el) => ({ ...el, onClick: () => setPage(el.id) }));
|
|
12722
13294
|
const highlightedKeys = settingsNotifications.map((n) => n.target);
|
|
12723
|
-
return /* @__PURE__ */
|
|
13295
|
+
return /* @__PURE__ */ jsxs60(
|
|
12724
13296
|
"div",
|
|
12725
13297
|
{
|
|
12726
13298
|
style: {
|
|
@@ -12729,11 +13301,11 @@ function SettingsMenu() {
|
|
|
12729
13301
|
},
|
|
12730
13302
|
className: "list-scrollbar-y w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]",
|
|
12731
13303
|
children: [
|
|
12732
|
-
/* @__PURE__ */
|
|
12733
|
-
/* @__PURE__ */
|
|
12734
|
-
/* @__PURE__ */
|
|
13304
|
+
/* @__PURE__ */ jsxs60("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
13305
|
+
/* @__PURE__ */ jsx68(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx68(ArrowLeft14, { className: "h-4 w-4" }) }),
|
|
13306
|
+
/* @__PURE__ */ jsx68("span", { className: "text-xl font-semibold", children: "Settings" })
|
|
12735
13307
|
] }),
|
|
12736
|
-
/* @__PURE__ */
|
|
13308
|
+
/* @__PURE__ */ jsx68("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: navItems.map(({ id, name, Icon: Icon2, onClick }) => /* @__PURE__ */ jsxs60(
|
|
12737
13309
|
Button,
|
|
12738
13310
|
{
|
|
12739
13311
|
variant: "outline",
|
|
@@ -12746,8 +13318,8 @@ function SettingsMenu() {
|
|
|
12746
13318
|
highlightedKeys.includes(id) && "animate-glow-warning"
|
|
12747
13319
|
),
|
|
12748
13320
|
children: [
|
|
12749
|
-
/* @__PURE__ */
|
|
12750
|
-
/* @__PURE__ */
|
|
13321
|
+
/* @__PURE__ */ jsx68(Icon2, { className: "w-4 h-4" }),
|
|
13322
|
+
/* @__PURE__ */ jsx68("span", { children: name })
|
|
12751
13323
|
]
|
|
12752
13324
|
},
|
|
12753
13325
|
id
|
|
@@ -12759,27 +13331,27 @@ function SettingsMenu() {
|
|
|
12759
13331
|
|
|
12760
13332
|
// src/internal/components/TermsOfService.tsx
|
|
12761
13333
|
import { ArrowLeft as ArrowLeft15 } from "lucide-react";
|
|
12762
|
-
import { jsx as
|
|
13334
|
+
import { jsx as jsx69, jsxs as jsxs61 } from "react/jsx-runtime";
|
|
12763
13335
|
function TermsOfService() {
|
|
12764
13336
|
const address = useLumiaPassportSession((st) => st.address);
|
|
12765
13337
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
12766
|
-
return /* @__PURE__ */
|
|
12767
|
-
/* @__PURE__ */
|
|
12768
|
-
/* @__PURE__ */
|
|
13338
|
+
return /* @__PURE__ */ jsxs61("div", { className: "w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]", children: [
|
|
13339
|
+
/* @__PURE__ */ jsxs61("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
13340
|
+
/* @__PURE__ */ jsx69(
|
|
12769
13341
|
Button,
|
|
12770
13342
|
{
|
|
12771
13343
|
variant: "ghost",
|
|
12772
13344
|
size: "icon",
|
|
12773
13345
|
title: "Back",
|
|
12774
13346
|
onClick: () => setPage(!!address ? "settings" /* SETTINGS */ : "auth" /* AUTH */),
|
|
12775
|
-
children: /* @__PURE__ */
|
|
13347
|
+
children: /* @__PURE__ */ jsx69(ArrowLeft15, { className: "h-4 w-4" })
|
|
12776
13348
|
}
|
|
12777
13349
|
),
|
|
12778
|
-
/* @__PURE__ */
|
|
13350
|
+
/* @__PURE__ */ jsx69("span", { className: "text-xl font-semibold", children: "Terms of Service" })
|
|
12779
13351
|
] }),
|
|
12780
|
-
/* @__PURE__ */
|
|
12781
|
-
/* @__PURE__ */
|
|
12782
|
-
/* @__PURE__ */
|
|
13352
|
+
/* @__PURE__ */ jsxs61(Highlight, { type: "warning", className: "text-center", children: [
|
|
13353
|
+
/* @__PURE__ */ jsx69("span", { className: "block text-xs", children: "By using Lumia Passport you agree to our terms." }),
|
|
13354
|
+
/* @__PURE__ */ jsx69("span", { className: "block text-xs", children: "To be updated..." })
|
|
12783
13355
|
] })
|
|
12784
13356
|
] });
|
|
12785
13357
|
}
|
|
@@ -12787,7 +13359,7 @@ function TermsOfService() {
|
|
|
12787
13359
|
// src/internal/components/TransactionsMenu/TransactionsMenu.tsx
|
|
12788
13360
|
import { useQuery as useQuery17, useQueryClient as useQueryClient18 } from "@tanstack/react-query";
|
|
12789
13361
|
import { ArrowLeft as ArrowLeft16, Loader as Loader24, RefreshCw as RefreshCw3, XCircle as XCircle2 } from "lucide-react";
|
|
12790
|
-
import { useCallback as
|
|
13362
|
+
import { useCallback as useCallback19, useState as useState21 } from "react";
|
|
12791
13363
|
|
|
12792
13364
|
// src/internal/components/TransactionsMenu/api.ts
|
|
12793
13365
|
init_base();
|
|
@@ -13043,7 +13615,7 @@ async function getTransactionsListQuery(address) {
|
|
|
13043
13615
|
});
|
|
13044
13616
|
});
|
|
13045
13617
|
tokenTransfersData.forEach((transfer, index) => {
|
|
13046
|
-
const rawValue = transfer.value ?? "0";
|
|
13618
|
+
const rawValue = transfer.total?.value ?? transfer.value ?? "0";
|
|
13047
13619
|
const amount = toBigInt(rawValue);
|
|
13048
13620
|
if (amount === 0n) {
|
|
13049
13621
|
return;
|
|
@@ -13059,7 +13631,7 @@ async function getTransactionsListQuery(address) {
|
|
|
13059
13631
|
}
|
|
13060
13632
|
const tsInput = transfer.timestamp;
|
|
13061
13633
|
const timestampMs = typeof tsInput === "number" ? tsInput > 1e12 ? tsInput : tsInput * 1e3 : tsInput ? new Date(tsInput).getTime() : now;
|
|
13062
|
-
const decimalsRaw = transfer.token?.decimals;
|
|
13634
|
+
const decimalsRaw = transfer.total?.decimals ?? transfer.token?.decimals;
|
|
13063
13635
|
const decimals = typeof decimalsRaw === "string" ? parseInt(decimalsRaw, 10) : typeof decimalsRaw === "number" ? decimalsRaw : 18;
|
|
13064
13636
|
const assetSymbol = transfer.token?.symbol || "Token";
|
|
13065
13637
|
const tokenItem = {
|
|
@@ -13158,22 +13730,22 @@ var formatTimestamp = (timestampMs) => {
|
|
|
13158
13730
|
};
|
|
13159
13731
|
|
|
13160
13732
|
// src/internal/components/TransactionsMenu/TransactionsGroup.tsx
|
|
13161
|
-
import { Fragment as
|
|
13733
|
+
import { Fragment as Fragment27, jsx as jsx70, jsxs as jsxs62 } from "react/jsx-runtime";
|
|
13162
13734
|
function InternalTransaction({ internal, assetSymbol, assetDecimals }) {
|
|
13163
13735
|
const internalSymbol = internal.assetSymbol || assetSymbol;
|
|
13164
13736
|
const internalDecimals = internal.decimals ?? assetDecimals;
|
|
13165
|
-
return /* @__PURE__ */
|
|
13166
|
-
/* @__PURE__ */
|
|
13167
|
-
/* @__PURE__ */
|
|
13168
|
-
/* @__PURE__ */
|
|
13737
|
+
return /* @__PURE__ */ jsxs62("div", { className: "border-t border-dashed border-[var(--l-pass-bd)]", children: [
|
|
13738
|
+
/* @__PURE__ */ jsxs62("div", { className: "flex gap-2 items-center justify-between", children: [
|
|
13739
|
+
/* @__PURE__ */ jsx70("span", { className: "text-[var(--l-pass-fg-muted)]", children: internal.method || "CALL" }),
|
|
13740
|
+
/* @__PURE__ */ jsxs62("span", { children: [
|
|
13169
13741
|
formatValue2(internal.value, internalDecimals),
|
|
13170
13742
|
" ",
|
|
13171
13743
|
internalSymbol
|
|
13172
13744
|
] })
|
|
13173
13745
|
] }),
|
|
13174
|
-
/* @__PURE__ */
|
|
13175
|
-
/* @__PURE__ */
|
|
13176
|
-
/* @__PURE__ */
|
|
13746
|
+
/* @__PURE__ */ jsxs62("div", { className: "flex gap-2 items-center justify-between", children: [
|
|
13747
|
+
/* @__PURE__ */ jsx70("span", { children: internal.direction === "in" ? "From" : "To" }),
|
|
13748
|
+
/* @__PURE__ */ jsx70("span", { className: "font-mono", children: internal.counterpartyName || formatAddress2(internal.counterparty) })
|
|
13177
13749
|
] })
|
|
13178
13750
|
] });
|
|
13179
13751
|
}
|
|
@@ -13184,7 +13756,7 @@ function TransactionsGroup(props) {
|
|
|
13184
13756
|
const assetSymbol = parent.assetSymbol || "LUMIA";
|
|
13185
13757
|
const assetDecimals = parent.decimals ?? 18;
|
|
13186
13758
|
const internalsToRender = group.internals.filter((internal) => parseValue(internal.value) !== 0n);
|
|
13187
|
-
return /* @__PURE__ */
|
|
13759
|
+
return /* @__PURE__ */ jsxs62(
|
|
13188
13760
|
"div",
|
|
13189
13761
|
{
|
|
13190
13762
|
onClick: () => openInExplorer2(parent.parentHash),
|
|
@@ -13194,28 +13766,28 @@ function TransactionsGroup(props) {
|
|
|
13194
13766
|
"bg-transparent hover:bg-[var(--l-pass-secondary-h)] active:bg-[var(--l-pass-secondary-a)]"
|
|
13195
13767
|
),
|
|
13196
13768
|
children: [
|
|
13197
|
-
/* @__PURE__ */
|
|
13198
|
-
/* @__PURE__ */
|
|
13199
|
-
parent.direction === "in" ? /* @__PURE__ */
|
|
13200
|
-
/* @__PURE__ */
|
|
13201
|
-
parent.status === "ok" ? /* @__PURE__ */
|
|
13769
|
+
/* @__PURE__ */ jsxs62("div", { className: "flex items-center justify-between gap-[var(--l-pass-gap)]", children: [
|
|
13770
|
+
/* @__PURE__ */ jsxs62("div", { className: "flex items-center gap-1 flex-0 w-fit", children: [
|
|
13771
|
+
parent.direction === "in" ? /* @__PURE__ */ jsx70(ChevronLeft2, { className: "w-4 h-4" }) : /* @__PURE__ */ jsx70(ChevronRight5, { className: "w-4 h-4" }),
|
|
13772
|
+
/* @__PURE__ */ jsx70("span", { className: "text-[10px]", children: isIncoming ? "RECEIVED" : "SENT" }),
|
|
13773
|
+
parent.status === "ok" ? /* @__PURE__ */ jsx70(PositiveIcon, {}) : /* @__PURE__ */ jsx70(NegativeIcon, {})
|
|
13202
13774
|
] }),
|
|
13203
|
-
/* @__PURE__ */
|
|
13775
|
+
/* @__PURE__ */ jsx70("span", { className: "block flex-0 font-mono text-[10px] text-[var(--l-pass-fg-muted)]", children: formatTimestamp(group.timestampMs) })
|
|
13204
13776
|
] }),
|
|
13205
|
-
/* @__PURE__ */
|
|
13206
|
-
/* @__PURE__ */
|
|
13207
|
-
/* @__PURE__ */
|
|
13777
|
+
/* @__PURE__ */ jsxs62("div", { className: "flex items-center justify-between gap-[var(--l-pass-gap)]", children: [
|
|
13778
|
+
/* @__PURE__ */ jsxs62("div", { className: "flex flex-col gap-0", children: [
|
|
13779
|
+
/* @__PURE__ */ jsxs62("span", { className: "font-bold", children: [
|
|
13208
13780
|
formatValue2(parent.value, assetDecimals),
|
|
13209
13781
|
" ",
|
|
13210
13782
|
assetSymbol
|
|
13211
13783
|
] }),
|
|
13212
|
-
/* @__PURE__ */
|
|
13784
|
+
/* @__PURE__ */ jsxs62("span", { className: "text-[10px] font-mono text-[var(--l-pass-fg-muted)]", children: [
|
|
13213
13785
|
isIncoming ? "From: " : "To: ",
|
|
13214
13786
|
parent.counterpartyName || formatAddress2(parent.counterparty)
|
|
13215
13787
|
] })
|
|
13216
13788
|
] }),
|
|
13217
|
-
/* @__PURE__ */
|
|
13218
|
-
/* @__PURE__ */
|
|
13789
|
+
/* @__PURE__ */ jsxs62("div", { className: "flex items-center gap-0", children: [
|
|
13790
|
+
/* @__PURE__ */ jsx70(
|
|
13219
13791
|
Button,
|
|
13220
13792
|
{
|
|
13221
13793
|
variant: "ghost",
|
|
@@ -13224,10 +13796,10 @@ function TransactionsGroup(props) {
|
|
|
13224
13796
|
onClick: (e) => {
|
|
13225
13797
|
e.stopPropagation();
|
|
13226
13798
|
},
|
|
13227
|
-
children: /* @__PURE__ */
|
|
13799
|
+
children: /* @__PURE__ */ jsx70(Copy3, { className: "w-4 h-4" })
|
|
13228
13800
|
}
|
|
13229
13801
|
),
|
|
13230
|
-
/* @__PURE__ */
|
|
13802
|
+
/* @__PURE__ */ jsx70(
|
|
13231
13803
|
Button,
|
|
13232
13804
|
{
|
|
13233
13805
|
variant: "ghost",
|
|
@@ -13236,24 +13808,24 @@ function TransactionsGroup(props) {
|
|
|
13236
13808
|
onClick: (e) => {
|
|
13237
13809
|
e.stopPropagation();
|
|
13238
13810
|
},
|
|
13239
|
-
children: /* @__PURE__ */
|
|
13811
|
+
children: /* @__PURE__ */ jsx70(LumiaIcon, { className: "w-4 h-4" })
|
|
13240
13812
|
}
|
|
13241
13813
|
)
|
|
13242
13814
|
] })
|
|
13243
13815
|
] }),
|
|
13244
|
-
internalsToRender.length > 0 && /* @__PURE__ */
|
|
13245
|
-
/* @__PURE__ */
|
|
13246
|
-
/* @__PURE__ */
|
|
13247
|
-
/* @__PURE__ */
|
|
13248
|
-
/* @__PURE__ */
|
|
13816
|
+
internalsToRender.length > 0 && /* @__PURE__ */ jsxs62(Fragment27, { children: [
|
|
13817
|
+
/* @__PURE__ */ jsxs62("div", { className: "w-full flex items-center", children: [
|
|
13818
|
+
/* @__PURE__ */ jsx70("div", { style: { borderTop: "1px solid var(--l-pass-bd)" }, className: "flex-1" }),
|
|
13819
|
+
/* @__PURE__ */ jsx70("div", { className: "flex-none font-bold px-2 text-xs leading-4 text-[var(--l-pass-fg-muted)]", children: "Internals" }),
|
|
13820
|
+
/* @__PURE__ */ jsx70("div", { style: { borderTop: "1px solid var(--l-pass-bd)" }, className: "flex-1" })
|
|
13249
13821
|
] }),
|
|
13250
|
-
/* @__PURE__ */
|
|
13822
|
+
/* @__PURE__ */ jsxs62(
|
|
13251
13823
|
"div",
|
|
13252
13824
|
{
|
|
13253
13825
|
className: "w-full rounded-[var(--l-pass-el-bdrs)] border border-dashed border-[var(--l-pass-bd)]",
|
|
13254
13826
|
onClick: (event) => event.stopPropagation(),
|
|
13255
13827
|
children: [
|
|
13256
|
-
/* @__PURE__ */
|
|
13828
|
+
/* @__PURE__ */ jsxs62(
|
|
13257
13829
|
Button,
|
|
13258
13830
|
{
|
|
13259
13831
|
variant: "ghost",
|
|
@@ -13261,16 +13833,16 @@ function TransactionsGroup(props) {
|
|
|
13261
13833
|
className: "w-full justify-between",
|
|
13262
13834
|
onClick: () => onToggleExpanded(group.id),
|
|
13263
13835
|
children: [
|
|
13264
|
-
/* @__PURE__ */
|
|
13836
|
+
/* @__PURE__ */ jsxs62("span", { children: [
|
|
13265
13837
|
"View internal calls (",
|
|
13266
13838
|
internalsToRender.length,
|
|
13267
13839
|
")"
|
|
13268
13840
|
] }),
|
|
13269
|
-
/* @__PURE__ */
|
|
13841
|
+
/* @__PURE__ */ jsx70("span", { children: expanded ? "Hide" : "Show" })
|
|
13270
13842
|
]
|
|
13271
13843
|
}
|
|
13272
13844
|
),
|
|
13273
|
-
expanded && /* @__PURE__ */
|
|
13845
|
+
expanded && /* @__PURE__ */ jsx70("div", { className: "px-2 pb-2 flex flex-col gap-2 text-xs", children: internalsToRender.map((internal) => /* @__PURE__ */ jsx70(
|
|
13274
13846
|
InternalTransaction,
|
|
13275
13847
|
{
|
|
13276
13848
|
internal,
|
|
@@ -13289,14 +13861,14 @@ function TransactionsGroup(props) {
|
|
|
13289
13861
|
}
|
|
13290
13862
|
|
|
13291
13863
|
// src/internal/components/TransactionsMenu/TransactionsMenu.tsx
|
|
13292
|
-
import { jsx as
|
|
13864
|
+
import { jsx as jsx71, jsxs as jsxs63 } from "react/jsx-runtime";
|
|
13293
13865
|
function TransactionsMenu() {
|
|
13294
13866
|
const qc = useQueryClient18();
|
|
13295
13867
|
const address = useLumiaPassportSession((st) => st.address);
|
|
13296
13868
|
const page = useLayoutDataStore((st) => st.page);
|
|
13297
13869
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
13298
13870
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
13299
|
-
const [expandedGroups, setExpandedGroups] =
|
|
13871
|
+
const [expandedGroups, setExpandedGroups] = useState21({});
|
|
13300
13872
|
const {
|
|
13301
13873
|
data: txHistoryGroups = [],
|
|
13302
13874
|
isLoading: isTxHistoryLoading,
|
|
@@ -13308,12 +13880,12 @@ function TransactionsMenu() {
|
|
|
13308
13880
|
queryKey: [TRANSACTIONS_HISTORY_QUERY_KEY, address],
|
|
13309
13881
|
queryFn: () => getTransactionsListQuery(address)
|
|
13310
13882
|
});
|
|
13311
|
-
const refreshTxHistory =
|
|
13883
|
+
const refreshTxHistory = useCallback19(
|
|
13312
13884
|
() => qc.invalidateQueries({ queryKey: [TRANSACTIONS_HISTORY_QUERY_KEY, address] }),
|
|
13313
13885
|
[qc, address]
|
|
13314
13886
|
);
|
|
13315
13887
|
const txHistoryResolvedError = txHistoryError ? txHistoryError instanceof Error ? txHistoryError.message : "Failed to load transactions" : null;
|
|
13316
|
-
return /* @__PURE__ */
|
|
13888
|
+
return /* @__PURE__ */ jsx71(
|
|
13317
13889
|
"div",
|
|
13318
13890
|
{
|
|
13319
13891
|
style: {
|
|
@@ -13321,11 +13893,11 @@ function TransactionsMenu() {
|
|
|
13321
13893
|
"--l-pass-list-scrollbar-pd-r": "var(--l-pass-pd)"
|
|
13322
13894
|
},
|
|
13323
13895
|
className: "list-scrollbar-y w-full p-[var(--l-pass-pd)]",
|
|
13324
|
-
children: /* @__PURE__ */
|
|
13325
|
-
/* @__PURE__ */
|
|
13326
|
-
/* @__PURE__ */
|
|
13327
|
-
/* @__PURE__ */
|
|
13328
|
-
/* @__PURE__ */
|
|
13896
|
+
children: /* @__PURE__ */ jsxs63(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: [
|
|
13897
|
+
/* @__PURE__ */ jsxs63("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
13898
|
+
/* @__PURE__ */ jsx71(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("settings" /* SETTINGS */), children: /* @__PURE__ */ jsx71(ArrowLeft16, { className: "h-4 w-4" }) }),
|
|
13899
|
+
/* @__PURE__ */ jsx71("span", { className: "text-xl font-semibold", children: "Transaction History" }),
|
|
13900
|
+
/* @__PURE__ */ jsx71(
|
|
13329
13901
|
Button,
|
|
13330
13902
|
{
|
|
13331
13903
|
variant: "ghost",
|
|
@@ -13333,17 +13905,17 @@ function TransactionsMenu() {
|
|
|
13333
13905
|
onClick: refreshTxHistory,
|
|
13334
13906
|
disabled: isTxHistoryFetching,
|
|
13335
13907
|
title: "Refresh transactions",
|
|
13336
|
-
children: isTxHistoryFetching ? /* @__PURE__ */
|
|
13908
|
+
children: isTxHistoryFetching ? /* @__PURE__ */ jsx71(Loader24, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx71(RefreshCw3, { className: "h-4 w-4" })
|
|
13337
13909
|
}
|
|
13338
13910
|
)
|
|
13339
13911
|
] }),
|
|
13340
|
-
isTxHistoryLoading && /* @__PURE__ */
|
|
13341
|
-
!isTxHistoryLoading && txHistoryResolvedError && /* @__PURE__ */
|
|
13342
|
-
/* @__PURE__ */
|
|
13343
|
-
/* @__PURE__ */
|
|
13912
|
+
isTxHistoryLoading && /* @__PURE__ */ jsx71("div", { className: "flex items-center justify-center p-8", children: /* @__PURE__ */ jsx71(Loader24, { className: "h-5 w-5 animate-spin" }) }),
|
|
13913
|
+
!isTxHistoryLoading && txHistoryResolvedError && /* @__PURE__ */ jsxs63(Highlight, { type: "error", className: "flex gap-[var(--l-pass-gap)]", children: [
|
|
13914
|
+
/* @__PURE__ */ jsx71(XCircle2, { className: "w-4 h-4 flex-none" }),
|
|
13915
|
+
/* @__PURE__ */ jsx71("span", { className: "block w-full flex-1 text-center text-xs", children: txHistoryResolvedError })
|
|
13344
13916
|
] }),
|
|
13345
|
-
!isTxHistoryLoading && !txHistoryResolvedError && txHistoryGroups.length === 0 && /* @__PURE__ */
|
|
13346
|
-
!isTxHistoryLoading && !txHistoryResolvedError && txHistoryGroups.length > 0 && /* @__PURE__ */
|
|
13917
|
+
!isTxHistoryLoading && !txHistoryResolvedError && txHistoryGroups.length === 0 && /* @__PURE__ */ jsx71(Highlight, { type: "warning", children: /* @__PURE__ */ jsx71("span", { children: "No transactions found." }) }),
|
|
13918
|
+
!isTxHistoryLoading && !txHistoryResolvedError && txHistoryGroups.length > 0 && /* @__PURE__ */ jsx71("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: txHistoryGroups.map((group) => /* @__PURE__ */ jsx71(
|
|
13347
13919
|
TransactionsGroup,
|
|
13348
13920
|
{
|
|
13349
13921
|
group,
|
|
@@ -13458,7 +14030,7 @@ var PAGE_MAP = {
|
|
|
13458
14030
|
};
|
|
13459
14031
|
|
|
13460
14032
|
// src/internal/hooks/usePageMapper.tsx
|
|
13461
|
-
import { jsx as
|
|
14033
|
+
import { jsx as jsx72 } from "react/jsx-runtime";
|
|
13462
14034
|
var CLEAR_DIALOG_TIMEOUT = MAIN_DIALOG_ANIMATION_SPEED + 5;
|
|
13463
14035
|
function usePageMapper() {
|
|
13464
14036
|
const page = useLayoutDataStore((st) => st.page);
|
|
@@ -13470,7 +14042,7 @@ function usePageMapper() {
|
|
|
13470
14042
|
setIsDialogOpen,
|
|
13471
14043
|
setIsDialogClosing
|
|
13472
14044
|
} = useLayoutStore();
|
|
13473
|
-
const closeDialog =
|
|
14045
|
+
const closeDialog = useCallback20(() => {
|
|
13474
14046
|
setIsDialogClosing(true);
|
|
13475
14047
|
setTimeout(() => {
|
|
13476
14048
|
setDialogContent(null);
|
|
@@ -13481,17 +14053,17 @@ function usePageMapper() {
|
|
|
13481
14053
|
setIsDialogOpen(false);
|
|
13482
14054
|
}, CLEAR_DIALOG_TIMEOUT);
|
|
13483
14055
|
}, [setDialogContent, setDialogDescription, setDialogTitle, setIsDialogForced, setIsDialogOpen, setIsDialogClosing]);
|
|
13484
|
-
const openDialog =
|
|
14056
|
+
const openDialog = useCallback20(
|
|
13485
14057
|
(pageItem) => {
|
|
13486
14058
|
const PageContentComponent = pageItem.component;
|
|
13487
14059
|
setDialogTitle(pageItem.title);
|
|
13488
14060
|
setDialogDescription(pageItem.description);
|
|
13489
|
-
setDialogContent(/* @__PURE__ */
|
|
14061
|
+
setDialogContent(/* @__PURE__ */ jsx72(PageContentComponent, {}));
|
|
13490
14062
|
setIsDialogOpen(true);
|
|
13491
14063
|
},
|
|
13492
14064
|
[setDialogContent, setDialogDescription, setDialogTitle, setIsDialogOpen]
|
|
13493
14065
|
);
|
|
13494
|
-
|
|
14066
|
+
useEffect30(() => {
|
|
13495
14067
|
if (page === null) return closeDialog();
|
|
13496
14068
|
const pageItem = PAGE_MAP[page];
|
|
13497
14069
|
if (!pageItem) {
|
|
@@ -13505,7 +14077,7 @@ function usePageMapper() {
|
|
|
13505
14077
|
|
|
13506
14078
|
// src/internal/hooks/useSettingsNotifications.ts
|
|
13507
14079
|
init_auth();
|
|
13508
|
-
import { useEffect as
|
|
14080
|
+
import { useEffect as useEffect31 } from "react";
|
|
13509
14081
|
var EMAIL_NOT_CONNECTED_NOTIFICATION = {
|
|
13510
14082
|
id: "email-not-connected",
|
|
13511
14083
|
target: "manage-wallet" /* MANAGE_WALLET */,
|
|
@@ -13515,7 +14087,7 @@ function useSettingsNotifications() {
|
|
|
13515
14087
|
const setSettingsNotifications = useLayoutDataStore((st) => st.setSettingsNotifications);
|
|
13516
14088
|
const providers = jwtTokenManager2.getProviders();
|
|
13517
14089
|
const hasEmail = providers.includes("email");
|
|
13518
|
-
|
|
14090
|
+
useEffect31(() => {
|
|
13519
14091
|
setSettingsNotifications({
|
|
13520
14092
|
...EMAIL_NOT_CONNECTED_NOTIFICATION,
|
|
13521
14093
|
status: hasEmail ? "resolved" : "active"
|
|
@@ -13524,7 +14096,7 @@ function useSettingsNotifications() {
|
|
|
13524
14096
|
}
|
|
13525
14097
|
|
|
13526
14098
|
// src/internal/hooks/useWalletStatus.ts
|
|
13527
|
-
import { useEffect as
|
|
14099
|
+
import { useEffect as useEffect32 } from "react";
|
|
13528
14100
|
init_auth();
|
|
13529
14101
|
function useWalletStatus() {
|
|
13530
14102
|
const isIframeReady = useLumiaPassportSession((st) => st.isIframeReady);
|
|
@@ -13534,7 +14106,7 @@ function useWalletStatus() {
|
|
|
13534
14106
|
config: { current: config },
|
|
13535
14107
|
callbacks
|
|
13536
14108
|
} = useLumiaPassportConfig();
|
|
13537
|
-
|
|
14109
|
+
useEffect32(() => {
|
|
13538
14110
|
if (!isIframeReady || !config.projectId || !callbacks?.onWalletReady) return;
|
|
13539
14111
|
const userId = jwtTokenManager2.getUserId();
|
|
13540
14112
|
const hasKeyshare = jwtTokenManager2.getHasKeyshare();
|
|
@@ -13554,7 +14126,7 @@ function useWalletStatus() {
|
|
|
13554
14126
|
}
|
|
13555
14127
|
|
|
13556
14128
|
// src/internal/components/Dialog/LumiaPassportDialog.tsx
|
|
13557
|
-
import { jsx as
|
|
14129
|
+
import { jsx as jsx73, jsxs as jsxs64 } from "react/jsx-runtime";
|
|
13558
14130
|
function LumiaPassportDialog() {
|
|
13559
14131
|
const config = useLumiaPassportConfig().config;
|
|
13560
14132
|
const className = config.current?.ui?.dialogClassName;
|
|
@@ -13564,7 +14136,7 @@ function LumiaPassportDialog() {
|
|
|
13564
14136
|
const mainPageHeight = useLayoutDataStore((st) => st.mainPageHeight);
|
|
13565
14137
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
13566
14138
|
const { colorMode, isDialogOpen, dialogTitle, dialogDescription, dialogContent, isDialogForced, setIsSettings } = useLayoutStore();
|
|
13567
|
-
|
|
14139
|
+
useEffect33(() => setIsSettings(!!session), [session, setIsSettings]);
|
|
13568
14140
|
usePageMapper();
|
|
13569
14141
|
useAutoConnect();
|
|
13570
14142
|
useBackupStatusChanges();
|
|
@@ -13573,7 +14145,7 @@ function LumiaPassportDialog() {
|
|
|
13573
14145
|
useListenIframeAuthEvents();
|
|
13574
14146
|
useWalletStatus();
|
|
13575
14147
|
const isHeaderHidden = !session || page === "keysare-backup" /* KEYSARE_BACKUP */ && !hasServerVault;
|
|
13576
|
-
return /* @__PURE__ */
|
|
14148
|
+
return /* @__PURE__ */ jsx73(
|
|
13577
14149
|
Dialog,
|
|
13578
14150
|
{
|
|
13579
14151
|
open: isDialogOpen,
|
|
@@ -13581,11 +14153,11 @@ function LumiaPassportDialog() {
|
|
|
13581
14153
|
if (isDialogForced) return;
|
|
13582
14154
|
if (!open) setPage(null);
|
|
13583
14155
|
},
|
|
13584
|
-
children: /* @__PURE__ */
|
|
13585
|
-
/* @__PURE__ */
|
|
13586
|
-
/* @__PURE__ */
|
|
13587
|
-
!isHeaderHidden && /* @__PURE__ */
|
|
13588
|
-
/* @__PURE__ */
|
|
14156
|
+
children: /* @__PURE__ */ jsxs64(DialogContent, { colorMode, className, children: [
|
|
14157
|
+
/* @__PURE__ */ jsx73(VisuallyHidden, { children: /* @__PURE__ */ jsx73(DialogTitle, { children: dialogTitle }) }),
|
|
14158
|
+
/* @__PURE__ */ jsx73(DialogDescription, { className: "sr-only", children: dialogDescription }),
|
|
14159
|
+
!isHeaderHidden && /* @__PURE__ */ jsx73(Header, {}),
|
|
14160
|
+
/* @__PURE__ */ jsx73(AnimatePresence3, { mode: "wait", initial: false, children: /* @__PURE__ */ jsx73(
|
|
13589
14161
|
motion3.div,
|
|
13590
14162
|
{
|
|
13591
14163
|
initial: { opacity: 0, height: mainPageHeight },
|
|
@@ -13597,30 +14169,30 @@ function LumiaPassportDialog() {
|
|
|
13597
14169
|
},
|
|
13598
14170
|
page || "empty"
|
|
13599
14171
|
) }),
|
|
13600
|
-
/* @__PURE__ */
|
|
14172
|
+
/* @__PURE__ */ jsx73(Footer, {})
|
|
13601
14173
|
] })
|
|
13602
14174
|
}
|
|
13603
14175
|
);
|
|
13604
14176
|
}
|
|
13605
14177
|
|
|
13606
14178
|
// src/internal/components/TssManager.tsx
|
|
13607
|
-
import
|
|
14179
|
+
import React7, { useCallback as useCallback21 } from "react";
|
|
13608
14180
|
init_auth();
|
|
13609
14181
|
init_clients();
|
|
13610
|
-
var TssManagerWithRef =
|
|
14182
|
+
var TssManagerWithRef = React7.forwardRef((props, ref) => {
|
|
13611
14183
|
const { mpcPin } = props;
|
|
13612
14184
|
const usePaymaster = useLumiaPassportSession((st) => st.usePaymaster);
|
|
13613
14185
|
const setStatus = useLumiaPassportSession((st) => st.setStatus);
|
|
13614
14186
|
const setSession = useLumiaPassportSession((st) => st.setSession);
|
|
13615
14187
|
const setAddress = useLumiaPassportSession((st) => st.setAddress);
|
|
13616
|
-
const onSessionCreated =
|
|
14188
|
+
const onSessionCreated = useCallback21(
|
|
13617
14189
|
(session, address) => {
|
|
13618
14190
|
setSession(session);
|
|
13619
14191
|
setAddress(address);
|
|
13620
14192
|
},
|
|
13621
14193
|
[setSession, setAddress]
|
|
13622
14194
|
);
|
|
13623
|
-
const createSessionWithKeyshare =
|
|
14195
|
+
const createSessionWithKeyshare = React7.useCallback(
|
|
13624
14196
|
async (userId, hasServerKeyshare, isNewUser) => {
|
|
13625
14197
|
setStatus("checking key management setup...");
|
|
13626
14198
|
await ensureKeyshare(userId, hasServerKeyshare, setStatus, isNewUser);
|
|
@@ -13641,7 +14213,7 @@ var TssManagerWithRef = React8.forwardRef((props, ref) => {
|
|
|
13641
14213
|
},
|
|
13642
14214
|
[setStatus, usePaymaster, mpcPin]
|
|
13643
14215
|
);
|
|
13644
|
-
|
|
14216
|
+
React7.useImperativeHandle(ref, () => ({ createSessionWithKeyshare }), [createSessionWithKeyshare]);
|
|
13645
14217
|
return null;
|
|
13646
14218
|
});
|
|
13647
14219
|
|
|
@@ -13649,7 +14221,7 @@ var TssManagerWithRef = React8.forwardRef((props, ref) => {
|
|
|
13649
14221
|
init_wallet();
|
|
13650
14222
|
import { useConnectModal } from "@rainbow-me/rainbowkit";
|
|
13651
14223
|
import { useMutation as useMutation15, useQueryClient as useQueryClient19 } from "@tanstack/react-query";
|
|
13652
|
-
import
|
|
14224
|
+
import React8, { useCallback as useCallback22, useEffect as useEffect34 } from "react";
|
|
13653
14225
|
import { useAccount, useDisconnect, useSignMessage } from "wagmi";
|
|
13654
14226
|
function WalletConnectHandler() {
|
|
13655
14227
|
const qc = useQueryClient19();
|
|
@@ -13666,7 +14238,7 @@ function WalletConnectHandler() {
|
|
|
13666
14238
|
const setManageWalletLinkError = useManageWalletStore((st) => st.setLinkError);
|
|
13667
14239
|
const setLinkIsLoading = useManageWalletStore((st) => st.setLinkIsLoading);
|
|
13668
14240
|
const setProviderType = useManageWalletStore((st) => st.setProviderType);
|
|
13669
|
-
const onLinkingComplete =
|
|
14241
|
+
const onLinkingComplete = useCallback22(
|
|
13670
14242
|
async (success) => {
|
|
13671
14243
|
setIsWalletLinking(false);
|
|
13672
14244
|
if (!success && !passportWalletAddress) {
|
|
@@ -13693,8 +14265,8 @@ function WalletConnectHandler() {
|
|
|
13693
14265
|
},
|
|
13694
14266
|
[qc, passportWalletAddress, callbacks, setProviderType, setPage, setIsWalletLinking]
|
|
13695
14267
|
);
|
|
13696
|
-
const [hasStartedLinking, setHasStartedLinking] =
|
|
13697
|
-
|
|
14268
|
+
const [hasStartedLinking, setHasStartedLinking] = React8.useState(false);
|
|
14269
|
+
useEffect34(() => {
|
|
13698
14270
|
if (isWalletLinking && !hasStartedLinking) {
|
|
13699
14271
|
setHasStartedLinking(true);
|
|
13700
14272
|
setProviderType(null);
|
|
@@ -13714,7 +14286,7 @@ function WalletConnectHandler() {
|
|
|
13714
14286
|
if (isConnected) disconnect();
|
|
13715
14287
|
}
|
|
13716
14288
|
}, [isWalletLinking, hasStartedLinking, isConnected, openConnectModal, disconnect, setPage, setProviderType]);
|
|
13717
|
-
|
|
14289
|
+
useEffect34(() => {
|
|
13718
14290
|
if (hasStartedLinking && !connectModalOpen && !isConnected && isWalletLinking) {
|
|
13719
14291
|
console.log("[WalletConnectHandler] Modal closed without connecting");
|
|
13720
14292
|
onLinkingComplete(false);
|
|
@@ -13790,7 +14362,7 @@ function WalletConnectHandler() {
|
|
|
13790
14362
|
setPage(passportWalletAddress ? "manage-wallet" /* MANAGE_WALLET */ : "auth" /* AUTH */);
|
|
13791
14363
|
}
|
|
13792
14364
|
});
|
|
13793
|
-
|
|
14365
|
+
useEffect34(() => {
|
|
13794
14366
|
if (!!chain?.id && isConnected && walletAddress && isWalletLinking && hasStartedLinking) {
|
|
13795
14367
|
console.log("[WalletConnectHandler] handleWalletSign triggered");
|
|
13796
14368
|
handleWalletSign({ chainId: chain.id, signingWalletAddress: walletAddress });
|
|
@@ -13800,7 +14372,7 @@ function WalletConnectHandler() {
|
|
|
13800
14372
|
}
|
|
13801
14373
|
|
|
13802
14374
|
// src/context/LumiaPassportSessionContext.tsx
|
|
13803
|
-
import { jsx as
|
|
14375
|
+
import { jsx as jsx74, jsxs as jsxs65 } from "react/jsx-runtime";
|
|
13804
14376
|
var useLumiaPassportSession = create6((set) => ({
|
|
13805
14377
|
isLoading: false,
|
|
13806
14378
|
usePaymaster: true,
|
|
@@ -13826,17 +14398,17 @@ var useLumiaPassportSession = create6((set) => ({
|
|
|
13826
14398
|
}));
|
|
13827
14399
|
function LumiaPassportSessionProvider({ children }) {
|
|
13828
14400
|
const config = useLumiaPassportConfig().config;
|
|
13829
|
-
return /* @__PURE__ */
|
|
14401
|
+
return /* @__PURE__ */ jsxs65(Fragment28, { children: [
|
|
13830
14402
|
children,
|
|
13831
|
-
config.current?.wallet?.enabled && /* @__PURE__ */
|
|
13832
|
-
/* @__PURE__ */
|
|
13833
|
-
/* @__PURE__ */
|
|
14403
|
+
config.current?.wallet?.enabled && /* @__PURE__ */ jsx74(WalletConnectHandler, {}),
|
|
14404
|
+
/* @__PURE__ */ jsx74(BalanceFeedProvider, {}),
|
|
14405
|
+
/* @__PURE__ */ jsx74(
|
|
13834
14406
|
TssManagerWithRef,
|
|
13835
14407
|
{
|
|
13836
14408
|
mpcPin: void 0
|
|
13837
14409
|
}
|
|
13838
14410
|
),
|
|
13839
|
-
/* @__PURE__ */
|
|
14411
|
+
/* @__PURE__ */ jsx74(LumiaPassportDialog, {})
|
|
13840
14412
|
] });
|
|
13841
14413
|
}
|
|
13842
14414
|
|
|
@@ -13871,21 +14443,21 @@ var wagmiConfig = createConfig({
|
|
|
13871
14443
|
});
|
|
13872
14444
|
|
|
13873
14445
|
// src/context/WagmiContext.tsx
|
|
13874
|
-
import { jsx as
|
|
14446
|
+
import { jsx as jsx75 } from "react/jsx-runtime";
|
|
13875
14447
|
var LumiaWagmiProvider = ({ children }) => {
|
|
13876
|
-
return /* @__PURE__ */
|
|
14448
|
+
return /* @__PURE__ */ jsx75(WagmiProvider, { config: wagmiConfig, children });
|
|
13877
14449
|
};
|
|
13878
14450
|
|
|
13879
14451
|
// src/context/LumiaPassportContext.tsx
|
|
13880
|
-
import { jsx as
|
|
14452
|
+
import { jsx as jsx76 } from "react/jsx-runtime";
|
|
13881
14453
|
var LumiaPassportContext = createContext(void 0);
|
|
13882
14454
|
function LumiaPassportProvider(props) {
|
|
13883
14455
|
const { children, projectId, initialConfig = {}, callbacks } = props;
|
|
13884
14456
|
const setIsIframeReady = useLumiaPassportSession((st) => st.setIsIframeReady);
|
|
13885
14457
|
const setWalletReadyStatus = useLumiaPassportSession((st) => st.setWalletReadyStatus);
|
|
13886
|
-
|
|
13887
|
-
const config =
|
|
13888
|
-
const updateConfig =
|
|
14458
|
+
useEffect35(() => notifyNoProjetctId(projectId), [projectId]);
|
|
14459
|
+
const config = useRef15({ projectId, ...DEFAULT_LUMIA_PASSPORT_CONFIG });
|
|
14460
|
+
const updateConfig = useCallback23((updates) => {
|
|
13889
14461
|
const prev = config.current;
|
|
13890
14462
|
const next = { ...prev };
|
|
13891
14463
|
if (updates.projectId !== void 0) next.projectId = updates.projectId;
|
|
@@ -13920,7 +14492,7 @@ function LumiaPassportProvider(props) {
|
|
|
13920
14492
|
}
|
|
13921
14493
|
config.current = next;
|
|
13922
14494
|
}, []);
|
|
13923
|
-
|
|
14495
|
+
useEffect35(() => {
|
|
13924
14496
|
if (typeof window === "undefined" || !projectId) return;
|
|
13925
14497
|
const mergedConfig = merge2(DEFAULT_LUMIA_PASSPORT_CONFIG, initialConfig);
|
|
13926
14498
|
updateConfig(mergedConfig);
|
|
@@ -13965,8 +14537,8 @@ function LumiaPassportProvider(props) {
|
|
|
13965
14537
|
console.error("[LumiaPassport] Error setting up iframe manager:", error);
|
|
13966
14538
|
}
|
|
13967
14539
|
}, [projectId, initialConfig, callbacks, updateConfig, setIsIframeReady, setWalletReadyStatus]);
|
|
13968
|
-
const contextValue =
|
|
13969
|
-
return /* @__PURE__ */
|
|
14540
|
+
const contextValue = useMemo8(() => ({ config, updateConfig, callbacks }), [config, updateConfig, callbacks]);
|
|
14541
|
+
return /* @__PURE__ */ jsx76(LumiaWagmiProvider, { children: /* @__PURE__ */ jsx76(LumiaPassportContext.Provider, { value: contextValue, children }) });
|
|
13970
14542
|
}
|
|
13971
14543
|
var useLumiaPassportConfig = () => {
|
|
13972
14544
|
const ctx = useContext(LumiaPassportContext);
|
|
@@ -13976,11 +14548,11 @@ var useLumiaPassportConfig = () => {
|
|
|
13976
14548
|
|
|
13977
14549
|
// src/components/ConnectWalletButton.tsx
|
|
13978
14550
|
import { useQuery as useQuery18 } from "@tanstack/react-query";
|
|
13979
|
-
import { Cloud as Cloud5, Laptop as Laptop2, Loader as Loader25, Shield as
|
|
13980
|
-
import { useEffect as
|
|
14551
|
+
import { Cloud as Cloud5, Laptop as Laptop2, Loader as Loader25, Shield as Shield5 } from "lucide-react";
|
|
14552
|
+
import { useEffect as useEffect36, useMemo as useMemo9 } from "react";
|
|
13981
14553
|
init_auth();
|
|
13982
14554
|
init_profile();
|
|
13983
|
-
import { Fragment as
|
|
14555
|
+
import { Fragment as Fragment29, jsx as jsx77, jsxs as jsxs66 } from "react/jsx-runtime";
|
|
13984
14556
|
function getFormattedStatus(label, status, showStatus) {
|
|
13985
14557
|
const isStatus = showStatus && status && status !== "idle" && status !== "ready";
|
|
13986
14558
|
if (!isStatus) return label;
|
|
@@ -13999,7 +14571,7 @@ function ConnectWalletButton(props) {
|
|
|
13999
14571
|
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
14000
14572
|
const { session, address, hasServerVault, isLoading, isIframeReady, status, setUsePaymaster } = useLumiaPassportSession();
|
|
14001
14573
|
const connectButtonLabel = getFormattedStatus(label || "Connect", status, isIframeReady);
|
|
14002
|
-
|
|
14574
|
+
useEffect36(() => setUsePaymaster(usePaymaster), [setUsePaymaster, usePaymaster]);
|
|
14003
14575
|
const { data: profile, isLoading: isProfileLoading } = useQuery18({
|
|
14004
14576
|
retry: false,
|
|
14005
14577
|
enabled: !!address,
|
|
@@ -14008,7 +14580,7 @@ function ConnectWalletButton(props) {
|
|
|
14008
14580
|
});
|
|
14009
14581
|
const avatar = jwtTokenManager2.getAvatar();
|
|
14010
14582
|
const displayName = profile?.nicknameDisplay || profile?.displayName || jwtTokenManager2.getDisplayName();
|
|
14011
|
-
const indicators =
|
|
14583
|
+
const indicators = useMemo9(() => {
|
|
14012
14584
|
const userId = jwtTokenManager2.getUserId();
|
|
14013
14585
|
if (!userId) return { server: false, local: false, backup: false };
|
|
14014
14586
|
const server = jwtTokenManager2.getHasKeyshare() ?? false;
|
|
@@ -14016,20 +14588,20 @@ function ConnectWalletButton(props) {
|
|
|
14016
14588
|
return { server, local, backup: hasServerVault };
|
|
14017
14589
|
}, [session, address, hasServerVault]);
|
|
14018
14590
|
const isConnecting = connectButtonLabel !== label || isLoading;
|
|
14019
|
-
return /* @__PURE__ */
|
|
14591
|
+
return /* @__PURE__ */ jsx77("div", { "data-lumia-passport-mode": colorMode, className: cn("lumia-scope w-fit h-fit", className), children: !address ? (
|
|
14020
14592
|
/** external Buttons can be provided */
|
|
14021
|
-
/* @__PURE__ */
|
|
14593
|
+
/* @__PURE__ */ jsx77(Fragment29, { children: ConnectButton ? /* @__PURE__ */ jsxs66(
|
|
14022
14594
|
ConnectButton,
|
|
14023
14595
|
{
|
|
14024
14596
|
type: "button",
|
|
14025
14597
|
disabled: isConnecting,
|
|
14026
14598
|
onClick: () => setPage("auth" /* AUTH */),
|
|
14027
14599
|
children: [
|
|
14028
|
-
isConnecting && /* @__PURE__ */
|
|
14600
|
+
isConnecting && /* @__PURE__ */ jsx77(Loader25, { className: "w-4 h-4 animate-spin" }),
|
|
14029
14601
|
connectButtonLabel
|
|
14030
14602
|
]
|
|
14031
14603
|
}
|
|
14032
|
-
) : /* @__PURE__ */
|
|
14604
|
+
) : /* @__PURE__ */ jsxs66(
|
|
14033
14605
|
Button,
|
|
14034
14606
|
{
|
|
14035
14607
|
type: "button",
|
|
@@ -14046,12 +14618,12 @@ function ConnectWalletButton(props) {
|
|
|
14046
14618
|
"disabled:hover:bg-[var(--l-pass-bg)] disabled:active:bg-[var(--l-pass-bg)]"
|
|
14047
14619
|
),
|
|
14048
14620
|
children: [
|
|
14049
|
-
isConnecting && /* @__PURE__ */
|
|
14621
|
+
isConnecting && /* @__PURE__ */ jsx77(Loader25, { className: "w-4 h-4 animate-spin" }),
|
|
14050
14622
|
connectButtonLabel.toUpperCase()
|
|
14051
14623
|
]
|
|
14052
14624
|
}
|
|
14053
14625
|
) })
|
|
14054
|
-
) : /* @__PURE__ */
|
|
14626
|
+
) : /* @__PURE__ */ jsxs66(
|
|
14055
14627
|
"button",
|
|
14056
14628
|
{
|
|
14057
14629
|
type: "button",
|
|
@@ -14064,23 +14636,23 @@ function ConnectWalletButton(props) {
|
|
|
14064
14636
|
"rounded-[var(--l-pass-bdrs)] p-4 max-w-sm min-w-[256px]"
|
|
14065
14637
|
),
|
|
14066
14638
|
children: [
|
|
14067
|
-
/* @__PURE__ */
|
|
14068
|
-
/* @__PURE__ */
|
|
14069
|
-
/* @__PURE__ */
|
|
14070
|
-
isProfileLoading ? /* @__PURE__ */
|
|
14071
|
-
/* @__PURE__ */
|
|
14639
|
+
/* @__PURE__ */ jsx77("div", { className: "w-12 h-12 rounded-full bg-[var(--l-pass-fg)] flex items-center justify-center flex-shrink-0", children: avatar ? /* @__PURE__ */ jsx77("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" }) : /* @__PURE__ */ jsx77(LumiaIcon, { width: 48, height: 48 }) }),
|
|
14640
|
+
/* @__PURE__ */ jsxs66("div", { className: "text-left flex-1 min-w-0 text-[var(--l-pass-fg)]", children: [
|
|
14641
|
+
/* @__PURE__ */ jsxs66("div", { className: "flex items-center gap-[var(--l-pass-gap)]", children: [
|
|
14642
|
+
isProfileLoading ? /* @__PURE__ */ jsx77(Loader25, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ jsx77("span", { className: "w-fit text-[14px] leading-4 truncate max-w-[144px] text-[var(--l-pass-fg)]", children: displayName }),
|
|
14643
|
+
/* @__PURE__ */ jsx77(KYCStatus, {})
|
|
14072
14644
|
] }),
|
|
14073
|
-
/* @__PURE__ */
|
|
14645
|
+
/* @__PURE__ */ jsx77(BalanceView, {})
|
|
14074
14646
|
] }),
|
|
14075
|
-
/* @__PURE__ */
|
|
14076
|
-
/* @__PURE__ */
|
|
14077
|
-
/* @__PURE__ */
|
|
14647
|
+
/* @__PURE__ */ jsxs66("div", { className: "flex items-center space-x-1", children: [
|
|
14648
|
+
/* @__PURE__ */ jsxs66("div", { className: "group relative", children: [
|
|
14649
|
+
/* @__PURE__ */ jsx77(
|
|
14078
14650
|
Cloud5,
|
|
14079
14651
|
{
|
|
14080
14652
|
className: `w-3 h-3 ${indicators.server ? "text-[var(--l-pass-bg-success)]" : "text-[var(--l-pass-bg-warning)]"}`
|
|
14081
14653
|
}
|
|
14082
14654
|
),
|
|
14083
|
-
/* @__PURE__ */
|
|
14655
|
+
/* @__PURE__ */ jsxs66(
|
|
14084
14656
|
"div",
|
|
14085
14657
|
{
|
|
14086
14658
|
className: cn(
|
|
@@ -14095,14 +14667,14 @@ function ConnectWalletButton(props) {
|
|
|
14095
14667
|
}
|
|
14096
14668
|
)
|
|
14097
14669
|
] }),
|
|
14098
|
-
/* @__PURE__ */
|
|
14099
|
-
/* @__PURE__ */
|
|
14670
|
+
/* @__PURE__ */ jsxs66("div", { className: "group relative", children: [
|
|
14671
|
+
/* @__PURE__ */ jsx77(
|
|
14100
14672
|
Laptop2,
|
|
14101
14673
|
{
|
|
14102
14674
|
className: `w-3 h-3 ${indicators.local ? "text-[var(--l-pass-bg-success)]" : "text-[var(--l-pass-bg-warning)]"}`
|
|
14103
14675
|
}
|
|
14104
14676
|
),
|
|
14105
|
-
/* @__PURE__ */
|
|
14677
|
+
/* @__PURE__ */ jsxs66(
|
|
14106
14678
|
"div",
|
|
14107
14679
|
{
|
|
14108
14680
|
className: cn(
|
|
@@ -14117,14 +14689,14 @@ function ConnectWalletButton(props) {
|
|
|
14117
14689
|
}
|
|
14118
14690
|
)
|
|
14119
14691
|
] }),
|
|
14120
|
-
/* @__PURE__ */
|
|
14121
|
-
/* @__PURE__ */
|
|
14122
|
-
|
|
14692
|
+
/* @__PURE__ */ jsxs66("div", { className: "group relative", children: [
|
|
14693
|
+
/* @__PURE__ */ jsx77(
|
|
14694
|
+
Shield5,
|
|
14123
14695
|
{
|
|
14124
14696
|
className: `w-3 h-3 ${indicators.backup ? "text-[var(--l-pass-bg-success)]" : "text-[var(--l-pass-bg-warning)]"}`
|
|
14125
14697
|
}
|
|
14126
14698
|
),
|
|
14127
|
-
/* @__PURE__ */
|
|
14699
|
+
/* @__PURE__ */ jsxs66(
|
|
14128
14700
|
"div",
|
|
14129
14701
|
{
|
|
14130
14702
|
className: cn(
|
|
@@ -14140,7 +14712,7 @@ function ConnectWalletButton(props) {
|
|
|
14140
14712
|
)
|
|
14141
14713
|
] })
|
|
14142
14714
|
] }),
|
|
14143
|
-
!!settingsNotifications.length && /* @__PURE__ */
|
|
14715
|
+
!!settingsNotifications.length && /* @__PURE__ */ jsx77(
|
|
14144
14716
|
"div",
|
|
14145
14717
|
{
|
|
14146
14718
|
className: cn(
|
|
@@ -14181,13 +14753,13 @@ var useLumiaPassportRecoveryUserId = () => useLumiaPassportSession((st) => st.re
|
|
|
14181
14753
|
var useLumiaPassportHasServerVault = () => useLumiaPassportSession((st) => st.hasServerVault);
|
|
14182
14754
|
|
|
14183
14755
|
// src/hooks/useLumiaPassportOpen.ts
|
|
14184
|
-
import { useCallback as
|
|
14756
|
+
import { useCallback as useCallback24 } from "react";
|
|
14185
14757
|
function useLumiaPassportOpen() {
|
|
14186
14758
|
const page = useLayoutDataStore((st) => st.page);
|
|
14187
14759
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
14188
14760
|
const setPageParams = useLayoutDataStore((st) => st.setPageParams);
|
|
14189
14761
|
const address = useLumiaPassportSession((st) => st.address);
|
|
14190
|
-
const open =
|
|
14762
|
+
const open = useCallback24(
|
|
14191
14763
|
(passportPage, params) => {
|
|
14192
14764
|
if (!address) return setPage("auth" /* AUTH */);
|
|
14193
14765
|
if (!!address && passportPage === "auth" /* AUTH */) return setPage("manage-wallet" /* MANAGE_WALLET */);
|
|
@@ -14196,12 +14768,12 @@ function useLumiaPassportOpen() {
|
|
|
14196
14768
|
},
|
|
14197
14769
|
[setPage, setPageParams, address]
|
|
14198
14770
|
);
|
|
14199
|
-
const close =
|
|
14771
|
+
const close = useCallback24(() => setPage(null), [setPage]);
|
|
14200
14772
|
return { open, close, isOpen: page !== null };
|
|
14201
14773
|
}
|
|
14202
14774
|
|
|
14203
14775
|
// src/hooks/useLumiaPassportColorMode.ts
|
|
14204
|
-
import { useCallback as
|
|
14776
|
+
import { useCallback as useCallback25, useEffect as useEffect37 } from "react";
|
|
14205
14777
|
function useLumiaPassportColorMode() {
|
|
14206
14778
|
const {
|
|
14207
14779
|
config: { current: config }
|
|
@@ -14209,14 +14781,14 @@ function useLumiaPassportColorMode() {
|
|
|
14209
14781
|
const preferedColorMode = config?.preferedColorMode;
|
|
14210
14782
|
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
14211
14783
|
const handleStoreColorMode = useLayoutStore((st) => st.setColorMode);
|
|
14212
|
-
const setColorMode =
|
|
14784
|
+
const setColorMode = useCallback25(
|
|
14213
14785
|
(mode) => {
|
|
14214
14786
|
localStorage.setItem(LOCAL_COLOR_MODE_KEY, mode);
|
|
14215
14787
|
handleStoreColorMode(mode);
|
|
14216
14788
|
},
|
|
14217
14789
|
[handleStoreColorMode]
|
|
14218
14790
|
);
|
|
14219
|
-
|
|
14791
|
+
useEffect37(() => {
|
|
14220
14792
|
let targetColorMode = localStorage.getItem(LOCAL_COLOR_MODE_KEY);
|
|
14221
14793
|
if (!targetColorMode && !preferedColorMode) {
|
|
14222
14794
|
const systemMode = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
@@ -14234,23 +14806,23 @@ function useLumiaPassportColorMode() {
|
|
|
14234
14806
|
|
|
14235
14807
|
// src/components/ThemeToggle.tsx
|
|
14236
14808
|
import { Moon, Sun } from "lucide-react";
|
|
14237
|
-
import { jsx as
|
|
14809
|
+
import { jsx as jsx78 } from "react/jsx-runtime";
|
|
14238
14810
|
function ThemeToggle(props) {
|
|
14239
14811
|
const { colorMode, setColorMode } = useLumiaPassportColorMode();
|
|
14240
|
-
return /* @__PURE__ */
|
|
14812
|
+
return /* @__PURE__ */ jsx78(
|
|
14241
14813
|
"div",
|
|
14242
14814
|
{
|
|
14243
14815
|
className: "lumia-scope",
|
|
14244
14816
|
"data-lumia-passport-mode": colorMode,
|
|
14245
14817
|
style: { width: "fit-content", height: "fit-content" },
|
|
14246
|
-
children: /* @__PURE__ */
|
|
14818
|
+
children: /* @__PURE__ */ jsx78(
|
|
14247
14819
|
Button,
|
|
14248
14820
|
{
|
|
14249
14821
|
...props,
|
|
14250
14822
|
variant: "ghost",
|
|
14251
14823
|
onClick: () => setColorMode(colorMode === "light" ? "dark" : "light"),
|
|
14252
14824
|
title: `Current theme: ${colorMode}. Click to switch.`,
|
|
14253
|
-
children: colorMode === "dark" ? /* @__PURE__ */
|
|
14825
|
+
children: colorMode === "dark" ? /* @__PURE__ */ jsx78(Sun, { className: "w-4 h-4" }) : /* @__PURE__ */ jsx78(Moon, { className: "w-4 h-4" })
|
|
14254
14826
|
}
|
|
14255
14827
|
)
|
|
14256
14828
|
}
|
|
@@ -14259,7 +14831,7 @@ function ThemeToggle(props) {
|
|
|
14259
14831
|
|
|
14260
14832
|
// src/context/RainbowKitContext.tsx
|
|
14261
14833
|
import { darkTheme, lightTheme, RainbowKitProvider } from "@rainbow-me/rainbowkit";
|
|
14262
|
-
import { useMemo as
|
|
14834
|
+
import { useMemo as useMemo10 } from "react";
|
|
14263
14835
|
import { WagmiProvider as WagmiProvider2 } from "wagmi";
|
|
14264
14836
|
|
|
14265
14837
|
// src/config/rainbowkit.ts
|
|
@@ -14487,12 +15059,12 @@ var rainbowTheme = {
|
|
|
14487
15059
|
|
|
14488
15060
|
// src/context/RainbowKitContext.tsx
|
|
14489
15061
|
import "@rainbow-me/rainbowkit/styles.css";
|
|
14490
|
-
import { Fragment as
|
|
15062
|
+
import { Fragment as Fragment30, jsx as jsx79 } from "react/jsx-runtime";
|
|
14491
15063
|
function LumiaRainbowKitProvider({ children }) {
|
|
14492
15064
|
const config = useLumiaPassportConfig().config;
|
|
14493
15065
|
const colorMode = useLayoutStore((st) => st.colorMode);
|
|
14494
|
-
const rainbowConfig2 =
|
|
14495
|
-
const customTheme =
|
|
15066
|
+
const rainbowConfig2 = useMemo10(() => createRainbowConfig(config.current?.wallet?.walletConnectProjectId), [config]);
|
|
15067
|
+
const customTheme = useMemo10(
|
|
14496
15068
|
() => colorMode === "dark" ? {
|
|
14497
15069
|
...darkTheme(),
|
|
14498
15070
|
colors: { ...darkTheme().colors, ...rainbowTheme.darkMode.colors },
|
|
@@ -14506,14 +15078,14 @@ function LumiaRainbowKitProvider({ children }) {
|
|
|
14506
15078
|
},
|
|
14507
15079
|
[colorMode]
|
|
14508
15080
|
);
|
|
14509
|
-
if (!config.current?.wallet?.enabled) return /* @__PURE__ */
|
|
14510
|
-
return /* @__PURE__ */
|
|
15081
|
+
if (!config.current?.wallet?.enabled) return /* @__PURE__ */ jsx79(Fragment30, { children });
|
|
15082
|
+
return /* @__PURE__ */ jsx79(WagmiProvider2, { config: rainbowConfig2, children: /* @__PURE__ */ jsx79(RainbowKitProvider, { theme: customTheme, modalSize: "compact", showRecentTransactions: true, children }) });
|
|
14511
15083
|
}
|
|
14512
15084
|
|
|
14513
15085
|
// src/internal/components/UserOpStatus.tsx
|
|
14514
15086
|
init_base();
|
|
14515
15087
|
import { AlertCircle as AlertCircle6, CheckCircle2 as CheckCircle26, Clock as Clock2, Copy as Copy5, ExternalLink as ExternalLink2, RefreshCw as RefreshCw4 } from "lucide-react";
|
|
14516
|
-
import * as
|
|
15088
|
+
import * as React10 from "react";
|
|
14517
15089
|
|
|
14518
15090
|
// src/internal/utils/cn.ts
|
|
14519
15091
|
import { clsx as clsx2 } from "clsx";
|
|
@@ -14524,8 +15096,8 @@ function cn2(...inputs) {
|
|
|
14524
15096
|
|
|
14525
15097
|
// src/internal/components/Address.tsx
|
|
14526
15098
|
import { Copy as Copy4, ExternalLink } from "lucide-react";
|
|
14527
|
-
import * as
|
|
14528
|
-
import { jsx as
|
|
15099
|
+
import * as React9 from "react";
|
|
15100
|
+
import { jsx as jsx80, jsxs as jsxs67 } from "react/jsx-runtime";
|
|
14529
15101
|
function toExplorerAddressUrl(address, chain) {
|
|
14530
15102
|
const base2 = chain?.blockExplorers?.default?.url;
|
|
14531
15103
|
if (!base2) return null;
|
|
@@ -14546,12 +15118,12 @@ var Address = ({
|
|
|
14546
15118
|
}) => {
|
|
14547
15119
|
const addr = address || "";
|
|
14548
15120
|
const explorer = toExplorerAddressUrl(addr, chain || void 0);
|
|
14549
|
-
const [copied, setCopied] =
|
|
14550
|
-
if (!addr) return /* @__PURE__ */
|
|
14551
|
-
return /* @__PURE__ */
|
|
14552
|
-
label && /* @__PURE__ */
|
|
14553
|
-
/* @__PURE__ */
|
|
14554
|
-
showCopy && /* @__PURE__ */
|
|
15121
|
+
const [copied, setCopied] = React9.useState(false);
|
|
15122
|
+
if (!addr) return /* @__PURE__ */ jsx80("span", { className: cn2("text-muted-foreground", className), children: "\u2014" });
|
|
15123
|
+
return /* @__PURE__ */ jsxs67("div", { className: cn2("flex items-center gap-2", className), style: { listStyle: "none" }, children: [
|
|
15124
|
+
label && /* @__PURE__ */ jsx80("span", { className: "text-sm font-medium", children: label }),
|
|
15125
|
+
/* @__PURE__ */ jsx80("code", { className: "text-xs bg-background px-2 py-1 rounded select-all", children: truncate ? short(addr) : addr }),
|
|
15126
|
+
showCopy && /* @__PURE__ */ jsx80(
|
|
14555
15127
|
Button,
|
|
14556
15128
|
{
|
|
14557
15129
|
variant: "ghost",
|
|
@@ -14565,10 +15137,10 @@ var Address = ({
|
|
|
14565
15137
|
} catch {
|
|
14566
15138
|
}
|
|
14567
15139
|
},
|
|
14568
|
-
children: /* @__PURE__ */
|
|
15140
|
+
children: /* @__PURE__ */ jsx80(Copy4, { className: "h-4 w-4" })
|
|
14569
15141
|
}
|
|
14570
15142
|
),
|
|
14571
|
-
showExplorer && explorer && /* @__PURE__ */
|
|
15143
|
+
showExplorer && explorer && /* @__PURE__ */ jsx80(
|
|
14572
15144
|
"a",
|
|
14573
15145
|
{
|
|
14574
15146
|
href: explorer,
|
|
@@ -14576,7 +15148,7 @@ var Address = ({
|
|
|
14576
15148
|
rel: "noreferrer noopener",
|
|
14577
15149
|
className: "inline-flex items-center justify-center h-10 w-10 rounded-md hover:bg-accent text-foreground",
|
|
14578
15150
|
title: "Open in explorer",
|
|
14579
|
-
children: /* @__PURE__ */
|
|
15151
|
+
children: /* @__PURE__ */ jsx80(ExternalLink, { className: "h-4 w-4" })
|
|
14580
15152
|
}
|
|
14581
15153
|
)
|
|
14582
15154
|
] });
|
|
@@ -14584,7 +15156,7 @@ var Address = ({
|
|
|
14584
15156
|
|
|
14585
15157
|
// src/internal/components/ui/badge.tsx
|
|
14586
15158
|
import { cva as cva2 } from "class-variance-authority";
|
|
14587
|
-
import { jsx as
|
|
15159
|
+
import { jsx as jsx81 } from "react/jsx-runtime";
|
|
14588
15160
|
var badgeVariants = cva2(
|
|
14589
15161
|
"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
|
|
14590
15162
|
{
|
|
@@ -14604,11 +15176,11 @@ var badgeVariants = cva2(
|
|
|
14604
15176
|
}
|
|
14605
15177
|
);
|
|
14606
15178
|
function Badge({ className, variant, ...props }) {
|
|
14607
|
-
return /* @__PURE__ */
|
|
15179
|
+
return /* @__PURE__ */ jsx81("div", { className: cn2(badgeVariants({ variant }), className), ...props });
|
|
14608
15180
|
}
|
|
14609
15181
|
|
|
14610
15182
|
// src/internal/components/UserOpStatus.tsx
|
|
14611
|
-
import { jsx as
|
|
15183
|
+
import { jsx as jsx82, jsxs as jsxs68 } from "react/jsx-runtime";
|
|
14612
15184
|
var UserOpStatus = ({
|
|
14613
15185
|
userOpHash,
|
|
14614
15186
|
chain,
|
|
@@ -14619,20 +15191,20 @@ var UserOpStatus = ({
|
|
|
14619
15191
|
externalState
|
|
14620
15192
|
}) => {
|
|
14621
15193
|
const useExternalState = !!externalState;
|
|
14622
|
-
const [internalReceipt, setInternalReceipt] =
|
|
14623
|
-
const [internalMempool, setInternalMempool] =
|
|
14624
|
-
const [internalError, setInternalError] =
|
|
14625
|
-
const [attempt, setAttempt] =
|
|
14626
|
-
const [internalRefreshing, setInternalRefreshing] =
|
|
14627
|
-
const [timedOut, setTimedOut] =
|
|
14628
|
-
const [rejected, setRejected] =
|
|
14629
|
-
const intervalRef =
|
|
14630
|
-
const startTimeRef =
|
|
15194
|
+
const [internalReceipt, setInternalReceipt] = React10.useState(null);
|
|
15195
|
+
const [internalMempool, setInternalMempool] = React10.useState(null);
|
|
15196
|
+
const [internalError, setInternalError] = React10.useState(null);
|
|
15197
|
+
const [attempt, setAttempt] = React10.useState(0);
|
|
15198
|
+
const [internalRefreshing, setInternalRefreshing] = React10.useState(false);
|
|
15199
|
+
const [timedOut, setTimedOut] = React10.useState(false);
|
|
15200
|
+
const [rejected, setRejected] = React10.useState(false);
|
|
15201
|
+
const intervalRef = React10.useRef(null);
|
|
15202
|
+
const startTimeRef = React10.useRef(Date.now());
|
|
14631
15203
|
const receipt = useExternalState ? externalState.receipt ?? null : internalReceipt;
|
|
14632
15204
|
const mempool = useExternalState ? externalState.mempool ?? null : internalMempool;
|
|
14633
15205
|
const error = useExternalState ? externalState.error ?? null : internalError;
|
|
14634
15206
|
const refreshing = useExternalState ? externalState.isPolling ?? false : internalRefreshing;
|
|
14635
|
-
const rpc =
|
|
15207
|
+
const rpc = React10.useCallback(async (method, params) => {
|
|
14636
15208
|
const body = { jsonrpc: "2.0", id: 1, method, params };
|
|
14637
15209
|
const res = await fetch(getBundlerUrl(), {
|
|
14638
15210
|
method: "POST",
|
|
@@ -14643,14 +15215,14 @@ var UserOpStatus = ({
|
|
|
14643
15215
|
if (json.error) throw new Error(json.error.message || JSON.stringify(json.error));
|
|
14644
15216
|
return json.result;
|
|
14645
15217
|
}, []);
|
|
14646
|
-
const extractMempoolInfo =
|
|
15218
|
+
const extractMempoolInfo = React10.useCallback((m) => {
|
|
14647
15219
|
if (!m) return null;
|
|
14648
15220
|
const entryPoint = m.entryPoint || m?.userOperation?.entryPoint || null;
|
|
14649
15221
|
const sender = m.sender || m?.userOperation?.sender || null;
|
|
14650
15222
|
if (!entryPoint && !sender) return null;
|
|
14651
15223
|
return { entryPoint, sender };
|
|
14652
15224
|
}, []);
|
|
14653
|
-
const tick =
|
|
15225
|
+
const tick = React10.useCallback(async () => {
|
|
14654
15226
|
if (useExternalState) return;
|
|
14655
15227
|
const elapsed = Date.now() - startTimeRef.current;
|
|
14656
15228
|
if (elapsed > maxPollTimeMs) {
|
|
@@ -14694,7 +15266,7 @@ var UserOpStatus = ({
|
|
|
14694
15266
|
setAttempt((x) => x + 1);
|
|
14695
15267
|
}
|
|
14696
15268
|
}, [rpc, userOpHash, maxPollTimeMs, extractMempoolInfo, useExternalState]);
|
|
14697
|
-
|
|
15269
|
+
React10.useEffect(() => {
|
|
14698
15270
|
if (useExternalState) return;
|
|
14699
15271
|
console.log("[UserOpStatus] Initializing polling for UserOp hash:", userOpHash);
|
|
14700
15272
|
startTimeRef.current = Date.now();
|
|
@@ -14706,7 +15278,7 @@ var UserOpStatus = ({
|
|
|
14706
15278
|
setAttempt(0);
|
|
14707
15279
|
setInternalRefreshing(false);
|
|
14708
15280
|
}, [userOpHash, useExternalState]);
|
|
14709
|
-
|
|
15281
|
+
React10.useEffect(() => {
|
|
14710
15282
|
if (useExternalState) {
|
|
14711
15283
|
console.log("[UserOpStatus] Using external state, skipping internal polling");
|
|
14712
15284
|
return;
|
|
@@ -14741,35 +15313,35 @@ var UserOpStatus = ({
|
|
|
14741
15313
|
const stateBadge = () => {
|
|
14742
15314
|
if (receipt) {
|
|
14743
15315
|
const ok = !!receipt.success;
|
|
14744
|
-
return /* @__PURE__ */
|
|
14745
|
-
ok ? /* @__PURE__ */
|
|
15316
|
+
return /* @__PURE__ */ jsxs68(Badge, { variant: ok ? "success" : "destructive", className: "gap-1", children: [
|
|
15317
|
+
ok ? /* @__PURE__ */ jsx82(CheckCircle26, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx82(AlertCircle6, { className: "h-3 w-3" }),
|
|
14746
15318
|
ok ? "Included" : "Failed"
|
|
14747
15319
|
] });
|
|
14748
15320
|
}
|
|
14749
15321
|
if (rejected) {
|
|
14750
|
-
return /* @__PURE__ */
|
|
14751
|
-
/* @__PURE__ */
|
|
15322
|
+
return /* @__PURE__ */ jsxs68(Badge, { variant: "destructive", className: "gap-1", children: [
|
|
15323
|
+
/* @__PURE__ */ jsx82(AlertCircle6, { className: "h-3 w-3" }),
|
|
14752
15324
|
" Rejected by bundler"
|
|
14753
15325
|
] });
|
|
14754
15326
|
}
|
|
14755
15327
|
if (timedOut) {
|
|
14756
|
-
return /* @__PURE__ */
|
|
14757
|
-
/* @__PURE__ */
|
|
15328
|
+
return /* @__PURE__ */ jsxs68(Badge, { variant: "warning", className: "gap-1", children: [
|
|
15329
|
+
/* @__PURE__ */ jsx82(AlertCircle6, { className: "h-3 w-3" }),
|
|
14758
15330
|
" Timeout - may be rejected"
|
|
14759
15331
|
] });
|
|
14760
15332
|
}
|
|
14761
15333
|
if (mempool) {
|
|
14762
|
-
return /* @__PURE__ */
|
|
14763
|
-
/* @__PURE__ */
|
|
15334
|
+
return /* @__PURE__ */ jsxs68(Badge, { variant: "outline", className: "gap-1", children: [
|
|
15335
|
+
/* @__PURE__ */ jsx82(Clock2, { className: "h-3 w-3" }),
|
|
14764
15336
|
" Pending in bundler"
|
|
14765
15337
|
] });
|
|
14766
15338
|
}
|
|
14767
|
-
return /* @__PURE__ */
|
|
14768
|
-
/* @__PURE__ */
|
|
15339
|
+
return /* @__PURE__ */ jsxs68(Badge, { variant: "secondary", className: "gap-1", children: [
|
|
15340
|
+
/* @__PURE__ */ jsx82(Clock2, { className: "h-3 w-3" }),
|
|
14769
15341
|
" Waiting"
|
|
14770
15342
|
] });
|
|
14771
15343
|
};
|
|
14772
|
-
return /* @__PURE__ */
|
|
15344
|
+
return /* @__PURE__ */ jsxs68(
|
|
14773
15345
|
"div",
|
|
14774
15346
|
{
|
|
14775
15347
|
className: cn2(
|
|
@@ -14778,20 +15350,20 @@ var UserOpStatus = ({
|
|
|
14778
15350
|
),
|
|
14779
15351
|
style: { textAlign: "left", listStyle: "none" },
|
|
14780
15352
|
children: [
|
|
14781
|
-
/* @__PURE__ */
|
|
14782
|
-
/* @__PURE__ */
|
|
15353
|
+
/* @__PURE__ */ jsxs68("div", { className: "flex items-center justify-between mb-3", children: [
|
|
15354
|
+
/* @__PURE__ */ jsxs68("div", { className: "flex items-center gap-2", children: [
|
|
14783
15355
|
stateBadge(),
|
|
14784
|
-
/* @__PURE__ */
|
|
15356
|
+
/* @__PURE__ */ jsx82("span", { className: "text-xs text-muted-foreground", children: "This is a UserOperation hash (EIP-4337), not a L2 tx hash." })
|
|
14785
15357
|
] }),
|
|
14786
|
-
/* @__PURE__ */
|
|
14787
|
-
/* @__PURE__ */
|
|
14788
|
-
/* @__PURE__ */
|
|
15358
|
+
/* @__PURE__ */ jsxs68(Button, { variant: "ghost", size: "small", onClick: () => tick(), disabled: refreshing, className: "h-8", children: [
|
|
15359
|
+
/* @__PURE__ */ jsx82(RefreshCw4, { className: cn2("h-3.5 w-3.5 mr-1", refreshing && "animate-spin") }),
|
|
15360
|
+
/* @__PURE__ */ jsx82("span", { className: "text-xs", children: "Refresh" })
|
|
14789
15361
|
] })
|
|
14790
15362
|
] }),
|
|
14791
|
-
/* @__PURE__ */
|
|
14792
|
-
/* @__PURE__ */
|
|
14793
|
-
/* @__PURE__ */
|
|
14794
|
-
/* @__PURE__ */
|
|
15363
|
+
/* @__PURE__ */ jsxs68("div", { className: "flex items-center gap-2 mb-2", children: [
|
|
15364
|
+
/* @__PURE__ */ jsx82("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "UO Hash" }),
|
|
15365
|
+
/* @__PURE__ */ jsx82("code", { className: "text-xs font-mono flex-1 select-all", children: userOpHash }),
|
|
15366
|
+
/* @__PURE__ */ jsx82(
|
|
14795
15367
|
Button,
|
|
14796
15368
|
{
|
|
14797
15369
|
variant: "ghost",
|
|
@@ -14803,14 +15375,14 @@ var UserOpStatus = ({
|
|
|
14803
15375
|
} catch {
|
|
14804
15376
|
}
|
|
14805
15377
|
},
|
|
14806
|
-
children: /* @__PURE__ */
|
|
15378
|
+
children: /* @__PURE__ */ jsx82(Copy5, { className: "h-3.5 w-3.5" })
|
|
14807
15379
|
}
|
|
14808
15380
|
)
|
|
14809
15381
|
] }),
|
|
14810
|
-
receipt && receipt.receipt?.transactionHash && /* @__PURE__ */
|
|
14811
|
-
/* @__PURE__ */
|
|
14812
|
-
/* @__PURE__ */
|
|
14813
|
-
/* @__PURE__ */
|
|
15382
|
+
receipt && receipt.receipt?.transactionHash && /* @__PURE__ */ jsxs68("div", { className: "flex items-center gap-2 mb-3", children: [
|
|
15383
|
+
/* @__PURE__ */ jsx82("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "Tx Hash" }),
|
|
15384
|
+
/* @__PURE__ */ jsx82("code", { className: "text-xs font-mono flex-1 select-all", children: receipt.receipt.transactionHash }),
|
|
15385
|
+
/* @__PURE__ */ jsx82(
|
|
14814
15386
|
Button,
|
|
14815
15387
|
{
|
|
14816
15388
|
variant: "ghost",
|
|
@@ -14822,10 +15394,10 @@ var UserOpStatus = ({
|
|
|
14822
15394
|
} catch {
|
|
14823
15395
|
}
|
|
14824
15396
|
},
|
|
14825
|
-
children: /* @__PURE__ */
|
|
15397
|
+
children: /* @__PURE__ */ jsx82(Copy5, { className: "h-3.5 w-3.5" })
|
|
14826
15398
|
}
|
|
14827
15399
|
),
|
|
14828
|
-
chain?.blockExplorers?.default?.url && /* @__PURE__ */
|
|
15400
|
+
chain?.blockExplorers?.default?.url && /* @__PURE__ */ jsx82(
|
|
14829
15401
|
"a",
|
|
14830
15402
|
{
|
|
14831
15403
|
href: `${chain.blockExplorers.default.url}/tx/${receipt.receipt.transactionHash}`,
|
|
@@ -14833,11 +15405,11 @@ var UserOpStatus = ({
|
|
|
14833
15405
|
rel: "noreferrer noopener",
|
|
14834
15406
|
className: "inline-flex items-center justify-center h-8 w-8 rounded-md hover:bg-accent text-foreground",
|
|
14835
15407
|
title: "Open in explorer",
|
|
14836
|
-
children: /* @__PURE__ */
|
|
15408
|
+
children: /* @__PURE__ */ jsx82(ExternalLink2, { className: "h-3.5 w-3.5" })
|
|
14837
15409
|
}
|
|
14838
15410
|
)
|
|
14839
15411
|
] }),
|
|
14840
|
-
receipt && /* @__PURE__ */
|
|
15412
|
+
receipt && /* @__PURE__ */ jsxs68("div", { className: "text-xs text-muted-foreground mb-3", children: [
|
|
14841
15413
|
"Block ",
|
|
14842
15414
|
parseInt(receipt.receipt?.blockNumber || "0x0", 16),
|
|
14843
15415
|
" \u2022 Gas Used",
|
|
@@ -14846,32 +15418,32 @@ var UserOpStatus = ({
|
|
|
14846
15418
|
" \u2022 Success ",
|
|
14847
15419
|
String(!!receipt.success)
|
|
14848
15420
|
] }),
|
|
14849
|
-
/* @__PURE__ */
|
|
15421
|
+
/* @__PURE__ */ jsx82("div", { className: "text-xs text-muted-foreground", children: !receipt && !timedOut && !rejected && /* @__PURE__ */ jsxs68("span", { className: "ml-2", children: [
|
|
14850
15422
|
"\u2022 Polling for ",
|
|
14851
15423
|
Math.round((Date.now() - startTimeRef.current) / 1e3),
|
|
14852
15424
|
"s"
|
|
14853
15425
|
] }) }),
|
|
14854
|
-
mempool && /* @__PURE__ */
|
|
14855
|
-
/* @__PURE__ */
|
|
15426
|
+
mempool && /* @__PURE__ */ jsxs68("div", { className: "text-sm text-muted-foreground mt-2", style: { listStyle: "none" }, children: [
|
|
15427
|
+
/* @__PURE__ */ jsxs68("div", { children: [
|
|
14856
15428
|
"Seen by bundler at ",
|
|
14857
|
-
/* @__PURE__ */
|
|
15429
|
+
/* @__PURE__ */ jsx82(Address, { address: mempool.entryPoint, chain, showExplorer: true, truncate: false })
|
|
14858
15430
|
] }),
|
|
14859
|
-
/* @__PURE__ */
|
|
15431
|
+
/* @__PURE__ */ jsxs68("div", { children: [
|
|
14860
15432
|
"sender ",
|
|
14861
|
-
/* @__PURE__ */
|
|
15433
|
+
/* @__PURE__ */ jsx82(Address, { address: mempool.sender, chain, truncate: false })
|
|
14862
15434
|
] })
|
|
14863
15435
|
] }),
|
|
14864
|
-
error && /* @__PURE__ */
|
|
14865
|
-
/* @__PURE__ */
|
|
15436
|
+
error && /* @__PURE__ */ jsxs68("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
|
|
15437
|
+
/* @__PURE__ */ jsx82(AlertCircle6, { className: "h-4 w-4" }),
|
|
14866
15438
|
" ",
|
|
14867
15439
|
error
|
|
14868
15440
|
] }),
|
|
14869
|
-
rejected && /* @__PURE__ */
|
|
14870
|
-
/* @__PURE__ */
|
|
15441
|
+
rejected && /* @__PURE__ */ jsxs68("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
|
|
15442
|
+
/* @__PURE__ */ jsx82(AlertCircle6, { className: "h-4 w-4" }),
|
|
14871
15443
|
"UserOperation was dropped from bundler mempool. This usually means it was invalid or replaced."
|
|
14872
15444
|
] }),
|
|
14873
|
-
timedOut && /* @__PURE__ */
|
|
14874
|
-
/* @__PURE__ */
|
|
15445
|
+
timedOut && /* @__PURE__ */ jsxs68("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
|
|
15446
|
+
/* @__PURE__ */ jsx82(AlertCircle6, { className: "h-4 w-4" }),
|
|
14875
15447
|
"Stopped polling after ",
|
|
14876
15448
|
Math.round(maxPollTimeMs / 1e3),
|
|
14877
15449
|
"s. UserOperation may have been rejected by the bundler."
|
|
@@ -14883,8 +15455,8 @@ var UserOpStatus = ({
|
|
|
14883
15455
|
|
|
14884
15456
|
// src/internal/components/Hash.tsx
|
|
14885
15457
|
import { Copy as Copy6, ExternalLink as ExternalLink3 } from "lucide-react";
|
|
14886
|
-
import * as
|
|
14887
|
-
import { jsx as
|
|
15458
|
+
import * as React11 from "react";
|
|
15459
|
+
import { jsx as jsx83, jsxs as jsxs69 } from "react/jsx-runtime";
|
|
14888
15460
|
function toExplorerUrl(kind, value, chain) {
|
|
14889
15461
|
const base2 = chain?.blockExplorers?.default?.url;
|
|
14890
15462
|
if (!base2) return null;
|
|
@@ -14907,12 +15479,12 @@ var Hash = ({
|
|
|
14907
15479
|
}) => {
|
|
14908
15480
|
const value = hash || "";
|
|
14909
15481
|
const explorer = toExplorerUrl(kind, value, chain || void 0);
|
|
14910
|
-
const [copied, setCopied] =
|
|
14911
|
-
if (!value) return /* @__PURE__ */
|
|
14912
|
-
return /* @__PURE__ */
|
|
14913
|
-
label && /* @__PURE__ */
|
|
14914
|
-
/* @__PURE__ */
|
|
14915
|
-
showCopy && /* @__PURE__ */
|
|
15482
|
+
const [copied, setCopied] = React11.useState(false);
|
|
15483
|
+
if (!value) return /* @__PURE__ */ jsx83("span", { className: cn2("text-muted-foreground", className), children: "\u2014" });
|
|
15484
|
+
return /* @__PURE__ */ jsxs69("div", { className: cn2("flex items-center gap-2", className), children: [
|
|
15485
|
+
label && /* @__PURE__ */ jsx83("span", { className: "text-sm font-medium", children: label }),
|
|
15486
|
+
/* @__PURE__ */ jsx83("code", { className: "text-xs bg-background px-2 py-1 rounded break-all", children: truncate ? short2(value) : value }),
|
|
15487
|
+
showCopy && /* @__PURE__ */ jsx83(
|
|
14916
15488
|
Button,
|
|
14917
15489
|
{
|
|
14918
15490
|
variant: "ghost",
|
|
@@ -14926,10 +15498,10 @@ var Hash = ({
|
|
|
14926
15498
|
} catch {
|
|
14927
15499
|
}
|
|
14928
15500
|
},
|
|
14929
|
-
children: /* @__PURE__ */
|
|
15501
|
+
children: /* @__PURE__ */ jsx83(Copy6, { className: "h-4 w-4" })
|
|
14930
15502
|
}
|
|
14931
15503
|
),
|
|
14932
|
-
showExplorer && explorer && /* @__PURE__ */
|
|
15504
|
+
showExplorer && explorer && /* @__PURE__ */ jsx83(
|
|
14933
15505
|
"a",
|
|
14934
15506
|
{
|
|
14935
15507
|
href: explorer,
|
|
@@ -14937,7 +15509,7 @@ var Hash = ({
|
|
|
14937
15509
|
rel: "noreferrer noopener",
|
|
14938
15510
|
className: "inline-flex items-center justify-center h-10 w-10 rounded-md hover:bg-accent text-foreground",
|
|
14939
15511
|
title: "Open in explorer",
|
|
14940
|
-
children: /* @__PURE__ */
|
|
15512
|
+
children: /* @__PURE__ */ jsx83(ExternalLink3, { className: "h-4 w-4" })
|
|
14941
15513
|
}
|
|
14942
15514
|
)
|
|
14943
15515
|
] });
|
|
@@ -14945,13 +15517,13 @@ var Hash = ({
|
|
|
14945
15517
|
|
|
14946
15518
|
// src/internal/components/TransactionsMenu/TransactionsList.tsx
|
|
14947
15519
|
init_base();
|
|
14948
|
-
import { useEffect as
|
|
14949
|
-
import { jsx as
|
|
15520
|
+
import { useEffect as useEffect39, useState as useState25 } from "react";
|
|
15521
|
+
import { jsx as jsx84, jsxs as jsxs70 } from "react/jsx-runtime";
|
|
14950
15522
|
var TransactionsList = ({ address, itemsCount = 10 }) => {
|
|
14951
|
-
const [transactions, setTransactions] =
|
|
14952
|
-
const [loading, setLoading] =
|
|
14953
|
-
const [error, setError] =
|
|
14954
|
-
|
|
15523
|
+
const [transactions, setTransactions] = useState25([]);
|
|
15524
|
+
const [loading, setLoading] = useState25(true);
|
|
15525
|
+
const [error, setError] = useState25(null);
|
|
15526
|
+
useEffect39(() => {
|
|
14955
15527
|
const fetchTransactions = async () => {
|
|
14956
15528
|
try {
|
|
14957
15529
|
setLoading(true);
|
|
@@ -14997,31 +15569,31 @@ var TransactionsList = ({ address, itemsCount = 10 }) => {
|
|
|
14997
15569
|
window.open(`${explorerUrl}/tx/${txHash}`, "_blank");
|
|
14998
15570
|
};
|
|
14999
15571
|
if (loading) {
|
|
15000
|
-
return /* @__PURE__ */
|
|
15001
|
-
/* @__PURE__ */
|
|
15002
|
-
/* @__PURE__ */
|
|
15572
|
+
return /* @__PURE__ */ jsxs70("div", { className: "p-4 text-center", children: [
|
|
15573
|
+
/* @__PURE__ */ jsx84("div", { className: "animate-spin inline-block w-6 h-6 border-2 border-current border-t-transparent rounded-full" }),
|
|
15574
|
+
/* @__PURE__ */ jsx84("p", { className: "mt-2 text-sm text-gray-600", children: "Loading transactions..." })
|
|
15003
15575
|
] });
|
|
15004
15576
|
}
|
|
15005
15577
|
if (error) {
|
|
15006
|
-
return /* @__PURE__ */
|
|
15007
|
-
/* @__PURE__ */
|
|
15008
|
-
/* @__PURE__ */
|
|
15578
|
+
return /* @__PURE__ */ jsxs70("div", { className: "p-4 text-center", children: [
|
|
15579
|
+
/* @__PURE__ */ jsx84("p", { className: "text-red-600 text-sm", children: error }),
|
|
15580
|
+
/* @__PURE__ */ jsx84("button", { onClick: () => window.location.reload(), className: "mt-2 text-blue-600 text-sm hover:underline", children: "Retry" })
|
|
15009
15581
|
] });
|
|
15010
15582
|
}
|
|
15011
15583
|
if (transactions.length === 0) {
|
|
15012
|
-
return /* @__PURE__ */
|
|
15584
|
+
return /* @__PURE__ */ jsx84("div", { className: "p-4 text-center", children: /* @__PURE__ */ jsx84("p", { className: "text-gray-600 text-sm", children: "No transactions found" }) });
|
|
15013
15585
|
}
|
|
15014
|
-
return /* @__PURE__ */
|
|
15586
|
+
return /* @__PURE__ */ jsx84("div", { className: "max-h-96 overflow-y-auto", children: /* @__PURE__ */ jsx84("div", { className: "space-y-2 p-2", children: transactions.map((tx) => /* @__PURE__ */ jsxs70(
|
|
15015
15587
|
"div",
|
|
15016
15588
|
{
|
|
15017
15589
|
className: "border rounded-lg p-3 hover:bg-gray-50 cursor-pointer transition-colors",
|
|
15018
15590
|
onClick: () => openTransaction(tx.hash),
|
|
15019
15591
|
children: [
|
|
15020
|
-
/* @__PURE__ */
|
|
15021
|
-
/* @__PURE__ */
|
|
15022
|
-
/* @__PURE__ */
|
|
15023
|
-
/* @__PURE__ */
|
|
15024
|
-
/* @__PURE__ */
|
|
15592
|
+
/* @__PURE__ */ jsxs70("div", { className: "flex justify-between items-start mb-2", children: [
|
|
15593
|
+
/* @__PURE__ */ jsxs70("div", { className: "flex-1", children: [
|
|
15594
|
+
/* @__PURE__ */ jsxs70("div", { className: "flex items-center space-x-2 mb-1", children: [
|
|
15595
|
+
/* @__PURE__ */ jsx84("span", { className: "text-xs font-mono bg-gray-100 px-2 py-1 rounded", children: formatAddress3(tx.hash) }),
|
|
15596
|
+
/* @__PURE__ */ jsx84(
|
|
15025
15597
|
"span",
|
|
15026
15598
|
{
|
|
15027
15599
|
className: `text-xs px-2 py-1 rounded ${tx.status === "ok" ? "bg-green-100 text-green-800" : "bg-red-100 text-red-800"}`,
|
|
@@ -15029,40 +15601,40 @@ var TransactionsList = ({ address, itemsCount = 10 }) => {
|
|
|
15029
15601
|
}
|
|
15030
15602
|
)
|
|
15031
15603
|
] }),
|
|
15032
|
-
/* @__PURE__ */
|
|
15033
|
-
/* @__PURE__ */
|
|
15034
|
-
/* @__PURE__ */
|
|
15035
|
-
/* @__PURE__ */
|
|
15604
|
+
/* @__PURE__ */ jsxs70("div", { className: "text-sm space-y-1", children: [
|
|
15605
|
+
/* @__PURE__ */ jsxs70("div", { children: [
|
|
15606
|
+
/* @__PURE__ */ jsx84("span", { className: "text-gray-600", children: "From:" }),
|
|
15607
|
+
/* @__PURE__ */ jsxs70("span", { className: "font-mono ml-1", children: [
|
|
15036
15608
|
formatAddress3(tx.from.hash),
|
|
15037
|
-
tx.from.is_contract && /* @__PURE__ */
|
|
15609
|
+
tx.from.is_contract && /* @__PURE__ */ jsx84("span", { className: "text-xs text-blue-600 ml-1", children: "(Contract)" })
|
|
15038
15610
|
] })
|
|
15039
15611
|
] }),
|
|
15040
|
-
/* @__PURE__ */
|
|
15041
|
-
/* @__PURE__ */
|
|
15042
|
-
/* @__PURE__ */
|
|
15612
|
+
/* @__PURE__ */ jsxs70("div", { children: [
|
|
15613
|
+
/* @__PURE__ */ jsx84("span", { className: "text-gray-600", children: "To:" }),
|
|
15614
|
+
/* @__PURE__ */ jsxs70("span", { className: "font-mono ml-1", children: [
|
|
15043
15615
|
formatAddress3(tx.to.hash),
|
|
15044
|
-
tx.to.is_contract && /* @__PURE__ */
|
|
15616
|
+
tx.to.is_contract && /* @__PURE__ */ jsx84("span", { className: "text-xs text-blue-600 ml-1", children: "(Contract)" })
|
|
15045
15617
|
] })
|
|
15046
15618
|
] }),
|
|
15047
|
-
/* @__PURE__ */
|
|
15048
|
-
/* @__PURE__ */
|
|
15049
|
-
/* @__PURE__ */
|
|
15619
|
+
/* @__PURE__ */ jsxs70("div", { children: [
|
|
15620
|
+
/* @__PURE__ */ jsx84("span", { className: "text-gray-600", children: "Value:" }),
|
|
15621
|
+
/* @__PURE__ */ jsxs70("span", { className: "font-semibold ml-1", children: [
|
|
15050
15622
|
formatValue3(tx.value),
|
|
15051
15623
|
" LUMIA"
|
|
15052
15624
|
] })
|
|
15053
15625
|
] })
|
|
15054
15626
|
] })
|
|
15055
15627
|
] }),
|
|
15056
|
-
/* @__PURE__ */
|
|
15057
|
-
/* @__PURE__ */
|
|
15058
|
-
/* @__PURE__ */
|
|
15628
|
+
/* @__PURE__ */ jsxs70("div", { className: "text-right text-xs text-gray-500", children: [
|
|
15629
|
+
/* @__PURE__ */ jsx84("div", { children: formatDate3(tx.timestamp) }),
|
|
15630
|
+
/* @__PURE__ */ jsxs70("div", { className: "mt-1", children: [
|
|
15059
15631
|
"Gas: ",
|
|
15060
15632
|
parseInt(tx.gas_used).toLocaleString()
|
|
15061
15633
|
] }),
|
|
15062
|
-
tx.method && /* @__PURE__ */
|
|
15634
|
+
tx.method && /* @__PURE__ */ jsx84("div", { className: "mt-1 text-blue-600", children: tx.method })
|
|
15063
15635
|
] })
|
|
15064
15636
|
] }),
|
|
15065
|
-
tx.transaction_types.length > 0 && /* @__PURE__ */
|
|
15637
|
+
tx.transaction_types.length > 0 && /* @__PURE__ */ jsx84("div", { className: "flex flex-wrap gap-1 mt-2", children: tx.transaction_types.map((type, idx) => /* @__PURE__ */ jsx84("span", { className: "text-xs bg-blue-100 text-blue-800 px-2 py-1 rounded-full", children: type.replace("_", " ") }, idx)) })
|
|
15066
15638
|
]
|
|
15067
15639
|
},
|
|
15068
15640
|
tx.hash
|
|
@@ -15071,7 +15643,7 @@ var TransactionsList = ({ address, itemsCount = 10 }) => {
|
|
|
15071
15643
|
|
|
15072
15644
|
// src/hooks/useUserOpStatus.ts
|
|
15073
15645
|
init_base();
|
|
15074
|
-
import * as
|
|
15646
|
+
import * as React13 from "react";
|
|
15075
15647
|
function useUserOpStatus(options = {}) {
|
|
15076
15648
|
const {
|
|
15077
15649
|
userOpHash,
|
|
@@ -15082,16 +15654,16 @@ function useUserOpStatus(options = {}) {
|
|
|
15082
15654
|
onReceipt,
|
|
15083
15655
|
onTxHash
|
|
15084
15656
|
} = options;
|
|
15085
|
-
const [state, setState] =
|
|
15086
|
-
const [receipt, setReceipt] =
|
|
15087
|
-
const [mempool, setMempool] =
|
|
15088
|
-
const [txHash, setTxHash] =
|
|
15089
|
-
const [error, setError] =
|
|
15090
|
-
const [isPolling, setIsPolling] =
|
|
15091
|
-
const intervalRef =
|
|
15092
|
-
const startTimeRef =
|
|
15093
|
-
const prevStateRef =
|
|
15094
|
-
const rpc =
|
|
15657
|
+
const [state, setState] = React13.useState("waiting");
|
|
15658
|
+
const [receipt, setReceipt] = React13.useState(null);
|
|
15659
|
+
const [mempool, setMempool] = React13.useState(null);
|
|
15660
|
+
const [txHash, setTxHash] = React13.useState(null);
|
|
15661
|
+
const [error, setError] = React13.useState(null);
|
|
15662
|
+
const [isPolling, setIsPolling] = React13.useState(false);
|
|
15663
|
+
const intervalRef = React13.useRef(null);
|
|
15664
|
+
const startTimeRef = React13.useRef(Date.now());
|
|
15665
|
+
const prevStateRef = React13.useRef("waiting");
|
|
15666
|
+
const rpc = React13.useCallback(async (method, params) => {
|
|
15095
15667
|
const body = { jsonrpc: "2.0", id: 1, method, params };
|
|
15096
15668
|
const res = await fetch(getBundlerUrl(), {
|
|
15097
15669
|
method: "POST",
|
|
@@ -15102,21 +15674,21 @@ function useUserOpStatus(options = {}) {
|
|
|
15102
15674
|
if (json.error) throw new Error(json.error.message || JSON.stringify(json.error));
|
|
15103
15675
|
return json.result;
|
|
15104
15676
|
}, []);
|
|
15105
|
-
const extractMempoolInfo =
|
|
15677
|
+
const extractMempoolInfo = React13.useCallback((m) => {
|
|
15106
15678
|
if (!m) return null;
|
|
15107
15679
|
const entryPoint = m.entryPoint || m?.userOperation?.entryPoint || null;
|
|
15108
15680
|
const sender = m.sender || m?.userOperation?.sender || null;
|
|
15109
15681
|
if (!entryPoint && !sender) return null;
|
|
15110
15682
|
return { entryPoint, sender };
|
|
15111
15683
|
}, []);
|
|
15112
|
-
const updateState =
|
|
15684
|
+
const updateState = React13.useCallback((newState) => {
|
|
15113
15685
|
setState(newState);
|
|
15114
15686
|
if (prevStateRef.current !== newState) {
|
|
15115
15687
|
prevStateRef.current = newState;
|
|
15116
15688
|
onStateChange?.(newState);
|
|
15117
15689
|
}
|
|
15118
15690
|
}, [onStateChange]);
|
|
15119
|
-
const tick =
|
|
15691
|
+
const tick = React13.useCallback(async () => {
|
|
15120
15692
|
if (!userOpHash || !enabled) return;
|
|
15121
15693
|
if (receipt) {
|
|
15122
15694
|
console.log("[useUserOpStatus] Already have receipt, skipping tick");
|
|
@@ -15189,7 +15761,7 @@ function useUserOpStatus(options = {}) {
|
|
|
15189
15761
|
onTxHash,
|
|
15190
15762
|
onReceipt
|
|
15191
15763
|
]);
|
|
15192
|
-
|
|
15764
|
+
React13.useEffect(() => {
|
|
15193
15765
|
if (!userOpHash || !enabled) return;
|
|
15194
15766
|
console.log("[useUserOpStatus] Initializing for UserOp hash:", userOpHash);
|
|
15195
15767
|
startTimeRef.current = Date.now();
|
|
@@ -15201,7 +15773,7 @@ function useUserOpStatus(options = {}) {
|
|
|
15201
15773
|
setError(null);
|
|
15202
15774
|
setIsPolling(false);
|
|
15203
15775
|
}, [userOpHash, enabled]);
|
|
15204
|
-
|
|
15776
|
+
React13.useEffect(() => {
|
|
15205
15777
|
if (!userOpHash || !enabled) {
|
|
15206
15778
|
console.log("[useUserOpStatus] Not starting polling - no hash or disabled");
|
|
15207
15779
|
return;
|
|
@@ -15237,7 +15809,7 @@ function useUserOpStatus(options = {}) {
|
|
|
15237
15809
|
}
|
|
15238
15810
|
};
|
|
15239
15811
|
}, [userOpHash, enabled, pollMs]);
|
|
15240
|
-
const refresh =
|
|
15812
|
+
const refresh = React13.useCallback(async () => {
|
|
15241
15813
|
await tick();
|
|
15242
15814
|
}, [tick]);
|
|
15243
15815
|
return {
|
|
@@ -15253,11 +15825,11 @@ function useUserOpStatus(options = {}) {
|
|
|
15253
15825
|
|
|
15254
15826
|
// src/hooks/useLogout.ts
|
|
15255
15827
|
import { logout as coreLogout, jwtTokenManager as jwtTokenManager3 } from "@lumiapassport/core/auth";
|
|
15256
|
-
import { useCallback as
|
|
15828
|
+
import { useCallback as useCallback28 } from "react";
|
|
15257
15829
|
function useLogout() {
|
|
15258
15830
|
const { setSession, setIsLoading, setAddress, setStatus, setError, address } = useLumiaPassportSession();
|
|
15259
15831
|
const { callbacks } = useLumiaPassportConfig();
|
|
15260
|
-
const logout2 =
|
|
15832
|
+
const logout2 = useCallback28(async () => {
|
|
15261
15833
|
const prevAddress = address;
|
|
15262
15834
|
let userId = null;
|
|
15263
15835
|
setIsLoading(true);
|
|
@@ -15298,7 +15870,7 @@ init_errors();
|
|
|
15298
15870
|
// src/modules/transactions.ts
|
|
15299
15871
|
init_base();
|
|
15300
15872
|
import { usePublicClient as usePublicClient2, useWalletClient, useAccount as useAccount2 } from "wagmi";
|
|
15301
|
-
import { parseEther as
|
|
15873
|
+
import { parseEther as parseEther3 } from "viem";
|
|
15302
15874
|
function useTransactions() {
|
|
15303
15875
|
const publicClient2 = usePublicClient2({ chainId: lumiaBeam.id });
|
|
15304
15876
|
const { data: walletClient } = useWalletClient();
|
|
@@ -15309,7 +15881,7 @@ function useTransactions() {
|
|
|
15309
15881
|
}
|
|
15310
15882
|
const txParams = {
|
|
15311
15883
|
to: params.to,
|
|
15312
|
-
value:
|
|
15884
|
+
value: parseEther3(params.value),
|
|
15313
15885
|
data: params.data,
|
|
15314
15886
|
chain: lumiaBeam
|
|
15315
15887
|
};
|
|
@@ -15358,6 +15930,167 @@ function useTransactions() {
|
|
|
15358
15930
|
};
|
|
15359
15931
|
}
|
|
15360
15932
|
|
|
15933
|
+
// src/modules/assets.ts
|
|
15934
|
+
init_base();
|
|
15935
|
+
import React14 from "react";
|
|
15936
|
+
import { useBalance as useBalance3, useReadContract as useReadContract2, useReadContracts } from "wagmi";
|
|
15937
|
+
import { formatUnits as formatUnits6, erc20Abi } from "viem";
|
|
15938
|
+
var COMMON_TOKENS = [
|
|
15939
|
+
// Add real token addresses here when available
|
|
15940
|
+
// {
|
|
15941
|
+
// address: '0x....',
|
|
15942
|
+
// name: 'USD Coin',
|
|
15943
|
+
// symbol: 'USDC',
|
|
15944
|
+
// decimals: 6,
|
|
15945
|
+
// logo: 'https://...'
|
|
15946
|
+
// }
|
|
15947
|
+
];
|
|
15948
|
+
function useAssets(address) {
|
|
15949
|
+
const { data: nativeBalance, isLoading: nativeBalanceLoading, refetch: refetchNativeBalance } = useBalance3({
|
|
15950
|
+
address,
|
|
15951
|
+
chainId: lumiaBeam.id,
|
|
15952
|
+
query: {
|
|
15953
|
+
enabled: !!address
|
|
15954
|
+
}
|
|
15955
|
+
});
|
|
15956
|
+
const tokenContracts = COMMON_TOKENS.map((token) => ({
|
|
15957
|
+
address: token.address,
|
|
15958
|
+
abi: erc20Abi,
|
|
15959
|
+
functionName: "balanceOf",
|
|
15960
|
+
args: [address],
|
|
15961
|
+
chainId: lumiaBeam.id
|
|
15962
|
+
}));
|
|
15963
|
+
const readContractsResult = useReadContracts({
|
|
15964
|
+
contracts: tokenContracts,
|
|
15965
|
+
query: {
|
|
15966
|
+
enabled: !!address && COMMON_TOKENS.length > 0
|
|
15967
|
+
}
|
|
15968
|
+
});
|
|
15969
|
+
const { data: tokenBalances, isLoading: tokenBalancesLoading, refetch: refetchTokenBalances } = readContractsResult;
|
|
15970
|
+
const getAllAssets = () => {
|
|
15971
|
+
const assets = [];
|
|
15972
|
+
if (nativeBalance) {
|
|
15973
|
+
assets.push({
|
|
15974
|
+
type: "native",
|
|
15975
|
+
name: "Lumia",
|
|
15976
|
+
symbol: "LUMIA",
|
|
15977
|
+
balance: nativeBalance.value.toString(),
|
|
15978
|
+
formattedBalance: parseFloat(nativeBalance.formatted).toFixed(4),
|
|
15979
|
+
decimals: 18
|
|
15980
|
+
});
|
|
15981
|
+
}
|
|
15982
|
+
if (tokenBalances && COMMON_TOKENS.length > 0) {
|
|
15983
|
+
tokenBalances.forEach((balance, index) => {
|
|
15984
|
+
const token = COMMON_TOKENS[index];
|
|
15985
|
+
if (balance.status === "success" && balance.result) {
|
|
15986
|
+
const balanceValue = balance.result;
|
|
15987
|
+
const formattedBalance = formatUnits6(balanceValue, token.decimals);
|
|
15988
|
+
assets.push({
|
|
15989
|
+
type: "erc20",
|
|
15990
|
+
address: token.address,
|
|
15991
|
+
name: token.name,
|
|
15992
|
+
symbol: token.symbol,
|
|
15993
|
+
balance: balanceValue.toString(),
|
|
15994
|
+
formattedBalance: parseFloat(formattedBalance).toFixed(4),
|
|
15995
|
+
decimals: token.decimals,
|
|
15996
|
+
logo: token.logo
|
|
15997
|
+
});
|
|
15998
|
+
}
|
|
15999
|
+
});
|
|
16000
|
+
}
|
|
16001
|
+
return assets;
|
|
16002
|
+
};
|
|
16003
|
+
const getTokenBalance = (tokenAddress) => {
|
|
16004
|
+
const tokenIndex = COMMON_TOKENS.findIndex(
|
|
16005
|
+
(token2) => token2.address.toLowerCase() === tokenAddress.toLowerCase()
|
|
16006
|
+
);
|
|
16007
|
+
if (tokenIndex === -1 || !tokenBalances?.[tokenIndex]) {
|
|
16008
|
+
return null;
|
|
16009
|
+
}
|
|
16010
|
+
const balance = tokenBalances[tokenIndex];
|
|
16011
|
+
const token = COMMON_TOKENS[tokenIndex];
|
|
16012
|
+
if (balance.status === "success" && balance.result) {
|
|
16013
|
+
const balanceValue = balance.result;
|
|
16014
|
+
const formattedBalance = formatUnits6(balanceValue, token.decimals);
|
|
16015
|
+
return {
|
|
16016
|
+
address: token.address,
|
|
16017
|
+
name: token.name,
|
|
16018
|
+
symbol: token.symbol,
|
|
16019
|
+
decimals: token.decimals,
|
|
16020
|
+
balance: balanceValue.toString(),
|
|
16021
|
+
formattedBalance: parseFloat(formattedBalance).toFixed(4),
|
|
16022
|
+
logo: token.logo
|
|
16023
|
+
};
|
|
16024
|
+
}
|
|
16025
|
+
return null;
|
|
16026
|
+
};
|
|
16027
|
+
const refreshBalances = async () => {
|
|
16028
|
+
await Promise.all([
|
|
16029
|
+
refetchNativeBalance(),
|
|
16030
|
+
refetchTokenBalances()
|
|
16031
|
+
]);
|
|
16032
|
+
};
|
|
16033
|
+
return {
|
|
16034
|
+
nativeBalance,
|
|
16035
|
+
tokenBalances,
|
|
16036
|
+
assets: getAllAssets(),
|
|
16037
|
+
getTokenBalance,
|
|
16038
|
+
refreshBalances,
|
|
16039
|
+
isLoading: nativeBalanceLoading || tokenBalancesLoading,
|
|
16040
|
+
isConnected: !!address
|
|
16041
|
+
};
|
|
16042
|
+
}
|
|
16043
|
+
function useTokenInfo(tokenAddress) {
|
|
16044
|
+
const readContractsResult = useReadContracts({
|
|
16045
|
+
contracts: [
|
|
16046
|
+
{ address: tokenAddress, abi: erc20Abi, functionName: "name", chainId: lumiaBeam.id },
|
|
16047
|
+
{ address: tokenAddress, abi: erc20Abi, functionName: "symbol", chainId: lumiaBeam.id },
|
|
16048
|
+
{ address: tokenAddress, abi: erc20Abi, functionName: "decimals", chainId: lumiaBeam.id }
|
|
16049
|
+
]
|
|
16050
|
+
});
|
|
16051
|
+
const { data: tokenData, isLoading } = readContractsResult;
|
|
16052
|
+
if (!tokenData || isLoading) {
|
|
16053
|
+
return { isLoading, tokenInfo: null };
|
|
16054
|
+
}
|
|
16055
|
+
const [nameResult, symbolResult, decimalsResult] = tokenData;
|
|
16056
|
+
if (nameResult.status === "success" && symbolResult.status === "success" && decimalsResult.status === "success") {
|
|
16057
|
+
return {
|
|
16058
|
+
isLoading: false,
|
|
16059
|
+
tokenInfo: {
|
|
16060
|
+
name: nameResult.result,
|
|
16061
|
+
symbol: symbolResult.result,
|
|
16062
|
+
decimals: decimalsResult.result,
|
|
16063
|
+
address: tokenAddress
|
|
16064
|
+
}
|
|
16065
|
+
};
|
|
16066
|
+
}
|
|
16067
|
+
return { isLoading: false, tokenInfo: null };
|
|
16068
|
+
}
|
|
16069
|
+
function useTokenBalance(tokenAddress, userAddress) {
|
|
16070
|
+
const { data: balance, isLoading, refetch } = useReadContract2({
|
|
16071
|
+
address: tokenAddress,
|
|
16072
|
+
abi: erc20Abi,
|
|
16073
|
+
functionName: "balanceOf",
|
|
16074
|
+
args: userAddress ? [userAddress] : void 0,
|
|
16075
|
+
chainId: lumiaBeam.id,
|
|
16076
|
+
query: {
|
|
16077
|
+
enabled: !!userAddress
|
|
16078
|
+
}
|
|
16079
|
+
});
|
|
16080
|
+
const { tokenInfo } = useTokenInfo(tokenAddress);
|
|
16081
|
+
const formattedBalance = React14.useMemo(() => {
|
|
16082
|
+
if (!balance || !tokenInfo) return "0";
|
|
16083
|
+
return formatUnits6(balance, tokenInfo.decimals);
|
|
16084
|
+
}, [balance, tokenInfo]);
|
|
16085
|
+
return {
|
|
16086
|
+
balance,
|
|
16087
|
+
formattedBalance,
|
|
16088
|
+
tokenInfo,
|
|
16089
|
+
isLoading,
|
|
16090
|
+
refetch
|
|
16091
|
+
};
|
|
16092
|
+
}
|
|
16093
|
+
|
|
15361
16094
|
// src/modules/smartAccountTransactions.ts
|
|
15362
16095
|
init_base();
|
|
15363
16096
|
import { parseAbiItem } from "viem";
|
|
@@ -15456,6 +16189,7 @@ export {
|
|
|
15456
16189
|
signTypedData,
|
|
15457
16190
|
updateUserProfile,
|
|
15458
16191
|
useAssets,
|
|
16192
|
+
useErc3643Compliance,
|
|
15459
16193
|
useLogout,
|
|
15460
16194
|
useLumiaPassportAccountSession,
|
|
15461
16195
|
useLumiaPassportAddress,
|