@retinalabsllc/zairusjs 9.0.50 → 9.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 +31 -7
- package/dist/index.d.ts +31 -7
- package/dist/index.js +513 -550
- package/dist/index.mjs +463 -503
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -64,6 +64,7 @@ __export(index_exports, {
|
|
|
64
64
|
UniversalOrganizationPage: () => UniversalOrganizationPage,
|
|
65
65
|
UniversalProfilePage: () => UniversalProfilePage,
|
|
66
66
|
UniversalProfileSettings: () => UniversalProfileSettings,
|
|
67
|
+
UniversalSidebar: () => UniversalSidebar,
|
|
67
68
|
UniversalTransactionPage: () => UniversalTransactionPage,
|
|
68
69
|
UniversalWalletPage: () => UniversalWalletPage,
|
|
69
70
|
WaitlistDialog: () => WaitlistDialog
|
|
@@ -259,7 +260,6 @@ var ThreeDActionButton = ({
|
|
|
259
260
|
type,
|
|
260
261
|
disabled: isInteractionDisabled,
|
|
261
262
|
onClick,
|
|
262
|
-
"aria-label": ariaLabel,
|
|
263
263
|
className: `
|
|
264
264
|
relative inline-flex items-center justify-center py-2.5 px-8 rounded-full
|
|
265
265
|
bg-neutral-950 text-white text-xs tracking-widest
|
|
@@ -655,209 +655,56 @@ var Footer = ({
|
|
|
655
655
|
href: social.href,
|
|
656
656
|
target: "_blank",
|
|
657
657
|
rel: "noopener noreferrer",
|
|
658
|
-
className: "text-neutral-400 hover:text-black transition-colors"
|
|
659
|
-
"aria-label": social.name
|
|
658
|
+
className: "text-neutral-400 hover:text-black transition-colors"
|
|
660
659
|
},
|
|
661
660
|
/* @__PURE__ */ import_react7.default.createElement(import_react8.HugeiconsIcon, { icon: social.icon, size: 20 })
|
|
662
661
|
))))))));
|
|
663
662
|
};
|
|
664
663
|
|
|
665
664
|
// src/components/MobileNav.tsx
|
|
666
|
-
var
|
|
665
|
+
var import_react9 = __toESM(require("react"));
|
|
667
666
|
var import_link4 = __toESM(require("next/link"));
|
|
668
667
|
var import_navigation3 = require("next/navigation");
|
|
669
|
-
var import_react12 = require("@hugeicons/react");
|
|
670
|
-
var import_core_free_icons3 = require("@hugeicons/core-free-icons");
|
|
671
|
-
|
|
672
|
-
// src/components/ConfirmationDialog.tsx
|
|
673
|
-
var import_react9 = __toESM(require("react"));
|
|
674
668
|
var import_react10 = require("@hugeicons/react");
|
|
675
|
-
var
|
|
676
|
-
var ConfirmationDialog = ({
|
|
677
|
-
isOpen,
|
|
678
|
-
title,
|
|
679
|
-
message,
|
|
680
|
-
confirmText = "Confirm",
|
|
681
|
-
cancelText = "Cancel",
|
|
682
|
-
isProcessing = false,
|
|
683
|
-
isDestructive = true,
|
|
684
|
-
onClose,
|
|
685
|
-
onConfirm
|
|
686
|
-
}) => {
|
|
687
|
-
if (!isOpen) return null;
|
|
688
|
-
return /* @__PURE__ */ import_react9.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react9.default.createElement(
|
|
689
|
-
"div",
|
|
690
|
-
{
|
|
691
|
-
className: "absolute inset-0 bg-black/40 ",
|
|
692
|
-
onClick: () => !isProcessing && onClose()
|
|
693
|
-
}
|
|
694
|
-
), /* @__PURE__ */ import_react9.default.createElement("div", { className: "relative w-72 bg-white rounded-2xl flex flex-col items-center overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "p-6 pb-4 text-center w-full" }, /* @__PURE__ */ import_react9.default.createElement("h3", { className: "text-[17px] text-black tracking-tight mb-2" }, title), /* @__PURE__ */ import_react9.default.createElement("p", { className: "text-[12px] text-neutral-500 leading-relaxed px-2" }, message)), /* @__PURE__ */ import_react9.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react9.default.createElement(
|
|
695
|
-
"button",
|
|
696
|
-
{
|
|
697
|
-
onClick: onClose,
|
|
698
|
-
disabled: isProcessing,
|
|
699
|
-
className: "flex-1 py-4 text-[14px] text-neutral-500 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none "
|
|
700
|
-
},
|
|
701
|
-
cancelText
|
|
702
|
-
), /* @__PURE__ */ import_react9.default.createElement(
|
|
703
|
-
"button",
|
|
704
|
-
{
|
|
705
|
-
onClick: onConfirm,
|
|
706
|
-
disabled: isProcessing,
|
|
707
|
-
className: `flex-1 py-4 text-[13px] transition-colors disabled:opacity-50 flex justify-center items-center outline-none ${isDestructive ? "text-red-500 hover:bg-red-50" : "text-black hover:bg-neutral-50"}`
|
|
708
|
-
},
|
|
709
|
-
isProcessing ? /* @__PURE__ */ import_react9.default.createElement(import_react10.HugeiconsIcon, { icon: import_core_free_icons2.Loading03Icon, className: "animate-spin", size: 18 }) : confirmText
|
|
710
|
-
))));
|
|
711
|
-
};
|
|
712
|
-
|
|
713
|
-
// src/components/MobileNav.tsx
|
|
714
|
-
var MobileNav = ({
|
|
715
|
-
items,
|
|
716
|
-
web3Address,
|
|
717
|
-
web3Avatar,
|
|
718
|
-
userInitials = "U",
|
|
719
|
-
unreadCount = 0,
|
|
720
|
-
onOpenNotifications,
|
|
721
|
-
onLogout
|
|
722
|
-
}) => {
|
|
669
|
+
var MobileNav = ({ items }) => {
|
|
723
670
|
const pathname = (0, import_navigation3.usePathname)();
|
|
724
|
-
const router = (0, import_navigation3.useRouter)();
|
|
725
|
-
const [isCollapsed, setIsCollapsed] = (0, import_react11.useState)(false);
|
|
726
|
-
const [showLogoutDialog, setShowLogoutDialog] = (0, import_react11.useState)(false);
|
|
727
|
-
const [isLoggingOut, setIsLoggingOut] = (0, import_react11.useState)(false);
|
|
728
671
|
if (!items || items.length === 0) return null;
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
}
|
|
733
|
-
return pathname?.startsWith(href);
|
|
734
|
-
};
|
|
735
|
-
const isChildRoute = pathname !== "/" && pathname !== "/app" && !items.some((item) => item.href === pathname);
|
|
736
|
-
const handleLogout = async () => {
|
|
737
|
-
setIsLoggingOut(true);
|
|
738
|
-
try {
|
|
739
|
-
if (onLogout) await onLogout();
|
|
740
|
-
} finally {
|
|
741
|
-
setIsLoggingOut(false);
|
|
742
|
-
setShowLogoutDialog(false);
|
|
743
|
-
}
|
|
744
|
-
};
|
|
745
|
-
const handleCopyWallet = () => {
|
|
746
|
-
if (web3Address) {
|
|
747
|
-
navigator.clipboard.writeText(web3Address);
|
|
748
|
-
}
|
|
749
|
-
};
|
|
750
|
-
return /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement(
|
|
751
|
-
"aside",
|
|
752
|
-
{
|
|
753
|
-
className: `hidden md:flex fixed top-0 left-0 h-screen bg-white border-r border-neutral-100 flex-col transition-all duration-300 z-40 ${isCollapsed ? "w-20" : "w-64"}`
|
|
754
|
-
},
|
|
755
|
-
/* @__PURE__ */ import_react11.default.createElement("div", { className: `p-5 flex items-center shrink-0 ${isCollapsed ? "justify-center" : "justify-start"}` }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-center gap-3 w-full" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "w-10 h-10 rounded-full flex items-center justify-center shrink-0 border border-neutral-100 bg-neutral-50 overflow-hidden" }, web3Avatar ? /* @__PURE__ */ import_react11.default.createElement("img", { src: web3Avatar, alt: "Avatar", className: "w-full h-full object-cover" }) : /* @__PURE__ */ import_react11.default.createElement("span", { className: "text-[12px] font-medium text-black uppercase" }, userInitials)), !isCollapsed && /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react11.default.createElement("span", { className: "text-[14px] font-medium text-black truncate" }, "Aeona Profile"), web3Address && /* @__PURE__ */ import_react11.default.createElement(
|
|
756
|
-
"span",
|
|
757
|
-
{
|
|
758
|
-
onClick: handleCopyWallet,
|
|
759
|
-
className: "text-[10px] text-neutral-500 truncate cursor-pointer hover:text-black transition-colors"
|
|
760
|
-
},
|
|
761
|
-
web3Address
|
|
762
|
-
)))),
|
|
763
|
-
/* @__PURE__ */ import_react11.default.createElement("nav", { className: "flex-1 py-4 flex flex-col gap-2 px-3 overflow-y-auto custom-scrollbar" }, items.map((item) => {
|
|
764
|
-
const active = isItemActive(item.href);
|
|
765
|
-
return /* @__PURE__ */ import_react11.default.createElement(
|
|
766
|
-
import_link4.default,
|
|
767
|
-
{
|
|
768
|
-
key: item.label,
|
|
769
|
-
href: item.href,
|
|
770
|
-
className: `flex items-center gap-3 px-3 py-2.5 rounded-xl transition-all outline-none group shrink-0 ${active ? "bg-neutral-100 text-black" : "text-neutral-500 hover:bg-neutral-50 hover:text-black"}`,
|
|
771
|
-
title: isCollapsed ? item.label : void 0
|
|
772
|
-
},
|
|
773
|
-
/* @__PURE__ */ import_react11.default.createElement(
|
|
774
|
-
import_react12.HugeiconsIcon,
|
|
775
|
-
{
|
|
776
|
-
icon: item.icon,
|
|
777
|
-
size: 20,
|
|
778
|
-
className: `shrink-0 transition-colors ${active ? "text-black" : "text-neutral-400 group-hover:text-black"}`
|
|
779
|
-
}
|
|
780
|
-
),
|
|
781
|
-
!isCollapsed && /* @__PURE__ */ import_react11.default.createElement("span", { className: `text-[13px] font-medium tracking-wide truncate ${active ? "text-black" : ""}` }, item.label)
|
|
782
|
-
);
|
|
783
|
-
})),
|
|
784
|
-
/* @__PURE__ */ import_react11.default.createElement("div", { className: "p-4 shrink-0 flex flex-col gap-2 border-t border-neutral-50" }, /* @__PURE__ */ import_react11.default.createElement(
|
|
785
|
-
"button",
|
|
786
|
-
{
|
|
787
|
-
onClick: () => setShowLogoutDialog(true),
|
|
788
|
-
className: `flex items-center gap-3 px-3 py-2.5 rounded-xl transition-all outline-none group text-neutral-500 hover:bg-neutral-50 hover:text-red-500 ${isCollapsed ? "justify-center" : ""}`,
|
|
789
|
-
title: isCollapsed ? "Log Out" : void 0
|
|
790
|
-
},
|
|
791
|
-
/* @__PURE__ */ import_react11.default.createElement(import_react12.HugeiconsIcon, { icon: import_core_free_icons3.LogoutCircle02Icon, size: 20, className: "shrink-0 transition-colors" }),
|
|
792
|
-
!isCollapsed && /* @__PURE__ */ import_react11.default.createElement("span", { className: "text-[13px] font-medium tracking-wide" }, "Log Out")
|
|
793
|
-
), /* @__PURE__ */ import_react11.default.createElement(
|
|
794
|
-
"button",
|
|
795
|
-
{
|
|
796
|
-
onClick: () => setIsCollapsed(!isCollapsed),
|
|
797
|
-
className: `flex items-center gap-3 px-3 py-2.5 rounded-xl transition-all outline-none group text-neutral-400 hover:bg-neutral-50 hover:text-black ${isCollapsed ? "justify-center" : ""}`
|
|
798
|
-
},
|
|
799
|
-
/* @__PURE__ */ import_react11.default.createElement(import_react12.HugeiconsIcon, { icon: import_core_free_icons3.SidebarLeft01Icon, size: 20, className: "shrink-0 transition-colors" }),
|
|
800
|
-
!isCollapsed && /* @__PURE__ */ import_react11.default.createElement("span", { className: "text-[13px] font-medium tracking-wide" }, "Collapse")
|
|
801
|
-
))
|
|
802
|
-
), /* @__PURE__ */ import_react11.default.createElement("div", { className: "md:hidden fixed top-3 inset-x-0 z-50 flex justify-center pointer-events-none px-2.5" }, /* @__PURE__ */ import_react11.default.createElement("header", { className: "pointer-events-auto w-full max-w-sm backdrop-blur-xl bg-white/65 rounded-full p-2 flex items-center justify-between" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-center gap-2" }, isChildRoute && /* @__PURE__ */ import_react11.default.createElement(
|
|
803
|
-
"button",
|
|
804
|
-
{
|
|
805
|
-
onClick: () => router.back(),
|
|
806
|
-
className: "w-8 h-8 rounded-full bg-white flex items-center justify-center text-neutral-600 hover:text-black transition-colors outline-none shrink-0 border border-neutral-100"
|
|
807
|
-
},
|
|
808
|
-
/* @__PURE__ */ import_react11.default.createElement(import_react12.HugeiconsIcon, { icon: import_core_free_icons3.ArrowLeft01Icon, size: 16 })
|
|
809
|
-
), web3Address && /* @__PURE__ */ import_react11.default.createElement(
|
|
810
|
-
"div",
|
|
811
|
-
{
|
|
812
|
-
onClick: handleCopyWallet,
|
|
813
|
-
className: "flex items-center gap-2 bg-white rounded-full p-1 pr-3 cursor-pointer hover:bg-neutral-50 transition-colors border border-neutral-100"
|
|
814
|
-
},
|
|
815
|
-
web3Avatar ? /* @__PURE__ */ import_react11.default.createElement("img", { src: web3Avatar, alt: "Avatar", className: "w-6 h-6 rounded-full object-cover shrink-0" }) : /* @__PURE__ */ import_react11.default.createElement("div", { className: "w-6 h-6 rounded-full bg-neutral-100 flex items-center justify-center text-[10px] font-medium text-black shrink-0" }, userInitials),
|
|
816
|
-
/* @__PURE__ */ import_react11.default.createElement("span", { className: "text-[12px] font-medium text-black truncate max-w-24 sm:max-w-40" }, web3Address)
|
|
817
|
-
)), /* @__PURE__ */ import_react11.default.createElement(
|
|
818
|
-
"button",
|
|
819
|
-
{
|
|
820
|
-
onClick: onOpenNotifications,
|
|
821
|
-
className: "relative w-8 h-8 shrink-0 bg-white rounded-full flex items-center justify-center text-neutral-600 hover:text-black transition-colors outline-none mr-1 border border-neutral-100"
|
|
822
|
-
},
|
|
823
|
-
/* @__PURE__ */ import_react11.default.createElement(import_react12.HugeiconsIcon, { icon: import_core_free_icons3.Notification01Icon, size: 16 }),
|
|
824
|
-
unreadCount > 0 && /* @__PURE__ */ import_react11.default.createElement("span", { className: "absolute top-1 right-1.5 w-2 h-2 bg-blue-600 rounded-full border-2 border-white" })
|
|
825
|
-
))), /* @__PURE__ */ import_react11.default.createElement("div", { className: "md:hidden fixed bottom-6 inset-x-0 z-100 flex justify-center pointer-events-none px-3 animate-in slide-in-from-bottom-8 fade-in duration-500" }, /* @__PURE__ */ import_react11.default.createElement("nav", { className: "pointer-events-auto w-full max-w-sm bg-white/65 backdrop-blur-xl shadow-[0_8px_30px_rgb(0,0,0,0.08)] rounded-full px-6 py-2.5 flex items-center justify-between border border-white/50" }, items.map((item) => {
|
|
826
|
-
const active = isItemActive(item.href);
|
|
827
|
-
return /* @__PURE__ */ import_react11.default.createElement(
|
|
672
|
+
return /* @__PURE__ */ import_react9.default.createElement("div", { className: "fixed bottom-6 inset-x-0 z-100 flex justify-center pointer-events-none px-3 animate-in slide-in-from-bottom-8 fade-in duration-500 md:hidden" }, /* @__PURE__ */ import_react9.default.createElement("nav", { className: "pointer-events-auto w-full max-w-sm bg-white/50 backdrop-blur-xl shadow-[0_8px_30px_rgb(0,0,0,0.08)] rounded-full px-6 py-2.5 flex items-center justify-between" }, items.map((item) => {
|
|
673
|
+
const isActive = item.href === "/" || item.href === "/app" ? pathname === "/" || pathname === "/app" : pathname === item.href || pathname?.startsWith(`${item.href}/`);
|
|
674
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
828
675
|
import_link4.default,
|
|
829
676
|
{
|
|
830
677
|
key: item.label,
|
|
831
678
|
href: item.href,
|
|
832
679
|
className: "flex flex-col items-center justify-center gap-1 min-w-14 transition-transform active:scale-95 outline-none"
|
|
833
680
|
},
|
|
834
|
-
/* @__PURE__ */
|
|
835
|
-
|
|
681
|
+
/* @__PURE__ */ import_react9.default.createElement("div", { className: `transition-colors duration-300 ${isActive ? "text-black" : "text-neutral-400 hover:text-neutral-600"}` }, /* @__PURE__ */ import_react9.default.createElement(
|
|
682
|
+
import_react10.HugeiconsIcon,
|
|
683
|
+
{
|
|
684
|
+
icon: item.icon,
|
|
685
|
+
size: 20
|
|
686
|
+
}
|
|
687
|
+
)),
|
|
688
|
+
/* @__PURE__ */ import_react9.default.createElement(
|
|
689
|
+
"span",
|
|
690
|
+
{
|
|
691
|
+
className: `text-[9px] tracking-wide transition-colors duration-300 ${isActive ? "text-black" : "text-neutral-400"}`
|
|
692
|
+
},
|
|
693
|
+
item.label
|
|
694
|
+
)
|
|
836
695
|
);
|
|
837
|
-
})))
|
|
838
|
-
ConfirmationDialog,
|
|
839
|
-
{
|
|
840
|
-
isOpen: showLogoutDialog,
|
|
841
|
-
title: "Secure Logout",
|
|
842
|
-
message: "Are you sure you want to log out? You will need to authenticate to return.",
|
|
843
|
-
confirmText: "Log Out",
|
|
844
|
-
isDestructive: true,
|
|
845
|
-
isProcessing: isLoggingOut,
|
|
846
|
-
onClose: () => setShowLogoutDialog(false),
|
|
847
|
-
onConfirm: handleLogout
|
|
848
|
-
}
|
|
849
|
-
));
|
|
696
|
+
})));
|
|
850
697
|
};
|
|
851
698
|
|
|
852
699
|
// src/components/UniversalOrganizationPage.tsx
|
|
853
|
-
var
|
|
700
|
+
var import_react15 = __toESM(require("react"));
|
|
854
701
|
var import_react_hot_toast3 = __toESM(require("react-hot-toast"));
|
|
855
702
|
|
|
856
703
|
// src/components/ManagedToaster.tsx
|
|
857
|
-
var
|
|
704
|
+
var import_react11 = __toESM(require("react"));
|
|
858
705
|
var import_react_hot_toast2 = require("react-hot-toast");
|
|
859
706
|
var ManagedToaster = () => {
|
|
860
|
-
return /* @__PURE__ */
|
|
707
|
+
return /* @__PURE__ */ import_react11.default.createElement(
|
|
861
708
|
import_react_hot_toast2.Toaster,
|
|
862
709
|
{
|
|
863
710
|
position: "top-right",
|
|
@@ -889,7 +736,7 @@ var ManagedToaster = () => {
|
|
|
889
736
|
};
|
|
890
737
|
|
|
891
738
|
// src/components/ReusableInputs.tsx
|
|
892
|
-
var
|
|
739
|
+
var import_react12 = __toESM(require("react"));
|
|
893
740
|
var TextInput = ({
|
|
894
741
|
label,
|
|
895
742
|
value,
|
|
@@ -900,7 +747,7 @@ var TextInput = ({
|
|
|
900
747
|
readOnly,
|
|
901
748
|
type = "text",
|
|
902
749
|
onClick
|
|
903
|
-
}) => /* @__PURE__ */
|
|
750
|
+
}) => /* @__PURE__ */ import_react12.default.createElement("div", { className: "space-y-2 flex-1 w-full", onClick }, label && /* @__PURE__ */ import_react12.default.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block " }, label), /* @__PURE__ */ import_react12.default.createElement(
|
|
904
751
|
"input",
|
|
905
752
|
{
|
|
906
753
|
type,
|
|
@@ -921,7 +768,7 @@ var NumberInput = ({
|
|
|
921
768
|
placeholder,
|
|
922
769
|
maxLength,
|
|
923
770
|
disabled
|
|
924
|
-
}) => /* @__PURE__ */
|
|
771
|
+
}) => /* @__PURE__ */ import_react12.default.createElement("div", { className: "space-y-2 flex-1 w-full" }, label && /* @__PURE__ */ import_react12.default.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block " }, label), /* @__PURE__ */ import_react12.default.createElement(
|
|
925
772
|
"input",
|
|
926
773
|
{
|
|
927
774
|
type: "text",
|
|
@@ -939,9 +786,9 @@ var NumberInput = ({
|
|
|
939
786
|
));
|
|
940
787
|
|
|
941
788
|
// src/components/Banner.tsx
|
|
942
|
-
var
|
|
943
|
-
var
|
|
944
|
-
var
|
|
789
|
+
var import_react13 = __toESM(require("react"));
|
|
790
|
+
var import_react14 = require("@hugeicons/react");
|
|
791
|
+
var import_core_free_icons2 = require("@hugeicons/core-free-icons");
|
|
945
792
|
var Banner = ({
|
|
946
793
|
title,
|
|
947
794
|
message,
|
|
@@ -951,7 +798,7 @@ var Banner = ({
|
|
|
951
798
|
onDismiss,
|
|
952
799
|
action
|
|
953
800
|
}) => {
|
|
954
|
-
const [isVisible, setIsVisible] = (0,
|
|
801
|
+
const [isVisible, setIsVisible] = (0, import_react13.useState)(true);
|
|
955
802
|
if (!isVisible) return null;
|
|
956
803
|
const handleDismiss = () => {
|
|
957
804
|
setIsVisible(false);
|
|
@@ -963,7 +810,7 @@ var Banner = ({
|
|
|
963
810
|
iconColor: "text-emerald-600",
|
|
964
811
|
titleColor: "text-emerald-900",
|
|
965
812
|
msgColor: "text-emerald-700",
|
|
966
|
-
defaultIcon:
|
|
813
|
+
defaultIcon: import_core_free_icons2.CheckmarkBadge01Icon,
|
|
967
814
|
closeHover: "hover:bg-emerald-100 text-emerald-500"
|
|
968
815
|
},
|
|
969
816
|
warning: {
|
|
@@ -971,7 +818,7 @@ var Banner = ({
|
|
|
971
818
|
iconColor: "text-amber-600",
|
|
972
819
|
titleColor: "text-amber-900",
|
|
973
820
|
msgColor: "text-amber-700",
|
|
974
|
-
defaultIcon:
|
|
821
|
+
defaultIcon: import_core_free_icons2.InformationCircleIcon,
|
|
975
822
|
closeHover: "hover:bg-amber-100 text-amber-500"
|
|
976
823
|
},
|
|
977
824
|
alert: {
|
|
@@ -979,27 +826,26 @@ var Banner = ({
|
|
|
979
826
|
iconColor: "text-red-600",
|
|
980
827
|
titleColor: "text-red-900",
|
|
981
828
|
msgColor: "text-red-700",
|
|
982
|
-
defaultIcon:
|
|
829
|
+
defaultIcon: import_core_free_icons2.Alert02Icon,
|
|
983
830
|
closeHover: "hover:bg-red-100 text-red-500"
|
|
984
831
|
}
|
|
985
832
|
};
|
|
986
833
|
const currentConfig = config[type];
|
|
987
834
|
const IconToUse = icon || currentConfig.defaultIcon;
|
|
988
|
-
return /* @__PURE__ */
|
|
835
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { className: `relative w-full rounded-2xl p-4 flex items-start gap-4 transition-all duration-300 animate-in fade-in slide-in-from-top-2 ${currentConfig.bg}` }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "flex-1 flex flex-col min-w-0" }, /* @__PURE__ */ import_react13.default.createElement("h4", { className: `text-sm tracking-tight mb-1 ${currentConfig.titleColor}` }, title), /* @__PURE__ */ import_react13.default.createElement("p", { className: `text-xs leading-relaxed ${currentConfig.msgColor}` }, message), action && /* @__PURE__ */ import_react13.default.createElement("div", { className: "mt-3" }, action)), isDismissible && /* @__PURE__ */ import_react13.default.createElement(
|
|
989
836
|
"button",
|
|
990
837
|
{
|
|
991
838
|
onClick: handleDismiss,
|
|
992
|
-
className: `absolute top-3 right-3 p-1.5 rounded-full transition-colors outline-none shrink-0 ${currentConfig.closeHover}
|
|
993
|
-
"aria-label": "Dismiss banner"
|
|
839
|
+
className: `absolute top-3 right-3 p-1.5 rounded-full transition-colors outline-none shrink-0 ${currentConfig.closeHover}`
|
|
994
840
|
},
|
|
995
|
-
/* @__PURE__ */
|
|
841
|
+
/* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons2.Cancel01Icon, size: 16 })
|
|
996
842
|
));
|
|
997
843
|
};
|
|
998
844
|
|
|
999
845
|
// src/components/UniversalOrganizationPage.tsx
|
|
1000
|
-
var
|
|
1001
|
-
var
|
|
1002
|
-
var InputSpinner2 = () => /* @__PURE__ */
|
|
846
|
+
var import_react16 = require("@hugeicons/react");
|
|
847
|
+
var import_core_free_icons3 = require("@hugeicons/core-free-icons");
|
|
848
|
+
var InputSpinner2 = () => /* @__PURE__ */ import_react15.default.createElement("svg", { className: "animate-spin h-4 w-4 text-neutral-400", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24" }, /* @__PURE__ */ import_react15.default.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ import_react15.default.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" }));
|
|
1003
849
|
var UniversalOrganizationPage = ({
|
|
1004
850
|
initialOrgName,
|
|
1005
851
|
initialSlug,
|
|
@@ -1012,13 +858,13 @@ var UniversalOrganizationPage = ({
|
|
|
1012
858
|
onCheckSlugAvailability
|
|
1013
859
|
}) => {
|
|
1014
860
|
const resolvedInitialUsername = initialUsername || initialSlug;
|
|
1015
|
-
const [web3Name, setWeb3Name] = (0,
|
|
1016
|
-
const [username, setUsername] = (0,
|
|
1017
|
-
const [slug, setSlug] = (0,
|
|
1018
|
-
const [isCheckingSlug, setIsCheckingSlug] = (0,
|
|
1019
|
-
const [slugAvailable, setSlugAvailable] = (0,
|
|
1020
|
-
const [isSubmitting, setIsSubmitting] = (0,
|
|
1021
|
-
(0,
|
|
861
|
+
const [web3Name, setWeb3Name] = (0, import_react15.useState)(initialOrgName);
|
|
862
|
+
const [username, setUsername] = (0, import_react15.useState)(resolvedInitialUsername);
|
|
863
|
+
const [slug, setSlug] = (0, import_react15.useState)(initialSlug);
|
|
864
|
+
const [isCheckingSlug, setIsCheckingSlug] = (0, import_react15.useState)(false);
|
|
865
|
+
const [slugAvailable, setSlugAvailable] = (0, import_react15.useState)(null);
|
|
866
|
+
const [isSubmitting, setIsSubmitting] = (0, import_react15.useState)(false);
|
|
867
|
+
(0, import_react15.useEffect)(() => {
|
|
1022
868
|
setWeb3Name(initialOrgName || "");
|
|
1023
869
|
setSlug(initialSlug || "");
|
|
1024
870
|
setUsername(initialUsername || initialSlug || "");
|
|
@@ -1032,7 +878,7 @@ var UniversalOrganizationPage = ({
|
|
|
1032
878
|
const handleSlugChange = (val) => {
|
|
1033
879
|
setSlug(val.toLowerCase().replace(/[^a-z0-9-]/g, "").replace(/-+/g, "-").substring(0, 50));
|
|
1034
880
|
};
|
|
1035
|
-
(0,
|
|
881
|
+
(0, import_react15.useEffect)(() => {
|
|
1036
882
|
if (!slug || slug === initialSlug) {
|
|
1037
883
|
setSlugAvailable(null);
|
|
1038
884
|
setIsCheckingSlug(false);
|
|
@@ -1087,7 +933,7 @@ var UniversalOrganizationPage = ({
|
|
|
1087
933
|
};
|
|
1088
934
|
const hasChanges = web3Name !== initialOrgName || slug !== initialSlug || username !== resolvedInitialUsername;
|
|
1089
935
|
const isSaveDisabled = isSubmitting || isReadOnly || isCheckingSlug || !hasChanges || web3Name.length < 3 || slug.length < 3 || username.length < 3 || slug !== initialSlug && slugAvailable === false;
|
|
1090
|
-
return /* @__PURE__ */
|
|
936
|
+
return /* @__PURE__ */ import_react15.default.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react15.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react15.default.createElement("div", null, /* @__PURE__ */ import_react15.default.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, "Public Profile"), /* @__PURE__ */ import_react15.default.createElement("p", { className: "text-xs text-neutral-500" }, "Manage your financial payment handle identifiers and global public cryptographic signature identity details.")), isReadOnly && /* @__PURE__ */ import_react15.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-100 text-neutral-400 rounded-full shrink-0" }, /* @__PURE__ */ import_react15.default.createElement(import_react16.HugeiconsIcon, { icon: import_core_free_icons3.CircleLock02Icon, size: 18, className: "text-current" }))), bannerProps && /* @__PURE__ */ import_react15.default.createElement(Banner, { ...bannerProps }), /* @__PURE__ */ import_react15.default.createElement("div", { className: "w-full max-w-5xl" }, /* @__PURE__ */ import_react15.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ import_react15.default.createElement(
|
|
1091
937
|
TextInput,
|
|
1092
938
|
{
|
|
1093
939
|
label: "Display Name",
|
|
@@ -1097,7 +943,7 @@ var UniversalOrganizationPage = ({
|
|
|
1097
943
|
placeholder: "Sovereign User",
|
|
1098
944
|
maxLength: 50
|
|
1099
945
|
}
|
|
1100
|
-
), /* @__PURE__ */
|
|
946
|
+
), /* @__PURE__ */ import_react15.default.createElement(
|
|
1101
947
|
TextInput,
|
|
1102
948
|
{
|
|
1103
949
|
label: "Digital Identity",
|
|
@@ -1107,7 +953,7 @@ var UniversalOrganizationPage = ({
|
|
|
1107
953
|
placeholder: "sovereignuser",
|
|
1108
954
|
maxLength: 30
|
|
1109
955
|
}
|
|
1110
|
-
), /* @__PURE__ */
|
|
956
|
+
), /* @__PURE__ */ import_react15.default.createElement("div", { className: "space-y-1.5 relative w-full" }, /* @__PURE__ */ import_react15.default.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block" }, "Wallet Username"), /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex items-center relative w-full border-b border-neutral-100 focus-within:border-black transition-all duration-300" }, /* @__PURE__ */ import_react15.default.createElement(
|
|
1111
957
|
"input",
|
|
1112
958
|
{
|
|
1113
959
|
type: "text",
|
|
@@ -1119,7 +965,7 @@ var UniversalOrganizationPage = ({
|
|
|
1119
965
|
className: "w-full px-2 py-3 text-sm bg-transparent text-black outline-none disabled:opacity-50 disabled:cursor-not-allowed",
|
|
1120
966
|
placeholder: "sovereign-user-handle"
|
|
1121
967
|
}
|
|
1122
|
-
), /* @__PURE__ */
|
|
968
|
+
), /* @__PURE__ */ import_react15.default.createElement("span", { className: "text-neutral-400 text-sm py-3 pr-8 shrink-0 whitespace-nowrap" }, slugPrefixUrl), /* @__PURE__ */ import_react15.default.createElement("div", { className: "absolute right-2 top-1/2 -translate-y-1/2" }, isCheckingSlug && /* @__PURE__ */ import_react15.default.createElement(InputSpinner2, null), !isCheckingSlug && !isReadOnly && slug !== initialSlug && slug.length >= 3 && slugAvailable === false && /* @__PURE__ */ import_react15.default.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-red-100" }, /* @__PURE__ */ import_react15.default.createElement("svg", { className: "w-2 h-2 text-red-600", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ import_react15.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" }))), !isCheckingSlug && !isReadOnly && slug !== initialSlug && slug.length >= 3 && slugAvailable === true && /* @__PURE__ */ import_react15.default.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-green-100" }, /* @__PURE__ */ import_react15.default.createElement("svg", { className: "w-2 h-2 text-green-600", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ import_react15.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M16.707 5.293a1 1 0 00-1.414 0L8 12.586 4.707 9.293a1 1 0 10-1.414 1.414l4 4a1 1 0 001.414 0l8-8a1 1 0 000-1.414z" })))))), /* @__PURE__ */ import_react15.default.createElement("div", { className: "pt-8 mt-2 flex items-center gap-4" }, /* @__PURE__ */ import_react15.default.createElement(
|
|
1123
969
|
ThreeDActionButton,
|
|
1124
970
|
{
|
|
1125
971
|
type: "submit",
|
|
@@ -1128,7 +974,7 @@ var UniversalOrganizationPage = ({
|
|
|
1128
974
|
className: "min-w-32"
|
|
1129
975
|
},
|
|
1130
976
|
"Save Changes"
|
|
1131
|
-
), hasChanges && !isSubmitting && !isReadOnly && /* @__PURE__ */
|
|
977
|
+
), hasChanges && !isSubmitting && !isReadOnly && /* @__PURE__ */ import_react15.default.createElement(
|
|
1132
978
|
"button",
|
|
1133
979
|
{
|
|
1134
980
|
type: "button",
|
|
@@ -1144,10 +990,10 @@ var UniversalOrganizationPage = ({
|
|
|
1144
990
|
};
|
|
1145
991
|
|
|
1146
992
|
// src/components/UniversalProfileSettings.tsx
|
|
1147
|
-
var
|
|
993
|
+
var import_react17 = __toESM(require("react"));
|
|
1148
994
|
var import_react_hot_toast4 = __toESM(require("react-hot-toast"));
|
|
1149
|
-
var
|
|
1150
|
-
var
|
|
995
|
+
var import_react18 = require("@hugeicons/react");
|
|
996
|
+
var import_core_free_icons4 = require("@hugeicons/core-free-icons");
|
|
1151
997
|
var UniversalProfileSettings = ({
|
|
1152
998
|
initialFirstName,
|
|
1153
999
|
initialLastName,
|
|
@@ -1161,15 +1007,15 @@ var UniversalProfileSettings = ({
|
|
|
1161
1007
|
onSavePin,
|
|
1162
1008
|
onSaveProfile
|
|
1163
1009
|
}) => {
|
|
1164
|
-
const [firstName, setFirstName] = (0,
|
|
1165
|
-
const [lastName, setLastName] = (0,
|
|
1166
|
-
const [isSubmitting, setIsSubmitting] = (0,
|
|
1167
|
-
const [isPinModalOpen, setIsPinModalOpen] = (0,
|
|
1168
|
-
const [oldPin, setOldPin] = (0,
|
|
1169
|
-
const [newPin, setNewPin] = (0,
|
|
1170
|
-
const [confirmPin, setConfirmPin] = (0,
|
|
1171
|
-
const [isPinSubmitting, setIsPinSubmitting] = (0,
|
|
1172
|
-
(0,
|
|
1010
|
+
const [firstName, setFirstName] = (0, import_react17.useState)(initialFirstName);
|
|
1011
|
+
const [lastName, setLastName] = (0, import_react17.useState)(initialLastName);
|
|
1012
|
+
const [isSubmitting, setIsSubmitting] = (0, import_react17.useState)(false);
|
|
1013
|
+
const [isPinModalOpen, setIsPinModalOpen] = (0, import_react17.useState)(false);
|
|
1014
|
+
const [oldPin, setOldPin] = (0, import_react17.useState)("");
|
|
1015
|
+
const [newPin, setNewPin] = (0, import_react17.useState)("");
|
|
1016
|
+
const [confirmPin, setConfirmPin] = (0, import_react17.useState)("");
|
|
1017
|
+
const [isPinSubmitting, setIsPinSubmitting] = (0, import_react17.useState)(false);
|
|
1018
|
+
(0, import_react17.useEffect)(() => {
|
|
1173
1019
|
setFirstName(initialFirstName || "");
|
|
1174
1020
|
setLastName(initialLastName || "");
|
|
1175
1021
|
}, [initialFirstName, initialLastName]);
|
|
@@ -1235,7 +1081,7 @@ var UniversalProfileSettings = ({
|
|
|
1235
1081
|
};
|
|
1236
1082
|
const hasChanges = firstName !== initialFirstName || lastName !== initialLastName;
|
|
1237
1083
|
const isSaveDisabled = isSubmitting || isReadOnly || !hasChanges || firstName.trim().length === 0 || lastName.trim().length === 0;
|
|
1238
|
-
return /* @__PURE__ */
|
|
1084
|
+
return /* @__PURE__ */ import_react17.default.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react17.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react17.default.createElement("h1", { className: "text-black text-xl mb-1 truncate tracking-tight" }, "Personal Settings"), /* @__PURE__ */ import_react17.default.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your personal account profile.")), isReadOnly && /* @__PURE__ */ import_react17.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-100 text-neutral-400 rounded-full shrink-0" }, /* @__PURE__ */ import_react17.default.createElement(import_react18.HugeiconsIcon, { icon: import_core_free_icons4.CircleLock02Icon, size: 18, className: "text-current" }))), bannerProps && /* @__PURE__ */ import_react17.default.createElement(Banner, { ...bannerProps }), /* @__PURE__ */ import_react17.default.createElement("div", { className: "w-full max-w-5xl" }, /* @__PURE__ */ import_react17.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex flex-col sm:flex-row gap-6" }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react17.default.createElement(
|
|
1239
1085
|
TextInput,
|
|
1240
1086
|
{
|
|
1241
1087
|
label: "First Name",
|
|
@@ -1244,7 +1090,7 @@ var UniversalProfileSettings = ({
|
|
|
1244
1090
|
disabled: isReadOnly || isSubmitting,
|
|
1245
1091
|
placeholder: "System"
|
|
1246
1092
|
}
|
|
1247
|
-
)), /* @__PURE__ */
|
|
1093
|
+
)), /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react17.default.createElement(
|
|
1248
1094
|
TextInput,
|
|
1249
1095
|
{
|
|
1250
1096
|
label: "Last Name",
|
|
@@ -1253,7 +1099,7 @@ var UniversalProfileSettings = ({
|
|
|
1253
1099
|
disabled: isReadOnly || isSubmitting,
|
|
1254
1100
|
placeholder: "Admin"
|
|
1255
1101
|
}
|
|
1256
|
-
))), /* @__PURE__ */
|
|
1102
|
+
))), /* @__PURE__ */ import_react17.default.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ import_react17.default.createElement(
|
|
1257
1103
|
TextInput,
|
|
1258
1104
|
{
|
|
1259
1105
|
label: "Email ID",
|
|
@@ -1262,16 +1108,15 @@ var UniversalProfileSettings = ({
|
|
|
1262
1108
|
},
|
|
1263
1109
|
disabled: true
|
|
1264
1110
|
}
|
|
1265
|
-
), /* @__PURE__ */
|
|
1111
|
+
), /* @__PURE__ */ import_react17.default.createElement("p", { className: "text-[11px] text-neutral-500 mt-1 truncate" }, "To change your email address, please contact support.")), /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between pt-8 mt-2 gap-6 sm:gap-4" }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex items-center gap-6 min-w-0" }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react17.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block truncate" }, "Account Status"), /* @__PURE__ */ import_react17.default.createElement("span", { className: "text-xs text-black block truncate" }, accountStatus)), /* @__PURE__ */ import_react17.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react17.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block truncate" }, "Member Since"), /* @__PURE__ */ import_react17.default.createElement("span", { className: "text-xs text-black block truncate" }, memberSince ? new Date(memberSince).toLocaleDateString("en-US", { month: "long", day: "numeric", year: "numeric" }) : "N/A")), /* @__PURE__ */ import_react17.default.createElement("div", { className: "min-w-0 pl-4" }, /* @__PURE__ */ import_react17.default.createElement(
|
|
1266
1112
|
"button",
|
|
1267
1113
|
{
|
|
1268
1114
|
type: "button",
|
|
1269
1115
|
onClick: () => setIsPinModalOpen(true),
|
|
1270
|
-
"aria-label": "PIN Settings",
|
|
1271
1116
|
className: "w-9 h-9 flex items-center justify-center border border-neutral-200 rounded-full text-black hover:bg-neutral-50 transition-colors outline-none"
|
|
1272
1117
|
},
|
|
1273
|
-
/* @__PURE__ */
|
|
1274
|
-
))), /* @__PURE__ */
|
|
1118
|
+
/* @__PURE__ */ import_react17.default.createElement(import_react18.HugeiconsIcon, { icon: import_core_free_icons4.LockKeyIcon, size: 17, className: "text-black" })
|
|
1119
|
+
))), /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex flex-col-reverse sm:flex-row items-center gap-3 sm:gap-4 w-full sm:w-auto shrink-0" }, hasChanges && !isSubmitting && !isReadOnly && /* @__PURE__ */ import_react17.default.createElement(
|
|
1275
1120
|
"button",
|
|
1276
1121
|
{
|
|
1277
1122
|
type: "button",
|
|
@@ -1282,7 +1127,7 @@ var UniversalProfileSettings = ({
|
|
|
1282
1127
|
className: "text-[11px] tracking-widest text-neutral-400 hover:text-black transition-colors w-full sm:w-auto py-2 sm:py-0 outline-none"
|
|
1283
1128
|
},
|
|
1284
1129
|
"Cancel"
|
|
1285
|
-
), /* @__PURE__ */
|
|
1130
|
+
), /* @__PURE__ */ import_react17.default.createElement(
|
|
1286
1131
|
ThreeDActionButton,
|
|
1287
1132
|
{
|
|
1288
1133
|
type: "submit",
|
|
@@ -1291,7 +1136,7 @@ var UniversalProfileSettings = ({
|
|
|
1291
1136
|
className: "min-w-32 w-full sm:w-auto"
|
|
1292
1137
|
},
|
|
1293
1138
|
"Save Changes"
|
|
1294
|
-
))))), isPinModalOpen && /* @__PURE__ */
|
|
1139
|
+
))))), isPinModalOpen && /* @__PURE__ */ import_react17.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "absolute inset-0 bg-black/40", onClick: closePinModal }), /* @__PURE__ */ import_react17.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_react17.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ import_react17.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, hasPin ? "Change PIN" : "Create PIN"), /* @__PURE__ */ import_react17.default.createElement("button", { onClick: closePinModal, disabled: isPinSubmitting, className: "text-neutral-400 hover:text-black transition-colors outline-none disabled:opacity-50" }, /* @__PURE__ */ import_react17.default.createElement(import_react18.HugeiconsIcon, { icon: import_core_free_icons4.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react17.default.createElement("div", { className: "p-6" }, isPinLoading ? /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex flex-col items-center justify-center py-10" }, /* @__PURE__ */ import_react17.default.createElement(import_react18.HugeiconsIcon, { icon: import_core_free_icons4.Loading03Icon, size: 28, className: "animate-spin text-neutral-400 mb-4" })) : /* @__PURE__ */ import_react17.default.createElement("form", { onSubmit: handlePinSubmit, className: "flex flex-col gap-6" }, hasPin && /* @__PURE__ */ import_react17.default.createElement(
|
|
1295
1140
|
TextInput,
|
|
1296
1141
|
{
|
|
1297
1142
|
type: "password",
|
|
@@ -1302,7 +1147,7 @@ var UniversalProfileSettings = ({
|
|
|
1302
1147
|
onChange: (val) => handlePinInput(val, setOldPin),
|
|
1303
1148
|
placeholder: "\u2022\u2022\u2022\u2022"
|
|
1304
1149
|
}
|
|
1305
|
-
), /* @__PURE__ */
|
|
1150
|
+
), /* @__PURE__ */ import_react17.default.createElement(
|
|
1306
1151
|
TextInput,
|
|
1307
1152
|
{
|
|
1308
1153
|
type: "password",
|
|
@@ -1313,7 +1158,7 @@ var UniversalProfileSettings = ({
|
|
|
1313
1158
|
onChange: (val) => handlePinInput(val, setNewPin),
|
|
1314
1159
|
placeholder: "\u2022\u2022\u2022\u2022"
|
|
1315
1160
|
}
|
|
1316
|
-
), /* @__PURE__ */
|
|
1161
|
+
), /* @__PURE__ */ import_react17.default.createElement(
|
|
1317
1162
|
TextInput,
|
|
1318
1163
|
{
|
|
1319
1164
|
type: "password",
|
|
@@ -1324,7 +1169,7 @@ var UniversalProfileSettings = ({
|
|
|
1324
1169
|
onChange: (val) => handlePinInput(val, setConfirmPin),
|
|
1325
1170
|
placeholder: "\u2022\u2022\u2022\u2022"
|
|
1326
1171
|
}
|
|
1327
|
-
), /* @__PURE__ */
|
|
1172
|
+
), /* @__PURE__ */ import_react17.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react17.default.createElement(
|
|
1328
1173
|
ThreeDActionButton,
|
|
1329
1174
|
{
|
|
1330
1175
|
type: "submit",
|
|
@@ -1337,14 +1182,14 @@ var UniversalProfileSettings = ({
|
|
|
1337
1182
|
};
|
|
1338
1183
|
|
|
1339
1184
|
// src/components/UniversalErrorView.tsx
|
|
1340
|
-
var import_react23 = __toESM(require("react"));
|
|
1341
|
-
var import_react24 = require("@hugeicons/react");
|
|
1342
|
-
var import_core_free_icons8 = require("@hugeicons/core-free-icons");
|
|
1343
|
-
|
|
1344
|
-
// src/components/PageSpinner.tsx
|
|
1345
1185
|
var import_react21 = __toESM(require("react"));
|
|
1346
1186
|
var import_react22 = require("@hugeicons/react");
|
|
1347
|
-
var
|
|
1187
|
+
var import_core_free_icons6 = require("@hugeicons/core-free-icons");
|
|
1188
|
+
|
|
1189
|
+
// src/components/PageSpinner.tsx
|
|
1190
|
+
var import_react19 = __toESM(require("react"));
|
|
1191
|
+
var import_react20 = require("@hugeicons/react");
|
|
1192
|
+
var import_core_free_icons5 = require("@hugeicons/core-free-icons");
|
|
1348
1193
|
var PageSpinner = ({
|
|
1349
1194
|
className = "",
|
|
1350
1195
|
iconClassName = "text-black",
|
|
@@ -1352,10 +1197,10 @@ var PageSpinner = ({
|
|
|
1352
1197
|
}) => {
|
|
1353
1198
|
return (
|
|
1354
1199
|
// z-[100] ensures it sits above absolute headers and modals
|
|
1355
|
-
/* @__PURE__ */
|
|
1356
|
-
|
|
1200
|
+
/* @__PURE__ */ import_react19.default.createElement("div", { className: `fixed inset-0 z-100 flex flex-col items-center justify-center w-full h-full pointer-events-none ${className}` }, /* @__PURE__ */ import_react19.default.createElement(
|
|
1201
|
+
import_react20.HugeiconsIcon,
|
|
1357
1202
|
{
|
|
1358
|
-
icon:
|
|
1203
|
+
icon: import_core_free_icons5.Loading03Icon,
|
|
1359
1204
|
size,
|
|
1360
1205
|
className: `animate-spin mb-4 ${iconClassName}`
|
|
1361
1206
|
}
|
|
@@ -1375,7 +1220,7 @@ var UniversalErrorView = ({
|
|
|
1375
1220
|
returnLabel = "Return to Workspace"
|
|
1376
1221
|
}) => {
|
|
1377
1222
|
if (isBooting || isLoading && !activeData) {
|
|
1378
|
-
return /* @__PURE__ */
|
|
1223
|
+
return /* @__PURE__ */ import_react21.default.createElement("div", { className: "flex items-center justify-center h-screen w-full bg-white" }, /* @__PURE__ */ import_react21.default.createElement(PageSpinner, null));
|
|
1379
1224
|
}
|
|
1380
1225
|
if (!isLoading && (!activeData || activeError)) {
|
|
1381
1226
|
const errorString = typeof activeError === "string" ? activeError : JSON.stringify(activeError || "");
|
|
@@ -1386,7 +1231,7 @@ var UniversalErrorView = ({
|
|
|
1386
1231
|
const apiMessage = typeof activeError === "string" && activeError.trim() !== "" ? activeError : null;
|
|
1387
1232
|
let title = "Oops Connection Error";
|
|
1388
1233
|
let description = apiMessage || `We could not load your request. Please check your connection and try again.`;
|
|
1389
|
-
let IconComponent =
|
|
1234
|
+
let IconComponent = import_core_free_icons6.ConfusedIcon;
|
|
1390
1235
|
if (isNotFoundError) {
|
|
1391
1236
|
title = "Oops its not your fault";
|
|
1392
1237
|
description = apiMessage || `We could not reach the ${envName} you just loaded. Our team has been notified.`;
|
|
@@ -1394,7 +1239,7 @@ var UniversalErrorView = ({
|
|
|
1394
1239
|
title = "Access Restricted";
|
|
1395
1240
|
description = apiMessage || `You have insufficient permissions to view this ${envName}. Please contact your administrator.`;
|
|
1396
1241
|
}
|
|
1397
|
-
return /* @__PURE__ */
|
|
1242
|
+
return /* @__PURE__ */ import_react21.default.createElement("div", { className: "flex flex-col items-center justify-center h-screen w-full px-4 animate-in fade-in duration-500" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "mb-4 flex justify-center" }, /* @__PURE__ */ import_react21.default.createElement(import_react22.HugeiconsIcon, { icon: IconComponent, size: 48, className: "text-neutral-300" })), /* @__PURE__ */ import_react21.default.createElement("h2", { className: "text-lg text-black tracking-tight " }, title), /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-xs mt-2 mb-8 text-neutral-500 max-w-sm text-center leading-relaxed" }, description), /* @__PURE__ */ import_react21.default.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-3 w-full justify-center sm:w-auto" }, isNotFoundError || isPermissionError ? /* @__PURE__ */ import_react21.default.createElement(
|
|
1398
1243
|
"button",
|
|
1399
1244
|
{
|
|
1400
1245
|
onClick: () => window.location.href = returnUrl,
|
|
@@ -1403,14 +1248,14 @@ var UniversalErrorView = ({
|
|
|
1403
1248
|
returnLabel
|
|
1404
1249
|
) : (
|
|
1405
1250
|
// Soft errors (Network timeouts) allow them to retry or optionally retreat
|
|
1406
|
-
/* @__PURE__ */
|
|
1251
|
+
/* @__PURE__ */ import_react21.default.createElement(import_react21.default.Fragment, null, envName.toLowerCase().includes("application") && /* @__PURE__ */ import_react21.default.createElement(
|
|
1407
1252
|
"button",
|
|
1408
1253
|
{
|
|
1409
1254
|
onClick: () => window.location.href = returnUrl,
|
|
1410
1255
|
className: "px-6 py-2 bg-transparent border border-neutral-200 text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full text-[11px] tracking-widest transition-colors w-full sm:w-auto outline-none "
|
|
1411
1256
|
},
|
|
1412
1257
|
"Back Home"
|
|
1413
|
-
), /* @__PURE__ */
|
|
1258
|
+
), /* @__PURE__ */ import_react21.default.createElement(
|
|
1414
1259
|
"button",
|
|
1415
1260
|
{
|
|
1416
1261
|
onClick: onRetry,
|
|
@@ -1425,11 +1270,11 @@ var UniversalErrorView = ({
|
|
|
1425
1270
|
};
|
|
1426
1271
|
|
|
1427
1272
|
// src/components/UniversalTransactionPage.tsx
|
|
1428
|
-
var
|
|
1429
|
-
var
|
|
1273
|
+
var import_react23 = __toESM(require("react"));
|
|
1274
|
+
var import_react24 = require("@hugeicons/react");
|
|
1430
1275
|
var import_react_hot_toast5 = __toESM(require("react-hot-toast"));
|
|
1431
|
-
var
|
|
1432
|
-
var PageSpinner2 = () => /* @__PURE__ */
|
|
1276
|
+
var import_core_free_icons7 = require("@hugeicons/core-free-icons");
|
|
1277
|
+
var PageSpinner2 = () => /* @__PURE__ */ import_react23.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react23.default.createElement(import_react24.HugeiconsIcon, { icon: import_core_free_icons7.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
1433
1278
|
var formatDate = (dateInput) => {
|
|
1434
1279
|
const d = new Date(dateInput);
|
|
1435
1280
|
const day = d.getDate();
|
|
@@ -1464,15 +1309,15 @@ var UniversalTransactionPage = ({
|
|
|
1464
1309
|
onReportTransaction,
|
|
1465
1310
|
onGenerateReceipt
|
|
1466
1311
|
}) => {
|
|
1467
|
-
const [selectedTransaction, setSelectedTransaction] = (0,
|
|
1468
|
-
const [isGeneratingReceipt, setIsGeneratingReceipt] = (0,
|
|
1469
|
-
const [localSearchQuery, setLocalSearchQuery] = (0,
|
|
1470
|
-
const [isTyping, setIsTyping] = (0,
|
|
1471
|
-
const [isDirectionModalOpen, setIsDirectionModalOpen] = (0,
|
|
1472
|
-
const [isTypeModalOpen, setIsTypeModalOpen] = (0,
|
|
1473
|
-
const directionDropdownRef = (0,
|
|
1474
|
-
const typeDropdownRef = (0,
|
|
1475
|
-
(0,
|
|
1312
|
+
const [selectedTransaction, setSelectedTransaction] = (0, import_react23.useState)(null);
|
|
1313
|
+
const [isGeneratingReceipt, setIsGeneratingReceipt] = (0, import_react23.useState)(false);
|
|
1314
|
+
const [localSearchQuery, setLocalSearchQuery] = (0, import_react23.useState)(searchQuery);
|
|
1315
|
+
const [isTyping, setIsTyping] = (0, import_react23.useState)(false);
|
|
1316
|
+
const [isDirectionModalOpen, setIsDirectionModalOpen] = (0, import_react23.useState)(false);
|
|
1317
|
+
const [isTypeModalOpen, setIsTypeModalOpen] = (0, import_react23.useState)(false);
|
|
1318
|
+
const directionDropdownRef = (0, import_react23.useRef)(null);
|
|
1319
|
+
const typeDropdownRef = (0, import_react23.useRef)(null);
|
|
1320
|
+
(0, import_react23.useEffect)(() => {
|
|
1476
1321
|
function handleClickOutside(event) {
|
|
1477
1322
|
if (directionDropdownRef.current && !directionDropdownRef.current.contains(event.target)) {
|
|
1478
1323
|
setIsDirectionModalOpen(false);
|
|
@@ -1484,7 +1329,7 @@ var UniversalTransactionPage = ({
|
|
|
1484
1329
|
document.addEventListener("mousedown", handleClickOutside);
|
|
1485
1330
|
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
1486
1331
|
}, []);
|
|
1487
|
-
(0,
|
|
1332
|
+
(0, import_react23.useEffect)(() => {
|
|
1488
1333
|
setIsTyping(true);
|
|
1489
1334
|
const handler = setTimeout(() => {
|
|
1490
1335
|
onSearchChange(localSearchQuery);
|
|
@@ -1492,7 +1337,7 @@ var UniversalTransactionPage = ({
|
|
|
1492
1337
|
}, 600);
|
|
1493
1338
|
return () => clearTimeout(handler);
|
|
1494
1339
|
}, [localSearchQuery, onSearchChange]);
|
|
1495
|
-
(0,
|
|
1340
|
+
(0, import_react23.useEffect)(() => {
|
|
1496
1341
|
if (searchQuery === "" && localSearchQuery !== "") {
|
|
1497
1342
|
setLocalSearchQuery("");
|
|
1498
1343
|
}
|
|
@@ -1514,63 +1359,75 @@ var UniversalTransactionPage = ({
|
|
|
1514
1359
|
setIsGeneratingReceipt(false);
|
|
1515
1360
|
}
|
|
1516
1361
|
};
|
|
1362
|
+
const handleCopyReference = async (reference) => {
|
|
1363
|
+
try {
|
|
1364
|
+
await navigator.clipboard.writeText(reference);
|
|
1365
|
+
import_react_hot_toast5.default.success("Copied");
|
|
1366
|
+
} catch {
|
|
1367
|
+
}
|
|
1368
|
+
};
|
|
1517
1369
|
const isListLoading = isLoading || isTyping;
|
|
1518
|
-
return /* @__PURE__ */
|
|
1370
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react23.default.createElement(ManagedToaster, null), !hideControls && /* @__PURE__ */ import_react23.default.createElement("div", { className: "flex flex-row flex-nowrap items-center justify-between gap-4 w-full" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "relative flex-1 min-w-0 max-w-full" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ import_react23.default.createElement(import_react24.HugeiconsIcon, { icon: import_core_free_icons7.Search01Icon, size: 16, className: "text-neutral-400" })), /* @__PURE__ */ import_react23.default.createElement(
|
|
1519
1371
|
"input",
|
|
1520
1372
|
{
|
|
1521
1373
|
type: "text",
|
|
1522
1374
|
placeholder: "Search reference or amount...",
|
|
1523
1375
|
value: localSearchQuery,
|
|
1524
1376
|
onChange: (e) => setLocalSearchQuery(e.target.value),
|
|
1525
|
-
className: "w-full pl-10 pr-4 py-2 bg-white
|
|
1377
|
+
className: "w-full pl-10 pr-4 py-2 bg-white rounded-full text-[13px] text-black placeholder-neutral-400 outline-none transition-colors focus:border-black"
|
|
1526
1378
|
}
|
|
1527
|
-
)), /* @__PURE__ */
|
|
1379
|
+
)), /* @__PURE__ */ import_react23.default.createElement("div", { className: "flex items-center gap-3 w-auto pb-0 shrink-0" }, /* @__PURE__ */ import_react23.default.createElement(
|
|
1528
1380
|
"button",
|
|
1529
1381
|
{
|
|
1530
1382
|
onClick: () => setIsDirectionModalOpen(true),
|
|
1531
|
-
|
|
1532
|
-
className: "flex items-center justify-center bg-white w-10 h-10 rounded-full text-neutral-500 hover:text-black transition-colors outline-none"
|
|
1383
|
+
className: "flex items-center justify-center bg-white w-9 h-9 rounded-full text-neutral-500 hover:text-black transition-colors outline-none"
|
|
1533
1384
|
},
|
|
1534
|
-
/* @__PURE__ */
|
|
1535
|
-
), /* @__PURE__ */
|
|
1385
|
+
/* @__PURE__ */ import_react23.default.createElement(import_react24.HugeiconsIcon, { icon: import_core_free_icons7.SearchList02Icon, size: 16 })
|
|
1386
|
+
), /* @__PURE__ */ import_react23.default.createElement(
|
|
1536
1387
|
"button",
|
|
1537
1388
|
{
|
|
1538
1389
|
onClick: () => setIsTypeModalOpen(true),
|
|
1539
|
-
|
|
1540
|
-
className: "flex items-center justify-center bg-white w-10 h-10 rounded-full text-neutral-500 hover:text-black transition-colors outline-none"
|
|
1390
|
+
className: "flex items-center justify-center bg-white w-9 h-9 rounded-full text-neutral-500 hover:text-black transition-colors outline-none"
|
|
1541
1391
|
},
|
|
1542
|
-
/* @__PURE__ */
|
|
1543
|
-
))), /* @__PURE__ */
|
|
1392
|
+
/* @__PURE__ */ import_react23.default.createElement(import_react24.HugeiconsIcon, { icon: import_core_free_icons7.ListSettingIcon, size: 16 })
|
|
1393
|
+
))), /* @__PURE__ */ import_react23.default.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-white w-full" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, /* @__PURE__ */ import_react23.default.createElement("div", null, /* @__PURE__ */ import_react23.default.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, headerTitle), headerDescription && /* @__PURE__ */ import_react23.default.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription))), /* @__PURE__ */ import_react23.default.createElement("div", { className: "w-full overflow-hidden" }, isListLoading ? /* @__PURE__ */ import_react23.default.createElement(PageSpinner2, null) : /* @__PURE__ */ import_react23.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react23.default.createElement("div", null, transactions.length === 0 ? /* @__PURE__ */ import_react23.default.createElement("p", { className: "text-xs text-neutral-400 py-6 text-center" }, "No transactions found") : transactions.map((tx) => /* @__PURE__ */ import_react23.default.createElement(
|
|
1544
1394
|
"div",
|
|
1545
1395
|
{
|
|
1546
1396
|
key: tx.id,
|
|
1547
1397
|
onClick: () => setSelectedTransaction(tx),
|
|
1548
1398
|
className: "flex items-center justify-between py-4 hover:bg-neutral-50 transition-colors cursor-pointer group min-w-0 px-3 -mx-3 rounded-xl"
|
|
1549
1399
|
},
|
|
1550
|
-
/* @__PURE__ */
|
|
1551
|
-
/* @__PURE__ */
|
|
1552
|
-
))), !hidePagination && /* @__PURE__ */
|
|
1400
|
+
/* @__PURE__ */ import_react23.default.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: `w-10 h-10 shrink-0 rounded-full flex items-center justify-center bg-neutral-100 text-black` }, /* @__PURE__ */ import_react23.default.createElement(import_react24.HugeiconsIcon, { icon: tx.direction === "CREDIT" ? import_core_free_icons7.ArrowDownRight01Icon : import_core_free_icons7.ArrowUpRight01Icon, size: 18 })), /* @__PURE__ */ import_react23.default.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-1" }, /* @__PURE__ */ import_react23.default.createElement("p", { className: "text-[13px] text-black truncate" }, getDisplayName(tx)), /* @__PURE__ */ import_react23.default.createElement("p", { className: `text-[12px] text-neutral-500 truncate transition-all duration-300 ${hideBalanceAmounts ? "blur-sm opacity-40 select-none" : ""}` }, tx.direction === "CREDIT" ? "+" : "-", tx.amount, " ", tx.currency))),
|
|
1401
|
+
/* @__PURE__ */ import_react23.default.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ import_react23.default.createElement("span", { className: "text-[11px] text-neutral-400" }, formatDate(tx.createdAt)), /* @__PURE__ */ import_react23.default.createElement("span", { className: "text-[11px] text-neutral-400 capitalize" }, tx.direction.toLowerCase()))
|
|
1402
|
+
))), !hidePagination && /* @__PURE__ */ import_react23.default.createElement("div", { className: "flex items-center justify-between pt-6 mt-2 " }, /* @__PURE__ */ import_react23.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", totalPages === 0 ? 1 : totalPages), /* @__PURE__ */ import_react23.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react23.default.createElement(
|
|
1553
1403
|
"button",
|
|
1554
1404
|
{
|
|
1555
1405
|
onClick: () => onPageChange(currentPage - 1),
|
|
1556
1406
|
disabled: currentPage <= 1 || isListLoading,
|
|
1557
1407
|
className: "p-2 bg-white border border-neutral-200 rounded-full text-black hover:bg-neutral-50 disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none"
|
|
1558
1408
|
},
|
|
1559
|
-
/* @__PURE__ */
|
|
1560
|
-
), /* @__PURE__ */
|
|
1409
|
+
/* @__PURE__ */ import_react23.default.createElement(import_react24.HugeiconsIcon, { icon: import_core_free_icons7.ArrowLeft01Icon, size: 14 })
|
|
1410
|
+
), /* @__PURE__ */ import_react23.default.createElement(
|
|
1561
1411
|
"button",
|
|
1562
1412
|
{
|
|
1563
1413
|
onClick: () => onPageChange(currentPage + 1),
|
|
1564
1414
|
disabled: currentPage >= totalPages || isListLoading || totalPages === 0,
|
|
1565
1415
|
className: "p-2 bg-white border border-neutral-200 rounded-full text-black hover:bg-neutral-50 disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none"
|
|
1566
1416
|
},
|
|
1567
|
-
/* @__PURE__ */
|
|
1568
|
-
)))))), selectedTransaction && /* @__PURE__ */
|
|
1417
|
+
/* @__PURE__ */ import_react23.default.createElement(import_react24.HugeiconsIcon, { icon: import_core_free_icons7.ArrowRight01Icon, size: 14 })
|
|
1418
|
+
)))))), selectedTransaction && /* @__PURE__ */ import_react23.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => setSelectedTransaction(null) }), /* @__PURE__ */ import_react23.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 max-h-[90vh]" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ import_react23.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Details"), /* @__PURE__ */ import_react23.default.createElement("button", { onClick: () => setSelectedTransaction(null), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react23.default.createElement(import_react24.HugeiconsIcon, { icon: import_core_free_icons7.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react23.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "flex flex-col items-center justify-center mb-4" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: `w-12 h-12 rounded-full flex items-center justify-center mb-4 bg-neutral-100 text-black` }, /* @__PURE__ */ import_react23.default.createElement(import_react24.HugeiconsIcon, { icon: selectedTransaction.direction === "CREDIT" ? import_core_free_icons7.ArrowDownRight01Icon : import_core_free_icons7.ArrowUpRight01Icon, size: 20 })), /* @__PURE__ */ import_react23.default.createElement("h2", { className: `text-2xl text-black mb-2 transition-all duration-300 ${hideBalanceAmounts ? "blur-[6px] opacity-40 select-none" : ""}` }, selectedTransaction.direction === "CREDIT" ? "+" : "-", selectedTransaction.amount, " ", selectedTransaction.currency), /* @__PURE__ */ import_react23.default.createElement("span", { className: "text-[9px] tracking-widest text-neutral-500 px-4 py-1.5 rounded-full bg-neutral-50" }, selectedTransaction.status)), /* @__PURE__ */ import_react23.default.createElement("div", { className: "grid grid-cols-1 gap-y-8 gap-x-4 mb-10 mt-6" }, /* @__PURE__ */ import_react23.default.createElement("div", null, /* @__PURE__ */ import_react23.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Reference ID"), /* @__PURE__ */ import_react23.default.createElement("div", { className: "flex items-center gap-2 min-w-0" }, /* @__PURE__ */ import_react23.default.createElement("span", { className: "text-[13px] text-black truncate min-w-0 block" }, selectedTransaction.reference), /* @__PURE__ */ import_react23.default.createElement(
|
|
1419
|
+
"button",
|
|
1420
|
+
{
|
|
1421
|
+
onClick: () => handleCopyReference(selectedTransaction.reference),
|
|
1422
|
+
className: "text-neutral-400 hover:text-black transition-colors outline-none"
|
|
1423
|
+
},
|
|
1424
|
+
/* @__PURE__ */ import_react23.default.createElement(import_react24.HugeiconsIcon, { icon: import_core_free_icons7.Copy01Icon, size: 14 })
|
|
1425
|
+
))), /* @__PURE__ */ import_react23.default.createElement("div", null, /* @__PURE__ */ import_react23.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Date & Time"), /* @__PURE__ */ import_react23.default.createElement("span", { className: "text-[13px] text-black" }, formatDate(selectedTransaction.createdAt), " at ", formatTime(selectedTransaction.createdAt))), /* @__PURE__ */ import_react23.default.createElement("div", null, /* @__PURE__ */ import_react23.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Transaction Type"), /* @__PURE__ */ import_react23.default.createElement("span", { className: "text-[13px] text-black capitalize" }, selectedTransaction.type.replace("_", " ").toLowerCase())), /* @__PURE__ */ import_react23.default.createElement("div", null, /* @__PURE__ */ import_react23.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Flow Direction"), /* @__PURE__ */ import_react23.default.createElement("span", { className: "text-[13px] text-black capitalize" }, selectedTransaction.direction.toLowerCase())), selectedTransaction.metadata?.fromAddress && selectedTransaction.metadata?.toAddress && /* @__PURE__ */ import_react23.default.createElement("div", null, /* @__PURE__ */ import_react23.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Transfer Route"), /* @__PURE__ */ import_react23.default.createElement("div", { className: "flex items-center gap-2 text-[13px] text-black" }, /* @__PURE__ */ import_react23.default.createElement("span", { className: "truncate " }, truncateAddress(String(selectedTransaction.metadata.fromAddress))), /* @__PURE__ */ import_react23.default.createElement("span", { className: "text-neutral-400" }, "\u2192"), /* @__PURE__ */ import_react23.default.createElement("span", { className: "truncate " }, truncateAddress(String(selectedTransaction.metadata.toAddress))))), selectedTransaction.metadata && Object.entries(selectedTransaction.metadata).map(([key, value]) => {
|
|
1569
1426
|
if (key === "fromAddress" || key === "toAddress") return null;
|
|
1570
1427
|
if (value === null || value === void 0 || typeof value === "object") return null;
|
|
1571
1428
|
const formattedKey = key.replace(/([A-Z])/g, " $1").replace(/^./, (str) => str.toUpperCase());
|
|
1572
|
-
return /* @__PURE__ */
|
|
1573
|
-
})), /* @__PURE__ */
|
|
1429
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { key }, /* @__PURE__ */ import_react23.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, formattedKey), /* @__PURE__ */ import_react23.default.createElement("span", { className: "text-[13px] text-black break-all" }, String(value)));
|
|
1430
|
+
})), /* @__PURE__ */ import_react23.default.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ import_react23.default.createElement(
|
|
1574
1431
|
ThreeDActionButton,
|
|
1575
1432
|
{
|
|
1576
1433
|
onClick: handleGenerateReceipt,
|
|
@@ -1578,14 +1435,14 @@ var UniversalTransactionPage = ({
|
|
|
1578
1435
|
className: "w-full py-3 text-[14px]"
|
|
1579
1436
|
},
|
|
1580
1437
|
"Generate Receipt"
|
|
1581
|
-
), /* @__PURE__ */
|
|
1438
|
+
), /* @__PURE__ */ import_react23.default.createElement(
|
|
1582
1439
|
"button",
|
|
1583
1440
|
{
|
|
1584
1441
|
onClick: () => onReportTransaction && onReportTransaction(selectedTransaction),
|
|
1585
1442
|
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] tracking-wide mt-2"
|
|
1586
1443
|
},
|
|
1587
1444
|
"Report Transaction"
|
|
1588
|
-
), selectedTransaction.type === "WALLET_TRANSACTION" && /* @__PURE__ */
|
|
1445
|
+
), selectedTransaction.type === "WALLET_TRANSACTION" && /* @__PURE__ */ import_react23.default.createElement(
|
|
1589
1446
|
"a",
|
|
1590
1447
|
{
|
|
1591
1448
|
href: `https://basescan.org/tx/${selectedTransaction.reference}`,
|
|
@@ -1594,7 +1451,7 @@ var UniversalTransactionPage = ({
|
|
|
1594
1451
|
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] tracking-wide mt-2"
|
|
1595
1452
|
},
|
|
1596
1453
|
"View in block explorer"
|
|
1597
|
-
))))), isDirectionModalOpen && /* @__PURE__ */
|
|
1454
|
+
))))), isDirectionModalOpen && /* @__PURE__ */ import_react23.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => setIsDirectionModalOpen(false) }), /* @__PURE__ */ import_react23.default.createElement("div", { ref: directionDropdownRef, className: "relative w-72 bg-white shadow-2xl rounded-2xl flex flex-col items-center overflow-hidden animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "p-6 text-center w-full mb-2" }, /* @__PURE__ */ import_react23.default.createElement("h3", { className: "text-[14px] text-black tracking-tight" }, "Payment Type")), /* @__PURE__ */ import_react23.default.createElement("div", { className: "w-full flex flex-col pl-2 pr-2 gap-1" }, ["ALL", "CREDIT", "DEBIT"].map((option) => /* @__PURE__ */ import_react23.default.createElement(
|
|
1598
1455
|
"button",
|
|
1599
1456
|
{
|
|
1600
1457
|
key: option,
|
|
@@ -1604,19 +1461,19 @@ var UniversalTransactionPage = ({
|
|
|
1604
1461
|
},
|
|
1605
1462
|
className: `text-left px-4 py-3 text-[11px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none ${activeDirectionFilter === option ? "bg-neutral-100 text-black " : "text-neutral-500 hover:bg-neutral-50 hover:text-black"}`
|
|
1606
1463
|
},
|
|
1607
|
-
/* @__PURE__ */
|
|
1608
|
-
))), /* @__PURE__ */
|
|
1464
|
+
/* @__PURE__ */ import_react23.default.createElement("span", { className: "truncate pr-2" }, option.charAt(0).toUpperCase() + option.slice(1).toLowerCase())
|
|
1465
|
+
))), /* @__PURE__ */ import_react23.default.createElement("div", { className: "w-full flex mt-2 " }, /* @__PURE__ */ import_react23.default.createElement(
|
|
1609
1466
|
"button",
|
|
1610
1467
|
{
|
|
1611
1468
|
onClick: () => setIsDirectionModalOpen(false),
|
|
1612
1469
|
className: "w-full py-4 text-[13px] text-neutral-500 hover:text-black transition-colors outline-none "
|
|
1613
1470
|
},
|
|
1614
1471
|
"Cancel"
|
|
1615
|
-
)))), isTypeModalOpen && /* @__PURE__ */
|
|
1472
|
+
)))), isTypeModalOpen && /* @__PURE__ */ import_react23.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => setIsTypeModalOpen(false) }), /* @__PURE__ */ import_react23.default.createElement("div", { ref: typeDropdownRef, className: "relative w-72 bg-white shadow-2xl rounded-2xl flex flex-col items-center overflow-hidden animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "p-6 text-center w-full mb-2" }, /* @__PURE__ */ import_react23.default.createElement("h3", { className: "text-[14px] text-black tracking-tight" }, "Transactions Type")), /* @__PURE__ */ import_react23.default.createElement("div", { className: "w-full flex flex-col pl-2 pr-2 gap-1" }, [
|
|
1616
1473
|
{ label: "All Transactions", value: "ALL" },
|
|
1617
1474
|
{ label: "Wallet Transactions", value: "WALLET_TRANSACTION" },
|
|
1618
1475
|
{ label: "Card Transactions", value: "CARD_TRANSACTION" }
|
|
1619
|
-
].map((option) => /* @__PURE__ */
|
|
1476
|
+
].map((option) => /* @__PURE__ */ import_react23.default.createElement(
|
|
1620
1477
|
"button",
|
|
1621
1478
|
{
|
|
1622
1479
|
key: option.value,
|
|
@@ -1626,8 +1483,8 @@ var UniversalTransactionPage = ({
|
|
|
1626
1483
|
},
|
|
1627
1484
|
className: `text-left px-4 py-3 text-[11px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none ${activeTypeFilter === option.value ? "bg-neutral-100 text-black " : "text-neutral-500 hover:bg-neutral-50 hover:text-black"}`
|
|
1628
1485
|
},
|
|
1629
|
-
/* @__PURE__ */
|
|
1630
|
-
))), /* @__PURE__ */
|
|
1486
|
+
/* @__PURE__ */ import_react23.default.createElement("span", { className: "truncate pr-2" }, option.label.charAt(0).toUpperCase() + option.label.slice(1).toLowerCase())
|
|
1487
|
+
))), /* @__PURE__ */ import_react23.default.createElement("div", { className: "w-full flex mt-2 " }, /* @__PURE__ */ import_react23.default.createElement(
|
|
1631
1488
|
"button",
|
|
1632
1489
|
{
|
|
1633
1490
|
onClick: () => setIsTypeModalOpen(false),
|
|
@@ -1638,9 +1495,9 @@ var UniversalTransactionPage = ({
|
|
|
1638
1495
|
};
|
|
1639
1496
|
|
|
1640
1497
|
// src/components/UniversalHomeView.tsx
|
|
1641
|
-
var
|
|
1642
|
-
var
|
|
1643
|
-
var
|
|
1498
|
+
var import_react25 = __toESM(require("react"));
|
|
1499
|
+
var import_react26 = require("@hugeicons/react");
|
|
1500
|
+
var import_core_free_icons8 = require("@hugeicons/core-free-icons");
|
|
1644
1501
|
var UniversalHomeView = ({
|
|
1645
1502
|
balanceLabel = "Your Balance",
|
|
1646
1503
|
balanceAmount,
|
|
@@ -1649,9 +1506,9 @@ var UniversalHomeView = ({
|
|
|
1649
1506
|
secondaryAction,
|
|
1650
1507
|
transactionsProps
|
|
1651
1508
|
}) => {
|
|
1652
|
-
const [displayAmount, setDisplayAmount] = (0,
|
|
1653
|
-
const [isBalanceHidden, setIsBalanceHidden] = (0,
|
|
1654
|
-
(0,
|
|
1509
|
+
const [displayAmount, setDisplayAmount] = (0, import_react25.useState)("0.00");
|
|
1510
|
+
const [isBalanceHidden, setIsBalanceHidden] = (0, import_react25.useState)(false);
|
|
1511
|
+
(0, import_react25.useEffect)(() => {
|
|
1655
1512
|
const target = parseFloat(balanceAmount.replace(/,/g, ""));
|
|
1656
1513
|
if (isNaN(target)) {
|
|
1657
1514
|
setDisplayAmount(balanceAmount);
|
|
@@ -1680,29 +1537,29 @@ var UniversalHomeView = ({
|
|
|
1680
1537
|
requestAnimationFrame(step);
|
|
1681
1538
|
}, [balanceAmount]);
|
|
1682
1539
|
const [intPart, decPart] = displayAmount.includes(".") ? displayAmount.split(".") : [displayAmount, "00"];
|
|
1683
|
-
return /* @__PURE__ */
|
|
1540
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "relative flex items-start justify-between w-full pt-4 pb-8" }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "flex flex-col items-start text-left z-10 w-full" }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "flex items-center gap-2 mb-1.5" }, /* @__PURE__ */ import_react25.default.createElement("span", { className: "text-[12px] sm:text-[13px] text-neutral-500" }, balanceLabel), /* @__PURE__ */ import_react25.default.createElement(
|
|
1684
1541
|
"button",
|
|
1685
1542
|
{
|
|
1686
1543
|
onClick: () => setIsBalanceHidden(!isBalanceHidden),
|
|
1687
1544
|
className: "text-neutral-400 hover:text-black transition-colors outline-none"
|
|
1688
1545
|
},
|
|
1689
|
-
/* @__PURE__ */
|
|
1690
|
-
)), /* @__PURE__ */
|
|
1546
|
+
/* @__PURE__ */ import_react25.default.createElement(import_react26.HugeiconsIcon, { icon: isBalanceHidden ? import_core_free_icons8.ViewIcon : import_core_free_icons8.ViewOffSlashIcon, size: 14 })
|
|
1547
|
+
)), /* @__PURE__ */ import_react25.default.createElement("h1", { className: `text-3xl sm:text-4xl md:text-5xl text-black tracking-tight mb-5 tabular-nums flex items-baseline transition-all duration-300 ${isBalanceHidden ? "blur-sm opacity-40 select-none" : ""}` }, /* @__PURE__ */ import_react25.default.createElement("span", { className: "text-2xl text-neutral-400 mr-1" }, balanceCurrency), intPart, /* @__PURE__ */ import_react25.default.createElement("span", { className: "text-xl sm:text-2xl text-neutral-400" }, ".", decPart)), /* @__PURE__ */ import_react25.default.createElement("div", { className: "flex items-center gap-3" }, primaryAction && /* @__PURE__ */ import_react25.default.createElement(
|
|
1691
1548
|
ThreeDActionButton,
|
|
1692
1549
|
{
|
|
1693
1550
|
onClick: primaryAction.onClick,
|
|
1694
1551
|
className: "px-6 py-2.5 sm:px-8 sm:py-2.5"
|
|
1695
1552
|
},
|
|
1696
|
-
/* @__PURE__ */
|
|
1697
|
-
), secondaryAction && /* @__PURE__ */
|
|
1553
|
+
/* @__PURE__ */ import_react25.default.createElement("span", { className: "flex items-center gap-1.5 text-[13px] tracking-wide " }, primaryAction.label, primaryAction.icon && /* @__PURE__ */ import_react25.default.createElement(import_react26.HugeiconsIcon, { icon: primaryAction.icon, size: 16 }))
|
|
1554
|
+
), secondaryAction && /* @__PURE__ */ import_react25.default.createElement(
|
|
1698
1555
|
"button",
|
|
1699
1556
|
{
|
|
1700
1557
|
onClick: secondaryAction.onClick,
|
|
1701
|
-
className: "flex items-center gap-1.5 px-6 py-2.
|
|
1558
|
+
className: "flex items-center gap-1.5 px-6 py-2.25 sm:px-8 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 transition-colors outline-none"
|
|
1702
1559
|
},
|
|
1703
|
-
/* @__PURE__ */
|
|
1704
|
-
secondaryAction.icon && /* @__PURE__ */
|
|
1705
|
-
)))), /* @__PURE__ */
|
|
1560
|
+
/* @__PURE__ */ import_react25.default.createElement("span", { className: "text-[13px] tracking-wide " }, secondaryAction.label),
|
|
1561
|
+
secondaryAction.icon && /* @__PURE__ */ import_react25.default.createElement(import_react26.HugeiconsIcon, { icon: secondaryAction.icon, size: 16 })
|
|
1562
|
+
)))), /* @__PURE__ */ import_react25.default.createElement("div", { className: "w-full mt-2" }, /* @__PURE__ */ import_react25.default.createElement(
|
|
1706
1563
|
UniversalTransactionPage,
|
|
1707
1564
|
{
|
|
1708
1565
|
...transactionsProps,
|
|
@@ -1714,14 +1571,14 @@ var UniversalHomeView = ({
|
|
|
1714
1571
|
};
|
|
1715
1572
|
|
|
1716
1573
|
// src/components/UniversalWalletPage.tsx
|
|
1717
|
-
var
|
|
1574
|
+
var import_react27 = __toESM(require("react"));
|
|
1718
1575
|
var import_react_hot_toast6 = __toESM(require("react-hot-toast"));
|
|
1719
|
-
var
|
|
1720
|
-
var
|
|
1721
|
-
var PageSpinner3 = () => /* @__PURE__ */
|
|
1576
|
+
var import_react28 = require("@hugeicons/react");
|
|
1577
|
+
var import_core_free_icons9 = require("@hugeicons/core-free-icons");
|
|
1578
|
+
var PageSpinner3 = () => /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react27.default.createElement(import_react28.HugeiconsIcon, { icon: import_core_free_icons9.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
1722
1579
|
var WalletLogo = ({ src, alt, sizeClass = "w-10 h-10" }) => {
|
|
1723
|
-
const [isLoaded, setIsLoaded] = (0,
|
|
1724
|
-
return /* @__PURE__ */
|
|
1580
|
+
const [isLoaded, setIsLoaded] = (0, import_react27.useState)(false);
|
|
1581
|
+
return /* @__PURE__ */ import_react27.default.createElement("div", { className: `relative shrink-0 rounded-full bg-neutral-100 flex items-center justify-center overflow-hidden ${sizeClass}` }, !isLoaded && /* @__PURE__ */ import_react27.default.createElement(import_react28.HugeiconsIcon, { icon: import_core_free_icons9.Loading03Icon, size: 16, className: "animate-spin text-neutral-400 absolute" }), /* @__PURE__ */ import_react27.default.createElement(
|
|
1725
1582
|
"img",
|
|
1726
1583
|
{
|
|
1727
1584
|
src,
|
|
@@ -1743,8 +1600,8 @@ var UniversalWalletPage = ({
|
|
|
1743
1600
|
onDownloadPayId,
|
|
1744
1601
|
onCopyAddress
|
|
1745
1602
|
}) => {
|
|
1746
|
-
const [selectedWallet, setSelectedWallet] = (0,
|
|
1747
|
-
const [localSearchQuery, setLocalSearchQuery] = (0,
|
|
1603
|
+
const [selectedWallet, setSelectedWallet] = (0, import_react27.useState)(null);
|
|
1604
|
+
const [localSearchQuery, setLocalSearchQuery] = (0, import_react27.useState)("");
|
|
1748
1605
|
const filteredWallets = wallets.filter((wallet) => {
|
|
1749
1606
|
const q = localSearchQuery.toLowerCase();
|
|
1750
1607
|
return wallet.name.toLowerCase().includes(q) || wallet.currency.toLowerCase().includes(q) || wallet.network.toLowerCase().includes(q);
|
|
@@ -1757,7 +1614,7 @@ var UniversalWalletPage = ({
|
|
|
1757
1614
|
}
|
|
1758
1615
|
import_react_hot_toast6.default.success("Address copied to clipboard");
|
|
1759
1616
|
};
|
|
1760
|
-
return /* @__PURE__ */
|
|
1617
|
+
return /* @__PURE__ */ import_react27.default.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react27.default.createElement(ManagedToaster, null), !hideControls && /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex flex-col sm:flex-row items-center justify-between gap-4 w-full" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "relative w-full sm:w-96" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ import_react27.default.createElement(import_react28.HugeiconsIcon, { icon: import_core_free_icons9.Search01Icon, size: 16, className: "text-neutral-400" })), /* @__PURE__ */ import_react27.default.createElement(
|
|
1761
1618
|
"input",
|
|
1762
1619
|
{
|
|
1763
1620
|
type: "text",
|
|
@@ -1766,16 +1623,16 @@ var UniversalWalletPage = ({
|
|
|
1766
1623
|
onChange: (e) => setLocalSearchQuery(e.target.value),
|
|
1767
1624
|
className: "w-full pl-10 pr-4 py-2 bg-white rounded-full text-[13px] text-black placeholder-neutral-400 outline-none transition-all duration-300 focus:border-black"
|
|
1768
1625
|
}
|
|
1769
|
-
))), /* @__PURE__ */
|
|
1626
|
+
))), /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-white w-full" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, /* @__PURE__ */ import_react27.default.createElement("div", null, /* @__PURE__ */ import_react27.default.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, headerTitle), headerDescription && /* @__PURE__ */ import_react27.default.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription))), /* @__PURE__ */ import_react27.default.createElement("div", { className: "w-full overflow-hidden" }, isLoading ? /* @__PURE__ */ import_react27.default.createElement(PageSpinner3, null) : /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react27.default.createElement("div", null, filteredWallets.length === 0 ? /* @__PURE__ */ import_react27.default.createElement("p", { className: "text-xs text-neutral-400 py-6 text-center" }, "No wallets found") : filteredWallets.map((wallet) => /* @__PURE__ */ import_react27.default.createElement(
|
|
1770
1627
|
"div",
|
|
1771
1628
|
{
|
|
1772
1629
|
key: wallet.id,
|
|
1773
1630
|
onClick: () => setSelectedWallet(wallet),
|
|
1774
1631
|
className: "flex items-center justify-between py-4 hover:bg-neutral-50 transition-colors cursor-pointer group min-w-0 px-3 -mx-3 rounded-xl"
|
|
1775
1632
|
},
|
|
1776
|
-
/* @__PURE__ */
|
|
1777
|
-
/* @__PURE__ */
|
|
1778
|
-
)))))), selectedWallet && /* @__PURE__ */
|
|
1633
|
+
/* @__PURE__ */ import_react27.default.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react27.default.createElement(WalletLogo, { src: wallet.logoSrc, alt: wallet.name }), /* @__PURE__ */ import_react27.default.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-1" }, /* @__PURE__ */ import_react27.default.createElement("p", { className: "text-[13px] text-black truncate " }, wallet.name), /* @__PURE__ */ import_react27.default.createElement("p", { className: `text-[13px] text-neutral-500 truncate transition-all duration-300 ${hideBalanceAmounts ? "blur-sm opacity-40 select-none" : ""}` }, wallet.balance, " ", wallet.currency))),
|
|
1634
|
+
/* @__PURE__ */ import_react27.default.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-[10px] tracking-wide text-neutral-600 bg-neutral-100 px-2.5 py-1 rounded-full " }, wallet.network))
|
|
1635
|
+
)))))), selectedWallet && /* @__PURE__ */ import_react27.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => setSelectedWallet(null) }), /* @__PURE__ */ import_react27.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 max-h-[90vh]" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ import_react27.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Wallet Details"), /* @__PURE__ */ import_react27.default.createElement("button", { onClick: () => setSelectedWallet(null), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react27.default.createElement(import_react28.HugeiconsIcon, { icon: import_core_free_icons9.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-6" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex flex-col items-center justify-center mb-6" }, /* @__PURE__ */ import_react27.default.createElement(WalletLogo, { src: selectedWallet.logoSrc, alt: selectedWallet.name, sizeClass: "w-14 h-14 mb-4" }), /* @__PURE__ */ import_react27.default.createElement("h2", { className: `text-2xl text-black mb-2 transition-all duration-300 ${hideBalanceAmounts ? "blur-[6px] opacity-40 select-none" : ""}` }, selectedWallet.balance, " ", selectedWallet.currency), /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-[9px] tracking-widest text-neutral-500 px-4 py-1.5 rounded-full border border-neutral-200 uppercase mt-1 " }, selectedWallet.network, " NETWORK")), renderQrCode && /* @__PURE__ */ import_react27.default.createElement("div", { className: "w-full flex justify-center mb-6 mix-blend-multiply" }, renderQrCode(selectedWallet)), /* @__PURE__ */ import_react27.default.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-10" }, /* @__PURE__ */ import_react27.default.createElement("div", null, /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Address"), /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-[13px] text-black break-all " }, selectedWallet.address)), /* @__PURE__ */ import_react27.default.createElement("div", null, /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Name"), /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-[13px] text-black" }, selectedWallet.name))), /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ import_react27.default.createElement(
|
|
1779
1636
|
ThreeDActionButton,
|
|
1780
1637
|
{
|
|
1781
1638
|
onClick: () => onDownloadPayId && onDownloadPayId(selectedWallet),
|
|
@@ -1783,7 +1640,7 @@ var UniversalWalletPage = ({
|
|
|
1783
1640
|
className: "w-full py-3 text-[13px]"
|
|
1784
1641
|
},
|
|
1785
1642
|
"Generate Statement"
|
|
1786
|
-
), /* @__PURE__ */
|
|
1643
|
+
), /* @__PURE__ */ import_react27.default.createElement(
|
|
1787
1644
|
"button",
|
|
1788
1645
|
{
|
|
1789
1646
|
onClick: () => handleCopy(selectedWallet),
|
|
@@ -1796,12 +1653,53 @@ var UniversalWalletPage = ({
|
|
|
1796
1653
|
// src/components/UniversalCardPage.tsx
|
|
1797
1654
|
var import_react35 = __toESM(require("react"));
|
|
1798
1655
|
var import_react36 = require("@hugeicons/react");
|
|
1799
|
-
var
|
|
1656
|
+
var import_core_free_icons13 = require("@hugeicons/core-free-icons");
|
|
1657
|
+
|
|
1658
|
+
// src/components/ConfirmationDialog.tsx
|
|
1659
|
+
var import_react29 = __toESM(require("react"));
|
|
1660
|
+
var import_react30 = require("@hugeicons/react");
|
|
1661
|
+
var import_core_free_icons10 = require("@hugeicons/core-free-icons");
|
|
1662
|
+
var ConfirmationDialog = ({
|
|
1663
|
+
isOpen,
|
|
1664
|
+
title,
|
|
1665
|
+
message,
|
|
1666
|
+
confirmText = "Confirm",
|
|
1667
|
+
cancelText = "Cancel",
|
|
1668
|
+
isProcessing = false,
|
|
1669
|
+
isDestructive = true,
|
|
1670
|
+
onClose,
|
|
1671
|
+
onConfirm
|
|
1672
|
+
}) => {
|
|
1673
|
+
if (!isOpen) return null;
|
|
1674
|
+
return /* @__PURE__ */ import_react29.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
1675
|
+
"div",
|
|
1676
|
+
{
|
|
1677
|
+
className: "absolute inset-0 bg-black/40 ",
|
|
1678
|
+
onClick: () => !isProcessing && onClose()
|
|
1679
|
+
}
|
|
1680
|
+
), /* @__PURE__ */ import_react29.default.createElement("div", { className: "relative w-72 bg-white rounded-2xl flex flex-col items-center overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "p-6 pb-4 text-center w-full" }, /* @__PURE__ */ import_react29.default.createElement("h3", { className: "text-[17px] text-black tracking-tight mb-2" }, title), /* @__PURE__ */ import_react29.default.createElement("p", { className: "text-[12px] text-neutral-500 leading-relaxed px-2" }, message)), /* @__PURE__ */ import_react29.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
1681
|
+
"button",
|
|
1682
|
+
{
|
|
1683
|
+
onClick: onClose,
|
|
1684
|
+
disabled: isProcessing,
|
|
1685
|
+
className: "flex-1 py-4 text-[14px] text-neutral-500 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none "
|
|
1686
|
+
},
|
|
1687
|
+
cancelText
|
|
1688
|
+
), /* @__PURE__ */ import_react29.default.createElement(
|
|
1689
|
+
"button",
|
|
1690
|
+
{
|
|
1691
|
+
onClick: onConfirm,
|
|
1692
|
+
disabled: isProcessing,
|
|
1693
|
+
className: `flex-1 py-4 text-[13px] transition-colors disabled:opacity-50 flex justify-center items-center outline-none ${isDestructive ? "text-red-500 hover:bg-red-50" : "text-black hover:bg-neutral-50"}`
|
|
1694
|
+
},
|
|
1695
|
+
isProcessing ? /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.Loading03Icon, className: "animate-spin", size: 18 }) : confirmText
|
|
1696
|
+
))));
|
|
1697
|
+
};
|
|
1800
1698
|
|
|
1801
1699
|
// src/components/PinDialerBottomSheet.tsx
|
|
1802
1700
|
var import_react31 = __toESM(require("react"));
|
|
1803
1701
|
var import_react32 = require("@hugeicons/react");
|
|
1804
|
-
var
|
|
1702
|
+
var import_core_free_icons11 = require("@hugeicons/core-free-icons");
|
|
1805
1703
|
var PinDialerBottomSheet = ({
|
|
1806
1704
|
isOpen,
|
|
1807
1705
|
title = "Action Required",
|
|
@@ -1836,7 +1734,7 @@ var PinDialerBottomSheet = ({
|
|
|
1836
1734
|
if (!isVerifying) onClose();
|
|
1837
1735
|
}
|
|
1838
1736
|
}
|
|
1839
|
-
), /* @__PURE__ */ import_react31.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_react31.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ import_react31.default.createElement("h3", { className: "text-[16px] text-black
|
|
1737
|
+
), /* @__PURE__ */ import_react31.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_react31.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ import_react31.default.createElement("h3", { className: "text-[16px] text-black tracking-tight" }, title), /* @__PURE__ */ import_react31.default.createElement(
|
|
1840
1738
|
"button",
|
|
1841
1739
|
{
|
|
1842
1740
|
onClick: () => {
|
|
@@ -1844,14 +1742,14 @@ var PinDialerBottomSheet = ({
|
|
|
1844
1742
|
},
|
|
1845
1743
|
className: "text-neutral-400 hover:text-black transition-colors outline-none"
|
|
1846
1744
|
},
|
|
1847
|
-
/* @__PURE__ */ import_react31.default.createElement(import_react32.HugeiconsIcon, { icon:
|
|
1745
|
+
/* @__PURE__ */ import_react31.default.createElement(import_react32.HugeiconsIcon, { icon: import_core_free_icons11.CancelCircleIcon, size: 20 })
|
|
1848
1746
|
)), /* @__PURE__ */ import_react31.default.createElement("div", { className: "flex flex-col px-6 pb-8 pt-2 relative" }, /* @__PURE__ */ import_react31.default.createElement("div", { className: "flex justify-center gap-4 mb-8" }, [0, 1, 2, 3].map((i) => /* @__PURE__ */ import_react31.default.createElement(
|
|
1849
1747
|
"div",
|
|
1850
1748
|
{
|
|
1851
1749
|
key: i,
|
|
1852
1750
|
className: `w-2 h-2 rounded-full transition-colors duration-200 ${pin.length > i ? "bg-black" : "bg-neutral-200"}`
|
|
1853
1751
|
}
|
|
1854
|
-
))), isVerifying && /* @__PURE__ */ import_react31.default.createElement("div", { className: "absolute inset-0 bg-white/80 backdrop-blur-sm z-10 flex items-center justify-center rounded-b-2xl" }, /* @__PURE__ */ import_react31.default.createElement(import_react32.HugeiconsIcon, { icon:
|
|
1752
|
+
))), isVerifying && /* @__PURE__ */ import_react31.default.createElement("div", { className: "absolute inset-0 bg-white/80 backdrop-blur-sm z-10 flex items-center justify-center rounded-b-2xl" }, /* @__PURE__ */ import_react31.default.createElement(import_react32.HugeiconsIcon, { icon: import_core_free_icons11.Loading03Icon, size: 28, className: "animate-spin text-black" })), /* @__PURE__ */ import_react31.default.createElement("div", { className: "grid grid-cols-3 gap-y-4 gap-x-6 max-w-60 mx-auto" }, [1, 2, 3, 4, 5, 6, 7, 8, 9].map((num) => /* @__PURE__ */ import_react31.default.createElement(
|
|
1855
1753
|
"button",
|
|
1856
1754
|
{
|
|
1857
1755
|
key: num,
|
|
@@ -1872,14 +1770,14 @@ var PinDialerBottomSheet = ({
|
|
|
1872
1770
|
onClick: () => handlePinPress("del"),
|
|
1873
1771
|
className: "w-14 h-14 rounded-full flex items-center justify-center text-neutral-400 hover:text-black hover:bg-neutral-50 transition-colors mx-auto outline-none active:scale-95"
|
|
1874
1772
|
},
|
|
1875
|
-
/* @__PURE__ */ import_react31.default.createElement(import_react32.HugeiconsIcon, { icon:
|
|
1773
|
+
/* @__PURE__ */ import_react31.default.createElement(import_react32.HugeiconsIcon, { icon: import_core_free_icons11.LessThanIcon, size: 20 })
|
|
1876
1774
|
)))));
|
|
1877
1775
|
};
|
|
1878
1776
|
|
|
1879
1777
|
// src/components/CardAction.tsx
|
|
1880
1778
|
var import_react33 = __toESM(require("react"));
|
|
1881
1779
|
var import_react34 = require("@hugeicons/react");
|
|
1882
|
-
var
|
|
1780
|
+
var import_core_free_icons12 = require("@hugeicons/core-free-icons");
|
|
1883
1781
|
var CardActionDialog = ({
|
|
1884
1782
|
isOpen,
|
|
1885
1783
|
card,
|
|
@@ -1896,18 +1794,18 @@ var CardActionDialog = ({
|
|
|
1896
1794
|
className: "absolute inset-0 bg-black/40 animate-in fade-in duration-200",
|
|
1897
1795
|
onClick: onClose
|
|
1898
1796
|
}
|
|
1899
|
-
), /* @__PURE__ */ import_react33.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_react33.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon:
|
|
1797
|
+
), /* @__PURE__ */ import_react33.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_react33.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons12.CreditCardIcon, size: 20, className: "text-black" }), /* @__PURE__ */ import_react33.default.createElement("h3", { className: "text-[16px] text-black tracking-tight" }, title)), /* @__PURE__ */ import_react33.default.createElement(
|
|
1900
1798
|
"button",
|
|
1901
1799
|
{
|
|
1902
1800
|
onClick: onClose,
|
|
1903
1801
|
className: "text-neutral-400 hover:text-black transition-colors outline-none"
|
|
1904
1802
|
},
|
|
1905
|
-
/* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon:
|
|
1803
|
+
/* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons12.CancelCircleIcon, size: 20 })
|
|
1906
1804
|
)), /* @__PURE__ */ import_react33.default.createElement("div", { className: "p-6 text-center" }, /* @__PURE__ */ import_react33.default.createElement("p", { className: "text-[13px] text-neutral-500 leading-relaxed mb-6" }, description), /* @__PURE__ */ import_react33.default.createElement(
|
|
1907
1805
|
"button",
|
|
1908
1806
|
{
|
|
1909
1807
|
onClick: onProceed,
|
|
1910
|
-
className: "w-full py-3.5 bg-black text-white text-[13px]
|
|
1808
|
+
className: "w-full py-3.5 bg-black text-white text-[13px] rounded-xl hover:bg-neutral-800 transition-colors outline-none active:scale-95"
|
|
1911
1809
|
},
|
|
1912
1810
|
actionType === "ACTIVATE" ? "Activate Now" : "Create Card"
|
|
1913
1811
|
))));
|
|
@@ -2011,17 +1909,17 @@ var UniversalCardPage = ({
|
|
|
2011
1909
|
const capitalized = type.charAt(0).toUpperCase() + type.slice(1).toLowerCase();
|
|
2012
1910
|
return `${capitalized} Card`;
|
|
2013
1911
|
};
|
|
2014
|
-
const displayCardNumber = isRevealed ? activeCard.cardNumber :
|
|
2015
|
-
const displayExpiry = isRevealed ? activeCard.expiry : "
|
|
2016
|
-
const displayCvv = isRevealed ? activeCard.cvv : "
|
|
2017
|
-
return /* @__PURE__ */ import_react35.default.createElement("div", { className: "w-full flex flex-col
|
|
1912
|
+
const displayCardNumber = isRevealed ? activeCard.cardNumber : `XXXX XXXX XXXX ${activeCard.cardNumber.slice(-4)}`;
|
|
1913
|
+
const displayExpiry = isRevealed ? activeCard.expiry : "XX/XX";
|
|
1914
|
+
const displayCvv = isRevealed ? activeCard.cvv : "XXX";
|
|
1915
|
+
return /* @__PURE__ */ import_react35.default.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col animate-in fade-in duration-300" }, cards.length > 1 && /* @__PURE__ */ import_react35.default.createElement("div", { className: "flex items-center justify-center mb-6 w-full px-2" }, /* @__PURE__ */ import_react35.default.createElement("div", { className: "flex items-center bg-white rounded-full p-1 sm:p-1.5 max-w-full overflow-x-auto custom-scrollbar " }, cards.map((tab, idx) => {
|
|
2018
1916
|
const isActive = activeTabIndex === idx;
|
|
2019
1917
|
return /* @__PURE__ */ import_react35.default.createElement(
|
|
2020
1918
|
"button",
|
|
2021
1919
|
{
|
|
2022
1920
|
key: tab.id,
|
|
2023
1921
|
onClick: () => setActiveTabIndex(idx),
|
|
2024
|
-
className: `px-4
|
|
1922
|
+
className: `px-4 py-1.5 rounded-full text-[11px] transition-all duration-200 outline-none whitespace-nowrap shrink-0 ${isActive ? "bg-neutral-100 text-black" : "text-neutral-500 hover:text-black hover:bg-neutral-50/50"}`
|
|
2025
1923
|
},
|
|
2026
1924
|
formatTabLabel(tab.type)
|
|
2027
1925
|
);
|
|
@@ -2038,7 +1936,7 @@ var UniversalCardPage = ({
|
|
|
2038
1936
|
transform: isFlipped ? "rotateY(180deg)" : "rotateY(0deg)"
|
|
2039
1937
|
}
|
|
2040
1938
|
},
|
|
2041
|
-
!isBgLoaded && /* @__PURE__ */ import_react35.default.createElement("div", { className: "absolute inset-0 w-full h-full bg-white rounded-2xl flex items-center justify-center z-50 " }, /* @__PURE__ */ import_react35.default.createElement(import_react36.HugeiconsIcon, { icon:
|
|
1939
|
+
!isBgLoaded && /* @__PURE__ */ import_react35.default.createElement("div", { className: "absolute inset-0 w-full h-full bg-white rounded-2xl flex items-center justify-center z-50 " }, /* @__PURE__ */ import_react35.default.createElement(import_react36.HugeiconsIcon, { icon: import_core_free_icons13.Loading03Icon, size: 28, className: "animate-spin text-black" })),
|
|
2042
1940
|
!isActivated && isBgLoaded && /* @__PURE__ */ import_react35.default.createElement("div", { className: "absolute inset-0 z-40 w-full h-full rounded-2xl backdrop-blur-sm bg-white/20 flex flex-col items-center justify-center border border-white/30", style: { transform: "translateZ(1px)" } }, isUnactivated && /* @__PURE__ */ import_react35.default.createElement(
|
|
2043
1941
|
"button",
|
|
2044
1942
|
{
|
|
@@ -2046,7 +1944,7 @@ var UniversalCardPage = ({
|
|
|
2046
1944
|
e.stopPropagation();
|
|
2047
1945
|
handleOverlayActionClick("ACTIVATE");
|
|
2048
1946
|
},
|
|
2049
|
-
className: "px-6 py-2.5 bg-white/35 text-
|
|
1947
|
+
className: "px-6 py-2.5 bg-white/35 text-white text-[12px] rounded-full transition-all outline-none active:scale-95"
|
|
2050
1948
|
},
|
|
2051
1949
|
"Activate Card"
|
|
2052
1950
|
), isDead && /* @__PURE__ */ import_react35.default.createElement(
|
|
@@ -2056,7 +1954,7 @@ var UniversalCardPage = ({
|
|
|
2056
1954
|
e.stopPropagation();
|
|
2057
1955
|
handleOverlayActionClick("CREATE");
|
|
2058
1956
|
},
|
|
2059
|
-
className: "px-6 py-2.5 bg-white/35 text-
|
|
1957
|
+
className: "px-6 py-2.5 bg-white/35 text-white text-[12px] rounded-full transition-all outline-none active:scale-95"
|
|
2060
1958
|
},
|
|
2061
1959
|
"Create Card"
|
|
2062
1960
|
), isFrozen && /* @__PURE__ */ import_react35.default.createElement(
|
|
@@ -2067,9 +1965,9 @@ var UniversalCardPage = ({
|
|
|
2067
1965
|
handleOverlayUnfreeze();
|
|
2068
1966
|
},
|
|
2069
1967
|
disabled: isOverlayActionLoading,
|
|
2070
|
-
className: "px-6 py-2.5 bg-white/35 text-
|
|
1968
|
+
className: "px-6 py-2.5 bg-white/35 text-white text-[12px] rounded-full transition-all outline-none active:scale-95 flex items-center gap-2 disabled:opacity-80"
|
|
2071
1969
|
},
|
|
2072
|
-
isOverlayActionLoading ? /* @__PURE__ */ import_react35.default.createElement(import_react36.HugeiconsIcon, { icon:
|
|
1970
|
+
isOverlayActionLoading ? /* @__PURE__ */ import_react35.default.createElement(import_react36.HugeiconsIcon, { icon: import_core_free_icons13.Loading03Icon, size: 16, className: "animate-spin" }) : "Unfreeze Card"
|
|
2073
1971
|
)),
|
|
2074
1972
|
/* @__PURE__ */ import_react35.default.createElement(
|
|
2075
1973
|
"div",
|
|
@@ -2119,10 +2017,10 @@ var UniversalCardPage = ({
|
|
|
2119
2017
|
/* @__PURE__ */ import_react35.default.createElement("div", { className: "absolute top-6 left-0 right-0 h-10 bg-black/80 w-full" }),
|
|
2120
2018
|
/* @__PURE__ */ import_react35.default.createElement("div", { className: "relative z-10 w-full h-full p-5 flex flex-col justify-end" }, /* @__PURE__ */ import_react35.default.createElement("div", { className: "w-full text-center mb-6" }, /* @__PURE__ */ import_react35.default.createElement("span", { className: "text-white text-3xl italic tracking-wide opacity-90", style: { fontFamily: "'Whisper', cursive" } }, activeCard.cardHolderName)), /* @__PURE__ */ import_react35.default.createElement("div", { className: "flex justify-between w-full max-w-[80%]" }, /* @__PURE__ */ import_react35.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ import_react35.default.createElement("span", { className: "text-[9px] text-white/60 tracking-widest uppercase" }, "Expiry"), /* @__PURE__ */ import_react35.default.createElement("span", { className: "text-[14px] text-white font-light" }, displayExpiry)), /* @__PURE__ */ import_react35.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ import_react35.default.createElement("span", { className: "text-[9px] text-white/60 tracking-widest uppercase" }, "CVV"), /* @__PURE__ */ import_react35.default.createElement("span", { className: "text-[14px] text-white font-light" }, displayCvv))))
|
|
2121
2019
|
)
|
|
2122
|
-
)), /* @__PURE__ */ import_react35.default.createElement("p", { className: "text-xs text-neutral-400 mb-6 mt-1" }, isActivated ? "Tap to flip card" : "Action Required"), /* @__PURE__ */ import_react35.default.createElement("div", { className: "w-full flex flex-col gap-4" }, /* @__PURE__ */ import_react35.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react35.default.createElement(
|
|
2020
|
+
)), /* @__PURE__ */ import_react35.default.createElement("p", { className: "w-full text-center text-xs text-neutral-400 mb-6 mt-1" }, isActivated ? "Tap to flip card" : "Action Required"), /* @__PURE__ */ import_react35.default.createElement("div", { className: "w-full flex flex-col gap-4" }, /* @__PURE__ */ import_react35.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react35.default.createElement(
|
|
2123
2021
|
MenuRow,
|
|
2124
2022
|
{
|
|
2125
|
-
icon:
|
|
2023
|
+
icon: import_core_free_icons13.ViewOffSlashIcon,
|
|
2126
2024
|
title: "Reveal Information",
|
|
2127
2025
|
subtitle: "Show card informations",
|
|
2128
2026
|
onClick: handleToggleReveal,
|
|
@@ -2134,7 +2032,7 @@ var UniversalCardPage = ({
|
|
|
2134
2032
|
), /* @__PURE__ */ import_react35.default.createElement(
|
|
2135
2033
|
MenuRow,
|
|
2136
2034
|
{
|
|
2137
|
-
icon:
|
|
2035
|
+
icon: import_core_free_icons13.SnowIcon,
|
|
2138
2036
|
title: "Freeze",
|
|
2139
2037
|
subtitle: "Freeze & Unfreeze card",
|
|
2140
2038
|
onClick: handleToggleFreeze,
|
|
@@ -2146,7 +2044,7 @@ var UniversalCardPage = ({
|
|
|
2146
2044
|
), /* @__PURE__ */ import_react35.default.createElement(
|
|
2147
2045
|
MenuRow,
|
|
2148
2046
|
{
|
|
2149
|
-
icon:
|
|
2047
|
+
icon: import_core_free_icons13.Dollar02Icon,
|
|
2150
2048
|
title: "Set Limits",
|
|
2151
2049
|
subtitle: "Set card limits",
|
|
2152
2050
|
onClick: () => {
|
|
@@ -2158,7 +2056,7 @@ var UniversalCardPage = ({
|
|
|
2158
2056
|
)), /* @__PURE__ */ import_react35.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react35.default.createElement(
|
|
2159
2057
|
MenuRow,
|
|
2160
2058
|
{
|
|
2161
|
-
icon:
|
|
2059
|
+
icon: import_core_free_icons13.Delete02Icon,
|
|
2162
2060
|
title: "Delete card",
|
|
2163
2061
|
subtitle: "Permanently delete card",
|
|
2164
2062
|
onClick: () => {
|
|
@@ -2222,13 +2120,13 @@ var MenuRow = ({
|
|
|
2222
2120
|
},
|
|
2223
2121
|
/* @__PURE__ */ import_react35.default.createElement("div", { className: "w-9 h-9 rounded-full border border-neutral-200 flex items-center justify-center shrink-0 mr-4" }, /* @__PURE__ */ import_react35.default.createElement(import_react36.HugeiconsIcon, { icon, size: 16, className: iconColor })),
|
|
2224
2122
|
/* @__PURE__ */ import_react35.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react35.default.createElement("p", { className: `text-[13px] truncate ${titleColor}` }, title), /* @__PURE__ */ import_react35.default.createElement("p", { className: "text-[11px] text-neutral-500 truncate" }, subtitle)),
|
|
2225
|
-
isToggle ? /* @__PURE__ */ import_react35.default.createElement("div", { className: `relative w-11 h-6 rounded-full transition-colors duration-300 ml-2 shrink-0 ${toggleState ? "bg-black" : "bg-neutral-200"} ${disabled ? "opacity-50" : ""}` }, /* @__PURE__ */ import_react35.default.createElement("div", { className: `absolute top-1 left-1 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300 flex items-center justify-center ${toggleState ? "translate-x-5" : "translate-x-0"}` }, toggleLoading && /* @__PURE__ */ import_react35.default.createElement(import_react36.HugeiconsIcon, { icon:
|
|
2123
|
+
isToggle ? /* @__PURE__ */ import_react35.default.createElement("div", { className: `relative w-11 h-6 rounded-full transition-colors duration-300 ml-2 shrink-0 ${toggleState ? "bg-black" : "bg-neutral-200"} ${disabled ? "opacity-50" : ""}` }, /* @__PURE__ */ import_react35.default.createElement("div", { className: `absolute top-1 left-1 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300 flex items-center justify-center ${toggleState ? "translate-x-5" : "translate-x-0"}` }, toggleLoading && /* @__PURE__ */ import_react35.default.createElement(import_react36.HugeiconsIcon, { icon: import_core_free_icons13.Loading03Icon, size: 10, className: "animate-spin text-black" }))) : /* @__PURE__ */ import_react35.default.createElement(import_react36.HugeiconsIcon, { icon: import_core_free_icons13.ArrowRight01Icon, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
2226
2124
|
);
|
|
2227
2125
|
|
|
2228
2126
|
// src/components/UniversalProfilePage.tsx
|
|
2229
2127
|
var import_react37 = __toESM(require("react"));
|
|
2230
2128
|
var import_react38 = require("@hugeicons/react");
|
|
2231
|
-
var
|
|
2129
|
+
var import_core_free_icons14 = require("@hugeicons/core-free-icons");
|
|
2232
2130
|
var UniversalProfilePage = ({
|
|
2233
2131
|
avatarSrc,
|
|
2234
2132
|
roleName,
|
|
@@ -2256,7 +2154,7 @@ var UniversalProfilePage = ({
|
|
|
2256
2154
|
setShowLogoutDialog(false);
|
|
2257
2155
|
}
|
|
2258
2156
|
};
|
|
2259
|
-
return /* @__PURE__ */ import_react37.default.createElement("div", { className: "w-full max-w-
|
|
2157
|
+
return /* @__PURE__ */ import_react37.default.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react37.default.createElement("div", { className: "pt-8 pb-4 flex flex-col items-center" }, /* @__PURE__ */ import_react37.default.createElement("div", { className: "w-22 h-22 rounded-full bg-white p-1 mb-4 flex items-center justify-center" }, /* @__PURE__ */ import_react37.default.createElement("div", { className: "relative w-full h-full rounded-full overflow-hidden bg-neutral-100 flex items-center justify-center" }, avatarSrc ? /* @__PURE__ */ import_react37.default.createElement(import_react37.default.Fragment, null, !isAvatarLoaded && /* @__PURE__ */ import_react37.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-100" }, /* @__PURE__ */ import_react37.default.createElement(import_react38.HugeiconsIcon, { icon: import_core_free_icons14.Loading03Icon, size: 24, className: "animate-spin text-black" })), /* @__PURE__ */ import_react37.default.createElement(
|
|
2260
2158
|
"img",
|
|
2261
2159
|
{
|
|
2262
2160
|
src: avatarSrc,
|
|
@@ -2264,10 +2162,10 @@ var UniversalProfilePage = ({
|
|
|
2264
2162
|
onLoad: () => setIsAvatarLoaded(true),
|
|
2265
2163
|
className: `w-full h-full object-cover transition-opacity duration-300 ${isAvatarLoaded ? "opacity-100" : "opacity-0"}`
|
|
2266
2164
|
}
|
|
2267
|
-
)) : /* @__PURE__ */ import_react37.default.createElement(import_react38.HugeiconsIcon, { icon:
|
|
2165
|
+
)) : /* @__PURE__ */ import_react37.default.createElement(import_react38.HugeiconsIcon, { icon: import_core_free_icons14.UserIcon, size: 40, className: "text-neutral-300" }))), /* @__PURE__ */ import_react37.default.createElement("div", { className: "bg-white rounded-full px-4 py-2 flex items-center justify-center gap-2 mb-3" }, /* @__PURE__ */ import_react37.default.createElement("span", { className: "text-[12px] text-black" }, roleName), /* @__PURE__ */ import_react37.default.createElement(import_react38.HugeiconsIcon, { icon: import_core_free_icons14.CrownIcon, size: 14, className: "text-neutral-400" })), /* @__PURE__ */ import_react37.default.createElement("span", { className: "text-[12px] text-neutral-500" }, memberSince)), /* @__PURE__ */ import_react37.default.createElement("div", { className: "w-full flex flex-col gap-4 mt-2" }, /* @__PURE__ */ import_react37.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react37.default.createElement(
|
|
2268
2166
|
MenuRow2,
|
|
2269
2167
|
{
|
|
2270
|
-
icon:
|
|
2168
|
+
icon: import_core_free_icons14.UserIcon,
|
|
2271
2169
|
title: "Account",
|
|
2272
2170
|
subtitle: "Your account details",
|
|
2273
2171
|
onClick: onAccountTap
|
|
@@ -2275,7 +2173,7 @@ var UniversalProfilePage = ({
|
|
|
2275
2173
|
), /* @__PURE__ */ import_react37.default.createElement(
|
|
2276
2174
|
MenuRow2,
|
|
2277
2175
|
{
|
|
2278
|
-
icon:
|
|
2176
|
+
icon: import_core_free_icons14.LockKeyIcon,
|
|
2279
2177
|
title: "Security",
|
|
2280
2178
|
subtitle: "2FA & authentication",
|
|
2281
2179
|
onClick: onSecurityTap
|
|
@@ -2283,7 +2181,7 @@ var UniversalProfilePage = ({
|
|
|
2283
2181
|
), /* @__PURE__ */ import_react37.default.createElement(
|
|
2284
2182
|
MenuRow2,
|
|
2285
2183
|
{
|
|
2286
|
-
icon:
|
|
2184
|
+
icon: import_core_free_icons14.ShieldUserIcon,
|
|
2287
2185
|
title: "Web3 Profile",
|
|
2288
2186
|
subtitle: "Manage web3 profile",
|
|
2289
2187
|
onClick: onDefiTap
|
|
@@ -2291,7 +2189,7 @@ var UniversalProfilePage = ({
|
|
|
2291
2189
|
), /* @__PURE__ */ import_react37.default.createElement(
|
|
2292
2190
|
MenuRow2,
|
|
2293
2191
|
{
|
|
2294
|
-
icon:
|
|
2192
|
+
icon: import_core_free_icons14.MessageQuestionIcon,
|
|
2295
2193
|
title: "Get Help",
|
|
2296
2194
|
subtitle: "24/7 Support",
|
|
2297
2195
|
onClick: onHelpTap,
|
|
@@ -2300,7 +2198,7 @@ var UniversalProfilePage = ({
|
|
|
2300
2198
|
)), /* @__PURE__ */ import_react37.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react37.default.createElement(
|
|
2301
2199
|
MenuRow2,
|
|
2302
2200
|
{
|
|
2303
|
-
icon:
|
|
2201
|
+
icon: import_core_free_icons14.UserIdVerificationIcon,
|
|
2304
2202
|
title: "Verifications",
|
|
2305
2203
|
subtitle: "Account Verifications",
|
|
2306
2204
|
onClick: onVerificationsTap
|
|
@@ -2308,7 +2206,7 @@ var UniversalProfilePage = ({
|
|
|
2308
2206
|
), /* @__PURE__ */ import_react37.default.createElement(
|
|
2309
2207
|
MenuRow2,
|
|
2310
2208
|
{
|
|
2311
|
-
icon:
|
|
2209
|
+
icon: import_core_free_icons14.FileDownloadIcon,
|
|
2312
2210
|
title: "Export Account",
|
|
2313
2211
|
subtitle: "Transfer your account",
|
|
2314
2212
|
onClick: onExportTap
|
|
@@ -2316,7 +2214,7 @@ var UniversalProfilePage = ({
|
|
|
2316
2214
|
), /* @__PURE__ */ import_react37.default.createElement(
|
|
2317
2215
|
MenuRow2,
|
|
2318
2216
|
{
|
|
2319
|
-
icon:
|
|
2217
|
+
icon: import_core_free_icons14.LogoutCircle02Icon,
|
|
2320
2218
|
title: "LogOut",
|
|
2321
2219
|
subtitle: "End your session",
|
|
2322
2220
|
onClick: () => setShowLogoutDialog(true),
|
|
@@ -2325,7 +2223,7 @@ var UniversalProfilePage = ({
|
|
|
2325
2223
|
)), /* @__PURE__ */ import_react37.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden mb-4" }, /* @__PURE__ */ import_react37.default.createElement(
|
|
2326
2224
|
MenuRow2,
|
|
2327
2225
|
{
|
|
2328
|
-
icon:
|
|
2226
|
+
icon: import_core_free_icons14.UserRemove01Icon,
|
|
2329
2227
|
title: "Delete Account",
|
|
2330
2228
|
subtitle: "Remove account",
|
|
2331
2229
|
onClick: onDeleteTap,
|
|
@@ -2353,20 +2251,90 @@ var MenuRow2 = ({ icon, title, subtitle, onClick, iconColor = "text-black", titl
|
|
|
2353
2251
|
},
|
|
2354
2252
|
/* @__PURE__ */ import_react37.default.createElement("div", { className: "w-9 h-9 rounded-full border border-neutral-200 flex items-center justify-center shrink-0 mr-4" }, /* @__PURE__ */ import_react37.default.createElement(import_react38.HugeiconsIcon, { icon, size: 16, className: iconColor })),
|
|
2355
2253
|
/* @__PURE__ */ import_react37.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react37.default.createElement("p", { className: `text-[13px] truncate ${titleColor}` }, title), /* @__PURE__ */ import_react37.default.createElement("p", { className: "text-[11px] text-neutral-500 truncate" }, subtitle)),
|
|
2356
|
-
/* @__PURE__ */ import_react37.default.createElement(import_react38.HugeiconsIcon, { icon:
|
|
2254
|
+
/* @__PURE__ */ import_react37.default.createElement(import_react38.HugeiconsIcon, { icon: import_core_free_icons14.ArrowRight01Icon, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
2357
2255
|
);
|
|
2358
2256
|
|
|
2359
|
-
// src/components/
|
|
2360
|
-
var
|
|
2257
|
+
// src/components/UniversalSidebar.tsx
|
|
2258
|
+
var import_react39 = __toESM(require("react"));
|
|
2361
2259
|
var import_link5 = __toESM(require("next/link"));
|
|
2260
|
+
var import_react40 = require("@hugeicons/react");
|
|
2261
|
+
var import_core_free_icons15 = require("@hugeicons/core-free-icons");
|
|
2262
|
+
var UniversalSidebar = ({
|
|
2263
|
+
navItems,
|
|
2264
|
+
currentPath,
|
|
2265
|
+
onNavClick,
|
|
2266
|
+
showLogoutAction = false,
|
|
2267
|
+
onLogout
|
|
2268
|
+
}) => {
|
|
2269
|
+
const [showLogoutDialog, setShowLogoutDialog] = (0, import_react39.useState)(false);
|
|
2270
|
+
const [isLoggingOut, setIsLoggingOut] = (0, import_react39.useState)(false);
|
|
2271
|
+
const hasActiveMatch = navItems.some(
|
|
2272
|
+
(item) => item.path === "/" || item.path === "/app" ? currentPath === "/" || currentPath === "/app" : currentPath === item.path || currentPath?.startsWith(`${item.path}/`)
|
|
2273
|
+
);
|
|
2274
|
+
const handleLogoutInitiation = async () => {
|
|
2275
|
+
if (isLoggingOut || !onLogout) return;
|
|
2276
|
+
setIsLoggingOut(true);
|
|
2277
|
+
try {
|
|
2278
|
+
await onLogout();
|
|
2279
|
+
} catch (error) {
|
|
2280
|
+
setIsLoggingOut(false);
|
|
2281
|
+
setShowLogoutDialog(false);
|
|
2282
|
+
}
|
|
2283
|
+
};
|
|
2284
|
+
return /* @__PURE__ */ import_react39.default.createElement(import_react39.default.Fragment, null, /* @__PURE__ */ import_react39.default.createElement("aside", { className: "hidden md:flex fixed top-0 left-0 h-screen w-20 flex-col z-40 overflow-y-auto custom-scrollbar" }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "h-24 shrink-0" }), /* @__PURE__ */ import_react39.default.createElement("nav", { className: "flex-1 flex flex-col gap-3 px-2" }, navItems.map((item, index) => {
|
|
2285
|
+
const isExactOrSubMatch = item.path === "/" || item.path === "/app" ? currentPath === "/" || currentPath === "/app" : currentPath === item.path || currentPath?.startsWith(`${item.path}/`);
|
|
2286
|
+
const isCurrentRoute = isExactOrSubMatch || !hasActiveMatch && index === 0;
|
|
2287
|
+
return /* @__PURE__ */ import_react39.default.createElement(
|
|
2288
|
+
import_link5.default,
|
|
2289
|
+
{
|
|
2290
|
+
key: item.name,
|
|
2291
|
+
href: item.path,
|
|
2292
|
+
onClick: (e) => onNavClick ? onNavClick(e, item.path) : void 0,
|
|
2293
|
+
className: `flex items-center justify-center w-12 h-12 mx-auto rounded-full transition-all outline-none group shrink-0 ${isCurrentRoute ? "bg-white text-black" : "text-neutral-500 hover:text-black hover:bg-white/50"}`,
|
|
2294
|
+
title: item.name
|
|
2295
|
+
},
|
|
2296
|
+
/* @__PURE__ */ import_react39.default.createElement(
|
|
2297
|
+
import_react40.HugeiconsIcon,
|
|
2298
|
+
{
|
|
2299
|
+
icon: item.icon,
|
|
2300
|
+
size: 20,
|
|
2301
|
+
className: `shrink-0 transition-colors ${isCurrentRoute ? "text-black" : "text-neutral-400 group-hover:text-black"}`
|
|
2302
|
+
}
|
|
2303
|
+
)
|
|
2304
|
+
);
|
|
2305
|
+
})), /* @__PURE__ */ import_react39.default.createElement("div", { className: "p-4 shrink-0 flex flex-col items-center gap-2 mb-4" }, showLogoutAction && /* @__PURE__ */ import_react39.default.createElement(
|
|
2306
|
+
"button",
|
|
2307
|
+
{
|
|
2308
|
+
onClick: () => setShowLogoutDialog(true),
|
|
2309
|
+
className: "w-12 h-12 rounded-full flex items-center justify-center text-neutral-500 hover:bg-white/50 transition-all outline-none"
|
|
2310
|
+
},
|
|
2311
|
+
/* @__PURE__ */ import_react39.default.createElement(import_react40.HugeiconsIcon, { icon: import_core_free_icons15.LogoutCircle02Icon, size: 20 })
|
|
2312
|
+
))), showLogoutAction && /* @__PURE__ */ import_react39.default.createElement(
|
|
2313
|
+
ConfirmationDialog,
|
|
2314
|
+
{
|
|
2315
|
+
isOpen: showLogoutDialog,
|
|
2316
|
+
title: "Secure Logout",
|
|
2317
|
+
message: "Are you sure you want to log out? You will need to authenticate to return.",
|
|
2318
|
+
confirmText: "Log Out",
|
|
2319
|
+
isDestructive: true,
|
|
2320
|
+
isProcessing: isLoggingOut,
|
|
2321
|
+
onClose: () => setShowLogoutDialog(false),
|
|
2322
|
+
onConfirm: handleLogoutInitiation
|
|
2323
|
+
}
|
|
2324
|
+
));
|
|
2325
|
+
};
|
|
2326
|
+
|
|
2327
|
+
// src/components/HeroSection.tsx
|
|
2328
|
+
var import_react42 = __toESM(require("react"));
|
|
2329
|
+
var import_link6 = __toESM(require("next/link"));
|
|
2362
2330
|
var import_image2 = __toESM(require("next/image"));
|
|
2363
2331
|
|
|
2364
2332
|
// src/components/WaitlistDialog.tsx
|
|
2365
|
-
var
|
|
2333
|
+
var import_react41 = __toESM(require("react"));
|
|
2366
2334
|
var import_react_hot_toast7 = require("react-hot-toast");
|
|
2367
2335
|
var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
2368
|
-
const [email, setEmail] = (0,
|
|
2369
|
-
const [isLoading, setIsLoading] = (0,
|
|
2336
|
+
const [email, setEmail] = (0, import_react41.useState)("");
|
|
2337
|
+
const [isLoading, setIsLoading] = (0, import_react41.useState)(false);
|
|
2370
2338
|
if (!isOpen) return null;
|
|
2371
2339
|
const handleSubmit = async (e) => {
|
|
2372
2340
|
e.preventDefault();
|
|
@@ -2397,20 +2365,19 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2397
2365
|
setIsLoading(false);
|
|
2398
2366
|
}
|
|
2399
2367
|
};
|
|
2400
|
-
return /* @__PURE__ */
|
|
2368
|
+
return /* @__PURE__ */ import_react41.default.createElement("div", { className: "fixed inset-0 z-100 flex items-center justify-center p-4 bg-black/40" }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "absolute inset-0", onClick: !isLoading ? onClose : void 0 }), /* @__PURE__ */ import_react41.default.createElement(
|
|
2401
2369
|
"div",
|
|
2402
2370
|
{
|
|
2403
2371
|
className: "w-full max-w-md bg-white rounded-2xl shadow-2xl overflow-hidden relative z-10 animate-in fade-in zoom-in-95 duration-200"
|
|
2404
2372
|
},
|
|
2405
|
-
/* @__PURE__ */
|
|
2373
|
+
/* @__PURE__ */ import_react41.default.createElement(
|
|
2406
2374
|
"button",
|
|
2407
2375
|
{
|
|
2408
2376
|
onClick: onClose,
|
|
2409
2377
|
disabled: isLoading,
|
|
2410
|
-
className: "absolute top-4 right-4 p-2 text-neutral-700 hover:text-neutral-400 transition-colors disabled:opacity-50 outline-none"
|
|
2411
|
-
"aria-label": "Close dialog"
|
|
2378
|
+
className: "absolute top-4 right-4 p-2 text-neutral-700 hover:text-neutral-400 transition-colors disabled:opacity-50 outline-none"
|
|
2412
2379
|
},
|
|
2413
|
-
/* @__PURE__ */
|
|
2380
|
+
/* @__PURE__ */ import_react41.default.createElement(
|
|
2414
2381
|
"svg",
|
|
2415
2382
|
{
|
|
2416
2383
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -2423,11 +2390,11 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2423
2390
|
strokeLinecap: "round",
|
|
2424
2391
|
strokeLinejoin: "round"
|
|
2425
2392
|
},
|
|
2426
|
-
/* @__PURE__ */
|
|
2427
|
-
/* @__PURE__ */
|
|
2393
|
+
/* @__PURE__ */ import_react41.default.createElement("path", { d: "M18 6 6 18" }),
|
|
2394
|
+
/* @__PURE__ */ import_react41.default.createElement("path", { d: "m6 6 12 12" })
|
|
2428
2395
|
)
|
|
2429
2396
|
),
|
|
2430
|
-
/* @__PURE__ */
|
|
2397
|
+
/* @__PURE__ */ import_react41.default.createElement("div", { className: "p-6 sm:p-8" }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "mb-8 mt-2" }, /* @__PURE__ */ import_react41.default.createElement("h2", { className: "text-2xl text-black tracking-tight mb-2" }, "Join the Waitlist"), /* @__PURE__ */ import_react41.default.createElement("p", { className: "text-[13px] text-neutral-500 leading-relaxed" }, "Be the first to experience the future of Web3 freedom. Secure your early access spot today.")), /* @__PURE__ */ import_react41.default.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col gap-8" }, /* @__PURE__ */ import_react41.default.createElement(
|
|
2431
2398
|
TextInput,
|
|
2432
2399
|
{
|
|
2433
2400
|
label: "Email ID",
|
|
@@ -2437,7 +2404,7 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2437
2404
|
placeholder: "name@example.com",
|
|
2438
2405
|
disabled: isLoading
|
|
2439
2406
|
}
|
|
2440
|
-
), /* @__PURE__ */
|
|
2407
|
+
), /* @__PURE__ */ import_react41.default.createElement(
|
|
2441
2408
|
ThreeDActionButton,
|
|
2442
2409
|
{
|
|
2443
2410
|
type: "submit",
|
|
@@ -2470,10 +2437,10 @@ var HeroSection = ({
|
|
|
2470
2437
|
bgImageSrc,
|
|
2471
2438
|
isWaitlist = false
|
|
2472
2439
|
}) => {
|
|
2473
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
2474
|
-
const [isWaitlistOpen, setIsWaitlistOpen] = (0,
|
|
2475
|
-
const titleRef = (0,
|
|
2476
|
-
(0,
|
|
2440
|
+
const [isAnimating, setIsAnimating] = (0, import_react42.useState)(false);
|
|
2441
|
+
const [isWaitlistOpen, setIsWaitlistOpen] = (0, import_react42.useState)(false);
|
|
2442
|
+
const titleRef = (0, import_react42.useRef)(null);
|
|
2443
|
+
(0, import_react42.useEffect)(() => {
|
|
2477
2444
|
const observer = new IntersectionObserver(
|
|
2478
2445
|
([entry]) => {
|
|
2479
2446
|
if (entry.isIntersecting) {
|
|
@@ -2495,7 +2462,7 @@ var HeroSection = ({
|
|
|
2495
2462
|
setIsWaitlistOpen(true);
|
|
2496
2463
|
}
|
|
2497
2464
|
};
|
|
2498
|
-
return /* @__PURE__ */
|
|
2465
|
+
return /* @__PURE__ */ import_react42.default.createElement("div", { className: "w-screen min-h-screen flex justify-center items-center p-4" }, /* @__PURE__ */ import_react42.default.createElement("section", { className: "relative h-[95vh] w-full overflow-hidden rounded-2xl " }, bgVideoSrc ? /* @__PURE__ */ import_react42.default.createElement(
|
|
2499
2466
|
"video",
|
|
2500
2467
|
{
|
|
2501
2468
|
src: bgVideoSrc,
|
|
@@ -2506,7 +2473,7 @@ var HeroSection = ({
|
|
|
2506
2473
|
playsInline: true,
|
|
2507
2474
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
2508
2475
|
}
|
|
2509
|
-
) : bgImageSrc ? /* @__PURE__ */
|
|
2476
|
+
) : bgImageSrc ? /* @__PURE__ */ import_react42.default.createElement(
|
|
2510
2477
|
import_image2.default,
|
|
2511
2478
|
{
|
|
2512
2479
|
src: bgImageSrc,
|
|
@@ -2515,7 +2482,7 @@ var HeroSection = ({
|
|
|
2515
2482
|
priority: true,
|
|
2516
2483
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
2517
2484
|
}
|
|
2518
|
-
) : null, /* @__PURE__ */
|
|
2485
|
+
) : null, /* @__PURE__ */ import_react42.default.createElement(
|
|
2519
2486
|
"div",
|
|
2520
2487
|
{
|
|
2521
2488
|
className: "pointer-events-none absolute inset-0 z-10 opacity-[0.7] mix-blend-overlay",
|
|
@@ -2523,31 +2490,31 @@ var HeroSection = ({
|
|
|
2523
2490
|
backgroundImage: `url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")`
|
|
2524
2491
|
}
|
|
2525
2492
|
}
|
|
2526
|
-
), /* @__PURE__ */
|
|
2493
|
+
), /* @__PURE__ */ import_react42.default.createElement("div", { className: "pointer-events-none absolute inset-0 bg-linear-to-b from-black/30 via-transparent to-black/80 z-10" }), /* @__PURE__ */ import_react42.default.createElement("div", { className: "absolute bottom-0 left-0 right-0 px-4 pb-4 sm:px-6 md:px-10 z-20" }, /* @__PURE__ */ import_react42.default.createElement("div", { className: "grid grid-cols-12 items-end gap-4" }, /* @__PURE__ */ import_react42.default.createElement("div", { className: "col-span-12 lg:col-span-8" }, /* @__PURE__ */ import_react42.default.createElement(
|
|
2527
2494
|
"h1",
|
|
2528
2495
|
{
|
|
2529
2496
|
ref: titleRef,
|
|
2530
2497
|
className: "leading-[0.85] tracking-[-0.07em] text-[18.2vw] sm:text-[16.8vw] md:text-[15.4vw] lg:text-[14vw] xl:text-[13.3vw] 2xl:text-[14vw] text-[#ffffff]"
|
|
2531
2498
|
},
|
|
2532
|
-
/* @__PURE__ */
|
|
2533
|
-
)), /* @__PURE__ */
|
|
2534
|
-
/* @__PURE__ */
|
|
2535
|
-
|
|
2499
|
+
/* @__PURE__ */ import_react42.default.createElement("div", { className: "inline-flex flex-wrap" }, /* @__PURE__ */ import_react42.default.createElement("span", { className: `inline-block relative transition-all duration-1000 ${isAnimating ? "opacity-100 translate-y-0" : "opacity-0 translate-y-10"}` }, titlePrefix, titlePrefix && /* @__PURE__ */ import_react42.default.createElement("br", null), highlightText, /* @__PURE__ */ import_react42.default.createElement("span", { className: "absolute top-[0.65em] right-[-0.3em] text-[0.31em] text-[#ffffff]/70" }, "*")))
|
|
2500
|
+
)), /* @__PURE__ */ import_react42.default.createElement("div", { className: "col-span-12 flex flex-col gap-5 pb-6 lg:col-span-4 lg:pb-10" }, subtitle && /* @__PURE__ */ import_react42.default.createElement("p", { className: "text-xs text-[#ffffff]/70 sm:text-sm md:text-base leading-[1.2] max-w-md transition-opacity duration-1000 delay-300" }, subtitle), /* @__PURE__ */ import_react42.default.createElement("div", { className: "flex flex-col sm:flex-row items-start sm:items-center gap-4" }, ctaText && // Changed from <button> to <Link> so it actually navigates!
|
|
2501
|
+
/* @__PURE__ */ import_react42.default.createElement(
|
|
2502
|
+
import_link6.default,
|
|
2536
2503
|
{
|
|
2537
2504
|
href: isWaitlist ? "#" : ctaHref || "#",
|
|
2538
2505
|
onClick: handleCtaClick,
|
|
2539
2506
|
className: "group inline-flex h-10 items-center gap-2 self-start rounded-full bg-[#ffffff] pl-5 pr-1 text-xs text-black transition-all hover:gap-3"
|
|
2540
2507
|
},
|
|
2541
2508
|
ctaText,
|
|
2542
|
-
/* @__PURE__ */
|
|
2543
|
-
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
2544
|
-
|
|
2509
|
+
/* @__PURE__ */ import_react42.default.createElement("span", { className: "flex h-8 w-8 items-center justify-center rounded-full bg-black transition-transform group-hover:scale-110" }, /* @__PURE__ */ import_react42.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "lucide lucide-arrow-right h-4 w-4 text-[#ffffff]" }, /* @__PURE__ */ import_react42.default.createElement("path", { d: "M5 12h14" }), /* @__PURE__ */ import_react42.default.createElement("path", { d: "m12 5 7 7-7 7" })))
|
|
2510
|
+
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react42.default.createElement(
|
|
2511
|
+
import_link6.default,
|
|
2545
2512
|
{
|
|
2546
2513
|
href: secondaryCtaHref,
|
|
2547
2514
|
className: "inline-flex h-10 items-center self-start justify-center text-xs tracking-wide rounded-full px-6 border border-[#ffffff]/30 text-[#ffffff] hover:bg-[#ffffff]/10 transition-colors"
|
|
2548
2515
|
},
|
|
2549
2516
|
secondaryCtaText
|
|
2550
|
-
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */
|
|
2517
|
+
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */ import_react42.default.createElement("div", { className: "flex flex-col gap-3 mt-4" }, appsText && /* @__PURE__ */ import_react42.default.createElement("span", { className: "text-[10px] tracking-widest uppercase text-[#ffffff]/50 " }, appsText), /* @__PURE__ */ import_react42.default.createElement("div", { className: "flex items-center gap-4" }, appLogos.map((logo, idx) => /* @__PURE__ */ import_react42.default.createElement("div", { key: idx, className: "relative h-6 w-6 sm:h-7 sm:w-7 opacity-70 hover:opacity-100 transition-opacity invert" }, /* @__PURE__ */ import_react42.default.createElement(
|
|
2551
2518
|
import_image2.default,
|
|
2552
2519
|
{
|
|
2553
2520
|
src: logo.src,
|
|
@@ -2556,7 +2523,7 @@ var HeroSection = ({
|
|
|
2556
2523
|
height: 28,
|
|
2557
2524
|
className: "object-contain"
|
|
2558
2525
|
}
|
|
2559
|
-
))))))))), /* @__PURE__ */
|
|
2526
|
+
))))))))), /* @__PURE__ */ import_react42.default.createElement(
|
|
2560
2527
|
WaitlistDialog,
|
|
2561
2528
|
{
|
|
2562
2529
|
isOpen: isWaitlistOpen,
|
|
@@ -2566,12 +2533,12 @@ var HeroSection = ({
|
|
|
2566
2533
|
};
|
|
2567
2534
|
|
|
2568
2535
|
// src/components/AppBento2.tsx
|
|
2569
|
-
var
|
|
2570
|
-
var
|
|
2536
|
+
var import_react43 = __toESM(require("react"));
|
|
2537
|
+
var import_react44 = require("@hugeicons/react");
|
|
2571
2538
|
var AppBento2 = ({ tagline, headline, features }) => {
|
|
2572
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
2573
|
-
const titleRef = (0,
|
|
2574
|
-
(0,
|
|
2539
|
+
const [isAnimating, setIsAnimating] = (0, import_react43.useState)(false);
|
|
2540
|
+
const titleRef = (0, import_react43.useRef)(null);
|
|
2541
|
+
(0, import_react43.useEffect)(() => {
|
|
2575
2542
|
const observer = new IntersectionObserver(
|
|
2576
2543
|
([entry]) => {
|
|
2577
2544
|
if (entry.isIntersecting) {
|
|
@@ -2589,7 +2556,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2589
2556
|
}
|
|
2590
2557
|
return () => observer.disconnect();
|
|
2591
2558
|
}, []);
|
|
2592
|
-
return /* @__PURE__ */
|
|
2559
|
+
return /* @__PURE__ */ import_react43.default.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), /* @__PURE__ */ import_react43.default.createElement(
|
|
2593
2560
|
"h2",
|
|
2594
2561
|
{
|
|
2595
2562
|
ref: titleRef,
|
|
@@ -2597,7 +2564,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2597
2564
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2598
2565
|
},
|
|
2599
2566
|
headline
|
|
2600
|
-
))), /* @__PURE__ */
|
|
2567
|
+
))), /* @__PURE__ */ import_react43.default.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-6 gap-6" }, features.map((f, i) => {
|
|
2601
2568
|
const isWhite = i === 0;
|
|
2602
2569
|
const isBlack = i === 1;
|
|
2603
2570
|
const isNeutral = i === 2;
|
|
@@ -2619,36 +2586,36 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2619
2586
|
const textColor = isBlack ? "text-white" : "text-black";
|
|
2620
2587
|
const subTextColor = isBlack ? "text-neutral-300" : "text-neutral-600";
|
|
2621
2588
|
const labelColor = isBlack ? "text-neutral-400" : "text-neutral-500";
|
|
2622
|
-
return /* @__PURE__ */
|
|
2589
|
+
return /* @__PURE__ */ import_react43.default.createElement(
|
|
2623
2590
|
"div",
|
|
2624
2591
|
{
|
|
2625
2592
|
key: i,
|
|
2626
2593
|
className: `relative rounded-2xl overflow-hidden p-8 flex flex-col min-h-75 transition-all duration-500 group text-left ${getBgStyle()} ${f.size}`,
|
|
2627
2594
|
style: { boxShadow: getShadowStyle() }
|
|
2628
2595
|
},
|
|
2629
|
-
/* @__PURE__ */
|
|
2596
|
+
/* @__PURE__ */ import_react43.default.createElement(
|
|
2630
2597
|
"div",
|
|
2631
2598
|
{
|
|
2632
2599
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
2633
2600
|
style: { backgroundImage: `url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")` }
|
|
2634
2601
|
}
|
|
2635
2602
|
),
|
|
2636
|
-
isBlack && /* @__PURE__ */
|
|
2637
|
-
/* @__PURE__ */
|
|
2638
|
-
/* @__PURE__ */
|
|
2603
|
+
isBlack && /* @__PURE__ */ import_react43.default.createElement("span", { className: "absolute inset-0 rounded-2xl bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none z-10" }),
|
|
2604
|
+
/* @__PURE__ */ import_react43.default.createElement("div", { className: "absolute inset-0 overflow-hidden pointer-events-none z-0" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: `absolute -bottom-8 -right-8 transform group-hover:scale-110 transition-transform duration-700 ease-out ${isBlack ? "text-white/5" : "text-black/5"}` }, /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: f.icon, size: 180 }))),
|
|
2605
|
+
/* @__PURE__ */ import_react43.default.createElement("div", { className: "relative z-10 w-full h-full flex flex-col pointer-events-auto" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex items-center justify-between mb-8" }, /* @__PURE__ */ import_react43.default.createElement("span", { className: `text-[9px] tracking-widest ${labelColor}` }, f.label), /* @__PURE__ */ import_react43.default.createElement("div", { className: `p-2 rounded-full transition-colors ${isBlack ? "bg-white/10" : "bg-white/50 backdrop-blur-sm"}` }, /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: f.icon, size: 20, className: textColor }))), /* @__PURE__ */ import_react43.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react43.default.createElement("h3", { className: `text-xl mb-2 tracking-tight ${textColor}` }, f.title), /* @__PURE__ */ import_react43.default.createElement("p", { className: `text-[13px] leading-relaxed max-w-sm ${subTextColor}` }, f.desc)))
|
|
2639
2606
|
);
|
|
2640
2607
|
})))));
|
|
2641
2608
|
};
|
|
2642
2609
|
|
|
2643
2610
|
// src/components/FeatureScroll.tsx
|
|
2644
|
-
var
|
|
2611
|
+
var import_react45 = __toESM(require("react"));
|
|
2645
2612
|
var import_image3 = __toESM(require("next/image"));
|
|
2646
|
-
var
|
|
2613
|
+
var import_react46 = require("@hugeicons/react");
|
|
2647
2614
|
var import_core_free_icons16 = require("@hugeicons/core-free-icons");
|
|
2648
2615
|
var FeatureCard = ({ feature, bgImage }) => {
|
|
2649
|
-
const [isBgLoading, setIsBgLoading] = (0,
|
|
2650
|
-
const [isFgLoading, setIsFgLoading] = (0,
|
|
2651
|
-
return /* @__PURE__ */
|
|
2616
|
+
const [isBgLoading, setIsBgLoading] = (0, import_react45.useState)(true);
|
|
2617
|
+
const [isFgLoading, setIsFgLoading] = (0, import_react45.useState)(!!feature.image);
|
|
2618
|
+
return /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex flex-col shrink-0 w-[90vw] sm:w-150 snap-center md:snap-start group cursor-grab active:cursor-grabbing" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "relative w-full aspect-16/10 bg-neutral-100 rounded-2xl overflow-hidden mb-6 flex items-center justify-center" }, /* @__PURE__ */ import_react45.default.createElement(
|
|
2652
2619
|
import_image3.default,
|
|
2653
2620
|
{
|
|
2654
2621
|
src: bgImage,
|
|
@@ -2661,7 +2628,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2661
2628
|
${isBgLoading ? "blur-xl scale-110" : "blur-0 scale-100"}
|
|
2662
2629
|
`
|
|
2663
2630
|
}
|
|
2664
|
-
), /* @__PURE__ */
|
|
2631
|
+
), /* @__PURE__ */ import_react45.default.createElement(
|
|
2665
2632
|
"div",
|
|
2666
2633
|
{
|
|
2667
2634
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.25] mix-blend-overlay",
|
|
@@ -2669,7 +2636,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2669
2636
|
backgroundImage: `url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")`
|
|
2670
2637
|
}
|
|
2671
2638
|
}
|
|
2672
|
-
), isFgLoading && feature.image && /* @__PURE__ */
|
|
2639
|
+
), isFgLoading && feature.image && /* @__PURE__ */ import_react45.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-50/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.Loading03Icon, size: 32, className: "animate-spin text-neutral-400" })), feature.image && /* @__PURE__ */ import_react45.default.createElement("div", { className: "absolute -bottom-6 -right-6 w-[85%] h-[85%] z-10 transition-transform duration-700 ease-out group-hover:-translate-x-2 group-hover:-translate-y-2" }, /* @__PURE__ */ import_react45.default.createElement(
|
|
2673
2640
|
import_image3.default,
|
|
2674
2641
|
{
|
|
2675
2642
|
src: feature.image,
|
|
@@ -2682,12 +2649,12 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2682
2649
|
${isFgLoading ? "opacity-0 blur-xl" : "opacity-100 blur-0"}
|
|
2683
2650
|
`
|
|
2684
2651
|
}
|
|
2685
|
-
))), /* @__PURE__ */
|
|
2652
|
+
))), /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ import_react45.default.createElement("h3", { className: " text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ import_react45.default.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 max-w-[90%]" }, feature.desc)));
|
|
2686
2653
|
};
|
|
2687
2654
|
var FeatureScroll = ({ tagline, headline, features }) => {
|
|
2688
|
-
const scrollRef = (0,
|
|
2689
|
-
const [canScrollLeft, setCanScrollLeft] = (0,
|
|
2690
|
-
const [canScrollRight, setCanScrollRight] = (0,
|
|
2655
|
+
const scrollRef = (0, import_react45.useRef)(null);
|
|
2656
|
+
const [canScrollLeft, setCanScrollLeft] = (0, import_react45.useState)(false);
|
|
2657
|
+
const [canScrollRight, setCanScrollRight] = (0, import_react45.useState)(true);
|
|
2691
2658
|
const checkScroll = () => {
|
|
2692
2659
|
if (scrollRef.current) {
|
|
2693
2660
|
const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;
|
|
@@ -2695,7 +2662,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2695
2662
|
setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 2);
|
|
2696
2663
|
}
|
|
2697
2664
|
};
|
|
2698
|
-
(0,
|
|
2665
|
+
(0, import_react45.useEffect)(() => {
|
|
2699
2666
|
checkScroll();
|
|
2700
2667
|
window.addEventListener("resize", checkScroll);
|
|
2701
2668
|
return () => window.removeEventListener("resize", checkScroll);
|
|
@@ -2711,74 +2678,72 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2711
2678
|
"https://retinalabs.company/assets/images/bg_6.avif",
|
|
2712
2679
|
"https://retinalabs.company/assets/images/bg_1.avif"
|
|
2713
2680
|
];
|
|
2714
|
-
return /* @__PURE__ */
|
|
2681
|
+
return /* @__PURE__ */ import_react45.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "relative z-10 text-left" }, /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ import_react45.default.createElement("h2", { className: " text-3xl tracking-tight text-black leading-[1.05]" }, headline)), /* @__PURE__ */ import_react45.default.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ import_react45.default.createElement(
|
|
2715
2682
|
"button",
|
|
2716
2683
|
{
|
|
2717
2684
|
onClick: () => scroll("left"),
|
|
2718
2685
|
disabled: !canScrollLeft,
|
|
2719
|
-
className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 disabled:hover:border-neutral-200 disabled:hover:text-neutral-500 disabled:cursor-not-allowed transition-all outline-none"
|
|
2720
|
-
"aria-label": "Previous feature"
|
|
2686
|
+
className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 disabled:hover:border-neutral-200 disabled:hover:text-neutral-500 disabled:cursor-not-allowed transition-all outline-none"
|
|
2721
2687
|
},
|
|
2722
|
-
/* @__PURE__ */
|
|
2723
|
-
), /* @__PURE__ */
|
|
2688
|
+
/* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.ArrowLeft01Icon, size: 20 })
|
|
2689
|
+
), /* @__PURE__ */ import_react45.default.createElement(
|
|
2724
2690
|
"button",
|
|
2725
2691
|
{
|
|
2726
2692
|
onClick: () => scroll("right"),
|
|
2727
2693
|
disabled: !canScrollRight,
|
|
2728
|
-
className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 disabled:hover:border-neutral-200 disabled:hover:text-neutral-500 disabled:cursor-not-allowed transition-all outline-none"
|
|
2729
|
-
"aria-label": "Next feature"
|
|
2694
|
+
className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 disabled:hover:border-neutral-200 disabled:hover:text-neutral-500 disabled:cursor-not-allowed transition-all outline-none"
|
|
2730
2695
|
},
|
|
2731
|
-
/* @__PURE__ */
|
|
2732
|
-
))), /* @__PURE__ */
|
|
2696
|
+
/* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.ArrowRight01Icon, size: 20 })
|
|
2697
|
+
))), /* @__PURE__ */ import_react45.default.createElement(
|
|
2733
2698
|
"div",
|
|
2734
2699
|
{
|
|
2735
2700
|
ref: scrollRef,
|
|
2736
2701
|
onScroll: checkScroll,
|
|
2737
2702
|
className: "flex gap-6 overflow-x-auto snap-x snap-mandatory [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] scrollbar-none pb-8 -mx-4 px-4 md:mx-0 md:px-0"
|
|
2738
2703
|
},
|
|
2739
|
-
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */
|
|
2740
|
-
), /* @__PURE__ */
|
|
2704
|
+
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */ import_react45.default.createElement(FeatureCard, { key: idx, feature, bgImage: bgImages[idx] }))
|
|
2705
|
+
), /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ import_react45.default.createElement(
|
|
2741
2706
|
"button",
|
|
2742
2707
|
{
|
|
2743
2708
|
onClick: () => scroll("left"),
|
|
2744
2709
|
disabled: !canScrollLeft,
|
|
2745
2710
|
className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 transition-all outline-none"
|
|
2746
2711
|
},
|
|
2747
|
-
/* @__PURE__ */
|
|
2748
|
-
), /* @__PURE__ */
|
|
2712
|
+
/* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.ArrowLeft01Icon, size: 20 })
|
|
2713
|
+
), /* @__PURE__ */ import_react45.default.createElement(
|
|
2749
2714
|
"button",
|
|
2750
2715
|
{
|
|
2751
2716
|
onClick: () => scroll("right"),
|
|
2752
2717
|
disabled: !canScrollRight,
|
|
2753
2718
|
className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 transition-all outline-none"
|
|
2754
2719
|
},
|
|
2755
|
-
/* @__PURE__ */
|
|
2720
|
+
/* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.ArrowRight01Icon, size: 20 })
|
|
2756
2721
|
))));
|
|
2757
2722
|
};
|
|
2758
2723
|
|
|
2759
2724
|
// src/components/PlatformFeatures.tsx
|
|
2760
|
-
var
|
|
2761
|
-
var
|
|
2725
|
+
var import_react47 = __toESM(require("react"));
|
|
2726
|
+
var import_react48 = require("@hugeicons/react");
|
|
2762
2727
|
var PlatformFeatures = ({
|
|
2763
2728
|
tagline,
|
|
2764
2729
|
headline,
|
|
2765
2730
|
description,
|
|
2766
2731
|
features
|
|
2767
2732
|
}) => {
|
|
2768
|
-
return /* @__PURE__ */
|
|
2733
|
+
return /* @__PURE__ */ import_react47.default.createElement("section", { className: "w-full flex justify-center mb-15 relative z-10" }, /* @__PURE__ */ import_react47.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex flex-col items-start mb-16 relative z-10" }, /* @__PURE__ */ import_react47.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ import_react47.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.05] mb-6" }, headline), /* @__PURE__ */ import_react47.default.createElement("p", { className: "text-[15px] leading-[1.8] text-neutral-600 max-w-2xl" }, description)), /* @__PURE__ */ import_react47.default.createElement("div", { className: "w-full h-px bg-neutral-100 mb-16", "aria-hidden": "true" }), /* @__PURE__ */ import_react47.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-x-8 gap-y-12" }, features.map((feature, idx) => /* @__PURE__ */ import_react47.default.createElement(
|
|
2769
2734
|
"div",
|
|
2770
2735
|
{
|
|
2771
2736
|
key: idx,
|
|
2772
2737
|
className: "flex flex-col group animate-in fade-in slide-in-from-bottom-4 duration-700 fill-mode-both",
|
|
2773
2738
|
style: { animationDelay: feature.delay || "0ms" }
|
|
2774
2739
|
},
|
|
2775
|
-
/* @__PURE__ */
|
|
2776
|
-
/* @__PURE__ */
|
|
2740
|
+
/* @__PURE__ */ import_react47.default.createElement("div", { className: "flex flex-row items-center gap-4 mb-4" }, /* @__PURE__ */ import_react47.default.createElement("div", { className: "w-14 h-14 shrink-0 rounded-xl border border-neutral-200 flex items-center justify-center text-neutral-600 transition-colors duration-300" }, /* @__PURE__ */ import_react47.default.createElement(import_react48.HugeiconsIcon, { icon: feature.icon, size: 24 })), /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex flex-col justify-center" }, /* @__PURE__ */ import_react47.default.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400 mb-0.5" }, feature.label || "CAPABILITY"), /* @__PURE__ */ import_react47.default.createElement("h3", { className: "text-xl tracking-tight text-black" }, feature.title))),
|
|
2741
|
+
/* @__PURE__ */ import_react47.default.createElement("div", null, /* @__PURE__ */ import_react47.default.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 pr-4" }, feature.desc))
|
|
2777
2742
|
)))));
|
|
2778
2743
|
};
|
|
2779
2744
|
|
|
2780
2745
|
// src/components/ManagedDocument.tsx
|
|
2781
|
-
var
|
|
2746
|
+
var import_react49 = __toESM(require("react"));
|
|
2782
2747
|
var ManagedDocument = ({
|
|
2783
2748
|
tagline,
|
|
2784
2749
|
title,
|
|
@@ -2786,9 +2751,9 @@ var ManagedDocument = ({
|
|
|
2786
2751
|
contactText,
|
|
2787
2752
|
contactEmail
|
|
2788
2753
|
}) => {
|
|
2789
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
2790
|
-
const titleRef = (0,
|
|
2791
|
-
(0,
|
|
2754
|
+
const [isAnimating, setIsAnimating] = (0, import_react49.useState)(false);
|
|
2755
|
+
const titleRef = (0, import_react49.useRef)(null);
|
|
2756
|
+
(0, import_react49.useEffect)(() => {
|
|
2792
2757
|
const observer = new IntersectionObserver(
|
|
2793
2758
|
([entry]) => {
|
|
2794
2759
|
if (entry.isIntersecting) {
|
|
@@ -2808,7 +2773,7 @@ var ManagedDocument = ({
|
|
|
2808
2773
|
}, []);
|
|
2809
2774
|
return (
|
|
2810
2775
|
// Outer layout wrapper (takes up available space, adds padding)
|
|
2811
|
-
/* @__PURE__ */
|
|
2776
|
+
/* @__PURE__ */ import_react49.default.createElement("div", { className: "grow pt-4 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react49.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react49.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react49.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react49.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react49.default.createElement(
|
|
2812
2777
|
"h1",
|
|
2813
2778
|
{
|
|
2814
2779
|
ref: titleRef,
|
|
@@ -2816,7 +2781,7 @@ var ManagedDocument = ({
|
|
|
2816
2781
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2817
2782
|
},
|
|
2818
2783
|
title
|
|
2819
|
-
)), sections.map((section, index) => /* @__PURE__ */
|
|
2784
|
+
)), sections.map((section, index) => /* @__PURE__ */ import_react49.default.createElement("div", { key: index, className: "relative px-5 md:px-12 py-8 md:py-10" }, section.heading && /* @__PURE__ */ import_react49.default.createElement("p", { className: " text-[11px] tracking-[0.2em] text-black mb-4 text-left " }, section.heading), section.paragraphs && section.paragraphs.length > 0 && /* @__PURE__ */ import_react49.default.createElement("div", { className: "text-[14px] leading-[1.8] text-neutral-700 space-y-4 text-left " }, section.paragraphs.map((text, pIndex) => /* @__PURE__ */ import_react49.default.createElement("p", { key: pIndex }, text))), section.quote && /* @__PURE__ */ import_react49.default.createElement("div", { className: `border-neutral-100 border rounded-xl p-6 ${section.paragraphs && section.paragraphs.length > 0 ? "mt-6" : ""}` }, /* @__PURE__ */ import_react49.default.createElement("p", { className: "text-neutral-900 text-[14px] md:text-[14px] leading-relaxed" }, '"', section.quote, '"')))), (contactText || contactEmail) && /* @__PURE__ */ import_react49.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ import_react49.default.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ import_react49.default.createElement(
|
|
2820
2785
|
"a",
|
|
2821
2786
|
{
|
|
2822
2787
|
href: `mailto:${contactEmail}`,
|
|
@@ -2828,18 +2793,18 @@ var ManagedDocument = ({
|
|
|
2828
2793
|
};
|
|
2829
2794
|
|
|
2830
2795
|
// src/components/ManagedContactBlock.tsx
|
|
2831
|
-
var
|
|
2832
|
-
var
|
|
2796
|
+
var import_react50 = __toESM(require("react"));
|
|
2797
|
+
var import_react51 = require("@hugeicons/react");
|
|
2833
2798
|
var SecureEmail = ({ user, domain, className }) => {
|
|
2834
|
-
const [isMounted, setIsMounted] = (0,
|
|
2835
|
-
(0,
|
|
2799
|
+
const [isMounted, setIsMounted] = (0, import_react50.useState)(false);
|
|
2800
|
+
(0, import_react50.useEffect)(() => {
|
|
2836
2801
|
setIsMounted(true);
|
|
2837
2802
|
}, []);
|
|
2838
2803
|
if (!isMounted) {
|
|
2839
|
-
return /* @__PURE__ */
|
|
2804
|
+
return /* @__PURE__ */ import_react50.default.createElement("span", { className, style: { opacity: 0 } }, "Loading");
|
|
2840
2805
|
}
|
|
2841
2806
|
const email = `${user}@${domain}`;
|
|
2842
|
-
return /* @__PURE__ */
|
|
2807
|
+
return /* @__PURE__ */ import_react50.default.createElement("a", { href: `mailto:${email}`, className }, email);
|
|
2843
2808
|
};
|
|
2844
2809
|
var ManagedContactBlock = ({
|
|
2845
2810
|
tagline,
|
|
@@ -2848,7 +2813,7 @@ var ManagedContactBlock = ({
|
|
|
2848
2813
|
emails,
|
|
2849
2814
|
socials
|
|
2850
2815
|
}) => {
|
|
2851
|
-
return /* @__PURE__ */
|
|
2816
|
+
return /* @__PURE__ */ import_react50.default.createElement("div", { className: "grow pt-4 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react50.default.createElement(
|
|
2852
2817
|
"div",
|
|
2853
2818
|
{
|
|
2854
2819
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2857,51 +2822,50 @@ var ManagedContactBlock = ({
|
|
|
2857
2822
|
backgroundRepeat: "repeat"
|
|
2858
2823
|
}
|
|
2859
2824
|
}
|
|
2860
|
-
), /* @__PURE__ */
|
|
2825
|
+
), /* @__PURE__ */ import_react50.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "relative px-8 md:px-12 py-10" }, tagline && /* @__PURE__ */ import_react50.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react50.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ import_react50.default.createElement("div", { className: "relative px-8 md:px-12 py-8 pb-14" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-wrap gap-12 lg:gap-16 w-full" }, company && /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Contact Details"), /* @__PURE__ */ import_react50.default.createElement("div", { className: "space-y-3 text-[13px] text-neutral-600 leading-[1.8]" }, company.name && /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-black" }, company.name), company.lines && company.lines.map((line, idx) => /* @__PURE__ */ import_react50.default.createElement("p", { key: idx }, line)), company.phone && /* @__PURE__ */ import_react50.default.createElement("p", { className: "pt-2" }, /* @__PURE__ */ import_react50.default.createElement(
|
|
2861
2826
|
"a",
|
|
2862
2827
|
{
|
|
2863
2828
|
href: `tel:${company.phone.replace(/\s+/g, "")}`,
|
|
2864
2829
|
className: "transition-colors hover:text-black"
|
|
2865
2830
|
},
|
|
2866
2831
|
company.phone
|
|
2867
|
-
)))), emails && emails.length > 0 && /* @__PURE__ */
|
|
2832
|
+
)))), emails && emails.length > 0 && /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Email Directory"), /* @__PURE__ */ import_react50.default.createElement("div", { className: "space-y-6 text-[13px]" }, emails.map((email, idx) => /* @__PURE__ */ import_react50.default.createElement("div", { key: idx }, /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-[11px] tracking-[0.2em] mb-1.5 text-neutral-500 " }, email.label), /* @__PURE__ */ import_react50.default.createElement(
|
|
2868
2833
|
SecureEmail,
|
|
2869
2834
|
{
|
|
2870
2835
|
user: email.user,
|
|
2871
2836
|
domain: email.domain,
|
|
2872
2837
|
className: "text-neutral-600 transition-colors hover:text-black"
|
|
2873
2838
|
}
|
|
2874
|
-
))))), socials && socials.length > 0 && /* @__PURE__ */
|
|
2839
|
+
))))), socials && socials.length > 0 && /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Find Us Online"), /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col space-y-5 pt-1" }, socials.map((social, idx) => /* @__PURE__ */ import_react50.default.createElement(
|
|
2875
2840
|
"a",
|
|
2876
2841
|
{
|
|
2877
2842
|
key: idx,
|
|
2878
2843
|
href: social.href,
|
|
2879
2844
|
target: "_blank",
|
|
2880
2845
|
rel: "noopener noreferrer",
|
|
2881
|
-
className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black"
|
|
2882
|
-
"aria-label": social.label
|
|
2846
|
+
className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black"
|
|
2883
2847
|
},
|
|
2884
|
-
/* @__PURE__ */
|
|
2885
|
-
/* @__PURE__ */
|
|
2848
|
+
/* @__PURE__ */ import_react50.default.createElement(import_react51.HugeiconsIcon, { icon: social.icon, size: 18 }),
|
|
2849
|
+
/* @__PURE__ */ import_react50.default.createElement("span", { className: "text-[13px]" }, social.label)
|
|
2886
2850
|
)))))))));
|
|
2887
2851
|
};
|
|
2888
2852
|
|
|
2889
2853
|
// src/components/ManagedPricingBlock.tsx
|
|
2890
|
-
var
|
|
2891
|
-
var
|
|
2854
|
+
var import_react52 = __toESM(require("react"));
|
|
2855
|
+
var import_link7 = __toESM(require("next/link"));
|
|
2892
2856
|
var import_image4 = __toESM(require("next/image"));
|
|
2893
|
-
var CheckIcon = ({ className = "" }) => /* @__PURE__ */
|
|
2894
|
-
var CrossIcon = ({ className = "" }) => /* @__PURE__ */
|
|
2857
|
+
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: "black" }), /* @__PURE__ */ import_react52.default.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
2858
|
+
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" }));
|
|
2895
2859
|
var ManagedPricingBlock = ({
|
|
2896
2860
|
tagline,
|
|
2897
2861
|
title,
|
|
2898
2862
|
plans = [],
|
|
2899
2863
|
tabs
|
|
2900
2864
|
}) => {
|
|
2901
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
2902
|
-
const [activeTabIndex, setActiveTabIndex] = (0,
|
|
2903
|
-
const titleRef = (0,
|
|
2904
|
-
(0,
|
|
2865
|
+
const [isAnimating, setIsAnimating] = (0, import_react52.useState)(false);
|
|
2866
|
+
const [activeTabIndex, setActiveTabIndex] = (0, import_react52.useState)(0);
|
|
2867
|
+
const titleRef = (0, import_react52.useRef)(null);
|
|
2868
|
+
(0, import_react52.useEffect)(() => {
|
|
2905
2869
|
const observer = new IntersectionObserver(
|
|
2906
2870
|
([entry]) => {
|
|
2907
2871
|
if (entry.isIntersecting) {
|
|
@@ -2921,7 +2885,7 @@ var ManagedPricingBlock = ({
|
|
|
2921
2885
|
}, []);
|
|
2922
2886
|
const hasTabs = tabs && tabs.length > 0;
|
|
2923
2887
|
const currentPlans = hasTabs ? tabs[activeTabIndex].plans : plans;
|
|
2924
|
-
return /* @__PURE__ */
|
|
2888
|
+
return /* @__PURE__ */ import_react52.default.createElement("div", { className: "grow pt-10 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col items-center" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "w-full flex flex-col items-center text-center mb-10 sm:mb-12" }, tagline && /* @__PURE__ */ import_react52.default.createElement("span", { className: "text-[9px] tracking-[0.4em] text-black block " }, tagline), /* @__PURE__ */ import_react52.default.createElement(
|
|
2925
2889
|
"h1",
|
|
2926
2890
|
{
|
|
2927
2891
|
ref: titleRef,
|
|
@@ -2929,30 +2893,30 @@ var ManagedPricingBlock = ({
|
|
|
2929
2893
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2930
2894
|
},
|
|
2931
2895
|
title
|
|
2932
|
-
)), hasTabs && /* @__PURE__ */
|
|
2896
|
+
)), hasTabs && /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex items-center justify-center mb-8 sm:mb-10 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex items-center bg-white rounded-full p-1 sm:p-1.5 max-w-full overflow-x-auto custom-scrollbar" }, tabs.map((tab, idx) => {
|
|
2933
2897
|
const isActive = activeTabIndex === idx;
|
|
2934
|
-
return /* @__PURE__ */
|
|
2898
|
+
return /* @__PURE__ */ import_react52.default.createElement(
|
|
2935
2899
|
"button",
|
|
2936
2900
|
{
|
|
2937
2901
|
key: idx,
|
|
2938
2902
|
onClick: () => setActiveTabIndex(idx),
|
|
2939
|
-
className: `px-4
|
|
2903
|
+
className: `px-4 py-1.5 rounded-full text-[11px] transition-all duration-200 outline-none whitespace-nowrap shrink-0 ${isActive ? "bg-neutral-50 text-black " : "text-neutral-500 hover:text-black hover:bg-neutral-50/50 "}`
|
|
2940
2904
|
},
|
|
2941
2905
|
tab.label
|
|
2942
2906
|
);
|
|
2943
|
-
}))), /* @__PURE__ */
|
|
2907
|
+
}))), /* @__PURE__ */ import_react52.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-5 w-full max-w-3xl animate-in slide-in-from-bottom-2 fade-in duration-500" }, currentPlans.map((plan, planIdx) => /* @__PURE__ */ import_react52.default.createElement(
|
|
2944
2908
|
"div",
|
|
2945
2909
|
{
|
|
2946
2910
|
key: `${activeTabIndex}-${planIdx}`,
|
|
2947
2911
|
className: `bg-white rounded-3xl p-6 flex flex-col relative overflow-hidden transition-all duration-300 ${plan.isPremium ? "" : ""}`
|
|
2948
2912
|
},
|
|
2949
|
-
/* @__PURE__ */
|
|
2913
|
+
/* @__PURE__ */ import_react52.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ import_react52.default.createElement("span", { className: "text-black text-base block mb-1" }, plan.name), /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ import_react52.default.createElement("h3", { className: "text-3xl font-light text-black" }, plan.price), plan.period && /* @__PURE__ */ import_react52.default.createElement("span", { className: "text-xs text-neutral-500" }, plan.period)), /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-xs text-neutral-500 mt-2 min-h-8" }, plan.description), plan.showApps && plan.appLogos && plan.appLogos.length > 0 && /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex items-center gap-2 mt-4" }, plan.appLogos.map((logo, logoIdx) => /* @__PURE__ */ import_react52.default.createElement(
|
|
2950
2914
|
"div",
|
|
2951
2915
|
{
|
|
2952
2916
|
key: logoIdx,
|
|
2953
2917
|
className: "relative w-5 h-5 overflow-hidden flex items-center justify-center shrink-0"
|
|
2954
2918
|
},
|
|
2955
|
-
/* @__PURE__ */
|
|
2919
|
+
/* @__PURE__ */ import_react52.default.createElement(
|
|
2956
2920
|
import_image4.default,
|
|
2957
2921
|
{
|
|
2958
2922
|
src: logo.src,
|
|
@@ -2963,37 +2927,36 @@ var ManagedPricingBlock = ({
|
|
|
2963
2927
|
}
|
|
2964
2928
|
)
|
|
2965
2929
|
)))),
|
|
2966
|
-
plan.isPremium ? /* @__PURE__ */
|
|
2967
|
-
|
|
2930
|
+
plan.isPremium ? /* @__PURE__ */ import_react52.default.createElement(ThreeDButton, { href: plan.ctaHref, className: "mb-6 w-full" }, plan.ctaText) : /* @__PURE__ */ import_react52.default.createElement(
|
|
2931
|
+
import_link7.default,
|
|
2968
2932
|
{
|
|
2969
2933
|
href: plan.ctaHref,
|
|
2970
2934
|
className: "w-full py-2.5 px-5 rounded-full border border-neutral-100 text-center text-black text-xs hover:bg-neutral-50 transition-colors mb-6 outline-none block"
|
|
2971
2935
|
},
|
|
2972
2936
|
plan.ctaText
|
|
2973
2937
|
),
|
|
2974
|
-
/* @__PURE__ */
|
|
2938
|
+
/* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-col gap-3" }, plan.features.map((feature, featureIdx) => {
|
|
2975
2939
|
const isAvailable = feature.value !== false;
|
|
2976
2940
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
2977
|
-
return /* @__PURE__ */
|
|
2941
|
+
return /* @__PURE__ */ import_react52.default.createElement("div", { key: featureIdx, className: "flex items-center gap-2.5" }, isAvailable ? /* @__PURE__ */ import_react52.default.createElement(CheckIcon, null) : /* @__PURE__ */ import_react52.default.createElement(CrossIcon, null), /* @__PURE__ */ import_react52.default.createElement("span", { className: `text-xs truncate ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ import_react52.default.createElement("span", { className: "text-neutral-500 ml-1" }, "(", valueText, ")")));
|
|
2978
2942
|
}))
|
|
2979
2943
|
)))));
|
|
2980
2944
|
};
|
|
2981
2945
|
|
|
2982
2946
|
// src/components/ManagedBoardBlock.tsx
|
|
2983
|
-
var
|
|
2947
|
+
var import_react53 = __toESM(require("react"));
|
|
2984
2948
|
var import_image5 = __toESM(require("next/image"));
|
|
2985
|
-
var
|
|
2949
|
+
var import_react54 = require("@hugeicons/react");
|
|
2986
2950
|
var import_core_free_icons17 = require("@hugeicons/core-free-icons");
|
|
2987
|
-
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */
|
|
2951
|
+
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ import_react53.default.createElement(
|
|
2988
2952
|
"a",
|
|
2989
2953
|
{
|
|
2990
2954
|
href,
|
|
2991
2955
|
target: "_blank",
|
|
2992
2956
|
rel: "noopener noreferrer",
|
|
2993
|
-
className: "text-neutral-400 hover:text-black transition-colors"
|
|
2994
|
-
"aria-label": `${name} on ${label}`
|
|
2957
|
+
className: "text-neutral-400 hover:text-black transition-colors"
|
|
2995
2958
|
},
|
|
2996
|
-
/* @__PURE__ */
|
|
2959
|
+
/* @__PURE__ */ import_react53.default.createElement(import_react54.HugeiconsIcon, { icon, size: 16 })
|
|
2997
2960
|
);
|
|
2998
2961
|
var ManagedBoardBlock = ({
|
|
2999
2962
|
tagline,
|
|
@@ -3002,7 +2965,7 @@ var ManagedBoardBlock = ({
|
|
|
3002
2965
|
contactText,
|
|
3003
2966
|
contactEmail
|
|
3004
2967
|
}) => {
|
|
3005
|
-
return /* @__PURE__ */
|
|
2968
|
+
return /* @__PURE__ */ import_react53.default.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react53.default.createElement("div", { className: "relative w-full mx-auto overflow-hidden max-w-7xl" }, /* @__PURE__ */ import_react53.default.createElement(
|
|
3006
2969
|
"div",
|
|
3007
2970
|
{
|
|
3008
2971
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3011,7 +2974,7 @@ var ManagedBoardBlock = ({
|
|
|
3011
2974
|
backgroundRepeat: "repeat"
|
|
3012
2975
|
}
|
|
3013
2976
|
}
|
|
3014
|
-
), /* @__PURE__ */
|
|
2977
|
+
), /* @__PURE__ */ import_react53.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react53.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react53.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react53.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ import_react53.default.createElement("div", { className: "relative px-5 md:px-12 py-4 md:py-8" }, /* @__PURE__ */ import_react53.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-5 md:gap-8" }, members.map((member, idx) => /* @__PURE__ */ import_react53.default.createElement("div", { key: idx, className: "relative p-6 md:p-8 rounded-2xl bg-white flex flex-col transition-all group" }, /* @__PURE__ */ import_react53.default.createElement("div", { className: "flex items-start space-x-4 md:space-x-5 mb-5 md:mb-6" }, /* @__PURE__ */ import_react53.default.createElement("div", { className: "relative w-14 h-14 md:w-16 md:h-16 shrink-0 bg-white overflow-hidden rounded-xl" }, /* @__PURE__ */ import_react53.default.createElement(
|
|
3015
2978
|
import_image5.default,
|
|
3016
2979
|
{
|
|
3017
2980
|
src: member.imageSrc,
|
|
@@ -3020,7 +2983,7 @@ var ManagedBoardBlock = ({
|
|
|
3020
2983
|
sizes: "(max-width: 768px) 56px, 64px",
|
|
3021
2984
|
className: "object-cover grayscale opacity-100 transition-opacity"
|
|
3022
2985
|
}
|
|
3023
|
-
)), /* @__PURE__ */
|
|
2986
|
+
)), /* @__PURE__ */ import_react53.default.createElement("div", { className: "pt-1" }, /* @__PURE__ */ import_react53.default.createElement("h3", { className: " text-[14px] md:text-[15px] text-black tracking-tight" }, member.name), /* @__PURE__ */ import_react53.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 mt-1.5 " }, member.title))), /* @__PURE__ */ import_react53.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 text-left grow mb-8" }, member.bio), /* @__PURE__ */ import_react53.default.createElement("div", { className: "space-y-6 mt-auto" }, /* @__PURE__ */ import_react53.default.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ import_react53.default.createElement(ThreeDButton, { href: member.website }, "Visit Website")), /* @__PURE__ */ import_react53.default.createElement("div", { className: "flex space-x-4 pt-5" }, member.twitterHandle && member.twitterHandle.length > 0 && /* @__PURE__ */ import_react53.default.createElement(
|
|
3024
2987
|
MemberSocialLink,
|
|
3025
2988
|
{
|
|
3026
2989
|
href: `https://x.com/${member.twitterHandle}`,
|
|
@@ -3028,7 +2991,7 @@ var ManagedBoardBlock = ({
|
|
|
3028
2991
|
label: "X",
|
|
3029
2992
|
name: member.name
|
|
3030
2993
|
}
|
|
3031
|
-
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */
|
|
2994
|
+
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */ import_react53.default.createElement(
|
|
3032
2995
|
MemberSocialLink,
|
|
3033
2996
|
{
|
|
3034
2997
|
href: member.linkedinHandle,
|
|
@@ -3036,28 +2999,28 @@ var ManagedBoardBlock = ({
|
|
|
3036
2999
|
label: "LinkedIn",
|
|
3037
3000
|
name: member.name
|
|
3038
3001
|
}
|
|
3039
|
-
))))))), (contactText || contactEmail) && /* @__PURE__ */
|
|
3002
|
+
))))))), (contactText || contactEmail) && /* @__PURE__ */ import_react53.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ import_react53.default.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ import_react53.default.createElement("a", { href: `mailto:${contactEmail}`, className: "text-black decoration-black decoration-2 underline-offset-4 ml-1 transition-colors" }, contactEmail))))));
|
|
3040
3003
|
};
|
|
3041
3004
|
|
|
3042
3005
|
// src/components/ManagedNotFoundBlock.tsx
|
|
3043
|
-
var
|
|
3006
|
+
var import_react55 = __toESM(require("react"));
|
|
3044
3007
|
var ManagedNotFoundBlock = ({
|
|
3045
3008
|
title = "404 - Page Not Found",
|
|
3046
3009
|
description = "The page you are looking for does not exist or has been moved."
|
|
3047
3010
|
}) => {
|
|
3048
|
-
return /* @__PURE__ */
|
|
3011
|
+
return /* @__PURE__ */ import_react55.default.createElement("main", { className: "min-h-screen flex items-center justify-center relative z-20 bg-transparent" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "p-6 w-full max-w-md mx-auto text-center" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "mb-8 flex justify-center" }, /* @__PURE__ */ import_react55.default.createElement(
|
|
3049
3012
|
"svg",
|
|
3050
3013
|
{
|
|
3051
3014
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3052
3015
|
viewBox: "0 0 24 24",
|
|
3053
3016
|
className: "w-12 h-12 fill-neutral-100"
|
|
3054
3017
|
},
|
|
3055
|
-
/* @__PURE__ */
|
|
3056
|
-
)), /* @__PURE__ */
|
|
3018
|
+
/* @__PURE__ */ import_react55.default.createElement("path", { fillRule: "evenodd", d: "M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z", clipRule: "evenodd" })
|
|
3019
|
+
)), /* @__PURE__ */ import_react55.default.createElement("h1", { className: " text-xl md:text-3xl text-black tracking-tight mb-4" }, title), /* @__PURE__ */ import_react55.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-12" }, description)));
|
|
3057
3020
|
};
|
|
3058
3021
|
|
|
3059
3022
|
// src/components/ManagedNewsletterSplitBlock.tsx
|
|
3060
|
-
var
|
|
3023
|
+
var import_react56 = __toESM(require("react"));
|
|
3061
3024
|
var import_image6 = __toESM(require("next/image"));
|
|
3062
3025
|
var ManagedNewsletterSplitBlock = ({
|
|
3063
3026
|
tagline,
|
|
@@ -3071,7 +3034,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3071
3034
|
ctaHref = "/contact",
|
|
3072
3035
|
children
|
|
3073
3036
|
}) => {
|
|
3074
|
-
return /* @__PURE__ */
|
|
3037
|
+
return /* @__PURE__ */ import_react56.default.createElement("div", { className: "grow flex flex-col md:flex-row relative w-full pt-32 md:pt-0" }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "hidden md:block md:w-1/2 relative min-h-screen overflow-hidden" }, /* @__PURE__ */ import_react56.default.createElement(
|
|
3075
3038
|
import_image6.default,
|
|
3076
3039
|
{
|
|
3077
3040
|
src: imageSrc,
|
|
@@ -3081,7 +3044,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3081
3044
|
className: "object-cover object-top grayscale opacity-60",
|
|
3082
3045
|
quality: 100
|
|
3083
3046
|
}
|
|
3084
|
-
), /* @__PURE__ */
|
|
3047
|
+
), /* @__PURE__ */ import_react56.default.createElement(
|
|
3085
3048
|
"div",
|
|
3086
3049
|
{
|
|
3087
3050
|
className: "absolute inset-0 z-10 pointer-events-none",
|
|
@@ -3089,7 +3052,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3089
3052
|
background: "linear-gradient(to right, rgba(255,255,255,0) 30%, #ffffff 100%)"
|
|
3090
3053
|
}
|
|
3091
3054
|
}
|
|
3092
|
-
), /* @__PURE__ */
|
|
3055
|
+
), /* @__PURE__ */ import_react56.default.createElement(
|
|
3093
3056
|
"div",
|
|
3094
3057
|
{
|
|
3095
3058
|
className: "absolute inset-x-0 bottom-0 h-40 z-10 pointer-events-none",
|
|
@@ -3097,7 +3060,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3097
3060
|
background: "linear-gradient(to bottom, rgba(255,255,255,0) 0%, #ffffff 100%)"
|
|
3098
3061
|
}
|
|
3099
3062
|
}
|
|
3100
|
-
)), /* @__PURE__ */
|
|
3063
|
+
)), /* @__PURE__ */ import_react56.default.createElement("div", { className: "w-full md:w-1/2 flex mt-22 flex-col items-center justify-center p-4 md:p-12 relative z-20" }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "relative w-full max-w-lg p-8 md:p-12 text-center md:text-left transition-all duration-700 ease-out" }, /* @__PURE__ */ import_react56.default.createElement(
|
|
3101
3064
|
"div",
|
|
3102
3065
|
{
|
|
3103
3066
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3106,7 +3069,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3106
3069
|
backgroundRepeat: "repeat"
|
|
3107
3070
|
}
|
|
3108
3071
|
}
|
|
3109
|
-
), /* @__PURE__ */
|
|
3072
|
+
), /* @__PURE__ */ import_react56.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "mb-10 border-b border-neutral-100 pb-8 text-center md:text-left" }, tagline && /* @__PURE__ */ import_react56.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 " }, tagline), /* @__PURE__ */ import_react56.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight mb-4" }, title), subtitle && /* @__PURE__ */ import_react56.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, subtitle)), /* @__PURE__ */ import_react56.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-10 text-center md:text-left" }, description), children && /* @__PURE__ */ import_react56.default.createElement("div", { className: "mb-8 text-left" }, children), /* @__PURE__ */ import_react56.default.createElement("div", { className: "text-center md:text-left mt-10 space-y-6" }, dividerText && /* @__PURE__ */ import_react56.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "grow h-px bg-neutral-100" }), /* @__PURE__ */ import_react56.default.createElement("span", { className: "shrink mx-4 text-[11px] tracking-[0.2em] text-neutral-400 " }, dividerText), /* @__PURE__ */ import_react56.default.createElement("div", { className: "grow h-px bg-neutral-100" })), ctaText && ctaHref && /* @__PURE__ */ import_react56.default.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ import_react56.default.createElement(
|
|
3110
3073
|
ThreeDButton,
|
|
3111
3074
|
{
|
|
3112
3075
|
href: ctaHref,
|
|
@@ -3117,14 +3080,14 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3117
3080
|
};
|
|
3118
3081
|
|
|
3119
3082
|
// src/components/PortfolioHero.tsx
|
|
3120
|
-
var
|
|
3121
|
-
var
|
|
3083
|
+
var import_react57 = __toESM(require("react"));
|
|
3084
|
+
var import_link8 = __toESM(require("next/link"));
|
|
3122
3085
|
var import_image7 = __toESM(require("next/image"));
|
|
3123
|
-
var
|
|
3086
|
+
var import_react58 = require("@hugeicons/react");
|
|
3124
3087
|
var import_core_free_icons18 = require("@hugeicons/core-free-icons");
|
|
3125
3088
|
var useScrollAnimation = () => {
|
|
3126
|
-
const elementRef = (0,
|
|
3127
|
-
(0,
|
|
3089
|
+
const elementRef = (0, import_react57.useRef)(null);
|
|
3090
|
+
(0, import_react57.useEffect)(() => {
|
|
3128
3091
|
const el = elementRef.current;
|
|
3129
3092
|
if (!el) return;
|
|
3130
3093
|
const observer = new IntersectionObserver(
|
|
@@ -3160,13 +3123,13 @@ var PortfolioHero = ({
|
|
|
3160
3123
|
secondaryCtaHref
|
|
3161
3124
|
}) => {
|
|
3162
3125
|
const heroContentRef = useScrollAnimation();
|
|
3163
|
-
return /* @__PURE__ */
|
|
3126
|
+
return /* @__PURE__ */ import_react57.default.createElement("section", { className: "pt-8 pb-16 px-6 md:px-12 flex flex-col relative overflow-hidden z-10 w-full" }, /* @__PURE__ */ import_react57.default.createElement(
|
|
3164
3127
|
"div",
|
|
3165
3128
|
{
|
|
3166
3129
|
ref: heroContentRef,
|
|
3167
3130
|
className: "w-full opacity-0 translate-y-5 transition-all duration-1000 ease-out relative z-10"
|
|
3168
3131
|
},
|
|
3169
|
-
/* @__PURE__ */
|
|
3132
|
+
/* @__PURE__ */ import_react57.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-5 sm:gap-8 mb-10" }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "relative w-20 h-20 sm:w-32 sm:h-32 rounded-full overflow-hidden border border-neutral-100 shrink-0 shadow-sm" }, /* @__PURE__ */ import_react57.default.createElement(
|
|
3170
3133
|
import_image7.default,
|
|
3171
3134
|
{
|
|
3172
3135
|
src: imageSrc,
|
|
@@ -3177,7 +3140,7 @@ var PortfolioHero = ({
|
|
|
3177
3140
|
sizes: "(max-width: 640px) 80px, 128px",
|
|
3178
3141
|
quality: 100
|
|
3179
3142
|
}
|
|
3180
|
-
)), /* @__PURE__ */
|
|
3143
|
+
)), /* @__PURE__ */ import_react57.default.createElement("div", { className: "flex flex-col text-left" }, /* @__PURE__ */ import_react57.default.createElement("h1", { className: " text-3xl sm:text-5xl lg:text-6xl tracking-tight text-black leading-none mb-3" }, name), socialLabel && /* @__PURE__ */ import_react57.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, socialLabel), socialLinkText && socialLinkHref && /* @__PURE__ */ import_react57.default.createElement(
|
|
3181
3144
|
"a",
|
|
3182
3145
|
{
|
|
3183
3146
|
href: socialLinkHref,
|
|
@@ -3187,30 +3150,30 @@ var PortfolioHero = ({
|
|
|
3187
3150
|
},
|
|
3188
3151
|
socialLinkText
|
|
3189
3152
|
))),
|
|
3190
|
-
/* @__PURE__ */
|
|
3191
|
-
/* @__PURE__ */
|
|
3153
|
+
/* @__PURE__ */ import_react57.default.createElement("p", { className: "text-[13px] leading-[1.8] max-w-4xl mb-12 text-neutral-600" }, bio),
|
|
3154
|
+
/* @__PURE__ */ import_react57.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 w-full sm:w-auto" }, primaryCtaText && primaryCtaHref && /* @__PURE__ */ import_react57.default.createElement("div", { className: "w-full sm:w-auto *:w-full" }, /* @__PURE__ */ import_react57.default.createElement(
|
|
3192
3155
|
ThreeDButton,
|
|
3193
3156
|
{
|
|
3194
3157
|
href: primaryCtaHref,
|
|
3195
3158
|
className: "py-3 tracking-widest text-[11px]"
|
|
3196
3159
|
},
|
|
3197
3160
|
primaryCtaText
|
|
3198
|
-
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
3199
|
-
|
|
3161
|
+
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react57.default.createElement(
|
|
3162
|
+
import_link8.default,
|
|
3200
3163
|
{
|
|
3201
3164
|
href: secondaryCtaHref,
|
|
3202
3165
|
className: "w-full sm:w-auto inline-flex items-center justify-center gap-3 text-[11px] tracking-[0.2em] rounded-full px-8 py-3.5 bg-neutral-200 transition-colors text-black hover:bg-neutral-200 outline-none"
|
|
3203
3166
|
},
|
|
3204
3167
|
secondaryCtaText,
|
|
3205
|
-
/* @__PURE__ */
|
|
3168
|
+
/* @__PURE__ */ import_react57.default.createElement(import_react58.HugeiconsIcon, { icon: import_core_free_icons18.ArrowRight01Icon, size: 16 })
|
|
3206
3169
|
))
|
|
3207
3170
|
));
|
|
3208
3171
|
};
|
|
3209
3172
|
|
|
3210
3173
|
// src/components/GifFeatureCard.tsx
|
|
3211
|
-
var
|
|
3174
|
+
var import_react59 = __toESM(require("react"));
|
|
3212
3175
|
var import_image8 = __toESM(require("next/image"));
|
|
3213
|
-
var
|
|
3176
|
+
var import_react60 = require("@hugeicons/react");
|
|
3214
3177
|
var import_core_free_icons19 = require("@hugeicons/core-free-icons");
|
|
3215
3178
|
var GifFeatureCard = ({
|
|
3216
3179
|
gifSrc,
|
|
@@ -3219,20 +3182,20 @@ var GifFeatureCard = ({
|
|
|
3219
3182
|
alt = "Feature animation",
|
|
3220
3183
|
className = "aspect-video"
|
|
3221
3184
|
}) => {
|
|
3222
|
-
const [isLoading, setIsLoading] = (0,
|
|
3223
|
-
return /* @__PURE__ */
|
|
3224
|
-
|
|
3185
|
+
const [isLoading, setIsLoading] = (0, import_react59.useState)(true);
|
|
3186
|
+
return /* @__PURE__ */ import_react59.default.createElement("div", { className: `relative w-full bg-black overflow-hidden shadow-2xl ${className}` }, isLoading && /* @__PURE__ */ import_react59.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-black" }, /* @__PURE__ */ import_react59.default.createElement(
|
|
3187
|
+
import_react60.HugeiconsIcon,
|
|
3225
3188
|
{
|
|
3226
3189
|
icon: import_core_free_icons19.Loading03Icon,
|
|
3227
3190
|
size: 32,
|
|
3228
3191
|
className: "animate-spin text-white"
|
|
3229
3192
|
}
|
|
3230
|
-
)), /* @__PURE__ */
|
|
3193
|
+
)), /* @__PURE__ */ import_react59.default.createElement(
|
|
3231
3194
|
"div",
|
|
3232
3195
|
{
|
|
3233
3196
|
className: `absolute inset-0 z-0 transition-all duration-1000 ease-out ${isLoading ? "scale-105 blur-2xl opacity-0" : "scale-100 blur-0 opacity-100"}`
|
|
3234
3197
|
},
|
|
3235
|
-
/* @__PURE__ */
|
|
3198
|
+
/* @__PURE__ */ import_react59.default.createElement(
|
|
3236
3199
|
import_image8.default,
|
|
3237
3200
|
{
|
|
3238
3201
|
src: gifSrc,
|
|
@@ -3243,16 +3206,16 @@ var GifFeatureCard = ({
|
|
|
3243
3206
|
className: "object-cover object-center pointer-events-none"
|
|
3244
3207
|
}
|
|
3245
3208
|
)
|
|
3246
|
-
), /* @__PURE__ */
|
|
3209
|
+
), /* @__PURE__ */ import_react59.default.createElement(
|
|
3247
3210
|
"div",
|
|
3248
3211
|
{
|
|
3249
3212
|
className: "absolute inset-x-0 bottom-0 h-1/2 sm:h-2/3 bg-linear-to-t from-black/95 via-black/40 to-transparent z-10 pointer-events-none transition-opacity duration-700"
|
|
3250
3213
|
}
|
|
3251
|
-
), /* @__PURE__ */
|
|
3214
|
+
), /* @__PURE__ */ import_react59.default.createElement("div", { className: "absolute inset-x-0 bottom-0 p-6 sm:p-8 z-30 flex flex-col justify-end text-left pointer-events-none" }, title && /* @__PURE__ */ import_react59.default.createElement("h3", { className: " text-xl sm:text-2xl md:text-3xl text-white tracking-tight mb-2 sm:mb-3 drop-shadow-md" }, title), subtitle && /* @__PURE__ */ import_react59.default.createElement("p", { className: "text-[13px] sm:text-[15px] leading-relaxed text-neutral-300 max-w-2xl drop-shadow-sm" }, subtitle)));
|
|
3252
3215
|
};
|
|
3253
3216
|
|
|
3254
3217
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
3255
|
-
var
|
|
3218
|
+
var import_react61 = __toESM(require("react"));
|
|
3256
3219
|
var import_image9 = __toESM(require("next/image"));
|
|
3257
3220
|
var MedicalFeatureStatsBlock = ({
|
|
3258
3221
|
bottomHeadline,
|
|
@@ -3261,9 +3224,9 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3261
3224
|
trustText,
|
|
3262
3225
|
stats
|
|
3263
3226
|
}) => {
|
|
3264
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
3265
|
-
const titleRef = (0,
|
|
3266
|
-
(0,
|
|
3227
|
+
const [isAnimating, setIsAnimating] = (0, import_react61.useState)(false);
|
|
3228
|
+
const titleRef = (0, import_react61.useRef)(null);
|
|
3229
|
+
(0, import_react61.useEffect)(() => {
|
|
3267
3230
|
const observer = new IntersectionObserver(
|
|
3268
3231
|
([entry]) => {
|
|
3269
3232
|
if (entry.isIntersecting) {
|
|
@@ -3281,7 +3244,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3281
3244
|
}
|
|
3282
3245
|
return () => observer.disconnect();
|
|
3283
3246
|
}, []);
|
|
3284
|
-
return /* @__PURE__ */
|
|
3247
|
+
return /* @__PURE__ */ import_react61.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
3285
3248
|
"h2",
|
|
3286
3249
|
{
|
|
3287
3250
|
ref: titleRef,
|
|
@@ -3289,7 +3252,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3289
3252
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
3290
3253
|
},
|
|
3291
3254
|
bottomHeadline
|
|
3292
|
-
), /* @__PURE__ */
|
|
3255
|
+
), /* @__PURE__ */ import_react61.default.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ import_react61.default.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ import_react61.default.createElement("div", { key: i, className: "relative w-12 h-12 rounded-full border-[3px] border-white overflow-hidden bg-neutral-100 z-1 hover:z-10 transition-all" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
3293
3256
|
import_image9.default,
|
|
3294
3257
|
{
|
|
3295
3258
|
src,
|
|
@@ -3298,17 +3261,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3298
3261
|
sizes: "48px",
|
|
3299
3262
|
className: "object-cover"
|
|
3300
3263
|
}
|
|
3301
|
-
)))), /* @__PURE__ */
|
|
3264
|
+
)))), /* @__PURE__ */ import_react61.default.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ import_react61.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ import_react61.default.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ import_react61.default.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ import_react61.default.createElement("h1", { className: "text-6xl gradient-text md:text-[80px] tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
|
|
3302
3265
|
};
|
|
3303
3266
|
|
|
3304
3267
|
// src/components/ConsultantShowcase.tsx
|
|
3305
|
-
var
|
|
3268
|
+
var import_react62 = __toESM(require("react"));
|
|
3306
3269
|
var import_image10 = __toESM(require("next/image"));
|
|
3307
|
-
var
|
|
3270
|
+
var import_react63 = require("@hugeicons/react");
|
|
3308
3271
|
var import_core_free_icons20 = require("@hugeicons/core-free-icons");
|
|
3309
3272
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
3310
|
-
const [isLoading, setIsLoading] = (0,
|
|
3311
|
-
return /* @__PURE__ */
|
|
3273
|
+
const [isLoading, setIsLoading] = (0, import_react62.useState)(true);
|
|
3274
|
+
return /* @__PURE__ */ import_react62.default.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ import_react62.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-800/50 backdrop-blur-md transition-opacity duration-300" }, /* @__PURE__ */ import_react62.default.createElement(import_react63.HugeiconsIcon, { icon: import_core_free_icons20.Loading03Icon, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ import_react62.default.createElement(
|
|
3312
3275
|
import_image10.default,
|
|
3313
3276
|
{
|
|
3314
3277
|
src,
|
|
@@ -3327,9 +3290,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
3327
3290
|
var ConsultantShowcase = ({
|
|
3328
3291
|
profiles
|
|
3329
3292
|
}) => {
|
|
3330
|
-
const [currentIndex, setCurrentIndex] = (0,
|
|
3331
|
-
const [touchStart, setTouchStart] = (0,
|
|
3332
|
-
const [touchEnd, setTouchEnd] = (0,
|
|
3293
|
+
const [currentIndex, setCurrentIndex] = (0, import_react62.useState)(0);
|
|
3294
|
+
const [touchStart, setTouchStart] = (0, import_react62.useState)(null);
|
|
3295
|
+
const [touchEnd, setTouchEnd] = (0, import_react62.useState)(null);
|
|
3333
3296
|
const nextSlide = () => {
|
|
3334
3297
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
3335
3298
|
};
|
|
@@ -3354,7 +3317,7 @@ var ConsultantShowcase = ({
|
|
|
3354
3317
|
}
|
|
3355
3318
|
};
|
|
3356
3319
|
if (!profiles || profiles.length === 0) return null;
|
|
3357
|
-
return /* @__PURE__ */
|
|
3320
|
+
return /* @__PURE__ */ import_react62.default.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react62.default.createElement(
|
|
3358
3321
|
"div",
|
|
3359
3322
|
{
|
|
3360
3323
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -3364,13 +3327,13 @@ var ConsultantShowcase = ({
|
|
|
3364
3327
|
},
|
|
3365
3328
|
profiles.map((profile, idx) => {
|
|
3366
3329
|
const isActive = idx === currentIndex;
|
|
3367
|
-
return /* @__PURE__ */
|
|
3330
|
+
return /* @__PURE__ */ import_react62.default.createElement(
|
|
3368
3331
|
"div",
|
|
3369
3332
|
{
|
|
3370
3333
|
key: profile.id,
|
|
3371
3334
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
3372
3335
|
},
|
|
3373
|
-
/* @__PURE__ */
|
|
3336
|
+
/* @__PURE__ */ import_react62.default.createElement(
|
|
3374
3337
|
ImageWithLoader,
|
|
3375
3338
|
{
|
|
3376
3339
|
src: profile.imageSrc,
|
|
@@ -3378,19 +3341,18 @@ var ConsultantShowcase = ({
|
|
|
3378
3341
|
priority: idx === 0
|
|
3379
3342
|
}
|
|
3380
3343
|
),
|
|
3381
|
-
/* @__PURE__ */
|
|
3382
|
-
/* @__PURE__ */
|
|
3383
|
-
/* @__PURE__ */
|
|
3344
|
+
/* @__PURE__ */ import_react62.default.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
3345
|
+
/* @__PURE__ */ import_react62.default.createElement("div", { className: "absolute top-0 left-0 w-full h-[60%] bg-linear-to-b from-black/80 via-black/30 to-transparent z-20 pointer-events-none" }),
|
|
3346
|
+
/* @__PURE__ */ import_react62.default.createElement("div", { className: `absolute top-8 left-8 md:top-12 md:left-12 z-30 text-white max-w-lg transition-transform duration-700 ease-out ${isActive ? "translate-y-0" : "-translate-y-4"}` }, /* @__PURE__ */ import_react62.default.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ import_react62.default.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ import_react62.default.createElement("p", { className: "text-[15px] text-white/80 tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ import_react62.default.createElement("p", { className: "text-[15px] text-white/80 tracking-wide mt-1" }, profile.description)))
|
|
3384
3347
|
);
|
|
3385
3348
|
}),
|
|
3386
|
-
/* @__PURE__ */
|
|
3387
|
-
/* @__PURE__ */
|
|
3388
|
-
/* @__PURE__ */
|
|
3349
|
+
/* @__PURE__ */ import_react62.default.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide }),
|
|
3350
|
+
/* @__PURE__ */ import_react62.default.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide }),
|
|
3351
|
+
/* @__PURE__ */ import_react62.default.createElement("div", { className: "absolute bottom-6 md:bottom-8 left-0 w-full px-4 z-30 flex justify-center items-center gap-2" }, profiles.map((_, idx) => /* @__PURE__ */ import_react62.default.createElement(
|
|
3389
3352
|
"button",
|
|
3390
3353
|
{
|
|
3391
3354
|
key: idx,
|
|
3392
3355
|
onClick: () => setCurrentIndex(idx),
|
|
3393
|
-
"aria-label": `Go to slide ${idx + 1}`,
|
|
3394
3356
|
className: `h-1 rounded-full transition-all duration-300 ease-out outline-none ${currentIndex === idx ? "w-8 bg-white" : "w-4 bg-white/30 hover:bg-white/60 cursor-pointer"}`
|
|
3395
3357
|
}
|
|
3396
3358
|
)))
|
|
@@ -3398,13 +3360,13 @@ var ConsultantShowcase = ({
|
|
|
3398
3360
|
};
|
|
3399
3361
|
|
|
3400
3362
|
// src/components/ContentGridBlock.tsx
|
|
3401
|
-
var
|
|
3363
|
+
var import_react64 = __toESM(require("react"));
|
|
3402
3364
|
var import_image11 = __toESM(require("next/image"));
|
|
3403
|
-
var
|
|
3365
|
+
var import_react65 = require("@hugeicons/react");
|
|
3404
3366
|
var import_core_free_icons21 = require("@hugeicons/core-free-icons");
|
|
3405
3367
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
3406
|
-
const [isLoading, setIsLoading] = (0,
|
|
3407
|
-
return /* @__PURE__ */
|
|
3368
|
+
const [isLoading, setIsLoading] = (0, import_react64.useState)(true);
|
|
3369
|
+
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(
|
|
3408
3370
|
import_image11.default,
|
|
3409
3371
|
{
|
|
3410
3372
|
src,
|
|
@@ -3426,30 +3388,30 @@ var ContentGridBlock = ({
|
|
|
3426
3388
|
middleBottomCard,
|
|
3427
3389
|
rightCards
|
|
3428
3390
|
}) => {
|
|
3429
|
-
return /* @__PURE__ */
|
|
3391
|
+
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-100 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 text-white rounded-3xl overflow-hidden group" }, /* @__PURE__ */ import_react64.default.createElement(
|
|
3430
3392
|
ImageWithLoader2,
|
|
3431
3393
|
{
|
|
3432
3394
|
src: card.bgImageSrc,
|
|
3433
3395
|
alt: card.title,
|
|
3434
3396
|
className: "absolute inset-0 w-full h-full"
|
|
3435
3397
|
}
|
|
3436
|
-
), /* @__PURE__ */
|
|
3398
|
+
), /* @__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)))))))));
|
|
3437
3399
|
};
|
|
3438
3400
|
|
|
3439
3401
|
// src/components/ManagedProjectsBlock.tsx
|
|
3440
|
-
var
|
|
3441
|
-
var
|
|
3402
|
+
var import_react66 = __toESM(require("react"));
|
|
3403
|
+
var import_link9 = __toESM(require("next/link"));
|
|
3442
3404
|
var GridSection = ({
|
|
3443
3405
|
children,
|
|
3444
3406
|
isLast = false,
|
|
3445
3407
|
className = "py-8 md:py-10"
|
|
3446
|
-
}) => /* @__PURE__ */
|
|
3408
|
+
}) => /* @__PURE__ */ import_react66.default.createElement("div", { className: `relative px-5 md:px-12 ${className} ${!isLast ? "" : ""}` }, children);
|
|
3447
3409
|
var ManagedProjectsBlock = ({
|
|
3448
3410
|
tagline,
|
|
3449
3411
|
title,
|
|
3450
3412
|
projects
|
|
3451
3413
|
}) => {
|
|
3452
|
-
return /* @__PURE__ */
|
|
3414
|
+
return /* @__PURE__ */ import_react66.default.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react66.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-5xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react66.default.createElement(
|
|
3453
3415
|
"div",
|
|
3454
3416
|
{
|
|
3455
3417
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3458,10 +3420,10 @@ var ManagedProjectsBlock = ({
|
|
|
3458
3420
|
backgroundRepeat: "repeat"
|
|
3459
3421
|
}
|
|
3460
3422
|
}
|
|
3461
|
-
), /* @__PURE__ */
|
|
3423
|
+
), /* @__PURE__ */ import_react66.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react66.default.createElement(GridSection, null, tagline && /* @__PURE__ */ import_react66.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react66.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), projects.map((project, index) => {
|
|
3462
3424
|
const isLast = index === projects.length - 1;
|
|
3463
|
-
const projectContent = /* @__PURE__ */
|
|
3464
|
-
return /* @__PURE__ */
|
|
3425
|
+
const projectContent = /* @__PURE__ */ import_react66.default.createElement("div", { className: "group block w-full" }, /* @__PURE__ */ import_react66.default.createElement("div", { className: "flex flex-col md:flex-row md:items-center justify-between gap-3 md:gap-4 mb-4 md:mb-5" }, /* @__PURE__ */ import_react66.default.createElement("div", { className: "flex items-center gap-3 md:gap-4" }, /* @__PURE__ */ import_react66.default.createElement("h2", { className: " text-[16px] text-black transition-all flex items-center gap-2" }, project.title, /* @__PURE__ */ import_react66.default.createElement("span", { className: "text-[11px] opacity-0 -translate-x-2 group-hover:opacity-100 group-hover:translate-x-0 transition-all duration-300" }, project.isExternal ? "\u2197" : "\u2192")), /* @__PURE__ */ import_react66.default.createElement("span", { className: `text-[9px] px-2.5 py-1 rounded-full tracking-[0.15em] transition-colors ${project.status.toLowerCase() === "production" ? "bg-black text-white" : "bg-neutral-100 text-neutral-500 group-hover:bg-neutral-100 group-hover:text-black"}` }, project.status)), /* @__PURE__ */ import_react66.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 shrink-0 " }, project.date)), /* @__PURE__ */ import_react66.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 max-w-4xl text-left transition-colors group-hover:text-black" }, project.description));
|
|
3426
|
+
return /* @__PURE__ */ import_react66.default.createElement(GridSection, { key: project.id || index, isLast, className: isLast ? "py-8 md:py-10 pb-12 md:pb-14" : "py-8 md:py-10" }, project.isExternal ? /* @__PURE__ */ import_react66.default.createElement("a", { href: project.link, target: "_blank", rel: "noopener noreferrer", className: "block outline-none" }, projectContent) : /* @__PURE__ */ import_react66.default.createElement(import_link9.default, { href: project.link, className: "block outline-none" }, projectContent));
|
|
3465
3427
|
}))));
|
|
3466
3428
|
};
|
|
3467
3429
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -3499,6 +3461,7 @@ var ManagedProjectsBlock = ({
|
|
|
3499
3461
|
UniversalOrganizationPage,
|
|
3500
3462
|
UniversalProfilePage,
|
|
3501
3463
|
UniversalProfileSettings,
|
|
3464
|
+
UniversalSidebar,
|
|
3502
3465
|
UniversalTransactionPage,
|
|
3503
3466
|
UniversalWalletPage,
|
|
3504
3467
|
WaitlistDialog
|