@lumiapassport/ui-kit 1.3.4 → 1.4.2
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/main.js +1 -1
- package/dist/iframe/main.js.map +1 -1
- package/dist/index.cjs +833 -1009
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +909 -1085
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3524,7 +3524,7 @@ var init_clients = __esm({
|
|
|
3524
3524
|
});
|
|
3525
3525
|
|
|
3526
3526
|
// src/styles/built.css
|
|
3527
|
-
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{background-color:hsl(var(--background));color:hsl(var(--foreground))}.lumia-scope,.lumia-scope *,.lumia-scope :after,.lumia-scope :before{box-sizing:border-box;border-width:0;border-style:solid}.lumia-scope input,.lumia-scope select,.lumia-scope textarea{font:inherit;color:inherit;margin:0;background-color:transparent}.lumia-scope button{font:inherit;margin:0}.lumia-scope input[type=search]::-webkit-search-cancel-button,.lumia-scope input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.lumia-scope,.lumia-scope *,.lumia-scope .lumia-heading,.lumia-scope [data-radix-dialog-content],.lumia-scope [data-radix-dialog-content] *,.lumia-scope h1,.lumia-scope h2,.lumia-scope h3,.lumia-scope h4,.lumia-scope h5,.lumia-scope h6{font-family:system-ui,-apple-system,sans-serif!important}.lumia-scope .lumia-heading{font-weight:700}.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 .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 .bottom-full{bottom:100%}.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 .left-\\[50\\%\\]{left:50%}.lumia-scope .right-2{right:.5rem}.lumia-scope .right-3{right:.75rem}.lumia-scope .right-4{right:1rem}.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-\\[50\\%\\]{top:50%}.lumia-scope .z-10{z-index:10}.lumia-scope .z-50{z-index:50}.lumia-scope .z-\\[2147483646\\]{z-index:2147483646}.lumia-scope .z-\\[2147483647\\]{z-index:2147483647}.lumia-scope .z-\\[60\\]{z-index:60}.lumia-scope .-m-px{margin:-1px}.lumia-scope .-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.lumia-scope .mx-auto{margin-left:auto;margin-right:auto}.lumia-scope .my-6{margin-top:1.5rem;margin-bottom:1.5rem}.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-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 .mt-0{margin-top:0}.lumia-scope .mt-0\\.5{margin-top:.125rem}.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 .size-4{width:1rem;height:1rem}.lumia-scope .\\!h-5{height:1.25rem!important}.lumia-scope .\\!h-6{height:1.5rem!important}.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-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-8{height:2rem}.lumia-scope .h-9{height:2.25rem}.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-\\[60vh\\]{max-height:60vh}.lumia-scope .max-h-\\[80vh\\]{max-height:80vh}.lumia-scope .\\!w-5{width:1.25rem!important}.lumia-scope .\\!w-6{width:1.5rem!important}.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-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-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-\\[280px\\]{min-width:280px}.lumia-scope .max-w-2xl{max-width:42rem}.lumia-scope .max-w-\\[380px\\]{max-width:380px}.lumia-scope .max-w-\\[400px\\]{max-width:400px}.lumia-scope .max-w-\\[500px\\]{max-width:500px}.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-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-y-1{--tw-translate-y:-0.25rem}.lumia-scope .-translate-y-1,.lumia-scope .-translate-y-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-y-1\\/2{--tw-translate-y:-50%}.lumia-scope .translate-x-\\[-50\\%\\]{--tw-translate-x:-50%}.lumia-scope .translate-x-\\[-50\\%\\],.lumia-scope .translate-y-\\[-50\\%\\]{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-\\[-50\\%\\]{--tw-translate-y:-50%}.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 spin{to{transform:rotate(1turn)}}.lumia-scope .animate-spin{animation:spin 1s linear infinite}.lumia-scope .cursor-not-allowed{cursor:not-allowed}.lumia-scope .cursor-pointer{cursor:pointer}.lumia-scope .select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.lumia-scope .resize{resize:both}.lumia-scope .list-inside{list-style-position:inside}.lumia-scope .list-disc{list-style-type:disc}.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 .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 .items-start{align-items:flex-start}.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 .gap-0{gap:0}.lumia-scope .gap-1{gap:.25rem}.lumia-scope .gap-2{gap:.5rem}.lumia-scope .gap-3{gap:.75rem}.lumia-scope .gap-4{gap:1rem}.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 .truncate{overflow:hidden;text-overflow:ellipsis}.lumia-scope .truncate,.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-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-full{border-radius:9999px}.lumia-scope .rounded-lg{border-radius:var(--radius)}.lumia-scope .rounded-md{border-radius:calc(var(--radius) - 2px)}.lumia-scope .rounded-sm{border-radius:calc(var(--radius) - 4px)}.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-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/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-600{--tw-border-opacity:1;border-color:rgb(37 99 235/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-blue-900\\/40{border-color:rgba(30,58,138,.4)}.lumia-scope .border-border{border-color:hsl(var(--border))}.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-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-input{border-color:hsl(var(--input))}.lumia-scope .border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/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-orange-900\\/40{border-color:rgba(124,45,18,.4)}.lumia-scope .border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/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-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-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-transparent{background-color:transparent!important}.lumia-scope .bg-\\[\\#0088cc\\]{--tw-bg-opacity:1;background-color:rgb(0 136 204/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#2456f0\\]{--tw-bg-opacity:1;background-color:rgb(36 86 240/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#db2777\\]{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#fde2f3\\]{--tw-bg-opacity:1;background-color:rgb(253 226 243/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/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-900\\/30{background-color:rgba(120,53,15,.3)}.lumia-scope .bg-background{background-color:hsl(var(--background))}.lumia-scope .bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.lumia-scope .bg-black\\/50{background-color:rgba(0,0,0,.5)}.lumia-scope .bg-black\\/80{background-color:rgba(0,0,0,.8)}.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-50\\/50{background-color:rgba(239,246,255,.5)}.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-900\\/20{background-color:rgba(30,58,138,.2)}.lumia-scope .bg-blue-900\\/30{background-color:rgba(30,58,138,.3)}.lumia-scope .bg-blue-900\\/40{background-color:rgba(30,58,138,.4)}.lumia-scope .bg-card{background-color:hsl(var(--card))}.lumia-scope .bg-destructive{background-color:hsl(var(--destructive))}.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-800\\/50{background-color:rgba(31,41,55,.5)}.lumia-scope .bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-900\\/40{background-color:rgba(17,24,39,.4)}.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-900\\/30{background-color:rgba(20,83,45,.3)}.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-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-900\\/20{background-color:rgba(124,45,18,.2)}.lumia-scope .bg-orange-900\\/30{background-color:rgba(124,45,18,.3)}.lumia-scope .bg-orange-900\\/40{background-color:rgba(124,45,18,.4)}.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-primary{background-color:hsl(var(--primary))}.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-50\\/50{background-color:rgba(250,245,255,.5)}.lumia-scope .bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/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-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/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-900\\/30{background-color:rgba(127,29,29,.3)}.lumia-scope .bg-secondary{background-color:hsl(var(--secondary))}.lumia-scope .bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-50\\/50{background-color:rgba(240,249,255,.5)}.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-2\\.5{padding:.625rem}.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 .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-6{padding-left:1.5rem;padding-right:1.5rem}.lumia-scope .px-8{padding-left:2rem;padding-right:2rem}.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 .pb-4{padding-bottom:1rem}.lumia-scope .pl-11{padding-left:2.75rem}.lumia-scope .pr-10{padding-right:2.5rem}.lumia-scope .pr-16{padding-right:4rem}.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 .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-\\[10px\\]{font-size:10px}.lumia-scope .text-\\[11px\\]{font-size:11px}.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-semibold{font-weight:600}.lumia-scope .italic{font-style:italic}.lumia-scope .leading-none{line-height:1}.lumia-scope .leading-tight{line-height:1.25}.lumia-scope .tracking-tight{letter-spacing:-.025em}.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-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-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-400\\/80{color:rgba(96,165,250,.8)}.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-card-foreground{color:hsl(var(--card-foreground))}.lumia-scope .text-destructive{color:hsl(var(--destructive))}.lumia-scope .text-destructive-foreground{color:hsl(var(--destructive-foreground))}.lumia-scope .text-foreground{color:hsl(var(--foreground))}.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-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-muted-foreground{color:hsl(var(--muted-foreground))}.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-400\\/80{color:rgba(251,146,60,.8)}.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-primary{color:hsl(var(--primary))}.lumia-scope .text-primary-foreground{color:hsl(var(--primary-foreground))}.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-600{--tw-text-opacity:1;color:rgb(147 51 234/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-secondary-foreground{color:hsl(var(--secondary-foreground))}.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-4{text-underline-offset:4px}.lumia-scope .opacity-0{opacity:0}.lumia-scope .opacity-100{opacity:1}.lumia-scope .opacity-40{opacity:.4}.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-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.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 .outline{outline-style:solid}.lumia-scope .ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.lumia-scope .blur{--tw-blur:blur(8px)}.lumia-scope .blur,.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-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-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 .file\\:mr-4::file-selector-button{margin-right:1rem}.lumia-scope .file\\:rounded::file-selector-button{border-radius:.25rem}.lumia-scope .file\\:border-0::file-selector-button{border-width:0}.lumia-scope .file\\:bg-gray-700::file-selector-button{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .file\\:bg-purple-50::file-selector-button{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.lumia-scope .file\\:bg-transparent::file-selector-button{background-color:transparent}.lumia-scope .file\\:px-4::file-selector-button{padding-left:1rem;padding-right:1rem}.lumia-scope .file\\:py-2::file-selector-button{padding-top:.5rem;padding-bottom:.5rem}.lumia-scope .file\\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.lumia-scope .file\\:font-medium::file-selector-button{font-weight:500}.lumia-scope .file\\:font-semibold::file-selector-button{font-weight:600}.lumia-scope .file\\:text-gray-200::file-selector-button{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .file\\:text-purple-700::file-selector-button{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.lumia-scope .placeholder\\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .placeholder\\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .placeholder\\:text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .placeholder\\:text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .hover\\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05;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 .hover\\:bg-\\[\\#0077bb\\]:hover{--tw-bg-opacity:1;background-color:rgb(0 119 187/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-\\[\\#1e49d8\\]:hover{--tw-bg-opacity:1;background-color:rgb(30 73 216/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-\\[\\#be185d\\]:hover{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-\\[\\#f7c1df\\]:hover{--tw-bg-opacity:1;background-color:rgb(247 193 223/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-accent:hover{background-color:hsl(var(--accent))}.lumia-scope .hover\\:bg-blue-100:hover{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-blue-200:hover{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-blue-900\\/60:hover{background-color:rgba(30,58,138,.6)}.lumia-scope .hover\\:bg-destructive\\/90:hover{background-color:hsl(var(--destructive)/.9)}.lumia-scope .hover\\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.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-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-green-100:hover{--tw-bg-opacity:1;background-color:rgb(220 252 231/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-green-900\\/30:hover{background-color:rgba(20,83,45,.3)}.lumia-scope .hover\\:bg-orange-200:hover{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-orange-900\\/60:hover{background-color:rgba(124,45,18,.6)}.lumia-scope .hover\\:bg-pink-300:hover{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-pink-700:hover{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-primary\\/80:hover{background-color:hsl(var(--primary)/.8)}.lumia-scope .hover\\:bg-purple-100:hover{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-purple-600:hover{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-200:hover{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/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-red-900\\/20:hover{background-color:rgba(127,29,29,.2)}.lumia-scope .hover\\:bg-secondary\\/80:hover{background-color:hsl(var(--secondary)/.8)}.lumia-scope .hover\\:bg-slate-800:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/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\\:from-purple-600:hover{--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 .hover\\:from-purple-700:hover{--tw-gradient-from:#7e22ce var(--tw-gradient-from-position);--tw-gradient-to:rgba(126,34,206,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .hover\\:to-blue-700:hover{--tw-gradient-to:#1d4ed8 var(--tw-gradient-to-position)}.lumia-scope .hover\\:text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-blue-400:hover{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-blue-600:hover{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-blue-700:hover{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-blue-800:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.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\\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-red-300:hover{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-red-600:hover{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-red-700:hover{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.lumia-scope .hover\\:underline:hover{text-decoration-line:underline}.lumia-scope .hover\\:no-underline:hover{text-decoration-line:none}.lumia-scope .hover\\:opacity-80:hover{opacity:.8}.lumia-scope .hover\\:shadow-xl:hover{--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);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .hover\\:file\\:bg-gray-600::file-selector-button:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:file\\:bg-purple-100::file-selector-button:hover{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.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-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.lumia-scope .focus\\:ring-gray-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity,1))}.lumia-scope .focus\\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.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-2: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-blue-500:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.lumia-scope .focus-visible\\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.lumia-scope .focus-visible\\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px}.lumia-scope .focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.lumia-scope .disabled\\:pointer-events-none:disabled{pointer-events:none}.lumia-scope .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.lumia-scope .disabled\\:opacity-100:disabled{opacity:1}.lumia-scope .disabled\\:opacity-50:disabled{opacity:.5}.lumia-scope :is(.group:hover .group-hover\\:opacity-100){opacity:1}@media (min-width:640px){.lumia-scope .sm\\:mt-0{margin-top:0}.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\\:rounded-lg{border-radius:var(--radius)}.lumia-scope .sm\\:text-left{text-align:left}}@media (prefers-color-scheme:dark){.lumia-scope .dark\\:border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.lumia-scope .dark\\:bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.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\\:text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.lumia-scope .dark\\:text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .dark\\:text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .dark\\:placeholder\\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .dark\\:placeholder\\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .dark\\:hover\\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/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 .dark\\:hover\\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.lumia-scope .dark\\:focus\\:ring-gray-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(75 85 99/var(--tw-ring-opacity,1))}}.lumia-scope :is(.\\[\\&_svg\\]\\:pointer-events-none svg){pointer-events:none}.lumia-scope :is(.\\[\\&_svg\\]\\:size-4 svg){width:1rem;height:1rem}.lumia-scope :is(.\\[\\&_svg\\]\\:\\!h-5 svg){height:1.25rem!important}.lumia-scope :is(.\\[\\&_svg\\]\\:\\!h-6 svg){height:1.5rem!important}.lumia-scope :is(.\\[\\&_svg\\]\\:\\!w-5 svg){width:1.25rem!important}.lumia-scope :is(.\\[\\&_svg\\]\\:\\!w-6 svg){width:1.5rem!important}.lumia-scope :is(.\\[\\&_svg\\]\\:shrink-0 svg){flex-shrink:0}';
|
|
3527
|
+
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{background-color:hsl(var(--background));color:hsl(var(--foreground))}.lumia-scope,.lumia-scope *,.lumia-scope :after,.lumia-scope :before{box-sizing:border-box;border-width:0;border-style:solid}.lumia-scope input,.lumia-scope select,.lumia-scope textarea{font:inherit;color:inherit;margin:0;background-color:transparent}.lumia-scope button{font:inherit;margin:0}.lumia-scope input[type=search]::-webkit-search-cancel-button,.lumia-scope input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.lumia-scope,.lumia-scope *,.lumia-scope .lumia-heading,.lumia-scope [data-radix-dialog-content],.lumia-scope [data-radix-dialog-content] *,.lumia-scope h1,.lumia-scope h2,.lumia-scope h3,.lumia-scope h4,.lumia-scope h5,.lumia-scope h6{font-family:system-ui,-apple-system,sans-serif!important}.lumia-scope .lumia-heading{font-weight:700}.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 .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 .bottom-full{bottom:100%}.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 .left-\\[50\\%\\]{left:50%}.lumia-scope .right-2{right:.5rem}.lumia-scope .right-3{right:.75rem}.lumia-scope .right-4{right:1rem}.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-\\[50\\%\\]{top:50%}.lumia-scope .z-10{z-index:10}.lumia-scope .z-50{z-index:50}.lumia-scope .z-\\[2147483646\\]{z-index:2147483646}.lumia-scope .z-\\[2147483647\\]{z-index:2147483647}.lumia-scope .z-\\[60\\]{z-index:60}.lumia-scope .-m-px{margin:-1px}.lumia-scope .-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.lumia-scope .mx-auto{margin-left:auto;margin-right:auto}.lumia-scope .my-6{margin-top:1.5rem;margin-bottom:1.5rem}.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-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 .mt-0{margin-top:0}.lumia-scope .mt-0\\.5{margin-top:.125rem}.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 .size-4{width:1rem;height:1rem}.lumia-scope .\\!h-5{height:1.25rem!important}.lumia-scope .\\!h-6{height:1.5rem!important}.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-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-8{height:2rem}.lumia-scope .h-9{height:2.25rem}.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-\\[60vh\\]{max-height:60vh}.lumia-scope .max-h-\\[80vh\\]{max-height:80vh}.lumia-scope .\\!w-5{width:1.25rem!important}.lumia-scope .\\!w-6{width:1.5rem!important}.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-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-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-\\[280px\\]{min-width:280px}.lumia-scope .max-w-2xl{max-width:42rem}.lumia-scope .max-w-\\[380px\\]{max-width:380px}.lumia-scope .max-w-\\[400px\\]{max-width:400px}.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-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-y-1{--tw-translate-y:-0.25rem}.lumia-scope .-translate-y-1,.lumia-scope .-translate-y-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-y-1\\/2{--tw-translate-y:-50%}.lumia-scope .translate-x-\\[-50\\%\\]{--tw-translate-x:-50%}.lumia-scope .translate-x-\\[-50\\%\\],.lumia-scope .translate-y-\\[-50\\%\\]{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-\\[-50\\%\\]{--tw-translate-y:-50%}.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 spin{to{transform:rotate(1turn)}}.lumia-scope .animate-spin{animation:spin 1s linear infinite}.lumia-scope .cursor-not-allowed{cursor:not-allowed}.lumia-scope .cursor-pointer{cursor:pointer}.lumia-scope .select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.lumia-scope .resize{resize:both}.lumia-scope .list-inside{list-style-position:inside}.lumia-scope .list-disc{list-style-type:disc}.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 .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 .items-start{align-items:flex-start}.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 .gap-0{gap:0}.lumia-scope .gap-1{gap:.25rem}.lumia-scope .gap-2{gap:.5rem}.lumia-scope .gap-3{gap:.75rem}.lumia-scope .gap-4{gap:1rem}.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 .truncate{overflow:hidden;text-overflow:ellipsis}.lumia-scope .truncate,.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-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-full{border-radius:9999px}.lumia-scope .rounded-lg{border-radius:var(--radius)}.lumia-scope .rounded-md{border-radius:calc(var(--radius) - 2px)}.lumia-scope .rounded-sm{border-radius:calc(var(--radius) - 4px)}.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-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/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-amber-900\\/60{border-color:rgba(120,53,15,.6)}.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-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-800\\/60{border-color:rgba(30,64,175,.6)}.lumia-scope .border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity,1))}.lumia-scope .border-blue-900\\/40{border-color:rgba(30,58,138,.4)}.lumia-scope .border-blue-900\\/60{border-color:rgba(30,58,138,.6)}.lumia-scope .border-border{border-color:hsl(var(--border))}.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-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-green-900\\/50{border-color:rgba(20,83,45,.5)}.lumia-scope .border-green-900\\/60{border-color:rgba(20,83,45,.6)}.lumia-scope .border-input{border-color:hsl(var(--input))}.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-800\\/60{border-color:rgba(154,52,18,.6)}.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-800\\/60{border-color:rgba(107,33,168,.6)}.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-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity,1))}.lumia-scope .border-red-900\\/60{border-color:rgba(127,29,29,.6)}.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-800\\/60{border-color:rgba(7,89,133,.6)}.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-transparent{background-color:transparent!important}.lumia-scope .bg-\\[\\#0088cc\\]{--tw-bg-opacity:1;background-color:rgb(0 136 204/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#2456f0\\]{--tw-bg-opacity:1;background-color:rgb(36 86 240/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#db2777\\]{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#fde2f3\\]{--tw-bg-opacity:1;background-color:rgb(253 226 243/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/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-amber-950\\/50{background-color:rgba(69,26,3,.5)}.lumia-scope .bg-background{background-color:hsl(var(--background))}.lumia-scope .bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.lumia-scope .bg-black\\/50{background-color:rgba(0,0,0,.5)}.lumia-scope .bg-black\\/80{background-color:rgba(0,0,0,.8)}.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-50\\/50{background-color:rgba(239,246,255,.5)}.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-900\\/20{background-color:rgba(30,58,138,.2)}.lumia-scope .bg-blue-900\\/30{background-color:rgba(30,58,138,.3)}.lumia-scope .bg-blue-900\\/40{background-color:rgba(30,58,138,.4)}.lumia-scope .bg-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-950\\/50{background-color:rgba(23,37,84,.5)}.lumia-scope .bg-blue-950\\/60{background-color:rgba(23,37,84,.6)}.lumia-scope .bg-card{background-color:hsl(var(--card))}.lumia-scope .bg-destructive{background-color:hsl(var(--destructive))}.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-800\\/50{background-color:rgba(31,41,55,.5)}.lumia-scope .bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-900\\/40{background-color:rgba(17,24,39,.4)}.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-900\\/30{background-color:rgba(20,83,45,.3)}.lumia-scope .bg-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-950\\/50{background-color:rgba(5,46,22,.5)}.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-800\\/50{background-color:rgba(154,52,18,.5)}.lumia-scope .bg-orange-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-900\\/30{background-color:rgba(124,45,18,.3)}.lumia-scope .bg-orange-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-950\\/80{background-color:rgba(67,20,7,.8)}.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-primary{background-color:hsl(var(--primary))}.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-50\\/50{background-color:rgba(250,245,255,.5)}.lumia-scope .bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/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-purple-950\\/60{background-color:rgba(59,7,100,.6)}.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-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/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-900\\/30{background-color:rgba(127,29,29,.3)}.lumia-scope .bg-red-900\\/40{background-color:rgba(127,29,29,.4)}.lumia-scope .bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-950\\/50{background-color:rgba(69,10,10,.5)}.lumia-scope .bg-secondary{background-color:hsl(var(--secondary))}.lumia-scope .bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-50\\/50{background-color:rgba(240,249,255,.5)}.lumia-scope .bg-sky-950{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-950\\/60{background-color:rgba(8,47,73,.6)}.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-2\\.5{padding:.625rem}.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 .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-6{padding-left:1.5rem;padding-right:1.5rem}.lumia-scope .px-8{padding-left:2rem;padding-right:2rem}.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 .pb-4{padding-bottom:1rem}.lumia-scope .pl-11{padding-left:2.75rem}.lumia-scope .pr-10{padding-right:2.5rem}.lumia-scope .pr-16{padding-right:4rem}.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 .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-\\[10px\\]{font-size:10px}.lumia-scope .text-\\[11px\\]{font-size:11px}.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-semibold{font-weight:600}.lumia-scope .italic{font-style:italic}.lumia-scope .leading-none{line-height:1}.lumia-scope .leading-tight{line-height:1.25}.lumia-scope .tracking-tight{letter-spacing:-.025em}.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-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-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-400\\/80{color:rgba(96,165,250,.8)}.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-card-foreground{color:hsl(var(--card-foreground))}.lumia-scope .text-destructive{color:hsl(var(--destructive))}.lumia-scope .text-destructive-foreground{color:hsl(var(--destructive-foreground))}.lumia-scope .text-foreground{color:hsl(var(--foreground))}.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-muted-foreground{color:hsl(var(--muted-foreground))}.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-300\\/90{color:hsla(31,97%,72%,.9)}.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-primary{color:hsl(var(--primary))}.lumia-scope .text-primary-foreground{color:hsl(var(--primary-foreground))}.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-600{--tw-text-opacity:1;color:rgb(147 51 234/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-secondary-foreground{color:hsl(var(--secondary-foreground))}.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-4{text-underline-offset:4px}.lumia-scope .opacity-0{opacity:0}.lumia-scope .opacity-100{opacity:1}.lumia-scope .opacity-40{opacity:.4}.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-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.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 .outline{outline-style:solid}.lumia-scope .ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.lumia-scope .blur{--tw-blur:blur(8px)}.lumia-scope .blur,.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-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-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 .\\[background\\:var\\(--lumia-bg\\)\\]{background:var(--lumia-bg)}.lumia-scope .\\[border-color\\:var\\(--lumia-border\\)\\]{border-color:var(--lumia-border)}.lumia-scope .\\[color\\:var\\(--lumia-text\\)\\]{color:var(--lumia-text)}.lumia-scope .\\[color\\:var\\(--lumia-text-muted\\)\\]{color:var(--lumia-text-muted)}.lumia-scope .\\[color\\:var\\(--lumia-text-secondary\\)\\]{color:var(--lumia-text-secondary)}.lumia-scope .file\\:mr-4::file-selector-button{margin-right:1rem}.lumia-scope .file\\:rounded::file-selector-button{border-radius:.25rem}.lumia-scope .file\\:border-0::file-selector-button{border-width:0}.lumia-scope .file\\:bg-gray-700::file-selector-button{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .file\\:bg-purple-50::file-selector-button{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.lumia-scope .file\\:bg-transparent::file-selector-button{background-color:transparent}.lumia-scope .file\\:px-4::file-selector-button{padding-left:1rem;padding-right:1rem}.lumia-scope .file\\:py-2::file-selector-button{padding-top:.5rem;padding-bottom:.5rem}.lumia-scope .file\\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.lumia-scope .file\\:font-medium::file-selector-button{font-weight:500}.lumia-scope .file\\:font-semibold::file-selector-button{font-weight:600}.lumia-scope .file\\:text-gray-200::file-selector-button{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .file\\:text-purple-700::file-selector-button{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.lumia-scope .placeholder\\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .placeholder\\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .placeholder\\:text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .placeholder\\:text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .hover\\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05;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 .hover\\:bg-\\[\\#0077bb\\]:hover{--tw-bg-opacity:1;background-color:rgb(0 119 187/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-\\[\\#1e49d8\\]:hover{--tw-bg-opacity:1;background-color:rgb(30 73 216/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-\\[\\#be185d\\]:hover{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-\\[\\#f7c1df\\]:hover{--tw-bg-opacity:1;background-color:rgb(247 193 223/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-accent:hover{background-color:hsl(var(--accent))}.lumia-scope .hover\\:bg-blue-100:hover{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-blue-200:hover{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-blue-900\\/60:hover{background-color:rgba(30,58,138,.6)}.lumia-scope .hover\\:bg-destructive\\/90:hover{background-color:hsl(var(--destructive)/.9)}.lumia-scope .hover\\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.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-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-green-100:hover{--tw-bg-opacity:1;background-color:rgb(220 252 231/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-green-900\\/30:hover{background-color:rgba(20,83,45,.3)}.lumia-scope .hover\\:bg-orange-200:hover{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-orange-700\\/60:hover{background-color:rgba(194,65,12,.6)}.lumia-scope .hover\\:bg-pink-300:hover{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-pink-700:hover{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-primary\\/80:hover{background-color:hsl(var(--primary)/.8)}.lumia-scope .hover\\:bg-purple-100:hover{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-purple-600:hover{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-200:hover{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/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-red-900\\/20:hover{background-color:rgba(127,29,29,.2)}.lumia-scope .hover\\:bg-red-900\\/60:hover{background-color:rgba(127,29,29,.6)}.lumia-scope .hover\\:bg-secondary\\/80:hover{background-color:hsl(var(--secondary)/.8)}.lumia-scope .hover\\:bg-slate-800:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/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\\:from-purple-600:hover{--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 .hover\\:from-purple-700:hover{--tw-gradient-from:#7e22ce var(--tw-gradient-from-position);--tw-gradient-to:rgba(126,34,206,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .hover\\:to-blue-700:hover{--tw-gradient-to:#1d4ed8 var(--tw-gradient-to-position)}.lumia-scope .hover\\:text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-blue-400:hover{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-blue-600:hover{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-blue-700:hover{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-blue-800:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.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\\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-red-300:hover{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-red-600:hover{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-red-700:hover{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.lumia-scope .hover\\:underline:hover{text-decoration-line:underline}.lumia-scope .hover\\:no-underline:hover{text-decoration-line:none}.lumia-scope .hover\\:opacity-80:hover{opacity:.8}.lumia-scope .hover\\:shadow-xl:hover{--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);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .hover\\:file\\:bg-gray-600::file-selector-button:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:file\\:bg-purple-100::file-selector-button:hover{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.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-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.lumia-scope .focus\\:ring-gray-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity,1))}.lumia-scope .focus\\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.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-2: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-blue-500:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.lumia-scope .focus-visible\\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.lumia-scope .focus-visible\\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px}.lumia-scope .focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.lumia-scope .disabled\\:pointer-events-none:disabled{pointer-events:none}.lumia-scope .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.lumia-scope .disabled\\:opacity-100:disabled{opacity:1}.lumia-scope .disabled\\:opacity-50:disabled{opacity:.5}.lumia-scope :is(.group:hover .group-hover\\:opacity-100){opacity:1}@media (min-width:640px){.lumia-scope .sm\\:mt-0{margin-top:0}.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\\:rounded-lg{border-radius:var(--radius)}.lumia-scope .sm\\:text-left{text-align:left}}@media (prefers-color-scheme:dark){.lumia-scope .dark\\:border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.lumia-scope .dark\\:bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.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\\:text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.lumia-scope .dark\\:text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .dark\\:text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .dark\\:placeholder\\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .dark\\:placeholder\\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .dark\\:hover\\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/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 .dark\\:hover\\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.lumia-scope .dark\\:focus\\:ring-gray-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(75 85 99/var(--tw-ring-opacity,1))}}.lumia-scope :is(.\\[\\&_svg\\]\\:pointer-events-none svg){pointer-events:none}.lumia-scope :is(.\\[\\&_svg\\]\\:size-4 svg){width:1rem;height:1rem}.lumia-scope :is(.\\[\\&_svg\\]\\:\\!h-5 svg){height:1.25rem!important}.lumia-scope :is(.\\[\\&_svg\\]\\:\\!h-6 svg){height:1.5rem!important}.lumia-scope :is(.\\[\\&_svg\\]\\:\\!w-5 svg){width:1.25rem!important}.lumia-scope :is(.\\[\\&_svg\\]\\:\\!w-6 svg){width:1.5rem!important}.lumia-scope :is(.\\[\\&_svg\\]\\:shrink-0 svg){flex-shrink:0}';
|
|
3528
3528
|
|
|
3529
3529
|
// src/context/LumiaPassportContext.tsx
|
|
3530
3530
|
init_lumiaPassport();
|
|
@@ -3906,7 +3906,7 @@ var rainbowTheme = {
|
|
|
3906
3906
|
|
|
3907
3907
|
// src/internal/hooks/useTheme.ts
|
|
3908
3908
|
import { useMemo, useState as useState2, useEffect as useEffect2 } from "react";
|
|
3909
|
-
function useTheme(configTheme) {
|
|
3909
|
+
function useTheme(configTheme, customColors) {
|
|
3910
3910
|
const [systemTheme, setSystemTheme] = useState2("light");
|
|
3911
3911
|
useEffect2(() => {
|
|
3912
3912
|
if (typeof window === "undefined" || !window.matchMedia) return;
|
|
@@ -3918,43 +3918,83 @@ function useTheme(configTheme) {
|
|
|
3918
3918
|
}, []);
|
|
3919
3919
|
const resolvedTheme = useMemo(() => configTheme === "auto" ? systemTheme : configTheme, [configTheme, systemTheme]);
|
|
3920
3920
|
const isDark = resolvedTheme === "dark";
|
|
3921
|
+
const currentCustomColors = useMemo(() => {
|
|
3922
|
+
return isDark ? customColors?.dark : customColors?.light;
|
|
3923
|
+
}, [isDark, customColors]);
|
|
3924
|
+
useEffect2(() => {
|
|
3925
|
+
if (typeof document === "undefined") return;
|
|
3926
|
+
const root = document.documentElement;
|
|
3927
|
+
if (currentCustomColors?.background) {
|
|
3928
|
+
root.style.setProperty("--lumia-bg", currentCustomColors.background);
|
|
3929
|
+
} else {
|
|
3930
|
+
root.style.removeProperty("--lumia-bg");
|
|
3931
|
+
}
|
|
3932
|
+
if (currentCustomColors?.text) {
|
|
3933
|
+
root.style.setProperty("--lumia-text", currentCustomColors.text);
|
|
3934
|
+
} else {
|
|
3935
|
+
root.style.removeProperty("--lumia-text");
|
|
3936
|
+
}
|
|
3937
|
+
if (currentCustomColors?.textSecondary) {
|
|
3938
|
+
root.style.setProperty("--lumia-text-secondary", currentCustomColors.textSecondary);
|
|
3939
|
+
} else {
|
|
3940
|
+
root.style.removeProperty("--lumia-text-secondary");
|
|
3941
|
+
}
|
|
3942
|
+
if (currentCustomColors?.textMuted) {
|
|
3943
|
+
root.style.setProperty("--lumia-text-muted", currentCustomColors.textMuted);
|
|
3944
|
+
} else {
|
|
3945
|
+
root.style.removeProperty("--lumia-text-muted");
|
|
3946
|
+
}
|
|
3947
|
+
if (currentCustomColors?.border) {
|
|
3948
|
+
root.style.setProperty("--lumia-border", currentCustomColors.border);
|
|
3949
|
+
} else {
|
|
3950
|
+
root.style.removeProperty("--lumia-border");
|
|
3951
|
+
}
|
|
3952
|
+
}, [currentCustomColors]);
|
|
3921
3953
|
const themeClasses = useMemo(
|
|
3922
|
-
() =>
|
|
3923
|
-
|
|
3924
|
-
|
|
3925
|
-
|
|
3926
|
-
|
|
3927
|
-
text: isDark ? "text-
|
|
3928
|
-
|
|
3929
|
-
|
|
3930
|
-
|
|
3931
|
-
|
|
3932
|
-
|
|
3933
|
-
|
|
3934
|
-
|
|
3935
|
-
|
|
3936
|
-
|
|
3937
|
-
|
|
3938
|
-
|
|
3939
|
-
|
|
3940
|
-
|
|
3941
|
-
|
|
3942
|
-
|
|
3943
|
-
|
|
3944
|
-
|
|
3945
|
-
|
|
3946
|
-
|
|
3947
|
-
|
|
3948
|
-
|
|
3949
|
-
|
|
3950
|
-
|
|
3951
|
-
|
|
3952
|
-
|
|
3953
|
-
|
|
3954
|
-
|
|
3955
|
-
|
|
3956
|
-
|
|
3957
|
-
|
|
3954
|
+
() => {
|
|
3955
|
+
const hasCustom = !!currentCustomColors;
|
|
3956
|
+
const background = hasCustom && currentCustomColors?.background ? "[background:var(--lumia-bg)]" : isDark ? "bg-gray-900" : "bg-white";
|
|
3957
|
+
const text = hasCustom && currentCustomColors?.text ? "[color:var(--lumia-text)]" : isDark ? "text-white" : "text-gray-900";
|
|
3958
|
+
const textSecondary = hasCustom && currentCustomColors?.textSecondary ? "[color:var(--lumia-text-secondary)]" : isDark ? "text-gray-300" : "text-gray-600";
|
|
3959
|
+
const textMuted = hasCustom && currentCustomColors?.textMuted ? "[color:var(--lumia-text-muted)]" : isDark ? "text-gray-400" : "text-gray-500";
|
|
3960
|
+
const border = hasCustom && currentCustomColors?.border ? "[border-color:var(--lumia-border)]" : isDark ? "border-gray-600" : "border-gray-200";
|
|
3961
|
+
return {
|
|
3962
|
+
bg: background,
|
|
3963
|
+
// Alias for modalBg for backwards compatibility
|
|
3964
|
+
modalBg: background,
|
|
3965
|
+
titleText: text,
|
|
3966
|
+
text,
|
|
3967
|
+
// Alias for titleText
|
|
3968
|
+
bodyText: textSecondary,
|
|
3969
|
+
mutedText: textMuted,
|
|
3970
|
+
linkText: isDark ? "text-gray-200 hover:text-blue-400" : "text-gray-700 hover:text-blue-600",
|
|
3971
|
+
inputBg: isDark ? "bg-gray-700 border-gray-600" : "bg-white border-gray-300",
|
|
3972
|
+
inputText: isDark ? "text-white placeholder:text-gray-400" : "text-gray-900 placeholder:text-gray-400",
|
|
3973
|
+
// Primary CTA (Passkey sign-in) — brighter blue + hover
|
|
3974
|
+
primaryBtn: isDark ? "bg-[#2456f0] hover:bg-[#1e49d8] text-white" : "bg-[#2456f0] hover:bg-[#1e49d8] text-white",
|
|
3975
|
+
// Neutral secondary to avoid unintended pink accents
|
|
3976
|
+
secondaryBtn: isDark ? "bg-gray-700 hover:bg-gray-600 text-white" : "bg-gray-100 hover:bg-gray-200 text-gray-700",
|
|
3977
|
+
// Pink CTA used for email Continue like in old design
|
|
3978
|
+
ctaBtn: isDark ? "bg-[#db2777] hover:bg-[#be185d] text-white" : "bg-[#fde2f3] hover:bg-[#f7c1df] text-gray-600",
|
|
3979
|
+
// Outline buttons (Create Passkey) — subtle hover
|
|
3980
|
+
outlineBtn: isDark ? "bg-gray-700 border-gray-600 hover:bg-gray-600 text-gray-200" : "bg-white border-gray-200 hover:bg-gray-100 text-gray-700",
|
|
3981
|
+
actionBtn: isDark ? "bg-gray-700 hover:bg-gray-600 text-gray-200" : "bg-gray-100 hover:bg-gray-200 text-gray-900",
|
|
3982
|
+
divider: border,
|
|
3983
|
+
errorText: isDark ? "text-red-400" : "text-red-500",
|
|
3984
|
+
successText: isDark ? "text-green-400" : "text-blue-600",
|
|
3985
|
+
iconColor: textMuted,
|
|
3986
|
+
// CSS variable-based classes for better theming
|
|
3987
|
+
cssVars: {
|
|
3988
|
+
modalBg: "lumia-bg-primary",
|
|
3989
|
+
text: "lumia-text-primary",
|
|
3990
|
+
textSecondary: "lumia-text-secondary",
|
|
3991
|
+
textMuted: "lumia-text-muted",
|
|
3992
|
+
bgSecondary: "lumia-bg-secondary",
|
|
3993
|
+
border: "lumia-border-primary"
|
|
3994
|
+
}
|
|
3995
|
+
};
|
|
3996
|
+
},
|
|
3997
|
+
[isDark, currentCustomColors]
|
|
3958
3998
|
);
|
|
3959
3999
|
return { theme: resolvedTheme, isDark, classes: themeClasses };
|
|
3960
4000
|
}
|
|
@@ -3963,7 +4003,7 @@ function useTheme(configTheme) {
|
|
|
3963
4003
|
import { Fragment, jsx as jsx5 } from "react/jsx-runtime";
|
|
3964
4004
|
var LumiaRainbowKitProvider = ({ children }) => {
|
|
3965
4005
|
const { config } = useLumiaPassportConfig();
|
|
3966
|
-
const { isDark } = useTheme(config.ui.theme);
|
|
4006
|
+
const { isDark } = useTheme(config.ui.theme, config.ui.colors);
|
|
3967
4007
|
const rainbowConfig2 = React3.useMemo(() => {
|
|
3968
4008
|
return createRainbowConfig(config.wallet?.walletConnectProjectId);
|
|
3969
4009
|
}, [config.wallet?.walletConnectProjectId]);
|
|
@@ -4000,7 +4040,7 @@ var LumiaRainbowKitProvider = ({ children }) => {
|
|
|
4000
4040
|
};
|
|
4001
4041
|
|
|
4002
4042
|
// src/components/ConnectWalletButton.tsx
|
|
4003
|
-
import
|
|
4043
|
+
import React27 from "react";
|
|
4004
4044
|
import { flushSync } from "react-dom";
|
|
4005
4045
|
import { useBalance as useBalance3 } from "wagmi";
|
|
4006
4046
|
|
|
@@ -4197,7 +4237,7 @@ var ErrorAlert = ({
|
|
|
4197
4237
|
actionText = "OK"
|
|
4198
4238
|
}) => {
|
|
4199
4239
|
const { config } = useLumiaPassportConfig();
|
|
4200
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
4240
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
4201
4241
|
return /* @__PURE__ */ jsx10(AlertDialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs4(AlertDialogContent, { className: `lumia-scope max-w-md ${theme.modalBg} ${isDark ? "lumia-dark" : "lumia-light"}`, children: [
|
|
4202
4242
|
/* @__PURE__ */ jsxs4(AlertDialogHeader, { children: [
|
|
4203
4243
|
/* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-3 mb-2", children: [
|
|
@@ -4257,7 +4297,7 @@ var LumiaLogo = ({ size = 25, className = "" }) => {
|
|
|
4257
4297
|
import { jsx as jsx12, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
4258
4298
|
var SuccessScreen = () => {
|
|
4259
4299
|
const { config } = useLumiaPassportConfig();
|
|
4260
|
-
const { classes: theme } = useTheme(config.ui.theme);
|
|
4300
|
+
const { classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
4261
4301
|
return /* @__PURE__ */ jsxs6("div", { className: "text-center", children: [
|
|
4262
4302
|
/* @__PURE__ */ jsx12("div", { className: "w-16 h-16 rounded-full bg-green-100 text-green-600 flex items-center justify-center mx-auto mb-4", children: "\u2713" }),
|
|
4263
4303
|
/* @__PURE__ */ jsx12("div", { className: `text-lg font-medium ${theme.titleText}`, children: "Success" })
|
|
@@ -4268,7 +4308,7 @@ var SuccessScreen = () => {
|
|
|
4268
4308
|
import { jsx as jsx13, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
4269
4309
|
var TermsOfService = ({ open, onOpenChange }) => {
|
|
4270
4310
|
const { config } = useLumiaPassportConfig();
|
|
4271
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
4311
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
4272
4312
|
return /* @__PURE__ */ jsx13(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs7(
|
|
4273
4313
|
DialogContent,
|
|
4274
4314
|
{
|
|
@@ -4341,7 +4381,7 @@ init_iframe_manager();
|
|
|
4341
4381
|
import { Fragment as Fragment2, jsx as jsx16, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
4342
4382
|
function KeyshareRestore({ userId, onClose, onRestoreSuccess }) {
|
|
4343
4383
|
const { config } = useLumiaPassportConfig();
|
|
4344
|
-
const { isDark } = useTheme(config.ui.theme);
|
|
4384
|
+
const { isDark } = useTheme(config.ui.theme, config.ui.colors);
|
|
4345
4385
|
const [loading, setLoading] = React10.useState({ server: false, file: false });
|
|
4346
4386
|
const [error, setError] = React10.useState(null);
|
|
4347
4387
|
const [success, setSuccess] = React10.useState(null);
|
|
@@ -4684,7 +4724,7 @@ import { useEffect as useEffect4, useMemo as useMemo3, useRef, useState as useSt
|
|
|
4684
4724
|
import { jsx as jsx17, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
4685
4725
|
var VerificationCodeInput = ({ onVerifyCode, onResendCode, isLoading, expiresIn, error }) => {
|
|
4686
4726
|
const { config } = useLumiaPassportConfig();
|
|
4687
|
-
const { classes: theme } = useTheme(config.ui.theme);
|
|
4727
|
+
const { classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
4688
4728
|
const [timeLeft, setTimeLeft] = useState4(expiresIn);
|
|
4689
4729
|
useEffect4(() => {
|
|
4690
4730
|
setTimeLeft(expiresIn);
|
|
@@ -4833,7 +4873,7 @@ var DisplayNameInput = ({ onComplete, onSkip }) => {
|
|
|
4833
4873
|
const [isLoading, setIsLoading] = useState5(false);
|
|
4834
4874
|
const [error, setError] = useState5("");
|
|
4835
4875
|
const { config } = useLumiaPassportConfig();
|
|
4836
|
-
const { classes: theme } = useTheme(config.ui.theme);
|
|
4876
|
+
const { classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
4837
4877
|
const handleSubmit = async (e) => {
|
|
4838
4878
|
e.preventDefault();
|
|
4839
4879
|
if (!displayName.trim()) {
|
|
@@ -4937,7 +4977,7 @@ var AuthModal = ({ open, onOpenChange, onAuthSuccess, autoCloseOnSuccess = true,
|
|
|
4937
4977
|
return createPasskeyHelpers("");
|
|
4938
4978
|
}, []);
|
|
4939
4979
|
const { config } = useLumiaPassportConfig();
|
|
4940
|
-
const { classes: theme, isDark } = useTheme(config.ui.theme);
|
|
4980
|
+
const { classes: theme, isDark } = useTheme(config.ui.theme, config.ui.colors);
|
|
4941
4981
|
const checkDisplayNameRequired = React13.useCallback(async () => {
|
|
4942
4982
|
if (!config.features.displayNameNeeded) {
|
|
4943
4983
|
return false;
|
|
@@ -5805,7 +5845,7 @@ var ManageWallet = ({ open, onOpenChange, onBack }) => {
|
|
|
5805
5845
|
const [expiresIn, setExpiresIn] = useState7(300);
|
|
5806
5846
|
const [verificationError, setVerificationError] = useState7("");
|
|
5807
5847
|
const { config, callbacks } = useLumiaPassportConfig();
|
|
5808
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
5848
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
5809
5849
|
const telegramContainerRef = React16.useRef(null);
|
|
5810
5850
|
const [isWalletLinking, setIsWalletLinking] = useState7(false);
|
|
5811
5851
|
const [providersJustUpdated, setProvidersJustUpdated] = useState7(false);
|
|
@@ -6262,303 +6302,30 @@ var ManageWallet = ({ open, onOpenChange, onBack }) => {
|
|
|
6262
6302
|
};
|
|
6263
6303
|
|
|
6264
6304
|
// src/internal/components/SecurityModal.tsx
|
|
6265
|
-
import
|
|
6305
|
+
import React17 from "react";
|
|
6266
6306
|
init_auth();
|
|
6267
6307
|
init_keyshare();
|
|
6268
6308
|
init_vaultClient();
|
|
6269
|
-
import { Cloud
|
|
6270
|
-
|
|
6271
|
-
// src/internal/components/BackupForm.tsx
|
|
6272
|
-
import * as React17 from "react";
|
|
6273
|
-
import { Shield as Shield2, Server as Server2, CheckCircle2 as CheckCircle22, AlertCircle as AlertCircle2, Key as Key3, Eye as Eye2, EyeOff as EyeOff2, Download, Cloud, Lock } from "lucide-react";
|
|
6274
|
-
init_vaultClient();
|
|
6275
|
-
import { Fragment as Fragment5, jsx as jsx21, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
6276
|
-
function BackupForm({ userId, onBackupSuccess }) {
|
|
6277
|
-
const { config } = useLumiaPassportConfig();
|
|
6278
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
6279
|
-
const [backupStatus, setBackupStatus] = React17.useState(() => getBackupStatus(userId));
|
|
6280
|
-
const [loading, setLoading] = React17.useState({
|
|
6281
|
-
server: false,
|
|
6282
|
-
cloud: false,
|
|
6283
|
-
local: false
|
|
6284
|
-
});
|
|
6285
|
-
const [error, setError] = React17.useState(null);
|
|
6286
|
-
const [success, setSuccess] = React17.useState(null);
|
|
6287
|
-
const [showPassword, setShowPassword] = React17.useState(false);
|
|
6288
|
-
const [useCustomPassword, setUseCustomPassword] = React17.useState(false);
|
|
6289
|
-
const [customPassword, setCustomPassword] = React17.useState("");
|
|
6290
|
-
const [cloudProviders, setCloudProviders] = React17.useState([]);
|
|
6291
|
-
const [selectedCloudProvider, setSelectedCloudProvider] = React17.useState(null);
|
|
6292
|
-
const [usePrivateStorage, setUsePrivateStorage] = React17.useState(true);
|
|
6293
|
-
const hasKeyshareData = React17.useMemo(() => {
|
|
6294
|
-
return !!getCurrentKeyshareBackupData(userId);
|
|
6295
|
-
}, [userId]);
|
|
6296
|
-
React17.useEffect(() => {
|
|
6297
|
-
getAvailableCloudProviders2().then((providers) => {
|
|
6298
|
-
setCloudProviders(providers);
|
|
6299
|
-
if (providers.length > 0 && !selectedCloudProvider) {
|
|
6300
|
-
setSelectedCloudProvider(providers[0].id);
|
|
6301
|
-
}
|
|
6302
|
-
});
|
|
6303
|
-
}, [selectedCloudProvider]);
|
|
6304
|
-
const refreshStatus = React17.useCallback(() => {
|
|
6305
|
-
setBackupStatus(getBackupStatus(userId));
|
|
6306
|
-
}, [userId]);
|
|
6307
|
-
React17.useEffect(() => {
|
|
6308
|
-
refreshStatus();
|
|
6309
|
-
}, [refreshStatus]);
|
|
6310
|
-
const handleBackup = async (method) => {
|
|
6311
|
-
setLoading((prev) => ({ ...prev, [method]: true }));
|
|
6312
|
-
setError(null);
|
|
6313
|
-
setSuccess(null);
|
|
6314
|
-
try {
|
|
6315
|
-
const password = useCustomPassword ? customPassword : void 0;
|
|
6316
|
-
switch (method) {
|
|
6317
|
-
case "server":
|
|
6318
|
-
await backupToServer(userId, password);
|
|
6319
|
-
setSuccess("Successfully created server backup");
|
|
6320
|
-
break;
|
|
6321
|
-
case "cloud": {
|
|
6322
|
-
await backupToCloud(userId, password, selectedCloudProvider || void 0, usePrivateStorage);
|
|
6323
|
-
setSuccess(`Successfully created cloud backup`);
|
|
6324
|
-
const updatedProviders = await getAvailableCloudProviders2();
|
|
6325
|
-
setCloudProviders(updatedProviders);
|
|
6326
|
-
break;
|
|
6327
|
-
}
|
|
6328
|
-
case "local":
|
|
6329
|
-
await backupToLocalFile(userId, password);
|
|
6330
|
-
setSuccess("Backup file downloaded successfully");
|
|
6331
|
-
break;
|
|
6332
|
-
}
|
|
6333
|
-
refreshStatus();
|
|
6334
|
-
setTimeout(() => {
|
|
6335
|
-
if (typeof window !== "undefined") {
|
|
6336
|
-
window.dispatchEvent(
|
|
6337
|
-
new CustomEvent("lumia-passport-backup-status-changed", {
|
|
6338
|
-
detail: { method, success: true }
|
|
6339
|
-
})
|
|
6340
|
-
);
|
|
6341
|
-
}
|
|
6342
|
-
onBackupSuccess?.();
|
|
6343
|
-
}, 100);
|
|
6344
|
-
} catch (err) {
|
|
6345
|
-
const errorMsg = err instanceof Error ? err.message : "Backup creation failed";
|
|
6346
|
-
setError(errorMsg);
|
|
6347
|
-
updateBackupStatus(userId, method, { error: errorMsg });
|
|
6348
|
-
refreshStatus();
|
|
6349
|
-
} finally {
|
|
6350
|
-
setLoading((prev) => ({ ...prev, [method]: false }));
|
|
6351
|
-
}
|
|
6352
|
-
};
|
|
6353
|
-
const formatLastBackup = (timestamp) => {
|
|
6354
|
-
if (!timestamp) return "Never";
|
|
6355
|
-
const date = new Date(timestamp);
|
|
6356
|
-
return `${date.toLocaleDateString()} ${date.toLocaleTimeString()}`;
|
|
6357
|
-
};
|
|
6358
|
-
return /* @__PURE__ */ jsxs13("div", { className: `p-5 space-y-6 ${isDark ? "lumia-dark" : "lumia-light"}`, children: [
|
|
6359
|
-
/* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-3", children: [
|
|
6360
|
-
/* @__PURE__ */ jsx21(Shield2, { className: `h-6 w-6 ${isDark ? "text-green-400" : "text-green-600"}` }),
|
|
6361
|
-
/* @__PURE__ */ jsxs13("div", { children: [
|
|
6362
|
-
/* @__PURE__ */ jsx21("h2", { className: `text-lg font-semibold ${theme.titleText}`, children: "Create Backup" }),
|
|
6363
|
-
/* @__PURE__ */ jsx21("p", { className: `text-sm ${theme.bodyText}`, children: "Secure your keyshare with encrypted backups" })
|
|
6364
|
-
] })
|
|
6365
|
-
] }),
|
|
6366
|
-
error && /* @__PURE__ */ jsxs13("div", { className: `flex items-center gap-2 p-3 rounded-xl text-sm ${isDark ? "bg-red-900/30 border border-red-900 text-red-400" : "bg-red-50 border border-red-200 text-red-700"}`, children: [
|
|
6367
|
-
/* @__PURE__ */ jsx21(AlertCircle2, { className: "h-4 w-4 flex-shrink-0" }),
|
|
6368
|
-
/* @__PURE__ */ jsx21("span", { children: error })
|
|
6369
|
-
] }),
|
|
6370
|
-
success && /* @__PURE__ */ jsxs13("div", { className: `flex items-center gap-2 p-3 rounded-xl text-sm ${isDark ? "bg-green-900/30 border border-green-900 text-green-400" : "bg-green-50 border border-green-200 text-green-700"}`, children: [
|
|
6371
|
-
/* @__PURE__ */ jsx21(CheckCircle22, { className: "h-4 w-4 flex-shrink-0" }),
|
|
6372
|
-
/* @__PURE__ */ jsx21("span", { children: success })
|
|
6373
|
-
] }),
|
|
6374
|
-
/* @__PURE__ */ jsxs13("div", { className: "space-y-3", children: [
|
|
6375
|
-
/* @__PURE__ */ jsx21("div", { className: `text-sm font-medium ${theme.bodyText}`, children: "Encryption Method:" }),
|
|
6376
|
-
/* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-2", children: [
|
|
6377
|
-
/* @__PURE__ */ jsx21(
|
|
6378
|
-
"input",
|
|
6379
|
-
{
|
|
6380
|
-
type: "checkbox",
|
|
6381
|
-
id: "use-backup-password",
|
|
6382
|
-
checked: useCustomPassword,
|
|
6383
|
-
onChange: (e) => setUseCustomPassword(e.target.checked),
|
|
6384
|
-
className: "rounded"
|
|
6385
|
-
}
|
|
6386
|
-
),
|
|
6387
|
-
/* @__PURE__ */ jsx21("label", { htmlFor: "use-backup-password", className: `text-sm font-medium ${theme.bodyText}`, children: "Use custom password instead of passkey" })
|
|
6388
|
-
] }),
|
|
6389
|
-
!useCustomPassword && /* @__PURE__ */ jsx21("div", { className: `p-3 rounded-xl text-sm ${isDark ? "bg-blue-900/30 border border-blue-900 text-blue-400" : "bg-blue-50 border border-blue-200 text-blue-700"}`, children: /* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-2", children: [
|
|
6390
|
-
/* @__PURE__ */ jsx21(Key3, { className: "h-4 w-4" }),
|
|
6391
|
-
/* @__PURE__ */ jsx21("span", { children: "Your passkey will be used to encrypt the backup securely" })
|
|
6392
|
-
] }) }),
|
|
6393
|
-
useCustomPassword && /* @__PURE__ */ jsxs13("div", { className: "relative", children: [
|
|
6394
|
-
/* @__PURE__ */ jsx21(
|
|
6395
|
-
Input,
|
|
6396
|
-
{
|
|
6397
|
-
type: showPassword ? "text" : "password",
|
|
6398
|
-
placeholder: "Enter backup encryption password",
|
|
6399
|
-
value: customPassword,
|
|
6400
|
-
onChange: (e) => setCustomPassword(e.target.value),
|
|
6401
|
-
className: "pr-10"
|
|
6402
|
-
}
|
|
6403
|
-
),
|
|
6404
|
-
/* @__PURE__ */ jsx21(
|
|
6405
|
-
"button",
|
|
6406
|
-
{
|
|
6407
|
-
type: "button",
|
|
6408
|
-
onClick: () => setShowPassword(!showPassword),
|
|
6409
|
-
className: `absolute right-3 top-1/2 transform -translate-y-1/2 ${isDark ? "text-gray-400 hover:text-gray-300" : "text-gray-500 hover:text-gray-700"}`,
|
|
6410
|
-
children: showPassword ? /* @__PURE__ */ jsx21(EyeOff2, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx21(Eye2, { className: "h-4 w-4" })
|
|
6411
|
-
}
|
|
6412
|
-
)
|
|
6413
|
-
] })
|
|
6414
|
-
] }),
|
|
6415
|
-
/* @__PURE__ */ jsxs13("div", { className: "space-y-4", children: [
|
|
6416
|
-
/* @__PURE__ */ jsx21("div", { className: `text-sm font-medium ${theme.bodyText}`, children: "Choose Backup Method:" }),
|
|
6417
|
-
/* @__PURE__ */ jsxs13("div", { className: `p-4 rounded-xl border ${isDark ? "border-gray-700 bg-gray-800" : "border-blue-200 bg-blue-50/50"}`, children: [
|
|
6418
|
-
/* @__PURE__ */ jsx21("div", { className: "flex items-center justify-between mb-3", children: /* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-3", children: [
|
|
6419
|
-
/* @__PURE__ */ jsx21(Server2, { className: `h-5 w-5 ${isDark ? "text-blue-400" : "text-blue-600"}` }),
|
|
6420
|
-
/* @__PURE__ */ jsxs13("div", { children: [
|
|
6421
|
-
/* @__PURE__ */ jsx21("div", { className: `font-medium text-sm ${theme.titleText}`, children: "Server Backup" }),
|
|
6422
|
-
/* @__PURE__ */ jsx21("div", { className: `text-xs ${theme.mutedText}`, children: "Store encrypted backup on secure server" })
|
|
6423
|
-
] })
|
|
6424
|
-
] }) }),
|
|
6425
|
-
/* @__PURE__ */ jsx21(
|
|
6426
|
-
Button,
|
|
6427
|
-
{
|
|
6428
|
-
onClick: () => handleBackup("server"),
|
|
6429
|
-
disabled: loading.server || useCustomPassword && !customPassword || !hasKeyshareData,
|
|
6430
|
-
className: "px-4 py-2",
|
|
6431
|
-
children: loading.server ? "Creating..." : useCustomPassword ? "Create with Password" : "Create with Passkey"
|
|
6432
|
-
}
|
|
6433
|
-
),
|
|
6434
|
-
/* @__PURE__ */ jsxs13("div", { className: `text-xs mt-2 ${theme.mutedText}`, children: [
|
|
6435
|
-
"Encrypted backup stored on secure server \u2022 Last: ",
|
|
6436
|
-
formatLastBackup(backupStatus.server.lastBackup)
|
|
6437
|
-
] })
|
|
6438
|
-
] }),
|
|
6439
|
-
/* @__PURE__ */ jsxs13("div", { className: `p-4 rounded-xl border ${isDark ? "border-gray-700 bg-gray-800" : "border-sky-200 bg-sky-50/50"}`, children: [
|
|
6440
|
-
/* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-3 mb-3", children: [
|
|
6441
|
-
/* @__PURE__ */ jsx21(Cloud, { className: `h-5 w-5 ${isDark ? "text-sky-400" : "text-sky-600"}` }),
|
|
6442
|
-
/* @__PURE__ */ jsxs13("div", { children: [
|
|
6443
|
-
/* @__PURE__ */ jsx21("div", { className: `font-medium text-sm ${theme.titleText}`, children: "Cloud Backup" }),
|
|
6444
|
-
/* @__PURE__ */ jsx21("div", { className: `text-xs ${theme.mutedText}`, children: "Store encrypted backup in cloud storage" })
|
|
6445
|
-
] })
|
|
6446
|
-
] }),
|
|
6447
|
-
cloudProviders.length > 1 && /* @__PURE__ */ jsx21("div", { className: "mb-3", children: /* @__PURE__ */ jsx21(
|
|
6448
|
-
"select",
|
|
6449
|
-
{
|
|
6450
|
-
value: selectedCloudProvider || "",
|
|
6451
|
-
onChange: (e) => setSelectedCloudProvider(e.target.value),
|
|
6452
|
-
className: `text-sm border rounded-xl px-2 py-1 w-full ${isDark ? "bg-gray-700 border-gray-600 text-gray-200" : "bg-white border-gray-300"}`,
|
|
6453
|
-
children: cloudProviders.map((provider) => /* @__PURE__ */ jsxs13("option", { value: provider.id, children: [
|
|
6454
|
-
provider.icon,
|
|
6455
|
-
" ",
|
|
6456
|
-
provider.name,
|
|
6457
|
-
" ",
|
|
6458
|
-
provider.isAuthenticated ? "\u2713" : ""
|
|
6459
|
-
] }, provider.id))
|
|
6460
|
-
}
|
|
6461
|
-
) }),
|
|
6462
|
-
/* @__PURE__ */ jsxs13("div", { className: "mb-3", children: [
|
|
6463
|
-
/* @__PURE__ */ jsx21("div", { className: `text-xs font-medium mb-2 ${theme.bodyText}`, children: "Storage Location:" }),
|
|
6464
|
-
/* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-2 mb-2", children: [
|
|
6465
|
-
/* @__PURE__ */ jsx21(
|
|
6466
|
-
"input",
|
|
6467
|
-
{
|
|
6468
|
-
type: "radio",
|
|
6469
|
-
id: "private-storage",
|
|
6470
|
-
name: "storage-type",
|
|
6471
|
-
checked: usePrivateStorage,
|
|
6472
|
-
onChange: () => setUsePrivateStorage(true),
|
|
6473
|
-
className: "rounded"
|
|
6474
|
-
}
|
|
6475
|
-
),
|
|
6476
|
-
/* @__PURE__ */ jsx21("label", { htmlFor: "private-storage", className: `text-xs ${theme.bodyText}`, children: "\u{1F512} Private (app-only, hidden from Drive UI)" })
|
|
6477
|
-
] }),
|
|
6478
|
-
/* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-2", children: [
|
|
6479
|
-
/* @__PURE__ */ jsx21(
|
|
6480
|
-
"input",
|
|
6481
|
-
{
|
|
6482
|
-
type: "radio",
|
|
6483
|
-
id: "visible-storage",
|
|
6484
|
-
name: "storage-type",
|
|
6485
|
-
checked: !usePrivateStorage,
|
|
6486
|
-
onChange: () => setUsePrivateStorage(false),
|
|
6487
|
-
className: "rounded"
|
|
6488
|
-
}
|
|
6489
|
-
),
|
|
6490
|
-
/* @__PURE__ */ jsx21("label", { htmlFor: "visible-storage", className: `text-xs ${theme.bodyText}`, children: "\u{1F4C1} Visible (Lumia Backups folder in Drive)" })
|
|
6491
|
-
] })
|
|
6492
|
-
] }),
|
|
6493
|
-
/* @__PURE__ */ jsx21(
|
|
6494
|
-
Button,
|
|
6495
|
-
{
|
|
6496
|
-
onClick: () => handleBackup("cloud"),
|
|
6497
|
-
disabled: loading.cloud || useCustomPassword && !customPassword || !hasKeyshareData || cloudProviders.length === 0,
|
|
6498
|
-
className: "px-4 py-2",
|
|
6499
|
-
children: loading.cloud ? "Creating..." : useCustomPassword ? "Create with Password" : "Create with Passkey"
|
|
6500
|
-
}
|
|
6501
|
-
),
|
|
6502
|
-
/* @__PURE__ */ jsx21("div", { className: `text-xs mt-2 ${theme.mutedText}`, children: cloudProviders.length > 0 ? `Direct backup to ${cloudProviders.find((p) => p.id === selectedCloudProvider)?.name || "cloud storage"} \u2022 Last: ${formatLastBackup(backupStatus.cloud.lastBackup)}` : `No cloud providers configured \u2022 Last: ${formatLastBackup(backupStatus.cloud.lastBackup)}` })
|
|
6503
|
-
] }),
|
|
6504
|
-
/* @__PURE__ */ jsxs13("div", { className: `p-4 rounded-xl border ${isDark ? "border-gray-700 bg-gray-800" : "border-purple-200 bg-purple-50/50"}`, children: [
|
|
6505
|
-
/* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-3 mb-3", children: [
|
|
6506
|
-
/* @__PURE__ */ jsx21(Download, { className: `h-5 w-5 ${isDark ? "text-purple-400" : "text-purple-600"}` }),
|
|
6507
|
-
/* @__PURE__ */ jsxs13("div", { children: [
|
|
6508
|
-
/* @__PURE__ */ jsx21("div", { className: `font-medium text-sm ${theme.titleText}`, children: "File Backup" }),
|
|
6509
|
-
/* @__PURE__ */ jsx21("div", { className: `text-xs ${theme.mutedText}`, children: "Download encrypted backup file to your device" })
|
|
6510
|
-
] })
|
|
6511
|
-
] }),
|
|
6512
|
-
/* @__PURE__ */ jsx21(
|
|
6513
|
-
Button,
|
|
6514
|
-
{
|
|
6515
|
-
onClick: () => handleBackup("local"),
|
|
6516
|
-
disabled: loading.local || useCustomPassword && !customPassword || !hasKeyshareData,
|
|
6517
|
-
className: "w-full",
|
|
6518
|
-
children: loading.local ? "Creating..." : useCustomPassword ? "Create & Download" : "Create & Download with Passkey"
|
|
6519
|
-
}
|
|
6520
|
-
),
|
|
6521
|
-
/* @__PURE__ */ jsxs13("div", { className: `text-xs mt-2 ${theme.mutedText}`, children: [
|
|
6522
|
-
"Download encrypted backup file to your device \u2022 Last: ",
|
|
6523
|
-
formatLastBackup(backupStatus.local.lastBackup)
|
|
6524
|
-
] })
|
|
6525
|
-
] })
|
|
6526
|
-
] }),
|
|
6527
|
-
/* @__PURE__ */ jsxs13("div", { className: `flex items-start gap-2 p-3 rounded-xl text-xs ${isDark ? "bg-amber-900/30 border border-amber-900 text-amber-400" : "bg-amber-50 border border-amber-200 text-amber-800"}`, children: [
|
|
6528
|
-
/* @__PURE__ */ jsx21(Lock, { className: "h-4 w-4 mt-0.5 flex-shrink-0" }),
|
|
6529
|
-
/* @__PURE__ */ jsxs13("div", { children: [
|
|
6530
|
-
/* @__PURE__ */ jsx21("div", { className: "font-medium", children: "Security Notice" }),
|
|
6531
|
-
/* @__PURE__ */ jsxs13("div", { className: "mt-1", children: [
|
|
6532
|
-
useCustomPassword ? /* @__PURE__ */ jsx21(Fragment5, { children: "All backups are encrypted with AES-256 using your custom password. Store your password securely - without it, backups cannot be restored." }) : /* @__PURE__ */ jsx21(Fragment5, { children: "All backups are encrypted with AES-256 using your passkey. Your passkey authenticator (device/biometrics) is required to restore backups." }),
|
|
6533
|
-
" ",
|
|
6534
|
-
"Without backup access, you cannot recover your smart account if you lose this device."
|
|
6535
|
-
] })
|
|
6536
|
-
] })
|
|
6537
|
-
] })
|
|
6538
|
-
] });
|
|
6539
|
-
}
|
|
6540
|
-
|
|
6541
|
-
// src/internal/components/SecurityModal.tsx
|
|
6542
|
-
import { jsx as jsx22, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
6309
|
+
import { Cloud, Laptop, Shield as Shield2, AlertTriangle as AlertTriangle3, CheckCircle2 as CheckCircle22, Server as Server2, HardDrive, RefreshCw as RefreshCw2, Key as Key3, ArrowLeft as ArrowLeft4, Trash2 as Trash22 } from "lucide-react";
|
|
6310
|
+
import { jsx as jsx21, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
6543
6311
|
var SecurityModal = ({ open, onOpenChange, onBack }) => {
|
|
6544
6312
|
const userId = jwtTokenManager2.getUserId();
|
|
6545
6313
|
const serverHasKeyshare = jwtTokenManager2.getHasKeyshare() ?? false;
|
|
6546
6314
|
const backup = userId ? getBackupStatus(userId) : { server: { enabled: false }, cloud: { enabled: false }, local: { enabled: false } };
|
|
6547
6315
|
const { config } = useLumiaPassportConfig();
|
|
6548
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
6549
|
-
const [isRefreshing, setIsRefreshing] =
|
|
6550
|
-
const [localInfo, setLocalInfo] =
|
|
6551
|
-
const [recoveryCreatedAt, setRecoveryCreatedAt] =
|
|
6552
|
-
const [recoveryBrowser, setRecoveryBrowser] =
|
|
6553
|
-
const [recoveryUa, setRecoveryUa] =
|
|
6554
|
-
const [recoveryDeviceId, setRecoveryDeviceId] =
|
|
6555
|
-
const [recoveryDeviceName, setRecoveryDeviceName] =
|
|
6556
|
-
const [recoveryCountry, setRecoveryCountry] =
|
|
6557
|
-
const [hasServerBackup, setHasServerBackup] =
|
|
6558
|
-
const [
|
|
6559
|
-
const [
|
|
6560
|
-
const
|
|
6561
|
-
const fetchRecovery = React18.useCallback(async () => {
|
|
6316
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
6317
|
+
const [isRefreshing, setIsRefreshing] = React17.useState(false);
|
|
6318
|
+
const [localInfo, setLocalInfo] = React17.useState(null);
|
|
6319
|
+
const [recoveryCreatedAt, setRecoveryCreatedAt] = React17.useState(null);
|
|
6320
|
+
const [recoveryBrowser, setRecoveryBrowser] = React17.useState(null);
|
|
6321
|
+
const [recoveryUa, setRecoveryUa] = React17.useState(null);
|
|
6322
|
+
const [recoveryDeviceId, setRecoveryDeviceId] = React17.useState(null);
|
|
6323
|
+
const [recoveryDeviceName, setRecoveryDeviceName] = React17.useState(null);
|
|
6324
|
+
const [recoveryCountry, setRecoveryCountry] = React17.useState(null);
|
|
6325
|
+
const [hasServerBackup, setHasServerBackup] = React17.useState(false);
|
|
6326
|
+
const [trustedApps, setTrustedApps] = React17.useState([]);
|
|
6327
|
+
const [appToRemove, setAppToRemove] = React17.useState(null);
|
|
6328
|
+
const fetchRecovery = React17.useCallback(async () => {
|
|
6562
6329
|
if (!userId) return;
|
|
6563
6330
|
try {
|
|
6564
6331
|
setIsRefreshing(true);
|
|
@@ -6589,7 +6356,7 @@ var SecurityModal = ({ open, onOpenChange, onBack }) => {
|
|
|
6589
6356
|
setIsRefreshing(false);
|
|
6590
6357
|
}
|
|
6591
6358
|
}, [userId]);
|
|
6592
|
-
|
|
6359
|
+
React17.useEffect(() => {
|
|
6593
6360
|
if (open) fetchRecovery();
|
|
6594
6361
|
}, [open, fetchRecovery]);
|
|
6595
6362
|
const parseOS = (ua) => {
|
|
@@ -6619,219 +6386,179 @@ var SecurityModal = ({ open, onOpenChange, onBack }) => {
|
|
|
6619
6386
|
console.error("[SecurityModal] Error removing trusted app:", error);
|
|
6620
6387
|
}
|
|
6621
6388
|
};
|
|
6622
|
-
|
|
6623
|
-
|
|
6624
|
-
/* @__PURE__ */
|
|
6625
|
-
/* @__PURE__ */
|
|
6626
|
-
/* @__PURE__ */
|
|
6627
|
-
/* @__PURE__ */
|
|
6628
|
-
|
|
6629
|
-
{
|
|
6630
|
-
onClick: () => setShowBackupForm(false),
|
|
6631
|
-
className: `absolute top-4 left-4 p-1 z-10 ${isDark ? "text-gray-400 hover:text-gray-300" : "text-gray-500 hover:text-gray-700"}`,
|
|
6632
|
-
title: "Back to Security",
|
|
6633
|
-
children: /* @__PURE__ */ jsx22(ArrowLeft4, { className: "h-4 w-4" })
|
|
6634
|
-
}
|
|
6635
|
-
),
|
|
6636
|
-
/* @__PURE__ */ jsx22(
|
|
6637
|
-
BackupForm,
|
|
6638
|
-
{
|
|
6639
|
-
userId,
|
|
6640
|
-
onBackupSuccess: () => {
|
|
6641
|
-
setShowBackupForm(false);
|
|
6642
|
-
fetchRecovery();
|
|
6643
|
-
}
|
|
6644
|
-
}
|
|
6645
|
-
)
|
|
6646
|
-
] })
|
|
6647
|
-
] }) });
|
|
6648
|
-
}
|
|
6649
|
-
return /* @__PURE__ */ jsxs14(Dialog, { open, onOpenChange, children: [
|
|
6650
|
-
/* @__PURE__ */ jsxs14(DialogContent, { className: `lumia-scope max-w-[400px] p-0 border-0 ${theme.modalBg} rounded-2xl overflow-hidden gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`, children: [
|
|
6651
|
-
/* @__PURE__ */ jsx22(VisuallyHidden, { children: /* @__PURE__ */ jsx22(DialogTitle, { children: "Security" }) }),
|
|
6652
|
-
/* @__PURE__ */ jsx22(DialogDescription, { className: "sr-only", children: "Keyshare and vault status" }),
|
|
6653
|
-
/* @__PURE__ */ jsxs14("div", { className: "p-5 space-y-4", children: [
|
|
6654
|
-
/* @__PURE__ */ jsx22("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-2", children: [
|
|
6655
|
-
onBack && /* @__PURE__ */ jsx22(
|
|
6389
|
+
return /* @__PURE__ */ jsxs13(Dialog, { open, onOpenChange, children: [
|
|
6390
|
+
/* @__PURE__ */ jsxs13(DialogContent, { className: `lumia-scope max-w-[400px] p-0 border-0 ${theme.modalBg} rounded-2xl overflow-hidden gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`, children: [
|
|
6391
|
+
/* @__PURE__ */ jsx21(VisuallyHidden, { children: /* @__PURE__ */ jsx21(DialogTitle, { children: "Security" }) }),
|
|
6392
|
+
/* @__PURE__ */ jsx21(DialogDescription, { className: "sr-only", children: "Keyshare and vault status" }),
|
|
6393
|
+
/* @__PURE__ */ jsxs13("div", { className: "p-5 space-y-4", children: [
|
|
6394
|
+
/* @__PURE__ */ jsx21("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-2", children: [
|
|
6395
|
+
onBack && /* @__PURE__ */ jsx21(
|
|
6656
6396
|
"button",
|
|
6657
6397
|
{
|
|
6658
6398
|
onClick: onBack,
|
|
6659
6399
|
className: `p-1 mr-1 ${isDark ? "text-gray-400 hover:text-gray-300" : "text-gray-500 hover:text-gray-700"}`,
|
|
6660
6400
|
title: "Back",
|
|
6661
|
-
children: /* @__PURE__ */
|
|
6401
|
+
children: /* @__PURE__ */ jsx21(ArrowLeft4, { className: "h-4 w-4" })
|
|
6662
6402
|
}
|
|
6663
6403
|
),
|
|
6664
|
-
/* @__PURE__ */
|
|
6665
|
-
/* @__PURE__ */
|
|
6666
|
-
/* @__PURE__ */
|
|
6667
|
-
/* @__PURE__ */
|
|
6404
|
+
/* @__PURE__ */ jsxs13("div", { className: `flex items-center gap-2 ${theme.text} font-semibold`, children: [
|
|
6405
|
+
/* @__PURE__ */ jsx21(Key3, { className: "h-4 w-4" }),
|
|
6406
|
+
/* @__PURE__ */ jsx21("span", { children: "Keyshare Status" }),
|
|
6407
|
+
/* @__PURE__ */ jsx21("button", { onClick: fetchRecovery, className: `p-1 ${isDark ? "text-gray-400 hover:text-gray-300" : "text-gray-500 hover:text-gray-700"}`, title: "Refresh", children: /* @__PURE__ */ jsx21(RefreshCw2, { className: `h-4 w-4 ${isRefreshing ? "animate-spin" : ""}` }) })
|
|
6668
6408
|
] })
|
|
6669
6409
|
] }) }),
|
|
6670
|
-
/* @__PURE__ */
|
|
6671
|
-
/* @__PURE__ */
|
|
6672
|
-
/* @__PURE__ */
|
|
6673
|
-
/* @__PURE__ */
|
|
6674
|
-
/* @__PURE__ */
|
|
6410
|
+
/* @__PURE__ */ jsxs13("div", { className: "grid grid-cols-3 gap-4", children: [
|
|
6411
|
+
/* @__PURE__ */ jsxs13("div", { className: "space-y-2 text-center", children: [
|
|
6412
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex items-center justify-center gap-2", children: [
|
|
6413
|
+
/* @__PURE__ */ jsx21(Cloud, { className: `h-4 w-4 ${isDark ? "text-gray-400" : "text-gray-500"}` }),
|
|
6414
|
+
/* @__PURE__ */ jsx21("span", { className: `text-sm font-medium ${isDark ? "text-gray-200" : "text-gray-800"}`, children: "Server" })
|
|
6675
6415
|
] }),
|
|
6676
|
-
/* @__PURE__ */
|
|
6677
|
-
serverHasKeyshare ? /* @__PURE__ */
|
|
6416
|
+
/* @__PURE__ */ jsxs13("span", { className: `inline-flex items-center text-sm px-3 py-2 rounded-full ${serverHasKeyshare ? isDark ? "bg-green-900/30 text-green-400" : "bg-green-100 text-green-700" : isDark ? "bg-orange-900/30 text-orange-400" : "bg-orange-100 text-orange-700"}`, children: [
|
|
6417
|
+
serverHasKeyshare ? /* @__PURE__ */ jsx21(CheckCircle22, { className: "h-4 w-4 mr-1" }) : /* @__PURE__ */ jsx21(AlertTriangle3, { className: "h-4 w-4 mr-1" }),
|
|
6678
6418
|
serverHasKeyshare ? "Ready" : "Missing"
|
|
6679
6419
|
] })
|
|
6680
6420
|
] }),
|
|
6681
|
-
/* @__PURE__ */
|
|
6682
|
-
/* @__PURE__ */
|
|
6683
|
-
/* @__PURE__ */
|
|
6684
|
-
/* @__PURE__ */
|
|
6421
|
+
/* @__PURE__ */ jsxs13("div", { className: "space-y-2 text-center", children: [
|
|
6422
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex items-center justify-center gap-2", children: [
|
|
6423
|
+
/* @__PURE__ */ jsx21(Laptop, { className: `h-4 w-4 ${isDark ? "text-gray-400" : "text-gray-500"}` }),
|
|
6424
|
+
/* @__PURE__ */ jsx21("span", { className: `text-sm font-medium ${isDark ? "text-gray-200" : "text-gray-800"}`, children: "Local" })
|
|
6685
6425
|
] }),
|
|
6686
|
-
/* @__PURE__ */
|
|
6687
|
-
localInfo?.hasKeyshare ? /* @__PURE__ */
|
|
6426
|
+
/* @__PURE__ */ jsxs13("span", { className: `inline-flex items-center text-sm px-3 py-2 rounded-full ${localInfo?.hasKeyshare ? isDark ? "bg-green-900/30 text-green-400" : "bg-green-100 text-green-700" : isDark ? "bg-orange-900/30 text-orange-400" : "bg-orange-100 text-orange-700"}`, children: [
|
|
6427
|
+
localInfo?.hasKeyshare ? /* @__PURE__ */ jsx21(CheckCircle22, { className: "h-4 w-4 mr-1" }) : /* @__PURE__ */ jsx21(AlertTriangle3, { className: "h-4 w-4 mr-1" }),
|
|
6688
6428
|
localInfo?.hasKeyshare ? "Ready" : "Missing"
|
|
6689
6429
|
] })
|
|
6690
6430
|
] }),
|
|
6691
|
-
/* @__PURE__ */
|
|
6692
|
-
/* @__PURE__ */
|
|
6693
|
-
/* @__PURE__ */
|
|
6694
|
-
/* @__PURE__ */
|
|
6431
|
+
/* @__PURE__ */ jsxs13("div", { className: "space-y-2 text-center", children: [
|
|
6432
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex items-center justify-center gap-2", children: [
|
|
6433
|
+
/* @__PURE__ */ jsx21(Shield2, { className: `h-4 w-4 ${isDark ? "text-gray-400" : "text-gray-500"}` }),
|
|
6434
|
+
/* @__PURE__ */ jsx21("span", { className: `text-sm font-medium ${isDark ? "text-gray-200" : "text-gray-800"}`, children: "Vault" })
|
|
6695
6435
|
] }),
|
|
6696
|
-
/* @__PURE__ */
|
|
6697
|
-
hasServerBackup ? /* @__PURE__ */
|
|
6436
|
+
/* @__PURE__ */ jsxs13("span", { className: `inline-flex items-center text-sm px-3 py-2 rounded-full ${hasServerBackup ? isDark ? "bg-green-900/30 text-green-400" : "bg-green-100 text-green-700" : isDark ? "bg-orange-900/30 text-orange-400" : "bg-orange-100 text-orange-700"}`, children: [
|
|
6437
|
+
hasServerBackup ? /* @__PURE__ */ jsx21(CheckCircle22, { className: "h-4 w-4 mr-1" }) : /* @__PURE__ */ jsx21(AlertTriangle3, { className: "h-4 w-4 mr-1" }),
|
|
6698
6438
|
hasServerBackup ? "Ready" : "None"
|
|
6699
6439
|
] })
|
|
6700
6440
|
] })
|
|
6701
6441
|
] }),
|
|
6702
|
-
localInfo?.hasKeyshare && /* @__PURE__ */
|
|
6703
|
-
localInfo.ownerAddress && /* @__PURE__ */
|
|
6442
|
+
localInfo?.hasKeyshare && /* @__PURE__ */ jsxs13("div", { className: `space-y-0.5 text-[10px] leading-tight ${isDark ? "text-gray-400" : "text-gray-600"}`, children: [
|
|
6443
|
+
localInfo.ownerAddress && /* @__PURE__ */ jsxs13("div", { children: [
|
|
6704
6444
|
"Owner: ",
|
|
6705
|
-
/* @__PURE__ */
|
|
6445
|
+
/* @__PURE__ */ jsx21("span", { className: `font-mono break-all ${isDark ? "text-gray-200" : "text-gray-800"}`, children: localInfo.ownerAddress })
|
|
6706
6446
|
] }),
|
|
6707
|
-
typeof localInfo.keyshareSize === "number" && /* @__PURE__ */
|
|
6447
|
+
typeof localInfo.keyshareSize === "number" && /* @__PURE__ */ jsxs13("div", { children: [
|
|
6708
6448
|
"Size: ",
|
|
6709
|
-
/* @__PURE__ */
|
|
6449
|
+
/* @__PURE__ */ jsxs13("span", { className: `font-mono ${isDark ? "text-gray-200" : "text-gray-800"}`, children: [
|
|
6710
6450
|
Math.round((localInfo.keyshareSize || 0) / 1024),
|
|
6711
6451
|
"KB"
|
|
6712
6452
|
] })
|
|
6713
6453
|
] }),
|
|
6714
|
-
localInfo.sessionId && /* @__PURE__ */
|
|
6454
|
+
localInfo.sessionId && /* @__PURE__ */ jsxs13("div", { children: [
|
|
6715
6455
|
"Session: ",
|
|
6716
|
-
/* @__PURE__ */
|
|
6456
|
+
/* @__PURE__ */ jsx21("span", { className: `font-mono break-all ${isDark ? "text-gray-200" : "text-gray-800"}`, children: localInfo.sessionId })
|
|
6717
6457
|
] })
|
|
6718
6458
|
] }),
|
|
6719
|
-
/* @__PURE__ */
|
|
6720
|
-
backup.server.enabled && backup.server.lastBackup && /* @__PURE__ */
|
|
6721
|
-
/* @__PURE__ */
|
|
6722
|
-
/* @__PURE__ */
|
|
6459
|
+
/* @__PURE__ */ jsxs13("div", { className: `space-y-0.5 text-[10px] leading-tight ${isDark ? "text-gray-400" : "text-gray-500"}`, children: [
|
|
6460
|
+
backup.server.enabled && backup.server.lastBackup && /* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-1", children: [
|
|
6461
|
+
/* @__PURE__ */ jsx21(Server2, { className: "h-2.5 w-2.5 text-gray-400" }),
|
|
6462
|
+
/* @__PURE__ */ jsxs13("span", { children: [
|
|
6723
6463
|
"Server: ",
|
|
6724
6464
|
new Date(backup.server.lastBackup).toLocaleString()
|
|
6725
6465
|
] })
|
|
6726
6466
|
] }),
|
|
6727
|
-
!backup.server.lastBackup && recoveryCreatedAt && /* @__PURE__ */
|
|
6728
|
-
/* @__PURE__ */
|
|
6729
|
-
/* @__PURE__ */
|
|
6467
|
+
!backup.server.lastBackup && recoveryCreatedAt && /* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-1", children: [
|
|
6468
|
+
/* @__PURE__ */ jsx21(Server2, { className: "h-2.5 w-2.5 text-gray-400" }),
|
|
6469
|
+
/* @__PURE__ */ jsxs13("span", { children: [
|
|
6730
6470
|
"Server: ",
|
|
6731
6471
|
new Date(recoveryCreatedAt).toLocaleString()
|
|
6732
6472
|
] })
|
|
6733
6473
|
] }),
|
|
6734
|
-
backup.cloud.enabled && backup.cloud.lastBackup && /* @__PURE__ */
|
|
6735
|
-
/* @__PURE__ */
|
|
6736
|
-
/* @__PURE__ */
|
|
6474
|
+
backup.cloud.enabled && backup.cloud.lastBackup && /* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-1", children: [
|
|
6475
|
+
/* @__PURE__ */ jsx21(Cloud, { className: "h-2.5 w-2.5 text-gray-400" }),
|
|
6476
|
+
/* @__PURE__ */ jsxs13("span", { children: [
|
|
6737
6477
|
"Cloud: ",
|
|
6738
6478
|
new Date(backup.cloud.lastBackup).toLocaleString()
|
|
6739
6479
|
] })
|
|
6740
6480
|
] }),
|
|
6741
|
-
backup.local.enabled && backup.local.lastBackup && /* @__PURE__ */
|
|
6742
|
-
/* @__PURE__ */
|
|
6743
|
-
/* @__PURE__ */
|
|
6481
|
+
backup.local.enabled && backup.local.lastBackup && /* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-1", children: [
|
|
6482
|
+
/* @__PURE__ */ jsx21(HardDrive, { className: "h-2.5 w-2.5 text-gray-400" }),
|
|
6483
|
+
/* @__PURE__ */ jsxs13("span", { children: [
|
|
6744
6484
|
"Local: ",
|
|
6745
6485
|
new Date(backup.local.lastBackup).toLocaleString()
|
|
6746
6486
|
] })
|
|
6747
6487
|
] })
|
|
6748
6488
|
] }),
|
|
6749
|
-
(recoveryCreatedAt || recoveryBrowser || recoveryUa || recoveryDeviceId || recoveryDeviceName) && /* @__PURE__ */
|
|
6750
|
-
/* @__PURE__ */
|
|
6751
|
-
recoveryCreatedAt && /* @__PURE__ */
|
|
6489
|
+
(recoveryCreatedAt || recoveryBrowser || recoveryUa || recoveryDeviceId || recoveryDeviceName) && /* @__PURE__ */ jsxs13("div", { className: `space-y-0.5 text-[10px] leading-tight ${isDark ? "text-gray-400" : "text-gray-600"}`, children: [
|
|
6490
|
+
/* @__PURE__ */ jsx21("div", { className: `font-medium text-[11px] ${isDark ? "text-indigo-400" : "text-indigo-600"}`, children: "Device Information:" }),
|
|
6491
|
+
recoveryCreatedAt && /* @__PURE__ */ jsxs13("div", { children: [
|
|
6752
6492
|
"Created: ",
|
|
6753
6493
|
new Date(recoveryCreatedAt).toLocaleString(),
|
|
6754
6494
|
" "
|
|
6755
6495
|
] }),
|
|
6756
|
-
recoveryCountry && /* @__PURE__ */
|
|
6496
|
+
recoveryCountry && /* @__PURE__ */ jsxs13("div", { children: [
|
|
6757
6497
|
"Country: ",
|
|
6758
6498
|
recoveryCountry
|
|
6759
6499
|
] }),
|
|
6760
|
-
recoveryBrowser && /* @__PURE__ */
|
|
6500
|
+
recoveryBrowser && /* @__PURE__ */ jsxs13("div", { children: [
|
|
6761
6501
|
"Browser: ",
|
|
6762
6502
|
recoveryBrowser
|
|
6763
6503
|
] }),
|
|
6764
|
-
parseOS(recoveryUa) && /* @__PURE__ */
|
|
6504
|
+
parseOS(recoveryUa) && /* @__PURE__ */ jsxs13("div", { children: [
|
|
6765
6505
|
"OS: ",
|
|
6766
6506
|
parseOS(recoveryUa)
|
|
6767
6507
|
] }),
|
|
6768
|
-
recoveryDeviceName && /* @__PURE__ */
|
|
6508
|
+
recoveryDeviceName && /* @__PURE__ */ jsxs13("div", { children: [
|
|
6769
6509
|
"Device: ",
|
|
6770
6510
|
recoveryDeviceName
|
|
6771
6511
|
] }),
|
|
6772
|
-
recoveryDeviceId && /* @__PURE__ */
|
|
6512
|
+
recoveryDeviceId && /* @__PURE__ */ jsxs13("div", { children: [
|
|
6773
6513
|
"Device ID: ",
|
|
6774
|
-
/* @__PURE__ */
|
|
6514
|
+
/* @__PURE__ */ jsx21("span", { className: "font-mono break-all", children: recoveryDeviceId })
|
|
6775
6515
|
] })
|
|
6776
6516
|
] }),
|
|
6777
|
-
trustedApps.length > 0 && /* @__PURE__ */
|
|
6778
|
-
/* @__PURE__ */
|
|
6517
|
+
trustedApps.length > 0 && /* @__PURE__ */ jsxs13("div", { className: `space-y-2 ${isDark ? "text-gray-400" : "text-gray-600"}`, children: [
|
|
6518
|
+
/* @__PURE__ */ jsxs13("div", { className: `font-medium text-[11px] ${isDark ? "text-green-400" : "text-green-600"}`, children: [
|
|
6779
6519
|
"Trusted Applications (",
|
|
6780
6520
|
trustedApps.length,
|
|
6781
6521
|
"):"
|
|
6782
6522
|
] }),
|
|
6783
|
-
/* @__PURE__ */
|
|
6784
|
-
/* @__PURE__ */
|
|
6785
|
-
/* @__PURE__ */
|
|
6786
|
-
/* @__PURE__ */
|
|
6523
|
+
/* @__PURE__ */ jsx21("div", { className: "space-y-1", children: trustedApps.map((app, index) => /* @__PURE__ */ jsxs13("div", { className: `text-[10px] leading-tight p-2 rounded flex items-start justify-between gap-2 ${isDark ? "bg-gray-800/50" : "bg-gray-50"}`, children: [
|
|
6524
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex-1 min-w-0", children: [
|
|
6525
|
+
/* @__PURE__ */ jsx21("div", { className: `font-medium ${isDark ? "text-gray-200" : "text-gray-800"}`, children: new URL(app.origin).hostname }),
|
|
6526
|
+
/* @__PURE__ */ jsxs13("div", { className: `${isDark ? "text-gray-400" : "text-gray-500"}`, children: [
|
|
6787
6527
|
"Trusted: ",
|
|
6788
6528
|
new Date(app.trustedAt).toLocaleDateString()
|
|
6789
6529
|
] })
|
|
6790
6530
|
] }),
|
|
6791
|
-
/* @__PURE__ */
|
|
6531
|
+
/* @__PURE__ */ jsx21(
|
|
6792
6532
|
"button",
|
|
6793
6533
|
{
|
|
6794
6534
|
onClick: () => setAppToRemove({ projectId: app.projectId, origin: app.origin, hostname: new URL(app.origin).hostname }),
|
|
6795
6535
|
className: `p-1 rounded transition-colors ${isDark ? "text-gray-400 hover:text-red-400 hover:bg-red-900/20" : "text-gray-500 hover:text-red-600 hover:bg-red-50"}`,
|
|
6796
6536
|
title: "Remove from trusted",
|
|
6797
|
-
children: /* @__PURE__ */
|
|
6537
|
+
children: /* @__PURE__ */ jsx21(Trash22, { className: "h-3 w-3" })
|
|
6798
6538
|
}
|
|
6799
6539
|
)
|
|
6800
6540
|
] }, index)) })
|
|
6801
|
-
] })
|
|
6802
|
-
localInfo?.hasKeyshare && !showBackupForm && /* @__PURE__ */ jsx22("div", { className: "pt-2", children: /* @__PURE__ */ jsxs14(
|
|
6803
|
-
Button,
|
|
6804
|
-
{
|
|
6805
|
-
onClick: () => setShowBackupForm(true),
|
|
6806
|
-
variant: "success",
|
|
6807
|
-
className: "w-full",
|
|
6808
|
-
size: "lg",
|
|
6809
|
-
children: [
|
|
6810
|
-
/* @__PURE__ */ jsx22(Plus, { className: "h-4 w-4" }),
|
|
6811
|
-
"Create Backup"
|
|
6812
|
-
]
|
|
6813
|
-
}
|
|
6814
|
-
) })
|
|
6541
|
+
] })
|
|
6815
6542
|
] })
|
|
6816
6543
|
] }),
|
|
6817
|
-
appToRemove && /* @__PURE__ */
|
|
6818
|
-
/* @__PURE__ */
|
|
6819
|
-
/* @__PURE__ */
|
|
6820
|
-
/* @__PURE__ */
|
|
6821
|
-
/* @__PURE__ */
|
|
6822
|
-
/* @__PURE__ */
|
|
6823
|
-
/* @__PURE__ */
|
|
6824
|
-
/* @__PURE__ */
|
|
6825
|
-
/* @__PURE__ */
|
|
6826
|
-
/* @__PURE__ */
|
|
6827
|
-
/* @__PURE__ */
|
|
6828
|
-
/* @__PURE__ */
|
|
6829
|
-
/* @__PURE__ */
|
|
6544
|
+
appToRemove && /* @__PURE__ */ jsx21(Dialog, { open: !!appToRemove, onOpenChange: (open2) => !open2 && setAppToRemove(null), children: /* @__PURE__ */ jsxs13(DialogContent, { className: `lumia-scope max-w-[380px] p-0 border-0 ${theme.modalBg} rounded-2xl overflow-hidden gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`, children: [
|
|
6545
|
+
/* @__PURE__ */ jsx21(VisuallyHidden, { children: /* @__PURE__ */ jsx21(DialogTitle, { children: "Remove Trusted Application" }) }),
|
|
6546
|
+
/* @__PURE__ */ jsx21(DialogDescription, { className: "sr-only", children: "Confirm removal of trusted application" }),
|
|
6547
|
+
/* @__PURE__ */ jsxs13("div", { className: "p-5 space-y-4", children: [
|
|
6548
|
+
/* @__PURE__ */ jsxs13("div", { className: `text-center ${theme.text}`, children: [
|
|
6549
|
+
/* @__PURE__ */ jsx21("div", { className: "text-lg font-semibold mb-2", children: "Remove Trusted App?" }),
|
|
6550
|
+
/* @__PURE__ */ jsx21("div", { className: `text-sm ${isDark ? "text-gray-300" : "text-gray-700"} mb-3`, children: /* @__PURE__ */ jsx21("span", { className: "font-medium", children: appToRemove.hostname }) }),
|
|
6551
|
+
/* @__PURE__ */ jsxs13("div", { className: `text-xs ${isDark ? "text-gray-400" : "text-gray-600"} text-left space-y-2`, children: [
|
|
6552
|
+
/* @__PURE__ */ jsx21("p", { children: "After removing this application from trusted list:" }),
|
|
6553
|
+
/* @__PURE__ */ jsxs13("ul", { className: "list-disc list-inside space-y-1 ml-2", children: [
|
|
6554
|
+
/* @__PURE__ */ jsx21("li", { children: "All transactions will require confirmation in a separate window" }),
|
|
6555
|
+
/* @__PURE__ */ jsx21("li", { children: "You can add it back to trusted list at any time" }),
|
|
6556
|
+
/* @__PURE__ */ jsx21("li", { children: 'Transaction confirmation window will show "Trust this app" checkbox' })
|
|
6830
6557
|
] })
|
|
6831
6558
|
] })
|
|
6832
6559
|
] }),
|
|
6833
|
-
/* @__PURE__ */
|
|
6834
|
-
/* @__PURE__ */
|
|
6560
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex gap-2", children: [
|
|
6561
|
+
/* @__PURE__ */ jsx21(
|
|
6835
6562
|
Button,
|
|
6836
6563
|
{
|
|
6837
6564
|
onClick: () => setAppToRemove(null),
|
|
@@ -6841,7 +6568,7 @@ var SecurityModal = ({ open, onOpenChange, onBack }) => {
|
|
|
6841
6568
|
children: "Cancel"
|
|
6842
6569
|
}
|
|
6843
6570
|
),
|
|
6844
|
-
/* @__PURE__ */
|
|
6571
|
+
/* @__PURE__ */ jsx21(
|
|
6845
6572
|
Button,
|
|
6846
6573
|
{
|
|
6847
6574
|
onClick: confirmRemoveTrustedApp,
|
|
@@ -6858,30 +6585,32 @@ var SecurityModal = ({ open, onOpenChange, onBack }) => {
|
|
|
6858
6585
|
};
|
|
6859
6586
|
|
|
6860
6587
|
// src/internal/components/KeyshareBackup.tsx
|
|
6861
|
-
import * as
|
|
6862
|
-
import { Shield as
|
|
6588
|
+
import * as React18 from "react";
|
|
6589
|
+
import { Shield as Shield3, Server as Server3, CheckCircle2 as CheckCircle23, AlertCircle as AlertCircle2, Key as Key4, X as X3, Eye as Eye2, EyeOff as EyeOff2, Download, Cloud as Cloud2, Lock } from "lucide-react";
|
|
6863
6590
|
init_iframe_manager();
|
|
6864
|
-
import { Fragment as
|
|
6591
|
+
import { Fragment as Fragment5, jsx as jsx22, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
6865
6592
|
function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
6866
|
-
const
|
|
6593
|
+
const { config } = useLumiaPassportConfig();
|
|
6594
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
6595
|
+
const [backupStatus, setBackupStatus] = React18.useState({
|
|
6867
6596
|
server: {},
|
|
6868
6597
|
cloud: {},
|
|
6869
6598
|
local: {}
|
|
6870
6599
|
});
|
|
6871
|
-
const [loading, setLoading] =
|
|
6600
|
+
const [loading, setLoading] = React18.useState({
|
|
6872
6601
|
server: false,
|
|
6873
6602
|
cloud: false,
|
|
6874
6603
|
local: false
|
|
6875
6604
|
});
|
|
6876
|
-
const [error, setError] =
|
|
6877
|
-
const [success, setSuccess] =
|
|
6878
|
-
const [showPassword, setShowPassword] =
|
|
6879
|
-
const [useCustomPassword, setUseCustomPassword] =
|
|
6880
|
-
const [customPassword, setCustomPassword] =
|
|
6881
|
-
const [cloudProviders, setCloudProviders] =
|
|
6882
|
-
const [selectedCloudProvider, setSelectedCloudProvider] =
|
|
6883
|
-
const [hasKeyshareData, setHasKeyshareData] =
|
|
6884
|
-
const iframeManager =
|
|
6605
|
+
const [error, setError] = React18.useState(null);
|
|
6606
|
+
const [success, setSuccess] = React18.useState(null);
|
|
6607
|
+
const [showPassword, setShowPassword] = React18.useState(false);
|
|
6608
|
+
const [useCustomPassword, setUseCustomPassword] = React18.useState(false);
|
|
6609
|
+
const [customPassword, setCustomPassword] = React18.useState("");
|
|
6610
|
+
const [cloudProviders, setCloudProviders] = React18.useState([]);
|
|
6611
|
+
const [selectedCloudProvider, setSelectedCloudProvider] = React18.useState(null);
|
|
6612
|
+
const [hasKeyshareData, setHasKeyshareData] = React18.useState(true);
|
|
6613
|
+
const iframeManager = React18.useMemo(() => {
|
|
6885
6614
|
try {
|
|
6886
6615
|
return getIframeManager();
|
|
6887
6616
|
} catch (e) {
|
|
@@ -6889,7 +6618,7 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
6889
6618
|
return null;
|
|
6890
6619
|
}
|
|
6891
6620
|
}, []);
|
|
6892
|
-
|
|
6621
|
+
React18.useEffect(() => {
|
|
6893
6622
|
const loadCloudProviders = async () => {
|
|
6894
6623
|
try {
|
|
6895
6624
|
const { getAvailableCloudProviders: getAvailableCloudProviders3 } = await Promise.resolve().then(() => (init_cloudStorage(), cloudStorage_exports));
|
|
@@ -6909,7 +6638,7 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
6909
6638
|
};
|
|
6910
6639
|
loadCloudProviders();
|
|
6911
6640
|
}, [selectedCloudProvider]);
|
|
6912
|
-
const refreshStatus =
|
|
6641
|
+
const refreshStatus = React18.useCallback(async () => {
|
|
6913
6642
|
if (!iframeManager) return;
|
|
6914
6643
|
try {
|
|
6915
6644
|
const status = await iframeManager.getBackupStatus(userId);
|
|
@@ -6918,7 +6647,7 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
6918
6647
|
console.error("[KeyshareBackup] Failed to get backup status:", error2);
|
|
6919
6648
|
}
|
|
6920
6649
|
}, [iframeManager, userId]);
|
|
6921
|
-
|
|
6650
|
+
React18.useEffect(() => {
|
|
6922
6651
|
refreshStatus();
|
|
6923
6652
|
}, [refreshStatus]);
|
|
6924
6653
|
const handleBackup = async (method) => {
|
|
@@ -7003,30 +6732,30 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
7003
6732
|
const date = new Date(timestamp);
|
|
7004
6733
|
return `${date.toLocaleDateString()} ${date.toLocaleTimeString()}`;
|
|
7005
6734
|
};
|
|
7006
|
-
return /* @__PURE__ */
|
|
7007
|
-
/* @__PURE__ */
|
|
7008
|
-
/* @__PURE__ */
|
|
7009
|
-
/* @__PURE__ */
|
|
7010
|
-
/* @__PURE__ */
|
|
7011
|
-
/* @__PURE__ */
|
|
7012
|
-
/* @__PURE__ */
|
|
6735
|
+
return /* @__PURE__ */ jsxs14(Card, { className: `${theme.modalBg} ${isDark ? "border-green-900/50" : "border-green-200"}`, children: [
|
|
6736
|
+
/* @__PURE__ */ jsx22(CardHeader, { className: "pb-4", children: /* @__PURE__ */ jsxs14("div", { className: "flex items-center justify-between", children: [
|
|
6737
|
+
/* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-3", children: [
|
|
6738
|
+
/* @__PURE__ */ jsx22(Shield3, { className: `h-6 w-6 ${isDark ? "text-green-400" : "text-green-600"}` }),
|
|
6739
|
+
/* @__PURE__ */ jsxs14("div", { children: [
|
|
6740
|
+
/* @__PURE__ */ jsx22(CardTitle, { className: `text-lg ${theme.titleText}`, children: "Create Backup" }),
|
|
6741
|
+
/* @__PURE__ */ jsx22(CardDescription, { className: `text-sm ${theme.mutedText}`, children: "Secure your keyshare with encrypted backups" })
|
|
7013
6742
|
] })
|
|
7014
6743
|
] }),
|
|
7015
|
-
onClose && /* @__PURE__ */
|
|
6744
|
+
onClose && /* @__PURE__ */ jsx22("button", { onClick: onClose, className: `p-1 rounded transition-colors ${isDark ? "bg-red-900/40 text-red-400 hover:bg-red-900/60" : "bg-red-100 text-red-600 hover:bg-red-200"}`, title: "Close", children: /* @__PURE__ */ jsx22(X3, { className: "h-4 w-4" }) })
|
|
7016
6745
|
] }) }),
|
|
7017
|
-
/* @__PURE__ */
|
|
7018
|
-
error && /* @__PURE__ */
|
|
7019
|
-
/* @__PURE__ */
|
|
7020
|
-
/* @__PURE__ */
|
|
6746
|
+
/* @__PURE__ */ jsxs14(CardContent, { className: "space-y-6", children: [
|
|
6747
|
+
error && /* @__PURE__ */ jsxs14("div", { className: `flex items-center gap-2 p-3 rounded text-sm ${isDark ? "bg-red-950/50 border border-red-900/60 text-red-300" : "bg-red-50 border border-red-200 text-red-700"}`, children: [
|
|
6748
|
+
/* @__PURE__ */ jsx22(AlertCircle2, { className: "h-4 w-4 flex-shrink-0" }),
|
|
6749
|
+
/* @__PURE__ */ jsx22("span", { children: error })
|
|
7021
6750
|
] }),
|
|
7022
|
-
success && /* @__PURE__ */
|
|
7023
|
-
/* @__PURE__ */
|
|
7024
|
-
/* @__PURE__ */
|
|
6751
|
+
success && /* @__PURE__ */ jsxs14("div", { className: `flex items-center gap-2 p-3 rounded text-sm ${isDark ? "bg-green-950/50 border border-green-900/60 text-green-300" : "bg-green-50 border border-green-200 text-green-700"}`, children: [
|
|
6752
|
+
/* @__PURE__ */ jsx22(CheckCircle23, { className: "h-4 w-4 flex-shrink-0" }),
|
|
6753
|
+
/* @__PURE__ */ jsx22("span", { children: success })
|
|
7025
6754
|
] }),
|
|
7026
|
-
/* @__PURE__ */
|
|
7027
|
-
/* @__PURE__ */
|
|
7028
|
-
/* @__PURE__ */
|
|
7029
|
-
/* @__PURE__ */
|
|
6755
|
+
/* @__PURE__ */ jsxs14("div", { className: "space-y-3", children: [
|
|
6756
|
+
/* @__PURE__ */ jsx22("div", { className: `text-sm font-medium ${isDark ? "text-gray-300" : "text-gray-700"}`, children: "Encryption Method:" }),
|
|
6757
|
+
/* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-2", children: [
|
|
6758
|
+
/* @__PURE__ */ jsx22(
|
|
7030
6759
|
"input",
|
|
7031
6760
|
{
|
|
7032
6761
|
type: "checkbox",
|
|
@@ -7036,14 +6765,14 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
7036
6765
|
className: "rounded"
|
|
7037
6766
|
}
|
|
7038
6767
|
),
|
|
7039
|
-
/* @__PURE__ */
|
|
6768
|
+
/* @__PURE__ */ jsx22("label", { htmlFor: "use-backup-password", className: `text-sm font-medium ${isDark ? "text-gray-300" : ""}`, children: "Use custom password instead of passkey" })
|
|
7040
6769
|
] }),
|
|
7041
|
-
!useCustomPassword && /* @__PURE__ */
|
|
7042
|
-
/* @__PURE__ */
|
|
7043
|
-
/* @__PURE__ */
|
|
6770
|
+
!useCustomPassword && /* @__PURE__ */ jsx22("div", { className: `p-3 rounded text-sm ${isDark ? "bg-blue-950/50 border border-blue-900/60 text-blue-300" : "bg-blue-50 border border-blue-200 text-blue-700"}`, children: /* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-2", children: [
|
|
6771
|
+
/* @__PURE__ */ jsx22(Key4, { className: "h-4 w-4" }),
|
|
6772
|
+
/* @__PURE__ */ jsx22("span", { children: "Your passkey will be used to encrypt the backup securely" })
|
|
7044
6773
|
] }) }),
|
|
7045
|
-
useCustomPassword && /* @__PURE__ */
|
|
7046
|
-
/* @__PURE__ */
|
|
6774
|
+
useCustomPassword && /* @__PURE__ */ jsxs14("div", { className: "relative", children: [
|
|
6775
|
+
/* @__PURE__ */ jsx22(
|
|
7047
6776
|
Input,
|
|
7048
6777
|
{
|
|
7049
6778
|
type: showPassword ? "text" : "password",
|
|
@@ -7053,28 +6782,28 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
7053
6782
|
className: "pr-10"
|
|
7054
6783
|
}
|
|
7055
6784
|
),
|
|
7056
|
-
/* @__PURE__ */
|
|
6785
|
+
/* @__PURE__ */ jsx22(
|
|
7057
6786
|
"button",
|
|
7058
6787
|
{
|
|
7059
6788
|
type: "button",
|
|
7060
6789
|
onClick: () => setShowPassword(!showPassword),
|
|
7061
6790
|
className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-500 hover:text-gray-700",
|
|
7062
|
-
children: showPassword ? /* @__PURE__ */
|
|
6791
|
+
children: showPassword ? /* @__PURE__ */ jsx22(EyeOff2, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx22(Eye2, { className: "h-4 w-4" })
|
|
7063
6792
|
}
|
|
7064
6793
|
)
|
|
7065
6794
|
] })
|
|
7066
6795
|
] }),
|
|
7067
|
-
/* @__PURE__ */
|
|
7068
|
-
/* @__PURE__ */
|
|
7069
|
-
/* @__PURE__ */
|
|
7070
|
-
/* @__PURE__ */
|
|
7071
|
-
/* @__PURE__ */
|
|
7072
|
-
/* @__PURE__ */
|
|
7073
|
-
/* @__PURE__ */
|
|
7074
|
-
/* @__PURE__ */
|
|
6796
|
+
/* @__PURE__ */ jsxs14("div", { className: "space-y-4", children: [
|
|
6797
|
+
/* @__PURE__ */ jsx22("div", { className: `text-sm font-medium ${isDark ? "text-gray-300" : "text-gray-700"}`, children: "Choose Backup Method:" }),
|
|
6798
|
+
/* @__PURE__ */ jsxs14("div", { className: `p-4 rounded-lg border ${isDark ? "border-blue-800/60 bg-blue-950/60" : "border-blue-200 bg-blue-50/50"}`, children: [
|
|
6799
|
+
/* @__PURE__ */ jsx22("div", { className: "flex items-center justify-between mb-3", children: /* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-3", children: [
|
|
6800
|
+
/* @__PURE__ */ jsx22(Server3, { className: `h-5 w-5 ${isDark ? "text-blue-400" : "text-blue-600"}` }),
|
|
6801
|
+
/* @__PURE__ */ jsxs14("div", { children: [
|
|
6802
|
+
/* @__PURE__ */ jsx22("div", { className: `font-medium text-sm ${isDark ? "text-gray-200" : ""}`, children: "Server Backup" }),
|
|
6803
|
+
/* @__PURE__ */ jsx22("div", { className: `text-xs ${isDark ? "text-gray-400" : "text-gray-600"}`, children: "Store encrypted backup on secure server" })
|
|
7075
6804
|
] })
|
|
7076
6805
|
] }) }),
|
|
7077
|
-
/* @__PURE__ */
|
|
6806
|
+
/* @__PURE__ */ jsx22(
|
|
7078
6807
|
Button,
|
|
7079
6808
|
{
|
|
7080
6809
|
onClick: () => handleBackup("server"),
|
|
@@ -7083,33 +6812,33 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
7083
6812
|
children: loading.server ? "Creating..." : useCustomPassword ? "Create with Password" : "Create with Passkey"
|
|
7084
6813
|
}
|
|
7085
6814
|
),
|
|
7086
|
-
/* @__PURE__ */
|
|
6815
|
+
/* @__PURE__ */ jsxs14("div", { className: `text-xs mt-2 ${isDark ? "text-gray-400" : "text-gray-600"}`, children: [
|
|
7087
6816
|
"Encrypted backup stored on secure server \u2022 Last: ",
|
|
7088
6817
|
formatLastBackup(backupStatus.server.lastBackup)
|
|
7089
6818
|
] })
|
|
7090
6819
|
] }),
|
|
7091
|
-
/* @__PURE__ */
|
|
7092
|
-
/* @__PURE__ */
|
|
7093
|
-
/* @__PURE__ */
|
|
7094
|
-
/* @__PURE__ */
|
|
7095
|
-
/* @__PURE__ */
|
|
7096
|
-
/* @__PURE__ */
|
|
6820
|
+
/* @__PURE__ */ jsxs14("div", { className: `p-4 rounded-lg border ${isDark ? "border-sky-800/60 bg-sky-950/60" : "border-sky-200 bg-sky-50/50"}`, children: [
|
|
6821
|
+
/* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-3 mb-3", children: [
|
|
6822
|
+
/* @__PURE__ */ jsx22(Cloud2, { className: `h-5 w-5 ${isDark ? "text-sky-400" : "text-sky-600"}` }),
|
|
6823
|
+
/* @__PURE__ */ jsxs14("div", { children: [
|
|
6824
|
+
/* @__PURE__ */ jsx22("div", { className: `font-medium text-sm ${isDark ? "text-gray-200" : ""}`, children: "Cloud Backup" }),
|
|
6825
|
+
/* @__PURE__ */ jsx22("div", { className: `text-xs ${isDark ? "text-gray-400" : "text-gray-600"}`, children: "Store encrypted backup in cloud storage" })
|
|
7097
6826
|
] })
|
|
7098
6827
|
] }),
|
|
7099
|
-
cloudProviders.length > 1 && /* @__PURE__ */
|
|
6828
|
+
cloudProviders.length > 1 && /* @__PURE__ */ jsx22("div", { className: "mb-3", children: /* @__PURE__ */ jsx22(
|
|
7100
6829
|
"select",
|
|
7101
6830
|
{
|
|
7102
6831
|
value: selectedCloudProvider || "",
|
|
7103
6832
|
onChange: (e) => setSelectedCloudProvider(e.target.value),
|
|
7104
|
-
className:
|
|
7105
|
-
children: cloudProviders.map((provider) => /* @__PURE__ */
|
|
6833
|
+
className: `text-sm border rounded px-2 py-1 w-full ${isDark ? "bg-gray-800 border-gray-700 text-gray-200" : ""}`,
|
|
6834
|
+
children: cloudProviders.map((provider) => /* @__PURE__ */ jsxs14("option", { value: provider.id, disabled: !provider.available, children: [
|
|
7106
6835
|
provider.name,
|
|
7107
6836
|
" ",
|
|
7108
6837
|
provider.available ? "" : "(Not Available)"
|
|
7109
6838
|
] }, provider.id))
|
|
7110
6839
|
}
|
|
7111
6840
|
) }),
|
|
7112
|
-
/* @__PURE__ */
|
|
6841
|
+
/* @__PURE__ */ jsx22(
|
|
7113
6842
|
Button,
|
|
7114
6843
|
{
|
|
7115
6844
|
onClick: () => handleBackup("cloud"),
|
|
@@ -7118,17 +6847,17 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
7118
6847
|
children: loading.cloud ? "Creating..." : useCustomPassword ? "Create with Password" : "Create with Passkey"
|
|
7119
6848
|
}
|
|
7120
6849
|
),
|
|
7121
|
-
/* @__PURE__ */
|
|
6850
|
+
/* @__PURE__ */ jsx22("div", { className: `text-xs mt-2 ${isDark ? "text-gray-400" : "text-gray-600"}`, children: cloudProviders.length > 0 ? `Direct backup to ${cloudProviders.find((p) => p.id === selectedCloudProvider)?.name || "cloud storage"} \u2022 Last: ${formatLastBackup(backupStatus.cloud.lastBackup)}` : `No cloud providers configured \u2022 Last: ${formatLastBackup(backupStatus.cloud.lastBackup)}` })
|
|
7122
6851
|
] }),
|
|
7123
|
-
/* @__PURE__ */
|
|
7124
|
-
/* @__PURE__ */
|
|
7125
|
-
/* @__PURE__ */
|
|
7126
|
-
/* @__PURE__ */
|
|
7127
|
-
/* @__PURE__ */
|
|
7128
|
-
/* @__PURE__ */
|
|
6852
|
+
/* @__PURE__ */ jsxs14("div", { className: `p-4 rounded-lg border ${isDark ? "border-purple-800/60 bg-purple-950/60" : "border-purple-200 bg-purple-50/50"}`, children: [
|
|
6853
|
+
/* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-3 mb-3", children: [
|
|
6854
|
+
/* @__PURE__ */ jsx22(Download, { className: `h-5 w-5 ${isDark ? "text-purple-400" : "text-purple-600"}` }),
|
|
6855
|
+
/* @__PURE__ */ jsxs14("div", { children: [
|
|
6856
|
+
/* @__PURE__ */ jsx22("div", { className: `font-medium text-sm ${isDark ? "text-gray-200" : ""}`, children: "File Backup" }),
|
|
6857
|
+
/* @__PURE__ */ jsx22("div", { className: `text-xs ${isDark ? "text-gray-400" : "text-gray-600"}`, children: "Download encrypted backup file to your device" })
|
|
7129
6858
|
] })
|
|
7130
6859
|
] }),
|
|
7131
|
-
/* @__PURE__ */
|
|
6860
|
+
/* @__PURE__ */ jsx22(
|
|
7132
6861
|
Button,
|
|
7133
6862
|
{
|
|
7134
6863
|
onClick: () => handleBackup("local"),
|
|
@@ -7137,18 +6866,18 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
7137
6866
|
children: loading.local ? "Creating..." : useCustomPassword ? "Create & Download" : "Create & Download with Passkey"
|
|
7138
6867
|
}
|
|
7139
6868
|
),
|
|
7140
|
-
/* @__PURE__ */
|
|
6869
|
+
/* @__PURE__ */ jsxs14("div", { className: `text-xs mt-2 ${isDark ? "text-gray-400" : "text-gray-600"}`, children: [
|
|
7141
6870
|
"Download encrypted backup file to your device \u2022 Last: ",
|
|
7142
6871
|
formatLastBackup(backupStatus.local.lastBackup)
|
|
7143
6872
|
] })
|
|
7144
6873
|
] })
|
|
7145
6874
|
] }),
|
|
7146
|
-
/* @__PURE__ */
|
|
7147
|
-
/* @__PURE__ */
|
|
7148
|
-
/* @__PURE__ */
|
|
7149
|
-
/* @__PURE__ */
|
|
7150
|
-
/* @__PURE__ */
|
|
7151
|
-
useCustomPassword ? /* @__PURE__ */
|
|
6875
|
+
/* @__PURE__ */ jsxs14("div", { className: `flex items-start gap-2 p-3 rounded text-xs ${isDark ? "bg-amber-950/50 border border-amber-900/60 text-amber-300" : "bg-amber-50 border border-amber-200 text-amber-800"}`, children: [
|
|
6876
|
+
/* @__PURE__ */ jsx22(Lock, { className: "h-4 w-4 mt-0.5 flex-shrink-0" }),
|
|
6877
|
+
/* @__PURE__ */ jsxs14("div", { children: [
|
|
6878
|
+
/* @__PURE__ */ jsx22("div", { className: "font-medium", children: "Security Notice" }),
|
|
6879
|
+
/* @__PURE__ */ jsxs14("div", { className: "mt-1", children: [
|
|
6880
|
+
useCustomPassword ? /* @__PURE__ */ jsx22(Fragment5, { children: "All backups are encrypted with AES-256 using your custom password. Store your password securely - without it, backups cannot be restored." }) : /* @__PURE__ */ jsx22(Fragment5, { children: "All backups are encrypted with AES-256 using your passkey. Your passkey authenticator (device/biometrics) is required to restore backups." }),
|
|
7152
6881
|
" ",
|
|
7153
6882
|
"Without backup access, you cannot recover your smart account if you lose this device."
|
|
7154
6883
|
] })
|
|
@@ -7159,18 +6888,18 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
7159
6888
|
}
|
|
7160
6889
|
|
|
7161
6890
|
// src/internal/components/TransactionsModal.tsx
|
|
7162
|
-
import
|
|
6891
|
+
import React19 from "react";
|
|
7163
6892
|
init_base();
|
|
7164
|
-
import { Activity, ArrowUpRight, ArrowDownRight, CheckCircle2 as
|
|
7165
|
-
import { jsx as
|
|
6893
|
+
import { Activity, ArrowUpRight, ArrowDownRight, CheckCircle2 as CheckCircle24, XCircle, ArrowLeft as ArrowLeft5, RefreshCw as RefreshCw3 } from "lucide-react";
|
|
6894
|
+
import { jsx as jsx23, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
7166
6895
|
var TransactionsModal = ({ open, onOpenChange, onBack }) => {
|
|
7167
6896
|
const { address } = useLumiaSession();
|
|
7168
|
-
const [transactions, setTransactions] =
|
|
7169
|
-
const [loading, setLoading] =
|
|
7170
|
-
const [error, setError] =
|
|
6897
|
+
const [transactions, setTransactions] = React19.useState([]);
|
|
6898
|
+
const [loading, setLoading] = React19.useState(false);
|
|
6899
|
+
const [error, setError] = React19.useState(null);
|
|
7171
6900
|
const { config } = useLumiaPassportConfig();
|
|
7172
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
7173
|
-
const loadTransactions =
|
|
6901
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
6902
|
+
const loadTransactions = React19.useCallback(async () => {
|
|
7174
6903
|
if (!address) return;
|
|
7175
6904
|
setLoading(true);
|
|
7176
6905
|
setError(null);
|
|
@@ -7191,7 +6920,7 @@ var TransactionsModal = ({ open, onOpenChange, onBack }) => {
|
|
|
7191
6920
|
setLoading(false);
|
|
7192
6921
|
}
|
|
7193
6922
|
}, [address]);
|
|
7194
|
-
|
|
6923
|
+
React19.useEffect(() => {
|
|
7195
6924
|
if (open && address && !loading && transactions.length === 0) {
|
|
7196
6925
|
loadTransactions();
|
|
7197
6926
|
}
|
|
@@ -7212,98 +6941,98 @@ var TransactionsModal = ({ open, onOpenChange, onBack }) => {
|
|
|
7212
6941
|
}
|
|
7213
6942
|
};
|
|
7214
6943
|
const getStatusIcon = (status) => {
|
|
7215
|
-
return status === "ok" ? /* @__PURE__ */
|
|
6944
|
+
return status === "ok" ? /* @__PURE__ */ jsx23(CheckCircle24, { className: "w-4 h-4 text-green-500" }) : /* @__PURE__ */ jsx23(XCircle, { className: "w-4 h-4 text-red-500" });
|
|
7216
6945
|
};
|
|
7217
6946
|
const getTransactionIcon = (from, to) => {
|
|
7218
6947
|
const isIncoming = to.toLowerCase() === address?.toLowerCase();
|
|
7219
|
-
return isIncoming ? /* @__PURE__ */
|
|
6948
|
+
return isIncoming ? /* @__PURE__ */ jsx23(ArrowDownRight, { className: "w-4 h-4 text-green-500" }) : /* @__PURE__ */ jsx23(ArrowUpRight, { className: "w-4 h-4 text-blue-500" });
|
|
7220
6949
|
};
|
|
7221
6950
|
const openInExplorer = (txHash) => {
|
|
7222
6951
|
const explorerUrl = getExplorerUrl();
|
|
7223
6952
|
window.open(`${explorerUrl}/tx/${txHash}`, "_blank");
|
|
7224
6953
|
};
|
|
7225
|
-
return /* @__PURE__ */
|
|
7226
|
-
/* @__PURE__ */
|
|
7227
|
-
/* @__PURE__ */
|
|
7228
|
-
/* @__PURE__ */
|
|
7229
|
-
onBack && /* @__PURE__ */
|
|
6954
|
+
return /* @__PURE__ */ jsx23(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs15(DialogContent, { className: `lumia-scope max-w-[400px] p-0 border-0 ${theme.modalBg} rounded-2xl overflow-hidden max-h-[80vh] gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`, children: [
|
|
6955
|
+
/* @__PURE__ */ jsx23(VisuallyHidden, { children: /* @__PURE__ */ jsx23(DialogTitle, { children: "Transaction History" }) }),
|
|
6956
|
+
/* @__PURE__ */ jsx23(DialogDescription, { className: "sr-only", children: "View your transaction history" }),
|
|
6957
|
+
/* @__PURE__ */ jsx23("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2", children: [
|
|
6958
|
+
onBack && /* @__PURE__ */ jsx23(
|
|
7230
6959
|
"button",
|
|
7231
6960
|
{
|
|
7232
6961
|
onClick: onBack,
|
|
7233
6962
|
className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
|
|
7234
6963
|
title: "Back",
|
|
7235
|
-
children: /* @__PURE__ */
|
|
6964
|
+
children: /* @__PURE__ */ jsx23(ArrowLeft5, { className: "h-4 w-4" })
|
|
7236
6965
|
}
|
|
7237
6966
|
),
|
|
7238
|
-
/* @__PURE__ */
|
|
7239
|
-
/* @__PURE__ */
|
|
7240
|
-
/* @__PURE__ */
|
|
7241
|
-
/* @__PURE__ */
|
|
6967
|
+
/* @__PURE__ */ jsxs15("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
|
|
6968
|
+
/* @__PURE__ */ jsx23(Activity, { className: "h-5 w-5" }),
|
|
6969
|
+
/* @__PURE__ */ jsx23("span", { children: "Transaction History" }),
|
|
6970
|
+
/* @__PURE__ */ jsx23(
|
|
7242
6971
|
"button",
|
|
7243
6972
|
{
|
|
7244
6973
|
onClick: loadTransactions,
|
|
7245
6974
|
disabled: loading,
|
|
7246
6975
|
className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1`,
|
|
7247
6976
|
title: "Refresh transactions",
|
|
7248
|
-
children: /* @__PURE__ */
|
|
6977
|
+
children: /* @__PURE__ */ jsx23(RefreshCw3, { className: `h-4 w-4 ${loading ? "animate-spin" : ""}` })
|
|
7249
6978
|
}
|
|
7250
6979
|
)
|
|
7251
6980
|
] })
|
|
7252
6981
|
] }) }),
|
|
7253
|
-
/* @__PURE__ */
|
|
7254
|
-
/* @__PURE__ */
|
|
7255
|
-
/* @__PURE__ */
|
|
7256
|
-
] }) : transactions.length === 0 ? /* @__PURE__ */
|
|
7257
|
-
/* @__PURE__ */
|
|
7258
|
-
/* @__PURE__ */
|
|
6982
|
+
/* @__PURE__ */ jsx23("div", { className: "p-5 max-h-[60vh] overflow-y-auto", children: loading ? /* @__PURE__ */ jsx23("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ jsx23("div", { className: `${theme.mutedText}`, children: "Loading transactions..." }) }) : error ? /* @__PURE__ */ jsxs15("div", { className: `flex flex-col items-center justify-center py-8 ${isDark ? "text-red-400" : "text-red-500"}`, children: [
|
|
6983
|
+
/* @__PURE__ */ jsx23(XCircle, { className: "w-12 h-12 mb-2" }),
|
|
6984
|
+
/* @__PURE__ */ jsx23("p", { className: "text-center text-sm", children: error })
|
|
6985
|
+
] }) : transactions.length === 0 ? /* @__PURE__ */ jsxs15("div", { className: `flex flex-col items-center justify-center py-8 ${theme.mutedText}`, children: [
|
|
6986
|
+
/* @__PURE__ */ jsx23(Activity, { className: `w-12 h-12 mb-2 ${isDark ? "text-gray-600" : "text-gray-300"}` }),
|
|
6987
|
+
/* @__PURE__ */ jsxs15("p", { className: "text-center", children: [
|
|
7259
6988
|
"No transactions found",
|
|
7260
|
-
/* @__PURE__ */
|
|
7261
|
-
/* @__PURE__ */
|
|
6989
|
+
/* @__PURE__ */ jsx23("br", {}),
|
|
6990
|
+
/* @__PURE__ */ jsx23("span", { className: "text-xs mt-2", children: "Smart account transactions will appear here" })
|
|
7262
6991
|
] })
|
|
7263
|
-
] }) : /* @__PURE__ */
|
|
6992
|
+
] }) : /* @__PURE__ */ jsx23("div", { className: "space-y-3", children: transactions.map((tx) => {
|
|
7264
6993
|
const isIncoming = tx.to.hash.toLowerCase() === address?.toLowerCase();
|
|
7265
6994
|
const displayAddress = isIncoming ? tx.from.hash : tx.to.hash;
|
|
7266
|
-
return /* @__PURE__ */
|
|
6995
|
+
return /* @__PURE__ */ jsxs15(
|
|
7267
6996
|
"div",
|
|
7268
6997
|
{
|
|
7269
6998
|
className: `${isDark ? "bg-gray-800 hover:bg-gray-700" : "bg-gray-50 hover:bg-gray-100"} rounded-xl p-4 transition-colors cursor-pointer`,
|
|
7270
6999
|
onClick: () => openInExplorer(tx.hash),
|
|
7271
7000
|
children: [
|
|
7272
|
-
/* @__PURE__ */
|
|
7273
|
-
/* @__PURE__ */
|
|
7001
|
+
/* @__PURE__ */ jsxs15("div", { className: "flex items-center justify-between mb-2", children: [
|
|
7002
|
+
/* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2", children: [
|
|
7274
7003
|
getTransactionIcon(tx.from.hash, tx.to.hash),
|
|
7275
|
-
/* @__PURE__ */
|
|
7004
|
+
/* @__PURE__ */ jsx23("span", { className: `font-medium ${theme.titleText}`, children: isIncoming ? "Received" : "Sent" }),
|
|
7276
7005
|
getStatusIcon(tx.status)
|
|
7277
7006
|
] }),
|
|
7278
|
-
/* @__PURE__ */
|
|
7007
|
+
/* @__PURE__ */ jsx23("div", { className: `text-xs ${theme.mutedText}`, children: formatTime(tx.timestamp) })
|
|
7279
7008
|
] }),
|
|
7280
|
-
/* @__PURE__ */
|
|
7281
|
-
/* @__PURE__ */
|
|
7282
|
-
/* @__PURE__ */
|
|
7283
|
-
/* @__PURE__ */
|
|
7009
|
+
/* @__PURE__ */ jsxs15("div", { className: "space-y-1 text-sm", children: [
|
|
7010
|
+
/* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
|
|
7011
|
+
/* @__PURE__ */ jsx23("span", { className: `${theme.bodyText}`, children: isIncoming ? "From:" : "To:" }),
|
|
7012
|
+
/* @__PURE__ */ jsxs15("span", { className: `font-mono ${theme.titleText}`, children: [
|
|
7284
7013
|
formatAddress(displayAddress),
|
|
7285
|
-
(isIncoming ? tx.from.is_contract : tx.to.is_contract) && /* @__PURE__ */
|
|
7014
|
+
(isIncoming ? tx.from.is_contract : tx.to.is_contract) && /* @__PURE__ */ jsx23("span", { className: `text-xs ${isDark ? "text-blue-400" : "text-blue-600"} ml-1`, children: "(Contract)" })
|
|
7286
7015
|
] })
|
|
7287
7016
|
] }),
|
|
7288
|
-
/* @__PURE__ */
|
|
7289
|
-
/* @__PURE__ */
|
|
7290
|
-
/* @__PURE__ */
|
|
7017
|
+
/* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
|
|
7018
|
+
/* @__PURE__ */ jsx23("span", { className: `${theme.bodyText}`, children: "Value:" }),
|
|
7019
|
+
/* @__PURE__ */ jsxs15("span", { className: `font-semibold ${theme.titleText}`, children: [
|
|
7291
7020
|
formatValue(tx.value),
|
|
7292
7021
|
" LUMIA"
|
|
7293
7022
|
] })
|
|
7294
7023
|
] }),
|
|
7295
|
-
/* @__PURE__ */
|
|
7296
|
-
/* @__PURE__ */
|
|
7297
|
-
/* @__PURE__ */
|
|
7024
|
+
/* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
|
|
7025
|
+
/* @__PURE__ */ jsx23("span", { className: `${theme.bodyText}`, children: "Block:" }),
|
|
7026
|
+
/* @__PURE__ */ jsxs15("span", { className: `font-mono ${theme.titleText}`, children: [
|
|
7298
7027
|
"#",
|
|
7299
7028
|
tx.block_number
|
|
7300
7029
|
] })
|
|
7301
7030
|
] }),
|
|
7302
|
-
tx.method && /* @__PURE__ */
|
|
7303
|
-
/* @__PURE__ */
|
|
7304
|
-
/* @__PURE__ */
|
|
7031
|
+
tx.method && /* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
|
|
7032
|
+
/* @__PURE__ */ jsx23("span", { className: `${theme.bodyText}`, children: "Method:" }),
|
|
7033
|
+
/* @__PURE__ */ jsx23("span", { className: `${isDark ? "text-blue-400" : "text-blue-600"} text-xs`, children: tx.method })
|
|
7305
7034
|
] }),
|
|
7306
|
-
tx.transaction_types && tx.transaction_types.length > 0 && /* @__PURE__ */
|
|
7035
|
+
tx.transaction_types && tx.transaction_types.length > 0 && /* @__PURE__ */ jsx23("div", { className: "flex flex-wrap gap-1 mt-2", children: tx.transaction_types.map((type, idx) => /* @__PURE__ */ jsx23(
|
|
7307
7036
|
"span",
|
|
7308
7037
|
{
|
|
7309
7038
|
className: `text-xs ${isDark ? "bg-blue-900/30 text-blue-300" : "bg-blue-100 text-blue-800"} px-2 py-0.5 rounded-full`,
|
|
@@ -7317,7 +7046,7 @@ var TransactionsModal = ({ open, onOpenChange, onBack }) => {
|
|
|
7317
7046
|
tx.hash
|
|
7318
7047
|
);
|
|
7319
7048
|
}) }) }),
|
|
7320
|
-
transactions.length > 0 && /* @__PURE__ */
|
|
7049
|
+
transactions.length > 0 && /* @__PURE__ */ jsx23("div", { className: `p-5 border-t ${theme.divider}`, children: /* @__PURE__ */ jsxs15("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
|
|
7321
7050
|
"Total: ",
|
|
7322
7051
|
transactions.length,
|
|
7323
7052
|
" transaction",
|
|
@@ -7327,11 +7056,11 @@ var TransactionsModal = ({ open, onOpenChange, onBack }) => {
|
|
|
7327
7056
|
};
|
|
7328
7057
|
|
|
7329
7058
|
// src/internal/components/ViewAssetsModal.tsx
|
|
7330
|
-
import
|
|
7059
|
+
import React21 from "react";
|
|
7331
7060
|
|
|
7332
7061
|
// src/modules/assets.ts
|
|
7333
7062
|
init_base();
|
|
7334
|
-
import
|
|
7063
|
+
import React20 from "react";
|
|
7335
7064
|
import { useBalance, useReadContract, useReadContracts } from "wagmi";
|
|
7336
7065
|
import { formatUnits, erc20Abi } from "viem";
|
|
7337
7066
|
var COMMON_TOKENS = [
|
|
@@ -7477,7 +7206,7 @@ function useTokenBalance(tokenAddress, userAddress) {
|
|
|
7477
7206
|
}
|
|
7478
7207
|
});
|
|
7479
7208
|
const { tokenInfo } = useTokenInfo(tokenAddress);
|
|
7480
|
-
const formattedBalance =
|
|
7209
|
+
const formattedBalance = React20.useMemo(() => {
|
|
7481
7210
|
if (!balance || !tokenInfo) return "0";
|
|
7482
7211
|
return formatUnits(balance, tokenInfo.decimals);
|
|
7483
7212
|
}, [balance, tokenInfo]);
|
|
@@ -7493,13 +7222,13 @@ function useTokenBalance(tokenAddress, userAddress) {
|
|
|
7493
7222
|
// src/internal/components/ViewAssetsModal.tsx
|
|
7494
7223
|
init_base();
|
|
7495
7224
|
import { Gem, RefreshCw as RefreshCw4, Copy, ExternalLink as ExternalLink2, ArrowLeft as ArrowLeft6 } from "lucide-react";
|
|
7496
|
-
import { jsx as
|
|
7225
|
+
import { jsx as jsx24, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
7497
7226
|
var ViewAssetsModal = ({ open, onOpenChange, onBack }) => {
|
|
7498
7227
|
const { address } = useLumiaSession();
|
|
7499
7228
|
const { assets, refreshBalances, isLoading } = useAssets(address);
|
|
7500
|
-
const [copied, setCopied] =
|
|
7229
|
+
const [copied, setCopied] = React21.useState(null);
|
|
7501
7230
|
const { config } = useLumiaPassportConfig();
|
|
7502
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
7231
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
7503
7232
|
const handleCopy = async (text, type) => {
|
|
7504
7233
|
try {
|
|
7505
7234
|
await navigator.clipboard.writeText(text);
|
|
@@ -7512,107 +7241,107 @@ var ViewAssetsModal = ({ open, onOpenChange, onBack }) => {
|
|
|
7512
7241
|
const openInExplorer = (address2) => {
|
|
7513
7242
|
window.open(`${LUMIA_EXPLORER_URL}/address/${address2}`, "_blank");
|
|
7514
7243
|
};
|
|
7515
|
-
return /* @__PURE__ */
|
|
7516
|
-
/* @__PURE__ */
|
|
7517
|
-
/* @__PURE__ */
|
|
7518
|
-
/* @__PURE__ */
|
|
7519
|
-
onBack && /* @__PURE__ */
|
|
7244
|
+
return /* @__PURE__ */ jsx24(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs16(DialogContent, { className: `lumia-scope max-w-[400px] p-0 border-0 ${theme.modalBg} rounded-2xl overflow-hidden max-h-[80vh] gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`, children: [
|
|
7245
|
+
/* @__PURE__ */ jsx24(VisuallyHidden, { children: /* @__PURE__ */ jsx24(DialogTitle, { children: "View Assets" }) }),
|
|
7246
|
+
/* @__PURE__ */ jsx24(DialogDescription, { className: "sr-only", children: "View your token balances and assets" }),
|
|
7247
|
+
/* @__PURE__ */ jsx24("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2", children: [
|
|
7248
|
+
onBack && /* @__PURE__ */ jsx24(
|
|
7520
7249
|
"button",
|
|
7521
7250
|
{
|
|
7522
7251
|
onClick: onBack,
|
|
7523
7252
|
className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
|
|
7524
7253
|
title: "Back",
|
|
7525
|
-
children: /* @__PURE__ */
|
|
7254
|
+
children: /* @__PURE__ */ jsx24(ArrowLeft6, { className: "h-4 w-4" })
|
|
7526
7255
|
}
|
|
7527
7256
|
),
|
|
7528
|
-
/* @__PURE__ */
|
|
7529
|
-
/* @__PURE__ */
|
|
7530
|
-
/* @__PURE__ */
|
|
7531
|
-
/* @__PURE__ */
|
|
7257
|
+
/* @__PURE__ */ jsxs16("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
|
|
7258
|
+
/* @__PURE__ */ jsx24(Gem, { className: "h-5 w-5" }),
|
|
7259
|
+
/* @__PURE__ */ jsx24("span", { children: "Your Assets" }),
|
|
7260
|
+
/* @__PURE__ */ jsx24(
|
|
7532
7261
|
"button",
|
|
7533
7262
|
{
|
|
7534
7263
|
onClick: refreshBalances,
|
|
7535
7264
|
disabled: isLoading,
|
|
7536
7265
|
className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1`,
|
|
7537
7266
|
title: "Refresh balances",
|
|
7538
|
-
children: /* @__PURE__ */
|
|
7267
|
+
children: /* @__PURE__ */ jsx24(RefreshCw4, { className: `h-4 w-4 ${isLoading ? "animate-spin" : ""}` })
|
|
7539
7268
|
}
|
|
7540
7269
|
)
|
|
7541
7270
|
] })
|
|
7542
7271
|
] }) }),
|
|
7543
|
-
/* @__PURE__ */
|
|
7544
|
-
/* @__PURE__ */
|
|
7545
|
-
/* @__PURE__ */
|
|
7546
|
-
] }) : /* @__PURE__ */
|
|
7547
|
-
/* @__PURE__ */
|
|
7548
|
-
/* @__PURE__ */
|
|
7549
|
-
/* @__PURE__ */
|
|
7550
|
-
/* @__PURE__ */
|
|
7551
|
-
/* @__PURE__ */
|
|
7552
|
-
/* @__PURE__ */
|
|
7272
|
+
/* @__PURE__ */ jsx24("div", { className: "p-5 max-h-[60vh] overflow-y-auto", children: isLoading ? /* @__PURE__ */ jsx24("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ jsx24("div", { className: `${theme.mutedText}`, children: "Loading assets..." }) }) : assets.length === 0 ? /* @__PURE__ */ jsxs16("div", { className: `flex flex-col items-center justify-center py-8 ${theme.mutedText}`, children: [
|
|
7273
|
+
/* @__PURE__ */ jsx24(Gem, { className: `w-12 h-12 mb-2 ${isDark ? "text-gray-600" : "text-gray-300"}` }),
|
|
7274
|
+
/* @__PURE__ */ jsx24("p", { children: "No assets found" })
|
|
7275
|
+
] }) : /* @__PURE__ */ jsx24("div", { className: "space-y-3", children: assets.map((asset, index) => /* @__PURE__ */ jsxs16("div", { className: `${isDark ? "bg-gray-800 hover:bg-gray-700" : "bg-gray-50 hover:bg-gray-100"} rounded-xl p-4 transition-colors`, children: [
|
|
7276
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between mb-2", children: [
|
|
7277
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-3", children: [
|
|
7278
|
+
/* @__PURE__ */ jsx24("div", { className: "w-10 h-10 bg-gradient-to-br from-purple-500 to-blue-600 rounded-full flex items-center justify-center", children: /* @__PURE__ */ jsx24("span", { className: "text-white font-bold text-sm", children: asset.symbol.charAt(0) }) }),
|
|
7279
|
+
/* @__PURE__ */ jsxs16("div", { children: [
|
|
7280
|
+
/* @__PURE__ */ jsx24("div", { className: `font-medium ${theme.titleText}`, children: asset.name }),
|
|
7281
|
+
/* @__PURE__ */ jsx24("div", { className: `text-sm ${theme.mutedText}`, children: asset.symbol })
|
|
7553
7282
|
] })
|
|
7554
7283
|
] }),
|
|
7555
|
-
/* @__PURE__ */
|
|
7556
|
-
/* @__PURE__ */
|
|
7557
|
-
/* @__PURE__ */
|
|
7284
|
+
/* @__PURE__ */ jsxs16("div", { className: "text-right", children: [
|
|
7285
|
+
/* @__PURE__ */ jsx24("div", { className: `font-mono ${theme.titleText}`, children: asset.formattedBalance }),
|
|
7286
|
+
/* @__PURE__ */ jsx24("div", { className: `text-sm ${theme.mutedText}`, children: asset.symbol })
|
|
7558
7287
|
] })
|
|
7559
7288
|
] }),
|
|
7560
|
-
asset.address && /* @__PURE__ */
|
|
7561
|
-
/* @__PURE__ */
|
|
7562
|
-
/* @__PURE__ */
|
|
7563
|
-
/* @__PURE__ */
|
|
7564
|
-
/* @__PURE__ */
|
|
7565
|
-
/* @__PURE__ */
|
|
7289
|
+
asset.address && /* @__PURE__ */ jsxs16("div", { className: `space-y-2 mt-3 pt-3 border-t ${theme.divider}`, children: [
|
|
7290
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between text-sm", children: [
|
|
7291
|
+
/* @__PURE__ */ jsx24("span", { className: `${theme.bodyText}`, children: "Contract Address:" }),
|
|
7292
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2", children: [
|
|
7293
|
+
/* @__PURE__ */ jsx24("span", { className: `font-mono ${theme.titleText} text-xs`, children: `${asset.address.slice(0, 6)}...${asset.address.slice(-4)}` }),
|
|
7294
|
+
/* @__PURE__ */ jsx24(
|
|
7566
7295
|
"button",
|
|
7567
7296
|
{
|
|
7568
7297
|
onClick: () => handleCopy(asset.address, "address"),
|
|
7569
7298
|
className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
|
|
7570
7299
|
title: "Copy address",
|
|
7571
|
-
children: copied === "address" ? /* @__PURE__ */
|
|
7300
|
+
children: copied === "address" ? /* @__PURE__ */ jsx24("span", { className: `${isDark ? "text-green-400" : "text-green-500"} text-xs`, children: "\u2713" }) : /* @__PURE__ */ jsx24(Copy, { className: "w-3 h-3" })
|
|
7572
7301
|
}
|
|
7573
7302
|
),
|
|
7574
|
-
/* @__PURE__ */
|
|
7303
|
+
/* @__PURE__ */ jsx24(
|
|
7575
7304
|
"button",
|
|
7576
7305
|
{
|
|
7577
7306
|
onClick: () => openInExplorer(asset.address),
|
|
7578
7307
|
className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
|
|
7579
7308
|
title: "View in explorer",
|
|
7580
|
-
children: /* @__PURE__ */
|
|
7309
|
+
children: /* @__PURE__ */ jsx24(ExternalLink2, { className: "w-3 h-3" })
|
|
7581
7310
|
}
|
|
7582
7311
|
)
|
|
7583
7312
|
] })
|
|
7584
7313
|
] }),
|
|
7585
|
-
asset.decimals && /* @__PURE__ */
|
|
7586
|
-
/* @__PURE__ */
|
|
7587
|
-
/* @__PURE__ */
|
|
7314
|
+
asset.decimals && /* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between text-sm", children: [
|
|
7315
|
+
/* @__PURE__ */ jsx24("span", { className: `${theme.bodyText}`, children: "Decimals:" }),
|
|
7316
|
+
/* @__PURE__ */ jsx24("span", { className: `${theme.titleText}`, children: asset.decimals })
|
|
7588
7317
|
] })
|
|
7589
7318
|
] }),
|
|
7590
|
-
asset.type === "native" && address && /* @__PURE__ */
|
|
7591
|
-
/* @__PURE__ */
|
|
7592
|
-
/* @__PURE__ */
|
|
7593
|
-
/* @__PURE__ */
|
|
7594
|
-
/* @__PURE__ */
|
|
7319
|
+
asset.type === "native" && address && /* @__PURE__ */ jsx24("div", { className: "mt-3 pt-3 border-t border-gray-200", children: /* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between text-sm", children: [
|
|
7320
|
+
/* @__PURE__ */ jsx24("span", { className: `${theme.bodyText}`, children: "Your Address:" }),
|
|
7321
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2", children: [
|
|
7322
|
+
/* @__PURE__ */ jsx24("span", { className: `font-mono ${theme.titleText} text-xs`, children: `${address.slice(0, 6)}...${address.slice(-4)}` }),
|
|
7323
|
+
/* @__PURE__ */ jsx24(
|
|
7595
7324
|
"button",
|
|
7596
7325
|
{
|
|
7597
7326
|
onClick: () => handleCopy(address, "wallet"),
|
|
7598
7327
|
className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
|
|
7599
7328
|
title: "Copy wallet address",
|
|
7600
|
-
children: copied === "wallet" ? /* @__PURE__ */
|
|
7329
|
+
children: copied === "wallet" ? /* @__PURE__ */ jsx24("span", { className: `${isDark ? "text-green-400" : "text-green-500"} text-xs`, children: "\u2713" }) : /* @__PURE__ */ jsx24(Copy, { className: "w-3 h-3" })
|
|
7601
7330
|
}
|
|
7602
7331
|
),
|
|
7603
|
-
/* @__PURE__ */
|
|
7332
|
+
/* @__PURE__ */ jsx24(
|
|
7604
7333
|
"button",
|
|
7605
7334
|
{
|
|
7606
7335
|
onClick: () => openInExplorer(address),
|
|
7607
7336
|
className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
|
|
7608
7337
|
title: "View in explorer",
|
|
7609
|
-
children: /* @__PURE__ */
|
|
7338
|
+
children: /* @__PURE__ */ jsx24(ExternalLink2, { className: "w-3 h-3" })
|
|
7610
7339
|
}
|
|
7611
7340
|
)
|
|
7612
7341
|
] })
|
|
7613
7342
|
] }) })
|
|
7614
7343
|
] }, `${asset.type}-${asset.address || "native"}-${index}`)) }) }),
|
|
7615
|
-
assets.length > 0 && /* @__PURE__ */
|
|
7344
|
+
assets.length > 0 && /* @__PURE__ */ jsx24("div", { className: `p-5 border-t ${theme.divider}`, children: /* @__PURE__ */ jsxs16("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
|
|
7616
7345
|
"Total: ",
|
|
7617
7346
|
assets.length,
|
|
7618
7347
|
" asset",
|
|
@@ -7622,19 +7351,19 @@ var ViewAssetsModal = ({ open, onOpenChange, onBack }) => {
|
|
|
7622
7351
|
};
|
|
7623
7352
|
|
|
7624
7353
|
// src/internal/components/SendModal.tsx
|
|
7625
|
-
import { useState as
|
|
7626
|
-
import { Send, ArrowLeft as ArrowLeft7, Loader2, CheckCircle2 as
|
|
7354
|
+
import { useState as useState12, useEffect as useEffect9 } from "react";
|
|
7355
|
+
import { Send, ArrowLeft as ArrowLeft7, Loader2, CheckCircle2 as CheckCircle26, AlertCircle as AlertCircle4 } from "lucide-react";
|
|
7627
7356
|
|
|
7628
7357
|
// src/hooks/useSendTransaction.ts
|
|
7629
7358
|
init_account();
|
|
7630
|
-
import { useState as
|
|
7359
|
+
import { useState as useState9, useCallback as useCallback3 } from "react";
|
|
7631
7360
|
import { parseEther as parseEther2, isAddress } from "viem";
|
|
7632
7361
|
function useSendTransaction() {
|
|
7633
7362
|
const { session, address } = useLumiaSession();
|
|
7634
|
-
const [isLoading, setIsLoading] =
|
|
7635
|
-
const [error, setError] =
|
|
7636
|
-
const [userOpHash, setUserOpHash] =
|
|
7637
|
-
const sendTransaction =
|
|
7363
|
+
const [isLoading, setIsLoading] = useState9(false);
|
|
7364
|
+
const [error, setError] = useState9(null);
|
|
7365
|
+
const [userOpHash, setUserOpHash] = useState9(null);
|
|
7366
|
+
const sendTransaction = useCallback3(async (params) => {
|
|
7638
7367
|
if (!session || !address) {
|
|
7639
7368
|
setError("No active session");
|
|
7640
7369
|
return null;
|
|
@@ -7671,7 +7400,7 @@ function useSendTransaction() {
|
|
|
7671
7400
|
setIsLoading(false);
|
|
7672
7401
|
}
|
|
7673
7402
|
}, [session, address]);
|
|
7674
|
-
const reset =
|
|
7403
|
+
const reset = useCallback3(() => {
|
|
7675
7404
|
setError(null);
|
|
7676
7405
|
setUserOpHash(null);
|
|
7677
7406
|
setIsLoading(false);
|
|
@@ -7690,8 +7419,8 @@ import { isAddress as isAddress2 } from "viem";
|
|
|
7690
7419
|
import { useBalance as useBalance2 } from "wagmi";
|
|
7691
7420
|
|
|
7692
7421
|
// src/internal/components/UserOpStatus.tsx
|
|
7693
|
-
import * as
|
|
7694
|
-
import { AlertCircle as
|
|
7422
|
+
import * as React23 from "react";
|
|
7423
|
+
import { AlertCircle as AlertCircle3, CheckCircle2 as CheckCircle25, Clock as Clock3, Copy as Copy3, ExternalLink as ExternalLink4, RefreshCw as RefreshCw5 } from "lucide-react";
|
|
7695
7424
|
|
|
7696
7425
|
// src/internal/components/ui/badge.tsx
|
|
7697
7426
|
import { cva as cva2 } from "class-variance-authority";
|
|
@@ -7704,7 +7433,7 @@ function cn2(...inputs) {
|
|
|
7704
7433
|
}
|
|
7705
7434
|
|
|
7706
7435
|
// src/internal/components/ui/badge.tsx
|
|
7707
|
-
import { jsx as
|
|
7436
|
+
import { jsx as jsx25 } from "react/jsx-runtime";
|
|
7708
7437
|
var badgeVariants = cva2(
|
|
7709
7438
|
"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",
|
|
7710
7439
|
{
|
|
@@ -7724,13 +7453,13 @@ var badgeVariants = cva2(
|
|
|
7724
7453
|
}
|
|
7725
7454
|
);
|
|
7726
7455
|
function Badge({ className, variant, ...props }) {
|
|
7727
|
-
return /* @__PURE__ */
|
|
7456
|
+
return /* @__PURE__ */ jsx25("div", { className: cn2(badgeVariants({ variant }), className), ...props });
|
|
7728
7457
|
}
|
|
7729
7458
|
|
|
7730
7459
|
// src/internal/components/Address.tsx
|
|
7731
|
-
import * as
|
|
7460
|
+
import * as React22 from "react";
|
|
7732
7461
|
import { Copy as Copy2, ExternalLink as ExternalLink3 } from "lucide-react";
|
|
7733
|
-
import { jsx as
|
|
7462
|
+
import { jsx as jsx26, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
7734
7463
|
function toExplorerAddressUrl(address, chain) {
|
|
7735
7464
|
const base2 = chain?.blockExplorers?.default?.url;
|
|
7736
7465
|
if (!base2) return null;
|
|
@@ -7751,12 +7480,12 @@ var Address = ({
|
|
|
7751
7480
|
}) => {
|
|
7752
7481
|
const addr = address || "";
|
|
7753
7482
|
const explorer = toExplorerAddressUrl(addr, chain || void 0);
|
|
7754
|
-
const [copied, setCopied] =
|
|
7755
|
-
if (!addr) return /* @__PURE__ */
|
|
7756
|
-
return /* @__PURE__ */
|
|
7757
|
-
label && /* @__PURE__ */
|
|
7758
|
-
/* @__PURE__ */
|
|
7759
|
-
showCopy && /* @__PURE__ */
|
|
7483
|
+
const [copied, setCopied] = React22.useState(false);
|
|
7484
|
+
if (!addr) return /* @__PURE__ */ jsx26("span", { className: cn2("text-muted-foreground", className), children: "\u2014" });
|
|
7485
|
+
return /* @__PURE__ */ jsxs17("div", { className: cn2("flex items-center gap-2", className), style: { listStyle: "none" }, children: [
|
|
7486
|
+
label && /* @__PURE__ */ jsx26("span", { className: "text-sm font-medium", children: label }),
|
|
7487
|
+
/* @__PURE__ */ jsx26("code", { className: "text-xs bg-background px-2 py-1 rounded select-all", children: truncate ? short(addr) : addr }),
|
|
7488
|
+
showCopy && /* @__PURE__ */ jsx26(
|
|
7760
7489
|
Button,
|
|
7761
7490
|
{
|
|
7762
7491
|
variant: "ghost",
|
|
@@ -7770,10 +7499,10 @@ var Address = ({
|
|
|
7770
7499
|
} catch {
|
|
7771
7500
|
}
|
|
7772
7501
|
},
|
|
7773
|
-
children: /* @__PURE__ */
|
|
7502
|
+
children: /* @__PURE__ */ jsx26(Copy2, { className: "h-4 w-4" })
|
|
7774
7503
|
}
|
|
7775
7504
|
),
|
|
7776
|
-
showExplorer && explorer && /* @__PURE__ */
|
|
7505
|
+
showExplorer && explorer && /* @__PURE__ */ jsx26(
|
|
7777
7506
|
"a",
|
|
7778
7507
|
{
|
|
7779
7508
|
href: explorer,
|
|
@@ -7781,7 +7510,7 @@ var Address = ({
|
|
|
7781
7510
|
rel: "noreferrer noopener",
|
|
7782
7511
|
className: "inline-flex items-center justify-center h-10 w-10 rounded-md hover:bg-accent text-foreground",
|
|
7783
7512
|
title: "Open in explorer",
|
|
7784
|
-
children: /* @__PURE__ */
|
|
7513
|
+
children: /* @__PURE__ */ jsx26(ExternalLink3, { className: "h-4 w-4" })
|
|
7785
7514
|
}
|
|
7786
7515
|
)
|
|
7787
7516
|
] });
|
|
@@ -7789,7 +7518,7 @@ var Address = ({
|
|
|
7789
7518
|
|
|
7790
7519
|
// src/internal/components/UserOpStatus.tsx
|
|
7791
7520
|
init_base();
|
|
7792
|
-
import { jsx as
|
|
7521
|
+
import { jsx as jsx27, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
7793
7522
|
var UserOpStatus = ({
|
|
7794
7523
|
userOpHash,
|
|
7795
7524
|
chain,
|
|
@@ -7800,20 +7529,20 @@ var UserOpStatus = ({
|
|
|
7800
7529
|
externalState
|
|
7801
7530
|
}) => {
|
|
7802
7531
|
const useExternalState = !!externalState;
|
|
7803
|
-
const [internalReceipt, setInternalReceipt] =
|
|
7804
|
-
const [internalMempool, setInternalMempool] =
|
|
7805
|
-
const [internalError, setInternalError] =
|
|
7806
|
-
const [attempt, setAttempt] =
|
|
7807
|
-
const [internalRefreshing, setInternalRefreshing] =
|
|
7808
|
-
const [timedOut, setTimedOut] =
|
|
7809
|
-
const [rejected, setRejected] =
|
|
7810
|
-
const intervalRef =
|
|
7811
|
-
const startTimeRef =
|
|
7532
|
+
const [internalReceipt, setInternalReceipt] = React23.useState(null);
|
|
7533
|
+
const [internalMempool, setInternalMempool] = React23.useState(null);
|
|
7534
|
+
const [internalError, setInternalError] = React23.useState(null);
|
|
7535
|
+
const [attempt, setAttempt] = React23.useState(0);
|
|
7536
|
+
const [internalRefreshing, setInternalRefreshing] = React23.useState(false);
|
|
7537
|
+
const [timedOut, setTimedOut] = React23.useState(false);
|
|
7538
|
+
const [rejected, setRejected] = React23.useState(false);
|
|
7539
|
+
const intervalRef = React23.useRef(null);
|
|
7540
|
+
const startTimeRef = React23.useRef(Date.now());
|
|
7812
7541
|
const receipt = useExternalState ? externalState.receipt ?? null : internalReceipt;
|
|
7813
7542
|
const mempool = useExternalState ? externalState.mempool ?? null : internalMempool;
|
|
7814
7543
|
const error = useExternalState ? externalState.error ?? null : internalError;
|
|
7815
7544
|
const refreshing = useExternalState ? externalState.isPolling ?? false : internalRefreshing;
|
|
7816
|
-
const rpc =
|
|
7545
|
+
const rpc = React23.useCallback(async (method, params) => {
|
|
7817
7546
|
const body = { jsonrpc: "2.0", id: 1, method, params };
|
|
7818
7547
|
const res = await fetch(getBundlerUrl(), {
|
|
7819
7548
|
method: "POST",
|
|
@@ -7824,14 +7553,14 @@ var UserOpStatus = ({
|
|
|
7824
7553
|
if (json.error) throw new Error(json.error.message || JSON.stringify(json.error));
|
|
7825
7554
|
return json.result;
|
|
7826
7555
|
}, []);
|
|
7827
|
-
const extractMempoolInfo =
|
|
7556
|
+
const extractMempoolInfo = React23.useCallback((m) => {
|
|
7828
7557
|
if (!m) return null;
|
|
7829
7558
|
const entryPoint = m.entryPoint || m?.userOperation?.entryPoint || null;
|
|
7830
7559
|
const sender = m.sender || m?.userOperation?.sender || null;
|
|
7831
7560
|
if (!entryPoint && !sender) return null;
|
|
7832
7561
|
return { entryPoint, sender };
|
|
7833
7562
|
}, []);
|
|
7834
|
-
const tick =
|
|
7563
|
+
const tick = React23.useCallback(async () => {
|
|
7835
7564
|
if (useExternalState) return;
|
|
7836
7565
|
const elapsed = Date.now() - startTimeRef.current;
|
|
7837
7566
|
if (elapsed > maxPollTimeMs) {
|
|
@@ -7875,7 +7604,7 @@ var UserOpStatus = ({
|
|
|
7875
7604
|
setAttempt((x) => x + 1);
|
|
7876
7605
|
}
|
|
7877
7606
|
}, [rpc, userOpHash, maxPollTimeMs, extractMempoolInfo, useExternalState]);
|
|
7878
|
-
|
|
7607
|
+
React23.useEffect(() => {
|
|
7879
7608
|
if (useExternalState) return;
|
|
7880
7609
|
console.log("[UserOpStatus] Initializing polling for UserOp hash:", userOpHash);
|
|
7881
7610
|
startTimeRef.current = Date.now();
|
|
@@ -7887,7 +7616,7 @@ var UserOpStatus = ({
|
|
|
7887
7616
|
setAttempt(0);
|
|
7888
7617
|
setInternalRefreshing(false);
|
|
7889
7618
|
}, [userOpHash, useExternalState]);
|
|
7890
|
-
|
|
7619
|
+
React23.useEffect(() => {
|
|
7891
7620
|
if (useExternalState) {
|
|
7892
7621
|
console.log("[UserOpStatus] Using external state, skipping internal polling");
|
|
7893
7622
|
return;
|
|
@@ -7922,54 +7651,54 @@ var UserOpStatus = ({
|
|
|
7922
7651
|
const stateBadge = () => {
|
|
7923
7652
|
if (receipt) {
|
|
7924
7653
|
const ok = !!receipt.success;
|
|
7925
|
-
return /* @__PURE__ */
|
|
7926
|
-
ok ? /* @__PURE__ */
|
|
7654
|
+
return /* @__PURE__ */ jsxs18(Badge, { variant: ok ? "success" : "destructive", className: "gap-1", children: [
|
|
7655
|
+
ok ? /* @__PURE__ */ jsx27(CheckCircle25, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx27(AlertCircle3, { className: "h-3 w-3" }),
|
|
7927
7656
|
ok ? "Included" : "Failed"
|
|
7928
7657
|
] });
|
|
7929
7658
|
}
|
|
7930
7659
|
if (rejected) {
|
|
7931
|
-
return /* @__PURE__ */
|
|
7932
|
-
/* @__PURE__ */
|
|
7660
|
+
return /* @__PURE__ */ jsxs18(Badge, { variant: "destructive", className: "gap-1", children: [
|
|
7661
|
+
/* @__PURE__ */ jsx27(AlertCircle3, { className: "h-3 w-3" }),
|
|
7933
7662
|
" Rejected by bundler"
|
|
7934
7663
|
] });
|
|
7935
7664
|
}
|
|
7936
7665
|
if (timedOut) {
|
|
7937
|
-
return /* @__PURE__ */
|
|
7938
|
-
/* @__PURE__ */
|
|
7666
|
+
return /* @__PURE__ */ jsxs18(Badge, { variant: "warning", className: "gap-1", children: [
|
|
7667
|
+
/* @__PURE__ */ jsx27(AlertCircle3, { className: "h-3 w-3" }),
|
|
7939
7668
|
" Timeout - may be rejected"
|
|
7940
7669
|
] });
|
|
7941
7670
|
}
|
|
7942
7671
|
if (mempool) {
|
|
7943
|
-
return /* @__PURE__ */
|
|
7944
|
-
/* @__PURE__ */
|
|
7672
|
+
return /* @__PURE__ */ jsxs18(Badge, { variant: "outline", className: "gap-1", children: [
|
|
7673
|
+
/* @__PURE__ */ jsx27(Clock3, { className: "h-3 w-3" }),
|
|
7945
7674
|
" Pending in bundler"
|
|
7946
7675
|
] });
|
|
7947
7676
|
}
|
|
7948
|
-
return /* @__PURE__ */
|
|
7949
|
-
/* @__PURE__ */
|
|
7677
|
+
return /* @__PURE__ */ jsxs18(Badge, { variant: "secondary", className: "gap-1", children: [
|
|
7678
|
+
/* @__PURE__ */ jsx27(Clock3, { className: "h-3 w-3" }),
|
|
7950
7679
|
" Waiting"
|
|
7951
7680
|
] });
|
|
7952
7681
|
};
|
|
7953
|
-
return /* @__PURE__ */
|
|
7682
|
+
return /* @__PURE__ */ jsxs18(
|
|
7954
7683
|
"div",
|
|
7955
7684
|
{
|
|
7956
7685
|
className: cn2("lumia-scope bg-card text-card-foreground p-0 rounded-xl border border-border w-full max-w-[680px]", className),
|
|
7957
7686
|
style: { textAlign: "left", listStyle: "none" },
|
|
7958
7687
|
children: [
|
|
7959
|
-
/* @__PURE__ */
|
|
7960
|
-
/* @__PURE__ */
|
|
7688
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex items-center justify-between mb-3", children: [
|
|
7689
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-2", children: [
|
|
7961
7690
|
stateBadge(),
|
|
7962
|
-
/* @__PURE__ */
|
|
7691
|
+
/* @__PURE__ */ jsx27("span", { className: "text-xs text-muted-foreground", children: "This is a UserOperation hash (EIP-4337), not a L2 tx hash." })
|
|
7963
7692
|
] }),
|
|
7964
|
-
/* @__PURE__ */
|
|
7965
|
-
/* @__PURE__ */
|
|
7966
|
-
/* @__PURE__ */
|
|
7693
|
+
/* @__PURE__ */ jsxs18(Button, { variant: "ghost", size: "sm", onClick: () => tick(), disabled: refreshing, className: "h-8", children: [
|
|
7694
|
+
/* @__PURE__ */ jsx27(RefreshCw5, { className: cn2("h-3.5 w-3.5 mr-1", refreshing && "animate-spin") }),
|
|
7695
|
+
/* @__PURE__ */ jsx27("span", { className: "text-xs", children: "Refresh" })
|
|
7967
7696
|
] })
|
|
7968
7697
|
] }),
|
|
7969
|
-
/* @__PURE__ */
|
|
7970
|
-
/* @__PURE__ */
|
|
7971
|
-
/* @__PURE__ */
|
|
7972
|
-
/* @__PURE__ */
|
|
7698
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-2 mb-2", children: [
|
|
7699
|
+
/* @__PURE__ */ jsx27("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "UO Hash" }),
|
|
7700
|
+
/* @__PURE__ */ jsx27("code", { className: "text-xs font-mono flex-1 select-all", children: userOpHash }),
|
|
7701
|
+
/* @__PURE__ */ jsx27(
|
|
7973
7702
|
Button,
|
|
7974
7703
|
{
|
|
7975
7704
|
variant: "ghost",
|
|
@@ -7981,14 +7710,14 @@ var UserOpStatus = ({
|
|
|
7981
7710
|
} catch {
|
|
7982
7711
|
}
|
|
7983
7712
|
},
|
|
7984
|
-
children: /* @__PURE__ */
|
|
7713
|
+
children: /* @__PURE__ */ jsx27(Copy3, { className: "h-3.5 w-3.5" })
|
|
7985
7714
|
}
|
|
7986
7715
|
)
|
|
7987
7716
|
] }),
|
|
7988
|
-
receipt && receipt.receipt?.transactionHash && /* @__PURE__ */
|
|
7989
|
-
/* @__PURE__ */
|
|
7990
|
-
/* @__PURE__ */
|
|
7991
|
-
/* @__PURE__ */
|
|
7717
|
+
receipt && receipt.receipt?.transactionHash && /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-2 mb-3", children: [
|
|
7718
|
+
/* @__PURE__ */ jsx27("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "Tx Hash" }),
|
|
7719
|
+
/* @__PURE__ */ jsx27("code", { className: "text-xs font-mono flex-1 select-all", children: receipt.receipt.transactionHash }),
|
|
7720
|
+
/* @__PURE__ */ jsx27(
|
|
7992
7721
|
Button,
|
|
7993
7722
|
{
|
|
7994
7723
|
variant: "ghost",
|
|
@@ -8000,10 +7729,10 @@ var UserOpStatus = ({
|
|
|
8000
7729
|
} catch {
|
|
8001
7730
|
}
|
|
8002
7731
|
},
|
|
8003
|
-
children: /* @__PURE__ */
|
|
7732
|
+
children: /* @__PURE__ */ jsx27(Copy3, { className: "h-3.5 w-3.5" })
|
|
8004
7733
|
}
|
|
8005
7734
|
),
|
|
8006
|
-
chain?.blockExplorers?.default?.url && /* @__PURE__ */
|
|
7735
|
+
chain?.blockExplorers?.default?.url && /* @__PURE__ */ jsx27(
|
|
8007
7736
|
"a",
|
|
8008
7737
|
{
|
|
8009
7738
|
href: `${chain.blockExplorers.default.url}/tx/${receipt.receipt.transactionHash}`,
|
|
@@ -8011,11 +7740,11 @@ var UserOpStatus = ({
|
|
|
8011
7740
|
rel: "noreferrer noopener",
|
|
8012
7741
|
className: "inline-flex items-center justify-center h-8 w-8 rounded-md hover:bg-accent text-foreground",
|
|
8013
7742
|
title: "Open in explorer",
|
|
8014
|
-
children: /* @__PURE__ */
|
|
7743
|
+
children: /* @__PURE__ */ jsx27(ExternalLink4, { className: "h-3.5 w-3.5" })
|
|
8015
7744
|
}
|
|
8016
7745
|
)
|
|
8017
7746
|
] }),
|
|
8018
|
-
receipt && /* @__PURE__ */
|
|
7747
|
+
receipt && /* @__PURE__ */ jsxs18("div", { className: "text-xs text-muted-foreground mb-3", children: [
|
|
8019
7748
|
"Block ",
|
|
8020
7749
|
parseInt(receipt.receipt?.blockNumber || "0x0", 16),
|
|
8021
7750
|
" \u2022 Gas Used",
|
|
@@ -8024,32 +7753,32 @@ var UserOpStatus = ({
|
|
|
8024
7753
|
" \u2022 Success ",
|
|
8025
7754
|
String(!!receipt.success)
|
|
8026
7755
|
] }),
|
|
8027
|
-
/* @__PURE__ */
|
|
7756
|
+
/* @__PURE__ */ jsx27("div", { className: "text-xs text-muted-foreground", children: !receipt && !timedOut && !rejected && /* @__PURE__ */ jsxs18("span", { className: "ml-2", children: [
|
|
8028
7757
|
"\u2022 Polling for ",
|
|
8029
7758
|
Math.round((Date.now() - startTimeRef.current) / 1e3),
|
|
8030
7759
|
"s"
|
|
8031
7760
|
] }) }),
|
|
8032
|
-
mempool && /* @__PURE__ */
|
|
8033
|
-
/* @__PURE__ */
|
|
7761
|
+
mempool && /* @__PURE__ */ jsxs18("div", { className: "text-sm text-muted-foreground mt-2", style: { listStyle: "none" }, children: [
|
|
7762
|
+
/* @__PURE__ */ jsxs18("div", { children: [
|
|
8034
7763
|
"Seen by bundler at ",
|
|
8035
|
-
/* @__PURE__ */
|
|
7764
|
+
/* @__PURE__ */ jsx27(Address, { address: mempool.entryPoint, chain, showExplorer: true, truncate: false })
|
|
8036
7765
|
] }),
|
|
8037
|
-
/* @__PURE__ */
|
|
7766
|
+
/* @__PURE__ */ jsxs18("div", { children: [
|
|
8038
7767
|
"sender ",
|
|
8039
|
-
/* @__PURE__ */
|
|
7768
|
+
/* @__PURE__ */ jsx27(Address, { address: mempool.sender, chain, truncate: false })
|
|
8040
7769
|
] })
|
|
8041
7770
|
] }),
|
|
8042
|
-
error && /* @__PURE__ */
|
|
8043
|
-
/* @__PURE__ */
|
|
7771
|
+
error && /* @__PURE__ */ jsxs18("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
|
|
7772
|
+
/* @__PURE__ */ jsx27(AlertCircle3, { className: "h-4 w-4" }),
|
|
8044
7773
|
" ",
|
|
8045
7774
|
error
|
|
8046
7775
|
] }),
|
|
8047
|
-
rejected && /* @__PURE__ */
|
|
8048
|
-
/* @__PURE__ */
|
|
7776
|
+
rejected && /* @__PURE__ */ jsxs18("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
|
|
7777
|
+
/* @__PURE__ */ jsx27(AlertCircle3, { className: "h-4 w-4" }),
|
|
8049
7778
|
"UserOperation was dropped from bundler mempool. This usually means it was invalid or replaced."
|
|
8050
7779
|
] }),
|
|
8051
|
-
timedOut && /* @__PURE__ */
|
|
8052
|
-
/* @__PURE__ */
|
|
7780
|
+
timedOut && /* @__PURE__ */ jsxs18("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
|
|
7781
|
+
/* @__PURE__ */ jsx27(AlertCircle3, { className: "h-4 w-4" }),
|
|
8053
7782
|
"Stopped polling after ",
|
|
8054
7783
|
Math.round(maxPollTimeMs / 1e3),
|
|
8055
7784
|
"s. UserOperation may have been rejected by the bundler."
|
|
@@ -8061,7 +7790,7 @@ var UserOpStatus = ({
|
|
|
8061
7790
|
|
|
8062
7791
|
// src/internal/components/SendModal.tsx
|
|
8063
7792
|
init_base();
|
|
8064
|
-
import { jsx as
|
|
7793
|
+
import { jsx as jsx28, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
8065
7794
|
var SendModal = ({
|
|
8066
7795
|
open,
|
|
8067
7796
|
onOpenChange,
|
|
@@ -8072,19 +7801,19 @@ var SendModal = ({
|
|
|
8072
7801
|
const { address } = useLumiaSession();
|
|
8073
7802
|
const { assets } = useAssets(address);
|
|
8074
7803
|
const { config } = useLumiaPassportConfig();
|
|
8075
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
7804
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
8076
7805
|
const { sendTransaction, isLoading, error, userOpHash, reset } = useSendTransaction();
|
|
8077
7806
|
const { refetch: refetchBalance } = useBalance2({
|
|
8078
7807
|
address,
|
|
8079
7808
|
chainId: lumiaBeam.id
|
|
8080
7809
|
});
|
|
8081
|
-
const [recipient, setRecipient] =
|
|
8082
|
-
const [amount, setAmount] =
|
|
8083
|
-
const [txStep, setTxStep] =
|
|
8084
|
-
const [validationError, setValidationError] =
|
|
7810
|
+
const [recipient, setRecipient] = useState12(initialRecipient);
|
|
7811
|
+
const [amount, setAmount] = useState12(initialAmount);
|
|
7812
|
+
const [txStep, setTxStep] = useState12("input");
|
|
7813
|
+
const [validationError, setValidationError] = useState12(null);
|
|
8085
7814
|
const nativeAsset = assets.find((a) => a.type === "native");
|
|
8086
7815
|
const balance = nativeAsset ? parseFloat(nativeAsset.formattedBalance) : 0;
|
|
8087
|
-
|
|
7816
|
+
useEffect9(() => {
|
|
8088
7817
|
if (open) {
|
|
8089
7818
|
setTxStep("input");
|
|
8090
7819
|
setValidationError(null);
|
|
@@ -8144,7 +7873,7 @@ var SendModal = ({
|
|
|
8144
7873
|
const maxAmount = Math.max(0, balance - 1e-3);
|
|
8145
7874
|
setAmount(maxAmount.toFixed(6));
|
|
8146
7875
|
};
|
|
8147
|
-
return /* @__PURE__ */
|
|
7876
|
+
return /* @__PURE__ */ jsx28(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs19(
|
|
8148
7877
|
DialogContent,
|
|
8149
7878
|
{
|
|
8150
7879
|
className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden max-h-[80vh] gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
|
|
@@ -8156,28 +7885,28 @@ var SendModal = ({
|
|
|
8156
7885
|
fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
|
|
8157
7886
|
},
|
|
8158
7887
|
children: [
|
|
8159
|
-
/* @__PURE__ */
|
|
8160
|
-
/* @__PURE__ */
|
|
8161
|
-
/* @__PURE__ */
|
|
8162
|
-
onBack && txStep === "input" && /* @__PURE__ */
|
|
7888
|
+
/* @__PURE__ */ jsx28(VisuallyHidden, { children: /* @__PURE__ */ jsx28(DialogTitle, { children: "Send Transaction" }) }),
|
|
7889
|
+
/* @__PURE__ */ jsx28(DialogDescription, { className: "sr-only", children: "Send LUMIA tokens to another address" }),
|
|
7890
|
+
/* @__PURE__ */ jsx28("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-2", children: [
|
|
7891
|
+
onBack && txStep === "input" && /* @__PURE__ */ jsx28(
|
|
8163
7892
|
"button",
|
|
8164
7893
|
{
|
|
8165
7894
|
onClick: onBack,
|
|
8166
7895
|
className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
|
|
8167
7896
|
title: "Back",
|
|
8168
|
-
children: /* @__PURE__ */
|
|
7897
|
+
children: /* @__PURE__ */ jsx28(ArrowLeft7, { className: "h-4 w-4" })
|
|
8169
7898
|
}
|
|
8170
7899
|
),
|
|
8171
|
-
/* @__PURE__ */
|
|
8172
|
-
/* @__PURE__ */
|
|
8173
|
-
/* @__PURE__ */
|
|
7900
|
+
/* @__PURE__ */ jsxs19("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
|
|
7901
|
+
/* @__PURE__ */ jsx28(Send, { className: "h-5 w-5" }),
|
|
7902
|
+
/* @__PURE__ */ jsx28("span", { children: "Send LUMIA" })
|
|
8174
7903
|
] })
|
|
8175
7904
|
] }) }),
|
|
8176
|
-
/* @__PURE__ */
|
|
8177
|
-
txStep === "input" && /* @__PURE__ */
|
|
8178
|
-
/* @__PURE__ */
|
|
8179
|
-
/* @__PURE__ */
|
|
8180
|
-
/* @__PURE__ */
|
|
7905
|
+
/* @__PURE__ */ jsxs19("div", { className: "p-5", children: [
|
|
7906
|
+
txStep === "input" && /* @__PURE__ */ jsxs19("div", { className: "space-y-4", children: [
|
|
7907
|
+
/* @__PURE__ */ jsxs19("div", { children: [
|
|
7908
|
+
/* @__PURE__ */ jsx28("label", { className: `block text-sm font-medium ${theme.bodyText} mb-2`, children: "Recipient Address" }),
|
|
7909
|
+
/* @__PURE__ */ jsx28(
|
|
8181
7910
|
"input",
|
|
8182
7911
|
{
|
|
8183
7912
|
type: "text",
|
|
@@ -8188,17 +7917,17 @@ var SendModal = ({
|
|
|
8188
7917
|
}
|
|
8189
7918
|
)
|
|
8190
7919
|
] }),
|
|
8191
|
-
/* @__PURE__ */
|
|
8192
|
-
/* @__PURE__ */
|
|
8193
|
-
/* @__PURE__ */
|
|
8194
|
-
/* @__PURE__ */
|
|
7920
|
+
/* @__PURE__ */ jsxs19("div", { children: [
|
|
7921
|
+
/* @__PURE__ */ jsxs19("div", { className: "flex justify-between items-center mb-2", children: [
|
|
7922
|
+
/* @__PURE__ */ jsx28("label", { className: `text-sm font-medium ${theme.bodyText}`, children: "Amount" }),
|
|
7923
|
+
/* @__PURE__ */ jsxs19("div", { className: `text-sm ${theme.mutedText}`, children: [
|
|
8195
7924
|
"Balance: ",
|
|
8196
7925
|
balance.toFixed(4),
|
|
8197
7926
|
" LUMIA"
|
|
8198
7927
|
] })
|
|
8199
7928
|
] }),
|
|
8200
|
-
/* @__PURE__ */
|
|
8201
|
-
/* @__PURE__ */
|
|
7929
|
+
/* @__PURE__ */ jsxs19("div", { className: "relative", children: [
|
|
7930
|
+
/* @__PURE__ */ jsx28(
|
|
8202
7931
|
"input",
|
|
8203
7932
|
{
|
|
8204
7933
|
type: "number",
|
|
@@ -8209,7 +7938,7 @@ var SendModal = ({
|
|
|
8209
7938
|
className: `w-full px-3 py-2 pr-16 border ${isDark ? "bg-gray-800 border-gray-600 text-white placeholder:text-gray-400" : "bg-white border-gray-300 text-gray-900 placeholder:text-gray-400"} rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500`
|
|
8210
7939
|
}
|
|
8211
7940
|
),
|
|
8212
|
-
/* @__PURE__ */
|
|
7941
|
+
/* @__PURE__ */ jsx28(
|
|
8213
7942
|
"button",
|
|
8214
7943
|
{
|
|
8215
7944
|
onClick: handleMaxAmount,
|
|
@@ -8219,11 +7948,11 @@ var SendModal = ({
|
|
|
8219
7948
|
)
|
|
8220
7949
|
] })
|
|
8221
7950
|
] }),
|
|
8222
|
-
(validationError || error) && /* @__PURE__ */
|
|
8223
|
-
/* @__PURE__ */
|
|
8224
|
-
/* @__PURE__ */
|
|
7951
|
+
(validationError || error) && /* @__PURE__ */ jsxs19("div", { className: `flex items-center gap-2 p-3 ${isDark ? "bg-red-900/30 text-red-400" : "bg-red-50 text-red-700"} rounded-lg`, children: [
|
|
7952
|
+
/* @__PURE__ */ jsx28(AlertCircle4, { className: "h-4 w-4" }),
|
|
7953
|
+
/* @__PURE__ */ jsx28("span", { className: "text-sm", children: validationError || error })
|
|
8225
7954
|
] }),
|
|
8226
|
-
/* @__PURE__ */
|
|
7955
|
+
/* @__PURE__ */ jsx28(
|
|
8227
7956
|
Button,
|
|
8228
7957
|
{
|
|
8229
7958
|
onClick: handleSend,
|
|
@@ -8234,29 +7963,29 @@ var SendModal = ({
|
|
|
8234
7963
|
}
|
|
8235
7964
|
)
|
|
8236
7965
|
] }),
|
|
8237
|
-
txStep === "confirm" && /* @__PURE__ */
|
|
8238
|
-
/* @__PURE__ */
|
|
8239
|
-
/* @__PURE__ */
|
|
8240
|
-
/* @__PURE__ */
|
|
8241
|
-
/* @__PURE__ */
|
|
8242
|
-
/* @__PURE__ */
|
|
8243
|
-
/* @__PURE__ */
|
|
7966
|
+
txStep === "confirm" && /* @__PURE__ */ jsxs19("div", { className: "space-y-4", children: [
|
|
7967
|
+
/* @__PURE__ */ jsxs19("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: [
|
|
7968
|
+
/* @__PURE__ */ jsx28("h3", { className: `font-medium ${theme.titleText} mb-3`, children: "Transaction Details" }),
|
|
7969
|
+
/* @__PURE__ */ jsxs19("div", { className: "space-y-2 text-sm", children: [
|
|
7970
|
+
/* @__PURE__ */ jsxs19("div", { className: "flex justify-between", children: [
|
|
7971
|
+
/* @__PURE__ */ jsx28("span", { className: `${theme.bodyText}`, children: "To:" }),
|
|
7972
|
+
/* @__PURE__ */ jsx28("span", { className: `font-mono ${theme.titleText}`, children: `${recipient.slice(0, 6)}...${recipient.slice(-4)}` })
|
|
8244
7973
|
] }),
|
|
8245
|
-
/* @__PURE__ */
|
|
8246
|
-
/* @__PURE__ */
|
|
8247
|
-
/* @__PURE__ */
|
|
7974
|
+
/* @__PURE__ */ jsxs19("div", { className: "flex justify-between", children: [
|
|
7975
|
+
/* @__PURE__ */ jsx28("span", { className: `${theme.bodyText}`, children: "Amount:" }),
|
|
7976
|
+
/* @__PURE__ */ jsxs19("span", { className: `font-semibold ${theme.titleText}`, children: [
|
|
8248
7977
|
amount,
|
|
8249
7978
|
" LUMIA"
|
|
8250
7979
|
] })
|
|
8251
7980
|
] }),
|
|
8252
|
-
/* @__PURE__ */
|
|
8253
|
-
/* @__PURE__ */
|
|
8254
|
-
/* @__PURE__ */
|
|
7981
|
+
/* @__PURE__ */ jsxs19("div", { className: "flex justify-between", children: [
|
|
7982
|
+
/* @__PURE__ */ jsx28("span", { className: `${theme.bodyText}`, children: "Network:" }),
|
|
7983
|
+
/* @__PURE__ */ jsx28("span", { className: `${theme.titleText}`, children: "Lumia Beam" })
|
|
8255
7984
|
] })
|
|
8256
7985
|
] })
|
|
8257
7986
|
] }),
|
|
8258
|
-
/* @__PURE__ */
|
|
8259
|
-
/* @__PURE__ */
|
|
7987
|
+
/* @__PURE__ */ jsxs19("div", { className: "flex gap-2", children: [
|
|
7988
|
+
/* @__PURE__ */ jsx28(
|
|
8260
7989
|
Button,
|
|
8261
7990
|
{
|
|
8262
7991
|
onClick: () => setTxStep("input"),
|
|
@@ -8266,7 +7995,7 @@ var SendModal = ({
|
|
|
8266
7995
|
children: "Back"
|
|
8267
7996
|
}
|
|
8268
7997
|
),
|
|
8269
|
-
/* @__PURE__ */
|
|
7998
|
+
/* @__PURE__ */ jsxs19(
|
|
8270
7999
|
Button,
|
|
8271
8000
|
{
|
|
8272
8001
|
onClick: handleConfirm,
|
|
@@ -8274,28 +8003,28 @@ var SendModal = ({
|
|
|
8274
8003
|
className: "flex-1",
|
|
8275
8004
|
size: "lg",
|
|
8276
8005
|
children: [
|
|
8277
|
-
isLoading && /* @__PURE__ */
|
|
8006
|
+
isLoading && /* @__PURE__ */ jsx28(Loader2, { className: "h-4 w-4 animate-spin" }),
|
|
8278
8007
|
"Confirm"
|
|
8279
8008
|
]
|
|
8280
8009
|
}
|
|
8281
8010
|
)
|
|
8282
8011
|
] })
|
|
8283
8012
|
] }),
|
|
8284
|
-
txStep === "pending" && /* @__PURE__ */
|
|
8285
|
-
/* @__PURE__ */
|
|
8286
|
-
/* @__PURE__ */
|
|
8287
|
-
/* @__PURE__ */
|
|
8288
|
-
/* @__PURE__ */
|
|
8013
|
+
txStep === "pending" && /* @__PURE__ */ jsxs19("div", { className: "py-8 text-center space-y-4", children: [
|
|
8014
|
+
/* @__PURE__ */ jsx28(Loader2, { className: `h-12 w-12 animate-spin ${isDark ? "text-blue-400" : "text-blue-600"} mx-auto` }),
|
|
8015
|
+
/* @__PURE__ */ jsxs19("div", { children: [
|
|
8016
|
+
/* @__PURE__ */ jsx28("p", { className: `font-medium ${theme.titleText}`, children: "Transaction Pending" }),
|
|
8017
|
+
/* @__PURE__ */ jsx28("p", { className: `text-sm ${theme.mutedText} mt-1`, children: "Please wait while we process your transaction" })
|
|
8289
8018
|
] })
|
|
8290
8019
|
] }),
|
|
8291
|
-
txStep === "success" && userOpHash && /* @__PURE__ */
|
|
8292
|
-
/* @__PURE__ */
|
|
8293
|
-
/* @__PURE__ */
|
|
8294
|
-
/* @__PURE__ */
|
|
8295
|
-
/* @__PURE__ */
|
|
8020
|
+
txStep === "success" && userOpHash && /* @__PURE__ */ jsxs19("div", { className: "space-y-4", children: [
|
|
8021
|
+
/* @__PURE__ */ jsxs19("div", { className: "text-center py-4", children: [
|
|
8022
|
+
/* @__PURE__ */ jsx28(CheckCircle26, { className: `h-12 w-12 ${isDark ? "text-green-400" : "text-green-500"} mx-auto mb-3` }),
|
|
8023
|
+
/* @__PURE__ */ jsx28("p", { className: `font-medium ${theme.titleText}`, children: "Transaction Sent!" }),
|
|
8024
|
+
/* @__PURE__ */ jsx28("p", { className: `text-sm ${theme.mutedText} mt-1`, children: "Your transaction is being processed" })
|
|
8296
8025
|
] }),
|
|
8297
|
-
/* @__PURE__ */
|
|
8298
|
-
/* @__PURE__ */
|
|
8026
|
+
/* @__PURE__ */ jsx28("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: /* @__PURE__ */ jsx28(UserOpStatus, { userOpHash, chain: lumiaBeam }) }),
|
|
8027
|
+
/* @__PURE__ */ jsx28(
|
|
8299
8028
|
Button,
|
|
8300
8029
|
{
|
|
8301
8030
|
onClick: handleClose,
|
|
@@ -8312,21 +8041,21 @@ var SendModal = ({
|
|
|
8312
8041
|
};
|
|
8313
8042
|
|
|
8314
8043
|
// src/internal/components/ReceiveModal.tsx
|
|
8315
|
-
import { useState as
|
|
8316
|
-
import { QrCode, Copy as Copy4, ArrowLeft as ArrowLeft8, CheckCircle2 as
|
|
8044
|
+
import { useState as useState13, useEffect as useEffect10 } from "react";
|
|
8045
|
+
import { QrCode, Copy as Copy4, ArrowLeft as ArrowLeft8, CheckCircle2 as CheckCircle27 } from "lucide-react";
|
|
8317
8046
|
import QRCode from "qrcode";
|
|
8318
|
-
import { Fragment as
|
|
8047
|
+
import { Fragment as Fragment6, jsx as jsx29, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
8319
8048
|
var ReceiveModal = ({
|
|
8320
8049
|
open,
|
|
8321
8050
|
onOpenChange,
|
|
8322
8051
|
onBack
|
|
8323
8052
|
}) => {
|
|
8324
8053
|
const { address } = useLumiaSession();
|
|
8325
|
-
const [qrCodeUrl, setQrCodeUrl] =
|
|
8054
|
+
const [qrCodeUrl, setQrCodeUrl] = useState13("");
|
|
8326
8055
|
const { config } = useLumiaPassportConfig();
|
|
8327
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
8328
|
-
const [copied, setCopied] =
|
|
8329
|
-
|
|
8056
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
8057
|
+
const [copied, setCopied] = useState13(false);
|
|
8058
|
+
useEffect10(() => {
|
|
8330
8059
|
if (open && address) {
|
|
8331
8060
|
QRCode.toDataURL(address, {
|
|
8332
8061
|
width: 200,
|
|
@@ -8356,7 +8085,7 @@ var ReceiveModal = ({
|
|
|
8356
8085
|
if (!addr) return "";
|
|
8357
8086
|
return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
|
|
8358
8087
|
};
|
|
8359
|
-
return /* @__PURE__ */
|
|
8088
|
+
return /* @__PURE__ */ jsx29(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs20(
|
|
8360
8089
|
DialogContent,
|
|
8361
8090
|
{
|
|
8362
8091
|
className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden max-h-[80vh] gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
|
|
@@ -8368,51 +8097,51 @@ var ReceiveModal = ({
|
|
|
8368
8097
|
fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
|
|
8369
8098
|
},
|
|
8370
8099
|
children: [
|
|
8371
|
-
/* @__PURE__ */
|
|
8372
|
-
/* @__PURE__ */
|
|
8373
|
-
/* @__PURE__ */
|
|
8374
|
-
onBack && /* @__PURE__ */
|
|
8100
|
+
/* @__PURE__ */ jsx29(VisuallyHidden, { children: /* @__PURE__ */ jsx29(DialogTitle, { children: "Receive LUMIA" }) }),
|
|
8101
|
+
/* @__PURE__ */ jsx29(DialogDescription, { className: "sr-only", children: "Your wallet address and QR code for receiving LUMIA" }),
|
|
8102
|
+
/* @__PURE__ */ jsx29("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-2", children: [
|
|
8103
|
+
onBack && /* @__PURE__ */ jsx29(
|
|
8375
8104
|
"button",
|
|
8376
8105
|
{
|
|
8377
8106
|
onClick: onBack,
|
|
8378
8107
|
className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
|
|
8379
8108
|
title: "Back",
|
|
8380
|
-
children: /* @__PURE__ */
|
|
8109
|
+
children: /* @__PURE__ */ jsx29(ArrowLeft8, { className: "h-4 w-4" })
|
|
8381
8110
|
}
|
|
8382
8111
|
),
|
|
8383
|
-
/* @__PURE__ */
|
|
8384
|
-
/* @__PURE__ */
|
|
8385
|
-
/* @__PURE__ */
|
|
8112
|
+
/* @__PURE__ */ jsxs20("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
|
|
8113
|
+
/* @__PURE__ */ jsx29(QrCode, { className: "h-5 w-5" }),
|
|
8114
|
+
/* @__PURE__ */ jsx29("span", { children: "Receive LUMIA" })
|
|
8386
8115
|
] })
|
|
8387
8116
|
] }) }),
|
|
8388
|
-
/* @__PURE__ */
|
|
8389
|
-
qrCodeUrl && /* @__PURE__ */
|
|
8390
|
-
/* @__PURE__ */
|
|
8391
|
-
/* @__PURE__ */
|
|
8392
|
-
/* @__PURE__ */
|
|
8117
|
+
/* @__PURE__ */ jsxs20("div", { className: "p-5 space-y-4", children: [
|
|
8118
|
+
qrCodeUrl && /* @__PURE__ */ jsx29("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx29("div", { className: `${isDark ? "bg-white" : "bg-white"} p-4 rounded-xl border ${theme.divider}`, children: /* @__PURE__ */ jsx29("img", { src: qrCodeUrl, alt: "Wallet QR Code", className: "w-48 h-48" }) }) }),
|
|
8119
|
+
/* @__PURE__ */ jsx29("div", { className: `${isDark ? "bg-blue-900/30 border-blue-600" : "bg-blue-50 border-blue-200"} rounded-lg p-3`, children: /* @__PURE__ */ jsx29("div", { className: `flex items-center gap-2 ${isDark ? "text-blue-300" : "text-blue-700"} text-sm`, children: /* @__PURE__ */ jsxs20("div", { className: "flex-1", children: [
|
|
8120
|
+
/* @__PURE__ */ jsx29("p", { className: "font-medium", children: "Network: Lumia Beam" }),
|
|
8121
|
+
/* @__PURE__ */ jsx29("p", { className: `text-xs ${isDark ? "text-blue-400" : "text-blue-600"} mt-0.5`, children: "Ensure sender is on the same network" })
|
|
8393
8122
|
] }) }) }),
|
|
8394
|
-
/* @__PURE__ */
|
|
8395
|
-
/* @__PURE__ */
|
|
8396
|
-
/* @__PURE__ */
|
|
8397
|
-
/* @__PURE__ */
|
|
8123
|
+
/* @__PURE__ */ jsxs20("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: [
|
|
8124
|
+
/* @__PURE__ */ jsx29("label", { className: `block text-sm font-medium ${theme.bodyText} mb-2`, children: "Your Wallet Address" }),
|
|
8125
|
+
/* @__PURE__ */ jsx29("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsx29("div", { className: `flex-1 font-mono text-sm ${isDark ? "text-white bg-gray-700 border-gray-600" : "text-gray-900 bg-white border-gray-300"} rounded-lg px-3 py-2 break-all`, children: address }) }),
|
|
8126
|
+
/* @__PURE__ */ jsx29(
|
|
8398
8127
|
Button,
|
|
8399
8128
|
{
|
|
8400
8129
|
onClick: handleCopy,
|
|
8401
8130
|
className: "w-full mt-3",
|
|
8402
8131
|
size: "lg",
|
|
8403
|
-
children: copied ? /* @__PURE__ */
|
|
8404
|
-
/* @__PURE__ */
|
|
8405
|
-
/* @__PURE__ */
|
|
8406
|
-
] }) : /* @__PURE__ */
|
|
8407
|
-
/* @__PURE__ */
|
|
8408
|
-
/* @__PURE__ */
|
|
8132
|
+
children: copied ? /* @__PURE__ */ jsxs20(Fragment6, { children: [
|
|
8133
|
+
/* @__PURE__ */ jsx29(CheckCircle27, { className: "h-4 w-4" }),
|
|
8134
|
+
/* @__PURE__ */ jsx29("span", { children: "Copied!" })
|
|
8135
|
+
] }) : /* @__PURE__ */ jsxs20(Fragment6, { children: [
|
|
8136
|
+
/* @__PURE__ */ jsx29(Copy4, { className: "h-4 w-4" }),
|
|
8137
|
+
/* @__PURE__ */ jsx29("span", { children: "Copy Address" })
|
|
8409
8138
|
] })
|
|
8410
8139
|
}
|
|
8411
8140
|
)
|
|
8412
8141
|
] }),
|
|
8413
|
-
/* @__PURE__ */
|
|
8414
|
-
/* @__PURE__ */
|
|
8415
|
-
/* @__PURE__ */
|
|
8142
|
+
/* @__PURE__ */ jsxs20("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
|
|
8143
|
+
/* @__PURE__ */ jsx29("p", { children: "Share this address to receive LUMIA tokens." }),
|
|
8144
|
+
/* @__PURE__ */ jsx29("p", { className: "mt-1", children: "Only send LUMIA tokens to this address on Lumia Beam network." })
|
|
8416
8145
|
] })
|
|
8417
8146
|
] })
|
|
8418
8147
|
]
|
|
@@ -8422,11 +8151,11 @@ var ReceiveModal = ({
|
|
|
8422
8151
|
|
|
8423
8152
|
// src/internal/components/BuyModal.tsx
|
|
8424
8153
|
import { CreditCard, ArrowLeft as ArrowLeft9 } from "lucide-react";
|
|
8425
|
-
import { jsx as
|
|
8154
|
+
import { jsx as jsx30, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
8426
8155
|
var BuyModal = ({ open, onOpenChange, onBack }) => {
|
|
8427
8156
|
const { config } = useLumiaPassportConfig();
|
|
8428
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
8429
|
-
return /* @__PURE__ */
|
|
8157
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
8158
|
+
return /* @__PURE__ */ jsx30(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs21(
|
|
8430
8159
|
DialogContent,
|
|
8431
8160
|
{
|
|
8432
8161
|
className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
|
|
@@ -8438,26 +8167,26 @@ var BuyModal = ({ open, onOpenChange, onBack }) => {
|
|
|
8438
8167
|
fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
|
|
8439
8168
|
},
|
|
8440
8169
|
children: [
|
|
8441
|
-
/* @__PURE__ */
|
|
8442
|
-
/* @__PURE__ */
|
|
8443
|
-
/* @__PURE__ */
|
|
8444
|
-
onBack && /* @__PURE__ */
|
|
8170
|
+
/* @__PURE__ */ jsx30(VisuallyHidden, { children: /* @__PURE__ */ jsx30(DialogTitle, { children: "Buy Crypto" }) }),
|
|
8171
|
+
/* @__PURE__ */ jsx30(DialogDescription, { className: "sr-only", children: "On-ramp placeholder" }),
|
|
8172
|
+
/* @__PURE__ */ jsx30("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-2", children: [
|
|
8173
|
+
onBack && /* @__PURE__ */ jsx30(
|
|
8445
8174
|
"button",
|
|
8446
8175
|
{
|
|
8447
8176
|
onClick: onBack,
|
|
8448
8177
|
className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
|
|
8449
8178
|
title: "Back",
|
|
8450
|
-
children: /* @__PURE__ */
|
|
8179
|
+
children: /* @__PURE__ */ jsx30(ArrowLeft9, { className: "h-4 w-4" })
|
|
8451
8180
|
}
|
|
8452
8181
|
),
|
|
8453
|
-
/* @__PURE__ */
|
|
8454
|
-
/* @__PURE__ */
|
|
8455
|
-
/* @__PURE__ */
|
|
8182
|
+
/* @__PURE__ */ jsxs21("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
|
|
8183
|
+
/* @__PURE__ */ jsx30(CreditCard, { className: "h-5 w-5" }),
|
|
8184
|
+
/* @__PURE__ */ jsx30("span", { children: "Buy" })
|
|
8456
8185
|
] })
|
|
8457
8186
|
] }) }),
|
|
8458
|
-
/* @__PURE__ */
|
|
8459
|
-
/* @__PURE__ */
|
|
8460
|
-
/* @__PURE__ */
|
|
8187
|
+
/* @__PURE__ */ jsxs21("div", { className: "p-5", children: [
|
|
8188
|
+
/* @__PURE__ */ jsx30("div", { className: `rounded-xl p-4 text-center ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: /* @__PURE__ */ jsx30("div", { className: `text-sm ${theme.mutedText}`, children: "On-ramp coming soon\u2026" }) }),
|
|
8189
|
+
/* @__PURE__ */ jsx30("div", { className: "pt-4", children: /* @__PURE__ */ jsx30(Button, { className: "w-full", onClick: () => onOpenChange(false), size: "lg", children: "Close" }) })
|
|
8461
8190
|
] })
|
|
8462
8191
|
]
|
|
8463
8192
|
}
|
|
@@ -8466,13 +8195,13 @@ var BuyModal = ({ open, onOpenChange, onBack }) => {
|
|
|
8466
8195
|
|
|
8467
8196
|
// src/internal/components/KycModal.tsx
|
|
8468
8197
|
import { ShieldCheck, ArrowLeft as ArrowLeft10 } from "lucide-react";
|
|
8469
|
-
import { jsx as
|
|
8198
|
+
import { jsx as jsx31, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
8470
8199
|
var KycModal = ({ open, onOpenChange, onBack }) => {
|
|
8471
8200
|
const { config } = useLumiaPassportConfig();
|
|
8472
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
8201
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
8473
8202
|
const provider = config.kyc?.provider;
|
|
8474
8203
|
const options = config.kyc?.options || {};
|
|
8475
|
-
return /* @__PURE__ */
|
|
8204
|
+
return /* @__PURE__ */ jsx31(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs22(
|
|
8476
8205
|
DialogContent,
|
|
8477
8206
|
{
|
|
8478
8207
|
className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
|
|
@@ -8484,32 +8213,32 @@ var KycModal = ({ open, onOpenChange, onBack }) => {
|
|
|
8484
8213
|
fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
|
|
8485
8214
|
},
|
|
8486
8215
|
children: [
|
|
8487
|
-
/* @__PURE__ */
|
|
8488
|
-
/* @__PURE__ */
|
|
8489
|
-
/* @__PURE__ */
|
|
8490
|
-
onBack && /* @__PURE__ */
|
|
8216
|
+
/* @__PURE__ */ jsx31(VisuallyHidden, { children: /* @__PURE__ */ jsx31(DialogTitle, { children: "KYC" }) }),
|
|
8217
|
+
/* @__PURE__ */ jsx31(DialogDescription, { className: "sr-only", children: "KYC placeholder" }),
|
|
8218
|
+
/* @__PURE__ */ jsx31("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-2", children: [
|
|
8219
|
+
onBack && /* @__PURE__ */ jsx31(
|
|
8491
8220
|
"button",
|
|
8492
8221
|
{
|
|
8493
8222
|
onClick: onBack,
|
|
8494
8223
|
className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
|
|
8495
8224
|
title: "Back",
|
|
8496
|
-
children: /* @__PURE__ */
|
|
8225
|
+
children: /* @__PURE__ */ jsx31(ArrowLeft10, { className: "h-4 w-4" })
|
|
8497
8226
|
}
|
|
8498
8227
|
),
|
|
8499
|
-
/* @__PURE__ */
|
|
8500
|
-
/* @__PURE__ */
|
|
8501
|
-
/* @__PURE__ */
|
|
8228
|
+
/* @__PURE__ */ jsxs22("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
|
|
8229
|
+
/* @__PURE__ */ jsx31(ShieldCheck, { className: "h-5 w-5" }),
|
|
8230
|
+
/* @__PURE__ */ jsx31("span", { children: "KYC" })
|
|
8502
8231
|
] })
|
|
8503
8232
|
] }) }),
|
|
8504
|
-
/* @__PURE__ */
|
|
8505
|
-
provider ? /* @__PURE__ */
|
|
8506
|
-
/* @__PURE__ */
|
|
8233
|
+
/* @__PURE__ */ jsxs22("div", { className: "p-5", children: [
|
|
8234
|
+
provider ? /* @__PURE__ */ jsxs22("div", { className: `rounded-xl p-4 ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: [
|
|
8235
|
+
/* @__PURE__ */ jsxs22("div", { className: `text-sm ${theme.titleText} mb-2`, children: [
|
|
8507
8236
|
"KYC provider: ",
|
|
8508
|
-
/* @__PURE__ */
|
|
8237
|
+
/* @__PURE__ */ jsx31("span", { className: "font-medium", children: provider })
|
|
8509
8238
|
] }),
|
|
8510
|
-
Object.keys(options).length > 0 ? /* @__PURE__ */
|
|
8511
|
-
] }) : /* @__PURE__ */
|
|
8512
|
-
/* @__PURE__ */
|
|
8239
|
+
Object.keys(options).length > 0 ? /* @__PURE__ */ jsx31("div", { className: `text-xs ${theme.mutedText} break-words whitespace-pre-wrap`, children: JSON.stringify(options, null, 2) }) : /* @__PURE__ */ jsx31("div", { className: `text-sm ${theme.mutedText}`, children: "No provider options configured." })
|
|
8240
|
+
] }) : /* @__PURE__ */ jsx31("div", { className: `rounded-xl p-4 text-center ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: /* @__PURE__ */ jsx31("div", { className: `text-sm ${theme.mutedText}`, children: "KYC verification coming soon\u2026" }) }),
|
|
8241
|
+
/* @__PURE__ */ jsx31("div", { className: "pt-4", children: /* @__PURE__ */ jsx31(Button, { className: "w-full", onClick: () => onOpenChange(false), size: "lg", children: "Close" }) })
|
|
8513
8242
|
] })
|
|
8514
8243
|
]
|
|
8515
8244
|
}
|
|
@@ -8518,20 +8247,20 @@ var KycModal = ({ open, onOpenChange, onBack }) => {
|
|
|
8518
8247
|
|
|
8519
8248
|
// src/components/ConnectWalletButton.tsx
|
|
8520
8249
|
init_auth();
|
|
8521
|
-
import { Cloud as
|
|
8250
|
+
import { Cloud as Cloud3, Laptop as Laptop2, Shield as Shield4, Copy as Copy5, ArrowUp, ArrowDown, Plus, Activity as Activity2, Gem as Gem2, CreditCard as CreditCard2, Lock as Lock2, ArrowUpRight as ArrowUpRight2, AlertTriangle as AlertTriangle4, ShieldCheck as ShieldCheck2 } from "lucide-react";
|
|
8522
8251
|
init_base();
|
|
8523
8252
|
|
|
8524
8253
|
// src/modules/linkedProfiles.ts
|
|
8525
8254
|
init_common();
|
|
8526
8255
|
init_types();
|
|
8527
8256
|
init_auth();
|
|
8528
|
-
import * as
|
|
8257
|
+
import * as React26 from "react";
|
|
8529
8258
|
function useLumiaPassportLinkedProfiles() {
|
|
8530
|
-
const [profiles, setProfiles] =
|
|
8531
|
-
const [avatar, setAvatar] =
|
|
8532
|
-
const [isLoading, setIsLoading] =
|
|
8533
|
-
const [error, setError] =
|
|
8534
|
-
const load =
|
|
8259
|
+
const [profiles, setProfiles] = React26.useState([]);
|
|
8260
|
+
const [avatar, setAvatar] = React26.useState(null);
|
|
8261
|
+
const [isLoading, setIsLoading] = React26.useState(false);
|
|
8262
|
+
const [error, setError] = React26.useState(null);
|
|
8263
|
+
const load = React26.useCallback(async () => {
|
|
8535
8264
|
setIsLoading(true);
|
|
8536
8265
|
setError(null);
|
|
8537
8266
|
try {
|
|
@@ -8557,14 +8286,105 @@ function useLumiaPassportLinkedProfiles() {
|
|
|
8557
8286
|
setIsLoading(false);
|
|
8558
8287
|
}
|
|
8559
8288
|
}, []);
|
|
8560
|
-
|
|
8289
|
+
React26.useEffect(() => {
|
|
8561
8290
|
load();
|
|
8562
8291
|
}, [load]);
|
|
8563
8292
|
return { profiles, avatar, isLoading, error, refresh: load };
|
|
8564
8293
|
}
|
|
8565
8294
|
|
|
8295
|
+
// package.json
|
|
8296
|
+
var package_default = {
|
|
8297
|
+
name: "@lumiapassport/ui-kit",
|
|
8298
|
+
version: "1.4.2",
|
|
8299
|
+
description: "React UI components and hooks for Lumia Passport authentication and Account Abstraction",
|
|
8300
|
+
type: "module",
|
|
8301
|
+
main: "./dist/index.cjs",
|
|
8302
|
+
module: "./dist/index.js",
|
|
8303
|
+
types: "./dist/index.d.ts",
|
|
8304
|
+
sideEffects: false,
|
|
8305
|
+
files: [
|
|
8306
|
+
"dist",
|
|
8307
|
+
"README.md"
|
|
8308
|
+
],
|
|
8309
|
+
scripts: {
|
|
8310
|
+
clean: "rm -rf dist",
|
|
8311
|
+
"build:css": "tailwindcss -c tailwind.config.cjs -i src/styles/index.css -o src/styles/built.css --minify",
|
|
8312
|
+
"build:iframe-html": "node scripts/copy-iframe-html.js",
|
|
8313
|
+
"build:copy-css": "cp src/styles/built.css dist/styles.css",
|
|
8314
|
+
build: "pnpm build:css && tsup && pnpm build:iframe-html && pnpm build:copy-css",
|
|
8315
|
+
dev: "pnpm build:css && tsup --watch",
|
|
8316
|
+
"dev:iframe": "vite --config iframe/vite.config.ts"
|
|
8317
|
+
},
|
|
8318
|
+
exports: {
|
|
8319
|
+
".": {
|
|
8320
|
+
import: {
|
|
8321
|
+
types: "./dist/index.d.ts",
|
|
8322
|
+
default: "./dist/index.js"
|
|
8323
|
+
},
|
|
8324
|
+
require: {
|
|
8325
|
+
types: "./dist/index.d.cts",
|
|
8326
|
+
default: "./dist/index.cjs"
|
|
8327
|
+
}
|
|
8328
|
+
},
|
|
8329
|
+
"./styles.css": "./dist/styles.css",
|
|
8330
|
+
"./dist/styles.css": "./dist/styles.css"
|
|
8331
|
+
},
|
|
8332
|
+
peerDependencies: {
|
|
8333
|
+
"@radix-ui/react-alert-dialog": ">=1.0.0",
|
|
8334
|
+
"@radix-ui/react-dialog": ">=1.0.0",
|
|
8335
|
+
"@radix-ui/react-slot": ">=1.0.0",
|
|
8336
|
+
"@tanstack/react-query": ">=5.0.0",
|
|
8337
|
+
"class-variance-authority": ">=0.7.0",
|
|
8338
|
+
clsx: ">=2.1.1",
|
|
8339
|
+
"dkls23-wasm": ">=0.1.0",
|
|
8340
|
+
react: ">=18",
|
|
8341
|
+
"react-dom": ">=18",
|
|
8342
|
+
"tailwind-merge": ">=2.2.0",
|
|
8343
|
+
viem: ">=2.10.0",
|
|
8344
|
+
wagmi: ">=2.5.0"
|
|
8345
|
+
},
|
|
8346
|
+
dependencies: {
|
|
8347
|
+
"@lumiapassport/core": "workspace:*",
|
|
8348
|
+
"@rainbow-me/rainbowkit": "^2.2.8",
|
|
8349
|
+
"lucide-react": "^0.454.0",
|
|
8350
|
+
qrcode: "^1.5.0"
|
|
8351
|
+
},
|
|
8352
|
+
devDependencies: {
|
|
8353
|
+
"@radix-ui/react-alert-dialog": "^1.0.0",
|
|
8354
|
+
"@radix-ui/react-dialog": "^1.0.0",
|
|
8355
|
+
"@radix-ui/react-slot": "^1.0.0",
|
|
8356
|
+
"@tailwindcss/typography": "^0.5.16",
|
|
8357
|
+
"@tanstack/react-query": "^5.90.2",
|
|
8358
|
+
"@types/qrcode": "^1.5.0",
|
|
8359
|
+
"@types/react": "^18.3.3",
|
|
8360
|
+
"@types/react-dom": "^18.3.0",
|
|
8361
|
+
autoprefixer: "^10.4.20",
|
|
8362
|
+
"class-variance-authority": "^0.7.0",
|
|
8363
|
+
clsx: "^2.1.1",
|
|
8364
|
+
"dkls23-wasm": "^0.1.0",
|
|
8365
|
+
postcss: "^8.4.47",
|
|
8366
|
+
react: "^18.3.1",
|
|
8367
|
+
"react-dom": "^18.3.1",
|
|
8368
|
+
"tailwind-merge": "^2.2.0",
|
|
8369
|
+
tailwindcss: "^3.4.10",
|
|
8370
|
+
tsup: "^8.5.0",
|
|
8371
|
+
typescript: "^5.4.5",
|
|
8372
|
+
viem: "^2.37.9",
|
|
8373
|
+
vite: "^5.0.0",
|
|
8374
|
+
wagmi: "^2.17.5"
|
|
8375
|
+
},
|
|
8376
|
+
repository: {
|
|
8377
|
+
type: "git",
|
|
8378
|
+
url: "https://github.com/lumiachain/lumia-passport-sdk",
|
|
8379
|
+
directory: "packages/ui-kit"
|
|
8380
|
+
},
|
|
8381
|
+
publishConfig: {
|
|
8382
|
+
access: "public"
|
|
8383
|
+
}
|
|
8384
|
+
};
|
|
8385
|
+
|
|
8566
8386
|
// src/components/ConnectWalletButton.tsx
|
|
8567
|
-
import { jsx as
|
|
8387
|
+
import { jsx as jsx32, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
8568
8388
|
var ConnectWalletButton = ({
|
|
8569
8389
|
className,
|
|
8570
8390
|
label = "Connect Wallet",
|
|
@@ -8576,7 +8396,7 @@ var ConnectWalletButton = ({
|
|
|
8576
8396
|
}) => {
|
|
8577
8397
|
console.log("[ConnectWalletButton] Component rendering");
|
|
8578
8398
|
const { config, callbacks: contextCallbacks } = useLumiaPassportConfig();
|
|
8579
|
-
const callbacks =
|
|
8399
|
+
const callbacks = React27.useMemo(() => ({
|
|
8580
8400
|
onLumiaPassportConnecting: buttonCallbacks?.onLumiaPassportConnecting ?? contextCallbacks?.onLumiaPassportConnecting,
|
|
8581
8401
|
onLumiaPassportConnect: buttonCallbacks?.onLumiaPassportConnect ?? contextCallbacks?.onLumiaPassportConnect,
|
|
8582
8402
|
onLumiaPassportAccount: buttonCallbacks?.onLumiaPassportAccount ?? contextCallbacks?.onLumiaPassportAccount,
|
|
@@ -8585,7 +8405,7 @@ var ConnectWalletButton = ({
|
|
|
8585
8405
|
onLumiaPassportError: buttonCallbacks?.onLumiaPassportError ?? contextCallbacks?.onLumiaPassportError,
|
|
8586
8406
|
onWalletReady: buttonCallbacks?.onWalletReady ?? contextCallbacks?.onWalletReady
|
|
8587
8407
|
}), [buttonCallbacks, contextCallbacks]);
|
|
8588
|
-
const { theme: resolvedTheme, isDark, classes: theme } = useTheme(config.ui.theme);
|
|
8408
|
+
const { theme: resolvedTheme, isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
8589
8409
|
const {
|
|
8590
8410
|
session,
|
|
8591
8411
|
address,
|
|
@@ -8601,20 +8421,20 @@ var ConnectWalletButton = ({
|
|
|
8601
8421
|
setIsRecoveryModalOpen
|
|
8602
8422
|
} = useLumiaSession();
|
|
8603
8423
|
const { profiles, isLoading: profilesLoading } = useLumiaPassportLinkedProfiles();
|
|
8604
|
-
const [isAuthModalOpen, setIsAuthModalOpen] =
|
|
8605
|
-
const tssManagerRef =
|
|
8606
|
-
const [isWalletMenuOpen, setIsWalletMenuOpen] =
|
|
8607
|
-
const [copied, setCopied] =
|
|
8608
|
-
const [isManageWalletOpen, setIsManageWalletOpen] =
|
|
8609
|
-
const [isSecurityOpen, setIsSecurityOpen] =
|
|
8610
|
-
const [isBackupOpen, setIsBackupOpen] =
|
|
8611
|
-
const [isTransactionsOpen, setIsTransactionsOpen] =
|
|
8612
|
-
const [isViewAssetsOpen, setIsViewAssetsOpen] =
|
|
8613
|
-
const [isSendOpen, setIsSendOpen] =
|
|
8614
|
-
const [isReceiveOpen, setIsReceiveOpen] =
|
|
8615
|
-
const [isBuyOpen, setIsBuyOpen] =
|
|
8616
|
-
const [isKycOpen, setIsKycOpen] =
|
|
8617
|
-
|
|
8424
|
+
const [isAuthModalOpen, setIsAuthModalOpen] = React27.useState(false);
|
|
8425
|
+
const tssManagerRef = React27.useRef(null);
|
|
8426
|
+
const [isWalletMenuOpen, setIsWalletMenuOpen] = React27.useState(false);
|
|
8427
|
+
const [copied, setCopied] = React27.useState(false);
|
|
8428
|
+
const [isManageWalletOpen, setIsManageWalletOpen] = React27.useState(false);
|
|
8429
|
+
const [isSecurityOpen, setIsSecurityOpen] = React27.useState(false);
|
|
8430
|
+
const [isBackupOpen, setIsBackupOpen] = React27.useState(false);
|
|
8431
|
+
const [isTransactionsOpen, setIsTransactionsOpen] = React27.useState(false);
|
|
8432
|
+
const [isViewAssetsOpen, setIsViewAssetsOpen] = React27.useState(false);
|
|
8433
|
+
const [isSendOpen, setIsSendOpen] = React27.useState(false);
|
|
8434
|
+
const [isReceiveOpen, setIsReceiveOpen] = React27.useState(false);
|
|
8435
|
+
const [isBuyOpen, setIsBuyOpen] = React27.useState(false);
|
|
8436
|
+
const [isKycOpen, setIsKycOpen] = React27.useState(false);
|
|
8437
|
+
React27.useEffect(() => {
|
|
8618
8438
|
if (!callbacks?.onWalletReady) return;
|
|
8619
8439
|
(async () => {
|
|
8620
8440
|
try {
|
|
@@ -8626,7 +8446,7 @@ var ConnectWalletButton = ({
|
|
|
8626
8446
|
}
|
|
8627
8447
|
})();
|
|
8628
8448
|
}, [callbacks?.onWalletReady]);
|
|
8629
|
-
|
|
8449
|
+
React27.useEffect(() => {
|
|
8630
8450
|
try {
|
|
8631
8451
|
const shouldAutoOpen = authOpen ?? config?.ui?.authOpen;
|
|
8632
8452
|
if (!address && !session && shouldAutoOpen) {
|
|
@@ -8653,25 +8473,25 @@ var ConnectWalletButton = ({
|
|
|
8653
8473
|
refetchOnWindowFocus: true
|
|
8654
8474
|
}
|
|
8655
8475
|
});
|
|
8656
|
-
const formatAddress =
|
|
8476
|
+
const formatAddress = React27.useCallback((addr) => {
|
|
8657
8477
|
if (!addr) return "";
|
|
8658
8478
|
return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
|
|
8659
8479
|
}, []);
|
|
8660
|
-
const avatar =
|
|
8661
|
-
const displayName =
|
|
8662
|
-
const formatBalance =
|
|
8480
|
+
const avatar = React27.useMemo(() => jwtTokenManager2.getAvatar(), [isAuthModalOpen, status]);
|
|
8481
|
+
const displayName = React27.useMemo(() => jwtTokenManager2.getDisplayName(), [isAuthModalOpen, status]);
|
|
8482
|
+
const formatBalance = React27.useCallback(() => {
|
|
8663
8483
|
if (!balance || balanceLoading) return "0.0000";
|
|
8664
8484
|
return parseFloat(balance.formatted).toFixed(4);
|
|
8665
8485
|
}, [balance, balanceLoading]);
|
|
8666
|
-
const [hasServerVault, setHasServerVault] =
|
|
8667
|
-
const indicators =
|
|
8486
|
+
const [hasServerVault, setHasServerVault] = React27.useState(false);
|
|
8487
|
+
const indicators = React27.useMemo(() => {
|
|
8668
8488
|
const userId = jwtTokenManager2.getUserId();
|
|
8669
8489
|
if (!userId) return { server: false, local: false, backup: false };
|
|
8670
8490
|
const server = jwtTokenManager2.getHasKeyshare() ?? false;
|
|
8671
8491
|
const local = !!address;
|
|
8672
8492
|
return { server, local, backup: hasServerVault };
|
|
8673
8493
|
}, [session, address, hasServerVault]);
|
|
8674
|
-
const handleAuthModalSuccess =
|
|
8494
|
+
const handleAuthModalSuccess = React27.useCallback(async () => {
|
|
8675
8495
|
await new Promise((r) => setTimeout(r, 100));
|
|
8676
8496
|
const userId = jwtTokenManager2.getUserId();
|
|
8677
8497
|
const isAuthenticated = jwtTokenManager2.isAuthenticated();
|
|
@@ -8729,7 +8549,7 @@ var ConnectWalletButton = ({
|
|
|
8729
8549
|
}
|
|
8730
8550
|
}
|
|
8731
8551
|
}, [onConnected, setAddress, setError, setSession, setStatus]);
|
|
8732
|
-
const handleDisconnect =
|
|
8552
|
+
const handleDisconnect = React27.useCallback(async () => {
|
|
8733
8553
|
const prevAddress = address;
|
|
8734
8554
|
let userId = null;
|
|
8735
8555
|
try {
|
|
@@ -8749,7 +8569,7 @@ var ConnectWalletButton = ({
|
|
|
8749
8569
|
} catch {
|
|
8750
8570
|
}
|
|
8751
8571
|
}, [setAddress, setError, setSession, setStatus]);
|
|
8752
|
-
const createSessionWithKeyshare =
|
|
8572
|
+
const createSessionWithKeyshare = React27.useCallback(async (userId, hasServerKeyshare, isNewUser) => {
|
|
8753
8573
|
try {
|
|
8754
8574
|
try {
|
|
8755
8575
|
callbacks?.onLumiaPassportConnecting?.({ method: "wallet" });
|
|
@@ -8775,7 +8595,7 @@ var ConnectWalletButton = ({
|
|
|
8775
8595
|
throw error2;
|
|
8776
8596
|
}
|
|
8777
8597
|
}, [usePaymaster, setStatus, callbacks]);
|
|
8778
|
-
|
|
8598
|
+
React27.useEffect(() => {
|
|
8779
8599
|
if (address) {
|
|
8780
8600
|
(async () => {
|
|
8781
8601
|
try {
|
|
@@ -8792,8 +8612,8 @@ var ConnectWalletButton = ({
|
|
|
8792
8612
|
setHasServerVault(false);
|
|
8793
8613
|
}
|
|
8794
8614
|
}, [address]);
|
|
8795
|
-
const autoConnectAttemptedRef =
|
|
8796
|
-
|
|
8615
|
+
const autoConnectAttemptedRef = React27.useRef(false);
|
|
8616
|
+
React27.useEffect(() => {
|
|
8797
8617
|
if (autoConnectAttemptedRef.current) return;
|
|
8798
8618
|
const tryAutoConnect = async (attempt) => {
|
|
8799
8619
|
if (address || session) return;
|
|
@@ -8874,13 +8694,13 @@ var ConnectWalletButton = ({
|
|
|
8874
8694
|
autoConnectAttemptedRef.current = true;
|
|
8875
8695
|
tryAutoConnect(0);
|
|
8876
8696
|
}, []);
|
|
8877
|
-
|
|
8697
|
+
React27.useEffect(() => {
|
|
8878
8698
|
if (address && refetchBalance) {
|
|
8879
8699
|
refetchBalance();
|
|
8880
8700
|
}
|
|
8881
8701
|
}, [address]);
|
|
8882
|
-
return /* @__PURE__ */
|
|
8883
|
-
/* @__PURE__ */
|
|
8702
|
+
return /* @__PURE__ */ jsxs23("div", { className: [className, "lumia-scope"].filter(Boolean).join(" "), children: [
|
|
8703
|
+
/* @__PURE__ */ jsx32("div", { className: "inline-flex items-center gap-2", children: !address ? /* @__PURE__ */ jsx32("div", { style: { display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsx32(
|
|
8884
8704
|
"button",
|
|
8885
8705
|
{
|
|
8886
8706
|
onClick: () => {
|
|
@@ -8913,56 +8733,56 @@ var ConnectWalletButton = ({
|
|
|
8913
8733
|
},
|
|
8914
8734
|
children: label || "Connect"
|
|
8915
8735
|
}
|
|
8916
|
-
) }) : /* @__PURE__ */
|
|
8736
|
+
) }) : /* @__PURE__ */ jsx32(
|
|
8917
8737
|
"div",
|
|
8918
8738
|
{
|
|
8919
8739
|
className: `relative rounded-2xl p-4 shadow-lg cursor-pointer transition-all duration-200 hover:scale-105 hover:shadow-xl max-w-sm min-w-[280px] ${isDark ? "bg-gray-900/40 backdrop-blur border border-gray-700" : "bg-white backdrop-blur border border-gray-200"}`,
|
|
8920
8740
|
onClick: () => setIsWalletMenuOpen(true),
|
|
8921
|
-
children: /* @__PURE__ */
|
|
8922
|
-
/* @__PURE__ */
|
|
8741
|
+
children: /* @__PURE__ */ jsxs23("div", { className: "flex items-center space-x-3", children: [
|
|
8742
|
+
/* @__PURE__ */ jsx32("div", { className: "w-10 h-10 rounded-full flex items-center justify-center flex-shrink-0 overflow-hidden bg-gradient-to-br from-purple-500 to-blue-600", children: avatar ? (
|
|
8923
8743
|
// eslint-disable-next-line @next/next/no-img-element
|
|
8924
|
-
/* @__PURE__ */
|
|
8925
|
-
) : /* @__PURE__ */
|
|
8926
|
-
/* @__PURE__ */
|
|
8927
|
-
/* @__PURE__ */
|
|
8928
|
-
/* @__PURE__ */
|
|
8744
|
+
/* @__PURE__ */ jsx32("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" })
|
|
8745
|
+
) : /* @__PURE__ */ jsx32("span", { className: "text-white font-bold text-sm", children: "LP" }) }),
|
|
8746
|
+
/* @__PURE__ */ jsxs23("div", { className: "text-left flex-1 min-w-0", children: [
|
|
8747
|
+
/* @__PURE__ */ jsx32("div", { className: `font-semibold text-base truncate ${theme.titleText}`, children: mode === "compact" && displayName ? displayName : formatAddress(address) }),
|
|
8748
|
+
/* @__PURE__ */ jsxs23("div", { className: `text-sm ${theme.mutedText}`, children: [
|
|
8929
8749
|
formatBalance(),
|
|
8930
8750
|
" LUMIA"
|
|
8931
8751
|
] })
|
|
8932
8752
|
] }),
|
|
8933
|
-
/* @__PURE__ */
|
|
8934
|
-
/* @__PURE__ */
|
|
8935
|
-
/* @__PURE__ */
|
|
8936
|
-
|
|
8753
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex items-center space-x-1", children: [
|
|
8754
|
+
/* @__PURE__ */ jsxs23("div", { className: "group relative", children: [
|
|
8755
|
+
/* @__PURE__ */ jsx32(
|
|
8756
|
+
Cloud3,
|
|
8937
8757
|
{
|
|
8938
8758
|
className: `w-3 h-3 ${indicators.server ? "text-green-500" : "text-orange-400"}`
|
|
8939
8759
|
}
|
|
8940
8760
|
),
|
|
8941
|
-
/* @__PURE__ */
|
|
8761
|
+
/* @__PURE__ */ jsxs23("div", { className: "absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 bg-gray-800 text-white text-xs rounded opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none whitespace-nowrap z-50", children: [
|
|
8942
8762
|
"Server Keyshare: ",
|
|
8943
8763
|
indicators.server ? "Available" : "Missing"
|
|
8944
8764
|
] })
|
|
8945
8765
|
] }),
|
|
8946
|
-
/* @__PURE__ */
|
|
8947
|
-
/* @__PURE__ */
|
|
8766
|
+
/* @__PURE__ */ jsxs23("div", { className: "group relative", children: [
|
|
8767
|
+
/* @__PURE__ */ jsx32(
|
|
8948
8768
|
Laptop2,
|
|
8949
8769
|
{
|
|
8950
8770
|
className: `w-3 h-3 ${indicators.local ? "text-green-500" : "text-orange-400"}`
|
|
8951
8771
|
}
|
|
8952
8772
|
),
|
|
8953
|
-
/* @__PURE__ */
|
|
8773
|
+
/* @__PURE__ */ jsxs23("div", { className: "absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 bg-gray-800 text-white text-xs rounded opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none whitespace-nowrap z-50", children: [
|
|
8954
8774
|
"Local Keyshare: ",
|
|
8955
8775
|
indicators.local ? "Available" : "Missing"
|
|
8956
8776
|
] })
|
|
8957
8777
|
] }),
|
|
8958
|
-
/* @__PURE__ */
|
|
8959
|
-
/* @__PURE__ */
|
|
8960
|
-
|
|
8778
|
+
/* @__PURE__ */ jsxs23("div", { className: "group relative", children: [
|
|
8779
|
+
/* @__PURE__ */ jsx32(
|
|
8780
|
+
Shield4,
|
|
8961
8781
|
{
|
|
8962
8782
|
className: `w-3 h-3 ${indicators.backup ? "text-green-500" : "text-orange-400"}`
|
|
8963
8783
|
}
|
|
8964
8784
|
),
|
|
8965
|
-
/* @__PURE__ */
|
|
8785
|
+
/* @__PURE__ */ jsxs23("div", { className: "absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 bg-gray-800 text-white text-xs rounded opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none whitespace-nowrap z-50", children: [
|
|
8966
8786
|
"Vault Backup: ",
|
|
8967
8787
|
indicators.backup ? "Available" : "Not Found"
|
|
8968
8788
|
] })
|
|
@@ -8971,80 +8791,80 @@ var ConnectWalletButton = ({
|
|
|
8971
8791
|
] })
|
|
8972
8792
|
}
|
|
8973
8793
|
) }),
|
|
8974
|
-
isWalletMenuOpen && address && /* @__PURE__ */
|
|
8975
|
-
/* @__PURE__ */
|
|
8976
|
-
/* @__PURE__ */
|
|
8977
|
-
/* @__PURE__ */
|
|
8978
|
-
/* @__PURE__ */
|
|
8794
|
+
isWalletMenuOpen && address && /* @__PURE__ */ jsx32("div", { className: "fixed inset-0 z-[60]", children: /* @__PURE__ */ jsx32(Dialog, { open: isWalletMenuOpen, onOpenChange: setIsWalletMenuOpen, children: /* @__PURE__ */ jsxs23(DialogContent, { className: `lumia-scope max-w-[400px] p-0 border-0 ${theme.modalBg} rounded-2xl overflow-hidden gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`, children: [
|
|
8795
|
+
/* @__PURE__ */ jsx32(VisuallyHidden, { children: /* @__PURE__ */ jsx32(DialogTitle, { children: "Wallet Menu" }) }),
|
|
8796
|
+
/* @__PURE__ */ jsx32(DialogDescription, { className: "sr-only", children: "Smart Account wallet actions and status" }),
|
|
8797
|
+
/* @__PURE__ */ jsx32("div", { className: `p-4 border-b ${theme.divider}`, children: /* @__PURE__ */ jsx32("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsxs23("div", { className: "flex items-center space-x-4", children: [
|
|
8798
|
+
/* @__PURE__ */ jsx32("div", { className: "w-12 h-12 bg-gradient-to-br from-purple-500 to-blue-600 rounded-full flex items-center justify-center relative overflow-hidden", children: avatar ? (
|
|
8979
8799
|
// eslint-disable-next-line @next/next/no-img-element
|
|
8980
|
-
/* @__PURE__ */
|
|
8981
|
-
) : /* @__PURE__ */
|
|
8982
|
-
/* @__PURE__ */
|
|
8983
|
-
/* @__PURE__ */
|
|
8984
|
-
/* @__PURE__ */
|
|
8985
|
-
/* @__PURE__ */
|
|
8986
|
-
/* @__PURE__ */
|
|
8800
|
+
/* @__PURE__ */ jsx32("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" })
|
|
8801
|
+
) : /* @__PURE__ */ jsx32("span", { className: "text-white font-bold text-lg", children: "L" }) }),
|
|
8802
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex-1 min-w-0", children: [
|
|
8803
|
+
/* @__PURE__ */ jsx32("div", { className: `font-medium text-lg ${theme.titleText}`, children: displayName || "Smart Account" }),
|
|
8804
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex items-center space-x-2", children: [
|
|
8805
|
+
/* @__PURE__ */ jsx32("div", { className: `text-sm ${theme.mutedText}`, children: formatAddress(address) }),
|
|
8806
|
+
/* @__PURE__ */ jsx32("button", { onClick: async () => {
|
|
8987
8807
|
try {
|
|
8988
8808
|
await navigator.clipboard.writeText(address);
|
|
8989
8809
|
setCopied(true);
|
|
8990
8810
|
setTimeout(() => setCopied(false), 1500);
|
|
8991
8811
|
} catch {
|
|
8992
8812
|
}
|
|
8993
|
-
}, title: "Copy address", className: `${theme.iconColor} hover:${theme.titleText} p-1`, children: copied ? /* @__PURE__ */
|
|
8813
|
+
}, title: "Copy address", className: `${theme.iconColor} hover:${theme.titleText} p-1`, children: copied ? /* @__PURE__ */ jsx32("span", { className: "text-green-500 text-sm", children: "\u2713" }) : /* @__PURE__ */ jsx32(Copy5, { className: "w-4 h-4" }) })
|
|
8994
8814
|
] })
|
|
8995
8815
|
] })
|
|
8996
8816
|
] }) }) }),
|
|
8997
|
-
/* @__PURE__ */
|
|
8998
|
-
/* @__PURE__ */
|
|
8999
|
-
/* @__PURE__ */
|
|
8817
|
+
/* @__PURE__ */ jsxs23("div", { className: "p-4", children: [
|
|
8818
|
+
/* @__PURE__ */ jsxs23("div", { className: "grid grid-cols-3 gap-2 mb-4", children: [
|
|
8819
|
+
/* @__PURE__ */ jsxs23("button", { onClick: () => {
|
|
9000
8820
|
setIsWalletMenuOpen(false);
|
|
9001
8821
|
setIsSendOpen(true);
|
|
9002
8822
|
}, className: `${isDark ? "bg-slate-900 hover:bg-slate-800 text-blue-400" : "bg-blue-50 hover:bg-blue-100 text-blue-600"} rounded-xl p-3 transition-colors flex items-center justify-center gap-2`, children: [
|
|
9003
|
-
/* @__PURE__ */
|
|
9004
|
-
/* @__PURE__ */
|
|
8823
|
+
/* @__PURE__ */ jsx32(ArrowUp, { className: "w-5 h-5" }),
|
|
8824
|
+
/* @__PURE__ */ jsx32("span", { className: "text-sm font-medium", children: "Send" })
|
|
9005
8825
|
] }),
|
|
9006
|
-
/* @__PURE__ */
|
|
8826
|
+
/* @__PURE__ */ jsxs23("button", { onClick: () => {
|
|
9007
8827
|
setIsWalletMenuOpen(false);
|
|
9008
8828
|
setIsReceiveOpen(true);
|
|
9009
8829
|
}, className: `${isDark ? "bg-slate-900 hover:bg-slate-800 text-green-400" : "bg-green-50 hover:bg-green-100 text-green-600"} rounded-xl p-3 transition-colors flex items-center justify-center gap-2`, children: [
|
|
9010
|
-
/* @__PURE__ */
|
|
9011
|
-
/* @__PURE__ */
|
|
8830
|
+
/* @__PURE__ */ jsx32(ArrowDown, { className: "w-5 h-5" }),
|
|
8831
|
+
/* @__PURE__ */ jsx32("span", { className: "text-sm font-medium", children: "Receive" })
|
|
9012
8832
|
] }),
|
|
9013
|
-
/* @__PURE__ */
|
|
8833
|
+
/* @__PURE__ */ jsxs23("button", { onClick: () => {
|
|
9014
8834
|
setIsWalletMenuOpen(false);
|
|
9015
8835
|
setIsBuyOpen(true);
|
|
9016
8836
|
}, className: `${isDark ? "bg-slate-900 hover:bg-slate-800 text-purple-400" : "bg-purple-50 hover:bg-purple-100 text-purple-600"} rounded-xl p-3 transition-colors flex items-center justify-center gap-2`, children: [
|
|
9017
|
-
/* @__PURE__ */
|
|
9018
|
-
/* @__PURE__ */
|
|
8837
|
+
/* @__PURE__ */ jsx32(Plus, { className: "w-5 h-5" }),
|
|
8838
|
+
/* @__PURE__ */ jsx32("span", { className: "text-sm font-medium", children: "Buy" })
|
|
9019
8839
|
] })
|
|
9020
8840
|
] }),
|
|
9021
|
-
config.warnings?.backupWarning && !hasServerVault && /* @__PURE__ */
|
|
9022
|
-
/* @__PURE__ */
|
|
9023
|
-
/* @__PURE__ */
|
|
9024
|
-
/* @__PURE__ */
|
|
9025
|
-
/* @__PURE__ */
|
|
9026
|
-
/* @__PURE__ */
|
|
8841
|
+
config.warnings?.backupWarning && !hasServerVault && /* @__PURE__ */ jsx32("div", { className: `mb-4 p-3 rounded-xl ${isDark ? "bg-orange-950/80 border border-orange-800/60" : "bg-orange-50 border border-orange-200"}`, children: /* @__PURE__ */ jsxs23("div", { className: "flex items-start space-x-3", children: [
|
|
8842
|
+
/* @__PURE__ */ jsx32(AlertTriangle4, { className: `w-5 h-5 ${isDark ? "text-orange-400" : "text-orange-500"} mt-0.5 flex-shrink-0` }),
|
|
8843
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex-1 min-w-0", children: [
|
|
8844
|
+
/* @__PURE__ */ jsx32("div", { className: `text-sm font-medium ${isDark ? "text-orange-200" : "text-orange-700"}`, children: "Backup Not Created" }),
|
|
8845
|
+
/* @__PURE__ */ jsx32("div", { className: `text-xs mt-1 ${isDark ? "text-orange-300/90" : "text-orange-600"}`, children: "Secure your wallet with an encrypted vault backup to protect against device loss." }),
|
|
8846
|
+
/* @__PURE__ */ jsxs23(
|
|
9027
8847
|
"button",
|
|
9028
8848
|
{
|
|
9029
8849
|
onClick: () => {
|
|
9030
8850
|
setIsWalletMenuOpen(false);
|
|
9031
|
-
|
|
8851
|
+
setIsBackupOpen(true);
|
|
9032
8852
|
},
|
|
9033
|
-
className: `mt-2 px-3 py-1.5 text-xs font-medium rounded-lg transition-colors ${isDark ? "bg-orange-
|
|
8853
|
+
className: `mt-2 px-3 py-1.5 text-xs font-medium rounded-lg transition-colors ${isDark ? "bg-orange-800/50 hover:bg-orange-700/60 text-orange-100" : "bg-orange-100 hover:bg-orange-200 text-orange-700"}`,
|
|
9034
8854
|
children: [
|
|
9035
|
-
/* @__PURE__ */
|
|
8855
|
+
/* @__PURE__ */ jsx32(ShieldCheck2, { className: "w-3 h-3 inline mr-1" }),
|
|
9036
8856
|
"Create Backup"
|
|
9037
8857
|
]
|
|
9038
8858
|
}
|
|
9039
8859
|
)
|
|
9040
8860
|
] })
|
|
9041
8861
|
] }) }),
|
|
9042
|
-
config.warnings?.emailNotConnectedWarning && !profilesLoading && !profiles.some((p) => p.provider?.toLowerCase() === "email") && /* @__PURE__ */
|
|
9043
|
-
/* @__PURE__ */
|
|
9044
|
-
/* @__PURE__ */
|
|
9045
|
-
/* @__PURE__ */
|
|
9046
|
-
/* @__PURE__ */
|
|
9047
|
-
/* @__PURE__ */
|
|
8862
|
+
config.warnings?.emailNotConnectedWarning && !profilesLoading && !profiles.some((p) => p.provider?.toLowerCase() === "email") && /* @__PURE__ */ jsx32("div", { className: `mb-4 p-3 rounded-xl ${isDark ? "bg-blue-900/20 border border-blue-900/40" : "bg-blue-50 border border-blue-200"}`, children: /* @__PURE__ */ jsxs23("div", { className: "flex items-start space-x-3", children: [
|
|
8863
|
+
/* @__PURE__ */ jsx32(AlertTriangle4, { className: `w-5 h-5 ${isDark ? "text-blue-400" : "text-blue-500"} mt-0.5 flex-shrink-0` }),
|
|
8864
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex-1 min-w-0", children: [
|
|
8865
|
+
/* @__PURE__ */ jsx32("div", { className: `text-sm font-medium ${isDark ? "text-blue-300" : "text-blue-700"}`, children: "Email Not Connected" }),
|
|
8866
|
+
/* @__PURE__ */ jsx32("div", { className: `text-xs mt-1 ${isDark ? "text-blue-400/80" : "text-blue-600"}`, children: "Connect your email for easier account recovery and additional security." }),
|
|
8867
|
+
/* @__PURE__ */ jsxs23(
|
|
9048
8868
|
"button",
|
|
9049
8869
|
{
|
|
9050
8870
|
onClick: () => {
|
|
@@ -9053,87 +8873,91 @@ var ConnectWalletButton = ({
|
|
|
9053
8873
|
},
|
|
9054
8874
|
className: `mt-2 px-3 py-1.5 text-xs font-medium rounded-lg transition-colors ${isDark ? "bg-blue-900/40 hover:bg-blue-900/60 text-blue-300" : "bg-blue-100 hover:bg-blue-200 text-blue-700"}`,
|
|
9055
8875
|
children: [
|
|
9056
|
-
/* @__PURE__ */
|
|
8876
|
+
/* @__PURE__ */ jsx32(ShieldCheck2, { className: "w-3 h-3 inline mr-1" }),
|
|
9057
8877
|
"Connect Email"
|
|
9058
8878
|
]
|
|
9059
8879
|
}
|
|
9060
8880
|
)
|
|
9061
8881
|
] })
|
|
9062
8882
|
] }) }),
|
|
9063
|
-
/* @__PURE__ */
|
|
8883
|
+
/* @__PURE__ */ jsx32(
|
|
9064
8884
|
"button",
|
|
9065
8885
|
{
|
|
9066
8886
|
onClick: () => address && window.open(`${LUMIA_EXPLORER_URL}/address/${address}`, "_blank"),
|
|
9067
8887
|
className: `w-full ${isDark ? "bg-gray-800 hover:bg-gray-700" : "bg-gray-50 hover:bg-gray-100"} rounded-xl p-3 mb-3 transition-colors cursor-pointer text-left`,
|
|
9068
|
-
children: /* @__PURE__ */
|
|
9069
|
-
/* @__PURE__ */
|
|
9070
|
-
/* @__PURE__ */
|
|
9071
|
-
/* @__PURE__ */
|
|
9072
|
-
/* @__PURE__ */
|
|
9073
|
-
/* @__PURE__ */
|
|
8888
|
+
children: /* @__PURE__ */ jsxs23("div", { className: "flex items-center justify-between", children: [
|
|
8889
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex items-center space-x-3", children: [
|
|
8890
|
+
/* @__PURE__ */ jsx32("div", { className: "w-8 h-8 rounded-full flex items-center justify-center bg-transparent overflow-hidden", children: lumiaBeam.logoDataUri ? /* @__PURE__ */ jsx32("img", { src: lumiaBeam.logoDataUri, alt: "Chain logo", className: "w-full h-full object-cover" }) : lumiaBeam.logo === "lumia" ? /* @__PURE__ */ jsx32(LumiaLogo, { size: 32 }) : /* @__PURE__ */ jsx32("span", { className: "text-white text-xs font-bold", children: (lumiaBeam.name || "L").charAt(0) }) }),
|
|
8891
|
+
/* @__PURE__ */ jsxs23("div", { children: [
|
|
8892
|
+
/* @__PURE__ */ jsx32("div", { className: `${theme.titleText} font-medium`, children: lumiaBeam.name }),
|
|
8893
|
+
/* @__PURE__ */ jsxs23("div", { className: theme.mutedText + " text-sm", children: [
|
|
9074
8894
|
formatBalance(),
|
|
9075
8895
|
" LUMIA"
|
|
9076
8896
|
] })
|
|
9077
8897
|
] })
|
|
9078
8898
|
] }),
|
|
9079
|
-
/* @__PURE__ */
|
|
8899
|
+
/* @__PURE__ */ jsx32("div", { className: theme.iconColor, children: /* @__PURE__ */ jsx32(ArrowUpRight2, { className: "w-4 h-4" }) })
|
|
9080
8900
|
] })
|
|
9081
8901
|
}
|
|
9082
8902
|
),
|
|
9083
|
-
/* @__PURE__ */
|
|
9084
|
-
config.features?.kycNeeded && /* @__PURE__ */
|
|
8903
|
+
/* @__PURE__ */ jsxs23("div", { className: "space-y-1", children: [
|
|
8904
|
+
config.features?.kycNeeded && /* @__PURE__ */ jsxs23("button", { onClick: () => {
|
|
9085
8905
|
setIsWalletMenuOpen(false);
|
|
9086
8906
|
setIsKycOpen(true);
|
|
9087
|
-
}, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "hover:bg-gray-800" : "hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
|
|
9088
|
-
/* @__PURE__ */
|
|
9089
|
-
/* @__PURE__ */
|
|
8907
|
+
}, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "bg-transparent hover:bg-gray-800" : "bg-transparent hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
|
|
8908
|
+
/* @__PURE__ */ jsx32(ShieldCheck2, { className: `w-5 h-5 ${theme.iconColor}` }),
|
|
8909
|
+
/* @__PURE__ */ jsx32("span", { className: theme.titleText, children: "KYC" })
|
|
9090
8910
|
] }),
|
|
9091
|
-
/* @__PURE__ */
|
|
8911
|
+
/* @__PURE__ */ jsxs23("button", { onClick: () => {
|
|
9092
8912
|
setIsWalletMenuOpen(false);
|
|
9093
8913
|
setIsTransactionsOpen(true);
|
|
9094
|
-
}, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "hover:bg-gray-800" : "hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
|
|
9095
|
-
/* @__PURE__ */
|
|
9096
|
-
/* @__PURE__ */
|
|
8914
|
+
}, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "bg-transparent hover:bg-gray-800" : "bg-transparent hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
|
|
8915
|
+
/* @__PURE__ */ jsx32(Activity2, { className: `w-5 h-5 ${theme.iconColor}` }),
|
|
8916
|
+
/* @__PURE__ */ jsx32("span", { className: theme.titleText, children: "Transactions" })
|
|
9097
8917
|
] }),
|
|
9098
|
-
/* @__PURE__ */
|
|
8918
|
+
/* @__PURE__ */ jsxs23("button", { onClick: () => {
|
|
9099
8919
|
setIsWalletMenuOpen(false);
|
|
9100
8920
|
setIsViewAssetsOpen(true);
|
|
9101
|
-
}, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "hover:bg-gray-800" : "hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
|
|
9102
|
-
/* @__PURE__ */
|
|
9103
|
-
/* @__PURE__ */
|
|
8921
|
+
}, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "bg-transparent hover:bg-gray-800" : "bg-transparent hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
|
|
8922
|
+
/* @__PURE__ */ jsx32(Gem2, { className: `w-5 h-5 ${theme.iconColor}` }),
|
|
8923
|
+
/* @__PURE__ */ jsx32("span", { className: theme.titleText, children: "View Assets" })
|
|
9104
8924
|
] }),
|
|
9105
|
-
/* @__PURE__ */
|
|
8925
|
+
/* @__PURE__ */ jsxs23("button", { onClick: () => {
|
|
9106
8926
|
setIsWalletMenuOpen(false);
|
|
9107
8927
|
setIsManageWalletOpen(true);
|
|
9108
|
-
}, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "hover:bg-gray-800" : "hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
|
|
9109
|
-
/* @__PURE__ */
|
|
9110
|
-
/* @__PURE__ */
|
|
8928
|
+
}, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "bg-transparent hover:bg-gray-800" : "bg-transparent hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
|
|
8929
|
+
/* @__PURE__ */ jsx32(CreditCard2, { className: `w-5 h-5 ${theme.iconColor}` }),
|
|
8930
|
+
/* @__PURE__ */ jsx32("span", { className: theme.titleText, children: "Manage Wallet" })
|
|
9111
8931
|
] }),
|
|
9112
|
-
/* @__PURE__ */
|
|
8932
|
+
/* @__PURE__ */ jsxs23("button", { onClick: () => {
|
|
9113
8933
|
setIsWalletMenuOpen(false);
|
|
9114
8934
|
setIsSecurityOpen(true);
|
|
9115
|
-
}, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "hover:bg-gray-800" : "hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
|
|
9116
|
-
/* @__PURE__ */
|
|
9117
|
-
/* @__PURE__ */
|
|
8935
|
+
}, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "bg-transparent hover:bg-gray-800" : "bg-transparent hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
|
|
8936
|
+
/* @__PURE__ */ jsx32(Lock2, { className: `w-5 h-5 ${theme.iconColor}` }),
|
|
8937
|
+
/* @__PURE__ */ jsx32("span", { className: theme.titleText, children: "Security" })
|
|
9118
8938
|
] }),
|
|
9119
|
-
/* @__PURE__ */
|
|
8939
|
+
/* @__PURE__ */ jsxs23("button", { onClick: () => {
|
|
9120
8940
|
setIsWalletMenuOpen(false);
|
|
9121
8941
|
setIsBackupOpen(true);
|
|
9122
|
-
}, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "hover:bg-gray-800" : "hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
|
|
9123
|
-
/* @__PURE__ */
|
|
9124
|
-
/* @__PURE__ */
|
|
8942
|
+
}, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "bg-transparent hover:bg-gray-800" : "bg-transparent hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
|
|
8943
|
+
/* @__PURE__ */ jsx32(Shield4, { className: `w-5 h-5 ${theme.iconColor}` }),
|
|
8944
|
+
/* @__PURE__ */ jsx32("span", { className: theme.titleText, children: "Keyshare Backup" })
|
|
9125
8945
|
] }),
|
|
9126
|
-
/* @__PURE__ */
|
|
8946
|
+
/* @__PURE__ */ jsxs23("button", { onClick: async () => {
|
|
9127
8947
|
await handleDisconnect();
|
|
9128
8948
|
setIsWalletMenuOpen(false);
|
|
9129
|
-
}, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "hover:bg-red-900/20" : "hover:bg-red-50"} transition-colors flex items-center space-x-3`, children: [
|
|
9130
|
-
/* @__PURE__ */
|
|
9131
|
-
/* @__PURE__ */
|
|
8949
|
+
}, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "bg-transparent hover:bg-red-900/20" : "bg-transparent hover:bg-red-50"} transition-colors flex items-center space-x-3`, children: [
|
|
8950
|
+
/* @__PURE__ */ jsx32(ArrowUpRight2, { className: "w-5 h-5 text-red-600" }),
|
|
8951
|
+
/* @__PURE__ */ jsx32("span", { className: "text-red-600", children: "Disconnect Wallet" })
|
|
9132
8952
|
] })
|
|
9133
|
-
] })
|
|
8953
|
+
] }),
|
|
8954
|
+
/* @__PURE__ */ jsx32("div", { className: `mt-3 pt-3 border-t ${theme.divider} text-center`, children: /* @__PURE__ */ jsxs23("div", { className: `text-xs ${theme.mutedText}`, children: [
|
|
8955
|
+
"Lumia Passport v",
|
|
8956
|
+
package_default.version
|
|
8957
|
+
] }) })
|
|
9134
8958
|
] })
|
|
9135
8959
|
] }) }) }),
|
|
9136
|
-
/* @__PURE__ */
|
|
8960
|
+
/* @__PURE__ */ jsx32(
|
|
9137
8961
|
ManageWallet,
|
|
9138
8962
|
{
|
|
9139
8963
|
open: isManageWalletOpen,
|
|
@@ -9144,7 +8968,7 @@ var ConnectWalletButton = ({
|
|
|
9144
8968
|
}
|
|
9145
8969
|
}
|
|
9146
8970
|
),
|
|
9147
|
-
/* @__PURE__ */
|
|
8971
|
+
/* @__PURE__ */ jsx32(
|
|
9148
8972
|
SecurityModal,
|
|
9149
8973
|
{
|
|
9150
8974
|
open: isSecurityOpen,
|
|
@@ -9155,12 +8979,12 @@ var ConnectWalletButton = ({
|
|
|
9155
8979
|
}
|
|
9156
8980
|
}
|
|
9157
8981
|
),
|
|
9158
|
-
isBackupOpen && session?.mpcUserId && /* @__PURE__ */
|
|
9159
|
-
/* @__PURE__ */
|
|
9160
|
-
/* @__PURE__ */
|
|
9161
|
-
/* @__PURE__ */
|
|
8982
|
+
isBackupOpen && session?.mpcUserId && /* @__PURE__ */ jsx32(Dialog, { open: isBackupOpen, onOpenChange: setIsBackupOpen, children: /* @__PURE__ */ jsxs23(DialogContent, { className: "max-w-2xl", children: [
|
|
8983
|
+
/* @__PURE__ */ jsxs23(VisuallyHidden, { children: [
|
|
8984
|
+
/* @__PURE__ */ jsx32(DialogTitle, { children: "Keyshare Backup" }),
|
|
8985
|
+
/* @__PURE__ */ jsx32(DialogDescription, { children: "Create and manage encrypted backups of your keyshare" })
|
|
9162
8986
|
] }),
|
|
9163
|
-
/* @__PURE__ */
|
|
8987
|
+
/* @__PURE__ */ jsx32(
|
|
9164
8988
|
KeyshareBackup,
|
|
9165
8989
|
{
|
|
9166
8990
|
userId: session.mpcUserId,
|
|
@@ -9171,7 +8995,7 @@ var ConnectWalletButton = ({
|
|
|
9171
8995
|
}
|
|
9172
8996
|
)
|
|
9173
8997
|
] }) }),
|
|
9174
|
-
/* @__PURE__ */
|
|
8998
|
+
/* @__PURE__ */ jsx32(
|
|
9175
8999
|
TransactionsModal,
|
|
9176
9000
|
{
|
|
9177
9001
|
open: isTransactionsOpen,
|
|
@@ -9182,7 +9006,7 @@ var ConnectWalletButton = ({
|
|
|
9182
9006
|
}
|
|
9183
9007
|
}
|
|
9184
9008
|
),
|
|
9185
|
-
/* @__PURE__ */
|
|
9009
|
+
/* @__PURE__ */ jsx32(
|
|
9186
9010
|
ViewAssetsModal,
|
|
9187
9011
|
{
|
|
9188
9012
|
open: isViewAssetsOpen,
|
|
@@ -9193,7 +9017,7 @@ var ConnectWalletButton = ({
|
|
|
9193
9017
|
}
|
|
9194
9018
|
}
|
|
9195
9019
|
),
|
|
9196
|
-
/* @__PURE__ */
|
|
9020
|
+
/* @__PURE__ */ jsx32(
|
|
9197
9021
|
SendModal,
|
|
9198
9022
|
{
|
|
9199
9023
|
open: isSendOpen,
|
|
@@ -9204,7 +9028,7 @@ var ConnectWalletButton = ({
|
|
|
9204
9028
|
}
|
|
9205
9029
|
}
|
|
9206
9030
|
),
|
|
9207
|
-
/* @__PURE__ */
|
|
9031
|
+
/* @__PURE__ */ jsx32(
|
|
9208
9032
|
ReceiveModal,
|
|
9209
9033
|
{
|
|
9210
9034
|
open: isReceiveOpen,
|
|
@@ -9215,7 +9039,7 @@ var ConnectWalletButton = ({
|
|
|
9215
9039
|
}
|
|
9216
9040
|
}
|
|
9217
9041
|
),
|
|
9218
|
-
/* @__PURE__ */
|
|
9042
|
+
/* @__PURE__ */ jsx32(
|
|
9219
9043
|
BuyModal,
|
|
9220
9044
|
{
|
|
9221
9045
|
open: isBuyOpen,
|
|
@@ -9226,7 +9050,7 @@ var ConnectWalletButton = ({
|
|
|
9226
9050
|
}
|
|
9227
9051
|
}
|
|
9228
9052
|
),
|
|
9229
|
-
/* @__PURE__ */
|
|
9053
|
+
/* @__PURE__ */ jsx32(
|
|
9230
9054
|
KycModal,
|
|
9231
9055
|
{
|
|
9232
9056
|
open: isKycOpen,
|
|
@@ -9237,7 +9061,7 @@ var ConnectWalletButton = ({
|
|
|
9237
9061
|
}
|
|
9238
9062
|
}
|
|
9239
9063
|
),
|
|
9240
|
-
/* @__PURE__ */
|
|
9064
|
+
/* @__PURE__ */ jsx32(
|
|
9241
9065
|
AuthModal,
|
|
9242
9066
|
{
|
|
9243
9067
|
open: recoveryUserId ? isRecoveryModalOpen : isAuthModalOpen,
|
|
@@ -9297,7 +9121,7 @@ var ConnectWalletButton = ({
|
|
|
9297
9121
|
}
|
|
9298
9122
|
}
|
|
9299
9123
|
),
|
|
9300
|
-
/* @__PURE__ */
|
|
9124
|
+
/* @__PURE__ */ jsx32(
|
|
9301
9125
|
TssManagerWithRef,
|
|
9302
9126
|
{
|
|
9303
9127
|
ref: tssManagerRef,
|
|
@@ -9315,7 +9139,7 @@ var ConnectWalletButton = ({
|
|
|
9315
9139
|
};
|
|
9316
9140
|
|
|
9317
9141
|
// src/components/ThemeToggle.tsx
|
|
9318
|
-
import { jsx as
|
|
9142
|
+
import { jsx as jsx33, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
9319
9143
|
var ThemeToggle = () => {
|
|
9320
9144
|
const { config, updateConfig } = useLumiaPassportConfig();
|
|
9321
9145
|
const currentTheme = config.ui.theme;
|
|
@@ -9360,7 +9184,7 @@ var ThemeToggle = () => {
|
|
|
9360
9184
|
return "auto";
|
|
9361
9185
|
}
|
|
9362
9186
|
};
|
|
9363
|
-
return /* @__PURE__ */
|
|
9187
|
+
return /* @__PURE__ */ jsx33("div", { className: "lumia-scope", children: /* @__PURE__ */ jsxs24(
|
|
9364
9188
|
"button",
|
|
9365
9189
|
{
|
|
9366
9190
|
onClick: cycleTheme,
|
|
@@ -9376,29 +9200,29 @@ var ThemeToggle = () => {
|
|
|
9376
9200
|
};
|
|
9377
9201
|
|
|
9378
9202
|
// src/components/LumiaLogo.tsx
|
|
9379
|
-
import { jsx as
|
|
9203
|
+
import { jsx as jsx34, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
9380
9204
|
var LumiaLogo2 = ({ size = 80, className = "" }) => {
|
|
9381
|
-
return /* @__PURE__ */
|
|
9205
|
+
return /* @__PURE__ */ jsx34(
|
|
9382
9206
|
"div",
|
|
9383
9207
|
{
|
|
9384
9208
|
className: `flex items-center justify-center ${className}`,
|
|
9385
9209
|
style: { width: size, height: size },
|
|
9386
|
-
children: /* @__PURE__ */
|
|
9387
|
-
/* @__PURE__ */
|
|
9388
|
-
/* @__PURE__ */
|
|
9389
|
-
/* @__PURE__ */
|
|
9390
|
-
/* @__PURE__ */
|
|
9391
|
-
/* @__PURE__ */
|
|
9210
|
+
children: /* @__PURE__ */ jsxs25("svg", { viewBox: "0 0 512 512", width: size, height: size, children: [
|
|
9211
|
+
/* @__PURE__ */ jsx34("circle", { cx: "256", cy: "256", r: "256", fill: "#060117", strokeWidth: "0" }),
|
|
9212
|
+
/* @__PURE__ */ jsx34("path", { d: "M264.13948,48.01032l63.62778,132.2788,133.95322,68.65102h-147.34854s-48.55804-10.04649-50.23246-56.93012,0-143.99971,0-143.99971Z", fill: "#fefdff", strokeWidth: "0" }),
|
|
9213
|
+
/* @__PURE__ */ jsx34("path", { d: "M50.27932,245.59045l132.27894-63.62734L251.20943,48.01032l-.00012,147.34824s-10.04654,48.55792-56.93019,50.23222c-46.88366,1.6743-143.9998-.00033-143.9998-.00033Z", fill: "#fefdff", strokeWidth: "0" }),
|
|
9214
|
+
/* @__PURE__ */ jsx34("path", { d: "M247.86056,463.98968l-63.62772-132.27875-133.95315-68.65092,147.34848-.00011s48.55802,10.04646,50.23242,56.93008c1.6744,46.88362-.00004,143.9997-.00004,143.9997Z", fill: "#fefdff", strokeWidth: "0" }),
|
|
9215
|
+
/* @__PURE__ */ jsx34("path", { d: "M461.72068,266.40941l-132.2789,63.62744-68.65118,133.95283.00016-147.34823s10.04655-48.55792,56.93018-50.23226c46.88364-1.67434,143.99974.00023,143.99974.00023Z", fill: "#fefdff", strokeWidth: "0" })
|
|
9392
9216
|
] })
|
|
9393
9217
|
}
|
|
9394
9218
|
);
|
|
9395
9219
|
};
|
|
9396
9220
|
|
|
9397
9221
|
// src/hooks/useTheme.ts
|
|
9398
|
-
import { useMemo as
|
|
9222
|
+
import { useMemo as useMemo5, useState as useState15, useEffect as useEffect12 } from "react";
|
|
9399
9223
|
function useTheme2(configTheme) {
|
|
9400
|
-
const [systemTheme, setSystemTheme] =
|
|
9401
|
-
|
|
9224
|
+
const [systemTheme, setSystemTheme] = useState15("light");
|
|
9225
|
+
useEffect12(() => {
|
|
9402
9226
|
if (typeof window === "undefined" || !window.matchMedia) return;
|
|
9403
9227
|
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
|
|
9404
9228
|
const updateSystemTheme = () => {
|
|
@@ -9408,14 +9232,14 @@ function useTheme2(configTheme) {
|
|
|
9408
9232
|
mediaQuery.addEventListener("change", updateSystemTheme);
|
|
9409
9233
|
return () => mediaQuery.removeEventListener("change", updateSystemTheme);
|
|
9410
9234
|
}, []);
|
|
9411
|
-
const resolvedTheme =
|
|
9235
|
+
const resolvedTheme = useMemo5(() => {
|
|
9412
9236
|
if (configTheme === "auto") {
|
|
9413
9237
|
return systemTheme;
|
|
9414
9238
|
}
|
|
9415
9239
|
return configTheme;
|
|
9416
9240
|
}, [configTheme, systemTheme]);
|
|
9417
9241
|
const isDark = resolvedTheme === "dark";
|
|
9418
|
-
const themeClasses =
|
|
9242
|
+
const themeClasses = useMemo5(
|
|
9419
9243
|
() => ({
|
|
9420
9244
|
// Modal background
|
|
9421
9245
|
modalBg: isDark ? "bg-gray-900" : "bg-white",
|
|
@@ -9451,9 +9275,9 @@ function useTheme2(configTheme) {
|
|
|
9451
9275
|
}
|
|
9452
9276
|
|
|
9453
9277
|
// src/internal/components/Hash.tsx
|
|
9454
|
-
import * as
|
|
9278
|
+
import * as React28 from "react";
|
|
9455
9279
|
import { Copy as Copy6, ExternalLink as ExternalLink5 } from "lucide-react";
|
|
9456
|
-
import { jsx as
|
|
9280
|
+
import { jsx as jsx35, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
9457
9281
|
function toExplorerUrl(kind, value, chain) {
|
|
9458
9282
|
const base2 = chain?.blockExplorers?.default?.url;
|
|
9459
9283
|
if (!base2) return null;
|
|
@@ -9476,12 +9300,12 @@ var Hash = ({
|
|
|
9476
9300
|
}) => {
|
|
9477
9301
|
const value = hash || "";
|
|
9478
9302
|
const explorer = toExplorerUrl(kind, value, chain || void 0);
|
|
9479
|
-
const [copied, setCopied] =
|
|
9480
|
-
if (!value) return /* @__PURE__ */
|
|
9481
|
-
return /* @__PURE__ */
|
|
9482
|
-
label && /* @__PURE__ */
|
|
9483
|
-
/* @__PURE__ */
|
|
9484
|
-
showCopy && /* @__PURE__ */
|
|
9303
|
+
const [copied, setCopied] = React28.useState(false);
|
|
9304
|
+
if (!value) return /* @__PURE__ */ jsx35("span", { className: cn2("text-muted-foreground", className), children: "\u2014" });
|
|
9305
|
+
return /* @__PURE__ */ jsxs26("div", { className: cn2("flex items-center gap-2", className), children: [
|
|
9306
|
+
label && /* @__PURE__ */ jsx35("span", { className: "text-sm font-medium", children: label }),
|
|
9307
|
+
/* @__PURE__ */ jsx35("code", { className: "text-xs bg-background px-2 py-1 rounded break-all", children: truncate ? short2(value) : value }),
|
|
9308
|
+
showCopy && /* @__PURE__ */ jsx35(
|
|
9485
9309
|
Button,
|
|
9486
9310
|
{
|
|
9487
9311
|
variant: "ghost",
|
|
@@ -9495,10 +9319,10 @@ var Hash = ({
|
|
|
9495
9319
|
} catch {
|
|
9496
9320
|
}
|
|
9497
9321
|
},
|
|
9498
|
-
children: /* @__PURE__ */
|
|
9322
|
+
children: /* @__PURE__ */ jsx35(Copy6, { className: "h-4 w-4" })
|
|
9499
9323
|
}
|
|
9500
9324
|
),
|
|
9501
|
-
showExplorer && explorer && /* @__PURE__ */
|
|
9325
|
+
showExplorer && explorer && /* @__PURE__ */ jsx35(
|
|
9502
9326
|
"a",
|
|
9503
9327
|
{
|
|
9504
9328
|
href: explorer,
|
|
@@ -9506,7 +9330,7 @@ var Hash = ({
|
|
|
9506
9330
|
rel: "noreferrer noopener",
|
|
9507
9331
|
className: "inline-flex items-center justify-center h-10 w-10 rounded-md hover:bg-accent text-foreground",
|
|
9508
9332
|
title: "Open in explorer",
|
|
9509
|
-
children: /* @__PURE__ */
|
|
9333
|
+
children: /* @__PURE__ */ jsx35(ExternalLink5, { className: "h-4 w-4" })
|
|
9510
9334
|
}
|
|
9511
9335
|
)
|
|
9512
9336
|
] });
|
|
@@ -9514,16 +9338,16 @@ var Hash = ({
|
|
|
9514
9338
|
|
|
9515
9339
|
// src/internal/components/TransactionsList.tsx
|
|
9516
9340
|
init_base();
|
|
9517
|
-
import { useState as
|
|
9518
|
-
import { jsx as
|
|
9341
|
+
import { useState as useState17, useEffect as useEffect13 } from "react";
|
|
9342
|
+
import { jsx as jsx36, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
9519
9343
|
var TransactionsList = ({
|
|
9520
9344
|
address,
|
|
9521
9345
|
itemsCount = 10
|
|
9522
9346
|
}) => {
|
|
9523
|
-
const [transactions, setTransactions] =
|
|
9524
|
-
const [loading, setLoading] =
|
|
9525
|
-
const [error, setError] =
|
|
9526
|
-
|
|
9347
|
+
const [transactions, setTransactions] = useState17([]);
|
|
9348
|
+
const [loading, setLoading] = useState17(true);
|
|
9349
|
+
const [error, setError] = useState17(null);
|
|
9350
|
+
useEffect13(() => {
|
|
9527
9351
|
const fetchTransactions = async () => {
|
|
9528
9352
|
try {
|
|
9529
9353
|
setLoading(true);
|
|
@@ -9569,15 +9393,15 @@ var TransactionsList = ({
|
|
|
9569
9393
|
window.open(`${explorerUrl}/tx/${txHash}`, "_blank");
|
|
9570
9394
|
};
|
|
9571
9395
|
if (loading) {
|
|
9572
|
-
return /* @__PURE__ */
|
|
9573
|
-
/* @__PURE__ */
|
|
9574
|
-
/* @__PURE__ */
|
|
9396
|
+
return /* @__PURE__ */ jsxs27("div", { className: "p-4 text-center", children: [
|
|
9397
|
+
/* @__PURE__ */ jsx36("div", { className: "animate-spin inline-block w-6 h-6 border-2 border-current border-t-transparent rounded-full" }),
|
|
9398
|
+
/* @__PURE__ */ jsx36("p", { className: "mt-2 text-sm text-gray-600", children: "Loading transactions..." })
|
|
9575
9399
|
] });
|
|
9576
9400
|
}
|
|
9577
9401
|
if (error) {
|
|
9578
|
-
return /* @__PURE__ */
|
|
9579
|
-
/* @__PURE__ */
|
|
9580
|
-
/* @__PURE__ */
|
|
9402
|
+
return /* @__PURE__ */ jsxs27("div", { className: "p-4 text-center", children: [
|
|
9403
|
+
/* @__PURE__ */ jsx36("p", { className: "text-red-600 text-sm", children: error }),
|
|
9404
|
+
/* @__PURE__ */ jsx36(
|
|
9581
9405
|
"button",
|
|
9582
9406
|
{
|
|
9583
9407
|
onClick: () => window.location.reload(),
|
|
@@ -9588,54 +9412,54 @@ var TransactionsList = ({
|
|
|
9588
9412
|
] });
|
|
9589
9413
|
}
|
|
9590
9414
|
if (transactions.length === 0) {
|
|
9591
|
-
return /* @__PURE__ */
|
|
9415
|
+
return /* @__PURE__ */ jsx36("div", { className: "p-4 text-center", children: /* @__PURE__ */ jsx36("p", { className: "text-gray-600 text-sm", children: "No transactions found" }) });
|
|
9592
9416
|
}
|
|
9593
|
-
return /* @__PURE__ */
|
|
9417
|
+
return /* @__PURE__ */ jsx36("div", { className: "max-h-96 overflow-y-auto", children: /* @__PURE__ */ jsx36("div", { className: "space-y-2 p-2", children: transactions.map((tx) => /* @__PURE__ */ jsxs27(
|
|
9594
9418
|
"div",
|
|
9595
9419
|
{
|
|
9596
9420
|
className: "border rounded-lg p-3 hover:bg-gray-50 cursor-pointer transition-colors",
|
|
9597
9421
|
onClick: () => openTransaction(tx.hash),
|
|
9598
9422
|
children: [
|
|
9599
|
-
/* @__PURE__ */
|
|
9600
|
-
/* @__PURE__ */
|
|
9601
|
-
/* @__PURE__ */
|
|
9602
|
-
/* @__PURE__ */
|
|
9603
|
-
/* @__PURE__ */
|
|
9423
|
+
/* @__PURE__ */ jsxs27("div", { className: "flex justify-between items-start mb-2", children: [
|
|
9424
|
+
/* @__PURE__ */ jsxs27("div", { className: "flex-1", children: [
|
|
9425
|
+
/* @__PURE__ */ jsxs27("div", { className: "flex items-center space-x-2 mb-1", children: [
|
|
9426
|
+
/* @__PURE__ */ jsx36("span", { className: "text-xs font-mono bg-gray-100 px-2 py-1 rounded", children: formatAddress(tx.hash) }),
|
|
9427
|
+
/* @__PURE__ */ jsx36("span", { className: `text-xs px-2 py-1 rounded ${tx.status === "ok" ? "bg-green-100 text-green-800" : "bg-red-100 text-red-800"}`, children: tx.status === "ok" ? "Success" : "Failed" })
|
|
9604
9428
|
] }),
|
|
9605
|
-
/* @__PURE__ */
|
|
9606
|
-
/* @__PURE__ */
|
|
9607
|
-
/* @__PURE__ */
|
|
9608
|
-
/* @__PURE__ */
|
|
9429
|
+
/* @__PURE__ */ jsxs27("div", { className: "text-sm space-y-1", children: [
|
|
9430
|
+
/* @__PURE__ */ jsxs27("div", { children: [
|
|
9431
|
+
/* @__PURE__ */ jsx36("span", { className: "text-gray-600", children: "From:" }),
|
|
9432
|
+
/* @__PURE__ */ jsxs27("span", { className: "font-mono ml-1", children: [
|
|
9609
9433
|
formatAddress(tx.from.hash),
|
|
9610
|
-
tx.from.is_contract && /* @__PURE__ */
|
|
9434
|
+
tx.from.is_contract && /* @__PURE__ */ jsx36("span", { className: "text-xs text-blue-600 ml-1", children: "(Contract)" })
|
|
9611
9435
|
] })
|
|
9612
9436
|
] }),
|
|
9613
|
-
/* @__PURE__ */
|
|
9614
|
-
/* @__PURE__ */
|
|
9615
|
-
/* @__PURE__ */
|
|
9437
|
+
/* @__PURE__ */ jsxs27("div", { children: [
|
|
9438
|
+
/* @__PURE__ */ jsx36("span", { className: "text-gray-600", children: "To:" }),
|
|
9439
|
+
/* @__PURE__ */ jsxs27("span", { className: "font-mono ml-1", children: [
|
|
9616
9440
|
formatAddress(tx.to.hash),
|
|
9617
|
-
tx.to.is_contract && /* @__PURE__ */
|
|
9441
|
+
tx.to.is_contract && /* @__PURE__ */ jsx36("span", { className: "text-xs text-blue-600 ml-1", children: "(Contract)" })
|
|
9618
9442
|
] })
|
|
9619
9443
|
] }),
|
|
9620
|
-
/* @__PURE__ */
|
|
9621
|
-
/* @__PURE__ */
|
|
9622
|
-
/* @__PURE__ */
|
|
9444
|
+
/* @__PURE__ */ jsxs27("div", { children: [
|
|
9445
|
+
/* @__PURE__ */ jsx36("span", { className: "text-gray-600", children: "Value:" }),
|
|
9446
|
+
/* @__PURE__ */ jsxs27("span", { className: "font-semibold ml-1", children: [
|
|
9623
9447
|
formatValue(tx.value),
|
|
9624
9448
|
" LUMIA"
|
|
9625
9449
|
] })
|
|
9626
9450
|
] })
|
|
9627
9451
|
] })
|
|
9628
9452
|
] }),
|
|
9629
|
-
/* @__PURE__ */
|
|
9630
|
-
/* @__PURE__ */
|
|
9631
|
-
/* @__PURE__ */
|
|
9453
|
+
/* @__PURE__ */ jsxs27("div", { className: "text-right text-xs text-gray-500", children: [
|
|
9454
|
+
/* @__PURE__ */ jsx36("div", { children: formatDate2(tx.timestamp) }),
|
|
9455
|
+
/* @__PURE__ */ jsxs27("div", { className: "mt-1", children: [
|
|
9632
9456
|
"Gas: ",
|
|
9633
9457
|
parseInt(tx.gas_used).toLocaleString()
|
|
9634
9458
|
] }),
|
|
9635
|
-
tx.method && /* @__PURE__ */
|
|
9459
|
+
tx.method && /* @__PURE__ */ jsx36("div", { className: "mt-1 text-blue-600", children: tx.method })
|
|
9636
9460
|
] })
|
|
9637
9461
|
] }),
|
|
9638
|
-
tx.transaction_types.length > 0 && /* @__PURE__ */
|
|
9462
|
+
tx.transaction_types.length > 0 && /* @__PURE__ */ jsx36("div", { className: "flex flex-wrap gap-1 mt-2", children: tx.transaction_types.map((type, idx) => /* @__PURE__ */ jsx36(
|
|
9639
9463
|
"span",
|
|
9640
9464
|
{
|
|
9641
9465
|
className: "text-xs bg-blue-100 text-blue-800 px-2 py-1 rounded-full",
|
|
@@ -9651,7 +9475,7 @@ var TransactionsList = ({
|
|
|
9651
9475
|
|
|
9652
9476
|
// src/hooks/useUserOpStatus.ts
|
|
9653
9477
|
init_base();
|
|
9654
|
-
import * as
|
|
9478
|
+
import * as React30 from "react";
|
|
9655
9479
|
function useUserOpStatus(options = {}) {
|
|
9656
9480
|
const {
|
|
9657
9481
|
userOpHash,
|
|
@@ -9662,16 +9486,16 @@ function useUserOpStatus(options = {}) {
|
|
|
9662
9486
|
onReceipt,
|
|
9663
9487
|
onTxHash
|
|
9664
9488
|
} = options;
|
|
9665
|
-
const [state, setState] =
|
|
9666
|
-
const [receipt, setReceipt] =
|
|
9667
|
-
const [mempool, setMempool] =
|
|
9668
|
-
const [txHash, setTxHash] =
|
|
9669
|
-
const [error, setError] =
|
|
9670
|
-
const [isPolling, setIsPolling] =
|
|
9671
|
-
const intervalRef =
|
|
9672
|
-
const startTimeRef =
|
|
9673
|
-
const prevStateRef =
|
|
9674
|
-
const rpc =
|
|
9489
|
+
const [state, setState] = React30.useState("waiting");
|
|
9490
|
+
const [receipt, setReceipt] = React30.useState(null);
|
|
9491
|
+
const [mempool, setMempool] = React30.useState(null);
|
|
9492
|
+
const [txHash, setTxHash] = React30.useState(null);
|
|
9493
|
+
const [error, setError] = React30.useState(null);
|
|
9494
|
+
const [isPolling, setIsPolling] = React30.useState(false);
|
|
9495
|
+
const intervalRef = React30.useRef(null);
|
|
9496
|
+
const startTimeRef = React30.useRef(Date.now());
|
|
9497
|
+
const prevStateRef = React30.useRef("waiting");
|
|
9498
|
+
const rpc = React30.useCallback(async (method, params) => {
|
|
9675
9499
|
const body = { jsonrpc: "2.0", id: 1, method, params };
|
|
9676
9500
|
const res = await fetch(getBundlerUrl(), {
|
|
9677
9501
|
method: "POST",
|
|
@@ -9682,21 +9506,21 @@ function useUserOpStatus(options = {}) {
|
|
|
9682
9506
|
if (json.error) throw new Error(json.error.message || JSON.stringify(json.error));
|
|
9683
9507
|
return json.result;
|
|
9684
9508
|
}, []);
|
|
9685
|
-
const extractMempoolInfo =
|
|
9509
|
+
const extractMempoolInfo = React30.useCallback((m) => {
|
|
9686
9510
|
if (!m) return null;
|
|
9687
9511
|
const entryPoint = m.entryPoint || m?.userOperation?.entryPoint || null;
|
|
9688
9512
|
const sender = m.sender || m?.userOperation?.sender || null;
|
|
9689
9513
|
if (!entryPoint && !sender) return null;
|
|
9690
9514
|
return { entryPoint, sender };
|
|
9691
9515
|
}, []);
|
|
9692
|
-
const updateState =
|
|
9516
|
+
const updateState = React30.useCallback((newState) => {
|
|
9693
9517
|
setState(newState);
|
|
9694
9518
|
if (prevStateRef.current !== newState) {
|
|
9695
9519
|
prevStateRef.current = newState;
|
|
9696
9520
|
onStateChange?.(newState);
|
|
9697
9521
|
}
|
|
9698
9522
|
}, [onStateChange]);
|
|
9699
|
-
const tick =
|
|
9523
|
+
const tick = React30.useCallback(async () => {
|
|
9700
9524
|
if (!userOpHash || !enabled) return;
|
|
9701
9525
|
if (receipt) {
|
|
9702
9526
|
console.log("[useUserOpStatus] Already have receipt, skipping tick");
|
|
@@ -9769,7 +9593,7 @@ function useUserOpStatus(options = {}) {
|
|
|
9769
9593
|
onTxHash,
|
|
9770
9594
|
onReceipt
|
|
9771
9595
|
]);
|
|
9772
|
-
|
|
9596
|
+
React30.useEffect(() => {
|
|
9773
9597
|
if (!userOpHash || !enabled) return;
|
|
9774
9598
|
console.log("[useUserOpStatus] Initializing for UserOp hash:", userOpHash);
|
|
9775
9599
|
startTimeRef.current = Date.now();
|
|
@@ -9781,7 +9605,7 @@ function useUserOpStatus(options = {}) {
|
|
|
9781
9605
|
setError(null);
|
|
9782
9606
|
setIsPolling(false);
|
|
9783
9607
|
}, [userOpHash, enabled]);
|
|
9784
|
-
|
|
9608
|
+
React30.useEffect(() => {
|
|
9785
9609
|
if (!userOpHash || !enabled) {
|
|
9786
9610
|
console.log("[useUserOpStatus] Not starting polling - no hash or disabled");
|
|
9787
9611
|
return;
|
|
@@ -9817,7 +9641,7 @@ function useUserOpStatus(options = {}) {
|
|
|
9817
9641
|
}
|
|
9818
9642
|
};
|
|
9819
9643
|
}, [userOpHash, enabled, pollMs]);
|
|
9820
|
-
const refresh =
|
|
9644
|
+
const refresh = React30.useCallback(async () => {
|
|
9821
9645
|
await tick();
|
|
9822
9646
|
}, [tick]);
|
|
9823
9647
|
return {
|