@retinalabsllc/zairusjs 9.0.50 → 9.0.55
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 +502 -527
- package/dist/index.mjs +452 -480
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -593,206 +593,49 @@ var Footer = ({
|
|
|
593
593
|
};
|
|
594
594
|
|
|
595
595
|
// src/components/MobileNav.tsx
|
|
596
|
-
import React8, { useState as useState5 } from "react";
|
|
597
|
-
import Link4 from "next/link";
|
|
598
|
-
import { usePathname as usePathname2, useRouter } from "next/navigation";
|
|
599
|
-
import { HugeiconsIcon as HugeiconsIcon4 } from "@hugeicons/react";
|
|
600
|
-
import {
|
|
601
|
-
SidebarLeft01Icon,
|
|
602
|
-
ArrowLeft01Icon,
|
|
603
|
-
LogoutCircle02Icon,
|
|
604
|
-
Notification01Icon
|
|
605
|
-
} from "@hugeicons/core-free-icons";
|
|
606
|
-
|
|
607
|
-
// src/components/ConfirmationDialog.tsx
|
|
608
596
|
import React7 from "react";
|
|
597
|
+
import Link4 from "next/link";
|
|
598
|
+
import { usePathname as usePathname2 } from "next/navigation";
|
|
609
599
|
import { HugeiconsIcon as HugeiconsIcon3 } from "@hugeicons/react";
|
|
610
|
-
|
|
611
|
-
var ConfirmationDialog = ({
|
|
612
|
-
isOpen,
|
|
613
|
-
title,
|
|
614
|
-
message,
|
|
615
|
-
confirmText = "Confirm",
|
|
616
|
-
cancelText = "Cancel",
|
|
617
|
-
isProcessing = false,
|
|
618
|
-
isDestructive = true,
|
|
619
|
-
onClose,
|
|
620
|
-
onConfirm
|
|
621
|
-
}) => {
|
|
622
|
-
if (!isOpen) return null;
|
|
623
|
-
return /* @__PURE__ */ React7.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React7.createElement(
|
|
624
|
-
"div",
|
|
625
|
-
{
|
|
626
|
-
className: "absolute inset-0 bg-black/40 ",
|
|
627
|
-
onClick: () => !isProcessing && onClose()
|
|
628
|
-
}
|
|
629
|
-
), /* @__PURE__ */ React7.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__ */ React7.createElement("div", { className: "p-6 pb-4 text-center w-full" }, /* @__PURE__ */ React7.createElement("h3", { className: "text-[17px] text-black tracking-tight mb-2" }, title), /* @__PURE__ */ React7.createElement("p", { className: "text-[12px] text-neutral-500 leading-relaxed px-2" }, message)), /* @__PURE__ */ React7.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ React7.createElement(
|
|
630
|
-
"button",
|
|
631
|
-
{
|
|
632
|
-
onClick: onClose,
|
|
633
|
-
disabled: isProcessing,
|
|
634
|
-
className: "flex-1 py-4 text-[14px] text-neutral-500 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none "
|
|
635
|
-
},
|
|
636
|
-
cancelText
|
|
637
|
-
), /* @__PURE__ */ React7.createElement(
|
|
638
|
-
"button",
|
|
639
|
-
{
|
|
640
|
-
onClick: onConfirm,
|
|
641
|
-
disabled: isProcessing,
|
|
642
|
-
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"}`
|
|
643
|
-
},
|
|
644
|
-
isProcessing ? /* @__PURE__ */ React7.createElement(HugeiconsIcon3, { icon: Loading03Icon2, className: "animate-spin", size: 18 }) : confirmText
|
|
645
|
-
))));
|
|
646
|
-
};
|
|
647
|
-
|
|
648
|
-
// src/components/MobileNav.tsx
|
|
649
|
-
var MobileNav = ({
|
|
650
|
-
items,
|
|
651
|
-
web3Address,
|
|
652
|
-
web3Avatar,
|
|
653
|
-
userInitials = "U",
|
|
654
|
-
unreadCount = 0,
|
|
655
|
-
onOpenNotifications,
|
|
656
|
-
onLogout
|
|
657
|
-
}) => {
|
|
600
|
+
var MobileNav = ({ items }) => {
|
|
658
601
|
const pathname = usePathname2();
|
|
659
|
-
const router = useRouter();
|
|
660
|
-
const [isCollapsed, setIsCollapsed] = useState5(false);
|
|
661
|
-
const [showLogoutDialog, setShowLogoutDialog] = useState5(false);
|
|
662
|
-
const [isLoggingOut, setIsLoggingOut] = useState5(false);
|
|
663
602
|
if (!items || items.length === 0) return null;
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
}
|
|
668
|
-
return pathname?.startsWith(href);
|
|
669
|
-
};
|
|
670
|
-
const isChildRoute = pathname !== "/" && pathname !== "/app" && !items.some((item) => item.href === pathname);
|
|
671
|
-
const handleLogout = async () => {
|
|
672
|
-
setIsLoggingOut(true);
|
|
673
|
-
try {
|
|
674
|
-
if (onLogout) await onLogout();
|
|
675
|
-
} finally {
|
|
676
|
-
setIsLoggingOut(false);
|
|
677
|
-
setShowLogoutDialog(false);
|
|
678
|
-
}
|
|
679
|
-
};
|
|
680
|
-
const handleCopyWallet = () => {
|
|
681
|
-
if (web3Address) {
|
|
682
|
-
navigator.clipboard.writeText(web3Address);
|
|
683
|
-
}
|
|
684
|
-
};
|
|
685
|
-
return /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement(
|
|
686
|
-
"aside",
|
|
687
|
-
{
|
|
688
|
-
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"}`
|
|
689
|
-
},
|
|
690
|
-
/* @__PURE__ */ React8.createElement("div", { className: `p-5 flex items-center shrink-0 ${isCollapsed ? "justify-center" : "justify-start"}` }, /* @__PURE__ */ React8.createElement("div", { className: "flex items-center gap-3 w-full" }, /* @__PURE__ */ React8.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__ */ React8.createElement("img", { src: web3Avatar, alt: "Avatar", className: "w-full h-full object-cover" }) : /* @__PURE__ */ React8.createElement("span", { className: "text-[12px] font-medium text-black uppercase" }, userInitials)), !isCollapsed && /* @__PURE__ */ React8.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ React8.createElement("span", { className: "text-[14px] font-medium text-black truncate" }, "Aeona Profile"), web3Address && /* @__PURE__ */ React8.createElement(
|
|
691
|
-
"span",
|
|
692
|
-
{
|
|
693
|
-
onClick: handleCopyWallet,
|
|
694
|
-
className: "text-[10px] text-neutral-500 truncate cursor-pointer hover:text-black transition-colors"
|
|
695
|
-
},
|
|
696
|
-
web3Address
|
|
697
|
-
)))),
|
|
698
|
-
/* @__PURE__ */ React8.createElement("nav", { className: "flex-1 py-4 flex flex-col gap-2 px-3 overflow-y-auto custom-scrollbar" }, items.map((item) => {
|
|
699
|
-
const active = isItemActive(item.href);
|
|
700
|
-
return /* @__PURE__ */ React8.createElement(
|
|
701
|
-
Link4,
|
|
702
|
-
{
|
|
703
|
-
key: item.label,
|
|
704
|
-
href: item.href,
|
|
705
|
-
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"}`,
|
|
706
|
-
title: isCollapsed ? item.label : void 0
|
|
707
|
-
},
|
|
708
|
-
/* @__PURE__ */ React8.createElement(
|
|
709
|
-
HugeiconsIcon4,
|
|
710
|
-
{
|
|
711
|
-
icon: item.icon,
|
|
712
|
-
size: 20,
|
|
713
|
-
className: `shrink-0 transition-colors ${active ? "text-black" : "text-neutral-400 group-hover:text-black"}`
|
|
714
|
-
}
|
|
715
|
-
),
|
|
716
|
-
!isCollapsed && /* @__PURE__ */ React8.createElement("span", { className: `text-[13px] font-medium tracking-wide truncate ${active ? "text-black" : ""}` }, item.label)
|
|
717
|
-
);
|
|
718
|
-
})),
|
|
719
|
-
/* @__PURE__ */ React8.createElement("div", { className: "p-4 shrink-0 flex flex-col gap-2 border-t border-neutral-50" }, /* @__PURE__ */ React8.createElement(
|
|
720
|
-
"button",
|
|
721
|
-
{
|
|
722
|
-
onClick: () => setShowLogoutDialog(true),
|
|
723
|
-
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" : ""}`,
|
|
724
|
-
title: isCollapsed ? "Log Out" : void 0
|
|
725
|
-
},
|
|
726
|
-
/* @__PURE__ */ React8.createElement(HugeiconsIcon4, { icon: LogoutCircle02Icon, size: 20, className: "shrink-0 transition-colors" }),
|
|
727
|
-
!isCollapsed && /* @__PURE__ */ React8.createElement("span", { className: "text-[13px] font-medium tracking-wide" }, "Log Out")
|
|
728
|
-
), /* @__PURE__ */ React8.createElement(
|
|
729
|
-
"button",
|
|
730
|
-
{
|
|
731
|
-
onClick: () => setIsCollapsed(!isCollapsed),
|
|
732
|
-
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" : ""}`
|
|
733
|
-
},
|
|
734
|
-
/* @__PURE__ */ React8.createElement(HugeiconsIcon4, { icon: SidebarLeft01Icon, size: 20, className: "shrink-0 transition-colors" }),
|
|
735
|
-
!isCollapsed && /* @__PURE__ */ React8.createElement("span", { className: "text-[13px] font-medium tracking-wide" }, "Collapse")
|
|
736
|
-
))
|
|
737
|
-
), /* @__PURE__ */ React8.createElement("div", { className: "md:hidden fixed top-3 inset-x-0 z-50 flex justify-center pointer-events-none px-2.5" }, /* @__PURE__ */ React8.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__ */ React8.createElement("div", { className: "flex items-center gap-2" }, isChildRoute && /* @__PURE__ */ React8.createElement(
|
|
738
|
-
"button",
|
|
739
|
-
{
|
|
740
|
-
onClick: () => router.back(),
|
|
741
|
-
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"
|
|
742
|
-
},
|
|
743
|
-
/* @__PURE__ */ React8.createElement(HugeiconsIcon4, { icon: ArrowLeft01Icon, size: 16 })
|
|
744
|
-
), web3Address && /* @__PURE__ */ React8.createElement(
|
|
745
|
-
"div",
|
|
746
|
-
{
|
|
747
|
-
onClick: handleCopyWallet,
|
|
748
|
-
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"
|
|
749
|
-
},
|
|
750
|
-
web3Avatar ? /* @__PURE__ */ React8.createElement("img", { src: web3Avatar, alt: "Avatar", className: "w-6 h-6 rounded-full object-cover shrink-0" }) : /* @__PURE__ */ React8.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),
|
|
751
|
-
/* @__PURE__ */ React8.createElement("span", { className: "text-[12px] font-medium text-black truncate max-w-24 sm:max-w-40" }, web3Address)
|
|
752
|
-
)), /* @__PURE__ */ React8.createElement(
|
|
753
|
-
"button",
|
|
754
|
-
{
|
|
755
|
-
onClick: onOpenNotifications,
|
|
756
|
-
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"
|
|
757
|
-
},
|
|
758
|
-
/* @__PURE__ */ React8.createElement(HugeiconsIcon4, { icon: Notification01Icon, size: 16 }),
|
|
759
|
-
unreadCount > 0 && /* @__PURE__ */ React8.createElement("span", { className: "absolute top-1 right-1.5 w-2 h-2 bg-blue-600 rounded-full border-2 border-white" })
|
|
760
|
-
))), /* @__PURE__ */ React8.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__ */ React8.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) => {
|
|
761
|
-
const active = isItemActive(item.href);
|
|
762
|
-
return /* @__PURE__ */ React8.createElement(
|
|
603
|
+
return /* @__PURE__ */ React7.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__ */ React7.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) => {
|
|
604
|
+
const isActive = item.href === "/" || item.href === "/app" ? pathname === "/" || pathname === "/app" : pathname === item.href || pathname?.startsWith(`${item.href}/`);
|
|
605
|
+
return /* @__PURE__ */ React7.createElement(
|
|
763
606
|
Link4,
|
|
764
607
|
{
|
|
765
608
|
key: item.label,
|
|
766
609
|
href: item.href,
|
|
767
610
|
className: "flex flex-col items-center justify-center gap-1 min-w-14 transition-transform active:scale-95 outline-none"
|
|
768
611
|
},
|
|
769
|
-
/* @__PURE__ */
|
|
770
|
-
|
|
612
|
+
/* @__PURE__ */ React7.createElement("div", { className: `transition-colors duration-300 ${isActive ? "text-black" : "text-neutral-400 hover:text-neutral-600"}` }, /* @__PURE__ */ React7.createElement(
|
|
613
|
+
HugeiconsIcon3,
|
|
614
|
+
{
|
|
615
|
+
icon: item.icon,
|
|
616
|
+
size: 20
|
|
617
|
+
}
|
|
618
|
+
)),
|
|
619
|
+
/* @__PURE__ */ React7.createElement(
|
|
620
|
+
"span",
|
|
621
|
+
{
|
|
622
|
+
className: `text-[9px] tracking-wide transition-colors duration-300 ${isActive ? "text-black" : "text-neutral-400"}`
|
|
623
|
+
},
|
|
624
|
+
item.label
|
|
625
|
+
)
|
|
771
626
|
);
|
|
772
|
-
})))
|
|
773
|
-
ConfirmationDialog,
|
|
774
|
-
{
|
|
775
|
-
isOpen: showLogoutDialog,
|
|
776
|
-
title: "Secure Logout",
|
|
777
|
-
message: "Are you sure you want to log out? You will need to authenticate to return.",
|
|
778
|
-
confirmText: "Log Out",
|
|
779
|
-
isDestructive: true,
|
|
780
|
-
isProcessing: isLoggingOut,
|
|
781
|
-
onClose: () => setShowLogoutDialog(false),
|
|
782
|
-
onConfirm: handleLogout
|
|
783
|
-
}
|
|
784
|
-
));
|
|
627
|
+
})));
|
|
785
628
|
};
|
|
786
629
|
|
|
787
630
|
// src/components/UniversalOrganizationPage.tsx
|
|
788
|
-
import
|
|
631
|
+
import React11, { useState as useState6, useEffect as useEffect4 } from "react";
|
|
789
632
|
import toast2 from "react-hot-toast";
|
|
790
633
|
|
|
791
634
|
// src/components/ManagedToaster.tsx
|
|
792
|
-
import
|
|
635
|
+
import React8 from "react";
|
|
793
636
|
import { Toaster } from "react-hot-toast";
|
|
794
637
|
var ManagedToaster = () => {
|
|
795
|
-
return /* @__PURE__ */
|
|
638
|
+
return /* @__PURE__ */ React8.createElement(
|
|
796
639
|
Toaster,
|
|
797
640
|
{
|
|
798
641
|
position: "top-right",
|
|
@@ -824,7 +667,7 @@ var ManagedToaster = () => {
|
|
|
824
667
|
};
|
|
825
668
|
|
|
826
669
|
// src/components/ReusableInputs.tsx
|
|
827
|
-
import
|
|
670
|
+
import React9 from "react";
|
|
828
671
|
var TextInput = ({
|
|
829
672
|
label,
|
|
830
673
|
value,
|
|
@@ -835,7 +678,7 @@ var TextInput = ({
|
|
|
835
678
|
readOnly,
|
|
836
679
|
type = "text",
|
|
837
680
|
onClick
|
|
838
|
-
}) => /* @__PURE__ */
|
|
681
|
+
}) => /* @__PURE__ */ React9.createElement("div", { className: "space-y-2 flex-1 w-full", onClick }, label && /* @__PURE__ */ React9.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block " }, label), /* @__PURE__ */ React9.createElement(
|
|
839
682
|
"input",
|
|
840
683
|
{
|
|
841
684
|
type,
|
|
@@ -856,7 +699,7 @@ var NumberInput = ({
|
|
|
856
699
|
placeholder,
|
|
857
700
|
maxLength,
|
|
858
701
|
disabled
|
|
859
|
-
}) => /* @__PURE__ */
|
|
702
|
+
}) => /* @__PURE__ */ React9.createElement("div", { className: "space-y-2 flex-1 w-full" }, label && /* @__PURE__ */ React9.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block " }, label), /* @__PURE__ */ React9.createElement(
|
|
860
703
|
"input",
|
|
861
704
|
{
|
|
862
705
|
type: "text",
|
|
@@ -874,8 +717,8 @@ var NumberInput = ({
|
|
|
874
717
|
));
|
|
875
718
|
|
|
876
719
|
// src/components/Banner.tsx
|
|
877
|
-
import
|
|
878
|
-
import { HugeiconsIcon as
|
|
720
|
+
import React10, { useState as useState5 } from "react";
|
|
721
|
+
import { HugeiconsIcon as HugeiconsIcon4 } from "@hugeicons/react";
|
|
879
722
|
import {
|
|
880
723
|
Alert02Icon,
|
|
881
724
|
CheckmarkBadge01Icon,
|
|
@@ -891,7 +734,7 @@ var Banner = ({
|
|
|
891
734
|
onDismiss,
|
|
892
735
|
action
|
|
893
736
|
}) => {
|
|
894
|
-
const [isVisible, setIsVisible] =
|
|
737
|
+
const [isVisible, setIsVisible] = useState5(true);
|
|
895
738
|
if (!isVisible) return null;
|
|
896
739
|
const handleDismiss = () => {
|
|
897
740
|
setIsVisible(false);
|
|
@@ -925,23 +768,23 @@ var Banner = ({
|
|
|
925
768
|
};
|
|
926
769
|
const currentConfig = config[type];
|
|
927
770
|
const IconToUse = icon || currentConfig.defaultIcon;
|
|
928
|
-
return /* @__PURE__ */
|
|
771
|
+
return /* @__PURE__ */ React10.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__ */ React10.createElement("div", { className: "flex-1 flex flex-col min-w-0" }, /* @__PURE__ */ React10.createElement("h4", { className: `text-sm tracking-tight mb-1 ${currentConfig.titleColor}` }, title), /* @__PURE__ */ React10.createElement("p", { className: `text-xs leading-relaxed ${currentConfig.msgColor}` }, message), action && /* @__PURE__ */ React10.createElement("div", { className: "mt-3" }, action)), isDismissible && /* @__PURE__ */ React10.createElement(
|
|
929
772
|
"button",
|
|
930
773
|
{
|
|
931
774
|
onClick: handleDismiss,
|
|
932
775
|
className: `absolute top-3 right-3 p-1.5 rounded-full transition-colors outline-none shrink-0 ${currentConfig.closeHover}`,
|
|
933
776
|
"aria-label": "Dismiss banner"
|
|
934
777
|
},
|
|
935
|
-
/* @__PURE__ */
|
|
778
|
+
/* @__PURE__ */ React10.createElement(HugeiconsIcon4, { icon: Cancel01Icon, size: 16 })
|
|
936
779
|
));
|
|
937
780
|
};
|
|
938
781
|
|
|
939
782
|
// src/components/UniversalOrganizationPage.tsx
|
|
940
|
-
import { HugeiconsIcon as
|
|
783
|
+
import { HugeiconsIcon as HugeiconsIcon5 } from "@hugeicons/react";
|
|
941
784
|
import {
|
|
942
785
|
CircleLock02Icon
|
|
943
786
|
} from "@hugeicons/core-free-icons";
|
|
944
|
-
var InputSpinner2 = () => /* @__PURE__ */
|
|
787
|
+
var InputSpinner2 = () => /* @__PURE__ */ React11.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__ */ React11.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ React11.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" }));
|
|
945
788
|
var UniversalOrganizationPage = ({
|
|
946
789
|
initialOrgName,
|
|
947
790
|
initialSlug,
|
|
@@ -954,12 +797,12 @@ var UniversalOrganizationPage = ({
|
|
|
954
797
|
onCheckSlugAvailability
|
|
955
798
|
}) => {
|
|
956
799
|
const resolvedInitialUsername = initialUsername || initialSlug;
|
|
957
|
-
const [web3Name, setWeb3Name] =
|
|
958
|
-
const [username, setUsername] =
|
|
959
|
-
const [slug, setSlug] =
|
|
960
|
-
const [isCheckingSlug, setIsCheckingSlug] =
|
|
961
|
-
const [slugAvailable, setSlugAvailable] =
|
|
962
|
-
const [isSubmitting, setIsSubmitting] =
|
|
800
|
+
const [web3Name, setWeb3Name] = useState6(initialOrgName);
|
|
801
|
+
const [username, setUsername] = useState6(resolvedInitialUsername);
|
|
802
|
+
const [slug, setSlug] = useState6(initialSlug);
|
|
803
|
+
const [isCheckingSlug, setIsCheckingSlug] = useState6(false);
|
|
804
|
+
const [slugAvailable, setSlugAvailable] = useState6(null);
|
|
805
|
+
const [isSubmitting, setIsSubmitting] = useState6(false);
|
|
963
806
|
useEffect4(() => {
|
|
964
807
|
setWeb3Name(initialOrgName || "");
|
|
965
808
|
setSlug(initialSlug || "");
|
|
@@ -1029,7 +872,7 @@ var UniversalOrganizationPage = ({
|
|
|
1029
872
|
};
|
|
1030
873
|
const hasChanges = web3Name !== initialOrgName || slug !== initialSlug || username !== resolvedInitialUsername;
|
|
1031
874
|
const isSaveDisabled = isSubmitting || isReadOnly || isCheckingSlug || !hasChanges || web3Name.length < 3 || slug.length < 3 || username.length < 3 || slug !== initialSlug && slugAvailable === false;
|
|
1032
|
-
return /* @__PURE__ */
|
|
875
|
+
return /* @__PURE__ */ React11.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-5xl rounded-2xl p-6 bg-white fade-in duration-300" }, /* @__PURE__ */ React11.createElement(ManagedToaster, null), /* @__PURE__ */ React11.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ React11.createElement("div", null, /* @__PURE__ */ React11.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, "Public Profile"), /* @__PURE__ */ React11.createElement("p", { className: "text-xs text-neutral-500" }, "Manage your financial payment handle identifiers and global public cryptographic signature identity details.")), isReadOnly && /* @__PURE__ */ React11.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-100 text-neutral-400 rounded-full shrink-0" }, /* @__PURE__ */ React11.createElement(HugeiconsIcon5, { icon: CircleLock02Icon, size: 18, className: "text-current" }))), bannerProps && /* @__PURE__ */ React11.createElement(Banner, { ...bannerProps }), /* @__PURE__ */ React11.createElement("div", { className: "w-full max-w-5xl" }, /* @__PURE__ */ React11.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ React11.createElement(
|
|
1033
876
|
TextInput,
|
|
1034
877
|
{
|
|
1035
878
|
label: "Display Name",
|
|
@@ -1039,7 +882,7 @@ var UniversalOrganizationPage = ({
|
|
|
1039
882
|
placeholder: "Sovereign User",
|
|
1040
883
|
maxLength: 50
|
|
1041
884
|
}
|
|
1042
|
-
), /* @__PURE__ */
|
|
885
|
+
), /* @__PURE__ */ React11.createElement(
|
|
1043
886
|
TextInput,
|
|
1044
887
|
{
|
|
1045
888
|
label: "Digital Identity",
|
|
@@ -1049,7 +892,7 @@ var UniversalOrganizationPage = ({
|
|
|
1049
892
|
placeholder: "sovereignuser",
|
|
1050
893
|
maxLength: 30
|
|
1051
894
|
}
|
|
1052
|
-
), /* @__PURE__ */
|
|
895
|
+
), /* @__PURE__ */ React11.createElement("div", { className: "space-y-1.5 relative w-full" }, /* @__PURE__ */ React11.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block" }, "Wallet Username"), /* @__PURE__ */ React11.createElement("div", { className: "flex items-center relative w-full border-b border-neutral-100 focus-within:border-black transition-all duration-300" }, /* @__PURE__ */ React11.createElement(
|
|
1053
896
|
"input",
|
|
1054
897
|
{
|
|
1055
898
|
type: "text",
|
|
@@ -1061,7 +904,7 @@ var UniversalOrganizationPage = ({
|
|
|
1061
904
|
className: "w-full px-2 py-3 text-sm bg-transparent text-black outline-none disabled:opacity-50 disabled:cursor-not-allowed",
|
|
1062
905
|
placeholder: "sovereign-user-handle"
|
|
1063
906
|
}
|
|
1064
|
-
), /* @__PURE__ */
|
|
907
|
+
), /* @__PURE__ */ React11.createElement("span", { className: "text-neutral-400 text-sm py-3 pr-8 shrink-0 whitespace-nowrap" }, slugPrefixUrl), /* @__PURE__ */ React11.createElement("div", { className: "absolute right-2 top-1/2 -translate-y-1/2" }, isCheckingSlug && /* @__PURE__ */ React11.createElement(InputSpinner2, null), !isCheckingSlug && !isReadOnly && slug !== initialSlug && slug.length >= 3 && slugAvailable === false && /* @__PURE__ */ React11.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-red-100" }, /* @__PURE__ */ React11.createElement("svg", { className: "w-2 h-2 text-red-600", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React11.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__ */ React11.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-green-100" }, /* @__PURE__ */ React11.createElement("svg", { className: "w-2 h-2 text-green-600", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React11.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__ */ React11.createElement("div", { className: "pt-8 mt-2 flex items-center gap-4" }, /* @__PURE__ */ React11.createElement(
|
|
1065
908
|
ThreeDActionButton,
|
|
1066
909
|
{
|
|
1067
910
|
type: "submit",
|
|
@@ -1070,7 +913,7 @@ var UniversalOrganizationPage = ({
|
|
|
1070
913
|
className: "min-w-32"
|
|
1071
914
|
},
|
|
1072
915
|
"Save Changes"
|
|
1073
|
-
), hasChanges && !isSubmitting && !isReadOnly && /* @__PURE__ */
|
|
916
|
+
), hasChanges && !isSubmitting && !isReadOnly && /* @__PURE__ */ React11.createElement(
|
|
1074
917
|
"button",
|
|
1075
918
|
{
|
|
1076
919
|
type: "button",
|
|
@@ -1086,13 +929,13 @@ var UniversalOrganizationPage = ({
|
|
|
1086
929
|
};
|
|
1087
930
|
|
|
1088
931
|
// src/components/UniversalProfileSettings.tsx
|
|
1089
|
-
import
|
|
932
|
+
import React12, { useState as useState7, useEffect as useEffect5 } from "react";
|
|
1090
933
|
import toast3 from "react-hot-toast";
|
|
1091
|
-
import { HugeiconsIcon as
|
|
934
|
+
import { HugeiconsIcon as HugeiconsIcon6 } from "@hugeicons/react";
|
|
1092
935
|
import {
|
|
1093
936
|
CircleLock02Icon as CircleLock02Icon2,
|
|
1094
937
|
CancelCircleIcon,
|
|
1095
|
-
Loading03Icon as
|
|
938
|
+
Loading03Icon as Loading03Icon2,
|
|
1096
939
|
LockKeyIcon
|
|
1097
940
|
} from "@hugeicons/core-free-icons";
|
|
1098
941
|
var UniversalProfileSettings = ({
|
|
@@ -1108,14 +951,14 @@ var UniversalProfileSettings = ({
|
|
|
1108
951
|
onSavePin,
|
|
1109
952
|
onSaveProfile
|
|
1110
953
|
}) => {
|
|
1111
|
-
const [firstName, setFirstName] =
|
|
1112
|
-
const [lastName, setLastName] =
|
|
1113
|
-
const [isSubmitting, setIsSubmitting] =
|
|
1114
|
-
const [isPinModalOpen, setIsPinModalOpen] =
|
|
1115
|
-
const [oldPin, setOldPin] =
|
|
1116
|
-
const [newPin, setNewPin] =
|
|
1117
|
-
const [confirmPin, setConfirmPin] =
|
|
1118
|
-
const [isPinSubmitting, setIsPinSubmitting] =
|
|
954
|
+
const [firstName, setFirstName] = useState7(initialFirstName);
|
|
955
|
+
const [lastName, setLastName] = useState7(initialLastName);
|
|
956
|
+
const [isSubmitting, setIsSubmitting] = useState7(false);
|
|
957
|
+
const [isPinModalOpen, setIsPinModalOpen] = useState7(false);
|
|
958
|
+
const [oldPin, setOldPin] = useState7("");
|
|
959
|
+
const [newPin, setNewPin] = useState7("");
|
|
960
|
+
const [confirmPin, setConfirmPin] = useState7("");
|
|
961
|
+
const [isPinSubmitting, setIsPinSubmitting] = useState7(false);
|
|
1119
962
|
useEffect5(() => {
|
|
1120
963
|
setFirstName(initialFirstName || "");
|
|
1121
964
|
setLastName(initialLastName || "");
|
|
@@ -1182,7 +1025,7 @@ var UniversalProfileSettings = ({
|
|
|
1182
1025
|
};
|
|
1183
1026
|
const hasChanges = firstName !== initialFirstName || lastName !== initialLastName;
|
|
1184
1027
|
const isSaveDisabled = isSubmitting || isReadOnly || !hasChanges || firstName.trim().length === 0 || lastName.trim().length === 0;
|
|
1185
|
-
return /* @__PURE__ */
|
|
1028
|
+
return /* @__PURE__ */ React12.createElement("div", { className: "flex flex-col max-w-5xl rounded-2xl p-6 gap-8 animate-in fade-in duration-300" }, /* @__PURE__ */ React12.createElement(ManagedToaster, null), /* @__PURE__ */ React12.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ React12.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React12.createElement("h1", { className: "text-black text-xl mb-1 truncate tracking-tight" }, "Personal Settings"), /* @__PURE__ */ React12.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your personal account profile.")), isReadOnly && /* @__PURE__ */ React12.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-100 text-neutral-400 rounded-full shrink-0" }, /* @__PURE__ */ React12.createElement(HugeiconsIcon6, { icon: CircleLock02Icon2, size: 18, className: "text-current" }))), bannerProps && /* @__PURE__ */ React12.createElement(Banner, { ...bannerProps }), /* @__PURE__ */ React12.createElement("div", { className: "w-full max-w-5xl" }, /* @__PURE__ */ React12.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ React12.createElement("div", { className: "flex flex-col sm:flex-row gap-6" }, /* @__PURE__ */ React12.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React12.createElement(
|
|
1186
1029
|
TextInput,
|
|
1187
1030
|
{
|
|
1188
1031
|
label: "First Name",
|
|
@@ -1191,7 +1034,7 @@ var UniversalProfileSettings = ({
|
|
|
1191
1034
|
disabled: isReadOnly || isSubmitting,
|
|
1192
1035
|
placeholder: "System"
|
|
1193
1036
|
}
|
|
1194
|
-
)), /* @__PURE__ */
|
|
1037
|
+
)), /* @__PURE__ */ React12.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React12.createElement(
|
|
1195
1038
|
TextInput,
|
|
1196
1039
|
{
|
|
1197
1040
|
label: "Last Name",
|
|
@@ -1200,7 +1043,7 @@ var UniversalProfileSettings = ({
|
|
|
1200
1043
|
disabled: isReadOnly || isSubmitting,
|
|
1201
1044
|
placeholder: "Admin"
|
|
1202
1045
|
}
|
|
1203
|
-
))), /* @__PURE__ */
|
|
1046
|
+
))), /* @__PURE__ */ React12.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ React12.createElement(
|
|
1204
1047
|
TextInput,
|
|
1205
1048
|
{
|
|
1206
1049
|
label: "Email ID",
|
|
@@ -1209,7 +1052,7 @@ var UniversalProfileSettings = ({
|
|
|
1209
1052
|
},
|
|
1210
1053
|
disabled: true
|
|
1211
1054
|
}
|
|
1212
|
-
), /* @__PURE__ */
|
|
1055
|
+
), /* @__PURE__ */ React12.createElement("p", { className: "text-[11px] text-neutral-500 mt-1 truncate" }, "To change your email address, please contact support.")), /* @__PURE__ */ React12.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between pt-8 mt-2 gap-6 sm:gap-4" }, /* @__PURE__ */ React12.createElement("div", { className: "flex items-center gap-6 min-w-0" }, /* @__PURE__ */ React12.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React12.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block truncate" }, "Account Status"), /* @__PURE__ */ React12.createElement("span", { className: "text-xs text-black block truncate" }, accountStatus)), /* @__PURE__ */ React12.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React12.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block truncate" }, "Member Since"), /* @__PURE__ */ React12.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__ */ React12.createElement("div", { className: "min-w-0 pl-4" }, /* @__PURE__ */ React12.createElement(
|
|
1213
1056
|
"button",
|
|
1214
1057
|
{
|
|
1215
1058
|
type: "button",
|
|
@@ -1217,8 +1060,8 @@ var UniversalProfileSettings = ({
|
|
|
1217
1060
|
"aria-label": "PIN Settings",
|
|
1218
1061
|
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"
|
|
1219
1062
|
},
|
|
1220
|
-
/* @__PURE__ */
|
|
1221
|
-
))), /* @__PURE__ */
|
|
1063
|
+
/* @__PURE__ */ React12.createElement(HugeiconsIcon6, { icon: LockKeyIcon, size: 17, className: "text-black" })
|
|
1064
|
+
))), /* @__PURE__ */ React12.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__ */ React12.createElement(
|
|
1222
1065
|
"button",
|
|
1223
1066
|
{
|
|
1224
1067
|
type: "button",
|
|
@@ -1229,7 +1072,7 @@ var UniversalProfileSettings = ({
|
|
|
1229
1072
|
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"
|
|
1230
1073
|
},
|
|
1231
1074
|
"Cancel"
|
|
1232
|
-
), /* @__PURE__ */
|
|
1075
|
+
), /* @__PURE__ */ React12.createElement(
|
|
1233
1076
|
ThreeDActionButton,
|
|
1234
1077
|
{
|
|
1235
1078
|
type: "submit",
|
|
@@ -1238,7 +1081,7 @@ var UniversalProfileSettings = ({
|
|
|
1238
1081
|
className: "min-w-32 w-full sm:w-auto"
|
|
1239
1082
|
},
|
|
1240
1083
|
"Save Changes"
|
|
1241
|
-
))))), isPinModalOpen && /* @__PURE__ */
|
|
1084
|
+
))))), isPinModalOpen && /* @__PURE__ */ React12.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React12.createElement("div", { className: "absolute inset-0 bg-black/40", onClick: closePinModal }), /* @__PURE__ */ React12.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__ */ React12.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ React12.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, hasPin ? "Change PIN" : "Create PIN"), /* @__PURE__ */ React12.createElement("button", { onClick: closePinModal, disabled: isPinSubmitting, className: "text-neutral-400 hover:text-black transition-colors outline-none disabled:opacity-50" }, /* @__PURE__ */ React12.createElement(HugeiconsIcon6, { icon: CancelCircleIcon, size: 18 }))), /* @__PURE__ */ React12.createElement("div", { className: "p-6" }, isPinLoading ? /* @__PURE__ */ React12.createElement("div", { className: "flex flex-col items-center justify-center py-10" }, /* @__PURE__ */ React12.createElement(HugeiconsIcon6, { icon: Loading03Icon2, size: 28, className: "animate-spin text-neutral-400 mb-4" })) : /* @__PURE__ */ React12.createElement("form", { onSubmit: handlePinSubmit, className: "flex flex-col gap-6" }, hasPin && /* @__PURE__ */ React12.createElement(
|
|
1242
1085
|
TextInput,
|
|
1243
1086
|
{
|
|
1244
1087
|
type: "password",
|
|
@@ -1249,7 +1092,7 @@ var UniversalProfileSettings = ({
|
|
|
1249
1092
|
onChange: (val) => handlePinInput(val, setOldPin),
|
|
1250
1093
|
placeholder: "\u2022\u2022\u2022\u2022"
|
|
1251
1094
|
}
|
|
1252
|
-
), /* @__PURE__ */
|
|
1095
|
+
), /* @__PURE__ */ React12.createElement(
|
|
1253
1096
|
TextInput,
|
|
1254
1097
|
{
|
|
1255
1098
|
type: "password",
|
|
@@ -1260,7 +1103,7 @@ var UniversalProfileSettings = ({
|
|
|
1260
1103
|
onChange: (val) => handlePinInput(val, setNewPin),
|
|
1261
1104
|
placeholder: "\u2022\u2022\u2022\u2022"
|
|
1262
1105
|
}
|
|
1263
|
-
), /* @__PURE__ */
|
|
1106
|
+
), /* @__PURE__ */ React12.createElement(
|
|
1264
1107
|
TextInput,
|
|
1265
1108
|
{
|
|
1266
1109
|
type: "password",
|
|
@@ -1271,7 +1114,7 @@ var UniversalProfileSettings = ({
|
|
|
1271
1114
|
onChange: (val) => handlePinInput(val, setConfirmPin),
|
|
1272
1115
|
placeholder: "\u2022\u2022\u2022\u2022"
|
|
1273
1116
|
}
|
|
1274
|
-
), /* @__PURE__ */
|
|
1117
|
+
), /* @__PURE__ */ React12.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React12.createElement(
|
|
1275
1118
|
ThreeDActionButton,
|
|
1276
1119
|
{
|
|
1277
1120
|
type: "submit",
|
|
@@ -1284,14 +1127,14 @@ var UniversalProfileSettings = ({
|
|
|
1284
1127
|
};
|
|
1285
1128
|
|
|
1286
1129
|
// src/components/UniversalErrorView.tsx
|
|
1287
|
-
import
|
|
1288
|
-
import { HugeiconsIcon as
|
|
1130
|
+
import React14 from "react";
|
|
1131
|
+
import { HugeiconsIcon as HugeiconsIcon8 } from "@hugeicons/react";
|
|
1289
1132
|
import { ConfusedIcon } from "@hugeicons/core-free-icons";
|
|
1290
1133
|
|
|
1291
1134
|
// src/components/PageSpinner.tsx
|
|
1292
|
-
import
|
|
1293
|
-
import { HugeiconsIcon as
|
|
1294
|
-
import { Loading03Icon as
|
|
1135
|
+
import React13 from "react";
|
|
1136
|
+
import { HugeiconsIcon as HugeiconsIcon7 } from "@hugeicons/react";
|
|
1137
|
+
import { Loading03Icon as Loading03Icon3 } from "@hugeicons/core-free-icons";
|
|
1295
1138
|
var PageSpinner = ({
|
|
1296
1139
|
className = "",
|
|
1297
1140
|
iconClassName = "text-black",
|
|
@@ -1299,10 +1142,10 @@ var PageSpinner = ({
|
|
|
1299
1142
|
}) => {
|
|
1300
1143
|
return (
|
|
1301
1144
|
// z-[100] ensures it sits above absolute headers and modals
|
|
1302
|
-
/* @__PURE__ */
|
|
1303
|
-
|
|
1145
|
+
/* @__PURE__ */ React13.createElement("div", { className: `fixed inset-0 z-100 flex flex-col items-center justify-center w-full h-full pointer-events-none ${className}` }, /* @__PURE__ */ React13.createElement(
|
|
1146
|
+
HugeiconsIcon7,
|
|
1304
1147
|
{
|
|
1305
|
-
icon:
|
|
1148
|
+
icon: Loading03Icon3,
|
|
1306
1149
|
size,
|
|
1307
1150
|
className: `animate-spin mb-4 ${iconClassName}`
|
|
1308
1151
|
}
|
|
@@ -1322,7 +1165,7 @@ var UniversalErrorView = ({
|
|
|
1322
1165
|
returnLabel = "Return to Workspace"
|
|
1323
1166
|
}) => {
|
|
1324
1167
|
if (isBooting || isLoading && !activeData) {
|
|
1325
|
-
return /* @__PURE__ */
|
|
1168
|
+
return /* @__PURE__ */ React14.createElement("div", { className: "flex items-center justify-center h-screen w-full bg-white" }, /* @__PURE__ */ React14.createElement(PageSpinner, null));
|
|
1326
1169
|
}
|
|
1327
1170
|
if (!isLoading && (!activeData || activeError)) {
|
|
1328
1171
|
const errorString = typeof activeError === "string" ? activeError : JSON.stringify(activeError || "");
|
|
@@ -1341,7 +1184,7 @@ var UniversalErrorView = ({
|
|
|
1341
1184
|
title = "Access Restricted";
|
|
1342
1185
|
description = apiMessage || `You have insufficient permissions to view this ${envName}. Please contact your administrator.`;
|
|
1343
1186
|
}
|
|
1344
|
-
return /* @__PURE__ */
|
|
1187
|
+
return /* @__PURE__ */ React14.createElement("div", { className: "flex flex-col items-center justify-center h-screen w-full px-4 animate-in fade-in duration-500" }, /* @__PURE__ */ React14.createElement("div", { className: "mb-4 flex justify-center" }, /* @__PURE__ */ React14.createElement(HugeiconsIcon8, { icon: IconComponent, size: 48, className: "text-neutral-300" })), /* @__PURE__ */ React14.createElement("h2", { className: "text-lg text-black tracking-tight " }, title), /* @__PURE__ */ React14.createElement("p", { className: "text-xs mt-2 mb-8 text-neutral-500 max-w-sm text-center leading-relaxed" }, description), /* @__PURE__ */ React14.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-3 w-full justify-center sm:w-auto" }, isNotFoundError || isPermissionError ? /* @__PURE__ */ React14.createElement(
|
|
1345
1188
|
"button",
|
|
1346
1189
|
{
|
|
1347
1190
|
onClick: () => window.location.href = returnUrl,
|
|
@@ -1350,14 +1193,14 @@ var UniversalErrorView = ({
|
|
|
1350
1193
|
returnLabel
|
|
1351
1194
|
) : (
|
|
1352
1195
|
// Soft errors (Network timeouts) allow them to retry or optionally retreat
|
|
1353
|
-
/* @__PURE__ */
|
|
1196
|
+
/* @__PURE__ */ React14.createElement(React14.Fragment, null, envName.toLowerCase().includes("application") && /* @__PURE__ */ React14.createElement(
|
|
1354
1197
|
"button",
|
|
1355
1198
|
{
|
|
1356
1199
|
onClick: () => window.location.href = returnUrl,
|
|
1357
1200
|
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 "
|
|
1358
1201
|
},
|
|
1359
1202
|
"Back Home"
|
|
1360
|
-
), /* @__PURE__ */
|
|
1203
|
+
), /* @__PURE__ */ React14.createElement(
|
|
1361
1204
|
"button",
|
|
1362
1205
|
{
|
|
1363
1206
|
onClick: onRetry,
|
|
@@ -1372,21 +1215,22 @@ var UniversalErrorView = ({
|
|
|
1372
1215
|
};
|
|
1373
1216
|
|
|
1374
1217
|
// src/components/UniversalTransactionPage.tsx
|
|
1375
|
-
import
|
|
1376
|
-
import { HugeiconsIcon as
|
|
1218
|
+
import React15, { useState as useState8, useEffect as useEffect6, useRef as useRef3 } from "react";
|
|
1219
|
+
import { HugeiconsIcon as HugeiconsIcon9 } from "@hugeicons/react";
|
|
1377
1220
|
import toast4 from "react-hot-toast";
|
|
1378
1221
|
import {
|
|
1379
|
-
ArrowLeft01Icon
|
|
1222
|
+
ArrowLeft01Icon,
|
|
1380
1223
|
ArrowRight01Icon,
|
|
1381
|
-
Loading03Icon as
|
|
1224
|
+
Loading03Icon as Loading03Icon4,
|
|
1382
1225
|
ArrowDownRight01Icon,
|
|
1383
1226
|
ArrowUpRight01Icon,
|
|
1384
1227
|
Search01Icon,
|
|
1385
1228
|
SearchList02Icon,
|
|
1386
1229
|
ListSettingIcon,
|
|
1387
|
-
CancelCircleIcon as CancelCircleIcon2
|
|
1230
|
+
CancelCircleIcon as CancelCircleIcon2,
|
|
1231
|
+
Copy01Icon
|
|
1388
1232
|
} from "@hugeicons/core-free-icons";
|
|
1389
|
-
var PageSpinner2 = () => /* @__PURE__ */
|
|
1233
|
+
var PageSpinner2 = () => /* @__PURE__ */ React15.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: Loading03Icon4, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
1390
1234
|
var formatDate = (dateInput) => {
|
|
1391
1235
|
const d = new Date(dateInput);
|
|
1392
1236
|
const day = d.getDate();
|
|
@@ -1421,12 +1265,12 @@ var UniversalTransactionPage = ({
|
|
|
1421
1265
|
onReportTransaction,
|
|
1422
1266
|
onGenerateReceipt
|
|
1423
1267
|
}) => {
|
|
1424
|
-
const [selectedTransaction, setSelectedTransaction] =
|
|
1425
|
-
const [isGeneratingReceipt, setIsGeneratingReceipt] =
|
|
1426
|
-
const [localSearchQuery, setLocalSearchQuery] =
|
|
1427
|
-
const [isTyping, setIsTyping] =
|
|
1428
|
-
const [isDirectionModalOpen, setIsDirectionModalOpen] =
|
|
1429
|
-
const [isTypeModalOpen, setIsTypeModalOpen] =
|
|
1268
|
+
const [selectedTransaction, setSelectedTransaction] = useState8(null);
|
|
1269
|
+
const [isGeneratingReceipt, setIsGeneratingReceipt] = useState8(false);
|
|
1270
|
+
const [localSearchQuery, setLocalSearchQuery] = useState8(searchQuery);
|
|
1271
|
+
const [isTyping, setIsTyping] = useState8(false);
|
|
1272
|
+
const [isDirectionModalOpen, setIsDirectionModalOpen] = useState8(false);
|
|
1273
|
+
const [isTypeModalOpen, setIsTypeModalOpen] = useState8(false);
|
|
1430
1274
|
const directionDropdownRef = useRef3(null);
|
|
1431
1275
|
const typeDropdownRef = useRef3(null);
|
|
1432
1276
|
useEffect6(() => {
|
|
@@ -1471,63 +1315,77 @@ var UniversalTransactionPage = ({
|
|
|
1471
1315
|
setIsGeneratingReceipt(false);
|
|
1472
1316
|
}
|
|
1473
1317
|
};
|
|
1318
|
+
const handleCopyReference = async (reference) => {
|
|
1319
|
+
try {
|
|
1320
|
+
await navigator.clipboard.writeText(reference);
|
|
1321
|
+
toast4.success("Copied");
|
|
1322
|
+
} catch {
|
|
1323
|
+
}
|
|
1324
|
+
};
|
|
1474
1325
|
const isListLoading = isLoading || isTyping;
|
|
1475
|
-
return /* @__PURE__ */
|
|
1326
|
+
return /* @__PURE__ */ React15.createElement("div", { className: "flex flex-col gap-6 animate-in max-w-5xl fade-in duration-300" }, /* @__PURE__ */ React15.createElement(ManagedToaster, null), !hideControls && /* @__PURE__ */ React15.createElement("div", { className: "flex flex-row flex-nowrap items-center justify-between gap-4 w-full" }, /* @__PURE__ */ React15.createElement("div", { className: "relative flex-1 min-w-0 max-w-full" }, /* @__PURE__ */ React15.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: Search01Icon, size: 16, className: "text-neutral-400" })), /* @__PURE__ */ React15.createElement(
|
|
1476
1327
|
"input",
|
|
1477
1328
|
{
|
|
1478
1329
|
type: "text",
|
|
1479
1330
|
placeholder: "Search reference or amount...",
|
|
1480
1331
|
value: localSearchQuery,
|
|
1481
1332
|
onChange: (e) => setLocalSearchQuery(e.target.value),
|
|
1482
|
-
className: "w-full pl-10 pr-4 py-2 bg-white
|
|
1333
|
+
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"
|
|
1483
1334
|
}
|
|
1484
|
-
)), /* @__PURE__ */
|
|
1335
|
+
)), /* @__PURE__ */ React15.createElement("div", { className: "flex items-center gap-3 w-auto pb-0 shrink-0" }, /* @__PURE__ */ React15.createElement(
|
|
1485
1336
|
"button",
|
|
1486
1337
|
{
|
|
1487
1338
|
onClick: () => setIsDirectionModalOpen(true),
|
|
1488
1339
|
"aria-label": "Filter by payment type",
|
|
1489
1340
|
className: "flex items-center justify-center bg-white w-10 h-10 rounded-full text-neutral-500 hover:text-black transition-colors outline-none"
|
|
1490
1341
|
},
|
|
1491
|
-
/* @__PURE__ */
|
|
1492
|
-
), /* @__PURE__ */
|
|
1342
|
+
/* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: SearchList02Icon, size: 16 })
|
|
1343
|
+
), /* @__PURE__ */ React15.createElement(
|
|
1493
1344
|
"button",
|
|
1494
1345
|
{
|
|
1495
1346
|
onClick: () => setIsTypeModalOpen(true),
|
|
1496
1347
|
"aria-label": "Filter by transaction type",
|
|
1497
1348
|
className: "flex items-center justify-center bg-white w-10 h-10 rounded-full text-neutral-500 hover:text-black transition-colors outline-none"
|
|
1498
1349
|
},
|
|
1499
|
-
/* @__PURE__ */
|
|
1500
|
-
))), /* @__PURE__ */
|
|
1350
|
+
/* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: ListSettingIcon, size: 16 })
|
|
1351
|
+
))), /* @__PURE__ */ React15.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-white w-full" }, /* @__PURE__ */ React15.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, /* @__PURE__ */ React15.createElement("div", null, /* @__PURE__ */ React15.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, headerTitle), headerDescription && /* @__PURE__ */ React15.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription))), /* @__PURE__ */ React15.createElement("div", { className: "w-full overflow-hidden" }, isListLoading ? /* @__PURE__ */ React15.createElement(PageSpinner2, null) : /* @__PURE__ */ React15.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ React15.createElement("div", null, transactions.length === 0 ? /* @__PURE__ */ React15.createElement("p", { className: "text-xs text-neutral-400 py-6 text-center" }, "No transactions found") : transactions.map((tx) => /* @__PURE__ */ React15.createElement(
|
|
1501
1352
|
"div",
|
|
1502
1353
|
{
|
|
1503
1354
|
key: tx.id,
|
|
1504
1355
|
onClick: () => setSelectedTransaction(tx),
|
|
1505
1356
|
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"
|
|
1506
1357
|
},
|
|
1507
|
-
/* @__PURE__ */
|
|
1508
|
-
/* @__PURE__ */
|
|
1509
|
-
))), !hidePagination && /* @__PURE__ */
|
|
1358
|
+
/* @__PURE__ */ React15.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ React15.createElement("div", { className: `w-10 h-10 shrink-0 rounded-full flex items-center justify-center bg-neutral-100 text-black` }, /* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: tx.direction === "CREDIT" ? ArrowDownRight01Icon : ArrowUpRight01Icon, size: 18 })), /* @__PURE__ */ React15.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-1" }, /* @__PURE__ */ React15.createElement("p", { className: "text-[13px] text-black truncate" }, getDisplayName(tx)), /* @__PURE__ */ React15.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))),
|
|
1359
|
+
/* @__PURE__ */ React15.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ React15.createElement("span", { className: "text-[11px] text-neutral-400" }, formatDate(tx.createdAt)), /* @__PURE__ */ React15.createElement("span", { className: "text-[11px] text-neutral-400 capitalize" }, tx.direction.toLowerCase()))
|
|
1360
|
+
))), !hidePagination && /* @__PURE__ */ React15.createElement("div", { className: "flex items-center justify-between pt-6 mt-2 " }, /* @__PURE__ */ React15.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", totalPages === 0 ? 1 : totalPages), /* @__PURE__ */ React15.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React15.createElement(
|
|
1510
1361
|
"button",
|
|
1511
1362
|
{
|
|
1512
1363
|
onClick: () => onPageChange(currentPage - 1),
|
|
1513
1364
|
disabled: currentPage <= 1 || isListLoading,
|
|
1514
1365
|
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"
|
|
1515
1366
|
},
|
|
1516
|
-
/* @__PURE__ */
|
|
1517
|
-
), /* @__PURE__ */
|
|
1367
|
+
/* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: ArrowLeft01Icon, size: 14 })
|
|
1368
|
+
), /* @__PURE__ */ React15.createElement(
|
|
1518
1369
|
"button",
|
|
1519
1370
|
{
|
|
1520
1371
|
onClick: () => onPageChange(currentPage + 1),
|
|
1521
1372
|
disabled: currentPage >= totalPages || isListLoading || totalPages === 0,
|
|
1522
1373
|
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"
|
|
1523
1374
|
},
|
|
1524
|
-
/* @__PURE__ */
|
|
1525
|
-
)))))), selectedTransaction && /* @__PURE__ */
|
|
1375
|
+
/* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: ArrowRight01Icon, size: 14 })
|
|
1376
|
+
)))))), selectedTransaction && /* @__PURE__ */ React15.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React15.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => setSelectedTransaction(null) }), /* @__PURE__ */ React15.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__ */ React15.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ React15.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Details"), /* @__PURE__ */ React15.createElement("button", { onClick: () => setSelectedTransaction(null), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: CancelCircleIcon2, size: 18 }))), /* @__PURE__ */ React15.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6" }, /* @__PURE__ */ React15.createElement("div", { className: "flex flex-col items-center justify-center mb-4" }, /* @__PURE__ */ React15.createElement("div", { className: `w-12 h-12 rounded-full flex items-center justify-center mb-4 bg-neutral-100 text-black` }, /* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: selectedTransaction.direction === "CREDIT" ? ArrowDownRight01Icon : ArrowUpRight01Icon, size: 20 })), /* @__PURE__ */ React15.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__ */ React15.createElement("span", { className: "text-[9px] tracking-widest text-neutral-500 px-4 py-1.5 rounded-full bg-neutral-50" }, selectedTransaction.status)), /* @__PURE__ */ React15.createElement("div", { className: "grid grid-cols-1 gap-y-8 gap-x-4 mb-10 mt-6" }, /* @__PURE__ */ React15.createElement("div", null, /* @__PURE__ */ React15.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Reference ID"), /* @__PURE__ */ React15.createElement("div", { className: "flex items-center gap-2 min-w-0" }, /* @__PURE__ */ React15.createElement("span", { className: "text-[13px] text-black truncate min-w-0 block" }, selectedTransaction.reference), /* @__PURE__ */ React15.createElement(
|
|
1377
|
+
"button",
|
|
1378
|
+
{
|
|
1379
|
+
onClick: () => handleCopyReference(selectedTransaction.reference),
|
|
1380
|
+
className: "text-neutral-400 hover:text-black transition-colors outline-none"
|
|
1381
|
+
},
|
|
1382
|
+
/* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: Copy01Icon, size: 14 })
|
|
1383
|
+
))), /* @__PURE__ */ React15.createElement("div", null, /* @__PURE__ */ React15.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Date & Time"), /* @__PURE__ */ React15.createElement("span", { className: "text-[13px] text-black" }, formatDate(selectedTransaction.createdAt), " at ", formatTime(selectedTransaction.createdAt))), /* @__PURE__ */ React15.createElement("div", null, /* @__PURE__ */ React15.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Transaction Type"), /* @__PURE__ */ React15.createElement("span", { className: "text-[13px] text-black capitalize" }, selectedTransaction.type.replace("_", " ").toLowerCase())), /* @__PURE__ */ React15.createElement("div", null, /* @__PURE__ */ React15.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Flow Direction"), /* @__PURE__ */ React15.createElement("span", { className: "text-[13px] text-black capitalize" }, selectedTransaction.direction.toLowerCase())), selectedTransaction.metadata?.fromAddress && selectedTransaction.metadata?.toAddress && /* @__PURE__ */ React15.createElement("div", null, /* @__PURE__ */ React15.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Transfer Route"), /* @__PURE__ */ React15.createElement("div", { className: "flex items-center gap-2 text-[13px] text-black" }, /* @__PURE__ */ React15.createElement("span", { className: "truncate " }, truncateAddress(String(selectedTransaction.metadata.fromAddress))), /* @__PURE__ */ React15.createElement("span", { className: "text-neutral-400" }, "\u2192"), /* @__PURE__ */ React15.createElement("span", { className: "truncate " }, truncateAddress(String(selectedTransaction.metadata.toAddress))))), selectedTransaction.metadata && Object.entries(selectedTransaction.metadata).map(([key, value]) => {
|
|
1526
1384
|
if (key === "fromAddress" || key === "toAddress") return null;
|
|
1527
1385
|
if (value === null || value === void 0 || typeof value === "object") return null;
|
|
1528
1386
|
const formattedKey = key.replace(/([A-Z])/g, " $1").replace(/^./, (str) => str.toUpperCase());
|
|
1529
|
-
return /* @__PURE__ */
|
|
1530
|
-
})), /* @__PURE__ */
|
|
1387
|
+
return /* @__PURE__ */ React15.createElement("div", { key }, /* @__PURE__ */ React15.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, formattedKey), /* @__PURE__ */ React15.createElement("span", { className: "text-[13px] text-black break-all" }, String(value)));
|
|
1388
|
+
})), /* @__PURE__ */ React15.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React15.createElement(
|
|
1531
1389
|
ThreeDActionButton,
|
|
1532
1390
|
{
|
|
1533
1391
|
onClick: handleGenerateReceipt,
|
|
@@ -1535,14 +1393,14 @@ var UniversalTransactionPage = ({
|
|
|
1535
1393
|
className: "w-full py-3 text-[14px]"
|
|
1536
1394
|
},
|
|
1537
1395
|
"Generate Receipt"
|
|
1538
|
-
), /* @__PURE__ */
|
|
1396
|
+
), /* @__PURE__ */ React15.createElement(
|
|
1539
1397
|
"button",
|
|
1540
1398
|
{
|
|
1541
1399
|
onClick: () => onReportTransaction && onReportTransaction(selectedTransaction),
|
|
1542
1400
|
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"
|
|
1543
1401
|
},
|
|
1544
1402
|
"Report Transaction"
|
|
1545
|
-
), selectedTransaction.type === "WALLET_TRANSACTION" && /* @__PURE__ */
|
|
1403
|
+
), selectedTransaction.type === "WALLET_TRANSACTION" && /* @__PURE__ */ React15.createElement(
|
|
1546
1404
|
"a",
|
|
1547
1405
|
{
|
|
1548
1406
|
href: `https://basescan.org/tx/${selectedTransaction.reference}`,
|
|
@@ -1551,7 +1409,7 @@ var UniversalTransactionPage = ({
|
|
|
1551
1409
|
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"
|
|
1552
1410
|
},
|
|
1553
1411
|
"View in block explorer"
|
|
1554
|
-
))))), isDirectionModalOpen && /* @__PURE__ */
|
|
1412
|
+
))))), isDirectionModalOpen && /* @__PURE__ */ React15.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ React15.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => setIsDirectionModalOpen(false) }), /* @__PURE__ */ React15.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__ */ React15.createElement("div", { className: "p-6 text-center w-full mb-2" }, /* @__PURE__ */ React15.createElement("h3", { className: "text-[14px] text-black tracking-tight" }, "Payment Type")), /* @__PURE__ */ React15.createElement("div", { className: "w-full flex flex-col pl-2 pr-2 gap-1" }, ["ALL", "CREDIT", "DEBIT"].map((option) => /* @__PURE__ */ React15.createElement(
|
|
1555
1413
|
"button",
|
|
1556
1414
|
{
|
|
1557
1415
|
key: option,
|
|
@@ -1561,19 +1419,19 @@ var UniversalTransactionPage = ({
|
|
|
1561
1419
|
},
|
|
1562
1420
|
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"}`
|
|
1563
1421
|
},
|
|
1564
|
-
/* @__PURE__ */
|
|
1565
|
-
))), /* @__PURE__ */
|
|
1422
|
+
/* @__PURE__ */ React15.createElement("span", { className: "truncate pr-2" }, option.charAt(0).toUpperCase() + option.slice(1).toLowerCase())
|
|
1423
|
+
))), /* @__PURE__ */ React15.createElement("div", { className: "w-full flex mt-2 " }, /* @__PURE__ */ React15.createElement(
|
|
1566
1424
|
"button",
|
|
1567
1425
|
{
|
|
1568
1426
|
onClick: () => setIsDirectionModalOpen(false),
|
|
1569
1427
|
className: "w-full py-4 text-[13px] text-neutral-500 hover:text-black transition-colors outline-none "
|
|
1570
1428
|
},
|
|
1571
1429
|
"Cancel"
|
|
1572
|
-
)))), isTypeModalOpen && /* @__PURE__ */
|
|
1430
|
+
)))), isTypeModalOpen && /* @__PURE__ */ React15.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ React15.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => setIsTypeModalOpen(false) }), /* @__PURE__ */ React15.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__ */ React15.createElement("div", { className: "p-6 text-center w-full mb-2" }, /* @__PURE__ */ React15.createElement("h3", { className: "text-[14px] text-black tracking-tight" }, "Transactions Type")), /* @__PURE__ */ React15.createElement("div", { className: "w-full flex flex-col pl-2 pr-2 gap-1" }, [
|
|
1573
1431
|
{ label: "All Transactions", value: "ALL" },
|
|
1574
1432
|
{ label: "Wallet Transactions", value: "WALLET_TRANSACTION" },
|
|
1575
1433
|
{ label: "Card Transactions", value: "CARD_TRANSACTION" }
|
|
1576
|
-
].map((option) => /* @__PURE__ */
|
|
1434
|
+
].map((option) => /* @__PURE__ */ React15.createElement(
|
|
1577
1435
|
"button",
|
|
1578
1436
|
{
|
|
1579
1437
|
key: option.value,
|
|
@@ -1583,8 +1441,8 @@ var UniversalTransactionPage = ({
|
|
|
1583
1441
|
},
|
|
1584
1442
|
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"}`
|
|
1585
1443
|
},
|
|
1586
|
-
/* @__PURE__ */
|
|
1587
|
-
))), /* @__PURE__ */
|
|
1444
|
+
/* @__PURE__ */ React15.createElement("span", { className: "truncate pr-2" }, option.label.charAt(0).toUpperCase() + option.label.slice(1).toLowerCase())
|
|
1445
|
+
))), /* @__PURE__ */ React15.createElement("div", { className: "w-full flex mt-2 " }, /* @__PURE__ */ React15.createElement(
|
|
1588
1446
|
"button",
|
|
1589
1447
|
{
|
|
1590
1448
|
onClick: () => setIsTypeModalOpen(false),
|
|
@@ -1595,8 +1453,8 @@ var UniversalTransactionPage = ({
|
|
|
1595
1453
|
};
|
|
1596
1454
|
|
|
1597
1455
|
// src/components/UniversalHomeView.tsx
|
|
1598
|
-
import
|
|
1599
|
-
import { HugeiconsIcon as
|
|
1456
|
+
import React16, { useState as useState9, useEffect as useEffect7 } from "react";
|
|
1457
|
+
import { HugeiconsIcon as HugeiconsIcon10 } from "@hugeicons/react";
|
|
1600
1458
|
import { ViewOffSlashIcon, ViewIcon } from "@hugeicons/core-free-icons";
|
|
1601
1459
|
var UniversalHomeView = ({
|
|
1602
1460
|
balanceLabel = "Your Balance",
|
|
@@ -1606,8 +1464,8 @@ var UniversalHomeView = ({
|
|
|
1606
1464
|
secondaryAction,
|
|
1607
1465
|
transactionsProps
|
|
1608
1466
|
}) => {
|
|
1609
|
-
const [displayAmount, setDisplayAmount] =
|
|
1610
|
-
const [isBalanceHidden, setIsBalanceHidden] =
|
|
1467
|
+
const [displayAmount, setDisplayAmount] = useState9("0.00");
|
|
1468
|
+
const [isBalanceHidden, setIsBalanceHidden] = useState9(false);
|
|
1611
1469
|
useEffect7(() => {
|
|
1612
1470
|
const target = parseFloat(balanceAmount.replace(/,/g, ""));
|
|
1613
1471
|
if (isNaN(target)) {
|
|
@@ -1637,29 +1495,29 @@ var UniversalHomeView = ({
|
|
|
1637
1495
|
requestAnimationFrame(step);
|
|
1638
1496
|
}, [balanceAmount]);
|
|
1639
1497
|
const [intPart, decPart] = displayAmount.includes(".") ? displayAmount.split(".") : [displayAmount, "00"];
|
|
1640
|
-
return /* @__PURE__ */
|
|
1498
|
+
return /* @__PURE__ */ React16.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ React16.createElement("div", { className: "relative flex items-start justify-between w-full pt-4 pb-8" }, /* @__PURE__ */ React16.createElement("div", { className: "flex flex-col items-start text-left z-10 w-full" }, /* @__PURE__ */ React16.createElement("div", { className: "flex items-center gap-2 mb-1.5" }, /* @__PURE__ */ React16.createElement("span", { className: "text-[12px] sm:text-[13px] text-neutral-500" }, balanceLabel), /* @__PURE__ */ React16.createElement(
|
|
1641
1499
|
"button",
|
|
1642
1500
|
{
|
|
1643
1501
|
onClick: () => setIsBalanceHidden(!isBalanceHidden),
|
|
1644
1502
|
className: "text-neutral-400 hover:text-black transition-colors outline-none"
|
|
1645
1503
|
},
|
|
1646
|
-
/* @__PURE__ */
|
|
1647
|
-
)), /* @__PURE__ */
|
|
1504
|
+
/* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: isBalanceHidden ? ViewIcon : ViewOffSlashIcon, size: 14 })
|
|
1505
|
+
)), /* @__PURE__ */ React16.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__ */ React16.createElement("span", { className: "text-2xl text-neutral-400 mr-1" }, balanceCurrency), intPart, /* @__PURE__ */ React16.createElement("span", { className: "text-xl sm:text-2xl text-neutral-400" }, ".", decPart)), /* @__PURE__ */ React16.createElement("div", { className: "flex items-center gap-3" }, primaryAction && /* @__PURE__ */ React16.createElement(
|
|
1648
1506
|
ThreeDActionButton,
|
|
1649
1507
|
{
|
|
1650
1508
|
onClick: primaryAction.onClick,
|
|
1651
1509
|
className: "px-6 py-2.5 sm:px-8 sm:py-2.5"
|
|
1652
1510
|
},
|
|
1653
|
-
/* @__PURE__ */
|
|
1654
|
-
), secondaryAction && /* @__PURE__ */
|
|
1511
|
+
/* @__PURE__ */ React16.createElement("span", { className: "flex items-center gap-1.5 text-[13px] tracking-wide " }, primaryAction.label, primaryAction.icon && /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: primaryAction.icon, size: 16 }))
|
|
1512
|
+
), secondaryAction && /* @__PURE__ */ React16.createElement(
|
|
1655
1513
|
"button",
|
|
1656
1514
|
{
|
|
1657
1515
|
onClick: secondaryAction.onClick,
|
|
1658
1516
|
className: "flex items-center gap-1.5 px-6 py-2.5 sm:px-8 sm:py-2.5 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 transition-colors outline-none"
|
|
1659
1517
|
},
|
|
1660
|
-
/* @__PURE__ */
|
|
1661
|
-
secondaryAction.icon && /* @__PURE__ */
|
|
1662
|
-
)))), /* @__PURE__ */
|
|
1518
|
+
/* @__PURE__ */ React16.createElement("span", { className: "text-[13px] tracking-wide " }, secondaryAction.label),
|
|
1519
|
+
secondaryAction.icon && /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: secondaryAction.icon, size: 16 })
|
|
1520
|
+
)))), /* @__PURE__ */ React16.createElement("div", { className: "w-full mt-2" }, /* @__PURE__ */ React16.createElement(
|
|
1663
1521
|
UniversalTransactionPage,
|
|
1664
1522
|
{
|
|
1665
1523
|
...transactionsProps,
|
|
@@ -1671,18 +1529,18 @@ var UniversalHomeView = ({
|
|
|
1671
1529
|
};
|
|
1672
1530
|
|
|
1673
1531
|
// src/components/UniversalWalletPage.tsx
|
|
1674
|
-
import
|
|
1532
|
+
import React17, { useState as useState10 } from "react";
|
|
1675
1533
|
import toast5 from "react-hot-toast";
|
|
1676
|
-
import { HugeiconsIcon as
|
|
1534
|
+
import { HugeiconsIcon as HugeiconsIcon11 } from "@hugeicons/react";
|
|
1677
1535
|
import {
|
|
1678
1536
|
Search01Icon as Search01Icon2,
|
|
1679
1537
|
CancelCircleIcon as CancelCircleIcon3,
|
|
1680
|
-
Loading03Icon as
|
|
1538
|
+
Loading03Icon as Loading03Icon5
|
|
1681
1539
|
} from "@hugeicons/core-free-icons";
|
|
1682
|
-
var PageSpinner3 = () => /* @__PURE__ */
|
|
1540
|
+
var PageSpinner3 = () => /* @__PURE__ */ React17.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ React17.createElement(HugeiconsIcon11, { icon: Loading03Icon5, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
1683
1541
|
var WalletLogo = ({ src, alt, sizeClass = "w-10 h-10" }) => {
|
|
1684
|
-
const [isLoaded, setIsLoaded] =
|
|
1685
|
-
return /* @__PURE__ */
|
|
1542
|
+
const [isLoaded, setIsLoaded] = useState10(false);
|
|
1543
|
+
return /* @__PURE__ */ React17.createElement("div", { className: `relative shrink-0 rounded-full bg-neutral-100 flex items-center justify-center overflow-hidden ${sizeClass}` }, !isLoaded && /* @__PURE__ */ React17.createElement(HugeiconsIcon11, { icon: Loading03Icon5, size: 16, className: "animate-spin text-neutral-400 absolute" }), /* @__PURE__ */ React17.createElement(
|
|
1686
1544
|
"img",
|
|
1687
1545
|
{
|
|
1688
1546
|
src,
|
|
@@ -1704,8 +1562,8 @@ var UniversalWalletPage = ({
|
|
|
1704
1562
|
onDownloadPayId,
|
|
1705
1563
|
onCopyAddress
|
|
1706
1564
|
}) => {
|
|
1707
|
-
const [selectedWallet, setSelectedWallet] =
|
|
1708
|
-
const [localSearchQuery, setLocalSearchQuery] =
|
|
1565
|
+
const [selectedWallet, setSelectedWallet] = useState10(null);
|
|
1566
|
+
const [localSearchQuery, setLocalSearchQuery] = useState10("");
|
|
1709
1567
|
const filteredWallets = wallets.filter((wallet) => {
|
|
1710
1568
|
const q = localSearchQuery.toLowerCase();
|
|
1711
1569
|
return wallet.name.toLowerCase().includes(q) || wallet.currency.toLowerCase().includes(q) || wallet.network.toLowerCase().includes(q);
|
|
@@ -1718,7 +1576,7 @@ var UniversalWalletPage = ({
|
|
|
1718
1576
|
}
|
|
1719
1577
|
toast5.success("Address copied to clipboard");
|
|
1720
1578
|
};
|
|
1721
|
-
return /* @__PURE__ */
|
|
1579
|
+
return /* @__PURE__ */ React17.createElement("div", { className: "flex flex-col gap-6 animate-in max-w-5xl fade-in duration-300" }, /* @__PURE__ */ React17.createElement(ManagedToaster, null), !hideControls && /* @__PURE__ */ React17.createElement("div", { className: "flex flex-col sm:flex-row items-center justify-between gap-4 w-full" }, /* @__PURE__ */ React17.createElement("div", { className: "relative w-full sm:w-96" }, /* @__PURE__ */ React17.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ React17.createElement(HugeiconsIcon11, { icon: Search01Icon2, size: 16, className: "text-neutral-400" })), /* @__PURE__ */ React17.createElement(
|
|
1722
1580
|
"input",
|
|
1723
1581
|
{
|
|
1724
1582
|
type: "text",
|
|
@@ -1727,16 +1585,16 @@ var UniversalWalletPage = ({
|
|
|
1727
1585
|
onChange: (e) => setLocalSearchQuery(e.target.value),
|
|
1728
1586
|
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"
|
|
1729
1587
|
}
|
|
1730
|
-
))), /* @__PURE__ */
|
|
1588
|
+
))), /* @__PURE__ */ React17.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-white w-full" }, /* @__PURE__ */ React17.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, /* @__PURE__ */ React17.createElement("div", null, /* @__PURE__ */ React17.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, headerTitle), headerDescription && /* @__PURE__ */ React17.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription))), /* @__PURE__ */ React17.createElement("div", { className: "w-full overflow-hidden" }, isLoading ? /* @__PURE__ */ React17.createElement(PageSpinner3, null) : /* @__PURE__ */ React17.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ React17.createElement("div", null, filteredWallets.length === 0 ? /* @__PURE__ */ React17.createElement("p", { className: "text-xs text-neutral-400 py-6 text-center" }, "No wallets found") : filteredWallets.map((wallet) => /* @__PURE__ */ React17.createElement(
|
|
1731
1589
|
"div",
|
|
1732
1590
|
{
|
|
1733
1591
|
key: wallet.id,
|
|
1734
1592
|
onClick: () => setSelectedWallet(wallet),
|
|
1735
1593
|
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"
|
|
1736
1594
|
},
|
|
1737
|
-
/* @__PURE__ */
|
|
1738
|
-
/* @__PURE__ */
|
|
1739
|
-
)))))), selectedWallet && /* @__PURE__ */
|
|
1595
|
+
/* @__PURE__ */ React17.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ React17.createElement(WalletLogo, { src: wallet.logoSrc, alt: wallet.name }), /* @__PURE__ */ React17.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-1" }, /* @__PURE__ */ React17.createElement("p", { className: "text-[13px] text-black truncate " }, wallet.name), /* @__PURE__ */ React17.createElement("p", { className: `text-[13px] text-neutral-500 truncate transition-all duration-300 ${hideBalanceAmounts ? "blur-sm opacity-40 select-none" : ""}` }, wallet.balance, " ", wallet.currency))),
|
|
1596
|
+
/* @__PURE__ */ React17.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ React17.createElement("span", { className: "text-[10px] tracking-wide text-neutral-600 bg-neutral-100 px-2.5 py-1 rounded-full " }, wallet.network))
|
|
1597
|
+
)))))), selectedWallet && /* @__PURE__ */ React17.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React17.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => setSelectedWallet(null) }), /* @__PURE__ */ React17.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__ */ React17.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ React17.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Wallet Details"), /* @__PURE__ */ React17.createElement("button", { onClick: () => setSelectedWallet(null), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React17.createElement(HugeiconsIcon11, { icon: CancelCircleIcon3, size: 18 }))), /* @__PURE__ */ React17.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-6" }, /* @__PURE__ */ React17.createElement("div", { className: "flex flex-col items-center justify-center mb-6" }, /* @__PURE__ */ React17.createElement(WalletLogo, { src: selectedWallet.logoSrc, alt: selectedWallet.name, sizeClass: "w-14 h-14 mb-4" }), /* @__PURE__ */ React17.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__ */ React17.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__ */ React17.createElement("div", { className: "w-full flex justify-center mb-6 mix-blend-multiply" }, renderQrCode(selectedWallet)), /* @__PURE__ */ React17.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-10" }, /* @__PURE__ */ React17.createElement("div", null, /* @__PURE__ */ React17.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Address"), /* @__PURE__ */ React17.createElement("span", { className: "text-[13px] text-black break-all " }, selectedWallet.address)), /* @__PURE__ */ React17.createElement("div", null, /* @__PURE__ */ React17.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Name"), /* @__PURE__ */ React17.createElement("span", { className: "text-[13px] text-black" }, selectedWallet.name))), /* @__PURE__ */ React17.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React17.createElement(
|
|
1740
1598
|
ThreeDActionButton,
|
|
1741
1599
|
{
|
|
1742
1600
|
onClick: () => onDownloadPayId && onDownloadPayId(selectedWallet),
|
|
@@ -1744,7 +1602,7 @@ var UniversalWalletPage = ({
|
|
|
1744
1602
|
className: "w-full py-3 text-[13px]"
|
|
1745
1603
|
},
|
|
1746
1604
|
"Generate Statement"
|
|
1747
|
-
), /* @__PURE__ */
|
|
1605
|
+
), /* @__PURE__ */ React17.createElement(
|
|
1748
1606
|
"button",
|
|
1749
1607
|
{
|
|
1750
1608
|
onClick: () => handleCopy(selectedWallet),
|
|
@@ -1755,7 +1613,7 @@ var UniversalWalletPage = ({
|
|
|
1755
1613
|
};
|
|
1756
1614
|
|
|
1757
1615
|
// src/components/UniversalCardPage.tsx
|
|
1758
|
-
import React21, { useState as
|
|
1616
|
+
import React21, { useState as useState12, useEffect as useEffect9 } from "react";
|
|
1759
1617
|
import { HugeiconsIcon as HugeiconsIcon15 } from "@hugeicons/react";
|
|
1760
1618
|
import {
|
|
1761
1619
|
SnowIcon,
|
|
@@ -1766,8 +1624,49 @@ import {
|
|
|
1766
1624
|
Loading03Icon as Loading03Icon8
|
|
1767
1625
|
} from "@hugeicons/core-free-icons";
|
|
1768
1626
|
|
|
1627
|
+
// src/components/ConfirmationDialog.tsx
|
|
1628
|
+
import React18 from "react";
|
|
1629
|
+
import { HugeiconsIcon as HugeiconsIcon12 } from "@hugeicons/react";
|
|
1630
|
+
import { Loading03Icon as Loading03Icon6 } from "@hugeicons/core-free-icons";
|
|
1631
|
+
var ConfirmationDialog = ({
|
|
1632
|
+
isOpen,
|
|
1633
|
+
title,
|
|
1634
|
+
message,
|
|
1635
|
+
confirmText = "Confirm",
|
|
1636
|
+
cancelText = "Cancel",
|
|
1637
|
+
isProcessing = false,
|
|
1638
|
+
isDestructive = true,
|
|
1639
|
+
onClose,
|
|
1640
|
+
onConfirm
|
|
1641
|
+
}) => {
|
|
1642
|
+
if (!isOpen) return null;
|
|
1643
|
+
return /* @__PURE__ */ React18.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React18.createElement(
|
|
1644
|
+
"div",
|
|
1645
|
+
{
|
|
1646
|
+
className: "absolute inset-0 bg-black/40 ",
|
|
1647
|
+
onClick: () => !isProcessing && onClose()
|
|
1648
|
+
}
|
|
1649
|
+
), /* @__PURE__ */ React18.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__ */ React18.createElement("div", { className: "p-6 pb-4 text-center w-full" }, /* @__PURE__ */ React18.createElement("h3", { className: "text-[17px] text-black tracking-tight mb-2" }, title), /* @__PURE__ */ React18.createElement("p", { className: "text-[12px] text-neutral-500 leading-relaxed px-2" }, message)), /* @__PURE__ */ React18.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ React18.createElement(
|
|
1650
|
+
"button",
|
|
1651
|
+
{
|
|
1652
|
+
onClick: onClose,
|
|
1653
|
+
disabled: isProcessing,
|
|
1654
|
+
className: "flex-1 py-4 text-[14px] text-neutral-500 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none "
|
|
1655
|
+
},
|
|
1656
|
+
cancelText
|
|
1657
|
+
), /* @__PURE__ */ React18.createElement(
|
|
1658
|
+
"button",
|
|
1659
|
+
{
|
|
1660
|
+
onClick: onConfirm,
|
|
1661
|
+
disabled: isProcessing,
|
|
1662
|
+
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"}`
|
|
1663
|
+
},
|
|
1664
|
+
isProcessing ? /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Loading03Icon6, className: "animate-spin", size: 18 }) : confirmText
|
|
1665
|
+
))));
|
|
1666
|
+
};
|
|
1667
|
+
|
|
1769
1668
|
// src/components/PinDialerBottomSheet.tsx
|
|
1770
|
-
import React19, { useState as
|
|
1669
|
+
import React19, { useState as useState11, useEffect as useEffect8 } from "react";
|
|
1771
1670
|
import { HugeiconsIcon as HugeiconsIcon13 } from "@hugeicons/react";
|
|
1772
1671
|
import { Loading03Icon as Loading03Icon7, CancelCircleIcon as CancelCircleIcon4, LessThanIcon } from "@hugeicons/core-free-icons";
|
|
1773
1672
|
var PinDialerBottomSheet = ({
|
|
@@ -1777,7 +1676,7 @@ var PinDialerBottomSheet = ({
|
|
|
1777
1676
|
onClose,
|
|
1778
1677
|
onComplete
|
|
1779
1678
|
}) => {
|
|
1780
|
-
const [pin, setPin] =
|
|
1679
|
+
const [pin, setPin] = useState11("");
|
|
1781
1680
|
useEffect8(() => {
|
|
1782
1681
|
setPin("");
|
|
1783
1682
|
}, [isOpen]);
|
|
@@ -1804,7 +1703,7 @@ var PinDialerBottomSheet = ({
|
|
|
1804
1703
|
if (!isVerifying) onClose();
|
|
1805
1704
|
}
|
|
1806
1705
|
}
|
|
1807
|
-
), /* @__PURE__ */ React19.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__ */ React19.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React19.createElement("h3", { className: "text-[16px] text-black
|
|
1706
|
+
), /* @__PURE__ */ React19.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__ */ React19.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React19.createElement("h3", { className: "text-[16px] text-black tracking-tight" }, title), /* @__PURE__ */ React19.createElement(
|
|
1808
1707
|
"button",
|
|
1809
1708
|
{
|
|
1810
1709
|
onClick: () => {
|
|
@@ -1864,7 +1763,7 @@ var CardActionDialog = ({
|
|
|
1864
1763
|
className: "absolute inset-0 bg-black/40 animate-in fade-in duration-200",
|
|
1865
1764
|
onClick: onClose
|
|
1866
1765
|
}
|
|
1867
|
-
), /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement(HugeiconsIcon14, { icon: CreditCardIcon, size: 20, className: "text-black" }), /* @__PURE__ */ React20.createElement("h3", { className: "text-[16px] text-black
|
|
1766
|
+
), /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement(HugeiconsIcon14, { icon: CreditCardIcon, size: 20, className: "text-black" }), /* @__PURE__ */ React20.createElement("h3", { className: "text-[16px] text-black tracking-tight" }, title)), /* @__PURE__ */ React20.createElement(
|
|
1868
1767
|
"button",
|
|
1869
1768
|
{
|
|
1870
1769
|
onClick: onClose,
|
|
@@ -1875,7 +1774,7 @@ var CardActionDialog = ({
|
|
|
1875
1774
|
"button",
|
|
1876
1775
|
{
|
|
1877
1776
|
onClick: onProceed,
|
|
1878
|
-
className: "w-full py-3.5 bg-black text-white text-[13px]
|
|
1777
|
+
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"
|
|
1879
1778
|
},
|
|
1880
1779
|
actionType === "ACTIVATE" ? "Activate Now" : "Create Card"
|
|
1881
1780
|
))));
|
|
@@ -1890,23 +1789,23 @@ var UniversalCardPage = ({
|
|
|
1890
1789
|
onDelete,
|
|
1891
1790
|
onCardAction
|
|
1892
1791
|
}) => {
|
|
1893
|
-
const [activeTabIndex, setActiveTabIndex] =
|
|
1792
|
+
const [activeTabIndex, setActiveTabIndex] = useState12(0);
|
|
1894
1793
|
const activeCard = cards[activeTabIndex];
|
|
1895
1794
|
useEffect9(() => {
|
|
1896
1795
|
setIsFlipped(false);
|
|
1897
1796
|
setIsRevealed(false);
|
|
1898
1797
|
}, [activeTabIndex]);
|
|
1899
|
-
const [isFlipped, setIsFlipped] =
|
|
1900
|
-
const [isBgLoaded, setIsBgLoaded] =
|
|
1901
|
-
const [isRevealed, setIsRevealed] =
|
|
1902
|
-
const [isRevealing, setIsRevealing] =
|
|
1903
|
-
const [isFreezing, setIsFreezing] =
|
|
1904
|
-
const [isOverlayActionLoading, setIsOverlayActionLoading] =
|
|
1905
|
-
const [showDeleteDialog, setShowDeleteDialog] =
|
|
1906
|
-
const [isDeleting, setIsDeleting] =
|
|
1907
|
-
const [showPinDialer, setShowPinDialer] =
|
|
1908
|
-
const [showCardActionDialog, setShowCardActionDialog] =
|
|
1909
|
-
const [cardActionType, setCardActionType] =
|
|
1798
|
+
const [isFlipped, setIsFlipped] = useState12(false);
|
|
1799
|
+
const [isBgLoaded, setIsBgLoaded] = useState12(false);
|
|
1800
|
+
const [isRevealed, setIsRevealed] = useState12(false);
|
|
1801
|
+
const [isRevealing, setIsRevealing] = useState12(false);
|
|
1802
|
+
const [isFreezing, setIsFreezing] = useState12(false);
|
|
1803
|
+
const [isOverlayActionLoading, setIsOverlayActionLoading] = useState12(false);
|
|
1804
|
+
const [showDeleteDialog, setShowDeleteDialog] = useState12(false);
|
|
1805
|
+
const [isDeleting, setIsDeleting] = useState12(false);
|
|
1806
|
+
const [showPinDialer, setShowPinDialer] = useState12(false);
|
|
1807
|
+
const [showCardActionDialog, setShowCardActionDialog] = useState12(false);
|
|
1808
|
+
const [cardActionType, setCardActionType] = useState12("ACTIVATE");
|
|
1910
1809
|
useEffect9(() => {
|
|
1911
1810
|
setIsBgLoaded(false);
|
|
1912
1811
|
if (!activeCard?.cardBgSrc) return;
|
|
@@ -1979,17 +1878,17 @@ var UniversalCardPage = ({
|
|
|
1979
1878
|
const capitalized = type.charAt(0).toUpperCase() + type.slice(1).toLowerCase();
|
|
1980
1879
|
return `${capitalized} Card`;
|
|
1981
1880
|
};
|
|
1982
|
-
const displayCardNumber = isRevealed ? activeCard.cardNumber :
|
|
1983
|
-
const displayExpiry = isRevealed ? activeCard.expiry : "
|
|
1984
|
-
const displayCvv = isRevealed ? activeCard.cvv : "
|
|
1985
|
-
return /* @__PURE__ */ React21.createElement("div", { className: "w-full flex flex-col items-center animate-in fade-in duration-300 pb-12" }, cards.length > 1 && /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-center mb-6 w-full px-2" }, /* @__PURE__ */ React21.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) => {
|
|
1881
|
+
const displayCardNumber = isRevealed ? activeCard.cardNumber : `XXXX XXXX XXXX ${activeCard.cardNumber.slice(-4)}`;
|
|
1882
|
+
const displayExpiry = isRevealed ? activeCard.expiry : "XX/XX";
|
|
1883
|
+
const displayCvv = isRevealed ? activeCard.cvv : "XXX";
|
|
1884
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "w-full flex flex-col items-center animate-in max-w-5xl fade-in duration-300 pb-12" }, cards.length > 1 && /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-center mb-6 w-full px-2" }, /* @__PURE__ */ React21.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) => {
|
|
1986
1885
|
const isActive = activeTabIndex === idx;
|
|
1987
1886
|
return /* @__PURE__ */ React21.createElement(
|
|
1988
1887
|
"button",
|
|
1989
1888
|
{
|
|
1990
1889
|
key: tab.id,
|
|
1991
1890
|
onClick: () => setActiveTabIndex(idx),
|
|
1992
|
-
className: `px-4
|
|
1891
|
+
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"}`
|
|
1993
1892
|
},
|
|
1994
1893
|
formatTabLabel(tab.type)
|
|
1995
1894
|
);
|
|
@@ -2014,7 +1913,7 @@ var UniversalCardPage = ({
|
|
|
2014
1913
|
e.stopPropagation();
|
|
2015
1914
|
handleOverlayActionClick("ACTIVATE");
|
|
2016
1915
|
},
|
|
2017
|
-
className: "px-6 py-2.5 bg-white/35 text-
|
|
1916
|
+
className: "px-6 py-2.5 bg-white/35 text-white text-[12px] rounded-full transition-all outline-none active:scale-95"
|
|
2018
1917
|
},
|
|
2019
1918
|
"Activate Card"
|
|
2020
1919
|
), isDead && /* @__PURE__ */ React21.createElement(
|
|
@@ -2024,7 +1923,7 @@ var UniversalCardPage = ({
|
|
|
2024
1923
|
e.stopPropagation();
|
|
2025
1924
|
handleOverlayActionClick("CREATE");
|
|
2026
1925
|
},
|
|
2027
|
-
className: "px-6 py-2.5 bg-white/35 text-
|
|
1926
|
+
className: "px-6 py-2.5 bg-white/35 text-white text-[12px] rounded-full transition-all outline-none active:scale-95"
|
|
2028
1927
|
},
|
|
2029
1928
|
"Create Card"
|
|
2030
1929
|
), isFrozen && /* @__PURE__ */ React21.createElement(
|
|
@@ -2035,7 +1934,7 @@ var UniversalCardPage = ({
|
|
|
2035
1934
|
handleOverlayUnfreeze();
|
|
2036
1935
|
},
|
|
2037
1936
|
disabled: isOverlayActionLoading,
|
|
2038
|
-
className: "px-6 py-2.5 bg-white/35 text-
|
|
1937
|
+
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"
|
|
2039
1938
|
},
|
|
2040
1939
|
isOverlayActionLoading ? /* @__PURE__ */ React21.createElement(HugeiconsIcon15, { icon: Loading03Icon8, size: 16, className: "animate-spin" }) : "Unfreeze Card"
|
|
2041
1940
|
)),
|
|
@@ -2194,7 +2093,7 @@ var MenuRow = ({
|
|
|
2194
2093
|
);
|
|
2195
2094
|
|
|
2196
2095
|
// src/components/UniversalProfilePage.tsx
|
|
2197
|
-
import React22, { useState as
|
|
2096
|
+
import React22, { useState as useState13 } from "react";
|
|
2198
2097
|
import { HugeiconsIcon as HugeiconsIcon16 } from "@hugeicons/react";
|
|
2199
2098
|
import {
|
|
2200
2099
|
UserIcon,
|
|
@@ -2203,7 +2102,7 @@ import {
|
|
|
2203
2102
|
MessageQuestionIcon,
|
|
2204
2103
|
UserIdVerificationIcon,
|
|
2205
2104
|
FileDownloadIcon,
|
|
2206
|
-
LogoutCircle02Icon
|
|
2105
|
+
LogoutCircle02Icon,
|
|
2207
2106
|
UserRemove01Icon,
|
|
2208
2107
|
ArrowRight01Icon as ArrowRight01Icon3,
|
|
2209
2108
|
Loading03Icon as Loading03Icon9,
|
|
@@ -2222,9 +2121,9 @@ var UniversalProfilePage = ({
|
|
|
2222
2121
|
onLogoutTap,
|
|
2223
2122
|
onDeleteTap
|
|
2224
2123
|
}) => {
|
|
2225
|
-
const [isAvatarLoaded, setIsAvatarLoaded] =
|
|
2226
|
-
const [showLogoutDialog, setShowLogoutDialog] =
|
|
2227
|
-
const [isLoggingOut, setIsLoggingOut] =
|
|
2124
|
+
const [isAvatarLoaded, setIsAvatarLoaded] = useState13(false);
|
|
2125
|
+
const [showLogoutDialog, setShowLogoutDialog] = useState13(false);
|
|
2126
|
+
const [isLoggingOut, setIsLoggingOut] = useState13(false);
|
|
2228
2127
|
const handleConfirmLogout = async () => {
|
|
2229
2128
|
setIsLoggingOut(true);
|
|
2230
2129
|
try {
|
|
@@ -2236,7 +2135,7 @@ var UniversalProfilePage = ({
|
|
|
2236
2135
|
setShowLogoutDialog(false);
|
|
2237
2136
|
}
|
|
2238
2137
|
};
|
|
2239
|
-
return /* @__PURE__ */ React22.createElement("div", { className: "w-full max-w-
|
|
2138
|
+
return /* @__PURE__ */ React22.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col items-center animate-in fade-in duration-300 pb-12" }, /* @__PURE__ */ React22.createElement("div", { className: "pt-8 pb-4 flex flex-col items-center" }, /* @__PURE__ */ React22.createElement("div", { className: "w-22 h-22 rounded-full bg-white p-1 mb-4 flex items-center justify-center" }, /* @__PURE__ */ React22.createElement("div", { className: "relative w-full h-full rounded-full overflow-hidden bg-neutral-100 flex items-center justify-center" }, avatarSrc ? /* @__PURE__ */ React22.createElement(React22.Fragment, null, !isAvatarLoaded && /* @__PURE__ */ React22.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-100" }, /* @__PURE__ */ React22.createElement(HugeiconsIcon16, { icon: Loading03Icon9, size: 24, className: "animate-spin text-black" })), /* @__PURE__ */ React22.createElement(
|
|
2240
2139
|
"img",
|
|
2241
2140
|
{
|
|
2242
2141
|
src: avatarSrc,
|
|
@@ -2296,7 +2195,7 @@ var UniversalProfilePage = ({
|
|
|
2296
2195
|
), /* @__PURE__ */ React22.createElement(
|
|
2297
2196
|
MenuRow2,
|
|
2298
2197
|
{
|
|
2299
|
-
icon:
|
|
2198
|
+
icon: LogoutCircle02Icon,
|
|
2300
2199
|
title: "LogOut",
|
|
2301
2200
|
subtitle: "End your session",
|
|
2302
2201
|
onClick: () => setShowLogoutDialog(true),
|
|
@@ -2336,13 +2235,85 @@ var MenuRow2 = ({ icon, title, subtitle, onClick, iconColor = "text-black", titl
|
|
|
2336
2235
|
/* @__PURE__ */ React22.createElement(HugeiconsIcon16, { icon: ArrowRight01Icon3, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
2337
2236
|
);
|
|
2338
2237
|
|
|
2339
|
-
// src/components/
|
|
2340
|
-
import
|
|
2238
|
+
// src/components/UniversalSidebar.tsx
|
|
2239
|
+
import React23, { useState as useState14 } from "react";
|
|
2341
2240
|
import Link5 from "next/link";
|
|
2241
|
+
import { HugeiconsIcon as HugeiconsIcon17 } from "@hugeicons/react";
|
|
2242
|
+
import {
|
|
2243
|
+
LogoutCircle02Icon as LogoutCircle02Icon2
|
|
2244
|
+
} from "@hugeicons/core-free-icons";
|
|
2245
|
+
var UniversalSidebar = ({
|
|
2246
|
+
navItems,
|
|
2247
|
+
currentPath,
|
|
2248
|
+
onNavClick,
|
|
2249
|
+
showLogoutAction = false,
|
|
2250
|
+
onLogout
|
|
2251
|
+
}) => {
|
|
2252
|
+
const [showLogoutDialog, setShowLogoutDialog] = useState14(false);
|
|
2253
|
+
const [isLoggingOut, setIsLoggingOut] = useState14(false);
|
|
2254
|
+
const hasActiveMatch = navItems.some(
|
|
2255
|
+
(item) => item.path === "/" || item.path === "/app" ? currentPath === "/" || currentPath === "/app" : currentPath === item.path || currentPath?.startsWith(`${item.path}/`)
|
|
2256
|
+
);
|
|
2257
|
+
const handleLogoutInitiation = async () => {
|
|
2258
|
+
if (isLoggingOut || !onLogout) return;
|
|
2259
|
+
setIsLoggingOut(true);
|
|
2260
|
+
try {
|
|
2261
|
+
await onLogout();
|
|
2262
|
+
} catch (error) {
|
|
2263
|
+
setIsLoggingOut(false);
|
|
2264
|
+
setShowLogoutDialog(false);
|
|
2265
|
+
}
|
|
2266
|
+
};
|
|
2267
|
+
return /* @__PURE__ */ React23.createElement(React23.Fragment, null, /* @__PURE__ */ React23.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__ */ React23.createElement("div", { className: "h-24 shrink-0" }), /* @__PURE__ */ React23.createElement("nav", { className: "flex-1 flex flex-col gap-3 px-2" }, navItems.map((item, index) => {
|
|
2268
|
+
const isExactOrSubMatch = item.path === "/" || item.path === "/app" ? currentPath === "/" || currentPath === "/app" : currentPath === item.path || currentPath?.startsWith(`${item.path}/`);
|
|
2269
|
+
const isCurrentRoute = isExactOrSubMatch || !hasActiveMatch && index === 0;
|
|
2270
|
+
return /* @__PURE__ */ React23.createElement(
|
|
2271
|
+
Link5,
|
|
2272
|
+
{
|
|
2273
|
+
key: item.name,
|
|
2274
|
+
href: item.path,
|
|
2275
|
+
onClick: (e) => onNavClick ? onNavClick(e, item.path) : void 0,
|
|
2276
|
+
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"}`,
|
|
2277
|
+
title: item.name
|
|
2278
|
+
},
|
|
2279
|
+
/* @__PURE__ */ React23.createElement(
|
|
2280
|
+
HugeiconsIcon17,
|
|
2281
|
+
{
|
|
2282
|
+
icon: item.icon,
|
|
2283
|
+
size: 20,
|
|
2284
|
+
className: `shrink-0 transition-colors ${isCurrentRoute ? "text-black" : "text-neutral-400 group-hover:text-black"}`
|
|
2285
|
+
}
|
|
2286
|
+
)
|
|
2287
|
+
);
|
|
2288
|
+
})), /* @__PURE__ */ React23.createElement("div", { className: "p-4 shrink-0 flex flex-col items-center gap-2 mb-4" }, showLogoutAction && /* @__PURE__ */ React23.createElement(
|
|
2289
|
+
"button",
|
|
2290
|
+
{
|
|
2291
|
+
onClick: () => setShowLogoutDialog(true),
|
|
2292
|
+
className: "w-12 h-12 rounded-full flex items-center justify-center text-neutral-500 hover:bg-white/50 transition-all outline-none"
|
|
2293
|
+
},
|
|
2294
|
+
/* @__PURE__ */ React23.createElement(HugeiconsIcon17, { icon: LogoutCircle02Icon2, size: 20 })
|
|
2295
|
+
))), showLogoutAction && /* @__PURE__ */ React23.createElement(
|
|
2296
|
+
ConfirmationDialog,
|
|
2297
|
+
{
|
|
2298
|
+
isOpen: showLogoutDialog,
|
|
2299
|
+
title: "Secure Logout",
|
|
2300
|
+
message: "Are you sure you want to log out? You will need to authenticate to return.",
|
|
2301
|
+
confirmText: "Log Out",
|
|
2302
|
+
isDestructive: true,
|
|
2303
|
+
isProcessing: isLoggingOut,
|
|
2304
|
+
onClose: () => setShowLogoutDialog(false),
|
|
2305
|
+
onConfirm: handleLogoutInitiation
|
|
2306
|
+
}
|
|
2307
|
+
));
|
|
2308
|
+
};
|
|
2309
|
+
|
|
2310
|
+
// src/components/HeroSection.tsx
|
|
2311
|
+
import React25, { useState as useState16, useEffect as useEffect10, useRef as useRef4 } from "react";
|
|
2312
|
+
import Link6 from "next/link";
|
|
2342
2313
|
import Image3 from "next/image";
|
|
2343
2314
|
|
|
2344
2315
|
// src/components/WaitlistDialog.tsx
|
|
2345
|
-
import
|
|
2316
|
+
import React24, { useState as useState15 } from "react";
|
|
2346
2317
|
import { toast as toast6 } from "react-hot-toast";
|
|
2347
2318
|
var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
2348
2319
|
const [email, setEmail] = useState15("");
|
|
@@ -2377,12 +2348,12 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2377
2348
|
setIsLoading(false);
|
|
2378
2349
|
}
|
|
2379
2350
|
};
|
|
2380
|
-
return /* @__PURE__ */
|
|
2351
|
+
return /* @__PURE__ */ React24.createElement("div", { className: "fixed inset-0 z-100 flex items-center justify-center p-4 bg-black/40" }, /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0", onClick: !isLoading ? onClose : void 0 }), /* @__PURE__ */ React24.createElement(
|
|
2381
2352
|
"div",
|
|
2382
2353
|
{
|
|
2383
2354
|
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"
|
|
2384
2355
|
},
|
|
2385
|
-
/* @__PURE__ */
|
|
2356
|
+
/* @__PURE__ */ React24.createElement(
|
|
2386
2357
|
"button",
|
|
2387
2358
|
{
|
|
2388
2359
|
onClick: onClose,
|
|
@@ -2390,7 +2361,7 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2390
2361
|
className: "absolute top-4 right-4 p-2 text-neutral-700 hover:text-neutral-400 transition-colors disabled:opacity-50 outline-none",
|
|
2391
2362
|
"aria-label": "Close dialog"
|
|
2392
2363
|
},
|
|
2393
|
-
/* @__PURE__ */
|
|
2364
|
+
/* @__PURE__ */ React24.createElement(
|
|
2394
2365
|
"svg",
|
|
2395
2366
|
{
|
|
2396
2367
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -2403,11 +2374,11 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2403
2374
|
strokeLinecap: "round",
|
|
2404
2375
|
strokeLinejoin: "round"
|
|
2405
2376
|
},
|
|
2406
|
-
/* @__PURE__ */
|
|
2407
|
-
/* @__PURE__ */
|
|
2377
|
+
/* @__PURE__ */ React24.createElement("path", { d: "M18 6 6 18" }),
|
|
2378
|
+
/* @__PURE__ */ React24.createElement("path", { d: "m6 6 12 12" })
|
|
2408
2379
|
)
|
|
2409
2380
|
),
|
|
2410
|
-
/* @__PURE__ */
|
|
2381
|
+
/* @__PURE__ */ React24.createElement("div", { className: "p-6 sm:p-8" }, /* @__PURE__ */ React24.createElement("div", { className: "mb-8 mt-2" }, /* @__PURE__ */ React24.createElement("h2", { className: "text-2xl text-black tracking-tight mb-2" }, "Join the Waitlist"), /* @__PURE__ */ React24.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__ */ React24.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col gap-8" }, /* @__PURE__ */ React24.createElement(
|
|
2411
2382
|
TextInput,
|
|
2412
2383
|
{
|
|
2413
2384
|
label: "Email ID",
|
|
@@ -2417,7 +2388,7 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2417
2388
|
placeholder: "name@example.com",
|
|
2418
2389
|
disabled: isLoading
|
|
2419
2390
|
}
|
|
2420
|
-
), /* @__PURE__ */
|
|
2391
|
+
), /* @__PURE__ */ React24.createElement(
|
|
2421
2392
|
ThreeDActionButton,
|
|
2422
2393
|
{
|
|
2423
2394
|
type: "submit",
|
|
@@ -2475,7 +2446,7 @@ var HeroSection = ({
|
|
|
2475
2446
|
setIsWaitlistOpen(true);
|
|
2476
2447
|
}
|
|
2477
2448
|
};
|
|
2478
|
-
return /* @__PURE__ */
|
|
2449
|
+
return /* @__PURE__ */ React25.createElement("div", { className: "w-screen min-h-screen flex justify-center items-center p-4" }, /* @__PURE__ */ React25.createElement("section", { className: "relative h-[95vh] w-full overflow-hidden rounded-2xl " }, bgVideoSrc ? /* @__PURE__ */ React25.createElement(
|
|
2479
2450
|
"video",
|
|
2480
2451
|
{
|
|
2481
2452
|
src: bgVideoSrc,
|
|
@@ -2486,7 +2457,7 @@ var HeroSection = ({
|
|
|
2486
2457
|
playsInline: true,
|
|
2487
2458
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
2488
2459
|
}
|
|
2489
|
-
) : bgImageSrc ? /* @__PURE__ */
|
|
2460
|
+
) : bgImageSrc ? /* @__PURE__ */ React25.createElement(
|
|
2490
2461
|
Image3,
|
|
2491
2462
|
{
|
|
2492
2463
|
src: bgImageSrc,
|
|
@@ -2495,7 +2466,7 @@ var HeroSection = ({
|
|
|
2495
2466
|
priority: true,
|
|
2496
2467
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
2497
2468
|
}
|
|
2498
|
-
) : null, /* @__PURE__ */
|
|
2469
|
+
) : null, /* @__PURE__ */ React25.createElement(
|
|
2499
2470
|
"div",
|
|
2500
2471
|
{
|
|
2501
2472
|
className: "pointer-events-none absolute inset-0 z-10 opacity-[0.7] mix-blend-overlay",
|
|
@@ -2503,31 +2474,31 @@ var HeroSection = ({
|
|
|
2503
2474
|
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")`
|
|
2504
2475
|
}
|
|
2505
2476
|
}
|
|
2506
|
-
), /* @__PURE__ */
|
|
2477
|
+
), /* @__PURE__ */ React25.createElement("div", { className: "pointer-events-none absolute inset-0 bg-linear-to-b from-black/30 via-transparent to-black/80 z-10" }), /* @__PURE__ */ React25.createElement("div", { className: "absolute bottom-0 left-0 right-0 px-4 pb-4 sm:px-6 md:px-10 z-20" }, /* @__PURE__ */ React25.createElement("div", { className: "grid grid-cols-12 items-end gap-4" }, /* @__PURE__ */ React25.createElement("div", { className: "col-span-12 lg:col-span-8" }, /* @__PURE__ */ React25.createElement(
|
|
2507
2478
|
"h1",
|
|
2508
2479
|
{
|
|
2509
2480
|
ref: titleRef,
|
|
2510
2481
|
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]"
|
|
2511
2482
|
},
|
|
2512
|
-
/* @__PURE__ */
|
|
2513
|
-
)), /* @__PURE__ */
|
|
2514
|
-
/* @__PURE__ */
|
|
2515
|
-
|
|
2483
|
+
/* @__PURE__ */ React25.createElement("div", { className: "inline-flex flex-wrap" }, /* @__PURE__ */ React25.createElement("span", { className: `inline-block relative transition-all duration-1000 ${isAnimating ? "opacity-100 translate-y-0" : "opacity-0 translate-y-10"}` }, titlePrefix, titlePrefix && /* @__PURE__ */ React25.createElement("br", null), highlightText, /* @__PURE__ */ React25.createElement("span", { className: "absolute top-[0.65em] right-[-0.3em] text-[0.31em] text-[#ffffff]/70" }, "*")))
|
|
2484
|
+
)), /* @__PURE__ */ React25.createElement("div", { className: "col-span-12 flex flex-col gap-5 pb-6 lg:col-span-4 lg:pb-10" }, subtitle && /* @__PURE__ */ React25.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__ */ React25.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!
|
|
2485
|
+
/* @__PURE__ */ React25.createElement(
|
|
2486
|
+
Link6,
|
|
2516
2487
|
{
|
|
2517
2488
|
href: isWaitlist ? "#" : ctaHref || "#",
|
|
2518
2489
|
onClick: handleCtaClick,
|
|
2519
2490
|
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"
|
|
2520
2491
|
},
|
|
2521
2492
|
ctaText,
|
|
2522
|
-
/* @__PURE__ */
|
|
2523
|
-
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
2524
|
-
|
|
2493
|
+
/* @__PURE__ */ React25.createElement("span", { className: "flex h-8 w-8 items-center justify-center rounded-full bg-black transition-transform group-hover:scale-110" }, /* @__PURE__ */ React25.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__ */ React25.createElement("path", { d: "M5 12h14" }), /* @__PURE__ */ React25.createElement("path", { d: "m12 5 7 7-7 7" })))
|
|
2494
|
+
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ React25.createElement(
|
|
2495
|
+
Link6,
|
|
2525
2496
|
{
|
|
2526
2497
|
href: secondaryCtaHref,
|
|
2527
2498
|
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"
|
|
2528
2499
|
},
|
|
2529
2500
|
secondaryCtaText
|
|
2530
|
-
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */
|
|
2501
|
+
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */ React25.createElement("div", { className: "flex flex-col gap-3 mt-4" }, appsText && /* @__PURE__ */ React25.createElement("span", { className: "text-[10px] tracking-widest uppercase text-[#ffffff]/50 " }, appsText), /* @__PURE__ */ React25.createElement("div", { className: "flex items-center gap-4" }, appLogos.map((logo, idx) => /* @__PURE__ */ React25.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__ */ React25.createElement(
|
|
2531
2502
|
Image3,
|
|
2532
2503
|
{
|
|
2533
2504
|
src: logo.src,
|
|
@@ -2536,7 +2507,7 @@ var HeroSection = ({
|
|
|
2536
2507
|
height: 28,
|
|
2537
2508
|
className: "object-contain"
|
|
2538
2509
|
}
|
|
2539
|
-
))))))))), /* @__PURE__ */
|
|
2510
|
+
))))))))), /* @__PURE__ */ React25.createElement(
|
|
2540
2511
|
WaitlistDialog,
|
|
2541
2512
|
{
|
|
2542
2513
|
isOpen: isWaitlistOpen,
|
|
@@ -2546,8 +2517,8 @@ var HeroSection = ({
|
|
|
2546
2517
|
};
|
|
2547
2518
|
|
|
2548
2519
|
// src/components/AppBento2.tsx
|
|
2549
|
-
import
|
|
2550
|
-
import { HugeiconsIcon as
|
|
2520
|
+
import React26, { useState as useState17, useEffect as useEffect11, useRef as useRef5 } from "react";
|
|
2521
|
+
import { HugeiconsIcon as HugeiconsIcon18 } from "@hugeicons/react";
|
|
2551
2522
|
var AppBento2 = ({ tagline, headline, features }) => {
|
|
2552
2523
|
const [isAnimating, setIsAnimating] = useState17(false);
|
|
2553
2524
|
const titleRef = useRef5(null);
|
|
@@ -2569,7 +2540,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2569
2540
|
}
|
|
2570
2541
|
return () => observer.disconnect();
|
|
2571
2542
|
}, []);
|
|
2572
|
-
return /* @__PURE__ */
|
|
2543
|
+
return /* @__PURE__ */ React26.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ React26.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ React26.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React26.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ React26.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React26.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), /* @__PURE__ */ React26.createElement(
|
|
2573
2544
|
"h2",
|
|
2574
2545
|
{
|
|
2575
2546
|
ref: titleRef,
|
|
@@ -2577,7 +2548,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2577
2548
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2578
2549
|
},
|
|
2579
2550
|
headline
|
|
2580
|
-
))), /* @__PURE__ */
|
|
2551
|
+
))), /* @__PURE__ */ React26.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-6 gap-6" }, features.map((f, i) => {
|
|
2581
2552
|
const isWhite = i === 0;
|
|
2582
2553
|
const isBlack = i === 1;
|
|
2583
2554
|
const isNeutral = i === 2;
|
|
@@ -2599,36 +2570,36 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2599
2570
|
const textColor = isBlack ? "text-white" : "text-black";
|
|
2600
2571
|
const subTextColor = isBlack ? "text-neutral-300" : "text-neutral-600";
|
|
2601
2572
|
const labelColor = isBlack ? "text-neutral-400" : "text-neutral-500";
|
|
2602
|
-
return /* @__PURE__ */
|
|
2573
|
+
return /* @__PURE__ */ React26.createElement(
|
|
2603
2574
|
"div",
|
|
2604
2575
|
{
|
|
2605
2576
|
key: i,
|
|
2606
2577
|
className: `relative rounded-2xl overflow-hidden p-8 flex flex-col min-h-75 transition-all duration-500 group text-left ${getBgStyle()} ${f.size}`,
|
|
2607
2578
|
style: { boxShadow: getShadowStyle() }
|
|
2608
2579
|
},
|
|
2609
|
-
/* @__PURE__ */
|
|
2580
|
+
/* @__PURE__ */ React26.createElement(
|
|
2610
2581
|
"div",
|
|
2611
2582
|
{
|
|
2612
2583
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
2613
2584
|
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")` }
|
|
2614
2585
|
}
|
|
2615
2586
|
),
|
|
2616
|
-
isBlack && /* @__PURE__ */
|
|
2617
|
-
/* @__PURE__ */
|
|
2618
|
-
/* @__PURE__ */
|
|
2587
|
+
isBlack && /* @__PURE__ */ React26.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" }),
|
|
2588
|
+
/* @__PURE__ */ React26.createElement("div", { className: "absolute inset-0 overflow-hidden pointer-events-none z-0" }, /* @__PURE__ */ React26.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__ */ React26.createElement(HugeiconsIcon18, { icon: f.icon, size: 180 }))),
|
|
2589
|
+
/* @__PURE__ */ React26.createElement("div", { className: "relative z-10 w-full h-full flex flex-col pointer-events-auto" }, /* @__PURE__ */ React26.createElement("div", { className: "flex items-center justify-between mb-8" }, /* @__PURE__ */ React26.createElement("span", { className: `text-[9px] tracking-widest ${labelColor}` }, f.label), /* @__PURE__ */ React26.createElement("div", { className: `p-2 rounded-full transition-colors ${isBlack ? "bg-white/10" : "bg-white/50 backdrop-blur-sm"}` }, /* @__PURE__ */ React26.createElement(HugeiconsIcon18, { icon: f.icon, size: 20, className: textColor }))), /* @__PURE__ */ React26.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React26.createElement("h3", { className: `text-xl mb-2 tracking-tight ${textColor}` }, f.title), /* @__PURE__ */ React26.createElement("p", { className: `text-[13px] leading-relaxed max-w-sm ${subTextColor}` }, f.desc)))
|
|
2619
2590
|
);
|
|
2620
2591
|
})))));
|
|
2621
2592
|
};
|
|
2622
2593
|
|
|
2623
2594
|
// src/components/FeatureScroll.tsx
|
|
2624
|
-
import
|
|
2595
|
+
import React27, { useRef as useRef6, useState as useState18, useEffect as useEffect12 } from "react";
|
|
2625
2596
|
import Image4 from "next/image";
|
|
2626
|
-
import { HugeiconsIcon as
|
|
2627
|
-
import { ArrowLeft01Icon as
|
|
2597
|
+
import { HugeiconsIcon as HugeiconsIcon19 } from "@hugeicons/react";
|
|
2598
|
+
import { ArrowLeft01Icon as ArrowLeft01Icon2, ArrowRight01Icon as ArrowRight01Icon4, Loading03Icon as Loading03Icon10 } from "@hugeicons/core-free-icons";
|
|
2628
2599
|
var FeatureCard = ({ feature, bgImage }) => {
|
|
2629
2600
|
const [isBgLoading, setIsBgLoading] = useState18(true);
|
|
2630
2601
|
const [isFgLoading, setIsFgLoading] = useState18(!!feature.image);
|
|
2631
|
-
return /* @__PURE__ */
|
|
2602
|
+
return /* @__PURE__ */ React27.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__ */ React27.createElement("div", { className: "relative w-full aspect-16/10 bg-neutral-100 rounded-2xl overflow-hidden mb-6 flex items-center justify-center" }, /* @__PURE__ */ React27.createElement(
|
|
2632
2603
|
Image4,
|
|
2633
2604
|
{
|
|
2634
2605
|
src: bgImage,
|
|
@@ -2641,7 +2612,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2641
2612
|
${isBgLoading ? "blur-xl scale-110" : "blur-0 scale-100"}
|
|
2642
2613
|
`
|
|
2643
2614
|
}
|
|
2644
|
-
), /* @__PURE__ */
|
|
2615
|
+
), /* @__PURE__ */ React27.createElement(
|
|
2645
2616
|
"div",
|
|
2646
2617
|
{
|
|
2647
2618
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.25] mix-blend-overlay",
|
|
@@ -2649,7 +2620,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2649
2620
|
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")`
|
|
2650
2621
|
}
|
|
2651
2622
|
}
|
|
2652
|
-
), isFgLoading && feature.image && /* @__PURE__ */
|
|
2623
|
+
), isFgLoading && feature.image && /* @__PURE__ */ React27.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__ */ React27.createElement(HugeiconsIcon19, { icon: Loading03Icon10, size: 32, className: "animate-spin text-neutral-400" })), feature.image && /* @__PURE__ */ React27.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__ */ React27.createElement(
|
|
2653
2624
|
Image4,
|
|
2654
2625
|
{
|
|
2655
2626
|
src: feature.image,
|
|
@@ -2662,7 +2633,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2662
2633
|
${isFgLoading ? "opacity-0 blur-xl" : "opacity-100 blur-0"}
|
|
2663
2634
|
`
|
|
2664
2635
|
}
|
|
2665
|
-
))), /* @__PURE__ */
|
|
2636
|
+
))), /* @__PURE__ */ React27.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ React27.createElement("h3", { className: " text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ React27.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 max-w-[90%]" }, feature.desc)));
|
|
2666
2637
|
};
|
|
2667
2638
|
var FeatureScroll = ({ tagline, headline, features }) => {
|
|
2668
2639
|
const scrollRef = useRef6(null);
|
|
@@ -2691,7 +2662,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2691
2662
|
"https://retinalabs.company/assets/images/bg_6.avif",
|
|
2692
2663
|
"https://retinalabs.company/assets/images/bg_1.avif"
|
|
2693
2664
|
];
|
|
2694
|
-
return /* @__PURE__ */
|
|
2665
|
+
return /* @__PURE__ */ React27.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden" }, /* @__PURE__ */ React27.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React27.createElement("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ React27.createElement("div", { className: "relative z-10 text-left" }, /* @__PURE__ */ React27.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ React27.createElement("h2", { className: " text-3xl tracking-tight text-black leading-[1.05]" }, headline)), /* @__PURE__ */ React27.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ React27.createElement(
|
|
2695
2666
|
"button",
|
|
2696
2667
|
{
|
|
2697
2668
|
onClick: () => scroll("left"),
|
|
@@ -2699,8 +2670,8 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2699
2670
|
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",
|
|
2700
2671
|
"aria-label": "Previous feature"
|
|
2701
2672
|
},
|
|
2702
|
-
/* @__PURE__ */
|
|
2703
|
-
), /* @__PURE__ */
|
|
2673
|
+
/* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: ArrowLeft01Icon2, size: 20 })
|
|
2674
|
+
), /* @__PURE__ */ React27.createElement(
|
|
2704
2675
|
"button",
|
|
2705
2676
|
{
|
|
2706
2677
|
onClick: () => scroll("right"),
|
|
@@ -2708,57 +2679,57 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2708
2679
|
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",
|
|
2709
2680
|
"aria-label": "Next feature"
|
|
2710
2681
|
},
|
|
2711
|
-
/* @__PURE__ */
|
|
2712
|
-
))), /* @__PURE__ */
|
|
2682
|
+
/* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: ArrowRight01Icon4, size: 20 })
|
|
2683
|
+
))), /* @__PURE__ */ React27.createElement(
|
|
2713
2684
|
"div",
|
|
2714
2685
|
{
|
|
2715
2686
|
ref: scrollRef,
|
|
2716
2687
|
onScroll: checkScroll,
|
|
2717
2688
|
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"
|
|
2718
2689
|
},
|
|
2719
|
-
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */
|
|
2720
|
-
), /* @__PURE__ */
|
|
2690
|
+
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */ React27.createElement(FeatureCard, { key: idx, feature, bgImage: bgImages[idx] }))
|
|
2691
|
+
), /* @__PURE__ */ React27.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ React27.createElement(
|
|
2721
2692
|
"button",
|
|
2722
2693
|
{
|
|
2723
2694
|
onClick: () => scroll("left"),
|
|
2724
2695
|
disabled: !canScrollLeft,
|
|
2725
2696
|
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"
|
|
2726
2697
|
},
|
|
2727
|
-
/* @__PURE__ */
|
|
2728
|
-
), /* @__PURE__ */
|
|
2698
|
+
/* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: ArrowLeft01Icon2, size: 20 })
|
|
2699
|
+
), /* @__PURE__ */ React27.createElement(
|
|
2729
2700
|
"button",
|
|
2730
2701
|
{
|
|
2731
2702
|
onClick: () => scroll("right"),
|
|
2732
2703
|
disabled: !canScrollRight,
|
|
2733
2704
|
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"
|
|
2734
2705
|
},
|
|
2735
|
-
/* @__PURE__ */
|
|
2706
|
+
/* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: ArrowRight01Icon4, size: 20 })
|
|
2736
2707
|
))));
|
|
2737
2708
|
};
|
|
2738
2709
|
|
|
2739
2710
|
// src/components/PlatformFeatures.tsx
|
|
2740
|
-
import
|
|
2741
|
-
import { HugeiconsIcon as
|
|
2711
|
+
import React28 from "react";
|
|
2712
|
+
import { HugeiconsIcon as HugeiconsIcon20 } from "@hugeicons/react";
|
|
2742
2713
|
var PlatformFeatures = ({
|
|
2743
2714
|
tagline,
|
|
2744
2715
|
headline,
|
|
2745
2716
|
description,
|
|
2746
2717
|
features
|
|
2747
2718
|
}) => {
|
|
2748
|
-
return /* @__PURE__ */
|
|
2719
|
+
return /* @__PURE__ */ React28.createElement("section", { className: "w-full flex justify-center mb-15 relative z-10" }, /* @__PURE__ */ React28.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col items-start mb-16 relative z-10" }, /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ React28.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.05] mb-6" }, headline), /* @__PURE__ */ React28.createElement("p", { className: "text-[15px] leading-[1.8] text-neutral-600 max-w-2xl" }, description)), /* @__PURE__ */ React28.createElement("div", { className: "w-full h-px bg-neutral-100 mb-16", "aria-hidden": "true" }), /* @__PURE__ */ React28.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__ */ React28.createElement(
|
|
2749
2720
|
"div",
|
|
2750
2721
|
{
|
|
2751
2722
|
key: idx,
|
|
2752
2723
|
className: "flex flex-col group animate-in fade-in slide-in-from-bottom-4 duration-700 fill-mode-both",
|
|
2753
2724
|
style: { animationDelay: feature.delay || "0ms" }
|
|
2754
2725
|
},
|
|
2755
|
-
/* @__PURE__ */
|
|
2756
|
-
/* @__PURE__ */
|
|
2726
|
+
/* @__PURE__ */ React28.createElement("div", { className: "flex flex-row items-center gap-4 mb-4" }, /* @__PURE__ */ React28.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__ */ React28.createElement(HugeiconsIcon20, { icon: feature.icon, size: 24 })), /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col justify-center" }, /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400 mb-0.5" }, feature.label || "CAPABILITY"), /* @__PURE__ */ React28.createElement("h3", { className: "text-xl tracking-tight text-black" }, feature.title))),
|
|
2727
|
+
/* @__PURE__ */ React28.createElement("div", null, /* @__PURE__ */ React28.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 pr-4" }, feature.desc))
|
|
2757
2728
|
)))));
|
|
2758
2729
|
};
|
|
2759
2730
|
|
|
2760
2731
|
// src/components/ManagedDocument.tsx
|
|
2761
|
-
import
|
|
2732
|
+
import React29, { useState as useState19, useEffect as useEffect13, useRef as useRef7 } from "react";
|
|
2762
2733
|
var ManagedDocument = ({
|
|
2763
2734
|
tagline,
|
|
2764
2735
|
title,
|
|
@@ -2788,7 +2759,7 @@ var ManagedDocument = ({
|
|
|
2788
2759
|
}, []);
|
|
2789
2760
|
return (
|
|
2790
2761
|
// Outer layout wrapper (takes up available space, adds padding)
|
|
2791
|
-
/* @__PURE__ */
|
|
2762
|
+
/* @__PURE__ */ React29.createElement("div", { className: "grow pt-4 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React29.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ React29.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React29.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ React29.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React29.createElement(
|
|
2792
2763
|
"h1",
|
|
2793
2764
|
{
|
|
2794
2765
|
ref: titleRef,
|
|
@@ -2796,7 +2767,7 @@ var ManagedDocument = ({
|
|
|
2796
2767
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2797
2768
|
},
|
|
2798
2769
|
title
|
|
2799
|
-
)), sections.map((section, index) => /* @__PURE__ */
|
|
2770
|
+
)), sections.map((section, index) => /* @__PURE__ */ React29.createElement("div", { key: index, className: "relative px-5 md:px-12 py-8 md:py-10" }, section.heading && /* @__PURE__ */ React29.createElement("p", { className: " text-[11px] tracking-[0.2em] text-black mb-4 text-left " }, section.heading), section.paragraphs && section.paragraphs.length > 0 && /* @__PURE__ */ React29.createElement("div", { className: "text-[14px] leading-[1.8] text-neutral-700 space-y-4 text-left " }, section.paragraphs.map((text, pIndex) => /* @__PURE__ */ React29.createElement("p", { key: pIndex }, text))), section.quote && /* @__PURE__ */ React29.createElement("div", { className: `border-neutral-100 border rounded-xl p-6 ${section.paragraphs && section.paragraphs.length > 0 ? "mt-6" : ""}` }, /* @__PURE__ */ React29.createElement("p", { className: "text-neutral-900 text-[14px] md:text-[14px] leading-relaxed" }, '"', section.quote, '"')))), (contactText || contactEmail) && /* @__PURE__ */ React29.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ React29.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ React29.createElement(
|
|
2800
2771
|
"a",
|
|
2801
2772
|
{
|
|
2802
2773
|
href: `mailto:${contactEmail}`,
|
|
@@ -2808,18 +2779,18 @@ var ManagedDocument = ({
|
|
|
2808
2779
|
};
|
|
2809
2780
|
|
|
2810
2781
|
// src/components/ManagedContactBlock.tsx
|
|
2811
|
-
import
|
|
2812
|
-
import { HugeiconsIcon as
|
|
2782
|
+
import React30, { useState as useState20, useEffect as useEffect14 } from "react";
|
|
2783
|
+
import { HugeiconsIcon as HugeiconsIcon21 } from "@hugeicons/react";
|
|
2813
2784
|
var SecureEmail = ({ user, domain, className }) => {
|
|
2814
2785
|
const [isMounted, setIsMounted] = useState20(false);
|
|
2815
2786
|
useEffect14(() => {
|
|
2816
2787
|
setIsMounted(true);
|
|
2817
2788
|
}, []);
|
|
2818
2789
|
if (!isMounted) {
|
|
2819
|
-
return /* @__PURE__ */
|
|
2790
|
+
return /* @__PURE__ */ React30.createElement("span", { className, style: { opacity: 0 } }, "Loading");
|
|
2820
2791
|
}
|
|
2821
2792
|
const email = `${user}@${domain}`;
|
|
2822
|
-
return /* @__PURE__ */
|
|
2793
|
+
return /* @__PURE__ */ React30.createElement("a", { href: `mailto:${email}`, className }, email);
|
|
2823
2794
|
};
|
|
2824
2795
|
var ManagedContactBlock = ({
|
|
2825
2796
|
tagline,
|
|
@@ -2828,7 +2799,7 @@ var ManagedContactBlock = ({
|
|
|
2828
2799
|
emails,
|
|
2829
2800
|
socials
|
|
2830
2801
|
}) => {
|
|
2831
|
-
return /* @__PURE__ */
|
|
2802
|
+
return /* @__PURE__ */ React30.createElement("div", { className: "grow pt-4 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React30.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ React30.createElement(
|
|
2832
2803
|
"div",
|
|
2833
2804
|
{
|
|
2834
2805
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2837,21 +2808,21 @@ var ManagedContactBlock = ({
|
|
|
2837
2808
|
backgroundRepeat: "repeat"
|
|
2838
2809
|
}
|
|
2839
2810
|
}
|
|
2840
|
-
), /* @__PURE__ */
|
|
2811
|
+
), /* @__PURE__ */ React30.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React30.createElement("div", { className: "relative px-8 md:px-12 py-10" }, tagline && /* @__PURE__ */ React30.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React30.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ React30.createElement("div", { className: "relative px-8 md:px-12 py-8 pb-14" }, /* @__PURE__ */ React30.createElement("div", { className: "flex flex-wrap gap-12 lg:gap-16 w-full" }, company && /* @__PURE__ */ React30.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React30.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Contact Details"), /* @__PURE__ */ React30.createElement("div", { className: "space-y-3 text-[13px] text-neutral-600 leading-[1.8]" }, company.name && /* @__PURE__ */ React30.createElement("p", { className: "text-black" }, company.name), company.lines && company.lines.map((line, idx) => /* @__PURE__ */ React30.createElement("p", { key: idx }, line)), company.phone && /* @__PURE__ */ React30.createElement("p", { className: "pt-2" }, /* @__PURE__ */ React30.createElement(
|
|
2841
2812
|
"a",
|
|
2842
2813
|
{
|
|
2843
2814
|
href: `tel:${company.phone.replace(/\s+/g, "")}`,
|
|
2844
2815
|
className: "transition-colors hover:text-black"
|
|
2845
2816
|
},
|
|
2846
2817
|
company.phone
|
|
2847
|
-
)))), emails && emails.length > 0 && /* @__PURE__ */
|
|
2818
|
+
)))), emails && emails.length > 0 && /* @__PURE__ */ React30.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React30.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Email Directory"), /* @__PURE__ */ React30.createElement("div", { className: "space-y-6 text-[13px]" }, emails.map((email, idx) => /* @__PURE__ */ React30.createElement("div", { key: idx }, /* @__PURE__ */ React30.createElement("p", { className: "text-[11px] tracking-[0.2em] mb-1.5 text-neutral-500 " }, email.label), /* @__PURE__ */ React30.createElement(
|
|
2848
2819
|
SecureEmail,
|
|
2849
2820
|
{
|
|
2850
2821
|
user: email.user,
|
|
2851
2822
|
domain: email.domain,
|
|
2852
2823
|
className: "text-neutral-600 transition-colors hover:text-black"
|
|
2853
2824
|
}
|
|
2854
|
-
))))), socials && socials.length > 0 && /* @__PURE__ */
|
|
2825
|
+
))))), socials && socials.length > 0 && /* @__PURE__ */ React30.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React30.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Find Us Online"), /* @__PURE__ */ React30.createElement("div", { className: "flex flex-col space-y-5 pt-1" }, socials.map((social, idx) => /* @__PURE__ */ React30.createElement(
|
|
2855
2826
|
"a",
|
|
2856
2827
|
{
|
|
2857
2828
|
key: idx,
|
|
@@ -2861,17 +2832,17 @@ var ManagedContactBlock = ({
|
|
|
2861
2832
|
className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black",
|
|
2862
2833
|
"aria-label": social.label
|
|
2863
2834
|
},
|
|
2864
|
-
/* @__PURE__ */
|
|
2865
|
-
/* @__PURE__ */
|
|
2835
|
+
/* @__PURE__ */ React30.createElement(HugeiconsIcon21, { icon: social.icon, size: 18 }),
|
|
2836
|
+
/* @__PURE__ */ React30.createElement("span", { className: "text-[13px]" }, social.label)
|
|
2866
2837
|
)))))))));
|
|
2867
2838
|
};
|
|
2868
2839
|
|
|
2869
2840
|
// src/components/ManagedPricingBlock.tsx
|
|
2870
|
-
import
|
|
2871
|
-
import
|
|
2841
|
+
import React31, { useState as useState21, useEffect as useEffect15, useRef as useRef8 } from "react";
|
|
2842
|
+
import Link7 from "next/link";
|
|
2872
2843
|
import Image5 from "next/image";
|
|
2873
|
-
var CheckIcon = ({ className = "" }) => /* @__PURE__ */
|
|
2874
|
-
var CrossIcon = ({ className = "" }) => /* @__PURE__ */
|
|
2844
|
+
var CheckIcon = ({ className = "" }) => /* @__PURE__ */ React31.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React31.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ React31.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
2845
|
+
var CrossIcon = ({ className = "" }) => /* @__PURE__ */ React31.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React31.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ React31.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
2875
2846
|
var ManagedPricingBlock = ({
|
|
2876
2847
|
tagline,
|
|
2877
2848
|
title,
|
|
@@ -2901,7 +2872,7 @@ var ManagedPricingBlock = ({
|
|
|
2901
2872
|
}, []);
|
|
2902
2873
|
const hasTabs = tabs && tabs.length > 0;
|
|
2903
2874
|
const currentPlans = hasTabs ? tabs[activeTabIndex].plans : plans;
|
|
2904
|
-
return /* @__PURE__ */
|
|
2875
|
+
return /* @__PURE__ */ React31.createElement("div", { className: "grow pt-10 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React31.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col items-center" }, /* @__PURE__ */ React31.createElement("div", { className: "w-full flex flex-col items-center text-center mb-10 sm:mb-12" }, tagline && /* @__PURE__ */ React31.createElement("span", { className: "text-[9px] tracking-[0.4em] text-black block " }, tagline), /* @__PURE__ */ React31.createElement(
|
|
2905
2876
|
"h1",
|
|
2906
2877
|
{
|
|
2907
2878
|
ref: titleRef,
|
|
@@ -2909,30 +2880,30 @@ var ManagedPricingBlock = ({
|
|
|
2909
2880
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2910
2881
|
},
|
|
2911
2882
|
title
|
|
2912
|
-
)), hasTabs && /* @__PURE__ */
|
|
2883
|
+
)), hasTabs && /* @__PURE__ */ React31.createElement("div", { className: "flex items-center justify-center mb-8 sm:mb-10 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ React31.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) => {
|
|
2913
2884
|
const isActive = activeTabIndex === idx;
|
|
2914
|
-
return /* @__PURE__ */
|
|
2885
|
+
return /* @__PURE__ */ React31.createElement(
|
|
2915
2886
|
"button",
|
|
2916
2887
|
{
|
|
2917
2888
|
key: idx,
|
|
2918
2889
|
onClick: () => setActiveTabIndex(idx),
|
|
2919
|
-
className: `px-4
|
|
2890
|
+
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 "}`
|
|
2920
2891
|
},
|
|
2921
2892
|
tab.label
|
|
2922
2893
|
);
|
|
2923
|
-
}))), /* @__PURE__ */
|
|
2894
|
+
}))), /* @__PURE__ */ React31.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__ */ React31.createElement(
|
|
2924
2895
|
"div",
|
|
2925
2896
|
{
|
|
2926
2897
|
key: `${activeTabIndex}-${planIdx}`,
|
|
2927
2898
|
className: `bg-white rounded-3xl p-6 flex flex-col relative overflow-hidden transition-all duration-300 ${plan.isPremium ? "" : ""}`
|
|
2928
2899
|
},
|
|
2929
|
-
/* @__PURE__ */
|
|
2900
|
+
/* @__PURE__ */ React31.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React31.createElement("span", { className: "text-black text-base block mb-1" }, plan.name), /* @__PURE__ */ React31.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ React31.createElement("h3", { className: "text-3xl font-light text-black" }, plan.price), plan.period && /* @__PURE__ */ React31.createElement("span", { className: "text-xs text-neutral-500" }, plan.period)), /* @__PURE__ */ React31.createElement("p", { className: "text-xs text-neutral-500 mt-2 min-h-8" }, plan.description), plan.showApps && plan.appLogos && plan.appLogos.length > 0 && /* @__PURE__ */ React31.createElement("div", { className: "flex items-center gap-2 mt-4" }, plan.appLogos.map((logo, logoIdx) => /* @__PURE__ */ React31.createElement(
|
|
2930
2901
|
"div",
|
|
2931
2902
|
{
|
|
2932
2903
|
key: logoIdx,
|
|
2933
2904
|
className: "relative w-5 h-5 overflow-hidden flex items-center justify-center shrink-0"
|
|
2934
2905
|
},
|
|
2935
|
-
/* @__PURE__ */
|
|
2906
|
+
/* @__PURE__ */ React31.createElement(
|
|
2936
2907
|
Image5,
|
|
2937
2908
|
{
|
|
2938
2909
|
src: logo.src,
|
|
@@ -2943,28 +2914,28 @@ var ManagedPricingBlock = ({
|
|
|
2943
2914
|
}
|
|
2944
2915
|
)
|
|
2945
2916
|
)))),
|
|
2946
|
-
plan.isPremium ? /* @__PURE__ */
|
|
2947
|
-
|
|
2917
|
+
plan.isPremium ? /* @__PURE__ */ React31.createElement(ThreeDButton, { href: plan.ctaHref, className: "mb-6 w-full" }, plan.ctaText) : /* @__PURE__ */ React31.createElement(
|
|
2918
|
+
Link7,
|
|
2948
2919
|
{
|
|
2949
2920
|
href: plan.ctaHref,
|
|
2950
2921
|
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"
|
|
2951
2922
|
},
|
|
2952
2923
|
plan.ctaText
|
|
2953
2924
|
),
|
|
2954
|
-
/* @__PURE__ */
|
|
2925
|
+
/* @__PURE__ */ React31.createElement("div", { className: "flex flex-col gap-3" }, plan.features.map((feature, featureIdx) => {
|
|
2955
2926
|
const isAvailable = feature.value !== false;
|
|
2956
2927
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
2957
|
-
return /* @__PURE__ */
|
|
2928
|
+
return /* @__PURE__ */ React31.createElement("div", { key: featureIdx, className: "flex items-center gap-2.5" }, isAvailable ? /* @__PURE__ */ React31.createElement(CheckIcon, null) : /* @__PURE__ */ React31.createElement(CrossIcon, null), /* @__PURE__ */ React31.createElement("span", { className: `text-xs truncate ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ React31.createElement("span", { className: "text-neutral-500 ml-1" }, "(", valueText, ")")));
|
|
2958
2929
|
}))
|
|
2959
2930
|
)))));
|
|
2960
2931
|
};
|
|
2961
2932
|
|
|
2962
2933
|
// src/components/ManagedBoardBlock.tsx
|
|
2963
|
-
import
|
|
2934
|
+
import React32 from "react";
|
|
2964
2935
|
import Image6 from "next/image";
|
|
2965
|
-
import { HugeiconsIcon as
|
|
2936
|
+
import { HugeiconsIcon as HugeiconsIcon22 } from "@hugeicons/react";
|
|
2966
2937
|
import { TwitterIcon, LinkedinIcon } from "@hugeicons/core-free-icons";
|
|
2967
|
-
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */
|
|
2938
|
+
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ React32.createElement(
|
|
2968
2939
|
"a",
|
|
2969
2940
|
{
|
|
2970
2941
|
href,
|
|
@@ -2973,7 +2944,7 @@ var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ React31.
|
|
|
2973
2944
|
className: "text-neutral-400 hover:text-black transition-colors",
|
|
2974
2945
|
"aria-label": `${name} on ${label}`
|
|
2975
2946
|
},
|
|
2976
|
-
/* @__PURE__ */
|
|
2947
|
+
/* @__PURE__ */ React32.createElement(HugeiconsIcon22, { icon, size: 16 })
|
|
2977
2948
|
);
|
|
2978
2949
|
var ManagedBoardBlock = ({
|
|
2979
2950
|
tagline,
|
|
@@ -2982,7 +2953,7 @@ var ManagedBoardBlock = ({
|
|
|
2982
2953
|
contactText,
|
|
2983
2954
|
contactEmail
|
|
2984
2955
|
}) => {
|
|
2985
|
-
return /* @__PURE__ */
|
|
2956
|
+
return /* @__PURE__ */ React32.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React32.createElement("div", { className: "relative w-full mx-auto overflow-hidden max-w-7xl" }, /* @__PURE__ */ React32.createElement(
|
|
2986
2957
|
"div",
|
|
2987
2958
|
{
|
|
2988
2959
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2991,7 +2962,7 @@ var ManagedBoardBlock = ({
|
|
|
2991
2962
|
backgroundRepeat: "repeat"
|
|
2992
2963
|
}
|
|
2993
2964
|
}
|
|
2994
|
-
), /* @__PURE__ */
|
|
2965
|
+
), /* @__PURE__ */ React32.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React32.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ React32.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React32.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ React32.createElement("div", { className: "relative px-5 md:px-12 py-4 md:py-8" }, /* @__PURE__ */ React32.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__ */ React32.createElement("div", { key: idx, className: "relative p-6 md:p-8 rounded-2xl bg-white flex flex-col transition-all group" }, /* @__PURE__ */ React32.createElement("div", { className: "flex items-start space-x-4 md:space-x-5 mb-5 md:mb-6" }, /* @__PURE__ */ React32.createElement("div", { className: "relative w-14 h-14 md:w-16 md:h-16 shrink-0 bg-white overflow-hidden rounded-xl" }, /* @__PURE__ */ React32.createElement(
|
|
2995
2966
|
Image6,
|
|
2996
2967
|
{
|
|
2997
2968
|
src: member.imageSrc,
|
|
@@ -3000,7 +2971,7 @@ var ManagedBoardBlock = ({
|
|
|
3000
2971
|
sizes: "(max-width: 768px) 56px, 64px",
|
|
3001
2972
|
className: "object-cover grayscale opacity-100 transition-opacity"
|
|
3002
2973
|
}
|
|
3003
|
-
)), /* @__PURE__ */
|
|
2974
|
+
)), /* @__PURE__ */ React32.createElement("div", { className: "pt-1" }, /* @__PURE__ */ React32.createElement("h3", { className: " text-[14px] md:text-[15px] text-black tracking-tight" }, member.name), /* @__PURE__ */ React32.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 mt-1.5 " }, member.title))), /* @__PURE__ */ React32.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 text-left grow mb-8" }, member.bio), /* @__PURE__ */ React32.createElement("div", { className: "space-y-6 mt-auto" }, /* @__PURE__ */ React32.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ React32.createElement(ThreeDButton, { href: member.website }, "Visit Website")), /* @__PURE__ */ React32.createElement("div", { className: "flex space-x-4 pt-5" }, member.twitterHandle && member.twitterHandle.length > 0 && /* @__PURE__ */ React32.createElement(
|
|
3004
2975
|
MemberSocialLink,
|
|
3005
2976
|
{
|
|
3006
2977
|
href: `https://x.com/${member.twitterHandle}`,
|
|
@@ -3008,7 +2979,7 @@ var ManagedBoardBlock = ({
|
|
|
3008
2979
|
label: "X",
|
|
3009
2980
|
name: member.name
|
|
3010
2981
|
}
|
|
3011
|
-
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */
|
|
2982
|
+
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */ React32.createElement(
|
|
3012
2983
|
MemberSocialLink,
|
|
3013
2984
|
{
|
|
3014
2985
|
href: member.linkedinHandle,
|
|
@@ -3016,28 +2987,28 @@ var ManagedBoardBlock = ({
|
|
|
3016
2987
|
label: "LinkedIn",
|
|
3017
2988
|
name: member.name
|
|
3018
2989
|
}
|
|
3019
|
-
))))))), (contactText || contactEmail) && /* @__PURE__ */
|
|
2990
|
+
))))))), (contactText || contactEmail) && /* @__PURE__ */ React32.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ React32.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ React32.createElement("a", { href: `mailto:${contactEmail}`, className: "text-black decoration-black decoration-2 underline-offset-4 ml-1 transition-colors" }, contactEmail))))));
|
|
3020
2991
|
};
|
|
3021
2992
|
|
|
3022
2993
|
// src/components/ManagedNotFoundBlock.tsx
|
|
3023
|
-
import
|
|
2994
|
+
import React33 from "react";
|
|
3024
2995
|
var ManagedNotFoundBlock = ({
|
|
3025
2996
|
title = "404 - Page Not Found",
|
|
3026
2997
|
description = "The page you are looking for does not exist or has been moved."
|
|
3027
2998
|
}) => {
|
|
3028
|
-
return /* @__PURE__ */
|
|
2999
|
+
return /* @__PURE__ */ React33.createElement("main", { className: "min-h-screen flex items-center justify-center relative z-20 bg-transparent" }, /* @__PURE__ */ React33.createElement("div", { className: "p-6 w-full max-w-md mx-auto text-center" }, /* @__PURE__ */ React33.createElement("div", { className: "mb-8 flex justify-center" }, /* @__PURE__ */ React33.createElement(
|
|
3029
3000
|
"svg",
|
|
3030
3001
|
{
|
|
3031
3002
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3032
3003
|
viewBox: "0 0 24 24",
|
|
3033
3004
|
className: "w-12 h-12 fill-neutral-100"
|
|
3034
3005
|
},
|
|
3035
|
-
/* @__PURE__ */
|
|
3036
|
-
)), /* @__PURE__ */
|
|
3006
|
+
/* @__PURE__ */ React33.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" })
|
|
3007
|
+
)), /* @__PURE__ */ React33.createElement("h1", { className: " text-xl md:text-3xl text-black tracking-tight mb-4" }, title), /* @__PURE__ */ React33.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-12" }, description)));
|
|
3037
3008
|
};
|
|
3038
3009
|
|
|
3039
3010
|
// src/components/ManagedNewsletterSplitBlock.tsx
|
|
3040
|
-
import
|
|
3011
|
+
import React34 from "react";
|
|
3041
3012
|
import Image7 from "next/image";
|
|
3042
3013
|
var ManagedNewsletterSplitBlock = ({
|
|
3043
3014
|
tagline,
|
|
@@ -3051,7 +3022,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3051
3022
|
ctaHref = "/contact",
|
|
3052
3023
|
children
|
|
3053
3024
|
}) => {
|
|
3054
|
-
return /* @__PURE__ */
|
|
3025
|
+
return /* @__PURE__ */ React34.createElement("div", { className: "grow flex flex-col md:flex-row relative w-full pt-32 md:pt-0" }, /* @__PURE__ */ React34.createElement("div", { className: "hidden md:block md:w-1/2 relative min-h-screen overflow-hidden" }, /* @__PURE__ */ React34.createElement(
|
|
3055
3026
|
Image7,
|
|
3056
3027
|
{
|
|
3057
3028
|
src: imageSrc,
|
|
@@ -3061,7 +3032,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3061
3032
|
className: "object-cover object-top grayscale opacity-60",
|
|
3062
3033
|
quality: 100
|
|
3063
3034
|
}
|
|
3064
|
-
), /* @__PURE__ */
|
|
3035
|
+
), /* @__PURE__ */ React34.createElement(
|
|
3065
3036
|
"div",
|
|
3066
3037
|
{
|
|
3067
3038
|
className: "absolute inset-0 z-10 pointer-events-none",
|
|
@@ -3069,7 +3040,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3069
3040
|
background: "linear-gradient(to right, rgba(255,255,255,0) 30%, #ffffff 100%)"
|
|
3070
3041
|
}
|
|
3071
3042
|
}
|
|
3072
|
-
), /* @__PURE__ */
|
|
3043
|
+
), /* @__PURE__ */ React34.createElement(
|
|
3073
3044
|
"div",
|
|
3074
3045
|
{
|
|
3075
3046
|
className: "absolute inset-x-0 bottom-0 h-40 z-10 pointer-events-none",
|
|
@@ -3077,7 +3048,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3077
3048
|
background: "linear-gradient(to bottom, rgba(255,255,255,0) 0%, #ffffff 100%)"
|
|
3078
3049
|
}
|
|
3079
3050
|
}
|
|
3080
|
-
)), /* @__PURE__ */
|
|
3051
|
+
)), /* @__PURE__ */ React34.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__ */ React34.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__ */ React34.createElement(
|
|
3081
3052
|
"div",
|
|
3082
3053
|
{
|
|
3083
3054
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3086,7 +3057,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3086
3057
|
backgroundRepeat: "repeat"
|
|
3087
3058
|
}
|
|
3088
3059
|
}
|
|
3089
|
-
), /* @__PURE__ */
|
|
3060
|
+
), /* @__PURE__ */ React34.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React34.createElement("div", { className: "mb-10 border-b border-neutral-100 pb-8 text-center md:text-left" }, tagline && /* @__PURE__ */ React34.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 " }, tagline), /* @__PURE__ */ React34.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight mb-4" }, title), subtitle && /* @__PURE__ */ React34.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, subtitle)), /* @__PURE__ */ React34.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-10 text-center md:text-left" }, description), children && /* @__PURE__ */ React34.createElement("div", { className: "mb-8 text-left" }, children), /* @__PURE__ */ React34.createElement("div", { className: "text-center md:text-left mt-10 space-y-6" }, dividerText && /* @__PURE__ */ React34.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React34.createElement("div", { className: "grow h-px bg-neutral-100" }), /* @__PURE__ */ React34.createElement("span", { className: "shrink mx-4 text-[11px] tracking-[0.2em] text-neutral-400 " }, dividerText), /* @__PURE__ */ React34.createElement("div", { className: "grow h-px bg-neutral-100" })), ctaText && ctaHref && /* @__PURE__ */ React34.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ React34.createElement(
|
|
3090
3061
|
ThreeDButton,
|
|
3091
3062
|
{
|
|
3092
3063
|
href: ctaHref,
|
|
@@ -3097,10 +3068,10 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3097
3068
|
};
|
|
3098
3069
|
|
|
3099
3070
|
// src/components/PortfolioHero.tsx
|
|
3100
|
-
import
|
|
3101
|
-
import
|
|
3071
|
+
import React35, { useEffect as useEffect16, useRef as useRef9 } from "react";
|
|
3072
|
+
import Link8 from "next/link";
|
|
3102
3073
|
import Image8 from "next/image";
|
|
3103
|
-
import { HugeiconsIcon as
|
|
3074
|
+
import { HugeiconsIcon as HugeiconsIcon23 } from "@hugeicons/react";
|
|
3104
3075
|
import { ArrowRight01Icon as ArrowRight01Icon5 } from "@hugeicons/core-free-icons";
|
|
3105
3076
|
var useScrollAnimation = () => {
|
|
3106
3077
|
const elementRef = useRef9(null);
|
|
@@ -3140,13 +3111,13 @@ var PortfolioHero = ({
|
|
|
3140
3111
|
secondaryCtaHref
|
|
3141
3112
|
}) => {
|
|
3142
3113
|
const heroContentRef = useScrollAnimation();
|
|
3143
|
-
return /* @__PURE__ */
|
|
3114
|
+
return /* @__PURE__ */ React35.createElement("section", { className: "pt-8 pb-16 px-6 md:px-12 flex flex-col relative overflow-hidden z-10 w-full" }, /* @__PURE__ */ React35.createElement(
|
|
3144
3115
|
"div",
|
|
3145
3116
|
{
|
|
3146
3117
|
ref: heroContentRef,
|
|
3147
3118
|
className: "w-full opacity-0 translate-y-5 transition-all duration-1000 ease-out relative z-10"
|
|
3148
3119
|
},
|
|
3149
|
-
/* @__PURE__ */
|
|
3120
|
+
/* @__PURE__ */ React35.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-5 sm:gap-8 mb-10" }, /* @__PURE__ */ React35.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__ */ React35.createElement(
|
|
3150
3121
|
Image8,
|
|
3151
3122
|
{
|
|
3152
3123
|
src: imageSrc,
|
|
@@ -3157,7 +3128,7 @@ var PortfolioHero = ({
|
|
|
3157
3128
|
sizes: "(max-width: 640px) 80px, 128px",
|
|
3158
3129
|
quality: 100
|
|
3159
3130
|
}
|
|
3160
|
-
)), /* @__PURE__ */
|
|
3131
|
+
)), /* @__PURE__ */ React35.createElement("div", { className: "flex flex-col text-left" }, /* @__PURE__ */ React35.createElement("h1", { className: " text-3xl sm:text-5xl lg:text-6xl tracking-tight text-black leading-none mb-3" }, name), socialLabel && /* @__PURE__ */ React35.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, socialLabel), socialLinkText && socialLinkHref && /* @__PURE__ */ React35.createElement(
|
|
3161
3132
|
"a",
|
|
3162
3133
|
{
|
|
3163
3134
|
href: socialLinkHref,
|
|
@@ -3167,30 +3138,30 @@ var PortfolioHero = ({
|
|
|
3167
3138
|
},
|
|
3168
3139
|
socialLinkText
|
|
3169
3140
|
))),
|
|
3170
|
-
/* @__PURE__ */
|
|
3171
|
-
/* @__PURE__ */
|
|
3141
|
+
/* @__PURE__ */ React35.createElement("p", { className: "text-[13px] leading-[1.8] max-w-4xl mb-12 text-neutral-600" }, bio),
|
|
3142
|
+
/* @__PURE__ */ React35.createElement("div", { className: "flex flex-col sm:flex-row gap-4 w-full sm:w-auto" }, primaryCtaText && primaryCtaHref && /* @__PURE__ */ React35.createElement("div", { className: "w-full sm:w-auto *:w-full" }, /* @__PURE__ */ React35.createElement(
|
|
3172
3143
|
ThreeDButton,
|
|
3173
3144
|
{
|
|
3174
3145
|
href: primaryCtaHref,
|
|
3175
3146
|
className: "py-3 tracking-widest text-[11px]"
|
|
3176
3147
|
},
|
|
3177
3148
|
primaryCtaText
|
|
3178
|
-
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
3179
|
-
|
|
3149
|
+
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ React35.createElement(
|
|
3150
|
+
Link8,
|
|
3180
3151
|
{
|
|
3181
3152
|
href: secondaryCtaHref,
|
|
3182
3153
|
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"
|
|
3183
3154
|
},
|
|
3184
3155
|
secondaryCtaText,
|
|
3185
|
-
/* @__PURE__ */
|
|
3156
|
+
/* @__PURE__ */ React35.createElement(HugeiconsIcon23, { icon: ArrowRight01Icon5, size: 16 })
|
|
3186
3157
|
))
|
|
3187
3158
|
));
|
|
3188
3159
|
};
|
|
3189
3160
|
|
|
3190
3161
|
// src/components/GifFeatureCard.tsx
|
|
3191
|
-
import
|
|
3162
|
+
import React36, { useState as useState22 } from "react";
|
|
3192
3163
|
import Image9 from "next/image";
|
|
3193
|
-
import { HugeiconsIcon as
|
|
3164
|
+
import { HugeiconsIcon as HugeiconsIcon24 } from "@hugeicons/react";
|
|
3194
3165
|
import { Loading03Icon as Loading03Icon11 } from "@hugeicons/core-free-icons";
|
|
3195
3166
|
var GifFeatureCard = ({
|
|
3196
3167
|
gifSrc,
|
|
@@ -3200,19 +3171,19 @@ var GifFeatureCard = ({
|
|
|
3200
3171
|
className = "aspect-video"
|
|
3201
3172
|
}) => {
|
|
3202
3173
|
const [isLoading, setIsLoading] = useState22(true);
|
|
3203
|
-
return /* @__PURE__ */
|
|
3204
|
-
|
|
3174
|
+
return /* @__PURE__ */ React36.createElement("div", { className: `relative w-full bg-black overflow-hidden shadow-2xl ${className}` }, isLoading && /* @__PURE__ */ React36.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-black" }, /* @__PURE__ */ React36.createElement(
|
|
3175
|
+
HugeiconsIcon24,
|
|
3205
3176
|
{
|
|
3206
3177
|
icon: Loading03Icon11,
|
|
3207
3178
|
size: 32,
|
|
3208
3179
|
className: "animate-spin text-white"
|
|
3209
3180
|
}
|
|
3210
|
-
)), /* @__PURE__ */
|
|
3181
|
+
)), /* @__PURE__ */ React36.createElement(
|
|
3211
3182
|
"div",
|
|
3212
3183
|
{
|
|
3213
3184
|
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"}`
|
|
3214
3185
|
},
|
|
3215
|
-
/* @__PURE__ */
|
|
3186
|
+
/* @__PURE__ */ React36.createElement(
|
|
3216
3187
|
Image9,
|
|
3217
3188
|
{
|
|
3218
3189
|
src: gifSrc,
|
|
@@ -3223,16 +3194,16 @@ var GifFeatureCard = ({
|
|
|
3223
3194
|
className: "object-cover object-center pointer-events-none"
|
|
3224
3195
|
}
|
|
3225
3196
|
)
|
|
3226
|
-
), /* @__PURE__ */
|
|
3197
|
+
), /* @__PURE__ */ React36.createElement(
|
|
3227
3198
|
"div",
|
|
3228
3199
|
{
|
|
3229
3200
|
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"
|
|
3230
3201
|
}
|
|
3231
|
-
), /* @__PURE__ */
|
|
3202
|
+
), /* @__PURE__ */ React36.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__ */ React36.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__ */ React36.createElement("p", { className: "text-[13px] sm:text-[15px] leading-relaxed text-neutral-300 max-w-2xl drop-shadow-sm" }, subtitle)));
|
|
3232
3203
|
};
|
|
3233
3204
|
|
|
3234
3205
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
3235
|
-
import
|
|
3206
|
+
import React37, { useState as useState23, useEffect as useEffect17, useRef as useRef10 } from "react";
|
|
3236
3207
|
import Image10 from "next/image";
|
|
3237
3208
|
var MedicalFeatureStatsBlock = ({
|
|
3238
3209
|
bottomHeadline,
|
|
@@ -3261,7 +3232,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3261
3232
|
}
|
|
3262
3233
|
return () => observer.disconnect();
|
|
3263
3234
|
}, []);
|
|
3264
|
-
return /* @__PURE__ */
|
|
3235
|
+
return /* @__PURE__ */ React37.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ React37.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ React37.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ React37.createElement(
|
|
3265
3236
|
"h2",
|
|
3266
3237
|
{
|
|
3267
3238
|
ref: titleRef,
|
|
@@ -3269,7 +3240,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3269
3240
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
3270
3241
|
},
|
|
3271
3242
|
bottomHeadline
|
|
3272
|
-
), /* @__PURE__ */
|
|
3243
|
+
), /* @__PURE__ */ React37.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ React37.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ React37.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ React37.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__ */ React37.createElement(
|
|
3273
3244
|
Image10,
|
|
3274
3245
|
{
|
|
3275
3246
|
src,
|
|
@@ -3278,17 +3249,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3278
3249
|
sizes: "48px",
|
|
3279
3250
|
className: "object-cover"
|
|
3280
3251
|
}
|
|
3281
|
-
)))), /* @__PURE__ */
|
|
3252
|
+
)))), /* @__PURE__ */ React37.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ React37.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ React37.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ React37.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ React37.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ React37.createElement("h1", { className: "text-6xl gradient-text md:text-[80px] tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
|
|
3282
3253
|
};
|
|
3283
3254
|
|
|
3284
3255
|
// src/components/ConsultantShowcase.tsx
|
|
3285
|
-
import
|
|
3256
|
+
import React38, { useState as useState24 } from "react";
|
|
3286
3257
|
import Image11 from "next/image";
|
|
3287
|
-
import { HugeiconsIcon as
|
|
3258
|
+
import { HugeiconsIcon as HugeiconsIcon25 } from "@hugeicons/react";
|
|
3288
3259
|
import { Loading03Icon as Loading03Icon12 } from "@hugeicons/core-free-icons";
|
|
3289
3260
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
3290
3261
|
const [isLoading, setIsLoading] = useState24(true);
|
|
3291
|
-
return /* @__PURE__ */
|
|
3262
|
+
return /* @__PURE__ */ React38.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ React38.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__ */ React38.createElement(HugeiconsIcon25, { icon: Loading03Icon12, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ React38.createElement(
|
|
3292
3263
|
Image11,
|
|
3293
3264
|
{
|
|
3294
3265
|
src,
|
|
@@ -3334,7 +3305,7 @@ var ConsultantShowcase = ({
|
|
|
3334
3305
|
}
|
|
3335
3306
|
};
|
|
3336
3307
|
if (!profiles || profiles.length === 0) return null;
|
|
3337
|
-
return /* @__PURE__ */
|
|
3308
|
+
return /* @__PURE__ */ React38.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ React38.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React38.createElement(
|
|
3338
3309
|
"div",
|
|
3339
3310
|
{
|
|
3340
3311
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -3344,13 +3315,13 @@ var ConsultantShowcase = ({
|
|
|
3344
3315
|
},
|
|
3345
3316
|
profiles.map((profile, idx) => {
|
|
3346
3317
|
const isActive = idx === currentIndex;
|
|
3347
|
-
return /* @__PURE__ */
|
|
3318
|
+
return /* @__PURE__ */ React38.createElement(
|
|
3348
3319
|
"div",
|
|
3349
3320
|
{
|
|
3350
3321
|
key: profile.id,
|
|
3351
3322
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
3352
3323
|
},
|
|
3353
|
-
/* @__PURE__ */
|
|
3324
|
+
/* @__PURE__ */ React38.createElement(
|
|
3354
3325
|
ImageWithLoader,
|
|
3355
3326
|
{
|
|
3356
3327
|
src: profile.imageSrc,
|
|
@@ -3358,14 +3329,14 @@ var ConsultantShowcase = ({
|
|
|
3358
3329
|
priority: idx === 0
|
|
3359
3330
|
}
|
|
3360
3331
|
),
|
|
3361
|
-
/* @__PURE__ */
|
|
3362
|
-
/* @__PURE__ */
|
|
3363
|
-
/* @__PURE__ */
|
|
3332
|
+
/* @__PURE__ */ React38.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
3333
|
+
/* @__PURE__ */ React38.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" }),
|
|
3334
|
+
/* @__PURE__ */ React38.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__ */ React38.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ React38.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ React38.createElement("p", { className: "text-[15px] text-white/80 tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ React38.createElement("p", { className: "text-[15px] text-white/80 tracking-wide mt-1" }, profile.description)))
|
|
3364
3335
|
);
|
|
3365
3336
|
}),
|
|
3366
|
-
/* @__PURE__ */
|
|
3367
|
-
/* @__PURE__ */
|
|
3368
|
-
/* @__PURE__ */
|
|
3337
|
+
/* @__PURE__ */ React38.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide, "aria-label": "Previous image" }),
|
|
3338
|
+
/* @__PURE__ */ React38.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide, "aria-label": "Next image" }),
|
|
3339
|
+
/* @__PURE__ */ React38.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__ */ React38.createElement(
|
|
3369
3340
|
"button",
|
|
3370
3341
|
{
|
|
3371
3342
|
key: idx,
|
|
@@ -3378,13 +3349,13 @@ var ConsultantShowcase = ({
|
|
|
3378
3349
|
};
|
|
3379
3350
|
|
|
3380
3351
|
// src/components/ContentGridBlock.tsx
|
|
3381
|
-
import
|
|
3352
|
+
import React39, { useState as useState25 } from "react";
|
|
3382
3353
|
import Image12 from "next/image";
|
|
3383
|
-
import { HugeiconsIcon as
|
|
3354
|
+
import { HugeiconsIcon as HugeiconsIcon26 } from "@hugeicons/react";
|
|
3384
3355
|
import { Loading03Icon as Loading03Icon13 } from "@hugeicons/core-free-icons";
|
|
3385
3356
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
3386
3357
|
const [isLoading, setIsLoading] = useState25(true);
|
|
3387
|
-
return /* @__PURE__ */
|
|
3358
|
+
return /* @__PURE__ */ React39.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ React39.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-100/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ React39.createElement(HugeiconsIcon26, { icon: Loading03Icon13, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ React39.createElement(
|
|
3388
3359
|
Image12,
|
|
3389
3360
|
{
|
|
3390
3361
|
src,
|
|
@@ -3406,30 +3377,30 @@ var ContentGridBlock = ({
|
|
|
3406
3377
|
middleBottomCard,
|
|
3407
3378
|
rightCards
|
|
3408
3379
|
}) => {
|
|
3409
|
-
return /* @__PURE__ */
|
|
3380
|
+
return /* @__PURE__ */ React39.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React39.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ React39.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ React39.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ React39.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ React39.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React39.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ React39.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ React39.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ React39.createElement("div", null, /* @__PURE__ */ React39.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ React39.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ React39.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React39.createElement(Image12, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React39.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ React39.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ React39.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ React39.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React39.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ React39.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ React39.createElement(Image12, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ React39.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ React39.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ React39.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-100 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ React39.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ React39.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React39.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ React39.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ React39.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React39.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ React39.createElement("div", null, /* @__PURE__ */ React39.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ React39.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ React39.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React39.createElement(Image12, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ React39.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React39.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ React39.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ React39.createElement("div", { key: idx, className: "relative w-full h-80 text-white rounded-3xl overflow-hidden group" }, /* @__PURE__ */ React39.createElement(
|
|
3410
3381
|
ImageWithLoader2,
|
|
3411
3382
|
{
|
|
3412
3383
|
src: card.bgImageSrc,
|
|
3413
3384
|
alt: card.title,
|
|
3414
3385
|
className: "absolute inset-0 w-full h-full"
|
|
3415
3386
|
}
|
|
3416
|
-
), /* @__PURE__ */
|
|
3387
|
+
), /* @__PURE__ */ React39.createElement("div", { className: "absolute inset-0 z-20 pointer-events-none" }), /* @__PURE__ */ React39.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ React39.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ React39.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ React39.createElement("div", { className: "pt-3" }, /* @__PURE__ */ React39.createElement("h4", { className: "text-[15px] text-white tracking-wide" }, card.title), /* @__PURE__ */ React39.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
|
|
3417
3388
|
};
|
|
3418
3389
|
|
|
3419
3390
|
// src/components/ManagedProjectsBlock.tsx
|
|
3420
|
-
import
|
|
3421
|
-
import
|
|
3391
|
+
import React40 from "react";
|
|
3392
|
+
import Link9 from "next/link";
|
|
3422
3393
|
var GridSection = ({
|
|
3423
3394
|
children,
|
|
3424
3395
|
isLast = false,
|
|
3425
3396
|
className = "py-8 md:py-10"
|
|
3426
|
-
}) => /* @__PURE__ */
|
|
3397
|
+
}) => /* @__PURE__ */ React40.createElement("div", { className: `relative px-5 md:px-12 ${className} ${!isLast ? "" : ""}` }, children);
|
|
3427
3398
|
var ManagedProjectsBlock = ({
|
|
3428
3399
|
tagline,
|
|
3429
3400
|
title,
|
|
3430
3401
|
projects
|
|
3431
3402
|
}) => {
|
|
3432
|
-
return /* @__PURE__ */
|
|
3403
|
+
return /* @__PURE__ */ React40.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React40.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-5xl mx-auto overflow-hidden" }, /* @__PURE__ */ React40.createElement(
|
|
3433
3404
|
"div",
|
|
3434
3405
|
{
|
|
3435
3406
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3438,10 +3409,10 @@ var ManagedProjectsBlock = ({
|
|
|
3438
3409
|
backgroundRepeat: "repeat"
|
|
3439
3410
|
}
|
|
3440
3411
|
}
|
|
3441
|
-
), /* @__PURE__ */
|
|
3412
|
+
), /* @__PURE__ */ React40.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React40.createElement(GridSection, null, tagline && /* @__PURE__ */ React40.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React40.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), projects.map((project, index) => {
|
|
3442
3413
|
const isLast = index === projects.length - 1;
|
|
3443
|
-
const projectContent = /* @__PURE__ */
|
|
3444
|
-
return /* @__PURE__ */
|
|
3414
|
+
const projectContent = /* @__PURE__ */ React40.createElement("div", { className: "group block w-full" }, /* @__PURE__ */ React40.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__ */ React40.createElement("div", { className: "flex items-center gap-3 md:gap-4" }, /* @__PURE__ */ React40.createElement("h2", { className: " text-[16px] text-black transition-all flex items-center gap-2" }, project.title, /* @__PURE__ */ React40.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__ */ React40.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__ */ React40.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 shrink-0 " }, project.date)), /* @__PURE__ */ React40.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 max-w-4xl text-left transition-colors group-hover:text-black" }, project.description));
|
|
3415
|
+
return /* @__PURE__ */ React40.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__ */ React40.createElement("a", { href: project.link, target: "_blank", rel: "noopener noreferrer", className: "block outline-none" }, projectContent) : /* @__PURE__ */ React40.createElement(Link9, { href: project.link, className: "block outline-none" }, projectContent));
|
|
3445
3416
|
}))));
|
|
3446
3417
|
};
|
|
3447
3418
|
export {
|
|
@@ -3478,6 +3449,7 @@ export {
|
|
|
3478
3449
|
UniversalOrganizationPage,
|
|
3479
3450
|
UniversalProfilePage,
|
|
3480
3451
|
UniversalProfileSettings,
|
|
3452
|
+
UniversalSidebar,
|
|
3481
3453
|
UniversalTransactionPage,
|
|
3482
3454
|
UniversalWalletPage,
|
|
3483
3455
|
WaitlistDialog
|