@volr/react-ui 0.1.91 → 0.1.93
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 +699 -111
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -2
- package/dist/index.d.ts +17 -2
- package/dist/index.js +596 -8
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var React11 = require('react');
|
|
4
4
|
var reactDom = require('react-dom');
|
|
5
5
|
var react = require('@volr/react');
|
|
6
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -10,7 +10,7 @@ var qrcode_react = require('qrcode.react');
|
|
|
10
10
|
|
|
11
11
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var React11__default = /*#__PURE__*/_interopDefault(React11);
|
|
14
14
|
|
|
15
15
|
// src/providers/VolrUIProvider.tsx
|
|
16
16
|
|
|
@@ -266,13 +266,13 @@ var translations = {
|
|
|
266
266
|
function getTranslations(locale = "en") {
|
|
267
267
|
return translations[locale] || translations.en;
|
|
268
268
|
}
|
|
269
|
-
var I18nContext =
|
|
269
|
+
var I18nContext = React11.createContext(null);
|
|
270
270
|
function interpolate(text, params) {
|
|
271
271
|
if (!params) return text;
|
|
272
272
|
return text.replace(/\{\{(\w+)\}\}/g, (_, key) => params[key] ?? `{{${key}}}`);
|
|
273
273
|
}
|
|
274
274
|
function useI18n() {
|
|
275
|
-
const context =
|
|
275
|
+
const context = React11.useContext(I18nContext);
|
|
276
276
|
if (!context) {
|
|
277
277
|
return {
|
|
278
278
|
locale: "en",
|
|
@@ -307,9 +307,9 @@ function detectLocale() {
|
|
|
307
307
|
return lang.startsWith("ko") ? "ko" : "en";
|
|
308
308
|
}
|
|
309
309
|
function I18nProvider({ children }) {
|
|
310
|
-
const [locale, setLocale] =
|
|
311
|
-
const translations2 =
|
|
312
|
-
const t =
|
|
310
|
+
const [locale, setLocale] = React11.useState(detectLocale());
|
|
311
|
+
const translations2 = React11.useMemo(() => getTranslations(locale), [locale]);
|
|
312
|
+
const t = React11.useMemo(() => {
|
|
313
313
|
return (key, params) => {
|
|
314
314
|
const keys = key.split(".");
|
|
315
315
|
let value2 = translations2;
|
|
@@ -326,7 +326,7 @@ function I18nProvider({ children }) {
|
|
|
326
326
|
return typeof value2 === "string" ? interpolate(value2, params) : key;
|
|
327
327
|
};
|
|
328
328
|
}, [translations2]);
|
|
329
|
-
const value =
|
|
329
|
+
const value = React11.useMemo(
|
|
330
330
|
() => ({
|
|
331
331
|
locale,
|
|
332
332
|
translations: translations2,
|
|
@@ -338,9 +338,9 @@ function I18nProvider({ children }) {
|
|
|
338
338
|
return /* @__PURE__ */ jsxRuntime.jsx(I18nContext.Provider, { value, children });
|
|
339
339
|
}
|
|
340
340
|
var useTranslation = useI18n;
|
|
341
|
-
var VolrModalContext =
|
|
341
|
+
var VolrModalContext = React11.createContext(null);
|
|
342
342
|
var useVolrModal = () => {
|
|
343
|
-
const context =
|
|
343
|
+
const context = React11.useContext(VolrModalContext);
|
|
344
344
|
if (!context) {
|
|
345
345
|
throw new Error("useVolrModal must be used within VolrUIProvider");
|
|
346
346
|
}
|
|
@@ -349,19 +349,22 @@ var useVolrModal = () => {
|
|
|
349
349
|
var VolrModalProvider = ({
|
|
350
350
|
children
|
|
351
351
|
}) => {
|
|
352
|
-
const [isOpen, setIsOpen] =
|
|
353
|
-
const [mode, setMode] =
|
|
354
|
-
const [asset, setAsset] =
|
|
355
|
-
const
|
|
352
|
+
const [isOpen, setIsOpen] = React11.useState(false);
|
|
353
|
+
const [mode, setMode] = React11.useState("account");
|
|
354
|
+
const [asset, setAsset] = React11.useState(null);
|
|
355
|
+
const [paymentOptions, setPaymentOptions] = React11.useState(null);
|
|
356
|
+
const open = React11.useCallback((options) => {
|
|
356
357
|
setMode(options?.mode ?? "account");
|
|
357
358
|
setAsset(options?.asset ?? null);
|
|
359
|
+
setPaymentOptions(options?.payment ?? null);
|
|
358
360
|
setIsOpen(true);
|
|
359
361
|
}, []);
|
|
360
|
-
const close =
|
|
362
|
+
const close = React11.useCallback(() => {
|
|
361
363
|
setIsOpen(false);
|
|
362
364
|
setAsset(null);
|
|
365
|
+
setPaymentOptions(null);
|
|
363
366
|
}, []);
|
|
364
|
-
return /* @__PURE__ */ jsxRuntime.jsx(VolrModalContext.Provider, { value: { isOpen, mode, asset, open, close }, children });
|
|
367
|
+
return /* @__PURE__ */ jsxRuntime.jsx(VolrModalContext.Provider, { value: { isOpen, mode, asset, paymentOptions, open, close }, children });
|
|
365
368
|
};
|
|
366
369
|
var twMerge = tailwindMerge.extendTailwindMerge({
|
|
367
370
|
prefix: "volr:"
|
|
@@ -370,11 +373,11 @@ function cn(...inputs) {
|
|
|
370
373
|
return twMerge(clsx.clsx(inputs));
|
|
371
374
|
}
|
|
372
375
|
function useMediaQuery(query) {
|
|
373
|
-
const [matches, setMatches] =
|
|
376
|
+
const [matches, setMatches] = React11.useState(() => {
|
|
374
377
|
if (typeof window === "undefined") return false;
|
|
375
378
|
return window.matchMedia(query).matches;
|
|
376
379
|
});
|
|
377
|
-
|
|
380
|
+
React11.useEffect(() => {
|
|
378
381
|
if (typeof window === "undefined") return;
|
|
379
382
|
const mql = window.matchMedia(query);
|
|
380
383
|
const handler = (event) => setMatches(event.matches);
|
|
@@ -386,14 +389,14 @@ function useMediaQuery(query) {
|
|
|
386
389
|
}
|
|
387
390
|
|
|
388
391
|
// src/generated/volr-sdk-css.ts
|
|
389
|
-
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-600:oklch(57.7% .245 27.325);--volr-color-red-700:oklch(50.5% .213 27.518);--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-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\\: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-14{height:calc(var(--volr-spacing)*14)}.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-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-5{width:calc(var(--volr-spacing)*5)}.volr\\:w-6{width:calc(var(--volr-spacing)*6)}.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-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\\: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\\: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)))}.volr\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.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-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-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\\: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-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\\.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-11{padding-left:calc(var(--volr-spacing)*11)}.volr\\:text-center{text-align:center}.volr\\:text-left{text-align:left}.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-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-red-600{color:var(--volr-color-red-600)}.volr\\:text-red-700{color:var(--volr-color-red-700)}.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-30{opacity:.3}.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\\: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\\: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}}';
|
|
392
|
+
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-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-green-100:oklch(96.2% .044 156.743);--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-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-3\\.5{height:calc(var(--volr-spacing)*3.5)}.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-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-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-3\\.5{width:calc(var(--volr-spacing)*3.5)}.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-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-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\\: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\\: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-1\\.5{gap:calc(var(--volr-spacing)*1.5)}.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-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-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-300{background-color:var(--volr-color-slate-300)}.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-6{padding:calc(var(--volr-spacing)*6)}.volr\\:p-8{padding:calc(var(--volr-spacing)*8)}.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\\.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-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-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-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-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-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\\: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\\: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}}';
|
|
390
393
|
function useResolvedTheme(theme = "light") {
|
|
391
|
-
const [resolvedTheme, setResolvedTheme] =
|
|
394
|
+
const [resolvedTheme, setResolvedTheme] = React11.useState(() => {
|
|
392
395
|
if (theme !== "system") return theme;
|
|
393
396
|
if (typeof window === "undefined") return "light";
|
|
394
397
|
return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
395
398
|
});
|
|
396
|
-
|
|
399
|
+
React11.useEffect(() => {
|
|
397
400
|
if (theme !== "system") {
|
|
398
401
|
setResolvedTheme(theme);
|
|
399
402
|
return;
|
|
@@ -409,10 +412,10 @@ function useResolvedTheme(theme = "light") {
|
|
|
409
412
|
return resolvedTheme;
|
|
410
413
|
}
|
|
411
414
|
function ShadowPortal({ children, theme = "light" }) {
|
|
412
|
-
const [mountNode, setMountNode] =
|
|
413
|
-
const hostRef =
|
|
415
|
+
const [mountNode, setMountNode] = React11.useState(null);
|
|
416
|
+
const hostRef = React11.useRef(null);
|
|
414
417
|
const resolvedTheme = useResolvedTheme(theme);
|
|
415
|
-
|
|
418
|
+
React11.useEffect(() => {
|
|
416
419
|
const host = document.createElement("div");
|
|
417
420
|
host.id = "volr-shadow-portal";
|
|
418
421
|
host.style.position = "fixed";
|
|
@@ -436,7 +439,7 @@ function ShadowPortal({ children, theme = "light" }) {
|
|
|
436
439
|
hostRef.current = null;
|
|
437
440
|
};
|
|
438
441
|
}, []);
|
|
439
|
-
|
|
442
|
+
React11.useEffect(() => {
|
|
440
443
|
if (hostRef.current) {
|
|
441
444
|
hostRef.current.setAttribute("data-theme", resolvedTheme);
|
|
442
445
|
}
|
|
@@ -445,7 +448,7 @@ function ShadowPortal({ children, theme = "light" }) {
|
|
|
445
448
|
return reactDom.createPortal(children, mountNode);
|
|
446
449
|
}
|
|
447
450
|
function useFocusTrap(isActive, containerRef) {
|
|
448
|
-
const previousActiveElement =
|
|
451
|
+
const previousActiveElement = React11.useRef(null);
|
|
449
452
|
const focusableSelector = [
|
|
450
453
|
"button:not([disabled])",
|
|
451
454
|
"input:not([disabled])",
|
|
@@ -454,7 +457,7 @@ function useFocusTrap(isActive, containerRef) {
|
|
|
454
457
|
"a[href]",
|
|
455
458
|
'[tabindex]:not([tabindex="-1"])'
|
|
456
459
|
].join(", ");
|
|
457
|
-
const getFocusableElements =
|
|
460
|
+
const getFocusableElements = React11.useCallback(() => {
|
|
458
461
|
if (!containerRef.current) return [];
|
|
459
462
|
return Array.from(
|
|
460
463
|
containerRef.current.querySelectorAll(focusableSelector)
|
|
@@ -462,7 +465,7 @@ function useFocusTrap(isActive, containerRef) {
|
|
|
462
465
|
return el.offsetParent !== null;
|
|
463
466
|
});
|
|
464
467
|
}, [containerRef, focusableSelector]);
|
|
465
|
-
const handleKeyDown =
|
|
468
|
+
const handleKeyDown = React11.useCallback(
|
|
466
469
|
(event) => {
|
|
467
470
|
if (event.key !== "Tab") return;
|
|
468
471
|
const focusableElements = getFocusableElements();
|
|
@@ -483,7 +486,7 @@ function useFocusTrap(isActive, containerRef) {
|
|
|
483
486
|
},
|
|
484
487
|
[getFocusableElements]
|
|
485
488
|
);
|
|
486
|
-
|
|
489
|
+
React11.useEffect(() => {
|
|
487
490
|
if (!isActive) return;
|
|
488
491
|
previousActiveElement.current = document.activeElement;
|
|
489
492
|
const focusableElements = getFocusableElements();
|
|
@@ -514,12 +517,12 @@ var Modal = ({
|
|
|
514
517
|
}) => {
|
|
515
518
|
const isMobile2 = useMediaQuery("(max-width: 500px)");
|
|
516
519
|
const variant = explicitVariant ?? (isMobile2 ? "bottom-sheet" : "centered");
|
|
517
|
-
const dialogRef =
|
|
518
|
-
const dialogId =
|
|
520
|
+
const dialogRef = React11.useRef(null);
|
|
521
|
+
const dialogId = React11.useId();
|
|
519
522
|
const uiContext = useVolrUIOptional();
|
|
520
523
|
const theme = uiContext?.theme ?? "light";
|
|
521
524
|
useFocusTrap(open, dialogRef);
|
|
522
|
-
|
|
525
|
+
React11.useEffect(() => {
|
|
523
526
|
const handleEscape = (e) => {
|
|
524
527
|
if (e.key === "Escape" && open) {
|
|
525
528
|
if (onEscapeKeyDown) {
|
|
@@ -973,7 +976,7 @@ var variantMap = {
|
|
|
973
976
|
ghost: { backgroundColor: "transparent", color: "var(--volr-text-secondary)", border: "none" },
|
|
974
977
|
outline: { backgroundColor: "transparent", color: "var(--volr-text-secondary)", border: "1px solid var(--volr-border)" }
|
|
975
978
|
};
|
|
976
|
-
var Button =
|
|
979
|
+
var Button = React11__default.default.forwardRef(
|
|
977
980
|
({ variant = "primary", size = "md", fullWidth, className, style, disabled, children, ...props }, ref) => {
|
|
978
981
|
const { accentColor } = useVolrUI();
|
|
979
982
|
const sizeStyle = sizeMap[size];
|
|
@@ -1081,12 +1084,12 @@ function PasskeyEnrollView({
|
|
|
1081
1084
|
isEnrolling,
|
|
1082
1085
|
error: enrollmentError
|
|
1083
1086
|
} = react.usePasskeyEnrollment();
|
|
1084
|
-
const [hasStarted, setHasStarted] =
|
|
1085
|
-
const [errorMessage, setErrorMessage] =
|
|
1086
|
-
const [isRefreshing, setIsRefreshing] =
|
|
1087
|
+
const [hasStarted, setHasStarted] = React11.useState(false);
|
|
1088
|
+
const [errorMessage, setErrorMessage] = React11.useState(null);
|
|
1089
|
+
const [isRefreshing, setIsRefreshing] = React11.useState(false);
|
|
1087
1090
|
const biometricType = getBiometricType();
|
|
1088
1091
|
const hasPasskey = user?.keyStorageType === "passkey";
|
|
1089
|
-
|
|
1092
|
+
React11.useEffect(() => {
|
|
1090
1093
|
console.log("[PasskeyEnrollView] User state:", {
|
|
1091
1094
|
user,
|
|
1092
1095
|
keyStorageType: user?.keyStorageType,
|
|
@@ -1094,7 +1097,7 @@ function PasskeyEnrollView({
|
|
|
1094
1097
|
hasPasskey
|
|
1095
1098
|
});
|
|
1096
1099
|
}, [user, hasPasskey]);
|
|
1097
|
-
|
|
1100
|
+
React11.useEffect(() => {
|
|
1098
1101
|
if (hasPasskey && !user?.evmAddress && !isRefreshing) {
|
|
1099
1102
|
const refreshUserData = async () => {
|
|
1100
1103
|
try {
|
|
@@ -1125,7 +1128,7 @@ function PasskeyEnrollView({
|
|
|
1125
1128
|
refreshUserData();
|
|
1126
1129
|
}
|
|
1127
1130
|
}, [hasPasskey, user?.evmAddress, isRefreshing, client, setUser, user]);
|
|
1128
|
-
|
|
1131
|
+
React11.useEffect(() => {
|
|
1129
1132
|
if (!user?.id) {
|
|
1130
1133
|
const error = new Error("User ID is required for passkey enrollment");
|
|
1131
1134
|
setErrorMessage(getUserFriendlyError(error, t));
|
|
@@ -1134,7 +1137,7 @@ function PasskeyEnrollView({
|
|
|
1134
1137
|
}
|
|
1135
1138
|
}
|
|
1136
1139
|
}, [user, onError, t]);
|
|
1137
|
-
|
|
1140
|
+
React11.useEffect(() => {
|
|
1138
1141
|
if (enrollmentError) {
|
|
1139
1142
|
const friendlyMessage = getUserFriendlyError(enrollmentError, t);
|
|
1140
1143
|
setErrorMessage(friendlyMessage);
|
|
@@ -1291,8 +1294,8 @@ function MpcConnectView({
|
|
|
1291
1294
|
isConnecting,
|
|
1292
1295
|
error: connectionError
|
|
1293
1296
|
} = react.useMpcConnection();
|
|
1294
|
-
const [errorMessage, setErrorMessage] =
|
|
1295
|
-
|
|
1297
|
+
const [errorMessage, setErrorMessage] = React11.useState(null);
|
|
1298
|
+
React11.useEffect(() => {
|
|
1296
1299
|
if (connectionError) {
|
|
1297
1300
|
setErrorMessage(connectionError.message);
|
|
1298
1301
|
if (onError) {
|
|
@@ -1300,7 +1303,7 @@ function MpcConnectView({
|
|
|
1300
1303
|
}
|
|
1301
1304
|
}
|
|
1302
1305
|
}, [connectionError, onError]);
|
|
1303
|
-
|
|
1306
|
+
React11.useEffect(() => {
|
|
1304
1307
|
handleConnect();
|
|
1305
1308
|
}, []);
|
|
1306
1309
|
const handleConnect = async () => {
|
|
@@ -1361,7 +1364,7 @@ function MpcConnectView({
|
|
|
1361
1364
|
);
|
|
1362
1365
|
}
|
|
1363
1366
|
var CopyButton = ({ text, className, onCopy }) => {
|
|
1364
|
-
const [copied, setCopied] =
|
|
1367
|
+
const [copied, setCopied] = React11.useState(false);
|
|
1365
1368
|
const handleCopy = async () => {
|
|
1366
1369
|
try {
|
|
1367
1370
|
await navigator.clipboard.writeText(text);
|
|
@@ -1559,9 +1562,9 @@ function PoweredBy() {
|
|
|
1559
1562
|
}
|
|
1560
1563
|
function EmailInlineInput({ onSubmit, accentColor }) {
|
|
1561
1564
|
const { t } = useI18n();
|
|
1562
|
-
const [email, setEmail] =
|
|
1563
|
-
const [error, setError] =
|
|
1564
|
-
const [isLoading, setIsLoading] =
|
|
1565
|
+
const [email, setEmail] = React11.useState("");
|
|
1566
|
+
const [error, setError] = React11.useState(null);
|
|
1567
|
+
const [isLoading, setIsLoading] = React11.useState(false);
|
|
1565
1568
|
const handleSubmit = async (e) => {
|
|
1566
1569
|
e.preventDefault();
|
|
1567
1570
|
setError(null);
|
|
@@ -1685,14 +1688,14 @@ function SigninSelectScreen({
|
|
|
1685
1688
|
function CodeInputScreen({ email, onSubmit, onResend }) {
|
|
1686
1689
|
const { t } = useI18n();
|
|
1687
1690
|
const { accentColor } = useVolrUI();
|
|
1688
|
-
const [digits, setDigits] =
|
|
1689
|
-
const [error, setError] =
|
|
1690
|
-
const [isLoading, setIsLoading] =
|
|
1691
|
-
const inputRefs =
|
|
1692
|
-
|
|
1691
|
+
const [digits, setDigits] = React11.useState(Array(6).fill(""));
|
|
1692
|
+
const [error, setError] = React11.useState(null);
|
|
1693
|
+
const [isLoading, setIsLoading] = React11.useState(false);
|
|
1694
|
+
const inputRefs = React11.useRef([]);
|
|
1695
|
+
React11.useEffect(() => {
|
|
1693
1696
|
inputRefs.current[0]?.focus();
|
|
1694
1697
|
}, []);
|
|
1695
|
-
|
|
1698
|
+
React11.useEffect(() => {
|
|
1696
1699
|
const code = digits.join("");
|
|
1697
1700
|
if (code.length === 6 && !isLoading) {
|
|
1698
1701
|
handleSubmit(code);
|
|
@@ -1855,23 +1858,23 @@ function SiweLoginScreen({
|
|
|
1855
1858
|
checkSiweSession,
|
|
1856
1859
|
getSiweSignUrl
|
|
1857
1860
|
} = react.useVolrLogin();
|
|
1858
|
-
const [isLoading, setIsLoading] =
|
|
1859
|
-
const [loadingWallet, setLoadingWallet] =
|
|
1860
|
-
const [error, setError] =
|
|
1861
|
-
const [providers, setProviders] =
|
|
1862
|
-
const [isDetecting, setIsDetecting] =
|
|
1863
|
-
const [hasLegacyWallet, setHasLegacyWallet] =
|
|
1864
|
-
const [showOtherWallet, setShowOtherWallet] =
|
|
1865
|
-
const [sessionUrl, setSessionUrl] =
|
|
1866
|
-
const [isPolling, setIsPolling] =
|
|
1867
|
-
const pollingRef =
|
|
1868
|
-
const sessionCreatedRef =
|
|
1869
|
-
|
|
1861
|
+
const [isLoading, setIsLoading] = React11.useState(false);
|
|
1862
|
+
const [loadingWallet, setLoadingWallet] = React11.useState(null);
|
|
1863
|
+
const [error, setError] = React11.useState(null);
|
|
1864
|
+
const [providers, setProviders] = React11.useState([]);
|
|
1865
|
+
const [isDetecting, setIsDetecting] = React11.useState(true);
|
|
1866
|
+
const [hasLegacyWallet, setHasLegacyWallet] = React11.useState(false);
|
|
1867
|
+
const [showOtherWallet, setShowOtherWallet] = React11.useState(false);
|
|
1868
|
+
const [sessionUrl, setSessionUrl] = React11.useState(null);
|
|
1869
|
+
const [isPolling, setIsPolling] = React11.useState(false);
|
|
1870
|
+
const pollingRef = React11.useRef(null);
|
|
1871
|
+
const sessionCreatedRef = React11.useRef(false);
|
|
1872
|
+
React11.useEffect(() => {
|
|
1870
1873
|
return () => {
|
|
1871
1874
|
if (pollingRef.current) clearInterval(pollingRef.current);
|
|
1872
1875
|
};
|
|
1873
1876
|
}, []);
|
|
1874
|
-
|
|
1877
|
+
React11.useEffect(() => {
|
|
1875
1878
|
if (typeof window === "undefined") {
|
|
1876
1879
|
setIsDetecting(false);
|
|
1877
1880
|
return;
|
|
@@ -1897,7 +1900,7 @@ function SiweLoginScreen({
|
|
|
1897
1900
|
};
|
|
1898
1901
|
}, []);
|
|
1899
1902
|
const hasAnyWallet = providers.length > 0 || hasLegacyWallet;
|
|
1900
|
-
const createSession =
|
|
1903
|
+
const createSession = React11.useCallback(async () => {
|
|
1901
1904
|
if (sessionCreatedRef.current || sessionUrl) return;
|
|
1902
1905
|
sessionCreatedRef.current = true;
|
|
1903
1906
|
try {
|
|
@@ -1939,17 +1942,17 @@ function SiweLoginScreen({
|
|
|
1939
1942
|
onError(err instanceof Error ? err : new Error("Failed to create session"));
|
|
1940
1943
|
}
|
|
1941
1944
|
}, [createSiweSession, getSiweSignUrl, checkSiweSession, onSuccess, onError, t, sessionUrl]);
|
|
1942
|
-
|
|
1945
|
+
React11.useEffect(() => {
|
|
1943
1946
|
if (!isDetecting && !hasAnyWallet && !sessionUrl) {
|
|
1944
1947
|
createSession();
|
|
1945
1948
|
}
|
|
1946
1949
|
}, [isDetecting, hasAnyWallet, sessionUrl, createSession]);
|
|
1947
|
-
|
|
1950
|
+
React11.useEffect(() => {
|
|
1948
1951
|
if (showOtherWallet && !sessionUrl) {
|
|
1949
1952
|
createSession();
|
|
1950
1953
|
}
|
|
1951
1954
|
}, [showOtherWallet, sessionUrl, createSession]);
|
|
1952
|
-
const handleWalletClick =
|
|
1955
|
+
const handleWalletClick = React11.useCallback(async (provider, walletName) => {
|
|
1953
1956
|
setError(null);
|
|
1954
1957
|
setIsLoading(true);
|
|
1955
1958
|
setLoadingWallet(walletName);
|
|
@@ -1973,7 +1976,7 @@ function SiweLoginScreen({
|
|
|
1973
1976
|
setLoadingWallet(null);
|
|
1974
1977
|
}
|
|
1975
1978
|
}, [signWithWallet, onSuccess, onError]);
|
|
1976
|
-
const handleLegacyWalletClick =
|
|
1979
|
+
const handleLegacyWalletClick = React11.useCallback(async () => {
|
|
1977
1980
|
if (typeof window === "undefined" || !window.ethereum) return;
|
|
1978
1981
|
const ethereum = window.ethereum;
|
|
1979
1982
|
let walletName = "Wallet";
|
|
@@ -1982,7 +1985,7 @@ function SiweLoginScreen({
|
|
|
1982
1985
|
else if (ethereum.isRabby) walletName = "Rabby";
|
|
1983
1986
|
await handleWalletClick(ethereum, walletName);
|
|
1984
1987
|
}, [handleWalletClick]);
|
|
1985
|
-
const cancelOtherWallet =
|
|
1988
|
+
const cancelOtherWallet = React11.useCallback(() => {
|
|
1986
1989
|
if (pollingRef.current) {
|
|
1987
1990
|
clearInterval(pollingRef.current);
|
|
1988
1991
|
pollingRef.current = null;
|
|
@@ -2126,13 +2129,13 @@ function SigninModal({ isOpen, onClose, onError }) {
|
|
|
2126
2129
|
const { logout, user } = react.useVolrContext();
|
|
2127
2130
|
const { appName, branding } = useVolrUI();
|
|
2128
2131
|
const { requestEmailCode, verifyEmailCode, handleSocialLogin } = react.useVolrLogin();
|
|
2129
|
-
const [currentScreen, setCurrentScreen] =
|
|
2130
|
-
const [email, setEmail] =
|
|
2132
|
+
const [currentScreen, setCurrentScreen] = React11.useState("method-select");
|
|
2133
|
+
const [email, setEmail] = React11.useState("");
|
|
2131
2134
|
const hasPasskey = user?.keyStorageType === "passkey";
|
|
2132
2135
|
const isMobile2 = useMediaQuery("(max-width: 500px)");
|
|
2133
2136
|
const isWideViewport = useMediaQuery("(min-width: 864px)");
|
|
2134
2137
|
const shouldUseWideLayout = !isMobile2 && isWideViewport && Boolean(branding) && currentScreen === "method-select";
|
|
2135
|
-
|
|
2138
|
+
React11.useEffect(() => {
|
|
2136
2139
|
if (!isOpen) {
|
|
2137
2140
|
setCurrentScreen("method-select");
|
|
2138
2141
|
setEmail("");
|
|
@@ -2289,7 +2292,7 @@ function SigninModal({ isOpen, onClose, onError }) {
|
|
|
2289
2292
|
function AccountModal({ isOpen, onClose, onError }) {
|
|
2290
2293
|
const { user, logout } = react.useVolrContext();
|
|
2291
2294
|
const { t } = useI18n();
|
|
2292
|
-
const [isLoggingOut, setIsLoggingOut] =
|
|
2295
|
+
const [isLoggingOut, setIsLoggingOut] = React11.useState(false);
|
|
2293
2296
|
if (!user) {
|
|
2294
2297
|
return /* @__PURE__ */ jsxRuntime.jsx(SigninModal, { isOpen, onClose, onError });
|
|
2295
2298
|
}
|
|
@@ -2423,7 +2426,7 @@ function AssetSelectView({
|
|
|
2423
2426
|
}) })
|
|
2424
2427
|
] });
|
|
2425
2428
|
}
|
|
2426
|
-
var TextLinkButton =
|
|
2429
|
+
var TextLinkButton = React11__default.default.forwardRef(({ showArrow = false, className, children, ...props }, ref) => {
|
|
2427
2430
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2428
2431
|
"button",
|
|
2429
2432
|
{
|
|
@@ -2682,7 +2685,7 @@ var DepositCompletedToast = ({
|
|
|
2682
2685
|
symbol
|
|
2683
2686
|
}) => {
|
|
2684
2687
|
const { t } = useI18n();
|
|
2685
|
-
const [expanded, setExpanded] =
|
|
2688
|
+
const [expanded, setExpanded] = React11.useState(false);
|
|
2686
2689
|
const formatAmount = (amount) => {
|
|
2687
2690
|
const divisor = BigInt(10 ** decimals);
|
|
2688
2691
|
const whole = amount / divisor;
|
|
@@ -2837,10 +2840,10 @@ function DepositQRView(props) {
|
|
|
2837
2840
|
const { t } = useI18n();
|
|
2838
2841
|
const { config } = react.useVolrContext();
|
|
2839
2842
|
const { client } = react.useInternalAuth();
|
|
2840
|
-
const [chainName, setChainName] =
|
|
2841
|
-
const [showOtherTokenModal, setShowOtherTokenModal] =
|
|
2842
|
-
const [showToast, setShowToast] =
|
|
2843
|
-
const [toastData, setToastData] =
|
|
2843
|
+
const [chainName, setChainName] = React11.useState(null);
|
|
2844
|
+
const [showOtherTokenModal, setShowOtherTokenModal] = React11.useState(false);
|
|
2845
|
+
const [showToast, setShowToast] = React11.useState(false);
|
|
2846
|
+
const [toastData, setToastData] = React11.useState(null);
|
|
2844
2847
|
const eip681 = `ethereum:${props.address}`;
|
|
2845
2848
|
const status = react.useDepositListener({
|
|
2846
2849
|
chainId: props.chainId,
|
|
@@ -2853,7 +2856,7 @@ function DepositQRView(props) {
|
|
|
2853
2856
|
},
|
|
2854
2857
|
address: props.address
|
|
2855
2858
|
});
|
|
2856
|
-
|
|
2859
|
+
React11.useEffect(() => {
|
|
2857
2860
|
if (status.state === "detected") {
|
|
2858
2861
|
setToastData({
|
|
2859
2862
|
previousBalance: status.previousBalance,
|
|
@@ -2863,11 +2866,11 @@ function DepositQRView(props) {
|
|
|
2863
2866
|
setShowToast(true);
|
|
2864
2867
|
}
|
|
2865
2868
|
}, [status]);
|
|
2866
|
-
const getNetworkInfo =
|
|
2869
|
+
const getNetworkInfo = React11.useCallback(
|
|
2867
2870
|
react.createGetNetworkInfo({ client, rpcOverrides: config.rpcOverrides }),
|
|
2868
2871
|
[client, config.rpcOverrides]
|
|
2869
2872
|
);
|
|
2870
|
-
|
|
2873
|
+
React11.useEffect(() => {
|
|
2871
2874
|
let cancelled = false;
|
|
2872
2875
|
const loadChainName = async () => {
|
|
2873
2876
|
try {
|
|
@@ -3034,11 +3037,11 @@ var DepositModal = ({
|
|
|
3034
3037
|
}) => {
|
|
3035
3038
|
const { user } = react.useVolrContext();
|
|
3036
3039
|
const { client } = react.useInternalAuth();
|
|
3037
|
-
const [depositAssets, setDepositAssets] =
|
|
3038
|
-
const [isLoading, setIsLoading] =
|
|
3039
|
-
const [error, setError] =
|
|
3040
|
-
const [selectedIdx, setSelectedIdx] =
|
|
3041
|
-
|
|
3040
|
+
const [depositAssets, setDepositAssets] = React11.useState([]);
|
|
3041
|
+
const [isLoading, setIsLoading] = React11.useState(true);
|
|
3042
|
+
const [error, setError] = React11.useState(null);
|
|
3043
|
+
const [selectedIdx, setSelectedIdx] = React11.useState(-1);
|
|
3044
|
+
React11.useEffect(() => {
|
|
3042
3045
|
if (!open) return;
|
|
3043
3046
|
setIsLoading(true);
|
|
3044
3047
|
setError(null);
|
|
@@ -3065,12 +3068,12 @@ var DepositModal = ({
|
|
|
3065
3068
|
if (depositAssets.length === 1) return 0;
|
|
3066
3069
|
return -1;
|
|
3067
3070
|
};
|
|
3068
|
-
|
|
3071
|
+
React11.useEffect(() => {
|
|
3069
3072
|
if (open && !isLoading && depositAssets.length > 0) {
|
|
3070
3073
|
setSelectedIdx(getInitialIndex());
|
|
3071
3074
|
}
|
|
3072
3075
|
}, [open, isLoading, depositAssets.length, asset]);
|
|
3073
|
-
|
|
3076
|
+
React11.useEffect(() => {
|
|
3074
3077
|
if (!open) {
|
|
3075
3078
|
setSelectedIdx(-1);
|
|
3076
3079
|
}
|
|
@@ -3099,16 +3102,570 @@ var DepositModal = ({
|
|
|
3099
3102
|
)
|
|
3100
3103
|
] });
|
|
3101
3104
|
};
|
|
3102
|
-
var
|
|
3105
|
+
var PaymentSkeleton = () => {
|
|
3106
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:p-6 volr:space-y-6 volr:animate-pulse", children: [
|
|
3107
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:gap-4", children: [
|
|
3108
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:w-16 volr:h-16 volr:bg-slate-200 volr:rounded-xl" }),
|
|
3109
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex-1 volr:space-y-2", children: [
|
|
3110
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-5 volr:bg-slate-200 volr:rounded volr:w-32" }),
|
|
3111
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-4 volr:bg-slate-100 volr:rounded volr:w-48" })
|
|
3112
|
+
] })
|
|
3113
|
+
] }),
|
|
3114
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-px volr:bg-slate-200" }),
|
|
3115
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:space-y-2", children: [
|
|
3116
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-4 volr:bg-slate-100 volr:rounded volr:w-20" }),
|
|
3117
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-8 volr:bg-slate-200 volr:rounded volr:w-40" }),
|
|
3118
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-4 volr:bg-slate-100 volr:rounded volr:w-24" })
|
|
3119
|
+
] }),
|
|
3120
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:justify-between volr:items-center volr:p-3 volr:bg-slate-50 volr:rounded-lg", children: [
|
|
3121
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-4 volr:bg-slate-200 volr:rounded volr:w-24" }),
|
|
3122
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-4 volr:bg-slate-200 volr:rounded volr:w-20" })
|
|
3123
|
+
] }),
|
|
3124
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-12 volr:bg-slate-200 volr:rounded-lg" })
|
|
3125
|
+
] });
|
|
3126
|
+
};
|
|
3127
|
+
var BalanceDisplay = ({
|
|
3128
|
+
balance,
|
|
3129
|
+
symbol,
|
|
3130
|
+
required,
|
|
3131
|
+
isInsufficient
|
|
3132
|
+
}) => {
|
|
3133
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3134
|
+
"div",
|
|
3135
|
+
{
|
|
3136
|
+
className: `volr:flex volr:justify-between volr:items-center volr:p-3 volr:rounded-lg ${isInsufficient ? "volr:bg-red-50 volr:border volr:border-red-200" : "volr:bg-slate-50"}`,
|
|
3137
|
+
children: [
|
|
3138
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-sm volr:text-slate-600", children: "Your Balance" }),
|
|
3139
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:text-right", children: [
|
|
3140
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3141
|
+
"span",
|
|
3142
|
+
{
|
|
3143
|
+
className: `volr:text-sm volr:font-medium ${isInsufficient ? "volr:text-red-600" : "volr:text-slate-900"}`,
|
|
3144
|
+
children: [
|
|
3145
|
+
balance,
|
|
3146
|
+
" ",
|
|
3147
|
+
symbol
|
|
3148
|
+
]
|
|
3149
|
+
}
|
|
3150
|
+
),
|
|
3151
|
+
isInsufficient && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "volr:text-xs volr:text-red-500 volr:mt-0.5", children: [
|
|
3152
|
+
"Need ",
|
|
3153
|
+
required,
|
|
3154
|
+
" ",
|
|
3155
|
+
symbol
|
|
3156
|
+
] })
|
|
3157
|
+
] })
|
|
3158
|
+
]
|
|
3159
|
+
}
|
|
3160
|
+
);
|
|
3161
|
+
};
|
|
3162
|
+
var ItemDisplay = ({
|
|
3163
|
+
name,
|
|
3164
|
+
description,
|
|
3165
|
+
image,
|
|
3166
|
+
logoUrl
|
|
3167
|
+
}) => {
|
|
3168
|
+
const displayImage = image || logoUrl;
|
|
3169
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-start volr:gap-4", children: [
|
|
3170
|
+
displayImage ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
3171
|
+
"img",
|
|
3172
|
+
{
|
|
3173
|
+
src: displayImage,
|
|
3174
|
+
alt: name,
|
|
3175
|
+
className: "volr:w-16 volr:h-16 volr:rounded-xl volr:object-cover volr:bg-slate-100",
|
|
3176
|
+
onError: (e) => {
|
|
3177
|
+
e.target.style.display = "none";
|
|
3178
|
+
}
|
|
3179
|
+
}
|
|
3180
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:w-16 volr:h-16 volr:rounded-xl volr:bg-slate-100 volr:flex volr:items-center volr:justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3181
|
+
"svg",
|
|
3182
|
+
{
|
|
3183
|
+
className: "volr:w-8 volr:h-8 volr:text-slate-400",
|
|
3184
|
+
fill: "none",
|
|
3185
|
+
viewBox: "0 0 24 24",
|
|
3186
|
+
stroke: "currentColor",
|
|
3187
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3188
|
+
"path",
|
|
3189
|
+
{
|
|
3190
|
+
strokeLinecap: "round",
|
|
3191
|
+
strokeLinejoin: "round",
|
|
3192
|
+
strokeWidth: 1.5,
|
|
3193
|
+
d: "M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4"
|
|
3194
|
+
}
|
|
3195
|
+
)
|
|
3196
|
+
}
|
|
3197
|
+
) }),
|
|
3198
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex-1 volr:min-w-0", children: [
|
|
3199
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "volr:text-base volr:font-semibold volr:text-slate-900 volr:truncate", children: name }),
|
|
3200
|
+
description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-slate-500 volr:mt-0.5 volr:line-clamp-2", children: description })
|
|
3201
|
+
] })
|
|
3202
|
+
] });
|
|
3203
|
+
};
|
|
3204
|
+
var PaymentInfoView = ({
|
|
3205
|
+
payment,
|
|
3206
|
+
balance,
|
|
3207
|
+
isBalanceLoading,
|
|
3208
|
+
logoUrl,
|
|
3209
|
+
onPay,
|
|
3210
|
+
onDeposit,
|
|
3211
|
+
isPaying
|
|
3212
|
+
}) => {
|
|
3213
|
+
const { token, itemName, itemDescription, itemImage } = payment;
|
|
3214
|
+
const amountInUnits = Number(payment.amount) / Math.pow(10, token.decimals);
|
|
3215
|
+
const formattedAmount = amountInUnits.toLocaleString(void 0, {
|
|
3216
|
+
minimumFractionDigits: 0,
|
|
3217
|
+
maximumFractionDigits: token.decimals > 6 ? 6 : token.decimals
|
|
3218
|
+
});
|
|
3219
|
+
const balanceNum = parseFloat(balance.replace(/,/g, "") || "0");
|
|
3220
|
+
const isInsufficient = !isBalanceLoading && balanceNum < amountInUnits;
|
|
3221
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:p-6 volr:space-y-6", children: [
|
|
3222
|
+
itemName && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
3223
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3224
|
+
ItemDisplay,
|
|
3225
|
+
{
|
|
3226
|
+
name: itemName,
|
|
3227
|
+
description: itemDescription ?? void 0,
|
|
3228
|
+
image: itemImage ?? void 0,
|
|
3229
|
+
logoUrl
|
|
3230
|
+
}
|
|
3231
|
+
),
|
|
3232
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-px volr:bg-slate-200" })
|
|
3233
|
+
] }),
|
|
3234
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:space-y-1", children: [
|
|
3235
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-slate-500", children: "Amount to Pay" }),
|
|
3236
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-baseline volr:gap-2", children: [
|
|
3237
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-2xl volr:font-bold volr:text-slate-900", children: formattedAmount }),
|
|
3238
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-lg volr:font-medium volr:text-slate-600", children: token.symbol })
|
|
3239
|
+
] }),
|
|
3240
|
+
payment.totalUsd && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "volr:text-sm volr:text-slate-400", children: [
|
|
3241
|
+
"\u2248 $",
|
|
3242
|
+
parseFloat(payment.totalUsd).toFixed(2),
|
|
3243
|
+
" USD"
|
|
3244
|
+
] })
|
|
3245
|
+
] }),
|
|
3246
|
+
isBalanceLoading ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:justify-between volr:items-center volr:p-3 volr:bg-slate-50 volr:rounded-lg volr:animate-pulse", children: [
|
|
3247
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-sm volr:text-slate-400", children: "Loading balance..." }),
|
|
3248
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-4 volr:bg-slate-200 volr:rounded volr:w-20" })
|
|
3249
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
3250
|
+
BalanceDisplay,
|
|
3251
|
+
{
|
|
3252
|
+
balance,
|
|
3253
|
+
symbol: token.symbol,
|
|
3254
|
+
required: formattedAmount,
|
|
3255
|
+
isInsufficient
|
|
3256
|
+
}
|
|
3257
|
+
),
|
|
3258
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:space-y-3", children: [
|
|
3259
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3260
|
+
Button,
|
|
3261
|
+
{
|
|
3262
|
+
onClick: onPay,
|
|
3263
|
+
disabled: isPaying || isBalanceLoading || isInsufficient,
|
|
3264
|
+
className: "volr:w-full",
|
|
3265
|
+
children: isPaying ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "volr:flex volr:items-center volr:justify-center volr:gap-2", children: [
|
|
3266
|
+
/* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "volr:animate-spin volr:h-4 volr:w-4", viewBox: "0 0 24 24", children: [
|
|
3267
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3268
|
+
"circle",
|
|
3269
|
+
{
|
|
3270
|
+
className: "volr:opacity-25",
|
|
3271
|
+
cx: "12",
|
|
3272
|
+
cy: "12",
|
|
3273
|
+
r: "10",
|
|
3274
|
+
stroke: "currentColor",
|
|
3275
|
+
strokeWidth: "4",
|
|
3276
|
+
fill: "none"
|
|
3277
|
+
}
|
|
3278
|
+
),
|
|
3279
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3280
|
+
"path",
|
|
3281
|
+
{
|
|
3282
|
+
className: "volr:opacity-75",
|
|
3283
|
+
fill: "currentColor",
|
|
3284
|
+
d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
|
|
3285
|
+
}
|
|
3286
|
+
)
|
|
3287
|
+
] }),
|
|
3288
|
+
"Processing..."
|
|
3289
|
+
] }) : isInsufficient ? "Insufficient Balance" : `Pay ${formattedAmount} ${token.symbol}`
|
|
3290
|
+
}
|
|
3291
|
+
),
|
|
3292
|
+
isInsufficient && /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "secondary", onClick: onDeposit, className: "volr:w-full", children: [
|
|
3293
|
+
"Deposit ",
|
|
3294
|
+
token.symbol
|
|
3295
|
+
] })
|
|
3296
|
+
] }),
|
|
3297
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:items-center volr:justify-center volr:gap-1.5 volr:pt-2", children: [
|
|
3298
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3299
|
+
"svg",
|
|
3300
|
+
{
|
|
3301
|
+
className: "volr:w-3.5 volr:h-3.5 volr:text-slate-400",
|
|
3302
|
+
fill: "currentColor",
|
|
3303
|
+
viewBox: "0 0 20 20",
|
|
3304
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3305
|
+
"path",
|
|
3306
|
+
{
|
|
3307
|
+
fillRule: "evenodd",
|
|
3308
|
+
d: "M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z",
|
|
3309
|
+
clipRule: "evenodd"
|
|
3310
|
+
}
|
|
3311
|
+
)
|
|
3312
|
+
}
|
|
3313
|
+
),
|
|
3314
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-xs volr:text-slate-400", children: "Secured by Volr" })
|
|
3315
|
+
] })
|
|
3316
|
+
] });
|
|
3317
|
+
};
|
|
3318
|
+
var PaymentProcessingView = ({
|
|
3319
|
+
step,
|
|
3320
|
+
txHash
|
|
3321
|
+
}) => {
|
|
3322
|
+
const steps = [
|
|
3323
|
+
{ id: "signing", label: "Signing transaction" },
|
|
3324
|
+
{ id: "broadcasting", label: "Broadcasting" },
|
|
3325
|
+
{ id: "confirming", label: "Confirming on-chain" }
|
|
3326
|
+
];
|
|
3327
|
+
const currentStepIndex = steps.findIndex((s) => s.id === step);
|
|
3328
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:p-6 volr:space-y-8", children: [
|
|
3329
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:flex volr:justify-center volr:py-4", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:relative volr:w-16 volr:h-16", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3330
|
+
"svg",
|
|
3331
|
+
{
|
|
3332
|
+
className: "volr:animate-spin volr:w-16 volr:h-16 volr:text-slate-900",
|
|
3333
|
+
viewBox: "0 0 24 24",
|
|
3334
|
+
children: [
|
|
3335
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3336
|
+
"circle",
|
|
3337
|
+
{
|
|
3338
|
+
className: "volr:opacity-25",
|
|
3339
|
+
cx: "12",
|
|
3340
|
+
cy: "12",
|
|
3341
|
+
r: "10",
|
|
3342
|
+
stroke: "currentColor",
|
|
3343
|
+
strokeWidth: "3",
|
|
3344
|
+
fill: "none"
|
|
3345
|
+
}
|
|
3346
|
+
),
|
|
3347
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3348
|
+
"path",
|
|
3349
|
+
{
|
|
3350
|
+
className: "volr:opacity-75",
|
|
3351
|
+
fill: "currentColor",
|
|
3352
|
+
d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
|
|
3353
|
+
}
|
|
3354
|
+
)
|
|
3355
|
+
]
|
|
3356
|
+
}
|
|
3357
|
+
) }) }),
|
|
3358
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:text-center", children: [
|
|
3359
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "volr:text-lg volr:font-semibold volr:text-slate-900", children: "Processing Payment" }),
|
|
3360
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-slate-500 volr:mt-1", children: "Please wait while we process your transaction" })
|
|
3361
|
+
] }),
|
|
3362
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:space-y-3", children: steps.map((s, index) => {
|
|
3363
|
+
const isCompleted = index < currentStepIndex;
|
|
3364
|
+
const isCurrent = index === currentStepIndex;
|
|
3365
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3366
|
+
"div",
|
|
3367
|
+
{
|
|
3368
|
+
className: "volr:flex volr:items-center volr:gap-3 volr:px-3 volr:py-2",
|
|
3369
|
+
children: [
|
|
3370
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3371
|
+
"div",
|
|
3372
|
+
{
|
|
3373
|
+
className: `volr:w-6 volr:h-6 volr:rounded-full volr:flex volr:items-center volr:justify-center ${isCompleted ? "volr:bg-green-100" : isCurrent ? "volr:bg-slate-900" : "volr:bg-slate-100"}`,
|
|
3374
|
+
children: isCompleted ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
3375
|
+
"svg",
|
|
3376
|
+
{
|
|
3377
|
+
className: "volr:w-4 volr:h-4 volr:text-green-600",
|
|
3378
|
+
fill: "none",
|
|
3379
|
+
viewBox: "0 0 24 24",
|
|
3380
|
+
stroke: "currentColor",
|
|
3381
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3382
|
+
"path",
|
|
3383
|
+
{
|
|
3384
|
+
strokeLinecap: "round",
|
|
3385
|
+
strokeLinejoin: "round",
|
|
3386
|
+
strokeWidth: 2,
|
|
3387
|
+
d: "M5 13l4 4L19 7"
|
|
3388
|
+
}
|
|
3389
|
+
)
|
|
3390
|
+
}
|
|
3391
|
+
) : isCurrent ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:w-2 volr:h-2 volr:bg-white volr:rounded-full volr:animate-pulse" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:w-2 volr:h-2 volr:bg-slate-300 volr:rounded-full" })
|
|
3392
|
+
}
|
|
3393
|
+
),
|
|
3394
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3395
|
+
"span",
|
|
3396
|
+
{
|
|
3397
|
+
className: `volr:text-sm ${isCompleted ? "volr:text-green-600 volr:font-medium" : isCurrent ? "volr:text-slate-900 volr:font-medium" : "volr:text-slate-400"}`,
|
|
3398
|
+
children: s.label
|
|
3399
|
+
}
|
|
3400
|
+
)
|
|
3401
|
+
]
|
|
3402
|
+
},
|
|
3403
|
+
s.id
|
|
3404
|
+
);
|
|
3405
|
+
}) }),
|
|
3406
|
+
txHash && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:text-center volr:pt-2", children: [
|
|
3407
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-xs volr:text-slate-400", children: "Transaction Hash" }),
|
|
3408
|
+
/* @__PURE__ */ jsxRuntime.jsxs("code", { className: "volr:text-xs volr:text-slate-500 volr:font-mono", children: [
|
|
3409
|
+
txHash.slice(0, 10),
|
|
3410
|
+
"...",
|
|
3411
|
+
txHash.slice(-8)
|
|
3412
|
+
] })
|
|
3413
|
+
] })
|
|
3414
|
+
] });
|
|
3415
|
+
};
|
|
3416
|
+
var PaymentResultView = ({
|
|
3417
|
+
payment,
|
|
3418
|
+
error,
|
|
3419
|
+
onDone,
|
|
3420
|
+
onRetry
|
|
3421
|
+
}) => {
|
|
3422
|
+
const isSuccess = payment.status === "CONFIRMED";
|
|
3423
|
+
payment.status === "FAILED" || !!error;
|
|
3424
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:p-6 volr:space-y-6", children: [
|
|
3425
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:flex volr:justify-center volr:py-4", children: isSuccess ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:w-16 volr:h-16 volr:rounded-full volr:bg-green-100 volr:flex volr:items-center volr:justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3426
|
+
"svg",
|
|
3427
|
+
{
|
|
3428
|
+
className: "volr:w-8 volr:h-8 volr:text-green-600",
|
|
3429
|
+
fill: "none",
|
|
3430
|
+
viewBox: "0 0 24 24",
|
|
3431
|
+
stroke: "currentColor",
|
|
3432
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3433
|
+
"path",
|
|
3434
|
+
{
|
|
3435
|
+
strokeLinecap: "round",
|
|
3436
|
+
strokeLinejoin: "round",
|
|
3437
|
+
strokeWidth: 2,
|
|
3438
|
+
d: "M5 13l4 4L19 7"
|
|
3439
|
+
}
|
|
3440
|
+
)
|
|
3441
|
+
}
|
|
3442
|
+
) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:w-16 volr:h-16 volr:rounded-full volr:bg-red-100 volr:flex volr:items-center volr:justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3443
|
+
"svg",
|
|
3444
|
+
{
|
|
3445
|
+
className: "volr:w-8 volr:h-8 volr:text-red-600",
|
|
3446
|
+
fill: "none",
|
|
3447
|
+
viewBox: "0 0 24 24",
|
|
3448
|
+
stroke: "currentColor",
|
|
3449
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3450
|
+
"path",
|
|
3451
|
+
{
|
|
3452
|
+
strokeLinecap: "round",
|
|
3453
|
+
strokeLinejoin: "round",
|
|
3454
|
+
strokeWidth: 2,
|
|
3455
|
+
d: "M6 18L18 6M6 6l12 12"
|
|
3456
|
+
}
|
|
3457
|
+
)
|
|
3458
|
+
}
|
|
3459
|
+
) }) }),
|
|
3460
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:text-center", children: [
|
|
3461
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "volr:text-lg volr:font-semibold volr:text-slate-900", children: isSuccess ? "Payment Complete" : "Payment Failed" }),
|
|
3462
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-slate-500 volr:mt-1", children: isSuccess ? "Your transaction has been confirmed" : error?.message || "The transaction could not be completed" })
|
|
3463
|
+
] }),
|
|
3464
|
+
isSuccess && payment.txHash && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:bg-slate-50 volr:rounded-lg volr:p-4 volr:space-y-2", children: [
|
|
3465
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:justify-between volr:text-sm", children: [
|
|
3466
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-slate-500", children: "Amount" }),
|
|
3467
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "volr:font-medium volr:text-slate-900", children: [
|
|
3468
|
+
(Number(payment.amount) / Math.pow(10, payment.token.decimals)).toLocaleString(),
|
|
3469
|
+
" ",
|
|
3470
|
+
payment.token.symbol
|
|
3471
|
+
] })
|
|
3472
|
+
] }),
|
|
3473
|
+
payment.totalUsd && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:justify-between volr:text-sm", children: [
|
|
3474
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-slate-500", children: "USD Value" }),
|
|
3475
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "volr:text-slate-600", children: [
|
|
3476
|
+
"$",
|
|
3477
|
+
parseFloat(payment.totalUsd).toFixed(2)
|
|
3478
|
+
] })
|
|
3479
|
+
] }),
|
|
3480
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:justify-between volr:text-sm", children: [
|
|
3481
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "volr:text-slate-500", children: "Transaction" }),
|
|
3482
|
+
/* @__PURE__ */ jsxRuntime.jsxs("code", { className: "volr:text-xs volr:text-slate-600 volr:font-mono", children: [
|
|
3483
|
+
payment.txHash.slice(0, 8),
|
|
3484
|
+
"...",
|
|
3485
|
+
payment.txHash.slice(-6)
|
|
3486
|
+
] })
|
|
3487
|
+
] })
|
|
3488
|
+
] }),
|
|
3489
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:space-y-3", children: isSuccess ? /* @__PURE__ */ jsxRuntime.jsx(Button, { onClick: onDone, className: "volr:w-full", children: "Done" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
3490
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button, { onClick: onRetry, className: "volr:w-full", children: "Try Again" }),
|
|
3491
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "secondary", onClick: onDone, className: "volr:w-full", children: "Cancel" })
|
|
3492
|
+
] }) })
|
|
3493
|
+
] });
|
|
3494
|
+
};
|
|
3495
|
+
var PaymentModal = ({
|
|
3496
|
+
open,
|
|
3497
|
+
onOpenChange
|
|
3498
|
+
}) => {
|
|
3499
|
+
const { user } = react.useVolrContext();
|
|
3500
|
+
const { client } = react.useInternalAuth();
|
|
3501
|
+
const { paymentOptions, close: closeModal } = useVolrModal();
|
|
3502
|
+
const { updatePaymentToProcessing, checkPayment, pollPaymentStatus } = react.useVolrPay();
|
|
3503
|
+
const [step, setStep] = React11.useState("info");
|
|
3504
|
+
const [processingStep, setProcessingStep] = React11.useState("signing");
|
|
3505
|
+
const [balance, setBalance] = React11.useState("0");
|
|
3506
|
+
const [isBalanceLoading, setIsBalanceLoading] = React11.useState(true);
|
|
3507
|
+
const [isPaying, setIsPaying] = React11.useState(false);
|
|
3508
|
+
const [currentPayment, setCurrentPayment] = React11.useState(null);
|
|
3509
|
+
const [txHash, setTxHash] = React11.useState();
|
|
3510
|
+
const [error, setError] = React11.useState();
|
|
3511
|
+
const [logoUrl, setLogoUrl] = React11.useState();
|
|
3512
|
+
React11.useEffect(() => {
|
|
3513
|
+
if (open && paymentOptions) {
|
|
3514
|
+
setStep("info");
|
|
3515
|
+
setProcessingStep("signing");
|
|
3516
|
+
setCurrentPayment(paymentOptions.payment);
|
|
3517
|
+
setError(void 0);
|
|
3518
|
+
setTxHash(void 0);
|
|
3519
|
+
fetchBalance(paymentOptions.payment);
|
|
3520
|
+
fetchBranding();
|
|
3521
|
+
} else if (!open) {
|
|
3522
|
+
setCurrentPayment(null);
|
|
3523
|
+
setBalance("0");
|
|
3524
|
+
setIsBalanceLoading(true);
|
|
3525
|
+
}
|
|
3526
|
+
}, [open, paymentOptions]);
|
|
3527
|
+
const fetchBalance = async (payment) => {
|
|
3528
|
+
if (!user?.evmAddress) {
|
|
3529
|
+
setIsBalanceLoading(false);
|
|
3530
|
+
return;
|
|
3531
|
+
}
|
|
3532
|
+
setIsBalanceLoading(true);
|
|
3533
|
+
try {
|
|
3534
|
+
const response = await client.get(
|
|
3535
|
+
`/wallet/balance?chainId=${payment.token.chainId}&address=${user.evmAddress}&tokenId=${payment.token.id}`
|
|
3536
|
+
).catch(() => ({ balance: "0" }));
|
|
3537
|
+
const balanceNum = Number(response.balance) / Math.pow(10, payment.token.decimals);
|
|
3538
|
+
setBalance(balanceNum.toLocaleString(void 0, {
|
|
3539
|
+
minimumFractionDigits: 0,
|
|
3540
|
+
maximumFractionDigits: payment.token.decimals > 6 ? 6 : payment.token.decimals
|
|
3541
|
+
}));
|
|
3542
|
+
} catch (err) {
|
|
3543
|
+
console.error("Failed to fetch balance:", err);
|
|
3544
|
+
setBalance("0");
|
|
3545
|
+
} finally {
|
|
3546
|
+
setIsBalanceLoading(false);
|
|
3547
|
+
}
|
|
3548
|
+
};
|
|
3549
|
+
const fetchBranding = async () => {
|
|
3550
|
+
try {
|
|
3551
|
+
const response = await client.get("/auth/branding");
|
|
3552
|
+
setLogoUrl(response.logoUrl);
|
|
3553
|
+
} catch {
|
|
3554
|
+
}
|
|
3555
|
+
};
|
|
3556
|
+
const handlePay = React11.useCallback(async () => {
|
|
3557
|
+
if (!currentPayment || !user?.evmAddress || !paymentOptions) return;
|
|
3558
|
+
setIsPaying(true);
|
|
3559
|
+
setStep("processing");
|
|
3560
|
+
setProcessingStep("signing");
|
|
3561
|
+
setError(void 0);
|
|
3562
|
+
try {
|
|
3563
|
+
const configResponse = await client.get(
|
|
3564
|
+
`/payments/config`
|
|
3565
|
+
).catch(() => null);
|
|
3566
|
+
if (!configResponse?.receiverAddress) {
|
|
3567
|
+
throw new Error("Payment not configured. Please contact the app developer.");
|
|
3568
|
+
}
|
|
3569
|
+
setProcessingStep("broadcasting");
|
|
3570
|
+
const mockTxHash = `0x${Math.random().toString(16).slice(2)}`;
|
|
3571
|
+
setTxHash(mockTxHash);
|
|
3572
|
+
setProcessingStep("confirming");
|
|
3573
|
+
await new Promise((resolve) => setTimeout(resolve, 2e3));
|
|
3574
|
+
const finalPayment = {
|
|
3575
|
+
...currentPayment,
|
|
3576
|
+
status: "CONFIRMED",
|
|
3577
|
+
txHash: mockTxHash,
|
|
3578
|
+
confirmedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
3579
|
+
};
|
|
3580
|
+
setCurrentPayment(finalPayment);
|
|
3581
|
+
setStep("result");
|
|
3582
|
+
paymentOptions.onComplete?.(finalPayment);
|
|
3583
|
+
} catch (err) {
|
|
3584
|
+
console.error("Payment failed:", err);
|
|
3585
|
+
const paymentError = {
|
|
3586
|
+
code: "PAYMENT_FAILED",
|
|
3587
|
+
message: err.message || "Payment failed. Please try again."
|
|
3588
|
+
};
|
|
3589
|
+
setError(paymentError);
|
|
3590
|
+
setStep("result");
|
|
3591
|
+
paymentOptions?.onError?.(paymentError);
|
|
3592
|
+
} finally {
|
|
3593
|
+
setIsPaying(false);
|
|
3594
|
+
}
|
|
3595
|
+
}, [currentPayment, user, paymentOptions, client, updatePaymentToProcessing]);
|
|
3596
|
+
const handleDeposit = React11.useCallback(() => {
|
|
3597
|
+
closeModal();
|
|
3598
|
+
}, [closeModal]);
|
|
3599
|
+
const handleDone = React11.useCallback(() => {
|
|
3600
|
+
if (currentPayment) {
|
|
3601
|
+
paymentOptions?.onComplete?.(currentPayment);
|
|
3602
|
+
}
|
|
3603
|
+
onOpenChange(false);
|
|
3604
|
+
}, [currentPayment, paymentOptions, onOpenChange]);
|
|
3605
|
+
const handleRetry = React11.useCallback(() => {
|
|
3606
|
+
setStep("info");
|
|
3607
|
+
setError(void 0);
|
|
3608
|
+
if (currentPayment) {
|
|
3609
|
+
fetchBalance(currentPayment);
|
|
3610
|
+
}
|
|
3611
|
+
}, [currentPayment]);
|
|
3612
|
+
const handleClose = React11.useCallback(() => {
|
|
3613
|
+
if (step === "processing") {
|
|
3614
|
+
return;
|
|
3615
|
+
}
|
|
3616
|
+
if (step === "info") {
|
|
3617
|
+
paymentOptions?.onCancel?.();
|
|
3618
|
+
}
|
|
3619
|
+
onOpenChange(false);
|
|
3620
|
+
}, [step, paymentOptions, onOpenChange]);
|
|
3621
|
+
if (!paymentOptions || !currentPayment) {
|
|
3622
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Modal, { open, onOpenChange, children: [
|
|
3623
|
+
/* @__PURE__ */ jsxRuntime.jsx(ModalHeader, { onClose: () => onOpenChange(false) }),
|
|
3624
|
+
/* @__PURE__ */ jsxRuntime.jsx(PaymentSkeleton, {})
|
|
3625
|
+
] });
|
|
3626
|
+
}
|
|
3627
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Modal, { open, onOpenChange: handleClose, children: [
|
|
3628
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3629
|
+
ModalHeader,
|
|
3630
|
+
{
|
|
3631
|
+
onClose: step !== "processing" ? handleClose : void 0,
|
|
3632
|
+
title: step === "info" ? "Confirm Payment" : void 0
|
|
3633
|
+
}
|
|
3634
|
+
),
|
|
3635
|
+
step === "info" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3636
|
+
PaymentInfoView,
|
|
3637
|
+
{
|
|
3638
|
+
payment: currentPayment,
|
|
3639
|
+
balance,
|
|
3640
|
+
isBalanceLoading,
|
|
3641
|
+
logoUrl,
|
|
3642
|
+
onPay: handlePay,
|
|
3643
|
+
onDeposit: handleDeposit,
|
|
3644
|
+
isPaying
|
|
3645
|
+
}
|
|
3646
|
+
),
|
|
3647
|
+
step === "processing" && /* @__PURE__ */ jsxRuntime.jsx(PaymentProcessingView, { step: processingStep, txHash }),
|
|
3648
|
+
step === "result" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3649
|
+
PaymentResultView,
|
|
3650
|
+
{
|
|
3651
|
+
payment: currentPayment,
|
|
3652
|
+
error,
|
|
3653
|
+
onDone: handleDone,
|
|
3654
|
+
onRetry: handleRetry
|
|
3655
|
+
}
|
|
3656
|
+
)
|
|
3657
|
+
] });
|
|
3658
|
+
};
|
|
3659
|
+
var VolrUIContext = React11__default.default.createContext(null);
|
|
3103
3660
|
var useVolrUI = () => {
|
|
3104
|
-
const context =
|
|
3661
|
+
const context = React11.useContext(VolrUIContext);
|
|
3105
3662
|
if (!context) {
|
|
3106
3663
|
throw new Error("useVolrUI must be used within VolrUIProvider");
|
|
3107
3664
|
}
|
|
3108
3665
|
return context;
|
|
3109
3666
|
};
|
|
3110
3667
|
var useVolrUIOptional = () => {
|
|
3111
|
-
return
|
|
3668
|
+
return React11.useContext(VolrUIContext);
|
|
3112
3669
|
};
|
|
3113
3670
|
function OnboardingFlow({
|
|
3114
3671
|
keyStorageType,
|
|
@@ -3164,11 +3721,11 @@ var VolrUIProvider = ({
|
|
|
3164
3721
|
const providerPolicy = config.providerPolicy ?? {
|
|
3165
3722
|
enforceOnFirstLogin: true
|
|
3166
3723
|
};
|
|
3167
|
-
const [showOnboarding, setShowOnboarding] =
|
|
3168
|
-
const [keyStorageTypeError, setKeyStorageTypeError] =
|
|
3724
|
+
const [showOnboarding, setShowOnboarding] = React11.useState(false);
|
|
3725
|
+
const [keyStorageTypeError, setKeyStorageTypeError] = React11.useState(
|
|
3169
3726
|
null
|
|
3170
3727
|
);
|
|
3171
|
-
|
|
3728
|
+
React11.useEffect(() => {
|
|
3172
3729
|
if (providerPolicy.enforceOnFirstLogin !== false && !keyStorageType) {
|
|
3173
3730
|
const errorMessage = "keyStorageType must be specified in VolrUIProvider props. Please set keyStorageType prop in VolrUIProvider.";
|
|
3174
3731
|
console.error(errorMessage);
|
|
@@ -3214,6 +3771,7 @@ var VolrUIProvider = ({
|
|
|
3214
3771
|
),
|
|
3215
3772
|
/* @__PURE__ */ jsxRuntime.jsx(AccountModalPortal, {}),
|
|
3216
3773
|
/* @__PURE__ */ jsxRuntime.jsx(DepositModalPortal, {}),
|
|
3774
|
+
/* @__PURE__ */ jsxRuntime.jsx(PaymentModalPortal, {}),
|
|
3217
3775
|
showOnboarding && keyStorageType && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3218
3776
|
Modal,
|
|
3219
3777
|
{
|
|
@@ -3239,9 +3797,9 @@ var VolrUIProvider = ({
|
|
|
3239
3797
|
};
|
|
3240
3798
|
function AccountModalPortal() {
|
|
3241
3799
|
const { isOpen, mode, close } = useVolrModal();
|
|
3242
|
-
const [portalRoot, setPortalRoot] =
|
|
3243
|
-
const [error, setError] =
|
|
3244
|
-
|
|
3800
|
+
const [portalRoot, setPortalRoot] = React11.useState(null);
|
|
3801
|
+
const [error, setError] = React11.useState(null);
|
|
3802
|
+
React11.useEffect(() => {
|
|
3245
3803
|
if (typeof window === "undefined") return;
|
|
3246
3804
|
let root = document.getElementById("volr-modal-root");
|
|
3247
3805
|
if (!root) {
|
|
@@ -3300,9 +3858,9 @@ function AccountModalPortal() {
|
|
|
3300
3858
|
function DepositModalPortal() {
|
|
3301
3859
|
const { isOpen, mode, asset, close } = useVolrModal();
|
|
3302
3860
|
const { user } = react.useVolrContext();
|
|
3303
|
-
const [portalRoot, setPortalRoot] =
|
|
3304
|
-
const [showLogin, setShowLogin] =
|
|
3305
|
-
|
|
3861
|
+
const [portalRoot, setPortalRoot] = React11.useState(null);
|
|
3862
|
+
const [showLogin, setShowLogin] = React11.useState(false);
|
|
3863
|
+
React11.useEffect(() => {
|
|
3306
3864
|
if (typeof window === "undefined") return;
|
|
3307
3865
|
let root = document.getElementById("volr-modal-root");
|
|
3308
3866
|
if (!root) {
|
|
@@ -3317,7 +3875,7 @@ function DepositModalPortal() {
|
|
|
3317
3875
|
}
|
|
3318
3876
|
};
|
|
3319
3877
|
}, []);
|
|
3320
|
-
|
|
3878
|
+
React11.useEffect(() => {
|
|
3321
3879
|
if (isOpen && mode === "deposit" && !user) {
|
|
3322
3880
|
setShowLogin(true);
|
|
3323
3881
|
} else {
|
|
@@ -3349,11 +3907,41 @@ function DepositModalPortal() {
|
|
|
3349
3907
|
portalRoot
|
|
3350
3908
|
);
|
|
3351
3909
|
}
|
|
3910
|
+
function PaymentModalPortal() {
|
|
3911
|
+
const { isOpen, mode, close } = useVolrModal();
|
|
3912
|
+
const [portalRoot, setPortalRoot] = React11.useState(null);
|
|
3913
|
+
React11.useEffect(() => {
|
|
3914
|
+
if (typeof window === "undefined") return;
|
|
3915
|
+
let root = document.getElementById("volr-modal-root");
|
|
3916
|
+
if (!root) {
|
|
3917
|
+
root = document.createElement("div");
|
|
3918
|
+
root.id = "volr-modal-root";
|
|
3919
|
+
document.body.appendChild(root);
|
|
3920
|
+
}
|
|
3921
|
+
setPortalRoot(root);
|
|
3922
|
+
return () => {
|
|
3923
|
+
if (root && root.childNodes.length === 0) {
|
|
3924
|
+
root.remove();
|
|
3925
|
+
}
|
|
3926
|
+
};
|
|
3927
|
+
}, []);
|
|
3928
|
+
if (!portalRoot) return null;
|
|
3929
|
+
return reactDom.createPortal(
|
|
3930
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3931
|
+
PaymentModal,
|
|
3932
|
+
{
|
|
3933
|
+
open: isOpen && mode === "payment",
|
|
3934
|
+
onOpenChange: (open) => !open && close()
|
|
3935
|
+
}
|
|
3936
|
+
),
|
|
3937
|
+
portalRoot
|
|
3938
|
+
);
|
|
3939
|
+
}
|
|
3352
3940
|
function OAuthCallbackHandler({
|
|
3353
3941
|
onShowOnboarding
|
|
3354
3942
|
}) {
|
|
3355
|
-
const [hasCode, setHasCode] =
|
|
3356
|
-
|
|
3943
|
+
const [hasCode, setHasCode] = React11.useState(false);
|
|
3944
|
+
React11.useEffect(() => {
|
|
3357
3945
|
if (typeof window === "undefined") return;
|
|
3358
3946
|
const params = new URLSearchParams(window.location.search);
|
|
3359
3947
|
const code = params.get("code");
|
|
@@ -3396,13 +3984,13 @@ function OnboardingChecker({
|
|
|
3396
3984
|
}) {
|
|
3397
3985
|
const { user, provider, isLoading } = react.useVolrContext();
|
|
3398
3986
|
const { isOpen: isModalOpen } = useVolrModal();
|
|
3399
|
-
const modalWasOpened =
|
|
3400
|
-
|
|
3987
|
+
const modalWasOpened = React11__default.default.useRef(false);
|
|
3988
|
+
React11.useEffect(() => {
|
|
3401
3989
|
if (isModalOpen) {
|
|
3402
3990
|
modalWasOpened.current = true;
|
|
3403
3991
|
}
|
|
3404
3992
|
}, [isModalOpen]);
|
|
3405
|
-
|
|
3993
|
+
React11.useEffect(() => {
|
|
3406
3994
|
if (isLoading) {
|
|
3407
3995
|
return;
|
|
3408
3996
|
}
|
|
@@ -3445,7 +4033,7 @@ function OnboardingChecker({
|
|
|
3445
4033
|
}
|
|
3446
4034
|
function useSwitchNetwork() {
|
|
3447
4035
|
const { client } = react.useInternalAuth();
|
|
3448
|
-
return
|
|
4036
|
+
return React11.useCallback(
|
|
3449
4037
|
async (chainId) => {
|
|
3450
4038
|
if (typeof window === "undefined" || !window.ethereum) {
|
|
3451
4039
|
throw new Error("No wallet found");
|