@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.cjs
CHANGED
|
@@ -3556,7 +3556,7 @@ __export(index_exports, {
|
|
|
3556
3556
|
module.exports = __toCommonJS(index_exports);
|
|
3557
3557
|
|
|
3558
3558
|
// src/styles/built.css
|
|
3559
|
-
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}';
|
|
3559
|
+
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}';
|
|
3560
3560
|
|
|
3561
3561
|
// src/context/LumiaPassportContext.tsx
|
|
3562
3562
|
var import_react = require("react");
|
|
@@ -3929,7 +3929,7 @@ var rainbowTheme = {
|
|
|
3929
3929
|
|
|
3930
3930
|
// src/internal/hooks/useTheme.ts
|
|
3931
3931
|
var import_react3 = require("react");
|
|
3932
|
-
function useTheme(configTheme) {
|
|
3932
|
+
function useTheme(configTheme, customColors) {
|
|
3933
3933
|
const [systemTheme, setSystemTheme] = (0, import_react3.useState)("light");
|
|
3934
3934
|
(0, import_react3.useEffect)(() => {
|
|
3935
3935
|
if (typeof window === "undefined" || !window.matchMedia) return;
|
|
@@ -3941,43 +3941,83 @@ function useTheme(configTheme) {
|
|
|
3941
3941
|
}, []);
|
|
3942
3942
|
const resolvedTheme = (0, import_react3.useMemo)(() => configTheme === "auto" ? systemTheme : configTheme, [configTheme, systemTheme]);
|
|
3943
3943
|
const isDark = resolvedTheme === "dark";
|
|
3944
|
+
const currentCustomColors = (0, import_react3.useMemo)(() => {
|
|
3945
|
+
return isDark ? customColors?.dark : customColors?.light;
|
|
3946
|
+
}, [isDark, customColors]);
|
|
3947
|
+
(0, import_react3.useEffect)(() => {
|
|
3948
|
+
if (typeof document === "undefined") return;
|
|
3949
|
+
const root = document.documentElement;
|
|
3950
|
+
if (currentCustomColors?.background) {
|
|
3951
|
+
root.style.setProperty("--lumia-bg", currentCustomColors.background);
|
|
3952
|
+
} else {
|
|
3953
|
+
root.style.removeProperty("--lumia-bg");
|
|
3954
|
+
}
|
|
3955
|
+
if (currentCustomColors?.text) {
|
|
3956
|
+
root.style.setProperty("--lumia-text", currentCustomColors.text);
|
|
3957
|
+
} else {
|
|
3958
|
+
root.style.removeProperty("--lumia-text");
|
|
3959
|
+
}
|
|
3960
|
+
if (currentCustomColors?.textSecondary) {
|
|
3961
|
+
root.style.setProperty("--lumia-text-secondary", currentCustomColors.textSecondary);
|
|
3962
|
+
} else {
|
|
3963
|
+
root.style.removeProperty("--lumia-text-secondary");
|
|
3964
|
+
}
|
|
3965
|
+
if (currentCustomColors?.textMuted) {
|
|
3966
|
+
root.style.setProperty("--lumia-text-muted", currentCustomColors.textMuted);
|
|
3967
|
+
} else {
|
|
3968
|
+
root.style.removeProperty("--lumia-text-muted");
|
|
3969
|
+
}
|
|
3970
|
+
if (currentCustomColors?.border) {
|
|
3971
|
+
root.style.setProperty("--lumia-border", currentCustomColors.border);
|
|
3972
|
+
} else {
|
|
3973
|
+
root.style.removeProperty("--lumia-border");
|
|
3974
|
+
}
|
|
3975
|
+
}, [currentCustomColors]);
|
|
3944
3976
|
const themeClasses = (0, import_react3.useMemo)(
|
|
3945
|
-
() =>
|
|
3946
|
-
|
|
3947
|
-
|
|
3948
|
-
|
|
3949
|
-
|
|
3950
|
-
text: isDark ? "text-
|
|
3951
|
-
|
|
3952
|
-
|
|
3953
|
-
|
|
3954
|
-
|
|
3955
|
-
|
|
3956
|
-
|
|
3957
|
-
|
|
3958
|
-
|
|
3959
|
-
|
|
3960
|
-
|
|
3961
|
-
|
|
3962
|
-
|
|
3963
|
-
|
|
3964
|
-
|
|
3965
|
-
|
|
3966
|
-
|
|
3967
|
-
|
|
3968
|
-
|
|
3969
|
-
|
|
3970
|
-
|
|
3971
|
-
|
|
3972
|
-
|
|
3973
|
-
|
|
3974
|
-
|
|
3975
|
-
|
|
3976
|
-
|
|
3977
|
-
|
|
3978
|
-
|
|
3979
|
-
|
|
3980
|
-
|
|
3977
|
+
() => {
|
|
3978
|
+
const hasCustom = !!currentCustomColors;
|
|
3979
|
+
const background = hasCustom && currentCustomColors?.background ? "[background:var(--lumia-bg)]" : isDark ? "bg-gray-900" : "bg-white";
|
|
3980
|
+
const text = hasCustom && currentCustomColors?.text ? "[color:var(--lumia-text)]" : isDark ? "text-white" : "text-gray-900";
|
|
3981
|
+
const textSecondary = hasCustom && currentCustomColors?.textSecondary ? "[color:var(--lumia-text-secondary)]" : isDark ? "text-gray-300" : "text-gray-600";
|
|
3982
|
+
const textMuted = hasCustom && currentCustomColors?.textMuted ? "[color:var(--lumia-text-muted)]" : isDark ? "text-gray-400" : "text-gray-500";
|
|
3983
|
+
const border = hasCustom && currentCustomColors?.border ? "[border-color:var(--lumia-border)]" : isDark ? "border-gray-600" : "border-gray-200";
|
|
3984
|
+
return {
|
|
3985
|
+
bg: background,
|
|
3986
|
+
// Alias for modalBg for backwards compatibility
|
|
3987
|
+
modalBg: background,
|
|
3988
|
+
titleText: text,
|
|
3989
|
+
text,
|
|
3990
|
+
// Alias for titleText
|
|
3991
|
+
bodyText: textSecondary,
|
|
3992
|
+
mutedText: textMuted,
|
|
3993
|
+
linkText: isDark ? "text-gray-200 hover:text-blue-400" : "text-gray-700 hover:text-blue-600",
|
|
3994
|
+
inputBg: isDark ? "bg-gray-700 border-gray-600" : "bg-white border-gray-300",
|
|
3995
|
+
inputText: isDark ? "text-white placeholder:text-gray-400" : "text-gray-900 placeholder:text-gray-400",
|
|
3996
|
+
// Primary CTA (Passkey sign-in) — brighter blue + hover
|
|
3997
|
+
primaryBtn: isDark ? "bg-[#2456f0] hover:bg-[#1e49d8] text-white" : "bg-[#2456f0] hover:bg-[#1e49d8] text-white",
|
|
3998
|
+
// Neutral secondary to avoid unintended pink accents
|
|
3999
|
+
secondaryBtn: isDark ? "bg-gray-700 hover:bg-gray-600 text-white" : "bg-gray-100 hover:bg-gray-200 text-gray-700",
|
|
4000
|
+
// Pink CTA used for email Continue like in old design
|
|
4001
|
+
ctaBtn: isDark ? "bg-[#db2777] hover:bg-[#be185d] text-white" : "bg-[#fde2f3] hover:bg-[#f7c1df] text-gray-600",
|
|
4002
|
+
// Outline buttons (Create Passkey) — subtle hover
|
|
4003
|
+
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",
|
|
4004
|
+
actionBtn: isDark ? "bg-gray-700 hover:bg-gray-600 text-gray-200" : "bg-gray-100 hover:bg-gray-200 text-gray-900",
|
|
4005
|
+
divider: border,
|
|
4006
|
+
errorText: isDark ? "text-red-400" : "text-red-500",
|
|
4007
|
+
successText: isDark ? "text-green-400" : "text-blue-600",
|
|
4008
|
+
iconColor: textMuted,
|
|
4009
|
+
// CSS variable-based classes for better theming
|
|
4010
|
+
cssVars: {
|
|
4011
|
+
modalBg: "lumia-bg-primary",
|
|
4012
|
+
text: "lumia-text-primary",
|
|
4013
|
+
textSecondary: "lumia-text-secondary",
|
|
4014
|
+
textMuted: "lumia-text-muted",
|
|
4015
|
+
bgSecondary: "lumia-bg-secondary",
|
|
4016
|
+
border: "lumia-border-primary"
|
|
4017
|
+
}
|
|
4018
|
+
};
|
|
4019
|
+
},
|
|
4020
|
+
[isDark, currentCustomColors]
|
|
3981
4021
|
);
|
|
3982
4022
|
return { theme: resolvedTheme, isDark, classes: themeClasses };
|
|
3983
4023
|
}
|
|
@@ -3986,7 +4026,7 @@ function useTheme(configTheme) {
|
|
|
3986
4026
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
3987
4027
|
var LumiaRainbowKitProvider = ({ children }) => {
|
|
3988
4028
|
const { config } = useLumiaPassportConfig();
|
|
3989
|
-
const { isDark } = useTheme(config.ui.theme);
|
|
4029
|
+
const { isDark } = useTheme(config.ui.theme, config.ui.colors);
|
|
3990
4030
|
const rainbowConfig2 = import_react4.default.useMemo(() => {
|
|
3991
4031
|
return createRainbowConfig(config.wallet?.walletConnectProjectId);
|
|
3992
4032
|
}, [config.wallet?.walletConnectProjectId]);
|
|
@@ -4220,7 +4260,7 @@ var ErrorAlert = ({
|
|
|
4220
4260
|
actionText = "OK"
|
|
4221
4261
|
}) => {
|
|
4222
4262
|
const { config } = useLumiaPassportConfig();
|
|
4223
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
4263
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
4224
4264
|
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(AlertDialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(AlertDialogContent, { className: `lumia-scope max-w-md ${theme.modalBg} ${isDark ? "lumia-dark" : "lumia-light"}`, children: [
|
|
4225
4265
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(AlertDialogHeader, { children: [
|
|
4226
4266
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex items-center gap-3 mb-2", children: [
|
|
@@ -4280,7 +4320,7 @@ var LumiaLogo = ({ size = 25, className = "" }) => {
|
|
|
4280
4320
|
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
4281
4321
|
var SuccessScreen = () => {
|
|
4282
4322
|
const { config } = useLumiaPassportConfig();
|
|
4283
|
-
const { classes: theme } = useTheme(config.ui.theme);
|
|
4323
|
+
const { classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
4284
4324
|
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "text-center", children: [
|
|
4285
4325
|
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("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" }),
|
|
4286
4326
|
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: `text-lg font-medium ${theme.titleText}`, children: "Success" })
|
|
@@ -4291,7 +4331,7 @@ var SuccessScreen = () => {
|
|
|
4291
4331
|
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
4292
4332
|
var TermsOfService = ({ open, onOpenChange }) => {
|
|
4293
4333
|
const { config } = useLumiaPassportConfig();
|
|
4294
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
4334
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
4295
4335
|
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
4296
4336
|
DialogContent,
|
|
4297
4337
|
{
|
|
@@ -4364,7 +4404,7 @@ init_iframe_manager();
|
|
|
4364
4404
|
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
4365
4405
|
function KeyshareRestore({ userId, onClose, onRestoreSuccess }) {
|
|
4366
4406
|
const { config } = useLumiaPassportConfig();
|
|
4367
|
-
const { isDark } = useTheme(config.ui.theme);
|
|
4407
|
+
const { isDark } = useTheme(config.ui.theme, config.ui.colors);
|
|
4368
4408
|
const [loading, setLoading] = React10.useState({ server: false, file: false });
|
|
4369
4409
|
const [error, setError] = React10.useState(null);
|
|
4370
4410
|
const [success, setSuccess] = React10.useState(null);
|
|
@@ -4707,7 +4747,7 @@ var import_react6 = require("react");
|
|
|
4707
4747
|
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
4708
4748
|
var VerificationCodeInput = ({ onVerifyCode, onResendCode, isLoading, expiresIn, error }) => {
|
|
4709
4749
|
const { config } = useLumiaPassportConfig();
|
|
4710
|
-
const { classes: theme } = useTheme(config.ui.theme);
|
|
4750
|
+
const { classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
4711
4751
|
const [timeLeft, setTimeLeft] = (0, import_react6.useState)(expiresIn);
|
|
4712
4752
|
(0, import_react6.useEffect)(() => {
|
|
4713
4753
|
setTimeLeft(expiresIn);
|
|
@@ -4856,7 +4896,7 @@ var DisplayNameInput = ({ onComplete, onSkip }) => {
|
|
|
4856
4896
|
const [isLoading, setIsLoading] = (0, import_react7.useState)(false);
|
|
4857
4897
|
const [error, setError] = (0, import_react7.useState)("");
|
|
4858
4898
|
const { config } = useLumiaPassportConfig();
|
|
4859
|
-
const { classes: theme } = useTheme(config.ui.theme);
|
|
4899
|
+
const { classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
4860
4900
|
const handleSubmit = async (e) => {
|
|
4861
4901
|
e.preventDefault();
|
|
4862
4902
|
if (!displayName.trim()) {
|
|
@@ -4960,7 +5000,7 @@ var AuthModal = ({ open, onOpenChange, onAuthSuccess, autoCloseOnSuccess = true,
|
|
|
4960
5000
|
return createPasskeyHelpers("");
|
|
4961
5001
|
}, []);
|
|
4962
5002
|
const { config } = useLumiaPassportConfig();
|
|
4963
|
-
const { classes: theme, isDark } = useTheme(config.ui.theme);
|
|
5003
|
+
const { classes: theme, isDark } = useTheme(config.ui.theme, config.ui.colors);
|
|
4964
5004
|
const checkDisplayNameRequired = import_react8.default.useCallback(async () => {
|
|
4965
5005
|
if (!config.features.displayNameNeeded) {
|
|
4966
5006
|
return false;
|
|
@@ -5828,7 +5868,7 @@ var ManageWallet = ({ open, onOpenChange, onBack }) => {
|
|
|
5828
5868
|
const [expiresIn, setExpiresIn] = (0, import_react11.useState)(300);
|
|
5829
5869
|
const [verificationError, setVerificationError] = (0, import_react11.useState)("");
|
|
5830
5870
|
const { config, callbacks } = useLumiaPassportConfig();
|
|
5831
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
5871
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
5832
5872
|
const telegramContainerRef = import_react11.default.useRef(null);
|
|
5833
5873
|
const [isWalletLinking, setIsWalletLinking] = (0, import_react11.useState)(false);
|
|
5834
5874
|
const [providersJustUpdated, setProvidersJustUpdated] = (0, import_react11.useState)(false);
|
|
@@ -6289,286 +6329,14 @@ var import_react12 = __toESM(require("react"), 1);
|
|
|
6289
6329
|
init_auth();
|
|
6290
6330
|
init_keyshare();
|
|
6291
6331
|
init_vaultClient();
|
|
6292
|
-
var import_lucide_react8 = require("lucide-react");
|
|
6293
|
-
|
|
6294
|
-
// src/internal/components/BackupForm.tsx
|
|
6295
|
-
var React17 = __toESM(require("react"), 1);
|
|
6296
6332
|
var import_lucide_react7 = require("lucide-react");
|
|
6297
|
-
init_vaultClient();
|
|
6298
6333
|
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
6299
|
-
function BackupForm({ userId, onBackupSuccess }) {
|
|
6300
|
-
const { config } = useLumiaPassportConfig();
|
|
6301
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
6302
|
-
const [backupStatus, setBackupStatus] = React17.useState(() => getBackupStatus(userId));
|
|
6303
|
-
const [loading, setLoading] = React17.useState({
|
|
6304
|
-
server: false,
|
|
6305
|
-
cloud: false,
|
|
6306
|
-
local: false
|
|
6307
|
-
});
|
|
6308
|
-
const [error, setError] = React17.useState(null);
|
|
6309
|
-
const [success, setSuccess] = React17.useState(null);
|
|
6310
|
-
const [showPassword, setShowPassword] = React17.useState(false);
|
|
6311
|
-
const [useCustomPassword, setUseCustomPassword] = React17.useState(false);
|
|
6312
|
-
const [customPassword, setCustomPassword] = React17.useState("");
|
|
6313
|
-
const [cloudProviders, setCloudProviders] = React17.useState([]);
|
|
6314
|
-
const [selectedCloudProvider, setSelectedCloudProvider] = React17.useState(null);
|
|
6315
|
-
const [usePrivateStorage, setUsePrivateStorage] = React17.useState(true);
|
|
6316
|
-
const hasKeyshareData = React17.useMemo(() => {
|
|
6317
|
-
return !!getCurrentKeyshareBackupData(userId);
|
|
6318
|
-
}, [userId]);
|
|
6319
|
-
React17.useEffect(() => {
|
|
6320
|
-
getAvailableCloudProviders2().then((providers) => {
|
|
6321
|
-
setCloudProviders(providers);
|
|
6322
|
-
if (providers.length > 0 && !selectedCloudProvider) {
|
|
6323
|
-
setSelectedCloudProvider(providers[0].id);
|
|
6324
|
-
}
|
|
6325
|
-
});
|
|
6326
|
-
}, [selectedCloudProvider]);
|
|
6327
|
-
const refreshStatus = React17.useCallback(() => {
|
|
6328
|
-
setBackupStatus(getBackupStatus(userId));
|
|
6329
|
-
}, [userId]);
|
|
6330
|
-
React17.useEffect(() => {
|
|
6331
|
-
refreshStatus();
|
|
6332
|
-
}, [refreshStatus]);
|
|
6333
|
-
const handleBackup = async (method) => {
|
|
6334
|
-
setLoading((prev) => ({ ...prev, [method]: true }));
|
|
6335
|
-
setError(null);
|
|
6336
|
-
setSuccess(null);
|
|
6337
|
-
try {
|
|
6338
|
-
const password = useCustomPassword ? customPassword : void 0;
|
|
6339
|
-
switch (method) {
|
|
6340
|
-
case "server":
|
|
6341
|
-
await backupToServer(userId, password);
|
|
6342
|
-
setSuccess("Successfully created server backup");
|
|
6343
|
-
break;
|
|
6344
|
-
case "cloud": {
|
|
6345
|
-
await backupToCloud(userId, password, selectedCloudProvider || void 0, usePrivateStorage);
|
|
6346
|
-
setSuccess(`Successfully created cloud backup`);
|
|
6347
|
-
const updatedProviders = await getAvailableCloudProviders2();
|
|
6348
|
-
setCloudProviders(updatedProviders);
|
|
6349
|
-
break;
|
|
6350
|
-
}
|
|
6351
|
-
case "local":
|
|
6352
|
-
await backupToLocalFile(userId, password);
|
|
6353
|
-
setSuccess("Backup file downloaded successfully");
|
|
6354
|
-
break;
|
|
6355
|
-
}
|
|
6356
|
-
refreshStatus();
|
|
6357
|
-
setTimeout(() => {
|
|
6358
|
-
if (typeof window !== "undefined") {
|
|
6359
|
-
window.dispatchEvent(
|
|
6360
|
-
new CustomEvent("lumia-passport-backup-status-changed", {
|
|
6361
|
-
detail: { method, success: true }
|
|
6362
|
-
})
|
|
6363
|
-
);
|
|
6364
|
-
}
|
|
6365
|
-
onBackupSuccess?.();
|
|
6366
|
-
}, 100);
|
|
6367
|
-
} catch (err) {
|
|
6368
|
-
const errorMsg = err instanceof Error ? err.message : "Backup creation failed";
|
|
6369
|
-
setError(errorMsg);
|
|
6370
|
-
updateBackupStatus(userId, method, { error: errorMsg });
|
|
6371
|
-
refreshStatus();
|
|
6372
|
-
} finally {
|
|
6373
|
-
setLoading((prev) => ({ ...prev, [method]: false }));
|
|
6374
|
-
}
|
|
6375
|
-
};
|
|
6376
|
-
const formatLastBackup = (timestamp) => {
|
|
6377
|
-
if (!timestamp) return "Never";
|
|
6378
|
-
const date = new Date(timestamp);
|
|
6379
|
-
return `${date.toLocaleDateString()} ${date.toLocaleTimeString()}`;
|
|
6380
|
-
};
|
|
6381
|
-
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: `p-5 space-y-6 ${isDark ? "lumia-dark" : "lumia-light"}`, children: [
|
|
6382
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-3", children: [
|
|
6383
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.Shield, { className: `h-6 w-6 ${isDark ? "text-green-400" : "text-green-600"}` }),
|
|
6384
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
|
|
6385
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("h2", { className: `text-lg font-semibold ${theme.titleText}`, children: "Create Backup" }),
|
|
6386
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: `text-sm ${theme.bodyText}`, children: "Secure your keyshare with encrypted backups" })
|
|
6387
|
-
] })
|
|
6388
|
-
] }),
|
|
6389
|
-
error && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("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: [
|
|
6390
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.AlertCircle, { className: "h-4 w-4 flex-shrink-0" }),
|
|
6391
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { children: error })
|
|
6392
|
-
] }),
|
|
6393
|
-
success && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("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: [
|
|
6394
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.CheckCircle2, { className: "h-4 w-4 flex-shrink-0" }),
|
|
6395
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { children: success })
|
|
6396
|
-
] }),
|
|
6397
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "space-y-3", children: [
|
|
6398
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: `text-sm font-medium ${theme.bodyText}`, children: "Encryption Method:" }),
|
|
6399
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
6400
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
6401
|
-
"input",
|
|
6402
|
-
{
|
|
6403
|
-
type: "checkbox",
|
|
6404
|
-
id: "use-backup-password",
|
|
6405
|
-
checked: useCustomPassword,
|
|
6406
|
-
onChange: (e) => setUseCustomPassword(e.target.checked),
|
|
6407
|
-
className: "rounded"
|
|
6408
|
-
}
|
|
6409
|
-
),
|
|
6410
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("label", { htmlFor: "use-backup-password", className: `text-sm font-medium ${theme.bodyText}`, children: "Use custom password instead of passkey" })
|
|
6411
|
-
] }),
|
|
6412
|
-
!useCustomPassword && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("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__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
6413
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.Key, { className: "h-4 w-4" }),
|
|
6414
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { children: "Your passkey will be used to encrypt the backup securely" })
|
|
6415
|
-
] }) }),
|
|
6416
|
-
useCustomPassword && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "relative", children: [
|
|
6417
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
6418
|
-
Input,
|
|
6419
|
-
{
|
|
6420
|
-
type: showPassword ? "text" : "password",
|
|
6421
|
-
placeholder: "Enter backup encryption password",
|
|
6422
|
-
value: customPassword,
|
|
6423
|
-
onChange: (e) => setCustomPassword(e.target.value),
|
|
6424
|
-
className: "pr-10"
|
|
6425
|
-
}
|
|
6426
|
-
),
|
|
6427
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
6428
|
-
"button",
|
|
6429
|
-
{
|
|
6430
|
-
type: "button",
|
|
6431
|
-
onClick: () => setShowPassword(!showPassword),
|
|
6432
|
-
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"}`,
|
|
6433
|
-
children: showPassword ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.Eye, { className: "h-4 w-4" })
|
|
6434
|
-
}
|
|
6435
|
-
)
|
|
6436
|
-
] })
|
|
6437
|
-
] }),
|
|
6438
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "space-y-4", children: [
|
|
6439
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: `text-sm font-medium ${theme.bodyText}`, children: "Choose Backup Method:" }),
|
|
6440
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: `p-4 rounded-xl border ${isDark ? "border-gray-700 bg-gray-800" : "border-blue-200 bg-blue-50/50"}`, children: [
|
|
6441
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "flex items-center justify-between mb-3", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-3", children: [
|
|
6442
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.Server, { className: `h-5 w-5 ${isDark ? "text-blue-400" : "text-blue-600"}` }),
|
|
6443
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
|
|
6444
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: `font-medium text-sm ${theme.titleText}`, children: "Server Backup" }),
|
|
6445
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: `text-xs ${theme.mutedText}`, children: "Store encrypted backup on secure server" })
|
|
6446
|
-
] })
|
|
6447
|
-
] }) }),
|
|
6448
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
6449
|
-
Button,
|
|
6450
|
-
{
|
|
6451
|
-
onClick: () => handleBackup("server"),
|
|
6452
|
-
disabled: loading.server || useCustomPassword && !customPassword || !hasKeyshareData,
|
|
6453
|
-
className: "px-4 py-2",
|
|
6454
|
-
children: loading.server ? "Creating..." : useCustomPassword ? "Create with Password" : "Create with Passkey"
|
|
6455
|
-
}
|
|
6456
|
-
),
|
|
6457
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: `text-xs mt-2 ${theme.mutedText}`, children: [
|
|
6458
|
-
"Encrypted backup stored on secure server \u2022 Last: ",
|
|
6459
|
-
formatLastBackup(backupStatus.server.lastBackup)
|
|
6460
|
-
] })
|
|
6461
|
-
] }),
|
|
6462
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: `p-4 rounded-xl border ${isDark ? "border-gray-700 bg-gray-800" : "border-sky-200 bg-sky-50/50"}`, children: [
|
|
6463
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-3 mb-3", children: [
|
|
6464
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.Cloud, { className: `h-5 w-5 ${isDark ? "text-sky-400" : "text-sky-600"}` }),
|
|
6465
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
|
|
6466
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: `font-medium text-sm ${theme.titleText}`, children: "Cloud Backup" }),
|
|
6467
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: `text-xs ${theme.mutedText}`, children: "Store encrypted backup in cloud storage" })
|
|
6468
|
-
] })
|
|
6469
|
-
] }),
|
|
6470
|
-
cloudProviders.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "mb-3", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
6471
|
-
"select",
|
|
6472
|
-
{
|
|
6473
|
-
value: selectedCloudProvider || "",
|
|
6474
|
-
onChange: (e) => setSelectedCloudProvider(e.target.value),
|
|
6475
|
-
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"}`,
|
|
6476
|
-
children: cloudProviders.map((provider) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("option", { value: provider.id, children: [
|
|
6477
|
-
provider.icon,
|
|
6478
|
-
" ",
|
|
6479
|
-
provider.name,
|
|
6480
|
-
" ",
|
|
6481
|
-
provider.isAuthenticated ? "\u2713" : ""
|
|
6482
|
-
] }, provider.id))
|
|
6483
|
-
}
|
|
6484
|
-
) }),
|
|
6485
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "mb-3", children: [
|
|
6486
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: `text-xs font-medium mb-2 ${theme.bodyText}`, children: "Storage Location:" }),
|
|
6487
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [
|
|
6488
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
6489
|
-
"input",
|
|
6490
|
-
{
|
|
6491
|
-
type: "radio",
|
|
6492
|
-
id: "private-storage",
|
|
6493
|
-
name: "storage-type",
|
|
6494
|
-
checked: usePrivateStorage,
|
|
6495
|
-
onChange: () => setUsePrivateStorage(true),
|
|
6496
|
-
className: "rounded"
|
|
6497
|
-
}
|
|
6498
|
-
),
|
|
6499
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("label", { htmlFor: "private-storage", className: `text-xs ${theme.bodyText}`, children: "\u{1F512} Private (app-only, hidden from Drive UI)" })
|
|
6500
|
-
] }),
|
|
6501
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
6502
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
6503
|
-
"input",
|
|
6504
|
-
{
|
|
6505
|
-
type: "radio",
|
|
6506
|
-
id: "visible-storage",
|
|
6507
|
-
name: "storage-type",
|
|
6508
|
-
checked: !usePrivateStorage,
|
|
6509
|
-
onChange: () => setUsePrivateStorage(false),
|
|
6510
|
-
className: "rounded"
|
|
6511
|
-
}
|
|
6512
|
-
),
|
|
6513
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("label", { htmlFor: "visible-storage", className: `text-xs ${theme.bodyText}`, children: "\u{1F4C1} Visible (Lumia Backups folder in Drive)" })
|
|
6514
|
-
] })
|
|
6515
|
-
] }),
|
|
6516
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
6517
|
-
Button,
|
|
6518
|
-
{
|
|
6519
|
-
onClick: () => handleBackup("cloud"),
|
|
6520
|
-
disabled: loading.cloud || useCustomPassword && !customPassword || !hasKeyshareData || cloudProviders.length === 0,
|
|
6521
|
-
className: "px-4 py-2",
|
|
6522
|
-
children: loading.cloud ? "Creating..." : useCustomPassword ? "Create with Password" : "Create with Passkey"
|
|
6523
|
-
}
|
|
6524
|
-
),
|
|
6525
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("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)}` })
|
|
6526
|
-
] }),
|
|
6527
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: `p-4 rounded-xl border ${isDark ? "border-gray-700 bg-gray-800" : "border-purple-200 bg-purple-50/50"}`, children: [
|
|
6528
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-3 mb-3", children: [
|
|
6529
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.Download, { className: `h-5 w-5 ${isDark ? "text-purple-400" : "text-purple-600"}` }),
|
|
6530
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
|
|
6531
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: `font-medium text-sm ${theme.titleText}`, children: "File Backup" }),
|
|
6532
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: `text-xs ${theme.mutedText}`, children: "Download encrypted backup file to your device" })
|
|
6533
|
-
] })
|
|
6534
|
-
] }),
|
|
6535
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
6536
|
-
Button,
|
|
6537
|
-
{
|
|
6538
|
-
onClick: () => handleBackup("local"),
|
|
6539
|
-
disabled: loading.local || useCustomPassword && !customPassword || !hasKeyshareData,
|
|
6540
|
-
className: "w-full",
|
|
6541
|
-
children: loading.local ? "Creating..." : useCustomPassword ? "Create & Download" : "Create & Download with Passkey"
|
|
6542
|
-
}
|
|
6543
|
-
),
|
|
6544
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: `text-xs mt-2 ${theme.mutedText}`, children: [
|
|
6545
|
-
"Download encrypted backup file to your device \u2022 Last: ",
|
|
6546
|
-
formatLastBackup(backupStatus.local.lastBackup)
|
|
6547
|
-
] })
|
|
6548
|
-
] })
|
|
6549
|
-
] }),
|
|
6550
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("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: [
|
|
6551
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.Lock, { className: "h-4 w-4 mt-0.5 flex-shrink-0" }),
|
|
6552
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
|
|
6553
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "font-medium", children: "Security Notice" }),
|
|
6554
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "mt-1", children: [
|
|
6555
|
-
useCustomPassword ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_jsx_runtime21.Fragment, { children: "All backups are encrypted with AES-256 using your custom password. Store your password securely - without it, backups cannot be restored." }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_jsx_runtime21.Fragment, { children: "All backups are encrypted with AES-256 using your passkey. Your passkey authenticator (device/biometrics) is required to restore backups." }),
|
|
6556
|
-
" ",
|
|
6557
|
-
"Without backup access, you cannot recover your smart account if you lose this device."
|
|
6558
|
-
] })
|
|
6559
|
-
] })
|
|
6560
|
-
] })
|
|
6561
|
-
] });
|
|
6562
|
-
}
|
|
6563
|
-
|
|
6564
|
-
// src/internal/components/SecurityModal.tsx
|
|
6565
|
-
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
6566
6334
|
var SecurityModal = ({ open, onOpenChange, onBack }) => {
|
|
6567
6335
|
const userId = import_auth3.jwtTokenManager.getUserId();
|
|
6568
6336
|
const serverHasKeyshare = import_auth3.jwtTokenManager.getHasKeyshare() ?? false;
|
|
6569
6337
|
const backup = userId ? getBackupStatus(userId) : { server: { enabled: false }, cloud: { enabled: false }, local: { enabled: false } };
|
|
6570
6338
|
const { config } = useLumiaPassportConfig();
|
|
6571
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
6339
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
6572
6340
|
const [isRefreshing, setIsRefreshing] = import_react12.default.useState(false);
|
|
6573
6341
|
const [localInfo, setLocalInfo] = import_react12.default.useState(null);
|
|
6574
6342
|
const [recoveryCreatedAt, setRecoveryCreatedAt] = import_react12.default.useState(null);
|
|
@@ -6578,7 +6346,6 @@ var SecurityModal = ({ open, onOpenChange, onBack }) => {
|
|
|
6578
6346
|
const [recoveryDeviceName, setRecoveryDeviceName] = import_react12.default.useState(null);
|
|
6579
6347
|
const [recoveryCountry, setRecoveryCountry] = import_react12.default.useState(null);
|
|
6580
6348
|
const [hasServerBackup, setHasServerBackup] = import_react12.default.useState(false);
|
|
6581
|
-
const [showBackupForm, setShowBackupForm] = import_react12.default.useState(false);
|
|
6582
6349
|
const [trustedApps, setTrustedApps] = import_react12.default.useState([]);
|
|
6583
6350
|
const [appToRemove, setAppToRemove] = import_react12.default.useState(null);
|
|
6584
6351
|
const fetchRecovery = import_react12.default.useCallback(async () => {
|
|
@@ -6642,219 +6409,179 @@ var SecurityModal = ({ open, onOpenChange, onBack }) => {
|
|
|
6642
6409
|
console.error("[SecurityModal] Error removing trusted app:", error);
|
|
6643
6410
|
}
|
|
6644
6411
|
};
|
|
6645
|
-
|
|
6646
|
-
|
|
6647
|
-
/* @__PURE__ */ (0,
|
|
6648
|
-
/* @__PURE__ */ (0,
|
|
6649
|
-
/* @__PURE__ */ (0,
|
|
6650
|
-
/* @__PURE__ */ (0,
|
|
6651
|
-
|
|
6652
|
-
{
|
|
6653
|
-
onClick: () => setShowBackupForm(false),
|
|
6654
|
-
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"}`,
|
|
6655
|
-
title: "Back to Security",
|
|
6656
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react8.ArrowLeft, { className: "h-4 w-4" })
|
|
6657
|
-
}
|
|
6658
|
-
),
|
|
6659
|
-
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
6660
|
-
BackupForm,
|
|
6661
|
-
{
|
|
6662
|
-
userId,
|
|
6663
|
-
onBackupSuccess: () => {
|
|
6664
|
-
setShowBackupForm(false);
|
|
6665
|
-
fetchRecovery();
|
|
6666
|
-
}
|
|
6667
|
-
}
|
|
6668
|
-
)
|
|
6669
|
-
] })
|
|
6670
|
-
] }) });
|
|
6671
|
-
}
|
|
6672
|
-
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(Dialog, { open, onOpenChange, children: [
|
|
6673
|
-
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(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: [
|
|
6674
|
-
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DialogTitle, { children: "Security" }) }),
|
|
6675
|
-
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DialogDescription, { className: "sr-only", children: "Keyshare and vault status" }),
|
|
6676
|
-
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "p-5 space-y-4", children: [
|
|
6677
|
-
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
6678
|
-
onBack && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
6412
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(Dialog, { open, onOpenChange, children: [
|
|
6413
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(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: [
|
|
6414
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(DialogTitle, { children: "Security" }) }),
|
|
6415
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(DialogDescription, { className: "sr-only", children: "Keyshare and vault status" }),
|
|
6416
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "p-5 space-y-4", children: [
|
|
6417
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
6418
|
+
onBack && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
6679
6419
|
"button",
|
|
6680
6420
|
{
|
|
6681
6421
|
onClick: onBack,
|
|
6682
6422
|
className: `p-1 mr-1 ${isDark ? "text-gray-400 hover:text-gray-300" : "text-gray-500 hover:text-gray-700"}`,
|
|
6683
6423
|
title: "Back",
|
|
6684
|
-
children: /* @__PURE__ */ (0,
|
|
6424
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.ArrowLeft, { className: "h-4 w-4" })
|
|
6685
6425
|
}
|
|
6686
6426
|
),
|
|
6687
|
-
/* @__PURE__ */ (0,
|
|
6688
|
-
/* @__PURE__ */ (0,
|
|
6689
|
-
/* @__PURE__ */ (0,
|
|
6690
|
-
/* @__PURE__ */ (0,
|
|
6427
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: `flex items-center gap-2 ${theme.text} font-semibold`, children: [
|
|
6428
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.Key, { className: "h-4 w-4" }),
|
|
6429
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { children: "Keyshare Status" }),
|
|
6430
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("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__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.RefreshCw, { className: `h-4 w-4 ${isRefreshing ? "animate-spin" : ""}` }) })
|
|
6691
6431
|
] })
|
|
6692
6432
|
] }) }),
|
|
6693
|
-
/* @__PURE__ */ (0,
|
|
6694
|
-
/* @__PURE__ */ (0,
|
|
6695
|
-
/* @__PURE__ */ (0,
|
|
6696
|
-
/* @__PURE__ */ (0,
|
|
6697
|
-
/* @__PURE__ */ (0,
|
|
6433
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "grid grid-cols-3 gap-4", children: [
|
|
6434
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "space-y-2 text-center", children: [
|
|
6435
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center justify-center gap-2", children: [
|
|
6436
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.Cloud, { className: `h-4 w-4 ${isDark ? "text-gray-400" : "text-gray-500"}` }),
|
|
6437
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: `text-sm font-medium ${isDark ? "text-gray-200" : "text-gray-800"}`, children: "Server" })
|
|
6698
6438
|
] }),
|
|
6699
|
-
/* @__PURE__ */ (0,
|
|
6700
|
-
serverHasKeyshare ? /* @__PURE__ */ (0,
|
|
6439
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("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: [
|
|
6440
|
+
serverHasKeyshare ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.CheckCircle2, { className: "h-4 w-4 mr-1" }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.AlertTriangle, { className: "h-4 w-4 mr-1" }),
|
|
6701
6441
|
serverHasKeyshare ? "Ready" : "Missing"
|
|
6702
6442
|
] })
|
|
6703
6443
|
] }),
|
|
6704
|
-
/* @__PURE__ */ (0,
|
|
6705
|
-
/* @__PURE__ */ (0,
|
|
6706
|
-
/* @__PURE__ */ (0,
|
|
6707
|
-
/* @__PURE__ */ (0,
|
|
6444
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "space-y-2 text-center", children: [
|
|
6445
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center justify-center gap-2", children: [
|
|
6446
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.Laptop, { className: `h-4 w-4 ${isDark ? "text-gray-400" : "text-gray-500"}` }),
|
|
6447
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: `text-sm font-medium ${isDark ? "text-gray-200" : "text-gray-800"}`, children: "Local" })
|
|
6708
6448
|
] }),
|
|
6709
|
-
/* @__PURE__ */ (0,
|
|
6710
|
-
localInfo?.hasKeyshare ? /* @__PURE__ */ (0,
|
|
6449
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("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: [
|
|
6450
|
+
localInfo?.hasKeyshare ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.CheckCircle2, { className: "h-4 w-4 mr-1" }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.AlertTriangle, { className: "h-4 w-4 mr-1" }),
|
|
6711
6451
|
localInfo?.hasKeyshare ? "Ready" : "Missing"
|
|
6712
6452
|
] })
|
|
6713
6453
|
] }),
|
|
6714
|
-
/* @__PURE__ */ (0,
|
|
6715
|
-
/* @__PURE__ */ (0,
|
|
6716
|
-
/* @__PURE__ */ (0,
|
|
6717
|
-
/* @__PURE__ */ (0,
|
|
6454
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "space-y-2 text-center", children: [
|
|
6455
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center justify-center gap-2", children: [
|
|
6456
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.Shield, { className: `h-4 w-4 ${isDark ? "text-gray-400" : "text-gray-500"}` }),
|
|
6457
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: `text-sm font-medium ${isDark ? "text-gray-200" : "text-gray-800"}`, children: "Vault" })
|
|
6718
6458
|
] }),
|
|
6719
|
-
/* @__PURE__ */ (0,
|
|
6720
|
-
hasServerBackup ? /* @__PURE__ */ (0,
|
|
6459
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("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: [
|
|
6460
|
+
hasServerBackup ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.CheckCircle2, { className: "h-4 w-4 mr-1" }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.AlertTriangle, { className: "h-4 w-4 mr-1" }),
|
|
6721
6461
|
hasServerBackup ? "Ready" : "None"
|
|
6722
6462
|
] })
|
|
6723
6463
|
] })
|
|
6724
6464
|
] }),
|
|
6725
|
-
localInfo?.hasKeyshare && /* @__PURE__ */ (0,
|
|
6726
|
-
localInfo.ownerAddress && /* @__PURE__ */ (0,
|
|
6465
|
+
localInfo?.hasKeyshare && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: `space-y-0.5 text-[10px] leading-tight ${isDark ? "text-gray-400" : "text-gray-600"}`, children: [
|
|
6466
|
+
localInfo.ownerAddress && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
|
|
6727
6467
|
"Owner: ",
|
|
6728
|
-
/* @__PURE__ */ (0,
|
|
6468
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: `font-mono break-all ${isDark ? "text-gray-200" : "text-gray-800"}`, children: localInfo.ownerAddress })
|
|
6729
6469
|
] }),
|
|
6730
|
-
typeof localInfo.keyshareSize === "number" && /* @__PURE__ */ (0,
|
|
6470
|
+
typeof localInfo.keyshareSize === "number" && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
|
|
6731
6471
|
"Size: ",
|
|
6732
|
-
/* @__PURE__ */ (0,
|
|
6472
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("span", { className: `font-mono ${isDark ? "text-gray-200" : "text-gray-800"}`, children: [
|
|
6733
6473
|
Math.round((localInfo.keyshareSize || 0) / 1024),
|
|
6734
6474
|
"KB"
|
|
6735
6475
|
] })
|
|
6736
6476
|
] }),
|
|
6737
|
-
localInfo.sessionId && /* @__PURE__ */ (0,
|
|
6477
|
+
localInfo.sessionId && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
|
|
6738
6478
|
"Session: ",
|
|
6739
|
-
/* @__PURE__ */ (0,
|
|
6479
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: `font-mono break-all ${isDark ? "text-gray-200" : "text-gray-800"}`, children: localInfo.sessionId })
|
|
6740
6480
|
] })
|
|
6741
6481
|
] }),
|
|
6742
|
-
/* @__PURE__ */ (0,
|
|
6743
|
-
backup.server.enabled && backup.server.lastBackup && /* @__PURE__ */ (0,
|
|
6744
|
-
/* @__PURE__ */ (0,
|
|
6745
|
-
/* @__PURE__ */ (0,
|
|
6482
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: `space-y-0.5 text-[10px] leading-tight ${isDark ? "text-gray-400" : "text-gray-500"}`, children: [
|
|
6483
|
+
backup.server.enabled && backup.server.lastBackup && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-1", children: [
|
|
6484
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.Server, { className: "h-2.5 w-2.5 text-gray-400" }),
|
|
6485
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("span", { children: [
|
|
6746
6486
|
"Server: ",
|
|
6747
6487
|
new Date(backup.server.lastBackup).toLocaleString()
|
|
6748
6488
|
] })
|
|
6749
6489
|
] }),
|
|
6750
|
-
!backup.server.lastBackup && recoveryCreatedAt && /* @__PURE__ */ (0,
|
|
6751
|
-
/* @__PURE__ */ (0,
|
|
6752
|
-
/* @__PURE__ */ (0,
|
|
6490
|
+
!backup.server.lastBackup && recoveryCreatedAt && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-1", children: [
|
|
6491
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.Server, { className: "h-2.5 w-2.5 text-gray-400" }),
|
|
6492
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("span", { children: [
|
|
6753
6493
|
"Server: ",
|
|
6754
6494
|
new Date(recoveryCreatedAt).toLocaleString()
|
|
6755
6495
|
] })
|
|
6756
6496
|
] }),
|
|
6757
|
-
backup.cloud.enabled && backup.cloud.lastBackup && /* @__PURE__ */ (0,
|
|
6758
|
-
/* @__PURE__ */ (0,
|
|
6759
|
-
/* @__PURE__ */ (0,
|
|
6497
|
+
backup.cloud.enabled && backup.cloud.lastBackup && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-1", children: [
|
|
6498
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.Cloud, { className: "h-2.5 w-2.5 text-gray-400" }),
|
|
6499
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("span", { children: [
|
|
6760
6500
|
"Cloud: ",
|
|
6761
6501
|
new Date(backup.cloud.lastBackup).toLocaleString()
|
|
6762
6502
|
] })
|
|
6763
6503
|
] }),
|
|
6764
|
-
backup.local.enabled && backup.local.lastBackup && /* @__PURE__ */ (0,
|
|
6765
|
-
/* @__PURE__ */ (0,
|
|
6766
|
-
/* @__PURE__ */ (0,
|
|
6504
|
+
backup.local.enabled && backup.local.lastBackup && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-1", children: [
|
|
6505
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.HardDrive, { className: "h-2.5 w-2.5 text-gray-400" }),
|
|
6506
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("span", { children: [
|
|
6767
6507
|
"Local: ",
|
|
6768
6508
|
new Date(backup.local.lastBackup).toLocaleString()
|
|
6769
6509
|
] })
|
|
6770
6510
|
] })
|
|
6771
6511
|
] }),
|
|
6772
|
-
(recoveryCreatedAt || recoveryBrowser || recoveryUa || recoveryDeviceId || recoveryDeviceName) && /* @__PURE__ */ (0,
|
|
6773
|
-
/* @__PURE__ */ (0,
|
|
6774
|
-
recoveryCreatedAt && /* @__PURE__ */ (0,
|
|
6512
|
+
(recoveryCreatedAt || recoveryBrowser || recoveryUa || recoveryDeviceId || recoveryDeviceName) && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: `space-y-0.5 text-[10px] leading-tight ${isDark ? "text-gray-400" : "text-gray-600"}`, children: [
|
|
6513
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: `font-medium text-[11px] ${isDark ? "text-indigo-400" : "text-indigo-600"}`, children: "Device Information:" }),
|
|
6514
|
+
recoveryCreatedAt && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
|
|
6775
6515
|
"Created: ",
|
|
6776
6516
|
new Date(recoveryCreatedAt).toLocaleString(),
|
|
6777
6517
|
" "
|
|
6778
6518
|
] }),
|
|
6779
|
-
recoveryCountry && /* @__PURE__ */ (0,
|
|
6519
|
+
recoveryCountry && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
|
|
6780
6520
|
"Country: ",
|
|
6781
6521
|
recoveryCountry
|
|
6782
6522
|
] }),
|
|
6783
|
-
recoveryBrowser && /* @__PURE__ */ (0,
|
|
6523
|
+
recoveryBrowser && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
|
|
6784
6524
|
"Browser: ",
|
|
6785
6525
|
recoveryBrowser
|
|
6786
6526
|
] }),
|
|
6787
|
-
parseOS(recoveryUa) && /* @__PURE__ */ (0,
|
|
6527
|
+
parseOS(recoveryUa) && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
|
|
6788
6528
|
"OS: ",
|
|
6789
6529
|
parseOS(recoveryUa)
|
|
6790
6530
|
] }),
|
|
6791
|
-
recoveryDeviceName && /* @__PURE__ */ (0,
|
|
6531
|
+
recoveryDeviceName && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
|
|
6792
6532
|
"Device: ",
|
|
6793
6533
|
recoveryDeviceName
|
|
6794
6534
|
] }),
|
|
6795
|
-
recoveryDeviceId && /* @__PURE__ */ (0,
|
|
6535
|
+
recoveryDeviceId && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
|
|
6796
6536
|
"Device ID: ",
|
|
6797
|
-
/* @__PURE__ */ (0,
|
|
6537
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "font-mono break-all", children: recoveryDeviceId })
|
|
6798
6538
|
] })
|
|
6799
6539
|
] }),
|
|
6800
|
-
trustedApps.length > 0 && /* @__PURE__ */ (0,
|
|
6801
|
-
/* @__PURE__ */ (0,
|
|
6540
|
+
trustedApps.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: `space-y-2 ${isDark ? "text-gray-400" : "text-gray-600"}`, children: [
|
|
6541
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: `font-medium text-[11px] ${isDark ? "text-green-400" : "text-green-600"}`, children: [
|
|
6802
6542
|
"Trusted Applications (",
|
|
6803
6543
|
trustedApps.length,
|
|
6804
6544
|
"):"
|
|
6805
6545
|
] }),
|
|
6806
|
-
/* @__PURE__ */ (0,
|
|
6807
|
-
/* @__PURE__ */ (0,
|
|
6808
|
-
/* @__PURE__ */ (0,
|
|
6809
|
-
/* @__PURE__ */ (0,
|
|
6546
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "space-y-1", children: trustedApps.map((app, index) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("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: [
|
|
6547
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex-1 min-w-0", children: [
|
|
6548
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: `font-medium ${isDark ? "text-gray-200" : "text-gray-800"}`, children: new URL(app.origin).hostname }),
|
|
6549
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: `${isDark ? "text-gray-400" : "text-gray-500"}`, children: [
|
|
6810
6550
|
"Trusted: ",
|
|
6811
6551
|
new Date(app.trustedAt).toLocaleDateString()
|
|
6812
6552
|
] })
|
|
6813
6553
|
] }),
|
|
6814
|
-
/* @__PURE__ */ (0,
|
|
6554
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
6815
6555
|
"button",
|
|
6816
6556
|
{
|
|
6817
6557
|
onClick: () => setAppToRemove({ projectId: app.projectId, origin: app.origin, hostname: new URL(app.origin).hostname }),
|
|
6818
6558
|
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"}`,
|
|
6819
6559
|
title: "Remove from trusted",
|
|
6820
|
-
children: /* @__PURE__ */ (0,
|
|
6560
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.Trash2, { className: "h-3 w-3" })
|
|
6821
6561
|
}
|
|
6822
6562
|
)
|
|
6823
6563
|
] }, index)) })
|
|
6824
|
-
] })
|
|
6825
|
-
localInfo?.hasKeyshare && !showBackupForm && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
6826
|
-
Button,
|
|
6827
|
-
{
|
|
6828
|
-
onClick: () => setShowBackupForm(true),
|
|
6829
|
-
variant: "success",
|
|
6830
|
-
className: "w-full",
|
|
6831
|
-
size: "lg",
|
|
6832
|
-
children: [
|
|
6833
|
-
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react8.Plus, { className: "h-4 w-4" }),
|
|
6834
|
-
"Create Backup"
|
|
6835
|
-
]
|
|
6836
|
-
}
|
|
6837
|
-
) })
|
|
6564
|
+
] })
|
|
6838
6565
|
] })
|
|
6839
6566
|
] }),
|
|
6840
|
-
appToRemove && /* @__PURE__ */ (0,
|
|
6841
|
-
/* @__PURE__ */ (0,
|
|
6842
|
-
/* @__PURE__ */ (0,
|
|
6843
|
-
/* @__PURE__ */ (0,
|
|
6844
|
-
/* @__PURE__ */ (0,
|
|
6845
|
-
/* @__PURE__ */ (0,
|
|
6846
|
-
/* @__PURE__ */ (0,
|
|
6847
|
-
/* @__PURE__ */ (0,
|
|
6848
|
-
/* @__PURE__ */ (0,
|
|
6849
|
-
/* @__PURE__ */ (0,
|
|
6850
|
-
/* @__PURE__ */ (0,
|
|
6851
|
-
/* @__PURE__ */ (0,
|
|
6852
|
-
/* @__PURE__ */ (0,
|
|
6567
|
+
appToRemove && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Dialog, { open: !!appToRemove, onOpenChange: (open2) => !open2 && setAppToRemove(null), children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(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: [
|
|
6568
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(DialogTitle, { children: "Remove Trusted Application" }) }),
|
|
6569
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(DialogDescription, { className: "sr-only", children: "Confirm removal of trusted application" }),
|
|
6570
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "p-5 space-y-4", children: [
|
|
6571
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: `text-center ${theme.text}`, children: [
|
|
6572
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "text-lg font-semibold mb-2", children: "Remove Trusted App?" }),
|
|
6573
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: `text-sm ${isDark ? "text-gray-300" : "text-gray-700"} mb-3`, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "font-medium", children: appToRemove.hostname }) }),
|
|
6574
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: `text-xs ${isDark ? "text-gray-400" : "text-gray-600"} text-left space-y-2`, children: [
|
|
6575
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { children: "After removing this application from trusted list:" }),
|
|
6576
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("ul", { className: "list-disc list-inside space-y-1 ml-2", children: [
|
|
6577
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("li", { children: "All transactions will require confirmation in a separate window" }),
|
|
6578
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("li", { children: "You can add it back to trusted list at any time" }),
|
|
6579
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("li", { children: 'Transaction confirmation window will show "Trust this app" checkbox' })
|
|
6853
6580
|
] })
|
|
6854
6581
|
] })
|
|
6855
6582
|
] }),
|
|
6856
|
-
/* @__PURE__ */ (0,
|
|
6857
|
-
/* @__PURE__ */ (0,
|
|
6583
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex gap-2", children: [
|
|
6584
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
6858
6585
|
Button,
|
|
6859
6586
|
{
|
|
6860
6587
|
onClick: () => setAppToRemove(null),
|
|
@@ -6864,7 +6591,7 @@ var SecurityModal = ({ open, onOpenChange, onBack }) => {
|
|
|
6864
6591
|
children: "Cancel"
|
|
6865
6592
|
}
|
|
6866
6593
|
),
|
|
6867
|
-
/* @__PURE__ */ (0,
|
|
6594
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
6868
6595
|
Button,
|
|
6869
6596
|
{
|
|
6870
6597
|
onClick: confirmRemoveTrustedApp,
|
|
@@ -6881,30 +6608,32 @@ var SecurityModal = ({ open, onOpenChange, onBack }) => {
|
|
|
6881
6608
|
};
|
|
6882
6609
|
|
|
6883
6610
|
// src/internal/components/KeyshareBackup.tsx
|
|
6884
|
-
var
|
|
6885
|
-
var
|
|
6611
|
+
var React18 = __toESM(require("react"), 1);
|
|
6612
|
+
var import_lucide_react8 = require("lucide-react");
|
|
6886
6613
|
init_iframe_manager();
|
|
6887
|
-
var
|
|
6614
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
6888
6615
|
function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
6889
|
-
const
|
|
6616
|
+
const { config } = useLumiaPassportConfig();
|
|
6617
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
6618
|
+
const [backupStatus, setBackupStatus] = React18.useState({
|
|
6890
6619
|
server: {},
|
|
6891
6620
|
cloud: {},
|
|
6892
6621
|
local: {}
|
|
6893
6622
|
});
|
|
6894
|
-
const [loading, setLoading] =
|
|
6623
|
+
const [loading, setLoading] = React18.useState({
|
|
6895
6624
|
server: false,
|
|
6896
6625
|
cloud: false,
|
|
6897
6626
|
local: false
|
|
6898
6627
|
});
|
|
6899
|
-
const [error, setError] =
|
|
6900
|
-
const [success, setSuccess] =
|
|
6901
|
-
const [showPassword, setShowPassword] =
|
|
6902
|
-
const [useCustomPassword, setUseCustomPassword] =
|
|
6903
|
-
const [customPassword, setCustomPassword] =
|
|
6904
|
-
const [cloudProviders, setCloudProviders] =
|
|
6905
|
-
const [selectedCloudProvider, setSelectedCloudProvider] =
|
|
6906
|
-
const [hasKeyshareData, setHasKeyshareData] =
|
|
6907
|
-
const iframeManager =
|
|
6628
|
+
const [error, setError] = React18.useState(null);
|
|
6629
|
+
const [success, setSuccess] = React18.useState(null);
|
|
6630
|
+
const [showPassword, setShowPassword] = React18.useState(false);
|
|
6631
|
+
const [useCustomPassword, setUseCustomPassword] = React18.useState(false);
|
|
6632
|
+
const [customPassword, setCustomPassword] = React18.useState("");
|
|
6633
|
+
const [cloudProviders, setCloudProviders] = React18.useState([]);
|
|
6634
|
+
const [selectedCloudProvider, setSelectedCloudProvider] = React18.useState(null);
|
|
6635
|
+
const [hasKeyshareData, setHasKeyshareData] = React18.useState(true);
|
|
6636
|
+
const iframeManager = React18.useMemo(() => {
|
|
6908
6637
|
try {
|
|
6909
6638
|
return getIframeManager();
|
|
6910
6639
|
} catch (e) {
|
|
@@ -6912,7 +6641,7 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
6912
6641
|
return null;
|
|
6913
6642
|
}
|
|
6914
6643
|
}, []);
|
|
6915
|
-
|
|
6644
|
+
React18.useEffect(() => {
|
|
6916
6645
|
const loadCloudProviders = async () => {
|
|
6917
6646
|
try {
|
|
6918
6647
|
const { getAvailableCloudProviders: getAvailableCloudProviders3 } = await Promise.resolve().then(() => (init_cloudStorage(), cloudStorage_exports));
|
|
@@ -6932,7 +6661,7 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
6932
6661
|
};
|
|
6933
6662
|
loadCloudProviders();
|
|
6934
6663
|
}, [selectedCloudProvider]);
|
|
6935
|
-
const refreshStatus =
|
|
6664
|
+
const refreshStatus = React18.useCallback(async () => {
|
|
6936
6665
|
if (!iframeManager) return;
|
|
6937
6666
|
try {
|
|
6938
6667
|
const status = await iframeManager.getBackupStatus(userId);
|
|
@@ -6941,7 +6670,7 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
6941
6670
|
console.error("[KeyshareBackup] Failed to get backup status:", error2);
|
|
6942
6671
|
}
|
|
6943
6672
|
}, [iframeManager, userId]);
|
|
6944
|
-
|
|
6673
|
+
React18.useEffect(() => {
|
|
6945
6674
|
refreshStatus();
|
|
6946
6675
|
}, [refreshStatus]);
|
|
6947
6676
|
const handleBackup = async (method) => {
|
|
@@ -7026,30 +6755,30 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
7026
6755
|
const date = new Date(timestamp);
|
|
7027
6756
|
return `${date.toLocaleDateString()} ${date.toLocaleTimeString()}`;
|
|
7028
6757
|
};
|
|
7029
|
-
return /* @__PURE__ */ (0,
|
|
7030
|
-
/* @__PURE__ */ (0,
|
|
7031
|
-
/* @__PURE__ */ (0,
|
|
7032
|
-
/* @__PURE__ */ (0,
|
|
7033
|
-
/* @__PURE__ */ (0,
|
|
7034
|
-
/* @__PURE__ */ (0,
|
|
7035
|
-
/* @__PURE__ */ (0,
|
|
6758
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(Card, { className: `${theme.modalBg} ${isDark ? "border-green-900/50" : "border-green-200"}`, children: [
|
|
6759
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(CardHeader, { className: "pb-4", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
6760
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex items-center gap-3", children: [
|
|
6761
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react8.Shield, { className: `h-6 w-6 ${isDark ? "text-green-400" : "text-green-600"}` }),
|
|
6762
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { children: [
|
|
6763
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(CardTitle, { className: `text-lg ${theme.titleText}`, children: "Create Backup" }),
|
|
6764
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(CardDescription, { className: `text-sm ${theme.mutedText}`, children: "Secure your keyshare with encrypted backups" })
|
|
7036
6765
|
] })
|
|
7037
6766
|
] }),
|
|
7038
|
-
onClose && /* @__PURE__ */ (0,
|
|
6767
|
+
onClose && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("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__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react8.X, { className: "h-4 w-4" }) })
|
|
7039
6768
|
] }) }),
|
|
7040
|
-
/* @__PURE__ */ (0,
|
|
7041
|
-
error && /* @__PURE__ */ (0,
|
|
7042
|
-
/* @__PURE__ */ (0,
|
|
7043
|
-
/* @__PURE__ */ (0,
|
|
6769
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(CardContent, { className: "space-y-6", children: [
|
|
6770
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("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: [
|
|
6771
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react8.AlertCircle, { className: "h-4 w-4 flex-shrink-0" }),
|
|
6772
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { children: error })
|
|
7044
6773
|
] }),
|
|
7045
|
-
success && /* @__PURE__ */ (0,
|
|
7046
|
-
/* @__PURE__ */ (0,
|
|
7047
|
-
/* @__PURE__ */ (0,
|
|
6774
|
+
success && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("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: [
|
|
6775
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react8.CheckCircle2, { className: "h-4 w-4 flex-shrink-0" }),
|
|
6776
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { children: success })
|
|
7048
6777
|
] }),
|
|
7049
|
-
/* @__PURE__ */ (0,
|
|
7050
|
-
/* @__PURE__ */ (0,
|
|
7051
|
-
/* @__PURE__ */ (0,
|
|
7052
|
-
/* @__PURE__ */ (0,
|
|
6778
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "space-y-3", children: [
|
|
6779
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: `text-sm font-medium ${isDark ? "text-gray-300" : "text-gray-700"}`, children: "Encryption Method:" }),
|
|
6780
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
6781
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
7053
6782
|
"input",
|
|
7054
6783
|
{
|
|
7055
6784
|
type: "checkbox",
|
|
@@ -7059,14 +6788,14 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
7059
6788
|
className: "rounded"
|
|
7060
6789
|
}
|
|
7061
6790
|
),
|
|
7062
|
-
/* @__PURE__ */ (0,
|
|
6791
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("label", { htmlFor: "use-backup-password", className: `text-sm font-medium ${isDark ? "text-gray-300" : ""}`, children: "Use custom password instead of passkey" })
|
|
7063
6792
|
] }),
|
|
7064
|
-
!useCustomPassword && /* @__PURE__ */ (0,
|
|
7065
|
-
/* @__PURE__ */ (0,
|
|
7066
|
-
/* @__PURE__ */ (0,
|
|
6793
|
+
!useCustomPassword && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("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__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
6794
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react8.Key, { className: "h-4 w-4" }),
|
|
6795
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { children: "Your passkey will be used to encrypt the backup securely" })
|
|
7067
6796
|
] }) }),
|
|
7068
|
-
useCustomPassword && /* @__PURE__ */ (0,
|
|
7069
|
-
/* @__PURE__ */ (0,
|
|
6797
|
+
useCustomPassword && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "relative", children: [
|
|
6798
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
7070
6799
|
Input,
|
|
7071
6800
|
{
|
|
7072
6801
|
type: showPassword ? "text" : "password",
|
|
@@ -7076,28 +6805,28 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
7076
6805
|
className: "pr-10"
|
|
7077
6806
|
}
|
|
7078
6807
|
),
|
|
7079
|
-
/* @__PURE__ */ (0,
|
|
6808
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
7080
6809
|
"button",
|
|
7081
6810
|
{
|
|
7082
6811
|
type: "button",
|
|
7083
6812
|
onClick: () => setShowPassword(!showPassword),
|
|
7084
6813
|
className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-500 hover:text-gray-700",
|
|
7085
|
-
children: showPassword ? /* @__PURE__ */ (0,
|
|
6814
|
+
children: showPassword ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react8.EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react8.Eye, { className: "h-4 w-4" })
|
|
7086
6815
|
}
|
|
7087
6816
|
)
|
|
7088
6817
|
] })
|
|
7089
6818
|
] }),
|
|
7090
|
-
/* @__PURE__ */ (0,
|
|
7091
|
-
/* @__PURE__ */ (0,
|
|
7092
|
-
/* @__PURE__ */ (0,
|
|
7093
|
-
/* @__PURE__ */ (0,
|
|
7094
|
-
/* @__PURE__ */ (0,
|
|
7095
|
-
/* @__PURE__ */ (0,
|
|
7096
|
-
/* @__PURE__ */ (0,
|
|
7097
|
-
/* @__PURE__ */ (0,
|
|
6819
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "space-y-4", children: [
|
|
6820
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: `text-sm font-medium ${isDark ? "text-gray-300" : "text-gray-700"}`, children: "Choose Backup Method:" }),
|
|
6821
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: `p-4 rounded-lg border ${isDark ? "border-blue-800/60 bg-blue-950/60" : "border-blue-200 bg-blue-50/50"}`, children: [
|
|
6822
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "flex items-center justify-between mb-3", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex items-center gap-3", children: [
|
|
6823
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react8.Server, { className: `h-5 w-5 ${isDark ? "text-blue-400" : "text-blue-600"}` }),
|
|
6824
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { children: [
|
|
6825
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: `font-medium text-sm ${isDark ? "text-gray-200" : ""}`, children: "Server Backup" }),
|
|
6826
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: `text-xs ${isDark ? "text-gray-400" : "text-gray-600"}`, children: "Store encrypted backup on secure server" })
|
|
7098
6827
|
] })
|
|
7099
6828
|
] }) }),
|
|
7100
|
-
/* @__PURE__ */ (0,
|
|
6829
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
7101
6830
|
Button,
|
|
7102
6831
|
{
|
|
7103
6832
|
onClick: () => handleBackup("server"),
|
|
@@ -7106,33 +6835,33 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
7106
6835
|
children: loading.server ? "Creating..." : useCustomPassword ? "Create with Password" : "Create with Passkey"
|
|
7107
6836
|
}
|
|
7108
6837
|
),
|
|
7109
|
-
/* @__PURE__ */ (0,
|
|
6838
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: `text-xs mt-2 ${isDark ? "text-gray-400" : "text-gray-600"}`, children: [
|
|
7110
6839
|
"Encrypted backup stored on secure server \u2022 Last: ",
|
|
7111
6840
|
formatLastBackup(backupStatus.server.lastBackup)
|
|
7112
6841
|
] })
|
|
7113
6842
|
] }),
|
|
7114
|
-
/* @__PURE__ */ (0,
|
|
7115
|
-
/* @__PURE__ */ (0,
|
|
7116
|
-
/* @__PURE__ */ (0,
|
|
7117
|
-
/* @__PURE__ */ (0,
|
|
7118
|
-
/* @__PURE__ */ (0,
|
|
7119
|
-
/* @__PURE__ */ (0,
|
|
6843
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: `p-4 rounded-lg border ${isDark ? "border-sky-800/60 bg-sky-950/60" : "border-sky-200 bg-sky-50/50"}`, children: [
|
|
6844
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex items-center gap-3 mb-3", children: [
|
|
6845
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react8.Cloud, { className: `h-5 w-5 ${isDark ? "text-sky-400" : "text-sky-600"}` }),
|
|
6846
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { children: [
|
|
6847
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: `font-medium text-sm ${isDark ? "text-gray-200" : ""}`, children: "Cloud Backup" }),
|
|
6848
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: `text-xs ${isDark ? "text-gray-400" : "text-gray-600"}`, children: "Store encrypted backup in cloud storage" })
|
|
7120
6849
|
] })
|
|
7121
6850
|
] }),
|
|
7122
|
-
cloudProviders.length > 1 && /* @__PURE__ */ (0,
|
|
6851
|
+
cloudProviders.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "mb-3", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
7123
6852
|
"select",
|
|
7124
6853
|
{
|
|
7125
6854
|
value: selectedCloudProvider || "",
|
|
7126
6855
|
onChange: (e) => setSelectedCloudProvider(e.target.value),
|
|
7127
|
-
className:
|
|
7128
|
-
children: cloudProviders.map((provider) => /* @__PURE__ */ (0,
|
|
6856
|
+
className: `text-sm border rounded px-2 py-1 w-full ${isDark ? "bg-gray-800 border-gray-700 text-gray-200" : ""}`,
|
|
6857
|
+
children: cloudProviders.map((provider) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("option", { value: provider.id, disabled: !provider.available, children: [
|
|
7129
6858
|
provider.name,
|
|
7130
6859
|
" ",
|
|
7131
6860
|
provider.available ? "" : "(Not Available)"
|
|
7132
6861
|
] }, provider.id))
|
|
7133
6862
|
}
|
|
7134
6863
|
) }),
|
|
7135
|
-
/* @__PURE__ */ (0,
|
|
6864
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
7136
6865
|
Button,
|
|
7137
6866
|
{
|
|
7138
6867
|
onClick: () => handleBackup("cloud"),
|
|
@@ -7141,17 +6870,17 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
7141
6870
|
children: loading.cloud ? "Creating..." : useCustomPassword ? "Create with Password" : "Create with Passkey"
|
|
7142
6871
|
}
|
|
7143
6872
|
),
|
|
7144
|
-
/* @__PURE__ */ (0,
|
|
6873
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("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)}` })
|
|
7145
6874
|
] }),
|
|
7146
|
-
/* @__PURE__ */ (0,
|
|
7147
|
-
/* @__PURE__ */ (0,
|
|
7148
|
-
/* @__PURE__ */ (0,
|
|
7149
|
-
/* @__PURE__ */ (0,
|
|
7150
|
-
/* @__PURE__ */ (0,
|
|
7151
|
-
/* @__PURE__ */ (0,
|
|
6875
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: `p-4 rounded-lg border ${isDark ? "border-purple-800/60 bg-purple-950/60" : "border-purple-200 bg-purple-50/50"}`, children: [
|
|
6876
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex items-center gap-3 mb-3", children: [
|
|
6877
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react8.Download, { className: `h-5 w-5 ${isDark ? "text-purple-400" : "text-purple-600"}` }),
|
|
6878
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { children: [
|
|
6879
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: `font-medium text-sm ${isDark ? "text-gray-200" : ""}`, children: "File Backup" }),
|
|
6880
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: `text-xs ${isDark ? "text-gray-400" : "text-gray-600"}`, children: "Download encrypted backup file to your device" })
|
|
7152
6881
|
] })
|
|
7153
6882
|
] }),
|
|
7154
|
-
/* @__PURE__ */ (0,
|
|
6883
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
7155
6884
|
Button,
|
|
7156
6885
|
{
|
|
7157
6886
|
onClick: () => handleBackup("local"),
|
|
@@ -7160,18 +6889,18 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
7160
6889
|
children: loading.local ? "Creating..." : useCustomPassword ? "Create & Download" : "Create & Download with Passkey"
|
|
7161
6890
|
}
|
|
7162
6891
|
),
|
|
7163
|
-
/* @__PURE__ */ (0,
|
|
6892
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: `text-xs mt-2 ${isDark ? "text-gray-400" : "text-gray-600"}`, children: [
|
|
7164
6893
|
"Download encrypted backup file to your device \u2022 Last: ",
|
|
7165
6894
|
formatLastBackup(backupStatus.local.lastBackup)
|
|
7166
6895
|
] })
|
|
7167
6896
|
] })
|
|
7168
6897
|
] }),
|
|
7169
|
-
/* @__PURE__ */ (0,
|
|
7170
|
-
/* @__PURE__ */ (0,
|
|
7171
|
-
/* @__PURE__ */ (0,
|
|
7172
|
-
/* @__PURE__ */ (0,
|
|
7173
|
-
/* @__PURE__ */ (0,
|
|
7174
|
-
useCustomPassword ? /* @__PURE__ */ (0,
|
|
6898
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("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: [
|
|
6899
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react8.Lock, { className: "h-4 w-4 mt-0.5 flex-shrink-0" }),
|
|
6900
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { children: [
|
|
6901
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "font-medium", children: "Security Notice" }),
|
|
6902
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "mt-1", children: [
|
|
6903
|
+
useCustomPassword ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_jsx_runtime22.Fragment, { children: "All backups are encrypted with AES-256 using your custom password. Store your password securely - without it, backups cannot be restored." }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_jsx_runtime22.Fragment, { children: "All backups are encrypted with AES-256 using your passkey. Your passkey authenticator (device/biometrics) is required to restore backups." }),
|
|
7175
6904
|
" ",
|
|
7176
6905
|
"Without backup access, you cannot recover your smart account if you lose this device."
|
|
7177
6906
|
] })
|
|
@@ -7183,16 +6912,16 @@ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
|
|
|
7183
6912
|
|
|
7184
6913
|
// src/internal/components/TransactionsModal.tsx
|
|
7185
6914
|
var import_react13 = __toESM(require("react"), 1);
|
|
7186
|
-
var
|
|
6915
|
+
var import_lucide_react9 = require("lucide-react");
|
|
7187
6916
|
init_base();
|
|
7188
|
-
var
|
|
6917
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
7189
6918
|
var TransactionsModal = ({ open, onOpenChange, onBack }) => {
|
|
7190
6919
|
const { address } = useLumiaSession();
|
|
7191
6920
|
const [transactions, setTransactions] = import_react13.default.useState([]);
|
|
7192
6921
|
const [loading, setLoading] = import_react13.default.useState(false);
|
|
7193
6922
|
const [error, setError] = import_react13.default.useState(null);
|
|
7194
6923
|
const { config } = useLumiaPassportConfig();
|
|
7195
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
6924
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
7196
6925
|
const loadTransactions = import_react13.default.useCallback(async () => {
|
|
7197
6926
|
if (!address) return;
|
|
7198
6927
|
setLoading(true);
|
|
@@ -7235,98 +6964,98 @@ var TransactionsModal = ({ open, onOpenChange, onBack }) => {
|
|
|
7235
6964
|
}
|
|
7236
6965
|
};
|
|
7237
6966
|
const getStatusIcon = (status) => {
|
|
7238
|
-
return status === "ok" ? /* @__PURE__ */ (0,
|
|
6967
|
+
return status === "ok" ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.CheckCircle2, { className: "w-4 h-4 text-green-500" }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.XCircle, { className: "w-4 h-4 text-red-500" });
|
|
7239
6968
|
};
|
|
7240
6969
|
const getTransactionIcon = (from, to) => {
|
|
7241
6970
|
const isIncoming = to.toLowerCase() === address?.toLowerCase();
|
|
7242
|
-
return isIncoming ? /* @__PURE__ */ (0,
|
|
6971
|
+
return isIncoming ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.ArrowDownRight, { className: "w-4 h-4 text-green-500" }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.ArrowUpRight, { className: "w-4 h-4 text-blue-500" });
|
|
7243
6972
|
};
|
|
7244
6973
|
const openInExplorer = (txHash) => {
|
|
7245
6974
|
const explorerUrl = getExplorerUrl();
|
|
7246
6975
|
window.open(`${explorerUrl}/tx/${txHash}`, "_blank");
|
|
7247
6976
|
};
|
|
7248
|
-
return /* @__PURE__ */ (0,
|
|
7249
|
-
/* @__PURE__ */ (0,
|
|
7250
|
-
/* @__PURE__ */ (0,
|
|
7251
|
-
/* @__PURE__ */ (0,
|
|
7252
|
-
onBack && /* @__PURE__ */ (0,
|
|
6977
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(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: [
|
|
6978
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DialogTitle, { children: "Transaction History" }) }),
|
|
6979
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DialogDescription, { className: "sr-only", children: "View your transaction history" }),
|
|
6980
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
6981
|
+
onBack && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
7253
6982
|
"button",
|
|
7254
6983
|
{
|
|
7255
6984
|
onClick: onBack,
|
|
7256
6985
|
className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
|
|
7257
6986
|
title: "Back",
|
|
7258
|
-
children: /* @__PURE__ */ (0,
|
|
6987
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.ArrowLeft, { className: "h-4 w-4" })
|
|
7259
6988
|
}
|
|
7260
6989
|
),
|
|
7261
|
-
/* @__PURE__ */ (0,
|
|
7262
|
-
/* @__PURE__ */ (0,
|
|
7263
|
-
/* @__PURE__ */ (0,
|
|
7264
|
-
/* @__PURE__ */ (0,
|
|
6990
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
|
|
6991
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.Activity, { className: "h-5 w-5" }),
|
|
6992
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { children: "Transaction History" }),
|
|
6993
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
7265
6994
|
"button",
|
|
7266
6995
|
{
|
|
7267
6996
|
onClick: loadTransactions,
|
|
7268
6997
|
disabled: loading,
|
|
7269
6998
|
className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1`,
|
|
7270
6999
|
title: "Refresh transactions",
|
|
7271
|
-
children: /* @__PURE__ */ (0,
|
|
7000
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.RefreshCw, { className: `h-4 w-4 ${loading ? "animate-spin" : ""}` })
|
|
7272
7001
|
}
|
|
7273
7002
|
)
|
|
7274
7003
|
] })
|
|
7275
7004
|
] }) }),
|
|
7276
|
-
/* @__PURE__ */ (0,
|
|
7277
|
-
/* @__PURE__ */ (0,
|
|
7278
|
-
/* @__PURE__ */ (0,
|
|
7279
|
-
] }) : transactions.length === 0 ? /* @__PURE__ */ (0,
|
|
7280
|
-
/* @__PURE__ */ (0,
|
|
7281
|
-
/* @__PURE__ */ (0,
|
|
7005
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "p-5 max-h-[60vh] overflow-y-auto", children: loading ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: `${theme.mutedText}`, children: "Loading transactions..." }) }) : error ? /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: `flex flex-col items-center justify-center py-8 ${isDark ? "text-red-400" : "text-red-500"}`, children: [
|
|
7006
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.XCircle, { className: "w-12 h-12 mb-2" }),
|
|
7007
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "text-center text-sm", children: error })
|
|
7008
|
+
] }) : transactions.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: `flex flex-col items-center justify-center py-8 ${theme.mutedText}`, children: [
|
|
7009
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.Activity, { className: `w-12 h-12 mb-2 ${isDark ? "text-gray-600" : "text-gray-300"}` }),
|
|
7010
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("p", { className: "text-center", children: [
|
|
7282
7011
|
"No transactions found",
|
|
7283
|
-
/* @__PURE__ */ (0,
|
|
7284
|
-
/* @__PURE__ */ (0,
|
|
7012
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("br", {}),
|
|
7013
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "text-xs mt-2", children: "Smart account transactions will appear here" })
|
|
7285
7014
|
] })
|
|
7286
|
-
] }) : /* @__PURE__ */ (0,
|
|
7015
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "space-y-3", children: transactions.map((tx) => {
|
|
7287
7016
|
const isIncoming = tx.to.hash.toLowerCase() === address?.toLowerCase();
|
|
7288
7017
|
const displayAddress = isIncoming ? tx.from.hash : tx.to.hash;
|
|
7289
|
-
return /* @__PURE__ */ (0,
|
|
7018
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
7290
7019
|
"div",
|
|
7291
7020
|
{
|
|
7292
7021
|
className: `${isDark ? "bg-gray-800 hover:bg-gray-700" : "bg-gray-50 hover:bg-gray-100"} rounded-xl p-4 transition-colors cursor-pointer`,
|
|
7293
7022
|
onClick: () => openInExplorer(tx.hash),
|
|
7294
7023
|
children: [
|
|
7295
|
-
/* @__PURE__ */ (0,
|
|
7296
|
-
/* @__PURE__ */ (0,
|
|
7024
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center justify-between mb-2", children: [
|
|
7025
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
7297
7026
|
getTransactionIcon(tx.from.hash, tx.to.hash),
|
|
7298
|
-
/* @__PURE__ */ (0,
|
|
7027
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: `font-medium ${theme.titleText}`, children: isIncoming ? "Received" : "Sent" }),
|
|
7299
7028
|
getStatusIcon(tx.status)
|
|
7300
7029
|
] }),
|
|
7301
|
-
/* @__PURE__ */ (0,
|
|
7030
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: `text-xs ${theme.mutedText}`, children: formatTime(tx.timestamp) })
|
|
7302
7031
|
] }),
|
|
7303
|
-
/* @__PURE__ */ (0,
|
|
7304
|
-
/* @__PURE__ */ (0,
|
|
7305
|
-
/* @__PURE__ */ (0,
|
|
7306
|
-
/* @__PURE__ */ (0,
|
|
7032
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-1 text-sm", children: [
|
|
7033
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex justify-between", children: [
|
|
7034
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: `${theme.bodyText}`, children: isIncoming ? "From:" : "To:" }),
|
|
7035
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { className: `font-mono ${theme.titleText}`, children: [
|
|
7307
7036
|
formatAddress(displayAddress),
|
|
7308
|
-
(isIncoming ? tx.from.is_contract : tx.to.is_contract) && /* @__PURE__ */ (0,
|
|
7037
|
+
(isIncoming ? tx.from.is_contract : tx.to.is_contract) && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: `text-xs ${isDark ? "text-blue-400" : "text-blue-600"} ml-1`, children: "(Contract)" })
|
|
7309
7038
|
] })
|
|
7310
7039
|
] }),
|
|
7311
|
-
/* @__PURE__ */ (0,
|
|
7312
|
-
/* @__PURE__ */ (0,
|
|
7313
|
-
/* @__PURE__ */ (0,
|
|
7040
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex justify-between", children: [
|
|
7041
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: `${theme.bodyText}`, children: "Value:" }),
|
|
7042
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { className: `font-semibold ${theme.titleText}`, children: [
|
|
7314
7043
|
formatValue(tx.value),
|
|
7315
7044
|
" LUMIA"
|
|
7316
7045
|
] })
|
|
7317
7046
|
] }),
|
|
7318
|
-
/* @__PURE__ */ (0,
|
|
7319
|
-
/* @__PURE__ */ (0,
|
|
7320
|
-
/* @__PURE__ */ (0,
|
|
7047
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex justify-between", children: [
|
|
7048
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: `${theme.bodyText}`, children: "Block:" }),
|
|
7049
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { className: `font-mono ${theme.titleText}`, children: [
|
|
7321
7050
|
"#",
|
|
7322
7051
|
tx.block_number
|
|
7323
7052
|
] })
|
|
7324
7053
|
] }),
|
|
7325
|
-
tx.method && /* @__PURE__ */ (0,
|
|
7326
|
-
/* @__PURE__ */ (0,
|
|
7327
|
-
/* @__PURE__ */ (0,
|
|
7054
|
+
tx.method && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex justify-between", children: [
|
|
7055
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: `${theme.bodyText}`, children: "Method:" }),
|
|
7056
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: `${isDark ? "text-blue-400" : "text-blue-600"} text-xs`, children: tx.method })
|
|
7328
7057
|
] }),
|
|
7329
|
-
tx.transaction_types && tx.transaction_types.length > 0 && /* @__PURE__ */ (0,
|
|
7058
|
+
tx.transaction_types && tx.transaction_types.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex flex-wrap gap-1 mt-2", children: tx.transaction_types.map((type, idx) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
7330
7059
|
"span",
|
|
7331
7060
|
{
|
|
7332
7061
|
className: `text-xs ${isDark ? "bg-blue-900/30 text-blue-300" : "bg-blue-100 text-blue-800"} px-2 py-0.5 rounded-full`,
|
|
@@ -7340,7 +7069,7 @@ var TransactionsModal = ({ open, onOpenChange, onBack }) => {
|
|
|
7340
7069
|
tx.hash
|
|
7341
7070
|
);
|
|
7342
7071
|
}) }) }),
|
|
7343
|
-
transactions.length > 0 && /* @__PURE__ */ (0,
|
|
7072
|
+
transactions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: `p-5 border-t ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
|
|
7344
7073
|
"Total: ",
|
|
7345
7074
|
transactions.length,
|
|
7346
7075
|
" transaction",
|
|
@@ -7514,15 +7243,15 @@ function useTokenBalance(tokenAddress, userAddress) {
|
|
|
7514
7243
|
}
|
|
7515
7244
|
|
|
7516
7245
|
// src/internal/components/ViewAssetsModal.tsx
|
|
7517
|
-
var
|
|
7246
|
+
var import_lucide_react10 = require("lucide-react");
|
|
7518
7247
|
init_base();
|
|
7519
|
-
var
|
|
7248
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
7520
7249
|
var ViewAssetsModal = ({ open, onOpenChange, onBack }) => {
|
|
7521
7250
|
const { address } = useLumiaSession();
|
|
7522
7251
|
const { assets, refreshBalances, isLoading } = useAssets(address);
|
|
7523
7252
|
const [copied, setCopied] = import_react15.default.useState(null);
|
|
7524
7253
|
const { config } = useLumiaPassportConfig();
|
|
7525
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
7254
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
7526
7255
|
const handleCopy = async (text, type) => {
|
|
7527
7256
|
try {
|
|
7528
7257
|
await navigator.clipboard.writeText(text);
|
|
@@ -7535,107 +7264,107 @@ var ViewAssetsModal = ({ open, onOpenChange, onBack }) => {
|
|
|
7535
7264
|
const openInExplorer = (address2) => {
|
|
7536
7265
|
window.open(`${LUMIA_EXPLORER_URL}/address/${address2}`, "_blank");
|
|
7537
7266
|
};
|
|
7538
|
-
return /* @__PURE__ */ (0,
|
|
7539
|
-
/* @__PURE__ */ (0,
|
|
7540
|
-
/* @__PURE__ */ (0,
|
|
7541
|
-
/* @__PURE__ */ (0,
|
|
7542
|
-
onBack && /* @__PURE__ */ (0,
|
|
7267
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(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: [
|
|
7268
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(DialogTitle, { children: "View Assets" }) }),
|
|
7269
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(DialogDescription, { className: "sr-only", children: "View your token balances and assets" }),
|
|
7270
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
7271
|
+
onBack && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
7543
7272
|
"button",
|
|
7544
7273
|
{
|
|
7545
7274
|
onClick: onBack,
|
|
7546
7275
|
className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
|
|
7547
7276
|
title: "Back",
|
|
7548
|
-
children: /* @__PURE__ */ (0,
|
|
7277
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.ArrowLeft, { className: "h-4 w-4" })
|
|
7549
7278
|
}
|
|
7550
7279
|
),
|
|
7551
|
-
/* @__PURE__ */ (0,
|
|
7552
|
-
/* @__PURE__ */ (0,
|
|
7553
|
-
/* @__PURE__ */ (0,
|
|
7554
|
-
/* @__PURE__ */ (0,
|
|
7280
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
|
|
7281
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.Gem, { className: "h-5 w-5" }),
|
|
7282
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { children: "Your Assets" }),
|
|
7283
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
7555
7284
|
"button",
|
|
7556
7285
|
{
|
|
7557
7286
|
onClick: refreshBalances,
|
|
7558
7287
|
disabled: isLoading,
|
|
7559
7288
|
className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1`,
|
|
7560
7289
|
title: "Refresh balances",
|
|
7561
|
-
children: /* @__PURE__ */ (0,
|
|
7290
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.RefreshCw, { className: `h-4 w-4 ${isLoading ? "animate-spin" : ""}` })
|
|
7562
7291
|
}
|
|
7563
7292
|
)
|
|
7564
7293
|
] })
|
|
7565
7294
|
] }) }),
|
|
7566
|
-
/* @__PURE__ */ (0,
|
|
7567
|
-
/* @__PURE__ */ (0,
|
|
7568
|
-
/* @__PURE__ */ (0,
|
|
7569
|
-
] }) : /* @__PURE__ */ (0,
|
|
7570
|
-
/* @__PURE__ */ (0,
|
|
7571
|
-
/* @__PURE__ */ (0,
|
|
7572
|
-
/* @__PURE__ */ (0,
|
|
7573
|
-
/* @__PURE__ */ (0,
|
|
7574
|
-
/* @__PURE__ */ (0,
|
|
7575
|
-
/* @__PURE__ */ (0,
|
|
7295
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "p-5 max-h-[60vh] overflow-y-auto", children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `${theme.mutedText}`, children: "Loading assets..." }) }) : assets.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: `flex flex-col items-center justify-center py-8 ${theme.mutedText}`, children: [
|
|
7296
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.Gem, { className: `w-12 h-12 mb-2 ${isDark ? "text-gray-600" : "text-gray-300"}` }),
|
|
7297
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { children: "No assets found" })
|
|
7298
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "space-y-3", children: assets.map((asset, index) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: `${isDark ? "bg-gray-800 hover:bg-gray-700" : "bg-gray-50 hover:bg-gray-100"} rounded-xl p-4 transition-colors`, children: [
|
|
7299
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center justify-between mb-2", children: [
|
|
7300
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-3", children: [
|
|
7301
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("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__ */ (0, import_jsx_runtime24.jsx)("span", { className: "text-white font-bold text-sm", children: asset.symbol.charAt(0) }) }),
|
|
7302
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { children: [
|
|
7303
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `font-medium ${theme.titleText}`, children: asset.name }),
|
|
7304
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: asset.symbol })
|
|
7576
7305
|
] })
|
|
7577
7306
|
] }),
|
|
7578
|
-
/* @__PURE__ */ (0,
|
|
7579
|
-
/* @__PURE__ */ (0,
|
|
7580
|
-
/* @__PURE__ */ (0,
|
|
7307
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "text-right", children: [
|
|
7308
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `font-mono ${theme.titleText}`, children: asset.formattedBalance }),
|
|
7309
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: asset.symbol })
|
|
7581
7310
|
] })
|
|
7582
7311
|
] }),
|
|
7583
|
-
asset.address && /* @__PURE__ */ (0,
|
|
7584
|
-
/* @__PURE__ */ (0,
|
|
7585
|
-
/* @__PURE__ */ (0,
|
|
7586
|
-
/* @__PURE__ */ (0,
|
|
7587
|
-
/* @__PURE__ */ (0,
|
|
7588
|
-
/* @__PURE__ */ (0,
|
|
7312
|
+
asset.address && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: `space-y-2 mt-3 pt-3 border-t ${theme.divider}`, children: [
|
|
7313
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center justify-between text-sm", children: [
|
|
7314
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `${theme.bodyText}`, children: "Contract Address:" }),
|
|
7315
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
7316
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `font-mono ${theme.titleText} text-xs`, children: `${asset.address.slice(0, 6)}...${asset.address.slice(-4)}` }),
|
|
7317
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
7589
7318
|
"button",
|
|
7590
7319
|
{
|
|
7591
7320
|
onClick: () => handleCopy(asset.address, "address"),
|
|
7592
7321
|
className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
|
|
7593
7322
|
title: "Copy address",
|
|
7594
|
-
children: copied === "address" ? /* @__PURE__ */ (0,
|
|
7323
|
+
children: copied === "address" ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `${isDark ? "text-green-400" : "text-green-500"} text-xs`, children: "\u2713" }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.Copy, { className: "w-3 h-3" })
|
|
7595
7324
|
}
|
|
7596
7325
|
),
|
|
7597
|
-
/* @__PURE__ */ (0,
|
|
7326
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
7598
7327
|
"button",
|
|
7599
7328
|
{
|
|
7600
7329
|
onClick: () => openInExplorer(asset.address),
|
|
7601
7330
|
className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
|
|
7602
7331
|
title: "View in explorer",
|
|
7603
|
-
children: /* @__PURE__ */ (0,
|
|
7332
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.ExternalLink, { className: "w-3 h-3" })
|
|
7604
7333
|
}
|
|
7605
7334
|
)
|
|
7606
7335
|
] })
|
|
7607
7336
|
] }),
|
|
7608
|
-
asset.decimals && /* @__PURE__ */ (0,
|
|
7609
|
-
/* @__PURE__ */ (0,
|
|
7610
|
-
/* @__PURE__ */ (0,
|
|
7337
|
+
asset.decimals && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center justify-between text-sm", children: [
|
|
7338
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `${theme.bodyText}`, children: "Decimals:" }),
|
|
7339
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `${theme.titleText}`, children: asset.decimals })
|
|
7611
7340
|
] })
|
|
7612
7341
|
] }),
|
|
7613
|
-
asset.type === "native" && address && /* @__PURE__ */ (0,
|
|
7614
|
-
/* @__PURE__ */ (0,
|
|
7615
|
-
/* @__PURE__ */ (0,
|
|
7616
|
-
/* @__PURE__ */ (0,
|
|
7617
|
-
/* @__PURE__ */ (0,
|
|
7342
|
+
asset.type === "native" && address && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "mt-3 pt-3 border-t border-gray-200", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center justify-between text-sm", children: [
|
|
7343
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `${theme.bodyText}`, children: "Your Address:" }),
|
|
7344
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
7345
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `font-mono ${theme.titleText} text-xs`, children: `${address.slice(0, 6)}...${address.slice(-4)}` }),
|
|
7346
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
7618
7347
|
"button",
|
|
7619
7348
|
{
|
|
7620
7349
|
onClick: () => handleCopy(address, "wallet"),
|
|
7621
7350
|
className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
|
|
7622
7351
|
title: "Copy wallet address",
|
|
7623
|
-
children: copied === "wallet" ? /* @__PURE__ */ (0,
|
|
7352
|
+
children: copied === "wallet" ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `${isDark ? "text-green-400" : "text-green-500"} text-xs`, children: "\u2713" }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.Copy, { className: "w-3 h-3" })
|
|
7624
7353
|
}
|
|
7625
7354
|
),
|
|
7626
|
-
/* @__PURE__ */ (0,
|
|
7355
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
7627
7356
|
"button",
|
|
7628
7357
|
{
|
|
7629
7358
|
onClick: () => openInExplorer(address),
|
|
7630
7359
|
className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
|
|
7631
7360
|
title: "View in explorer",
|
|
7632
|
-
children: /* @__PURE__ */ (0,
|
|
7361
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.ExternalLink, { className: "w-3 h-3" })
|
|
7633
7362
|
}
|
|
7634
7363
|
)
|
|
7635
7364
|
] })
|
|
7636
7365
|
] }) })
|
|
7637
7366
|
] }, `${asset.type}-${asset.address || "native"}-${index}`)) }) }),
|
|
7638
|
-
assets.length > 0 && /* @__PURE__ */ (0,
|
|
7367
|
+
assets.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `p-5 border-t ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
|
|
7639
7368
|
"Total: ",
|
|
7640
7369
|
assets.length,
|
|
7641
7370
|
" asset",
|
|
@@ -7646,7 +7375,7 @@ var ViewAssetsModal = ({ open, onOpenChange, onBack }) => {
|
|
|
7646
7375
|
|
|
7647
7376
|
// src/internal/components/SendModal.tsx
|
|
7648
7377
|
var import_react17 = require("react");
|
|
7649
|
-
var
|
|
7378
|
+
var import_lucide_react13 = require("lucide-react");
|
|
7650
7379
|
|
|
7651
7380
|
// src/hooks/useSendTransaction.ts
|
|
7652
7381
|
var import_react16 = require("react");
|
|
@@ -7713,8 +7442,8 @@ var import_viem6 = require("viem");
|
|
|
7713
7442
|
var import_wagmi7 = require("wagmi");
|
|
7714
7443
|
|
|
7715
7444
|
// src/internal/components/UserOpStatus.tsx
|
|
7716
|
-
var
|
|
7717
|
-
var
|
|
7445
|
+
var React23 = __toESM(require("react"), 1);
|
|
7446
|
+
var import_lucide_react12 = require("lucide-react");
|
|
7718
7447
|
|
|
7719
7448
|
// src/internal/components/ui/badge.tsx
|
|
7720
7449
|
var import_class_variance_authority2 = require("class-variance-authority");
|
|
@@ -7727,7 +7456,7 @@ function cn2(...inputs) {
|
|
|
7727
7456
|
}
|
|
7728
7457
|
|
|
7729
7458
|
// src/internal/components/ui/badge.tsx
|
|
7730
|
-
var
|
|
7459
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
7731
7460
|
var badgeVariants = (0, import_class_variance_authority2.cva)(
|
|
7732
7461
|
"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",
|
|
7733
7462
|
{
|
|
@@ -7747,13 +7476,13 @@ var badgeVariants = (0, import_class_variance_authority2.cva)(
|
|
|
7747
7476
|
}
|
|
7748
7477
|
);
|
|
7749
7478
|
function Badge({ className, variant, ...props }) {
|
|
7750
|
-
return /* @__PURE__ */ (0,
|
|
7479
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: cn2(badgeVariants({ variant }), className), ...props });
|
|
7751
7480
|
}
|
|
7752
7481
|
|
|
7753
7482
|
// src/internal/components/Address.tsx
|
|
7754
|
-
var
|
|
7755
|
-
var
|
|
7756
|
-
var
|
|
7483
|
+
var React22 = __toESM(require("react"), 1);
|
|
7484
|
+
var import_lucide_react11 = require("lucide-react");
|
|
7485
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
7757
7486
|
function toExplorerAddressUrl(address, chain) {
|
|
7758
7487
|
const base2 = chain?.blockExplorers?.default?.url;
|
|
7759
7488
|
if (!base2) return null;
|
|
@@ -7774,12 +7503,12 @@ var Address = ({
|
|
|
7774
7503
|
}) => {
|
|
7775
7504
|
const addr = address || "";
|
|
7776
7505
|
const explorer = toExplorerAddressUrl(addr, chain || void 0);
|
|
7777
|
-
const [copied, setCopied] =
|
|
7778
|
-
if (!addr) return /* @__PURE__ */ (0,
|
|
7779
|
-
return /* @__PURE__ */ (0,
|
|
7780
|
-
label && /* @__PURE__ */ (0,
|
|
7781
|
-
/* @__PURE__ */ (0,
|
|
7782
|
-
showCopy && /* @__PURE__ */ (0,
|
|
7506
|
+
const [copied, setCopied] = React22.useState(false);
|
|
7507
|
+
if (!addr) return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: cn2("text-muted-foreground", className), children: "\u2014" });
|
|
7508
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: cn2("flex items-center gap-2", className), style: { listStyle: "none" }, children: [
|
|
7509
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "text-sm font-medium", children: label }),
|
|
7510
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("code", { className: "text-xs bg-background px-2 py-1 rounded select-all", children: truncate ? short(addr) : addr }),
|
|
7511
|
+
showCopy && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
7783
7512
|
Button,
|
|
7784
7513
|
{
|
|
7785
7514
|
variant: "ghost",
|
|
@@ -7793,10 +7522,10 @@ var Address = ({
|
|
|
7793
7522
|
} catch {
|
|
7794
7523
|
}
|
|
7795
7524
|
},
|
|
7796
|
-
children: /* @__PURE__ */ (0,
|
|
7525
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react11.Copy, { className: "h-4 w-4" })
|
|
7797
7526
|
}
|
|
7798
7527
|
),
|
|
7799
|
-
showExplorer && explorer && /* @__PURE__ */ (0,
|
|
7528
|
+
showExplorer && explorer && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
7800
7529
|
"a",
|
|
7801
7530
|
{
|
|
7802
7531
|
href: explorer,
|
|
@@ -7804,7 +7533,7 @@ var Address = ({
|
|
|
7804
7533
|
rel: "noreferrer noopener",
|
|
7805
7534
|
className: "inline-flex items-center justify-center h-10 w-10 rounded-md hover:bg-accent text-foreground",
|
|
7806
7535
|
title: "Open in explorer",
|
|
7807
|
-
children: /* @__PURE__ */ (0,
|
|
7536
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react11.ExternalLink, { className: "h-4 w-4" })
|
|
7808
7537
|
}
|
|
7809
7538
|
)
|
|
7810
7539
|
] });
|
|
@@ -7812,7 +7541,7 @@ var Address = ({
|
|
|
7812
7541
|
|
|
7813
7542
|
// src/internal/components/UserOpStatus.tsx
|
|
7814
7543
|
init_base();
|
|
7815
|
-
var
|
|
7544
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
7816
7545
|
var UserOpStatus = ({
|
|
7817
7546
|
userOpHash,
|
|
7818
7547
|
chain,
|
|
@@ -7823,20 +7552,20 @@ var UserOpStatus = ({
|
|
|
7823
7552
|
externalState
|
|
7824
7553
|
}) => {
|
|
7825
7554
|
const useExternalState = !!externalState;
|
|
7826
|
-
const [internalReceipt, setInternalReceipt] =
|
|
7827
|
-
const [internalMempool, setInternalMempool] =
|
|
7828
|
-
const [internalError, setInternalError] =
|
|
7829
|
-
const [attempt, setAttempt] =
|
|
7830
|
-
const [internalRefreshing, setInternalRefreshing] =
|
|
7831
|
-
const [timedOut, setTimedOut] =
|
|
7832
|
-
const [rejected, setRejected] =
|
|
7833
|
-
const intervalRef =
|
|
7834
|
-
const startTimeRef =
|
|
7555
|
+
const [internalReceipt, setInternalReceipt] = React23.useState(null);
|
|
7556
|
+
const [internalMempool, setInternalMempool] = React23.useState(null);
|
|
7557
|
+
const [internalError, setInternalError] = React23.useState(null);
|
|
7558
|
+
const [attempt, setAttempt] = React23.useState(0);
|
|
7559
|
+
const [internalRefreshing, setInternalRefreshing] = React23.useState(false);
|
|
7560
|
+
const [timedOut, setTimedOut] = React23.useState(false);
|
|
7561
|
+
const [rejected, setRejected] = React23.useState(false);
|
|
7562
|
+
const intervalRef = React23.useRef(null);
|
|
7563
|
+
const startTimeRef = React23.useRef(Date.now());
|
|
7835
7564
|
const receipt = useExternalState ? externalState.receipt ?? null : internalReceipt;
|
|
7836
7565
|
const mempool = useExternalState ? externalState.mempool ?? null : internalMempool;
|
|
7837
7566
|
const error = useExternalState ? externalState.error ?? null : internalError;
|
|
7838
7567
|
const refreshing = useExternalState ? externalState.isPolling ?? false : internalRefreshing;
|
|
7839
|
-
const rpc =
|
|
7568
|
+
const rpc = React23.useCallback(async (method, params) => {
|
|
7840
7569
|
const body = { jsonrpc: "2.0", id: 1, method, params };
|
|
7841
7570
|
const res = await fetch(getBundlerUrl(), {
|
|
7842
7571
|
method: "POST",
|
|
@@ -7847,14 +7576,14 @@ var UserOpStatus = ({
|
|
|
7847
7576
|
if (json.error) throw new Error(json.error.message || JSON.stringify(json.error));
|
|
7848
7577
|
return json.result;
|
|
7849
7578
|
}, []);
|
|
7850
|
-
const extractMempoolInfo =
|
|
7579
|
+
const extractMempoolInfo = React23.useCallback((m) => {
|
|
7851
7580
|
if (!m) return null;
|
|
7852
7581
|
const entryPoint = m.entryPoint || m?.userOperation?.entryPoint || null;
|
|
7853
7582
|
const sender = m.sender || m?.userOperation?.sender || null;
|
|
7854
7583
|
if (!entryPoint && !sender) return null;
|
|
7855
7584
|
return { entryPoint, sender };
|
|
7856
7585
|
}, []);
|
|
7857
|
-
const tick =
|
|
7586
|
+
const tick = React23.useCallback(async () => {
|
|
7858
7587
|
if (useExternalState) return;
|
|
7859
7588
|
const elapsed = Date.now() - startTimeRef.current;
|
|
7860
7589
|
if (elapsed > maxPollTimeMs) {
|
|
@@ -7898,7 +7627,7 @@ var UserOpStatus = ({
|
|
|
7898
7627
|
setAttempt((x) => x + 1);
|
|
7899
7628
|
}
|
|
7900
7629
|
}, [rpc, userOpHash, maxPollTimeMs, extractMempoolInfo, useExternalState]);
|
|
7901
|
-
|
|
7630
|
+
React23.useEffect(() => {
|
|
7902
7631
|
if (useExternalState) return;
|
|
7903
7632
|
console.log("[UserOpStatus] Initializing polling for UserOp hash:", userOpHash);
|
|
7904
7633
|
startTimeRef.current = Date.now();
|
|
@@ -7910,7 +7639,7 @@ var UserOpStatus = ({
|
|
|
7910
7639
|
setAttempt(0);
|
|
7911
7640
|
setInternalRefreshing(false);
|
|
7912
7641
|
}, [userOpHash, useExternalState]);
|
|
7913
|
-
|
|
7642
|
+
React23.useEffect(() => {
|
|
7914
7643
|
if (useExternalState) {
|
|
7915
7644
|
console.log("[UserOpStatus] Using external state, skipping internal polling");
|
|
7916
7645
|
return;
|
|
@@ -7945,54 +7674,54 @@ var UserOpStatus = ({
|
|
|
7945
7674
|
const stateBadge = () => {
|
|
7946
7675
|
if (receipt) {
|
|
7947
7676
|
const ok = !!receipt.success;
|
|
7948
|
-
return /* @__PURE__ */ (0,
|
|
7949
|
-
ok ? /* @__PURE__ */ (0,
|
|
7677
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Badge, { variant: ok ? "success" : "destructive", className: "gap-1", children: [
|
|
7678
|
+
ok ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.CheckCircle2, { className: "h-3 w-3" }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.AlertCircle, { className: "h-3 w-3" }),
|
|
7950
7679
|
ok ? "Included" : "Failed"
|
|
7951
7680
|
] });
|
|
7952
7681
|
}
|
|
7953
7682
|
if (rejected) {
|
|
7954
|
-
return /* @__PURE__ */ (0,
|
|
7955
|
-
/* @__PURE__ */ (0,
|
|
7683
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Badge, { variant: "destructive", className: "gap-1", children: [
|
|
7684
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.AlertCircle, { className: "h-3 w-3" }),
|
|
7956
7685
|
" Rejected by bundler"
|
|
7957
7686
|
] });
|
|
7958
7687
|
}
|
|
7959
7688
|
if (timedOut) {
|
|
7960
|
-
return /* @__PURE__ */ (0,
|
|
7961
|
-
/* @__PURE__ */ (0,
|
|
7689
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Badge, { variant: "warning", className: "gap-1", children: [
|
|
7690
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.AlertCircle, { className: "h-3 w-3" }),
|
|
7962
7691
|
" Timeout - may be rejected"
|
|
7963
7692
|
] });
|
|
7964
7693
|
}
|
|
7965
7694
|
if (mempool) {
|
|
7966
|
-
return /* @__PURE__ */ (0,
|
|
7967
|
-
/* @__PURE__ */ (0,
|
|
7695
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Badge, { variant: "outline", className: "gap-1", children: [
|
|
7696
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.Clock, { className: "h-3 w-3" }),
|
|
7968
7697
|
" Pending in bundler"
|
|
7969
7698
|
] });
|
|
7970
7699
|
}
|
|
7971
|
-
return /* @__PURE__ */ (0,
|
|
7972
|
-
/* @__PURE__ */ (0,
|
|
7700
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Badge, { variant: "secondary", className: "gap-1", children: [
|
|
7701
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.Clock, { className: "h-3 w-3" }),
|
|
7973
7702
|
" Waiting"
|
|
7974
7703
|
] });
|
|
7975
7704
|
};
|
|
7976
|
-
return /* @__PURE__ */ (0,
|
|
7705
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
7977
7706
|
"div",
|
|
7978
7707
|
{
|
|
7979
7708
|
className: cn2("lumia-scope bg-card text-card-foreground p-0 rounded-xl border border-border w-full max-w-[680px]", className),
|
|
7980
7709
|
style: { textAlign: "left", listStyle: "none" },
|
|
7981
7710
|
children: [
|
|
7982
|
-
/* @__PURE__ */ (0,
|
|
7983
|
-
/* @__PURE__ */ (0,
|
|
7711
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-center justify-between mb-3", children: [
|
|
7712
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
7984
7713
|
stateBadge(),
|
|
7985
|
-
/* @__PURE__ */ (0,
|
|
7714
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "text-xs text-muted-foreground", children: "This is a UserOperation hash (EIP-4337), not a L2 tx hash." })
|
|
7986
7715
|
] }),
|
|
7987
|
-
/* @__PURE__ */ (0,
|
|
7988
|
-
/* @__PURE__ */ (0,
|
|
7989
|
-
/* @__PURE__ */ (0,
|
|
7716
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Button, { variant: "ghost", size: "sm", onClick: () => tick(), disabled: refreshing, className: "h-8", children: [
|
|
7717
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.RefreshCw, { className: cn2("h-3.5 w-3.5 mr-1", refreshing && "animate-spin") }),
|
|
7718
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "text-xs", children: "Refresh" })
|
|
7990
7719
|
] })
|
|
7991
7720
|
] }),
|
|
7992
|
-
/* @__PURE__ */ (0,
|
|
7993
|
-
/* @__PURE__ */ (0,
|
|
7994
|
-
/* @__PURE__ */ (0,
|
|
7995
|
-
/* @__PURE__ */ (0,
|
|
7721
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [
|
|
7722
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "UO Hash" }),
|
|
7723
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("code", { className: "text-xs font-mono flex-1 select-all", children: userOpHash }),
|
|
7724
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
7996
7725
|
Button,
|
|
7997
7726
|
{
|
|
7998
7727
|
variant: "ghost",
|
|
@@ -8004,14 +7733,14 @@ var UserOpStatus = ({
|
|
|
8004
7733
|
} catch {
|
|
8005
7734
|
}
|
|
8006
7735
|
},
|
|
8007
|
-
children: /* @__PURE__ */ (0,
|
|
7736
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.Copy, { className: "h-3.5 w-3.5" })
|
|
8008
7737
|
}
|
|
8009
7738
|
)
|
|
8010
7739
|
] }),
|
|
8011
|
-
receipt && receipt.receipt?.transactionHash && /* @__PURE__ */ (0,
|
|
8012
|
-
/* @__PURE__ */ (0,
|
|
8013
|
-
/* @__PURE__ */ (0,
|
|
8014
|
-
/* @__PURE__ */ (0,
|
|
7740
|
+
receipt && receipt.receipt?.transactionHash && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-center gap-2 mb-3", children: [
|
|
7741
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "Tx Hash" }),
|
|
7742
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("code", { className: "text-xs font-mono flex-1 select-all", children: receipt.receipt.transactionHash }),
|
|
7743
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
8015
7744
|
Button,
|
|
8016
7745
|
{
|
|
8017
7746
|
variant: "ghost",
|
|
@@ -8023,10 +7752,10 @@ var UserOpStatus = ({
|
|
|
8023
7752
|
} catch {
|
|
8024
7753
|
}
|
|
8025
7754
|
},
|
|
8026
|
-
children: /* @__PURE__ */ (0,
|
|
7755
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.Copy, { className: "h-3.5 w-3.5" })
|
|
8027
7756
|
}
|
|
8028
7757
|
),
|
|
8029
|
-
chain?.blockExplorers?.default?.url && /* @__PURE__ */ (0,
|
|
7758
|
+
chain?.blockExplorers?.default?.url && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
8030
7759
|
"a",
|
|
8031
7760
|
{
|
|
8032
7761
|
href: `${chain.blockExplorers.default.url}/tx/${receipt.receipt.transactionHash}`,
|
|
@@ -8034,11 +7763,11 @@ var UserOpStatus = ({
|
|
|
8034
7763
|
rel: "noreferrer noopener",
|
|
8035
7764
|
className: "inline-flex items-center justify-center h-8 w-8 rounded-md hover:bg-accent text-foreground",
|
|
8036
7765
|
title: "Open in explorer",
|
|
8037
|
-
children: /* @__PURE__ */ (0,
|
|
7766
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.ExternalLink, { className: "h-3.5 w-3.5" })
|
|
8038
7767
|
}
|
|
8039
7768
|
)
|
|
8040
7769
|
] }),
|
|
8041
|
-
receipt && /* @__PURE__ */ (0,
|
|
7770
|
+
receipt && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "text-xs text-muted-foreground mb-3", children: [
|
|
8042
7771
|
"Block ",
|
|
8043
7772
|
parseInt(receipt.receipt?.blockNumber || "0x0", 16),
|
|
8044
7773
|
" \u2022 Gas Used",
|
|
@@ -8047,32 +7776,32 @@ var UserOpStatus = ({
|
|
|
8047
7776
|
" \u2022 Success ",
|
|
8048
7777
|
String(!!receipt.success)
|
|
8049
7778
|
] }),
|
|
8050
|
-
/* @__PURE__ */ (0,
|
|
7779
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "text-xs text-muted-foreground", children: !receipt && !timedOut && !rejected && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { className: "ml-2", children: [
|
|
8051
7780
|
"\u2022 Polling for ",
|
|
8052
7781
|
Math.round((Date.now() - startTimeRef.current) / 1e3),
|
|
8053
7782
|
"s"
|
|
8054
7783
|
] }) }),
|
|
8055
|
-
mempool && /* @__PURE__ */ (0,
|
|
8056
|
-
/* @__PURE__ */ (0,
|
|
7784
|
+
mempool && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "text-sm text-muted-foreground mt-2", style: { listStyle: "none" }, children: [
|
|
7785
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { children: [
|
|
8057
7786
|
"Seen by bundler at ",
|
|
8058
|
-
/* @__PURE__ */ (0,
|
|
7787
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Address, { address: mempool.entryPoint, chain, showExplorer: true, truncate: false })
|
|
8059
7788
|
] }),
|
|
8060
|
-
/* @__PURE__ */ (0,
|
|
7789
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { children: [
|
|
8061
7790
|
"sender ",
|
|
8062
|
-
/* @__PURE__ */ (0,
|
|
7791
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Address, { address: mempool.sender, chain, truncate: false })
|
|
8063
7792
|
] })
|
|
8064
7793
|
] }),
|
|
8065
|
-
error && /* @__PURE__ */ (0,
|
|
8066
|
-
/* @__PURE__ */ (0,
|
|
7794
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
|
|
7795
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.AlertCircle, { className: "h-4 w-4" }),
|
|
8067
7796
|
" ",
|
|
8068
7797
|
error
|
|
8069
7798
|
] }),
|
|
8070
|
-
rejected && /* @__PURE__ */ (0,
|
|
8071
|
-
/* @__PURE__ */ (0,
|
|
7799
|
+
rejected && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
|
|
7800
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.AlertCircle, { className: "h-4 w-4" }),
|
|
8072
7801
|
"UserOperation was dropped from bundler mempool. This usually means it was invalid or replaced."
|
|
8073
7802
|
] }),
|
|
8074
|
-
timedOut && /* @__PURE__ */ (0,
|
|
8075
|
-
/* @__PURE__ */ (0,
|
|
7803
|
+
timedOut && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
|
|
7804
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.AlertCircle, { className: "h-4 w-4" }),
|
|
8076
7805
|
"Stopped polling after ",
|
|
8077
7806
|
Math.round(maxPollTimeMs / 1e3),
|
|
8078
7807
|
"s. UserOperation may have been rejected by the bundler."
|
|
@@ -8084,7 +7813,7 @@ var UserOpStatus = ({
|
|
|
8084
7813
|
|
|
8085
7814
|
// src/internal/components/SendModal.tsx
|
|
8086
7815
|
init_base();
|
|
8087
|
-
var
|
|
7816
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
8088
7817
|
var SendModal = ({
|
|
8089
7818
|
open,
|
|
8090
7819
|
onOpenChange,
|
|
@@ -8095,7 +7824,7 @@ var SendModal = ({
|
|
|
8095
7824
|
const { address } = useLumiaSession();
|
|
8096
7825
|
const { assets } = useAssets(address);
|
|
8097
7826
|
const { config } = useLumiaPassportConfig();
|
|
8098
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
7827
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
8099
7828
|
const { sendTransaction, isLoading, error, userOpHash, reset } = useSendTransaction();
|
|
8100
7829
|
const { refetch: refetchBalance } = (0, import_wagmi7.useBalance)({
|
|
8101
7830
|
address,
|
|
@@ -8167,7 +7896,7 @@ var SendModal = ({
|
|
|
8167
7896
|
const maxAmount = Math.max(0, balance - 1e-3);
|
|
8168
7897
|
setAmount(maxAmount.toFixed(6));
|
|
8169
7898
|
};
|
|
8170
|
-
return /* @__PURE__ */ (0,
|
|
7899
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
8171
7900
|
DialogContent,
|
|
8172
7901
|
{
|
|
8173
7902
|
className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden max-h-[80vh] gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
|
|
@@ -8179,28 +7908,28 @@ var SendModal = ({
|
|
|
8179
7908
|
fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
|
|
8180
7909
|
},
|
|
8181
7910
|
children: [
|
|
8182
|
-
/* @__PURE__ */ (0,
|
|
8183
|
-
/* @__PURE__ */ (0,
|
|
8184
|
-
/* @__PURE__ */ (0,
|
|
8185
|
-
onBack && txStep === "input" && /* @__PURE__ */ (0,
|
|
7911
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(DialogTitle, { children: "Send Transaction" }) }),
|
|
7912
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(DialogDescription, { className: "sr-only", children: "Send LUMIA tokens to another address" }),
|
|
7913
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
7914
|
+
onBack && txStep === "input" && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
8186
7915
|
"button",
|
|
8187
7916
|
{
|
|
8188
7917
|
onClick: onBack,
|
|
8189
7918
|
className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
|
|
8190
7919
|
title: "Back",
|
|
8191
|
-
children: /* @__PURE__ */ (0,
|
|
7920
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.ArrowLeft, { className: "h-4 w-4" })
|
|
8192
7921
|
}
|
|
8193
7922
|
),
|
|
8194
|
-
/* @__PURE__ */ (0,
|
|
8195
|
-
/* @__PURE__ */ (0,
|
|
8196
|
-
/* @__PURE__ */ (0,
|
|
7923
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
|
|
7924
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Send, { className: "h-5 w-5" }),
|
|
7925
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { children: "Send LUMIA" })
|
|
8197
7926
|
] })
|
|
8198
7927
|
] }) }),
|
|
8199
|
-
/* @__PURE__ */ (0,
|
|
8200
|
-
txStep === "input" && /* @__PURE__ */ (0,
|
|
8201
|
-
/* @__PURE__ */ (0,
|
|
8202
|
-
/* @__PURE__ */ (0,
|
|
8203
|
-
/* @__PURE__ */ (0,
|
|
7928
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "p-5", children: [
|
|
7929
|
+
txStep === "input" && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-4", children: [
|
|
7930
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { children: [
|
|
7931
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { className: `block text-sm font-medium ${theme.bodyText} mb-2`, children: "Recipient Address" }),
|
|
7932
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
8204
7933
|
"input",
|
|
8205
7934
|
{
|
|
8206
7935
|
type: "text",
|
|
@@ -8211,17 +7940,17 @@ var SendModal = ({
|
|
|
8211
7940
|
}
|
|
8212
7941
|
)
|
|
8213
7942
|
] }),
|
|
8214
|
-
/* @__PURE__ */ (0,
|
|
8215
|
-
/* @__PURE__ */ (0,
|
|
8216
|
-
/* @__PURE__ */ (0,
|
|
8217
|
-
/* @__PURE__ */ (0,
|
|
7943
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { children: [
|
|
7944
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex justify-between items-center mb-2", children: [
|
|
7945
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { className: `text-sm font-medium ${theme.bodyText}`, children: "Amount" }),
|
|
7946
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: `text-sm ${theme.mutedText}`, children: [
|
|
8218
7947
|
"Balance: ",
|
|
8219
7948
|
balance.toFixed(4),
|
|
8220
7949
|
" LUMIA"
|
|
8221
7950
|
] })
|
|
8222
7951
|
] }),
|
|
8223
|
-
/* @__PURE__ */ (0,
|
|
8224
|
-
/* @__PURE__ */ (0,
|
|
7952
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "relative", children: [
|
|
7953
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
8225
7954
|
"input",
|
|
8226
7955
|
{
|
|
8227
7956
|
type: "number",
|
|
@@ -8232,7 +7961,7 @@ var SendModal = ({
|
|
|
8232
7961
|
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`
|
|
8233
7962
|
}
|
|
8234
7963
|
),
|
|
8235
|
-
/* @__PURE__ */ (0,
|
|
7964
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
8236
7965
|
"button",
|
|
8237
7966
|
{
|
|
8238
7967
|
onClick: handleMaxAmount,
|
|
@@ -8242,11 +7971,11 @@ var SendModal = ({
|
|
|
8242
7971
|
)
|
|
8243
7972
|
] })
|
|
8244
7973
|
] }),
|
|
8245
|
-
(validationError || error) && /* @__PURE__ */ (0,
|
|
8246
|
-
/* @__PURE__ */ (0,
|
|
8247
|
-
/* @__PURE__ */ (0,
|
|
7974
|
+
(validationError || error) && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("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: [
|
|
7975
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.AlertCircle, { className: "h-4 w-4" }),
|
|
7976
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "text-sm", children: validationError || error })
|
|
8248
7977
|
] }),
|
|
8249
|
-
/* @__PURE__ */ (0,
|
|
7978
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
8250
7979
|
Button,
|
|
8251
7980
|
{
|
|
8252
7981
|
onClick: handleSend,
|
|
@@ -8257,29 +7986,29 @@ var SendModal = ({
|
|
|
8257
7986
|
}
|
|
8258
7987
|
)
|
|
8259
7988
|
] }),
|
|
8260
|
-
txStep === "confirm" && /* @__PURE__ */ (0,
|
|
8261
|
-
/* @__PURE__ */ (0,
|
|
8262
|
-
/* @__PURE__ */ (0,
|
|
8263
|
-
/* @__PURE__ */ (0,
|
|
8264
|
-
/* @__PURE__ */ (0,
|
|
8265
|
-
/* @__PURE__ */ (0,
|
|
8266
|
-
/* @__PURE__ */ (0,
|
|
7989
|
+
txStep === "confirm" && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-4", children: [
|
|
7990
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: [
|
|
7991
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("h3", { className: `font-medium ${theme.titleText} mb-3`, children: "Transaction Details" }),
|
|
7992
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-2 text-sm", children: [
|
|
7993
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex justify-between", children: [
|
|
7994
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: `${theme.bodyText}`, children: "To:" }),
|
|
7995
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: `font-mono ${theme.titleText}`, children: `${recipient.slice(0, 6)}...${recipient.slice(-4)}` })
|
|
8267
7996
|
] }),
|
|
8268
|
-
/* @__PURE__ */ (0,
|
|
8269
|
-
/* @__PURE__ */ (0,
|
|
8270
|
-
/* @__PURE__ */ (0,
|
|
7997
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex justify-between", children: [
|
|
7998
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: `${theme.bodyText}`, children: "Amount:" }),
|
|
7999
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("span", { className: `font-semibold ${theme.titleText}`, children: [
|
|
8271
8000
|
amount,
|
|
8272
8001
|
" LUMIA"
|
|
8273
8002
|
] })
|
|
8274
8003
|
] }),
|
|
8275
|
-
/* @__PURE__ */ (0,
|
|
8276
|
-
/* @__PURE__ */ (0,
|
|
8277
|
-
/* @__PURE__ */ (0,
|
|
8004
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex justify-between", children: [
|
|
8005
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: `${theme.bodyText}`, children: "Network:" }),
|
|
8006
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: `${theme.titleText}`, children: "Lumia Beam" })
|
|
8278
8007
|
] })
|
|
8279
8008
|
] })
|
|
8280
8009
|
] }),
|
|
8281
|
-
/* @__PURE__ */ (0,
|
|
8282
|
-
/* @__PURE__ */ (0,
|
|
8010
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex gap-2", children: [
|
|
8011
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
8283
8012
|
Button,
|
|
8284
8013
|
{
|
|
8285
8014
|
onClick: () => setTxStep("input"),
|
|
@@ -8289,7 +8018,7 @@ var SendModal = ({
|
|
|
8289
8018
|
children: "Back"
|
|
8290
8019
|
}
|
|
8291
8020
|
),
|
|
8292
|
-
/* @__PURE__ */ (0,
|
|
8021
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
8293
8022
|
Button,
|
|
8294
8023
|
{
|
|
8295
8024
|
onClick: handleConfirm,
|
|
@@ -8297,28 +8026,28 @@ var SendModal = ({
|
|
|
8297
8026
|
className: "flex-1",
|
|
8298
8027
|
size: "lg",
|
|
8299
8028
|
children: [
|
|
8300
|
-
isLoading && /* @__PURE__ */ (0,
|
|
8029
|
+
isLoading && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Loader2, { className: "h-4 w-4 animate-spin" }),
|
|
8301
8030
|
"Confirm"
|
|
8302
8031
|
]
|
|
8303
8032
|
}
|
|
8304
8033
|
)
|
|
8305
8034
|
] })
|
|
8306
8035
|
] }),
|
|
8307
|
-
txStep === "pending" && /* @__PURE__ */ (0,
|
|
8308
|
-
/* @__PURE__ */ (0,
|
|
8309
|
-
/* @__PURE__ */ (0,
|
|
8310
|
-
/* @__PURE__ */ (0,
|
|
8311
|
-
/* @__PURE__ */ (0,
|
|
8036
|
+
txStep === "pending" && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "py-8 text-center space-y-4", children: [
|
|
8037
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Loader2, { className: `h-12 w-12 animate-spin ${isDark ? "text-blue-400" : "text-blue-600"} mx-auto` }),
|
|
8038
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { children: [
|
|
8039
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: `font-medium ${theme.titleText}`, children: "Transaction Pending" }),
|
|
8040
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: `text-sm ${theme.mutedText} mt-1`, children: "Please wait while we process your transaction" })
|
|
8312
8041
|
] })
|
|
8313
8042
|
] }),
|
|
8314
|
-
txStep === "success" && userOpHash && /* @__PURE__ */ (0,
|
|
8315
|
-
/* @__PURE__ */ (0,
|
|
8316
|
-
/* @__PURE__ */ (0,
|
|
8317
|
-
/* @__PURE__ */ (0,
|
|
8318
|
-
/* @__PURE__ */ (0,
|
|
8043
|
+
txStep === "success" && userOpHash && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-4", children: [
|
|
8044
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "text-center py-4", children: [
|
|
8045
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.CheckCircle2, { className: `h-12 w-12 ${isDark ? "text-green-400" : "text-green-500"} mx-auto mb-3` }),
|
|
8046
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: `font-medium ${theme.titleText}`, children: "Transaction Sent!" }),
|
|
8047
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: `text-sm ${theme.mutedText} mt-1`, children: "Your transaction is being processed" })
|
|
8319
8048
|
] }),
|
|
8320
|
-
/* @__PURE__ */ (0,
|
|
8321
|
-
/* @__PURE__ */ (0,
|
|
8049
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(UserOpStatus, { userOpHash, chain: lumiaBeam }) }),
|
|
8050
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
8322
8051
|
Button,
|
|
8323
8052
|
{
|
|
8324
8053
|
onClick: handleClose,
|
|
@@ -8336,9 +8065,9 @@ var SendModal = ({
|
|
|
8336
8065
|
|
|
8337
8066
|
// src/internal/components/ReceiveModal.tsx
|
|
8338
8067
|
var import_react18 = require("react");
|
|
8339
|
-
var
|
|
8068
|
+
var import_lucide_react14 = require("lucide-react");
|
|
8340
8069
|
var import_qrcode = __toESM(require("qrcode"), 1);
|
|
8341
|
-
var
|
|
8070
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
8342
8071
|
var ReceiveModal = ({
|
|
8343
8072
|
open,
|
|
8344
8073
|
onOpenChange,
|
|
@@ -8347,7 +8076,7 @@ var ReceiveModal = ({
|
|
|
8347
8076
|
const { address } = useLumiaSession();
|
|
8348
8077
|
const [qrCodeUrl, setQrCodeUrl] = (0, import_react18.useState)("");
|
|
8349
8078
|
const { config } = useLumiaPassportConfig();
|
|
8350
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
8079
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
8351
8080
|
const [copied, setCopied] = (0, import_react18.useState)(false);
|
|
8352
8081
|
(0, import_react18.useEffect)(() => {
|
|
8353
8082
|
if (open && address) {
|
|
@@ -8379,7 +8108,7 @@ var ReceiveModal = ({
|
|
|
8379
8108
|
if (!addr) return "";
|
|
8380
8109
|
return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
|
|
8381
8110
|
};
|
|
8382
|
-
return /* @__PURE__ */ (0,
|
|
8111
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
|
|
8383
8112
|
DialogContent,
|
|
8384
8113
|
{
|
|
8385
8114
|
className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden max-h-[80vh] gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
|
|
@@ -8391,51 +8120,51 @@ var ReceiveModal = ({
|
|
|
8391
8120
|
fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
|
|
8392
8121
|
},
|
|
8393
8122
|
children: [
|
|
8394
|
-
/* @__PURE__ */ (0,
|
|
8395
|
-
/* @__PURE__ */ (0,
|
|
8396
|
-
/* @__PURE__ */ (0,
|
|
8397
|
-
onBack && /* @__PURE__ */ (0,
|
|
8123
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(DialogTitle, { children: "Receive LUMIA" }) }),
|
|
8124
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(DialogDescription, { className: "sr-only", children: "Your wallet address and QR code for receiving LUMIA" }),
|
|
8125
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
8126
|
+
onBack && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
8398
8127
|
"button",
|
|
8399
8128
|
{
|
|
8400
8129
|
onClick: onBack,
|
|
8401
8130
|
className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
|
|
8402
8131
|
title: "Back",
|
|
8403
|
-
children: /* @__PURE__ */ (0,
|
|
8132
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react14.ArrowLeft, { className: "h-4 w-4" })
|
|
8404
8133
|
}
|
|
8405
8134
|
),
|
|
8406
|
-
/* @__PURE__ */ (0,
|
|
8407
|
-
/* @__PURE__ */ (0,
|
|
8408
|
-
/* @__PURE__ */ (0,
|
|
8135
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
|
|
8136
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react14.QrCode, { className: "h-5 w-5" }),
|
|
8137
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: "Receive LUMIA" })
|
|
8409
8138
|
] })
|
|
8410
8139
|
] }) }),
|
|
8411
|
-
/* @__PURE__ */ (0,
|
|
8412
|
-
qrCodeUrl && /* @__PURE__ */ (0,
|
|
8413
|
-
/* @__PURE__ */ (0,
|
|
8414
|
-
/* @__PURE__ */ (0,
|
|
8415
|
-
/* @__PURE__ */ (0,
|
|
8140
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "p-5 space-y-4", children: [
|
|
8141
|
+
qrCodeUrl && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: `${isDark ? "bg-white" : "bg-white"} p-4 rounded-xl border ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("img", { src: qrCodeUrl, alt: "Wallet QR Code", className: "w-48 h-48" }) }) }),
|
|
8142
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: `${isDark ? "bg-blue-900/30 border-blue-600" : "bg-blue-50 border-blue-200"} rounded-lg p-3`, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: `flex items-center gap-2 ${isDark ? "text-blue-300" : "text-blue-700"} text-sm`, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex-1", children: [
|
|
8143
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "font-medium", children: "Network: Lumia Beam" }),
|
|
8144
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: `text-xs ${isDark ? "text-blue-400" : "text-blue-600"} mt-0.5`, children: "Ensure sender is on the same network" })
|
|
8416
8145
|
] }) }) }),
|
|
8417
|
-
/* @__PURE__ */ (0,
|
|
8418
|
-
/* @__PURE__ */ (0,
|
|
8419
|
-
/* @__PURE__ */ (0,
|
|
8420
|
-
/* @__PURE__ */ (0,
|
|
8146
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: [
|
|
8147
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("label", { className: `block text-sm font-medium ${theme.bodyText} mb-2`, children: "Your Wallet Address" }),
|
|
8148
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("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 }) }),
|
|
8149
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
8421
8150
|
Button,
|
|
8422
8151
|
{
|
|
8423
8152
|
onClick: handleCopy,
|
|
8424
8153
|
className: "w-full mt-3",
|
|
8425
8154
|
size: "lg",
|
|
8426
|
-
children: copied ? /* @__PURE__ */ (0,
|
|
8427
|
-
/* @__PURE__ */ (0,
|
|
8428
|
-
/* @__PURE__ */ (0,
|
|
8429
|
-
] }) : /* @__PURE__ */ (0,
|
|
8430
|
-
/* @__PURE__ */ (0,
|
|
8431
|
-
/* @__PURE__ */ (0,
|
|
8155
|
+
children: copied ? /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
|
|
8156
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react14.CheckCircle2, { className: "h-4 w-4" }),
|
|
8157
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: "Copied!" })
|
|
8158
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
|
|
8159
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react14.Copy, { className: "h-4 w-4" }),
|
|
8160
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: "Copy Address" })
|
|
8432
8161
|
] })
|
|
8433
8162
|
}
|
|
8434
8163
|
)
|
|
8435
8164
|
] }),
|
|
8436
|
-
/* @__PURE__ */ (0,
|
|
8437
|
-
/* @__PURE__ */ (0,
|
|
8438
|
-
/* @__PURE__ */ (0,
|
|
8165
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
|
|
8166
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { children: "Share this address to receive LUMIA tokens." }),
|
|
8167
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "mt-1", children: "Only send LUMIA tokens to this address on Lumia Beam network." })
|
|
8439
8168
|
] })
|
|
8440
8169
|
] })
|
|
8441
8170
|
]
|
|
@@ -8444,12 +8173,12 @@ var ReceiveModal = ({
|
|
|
8444
8173
|
};
|
|
8445
8174
|
|
|
8446
8175
|
// src/internal/components/BuyModal.tsx
|
|
8447
|
-
var
|
|
8448
|
-
var
|
|
8176
|
+
var import_lucide_react15 = require("lucide-react");
|
|
8177
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
8449
8178
|
var BuyModal = ({ open, onOpenChange, onBack }) => {
|
|
8450
8179
|
const { config } = useLumiaPassportConfig();
|
|
8451
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
8452
|
-
return /* @__PURE__ */ (0,
|
|
8180
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
8181
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
|
|
8453
8182
|
DialogContent,
|
|
8454
8183
|
{
|
|
8455
8184
|
className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
|
|
@@ -8461,26 +8190,26 @@ var BuyModal = ({ open, onOpenChange, onBack }) => {
|
|
|
8461
8190
|
fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
|
|
8462
8191
|
},
|
|
8463
8192
|
children: [
|
|
8464
|
-
/* @__PURE__ */ (0,
|
|
8465
|
-
/* @__PURE__ */ (0,
|
|
8466
|
-
/* @__PURE__ */ (0,
|
|
8467
|
-
onBack && /* @__PURE__ */ (0,
|
|
8193
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(DialogTitle, { children: "Buy Crypto" }) }),
|
|
8194
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(DialogDescription, { className: "sr-only", children: "On-ramp placeholder" }),
|
|
8195
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
8196
|
+
onBack && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
8468
8197
|
"button",
|
|
8469
8198
|
{
|
|
8470
8199
|
onClick: onBack,
|
|
8471
8200
|
className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
|
|
8472
8201
|
title: "Back",
|
|
8473
|
-
children: /* @__PURE__ */ (0,
|
|
8202
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react15.ArrowLeft, { className: "h-4 w-4" })
|
|
8474
8203
|
}
|
|
8475
8204
|
),
|
|
8476
|
-
/* @__PURE__ */ (0,
|
|
8477
|
-
/* @__PURE__ */ (0,
|
|
8478
|
-
/* @__PURE__ */ (0,
|
|
8205
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
|
|
8206
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react15.CreditCard, { className: "h-5 w-5" }),
|
|
8207
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children: "Buy" })
|
|
8479
8208
|
] })
|
|
8480
8209
|
] }) }),
|
|
8481
|
-
/* @__PURE__ */ (0,
|
|
8482
|
-
/* @__PURE__ */ (0,
|
|
8483
|
-
/* @__PURE__ */ (0,
|
|
8210
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "p-5", children: [
|
|
8211
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: `rounded-xl p-4 text-center ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: "On-ramp coming soon\u2026" }) }),
|
|
8212
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "pt-4", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Button, { className: "w-full", onClick: () => onOpenChange(false), size: "lg", children: "Close" }) })
|
|
8484
8213
|
] })
|
|
8485
8214
|
]
|
|
8486
8215
|
}
|
|
@@ -8488,14 +8217,14 @@ var BuyModal = ({ open, onOpenChange, onBack }) => {
|
|
|
8488
8217
|
};
|
|
8489
8218
|
|
|
8490
8219
|
// src/internal/components/KycModal.tsx
|
|
8491
|
-
var
|
|
8492
|
-
var
|
|
8220
|
+
var import_lucide_react16 = require("lucide-react");
|
|
8221
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
8493
8222
|
var KycModal = ({ open, onOpenChange, onBack }) => {
|
|
8494
8223
|
const { config } = useLumiaPassportConfig();
|
|
8495
|
-
const { isDark, classes: theme } = useTheme(config.ui.theme);
|
|
8224
|
+
const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
8496
8225
|
const provider = config.kyc?.provider;
|
|
8497
8226
|
const options = config.kyc?.options || {};
|
|
8498
|
-
return /* @__PURE__ */ (0,
|
|
8227
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
8499
8228
|
DialogContent,
|
|
8500
8229
|
{
|
|
8501
8230
|
className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
|
|
@@ -8507,32 +8236,32 @@ var KycModal = ({ open, onOpenChange, onBack }) => {
|
|
|
8507
8236
|
fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
|
|
8508
8237
|
},
|
|
8509
8238
|
children: [
|
|
8510
|
-
/* @__PURE__ */ (0,
|
|
8511
|
-
/* @__PURE__ */ (0,
|
|
8512
|
-
/* @__PURE__ */ (0,
|
|
8513
|
-
onBack && /* @__PURE__ */ (0,
|
|
8239
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(DialogTitle, { children: "KYC" }) }),
|
|
8240
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(DialogDescription, { className: "sr-only", children: "KYC placeholder" }),
|
|
8241
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
8242
|
+
onBack && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
8514
8243
|
"button",
|
|
8515
8244
|
{
|
|
8516
8245
|
onClick: onBack,
|
|
8517
8246
|
className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
|
|
8518
8247
|
title: "Back",
|
|
8519
|
-
children: /* @__PURE__ */ (0,
|
|
8248
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react16.ArrowLeft, { className: "h-4 w-4" })
|
|
8520
8249
|
}
|
|
8521
8250
|
),
|
|
8522
|
-
/* @__PURE__ */ (0,
|
|
8523
|
-
/* @__PURE__ */ (0,
|
|
8524
|
-
/* @__PURE__ */ (0,
|
|
8251
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
|
|
8252
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react16.ShieldCheck, { className: "h-5 w-5" }),
|
|
8253
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: "KYC" })
|
|
8525
8254
|
] })
|
|
8526
8255
|
] }) }),
|
|
8527
|
-
/* @__PURE__ */ (0,
|
|
8528
|
-
provider ? /* @__PURE__ */ (0,
|
|
8529
|
-
/* @__PURE__ */ (0,
|
|
8256
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "p-5", children: [
|
|
8257
|
+
provider ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: `rounded-xl p-4 ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: [
|
|
8258
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: `text-sm ${theme.titleText} mb-2`, children: [
|
|
8530
8259
|
"KYC provider: ",
|
|
8531
|
-
/* @__PURE__ */ (0,
|
|
8260
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "font-medium", children: provider })
|
|
8532
8261
|
] }),
|
|
8533
|
-
Object.keys(options).length > 0 ? /* @__PURE__ */ (0,
|
|
8534
|
-
] }) : /* @__PURE__ */ (0,
|
|
8535
|
-
/* @__PURE__ */ (0,
|
|
8262
|
+
Object.keys(options).length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: `text-xs ${theme.mutedText} break-words whitespace-pre-wrap`, children: JSON.stringify(options, null, 2) }) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: "No provider options configured." })
|
|
8263
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: `rounded-xl p-4 text-center ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: "KYC verification coming soon\u2026" }) }),
|
|
8264
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "pt-4", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Button, { className: "w-full", onClick: () => onOpenChange(false), size: "lg", children: "Close" }) })
|
|
8536
8265
|
] })
|
|
8537
8266
|
]
|
|
8538
8267
|
}
|
|
@@ -8541,20 +8270,20 @@ var KycModal = ({ open, onOpenChange, onBack }) => {
|
|
|
8541
8270
|
|
|
8542
8271
|
// src/components/ConnectWalletButton.tsx
|
|
8543
8272
|
init_auth();
|
|
8544
|
-
var
|
|
8273
|
+
var import_lucide_react17 = require("lucide-react");
|
|
8545
8274
|
init_base();
|
|
8546
8275
|
|
|
8547
8276
|
// src/modules/linkedProfiles.ts
|
|
8548
|
-
var
|
|
8277
|
+
var React26 = __toESM(require("react"), 1);
|
|
8549
8278
|
init_common();
|
|
8550
8279
|
init_types();
|
|
8551
8280
|
init_auth();
|
|
8552
8281
|
function useLumiaPassportLinkedProfiles() {
|
|
8553
|
-
const [profiles, setProfiles] =
|
|
8554
|
-
const [avatar, setAvatar] =
|
|
8555
|
-
const [isLoading, setIsLoading] =
|
|
8556
|
-
const [error, setError] =
|
|
8557
|
-
const load =
|
|
8282
|
+
const [profiles, setProfiles] = React26.useState([]);
|
|
8283
|
+
const [avatar, setAvatar] = React26.useState(null);
|
|
8284
|
+
const [isLoading, setIsLoading] = React26.useState(false);
|
|
8285
|
+
const [error, setError] = React26.useState(null);
|
|
8286
|
+
const load = React26.useCallback(async () => {
|
|
8558
8287
|
setIsLoading(true);
|
|
8559
8288
|
setError(null);
|
|
8560
8289
|
try {
|
|
@@ -8580,14 +8309,105 @@ function useLumiaPassportLinkedProfiles() {
|
|
|
8580
8309
|
setIsLoading(false);
|
|
8581
8310
|
}
|
|
8582
8311
|
}, []);
|
|
8583
|
-
|
|
8312
|
+
React26.useEffect(() => {
|
|
8584
8313
|
load();
|
|
8585
8314
|
}, [load]);
|
|
8586
8315
|
return { profiles, avatar, isLoading, error, refresh: load };
|
|
8587
8316
|
}
|
|
8588
8317
|
|
|
8318
|
+
// package.json
|
|
8319
|
+
var package_default = {
|
|
8320
|
+
name: "@lumiapassport/ui-kit",
|
|
8321
|
+
version: "1.4.2",
|
|
8322
|
+
description: "React UI components and hooks for Lumia Passport authentication and Account Abstraction",
|
|
8323
|
+
type: "module",
|
|
8324
|
+
main: "./dist/index.cjs",
|
|
8325
|
+
module: "./dist/index.js",
|
|
8326
|
+
types: "./dist/index.d.ts",
|
|
8327
|
+
sideEffects: false,
|
|
8328
|
+
files: [
|
|
8329
|
+
"dist",
|
|
8330
|
+
"README.md"
|
|
8331
|
+
],
|
|
8332
|
+
scripts: {
|
|
8333
|
+
clean: "rm -rf dist",
|
|
8334
|
+
"build:css": "tailwindcss -c tailwind.config.cjs -i src/styles/index.css -o src/styles/built.css --minify",
|
|
8335
|
+
"build:iframe-html": "node scripts/copy-iframe-html.js",
|
|
8336
|
+
"build:copy-css": "cp src/styles/built.css dist/styles.css",
|
|
8337
|
+
build: "pnpm build:css && tsup && pnpm build:iframe-html && pnpm build:copy-css",
|
|
8338
|
+
dev: "pnpm build:css && tsup --watch",
|
|
8339
|
+
"dev:iframe": "vite --config iframe/vite.config.ts"
|
|
8340
|
+
},
|
|
8341
|
+
exports: {
|
|
8342
|
+
".": {
|
|
8343
|
+
import: {
|
|
8344
|
+
types: "./dist/index.d.ts",
|
|
8345
|
+
default: "./dist/index.js"
|
|
8346
|
+
},
|
|
8347
|
+
require: {
|
|
8348
|
+
types: "./dist/index.d.cts",
|
|
8349
|
+
default: "./dist/index.cjs"
|
|
8350
|
+
}
|
|
8351
|
+
},
|
|
8352
|
+
"./styles.css": "./dist/styles.css",
|
|
8353
|
+
"./dist/styles.css": "./dist/styles.css"
|
|
8354
|
+
},
|
|
8355
|
+
peerDependencies: {
|
|
8356
|
+
"@radix-ui/react-alert-dialog": ">=1.0.0",
|
|
8357
|
+
"@radix-ui/react-dialog": ">=1.0.0",
|
|
8358
|
+
"@radix-ui/react-slot": ">=1.0.0",
|
|
8359
|
+
"@tanstack/react-query": ">=5.0.0",
|
|
8360
|
+
"class-variance-authority": ">=0.7.0",
|
|
8361
|
+
clsx: ">=2.1.1",
|
|
8362
|
+
"dkls23-wasm": ">=0.1.0",
|
|
8363
|
+
react: ">=18",
|
|
8364
|
+
"react-dom": ">=18",
|
|
8365
|
+
"tailwind-merge": ">=2.2.0",
|
|
8366
|
+
viem: ">=2.10.0",
|
|
8367
|
+
wagmi: ">=2.5.0"
|
|
8368
|
+
},
|
|
8369
|
+
dependencies: {
|
|
8370
|
+
"@lumiapassport/core": "workspace:*",
|
|
8371
|
+
"@rainbow-me/rainbowkit": "^2.2.8",
|
|
8372
|
+
"lucide-react": "^0.454.0",
|
|
8373
|
+
qrcode: "^1.5.0"
|
|
8374
|
+
},
|
|
8375
|
+
devDependencies: {
|
|
8376
|
+
"@radix-ui/react-alert-dialog": "^1.0.0",
|
|
8377
|
+
"@radix-ui/react-dialog": "^1.0.0",
|
|
8378
|
+
"@radix-ui/react-slot": "^1.0.0",
|
|
8379
|
+
"@tailwindcss/typography": "^0.5.16",
|
|
8380
|
+
"@tanstack/react-query": "^5.90.2",
|
|
8381
|
+
"@types/qrcode": "^1.5.0",
|
|
8382
|
+
"@types/react": "^18.3.3",
|
|
8383
|
+
"@types/react-dom": "^18.3.0",
|
|
8384
|
+
autoprefixer: "^10.4.20",
|
|
8385
|
+
"class-variance-authority": "^0.7.0",
|
|
8386
|
+
clsx: "^2.1.1",
|
|
8387
|
+
"dkls23-wasm": "^0.1.0",
|
|
8388
|
+
postcss: "^8.4.47",
|
|
8389
|
+
react: "^18.3.1",
|
|
8390
|
+
"react-dom": "^18.3.1",
|
|
8391
|
+
"tailwind-merge": "^2.2.0",
|
|
8392
|
+
tailwindcss: "^3.4.10",
|
|
8393
|
+
tsup: "^8.5.0",
|
|
8394
|
+
typescript: "^5.4.5",
|
|
8395
|
+
viem: "^2.37.9",
|
|
8396
|
+
vite: "^5.0.0",
|
|
8397
|
+
wagmi: "^2.17.5"
|
|
8398
|
+
},
|
|
8399
|
+
repository: {
|
|
8400
|
+
type: "git",
|
|
8401
|
+
url: "https://github.com/lumiachain/lumia-passport-sdk",
|
|
8402
|
+
directory: "packages/ui-kit"
|
|
8403
|
+
},
|
|
8404
|
+
publishConfig: {
|
|
8405
|
+
access: "public"
|
|
8406
|
+
}
|
|
8407
|
+
};
|
|
8408
|
+
|
|
8589
8409
|
// src/components/ConnectWalletButton.tsx
|
|
8590
|
-
var
|
|
8410
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
8591
8411
|
var ConnectWalletButton = ({
|
|
8592
8412
|
className,
|
|
8593
8413
|
label = "Connect Wallet",
|
|
@@ -8608,7 +8428,7 @@ var ConnectWalletButton = ({
|
|
|
8608
8428
|
onLumiaPassportError: buttonCallbacks?.onLumiaPassportError ?? contextCallbacks?.onLumiaPassportError,
|
|
8609
8429
|
onWalletReady: buttonCallbacks?.onWalletReady ?? contextCallbacks?.onWalletReady
|
|
8610
8430
|
}), [buttonCallbacks, contextCallbacks]);
|
|
8611
|
-
const { theme: resolvedTheme, isDark, classes: theme } = useTheme(config.ui.theme);
|
|
8431
|
+
const { theme: resolvedTheme, isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
|
|
8612
8432
|
const {
|
|
8613
8433
|
session,
|
|
8614
8434
|
address,
|
|
@@ -8902,8 +8722,8 @@ var ConnectWalletButton = ({
|
|
|
8902
8722
|
refetchBalance();
|
|
8903
8723
|
}
|
|
8904
8724
|
}, [address]);
|
|
8905
|
-
return /* @__PURE__ */ (0,
|
|
8906
|
-
/* @__PURE__ */ (0,
|
|
8725
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: [className, "lumia-scope"].filter(Boolean).join(" "), children: [
|
|
8726
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "inline-flex items-center gap-2", children: !address ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { style: { display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
8907
8727
|
"button",
|
|
8908
8728
|
{
|
|
8909
8729
|
onClick: () => {
|
|
@@ -8936,56 +8756,56 @@ var ConnectWalletButton = ({
|
|
|
8936
8756
|
},
|
|
8937
8757
|
children: label || "Connect"
|
|
8938
8758
|
}
|
|
8939
|
-
) }) : /* @__PURE__ */ (0,
|
|
8759
|
+
) }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
8940
8760
|
"div",
|
|
8941
8761
|
{
|
|
8942
8762
|
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"}`,
|
|
8943
8763
|
onClick: () => setIsWalletMenuOpen(true),
|
|
8944
|
-
children: /* @__PURE__ */ (0,
|
|
8945
|
-
/* @__PURE__ */ (0,
|
|
8764
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center space-x-3", children: [
|
|
8765
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("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 ? (
|
|
8946
8766
|
// eslint-disable-next-line @next/next/no-img-element
|
|
8947
|
-
/* @__PURE__ */ (0,
|
|
8948
|
-
) : /* @__PURE__ */ (0,
|
|
8949
|
-
/* @__PURE__ */ (0,
|
|
8950
|
-
/* @__PURE__ */ (0,
|
|
8951
|
-
/* @__PURE__ */ (0,
|
|
8767
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" })
|
|
8768
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-white font-bold text-sm", children: "LP" }) }),
|
|
8769
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "text-left flex-1 min-w-0", children: [
|
|
8770
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `font-semibold text-base truncate ${theme.titleText}`, children: mode === "compact" && displayName ? displayName : formatAddress(address) }),
|
|
8771
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: `text-sm ${theme.mutedText}`, children: [
|
|
8952
8772
|
formatBalance(),
|
|
8953
8773
|
" LUMIA"
|
|
8954
8774
|
] })
|
|
8955
8775
|
] }),
|
|
8956
|
-
/* @__PURE__ */ (0,
|
|
8957
|
-
/* @__PURE__ */ (0,
|
|
8958
|
-
/* @__PURE__ */ (0,
|
|
8959
|
-
|
|
8776
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center space-x-1", children: [
|
|
8777
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "group relative", children: [
|
|
8778
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
8779
|
+
import_lucide_react17.Cloud,
|
|
8960
8780
|
{
|
|
8961
8781
|
className: `w-3 h-3 ${indicators.server ? "text-green-500" : "text-orange-400"}`
|
|
8962
8782
|
}
|
|
8963
8783
|
),
|
|
8964
|
-
/* @__PURE__ */ (0,
|
|
8784
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("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: [
|
|
8965
8785
|
"Server Keyshare: ",
|
|
8966
8786
|
indicators.server ? "Available" : "Missing"
|
|
8967
8787
|
] })
|
|
8968
8788
|
] }),
|
|
8969
|
-
/* @__PURE__ */ (0,
|
|
8970
|
-
/* @__PURE__ */ (0,
|
|
8971
|
-
|
|
8789
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "group relative", children: [
|
|
8790
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
8791
|
+
import_lucide_react17.Laptop,
|
|
8972
8792
|
{
|
|
8973
8793
|
className: `w-3 h-3 ${indicators.local ? "text-green-500" : "text-orange-400"}`
|
|
8974
8794
|
}
|
|
8975
8795
|
),
|
|
8976
|
-
/* @__PURE__ */ (0,
|
|
8796
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("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: [
|
|
8977
8797
|
"Local Keyshare: ",
|
|
8978
8798
|
indicators.local ? "Available" : "Missing"
|
|
8979
8799
|
] })
|
|
8980
8800
|
] }),
|
|
8981
|
-
/* @__PURE__ */ (0,
|
|
8982
|
-
/* @__PURE__ */ (0,
|
|
8983
|
-
|
|
8801
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "group relative", children: [
|
|
8802
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
8803
|
+
import_lucide_react17.Shield,
|
|
8984
8804
|
{
|
|
8985
8805
|
className: `w-3 h-3 ${indicators.backup ? "text-green-500" : "text-orange-400"}`
|
|
8986
8806
|
}
|
|
8987
8807
|
),
|
|
8988
|
-
/* @__PURE__ */ (0,
|
|
8808
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("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: [
|
|
8989
8809
|
"Vault Backup: ",
|
|
8990
8810
|
indicators.backup ? "Available" : "Not Found"
|
|
8991
8811
|
] })
|
|
@@ -8994,80 +8814,80 @@ var ConnectWalletButton = ({
|
|
|
8994
8814
|
] })
|
|
8995
8815
|
}
|
|
8996
8816
|
) }),
|
|
8997
|
-
isWalletMenuOpen && address && /* @__PURE__ */ (0,
|
|
8998
|
-
/* @__PURE__ */ (0,
|
|
8999
|
-
/* @__PURE__ */ (0,
|
|
9000
|
-
/* @__PURE__ */ (0,
|
|
9001
|
-
/* @__PURE__ */ (0,
|
|
8817
|
+
isWalletMenuOpen && address && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "fixed inset-0 z-[60]", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Dialog, { open: isWalletMenuOpen, onOpenChange: setIsWalletMenuOpen, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(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: [
|
|
8818
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(DialogTitle, { children: "Wallet Menu" }) }),
|
|
8819
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(DialogDescription, { className: "sr-only", children: "Smart Account wallet actions and status" }),
|
|
8820
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `p-4 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center space-x-4", children: [
|
|
8821
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("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 ? (
|
|
9002
8822
|
// eslint-disable-next-line @next/next/no-img-element
|
|
9003
|
-
/* @__PURE__ */ (0,
|
|
9004
|
-
) : /* @__PURE__ */ (0,
|
|
9005
|
-
/* @__PURE__ */ (0,
|
|
9006
|
-
/* @__PURE__ */ (0,
|
|
9007
|
-
/* @__PURE__ */ (0,
|
|
9008
|
-
/* @__PURE__ */ (0,
|
|
9009
|
-
/* @__PURE__ */ (0,
|
|
8823
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" })
|
|
8824
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-white font-bold text-lg", children: "L" }) }),
|
|
8825
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex-1 min-w-0", children: [
|
|
8826
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `font-medium text-lg ${theme.titleText}`, children: displayName || "Smart Account" }),
|
|
8827
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center space-x-2", children: [
|
|
8828
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: formatAddress(address) }),
|
|
8829
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("button", { onClick: async () => {
|
|
9010
8830
|
try {
|
|
9011
8831
|
await navigator.clipboard.writeText(address);
|
|
9012
8832
|
setCopied(true);
|
|
9013
8833
|
setTimeout(() => setCopied(false), 1500);
|
|
9014
8834
|
} catch {
|
|
9015
8835
|
}
|
|
9016
|
-
}, title: "Copy address", className: `${theme.iconColor} hover:${theme.titleText} p-1`, children: copied ? /* @__PURE__ */ (0,
|
|
8836
|
+
}, title: "Copy address", className: `${theme.iconColor} hover:${theme.titleText} p-1`, children: copied ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-green-500 text-sm", children: "\u2713" }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.Copy, { className: "w-4 h-4" }) })
|
|
9017
8837
|
] })
|
|
9018
8838
|
] })
|
|
9019
8839
|
] }) }) }),
|
|
9020
|
-
/* @__PURE__ */ (0,
|
|
9021
|
-
/* @__PURE__ */ (0,
|
|
9022
|
-
/* @__PURE__ */ (0,
|
|
8840
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "p-4", children: [
|
|
8841
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "grid grid-cols-3 gap-2 mb-4", children: [
|
|
8842
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: () => {
|
|
9023
8843
|
setIsWalletMenuOpen(false);
|
|
9024
8844
|
setIsSendOpen(true);
|
|
9025
8845
|
}, 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: [
|
|
9026
|
-
/* @__PURE__ */ (0,
|
|
9027
|
-
/* @__PURE__ */ (0,
|
|
8846
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.ArrowUp, { className: "w-5 h-5" }),
|
|
8847
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-sm font-medium", children: "Send" })
|
|
9028
8848
|
] }),
|
|
9029
|
-
/* @__PURE__ */ (0,
|
|
8849
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: () => {
|
|
9030
8850
|
setIsWalletMenuOpen(false);
|
|
9031
8851
|
setIsReceiveOpen(true);
|
|
9032
8852
|
}, 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: [
|
|
9033
|
-
/* @__PURE__ */ (0,
|
|
9034
|
-
/* @__PURE__ */ (0,
|
|
8853
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.ArrowDown, { className: "w-5 h-5" }),
|
|
8854
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-sm font-medium", children: "Receive" })
|
|
9035
8855
|
] }),
|
|
9036
|
-
/* @__PURE__ */ (0,
|
|
8856
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: () => {
|
|
9037
8857
|
setIsWalletMenuOpen(false);
|
|
9038
8858
|
setIsBuyOpen(true);
|
|
9039
8859
|
}, 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: [
|
|
9040
|
-
/* @__PURE__ */ (0,
|
|
9041
|
-
/* @__PURE__ */ (0,
|
|
8860
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.Plus, { className: "w-5 h-5" }),
|
|
8861
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-sm font-medium", children: "Buy" })
|
|
9042
8862
|
] })
|
|
9043
8863
|
] }),
|
|
9044
|
-
config.warnings?.backupWarning && !hasServerVault && /* @__PURE__ */ (0,
|
|
9045
|
-
/* @__PURE__ */ (0,
|
|
9046
|
-
/* @__PURE__ */ (0,
|
|
9047
|
-
/* @__PURE__ */ (0,
|
|
9048
|
-
/* @__PURE__ */ (0,
|
|
9049
|
-
/* @__PURE__ */ (0,
|
|
8864
|
+
config.warnings?.backupWarning && !hasServerVault && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("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__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-start space-x-3", children: [
|
|
8865
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.AlertTriangle, { className: `w-5 h-5 ${isDark ? "text-orange-400" : "text-orange-500"} mt-0.5 flex-shrink-0` }),
|
|
8866
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex-1 min-w-0", children: [
|
|
8867
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `text-sm font-medium ${isDark ? "text-orange-200" : "text-orange-700"}`, children: "Backup Not Created" }),
|
|
8868
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("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." }),
|
|
8869
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
|
|
9050
8870
|
"button",
|
|
9051
8871
|
{
|
|
9052
8872
|
onClick: () => {
|
|
9053
8873
|
setIsWalletMenuOpen(false);
|
|
9054
|
-
|
|
8874
|
+
setIsBackupOpen(true);
|
|
9055
8875
|
},
|
|
9056
|
-
className: `mt-2 px-3 py-1.5 text-xs font-medium rounded-lg transition-colors ${isDark ? "bg-orange-
|
|
8876
|
+
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"}`,
|
|
9057
8877
|
children: [
|
|
9058
|
-
/* @__PURE__ */ (0,
|
|
8878
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.ShieldCheck, { className: "w-3 h-3 inline mr-1" }),
|
|
9059
8879
|
"Create Backup"
|
|
9060
8880
|
]
|
|
9061
8881
|
}
|
|
9062
8882
|
)
|
|
9063
8883
|
] })
|
|
9064
8884
|
] }) }),
|
|
9065
|
-
config.warnings?.emailNotConnectedWarning && !profilesLoading && !profiles.some((p) => p.provider?.toLowerCase() === "email") && /* @__PURE__ */ (0,
|
|
9066
|
-
/* @__PURE__ */ (0,
|
|
9067
|
-
/* @__PURE__ */ (0,
|
|
9068
|
-
/* @__PURE__ */ (0,
|
|
9069
|
-
/* @__PURE__ */ (0,
|
|
9070
|
-
/* @__PURE__ */ (0,
|
|
8885
|
+
config.warnings?.emailNotConnectedWarning && !profilesLoading && !profiles.some((p) => p.provider?.toLowerCase() === "email") && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("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__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-start space-x-3", children: [
|
|
8886
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.AlertTriangle, { className: `w-5 h-5 ${isDark ? "text-blue-400" : "text-blue-500"} mt-0.5 flex-shrink-0` }),
|
|
8887
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex-1 min-w-0", children: [
|
|
8888
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `text-sm font-medium ${isDark ? "text-blue-300" : "text-blue-700"}`, children: "Email Not Connected" }),
|
|
8889
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("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." }),
|
|
8890
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
|
|
9071
8891
|
"button",
|
|
9072
8892
|
{
|
|
9073
8893
|
onClick: () => {
|
|
@@ -9076,87 +8896,91 @@ var ConnectWalletButton = ({
|
|
|
9076
8896
|
},
|
|
9077
8897
|
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"}`,
|
|
9078
8898
|
children: [
|
|
9079
|
-
/* @__PURE__ */ (0,
|
|
8899
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.ShieldCheck, { className: "w-3 h-3 inline mr-1" }),
|
|
9080
8900
|
"Connect Email"
|
|
9081
8901
|
]
|
|
9082
8902
|
}
|
|
9083
8903
|
)
|
|
9084
8904
|
] })
|
|
9085
8905
|
] }) }),
|
|
9086
|
-
/* @__PURE__ */ (0,
|
|
8906
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
9087
8907
|
"button",
|
|
9088
8908
|
{
|
|
9089
8909
|
onClick: () => address && window.open(`${LUMIA_EXPLORER_URL}/address/${address}`, "_blank"),
|
|
9090
8910
|
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`,
|
|
9091
|
-
children: /* @__PURE__ */ (0,
|
|
9092
|
-
/* @__PURE__ */ (0,
|
|
9093
|
-
/* @__PURE__ */ (0,
|
|
9094
|
-
/* @__PURE__ */ (0,
|
|
9095
|
-
/* @__PURE__ */ (0,
|
|
9096
|
-
/* @__PURE__ */ (0,
|
|
8911
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
8912
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center space-x-3", children: [
|
|
8913
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "w-8 h-8 rounded-full flex items-center justify-center bg-transparent overflow-hidden", children: lumiaBeam.logoDataUri ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("img", { src: lumiaBeam.logoDataUri, alt: "Chain logo", className: "w-full h-full object-cover" }) : lumiaBeam.logo === "lumia" ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(LumiaLogo, { size: 32 }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-white text-xs font-bold", children: (lumiaBeam.name || "L").charAt(0) }) }),
|
|
8914
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { children: [
|
|
8915
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `${theme.titleText} font-medium`, children: lumiaBeam.name }),
|
|
8916
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: theme.mutedText + " text-sm", children: [
|
|
9097
8917
|
formatBalance(),
|
|
9098
8918
|
" LUMIA"
|
|
9099
8919
|
] })
|
|
9100
8920
|
] })
|
|
9101
8921
|
] }),
|
|
9102
|
-
/* @__PURE__ */ (0,
|
|
8922
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: theme.iconColor, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.ArrowUpRight, { className: "w-4 h-4" }) })
|
|
9103
8923
|
] })
|
|
9104
8924
|
}
|
|
9105
8925
|
),
|
|
9106
|
-
/* @__PURE__ */ (0,
|
|
9107
|
-
config.features?.kycNeeded && /* @__PURE__ */ (0,
|
|
8926
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "space-y-1", children: [
|
|
8927
|
+
config.features?.kycNeeded && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: () => {
|
|
9108
8928
|
setIsWalletMenuOpen(false);
|
|
9109
8929
|
setIsKycOpen(true);
|
|
9110
|
-
}, 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: [
|
|
9111
|
-
/* @__PURE__ */ (0,
|
|
9112
|
-
/* @__PURE__ */ (0,
|
|
8930
|
+
}, 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: [
|
|
8931
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.ShieldCheck, { className: `w-5 h-5 ${theme.iconColor}` }),
|
|
8932
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: theme.titleText, children: "KYC" })
|
|
9113
8933
|
] }),
|
|
9114
|
-
/* @__PURE__ */ (0,
|
|
8934
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: () => {
|
|
9115
8935
|
setIsWalletMenuOpen(false);
|
|
9116
8936
|
setIsTransactionsOpen(true);
|
|
9117
|
-
}, 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: [
|
|
9118
|
-
/* @__PURE__ */ (0,
|
|
9119
|
-
/* @__PURE__ */ (0,
|
|
8937
|
+
}, 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: [
|
|
8938
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.Activity, { className: `w-5 h-5 ${theme.iconColor}` }),
|
|
8939
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: theme.titleText, children: "Transactions" })
|
|
9120
8940
|
] }),
|
|
9121
|
-
/* @__PURE__ */ (0,
|
|
8941
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: () => {
|
|
9122
8942
|
setIsWalletMenuOpen(false);
|
|
9123
8943
|
setIsViewAssetsOpen(true);
|
|
9124
|
-
}, 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: [
|
|
9125
|
-
/* @__PURE__ */ (0,
|
|
9126
|
-
/* @__PURE__ */ (0,
|
|
8944
|
+
}, 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: [
|
|
8945
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.Gem, { className: `w-5 h-5 ${theme.iconColor}` }),
|
|
8946
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: theme.titleText, children: "View Assets" })
|
|
9127
8947
|
] }),
|
|
9128
|
-
/* @__PURE__ */ (0,
|
|
8948
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: () => {
|
|
9129
8949
|
setIsWalletMenuOpen(false);
|
|
9130
8950
|
setIsManageWalletOpen(true);
|
|
9131
|
-
}, 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: [
|
|
9132
|
-
/* @__PURE__ */ (0,
|
|
9133
|
-
/* @__PURE__ */ (0,
|
|
8951
|
+
}, 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: [
|
|
8952
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.CreditCard, { className: `w-5 h-5 ${theme.iconColor}` }),
|
|
8953
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: theme.titleText, children: "Manage Wallet" })
|
|
9134
8954
|
] }),
|
|
9135
|
-
/* @__PURE__ */ (0,
|
|
8955
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: () => {
|
|
9136
8956
|
setIsWalletMenuOpen(false);
|
|
9137
8957
|
setIsSecurityOpen(true);
|
|
9138
|
-
}, 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: [
|
|
9139
|
-
/* @__PURE__ */ (0,
|
|
9140
|
-
/* @__PURE__ */ (0,
|
|
8958
|
+
}, 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: [
|
|
8959
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.Lock, { className: `w-5 h-5 ${theme.iconColor}` }),
|
|
8960
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: theme.titleText, children: "Security" })
|
|
9141
8961
|
] }),
|
|
9142
|
-
/* @__PURE__ */ (0,
|
|
8962
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: () => {
|
|
9143
8963
|
setIsWalletMenuOpen(false);
|
|
9144
8964
|
setIsBackupOpen(true);
|
|
9145
|
-
}, 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: [
|
|
9146
|
-
/* @__PURE__ */ (0,
|
|
9147
|
-
/* @__PURE__ */ (0,
|
|
8965
|
+
}, 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: [
|
|
8966
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.Shield, { className: `w-5 h-5 ${theme.iconColor}` }),
|
|
8967
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: theme.titleText, children: "Keyshare Backup" })
|
|
9148
8968
|
] }),
|
|
9149
|
-
/* @__PURE__ */ (0,
|
|
8969
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: async () => {
|
|
9150
8970
|
await handleDisconnect();
|
|
9151
8971
|
setIsWalletMenuOpen(false);
|
|
9152
|
-
}, 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: [
|
|
9153
|
-
/* @__PURE__ */ (0,
|
|
9154
|
-
/* @__PURE__ */ (0,
|
|
8972
|
+
}, 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: [
|
|
8973
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.ArrowUpRight, { className: "w-5 h-5 text-red-600" }),
|
|
8974
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-red-600", children: "Disconnect Wallet" })
|
|
9155
8975
|
] })
|
|
9156
|
-
] })
|
|
8976
|
+
] }),
|
|
8977
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `mt-3 pt-3 border-t ${theme.divider} text-center`, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: `text-xs ${theme.mutedText}`, children: [
|
|
8978
|
+
"Lumia Passport v",
|
|
8979
|
+
package_default.version
|
|
8980
|
+
] }) })
|
|
9157
8981
|
] })
|
|
9158
8982
|
] }) }) }),
|
|
9159
|
-
/* @__PURE__ */ (0,
|
|
8983
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
9160
8984
|
ManageWallet,
|
|
9161
8985
|
{
|
|
9162
8986
|
open: isManageWalletOpen,
|
|
@@ -9167,7 +8991,7 @@ var ConnectWalletButton = ({
|
|
|
9167
8991
|
}
|
|
9168
8992
|
}
|
|
9169
8993
|
),
|
|
9170
|
-
/* @__PURE__ */ (0,
|
|
8994
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
9171
8995
|
SecurityModal,
|
|
9172
8996
|
{
|
|
9173
8997
|
open: isSecurityOpen,
|
|
@@ -9178,12 +9002,12 @@ var ConnectWalletButton = ({
|
|
|
9178
9002
|
}
|
|
9179
9003
|
}
|
|
9180
9004
|
),
|
|
9181
|
-
isBackupOpen && session?.mpcUserId && /* @__PURE__ */ (0,
|
|
9182
|
-
/* @__PURE__ */ (0,
|
|
9183
|
-
/* @__PURE__ */ (0,
|
|
9184
|
-
/* @__PURE__ */ (0,
|
|
9005
|
+
isBackupOpen && session?.mpcUserId && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Dialog, { open: isBackupOpen, onOpenChange: setIsBackupOpen, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(DialogContent, { className: "max-w-2xl", children: [
|
|
9006
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(VisuallyHidden, { children: [
|
|
9007
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(DialogTitle, { children: "Keyshare Backup" }),
|
|
9008
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(DialogDescription, { children: "Create and manage encrypted backups of your keyshare" })
|
|
9185
9009
|
] }),
|
|
9186
|
-
/* @__PURE__ */ (0,
|
|
9010
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
9187
9011
|
KeyshareBackup,
|
|
9188
9012
|
{
|
|
9189
9013
|
userId: session.mpcUserId,
|
|
@@ -9194,7 +9018,7 @@ var ConnectWalletButton = ({
|
|
|
9194
9018
|
}
|
|
9195
9019
|
)
|
|
9196
9020
|
] }) }),
|
|
9197
|
-
/* @__PURE__ */ (0,
|
|
9021
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
9198
9022
|
TransactionsModal,
|
|
9199
9023
|
{
|
|
9200
9024
|
open: isTransactionsOpen,
|
|
@@ -9205,7 +9029,7 @@ var ConnectWalletButton = ({
|
|
|
9205
9029
|
}
|
|
9206
9030
|
}
|
|
9207
9031
|
),
|
|
9208
|
-
/* @__PURE__ */ (0,
|
|
9032
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
9209
9033
|
ViewAssetsModal,
|
|
9210
9034
|
{
|
|
9211
9035
|
open: isViewAssetsOpen,
|
|
@@ -9216,7 +9040,7 @@ var ConnectWalletButton = ({
|
|
|
9216
9040
|
}
|
|
9217
9041
|
}
|
|
9218
9042
|
),
|
|
9219
|
-
/* @__PURE__ */ (0,
|
|
9043
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
9220
9044
|
SendModal,
|
|
9221
9045
|
{
|
|
9222
9046
|
open: isSendOpen,
|
|
@@ -9227,7 +9051,7 @@ var ConnectWalletButton = ({
|
|
|
9227
9051
|
}
|
|
9228
9052
|
}
|
|
9229
9053
|
),
|
|
9230
|
-
/* @__PURE__ */ (0,
|
|
9054
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
9231
9055
|
ReceiveModal,
|
|
9232
9056
|
{
|
|
9233
9057
|
open: isReceiveOpen,
|
|
@@ -9238,7 +9062,7 @@ var ConnectWalletButton = ({
|
|
|
9238
9062
|
}
|
|
9239
9063
|
}
|
|
9240
9064
|
),
|
|
9241
|
-
/* @__PURE__ */ (0,
|
|
9065
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
9242
9066
|
BuyModal,
|
|
9243
9067
|
{
|
|
9244
9068
|
open: isBuyOpen,
|
|
@@ -9249,7 +9073,7 @@ var ConnectWalletButton = ({
|
|
|
9249
9073
|
}
|
|
9250
9074
|
}
|
|
9251
9075
|
),
|
|
9252
|
-
/* @__PURE__ */ (0,
|
|
9076
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
9253
9077
|
KycModal,
|
|
9254
9078
|
{
|
|
9255
9079
|
open: isKycOpen,
|
|
@@ -9260,7 +9084,7 @@ var ConnectWalletButton = ({
|
|
|
9260
9084
|
}
|
|
9261
9085
|
}
|
|
9262
9086
|
),
|
|
9263
|
-
/* @__PURE__ */ (0,
|
|
9087
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
9264
9088
|
AuthModal,
|
|
9265
9089
|
{
|
|
9266
9090
|
open: recoveryUserId ? isRecoveryModalOpen : isAuthModalOpen,
|
|
@@ -9320,7 +9144,7 @@ var ConnectWalletButton = ({
|
|
|
9320
9144
|
}
|
|
9321
9145
|
}
|
|
9322
9146
|
),
|
|
9323
|
-
/* @__PURE__ */ (0,
|
|
9147
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
9324
9148
|
TssManagerWithRef,
|
|
9325
9149
|
{
|
|
9326
9150
|
ref: tssManagerRef,
|
|
@@ -9338,7 +9162,7 @@ var ConnectWalletButton = ({
|
|
|
9338
9162
|
};
|
|
9339
9163
|
|
|
9340
9164
|
// src/components/ThemeToggle.tsx
|
|
9341
|
-
var
|
|
9165
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
9342
9166
|
var ThemeToggle = () => {
|
|
9343
9167
|
const { config, updateConfig } = useLumiaPassportConfig();
|
|
9344
9168
|
const currentTheme = config.ui.theme;
|
|
@@ -9383,7 +9207,7 @@ var ThemeToggle = () => {
|
|
|
9383
9207
|
return "auto";
|
|
9384
9208
|
}
|
|
9385
9209
|
};
|
|
9386
|
-
return /* @__PURE__ */ (0,
|
|
9210
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "lumia-scope", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
|
|
9387
9211
|
"button",
|
|
9388
9212
|
{
|
|
9389
9213
|
onClick: cycleTheme,
|
|
@@ -9399,19 +9223,19 @@ var ThemeToggle = () => {
|
|
|
9399
9223
|
};
|
|
9400
9224
|
|
|
9401
9225
|
// src/components/LumiaLogo.tsx
|
|
9402
|
-
var
|
|
9226
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
9403
9227
|
var LumiaLogo2 = ({ size = 80, className = "" }) => {
|
|
9404
|
-
return /* @__PURE__ */ (0,
|
|
9228
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
9405
9229
|
"div",
|
|
9406
9230
|
{
|
|
9407
9231
|
className: `flex items-center justify-center ${className}`,
|
|
9408
9232
|
style: { width: size, height: size },
|
|
9409
|
-
children: /* @__PURE__ */ (0,
|
|
9410
|
-
/* @__PURE__ */ (0,
|
|
9411
|
-
/* @__PURE__ */ (0,
|
|
9412
|
-
/* @__PURE__ */ (0,
|
|
9413
|
-
/* @__PURE__ */ (0,
|
|
9414
|
-
/* @__PURE__ */ (0,
|
|
9233
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("svg", { viewBox: "0 0 512 512", width: size, height: size, children: [
|
|
9234
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("circle", { cx: "256", cy: "256", r: "256", fill: "#060117", strokeWidth: "0" }),
|
|
9235
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("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" }),
|
|
9236
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("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" }),
|
|
9237
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("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" }),
|
|
9238
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("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" })
|
|
9415
9239
|
] })
|
|
9416
9240
|
}
|
|
9417
9241
|
);
|
|
@@ -9474,9 +9298,9 @@ function useTheme2(configTheme) {
|
|
|
9474
9298
|
}
|
|
9475
9299
|
|
|
9476
9300
|
// src/internal/components/Hash.tsx
|
|
9477
|
-
var
|
|
9478
|
-
var
|
|
9479
|
-
var
|
|
9301
|
+
var React28 = __toESM(require("react"), 1);
|
|
9302
|
+
var import_lucide_react18 = require("lucide-react");
|
|
9303
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
9480
9304
|
function toExplorerUrl(kind, value, chain) {
|
|
9481
9305
|
const base2 = chain?.blockExplorers?.default?.url;
|
|
9482
9306
|
if (!base2) return null;
|
|
@@ -9499,12 +9323,12 @@ var Hash = ({
|
|
|
9499
9323
|
}) => {
|
|
9500
9324
|
const value = hash || "";
|
|
9501
9325
|
const explorer = toExplorerUrl(kind, value, chain || void 0);
|
|
9502
|
-
const [copied, setCopied] =
|
|
9503
|
-
if (!value) return /* @__PURE__ */ (0,
|
|
9504
|
-
return /* @__PURE__ */ (0,
|
|
9505
|
-
label && /* @__PURE__ */ (0,
|
|
9506
|
-
/* @__PURE__ */ (0,
|
|
9507
|
-
showCopy && /* @__PURE__ */ (0,
|
|
9326
|
+
const [copied, setCopied] = React28.useState(false);
|
|
9327
|
+
if (!value) return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: cn2("text-muted-foreground", className), children: "\u2014" });
|
|
9328
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: cn2("flex items-center gap-2", className), children: [
|
|
9329
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "text-sm font-medium", children: label }),
|
|
9330
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("code", { className: "text-xs bg-background px-2 py-1 rounded break-all", children: truncate ? short2(value) : value }),
|
|
9331
|
+
showCopy && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
9508
9332
|
Button,
|
|
9509
9333
|
{
|
|
9510
9334
|
variant: "ghost",
|
|
@@ -9518,10 +9342,10 @@ var Hash = ({
|
|
|
9518
9342
|
} catch {
|
|
9519
9343
|
}
|
|
9520
9344
|
},
|
|
9521
|
-
children: /* @__PURE__ */ (0,
|
|
9345
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react18.Copy, { className: "h-4 w-4" })
|
|
9522
9346
|
}
|
|
9523
9347
|
),
|
|
9524
|
-
showExplorer && explorer && /* @__PURE__ */ (0,
|
|
9348
|
+
showExplorer && explorer && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
9525
9349
|
"a",
|
|
9526
9350
|
{
|
|
9527
9351
|
href: explorer,
|
|
@@ -9529,7 +9353,7 @@ var Hash = ({
|
|
|
9529
9353
|
rel: "noreferrer noopener",
|
|
9530
9354
|
className: "inline-flex items-center justify-center h-10 w-10 rounded-md hover:bg-accent text-foreground",
|
|
9531
9355
|
title: "Open in explorer",
|
|
9532
|
-
children: /* @__PURE__ */ (0,
|
|
9356
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react18.ExternalLink, { className: "h-4 w-4" })
|
|
9533
9357
|
}
|
|
9534
9358
|
)
|
|
9535
9359
|
] });
|
|
@@ -9538,7 +9362,7 @@ var Hash = ({
|
|
|
9538
9362
|
// src/internal/components/TransactionsList.tsx
|
|
9539
9363
|
var import_react21 = require("react");
|
|
9540
9364
|
init_base();
|
|
9541
|
-
var
|
|
9365
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
9542
9366
|
var TransactionsList = ({
|
|
9543
9367
|
address,
|
|
9544
9368
|
itemsCount = 10
|
|
@@ -9592,15 +9416,15 @@ var TransactionsList = ({
|
|
|
9592
9416
|
window.open(`${explorerUrl}/tx/${txHash}`, "_blank");
|
|
9593
9417
|
};
|
|
9594
9418
|
if (loading) {
|
|
9595
|
-
return /* @__PURE__ */ (0,
|
|
9596
|
-
/* @__PURE__ */ (0,
|
|
9597
|
-
/* @__PURE__ */ (0,
|
|
9419
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "p-4 text-center", children: [
|
|
9420
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "animate-spin inline-block w-6 h-6 border-2 border-current border-t-transparent rounded-full" }),
|
|
9421
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "mt-2 text-sm text-gray-600", children: "Loading transactions..." })
|
|
9598
9422
|
] });
|
|
9599
9423
|
}
|
|
9600
9424
|
if (error) {
|
|
9601
|
-
return /* @__PURE__ */ (0,
|
|
9602
|
-
/* @__PURE__ */ (0,
|
|
9603
|
-
/* @__PURE__ */ (0,
|
|
9425
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "p-4 text-center", children: [
|
|
9426
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "text-red-600 text-sm", children: error }),
|
|
9427
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
9604
9428
|
"button",
|
|
9605
9429
|
{
|
|
9606
9430
|
onClick: () => window.location.reload(),
|
|
@@ -9611,54 +9435,54 @@ var TransactionsList = ({
|
|
|
9611
9435
|
] });
|
|
9612
9436
|
}
|
|
9613
9437
|
if (transactions.length === 0) {
|
|
9614
|
-
return /* @__PURE__ */ (0,
|
|
9438
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "p-4 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "text-gray-600 text-sm", children: "No transactions found" }) });
|
|
9615
9439
|
}
|
|
9616
|
-
return /* @__PURE__ */ (0,
|
|
9440
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "max-h-96 overflow-y-auto", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "space-y-2 p-2", children: transactions.map((tx) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
|
|
9617
9441
|
"div",
|
|
9618
9442
|
{
|
|
9619
9443
|
className: "border rounded-lg p-3 hover:bg-gray-50 cursor-pointer transition-colors",
|
|
9620
9444
|
onClick: () => openTransaction(tx.hash),
|
|
9621
9445
|
children: [
|
|
9622
|
-
/* @__PURE__ */ (0,
|
|
9623
|
-
/* @__PURE__ */ (0,
|
|
9624
|
-
/* @__PURE__ */ (0,
|
|
9625
|
-
/* @__PURE__ */ (0,
|
|
9626
|
-
/* @__PURE__ */ (0,
|
|
9446
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex justify-between items-start mb-2", children: [
|
|
9447
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex-1", children: [
|
|
9448
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex items-center space-x-2 mb-1", children: [
|
|
9449
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-xs font-mono bg-gray-100 px-2 py-1 rounded", children: formatAddress(tx.hash) }),
|
|
9450
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("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" })
|
|
9627
9451
|
] }),
|
|
9628
|
-
/* @__PURE__ */ (0,
|
|
9629
|
-
/* @__PURE__ */ (0,
|
|
9630
|
-
/* @__PURE__ */ (0,
|
|
9631
|
-
/* @__PURE__ */ (0,
|
|
9452
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "text-sm space-y-1", children: [
|
|
9453
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { children: [
|
|
9454
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-gray-600", children: "From:" }),
|
|
9455
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("span", { className: "font-mono ml-1", children: [
|
|
9632
9456
|
formatAddress(tx.from.hash),
|
|
9633
|
-
tx.from.is_contract && /* @__PURE__ */ (0,
|
|
9457
|
+
tx.from.is_contract && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-xs text-blue-600 ml-1", children: "(Contract)" })
|
|
9634
9458
|
] })
|
|
9635
9459
|
] }),
|
|
9636
|
-
/* @__PURE__ */ (0,
|
|
9637
|
-
/* @__PURE__ */ (0,
|
|
9638
|
-
/* @__PURE__ */ (0,
|
|
9460
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { children: [
|
|
9461
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-gray-600", children: "To:" }),
|
|
9462
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("span", { className: "font-mono ml-1", children: [
|
|
9639
9463
|
formatAddress(tx.to.hash),
|
|
9640
|
-
tx.to.is_contract && /* @__PURE__ */ (0,
|
|
9464
|
+
tx.to.is_contract && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-xs text-blue-600 ml-1", children: "(Contract)" })
|
|
9641
9465
|
] })
|
|
9642
9466
|
] }),
|
|
9643
|
-
/* @__PURE__ */ (0,
|
|
9644
|
-
/* @__PURE__ */ (0,
|
|
9645
|
-
/* @__PURE__ */ (0,
|
|
9467
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { children: [
|
|
9468
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-gray-600", children: "Value:" }),
|
|
9469
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("span", { className: "font-semibold ml-1", children: [
|
|
9646
9470
|
formatValue(tx.value),
|
|
9647
9471
|
" LUMIA"
|
|
9648
9472
|
] })
|
|
9649
9473
|
] })
|
|
9650
9474
|
] })
|
|
9651
9475
|
] }),
|
|
9652
|
-
/* @__PURE__ */ (0,
|
|
9653
|
-
/* @__PURE__ */ (0,
|
|
9654
|
-
/* @__PURE__ */ (0,
|
|
9476
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "text-right text-xs text-gray-500", children: [
|
|
9477
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { children: formatDate2(tx.timestamp) }),
|
|
9478
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "mt-1", children: [
|
|
9655
9479
|
"Gas: ",
|
|
9656
9480
|
parseInt(tx.gas_used).toLocaleString()
|
|
9657
9481
|
] }),
|
|
9658
|
-
tx.method && /* @__PURE__ */ (0,
|
|
9482
|
+
tx.method && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "mt-1 text-blue-600", children: tx.method })
|
|
9659
9483
|
] })
|
|
9660
9484
|
] }),
|
|
9661
|
-
tx.transaction_types.length > 0 && /* @__PURE__ */ (0,
|
|
9485
|
+
tx.transaction_types.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "flex flex-wrap gap-1 mt-2", children: tx.transaction_types.map((type, idx) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
9662
9486
|
"span",
|
|
9663
9487
|
{
|
|
9664
9488
|
className: "text-xs bg-blue-100 text-blue-800 px-2 py-1 rounded-full",
|
|
@@ -9673,7 +9497,7 @@ var TransactionsList = ({
|
|
|
9673
9497
|
};
|
|
9674
9498
|
|
|
9675
9499
|
// src/hooks/useUserOpStatus.ts
|
|
9676
|
-
var
|
|
9500
|
+
var React30 = __toESM(require("react"), 1);
|
|
9677
9501
|
init_base();
|
|
9678
9502
|
function useUserOpStatus(options = {}) {
|
|
9679
9503
|
const {
|
|
@@ -9685,16 +9509,16 @@ function useUserOpStatus(options = {}) {
|
|
|
9685
9509
|
onReceipt,
|
|
9686
9510
|
onTxHash
|
|
9687
9511
|
} = options;
|
|
9688
|
-
const [state, setState] =
|
|
9689
|
-
const [receipt, setReceipt] =
|
|
9690
|
-
const [mempool, setMempool] =
|
|
9691
|
-
const [txHash, setTxHash] =
|
|
9692
|
-
const [error, setError] =
|
|
9693
|
-
const [isPolling, setIsPolling] =
|
|
9694
|
-
const intervalRef =
|
|
9695
|
-
const startTimeRef =
|
|
9696
|
-
const prevStateRef =
|
|
9697
|
-
const rpc =
|
|
9512
|
+
const [state, setState] = React30.useState("waiting");
|
|
9513
|
+
const [receipt, setReceipt] = React30.useState(null);
|
|
9514
|
+
const [mempool, setMempool] = React30.useState(null);
|
|
9515
|
+
const [txHash, setTxHash] = React30.useState(null);
|
|
9516
|
+
const [error, setError] = React30.useState(null);
|
|
9517
|
+
const [isPolling, setIsPolling] = React30.useState(false);
|
|
9518
|
+
const intervalRef = React30.useRef(null);
|
|
9519
|
+
const startTimeRef = React30.useRef(Date.now());
|
|
9520
|
+
const prevStateRef = React30.useRef("waiting");
|
|
9521
|
+
const rpc = React30.useCallback(async (method, params) => {
|
|
9698
9522
|
const body = { jsonrpc: "2.0", id: 1, method, params };
|
|
9699
9523
|
const res = await fetch(getBundlerUrl(), {
|
|
9700
9524
|
method: "POST",
|
|
@@ -9705,21 +9529,21 @@ function useUserOpStatus(options = {}) {
|
|
|
9705
9529
|
if (json.error) throw new Error(json.error.message || JSON.stringify(json.error));
|
|
9706
9530
|
return json.result;
|
|
9707
9531
|
}, []);
|
|
9708
|
-
const extractMempoolInfo =
|
|
9532
|
+
const extractMempoolInfo = React30.useCallback((m) => {
|
|
9709
9533
|
if (!m) return null;
|
|
9710
9534
|
const entryPoint = m.entryPoint || m?.userOperation?.entryPoint || null;
|
|
9711
9535
|
const sender = m.sender || m?.userOperation?.sender || null;
|
|
9712
9536
|
if (!entryPoint && !sender) return null;
|
|
9713
9537
|
return { entryPoint, sender };
|
|
9714
9538
|
}, []);
|
|
9715
|
-
const updateState =
|
|
9539
|
+
const updateState = React30.useCallback((newState) => {
|
|
9716
9540
|
setState(newState);
|
|
9717
9541
|
if (prevStateRef.current !== newState) {
|
|
9718
9542
|
prevStateRef.current = newState;
|
|
9719
9543
|
onStateChange?.(newState);
|
|
9720
9544
|
}
|
|
9721
9545
|
}, [onStateChange]);
|
|
9722
|
-
const tick =
|
|
9546
|
+
const tick = React30.useCallback(async () => {
|
|
9723
9547
|
if (!userOpHash || !enabled) return;
|
|
9724
9548
|
if (receipt) {
|
|
9725
9549
|
console.log("[useUserOpStatus] Already have receipt, skipping tick");
|
|
@@ -9792,7 +9616,7 @@ function useUserOpStatus(options = {}) {
|
|
|
9792
9616
|
onTxHash,
|
|
9793
9617
|
onReceipt
|
|
9794
9618
|
]);
|
|
9795
|
-
|
|
9619
|
+
React30.useEffect(() => {
|
|
9796
9620
|
if (!userOpHash || !enabled) return;
|
|
9797
9621
|
console.log("[useUserOpStatus] Initializing for UserOp hash:", userOpHash);
|
|
9798
9622
|
startTimeRef.current = Date.now();
|
|
@@ -9804,7 +9628,7 @@ function useUserOpStatus(options = {}) {
|
|
|
9804
9628
|
setError(null);
|
|
9805
9629
|
setIsPolling(false);
|
|
9806
9630
|
}, [userOpHash, enabled]);
|
|
9807
|
-
|
|
9631
|
+
React30.useEffect(() => {
|
|
9808
9632
|
if (!userOpHash || !enabled) {
|
|
9809
9633
|
console.log("[useUserOpStatus] Not starting polling - no hash or disabled");
|
|
9810
9634
|
return;
|
|
@@ -9840,7 +9664,7 @@ function useUserOpStatus(options = {}) {
|
|
|
9840
9664
|
}
|
|
9841
9665
|
};
|
|
9842
9666
|
}, [userOpHash, enabled, pollMs]);
|
|
9843
|
-
const refresh =
|
|
9667
|
+
const refresh = React30.useCallback(async () => {
|
|
9844
9668
|
await tick();
|
|
9845
9669
|
}, [tick]);
|
|
9846
9670
|
return {
|