@retinalabsllc/zairusjs 15.0.50 → 15.0.60
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.d.mts +2 -8
- package/dist/index.d.ts +2 -8
- package/dist/index.js +11 -136
- package/dist/index.mjs +11 -135
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -29,6 +29,7 @@ interface ThreeDActionButtonProps {
|
|
|
29
29
|
isLoading?: boolean;
|
|
30
30
|
children: React.ReactNode;
|
|
31
31
|
className?: string;
|
|
32
|
+
style?: React.CSSProperties;
|
|
32
33
|
ariaLabel?: string;
|
|
33
34
|
}
|
|
34
35
|
declare const ThreeDActionButton: React.FC<ThreeDActionButtonProps>;
|
|
@@ -901,13 +902,6 @@ interface UniversalCardActionPageProps {
|
|
|
901
902
|
}
|
|
902
903
|
declare const UniversalCardActionPage: React.FC<UniversalCardActionPageProps>;
|
|
903
904
|
|
|
904
|
-
interface CardCreationDialogProps {
|
|
905
|
-
isOpen: boolean;
|
|
906
|
-
onClose: () => void;
|
|
907
|
-
onSuccess: () => void;
|
|
908
|
-
}
|
|
909
|
-
declare const CardCreationDialog: React.FC<CardCreationDialogProps>;
|
|
910
|
-
|
|
911
905
|
interface PinDialerBottomSheetProps {
|
|
912
906
|
isOpen: boolean;
|
|
913
907
|
title?: string;
|
|
@@ -917,4 +911,4 @@ interface PinDialerBottomSheetProps {
|
|
|
917
911
|
}
|
|
918
912
|
declare const PinDialerBottomSheet: React.FC<PinDialerBottomSheetProps>;
|
|
919
913
|
|
|
920
|
-
export { AppBento2, type AppBento2Props, type BannerProps, type BentoFeature, type BoardMember,
|
|
914
|
+
export { AppBento2, type AppBento2Props, type BannerProps, type BentoFeature, type BoardMember, type CompanyDetails, type ConsultantProfile, ConsultantShowcase, type ConsultantShowcaseProps, ContentGridBlock, type ContentGridBlockProps, type DocumentSectionData, type EmailContact, Faq, type FaqItem, type FaqProps, FeatureScroll, type FeatureScrollProps, Footer, type FooterColumn, type FooterLink, type FooterProps, GifFeatureCard, type GifFeatureCardProps, Header, type HeaderLink, type HeaderProps, type AppLogo$1 as HeroAppLogo, HeroSection, type HeroSectionProps, type HomeActionBtn, type LeaderboardItem, ManagedBoardBlock, type ManagedBoardBlockProps, ManagedContactBlock, type ManagedContactBlockProps, ManagedDocument, type ManagedDocumentProps, ManagedNewsletterSplitBlock, type ManagedNewsletterSplitBlockProps, ManagedNotFoundBlock, type ManagedNotFoundBlockProps, ManagedPricingBlock, type ManagedPricingBlockProps, ManagedProjectsBlock, type ManagedProjectsBlockProps, ManagedToaster, MedicalFeatureStatsBlock, MobileNav, type MobileNavItem, type MobileNavProps, type NavItem, type NotificationItem, NumberInput, type NumberInputProps, PageSpinner, type PageSpinnerProps, PinDialerBottomSheet, type PinDialerBottomSheetProps, PipleAuth, type PipleAuthProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type AppLogo as PricingAppLogo, type PricingFeature, type PricingFeature2, type PricingPlan, type PricingTab, type ProjectItem, type ReferralProfile, type RewardItem, type RewardProfile, type ScrollFeature, type SocialContact, type SocialLink, type StatItem, TextInput, type TextInputProps, ThreeDActionButton, type ThreeDActionButtonProps, ThreeDButton, type ThreeDButtonProps, type TierOption, UniversalCardActionPage, type UniversalCardActionPageProps, UniversalCardPage, type UniversalCardPageProps, UniversalErrorView, type UniversalErrorViewProps, UniversalHomeView, type UniversalHomeViewProps, UniversalOrganizationPage, type UniversalOrganizationPageProps, UniversalProfilePage, type UniversalProfilePageProps, UniversalProfileSettings, type UniversalProfileSettingsProps, type UniversalReferralItem, UniversalReferralPage, type UniversalReferralPageProps, UniversalRewardPage, type UniversalRewardPageProps, UniversalSecurityPage, type UniversalSecurityPageProps, UniversalSidebar, type UniversalSidebarProps, type UniversalTransaction, UniversalTransactionPage, type UniversalTransactionPageProps, UniversalVerificationPage, type UniversalVerificationPageProps, type UniversalWallet, UniversalWalletPage, type UniversalWalletPageProps, type VerificationStatus, WaitlistDialog, type WaitlistDialogProps };
|
package/dist/index.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ interface ThreeDActionButtonProps {
|
|
|
29
29
|
isLoading?: boolean;
|
|
30
30
|
children: React.ReactNode;
|
|
31
31
|
className?: string;
|
|
32
|
+
style?: React.CSSProperties;
|
|
32
33
|
ariaLabel?: string;
|
|
33
34
|
}
|
|
34
35
|
declare const ThreeDActionButton: React.FC<ThreeDActionButtonProps>;
|
|
@@ -901,13 +902,6 @@ interface UniversalCardActionPageProps {
|
|
|
901
902
|
}
|
|
902
903
|
declare const UniversalCardActionPage: React.FC<UniversalCardActionPageProps>;
|
|
903
904
|
|
|
904
|
-
interface CardCreationDialogProps {
|
|
905
|
-
isOpen: boolean;
|
|
906
|
-
onClose: () => void;
|
|
907
|
-
onSuccess: () => void;
|
|
908
|
-
}
|
|
909
|
-
declare const CardCreationDialog: React.FC<CardCreationDialogProps>;
|
|
910
|
-
|
|
911
905
|
interface PinDialerBottomSheetProps {
|
|
912
906
|
isOpen: boolean;
|
|
913
907
|
title?: string;
|
|
@@ -917,4 +911,4 @@ interface PinDialerBottomSheetProps {
|
|
|
917
911
|
}
|
|
918
912
|
declare const PinDialerBottomSheet: React.FC<PinDialerBottomSheetProps>;
|
|
919
913
|
|
|
920
|
-
export { AppBento2, type AppBento2Props, type BannerProps, type BentoFeature, type BoardMember,
|
|
914
|
+
export { AppBento2, type AppBento2Props, type BannerProps, type BentoFeature, type BoardMember, type CompanyDetails, type ConsultantProfile, ConsultantShowcase, type ConsultantShowcaseProps, ContentGridBlock, type ContentGridBlockProps, type DocumentSectionData, type EmailContact, Faq, type FaqItem, type FaqProps, FeatureScroll, type FeatureScrollProps, Footer, type FooterColumn, type FooterLink, type FooterProps, GifFeatureCard, type GifFeatureCardProps, Header, type HeaderLink, type HeaderProps, type AppLogo$1 as HeroAppLogo, HeroSection, type HeroSectionProps, type HomeActionBtn, type LeaderboardItem, ManagedBoardBlock, type ManagedBoardBlockProps, ManagedContactBlock, type ManagedContactBlockProps, ManagedDocument, type ManagedDocumentProps, ManagedNewsletterSplitBlock, type ManagedNewsletterSplitBlockProps, ManagedNotFoundBlock, type ManagedNotFoundBlockProps, ManagedPricingBlock, type ManagedPricingBlockProps, ManagedProjectsBlock, type ManagedProjectsBlockProps, ManagedToaster, MedicalFeatureStatsBlock, MobileNav, type MobileNavItem, type MobileNavProps, type NavItem, type NotificationItem, NumberInput, type NumberInputProps, PageSpinner, type PageSpinnerProps, PinDialerBottomSheet, type PinDialerBottomSheetProps, PipleAuth, type PipleAuthProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type AppLogo as PricingAppLogo, type PricingFeature, type PricingFeature2, type PricingPlan, type PricingTab, type ProjectItem, type ReferralProfile, type RewardItem, type RewardProfile, type ScrollFeature, type SocialContact, type SocialLink, type StatItem, TextInput, type TextInputProps, ThreeDActionButton, type ThreeDActionButtonProps, ThreeDButton, type ThreeDButtonProps, type TierOption, UniversalCardActionPage, type UniversalCardActionPageProps, UniversalCardPage, type UniversalCardPageProps, UniversalErrorView, type UniversalErrorViewProps, UniversalHomeView, type UniversalHomeViewProps, UniversalOrganizationPage, type UniversalOrganizationPageProps, UniversalProfilePage, type UniversalProfilePageProps, UniversalProfileSettings, type UniversalProfileSettingsProps, type UniversalReferralItem, UniversalReferralPage, type UniversalReferralPageProps, UniversalRewardPage, type UniversalRewardPageProps, UniversalSecurityPage, type UniversalSecurityPageProps, UniversalSidebar, type UniversalSidebarProps, type UniversalTransaction, UniversalTransactionPage, type UniversalTransactionPageProps, UniversalVerificationPage, type UniversalVerificationPageProps, type UniversalWallet, UniversalWalletPage, type UniversalWalletPageProps, type VerificationStatus, WaitlistDialog, type WaitlistDialogProps };
|
package/dist/index.js
CHANGED
|
@@ -32,7 +32,6 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
32
32
|
var index_exports = {};
|
|
33
33
|
__export(index_exports, {
|
|
34
34
|
AppBento2: () => AppBento2,
|
|
35
|
-
CardCreationDialog: () => CardCreationDialog,
|
|
36
35
|
ConsultantShowcase: () => ConsultantShowcase,
|
|
37
36
|
ContentGridBlock: () => ContentGridBlock,
|
|
38
37
|
Faq: () => Faq,
|
|
@@ -234,6 +233,7 @@ var ThreeDActionButton = ({
|
|
|
234
233
|
disabled = false,
|
|
235
234
|
isLoading = false,
|
|
236
235
|
children,
|
|
236
|
+
style = {},
|
|
237
237
|
className = ""
|
|
238
238
|
}) => {
|
|
239
239
|
const isInteractionDisabled = disabled || isLoading;
|
|
@@ -273,7 +273,7 @@ var ThreeDActionButton = ({
|
|
|
273
273
|
${isInteractionDisabled ? "opacity-50 cursor-not-allowed" : "active:translate-y-0.5"}
|
|
274
274
|
${className}
|
|
275
275
|
`,
|
|
276
|
-
style: { boxShadow: isInteractionDisabled ? disabledShadow : baseShadow },
|
|
276
|
+
style: { boxShadow: isInteractionDisabled ? disabledShadow : baseShadow, ...style },
|
|
277
277
|
onMouseEnter: (e) => {
|
|
278
278
|
if (isInteractionDisabled) return;
|
|
279
279
|
e.currentTarget.style.boxShadow = hoverShadow;
|
|
@@ -1947,7 +1947,7 @@ var UniversalWalletPage = ({
|
|
|
1947
1947
|
message: `Ensure you only send assets using the exact network specified. Minimum deposit is 15 ${selectedWallet.currency}. Sending funds through an unsupported network or under the minimum will result in permanent loss of funds.`,
|
|
1948
1948
|
isDismissible: false
|
|
1949
1949
|
}
|
|
1950
|
-
)), /* @__PURE__ */ import_react29.default.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-10" }, /* @__PURE__ */ import_react29.default.createElement("div", null, /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Address"), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center gap-2 min-w-0" }, /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[13px] text-black truncate min-w-0 block" }, truncateAddress2(selectedWallet.address)), /* @__PURE__ */ import_react29.default.createElement("button", { type: "button", onClick: () => setShowCopyWarning(true), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.Copy01Icon, size: 14 })))), !external && /* @__PURE__ */ import_react29.default.createElement("div", null, /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Status"), selectedWallet.isActive ? /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[13px] px-1.5 py-0.5 bg-emerald-50 text-emerald-600 " }, "Active on this device") : /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[13px] px-1.5 py-0.5 bg-red-50 text-red-600 " }, "Inactive - Requires Import"))), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
1950
|
+
)), /* @__PURE__ */ import_react29.default.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-10" }, /* @__PURE__ */ import_react29.default.createElement("div", null, /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Address"), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center gap-2 min-w-0" }, /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[13px] text-black truncate min-w-0 block" }, truncateAddress2(selectedWallet.address)), /* @__PURE__ */ import_react29.default.createElement("button", { type: "button", onClick: () => setShowCopyWarning(true), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.Copy01Icon, size: 14 })))), !external && /* @__PURE__ */ import_react29.default.createElement("div", null, /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Status"), selectedWallet.isActive ? /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[13px] px-1.5 py-0.5 bg-emerald-50 text-emerald-600 " }, "Active on this device") : /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[13px] px-1.5 py-0.5 bg-red-50 text-red-600 " }, "Inactive - Requires Import"))), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ import_react29.default.createElement("button", { type: "button", onClick: () => setShowCopyWarning(true), className: "w-full flex items-center justify-center py-2.5 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 outline-none text-xs tracking-wide transition-colors" }, "Copy Wallet Address"))))), selectedWallet && /* @__PURE__ */ import_react29.default.createElement(
|
|
1951
1951
|
ConfirmationDialog,
|
|
1952
1952
|
{
|
|
1953
1953
|
isOpen: showCopyWarning,
|
|
@@ -4352,134 +4352,10 @@ var UniversalCardActionPage = ({
|
|
|
4352
4352
|
));
|
|
4353
4353
|
};
|
|
4354
4354
|
|
|
4355
|
-
// src/components/
|
|
4355
|
+
// src/components/PinDialerBottomSheet.tsx
|
|
4356
4356
|
var import_react73 = __toESM(require("react"));
|
|
4357
|
-
var import_axios2 = __toESM(require("axios"));
|
|
4358
|
-
var import_react_hot_toast11 = __toESM(require("react-hot-toast"));
|
|
4359
4357
|
var import_react74 = require("@hugeicons/react");
|
|
4360
4358
|
var import_core_free_icons25 = require("@hugeicons/core-free-icons");
|
|
4361
|
-
var CheckIcon3 = ({ className = "" }) => /* @__PURE__ */ import_react73.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react73.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ import_react73.default.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
4362
|
-
var CrossIcon3 = ({ className = "" }) => /* @__PURE__ */ import_react73.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react73.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ import_react73.default.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
4363
|
-
var formatTierName2 = (name) => {
|
|
4364
|
-
if (!name) return "";
|
|
4365
|
-
return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
|
|
4366
|
-
};
|
|
4367
|
-
var CardCreationDialog = ({ isOpen, onClose, onSuccess }) => {
|
|
4368
|
-
const [step, setStep] = (0, import_react73.useState)("INPUT");
|
|
4369
|
-
const [activationCode, setActivationCode] = (0, import_react73.useState)("");
|
|
4370
|
-
const [isProcessing, setIsProcessing] = (0, import_react73.useState)(false);
|
|
4371
|
-
const [cardConfig, setCardConfig] = (0, import_react73.useState)(null);
|
|
4372
|
-
const [useKyc, setUseKyc] = (0, import_react73.useState)(true);
|
|
4373
|
-
const [agreedToTerms, setAgreedToTerms] = (0, import_react73.useState)(false);
|
|
4374
|
-
if (!isOpen) return null;
|
|
4375
|
-
const handleVerifyCode = async (e) => {
|
|
4376
|
-
e.preventDefault();
|
|
4377
|
-
const code = activationCode.trim().toUpperCase();
|
|
4378
|
-
if (code.length < 3) return import_react_hot_toast11.default.error("Please enter a valid activation code.");
|
|
4379
|
-
setIsProcessing(true);
|
|
4380
|
-
try {
|
|
4381
|
-
const res = await import_axios2.default.post("/api/cards/create", { activation_code: code });
|
|
4382
|
-
if (res.data.success && res.data.payload?.config) {
|
|
4383
|
-
setCardConfig(res.data.payload.config);
|
|
4384
|
-
setStep("CONFIG");
|
|
4385
|
-
setUseKyc(true);
|
|
4386
|
-
setAgreedToTerms(false);
|
|
4387
|
-
}
|
|
4388
|
-
} catch (err) {
|
|
4389
|
-
import_react_hot_toast11.default.error(err.response?.data?.error || "Invalid or expired activation code.");
|
|
4390
|
-
} finally {
|
|
4391
|
-
setIsProcessing(false);
|
|
4392
|
-
}
|
|
4393
|
-
};
|
|
4394
|
-
const handleCreateCard = async () => {
|
|
4395
|
-
if (!agreedToTerms) return import_react_hot_toast11.default.error("You must agree to the Terms and Privacy Policy.");
|
|
4396
|
-
setIsProcessing(true);
|
|
4397
|
-
try {
|
|
4398
|
-
const res = await import_axios2.default.post("/api/beta/create", {
|
|
4399
|
-
activation_code: activationCode.trim().toUpperCase(),
|
|
4400
|
-
useKyc
|
|
4401
|
-
});
|
|
4402
|
-
if (res.data.success) {
|
|
4403
|
-
import_react_hot_toast11.default.success("Card created successfully!");
|
|
4404
|
-
onSuccess();
|
|
4405
|
-
}
|
|
4406
|
-
} catch (err) {
|
|
4407
|
-
import_react_hot_toast11.default.error(err.response?.data?.error || "Failed to create card. Please try again.");
|
|
4408
|
-
} finally {
|
|
4409
|
-
setIsProcessing(false);
|
|
4410
|
-
}
|
|
4411
|
-
};
|
|
4412
|
-
const currentPrice = cardConfig ? useKyc ? cardConfig.priceUSD : cardConfig.priceIfKycSkippedUSD : 0;
|
|
4413
|
-
const canSkipKyc = cardConfig?.canSkipKyc && cardConfig?.priceIfKycSkippedUSD !== void 0;
|
|
4414
|
-
const currentDescription = cardConfig ? useKyc ? cardConfig.description : cardConfig.descriptionIfKycSkipped : "";
|
|
4415
|
-
const currentLimit = cardConfig ? useKyc ? cardConfig.cardBalanceLimit : cardConfig.cardBalanceLimitIfKycSkipped : "-";
|
|
4416
|
-
const currentCashbackRate = cardConfig ? useKyc ? cardConfig.cashbackPercent : cardConfig.cashbackPercentIfKycSkipped : "-";
|
|
4417
|
-
const currentFxFeeObj = cardConfig ? useKyc ? cardConfig.fxFee : cardConfig.fxFeeIfKycSkipped : null;
|
|
4418
|
-
const fxFeeDisplay = currentFxFeeObj ? `$${currentFxFeeObj.fixedUSD} + ${currentFxFeeObj.percentage}%` : "Standard";
|
|
4419
|
-
const instantCashback = cardConfig?.instantCashbackAmount || 0;
|
|
4420
|
-
return /* @__PURE__ */ import_react73.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "absolute inset-0 bg-black/40", onClick: () => !isProcessing && onClose() }), /* @__PURE__ */ import_react73.default.createElement("div", { className: "relative w-full max-w-md bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[90vh]" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 relative z-10" }, /* @__PURE__ */ import_react73.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, step === "INPUT" ? "Activate Card" : "Configure Your Card"), /* @__PURE__ */ import_react73.default.createElement(
|
|
4421
|
-
"button",
|
|
4422
|
-
{
|
|
4423
|
-
disabled: isProcessing,
|
|
4424
|
-
onClick: onClose,
|
|
4425
|
-
className: "text-neutral-400 hover:text-black transition-colors outline-none disabled:opacity-50"
|
|
4426
|
-
},
|
|
4427
|
-
/* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons25.CancelCircleIcon, size: 18 })
|
|
4428
|
-
)), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-2 relative z-10" }, step === "INPUT" && /* @__PURE__ */ import_react73.default.createElement("div", { className: "animate-in fade-in duration-300" }, /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-neutral-500 mb-6" }, "Enter your secure invitation or activation code to begin the provisioning process."), /* @__PURE__ */ import_react73.default.createElement("form", { onSubmit: handleVerifyCode, className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react73.default.createElement(
|
|
4429
|
-
TextInput,
|
|
4430
|
-
{
|
|
4431
|
-
label: "Activation Code",
|
|
4432
|
-
value: activationCode,
|
|
4433
|
-
onChange: (val) => setActivationCode(val.toUpperCase().replace(/[^A-Z0-9]/g, "")),
|
|
4434
|
-
placeholder: "Code",
|
|
4435
|
-
disabled: isProcessing
|
|
4436
|
-
}
|
|
4437
|
-
), /* @__PURE__ */ import_react73.default.createElement(
|
|
4438
|
-
ThreeDActionButton,
|
|
4439
|
-
{
|
|
4440
|
-
type: "submit",
|
|
4441
|
-
disabled: activationCode.length < 3 || isProcessing,
|
|
4442
|
-
isLoading: isProcessing,
|
|
4443
|
-
className: "w-full mt-2"
|
|
4444
|
-
},
|
|
4445
|
-
"Verify Code"
|
|
4446
|
-
))), step === "CONFIG" && cardConfig && /* @__PURE__ */ import_react73.default.createElement("div", { className: "animate-in fade-in slide-in-from-right-4 duration-300 flex flex-col gap-5" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "relative bg-white rounded-xl p-5 overflow-hidden flex flex-col" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: `absolute -top-10 -right-10 w-40 h-40 bg-linear-to-bl from-[#ceff8a] to-transparent opacity-40 blur-2xl rounded-full pointer-events-none` }), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex justify-between items-start mb-2 relative z-10" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-black text-sm tracking-widest " }, cardConfig.name || `${formatTierName2(cardConfig.cardTier)} Card`), /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[10px] tracking-widest px-2.5 py-1 rounded-full bg-white text-black " }, cardConfig.cardBrand || "VISA")), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-baseline justify-between mt-2 relative z-10 flex-wrap gap-2" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ import_react73.default.createElement("h3", { className: "text-3xl font-light text-black" }, currentPrice === 0 ? "Free" : `$${currentPrice.toFixed(2)}`), currentPrice > 0 && /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-xs text-neutral-500" }, "issuance")), instantCashback > 0 && /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[11px] text-white bg-[#143731] px-2.5 py-1 rounded-full" }, "+$", instantCashback.toFixed(2), " Instant Cashback")), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-[12px] text-neutral-500 mt-2 leading-relaxed relative z-10" }, currentDescription || "Premium global spending card.")), canSkipKyc && /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center justify-between p-3.5 border border-neutral-200 rounded-xl bg-white" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "pr-4" }, /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-[13px] text-black mb-0.5" }, "Use Verified Identity (KYC)"), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-[11px] text-neutral-500 leading-snug" }, "Turn off to issue card anonymously via synthetic proxy.")), /* @__PURE__ */ import_react73.default.createElement(
|
|
4447
|
-
"button",
|
|
4448
|
-
{
|
|
4449
|
-
type: "button",
|
|
4450
|
-
onClick: () => setUseKyc(!useKyc),
|
|
4451
|
-
className: `relative w-11 h-6 rounded-full transition-colors duration-300 shrink-0 ${useKyc ? "bg-black" : "bg-neutral-100"}`
|
|
4452
|
-
},
|
|
4453
|
-
/* @__PURE__ */ import_react73.default.createElement("div", { className: `absolute top-1 left-1 w-4 h-4 rounded-full bg-white shadow-xs transition-transform duration-300 flex items-center justify-center ${useKyc ? "translate-x-5" : "translate-x-0"}` })
|
|
4454
|
-
)), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-3 bg-neutral-50 p-4 rounded-xl" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex justify-between items-center" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[10px] tracking-wider text-neutral-500 " }, "Balance Limit"), /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[12px] text-black" }, currentLimit)), /* @__PURE__ */ import_react73.default.createElement("div", { className: "w-full h-px bg-neutral-100/60" }), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex justify-between items-center" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[10px] tracking-wider text-neutral-500 " }, "Cashback Rate"), /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[12px] text-black" }, currentCashbackRate)), /* @__PURE__ */ import_react73.default.createElement("div", { className: "w-full h-px bg-neutral-100/60" }), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex justify-between items-center" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[10px] tracking-wider text-neutral-500 " }, "FX Fee"), /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[12px] text-black" }, fxFeeDisplay))), cardConfig.features && cardConfig.features.length > 0 && /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-2.5 my-1" }, cardConfig.features.map((feature, idx) => {
|
|
4455
|
-
const isAvailable = feature.value !== false;
|
|
4456
|
-
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
4457
|
-
return /* @__PURE__ */ import_react73.default.createElement("div", { key: idx, className: "flex items-center gap-3" }, isAvailable ? /* @__PURE__ */ import_react73.default.createElement(CheckIcon3, null) : /* @__PURE__ */ import_react73.default.createElement(CrossIcon3, null), /* @__PURE__ */ import_react73.default.createElement("span", { className: `text-[12px] truncate ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-neutral-500 ml-1" }, valueText)));
|
|
4458
|
-
})), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-start gap-3 mt-1" }, /* @__PURE__ */ import_react73.default.createElement(
|
|
4459
|
-
"input",
|
|
4460
|
-
{
|
|
4461
|
-
type: "checkbox",
|
|
4462
|
-
id: "card-terms",
|
|
4463
|
-
checked: agreedToTerms,
|
|
4464
|
-
onChange: (e) => setAgreedToTerms(e.target.checked),
|
|
4465
|
-
className: "mt-0.5 w-4 h-4 bg-white border-neutral-300 rounded text-black focus:ring-black cursor-pointer shrink-0"
|
|
4466
|
-
}
|
|
4467
|
-
), /* @__PURE__ */ import_react73.default.createElement("label", { htmlFor: "card-terms", className: "text-[11px] text-neutral-500 cursor-pointer leading-snug" }, "I agree to the ", /* @__PURE__ */ import_react73.default.createElement("a", { href: "https://aeona.finance/terms", target: "_blank", className: "text-black underline" }, "Terms of Service"), " and ", /* @__PURE__ */ import_react73.default.createElement("a", { href: "https://aeona.finance/privacy", target: "_blank", className: "text-black underline" }, "Privacy Policy"), " governing card issuance.")), /* @__PURE__ */ import_react73.default.createElement("div", { className: "bg-neutral-50 rounded-lg p-3" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-1 " }, "Payment Notice"), /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[11px] text-neutral-600 leading-relaxed block" }, "By confirming, $", currentPrice.toFixed(2), " will be securely deducted from your USD asset balance to guarantee your order.")), /* @__PURE__ */ import_react73.default.createElement("div", { className: "mt-1" }, /* @__PURE__ */ import_react73.default.createElement(
|
|
4468
|
-
ThreeDActionButton,
|
|
4469
|
-
{
|
|
4470
|
-
onClick: handleCreateCard,
|
|
4471
|
-
isLoading: isProcessing,
|
|
4472
|
-
disabled: !agreedToTerms || isProcessing,
|
|
4473
|
-
className: "w-full"
|
|
4474
|
-
},
|
|
4475
|
-
"Create Card"
|
|
4476
|
-
))))));
|
|
4477
|
-
};
|
|
4478
|
-
|
|
4479
|
-
// src/components/PinDialerBottomSheet.tsx
|
|
4480
|
-
var import_react75 = __toESM(require("react"));
|
|
4481
|
-
var import_react76 = require("@hugeicons/react");
|
|
4482
|
-
var import_core_free_icons26 = require("@hugeicons/core-free-icons");
|
|
4483
4359
|
var PinDialerBottomSheet = ({
|
|
4484
4360
|
isOpen,
|
|
4485
4361
|
title = "Action Required",
|
|
@@ -4487,8 +4363,8 @@ var PinDialerBottomSheet = ({
|
|
|
4487
4363
|
onClose,
|
|
4488
4364
|
onComplete
|
|
4489
4365
|
}) => {
|
|
4490
|
-
const [pin, setPin] = (0,
|
|
4491
|
-
(0,
|
|
4366
|
+
const [pin, setPin] = (0, import_react73.useState)("");
|
|
4367
|
+
(0, import_react73.useEffect)(() => {
|
|
4492
4368
|
setPin("");
|
|
4493
4369
|
}, [isOpen]);
|
|
4494
4370
|
const handleSubmit = (e) => {
|
|
@@ -4497,7 +4373,7 @@ var PinDialerBottomSheet = ({
|
|
|
4497
4373
|
onComplete(pin);
|
|
4498
4374
|
};
|
|
4499
4375
|
if (!isOpen) return null;
|
|
4500
|
-
return /* @__PURE__ */
|
|
4376
|
+
return /* @__PURE__ */ import_react73.default.createElement("div", { className: "fixed inset-0 z-150 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react73.default.createElement(
|
|
4501
4377
|
"div",
|
|
4502
4378
|
{
|
|
4503
4379
|
className: "absolute inset-0 bg-black/40 animate-in fade-in duration-200",
|
|
@@ -4505,7 +4381,7 @@ var PinDialerBottomSheet = ({
|
|
|
4505
4381
|
if (!isVerifying) onClose();
|
|
4506
4382
|
}
|
|
4507
4383
|
}
|
|
4508
|
-
), /* @__PURE__ */
|
|
4384
|
+
), /* @__PURE__ */ import_react73.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ import_react73.default.createElement("h3", { className: "text-[16px] text-black tracking-tight" }, title), /* @__PURE__ */ import_react73.default.createElement(
|
|
4509
4385
|
"button",
|
|
4510
4386
|
{
|
|
4511
4387
|
onClick: () => {
|
|
@@ -4514,8 +4390,8 @@ var PinDialerBottomSheet = ({
|
|
|
4514
4390
|
disabled: isVerifying,
|
|
4515
4391
|
className: "text-neutral-400 hover:text-black transition-colors outline-none disabled:opacity-50"
|
|
4516
4392
|
},
|
|
4517
|
-
/* @__PURE__ */
|
|
4518
|
-
)), /* @__PURE__ */
|
|
4393
|
+
/* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons25.CancelCircleIcon, size: 20 })
|
|
4394
|
+
)), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col px-6 pb-6 pt-2 relative" }, /* @__PURE__ */ import_react73.default.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react73.default.createElement(
|
|
4519
4395
|
TextInput,
|
|
4520
4396
|
{
|
|
4521
4397
|
type: "password",
|
|
@@ -4526,7 +4402,7 @@ var PinDialerBottomSheet = ({
|
|
|
4526
4402
|
onChange: (val) => setPin(val.replace(/\D/g, "").substring(0, 4)),
|
|
4527
4403
|
placeholder: "\u2022\u2022\u2022\u2022"
|
|
4528
4404
|
}
|
|
4529
|
-
), /* @__PURE__ */
|
|
4405
|
+
), /* @__PURE__ */ import_react73.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react73.default.createElement(
|
|
4530
4406
|
ThreeDActionButton,
|
|
4531
4407
|
{
|
|
4532
4408
|
type: "submit",
|
|
@@ -4540,7 +4416,6 @@ var PinDialerBottomSheet = ({
|
|
|
4540
4416
|
// Annotate the CommonJS export names for ESM import in node:
|
|
4541
4417
|
0 && (module.exports = {
|
|
4542
4418
|
AppBento2,
|
|
4543
|
-
CardCreationDialog,
|
|
4544
4419
|
ConsultantShowcase,
|
|
4545
4420
|
ContentGridBlock,
|
|
4546
4421
|
Faq,
|
package/dist/index.mjs
CHANGED
|
@@ -156,6 +156,7 @@ var ThreeDActionButton = ({
|
|
|
156
156
|
disabled = false,
|
|
157
157
|
isLoading = false,
|
|
158
158
|
children,
|
|
159
|
+
style = {},
|
|
159
160
|
className = ""
|
|
160
161
|
}) => {
|
|
161
162
|
const isInteractionDisabled = disabled || isLoading;
|
|
@@ -195,7 +196,7 @@ var ThreeDActionButton = ({
|
|
|
195
196
|
${isInteractionDisabled ? "opacity-50 cursor-not-allowed" : "active:translate-y-0.5"}
|
|
196
197
|
${className}
|
|
197
198
|
`,
|
|
198
|
-
style: { boxShadow: isInteractionDisabled ? disabledShadow : baseShadow },
|
|
199
|
+
style: { boxShadow: isInteractionDisabled ? disabledShadow : baseShadow, ...style },
|
|
199
200
|
onMouseEnter: (e) => {
|
|
200
201
|
if (isInteractionDisabled) return;
|
|
201
202
|
e.currentTarget.style.boxShadow = hoverShadow;
|
|
@@ -1912,7 +1913,7 @@ var UniversalWalletPage = ({
|
|
|
1912
1913
|
message: `Ensure you only send assets using the exact network specified. Minimum deposit is 15 ${selectedWallet.currency}. Sending funds through an unsupported network or under the minimum will result in permanent loss of funds.`,
|
|
1913
1914
|
isDismissible: false
|
|
1914
1915
|
}
|
|
1915
|
-
)), /* @__PURE__ */ React18.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-10" }, /* @__PURE__ */ React18.createElement("div", null, /* @__PURE__ */ React18.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Address"), /* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-2 min-w-0" }, /* @__PURE__ */ React18.createElement("span", { className: "text-[13px] text-black truncate min-w-0 block" }, truncateAddress2(selectedWallet.address)), /* @__PURE__ */ React18.createElement("button", { type: "button", onClick: () => setShowCopyWarning(true), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Copy01Icon2, size: 14 })))), !external && /* @__PURE__ */ React18.createElement("div", null, /* @__PURE__ */ React18.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Status"), selectedWallet.isActive ? /* @__PURE__ */ React18.createElement("span", { className: "text-[13px] px-1.5 py-0.5 bg-emerald-50 text-emerald-600 " }, "Active on this device") : /* @__PURE__ */ React18.createElement("span", { className: "text-[13px] px-1.5 py-0.5 bg-red-50 text-red-600 " }, "Inactive - Requires Import"))), /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React18.createElement(
|
|
1916
|
+
)), /* @__PURE__ */ React18.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-10" }, /* @__PURE__ */ React18.createElement("div", null, /* @__PURE__ */ React18.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Address"), /* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-2 min-w-0" }, /* @__PURE__ */ React18.createElement("span", { className: "text-[13px] text-black truncate min-w-0 block" }, truncateAddress2(selectedWallet.address)), /* @__PURE__ */ React18.createElement("button", { type: "button", onClick: () => setShowCopyWarning(true), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Copy01Icon2, size: 14 })))), !external && /* @__PURE__ */ React18.createElement("div", null, /* @__PURE__ */ React18.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Status"), selectedWallet.isActive ? /* @__PURE__ */ React18.createElement("span", { className: "text-[13px] px-1.5 py-0.5 bg-emerald-50 text-emerald-600 " }, "Active on this device") : /* @__PURE__ */ React18.createElement("span", { className: "text-[13px] px-1.5 py-0.5 bg-red-50 text-red-600 " }, "Inactive - Requires Import"))), /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React18.createElement("button", { type: "button", onClick: () => setShowCopyWarning(true), className: "w-full flex items-center justify-center py-2.5 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 outline-none text-xs tracking-wide transition-colors" }, "Copy Wallet Address"))))), selectedWallet && /* @__PURE__ */ React18.createElement(
|
|
1916
1917
|
ConfirmationDialog,
|
|
1917
1918
|
{
|
|
1918
1919
|
isOpen: showCopyWarning,
|
|
@@ -4369,134 +4370,10 @@ var UniversalCardActionPage = ({
|
|
|
4369
4370
|
));
|
|
4370
4371
|
};
|
|
4371
4372
|
|
|
4372
|
-
// src/components/
|
|
4373
|
-
import React44, { useState as useState29 } from "react";
|
|
4374
|
-
import axios2 from "axios";
|
|
4375
|
-
import toast10 from "react-hot-toast";
|
|
4373
|
+
// src/components/PinDialerBottomSheet.tsx
|
|
4374
|
+
import React44, { useState as useState29, useEffect as useEffect17 } from "react";
|
|
4376
4375
|
import { HugeiconsIcon as HugeiconsIcon30 } from "@hugeicons/react";
|
|
4377
4376
|
import { CancelCircleIcon as CancelCircleIcon7 } from "@hugeicons/core-free-icons";
|
|
4378
|
-
var CheckIcon3 = ({ className = "" }) => /* @__PURE__ */ React44.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React44.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ React44.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
4379
|
-
var CrossIcon3 = ({ className = "" }) => /* @__PURE__ */ React44.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React44.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ React44.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
4380
|
-
var formatTierName2 = (name) => {
|
|
4381
|
-
if (!name) return "";
|
|
4382
|
-
return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
|
|
4383
|
-
};
|
|
4384
|
-
var CardCreationDialog = ({ isOpen, onClose, onSuccess }) => {
|
|
4385
|
-
const [step, setStep] = useState29("INPUT");
|
|
4386
|
-
const [activationCode, setActivationCode] = useState29("");
|
|
4387
|
-
const [isProcessing, setIsProcessing] = useState29(false);
|
|
4388
|
-
const [cardConfig, setCardConfig] = useState29(null);
|
|
4389
|
-
const [useKyc, setUseKyc] = useState29(true);
|
|
4390
|
-
const [agreedToTerms, setAgreedToTerms] = useState29(false);
|
|
4391
|
-
if (!isOpen) return null;
|
|
4392
|
-
const handleVerifyCode = async (e) => {
|
|
4393
|
-
e.preventDefault();
|
|
4394
|
-
const code = activationCode.trim().toUpperCase();
|
|
4395
|
-
if (code.length < 3) return toast10.error("Please enter a valid activation code.");
|
|
4396
|
-
setIsProcessing(true);
|
|
4397
|
-
try {
|
|
4398
|
-
const res = await axios2.post("/api/cards/create", { activation_code: code });
|
|
4399
|
-
if (res.data.success && res.data.payload?.config) {
|
|
4400
|
-
setCardConfig(res.data.payload.config);
|
|
4401
|
-
setStep("CONFIG");
|
|
4402
|
-
setUseKyc(true);
|
|
4403
|
-
setAgreedToTerms(false);
|
|
4404
|
-
}
|
|
4405
|
-
} catch (err) {
|
|
4406
|
-
toast10.error(err.response?.data?.error || "Invalid or expired activation code.");
|
|
4407
|
-
} finally {
|
|
4408
|
-
setIsProcessing(false);
|
|
4409
|
-
}
|
|
4410
|
-
};
|
|
4411
|
-
const handleCreateCard = async () => {
|
|
4412
|
-
if (!agreedToTerms) return toast10.error("You must agree to the Terms and Privacy Policy.");
|
|
4413
|
-
setIsProcessing(true);
|
|
4414
|
-
try {
|
|
4415
|
-
const res = await axios2.post("/api/beta/create", {
|
|
4416
|
-
activation_code: activationCode.trim().toUpperCase(),
|
|
4417
|
-
useKyc
|
|
4418
|
-
});
|
|
4419
|
-
if (res.data.success) {
|
|
4420
|
-
toast10.success("Card created successfully!");
|
|
4421
|
-
onSuccess();
|
|
4422
|
-
}
|
|
4423
|
-
} catch (err) {
|
|
4424
|
-
toast10.error(err.response?.data?.error || "Failed to create card. Please try again.");
|
|
4425
|
-
} finally {
|
|
4426
|
-
setIsProcessing(false);
|
|
4427
|
-
}
|
|
4428
|
-
};
|
|
4429
|
-
const currentPrice = cardConfig ? useKyc ? cardConfig.priceUSD : cardConfig.priceIfKycSkippedUSD : 0;
|
|
4430
|
-
const canSkipKyc = cardConfig?.canSkipKyc && cardConfig?.priceIfKycSkippedUSD !== void 0;
|
|
4431
|
-
const currentDescription = cardConfig ? useKyc ? cardConfig.description : cardConfig.descriptionIfKycSkipped : "";
|
|
4432
|
-
const currentLimit = cardConfig ? useKyc ? cardConfig.cardBalanceLimit : cardConfig.cardBalanceLimitIfKycSkipped : "-";
|
|
4433
|
-
const currentCashbackRate = cardConfig ? useKyc ? cardConfig.cashbackPercent : cardConfig.cashbackPercentIfKycSkipped : "-";
|
|
4434
|
-
const currentFxFeeObj = cardConfig ? useKyc ? cardConfig.fxFee : cardConfig.fxFeeIfKycSkipped : null;
|
|
4435
|
-
const fxFeeDisplay = currentFxFeeObj ? `$${currentFxFeeObj.fixedUSD} + ${currentFxFeeObj.percentage}%` : "Standard";
|
|
4436
|
-
const instantCashback = cardConfig?.instantCashbackAmount || 0;
|
|
4437
|
-
return /* @__PURE__ */ React44.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React44.createElement("div", { className: "absolute inset-0 bg-black/40", onClick: () => !isProcessing && onClose() }), /* @__PURE__ */ React44.createElement("div", { className: "relative w-full max-w-md bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[90vh]" }, /* @__PURE__ */ React44.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 relative z-10" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, step === "INPUT" ? "Activate Card" : "Configure Your Card"), /* @__PURE__ */ React44.createElement(
|
|
4438
|
-
"button",
|
|
4439
|
-
{
|
|
4440
|
-
disabled: isProcessing,
|
|
4441
|
-
onClick: onClose,
|
|
4442
|
-
className: "text-neutral-400 hover:text-black transition-colors outline-none disabled:opacity-50"
|
|
4443
|
-
},
|
|
4444
|
-
/* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: CancelCircleIcon7, size: 18 })
|
|
4445
|
-
)), /* @__PURE__ */ React44.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-2 relative z-10" }, step === "INPUT" && /* @__PURE__ */ React44.createElement("div", { className: "animate-in fade-in duration-300" }, /* @__PURE__ */ React44.createElement("p", { className: "text-xs text-neutral-500 mb-6" }, "Enter your secure invitation or activation code to begin the provisioning process."), /* @__PURE__ */ React44.createElement("form", { onSubmit: handleVerifyCode, className: "flex flex-col gap-6" }, /* @__PURE__ */ React44.createElement(
|
|
4446
|
-
TextInput,
|
|
4447
|
-
{
|
|
4448
|
-
label: "Activation Code",
|
|
4449
|
-
value: activationCode,
|
|
4450
|
-
onChange: (val) => setActivationCode(val.toUpperCase().replace(/[^A-Z0-9]/g, "")),
|
|
4451
|
-
placeholder: "Code",
|
|
4452
|
-
disabled: isProcessing
|
|
4453
|
-
}
|
|
4454
|
-
), /* @__PURE__ */ React44.createElement(
|
|
4455
|
-
ThreeDActionButton,
|
|
4456
|
-
{
|
|
4457
|
-
type: "submit",
|
|
4458
|
-
disabled: activationCode.length < 3 || isProcessing,
|
|
4459
|
-
isLoading: isProcessing,
|
|
4460
|
-
className: "w-full mt-2"
|
|
4461
|
-
},
|
|
4462
|
-
"Verify Code"
|
|
4463
|
-
))), step === "CONFIG" && cardConfig && /* @__PURE__ */ React44.createElement("div", { className: "animate-in fade-in slide-in-from-right-4 duration-300 flex flex-col gap-5" }, /* @__PURE__ */ React44.createElement("div", { className: "relative bg-white rounded-xl p-5 overflow-hidden flex flex-col" }, /* @__PURE__ */ React44.createElement("div", { className: `absolute -top-10 -right-10 w-40 h-40 bg-linear-to-bl from-[#ceff8a] to-transparent opacity-40 blur-2xl rounded-full pointer-events-none` }), /* @__PURE__ */ React44.createElement("div", { className: "flex justify-between items-start mb-2 relative z-10" }, /* @__PURE__ */ React44.createElement("span", { className: "text-black text-sm tracking-widest " }, cardConfig.name || `${formatTierName2(cardConfig.cardTier)} Card`), /* @__PURE__ */ React44.createElement("span", { className: "text-[10px] tracking-widest px-2.5 py-1 rounded-full bg-white text-black " }, cardConfig.cardBrand || "VISA")), /* @__PURE__ */ React44.createElement("div", { className: "flex items-baseline justify-between mt-2 relative z-10 flex-wrap gap-2" }, /* @__PURE__ */ React44.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-3xl font-light text-black" }, currentPrice === 0 ? "Free" : `$${currentPrice.toFixed(2)}`), currentPrice > 0 && /* @__PURE__ */ React44.createElement("span", { className: "text-xs text-neutral-500" }, "issuance")), instantCashback > 0 && /* @__PURE__ */ React44.createElement("span", { className: "text-[11px] text-white bg-[#143731] px-2.5 py-1 rounded-full" }, "+$", instantCashback.toFixed(2), " Instant Cashback")), /* @__PURE__ */ React44.createElement("p", { className: "text-[12px] text-neutral-500 mt-2 leading-relaxed relative z-10" }, currentDescription || "Premium global spending card.")), canSkipKyc && /* @__PURE__ */ React44.createElement("div", { className: "flex items-center justify-between p-3.5 border border-neutral-200 rounded-xl bg-white" }, /* @__PURE__ */ React44.createElement("div", { className: "pr-4" }, /* @__PURE__ */ React44.createElement("p", { className: "text-[13px] text-black mb-0.5" }, "Use Verified Identity (KYC)"), /* @__PURE__ */ React44.createElement("p", { className: "text-[11px] text-neutral-500 leading-snug" }, "Turn off to issue card anonymously via synthetic proxy.")), /* @__PURE__ */ React44.createElement(
|
|
4464
|
-
"button",
|
|
4465
|
-
{
|
|
4466
|
-
type: "button",
|
|
4467
|
-
onClick: () => setUseKyc(!useKyc),
|
|
4468
|
-
className: `relative w-11 h-6 rounded-full transition-colors duration-300 shrink-0 ${useKyc ? "bg-black" : "bg-neutral-100"}`
|
|
4469
|
-
},
|
|
4470
|
-
/* @__PURE__ */ React44.createElement("div", { className: `absolute top-1 left-1 w-4 h-4 rounded-full bg-white shadow-xs transition-transform duration-300 flex items-center justify-center ${useKyc ? "translate-x-5" : "translate-x-0"}` })
|
|
4471
|
-
)), /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-3 bg-neutral-50 p-4 rounded-xl" }, /* @__PURE__ */ React44.createElement("div", { className: "flex justify-between items-center" }, /* @__PURE__ */ React44.createElement("span", { className: "text-[10px] tracking-wider text-neutral-500 " }, "Balance Limit"), /* @__PURE__ */ React44.createElement("span", { className: "text-[12px] text-black" }, currentLimit)), /* @__PURE__ */ React44.createElement("div", { className: "w-full h-px bg-neutral-100/60" }), /* @__PURE__ */ React44.createElement("div", { className: "flex justify-between items-center" }, /* @__PURE__ */ React44.createElement("span", { className: "text-[10px] tracking-wider text-neutral-500 " }, "Cashback Rate"), /* @__PURE__ */ React44.createElement("span", { className: "text-[12px] text-black" }, currentCashbackRate)), /* @__PURE__ */ React44.createElement("div", { className: "w-full h-px bg-neutral-100/60" }), /* @__PURE__ */ React44.createElement("div", { className: "flex justify-between items-center" }, /* @__PURE__ */ React44.createElement("span", { className: "text-[10px] tracking-wider text-neutral-500 " }, "FX Fee"), /* @__PURE__ */ React44.createElement("span", { className: "text-[12px] text-black" }, fxFeeDisplay))), cardConfig.features && cardConfig.features.length > 0 && /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-2.5 my-1" }, cardConfig.features.map((feature, idx) => {
|
|
4472
|
-
const isAvailable = feature.value !== false;
|
|
4473
|
-
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
4474
|
-
return /* @__PURE__ */ React44.createElement("div", { key: idx, className: "flex items-center gap-3" }, isAvailable ? /* @__PURE__ */ React44.createElement(CheckIcon3, null) : /* @__PURE__ */ React44.createElement(CrossIcon3, null), /* @__PURE__ */ React44.createElement("span", { className: `text-[12px] truncate ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ React44.createElement("span", { className: "text-neutral-500 ml-1" }, valueText)));
|
|
4475
|
-
})), /* @__PURE__ */ React44.createElement("div", { className: "flex items-start gap-3 mt-1" }, /* @__PURE__ */ React44.createElement(
|
|
4476
|
-
"input",
|
|
4477
|
-
{
|
|
4478
|
-
type: "checkbox",
|
|
4479
|
-
id: "card-terms",
|
|
4480
|
-
checked: agreedToTerms,
|
|
4481
|
-
onChange: (e) => setAgreedToTerms(e.target.checked),
|
|
4482
|
-
className: "mt-0.5 w-4 h-4 bg-white border-neutral-300 rounded text-black focus:ring-black cursor-pointer shrink-0"
|
|
4483
|
-
}
|
|
4484
|
-
), /* @__PURE__ */ React44.createElement("label", { htmlFor: "card-terms", className: "text-[11px] text-neutral-500 cursor-pointer leading-snug" }, "I agree to the ", /* @__PURE__ */ React44.createElement("a", { href: "https://aeona.finance/terms", target: "_blank", className: "text-black underline" }, "Terms of Service"), " and ", /* @__PURE__ */ React44.createElement("a", { href: "https://aeona.finance/privacy", target: "_blank", className: "text-black underline" }, "Privacy Policy"), " governing card issuance.")), /* @__PURE__ */ React44.createElement("div", { className: "bg-neutral-50 rounded-lg p-3" }, /* @__PURE__ */ React44.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-1 " }, "Payment Notice"), /* @__PURE__ */ React44.createElement("span", { className: "text-[11px] text-neutral-600 leading-relaxed block" }, "By confirming, $", currentPrice.toFixed(2), " will be securely deducted from your USD asset balance to guarantee your order.")), /* @__PURE__ */ React44.createElement("div", { className: "mt-1" }, /* @__PURE__ */ React44.createElement(
|
|
4485
|
-
ThreeDActionButton,
|
|
4486
|
-
{
|
|
4487
|
-
onClick: handleCreateCard,
|
|
4488
|
-
isLoading: isProcessing,
|
|
4489
|
-
disabled: !agreedToTerms || isProcessing,
|
|
4490
|
-
className: "w-full"
|
|
4491
|
-
},
|
|
4492
|
-
"Create Card"
|
|
4493
|
-
))))));
|
|
4494
|
-
};
|
|
4495
|
-
|
|
4496
|
-
// src/components/PinDialerBottomSheet.tsx
|
|
4497
|
-
import React45, { useState as useState30, useEffect as useEffect17 } from "react";
|
|
4498
|
-
import { HugeiconsIcon as HugeiconsIcon31 } from "@hugeicons/react";
|
|
4499
|
-
import { CancelCircleIcon as CancelCircleIcon8 } from "@hugeicons/core-free-icons";
|
|
4500
4377
|
var PinDialerBottomSheet = ({
|
|
4501
4378
|
isOpen,
|
|
4502
4379
|
title = "Action Required",
|
|
@@ -4504,7 +4381,7 @@ var PinDialerBottomSheet = ({
|
|
|
4504
4381
|
onClose,
|
|
4505
4382
|
onComplete
|
|
4506
4383
|
}) => {
|
|
4507
|
-
const [pin, setPin] =
|
|
4384
|
+
const [pin, setPin] = useState29("");
|
|
4508
4385
|
useEffect17(() => {
|
|
4509
4386
|
setPin("");
|
|
4510
4387
|
}, [isOpen]);
|
|
@@ -4514,7 +4391,7 @@ var PinDialerBottomSheet = ({
|
|
|
4514
4391
|
onComplete(pin);
|
|
4515
4392
|
};
|
|
4516
4393
|
if (!isOpen) return null;
|
|
4517
|
-
return /* @__PURE__ */
|
|
4394
|
+
return /* @__PURE__ */ React44.createElement("div", { className: "fixed inset-0 z-150 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React44.createElement(
|
|
4518
4395
|
"div",
|
|
4519
4396
|
{
|
|
4520
4397
|
className: "absolute inset-0 bg-black/40 animate-in fade-in duration-200",
|
|
@@ -4522,7 +4399,7 @@ var PinDialerBottomSheet = ({
|
|
|
4522
4399
|
if (!isVerifying) onClose();
|
|
4523
4400
|
}
|
|
4524
4401
|
}
|
|
4525
|
-
), /* @__PURE__ */
|
|
4402
|
+
), /* @__PURE__ */ React44.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React44.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-[16px] text-black tracking-tight" }, title), /* @__PURE__ */ React44.createElement(
|
|
4526
4403
|
"button",
|
|
4527
4404
|
{
|
|
4528
4405
|
onClick: () => {
|
|
@@ -4531,8 +4408,8 @@ var PinDialerBottomSheet = ({
|
|
|
4531
4408
|
disabled: isVerifying,
|
|
4532
4409
|
className: "text-neutral-400 hover:text-black transition-colors outline-none disabled:opacity-50"
|
|
4533
4410
|
},
|
|
4534
|
-
/* @__PURE__ */
|
|
4535
|
-
)), /* @__PURE__ */
|
|
4411
|
+
/* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: CancelCircleIcon7, size: 20 })
|
|
4412
|
+
)), /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col px-6 pb-6 pt-2 relative" }, /* @__PURE__ */ React44.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col gap-6" }, /* @__PURE__ */ React44.createElement(
|
|
4536
4413
|
TextInput,
|
|
4537
4414
|
{
|
|
4538
4415
|
type: "password",
|
|
@@ -4543,7 +4420,7 @@ var PinDialerBottomSheet = ({
|
|
|
4543
4420
|
onChange: (val) => setPin(val.replace(/\D/g, "").substring(0, 4)),
|
|
4544
4421
|
placeholder: "\u2022\u2022\u2022\u2022"
|
|
4545
4422
|
}
|
|
4546
|
-
), /* @__PURE__ */
|
|
4423
|
+
), /* @__PURE__ */ React44.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React44.createElement(
|
|
4547
4424
|
ThreeDActionButton,
|
|
4548
4425
|
{
|
|
4549
4426
|
type: "submit",
|
|
@@ -4556,7 +4433,6 @@ var PinDialerBottomSheet = ({
|
|
|
4556
4433
|
};
|
|
4557
4434
|
export {
|
|
4558
4435
|
AppBento2,
|
|
4559
|
-
CardCreationDialog,
|
|
4560
4436
|
ConsultantShowcase,
|
|
4561
4437
|
ContentGridBlock,
|
|
4562
4438
|
Faq,
|