@volr/react-ui 0.1.107 → 0.1.110

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/index.cjs CHANGED
@@ -17,6 +17,123 @@ var __esm = (fn, res) => function __init() {
17
17
  return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
18
18
  };
19
19
 
20
+ // ../node_modules/viem/_esm/errors/version.js
21
+ var version;
22
+ var init_version = __esm({
23
+ "../node_modules/viem/_esm/errors/version.js"() {
24
+ version = "2.38.6";
25
+ }
26
+ });
27
+
28
+ // ../node_modules/viem/_esm/errors/base.js
29
+ function walk(err, fn) {
30
+ if (fn?.(err))
31
+ return err;
32
+ if (err && typeof err === "object" && "cause" in err && err.cause !== void 0)
33
+ return walk(err.cause, fn);
34
+ return fn ? null : err;
35
+ }
36
+ var errorConfig, BaseError;
37
+ var init_base = __esm({
38
+ "../node_modules/viem/_esm/errors/base.js"() {
39
+ init_version();
40
+ errorConfig = {
41
+ getDocsUrl: ({ docsBaseUrl, docsPath = "", docsSlug }) => docsPath ? `${docsBaseUrl ?? "https://viem.sh"}${docsPath}${docsSlug ? `#${docsSlug}` : ""}` : void 0,
42
+ version: `viem@${version}`
43
+ };
44
+ BaseError = class _BaseError extends Error {
45
+ constructor(shortMessage, args = {}) {
46
+ const details = (() => {
47
+ if (args.cause instanceof _BaseError)
48
+ return args.cause.details;
49
+ if (args.cause?.message)
50
+ return args.cause.message;
51
+ return args.details;
52
+ })();
53
+ const docsPath = (() => {
54
+ if (args.cause instanceof _BaseError)
55
+ return args.cause.docsPath || args.docsPath;
56
+ return args.docsPath;
57
+ })();
58
+ const docsUrl = errorConfig.getDocsUrl?.({ ...args, docsPath });
59
+ const message = [
60
+ shortMessage || "An error occurred.",
61
+ "",
62
+ ...args.metaMessages ? [...args.metaMessages, ""] : [],
63
+ ...docsUrl ? [`Docs: ${docsUrl}`] : [],
64
+ ...details ? [`Details: ${details}`] : [],
65
+ ...errorConfig.version ? [`Version: ${errorConfig.version}`] : []
66
+ ].join("\n");
67
+ super(message, args.cause ? { cause: args.cause } : void 0);
68
+ Object.defineProperty(this, "details", {
69
+ enumerable: true,
70
+ configurable: true,
71
+ writable: true,
72
+ value: void 0
73
+ });
74
+ Object.defineProperty(this, "docsPath", {
75
+ enumerable: true,
76
+ configurable: true,
77
+ writable: true,
78
+ value: void 0
79
+ });
80
+ Object.defineProperty(this, "metaMessages", {
81
+ enumerable: true,
82
+ configurable: true,
83
+ writable: true,
84
+ value: void 0
85
+ });
86
+ Object.defineProperty(this, "shortMessage", {
87
+ enumerable: true,
88
+ configurable: true,
89
+ writable: true,
90
+ value: void 0
91
+ });
92
+ Object.defineProperty(this, "version", {
93
+ enumerable: true,
94
+ configurable: true,
95
+ writable: true,
96
+ value: void 0
97
+ });
98
+ Object.defineProperty(this, "name", {
99
+ enumerable: true,
100
+ configurable: true,
101
+ writable: true,
102
+ value: "BaseError"
103
+ });
104
+ this.details = details;
105
+ this.docsPath = docsPath;
106
+ this.metaMessages = args.metaMessages;
107
+ this.name = args.name ?? this.name;
108
+ this.shortMessage = shortMessage;
109
+ this.version = version;
110
+ }
111
+ walk(fn) {
112
+ return walk(this, fn);
113
+ }
114
+ };
115
+ }
116
+ });
117
+
118
+ // ../node_modules/viem/_esm/utils/unit/formatUnits.js
119
+ function formatUnits(value, decimals) {
120
+ let display = value.toString();
121
+ const negative = display.startsWith("-");
122
+ if (negative)
123
+ display = display.slice(1);
124
+ display = display.padStart(decimals, "0");
125
+ let [integer, fraction] = [
126
+ display.slice(0, display.length - decimals),
127
+ display.slice(display.length - decimals)
128
+ ];
129
+ fraction = fraction.replace(/(0+)$/, "");
130
+ return `${negative ? "-" : ""}${integer || "0"}${fraction ? `.${fraction}` : ""}`;
131
+ }
132
+ var init_formatUnits = __esm({
133
+ "../node_modules/viem/_esm/utils/unit/formatUnits.js"() {
134
+ }
135
+ });
136
+
20
137
  // ../node_modules/viem/_esm/constants/abis.js
21
138
  var universalResolverErrors, erc20Abi;
22
139
  var init_abis = __esm({
@@ -357,7 +474,9 @@ var en = {
357
474
  common: {
358
475
  back: "Back",
359
476
  loading: "Loading...",
360
- cancel: "Cancel"
477
+ cancel: "Cancel",
478
+ done: "Done",
479
+ tryAgain: "Try again"
361
480
  },
362
481
  login: {
363
482
  title: "Sign in",
@@ -440,7 +559,50 @@ var en = {
440
559
  title: "My Account",
441
560
  walletAddress: "Wallet Address",
442
561
  email: "Email",
443
- logout: "Log out"
562
+ logout: "Log out",
563
+ totalBalance: "Total Balance",
564
+ noAssets: "No assets configured",
565
+ menu: {
566
+ assets: "Assets",
567
+ withdraw: "Withdraw",
568
+ payments: "Payment History",
569
+ account: "Account"
570
+ },
571
+ info: {
572
+ loginMethod: {
573
+ label: "Login Method",
574
+ email: "Email",
575
+ google: "Google",
576
+ twitter: "Twitter",
577
+ wallet: "Wallet"
578
+ },
579
+ connectedWallet: "Connected Wallet",
580
+ signerType: "Signer Type"
581
+ },
582
+ withdraw: {
583
+ title: "Withdraw",
584
+ selectToken: "Select token to withdraw",
585
+ toAddress: "Destination Address",
586
+ amount: "Amount",
587
+ available: "Available",
588
+ useConnectedWallet: "Use connected wallet",
589
+ confirm: "Confirm Withdrawal",
590
+ processing: "Processing withdrawal...",
591
+ success: "Withdrawal Successful",
592
+ sent: "sent",
593
+ failed: "Withdrawal Failed",
594
+ unknownError: "An unknown error occurred"
595
+ },
596
+ payments: {
597
+ payment: "Payment",
598
+ noPayments: "No payment history",
599
+ fetchError: "Failed to load payment history",
600
+ createdAt: "Created",
601
+ confirmedAt: "Confirmed",
602
+ token: "Token",
603
+ txHash: "Transaction",
604
+ referenceId: "Reference ID"
605
+ }
444
606
  },
445
607
  deposit: {
446
608
  selectTitle: "Select asset to deposit",
@@ -461,7 +623,26 @@ var en = {
461
623
  noAssets: "No deposit assets configured.",
462
624
  otherToken: "Deposit with another token",
463
625
  noToken: "Don't have this token?",
464
- getOtherToken: "Deposit with another token"
626
+ getOtherToken: "Deposit with another token",
627
+ // Wallet transfer
628
+ useWallet: "Use connected wallet",
629
+ walletTransfer: {
630
+ title: "Transfer from Wallet",
631
+ selectWallet: "Select wallet",
632
+ noWallets: "No wallets detected",
633
+ connecting: "Connecting...",
634
+ balance: "Balance",
635
+ amount: "Amount",
636
+ amountPlaceholder: "Enter amount",
637
+ max: "MAX",
638
+ transfer: "Transfer",
639
+ transferring: "Transferring...",
640
+ success: "Transfer successful!",
641
+ insufficientBalance: "Insufficient balance",
642
+ invalidAmount: "Invalid amount",
643
+ wrongNetwork: "Please switch to {{network}}",
644
+ switchNetwork: "Switch Network"
645
+ }
465
646
  },
466
647
  sign: {
467
648
  title: "Sign Request",
@@ -486,7 +667,9 @@ var ko = {
486
667
  common: {
487
668
  back: "\uB4A4\uB85C",
488
669
  loading: "\uB85C\uB529 \uC911...",
489
- cancel: "\uCDE8\uC18C"
670
+ cancel: "\uCDE8\uC18C",
671
+ done: "\uC644\uB8CC",
672
+ tryAgain: "\uB2E4\uC2DC \uC2DC\uB3C4"
490
673
  },
491
674
  login: {
492
675
  title: "\uB85C\uADF8\uC778",
@@ -569,7 +752,50 @@ var ko = {
569
752
  title: "\uB0B4 \uACC4\uC815",
570
753
  walletAddress: "\uC9C0\uAC11 \uC8FC\uC18C",
571
754
  email: "\uC774\uBA54\uC77C",
572
- logout: "\uB85C\uADF8\uC544\uC6C3"
755
+ logout: "\uB85C\uADF8\uC544\uC6C3",
756
+ totalBalance: "\uCD1D \uC794\uACE0",
757
+ noAssets: "\uC124\uC815\uB41C \uC790\uC0B0\uC774 \uC5C6\uC2B5\uB2C8\uB2E4",
758
+ menu: {
759
+ assets: "\uC790\uC0B0",
760
+ withdraw: "\uCD9C\uAE08",
761
+ payments: "\uACB0\uC81C \uAE30\uB85D",
762
+ account: "\uACC4\uC815 \uC815\uBCF4"
763
+ },
764
+ info: {
765
+ loginMethod: {
766
+ label: "\uB85C\uADF8\uC778 \uBC29\uBC95",
767
+ email: "\uC774\uBA54\uC77C",
768
+ google: "\uAD6C\uAE00",
769
+ twitter: "\uD2B8\uC704\uD130",
770
+ wallet: "\uC9C0\uAC11"
771
+ },
772
+ connectedWallet: "\uC5F0\uACB0\uB41C \uC678\uBD80 \uC9C0\uAC11",
773
+ signerType: "\uC11C\uBA85 \uBC29\uC2DD"
774
+ },
775
+ withdraw: {
776
+ title: "\uCD9C\uAE08",
777
+ selectToken: "\uCD9C\uAE08\uD560 \uD1A0\uD070 \uC120\uD0DD",
778
+ toAddress: "\uBC1B\uB294 \uC8FC\uC18C",
779
+ amount: "\uAE08\uC561",
780
+ available: "\uC0AC\uC6A9 \uAC00\uB2A5",
781
+ useConnectedWallet: "\uC5F0\uACB0\uB41C \uC9C0\uAC11\uC73C\uB85C \uBCF4\uB0B4\uAE30",
782
+ confirm: "\uCD9C\uAE08 \uD655\uC778",
783
+ processing: "\uCD9C\uAE08 \uCC98\uB9AC \uC911...",
784
+ success: "\uCD9C\uAE08 \uC644\uB8CC",
785
+ sent: "\uC804\uC1A1\uB428",
786
+ failed: "\uCD9C\uAE08 \uC2E4\uD328",
787
+ unknownError: "\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4"
788
+ },
789
+ payments: {
790
+ payment: "\uACB0\uC81C",
791
+ noPayments: "\uACB0\uC81C \uAE30\uB85D\uC774 \uC5C6\uC2B5\uB2C8\uB2E4",
792
+ fetchError: "\uACB0\uC81C \uAE30\uB85D\uC744 \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4",
793
+ createdAt: "\uC0DD\uC131\uC77C\uC2DC",
794
+ confirmedAt: "\uD655\uC815\uC77C\uC2DC",
795
+ token: "\uD1A0\uD070",
796
+ txHash: "\uD2B8\uB79C\uC7AD\uC158",
797
+ referenceId: "\uCC38\uC870 ID"
798
+ }
573
799
  },
574
800
  deposit: {
575
801
  selectTitle: "\uCDA9\uC804\uD560 \uC790\uC0B0\uC744 \uC120\uD0DD\uD558\uC138\uC694",
@@ -590,7 +816,26 @@ var ko = {
590
816
  noAssets: "\uC124\uC815\uB41C \uCDA9\uC804 \uC790\uC0B0\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",
591
817
  otherToken: "\uB2E4\uB978 \uD1A0\uD070\uC73C\uB85C \uCDA9\uC804\uD558\uAE30",
592
818
  noToken: "\uC774 \uD1A0\uD070\uC774 \uC5C6\uC73C\uC2E0\uAC00\uC694?",
593
- getOtherToken: "\uB2E4\uB978 \uD1A0\uD070\uC73C\uB85C \uC785\uAE08\uD558\uAE30"
819
+ getOtherToken: "\uB2E4\uB978 \uD1A0\uD070\uC73C\uB85C \uC785\uAE08\uD558\uAE30",
820
+ // Wallet transfer
821
+ useWallet: "\uC5F0\uACB0\uB41C \uC9C0\uAC11\uC73C\uB85C \uC785\uAE08",
822
+ walletTransfer: {
823
+ title: "\uC9C0\uAC11\uC5D0\uC11C \uC804\uC1A1",
824
+ selectWallet: "\uC9C0\uAC11 \uC120\uD0DD",
825
+ noWallets: "\uAC10\uC9C0\uB41C \uC9C0\uAC11\uC774 \uC5C6\uC2B5\uB2C8\uB2E4",
826
+ connecting: "\uC5F0\uACB0 \uC911...",
827
+ balance: "\uC794\uACE0",
828
+ amount: "\uAE08\uC561",
829
+ amountPlaceholder: "\uAE08\uC561 \uC785\uB825",
830
+ max: "\uCD5C\uB300",
831
+ transfer: "\uC804\uC1A1",
832
+ transferring: "\uC804\uC1A1 \uC911...",
833
+ success: "\uC804\uC1A1 \uC644\uB8CC!",
834
+ insufficientBalance: "\uC794\uACE0 \uBD80\uC871",
835
+ invalidAmount: "\uC798\uBABB\uB41C \uAE08\uC561",
836
+ wrongNetwork: "{{network}}\uB85C \uB124\uD2B8\uC6CC\uD06C\uB97C \uBCC0\uACBD\uD574\uC8FC\uC138\uC694",
837
+ switchNetwork: "\uB124\uD2B8\uC6CC\uD06C \uBCC0\uACBD"
838
+ }
594
839
  },
595
840
  sign: {
596
841
  title: "\uC11C\uBA85 \uC694\uCCAD",
@@ -741,7 +986,7 @@ function useMediaQuery(query) {
741
986
  }
742
987
 
743
988
  // src/generated/volr-sdk-css.ts
744
- var VOLR_SDK_CSS = '/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--volr-tw-translate-x:0;--volr-tw-translate-y:0;--volr-tw-translate-z:0;--volr-tw-space-y-reverse:0;--volr-tw-border-style:solid;--volr-tw-gradient-position:initial;--volr-tw-gradient-from:#0000;--volr-tw-gradient-via:#0000;--volr-tw-gradient-to:#0000;--volr-tw-gradient-stops:initial;--volr-tw-gradient-via-stops:initial;--volr-tw-gradient-from-position:0%;--volr-tw-gradient-via-position:50%;--volr-tw-gradient-to-position:100%;--volr-tw-leading:initial;--volr-tw-font-weight:initial;--volr-tw-shadow:0 0 #0000;--volr-tw-shadow-color:initial;--volr-tw-shadow-alpha:100%;--volr-tw-inset-shadow:0 0 #0000;--volr-tw-inset-shadow-color:initial;--volr-tw-inset-shadow-alpha:100%;--volr-tw-ring-color:initial;--volr-tw-ring-shadow:0 0 #0000;--volr-tw-inset-ring-color:initial;--volr-tw-inset-ring-shadow:0 0 #0000;--volr-tw-ring-inset:initial;--volr-tw-ring-offset-width:0px;--volr-tw-ring-offset-color:#fff;--volr-tw-ring-offset-shadow:0 0 #0000;--volr-tw-blur:initial;--volr-tw-brightness:initial;--volr-tw-contrast:initial;--volr-tw-grayscale:initial;--volr-tw-hue-rotate:initial;--volr-tw-invert:initial;--volr-tw-opacity:initial;--volr-tw-saturate:initial;--volr-tw-sepia:initial;--volr-tw-drop-shadow:initial;--volr-tw-drop-shadow-color:initial;--volr-tw-drop-shadow-alpha:100%;--volr-tw-drop-shadow-size:initial;--volr-tw-duration:initial;--volr-tw-ease:initial}}}@layer theme{:root,:host{--volr-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--volr-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--volr-color-red-50:oklch(97.1% .013 17.38);--volr-color-red-200:oklch(88.5% .062 18.334);--volr-color-red-500:oklch(63.7% .237 25.331);--volr-color-red-600:oklch(57.7% .245 27.325);--volr-color-red-700:oklch(50.5% .213 27.518);--volr-color-orange-600:oklch(64.6% .222 41.116);--volr-color-green-50:oklch(98.2% .018 155.826);--volr-color-green-600:oklch(62.7% .194 149.214);--volr-color-emerald-300:oklch(84.5% .143 164.978);--volr-color-emerald-400:oklch(76.5% .177 163.223);--volr-color-emerald-500:oklch(69.6% .17 162.48);--volr-color-emerald-600:oklch(59.6% .145 163.225);--volr-color-teal-400:oklch(77.7% .152 181.912);--volr-color-teal-500:oklch(70.4% .14 182.503);--volr-color-cyan-400:oklch(78.9% .154 211.53);--volr-color-blue-600:oklch(54.6% .245 262.881);--volr-color-purple-600:oklch(55.8% .288 302.321);--volr-color-slate-50:oklch(98.4% .003 247.858);--volr-color-slate-100:oklch(96.8% .007 247.896);--volr-color-slate-200:oklch(92.9% .013 255.508);--volr-color-slate-300:oklch(86.9% .022 252.894);--volr-color-slate-400:oklch(70.4% .04 256.788);--volr-color-slate-500:oklch(55.4% .046 257.417);--volr-color-slate-600:oklch(44.6% .043 257.281);--volr-color-slate-900:oklch(20.8% .042 265.755);--volr-color-gray-500:oklch(55.1% .027 264.364);--volr-color-black:#000;--volr-color-white:#fff;--volr-spacing:.25rem;--volr-container-md:28rem;--volr-container-4xl:56rem;--volr-text-xs:.75rem;--volr-text-xs--line-height:calc(1/.75);--volr-text-sm:.875rem;--volr-text-sm--line-height:calc(1.25/.875);--volr-text-base:1rem;--volr-text-base--line-height:calc(1.5/1);--volr-text-lg:1.125rem;--volr-text-lg--line-height:calc(1.75/1.125);--volr-text-xl:1.25rem;--volr-text-xl--line-height:calc(1.75/1.25);--volr-text-2xl:1.5rem;--volr-text-2xl--line-height:calc(2/1.5);--volr-text-8xl:6rem;--volr-text-8xl--line-height:1;--volr-font-weight-medium:500;--volr-font-weight-semibold:600;--volr-font-weight-bold:700;--volr-leading-relaxed:1.625;--volr-radius-md:.375rem;--volr-radius-lg:.5rem;--volr-radius-xl:.75rem;--volr-radius-2xl:1rem;--volr-radius-3xl:1.5rem;--volr-ease-out:cubic-bezier(0,0,.2,1);--volr-animate-spin:spin 1s linear infinite;--volr-animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--volr-blur-2xl:40px;--volr-default-transition-duration:.15s;--volr-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--volr-default-font-family:var(--volr-font-sans);--volr-default-mono-font-family:var(--volr-font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--volr-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--volr-default-font-feature-settings,normal);font-variation-settings:var(--volr-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--volr-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--volr-default-mono-font-feature-settings,normal);font-variation-settings:var(--volr-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:host{--volr-primary-color:var(--volr-accent-color,#303030);--volr-font-family:var(--volr-custom-font,inherit);--volr-bg:#fff;--volr-bg-secondary:#f8fafc;--volr-bg-tertiary:#f1f5f9;--volr-text:#0f172a;--volr-text-secondary:#475569;--volr-text-muted:#94a3b8;--volr-border:#e2e8f0;--volr-border-strong:#cbd5e1;--volr-hover-bg:#f8fafc;--volr-error-bg:#fef2f2;--volr-error-border:#fecaca;--volr-error-text:#991b1b}:host([data-theme=dark]){--volr-bg:#1c1c1e;--volr-bg-secondary:#2c2c2e;--volr-bg-tertiary:#3a3a3c;--volr-text:#f5f5f7;--volr-text-secondary:#c7c7cc;--volr-text-muted:#8e8e93;--volr-border:#3a3a3c;--volr-border-strong:#48484a;--volr-hover-bg:#2c2c2e;--volr-error-bg:#3c1f1f;--volr-error-border:#7f1d1d;--volr-error-text:#fca5a5}*,:before,:after{box-sizing:border-box}*{font-family:var(--volr-font-family);color:var(--volr-text)}button,input,select,textarea{color:var(--volr-text);background-color:#0000}button{cursor:pointer;background-color:#0000}input::placeholder{color:var(--volr-text-muted)}h1,h2,h3{color:var(--volr-text);margin:0;font-weight:700}h1{font-size:1.875rem;line-height:2.25rem}h2{font-size:1.5rem;line-height:2rem}h3{font-size:1.25rem;line-height:1.75rem}p{margin:0}}@layer components{.volr-dialog-overlay{inset:calc(var(--volr-spacing)*0);z-index:40;background-color:var(--volr-color-black);position:fixed}@supports (color:color-mix(in lab, red, red)){.volr-dialog-overlay{background-color:color-mix(in oklab,var(--volr-color-black)45%,transparent)}}.volr-dialog-content{z-index:50;border-radius:var(--volr-radius-2xl);border-style:var(--volr-tw-border-style);padding:calc(var(--volr-spacing)*7);--volr-tw-shadow:0 20px 25px -5px var(--volr-tw-shadow-color,#0000001a),0 8px 10px -6px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow);background-color:var(--volr-bg);border-width:1px;border-color:var(--volr-border-strong);width:calc(100% - 2rem);max-width:28rem;max-height:85vh;position:fixed;top:50%;left:50%;overflow-y:auto;transform:translate(-50%,-50%)}@media (max-width:640px){.volr-dialog-content{top:auto;right:calc(var(--volr-spacing)*0);bottom:calc(var(--volr-spacing)*0);left:calc(var(--volr-spacing)*0);border-radius:1.25rem 1.25rem 0 0;width:100%;max-width:100%;margin:0 auto;transform:translateY(0)}}.volr-dialog-close{top:calc(var(--volr-spacing)*4);right:calc(var(--volr-spacing)*4);height:calc(var(--volr-spacing)*8);width:calc(var(--volr-spacing)*8);color:var(--volr-text-muted);cursor:pointer;background-color:#0000;border:none;border-radius:3.40282e38px;justify-content:center;align-items:center;display:inline-flex;position:absolute}.volr-dialog-close:hover{background-color:var(--volr-hover-bg);color:var(--volr-text-secondary)}.volr-dialog-close:focus-visible{box-shadow:0 0 0 2px var(--volr-border-strong);outline:none}.volr-dialog-close-icon{height:calc(var(--volr-spacing)*4);width:calc(var(--volr-spacing)*4)}.volr-email-input{border:1px solid var(--volr-border-strong);background-color:var(--volr-bg);width:100%;color:var(--volr-text);border-radius:.5rem;outline:none;padding:.75rem .75rem .75rem 2.75rem;font-size:1rem;line-height:1.5}.volr-email-input::placeholder{color:var(--volr-text-muted)}.volr-email-input:focus{border-color:var(--volr-border-strong);box-shadow:0 0 0 2px var(--volr-border-strong)}.volr-option-button{border:1px solid var(--volr-border);background-color:var(--volr-bg);width:100%;color:var(--volr-text);cursor:pointer;border-radius:.5rem;align-items:center;gap:.75rem;padding:.75rem;transition:background-color .15s ease-out,border-color .15s ease-out,box-shadow .15s ease-out;display:flex}.volr-option-button:hover{background-color:var(--volr-hover-bg);border-color:var(--volr-border)}.volr-option-button:focus-visible{box-shadow:0 0 0 2px var(--volr-border-strong);outline:none}}@layer utilities{.volr\\:pointer-events-auto{pointer-events:auto}.volr\\:pointer-events-none{pointer-events:none}.volr\\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.volr\\:absolute{position:absolute}.volr\\:fixed{position:fixed}.volr\\:relative{position:relative}.volr\\:inset-0{inset:calc(var(--volr-spacing)*0)}.volr\\:-top-3{top:calc(var(--volr-spacing)*-3)}.volr\\:top-1\\/2{top:50%}.volr\\:-right-3{right:calc(var(--volr-spacing)*-3)}.volr\\:-right-4{right:calc(var(--volr-spacing)*-4)}.volr\\:right-2{right:calc(var(--volr-spacing)*2)}.volr\\:bottom-0{bottom:calc(var(--volr-spacing)*0)}.volr\\:-left-4{left:calc(var(--volr-spacing)*-4)}.volr\\:left-3{left:calc(var(--volr-spacing)*3)}.volr\\:-z-10{z-index:calc(10*-1)}.volr\\:z-10{z-index:10}.volr\\:z-20{z-index:20}.volr\\:z-40{z-index:40}.volr\\:z-50{z-index:50}.volr\\:mx-auto{margin-inline:auto}.volr\\:my-6{margin-block:calc(var(--volr-spacing)*6)}.volr\\:mt-0\\.5{margin-top:calc(var(--volr-spacing)*.5)}.volr\\:mt-1{margin-top:calc(var(--volr-spacing)*1)}.volr\\:mt-2{margin-top:calc(var(--volr-spacing)*2)}.volr\\:mt-3{margin-top:calc(var(--volr-spacing)*3)}.volr\\:mt-4{margin-top:calc(var(--volr-spacing)*4)}.volr\\:mt-6{margin-top:calc(var(--volr-spacing)*6)}.volr\\:mt-8{margin-top:calc(var(--volr-spacing)*8)}.volr\\:mb-1{margin-bottom:calc(var(--volr-spacing)*1)}.volr\\:mb-2{margin-bottom:calc(var(--volr-spacing)*2)}.volr\\:mb-3{margin-bottom:calc(var(--volr-spacing)*3)}.volr\\:mb-4{margin-bottom:calc(var(--volr-spacing)*4)}.volr\\:mb-5{margin-bottom:calc(var(--volr-spacing)*5)}.volr\\:mb-6{margin-bottom:calc(var(--volr-spacing)*6)}.volr\\:mb-8{margin-bottom:calc(var(--volr-spacing)*8)}.volr\\:-ml-2{margin-left:calc(var(--volr-spacing)*-2)}.volr\\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.volr\\:flex{display:flex}.volr\\:grid{display:grid}.volr\\:inline-block{display:inline-block}.volr\\:inline-flex{display:inline-flex}.volr\\:h-1{height:calc(var(--volr-spacing)*1)}.volr\\:h-1\\.5{height:calc(var(--volr-spacing)*1.5)}.volr\\:h-2{height:calc(var(--volr-spacing)*2)}.volr\\:h-3{height:calc(var(--volr-spacing)*3)}.volr\\:h-4{height:calc(var(--volr-spacing)*4)}.volr\\:h-5{height:calc(var(--volr-spacing)*5)}.volr\\:h-6{height:calc(var(--volr-spacing)*6)}.volr\\:h-7{height:calc(var(--volr-spacing)*7)}.volr\\:h-8{height:calc(var(--volr-spacing)*8)}.volr\\:h-10{height:calc(var(--volr-spacing)*10)}.volr\\:h-12{height:calc(var(--volr-spacing)*12)}.volr\\:h-14{height:calc(var(--volr-spacing)*14)}.volr\\:h-16{height:calc(var(--volr-spacing)*16)}.volr\\:h-20{height:calc(var(--volr-spacing)*20)}.volr\\:h-24{height:calc(var(--volr-spacing)*24)}.volr\\:h-40{height:calc(var(--volr-spacing)*40)}.volr\\:h-44{height:calc(var(--volr-spacing)*44)}.volr\\:h-48{height:calc(var(--volr-spacing)*48)}.volr\\:h-\\[0\\.8em\\]{height:.8em}.volr\\:h-\\[200px\\]{height:200px}.volr\\:h-full{height:100%}.volr\\:h-px{height:1px}.volr\\:max-h-36{max-height:calc(var(--volr-spacing)*36)}.volr\\:max-h-60{max-height:calc(var(--volr-spacing)*60)}.volr\\:max-h-96{max-height:calc(var(--volr-spacing)*96)}.volr\\:max-h-\\[85vh\\]{max-height:85vh}.volr\\:max-h-\\[90vh\\]{max-height:90vh}.volr\\:min-h-\\[120px\\]{min-height:120px}.volr\\:min-h-\\[500px\\]{min-height:500px}.volr\\:w-1\\.5{width:calc(var(--volr-spacing)*1.5)}.volr\\:w-2{width:calc(var(--volr-spacing)*2)}.volr\\:w-4{width:calc(var(--volr-spacing)*4)}.volr\\:w-5{width:calc(var(--volr-spacing)*5)}.volr\\:w-6{width:calc(var(--volr-spacing)*6)}.volr\\:w-7{width:calc(var(--volr-spacing)*7)}.volr\\:w-8{width:calc(var(--volr-spacing)*8)}.volr\\:w-10{width:calc(var(--volr-spacing)*10)}.volr\\:w-12{width:calc(var(--volr-spacing)*12)}.volr\\:w-14{width:calc(var(--volr-spacing)*14)}.volr\\:w-16{width:calc(var(--volr-spacing)*16)}.volr\\:w-20{width:calc(var(--volr-spacing)*20)}.volr\\:w-24{width:calc(var(--volr-spacing)*24)}.volr\\:w-32{width:calc(var(--volr-spacing)*32)}.volr\\:w-36{width:calc(var(--volr-spacing)*36)}.volr\\:w-40{width:calc(var(--volr-spacing)*40)}.volr\\:w-44{width:calc(var(--volr-spacing)*44)}.volr\\:w-48{width:calc(var(--volr-spacing)*48)}.volr\\:w-\\[200px\\]{width:200px}.volr\\:w-auto{width:auto}.volr\\:w-full{width:100%}.volr\\:max-w-4xl{max-width:var(--volr-container-4xl)}.volr\\:max-w-full{max-width:100%}.volr\\:max-w-md{max-width:var(--volr-container-md)}.volr\\:max-w-none{max-width:none}.volr\\:min-w-0{min-width:calc(var(--volr-spacing)*0)}.volr\\:flex-1{flex:1}.volr\\:flex-shrink-0,.volr\\:shrink-0{flex-shrink:0}.volr\\:-translate-y-1\\/2{--volr-tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--volr-tw-translate-x)var(--volr-tw-translate-y)}.volr\\:rotate-180{rotate:180deg}.volr\\:animate-\\[volrFadeIn_0\\.2s_ease-out\\]{animation:.2s ease-out volrFadeIn}.volr\\:animate-pulse{animation:var(--volr-animate-pulse)}.volr\\:animate-spin{animation:var(--volr-animate-spin)}.volr\\:cursor-not-allowed{cursor:not-allowed}.volr\\:cursor-pointer{cursor:pointer}.volr\\:list-inside{list-style-position:inside}.volr\\:list-decimal{list-style-type:decimal}.volr\\:grid-cols-\\[minmax\\(0\\,1\\.1fr\\)_minmax\\(0\\,1fr\\)\\]{grid-template-columns:minmax(0,1.1fr) minmax(0,1fr)}.volr\\:flex-col{flex-direction:column}.volr\\:flex-wrap{flex-wrap:wrap}.volr\\:items-baseline{align-items:baseline}.volr\\:items-center{align-items:center}.volr\\:items-end{align-items:flex-end}.volr\\:items-start{align-items:flex-start}.volr\\:justify-between{justify-content:space-between}.volr\\:justify-center{justify-content:center}.volr\\:gap-1{gap:calc(var(--volr-spacing)*1)}.volr\\:gap-2{gap:calc(var(--volr-spacing)*2)}.volr\\:gap-3{gap:calc(var(--volr-spacing)*3)}.volr\\:gap-4{gap:calc(var(--volr-spacing)*4)}:where(.volr\\:space-y-1>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*1)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*1)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-2>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*2)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*2)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-3>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*3)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*3)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-4>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*4)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*4)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-6>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*6)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*6)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-8>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*8)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*8)*calc(1 - var(--volr-tw-space-y-reverse)))}.volr\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.volr\\:overflow-auto{overflow:auto}.volr\\:overflow-hidden{overflow:hidden}.volr\\:overflow-visible{overflow:visible}.volr\\:overflow-y-auto{overflow-y:auto}.volr\\:rounded{border-radius:.25rem}.volr\\:rounded-2xl{border-radius:var(--volr-radius-2xl)}.volr\\:rounded-full{border-radius:3.40282e38px}.volr\\:rounded-lg{border-radius:var(--volr-radius-lg)}.volr\\:rounded-md{border-radius:var(--volr-radius-md)}.volr\\:rounded-xl{border-radius:var(--volr-radius-xl)}.volr\\:rounded-t-2xl{border-top-left-radius:var(--volr-radius-2xl);border-top-right-radius:var(--volr-radius-2xl)}.volr\\:rounded-t-3xl{border-top-left-radius:var(--volr-radius-3xl);border-top-right-radius:var(--volr-radius-3xl)}.volr\\:border{border-style:var(--volr-tw-border-style);border-width:1px}.volr\\:border-2{border-style:var(--volr-tw-border-style);border-width:2px}.volr\\:border-4{border-style:var(--volr-tw-border-style);border-width:4px}.volr\\:border-t{border-top-style:var(--volr-tw-border-style);border-top-width:1px}.volr\\:border-t-2{border-top-style:var(--volr-tw-border-style);border-top-width:2px}.volr\\:border-red-200{border-color:var(--volr-color-red-200)}.volr\\:border-slate-200{border-color:var(--volr-color-slate-200)}.volr\\:border-slate-300{border-color:var(--volr-color-slate-300)}.volr\\:border-white{border-color:var(--volr-color-white)}.volr\\:border-t-slate-600{border-top-color:var(--volr-color-slate-600)}.volr\\:bg-black\\/45{background-color:var(--volr-color-black)}@supports (color:color-mix(in lab, red, red)){.volr\\:bg-black\\/45{background-color:color-mix(in oklab,var(--volr-color-black)45%,transparent)}}.volr\\:bg-cyan-400{background-color:var(--volr-color-cyan-400)}.volr\\:bg-emerald-300{background-color:var(--volr-color-emerald-300)}.volr\\:bg-emerald-400{background-color:var(--volr-color-emerald-400)}.volr\\:bg-green-50{background-color:var(--volr-color-green-50)}.volr\\:bg-red-50{background-color:var(--volr-color-red-50)}.volr\\:bg-slate-50{background-color:var(--volr-color-slate-50)}.volr\\:bg-slate-100{background-color:var(--volr-color-slate-100)}.volr\\:bg-slate-200{background-color:var(--volr-color-slate-200)}.volr\\:bg-slate-900{background-color:var(--volr-color-slate-900)}.volr\\:bg-teal-400{background-color:var(--volr-color-teal-400)}.volr\\:bg-white{background-color:var(--volr-color-white)}.volr\\:bg-linear-to-br{--volr-tw-gradient-position:to bottom right}@supports (background-image:linear-gradient(in lab, red, red)){.volr\\:bg-linear-to-br{--volr-tw-gradient-position:to bottom right in oklab}}.volr\\:bg-linear-to-br{background-image:linear-gradient(var(--volr-tw-gradient-stops))}.volr\\:from-emerald-400{--volr-tw-gradient-from:var(--volr-color-emerald-400);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\:from-emerald-500{--volr-tw-gradient-from:var(--volr-color-emerald-500);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\:to-teal-500{--volr-tw-gradient-to:var(--volr-color-teal-500);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\:object-cover{object-fit:cover}.volr\\:p-1{padding:calc(var(--volr-spacing)*1)}.volr\\:p-2{padding:calc(var(--volr-spacing)*2)}.volr\\:p-3{padding:calc(var(--volr-spacing)*3)}.volr\\:p-4{padding:calc(var(--volr-spacing)*4)}.volr\\:p-5{padding:calc(var(--volr-spacing)*5)}.volr\\:p-8{padding:calc(var(--volr-spacing)*8)}.volr\\:px-1\\.5{padding-inline:calc(var(--volr-spacing)*1.5)}.volr\\:px-2{padding-inline:calc(var(--volr-spacing)*2)}.volr\\:px-3{padding-inline:calc(var(--volr-spacing)*3)}.volr\\:px-4{padding-inline:calc(var(--volr-spacing)*4)}.volr\\:py-0\\.5{padding-block:calc(var(--volr-spacing)*.5)}.volr\\:py-1{padding-block:calc(var(--volr-spacing)*1)}.volr\\:py-1\\.5{padding-block:calc(var(--volr-spacing)*1.5)}.volr\\:py-2{padding-block:calc(var(--volr-spacing)*2)}.volr\\:py-2\\.5{padding-block:calc(var(--volr-spacing)*2.5)}.volr\\:py-3{padding-block:calc(var(--volr-spacing)*3)}.volr\\:py-4{padding-block:calc(var(--volr-spacing)*4)}.volr\\:py-6{padding-block:calc(var(--volr-spacing)*6)}.volr\\:py-8{padding-block:calc(var(--volr-spacing)*8)}.volr\\:py-12{padding-block:calc(var(--volr-spacing)*12)}.volr\\:pt-2{padding-top:calc(var(--volr-spacing)*2)}.volr\\:pt-3{padding-top:calc(var(--volr-spacing)*3)}.volr\\:pt-4{padding-top:calc(var(--volr-spacing)*4)}.volr\\:pr-3{padding-right:calc(var(--volr-spacing)*3)}.volr\\:pb-2{padding-bottom:calc(var(--volr-spacing)*2)}.volr\\:pb-4{padding-bottom:calc(var(--volr-spacing)*4)}.volr\\:pl-4{padding-left:calc(var(--volr-spacing)*4)}.volr\\:pl-11{padding-left:calc(var(--volr-spacing)*11)}.volr\\:text-center{text-align:center}.volr\\:text-left{text-align:left}.volr\\:text-right{text-align:right}.volr\\:align-baseline{vertical-align:baseline}.volr\\:font-mono{font-family:var(--volr-font-mono)}.volr\\:text-2xl{font-size:var(--volr-text-2xl);line-height:var(--volr-tw-leading,var(--volr-text-2xl--line-height))}.volr\\:text-8xl{font-size:var(--volr-text-8xl);line-height:var(--volr-tw-leading,var(--volr-text-8xl--line-height))}.volr\\:text-base{font-size:var(--volr-text-base);line-height:var(--volr-tw-leading,var(--volr-text-base--line-height))}.volr\\:text-lg{font-size:var(--volr-text-lg);line-height:var(--volr-tw-leading,var(--volr-text-lg--line-height))}.volr\\:text-sm{font-size:var(--volr-text-sm);line-height:var(--volr-tw-leading,var(--volr-text-sm--line-height))}.volr\\:text-xl{font-size:var(--volr-text-xl);line-height:var(--volr-tw-leading,var(--volr-text-xl--line-height))}.volr\\:text-xs{font-size:var(--volr-text-xs);line-height:var(--volr-tw-leading,var(--volr-text-xs--line-height))}.volr\\:leading-relaxed{--volr-tw-leading:var(--volr-leading-relaxed);line-height:var(--volr-leading-relaxed)}.volr\\:font-bold{--volr-tw-font-weight:var(--volr-font-weight-bold);font-weight:var(--volr-font-weight-bold)}.volr\\:font-medium{--volr-tw-font-weight:var(--volr-font-weight-medium);font-weight:var(--volr-font-weight-medium)}.volr\\:font-semibold{--volr-tw-font-weight:var(--volr-font-weight-semibold);font-weight:var(--volr-font-weight-semibold)}.volr\\:break-all{word-break:break-all}.volr\\:text-blue-600{color:var(--volr-color-blue-600)}.volr\\:text-emerald-600{color:var(--volr-color-emerald-600)}.volr\\:text-gray-500{color:var(--volr-color-gray-500)}.volr\\:text-green-600{color:var(--volr-color-green-600)}.volr\\:text-orange-600{color:var(--volr-color-orange-600)}.volr\\:text-purple-600{color:var(--volr-color-purple-600)}.volr\\:text-red-500{color:var(--volr-color-red-500)}.volr\\:text-red-600{color:var(--volr-color-red-600)}.volr\\:text-red-700{color:var(--volr-color-red-700)}.volr\\:text-slate-100{color:var(--volr-color-slate-100)}.volr\\:text-slate-400{color:var(--volr-color-slate-400)}.volr\\:text-slate-500{color:var(--volr-color-slate-500)}.volr\\:text-slate-600{color:var(--volr-color-slate-600)}.volr\\:text-slate-900{color:var(--volr-color-slate-900)}.volr\\:text-white{color:var(--volr-color-white)}.volr\\:capitalize{text-transform:capitalize}.volr\\:underline{text-decoration-line:underline}.volr\\:opacity-0{opacity:0}.volr\\:opacity-25{opacity:.25}.volr\\:opacity-30{opacity:.3}.volr\\:opacity-50{opacity:.5}.volr\\:opacity-75{opacity:.75}.volr\\:shadow-2xl{--volr-tw-shadow:0 25px 50px -12px var(--volr-tw-shadow-color,#00000040);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-\\[0_-8px_30px_rgba\\(0\\,0\\,0\\,0\\.2\\)\\]{--volr-tw-shadow:0 -8px 30px var(--volr-tw-shadow-color,#0003);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-lg{--volr-tw-shadow:0 10px 15px -3px var(--volr-tw-shadow-color,#0000001a),0 4px 6px -4px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-md{--volr-tw-shadow:0 4px 6px -1px var(--volr-tw-shadow-color,#0000001a),0 2px 4px -2px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-sm{--volr-tw-shadow:0 1px 3px 0 var(--volr-tw-shadow-color,#0000001a),0 1px 2px -1px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-xl{--volr-tw-shadow:0 20px 25px -5px var(--volr-tw-shadow-color,#0000001a),0 8px 10px -6px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-emerald-500\\/50{--volr-tw-shadow-color:var(--volr-color-emerald-500)}@supports (color:color-mix(in lab, red, red)){.volr\\:shadow-emerald-500\\/50{--volr-tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--volr-color-emerald-500)50%,transparent)var(--volr-tw-shadow-alpha),transparent)}}.volr\\:blur-2xl{--volr-tw-blur:blur(var(--volr-blur-2xl));filter:var(--volr-tw-blur,)var(--volr-tw-brightness,)var(--volr-tw-contrast,)var(--volr-tw-grayscale,)var(--volr-tw-hue-rotate,)var(--volr-tw-invert,)var(--volr-tw-saturate,)var(--volr-tw-sepia,)var(--volr-tw-drop-shadow,)}.volr\\:transition-all{transition-property:all;transition-timing-function:var(--volr-tw-ease,var(--volr-default-transition-timing-function));transition-duration:var(--volr-tw-duration,var(--volr-default-transition-duration))}.volr\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--volr-tw-gradient-from,--volr-tw-gradient-via,--volr-tw-gradient-to;transition-timing-function:var(--volr-tw-ease,var(--volr-default-transition-timing-function));transition-duration:var(--volr-tw-duration,var(--volr-default-transition-duration))}.volr\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--volr-tw-ease,var(--volr-default-transition-timing-function));transition-duration:var(--volr-tw-duration,var(--volr-default-transition-duration))}.volr\\:duration-300{--volr-tw-duration:.3s;transition-duration:.3s}.volr\\:duration-500{--volr-tw-duration:.5s;transition-duration:.5s}.volr\\:ease-out{--volr-tw-ease:var(--volr-ease-out);transition-timing-function:var(--volr-ease-out)}.volr\\:outline-none{--volr-tw-outline-style:none;outline-style:none}@media (hover:hover){.volr\\:hover\\:border-slate-300:hover{border-color:var(--volr-color-slate-300)}.volr\\:hover\\:bg-slate-50:hover{background-color:var(--volr-color-slate-50)}}.volr\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.volr\\:disabled\\:opacity-50:disabled{opacity:.5}.volr-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.volr-text-secondary{color:var(--volr-text-secondary)}.volr-text-muted{color:var(--volr-text-muted)}.volr-bg-secondary{background-color:var(--volr-bg-secondary)}.volr-bg-tertiary{background-color:var(--volr-bg-tertiary)}.volr-border{border-color:var(--volr-border)}.volr-border-strong{border-color:var(--volr-border-strong)}.volr-divider-line{background-color:var(--volr-border)}.volr-error{background-color:var(--volr-error-bg);border-color:var(--volr-error-border);color:var(--volr-error-text)}.volr-hover:hover{background-color:var(--volr-hover-bg)}.volr-surface{background-color:var(--volr-bg)}}@property --volr-tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --volr-tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --volr-tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --volr-tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --volr-tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --volr-tw-gradient-position{syntax:"*";inherits:false}@property --volr-tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --volr-tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --volr-tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --volr-tw-gradient-stops{syntax:"*";inherits:false}@property --volr-tw-gradient-via-stops{syntax:"*";inherits:false}@property --volr-tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --volr-tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --volr-tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --volr-tw-leading{syntax:"*";inherits:false}@property --volr-tw-font-weight{syntax:"*";inherits:false}@property --volr-tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-shadow-color{syntax:"*";inherits:false}@property --volr-tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --volr-tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-inset-shadow-color{syntax:"*";inherits:false}@property --volr-tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --volr-tw-ring-color{syntax:"*";inherits:false}@property --volr-tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-inset-ring-color{syntax:"*";inherits:false}@property --volr-tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-ring-inset{syntax:"*";inherits:false}@property --volr-tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --volr-tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --volr-tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-blur{syntax:"*";inherits:false}@property --volr-tw-brightness{syntax:"*";inherits:false}@property --volr-tw-contrast{syntax:"*";inherits:false}@property --volr-tw-grayscale{syntax:"*";inherits:false}@property --volr-tw-hue-rotate{syntax:"*";inherits:false}@property --volr-tw-invert{syntax:"*";inherits:false}@property --volr-tw-opacity{syntax:"*";inherits:false}@property --volr-tw-saturate{syntax:"*";inherits:false}@property --volr-tw-sepia{syntax:"*";inherits:false}@property --volr-tw-drop-shadow{syntax:"*";inherits:false}@property --volr-tw-drop-shadow-color{syntax:"*";inherits:false}@property --volr-tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --volr-tw-drop-shadow-size{syntax:"*";inherits:false}@property --volr-tw-duration{syntax:"*";inherits:false}@property --volr-tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}';
989
+ var VOLR_SDK_CSS = '/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--volr-tw-translate-x:0;--volr-tw-translate-y:0;--volr-tw-translate-z:0;--volr-tw-space-y-reverse:0;--volr-tw-border-style:solid;--volr-tw-gradient-position:initial;--volr-tw-gradient-from:#0000;--volr-tw-gradient-via:#0000;--volr-tw-gradient-to:#0000;--volr-tw-gradient-stops:initial;--volr-tw-gradient-via-stops:initial;--volr-tw-gradient-from-position:0%;--volr-tw-gradient-via-position:50%;--volr-tw-gradient-to-position:100%;--volr-tw-leading:initial;--volr-tw-font-weight:initial;--volr-tw-tracking:initial;--volr-tw-shadow:0 0 #0000;--volr-tw-shadow-color:initial;--volr-tw-shadow-alpha:100%;--volr-tw-inset-shadow:0 0 #0000;--volr-tw-inset-shadow-color:initial;--volr-tw-inset-shadow-alpha:100%;--volr-tw-ring-color:initial;--volr-tw-ring-shadow:0 0 #0000;--volr-tw-inset-ring-color:initial;--volr-tw-inset-ring-shadow:0 0 #0000;--volr-tw-ring-inset:initial;--volr-tw-ring-offset-width:0px;--volr-tw-ring-offset-color:#fff;--volr-tw-ring-offset-shadow:0 0 #0000;--volr-tw-blur:initial;--volr-tw-brightness:initial;--volr-tw-contrast:initial;--volr-tw-grayscale:initial;--volr-tw-hue-rotate:initial;--volr-tw-invert:initial;--volr-tw-opacity:initial;--volr-tw-saturate:initial;--volr-tw-sepia:initial;--volr-tw-drop-shadow:initial;--volr-tw-drop-shadow-color:initial;--volr-tw-drop-shadow-alpha:100%;--volr-tw-drop-shadow-size:initial;--volr-tw-duration:initial;--volr-tw-ease:initial}}}@layer theme{:root,:host{--volr-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--volr-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--volr-color-red-50:oklch(97.1% .013 17.38);--volr-color-red-100:oklch(93.6% .032 17.717);--volr-color-red-200:oklch(88.5% .062 18.334);--volr-color-red-500:oklch(63.7% .237 25.331);--volr-color-red-600:oklch(57.7% .245 27.325);--volr-color-red-700:oklch(50.5% .213 27.518);--volr-color-amber-50:oklch(98.7% .022 95.277);--volr-color-amber-200:oklch(92.4% .12 95.746);--volr-color-amber-700:oklch(55.5% .163 48.998);--volr-color-yellow-100:oklch(97.3% .071 103.193);--volr-color-yellow-700:oklch(55.4% .135 66.442);--volr-color-green-50:oklch(98.2% .018 155.826);--volr-color-green-100:oklch(96.2% .044 156.743);--volr-color-green-600:oklch(62.7% .194 149.214);--volr-color-green-700:oklch(52.7% .154 150.069);--volr-color-emerald-300:oklch(84.5% .143 164.978);--volr-color-emerald-400:oklch(76.5% .177 163.223);--volr-color-emerald-500:oklch(69.6% .17 162.48);--volr-color-emerald-600:oklch(59.6% .145 163.225);--volr-color-teal-400:oklch(77.7% .152 181.912);--volr-color-teal-500:oklch(70.4% .14 182.503);--volr-color-cyan-400:oklch(78.9% .154 211.53);--volr-color-blue-100:oklch(93.2% .032 255.585);--volr-color-blue-700:oklch(48.8% .243 264.376);--volr-color-slate-50:oklch(98.4% .003 247.858);--volr-color-slate-100:oklch(96.8% .007 247.896);--volr-color-slate-200:oklch(92.9% .013 255.508);--volr-color-slate-300:oklch(86.9% .022 252.894);--volr-color-slate-400:oklch(70.4% .04 256.788);--volr-color-slate-500:oklch(55.4% .046 257.417);--volr-color-slate-600:oklch(44.6% .043 257.281);--volr-color-slate-700:oklch(37.2% .044 257.287);--volr-color-slate-900:oklch(20.8% .042 265.755);--volr-color-gray-500:oklch(55.1% .027 264.364);--volr-color-black:#000;--volr-color-white:#fff;--volr-spacing:.25rem;--volr-container-md:28rem;--volr-container-4xl:56rem;--volr-text-xs:.75rem;--volr-text-xs--line-height:calc(1/.75);--volr-text-sm:.875rem;--volr-text-sm--line-height:calc(1.25/.875);--volr-text-base:1rem;--volr-text-base--line-height:calc(1.5/1);--volr-text-lg:1.125rem;--volr-text-lg--line-height:calc(1.75/1.125);--volr-text-xl:1.25rem;--volr-text-xl--line-height:calc(1.75/1.25);--volr-text-2xl:1.5rem;--volr-text-2xl--line-height:calc(2/1.5);--volr-text-3xl:1.875rem;--volr-text-3xl--line-height:calc(2.25/1.875);--volr-text-8xl:6rem;--volr-text-8xl--line-height:1;--volr-font-weight-medium:500;--volr-font-weight-semibold:600;--volr-font-weight-bold:700;--volr-tracking-wide:.025em;--volr-leading-relaxed:1.625;--volr-radius-md:.375rem;--volr-radius-lg:.5rem;--volr-radius-xl:.75rem;--volr-radius-2xl:1rem;--volr-radius-3xl:1.5rem;--volr-ease-out:cubic-bezier(0,0,.2,1);--volr-animate-spin:spin 1s linear infinite;--volr-animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--volr-blur-2xl:40px;--volr-default-transition-duration:.15s;--volr-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--volr-default-font-family:var(--volr-font-sans);--volr-default-mono-font-family:var(--volr-font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--volr-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--volr-default-font-feature-settings,normal);font-variation-settings:var(--volr-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--volr-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--volr-default-mono-font-feature-settings,normal);font-variation-settings:var(--volr-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:host{--volr-primary-color:var(--volr-accent-color,#303030);--volr-font-family:var(--volr-custom-font,inherit);--volr-bg:#fff;--volr-bg-secondary:#f8fafc;--volr-bg-tertiary:#f1f5f9;--volr-text:#0f172a;--volr-text-secondary:#475569;--volr-text-muted:#94a3b8;--volr-border:#e2e8f0;--volr-border-strong:#cbd5e1;--volr-hover-bg:#f8fafc;--volr-error-bg:#fef2f2;--volr-error-border:#fecaca;--volr-error-text:#991b1b}:host([data-theme=dark]){--volr-bg:#1c1c1e;--volr-bg-secondary:#2c2c2e;--volr-bg-tertiary:#3a3a3c;--volr-text:#f5f5f7;--volr-text-secondary:#c7c7cc;--volr-text-muted:#8e8e93;--volr-border:#3a3a3c;--volr-border-strong:#48484a;--volr-hover-bg:#2c2c2e;--volr-error-bg:#3c1f1f;--volr-error-border:#7f1d1d;--volr-error-text:#fca5a5}*,:before,:after{box-sizing:border-box}*{font-family:var(--volr-font-family);color:var(--volr-text)}button,input,select,textarea{color:var(--volr-text);background-color:#0000}button{cursor:pointer;background-color:#0000}input::placeholder{color:var(--volr-text-muted)}h1,h2,h3{color:var(--volr-text);margin:0;font-weight:700}h1{font-size:1.875rem;line-height:2.25rem}h2{font-size:1.5rem;line-height:2rem}h3{font-size:1.25rem;line-height:1.75rem}p{margin:0}}@layer components{.volr-dialog-overlay{inset:calc(var(--volr-spacing)*0);z-index:40;background-color:var(--volr-color-black);position:fixed}@supports (color:color-mix(in lab, red, red)){.volr-dialog-overlay{background-color:color-mix(in oklab,var(--volr-color-black)45%,transparent)}}.volr-dialog-content{z-index:50;border-radius:var(--volr-radius-2xl);border-style:var(--volr-tw-border-style);padding:calc(var(--volr-spacing)*7);--volr-tw-shadow:0 20px 25px -5px var(--volr-tw-shadow-color,#0000001a),0 8px 10px -6px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow);background-color:var(--volr-bg);border-width:1px;border-color:var(--volr-border-strong);width:calc(100% - 2rem);max-width:28rem;max-height:85vh;position:fixed;top:50%;left:50%;overflow-y:auto;transform:translate(-50%,-50%)}@media (max-width:640px){.volr-dialog-content{top:auto;right:calc(var(--volr-spacing)*0);bottom:calc(var(--volr-spacing)*0);left:calc(var(--volr-spacing)*0);border-radius:1.25rem 1.25rem 0 0;width:100%;max-width:100%;margin:0 auto;transform:translateY(0)}}.volr-dialog-close{top:calc(var(--volr-spacing)*4);right:calc(var(--volr-spacing)*4);height:calc(var(--volr-spacing)*8);width:calc(var(--volr-spacing)*8);color:var(--volr-text-muted);cursor:pointer;background-color:#0000;border:none;border-radius:3.40282e38px;justify-content:center;align-items:center;display:inline-flex;position:absolute}.volr-dialog-close:hover{background-color:var(--volr-hover-bg);color:var(--volr-text-secondary)}.volr-dialog-close:focus-visible{box-shadow:0 0 0 2px var(--volr-border-strong);outline:none}.volr-dialog-close-icon{height:calc(var(--volr-spacing)*4);width:calc(var(--volr-spacing)*4)}.volr-email-input{border:1px solid var(--volr-border-strong);background-color:var(--volr-bg);width:100%;color:var(--volr-text);border-radius:.5rem;outline:none;padding:.75rem .75rem .75rem 2.75rem;font-size:1rem;line-height:1.5}.volr-email-input::placeholder{color:var(--volr-text-muted)}.volr-email-input:focus{border-color:var(--volr-border-strong);box-shadow:0 0 0 2px var(--volr-border-strong)}.volr-option-button{border:1px solid var(--volr-border);background-color:var(--volr-bg);width:100%;color:var(--volr-text);cursor:pointer;border-radius:.5rem;align-items:center;gap:.75rem;padding:.75rem;transition:background-color .15s ease-out,border-color .15s ease-out,box-shadow .15s ease-out;display:flex}.volr-option-button:hover{background-color:var(--volr-hover-bg);border-color:var(--volr-border)}.volr-option-button:focus-visible{box-shadow:0 0 0 2px var(--volr-border-strong);outline:none}}@layer utilities{.volr\\:pointer-events-auto{pointer-events:auto}.volr\\:pointer-events-none{pointer-events:none}.volr\\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.volr\\:absolute{position:absolute}.volr\\:fixed{position:fixed}.volr\\:relative{position:relative}.volr\\:inset-0{inset:calc(var(--volr-spacing)*0)}.volr\\:-top-3{top:calc(var(--volr-spacing)*-3)}.volr\\:top-1\\/2{top:50%}.volr\\:-right-3{right:calc(var(--volr-spacing)*-3)}.volr\\:right-2{right:calc(var(--volr-spacing)*2)}.volr\\:right-3{right:calc(var(--volr-spacing)*3)}.volr\\:bottom-3{bottom:calc(var(--volr-spacing)*3)}.volr\\:left-3{left:calc(var(--volr-spacing)*3)}.volr\\:-z-10{z-index:calc(10*-1)}.volr\\:z-10{z-index:10}.volr\\:z-20{z-index:20}.volr\\:z-40{z-index:40}.volr\\:z-50{z-index:50}.volr\\:mx-auto{margin-inline:auto}.volr\\:my-6{margin-block:calc(var(--volr-spacing)*6)}.volr\\:mt-0\\.5{margin-top:calc(var(--volr-spacing)*.5)}.volr\\:mt-1{margin-top:calc(var(--volr-spacing)*1)}.volr\\:mt-2{margin-top:calc(var(--volr-spacing)*2)}.volr\\:mt-3{margin-top:calc(var(--volr-spacing)*3)}.volr\\:mt-4{margin-top:calc(var(--volr-spacing)*4)}.volr\\:mt-6{margin-top:calc(var(--volr-spacing)*6)}.volr\\:mt-8{margin-top:calc(var(--volr-spacing)*8)}.volr\\:mb-1{margin-bottom:calc(var(--volr-spacing)*1)}.volr\\:mb-2{margin-bottom:calc(var(--volr-spacing)*2)}.volr\\:mb-3{margin-bottom:calc(var(--volr-spacing)*3)}.volr\\:mb-4{margin-bottom:calc(var(--volr-spacing)*4)}.volr\\:mb-5{margin-bottom:calc(var(--volr-spacing)*5)}.volr\\:mb-6{margin-bottom:calc(var(--volr-spacing)*6)}.volr\\:mb-8{margin-bottom:calc(var(--volr-spacing)*8)}.volr\\:-ml-2{margin-left:calc(var(--volr-spacing)*-2)}.volr\\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.volr\\:block{display:block}.volr\\:flex{display:flex}.volr\\:grid{display:grid}.volr\\:inline-block{display:inline-block}.volr\\:inline-flex{display:inline-flex}.volr\\:h-1{height:calc(var(--volr-spacing)*1)}.volr\\:h-1\\.5{height:calc(var(--volr-spacing)*1.5)}.volr\\:h-2{height:calc(var(--volr-spacing)*2)}.volr\\:h-3{height:calc(var(--volr-spacing)*3)}.volr\\:h-4{height:calc(var(--volr-spacing)*4)}.volr\\:h-5{height:calc(var(--volr-spacing)*5)}.volr\\:h-6{height:calc(var(--volr-spacing)*6)}.volr\\:h-7{height:calc(var(--volr-spacing)*7)}.volr\\:h-8{height:calc(var(--volr-spacing)*8)}.volr\\:h-9{height:calc(var(--volr-spacing)*9)}.volr\\:h-10{height:calc(var(--volr-spacing)*10)}.volr\\:h-12{height:calc(var(--volr-spacing)*12)}.volr\\:h-14{height:calc(var(--volr-spacing)*14)}.volr\\:h-16{height:calc(var(--volr-spacing)*16)}.volr\\:h-20{height:calc(var(--volr-spacing)*20)}.volr\\:h-24{height:calc(var(--volr-spacing)*24)}.volr\\:h-40{height:calc(var(--volr-spacing)*40)}.volr\\:h-44{height:calc(var(--volr-spacing)*44)}.volr\\:h-48{height:calc(var(--volr-spacing)*48)}.volr\\:h-\\[0\\.8em\\]{height:.8em}.volr\\:h-\\[200px\\]{height:200px}.volr\\:h-full{height:100%}.volr\\:h-px{height:1px}.volr\\:max-h-48{max-height:calc(var(--volr-spacing)*48)}.volr\\:max-h-60{max-height:calc(var(--volr-spacing)*60)}.volr\\:max-h-64{max-height:calc(var(--volr-spacing)*64)}.volr\\:max-h-\\[85vh\\]{max-height:85vh}.volr\\:max-h-\\[90vh\\]{max-height:90vh}.volr\\:min-h-\\[120px\\]{min-height:120px}.volr\\:min-h-\\[500px\\]{min-height:500px}.volr\\:w-1\\.5{width:calc(var(--volr-spacing)*1.5)}.volr\\:w-2{width:calc(var(--volr-spacing)*2)}.volr\\:w-3{width:calc(var(--volr-spacing)*3)}.volr\\:w-4{width:calc(var(--volr-spacing)*4)}.volr\\:w-5{width:calc(var(--volr-spacing)*5)}.volr\\:w-6{width:calc(var(--volr-spacing)*6)}.volr\\:w-7{width:calc(var(--volr-spacing)*7)}.volr\\:w-8{width:calc(var(--volr-spacing)*8)}.volr\\:w-10{width:calc(var(--volr-spacing)*10)}.volr\\:w-12{width:calc(var(--volr-spacing)*12)}.volr\\:w-14{width:calc(var(--volr-spacing)*14)}.volr\\:w-16{width:calc(var(--volr-spacing)*16)}.volr\\:w-20{width:calc(var(--volr-spacing)*20)}.volr\\:w-24{width:calc(var(--volr-spacing)*24)}.volr\\:w-32{width:calc(var(--volr-spacing)*32)}.volr\\:w-36{width:calc(var(--volr-spacing)*36)}.volr\\:w-40{width:calc(var(--volr-spacing)*40)}.volr\\:w-44{width:calc(var(--volr-spacing)*44)}.volr\\:w-48{width:calc(var(--volr-spacing)*48)}.volr\\:w-\\[200px\\]{width:200px}.volr\\:w-auto{width:auto}.volr\\:w-full{width:100%}.volr\\:max-w-4xl{max-width:var(--volr-container-4xl)}.volr\\:max-w-full{max-width:100%}.volr\\:max-w-md{max-width:var(--volr-container-md)}.volr\\:max-w-none{max-width:none}.volr\\:min-w-0{min-width:calc(var(--volr-spacing)*0)}.volr\\:flex-1{flex:1}.volr\\:flex-shrink-0,.volr\\:shrink-0{flex-shrink:0}.volr\\:-translate-y-1\\/2{--volr-tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--volr-tw-translate-x)var(--volr-tw-translate-y)}.volr\\:rotate-90{rotate:90deg}.volr\\:rotate-180{rotate:180deg}.volr\\:animate-pulse{animation:var(--volr-animate-pulse)}.volr\\:animate-spin{animation:var(--volr-animate-spin)}.volr\\:cursor-not-allowed{cursor:not-allowed}.volr\\:cursor-pointer{cursor:pointer}.volr\\:list-inside{list-style-position:inside}.volr\\:list-decimal{list-style-type:decimal}.volr\\:grid-cols-\\[minmax\\(0\\,1\\.1fr\\)_minmax\\(0\\,1fr\\)\\]{grid-template-columns:minmax(0,1.1fr) minmax(0,1fr)}.volr\\:flex-col{flex-direction:column}.volr\\:items-baseline{align-items:baseline}.volr\\:items-center{align-items:center}.volr\\:items-end{align-items:flex-end}.volr\\:items-start{align-items:flex-start}.volr\\:justify-between{justify-content:space-between}.volr\\:justify-center{justify-content:center}.volr\\:gap-1{gap:calc(var(--volr-spacing)*1)}.volr\\:gap-2{gap:calc(var(--volr-spacing)*2)}.volr\\:gap-3{gap:calc(var(--volr-spacing)*3)}.volr\\:gap-4{gap:calc(var(--volr-spacing)*4)}:where(.volr\\:space-y-1>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*1)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*1)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-2>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*2)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*2)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-3>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*3)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*3)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-4>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*4)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*4)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-6>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*6)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*6)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-8>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*8)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*8)*calc(1 - var(--volr-tw-space-y-reverse)))}.volr\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.volr\\:overflow-auto{overflow:auto}.volr\\:overflow-hidden{overflow:hidden}.volr\\:overflow-visible{overflow:visible}.volr\\:overflow-x-auto{overflow-x:auto}.volr\\:overflow-y-auto{overflow-y:auto}.volr\\:rounded{border-radius:.25rem}.volr\\:rounded-2xl{border-radius:var(--volr-radius-2xl)}.volr\\:rounded-full{border-radius:3.40282e38px}.volr\\:rounded-lg{border-radius:var(--volr-radius-lg)}.volr\\:rounded-md{border-radius:var(--volr-radius-md)}.volr\\:rounded-xl{border-radius:var(--volr-radius-xl)}.volr\\:rounded-t-2xl{border-top-left-radius:var(--volr-radius-2xl);border-top-right-radius:var(--volr-radius-2xl)}.volr\\:rounded-t-3xl{border-top-left-radius:var(--volr-radius-3xl);border-top-right-radius:var(--volr-radius-3xl)}.volr\\:border{border-style:var(--volr-tw-border-style);border-width:1px}.volr\\:border-2{border-style:var(--volr-tw-border-style);border-width:2px}.volr\\:border-4{border-style:var(--volr-tw-border-style);border-width:4px}.volr\\:border-y{border-block-style:var(--volr-tw-border-style);border-block-width:1px}.volr\\:border-t{border-top-style:var(--volr-tw-border-style);border-top-width:1px}.volr\\:border-b{border-bottom-style:var(--volr-tw-border-style);border-bottom-width:1px}.volr\\:border-amber-200{border-color:var(--volr-color-amber-200)}.volr\\:border-red-200{border-color:var(--volr-color-red-200)}.volr\\:border-slate-100{border-color:var(--volr-color-slate-100)}.volr\\:border-slate-200{border-color:var(--volr-color-slate-200)}.volr\\:border-slate-300{border-color:var(--volr-color-slate-300)}.volr\\:border-white{border-color:var(--volr-color-white)}.volr\\:border-t-slate-600{border-top-color:var(--volr-color-slate-600)}.volr\\:bg-amber-50{background-color:var(--volr-color-amber-50)}.volr\\:bg-black\\/40{background-color:var(--volr-color-black)}@supports (color:color-mix(in lab, red, red)){.volr\\:bg-black\\/40{background-color:color-mix(in oklab,var(--volr-color-black)40%,transparent)}}.volr\\:bg-black\\/45{background-color:var(--volr-color-black)}@supports (color:color-mix(in lab, red, red)){.volr\\:bg-black\\/45{background-color:color-mix(in oklab,var(--volr-color-black)45%,transparent)}}.volr\\:bg-blue-100{background-color:var(--volr-color-blue-100)}.volr\\:bg-cyan-400{background-color:var(--volr-color-cyan-400)}.volr\\:bg-emerald-300{background-color:var(--volr-color-emerald-300)}.volr\\:bg-emerald-400{background-color:var(--volr-color-emerald-400)}.volr\\:bg-green-50{background-color:var(--volr-color-green-50)}.volr\\:bg-green-100{background-color:var(--volr-color-green-100)}.volr\\:bg-red-50{background-color:var(--volr-color-red-50)}.volr\\:bg-red-100{background-color:var(--volr-color-red-100)}.volr\\:bg-slate-50{background-color:var(--volr-color-slate-50)}.volr\\:bg-slate-100{background-color:var(--volr-color-slate-100)}.volr\\:bg-slate-200{background-color:var(--volr-color-slate-200)}.volr\\:bg-slate-900{background-color:var(--volr-color-slate-900)}.volr\\:bg-teal-400{background-color:var(--volr-color-teal-400)}.volr\\:bg-white{background-color:var(--volr-color-white)}.volr\\:bg-yellow-100{background-color:var(--volr-color-yellow-100)}.volr\\:bg-linear-to-br{--volr-tw-gradient-position:to bottom right}@supports (background-image:linear-gradient(in lab, red, red)){.volr\\:bg-linear-to-br{--volr-tw-gradient-position:to bottom right in oklab}}.volr\\:bg-linear-to-br{background-image:linear-gradient(var(--volr-tw-gradient-stops))}.volr\\:bg-gradient-to-br{--volr-tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--volr-tw-gradient-stops))}.volr\\:bg-gradient-to-r{--volr-tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--volr-tw-gradient-stops))}.volr\\:from-emerald-400{--volr-tw-gradient-from:var(--volr-color-emerald-400);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\:from-emerald-500{--volr-tw-gradient-from:var(--volr-color-emerald-500);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\:to-teal-500{--volr-tw-gradient-to:var(--volr-color-teal-500);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\:object-cover{object-fit:cover}.volr\\:p-1{padding:calc(var(--volr-spacing)*1)}.volr\\:p-2{padding:calc(var(--volr-spacing)*2)}.volr\\:p-3{padding:calc(var(--volr-spacing)*3)}.volr\\:p-4{padding:calc(var(--volr-spacing)*4)}.volr\\:p-5{padding:calc(var(--volr-spacing)*5)}.volr\\:p-8{padding:calc(var(--volr-spacing)*8)}.volr\\:px-1{padding-inline:calc(var(--volr-spacing)*1)}.volr\\:px-1\\.5{padding-inline:calc(var(--volr-spacing)*1.5)}.volr\\:px-2{padding-inline:calc(var(--volr-spacing)*2)}.volr\\:px-3{padding-inline:calc(var(--volr-spacing)*3)}.volr\\:px-4{padding-inline:calc(var(--volr-spacing)*4)}.volr\\:py-0\\.5{padding-block:calc(var(--volr-spacing)*.5)}.volr\\:py-1{padding-block:calc(var(--volr-spacing)*1)}.volr\\:py-1\\.5{padding-block:calc(var(--volr-spacing)*1.5)}.volr\\:py-2{padding-block:calc(var(--volr-spacing)*2)}.volr\\:py-2\\.5{padding-block:calc(var(--volr-spacing)*2.5)}.volr\\:py-3{padding-block:calc(var(--volr-spacing)*3)}.volr\\:py-4{padding-block:calc(var(--volr-spacing)*4)}.volr\\:py-6{padding-block:calc(var(--volr-spacing)*6)}.volr\\:py-8{padding-block:calc(var(--volr-spacing)*8)}.volr\\:py-12{padding-block:calc(var(--volr-spacing)*12)}.volr\\:pt-2{padding-top:calc(var(--volr-spacing)*2)}.volr\\:pt-3{padding-top:calc(var(--volr-spacing)*3)}.volr\\:pt-4{padding-top:calc(var(--volr-spacing)*4)}.volr\\:pr-3{padding-right:calc(var(--volr-spacing)*3)}.volr\\:pr-16{padding-right:calc(var(--volr-spacing)*16)}.volr\\:pl-11{padding-left:calc(var(--volr-spacing)*11)}.volr\\:text-center{text-align:center}.volr\\:text-left{text-align:left}.volr\\:text-right{text-align:right}.volr\\:align-baseline{vertical-align:baseline}.volr\\:font-mono{font-family:var(--volr-font-mono)}.volr\\:text-2xl{font-size:var(--volr-text-2xl);line-height:var(--volr-tw-leading,var(--volr-text-2xl--line-height))}.volr\\:text-3xl{font-size:var(--volr-text-3xl);line-height:var(--volr-tw-leading,var(--volr-text-3xl--line-height))}.volr\\:text-8xl{font-size:var(--volr-text-8xl);line-height:var(--volr-tw-leading,var(--volr-text-8xl--line-height))}.volr\\:text-base{font-size:var(--volr-text-base);line-height:var(--volr-tw-leading,var(--volr-text-base--line-height))}.volr\\:text-lg{font-size:var(--volr-text-lg);line-height:var(--volr-tw-leading,var(--volr-text-lg--line-height))}.volr\\:text-sm{font-size:var(--volr-text-sm);line-height:var(--volr-tw-leading,var(--volr-text-sm--line-height))}.volr\\:text-xl{font-size:var(--volr-text-xl);line-height:var(--volr-tw-leading,var(--volr-text-xl--line-height))}.volr\\:text-xs{font-size:var(--volr-text-xs);line-height:var(--volr-tw-leading,var(--volr-text-xs--line-height))}.volr\\:leading-relaxed{--volr-tw-leading:var(--volr-leading-relaxed);line-height:var(--volr-leading-relaxed)}.volr\\:font-bold{--volr-tw-font-weight:var(--volr-font-weight-bold);font-weight:var(--volr-font-weight-bold)}.volr\\:font-medium{--volr-tw-font-weight:var(--volr-font-weight-medium);font-weight:var(--volr-font-weight-medium)}.volr\\:font-semibold{--volr-tw-font-weight:var(--volr-font-weight-semibold);font-weight:var(--volr-font-weight-semibold)}.volr\\:tracking-wide{--volr-tw-tracking:var(--volr-tracking-wide);letter-spacing:var(--volr-tracking-wide)}.volr\\:break-all{word-break:break-all}.volr\\:text-amber-700{color:var(--volr-color-amber-700)}.volr\\:text-blue-700{color:var(--volr-color-blue-700)}.volr\\:text-emerald-600{color:var(--volr-color-emerald-600)}.volr\\:text-gray-500{color:var(--volr-color-gray-500)}.volr\\:text-green-600{color:var(--volr-color-green-600)}.volr\\:text-green-700{color:var(--volr-color-green-700)}.volr\\:text-red-500{color:var(--volr-color-red-500)}.volr\\:text-red-600{color:var(--volr-color-red-600)}.volr\\:text-red-700{color:var(--volr-color-red-700)}.volr\\:text-slate-100{color:var(--volr-color-slate-100)}.volr\\:text-slate-300{color:var(--volr-color-slate-300)}.volr\\:text-slate-400{color:var(--volr-color-slate-400)}.volr\\:text-slate-500{color:var(--volr-color-slate-500)}.volr\\:text-slate-600{color:var(--volr-color-slate-600)}.volr\\:text-slate-700{color:var(--volr-color-slate-700)}.volr\\:text-slate-900{color:var(--volr-color-slate-900)}.volr\\:text-white{color:var(--volr-color-white)}.volr\\:text-yellow-700{color:var(--volr-color-yellow-700)}.volr\\:capitalize{text-transform:capitalize}.volr\\:uppercase{text-transform:uppercase}.volr\\:underline{text-decoration-line:underline}.volr\\:opacity-0{opacity:0}.volr\\:opacity-25{opacity:.25}.volr\\:opacity-30{opacity:.3}.volr\\:opacity-50{opacity:.5}.volr\\:opacity-75{opacity:.75}.volr\\:shadow-2xl{--volr-tw-shadow:0 25px 50px -12px var(--volr-tw-shadow-color,#00000040);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-lg{--volr-tw-shadow:0 10px 15px -3px var(--volr-tw-shadow-color,#0000001a),0 4px 6px -4px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-md{--volr-tw-shadow:0 4px 6px -1px var(--volr-tw-shadow-color,#0000001a),0 2px 4px -2px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-sm{--volr-tw-shadow:0 1px 3px 0 var(--volr-tw-shadow-color,#0000001a),0 1px 2px -1px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-xl{--volr-tw-shadow:0 20px 25px -5px var(--volr-tw-shadow-color,#0000001a),0 8px 10px -6px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-emerald-500\\/50{--volr-tw-shadow-color:var(--volr-color-emerald-500)}@supports (color:color-mix(in lab, red, red)){.volr\\:shadow-emerald-500\\/50{--volr-tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--volr-color-emerald-500)50%,transparent)var(--volr-tw-shadow-alpha),transparent)}}.volr\\:blur-2xl{--volr-tw-blur:blur(var(--volr-blur-2xl));filter:var(--volr-tw-blur,)var(--volr-tw-brightness,)var(--volr-tw-contrast,)var(--volr-tw-grayscale,)var(--volr-tw-hue-rotate,)var(--volr-tw-invert,)var(--volr-tw-saturate,)var(--volr-tw-sepia,)var(--volr-tw-drop-shadow,)}.volr\\:transition-all{transition-property:all;transition-timing-function:var(--volr-tw-ease,var(--volr-default-transition-timing-function));transition-duration:var(--volr-tw-duration,var(--volr-default-transition-duration))}.volr\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--volr-tw-gradient-from,--volr-tw-gradient-via,--volr-tw-gradient-to;transition-timing-function:var(--volr-tw-ease,var(--volr-default-transition-timing-function));transition-duration:var(--volr-tw-duration,var(--volr-default-transition-duration))}.volr\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--volr-tw-ease,var(--volr-default-transition-timing-function));transition-duration:var(--volr-tw-duration,var(--volr-default-transition-duration))}.volr\\:duration-300{--volr-tw-duration:.3s;transition-duration:.3s}.volr\\:duration-500{--volr-tw-duration:.5s;transition-duration:.5s}.volr\\:ease-out{--volr-tw-ease:var(--volr-ease-out);transition-timing-function:var(--volr-ease-out)}.volr\\:outline-none{--volr-tw-outline-style:none;outline-style:none}@media (hover:hover){.volr\\:hover\\:border-slate-300:hover{border-color:var(--volr-color-slate-300)}.volr\\:hover\\:bg-slate-50:hover{background-color:var(--volr-color-slate-50)}.volr\\:hover\\:bg-slate-200:hover{background-color:var(--volr-color-slate-200)}.volr\\:hover\\:text-slate-700:hover{color:var(--volr-color-slate-700)}}.volr\\:focus\\:ring-2:focus{--volr-tw-ring-shadow:var(--volr-tw-ring-inset,)0 0 0 calc(2px + var(--volr-tw-ring-offset-width))var(--volr-tw-ring-color,currentcolor);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:focus\\:ring-slate-300:focus{--volr-tw-ring-color:var(--volr-color-slate-300)}.volr\\:focus\\:outline-none:focus{--volr-tw-outline-style:none;outline-style:none}.volr\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.volr\\:disabled\\:bg-slate-100:disabled{background-color:var(--volr-color-slate-100)}.volr\\:disabled\\:text-slate-400:disabled{color:var(--volr-color-slate-400)}.volr\\:disabled\\:opacity-50:disabled{opacity:.5}.volr-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.volr-text-secondary{color:var(--volr-text-secondary)}.volr-text-muted{color:var(--volr-text-muted)}.volr-bg-secondary{background-color:var(--volr-bg-secondary)}.volr-bg-tertiary{background-color:var(--volr-bg-tertiary)}.volr-border{border-color:var(--volr-border)}.volr-border-strong{border-color:var(--volr-border-strong)}.volr-divider-line{background-color:var(--volr-border)}.volr-error{background-color:var(--volr-error-bg);border-color:var(--volr-error-border);color:var(--volr-error-text)}.volr-hover:hover{background-color:var(--volr-hover-bg)}.volr-surface{background-color:var(--volr-bg)}}@property --volr-tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --volr-tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --volr-tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --volr-tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --volr-tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --volr-tw-gradient-position{syntax:"*";inherits:false}@property --volr-tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --volr-tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --volr-tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --volr-tw-gradient-stops{syntax:"*";inherits:false}@property --volr-tw-gradient-via-stops{syntax:"*";inherits:false}@property --volr-tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --volr-tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --volr-tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --volr-tw-leading{syntax:"*";inherits:false}@property --volr-tw-font-weight{syntax:"*";inherits:false}@property --volr-tw-tracking{syntax:"*";inherits:false}@property --volr-tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-shadow-color{syntax:"*";inherits:false}@property --volr-tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --volr-tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-inset-shadow-color{syntax:"*";inherits:false}@property --volr-tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --volr-tw-ring-color{syntax:"*";inherits:false}@property --volr-tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-inset-ring-color{syntax:"*";inherits:false}@property --volr-tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-ring-inset{syntax:"*";inherits:false}@property --volr-tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --volr-tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --volr-tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-blur{syntax:"*";inherits:false}@property --volr-tw-brightness{syntax:"*";inherits:false}@property --volr-tw-contrast{syntax:"*";inherits:false}@property --volr-tw-grayscale{syntax:"*";inherits:false}@property --volr-tw-hue-rotate{syntax:"*";inherits:false}@property --volr-tw-invert{syntax:"*";inherits:false}@property --volr-tw-opacity{syntax:"*";inherits:false}@property --volr-tw-saturate{syntax:"*";inherits:false}@property --volr-tw-sepia{syntax:"*";inherits:false}@property --volr-tw-drop-shadow{syntax:"*";inherits:false}@property --volr-tw-drop-shadow-color{syntax:"*";inherits:false}@property --volr-tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --volr-tw-drop-shadow-size{syntax:"*";inherits:false}@property --volr-tw-duration{syntax:"*";inherits:false}@property --volr-tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}';
745
990
  function useResolvedTheme(theme = "light") {
746
991
  const [resolvedTheme, setResolvedTheme] = React13.useState(() => {
747
992
  if (theme !== "system") return theme;
@@ -1715,34 +1960,6 @@ function MpcConnectView({
1715
1960
  }
1716
1961
  );
1717
1962
  }
1718
- var CopyButton = ({ text, className, onCopy }) => {
1719
- const [copied, setCopied] = React13.useState(false);
1720
- const handleCopy = async () => {
1721
- try {
1722
- await navigator.clipboard.writeText(text);
1723
- setCopied(true);
1724
- setTimeout(() => setCopied(false), 2e3);
1725
- onCopy?.();
1726
- } catch (error) {
1727
- console.error("Copy failed:", error);
1728
- }
1729
- };
1730
- return /* @__PURE__ */ jsxRuntime.jsx(
1731
- "button",
1732
- {
1733
- onClick: handleCopy,
1734
- className: cn(
1735
- "volr:p-2 volr:rounded-lg volr:transition-all volr-text-muted volr-hover",
1736
- className
1737
- ),
1738
- "aria-label": "Copy",
1739
- children: copied ? /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "20 6 9 17 4 12" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [
1740
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "9", y: "9", width: "13", height: "13", rx: "2", ry: "2" }),
1741
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })
1742
- ] })
1743
- }
1744
- );
1745
- };
1746
1963
  function OptionButton({
1747
1964
  icon,
1748
1965
  title,
@@ -1899,7 +2116,7 @@ function PoweredBy() {
1899
2116
  fill: "none",
1900
2117
  xmlns: "http://www.w3.org/2000/svg",
1901
2118
  className: "volr:inline-block volr:h-[0.8em] volr:w-auto volr:align-baseline volr-text-secondary",
1902
- style: { fill: "currentColor" },
2119
+ style: { fill: "#303030" },
1903
2120
  "aria-label": "Volr",
1904
2121
  children: /* @__PURE__ */ jsxRuntime.jsx(
1905
2122
  "path",
@@ -2158,6 +2375,34 @@ function CodeInputScreen({ email, onSubmit, onResend }) {
2158
2375
  )
2159
2376
  ] });
2160
2377
  }
2378
+ var CopyButton = ({ text, className, onCopy }) => {
2379
+ const [copied, setCopied] = React13.useState(false);
2380
+ const handleCopy = async () => {
2381
+ try {
2382
+ await navigator.clipboard.writeText(text);
2383
+ setCopied(true);
2384
+ setTimeout(() => setCopied(false), 2e3);
2385
+ onCopy?.();
2386
+ } catch (error) {
2387
+ console.error("Copy failed:", error);
2388
+ }
2389
+ };
2390
+ return /* @__PURE__ */ jsxRuntime.jsx(
2391
+ "button",
2392
+ {
2393
+ onClick: handleCopy,
2394
+ className: cn(
2395
+ "volr:p-2 volr:rounded-lg volr:transition-all volr-text-muted volr-hover",
2396
+ className
2397
+ ),
2398
+ "aria-label": "Copy",
2399
+ children: copied ? /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "20 6 9 17 4 12" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [
2400
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "9", y: "9", width: "13", height: "13", rx: "2", ry: "2" }),
2401
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })
2402
+ ] })
2403
+ }
2404
+ );
2405
+ };
2161
2406
  var isMobile = () => {
2162
2407
  if (typeof window === "undefined") return false;
2163
2408
  return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
@@ -2647,93 +2892,818 @@ function SigninModal({ isOpen, onClose, onError }) {
2647
2892
  }
2648
2893
  );
2649
2894
  }
2650
- function AccountModal({ isOpen, onClose, onError }) {
2651
- const { user, logout } = react.useVolrContext();
2895
+ function ChevronRightIcon({ className }) {
2896
+ return /* @__PURE__ */ jsxRuntime.jsx(
2897
+ "svg",
2898
+ {
2899
+ xmlns: "http://www.w3.org/2000/svg",
2900
+ viewBox: "0 0 20 20",
2901
+ fill: "currentColor",
2902
+ className,
2903
+ children: /* @__PURE__ */ jsxRuntime.jsx(
2904
+ "path",
2905
+ {
2906
+ fillRule: "evenodd",
2907
+ d: "M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z",
2908
+ clipRule: "evenodd"
2909
+ }
2910
+ )
2911
+ }
2912
+ );
2913
+ }
2914
+ function MenuItem({ label, onClick }) {
2915
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2916
+ "button",
2917
+ {
2918
+ type: "button",
2919
+ onClick,
2920
+ className: "volr:w-full volr:flex volr:items-center volr:justify-between volr:py-3 volr:px-1 volr:text-sm volr:text-slate-700 volr:border-b volr:border-slate-100 hover:volr:bg-slate-50 volr:transition-colors volr:text-left",
2921
+ children: [
2922
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: label }),
2923
+ /* @__PURE__ */ jsxRuntime.jsx(ChevronRightIcon, { className: "volr:w-4 volr:h-4 volr:text-slate-300" })
2924
+ ]
2925
+ }
2926
+ );
2927
+ }
2928
+ function AccountMainView({
2929
+ totalUsd,
2930
+ isLoading,
2931
+ paymentEnabled,
2932
+ onNavigate,
2933
+ onLogout,
2934
+ isLoggingOut
2935
+ }) {
2652
2936
  const { t } = useI18n();
2653
- const [isLoggingOut, setIsLoggingOut] = React13.useState(false);
2654
- if (!user) {
2655
- return /* @__PURE__ */ jsxRuntime.jsx(SigninModal, { isOpen, onClose, onError });
2656
- }
2657
- if (!user.keyStorageType) {
2658
- const handlePasskeyComplete = () => {
2659
- onClose();
2660
- };
2661
- const handlePasskeyError = (error) => {
2662
- if (onError) {
2663
- onError(error);
2664
- }
2665
- };
2666
- const handleLogout2 = async () => {
2667
- try {
2668
- await logout();
2669
- onClose();
2670
- } catch (error) {
2671
- if (onError) {
2672
- onError(error instanceof Error ? error : new Error("Logout failed"));
2937
+ const formattedUsd = isLoading ? "\u2014" : totalUsd.toLocaleString("en-US", {
2938
+ style: "currency",
2939
+ currency: "USD",
2940
+ minimumFractionDigits: 2,
2941
+ maximumFractionDigits: 2
2942
+ });
2943
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2944
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:py-8 volr:text-center", children: isLoading ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:animate-pulse", children: [
2945
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-9 volr:w-32 volr:bg-slate-200 volr:rounded volr:mx-auto volr:mb-2" }),
2946
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-4 volr:w-24 volr:bg-slate-100 volr:rounded volr:mx-auto" })
2947
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2948
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-3xl volr:font-semibold volr:text-slate-900", children: formattedUsd }),
2949
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-xs volr:text-slate-400 volr:tracking-wide volr:mt-1", children: t("account.totalBalance") })
2950
+ ] }) }),
2951
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:border-t volr:border-slate-100", children: [
2952
+ /* @__PURE__ */ jsxRuntime.jsx(
2953
+ MenuItem,
2954
+ {
2955
+ label: t("account.menu.assets"),
2956
+ onClick: () => onNavigate("assets")
2673
2957
  }
2674
- }
2675
- };
2676
- return /* @__PURE__ */ jsxRuntime.jsx(Modal, { open: isOpen, onOpenChange: (open) => !open && onClose(), children: /* @__PURE__ */ jsxRuntime.jsx(
2677
- PasskeyEnrollView,
2958
+ ),
2959
+ /* @__PURE__ */ jsxRuntime.jsx(
2960
+ MenuItem,
2961
+ {
2962
+ label: t("account.menu.withdraw"),
2963
+ onClick: () => onNavigate("withdraw")
2964
+ }
2965
+ ),
2966
+ paymentEnabled && /* @__PURE__ */ jsxRuntime.jsx(
2967
+ MenuItem,
2968
+ {
2969
+ label: t("account.menu.payments"),
2970
+ onClick: () => onNavigate("payments")
2971
+ }
2972
+ ),
2973
+ /* @__PURE__ */ jsxRuntime.jsx(
2974
+ MenuItem,
2975
+ {
2976
+ label: t("account.menu.account"),
2977
+ onClick: () => onNavigate("account")
2978
+ }
2979
+ )
2980
+ ] }),
2981
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:border-t volr:border-slate-100 volr:mt-2 volr:pt-2", children: /* @__PURE__ */ jsxRuntime.jsx(
2982
+ "button",
2678
2983
  {
2679
- wrapInModal: false,
2680
- onComplete: handlePasskeyComplete,
2681
- onError: handlePasskeyError,
2682
- onLogout: handleLogout2,
2683
- onClose
2984
+ type: "button",
2985
+ onClick: onLogout,
2986
+ disabled: isLoggingOut,
2987
+ className: "volr:w-full volr:py-3 volr:px-1 volr:text-sm volr:text-slate-400 volr:text-left hover:volr:text-slate-600 volr:transition-colors disabled:volr:opacity-50",
2988
+ children: isLoggingOut ? t("common.loading") : t("account.logout")
2684
2989
  }
2685
- ) });
2990
+ ) })
2991
+ ] });
2992
+ }
2993
+ function TokenRow({ token }) {
2994
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:justify-between volr:py-3 volr:border-b volr:border-slate-100 last:volr:border-b-0", children: [
2995
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:gap-3", children: [
2996
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:w-8 volr:h-8 volr:rounded-full volr:bg-slate-100 volr:flex volr:items-center volr:justify-center volr:overflow-hidden volr:shrink-0", children: token.iconUrl ? /* @__PURE__ */ jsxRuntime.jsx(
2997
+ "img",
2998
+ {
2999
+ src: token.iconUrl,
3000
+ alt: token.symbol,
3001
+ className: "volr:w-full volr:h-full volr:object-cover"
3002
+ }
3003
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-xs volr:font-medium volr:text-slate-500", children: token.symbol.slice(0, 2) }) }),
3004
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
3005
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:font-medium volr:text-slate-900", children: token.symbol }),
3006
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "volr:text-xs volr:text-slate-400", children: [
3007
+ "Chain ",
3008
+ token.chainId
3009
+ ] })
3010
+ ] })
3011
+ ] }),
3012
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:text-right", children: token.isLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:animate-pulse", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-4 volr:w-16 volr:bg-slate-200 volr:rounded" }) }) : token.error ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-xs volr:text-red-500", children: "Error" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3013
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:font-medium volr:text-slate-900", children: token.balance }),
3014
+ token.balanceUsd !== void 0 && token.balanceUsd > 0 && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "volr:text-xs volr:text-slate-400", children: [
3015
+ "$",
3016
+ token.balanceUsd.toFixed(2)
3017
+ ] })
3018
+ ] }) })
3019
+ ] });
3020
+ }
3021
+ function BalanceDetailView({
3022
+ balances,
3023
+ isLoading
3024
+ }) {
3025
+ const { t } = useI18n();
3026
+ if (isLoading && balances.length === 0) {
3027
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:py-8", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:animate-pulse volr:space-y-4", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:gap-3", children: [
3028
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:w-8 volr:h-8 volr:rounded-full volr:bg-slate-200" }),
3029
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex-1", children: [
3030
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-4 volr:w-16 volr:bg-slate-200 volr:rounded volr:mb-1" }),
3031
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-3 volr:w-12 volr:bg-slate-100 volr:rounded" })
3032
+ ] }),
3033
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-4 volr:w-16 volr:bg-slate-200 volr:rounded" })
3034
+ ] }, i)) }) });
2686
3035
  }
2687
- const handleLogout = async () => {
2688
- setIsLoggingOut(true);
3036
+ if (balances.length === 0) {
3037
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:py-12 volr:text-center", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-slate-400", children: t("account.noAssets") }) });
3038
+ }
3039
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
3040
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "volr:text-lg volr:font-semibold volr:text-slate-900 volr:mb-4", children: t("account.menu.assets") }),
3041
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: balances.map((token) => /* @__PURE__ */ jsxRuntime.jsx(TokenRow, { token }, token.id)) })
3042
+ ] });
3043
+ }
3044
+ var Input = React13__default.default.forwardRef(
3045
+ ({ leftIcon, error, className, style, disabled, ...props }, ref) => {
3046
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:relative", children: [
3047
+ leftIcon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:absolute volr:left-3 volr:top-1/2 volr:-translate-y-1/2 volr:pointer-events-none volr-text-muted", children: leftIcon }),
3048
+ /* @__PURE__ */ jsxRuntime.jsx(
3049
+ "input",
3050
+ {
3051
+ ref,
3052
+ disabled,
3053
+ className: cn(
3054
+ "volr:w-full volr:text-base volr:outline-none volr:transition-all volr:rounded-lg volr:py-3 volr:disabled:cursor-not-allowed volr-surface",
3055
+ leftIcon ? "volr:pl-11 volr:pr-3" : "volr:px-3",
3056
+ error ? "volr:border volr-error" : "volr:border volr-border-strong",
3057
+ className
3058
+ ),
3059
+ style,
3060
+ ...props
3061
+ }
3062
+ )
3063
+ ] });
3064
+ }
3065
+ );
3066
+ Input.displayName = "Input";
3067
+ function WithdrawView({
3068
+ balances,
3069
+ connectedWallet,
3070
+ onSuccess
3071
+ }) {
3072
+ const { t } = useI18n();
3073
+ const { withdraw, isWithdrawing, result, error, reset } = react.useWithdraw();
3074
+ const [step, setStep] = React13.useState("select");
3075
+ const [selectedTokenId, setSelectedTokenId] = React13.useState(null);
3076
+ const [toAddress, setToAddress] = React13.useState("");
3077
+ const [amount, setAmount] = React13.useState("");
3078
+ const [useConnectedWallet, setUseConnectedWallet] = React13.useState(false);
3079
+ const selectedToken = React13.useMemo(
3080
+ () => balances.find((b) => b.id === selectedTokenId),
3081
+ [balances, selectedTokenId]
3082
+ );
3083
+ const connectedAddress = React13.useMemo(() => {
3084
+ if (!connectedWallet) return null;
3085
+ const parts = connectedWallet.split(":");
3086
+ return parts.length >= 2 ? parts[1] : null;
3087
+ }, [connectedWallet]);
3088
+ const handleSelectToken = (tokenId) => {
3089
+ setSelectedTokenId(tokenId);
3090
+ setStep("input");
3091
+ };
3092
+ const handleUseConnectedWallet = () => {
3093
+ if (connectedAddress) {
3094
+ setToAddress(connectedAddress);
3095
+ setUseConnectedWallet(true);
3096
+ }
3097
+ };
3098
+ const handleConfirm = async () => {
3099
+ if (!selectedToken || !toAddress || !amount) return;
3100
+ setStep("confirm");
2689
3101
  try {
2690
- await logout();
2691
- onClose();
2692
- } catch (error) {
2693
- if (onError) {
2694
- onError(error instanceof Error ? error : new Error("Logout failed"));
2695
- }
2696
- } finally {
2697
- setIsLoggingOut(false);
3102
+ await withdraw({
3103
+ chainId: selectedToken.chainId,
3104
+ tokenAddress: selectedToken.address,
3105
+ decimals: selectedToken.decimals,
3106
+ amount,
3107
+ to: toAddress
3108
+ });
3109
+ setStep("result");
3110
+ } catch {
3111
+ setStep("result");
2698
3112
  }
2699
3113
  };
2700
- const displayAddress = user.evmAddress ? `${user.evmAddress.slice(0, 6)}...${user.evmAddress.slice(-4)}` : null;
2701
- return /* @__PURE__ */ jsxRuntime.jsxs(Modal, { open: isOpen, onOpenChange: (open) => !open && onClose(), children: [
2702
- /* @__PURE__ */ jsxRuntime.jsx(ModalHeader, { onClose }),
2703
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2704
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-xl volr:font-semibold volr:mb-4", children: t("account.title") }),
2705
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:rounded-xl volr:p-4 volr:mb-4 volr-bg-secondary", children: [
2706
- user.evmAddress && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:justify-between volr:gap-3", children: [
2707
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex-1 volr:min-w-0", children: [
2708
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-xs volr:mb-1 volr-text-secondary", children: t("account.walletAddress") }),
2709
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:font-mono volr:text-sm volr:font-medium", children: displayAddress })
2710
- ] }),
3114
+ const handleReset = () => {
3115
+ reset();
3116
+ setStep("select");
3117
+ setSelectedTokenId(null);
3118
+ setToAddress("");
3119
+ setAmount("");
3120
+ setUseConnectedWallet(false);
3121
+ };
3122
+ const isAmountValid = React13.useMemo(() => {
3123
+ if (!amount || !selectedToken) return false;
3124
+ const num = parseFloat(amount);
3125
+ if (isNaN(num) || num <= 0) return false;
3126
+ const balance = parseFloat(selectedToken.balance.replace(/,/g, ""));
3127
+ return num <= balance;
3128
+ }, [amount, selectedToken]);
3129
+ const isAddressValid = /^0x[a-fA-F0-9]{40}$/.test(toAddress);
3130
+ if (step === "select") {
3131
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
3132
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "volr:text-lg volr:font-semibold volr:text-slate-900 volr:mb-4", children: t("account.withdraw.selectToken") }),
3133
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:space-y-2", children: balances.map((token) => /* @__PURE__ */ jsxRuntime.jsxs(
3134
+ "button",
3135
+ {
3136
+ type: "button",
3137
+ onClick: () => handleSelectToken(token.id),
3138
+ disabled: token.balanceRaw === 0n,
3139
+ className: "volr:w-full volr:flex volr:items-center volr:justify-between volr:p-3 volr:rounded-lg volr:border volr:border-slate-200 hover:volr:bg-slate-50 volr:transition-colors disabled:volr:opacity-50 disabled:volr:cursor-not-allowed",
3140
+ children: [
3141
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:gap-3", children: [
3142
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:w-8 volr:h-8 volr:rounded-full volr:bg-slate-100 volr:flex volr:items-center volr:justify-center volr:overflow-hidden", children: token.iconUrl ? /* @__PURE__ */ jsxRuntime.jsx(
3143
+ "img",
3144
+ {
3145
+ src: token.iconUrl,
3146
+ alt: token.symbol,
3147
+ className: "volr:w-full volr:h-full volr:object-cover"
3148
+ }
3149
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-xs volr:font-medium volr:text-slate-500", children: token.symbol.slice(0, 2) }) }),
3150
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-sm volr:font-medium volr:text-slate-900", children: token.symbol })
3151
+ ] }),
3152
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-sm volr:text-slate-500", children: token.balance })
3153
+ ]
3154
+ },
3155
+ token.id
3156
+ )) })
3157
+ ] });
3158
+ }
3159
+ if (step === "input" && selectedToken) {
3160
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
3161
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "volr:text-lg volr:font-semibold volr:text-slate-900 volr:mb-4", children: t("account.withdraw.title") }),
3162
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:gap-3 volr:p-3 volr:rounded-lg volr:bg-slate-50 volr:mb-4", children: [
3163
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:w-8 volr:h-8 volr:rounded-full volr:bg-slate-200 volr:flex volr:items-center volr:justify-center volr:overflow-hidden", children: selectedToken.iconUrl ? /* @__PURE__ */ jsxRuntime.jsx(
3164
+ "img",
3165
+ {
3166
+ src: selectedToken.iconUrl,
3167
+ alt: selectedToken.symbol,
3168
+ className: "volr:w-full volr:h-full volr:object-cover"
3169
+ }
3170
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-xs volr:font-medium volr:text-slate-500", children: selectedToken.symbol.slice(0, 2) }) }),
3171
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
3172
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:font-medium volr:text-slate-900", children: selectedToken.symbol }),
3173
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "volr:text-xs volr:text-slate-400", children: [
3174
+ t("account.withdraw.available"),
3175
+ ": ",
3176
+ selectedToken.balance
3177
+ ] })
3178
+ ] })
3179
+ ] }),
3180
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:mb-4", children: [
3181
+ /* @__PURE__ */ jsxRuntime.jsx("label", { className: "volr:block volr:text-sm volr:text-slate-600 volr:mb-2", children: t("account.withdraw.toAddress") }),
3182
+ /* @__PURE__ */ jsxRuntime.jsx(
3183
+ Input,
3184
+ {
3185
+ type: "text",
3186
+ placeholder: "0x...",
3187
+ value: toAddress,
3188
+ onChange: (e) => {
3189
+ setToAddress(e.target.value);
3190
+ setUseConnectedWallet(false);
3191
+ }
3192
+ }
3193
+ ),
3194
+ connectedAddress && !useConnectedWallet && /* @__PURE__ */ jsxRuntime.jsx(
3195
+ "button",
3196
+ {
3197
+ type: "button",
3198
+ onClick: handleUseConnectedWallet,
3199
+ className: "volr:mt-2 volr:text-xs volr:text-slate-500 hover:volr:text-slate-700 volr:underline",
3200
+ children: t("account.withdraw.useConnectedWallet")
3201
+ }
3202
+ )
3203
+ ] }),
3204
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:mb-6", children: [
3205
+ /* @__PURE__ */ jsxRuntime.jsx("label", { className: "volr:block volr:text-sm volr:text-slate-600 volr:mb-2", children: t("account.withdraw.amount") }),
3206
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:relative", children: [
3207
+ /* @__PURE__ */ jsxRuntime.jsx(
3208
+ Input,
3209
+ {
3210
+ type: "text",
3211
+ inputMode: "decimal",
3212
+ placeholder: "0.00",
3213
+ value: amount,
3214
+ onChange: (e) => setAmount(e.target.value)
3215
+ }
3216
+ ),
2711
3217
  /* @__PURE__ */ jsxRuntime.jsx(
2712
- CopyButton,
3218
+ "button",
2713
3219
  {
2714
- text: user.evmAddress,
2715
- className: "volr:shrink-0"
3220
+ type: "button",
3221
+ onClick: () => setAmount(selectedToken.balance.replace(/,/g, "")),
3222
+ className: "volr:absolute volr:right-3 volr:top-1/2 volr:-translate-y-1/2 volr:text-xs volr:text-slate-500 hover:volr:text-slate-700 volr:font-medium",
3223
+ children: "MAX"
2716
3224
  }
2717
3225
  )
2718
- ] }),
2719
- user.email && !user.email.includes("@wallet.") && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:mt-4 volr:pt-4 volr:border-t volr-border", children: [
2720
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-xs volr:mb-1 volr-text-secondary", children: t("account.email") }),
2721
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:font-medium", children: user.email })
2722
3226
  ] })
2723
3227
  ] }),
2724
3228
  /* @__PURE__ */ jsxRuntime.jsx(
2725
3229
  Button,
2726
3230
  {
2727
- variant: "outline",
3231
+ onClick: handleConfirm,
3232
+ disabled: !isAddressValid || !isAmountValid,
2728
3233
  fullWidth: true,
2729
- onClick: handleLogout,
2730
- disabled: isLoggingOut,
2731
- children: isLoggingOut ? t("common.loading") : t("account.logout")
3234
+ children: t("account.withdraw.confirm")
2732
3235
  }
2733
3236
  )
2734
- ] })
2735
- ] });
2736
- }
3237
+ ] });
3238
+ }
3239
+ if (step === "confirm" && selectedToken) {
3240
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:py-8 volr:text-center", children: [
3241
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:animate-spin volr:w-8 volr:h-8 volr:border-2 volr:border-slate-200 volr:border-t-slate-600 volr:rounded-full volr:mx-auto volr:mb-4" }),
3242
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-slate-600", children: t("account.withdraw.processing") })
3243
+ ] });
3244
+ }
3245
+ if (step === "result") {
3246
+ const isSuccess = result && !error;
3247
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:py-8 volr:text-center", children: [
3248
+ isSuccess ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3249
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:w-12 volr:h-12 volr:rounded-full volr:bg-green-100 volr:flex volr:items-center volr:justify-center volr:mx-auto volr:mb-4", children: /* @__PURE__ */ jsxRuntime.jsx(
3250
+ "svg",
3251
+ {
3252
+ className: "volr:w-6 volr:h-6 volr:text-green-600",
3253
+ fill: "none",
3254
+ viewBox: "0 0 24 24",
3255
+ stroke: "currentColor",
3256
+ children: /* @__PURE__ */ jsxRuntime.jsx(
3257
+ "path",
3258
+ {
3259
+ strokeLinecap: "round",
3260
+ strokeLinejoin: "round",
3261
+ strokeWidth: 2,
3262
+ d: "M5 13l4 4L19 7"
3263
+ }
3264
+ )
3265
+ }
3266
+ ) }),
3267
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-lg volr:font-semibold volr:text-slate-900 volr:mb-2", children: t("account.withdraw.success") }),
3268
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "volr:text-sm volr:text-slate-500 volr:mb-6", children: [
3269
+ amount,
3270
+ " ",
3271
+ selectedToken?.symbol,
3272
+ " ",
3273
+ t("account.withdraw.sent")
3274
+ ] })
3275
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3276
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:w-12 volr:h-12 volr:rounded-full volr:bg-red-100 volr:flex volr:items-center volr:justify-center volr:mx-auto volr:mb-4", children: /* @__PURE__ */ jsxRuntime.jsx(
3277
+ "svg",
3278
+ {
3279
+ className: "volr:w-6 volr:h-6 volr:text-red-600",
3280
+ fill: "none",
3281
+ viewBox: "0 0 24 24",
3282
+ stroke: "currentColor",
3283
+ children: /* @__PURE__ */ jsxRuntime.jsx(
3284
+ "path",
3285
+ {
3286
+ strokeLinecap: "round",
3287
+ strokeLinejoin: "round",
3288
+ strokeWidth: 2,
3289
+ d: "M6 18L18 6M6 6l12 12"
3290
+ }
3291
+ )
3292
+ }
3293
+ ) }),
3294
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-lg volr:font-semibold volr:text-slate-900 volr:mb-2", children: t("account.withdraw.failed") }),
3295
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-red-500 volr:mb-6", children: error?.message || t("account.withdraw.unknownError") })
3296
+ ] }),
3297
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "secondary", onClick: isSuccess ? onSuccess : handleReset, fullWidth: true, children: isSuccess ? t("common.done") : t("common.tryAgain") })
3298
+ ] });
3299
+ }
3300
+ return null;
3301
+ }
3302
+ function PaymentRow({ payment, onClick }) {
3303
+ const { t } = useI18n();
3304
+ const date = new Date(payment.createdAt);
3305
+ const formattedDate = date.toLocaleDateString(void 0, {
3306
+ month: "short",
3307
+ day: "numeric",
3308
+ year: "numeric"
3309
+ });
3310
+ const statusColors = {
3311
+ CONFIRMED: "volr:bg-green-100 volr:text-green-700",
3312
+ PENDING: "volr:bg-yellow-100 volr:text-yellow-700",
3313
+ PROCESSING: "volr:bg-blue-100 volr:text-blue-700",
3314
+ FAILED: "volr:bg-red-100 volr:text-red-700",
3315
+ CANCELLED: "volr:bg-slate-100 volr:text-slate-500",
3316
+ EXPIRED: "volr:bg-slate-100 volr:text-slate-500"
3317
+ };
3318
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3319
+ "button",
3320
+ {
3321
+ type: "button",
3322
+ onClick,
3323
+ className: "volr:w-full volr:flex volr:items-center volr:justify-between volr:py-3 volr:border-b volr:border-slate-100 hover:volr:bg-slate-50 volr:transition-colors volr:text-left",
3324
+ children: [
3325
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex-1 volr:min-w-0", children: [
3326
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:gap-2 volr:mb-1", children: [
3327
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:font-medium volr:text-slate-900 volr:truncate", children: payment.itemName || t("account.payments.payment") }),
3328
+ /* @__PURE__ */ jsxRuntime.jsx(
3329
+ "span",
3330
+ {
3331
+ className: `volr:px-1.5 volr:py-0.5 volr:text-xs volr:font-medium volr:rounded ${statusColors[payment.status] || "volr:bg-slate-100 volr:text-slate-500"}`,
3332
+ children: payment.status
3333
+ }
3334
+ )
3335
+ ] }),
3336
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-xs volr:text-slate-400", children: formattedDate })
3337
+ ] }),
3338
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:gap-2", children: [
3339
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:text-right", children: [
3340
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "volr:text-sm volr:font-medium volr:text-slate-900", children: [
3341
+ payment.amount,
3342
+ " ",
3343
+ payment.token.symbol
3344
+ ] }),
3345
+ payment.totalUsd && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "volr:text-xs volr:text-slate-400", children: [
3346
+ "$",
3347
+ parseFloat(payment.totalUsd).toFixed(2)
3348
+ ] })
3349
+ ] }),
3350
+ /* @__PURE__ */ jsxRuntime.jsx(ChevronRightIcon, { className: "volr:w-4 volr:h-4 volr:text-slate-300" })
3351
+ ] })
3352
+ ]
3353
+ }
3354
+ );
3355
+ }
3356
+ function PaymentHistoryView({ onSelectPayment }) {
3357
+ const { t } = useI18n();
3358
+ const { getPaymentHistory, isLoading: isApiLoading } = react.useVolrPaymentApi();
3359
+ const [payments, setPayments] = React13.useState([]);
3360
+ const [isLoading, setIsLoading] = React13.useState(true);
3361
+ const [error, setError] = React13.useState(null);
3362
+ React13.useEffect(() => {
3363
+ setIsLoading(true);
3364
+ setError(null);
3365
+ getPaymentHistory({ take: 20 }).then((result) => {
3366
+ setPayments(result.payments);
3367
+ }).catch((err) => {
3368
+ console.error("[PaymentHistoryView] Failed to fetch payments:", err);
3369
+ setError(t("account.payments.fetchError"));
3370
+ }).finally(() => {
3371
+ setIsLoading(false);
3372
+ });
3373
+ }, [getPaymentHistory, t]);
3374
+ if (isLoading || isApiLoading) {
3375
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:py-8", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:animate-pulse volr:space-y-4", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:justify-between volr:py-3", children: [
3376
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
3377
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-4 volr:w-32 volr:bg-slate-200 volr:rounded volr:mb-2" }),
3378
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-3 volr:w-20 volr:bg-slate-100 volr:rounded" })
3379
+ ] }),
3380
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-4 volr:w-16 volr:bg-slate-200 volr:rounded" })
3381
+ ] }, i)) }) });
3382
+ }
3383
+ if (error) {
3384
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:py-12 volr:text-center", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-red-500", children: error }) });
3385
+ }
3386
+ if (payments.length === 0) {
3387
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:py-12 volr:text-center", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-slate-400", children: t("account.payments.noPayments") }) });
3388
+ }
3389
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
3390
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "volr:text-lg volr:font-semibold volr:text-slate-900 volr:mb-4", children: t("account.menu.payments") }),
3391
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: payments.map((payment) => /* @__PURE__ */ jsxRuntime.jsx(
3392
+ PaymentRow,
3393
+ {
3394
+ payment,
3395
+ onClick: () => onSelectPayment(payment)
3396
+ },
3397
+ payment.id
3398
+ )) })
3399
+ ] });
3400
+ }
3401
+ function DetailRow({ label, value, copyable, mono }) {
3402
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-start volr:justify-between volr:py-2 volr:border-b volr:border-slate-100 last:volr:border-b-0", children: [
3403
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-sm volr:text-slate-500", children: label }),
3404
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:gap-2", children: [
3405
+ /* @__PURE__ */ jsxRuntime.jsx(
3406
+ "span",
3407
+ {
3408
+ className: `volr:text-sm volr:text-slate-900 volr:text-right ${mono ? "volr:font-mono" : ""}`,
3409
+ children: value
3410
+ }
3411
+ ),
3412
+ copyable && /* @__PURE__ */ jsxRuntime.jsx(CopyButton, { text: value, className: "volr:shrink-0" })
3413
+ ] })
3414
+ ] });
3415
+ }
3416
+ function PaymentDetailView({ payment }) {
3417
+ const { t } = useI18n();
3418
+ const createdDate = new Date(payment.createdAt);
3419
+ const formattedCreatedAt = createdDate.toLocaleString(void 0, {
3420
+ year: "numeric",
3421
+ month: "short",
3422
+ day: "numeric",
3423
+ hour: "2-digit",
3424
+ minute: "2-digit"
3425
+ });
3426
+ const confirmedDate = payment.confirmedAt ? new Date(payment.confirmedAt) : null;
3427
+ const formattedConfirmedAt = confirmedDate ? confirmedDate.toLocaleString(void 0, {
3428
+ year: "numeric",
3429
+ month: "short",
3430
+ day: "numeric",
3431
+ hour: "2-digit",
3432
+ minute: "2-digit"
3433
+ }) : null;
3434
+ const statusColors = {
3435
+ CONFIRMED: "volr:bg-green-100 volr:text-green-700",
3436
+ PENDING: "volr:bg-yellow-100 volr:text-yellow-700",
3437
+ PROCESSING: "volr:bg-blue-100 volr:text-blue-700",
3438
+ FAILED: "volr:bg-red-100 volr:text-red-700",
3439
+ CANCELLED: "volr:bg-slate-100 volr:text-slate-500",
3440
+ EXPIRED: "volr:bg-slate-100 volr:text-slate-500"
3441
+ };
3442
+ const truncateHash = (hash) => {
3443
+ if (hash.length <= 16) return hash;
3444
+ return `${hash.slice(0, 8)}...${hash.slice(-6)}`;
3445
+ };
3446
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
3447
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:mb-6", children: [
3448
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:gap-2 volr:mb-2", children: [
3449
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "volr:text-lg volr:font-semibold volr:text-slate-900", children: payment.itemName || t("account.payments.payment") }),
3450
+ /* @__PURE__ */ jsxRuntime.jsx(
3451
+ "span",
3452
+ {
3453
+ className: `volr:px-2 volr:py-0.5 volr:text-xs volr:font-medium volr:rounded ${statusColors[payment.status] || "volr:bg-slate-100 volr:text-slate-500"}`,
3454
+ children: payment.status
3455
+ }
3456
+ )
3457
+ ] }),
3458
+ payment.itemDescription && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-slate-500", children: payment.itemDescription })
3459
+ ] }),
3460
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:py-4 volr:mb-4 volr:border-y volr:border-slate-100", children: [
3461
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "volr:text-2xl volr:font-semibold volr:text-slate-900", children: [
3462
+ payment.amount,
3463
+ " ",
3464
+ payment.token.symbol
3465
+ ] }),
3466
+ payment.totalUsd && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "volr:text-sm volr:text-slate-500", children: [
3467
+ "\u2248 $",
3468
+ parseFloat(payment.totalUsd).toFixed(2),
3469
+ " USD"
3470
+ ] })
3471
+ ] }),
3472
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:space-y-1", children: [
3473
+ /* @__PURE__ */ jsxRuntime.jsx(DetailRow, { label: t("account.payments.createdAt"), value: formattedCreatedAt }),
3474
+ formattedConfirmedAt && /* @__PURE__ */ jsxRuntime.jsx(DetailRow, { label: t("account.payments.confirmedAt"), value: formattedConfirmedAt }),
3475
+ /* @__PURE__ */ jsxRuntime.jsx(
3476
+ DetailRow,
3477
+ {
3478
+ label: t("account.payments.token"),
3479
+ value: `${payment.token.symbol} (Chain ${payment.token.chainId})`
3480
+ }
3481
+ ),
3482
+ payment.txHash && /* @__PURE__ */ jsxRuntime.jsx(
3483
+ DetailRow,
3484
+ {
3485
+ label: t("account.payments.txHash"),
3486
+ value: truncateHash(payment.txHash),
3487
+ copyable: true,
3488
+ mono: true
3489
+ }
3490
+ ),
3491
+ payment.referenceId && /* @__PURE__ */ jsxRuntime.jsx(
3492
+ DetailRow,
3493
+ {
3494
+ label: t("account.payments.referenceId"),
3495
+ value: payment.referenceId,
3496
+ copyable: true
3497
+ }
3498
+ )
3499
+ ] }),
3500
+ payment.itemImage && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:mt-6", children: /* @__PURE__ */ jsxRuntime.jsx(
3501
+ "img",
3502
+ {
3503
+ src: payment.itemImage,
3504
+ alt: payment.itemName || "Item",
3505
+ className: "volr:w-full volr:h-40 volr:object-cover volr:rounded-lg"
3506
+ }
3507
+ ) })
3508
+ ] });
3509
+ }
3510
+ function InfoRow({ label, value, copyable, mono }) {
3511
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:py-3 volr:border-b volr:border-slate-100 last:volr:border-b-0", children: [
3512
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-xs volr:text-slate-400 volr:mb-1", children: label }),
3513
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:justify-between volr:gap-2", children: [
3514
+ /* @__PURE__ */ jsxRuntime.jsx(
3515
+ "p",
3516
+ {
3517
+ className: `volr:text-sm volr:text-slate-900 volr:break-all ${mono ? "volr:font-mono" : ""}`,
3518
+ children: value
3519
+ }
3520
+ ),
3521
+ copyable && /* @__PURE__ */ jsxRuntime.jsx(CopyButton, { text: value, className: "volr:shrink-0" })
3522
+ ] })
3523
+ ] });
3524
+ }
3525
+ function AccountInfoView({ user }) {
3526
+ const { t } = useI18n();
3527
+ const getLoginMethod = () => {
3528
+ if (user.authWallet) {
3529
+ return t("account.info.loginMethod.wallet");
3530
+ }
3531
+ if (user.email?.includes("@google.")) {
3532
+ return t("account.info.loginMethod.google");
3533
+ }
3534
+ if (user.email?.includes("@twitter.") || user.email?.includes("@x.")) {
3535
+ return t("account.info.loginMethod.twitter");
3536
+ }
3537
+ if (user.email?.includes("@wallet.")) {
3538
+ return t("account.info.loginMethod.wallet");
3539
+ }
3540
+ return t("account.info.loginMethod.email");
3541
+ };
3542
+ const formatAddress = (address) => {
3543
+ if (address.length <= 16) return address;
3544
+ return `${address.slice(0, 6)}...${address.slice(-4)}`;
3545
+ };
3546
+ const externalWallet = user.authWallet ? user.authWallet.split(":")[1] || user.authWallet : null;
3547
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
3548
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "volr:text-lg volr:font-semibold volr:text-slate-900 volr:mb-4", children: t("account.menu.account") }),
3549
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
3550
+ /* @__PURE__ */ jsxRuntime.jsx(InfoRow, { label: t("account.info.loginMethod.label"), value: getLoginMethod() }),
3551
+ user.email && !user.email.includes("@wallet.") && /* @__PURE__ */ jsxRuntime.jsx(InfoRow, { label: t("account.email"), value: user.email }),
3552
+ user.evmAddress && /* @__PURE__ */ jsxRuntime.jsx(
3553
+ InfoRow,
3554
+ {
3555
+ label: t("account.walletAddress"),
3556
+ value: formatAddress(user.evmAddress),
3557
+ copyable: true,
3558
+ mono: true
3559
+ }
3560
+ ),
3561
+ externalWallet && /* @__PURE__ */ jsxRuntime.jsx(
3562
+ InfoRow,
3563
+ {
3564
+ label: t("account.info.connectedWallet"),
3565
+ value: formatAddress(externalWallet),
3566
+ copyable: true,
3567
+ mono: true
3568
+ }
3569
+ ),
3570
+ user.signerType && /* @__PURE__ */ jsxRuntime.jsx(
3571
+ InfoRow,
3572
+ {
3573
+ label: t("account.info.signerType"),
3574
+ value: user.signerType === "passkey" ? "Passkey" : user.signerType
3575
+ }
3576
+ )
3577
+ ] })
3578
+ ] });
3579
+ }
3580
+ function AccountModal({ isOpen, onClose, onError }) {
3581
+ const { user, logout } = react.useVolrContext();
3582
+ const { balances, totalUsd, isLoading, paymentEnabled, refresh } = react.useUserBalances();
3583
+ const [currentView, setCurrentView] = React13.useState("main");
3584
+ const [selectedPayment, setSelectedPayment] = React13.useState(null);
3585
+ const [isLoggingOut, setIsLoggingOut] = React13.useState(false);
3586
+ const handleOpenChange = React13.useCallback((open) => {
3587
+ if (!open) {
3588
+ onClose();
3589
+ setTimeout(() => {
3590
+ setCurrentView("main");
3591
+ setSelectedPayment(null);
3592
+ }, 200);
3593
+ }
3594
+ }, [onClose]);
3595
+ if (!user) {
3596
+ return /* @__PURE__ */ jsxRuntime.jsx(SigninModal, { isOpen, onClose, onError });
3597
+ }
3598
+ if (!user.keyStorageType) {
3599
+ const handlePasskeyComplete = () => {
3600
+ onClose();
3601
+ };
3602
+ const handlePasskeyError = (error) => {
3603
+ if (onError) onError(error);
3604
+ };
3605
+ const handleLogoutFromPasskey = async () => {
3606
+ try {
3607
+ await logout();
3608
+ onClose();
3609
+ } catch (error) {
3610
+ if (onError) {
3611
+ onError(error instanceof Error ? error : new Error("Logout failed"));
3612
+ }
3613
+ }
3614
+ };
3615
+ return /* @__PURE__ */ jsxRuntime.jsx(Modal, { open: isOpen, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsxRuntime.jsx(
3616
+ PasskeyEnrollView,
3617
+ {
3618
+ wrapInModal: false,
3619
+ onComplete: handlePasskeyComplete,
3620
+ onError: handlePasskeyError,
3621
+ onLogout: handleLogoutFromPasskey,
3622
+ onClose
3623
+ }
3624
+ ) });
3625
+ }
3626
+ const handleLogout = async () => {
3627
+ setIsLoggingOut(true);
3628
+ try {
3629
+ await logout();
3630
+ onClose();
3631
+ } catch (error) {
3632
+ if (onError) {
3633
+ onError(error instanceof Error ? error : new Error("Logout failed"));
3634
+ }
3635
+ } finally {
3636
+ setIsLoggingOut(false);
3637
+ }
3638
+ };
3639
+ const handleNavigate = (view) => {
3640
+ setCurrentView(view);
3641
+ };
3642
+ const handleBack = () => {
3643
+ if (selectedPayment) {
3644
+ setSelectedPayment(null);
3645
+ setCurrentView("payments");
3646
+ } else {
3647
+ setCurrentView("main");
3648
+ }
3649
+ };
3650
+ const handleSelectPayment = (payment) => {
3651
+ setSelectedPayment(payment);
3652
+ };
3653
+ const handleWithdrawSuccess = () => {
3654
+ refresh();
3655
+ setCurrentView("main");
3656
+ };
3657
+ const showBack = currentView !== "main" || selectedPayment !== null;
3658
+ const renderContent = () => {
3659
+ if (selectedPayment) {
3660
+ return /* @__PURE__ */ jsxRuntime.jsx(PaymentDetailView, { payment: selectedPayment });
3661
+ }
3662
+ switch (currentView) {
3663
+ case "main":
3664
+ return /* @__PURE__ */ jsxRuntime.jsx(
3665
+ AccountMainView,
3666
+ {
3667
+ totalUsd,
3668
+ balances,
3669
+ isLoading,
3670
+ paymentEnabled,
3671
+ onNavigate: handleNavigate,
3672
+ onLogout: handleLogout,
3673
+ isLoggingOut
3674
+ }
3675
+ );
3676
+ case "assets":
3677
+ return /* @__PURE__ */ jsxRuntime.jsx(BalanceDetailView, { balances, isLoading });
3678
+ case "withdraw":
3679
+ return /* @__PURE__ */ jsxRuntime.jsx(
3680
+ WithdrawView,
3681
+ {
3682
+ balances,
3683
+ connectedWallet: user.authWallet,
3684
+ onSuccess: handleWithdrawSuccess
3685
+ }
3686
+ );
3687
+ case "payments":
3688
+ return /* @__PURE__ */ jsxRuntime.jsx(PaymentHistoryView, { onSelectPayment: handleSelectPayment });
3689
+ case "account":
3690
+ return /* @__PURE__ */ jsxRuntime.jsx(AccountInfoView, { user });
3691
+ default:
3692
+ return null;
3693
+ }
3694
+ };
3695
+ return /* @__PURE__ */ jsxRuntime.jsxs(Modal, { open: isOpen, onOpenChange: handleOpenChange, children: [
3696
+ /* @__PURE__ */ jsxRuntime.jsx(
3697
+ ModalHeader,
3698
+ {
3699
+ back: showBack,
3700
+ onBack: showBack ? handleBack : void 0,
3701
+ onClose
3702
+ }
3703
+ ),
3704
+ renderContent()
3705
+ ] });
3706
+ }
2737
3707
  function AssetSelectView({
2738
3708
  assets,
2739
3709
  onSelect
@@ -2749,72 +3719,449 @@ function AssetSelectView({
2749
3719
  return /* @__PURE__ */ jsxRuntime.jsxs(
2750
3720
  "button",
2751
3721
  {
2752
- className: cn(
2753
- "volr:w-full volr:p-4 volr:rounded-xl volr:border-2",
2754
- "volr:text-left volr:transition-all",
2755
- "volr:flex volr:items-center volr:gap-4",
2756
- "volr-border volr-hover"
2757
- ),
2758
- onClick: () => onSelect(idx),
3722
+ className: cn(
3723
+ "volr:w-full volr:p-4 volr:rounded-xl volr:border-2",
3724
+ "volr:text-left volr:transition-all",
3725
+ "volr:flex volr:items-center volr:gap-4",
3726
+ "volr-border volr-hover"
3727
+ ),
3728
+ onClick: () => onSelect(idx),
3729
+ children: [
3730
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:shrink-0", children: !isNative && a.token.iconUrl ? /* @__PURE__ */ jsxRuntime.jsx(
3731
+ "img",
3732
+ {
3733
+ alt: a.token.symbol,
3734
+ src: a.token.iconUrl,
3735
+ className: "volr:w-10 volr:h-10 volr:rounded-full volr:border volr-border"
3736
+ }
3737
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:w-10 volr:h-10 volr:rounded-full volr:flex volr:items-center volr:justify-center volr:text-white volr:font-bold volr:text-sm volr-bg-tertiary", children: tokenSymbol.slice(0, 2) }) }),
3738
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex-1 volr:min-w-0", children: [
3739
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:gap-2 volr:mb-1", children: [
3740
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-base volr:font-semibold", children: tokenSymbol }),
3741
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "volr:text-xs volr:px-2 volr:py-0.5 volr:rounded-full volr:font-medium volr-bg-secondary volr-text-secondary", children: [
3742
+ "Chain ",
3743
+ a.chainId
3744
+ ] })
3745
+ ] }),
3746
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:text-sm volr-text-secondary", children: tokenName }),
3747
+ !isNative && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:text-xs volr:font-mono volr:truncate volr:mt-1 volr-text-muted", children: a.token.address })
3748
+ ] }),
3749
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:shrink-0 volr-text-muted", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "9 18 15 12 9 6" }) }) })
3750
+ ]
3751
+ },
3752
+ `${a.chainId}-${idx}`
3753
+ );
3754
+ }) })
3755
+ ] });
3756
+ }
3757
+ var TextLinkButton = React13__default.default.forwardRef(({ showArrow = false, className, children, ...props }, ref) => {
3758
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3759
+ "button",
3760
+ {
3761
+ ref,
3762
+ type: "button",
3763
+ className: cn(
3764
+ "volr:underline volr:transition-colors volr-text-secondary",
3765
+ className
3766
+ ),
3767
+ ...props,
3768
+ children: [
3769
+ children,
3770
+ showArrow && " \u2192"
3771
+ ]
3772
+ }
3773
+ );
3774
+ });
3775
+ TextLinkButton.displayName = "TextLinkButton";
3776
+ var OtherTokenModal = ({
3777
+ open,
3778
+ onOpenChange
3779
+ }) => {
3780
+ return /* @__PURE__ */ jsxRuntime.jsxs(Modal, { open, onOpenChange, children: [
3781
+ /* @__PURE__ */ jsxRuntime.jsx(ModalHeader, { onClose: () => onOpenChange(false) }),
3782
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:text-center", children: [
3783
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-lg volr:font-semibold volr:mb-2", children: "Coming Soon" }),
3784
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr-text-secondary", children: "Swap and bridge recommendations will be available here soon." })
3785
+ ] })
3786
+ ] });
3787
+ };
3788
+
3789
+ // ../node_modules/viem/_esm/errors/unit.js
3790
+ init_base();
3791
+ var InvalidDecimalNumberError = class extends BaseError {
3792
+ constructor({ value }) {
3793
+ super(`Number \`${value}\` is not a valid decimal number.`, {
3794
+ name: "InvalidDecimalNumberError"
3795
+ });
3796
+ }
3797
+ };
3798
+
3799
+ // ../node_modules/viem/_esm/utils/unit/parseUnits.js
3800
+ function parseUnits(value, decimals) {
3801
+ if (!/^(-?)([0-9]*)\.?([0-9]*)$/.test(value))
3802
+ throw new InvalidDecimalNumberError({ value });
3803
+ let [integer, fraction = "0"] = value.split(".");
3804
+ const negative = integer.startsWith("-");
3805
+ if (negative)
3806
+ integer = integer.slice(1);
3807
+ fraction = fraction.replace(/(0+)$/, "");
3808
+ if (decimals === 0) {
3809
+ if (Math.round(Number(`.${fraction}`)) === 1)
3810
+ integer = `${BigInt(integer) + 1n}`;
3811
+ fraction = "";
3812
+ } else if (fraction.length > decimals) {
3813
+ const [left, unit, right] = [
3814
+ fraction.slice(0, decimals - 1),
3815
+ fraction.slice(decimals - 1, decimals),
3816
+ fraction.slice(decimals)
3817
+ ];
3818
+ const rounded = Math.round(Number(`${unit}.${right}`));
3819
+ if (rounded > 9)
3820
+ fraction = `${BigInt(left) + BigInt(1)}0`.padStart(left.length + 1, "0");
3821
+ else
3822
+ fraction = `${left}${rounded}`;
3823
+ if (fraction.length > decimals) {
3824
+ fraction = fraction.slice(1);
3825
+ integer = `${BigInt(integer) + 1n}`;
3826
+ }
3827
+ fraction = fraction.slice(0, decimals);
3828
+ } else {
3829
+ fraction = fraction.padEnd(decimals, "0");
3830
+ }
3831
+ return BigInt(`${negative ? "-" : ""}${integer}${fraction}`);
3832
+ }
3833
+
3834
+ // ../node_modules/viem/_esm/index.js
3835
+ init_abis();
3836
+ init_formatUnits();
3837
+ var DefaultWalletIcon2 = () => /* @__PURE__ */ jsxRuntime.jsxs(
3838
+ "svg",
3839
+ {
3840
+ className: "volr:w-6 volr:h-6",
3841
+ viewBox: "0 0 24 24",
3842
+ fill: "none",
3843
+ xmlns: "http://www.w3.org/2000/svg",
3844
+ children: [
3845
+ /* @__PURE__ */ jsxRuntime.jsx(
3846
+ "rect",
3847
+ {
3848
+ x: "2",
3849
+ y: "6",
3850
+ width: "20",
3851
+ height: "14",
3852
+ rx: "2",
3853
+ stroke: "currentColor",
3854
+ strokeWidth: "1.5"
3855
+ }
3856
+ ),
3857
+ /* @__PURE__ */ jsxRuntime.jsx(
3858
+ "path",
3859
+ {
3860
+ d: "M17 12.5C17 13.3284 16.3284 14 15.5 14C14.6716 14 14 13.3284 14 12.5C14 11.6716 14.6716 11 15.5 11C16.3284 11 17 11.6716 17 12.5Z",
3861
+ fill: "currentColor"
3862
+ }
3863
+ ),
3864
+ /* @__PURE__ */ jsxRuntime.jsx(
3865
+ "path",
3866
+ {
3867
+ d: "M6 6V5C6 3.89543 6.89543 3 8 3H16C17.1046 3 18 3.89543 18 5V6",
3868
+ stroke: "currentColor",
3869
+ strokeWidth: "1.5"
3870
+ }
3871
+ )
3872
+ ]
3873
+ }
3874
+ );
3875
+ function WalletTransferView({
3876
+ chainId,
3877
+ asset,
3878
+ destinationAddress,
3879
+ onBack,
3880
+ onSuccess
3881
+ }) {
3882
+ const { t } = useI18n();
3883
+ const { config } = react.useVolrContext();
3884
+ const { client } = react.useInternalAuth();
3885
+ const { isDetecting, getWalletsForDisplay, hasWallet } = react.useEIP6963();
3886
+ const [viewState, setViewState] = React13.useState("select-wallet");
3887
+ const [selectedWallet, setSelectedWallet] = React13.useState(null);
3888
+ const [connectedAddress, setConnectedAddress] = React13.useState(null);
3889
+ const [balance, setBalance] = React13.useState(null);
3890
+ const [amount, setAmount] = React13.useState("");
3891
+ const [isConnecting, setIsConnecting] = React13.useState(false);
3892
+ const [isTransferring, setIsTransferring] = React13.useState(false);
3893
+ const [error, setError] = React13.useState(null);
3894
+ const [chainName, setChainName] = React13.useState(null);
3895
+ const [currentChainId, setCurrentChainId] = React13.useState(null);
3896
+ const tokenSymbol = asset === "native" ? "ETH" : asset.symbol;
3897
+ const decimals = asset === "native" ? 18 : asset.decimals;
3898
+ const getNetworkInfo = React13.useCallback(
3899
+ react.createGetNetworkInfo({ client, rpcOverrides: config.rpcOverrides }),
3900
+ [client, config.rpcOverrides]
3901
+ );
3902
+ React13.useEffect(() => {
3903
+ let cancelled = false;
3904
+ const loadChainName = async () => {
3905
+ try {
3906
+ const info = await getNetworkInfo(chainId, false);
3907
+ if (!cancelled) setChainName(info.name);
3908
+ } catch {
3909
+ if (!cancelled) setChainName(`Chain ${chainId}`);
3910
+ }
3911
+ };
3912
+ loadChainName();
3913
+ return () => {
3914
+ cancelled = true;
3915
+ };
3916
+ }, [getNetworkInfo, chainId]);
3917
+ const connectWallet = React13.useCallback(async (wallet) => {
3918
+ setIsConnecting(true);
3919
+ setError(null);
3920
+ try {
3921
+ const provider = wallet.provider;
3922
+ const accounts = await provider.request({ method: "eth_requestAccounts" });
3923
+ if (!accounts || accounts.length === 0) {
3924
+ throw new Error("No accounts found");
3925
+ }
3926
+ const address = accounts[0];
3927
+ setConnectedAddress(address);
3928
+ setSelectedWallet(wallet);
3929
+ const chainIdHex = await provider.request({ method: "eth_chainId" });
3930
+ const currentChain = parseInt(chainIdHex, 16);
3931
+ setCurrentChainId(currentChain);
3932
+ await fetchBalance(provider, address, currentChain);
3933
+ setViewState("transfer");
3934
+ } catch (err) {
3935
+ console.error("Failed to connect wallet:", err);
3936
+ setError(err instanceof Error ? err.message : "Connection failed");
3937
+ } finally {
3938
+ setIsConnecting(false);
3939
+ }
3940
+ }, [chainId, asset]);
3941
+ const fetchBalance = React13.useCallback(async (provider, address, currentChain) => {
3942
+ try {
3943
+ if (currentChain !== chainId) {
3944
+ setBalance(null);
3945
+ return;
3946
+ }
3947
+ if (asset === "native") {
3948
+ const balanceHex = await provider.request({
3949
+ method: "eth_getBalance",
3950
+ params: [address, "latest"]
3951
+ });
3952
+ setBalance(BigInt(balanceHex));
3953
+ } else {
3954
+ const data = `0x70a08231000000000000000000000000${address.slice(2)}`;
3955
+ const result = await provider.request({
3956
+ method: "eth_call",
3957
+ params: [{ to: asset.address, data }, "latest"]
3958
+ });
3959
+ setBalance(BigInt(result));
3960
+ }
3961
+ } catch (err) {
3962
+ console.error("Failed to fetch balance:", err);
3963
+ setBalance(BigInt(0));
3964
+ }
3965
+ }, [chainId, asset]);
3966
+ const switchNetwork = React13.useCallback(async () => {
3967
+ if (!selectedWallet?.provider) return;
3968
+ try {
3969
+ await selectedWallet.provider.request({
3970
+ method: "wallet_switchEthereumChain",
3971
+ params: [{ chainId: `0x${chainId.toString(16)}` }]
3972
+ });
3973
+ const chainIdHex = await selectedWallet.provider.request({ method: "eth_chainId" });
3974
+ const currentChain = parseInt(chainIdHex, 16);
3975
+ setCurrentChainId(currentChain);
3976
+ if (connectedAddress) {
3977
+ await fetchBalance(selectedWallet.provider, connectedAddress, currentChain);
3978
+ }
3979
+ } catch (err) {
3980
+ console.error("Failed to switch network:", err);
3981
+ setError(err instanceof Error ? err.message : "Failed to switch network");
3982
+ }
3983
+ }, [selectedWallet, chainId, connectedAddress, fetchBalance]);
3984
+ const executeTransfer = React13.useCallback(async () => {
3985
+ if (!selectedWallet?.provider || !connectedAddress || !amount) return;
3986
+ setIsTransferring(true);
3987
+ setError(null);
3988
+ try {
3989
+ const amountWei = parseUnits(amount, decimals);
3990
+ if (balance !== null && amountWei > balance) {
3991
+ setError(t("deposit.walletTransfer.insufficientBalance"));
3992
+ setIsTransferring(false);
3993
+ return;
3994
+ }
3995
+ let txHash;
3996
+ if (asset === "native") {
3997
+ txHash = await selectedWallet.provider.request({
3998
+ method: "eth_sendTransaction",
3999
+ params: [{
4000
+ from: connectedAddress,
4001
+ to: destinationAddress,
4002
+ value: `0x${amountWei.toString(16)}`
4003
+ }]
4004
+ });
4005
+ } else {
4006
+ const paddedTo = destinationAddress.slice(2).padStart(64, "0");
4007
+ const paddedAmount = amountWei.toString(16).padStart(64, "0");
4008
+ const data = `0xa9059cbb${paddedTo}${paddedAmount}`;
4009
+ txHash = await selectedWallet.provider.request({
4010
+ method: "eth_sendTransaction",
4011
+ params: [{
4012
+ from: connectedAddress,
4013
+ to: asset.address,
4014
+ data
4015
+ }]
4016
+ });
4017
+ }
4018
+ console.log("Transfer tx hash:", txHash);
4019
+ onSuccess?.();
4020
+ } catch (err) {
4021
+ console.error("Transfer failed:", err);
4022
+ setError(err instanceof Error ? err.message : "Transfer failed");
4023
+ } finally {
4024
+ setIsTransferring(false);
4025
+ }
4026
+ }, [selectedWallet, connectedAddress, amount, decimals, balance, asset, destinationAddress, onSuccess, t]);
4027
+ const setMaxAmount = React13.useCallback(() => {
4028
+ if (balance !== null) {
4029
+ const formatted = formatUnits(balance, decimals);
4030
+ setAmount(formatted);
4031
+ }
4032
+ }, [balance, decimals]);
4033
+ const wallets = getWalletsForDisplay();
4034
+ const isWrongNetwork = currentChainId !== null && currentChainId !== chainId;
4035
+ const formattedBalance = balance !== null ? formatUnits(balance, decimals) : null;
4036
+ if (viewState === "select-wallet") {
4037
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
4038
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:mb-4", children: [
4039
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-xl volr:font-semibold volr:mb-1", children: t("deposit.walletTransfer.title") }),
4040
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-slate-500", children: t("deposit.walletTransfer.selectWallet") })
4041
+ ] }),
4042
+ isDetecting && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:text-center volr:py-8", children: [
4043
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:animate-spin volr:w-6 volr:h-6 volr:border-2 volr:border-slate-300 volr:border-t-slate-600 volr:rounded-full volr:mx-auto" }),
4044
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-slate-500 volr:mt-3", children: t("common.loading") })
4045
+ ] }),
4046
+ !isDetecting && !hasWallet && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:text-center volr:py-8", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-slate-500", children: t("deposit.walletTransfer.noWallets") }) }),
4047
+ !isDetecting && wallets.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:space-y-2", children: wallets.map((wallet) => /* @__PURE__ */ jsxRuntime.jsxs(
4048
+ "button",
4049
+ {
4050
+ type: "button",
4051
+ onClick: () => connectWallet(wallet),
4052
+ disabled: isConnecting,
4053
+ className: "volr:w-full volr:flex volr:items-center volr:gap-3 volr:p-3 volr:border volr:border-slate-200 volr:rounded-xl volr:hover:bg-slate-50 volr:transition-colors volr:disabled:opacity-50",
2759
4054
  children: [
2760
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:shrink-0", children: !isNative && a.token.iconUrl ? /* @__PURE__ */ jsxRuntime.jsx(
4055
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:w-10 volr:h-10 volr:rounded-lg volr:bg-slate-100 volr:flex volr:items-center volr:justify-center volr:overflow-hidden volr:flex-shrink-0", children: wallet.icon ? /* @__PURE__ */ jsxRuntime.jsx(
2761
4056
  "img",
2762
4057
  {
2763
- alt: a.token.symbol,
2764
- src: a.token.iconUrl,
2765
- className: "volr:w-10 volr:h-10 volr:rounded-full volr:border volr-border"
4058
+ src: wallet.icon,
4059
+ alt: wallet.name,
4060
+ className: "volr:w-7 volr:h-7"
2766
4061
  }
2767
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:w-10 volr:h-10 volr:rounded-full volr:flex volr:items-center volr:justify-center volr:text-white volr:font-bold volr:text-sm volr-bg-tertiary", children: tokenSymbol.slice(0, 2) }) }),
2768
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex-1 volr:min-w-0", children: [
2769
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:gap-2 volr:mb-1", children: [
2770
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-base volr:font-semibold", children: tokenSymbol }),
2771
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "volr:text-xs volr:px-2 volr:py-0.5 volr:rounded-full volr:font-medium volr-bg-secondary volr-text-secondary", children: [
2772
- "Chain ",
2773
- a.chainId
2774
- ] })
2775
- ] }),
2776
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:text-sm volr-text-secondary", children: tokenName }),
2777
- !isNative && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:text-xs volr:font-mono volr:truncate volr:mt-1 volr-text-muted", children: a.token.address })
2778
- ] }),
2779
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:shrink-0 volr-text-muted", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "9 18 15 12 9 6" }) }) })
4062
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:text-slate-400", children: /* @__PURE__ */ jsxRuntime.jsx(DefaultWalletIcon2, {}) }) }),
4063
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:flex-1 volr:text-left volr:font-medium volr:text-slate-900", children: wallet.name }),
4064
+ /* @__PURE__ */ jsxRuntime.jsx(
4065
+ "svg",
4066
+ {
4067
+ className: "volr:w-5 volr:h-5 volr:text-slate-400",
4068
+ fill: "none",
4069
+ viewBox: "0 0 24 24",
4070
+ stroke: "currentColor",
4071
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" })
4072
+ }
4073
+ )
2780
4074
  ]
2781
4075
  },
2782
- `${a.chainId}-${idx}`
2783
- );
2784
- }) })
4076
+ wallet.id
4077
+ )) }),
4078
+ error && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:mt-4 volr:p-3 volr:bg-red-50 volr:border volr:border-red-200 volr:rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-red-600", children: error }) }),
4079
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:mt-6 volr:pt-4 volr:border-t volr:border-slate-200", children: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "ghost", onClick: onBack, className: "volr:w-full", children: t("common.back") }) })
4080
+ ] });
4081
+ }
4082
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
4083
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:mb-4", children: [
4084
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-xl volr:font-semibold volr:mb-1", children: t("deposit.walletTransfer.title") }),
4085
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:gap-2", children: [
4086
+ selectedWallet?.icon && /* @__PURE__ */ jsxRuntime.jsx("img", { src: selectedWallet.icon, alt: "", className: "volr:w-5 volr:h-5 volr:rounded" }),
4087
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "volr:text-sm volr:text-slate-500", children: [
4088
+ connectedAddress?.slice(0, 6),
4089
+ "...",
4090
+ connectedAddress?.slice(-4)
4091
+ ] })
4092
+ ] })
4093
+ ] }),
4094
+ isWrongNetwork && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:mb-4 volr:p-3 volr:bg-amber-50 volr:border volr:border-amber-200 volr:rounded-lg", children: [
4095
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-amber-700 volr:mb-2", children: t("deposit.walletTransfer.wrongNetwork", { network: chainName || `Chain ${chainId}` }) }),
4096
+ /* @__PURE__ */ jsxRuntime.jsx(
4097
+ Button,
4098
+ {
4099
+ variant: "secondary",
4100
+ size: "sm",
4101
+ onClick: switchNetwork,
4102
+ className: "volr:w-full",
4103
+ children: t("deposit.walletTransfer.switchNetwork")
4104
+ }
4105
+ )
4106
+ ] }),
4107
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:mb-4 volr:p-4 volr:bg-slate-50 volr:rounded-xl volr:border volr:border-slate-200", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:justify-between", children: [
4108
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:gap-2", children: [
4109
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-base volr:font-semibold", children: tokenSymbol }),
4110
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-xs volr:px-2 volr:py-0.5 volr:rounded-full volr:bg-slate-200 volr:text-slate-600", children: chainName || `Chain ${chainId}` })
4111
+ ] }),
4112
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:text-right", children: [
4113
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-xs volr:text-slate-500", children: t("deposit.walletTransfer.balance") }),
4114
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:font-mono volr:font-medium", children: isWrongNetwork ? "-" : formattedBalance ? `${Number(formattedBalance).toFixed(4)}` : "..." })
4115
+ ] })
4116
+ ] }) }),
4117
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:mb-4", children: [
4118
+ /* @__PURE__ */ jsxRuntime.jsx("label", { className: "volr:block volr:text-sm volr:font-medium volr:text-slate-700 volr:mb-2", children: t("deposit.walletTransfer.amount") }),
4119
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:relative", children: [
4120
+ /* @__PURE__ */ jsxRuntime.jsx(
4121
+ "input",
4122
+ {
4123
+ type: "text",
4124
+ inputMode: "decimal",
4125
+ value: amount,
4126
+ onChange: (e) => setAmount(e.target.value),
4127
+ placeholder: t("deposit.walletTransfer.amountPlaceholder"),
4128
+ disabled: isWrongNetwork,
4129
+ className: "volr:w-full volr:px-4 volr:py-3 volr:pr-16 volr:border volr:border-slate-300 volr:rounded-xl volr:text-base volr:font-mono volr:focus:outline-none volr:focus:ring-2 volr:focus:ring-slate-300 volr:disabled:bg-slate-100 volr:disabled:text-slate-400"
4130
+ }
4131
+ ),
4132
+ /* @__PURE__ */ jsxRuntime.jsx(
4133
+ "button",
4134
+ {
4135
+ type: "button",
4136
+ onClick: setMaxAmount,
4137
+ disabled: isWrongNetwork || balance === null,
4138
+ className: "volr:absolute volr:right-3 volr:top-1/2 volr:-translate-y-1/2 volr:px-2 volr:py-1 volr:text-xs volr:font-semibold volr:text-slate-600 volr:bg-slate-100 volr:rounded volr:hover:bg-slate-200 volr:disabled:opacity-50",
4139
+ children: t("deposit.walletTransfer.max")
4140
+ }
4141
+ )
4142
+ ] })
4143
+ ] }),
4144
+ error && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:mb-4 volr:p-3 volr:bg-red-50 volr:border volr:border-red-200 volr:rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-red-600", children: error }) }),
4145
+ /* @__PURE__ */ jsxRuntime.jsx(
4146
+ Button,
4147
+ {
4148
+ onClick: executeTransfer,
4149
+ disabled: isTransferring || !amount || isWrongNetwork,
4150
+ className: "volr:w-full",
4151
+ children: isTransferring ? t("deposit.walletTransfer.transferring") : t("deposit.walletTransfer.transfer")
4152
+ }
4153
+ ),
4154
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:mt-3", children: /* @__PURE__ */ jsxRuntime.jsx(
4155
+ Button,
4156
+ {
4157
+ variant: "ghost",
4158
+ onClick: () => setViewState("select-wallet"),
4159
+ className: "volr:w-full",
4160
+ children: t("common.back")
4161
+ }
4162
+ ) })
2785
4163
  ] });
2786
4164
  }
2787
- var TextLinkButton = React13__default.default.forwardRef(({ showArrow = false, className, children, ...props }, ref) => {
2788
- return /* @__PURE__ */ jsxRuntime.jsxs(
2789
- "button",
2790
- {
2791
- ref,
2792
- type: "button",
2793
- className: cn(
2794
- "volr:underline volr:transition-colors volr-text-secondary",
2795
- className
2796
- ),
2797
- ...props,
2798
- children: [
2799
- children,
2800
- showArrow && " \u2192"
2801
- ]
2802
- }
2803
- );
2804
- });
2805
- TextLinkButton.displayName = "TextLinkButton";
2806
- var OtherTokenModal = ({
2807
- open,
2808
- onOpenChange
2809
- }) => {
2810
- return /* @__PURE__ */ jsxRuntime.jsxs(Modal, { open, onOpenChange, children: [
2811
- /* @__PURE__ */ jsxRuntime.jsx(ModalHeader, { onClose: () => onOpenChange(false) }),
2812
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:text-center", children: [
2813
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-lg volr:font-semibold volr:mb-2", children: "Coming Soon" }),
2814
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr-text-secondary", children: "Swap and bridge recommendations will be available here soon." })
2815
- ] })
2816
- ] });
2817
- };
2818
4165
  var DepositQRStatusOverlay = ({
2819
4166
  status
2820
4167
  }) => {
@@ -3053,112 +4400,129 @@ var DepositCompletedToast = ({
3053
4400
  return trimmedFraction ? `${whole}.${trimmedFraction}` : `${whole}`;
3054
4401
  };
3055
4402
  const formattedDelta = formatAmount(delta);
3056
- return /* @__PURE__ */ jsxRuntime.jsxs(
3057
- "div",
3058
- {
3059
- className: cn(
3060
- // Position: fixed to modal edges with negative margin to escape parent padding
3061
- "volr:absolute volr:bottom-0 volr:z-50",
3062
- "volr:-left-4 volr:-right-4",
3063
- // Appearance: background with clear separation
3064
- "volr:rounded-t-2xl volr-surface",
3065
- // Border: top border for clear visual separation
3066
- "volr:border-t-2 volr-border-strong",
3067
- // Shadow: strong upward shadow for depth
3068
- "volr:shadow-[0_-8px_30px_rgba(0,0,0,0.2)]",
3069
- // Animation
3070
- "volr:transition-all volr:duration-300 volr:ease-out",
3071
- expanded ? "volr:max-h-96" : "volr:max-h-36"
3072
- ),
3073
- style: {
3074
- animation: "volrSlideUp 0.3s ease-out"
3075
- },
3076
- children: [
3077
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:flex volr:justify-center volr:pt-3 volr:pb-2", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:w-10 volr:h-1 volr:rounded-full volr-bg-tertiary" }) }),
3078
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:px-4 volr:pb-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-start volr:gap-3", children: [
3079
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:shrink-0 volr:w-10 volr:h-10 volr:rounded-full volr:bg-linear-to-br volr:from-emerald-500 volr:to-teal-500 volr:flex volr:items-center volr:justify-center volr:shadow-md", children: /* @__PURE__ */ jsxRuntime.jsx(
3080
- "svg",
3081
- {
3082
- width: "20",
3083
- height: "20",
3084
- viewBox: "0 0 24 24",
3085
- fill: "none",
3086
- stroke: "white",
3087
- strokeWidth: "2.5",
3088
- strokeLinecap: "round",
3089
- strokeLinejoin: "round",
3090
- children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "20 6 9 17 4 12" })
3091
- }
3092
- ) }),
3093
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex-1 volr:min-w-0", children: [
3094
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-start volr:justify-between volr:gap-2 volr:mb-1", children: [
3095
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:font-semibold", children: t("deposit.completed") }),
4403
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
4404
+ /* @__PURE__ */ jsxRuntime.jsx(
4405
+ "div",
4406
+ {
4407
+ className: "volr:absolute volr:inset-0 volr:bg-black/40 volr:z-40",
4408
+ onClick: onClose,
4409
+ style: { animation: "volrFadeIn 0.2s ease-out" }
4410
+ }
4411
+ ),
4412
+ /* @__PURE__ */ jsxRuntime.jsxs(
4413
+ "div",
4414
+ {
4415
+ className: cn(
4416
+ // Position: centered at bottom with margin
4417
+ "volr:absolute volr:bottom-3 volr:left-3 volr:right-3 volr:z-50",
4418
+ // Appearance: floating card
4419
+ "volr:bg-white volr:rounded-2xl",
4420
+ // Border: full border for clear card definition
4421
+ "volr:border volr:border-slate-200",
4422
+ // Shadow: strong shadow for floating effect
4423
+ "volr:shadow-2xl",
4424
+ // Animation
4425
+ "volr:transition-all volr:duration-300 volr:ease-out"
4426
+ ),
4427
+ style: {
4428
+ animation: "volrSlideUp 0.3s ease-out"
4429
+ },
4430
+ children: [
4431
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-1 volr:bg-gradient-to-r volr:from-emerald-400 volr:to-teal-500 volr:rounded-t-2xl" }),
4432
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:p-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-start volr:gap-3", children: [
4433
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:shrink-0 volr:w-10 volr:h-10 volr:rounded-full volr:bg-gradient-to-br volr:from-emerald-500 volr:to-teal-500 volr:flex volr:items-center volr:justify-center volr:shadow-md", children: /* @__PURE__ */ jsxRuntime.jsx(
4434
+ "svg",
4435
+ {
4436
+ width: "20",
4437
+ height: "20",
4438
+ viewBox: "0 0 24 24",
4439
+ fill: "none",
4440
+ stroke: "white",
4441
+ strokeWidth: "2.5",
4442
+ strokeLinecap: "round",
4443
+ strokeLinejoin: "round",
4444
+ children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "20 6 9 17 4 12" })
4445
+ }
4446
+ ) }),
4447
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex-1 volr:min-w-0", children: [
4448
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-start volr:justify-between volr:gap-2 volr:mb-1", children: [
4449
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:font-semibold volr:text-slate-900", children: t("deposit.completed") }),
4450
+ /* @__PURE__ */ jsxRuntime.jsx(
4451
+ "button",
4452
+ {
4453
+ onClick: onClose,
4454
+ className: "volr:shrink-0 volr:w-6 volr:h-6 volr:flex volr:items-center volr:justify-center volr:rounded-full volr:transition-colors volr:bg-slate-100 volr:text-slate-500 volr:hover:bg-slate-200",
4455
+ "aria-label": "Close",
4456
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
4457
+ "svg",
4458
+ {
4459
+ width: "14",
4460
+ height: "14",
4461
+ viewBox: "0 0 24 24",
4462
+ fill: "none",
4463
+ stroke: "currentColor",
4464
+ strokeWidth: "2.5",
4465
+ children: [
4466
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
4467
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
4468
+ ]
4469
+ }
4470
+ )
4471
+ }
4472
+ )
4473
+ ] }),
4474
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:font-medium volr:text-slate-700 volr:mb-3", children: t("deposit.completedAmount", { amount: formattedDelta, symbol }) }),
4475
+ expanded && /* @__PURE__ */ jsxRuntime.jsxs(
4476
+ "div",
4477
+ {
4478
+ className: "volr:space-y-2 volr:mb-3 volr:p-3 volr:rounded-lg volr:bg-slate-50 volr:border volr:border-slate-200",
4479
+ style: { animation: "volrFadeIn 0.2s ease-out" },
4480
+ children: [
4481
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:justify-between volr:text-xs", children: [
4482
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-slate-500", children: t("deposit.amount") }),
4483
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "volr:font-mono volr:text-emerald-600 volr:font-semibold", children: [
4484
+ "+",
4485
+ formattedDelta,
4486
+ " ",
4487
+ symbol
4488
+ ] })
4489
+ ] }),
4490
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:justify-between volr:text-xs", children: [
4491
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-slate-500", children: t("deposit.previousBalance") }),
4492
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "volr:font-mono volr:text-slate-500", children: [
4493
+ formatAmount(previousBalance),
4494
+ " ",
4495
+ symbol
4496
+ ] })
4497
+ ] }),
4498
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:justify-between volr:text-xs volr:pt-2 volr:border-t volr:border-slate-200", children: [
4499
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-slate-500", children: t("deposit.newBalance") }),
4500
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "volr:font-mono volr:font-semibold volr:text-slate-900", children: [
4501
+ formatAmount(newBalance),
4502
+ " ",
4503
+ symbol
4504
+ ] })
4505
+ ] })
4506
+ ]
4507
+ }
4508
+ ),
3096
4509
  /* @__PURE__ */ jsxRuntime.jsx(
3097
4510
  "button",
3098
4511
  {
3099
- onClick: onClose,
3100
- className: "volr:shrink-0 volr:w-6 volr:h-6 volr:flex volr:items-center volr:justify-center volr:rounded-full volr:transition-colors volr-bg-secondary volr-text-secondary volr-hover",
3101
- "aria-label": "Close",
3102
- children: /* @__PURE__ */ jsxRuntime.jsxs(
3103
- "svg",
3104
- {
3105
- width: "14",
3106
- height: "14",
3107
- viewBox: "0 0 24 24",
3108
- fill: "none",
3109
- stroke: "currentColor",
3110
- strokeWidth: "2.5",
3111
- children: [
3112
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
3113
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
3114
- ]
3115
- }
3116
- )
4512
+ onClick: () => setExpanded(!expanded),
4513
+ className: "volr:w-full volr:py-2.5 volr:text-xs volr:font-medium volr:rounded-lg volr:transition-colors volr:bg-slate-100 volr:text-slate-600 volr:border volr:border-slate-200 volr:hover:bg-slate-200",
4514
+ children: expanded ? t("deposit.seeLess") : t("deposit.seeMore")
3117
4515
  }
3118
4516
  )
3119
- ] }),
3120
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:font-medium volr:mb-3", children: t("deposit.completedAmount", { amount: formattedDelta, symbol }) }),
3121
- expanded && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:space-y-2 volr:mb-3 volr:p-3 volr:rounded-lg volr:border volr:animate-[volrFadeIn_0.2s_ease-out] volr-bg-secondary volr-border", children: [
3122
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:justify-between volr:text-xs", children: [
3123
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr-text-secondary", children: t("deposit.amount") }),
3124
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "volr:font-mono volr:text-emerald-600 volr:font-semibold", children: [
3125
- "+",
3126
- formattedDelta,
3127
- " ",
3128
- symbol
3129
- ] })
3130
- ] }),
3131
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:justify-between volr:text-xs", children: [
3132
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr-text-secondary", children: t("deposit.previousBalance") }),
3133
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "volr:font-mono volr-text-secondary", children: [
3134
- formatAmount(previousBalance),
3135
- " ",
3136
- symbol
3137
- ] })
3138
- ] }),
3139
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:justify-between volr:text-xs volr:pt-2 volr:border-t volr-border", children: [
3140
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr-text-secondary", children: t("deposit.newBalance") }),
3141
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "volr:font-mono volr:font-semibold", children: [
3142
- formatAmount(newBalance),
3143
- " ",
3144
- symbol
3145
- ] })
3146
- ] })
3147
- ] }),
3148
- /* @__PURE__ */ jsxRuntime.jsx(
3149
- "button",
3150
- {
3151
- onClick: () => setExpanded(!expanded),
3152
- className: "volr:w-full volr:py-2.5 volr:text-xs volr:font-medium volr:rounded-lg volr:transition-colors volr:border volr-bg-secondary volr-text-secondary volr-border volr-hover",
3153
- children: expanded ? t("deposit.seeLess") : t("deposit.seeMore")
3154
- }
3155
- )
3156
- ] })
3157
- ] }) }),
3158
- /* @__PURE__ */ jsxRuntime.jsx("style", { children: `
4517
+ ] })
4518
+ ] }) })
4519
+ ]
4520
+ }
4521
+ ),
4522
+ /* @__PURE__ */ jsxRuntime.jsx("style", { children: `
3159
4523
  @keyframes volrSlideUp {
3160
4524
  from {
3161
- transform: translateY(100%);
4525
+ transform: translateY(20px);
3162
4526
  opacity: 0;
3163
4527
  }
3164
4528
  to {
@@ -3175,9 +4539,7 @@ var DepositCompletedToast = ({
3175
4539
  }
3176
4540
  }
3177
4541
  ` })
3178
- ]
3179
- }
3180
- );
4542
+ ] });
3181
4543
  };
3182
4544
  var DepositSkeleton = () => {
3183
4545
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:animate-pulse", children: [
@@ -3202,6 +4564,7 @@ function DepositQRView(props) {
3202
4564
  const [showOtherTokenModal, setShowOtherTokenModal] = React13.useState(false);
3203
4565
  const [showToast, setShowToast] = React13.useState(false);
3204
4566
  const [toastData, setToastData] = React13.useState(null);
4567
+ const [viewMode, setViewMode] = React13.useState("qr");
3205
4568
  const eip681 = `ethereum:${props.address}`;
3206
4569
  const status = react.useDepositListener({
3207
4570
  chainId: props.chainId,
@@ -3250,6 +4613,36 @@ function DepositQRView(props) {
3250
4613
  const tokenSymbol = props.asset === "native" ? "ETH" : props.asset.symbol;
3251
4614
  const displayChainName = chainName || `Chain ${props.chainId}`;
3252
4615
  const decimals = props.asset === "native" ? 18 : props.asset.decimals;
4616
+ if (viewMode === "wallet-transfer") {
4617
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:relative", children: [
4618
+ /* @__PURE__ */ jsxRuntime.jsx(
4619
+ WalletTransferView,
4620
+ {
4621
+ chainId: props.chainId,
4622
+ asset: props.asset,
4623
+ destinationAddress: props.address,
4624
+ onBack: () => setViewMode("qr"),
4625
+ onSuccess: () => {
4626
+ setViewMode("qr");
4627
+ }
4628
+ }
4629
+ ),
4630
+ showToast && toastData && /* @__PURE__ */ jsxRuntime.jsx(
4631
+ DepositCompletedToast,
4632
+ {
4633
+ onClose: () => {
4634
+ setShowToast(false);
4635
+ setToastData(null);
4636
+ },
4637
+ previousBalance: toastData.previousBalance,
4638
+ newBalance: toastData.newBalance,
4639
+ delta: toastData.delta,
4640
+ decimals,
4641
+ symbol: tokenSymbol
4642
+ }
4643
+ )
4644
+ ] });
4645
+ }
3253
4646
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:relative", children: [
3254
4647
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:mb-4", children: [
3255
4648
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-xl volr:font-semibold volr:mb-2", children: t("deposit.qrTitle") }),
@@ -3295,7 +4688,33 @@ function DepositQRView(props) {
3295
4688
  ] }) }) }),
3296
4689
  status.state === "error" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:text-xs volr:text-center volr:mb-4 volr-error", children: status.message })
3297
4690
  ] }),
3298
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:text-center volr:pt-3 volr:border-t volr-border", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "volr:text-xs volr-text-secondary", children: [
4691
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:mt-4", children: /* @__PURE__ */ jsxRuntime.jsxs(
4692
+ "button",
4693
+ {
4694
+ type: "button",
4695
+ onClick: () => setViewMode("wallet-transfer"),
4696
+ className: "volr:w-full volr:flex volr:items-center volr:justify-center volr:gap-2 volr:py-3 volr:px-4 volr:border volr:border-slate-200 volr:rounded-xl volr:text-sm volr:font-medium volr:text-slate-700 volr:bg-white volr:hover:bg-slate-50 volr:transition-colors",
4697
+ children: [
4698
+ /* @__PURE__ */ jsxRuntime.jsxs(
4699
+ "svg",
4700
+ {
4701
+ className: "volr:w-5 volr:h-5",
4702
+ viewBox: "0 0 24 24",
4703
+ fill: "none",
4704
+ stroke: "currentColor",
4705
+ strokeWidth: "1.5",
4706
+ children: [
4707
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "2", y: "6", width: "20", height: "14", rx: "2" }),
4708
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 12.5C17 13.3284 16.3284 14 15.5 14C14.6716 14 14 13.3284 14 12.5C14 11.6716 14.6716 11 15.5 11C16.3284 11 17 11.6716 17 12.5Z", fill: "currentColor" }),
4709
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 6V5C6 3.89543 6.89543 3 8 3H16C17.1046 3 18 3.89543 18 5V6" })
4710
+ ]
4711
+ }
4712
+ ),
4713
+ t("deposit.useWallet")
4714
+ ]
4715
+ }
4716
+ ) }),
4717
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:text-center volr:pt-3 volr:mt-3 volr:border-t volr-border", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "volr:text-xs volr-text-secondary", children: [
3299
4718
  t("deposit.noToken"),
3300
4719
  " ",
3301
4720
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -3342,19 +4761,40 @@ function DepositModalBody({
3342
4761
  if (error) {
3343
4762
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:relative", children: [
3344
4763
  /* @__PURE__ */ jsxRuntime.jsx(DepositSkeleton, {}),
3345
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:absolute volr:inset-0 volr:flex volr:items-center volr:justify-center volr-surface", style: { opacity: 0.9 }, children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-center volr:px-4 volr-error", children: error }) })
4764
+ /* @__PURE__ */ jsxRuntime.jsx(
4765
+ "div",
4766
+ {
4767
+ className: "volr:absolute volr:inset-0 volr:flex volr:items-center volr:justify-center volr-surface",
4768
+ style: { opacity: 0.9 },
4769
+ children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-center volr:px-4 volr-error", children: error })
4770
+ }
4771
+ )
3346
4772
  ] });
3347
4773
  }
3348
4774
  if (depositAssets.length === 0) {
3349
4775
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:relative", children: [
3350
4776
  /* @__PURE__ */ jsxRuntime.jsx(DepositSkeleton, {}),
3351
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:absolute volr:inset-0 volr:flex volr:items-center volr:justify-center volr-surface", style: { opacity: 0.9 }, children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-center volr:px-4 volr-text-secondary", children: "No payment token configured. Please contact the app developer." }) })
4777
+ /* @__PURE__ */ jsxRuntime.jsx(
4778
+ "div",
4779
+ {
4780
+ className: "volr:absolute volr:inset-0 volr:flex volr:items-center volr:justify-center volr-surface",
4781
+ style: { opacity: 0.9 },
4782
+ children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-center volr:px-4 volr-text-secondary", children: "No payment token configured. Please contact the app developer." })
4783
+ }
4784
+ )
3352
4785
  ] });
3353
4786
  }
3354
4787
  if (!evmAddress) {
3355
4788
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:relative", children: [
3356
4789
  /* @__PURE__ */ jsxRuntime.jsx(DepositSkeleton, {}),
3357
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:absolute volr:inset-0 volr:flex volr:items-center volr:justify-center volr-surface", style: { opacity: 0.9 }, children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-center volr:px-4 volr-text-secondary", children: "Wallet address is not ready. Please finish wallet setup first." }) })
4790
+ /* @__PURE__ */ jsxRuntime.jsx(
4791
+ "div",
4792
+ {
4793
+ className: "volr:absolute volr:inset-0 volr:flex volr:items-center volr:justify-center volr-surface",
4794
+ style: { opacity: 0.9 },
4795
+ children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-center volr:px-4 volr-text-secondary", children: "Wallet address is not ready. Please finish wallet setup first." })
4796
+ }
4797
+ )
3358
4798
  ] });
3359
4799
  }
3360
4800
  if (depositAssets.length === 1) {
@@ -3460,11 +4900,6 @@ var DepositModal = ({
3460
4900
  )
3461
4901
  ] });
3462
4902
  };
3463
-
3464
- // ../node_modules/viem/_esm/index.js
3465
- init_abis();
3466
-
3467
- // src/hooks/usePaymentModalState.ts
3468
4903
  var initialState = {
3469
4904
  step: "info",
3470
4905
  processingStep: "signing",
@@ -4574,111 +6009,86 @@ function MessageSignView({ message }) {
4574
6009
  ] })
4575
6010
  ] });
4576
6011
  }
4577
- function CollapsibleSection({
4578
- title,
4579
- children,
4580
- defaultExpanded = false
4581
- }) {
4582
- const [isExpanded, setIsExpanded] = React13.useState(defaultExpanded);
4583
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:border volr:rounded-xl volr:overflow-hidden volr-border-strong", children: [
6012
+ function TypedDataSignView({ typedData }) {
6013
+ const [showRawData, setShowRawData] = React13.useState(false);
6014
+ const { domain, message } = typedData;
6015
+ const appName = domain.name;
6016
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:space-y-4", children: [
6017
+ appName && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:gap-2", children: [
6018
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:w-8 volr:h-8 volr:rounded-lg volr:bg-slate-100 volr:flex volr:items-center volr:justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-sm volr:font-medium volr:text-slate-600", children: appName.charAt(0).toUpperCase() }) }),
6019
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
6020
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:font-medium volr:text-slate-900", children: appName }),
6021
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-xs volr:text-slate-500", children: "Signature Request" })
6022
+ ] })
6023
+ ] }),
6024
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:rounded-lg volr:bg-slate-50 volr:border volr:border-slate-200 volr:overflow-hidden", children: [
6025
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:px-3 volr:py-2 volr:border-b volr:border-slate-200 volr:bg-slate-100", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-xs volr:font-medium volr:text-slate-500 volr:uppercase volr:tracking-wide", children: "Data to Sign" }) }),
6026
+ /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "volr:p-3 volr:text-xs volr:text-slate-700 volr:overflow-x-auto volr:max-h-48 volr:overflow-y-auto", style: { fontFamily: "ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace" }, children: formatMessage(message) })
6027
+ ] }),
4584
6028
  /* @__PURE__ */ jsxRuntime.jsxs(
4585
6029
  "button",
4586
6030
  {
4587
6031
  type: "button",
4588
- onClick: () => setIsExpanded(!isExpanded),
4589
- className: "volr:w-full volr:px-4 volr:py-3 volr:flex volr:items-center volr:justify-between volr-bg-tertiary volr:transition-colors hover:volr-bg-secondary",
6032
+ onClick: () => setShowRawData(!showRawData),
6033
+ className: "volr:text-xs volr:text-slate-500 volr:hover:text-slate-700 volr:flex volr:items-center volr:gap-1 volr:transition-colors",
4590
6034
  children: [
4591
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-sm volr:font-medium volr-text", children: title }),
4592
6035
  /* @__PURE__ */ jsxRuntime.jsx(
4593
6036
  "svg",
4594
6037
  {
4595
- className: `volr:w-4 volr:h-4 volr:transition-transform volr-text-secondary ${isExpanded ? "volr:rotate-180" : ""}`,
6038
+ className: `volr:w-3 volr:h-3 volr:transition-transform ${showRawData ? "volr:rotate-90" : ""}`,
4596
6039
  fill: "none",
4597
6040
  viewBox: "0 0 24 24",
4598
6041
  stroke: "currentColor",
4599
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" })
6042
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" })
4600
6043
  }
4601
- )
6044
+ ),
6045
+ showRawData ? "Hide" : "View",
6046
+ " technical details"
4602
6047
  ]
4603
6048
  }
4604
6049
  ),
4605
- isExpanded && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:px-4 volr:py-3 volr:border-t volr-border-strong", children })
6050
+ showRawData && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:rounded-lg volr:bg-slate-50 volr:border volr:border-slate-200 volr:overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "volr:p-3 volr:text-xs volr:text-slate-600 volr:overflow-x-auto volr:max-h-64 volr:overflow-y-auto", style: { fontFamily: "ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace" }, children: JSON.stringify(typedData, null, 2) }) })
4606
6051
  ] });
4607
6052
  }
4608
- function renderValue(value, depth = 0) {
4609
- if (value === null || value === void 0) {
4610
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr-text-secondary", children: "null" });
4611
- }
4612
- if (typeof value === "boolean") {
4613
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-blue-600", children: String(value) });
6053
+ function formatMessage(message) {
6054
+ const lines = [];
6055
+ for (const [key, value] of Object.entries(message)) {
6056
+ const formattedValue = formatValue(value);
6057
+ lines.push(`${key}: ${formattedValue}`);
4614
6058
  }
4615
- if (typeof value === "number" || typeof value === "bigint") {
4616
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-green-600", children: String(value) });
6059
+ return lines.join("\n");
6060
+ }
6061
+ function formatValue(value, indent = 0) {
6062
+ const pad = " ".repeat(indent);
6063
+ if (value === null || value === void 0) {
6064
+ return "null";
4617
6065
  }
4618
6066
  if (typeof value === "string") {
4619
- if (value.startsWith("0x") && value.length === 42) {
4620
- return /* @__PURE__ */ jsxRuntime.jsx(
4621
- "span",
4622
- {
4623
- className: "volr:text-purple-600",
4624
- style: { fontFamily: "ui-monospace, monospace", fontSize: "0.8125rem" },
4625
- children: value
4626
- }
4627
- );
4628
- }
4629
- if (value.startsWith("0x")) {
4630
- return /* @__PURE__ */ jsxRuntime.jsx(
4631
- "span",
4632
- {
4633
- className: "volr:text-orange-600",
4634
- style: { fontFamily: "ui-monospace, monospace", fontSize: "0.8125rem", wordBreak: "break-all" },
4635
- children: value
4636
- }
4637
- );
6067
+ if (value.startsWith("0x") && value.length > 20) {
6068
+ return `${value.slice(0, 10)}...${value.slice(-8)}`;
4638
6069
  }
4639
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr-text", children: value });
6070
+ return value;
6071
+ }
6072
+ if (typeof value === "number" || typeof value === "bigint" || typeof value === "boolean") {
6073
+ return String(value);
4640
6074
  }
4641
6075
  if (Array.isArray(value)) {
4642
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:pl-4", children: value.map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:gap-2", children: [
4643
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "volr-text-secondary", children: [
4644
- "[",
4645
- index,
4646
- "]:"
4647
- ] }),
4648
- renderValue(item, depth + 1)
4649
- ] }, index)) });
6076
+ if (value.length === 0) return "[]";
6077
+ const items = value.map((v, i) => `${pad} [${i}]: ${formatValue(v, indent + 1)}`);
6078
+ return `[
6079
+ ${items.join("\n")}
6080
+ ${pad}]`;
4650
6081
  }
4651
6082
  if (typeof value === "object") {
4652
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: depth > 0 ? "volr:pl-4" : "", children: Object.entries(value).map(([key, val]) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:py-1", children: [
4653
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "volr:font-medium volr-text-secondary", children: [
4654
- key,
4655
- ":"
4656
- ] }),
4657
- " ",
4658
- renderValue(val, depth + 1)
4659
- ] }, key)) });
6083
+ const entries = Object.entries(value);
6084
+ if (entries.length === 0) return "{}";
6085
+ const items = entries.map(([k, v]) => `${pad} ${k}: ${formatValue(v, indent + 1)}`);
6086
+ return `{
6087
+ ${items.join("\n")}
6088
+ ${pad}}`;
4660
6089
  }
4661
6090
  return String(value);
4662
6091
  }
4663
- function TypedDataSignView({ typedData }) {
4664
- const { domain, message } = typedData;
4665
- const domainInfo = {
4666
- ...domain.name && { Name: domain.name },
4667
- ...domain.version && { Version: domain.version },
4668
- ...domain.chainId !== void 0 && { "Chain ID": domain.chainId },
4669
- ...domain.verifyingContract && { Contract: domain.verifyingContract }
4670
- };
4671
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:space-y-3", children: [
4672
- /* @__PURE__ */ jsxRuntime.jsx(CollapsibleSection, { title: "Domain", defaultExpanded: false, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:text-sm volr:space-y-2", children: Object.entries(domainInfo).map(([key, value]) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:gap-2 volr:flex-wrap", children: [
4673
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "volr:font-medium volr-text-secondary", children: [
4674
- key,
4675
- ":"
4676
- ] }),
4677
- renderValue(value)
4678
- ] }, key)) }) }),
4679
- /* @__PURE__ */ jsxRuntime.jsx(CollapsibleSection, { title: "Message", defaultExpanded: true, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:text-sm", children: renderValue(message) }) })
4680
- ] });
4681
- }
4682
6092
  function SignRequestModal({ open, onOpenChange }) {
4683
6093
  const { pendingRequest, approve, reject } = useSignRequestInternal();
4684
6094
  const { t } = useI18n();