@retinalabsllc/zairusjs 14.0.15 → 14.0.25
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 +30 -1
- package/dist/index.d.ts +30 -1
- package/dist/index.js +195 -27
- package/dist/index.mjs +198 -27
- package/package.json +2 -1
package/dist/index.d.mts
CHANGED
|
@@ -874,4 +874,33 @@ interface UniversalReferralPageProps {
|
|
|
874
874
|
}
|
|
875
875
|
declare const UniversalReferralPage: React.FC<UniversalReferralPageProps>;
|
|
876
876
|
|
|
877
|
-
|
|
877
|
+
interface PricingFeature2 {
|
|
878
|
+
name: string;
|
|
879
|
+
value: boolean | string;
|
|
880
|
+
}
|
|
881
|
+
interface TierOption {
|
|
882
|
+
tierName: string;
|
|
883
|
+
priceUSD: number;
|
|
884
|
+
isYearly: boolean;
|
|
885
|
+
description: string;
|
|
886
|
+
features: PricingFeature2[];
|
|
887
|
+
acceptWaitlist: boolean;
|
|
888
|
+
acceptPreorder: boolean;
|
|
889
|
+
isAvailable?: boolean;
|
|
890
|
+
}
|
|
891
|
+
interface UniversalCardActionPageProps {
|
|
892
|
+
cardId: string;
|
|
893
|
+
cardType: 'VIRTUAL' | 'PHYSICAL';
|
|
894
|
+
currentTier: string;
|
|
895
|
+
hasPreordered: boolean;
|
|
896
|
+
onWaitlist: boolean;
|
|
897
|
+
tiers: TierOption[];
|
|
898
|
+
isLoadingData: boolean;
|
|
899
|
+
onBack?: () => void;
|
|
900
|
+
onConfirmAction: (tierName: string, action: 'pre_order' | 'join_waitlist' | 'upgrade') => Promise<{
|
|
901
|
+
success: boolean;
|
|
902
|
+
}>;
|
|
903
|
+
}
|
|
904
|
+
declare const UniversalCardActionPage: React.FC<UniversalCardActionPageProps>;
|
|
905
|
+
|
|
906
|
+
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, 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
|
@@ -874,4 +874,33 @@ interface UniversalReferralPageProps {
|
|
|
874
874
|
}
|
|
875
875
|
declare const UniversalReferralPage: React.FC<UniversalReferralPageProps>;
|
|
876
876
|
|
|
877
|
-
|
|
877
|
+
interface PricingFeature2 {
|
|
878
|
+
name: string;
|
|
879
|
+
value: boolean | string;
|
|
880
|
+
}
|
|
881
|
+
interface TierOption {
|
|
882
|
+
tierName: string;
|
|
883
|
+
priceUSD: number;
|
|
884
|
+
isYearly: boolean;
|
|
885
|
+
description: string;
|
|
886
|
+
features: PricingFeature2[];
|
|
887
|
+
acceptWaitlist: boolean;
|
|
888
|
+
acceptPreorder: boolean;
|
|
889
|
+
isAvailable?: boolean;
|
|
890
|
+
}
|
|
891
|
+
interface UniversalCardActionPageProps {
|
|
892
|
+
cardId: string;
|
|
893
|
+
cardType: 'VIRTUAL' | 'PHYSICAL';
|
|
894
|
+
currentTier: string;
|
|
895
|
+
hasPreordered: boolean;
|
|
896
|
+
onWaitlist: boolean;
|
|
897
|
+
tiers: TierOption[];
|
|
898
|
+
isLoadingData: boolean;
|
|
899
|
+
onBack?: () => void;
|
|
900
|
+
onConfirmAction: (tierName: string, action: 'pre_order' | 'join_waitlist' | 'upgrade') => Promise<{
|
|
901
|
+
success: boolean;
|
|
902
|
+
}>;
|
|
903
|
+
}
|
|
904
|
+
declare const UniversalCardActionPage: React.FC<UniversalCardActionPageProps>;
|
|
905
|
+
|
|
906
|
+
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, 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
|
@@ -58,6 +58,7 @@ __export(index_exports, {
|
|
|
58
58
|
TextInput: () => TextInput,
|
|
59
59
|
ThreeDActionButton: () => ThreeDActionButton,
|
|
60
60
|
ThreeDButton: () => ThreeDButton,
|
|
61
|
+
UniversalCardActionPage: () => UniversalCardActionPage,
|
|
61
62
|
UniversalCardPage: () => UniversalCardPage,
|
|
62
63
|
UniversalErrorView: () => UniversalErrorView,
|
|
63
64
|
UniversalHomeView: () => UniversalHomeView,
|
|
@@ -1930,7 +1931,7 @@ var ConfirmationDialog = ({
|
|
|
1930
1931
|
{
|
|
1931
1932
|
onClick: onConfirm,
|
|
1932
1933
|
disabled: isProcessing,
|
|
1933
|
-
className: `flex-1 py-4 text-[13px] transition-colors disabled:opacity-50 flex justify-center items-center outline-none ${isDestructive ? "text-
|
|
1934
|
+
className: `flex-1 py-4 text-[13px] transition-colors disabled:opacity-50 flex justify-center items-center outline-none ${isDestructive ? "text-black hover:bg-red-50" : "text-black hover:bg-neutral-50"}`
|
|
1934
1935
|
},
|
|
1935
1936
|
isProcessing ? /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.Loading03Icon, className: "animate-spin", size: 18 }) : confirmText
|
|
1936
1937
|
))));
|
|
@@ -3347,7 +3348,7 @@ var ManagedContactBlock = ({
|
|
|
3347
3348
|
var import_react52 = __toESM(require("react"));
|
|
3348
3349
|
var import_link7 = __toESM(require("next/link"));
|
|
3349
3350
|
var import_image4 = __toESM(require("next/image"));
|
|
3350
|
-
var CheckIcon = ({ className = "" }) => /* @__PURE__ */ import_react52.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_react52.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "
|
|
3351
|
+
var CheckIcon = ({ className = "" }) => /* @__PURE__ */ import_react52.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_react52.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#FCFD00" }), /* @__PURE__ */ import_react52.default.createElement("path", { d: "M8 12L11 15L16 9", stroke: "black", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
3351
3352
|
var CrossIcon = ({ className = "" }) => /* @__PURE__ */ import_react52.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_react52.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ import_react52.default.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
3352
3353
|
var ManagedPricingBlock = ({
|
|
3353
3354
|
tagline,
|
|
@@ -3857,23 +3858,6 @@ var import_react64 = __toESM(require("react"));
|
|
|
3857
3858
|
var import_image11 = __toESM(require("next/image"));
|
|
3858
3859
|
var import_react65 = require("@hugeicons/react");
|
|
3859
3860
|
var import_core_free_icons21 = require("@hugeicons/core-free-icons");
|
|
3860
|
-
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
3861
|
-
const [isLoading, setIsLoading] = (0, import_react64.useState)(true);
|
|
3862
|
-
return /* @__PURE__ */ import_react64.default.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ import_react64.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-100/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ import_react64.default.createElement(import_react65.HugeiconsIcon, { icon: import_core_free_icons21.Loading03Icon, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ import_react64.default.createElement(
|
|
3863
|
-
import_image11.default,
|
|
3864
|
-
{
|
|
3865
|
-
src,
|
|
3866
|
-
alt,
|
|
3867
|
-
fill: true,
|
|
3868
|
-
sizes: sizes || "(max-width: 768px) 100vw, 500px",
|
|
3869
|
-
onLoad: () => setIsLoading(false),
|
|
3870
|
-
className: `
|
|
3871
|
-
object-cover transition-all duration-1000 ease-out z-10
|
|
3872
|
-
${isLoading ? "scale-105 blur-xl opacity-0" : "scale-100 blur-0 opacity-100"}
|
|
3873
|
-
`
|
|
3874
|
-
}
|
|
3875
|
-
));
|
|
3876
|
-
};
|
|
3877
3861
|
var ContentGridBlock = ({
|
|
3878
3862
|
header,
|
|
3879
3863
|
leftCard,
|
|
@@ -3881,14 +3865,7 @@ var ContentGridBlock = ({
|
|
|
3881
3865
|
middleBottomCard,
|
|
3882
3866
|
rightCards
|
|
3883
3867
|
}) => {
|
|
3884
|
-
return /* @__PURE__ */ import_react64.default.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ import_react64.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ import_react64.default.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ import_react64.default.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ import_react64.default.createElement("div", null, /* @__PURE__ */ import_react64.default.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ import_react64.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react64.default.createElement(import_image11.default, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ import_react64.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ import_react64.default.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ import_react64.default.createElement(import_image11.default, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ import_react64.default.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-200 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ import_react64.default.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ import_react64.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ import_react64.default.createElement("div", null, /* @__PURE__ */ import_react64.default.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ import_react64.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react64.default.createElement(import_image11.default, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ import_react64.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ import_react64.default.createElement("div", { key: idx, className: "relative w-full h-80
|
|
3885
|
-
ImageWithLoader2,
|
|
3886
|
-
{
|
|
3887
|
-
src: card.bgImageSrc,
|
|
3888
|
-
alt: card.title,
|
|
3889
|
-
className: "absolute inset-0 w-full h-full"
|
|
3890
|
-
}
|
|
3891
|
-
), /* @__PURE__ */ import_react64.default.createElement("div", { className: "absolute inset-0 z-20 pointer-events-none" }), /* @__PURE__ */ import_react64.default.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ import_react64.default.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ import_react64.default.createElement("div", { className: "pt-3" }, /* @__PURE__ */ import_react64.default.createElement("h4", { className: "text-[15px] text-white tracking-wide" }, card.title), /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
|
|
3868
|
+
return /* @__PURE__ */ import_react64.default.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ import_react64.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ import_react64.default.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ import_react64.default.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ import_react64.default.createElement("div", null, /* @__PURE__ */ import_react64.default.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ import_react64.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react64.default.createElement(import_image11.default, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ import_react64.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ import_react64.default.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ import_react64.default.createElement(import_image11.default, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ import_react64.default.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-200 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ import_react64.default.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ import_react64.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ import_react64.default.createElement("div", null, /* @__PURE__ */ import_react64.default.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ import_react64.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react64.default.createElement(import_image11.default, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ import_react64.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ import_react64.default.createElement("div", { key: idx, className: "relative w-full h-80 bg-[#FCFD00] text-black rounded-3xl overflow-hidden group" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "absolute inset-0 z-20 pointer-events-none" }), /* @__PURE__ */ import_react64.default.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-black" }, /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-black/90" }, card.mainText), card.tag && /* @__PURE__ */ import_react64.default.createElement("span", { className: "mb-4 text-[11px] text-black/50 tracking-widest" }, card.tag), /* @__PURE__ */ import_react64.default.createElement("div", { className: "pt-3" }, /* @__PURE__ */ import_react64.default.createElement("h4", { className: "text-[15px] text-black tracking-wide" }, card.title), /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[13px] text-black/60" }, card.subtitle)))))))));
|
|
3892
3869
|
};
|
|
3893
3870
|
|
|
3894
3871
|
// src/components/ManagedProjectsBlock.tsx
|
|
@@ -4221,6 +4198,196 @@ var UniversalReferralPage = ({
|
|
|
4221
4198
|
/* @__PURE__ */ import_react71.default.createElement(import_react72.HugeiconsIcon, { icon: import_core_free_icons24.ArrowRight01Icon, size: 14 })
|
|
4222
4199
|
)))))));
|
|
4223
4200
|
};
|
|
4201
|
+
|
|
4202
|
+
// src/components/UniversalCardActionPage.tsx
|
|
4203
|
+
var import_react73 = __toESM(require("react"));
|
|
4204
|
+
var import_react_confetti2 = __toESM(require("react-confetti"));
|
|
4205
|
+
var import_react_use2 = require("react-use");
|
|
4206
|
+
var import_react74 = require("@hugeicons/react");
|
|
4207
|
+
var import_core_free_icons25 = require("@hugeicons/core-free-icons");
|
|
4208
|
+
var CheckIcon2 = ({ 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: "#FCFD00" }), /* @__PURE__ */ import_react73.default.createElement("path", { d: "M8 12L11 15L16 9", stroke: "black", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
4209
|
+
var CrossIcon2 = ({ 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" }));
|
|
4210
|
+
var formatTierName = (name) => {
|
|
4211
|
+
if (!name) return "";
|
|
4212
|
+
return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
|
|
4213
|
+
};
|
|
4214
|
+
var getTierGlow = (tier) => {
|
|
4215
|
+
switch (tier.toUpperCase()) {
|
|
4216
|
+
case "PLATINUM":
|
|
4217
|
+
return "from-neutral-300";
|
|
4218
|
+
case "PREMIUM":
|
|
4219
|
+
return "from-purple-200";
|
|
4220
|
+
case "GOLD":
|
|
4221
|
+
return "from-yellow-200";
|
|
4222
|
+
case "SILVER":
|
|
4223
|
+
return "from-slate-300";
|
|
4224
|
+
case "NEO":
|
|
4225
|
+
return "from-cyan-200";
|
|
4226
|
+
case "BASIC":
|
|
4227
|
+
return "from-blue-200";
|
|
4228
|
+
case "ONE":
|
|
4229
|
+
return "from-emerald-200";
|
|
4230
|
+
case "ZERO":
|
|
4231
|
+
return "from-rose-200";
|
|
4232
|
+
default:
|
|
4233
|
+
return "from-neutral-200";
|
|
4234
|
+
}
|
|
4235
|
+
};
|
|
4236
|
+
var UniversalCardActionPage = ({
|
|
4237
|
+
cardType,
|
|
4238
|
+
currentTier,
|
|
4239
|
+
hasPreordered,
|
|
4240
|
+
onWaitlist,
|
|
4241
|
+
tiers,
|
|
4242
|
+
isLoadingData,
|
|
4243
|
+
onBack,
|
|
4244
|
+
onConfirmAction
|
|
4245
|
+
}) => {
|
|
4246
|
+
const onBackHandler = onBack ?? (() => {
|
|
4247
|
+
if (typeof window !== "undefined") window.history.back();
|
|
4248
|
+
});
|
|
4249
|
+
const { width, height } = (0, import_react_use2.useWindowSize)();
|
|
4250
|
+
const [selectedTier, setSelectedTier] = (0, import_react73.useState)(null);
|
|
4251
|
+
const [intendedAction, setIntendedAction] = (0, import_react73.useState)(null);
|
|
4252
|
+
const [isProcessing, setIsProcessing] = (0, import_react73.useState)(false);
|
|
4253
|
+
const [showConfetti, setShowConfetti] = (0, import_react73.useState)(false);
|
|
4254
|
+
const availableTiers = tiers.filter((t) => t.isAvailable || t.acceptPreorder || t.acceptWaitlist);
|
|
4255
|
+
const handleTierClick = (tier, explicitAction) => {
|
|
4256
|
+
setSelectedTier(tier);
|
|
4257
|
+
setIntendedAction(explicitAction);
|
|
4258
|
+
};
|
|
4259
|
+
const processAction = async () => {
|
|
4260
|
+
if (!selectedTier || !intendedAction) return;
|
|
4261
|
+
setIsProcessing(true);
|
|
4262
|
+
try {
|
|
4263
|
+
const result = await onConfirmAction(selectedTier.tierName, intendedAction);
|
|
4264
|
+
if (result.success) {
|
|
4265
|
+
if (intendedAction === "pre_order") {
|
|
4266
|
+
setShowConfetti(true);
|
|
4267
|
+
setTimeout(() => setShowConfetti(false), 6e3);
|
|
4268
|
+
}
|
|
4269
|
+
setSelectedTier(null);
|
|
4270
|
+
setIntendedAction(null);
|
|
4271
|
+
}
|
|
4272
|
+
} finally {
|
|
4273
|
+
setIsProcessing(false);
|
|
4274
|
+
}
|
|
4275
|
+
};
|
|
4276
|
+
const getPrimaryButtonText = (tier) => {
|
|
4277
|
+
const isCurrent = tier.tierName === currentTier;
|
|
4278
|
+
if (isCurrent) {
|
|
4279
|
+
if (hasPreordered) return "Secured (Pre-ordered)";
|
|
4280
|
+
return "Pre-order Now";
|
|
4281
|
+
}
|
|
4282
|
+
if (hasPreordered) return "Unavailable";
|
|
4283
|
+
return `Upgrade to ${formatTierName(tier.tierName)}`;
|
|
4284
|
+
};
|
|
4285
|
+
const getWaitlistButtonText = (tier) => {
|
|
4286
|
+
const isCurrent = tier.tierName === currentTier;
|
|
4287
|
+
if (isCurrent && (onWaitlist || hasPreordered)) return "Joined";
|
|
4288
|
+
return "Join Waitlist";
|
|
4289
|
+
};
|
|
4290
|
+
return /* @__PURE__ */ import_react73.default.createElement("div", { className: "w-full" }, /* @__PURE__ */ import_react73.default.createElement(ManagedToaster, null), showConfetti && /* @__PURE__ */ import_react73.default.createElement("div", { className: "fixed inset-0 z-200 pointer-events-none" }, /* @__PURE__ */ import_react73.default.createElement(import_react_confetti2.default, { width, height, recycle: false, numberOfPieces: 500, gravity: 0.15 })), /* @__PURE__ */ import_react73.default.createElement("div", { className: "mb-6 flex max-w-3xl w-full mx-auto items-center px-1" }, /* @__PURE__ */ import_react73.default.createElement(
|
|
4291
|
+
"button",
|
|
4292
|
+
{
|
|
4293
|
+
onClick: onBackHandler,
|
|
4294
|
+
className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none"
|
|
4295
|
+
},
|
|
4296
|
+
/* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons25.ArrowLeft01Icon, size: 16 }),
|
|
4297
|
+
" Back"
|
|
4298
|
+
)), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col animate-in max-w-5xl w-full mx-auto fade-in duration-300" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "w-full flex flex-col items-center text-center mb-10 px-4" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-400 block uppercase mb-3" }, cardType, " CARD ACTIVATION"), /* @__PURE__ */ import_react73.default.createElement("h1", { className: "text-2xl sm:text-3xl text-black tracking-tight mb-2" }, "Select Your Tier"), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-neutral-500 max-w-lg" }, hasPreordered ? "You have already secured your card. Upgrades are disabled while your order is pending processing." : "Upgrade your tier or secure your card now. Pre-orders guarantee priority processing when the batch goes live.")), isLoadingData ? /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex justify-center py-20" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons25.Loading03Icon, size: 32, className: "animate-spin text-neutral-300" })) : /* @__PURE__ */ import_react73.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-5 w-full max-w-4xl mx-auto px-4" }, availableTiers.map((tier) => {
|
|
4299
|
+
const isCurrent = tier.tierName === currentTier;
|
|
4300
|
+
const isCardDisabled = hasPreordered && !isCurrent;
|
|
4301
|
+
const isHighlighted = hasPreordered && isCurrent;
|
|
4302
|
+
const isThisCardLoading = isProcessing && selectedTier?.tierName === tier.tierName;
|
|
4303
|
+
const isPrimaryDisabled = isCardDisabled || isHighlighted || isThisCardLoading || !tier.acceptPreorder;
|
|
4304
|
+
const isWaitlistDisabled = !isCurrent || isCurrent && (onWaitlist || hasPreordered) || isThisCardLoading || !tier.acceptWaitlist;
|
|
4305
|
+
return /* @__PURE__ */ import_react73.default.createElement(
|
|
4306
|
+
"div",
|
|
4307
|
+
{
|
|
4308
|
+
key: tier.tierName,
|
|
4309
|
+
className: `relative bg-white rounded-3xl p-6 flex flex-col overflow-hidden transition-all duration-300
|
|
4310
|
+
${isCardDisabled ? "opacity-50 grayscale-50 pointer-events-none" : ""}
|
|
4311
|
+
|
|
4312
|
+
`
|
|
4313
|
+
},
|
|
4314
|
+
/* @__PURE__ */ import_react73.default.createElement(
|
|
4315
|
+
"div",
|
|
4316
|
+
{
|
|
4317
|
+
className: `absolute -top-10 -right-10 w-48 h-48 bg-linear-to-bl ${getTierGlow(tier.tierName)} to-transparent opacity-40 blur-2xl rounded-full pointer-events-none`
|
|
4318
|
+
}
|
|
4319
|
+
),
|
|
4320
|
+
isThisCardLoading && /* @__PURE__ */ import_react73.default.createElement("div", { className: "absolute inset-0 z-50 flex items-center justify-center bg-white/40 backdrop-blur-[1px]" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons25.Loading03Icon, size: 32, className: "animate-spin text-black" })),
|
|
4321
|
+
/* @__PURE__ */ import_react73.default.createElement("div", { className: "mb-6 relative z-10" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex justify-between items-start mb-1" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-black text-sm tracking-widest " }, formatTierName(tier.tierName)), isCurrent && !hasPreordered && /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[9px] bg-neutral-100 text-neutral-600 px-2 py-1 rounded-full uppercase tracking-wider" }, "Current")), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-baseline gap-1 mt-2" }, /* @__PURE__ */ import_react73.default.createElement("h3", { className: "text-3xl font-light text-black" }, tier.priceUSD === 0 ? "Free" : `$${tier.priceUSD.toFixed(2)}`), tier.priceUSD > 0 && /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-xs text-neutral-500" }, tier.isYearly ? "/ year" : "one-time")), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-[13px] text-neutral-500 mt-3 min-h-12 leading-relaxed" }, tier.description)),
|
|
4322
|
+
/* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-2.5 mb-6 relative z-10" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: isPrimaryDisabled ? "opacity-50 pointer-events-none" : "" }, /* @__PURE__ */ import_react73.default.createElement(
|
|
4323
|
+
ThreeDActionButton,
|
|
4324
|
+
{
|
|
4325
|
+
disabled: isPrimaryDisabled,
|
|
4326
|
+
onClick: () => handleTierClick(tier, isCurrent ? "pre_order" : "upgrade"),
|
|
4327
|
+
className: "w-full"
|
|
4328
|
+
},
|
|
4329
|
+
getPrimaryButtonText(tier)
|
|
4330
|
+
)), /* @__PURE__ */ import_react73.default.createElement(
|
|
4331
|
+
"button",
|
|
4332
|
+
{
|
|
4333
|
+
disabled: isWaitlistDisabled,
|
|
4334
|
+
onClick: () => handleTierClick(tier, "join_waitlist"),
|
|
4335
|
+
className: `w-full py-2.5 rounded-full text-xs tracking-wide transition-all outline-none border
|
|
4336
|
+
${isCurrent && (onWaitlist || hasPreordered) ? "bg-neutral-50 border-neutral-100 text-neutral-400 cursor-not-allowed" : "bg-white border-neutral-200 text-black hover:bg-neutral-50"}
|
|
4337
|
+
disabled:opacity-40 disabled:cursor-not-allowed
|
|
4338
|
+
`
|
|
4339
|
+
},
|
|
4340
|
+
getWaitlistButtonText(tier)
|
|
4341
|
+
)),
|
|
4342
|
+
/* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-3 relative z-10" }, tier.features.map((feature, featureIdx) => {
|
|
4343
|
+
const isAvailable = feature.value !== false;
|
|
4344
|
+
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
4345
|
+
return /* @__PURE__ */ import_react73.default.createElement("div", { key: featureIdx, className: "flex items-center gap-3" }, isAvailable ? /* @__PURE__ */ import_react73.default.createElement(CheckIcon2, null) : /* @__PURE__ */ import_react73.default.createElement(CrossIcon2, 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)));
|
|
4346
|
+
}))
|
|
4347
|
+
);
|
|
4348
|
+
}))), selectedTier && intendedAction !== "join_waitlist" && /* @__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 && setSelectedTier(null) }), /* @__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(
|
|
4349
|
+
"div",
|
|
4350
|
+
{
|
|
4351
|
+
className: `absolute -top-10 -right-10 w-40 h-40 bg-linear-to-bl ${getTierGlow(selectedTier.tierName)} to-transparent opacity-40 blur-2xl rounded-full pointer-events-none`
|
|
4352
|
+
}
|
|
4353
|
+
), /* @__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" }, "Confirm Action"), /* @__PURE__ */ import_react73.default.createElement(
|
|
4354
|
+
"button",
|
|
4355
|
+
{
|
|
4356
|
+
disabled: isProcessing,
|
|
4357
|
+
onClick: () => setSelectedTier(null),
|
|
4358
|
+
className: "text-neutral-400 hover:text-black transition-colors outline-none disabled:opacity-50"
|
|
4359
|
+
},
|
|
4360
|
+
/* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons25.CancelCircleIcon, size: 18 })
|
|
4361
|
+
)), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 relative z-10" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col items-center justify-center mb-6" }, /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-2xl text-black mb-1" }, selectedTier.priceUSD === 0 ? "Free" : `$${selectedTier.priceUSD.toFixed(2)}`), /* @__PURE__ */ import_react73.default.createElement("span", { className: `text-[10px] tracking-widest px-4 py-1.5 rounded-full bg-neutral-100 text-black mt-1` }, formatTierName(selectedTier.tierName), " ", formatTierName(cardType))), /* @__PURE__ */ import_react73.default.createElement("div", { className: "grid grid-cols-1 gap-y-6 mb-8 mt-4" }, /* @__PURE__ */ import_react73.default.createElement("div", null, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-1" }, "Action"), /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[13px] text-black " }, intendedAction === "upgrade" ? `Upgrade to ${formatTierName(selectedTier.tierName)}` : `Pre-order Card`)), intendedAction === "pre_order" && selectedTier.priceUSD > 0 && /* @__PURE__ */ import_react73.default.createElement("div", null, /* @__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-[12px] text-neutral-600 leading-relaxed block" }, "By confirming, $", selectedTier.priceUSD.toFixed(2), " will be securely deducted from your USD asset balance to guarantee your order."))), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ import_react73.default.createElement(
|
|
4362
|
+
ThreeDActionButton,
|
|
4363
|
+
{
|
|
4364
|
+
onClick: processAction,
|
|
4365
|
+
isLoading: isProcessing,
|
|
4366
|
+
className: "w-full"
|
|
4367
|
+
},
|
|
4368
|
+
"Confirm & Proceed"
|
|
4369
|
+
), /* @__PURE__ */ import_react73.default.createElement(
|
|
4370
|
+
"button",
|
|
4371
|
+
{
|
|
4372
|
+
disabled: isProcessing,
|
|
4373
|
+
onClick: () => setSelectedTier(null),
|
|
4374
|
+
className: "w-full flex items-center justify-center py-2.5 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 transition-colors outline-none text-[13px] mt-1 disabled:opacity-50"
|
|
4375
|
+
},
|
|
4376
|
+
"Cancel"
|
|
4377
|
+
))))), selectedTier && intendedAction === "join_waitlist" && /* @__PURE__ */ import_react73.default.createElement(
|
|
4378
|
+
ConfirmationDialog,
|
|
4379
|
+
{
|
|
4380
|
+
isOpen: true,
|
|
4381
|
+
title: "Join Waitlist",
|
|
4382
|
+
message: `Are you sure you want to join the waitlist for the ${formatTierName(selectedTier.tierName)} ${formatTierName(cardType)} card? You will be notified via email when it becomes available.`,
|
|
4383
|
+
confirmText: "Join Waitlist",
|
|
4384
|
+
isDestructive: false,
|
|
4385
|
+
isProcessing,
|
|
4386
|
+
onClose: () => setSelectedTier(null),
|
|
4387
|
+
onConfirm: processAction
|
|
4388
|
+
}
|
|
4389
|
+
));
|
|
4390
|
+
};
|
|
4224
4391
|
// Annotate the CommonJS export names for ESM import in node:
|
|
4225
4392
|
0 && (module.exports = {
|
|
4226
4393
|
AppBento2,
|
|
@@ -4250,6 +4417,7 @@ var UniversalReferralPage = ({
|
|
|
4250
4417
|
TextInput,
|
|
4251
4418
|
ThreeDActionButton,
|
|
4252
4419
|
ThreeDButton,
|
|
4420
|
+
UniversalCardActionPage,
|
|
4253
4421
|
UniversalCardPage,
|
|
4254
4422
|
UniversalErrorView,
|
|
4255
4423
|
UniversalHomeView,
|
package/dist/index.mjs
CHANGED
|
@@ -1905,7 +1905,7 @@ var ConfirmationDialog = ({
|
|
|
1905
1905
|
{
|
|
1906
1906
|
onClick: onConfirm,
|
|
1907
1907
|
disabled: isProcessing,
|
|
1908
|
-
className: `flex-1 py-4 text-[13px] transition-colors disabled:opacity-50 flex justify-center items-center outline-none ${isDestructive ? "text-
|
|
1908
|
+
className: `flex-1 py-4 text-[13px] transition-colors disabled:opacity-50 flex justify-center items-center outline-none ${isDestructive ? "text-black hover:bg-red-50" : "text-black hover:bg-neutral-50"}`
|
|
1909
1909
|
},
|
|
1910
1910
|
isProcessing ? /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Loading03Icon7, className: "animate-spin", size: 18 }) : confirmText
|
|
1911
1911
|
))));
|
|
@@ -3343,7 +3343,7 @@ var ManagedContactBlock = ({
|
|
|
3343
3343
|
import React31, { useState as useState22, useEffect as useEffect15, useRef as useRef9 } from "react";
|
|
3344
3344
|
import Link7 from "next/link";
|
|
3345
3345
|
import Image5 from "next/image";
|
|
3346
|
-
var CheckIcon = ({ className = "" }) => /* @__PURE__ */ React31.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__ */ React31.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "
|
|
3346
|
+
var CheckIcon = ({ className = "" }) => /* @__PURE__ */ React31.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__ */ React31.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#FCFD00" }), /* @__PURE__ */ React31.createElement("path", { d: "M8 12L11 15L16 9", stroke: "black", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
3347
3347
|
var CrossIcon = ({ className = "" }) => /* @__PURE__ */ React31.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__ */ React31.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ React31.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
3348
3348
|
var ManagedPricingBlock = ({
|
|
3349
3349
|
tagline,
|
|
@@ -3853,23 +3853,6 @@ import React39, { useState as useState26 } from "react";
|
|
|
3853
3853
|
import Image12 from "next/image";
|
|
3854
3854
|
import { HugeiconsIcon as HugeiconsIcon26 } from "@hugeicons/react";
|
|
3855
3855
|
import { Loading03Icon as Loading03Icon15 } from "@hugeicons/core-free-icons";
|
|
3856
|
-
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
3857
|
-
const [isLoading, setIsLoading] = useState26(true);
|
|
3858
|
-
return /* @__PURE__ */ React39.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ React39.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-100/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ React39.createElement(HugeiconsIcon26, { icon: Loading03Icon15, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ React39.createElement(
|
|
3859
|
-
Image12,
|
|
3860
|
-
{
|
|
3861
|
-
src,
|
|
3862
|
-
alt,
|
|
3863
|
-
fill: true,
|
|
3864
|
-
sizes: sizes || "(max-width: 768px) 100vw, 500px",
|
|
3865
|
-
onLoad: () => setIsLoading(false),
|
|
3866
|
-
className: `
|
|
3867
|
-
object-cover transition-all duration-1000 ease-out z-10
|
|
3868
|
-
${isLoading ? "scale-105 blur-xl opacity-0" : "scale-100 blur-0 opacity-100"}
|
|
3869
|
-
`
|
|
3870
|
-
}
|
|
3871
|
-
));
|
|
3872
|
-
};
|
|
3873
3856
|
var ContentGridBlock = ({
|
|
3874
3857
|
header,
|
|
3875
3858
|
leftCard,
|
|
@@ -3877,14 +3860,7 @@ var ContentGridBlock = ({
|
|
|
3877
3860
|
middleBottomCard,
|
|
3878
3861
|
rightCards
|
|
3879
3862
|
}) => {
|
|
3880
|
-
return /* @__PURE__ */ React39.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React39.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ React39.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ React39.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ React39.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ React39.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React39.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ React39.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ React39.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ React39.createElement("div", null, /* @__PURE__ */ React39.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ React39.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ React39.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React39.createElement(Image12, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React39.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ React39.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ React39.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ React39.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React39.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ React39.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ React39.createElement(Image12, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ React39.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ React39.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ React39.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-200 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ React39.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ React39.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React39.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ React39.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ React39.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React39.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ React39.createElement("div", null, /* @__PURE__ */ React39.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ React39.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ React39.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React39.createElement(Image12, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ React39.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React39.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ React39.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ React39.createElement("div", { key: idx, className: "relative w-full h-80
|
|
3881
|
-
ImageWithLoader2,
|
|
3882
|
-
{
|
|
3883
|
-
src: card.bgImageSrc,
|
|
3884
|
-
alt: card.title,
|
|
3885
|
-
className: "absolute inset-0 w-full h-full"
|
|
3886
|
-
}
|
|
3887
|
-
), /* @__PURE__ */ React39.createElement("div", { className: "absolute inset-0 z-20 pointer-events-none" }), /* @__PURE__ */ React39.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ React39.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ React39.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ React39.createElement("div", { className: "pt-3" }, /* @__PURE__ */ React39.createElement("h4", { className: "text-[15px] text-white tracking-wide" }, card.title), /* @__PURE__ */ React39.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
|
|
3863
|
+
return /* @__PURE__ */ React39.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React39.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ React39.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ React39.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ React39.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ React39.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React39.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ React39.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ React39.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ React39.createElement("div", null, /* @__PURE__ */ React39.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ React39.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ React39.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React39.createElement(Image12, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React39.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ React39.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ React39.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ React39.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React39.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ React39.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ React39.createElement(Image12, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ React39.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ React39.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ React39.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-200 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ React39.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ React39.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React39.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ React39.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ React39.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React39.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ React39.createElement("div", null, /* @__PURE__ */ React39.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ React39.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ React39.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React39.createElement(Image12, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ React39.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React39.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ React39.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ React39.createElement("div", { key: idx, className: "relative w-full h-80 bg-[#FCFD00] text-black rounded-3xl overflow-hidden group" }, /* @__PURE__ */ React39.createElement("div", { className: "absolute inset-0 z-20 pointer-events-none" }), /* @__PURE__ */ React39.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-black" }, /* @__PURE__ */ React39.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-black/90" }, card.mainText), card.tag && /* @__PURE__ */ React39.createElement("span", { className: "mb-4 text-[11px] text-black/50 tracking-widest" }, card.tag), /* @__PURE__ */ React39.createElement("div", { className: "pt-3" }, /* @__PURE__ */ React39.createElement("h4", { className: "text-[15px] text-black tracking-wide" }, card.title), /* @__PURE__ */ React39.createElement("p", { className: "text-[13px] text-black/60" }, card.subtitle)))))))));
|
|
3888
3864
|
};
|
|
3889
3865
|
|
|
3890
3866
|
// src/components/ManagedProjectsBlock.tsx
|
|
@@ -4235,6 +4211,200 @@ var UniversalReferralPage = ({
|
|
|
4235
4211
|
/* @__PURE__ */ React43.createElement(HugeiconsIcon29, { icon: ArrowRight01Icon8, size: 14 })
|
|
4236
4212
|
)))))));
|
|
4237
4213
|
};
|
|
4214
|
+
|
|
4215
|
+
// src/components/UniversalCardActionPage.tsx
|
|
4216
|
+
import React44, { useState as useState29 } from "react";
|
|
4217
|
+
import Confetti2 from "react-confetti";
|
|
4218
|
+
import { useWindowSize as useWindowSize2 } from "react-use";
|
|
4219
|
+
import { HugeiconsIcon as HugeiconsIcon30 } from "@hugeicons/react";
|
|
4220
|
+
import {
|
|
4221
|
+
ArrowLeft01Icon as ArrowLeft01Icon11,
|
|
4222
|
+
CancelCircleIcon as CancelCircleIcon7,
|
|
4223
|
+
Loading03Icon as Loading03Icon19
|
|
4224
|
+
} from "@hugeicons/core-free-icons";
|
|
4225
|
+
var CheckIcon2 = ({ 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: "#FCFD00" }), /* @__PURE__ */ React44.createElement("path", { d: "M8 12L11 15L16 9", stroke: "black", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
4226
|
+
var CrossIcon2 = ({ 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" }));
|
|
4227
|
+
var formatTierName = (name) => {
|
|
4228
|
+
if (!name) return "";
|
|
4229
|
+
return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
|
|
4230
|
+
};
|
|
4231
|
+
var getTierGlow = (tier) => {
|
|
4232
|
+
switch (tier.toUpperCase()) {
|
|
4233
|
+
case "PLATINUM":
|
|
4234
|
+
return "from-neutral-300";
|
|
4235
|
+
case "PREMIUM":
|
|
4236
|
+
return "from-purple-200";
|
|
4237
|
+
case "GOLD":
|
|
4238
|
+
return "from-yellow-200";
|
|
4239
|
+
case "SILVER":
|
|
4240
|
+
return "from-slate-300";
|
|
4241
|
+
case "NEO":
|
|
4242
|
+
return "from-cyan-200";
|
|
4243
|
+
case "BASIC":
|
|
4244
|
+
return "from-blue-200";
|
|
4245
|
+
case "ONE":
|
|
4246
|
+
return "from-emerald-200";
|
|
4247
|
+
case "ZERO":
|
|
4248
|
+
return "from-rose-200";
|
|
4249
|
+
default:
|
|
4250
|
+
return "from-neutral-200";
|
|
4251
|
+
}
|
|
4252
|
+
};
|
|
4253
|
+
var UniversalCardActionPage = ({
|
|
4254
|
+
cardType,
|
|
4255
|
+
currentTier,
|
|
4256
|
+
hasPreordered,
|
|
4257
|
+
onWaitlist,
|
|
4258
|
+
tiers,
|
|
4259
|
+
isLoadingData,
|
|
4260
|
+
onBack,
|
|
4261
|
+
onConfirmAction
|
|
4262
|
+
}) => {
|
|
4263
|
+
const onBackHandler = onBack ?? (() => {
|
|
4264
|
+
if (typeof window !== "undefined") window.history.back();
|
|
4265
|
+
});
|
|
4266
|
+
const { width, height } = useWindowSize2();
|
|
4267
|
+
const [selectedTier, setSelectedTier] = useState29(null);
|
|
4268
|
+
const [intendedAction, setIntendedAction] = useState29(null);
|
|
4269
|
+
const [isProcessing, setIsProcessing] = useState29(false);
|
|
4270
|
+
const [showConfetti, setShowConfetti] = useState29(false);
|
|
4271
|
+
const availableTiers = tiers.filter((t) => t.isAvailable || t.acceptPreorder || t.acceptWaitlist);
|
|
4272
|
+
const handleTierClick = (tier, explicitAction) => {
|
|
4273
|
+
setSelectedTier(tier);
|
|
4274
|
+
setIntendedAction(explicitAction);
|
|
4275
|
+
};
|
|
4276
|
+
const processAction = async () => {
|
|
4277
|
+
if (!selectedTier || !intendedAction) return;
|
|
4278
|
+
setIsProcessing(true);
|
|
4279
|
+
try {
|
|
4280
|
+
const result = await onConfirmAction(selectedTier.tierName, intendedAction);
|
|
4281
|
+
if (result.success) {
|
|
4282
|
+
if (intendedAction === "pre_order") {
|
|
4283
|
+
setShowConfetti(true);
|
|
4284
|
+
setTimeout(() => setShowConfetti(false), 6e3);
|
|
4285
|
+
}
|
|
4286
|
+
setSelectedTier(null);
|
|
4287
|
+
setIntendedAction(null);
|
|
4288
|
+
}
|
|
4289
|
+
} finally {
|
|
4290
|
+
setIsProcessing(false);
|
|
4291
|
+
}
|
|
4292
|
+
};
|
|
4293
|
+
const getPrimaryButtonText = (tier) => {
|
|
4294
|
+
const isCurrent = tier.tierName === currentTier;
|
|
4295
|
+
if (isCurrent) {
|
|
4296
|
+
if (hasPreordered) return "Secured (Pre-ordered)";
|
|
4297
|
+
return "Pre-order Now";
|
|
4298
|
+
}
|
|
4299
|
+
if (hasPreordered) return "Unavailable";
|
|
4300
|
+
return `Upgrade to ${formatTierName(tier.tierName)}`;
|
|
4301
|
+
};
|
|
4302
|
+
const getWaitlistButtonText = (tier) => {
|
|
4303
|
+
const isCurrent = tier.tierName === currentTier;
|
|
4304
|
+
if (isCurrent && (onWaitlist || hasPreordered)) return "Joined";
|
|
4305
|
+
return "Join Waitlist";
|
|
4306
|
+
};
|
|
4307
|
+
return /* @__PURE__ */ React44.createElement("div", { className: "w-full" }, /* @__PURE__ */ React44.createElement(ManagedToaster, null), showConfetti && /* @__PURE__ */ React44.createElement("div", { className: "fixed inset-0 z-200 pointer-events-none" }, /* @__PURE__ */ React44.createElement(Confetti2, { width, height, recycle: false, numberOfPieces: 500, gravity: 0.15 })), /* @__PURE__ */ React44.createElement("div", { className: "mb-6 flex max-w-3xl w-full mx-auto items-center px-1" }, /* @__PURE__ */ React44.createElement(
|
|
4308
|
+
"button",
|
|
4309
|
+
{
|
|
4310
|
+
onClick: onBackHandler,
|
|
4311
|
+
className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none"
|
|
4312
|
+
},
|
|
4313
|
+
/* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: ArrowLeft01Icon11, size: 16 }),
|
|
4314
|
+
" Back"
|
|
4315
|
+
)), /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col animate-in max-w-5xl w-full mx-auto fade-in duration-300" }, /* @__PURE__ */ React44.createElement("div", { className: "w-full flex flex-col items-center text-center mb-10 px-4" }, /* @__PURE__ */ React44.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-400 block uppercase mb-3" }, cardType, " CARD ACTIVATION"), /* @__PURE__ */ React44.createElement("h1", { className: "text-2xl sm:text-3xl text-black tracking-tight mb-2" }, "Select Your Tier"), /* @__PURE__ */ React44.createElement("p", { className: "text-xs text-neutral-500 max-w-lg" }, hasPreordered ? "You have already secured your card. Upgrades are disabled while your order is pending processing." : "Upgrade your tier or secure your card now. Pre-orders guarantee priority processing when the batch goes live.")), isLoadingData ? /* @__PURE__ */ React44.createElement("div", { className: "flex justify-center py-20" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: Loading03Icon19, size: 32, className: "animate-spin text-neutral-300" })) : /* @__PURE__ */ React44.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-5 w-full max-w-4xl mx-auto px-4" }, availableTiers.map((tier) => {
|
|
4316
|
+
const isCurrent = tier.tierName === currentTier;
|
|
4317
|
+
const isCardDisabled = hasPreordered && !isCurrent;
|
|
4318
|
+
const isHighlighted = hasPreordered && isCurrent;
|
|
4319
|
+
const isThisCardLoading = isProcessing && selectedTier?.tierName === tier.tierName;
|
|
4320
|
+
const isPrimaryDisabled = isCardDisabled || isHighlighted || isThisCardLoading || !tier.acceptPreorder;
|
|
4321
|
+
const isWaitlistDisabled = !isCurrent || isCurrent && (onWaitlist || hasPreordered) || isThisCardLoading || !tier.acceptWaitlist;
|
|
4322
|
+
return /* @__PURE__ */ React44.createElement(
|
|
4323
|
+
"div",
|
|
4324
|
+
{
|
|
4325
|
+
key: tier.tierName,
|
|
4326
|
+
className: `relative bg-white rounded-3xl p-6 flex flex-col overflow-hidden transition-all duration-300
|
|
4327
|
+
${isCardDisabled ? "opacity-50 grayscale-50 pointer-events-none" : ""}
|
|
4328
|
+
|
|
4329
|
+
`
|
|
4330
|
+
},
|
|
4331
|
+
/* @__PURE__ */ React44.createElement(
|
|
4332
|
+
"div",
|
|
4333
|
+
{
|
|
4334
|
+
className: `absolute -top-10 -right-10 w-48 h-48 bg-linear-to-bl ${getTierGlow(tier.tierName)} to-transparent opacity-40 blur-2xl rounded-full pointer-events-none`
|
|
4335
|
+
}
|
|
4336
|
+
),
|
|
4337
|
+
isThisCardLoading && /* @__PURE__ */ React44.createElement("div", { className: "absolute inset-0 z-50 flex items-center justify-center bg-white/40 backdrop-blur-[1px]" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: Loading03Icon19, size: 32, className: "animate-spin text-black" })),
|
|
4338
|
+
/* @__PURE__ */ React44.createElement("div", { className: "mb-6 relative z-10" }, /* @__PURE__ */ React44.createElement("div", { className: "flex justify-between items-start mb-1" }, /* @__PURE__ */ React44.createElement("span", { className: "text-black text-sm tracking-widest " }, formatTierName(tier.tierName)), isCurrent && !hasPreordered && /* @__PURE__ */ React44.createElement("span", { className: "text-[9px] bg-neutral-100 text-neutral-600 px-2 py-1 rounded-full uppercase tracking-wider" }, "Current")), /* @__PURE__ */ React44.createElement("div", { className: "flex items-baseline gap-1 mt-2" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-3xl font-light text-black" }, tier.priceUSD === 0 ? "Free" : `$${tier.priceUSD.toFixed(2)}`), tier.priceUSD > 0 && /* @__PURE__ */ React44.createElement("span", { className: "text-xs text-neutral-500" }, tier.isYearly ? "/ year" : "one-time")), /* @__PURE__ */ React44.createElement("p", { className: "text-[13px] text-neutral-500 mt-3 min-h-12 leading-relaxed" }, tier.description)),
|
|
4339
|
+
/* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-2.5 mb-6 relative z-10" }, /* @__PURE__ */ React44.createElement("div", { className: isPrimaryDisabled ? "opacity-50 pointer-events-none" : "" }, /* @__PURE__ */ React44.createElement(
|
|
4340
|
+
ThreeDActionButton,
|
|
4341
|
+
{
|
|
4342
|
+
disabled: isPrimaryDisabled,
|
|
4343
|
+
onClick: () => handleTierClick(tier, isCurrent ? "pre_order" : "upgrade"),
|
|
4344
|
+
className: "w-full"
|
|
4345
|
+
},
|
|
4346
|
+
getPrimaryButtonText(tier)
|
|
4347
|
+
)), /* @__PURE__ */ React44.createElement(
|
|
4348
|
+
"button",
|
|
4349
|
+
{
|
|
4350
|
+
disabled: isWaitlistDisabled,
|
|
4351
|
+
onClick: () => handleTierClick(tier, "join_waitlist"),
|
|
4352
|
+
className: `w-full py-2.5 rounded-full text-xs tracking-wide transition-all outline-none border
|
|
4353
|
+
${isCurrent && (onWaitlist || hasPreordered) ? "bg-neutral-50 border-neutral-100 text-neutral-400 cursor-not-allowed" : "bg-white border-neutral-200 text-black hover:bg-neutral-50"}
|
|
4354
|
+
disabled:opacity-40 disabled:cursor-not-allowed
|
|
4355
|
+
`
|
|
4356
|
+
},
|
|
4357
|
+
getWaitlistButtonText(tier)
|
|
4358
|
+
)),
|
|
4359
|
+
/* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-3 relative z-10" }, tier.features.map((feature, featureIdx) => {
|
|
4360
|
+
const isAvailable = feature.value !== false;
|
|
4361
|
+
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
4362
|
+
return /* @__PURE__ */ React44.createElement("div", { key: featureIdx, className: "flex items-center gap-3" }, isAvailable ? /* @__PURE__ */ React44.createElement(CheckIcon2, null) : /* @__PURE__ */ React44.createElement(CrossIcon2, 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)));
|
|
4363
|
+
}))
|
|
4364
|
+
);
|
|
4365
|
+
}))), selectedTier && intendedAction !== "join_waitlist" && /* @__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 && setSelectedTier(null) }), /* @__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(
|
|
4366
|
+
"div",
|
|
4367
|
+
{
|
|
4368
|
+
className: `absolute -top-10 -right-10 w-40 h-40 bg-linear-to-bl ${getTierGlow(selectedTier.tierName)} to-transparent opacity-40 blur-2xl rounded-full pointer-events-none`
|
|
4369
|
+
}
|
|
4370
|
+
), /* @__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" }, "Confirm Action"), /* @__PURE__ */ React44.createElement(
|
|
4371
|
+
"button",
|
|
4372
|
+
{
|
|
4373
|
+
disabled: isProcessing,
|
|
4374
|
+
onClick: () => setSelectedTier(null),
|
|
4375
|
+
className: "text-neutral-400 hover:text-black transition-colors outline-none disabled:opacity-50"
|
|
4376
|
+
},
|
|
4377
|
+
/* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: CancelCircleIcon7, size: 18 })
|
|
4378
|
+
)), /* @__PURE__ */ React44.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 relative z-10" }, /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col items-center justify-center mb-6" }, /* @__PURE__ */ React44.createElement("p", { className: "text-2xl text-black mb-1" }, selectedTier.priceUSD === 0 ? "Free" : `$${selectedTier.priceUSD.toFixed(2)}`), /* @__PURE__ */ React44.createElement("span", { className: `text-[10px] tracking-widest px-4 py-1.5 rounded-full bg-neutral-100 text-black mt-1` }, formatTierName(selectedTier.tierName), " ", formatTierName(cardType))), /* @__PURE__ */ React44.createElement("div", { className: "grid grid-cols-1 gap-y-6 mb-8 mt-4" }, /* @__PURE__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-1" }, "Action"), /* @__PURE__ */ React44.createElement("span", { className: "text-[13px] text-black " }, intendedAction === "upgrade" ? `Upgrade to ${formatTierName(selectedTier.tierName)}` : `Pre-order Card`)), intendedAction === "pre_order" && selectedTier.priceUSD > 0 && /* @__PURE__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-1" }, "Payment Notice"), /* @__PURE__ */ React44.createElement("span", { className: "text-[12px] text-neutral-600 leading-relaxed block" }, "By confirming, $", selectedTier.priceUSD.toFixed(2), " will be securely deducted from your USD asset balance to guarantee your order."))), /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React44.createElement(
|
|
4379
|
+
ThreeDActionButton,
|
|
4380
|
+
{
|
|
4381
|
+
onClick: processAction,
|
|
4382
|
+
isLoading: isProcessing,
|
|
4383
|
+
className: "w-full"
|
|
4384
|
+
},
|
|
4385
|
+
"Confirm & Proceed"
|
|
4386
|
+
), /* @__PURE__ */ React44.createElement(
|
|
4387
|
+
"button",
|
|
4388
|
+
{
|
|
4389
|
+
disabled: isProcessing,
|
|
4390
|
+
onClick: () => setSelectedTier(null),
|
|
4391
|
+
className: "w-full flex items-center justify-center py-2.5 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 transition-colors outline-none text-[13px] mt-1 disabled:opacity-50"
|
|
4392
|
+
},
|
|
4393
|
+
"Cancel"
|
|
4394
|
+
))))), selectedTier && intendedAction === "join_waitlist" && /* @__PURE__ */ React44.createElement(
|
|
4395
|
+
ConfirmationDialog,
|
|
4396
|
+
{
|
|
4397
|
+
isOpen: true,
|
|
4398
|
+
title: "Join Waitlist",
|
|
4399
|
+
message: `Are you sure you want to join the waitlist for the ${formatTierName(selectedTier.tierName)} ${formatTierName(cardType)} card? You will be notified via email when it becomes available.`,
|
|
4400
|
+
confirmText: "Join Waitlist",
|
|
4401
|
+
isDestructive: false,
|
|
4402
|
+
isProcessing,
|
|
4403
|
+
onClose: () => setSelectedTier(null),
|
|
4404
|
+
onConfirm: processAction
|
|
4405
|
+
}
|
|
4406
|
+
));
|
|
4407
|
+
};
|
|
4238
4408
|
export {
|
|
4239
4409
|
AppBento2,
|
|
4240
4410
|
ConsultantShowcase,
|
|
@@ -4263,6 +4433,7 @@ export {
|
|
|
4263
4433
|
TextInput,
|
|
4264
4434
|
ThreeDActionButton,
|
|
4265
4435
|
ThreeDButton,
|
|
4436
|
+
UniversalCardActionPage,
|
|
4266
4437
|
UniversalCardPage,
|
|
4267
4438
|
UniversalErrorView,
|
|
4268
4439
|
UniversalHomeView,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@retinalabsllc/zairusjs",
|
|
3
|
-
"version": "14.0.
|
|
3
|
+
"version": "14.0.25",
|
|
4
4
|
"description": "A perceptive, Ai data driven Next.js UI component library.",
|
|
5
5
|
"author": "Retina Labs Company",
|
|
6
6
|
"license": "MIT",
|
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@tailwindcss/postcss": "^4.0.0",
|
|
55
|
+
"@types/canvas-confetti": "^1.9.0",
|
|
55
56
|
"@types/node": "^20.0.0",
|
|
56
57
|
"@types/react": "^19.0.0",
|
|
57
58
|
"@types/react-dom": "^19.0.0",
|