@retinalabsllc/zairusjs 9.0.50 → 9.0.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +31 -7
- package/dist/index.d.ts +31 -7
- package/dist/index.js +513 -550
- package/dist/index.mjs +463 -503
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -189,7 +189,6 @@ var ThreeDActionButton = ({
|
|
|
189
189
|
type,
|
|
190
190
|
disabled: isInteractionDisabled,
|
|
191
191
|
onClick,
|
|
192
|
-
"aria-label": ariaLabel,
|
|
193
192
|
className: `
|
|
194
193
|
relative inline-flex items-center justify-center py-2.5 px-8 rounded-full
|
|
195
194
|
bg-neutral-950 text-white text-xs tracking-widest
|
|
@@ -585,214 +584,56 @@ var Footer = ({
|
|
|
585
584
|
href: social.href,
|
|
586
585
|
target: "_blank",
|
|
587
586
|
rel: "noopener noreferrer",
|
|
588
|
-
className: "text-neutral-400 hover:text-black transition-colors"
|
|
589
|
-
"aria-label": social.name
|
|
587
|
+
className: "text-neutral-400 hover:text-black transition-colors"
|
|
590
588
|
},
|
|
591
589
|
/* @__PURE__ */ React6.createElement(HugeiconsIcon2, { icon: social.icon, size: 20 })
|
|
592
590
|
))))))));
|
|
593
591
|
};
|
|
594
592
|
|
|
595
593
|
// 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
594
|
import React7 from "react";
|
|
595
|
+
import Link4 from "next/link";
|
|
596
|
+
import { usePathname as usePathname2 } from "next/navigation";
|
|
609
597
|
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
|
-
}) => {
|
|
598
|
+
var MobileNav = ({ items }) => {
|
|
658
599
|
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
600
|
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(
|
|
601
|
+
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) => {
|
|
602
|
+
const isActive = item.href === "/" || item.href === "/app" ? pathname === "/" || pathname === "/app" : pathname === item.href || pathname?.startsWith(`${item.href}/`);
|
|
603
|
+
return /* @__PURE__ */ React7.createElement(
|
|
763
604
|
Link4,
|
|
764
605
|
{
|
|
765
606
|
key: item.label,
|
|
766
607
|
href: item.href,
|
|
767
608
|
className: "flex flex-col items-center justify-center gap-1 min-w-14 transition-transform active:scale-95 outline-none"
|
|
768
609
|
},
|
|
769
|
-
/* @__PURE__ */
|
|
770
|
-
|
|
610
|
+
/* @__PURE__ */ React7.createElement("div", { className: `transition-colors duration-300 ${isActive ? "text-black" : "text-neutral-400 hover:text-neutral-600"}` }, /* @__PURE__ */ React7.createElement(
|
|
611
|
+
HugeiconsIcon3,
|
|
612
|
+
{
|
|
613
|
+
icon: item.icon,
|
|
614
|
+
size: 20
|
|
615
|
+
}
|
|
616
|
+
)),
|
|
617
|
+
/* @__PURE__ */ React7.createElement(
|
|
618
|
+
"span",
|
|
619
|
+
{
|
|
620
|
+
className: `text-[9px] tracking-wide transition-colors duration-300 ${isActive ? "text-black" : "text-neutral-400"}`
|
|
621
|
+
},
|
|
622
|
+
item.label
|
|
623
|
+
)
|
|
771
624
|
);
|
|
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
|
-
));
|
|
625
|
+
})));
|
|
785
626
|
};
|
|
786
627
|
|
|
787
628
|
// src/components/UniversalOrganizationPage.tsx
|
|
788
|
-
import
|
|
629
|
+
import React11, { useState as useState6, useEffect as useEffect4 } from "react";
|
|
789
630
|
import toast2 from "react-hot-toast";
|
|
790
631
|
|
|
791
632
|
// src/components/ManagedToaster.tsx
|
|
792
|
-
import
|
|
633
|
+
import React8 from "react";
|
|
793
634
|
import { Toaster } from "react-hot-toast";
|
|
794
635
|
var ManagedToaster = () => {
|
|
795
|
-
return /* @__PURE__ */
|
|
636
|
+
return /* @__PURE__ */ React8.createElement(
|
|
796
637
|
Toaster,
|
|
797
638
|
{
|
|
798
639
|
position: "top-right",
|
|
@@ -824,7 +665,7 @@ var ManagedToaster = () => {
|
|
|
824
665
|
};
|
|
825
666
|
|
|
826
667
|
// src/components/ReusableInputs.tsx
|
|
827
|
-
import
|
|
668
|
+
import React9 from "react";
|
|
828
669
|
var TextInput = ({
|
|
829
670
|
label,
|
|
830
671
|
value,
|
|
@@ -835,7 +676,7 @@ var TextInput = ({
|
|
|
835
676
|
readOnly,
|
|
836
677
|
type = "text",
|
|
837
678
|
onClick
|
|
838
|
-
}) => /* @__PURE__ */
|
|
679
|
+
}) => /* @__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
680
|
"input",
|
|
840
681
|
{
|
|
841
682
|
type,
|
|
@@ -856,7 +697,7 @@ var NumberInput = ({
|
|
|
856
697
|
placeholder,
|
|
857
698
|
maxLength,
|
|
858
699
|
disabled
|
|
859
|
-
}) => /* @__PURE__ */
|
|
700
|
+
}) => /* @__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
701
|
"input",
|
|
861
702
|
{
|
|
862
703
|
type: "text",
|
|
@@ -874,8 +715,8 @@ var NumberInput = ({
|
|
|
874
715
|
));
|
|
875
716
|
|
|
876
717
|
// src/components/Banner.tsx
|
|
877
|
-
import
|
|
878
|
-
import { HugeiconsIcon as
|
|
718
|
+
import React10, { useState as useState5 } from "react";
|
|
719
|
+
import { HugeiconsIcon as HugeiconsIcon4 } from "@hugeicons/react";
|
|
879
720
|
import {
|
|
880
721
|
Alert02Icon,
|
|
881
722
|
CheckmarkBadge01Icon,
|
|
@@ -891,7 +732,7 @@ var Banner = ({
|
|
|
891
732
|
onDismiss,
|
|
892
733
|
action
|
|
893
734
|
}) => {
|
|
894
|
-
const [isVisible, setIsVisible] =
|
|
735
|
+
const [isVisible, setIsVisible] = useState5(true);
|
|
895
736
|
if (!isVisible) return null;
|
|
896
737
|
const handleDismiss = () => {
|
|
897
738
|
setIsVisible(false);
|
|
@@ -925,23 +766,22 @@ var Banner = ({
|
|
|
925
766
|
};
|
|
926
767
|
const currentConfig = config[type];
|
|
927
768
|
const IconToUse = icon || currentConfig.defaultIcon;
|
|
928
|
-
return /* @__PURE__ */
|
|
769
|
+
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
770
|
"button",
|
|
930
771
|
{
|
|
931
772
|
onClick: handleDismiss,
|
|
932
|
-
className: `absolute top-3 right-3 p-1.5 rounded-full transition-colors outline-none shrink-0 ${currentConfig.closeHover}
|
|
933
|
-
"aria-label": "Dismiss banner"
|
|
773
|
+
className: `absolute top-3 right-3 p-1.5 rounded-full transition-colors outline-none shrink-0 ${currentConfig.closeHover}`
|
|
934
774
|
},
|
|
935
|
-
/* @__PURE__ */
|
|
775
|
+
/* @__PURE__ */ React10.createElement(HugeiconsIcon4, { icon: Cancel01Icon, size: 16 })
|
|
936
776
|
));
|
|
937
777
|
};
|
|
938
778
|
|
|
939
779
|
// src/components/UniversalOrganizationPage.tsx
|
|
940
|
-
import { HugeiconsIcon as
|
|
780
|
+
import { HugeiconsIcon as HugeiconsIcon5 } from "@hugeicons/react";
|
|
941
781
|
import {
|
|
942
782
|
CircleLock02Icon
|
|
943
783
|
} from "@hugeicons/core-free-icons";
|
|
944
|
-
var InputSpinner2 = () => /* @__PURE__ */
|
|
784
|
+
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
785
|
var UniversalOrganizationPage = ({
|
|
946
786
|
initialOrgName,
|
|
947
787
|
initialSlug,
|
|
@@ -954,12 +794,12 @@ var UniversalOrganizationPage = ({
|
|
|
954
794
|
onCheckSlugAvailability
|
|
955
795
|
}) => {
|
|
956
796
|
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] =
|
|
797
|
+
const [web3Name, setWeb3Name] = useState6(initialOrgName);
|
|
798
|
+
const [username, setUsername] = useState6(resolvedInitialUsername);
|
|
799
|
+
const [slug, setSlug] = useState6(initialSlug);
|
|
800
|
+
const [isCheckingSlug, setIsCheckingSlug] = useState6(false);
|
|
801
|
+
const [slugAvailable, setSlugAvailable] = useState6(null);
|
|
802
|
+
const [isSubmitting, setIsSubmitting] = useState6(false);
|
|
963
803
|
useEffect4(() => {
|
|
964
804
|
setWeb3Name(initialOrgName || "");
|
|
965
805
|
setSlug(initialSlug || "");
|
|
@@ -1029,7 +869,7 @@ var UniversalOrganizationPage = ({
|
|
|
1029
869
|
};
|
|
1030
870
|
const hasChanges = web3Name !== initialOrgName || slug !== initialSlug || username !== resolvedInitialUsername;
|
|
1031
871
|
const isSaveDisabled = isSubmitting || isReadOnly || isCheckingSlug || !hasChanges || web3Name.length < 3 || slug.length < 3 || username.length < 3 || slug !== initialSlug && slugAvailable === false;
|
|
1032
|
-
return /* @__PURE__ */
|
|
872
|
+
return /* @__PURE__ */ React11.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col animate-in 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
873
|
TextInput,
|
|
1034
874
|
{
|
|
1035
875
|
label: "Display Name",
|
|
@@ -1039,7 +879,7 @@ var UniversalOrganizationPage = ({
|
|
|
1039
879
|
placeholder: "Sovereign User",
|
|
1040
880
|
maxLength: 50
|
|
1041
881
|
}
|
|
1042
|
-
), /* @__PURE__ */
|
|
882
|
+
), /* @__PURE__ */ React11.createElement(
|
|
1043
883
|
TextInput,
|
|
1044
884
|
{
|
|
1045
885
|
label: "Digital Identity",
|
|
@@ -1049,7 +889,7 @@ var UniversalOrganizationPage = ({
|
|
|
1049
889
|
placeholder: "sovereignuser",
|
|
1050
890
|
maxLength: 30
|
|
1051
891
|
}
|
|
1052
|
-
), /* @__PURE__ */
|
|
892
|
+
), /* @__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
893
|
"input",
|
|
1054
894
|
{
|
|
1055
895
|
type: "text",
|
|
@@ -1061,7 +901,7 @@ var UniversalOrganizationPage = ({
|
|
|
1061
901
|
className: "w-full px-2 py-3 text-sm bg-transparent text-black outline-none disabled:opacity-50 disabled:cursor-not-allowed",
|
|
1062
902
|
placeholder: "sovereign-user-handle"
|
|
1063
903
|
}
|
|
1064
|
-
), /* @__PURE__ */
|
|
904
|
+
), /* @__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
905
|
ThreeDActionButton,
|
|
1066
906
|
{
|
|
1067
907
|
type: "submit",
|
|
@@ -1070,7 +910,7 @@ var UniversalOrganizationPage = ({
|
|
|
1070
910
|
className: "min-w-32"
|
|
1071
911
|
},
|
|
1072
912
|
"Save Changes"
|
|
1073
|
-
), hasChanges && !isSubmitting && !isReadOnly && /* @__PURE__ */
|
|
913
|
+
), hasChanges && !isSubmitting && !isReadOnly && /* @__PURE__ */ React11.createElement(
|
|
1074
914
|
"button",
|
|
1075
915
|
{
|
|
1076
916
|
type: "button",
|
|
@@ -1086,13 +926,13 @@ var UniversalOrganizationPage = ({
|
|
|
1086
926
|
};
|
|
1087
927
|
|
|
1088
928
|
// src/components/UniversalProfileSettings.tsx
|
|
1089
|
-
import
|
|
929
|
+
import React12, { useState as useState7, useEffect as useEffect5 } from "react";
|
|
1090
930
|
import toast3 from "react-hot-toast";
|
|
1091
|
-
import { HugeiconsIcon as
|
|
931
|
+
import { HugeiconsIcon as HugeiconsIcon6 } from "@hugeicons/react";
|
|
1092
932
|
import {
|
|
1093
933
|
CircleLock02Icon as CircleLock02Icon2,
|
|
1094
934
|
CancelCircleIcon,
|
|
1095
|
-
Loading03Icon as
|
|
935
|
+
Loading03Icon as Loading03Icon2,
|
|
1096
936
|
LockKeyIcon
|
|
1097
937
|
} from "@hugeicons/core-free-icons";
|
|
1098
938
|
var UniversalProfileSettings = ({
|
|
@@ -1108,14 +948,14 @@ var UniversalProfileSettings = ({
|
|
|
1108
948
|
onSavePin,
|
|
1109
949
|
onSaveProfile
|
|
1110
950
|
}) => {
|
|
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] =
|
|
951
|
+
const [firstName, setFirstName] = useState7(initialFirstName);
|
|
952
|
+
const [lastName, setLastName] = useState7(initialLastName);
|
|
953
|
+
const [isSubmitting, setIsSubmitting] = useState7(false);
|
|
954
|
+
const [isPinModalOpen, setIsPinModalOpen] = useState7(false);
|
|
955
|
+
const [oldPin, setOldPin] = useState7("");
|
|
956
|
+
const [newPin, setNewPin] = useState7("");
|
|
957
|
+
const [confirmPin, setConfirmPin] = useState7("");
|
|
958
|
+
const [isPinSubmitting, setIsPinSubmitting] = useState7(false);
|
|
1119
959
|
useEffect5(() => {
|
|
1120
960
|
setFirstName(initialFirstName || "");
|
|
1121
961
|
setLastName(initialLastName || "");
|
|
@@ -1182,7 +1022,7 @@ var UniversalProfileSettings = ({
|
|
|
1182
1022
|
};
|
|
1183
1023
|
const hasChanges = firstName !== initialFirstName || lastName !== initialLastName;
|
|
1184
1024
|
const isSaveDisabled = isSubmitting || isReadOnly || !hasChanges || firstName.trim().length === 0 || lastName.trim().length === 0;
|
|
1185
|
-
return /* @__PURE__ */
|
|
1025
|
+
return /* @__PURE__ */ React12.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col 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
1026
|
TextInput,
|
|
1187
1027
|
{
|
|
1188
1028
|
label: "First Name",
|
|
@@ -1191,7 +1031,7 @@ var UniversalProfileSettings = ({
|
|
|
1191
1031
|
disabled: isReadOnly || isSubmitting,
|
|
1192
1032
|
placeholder: "System"
|
|
1193
1033
|
}
|
|
1194
|
-
)), /* @__PURE__ */
|
|
1034
|
+
)), /* @__PURE__ */ React12.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React12.createElement(
|
|
1195
1035
|
TextInput,
|
|
1196
1036
|
{
|
|
1197
1037
|
label: "Last Name",
|
|
@@ -1200,7 +1040,7 @@ var UniversalProfileSettings = ({
|
|
|
1200
1040
|
disabled: isReadOnly || isSubmitting,
|
|
1201
1041
|
placeholder: "Admin"
|
|
1202
1042
|
}
|
|
1203
|
-
))), /* @__PURE__ */
|
|
1043
|
+
))), /* @__PURE__ */ React12.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ React12.createElement(
|
|
1204
1044
|
TextInput,
|
|
1205
1045
|
{
|
|
1206
1046
|
label: "Email ID",
|
|
@@ -1209,16 +1049,15 @@ var UniversalProfileSettings = ({
|
|
|
1209
1049
|
},
|
|
1210
1050
|
disabled: true
|
|
1211
1051
|
}
|
|
1212
|
-
), /* @__PURE__ */
|
|
1052
|
+
), /* @__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
1053
|
"button",
|
|
1214
1054
|
{
|
|
1215
1055
|
type: "button",
|
|
1216
1056
|
onClick: () => setIsPinModalOpen(true),
|
|
1217
|
-
"aria-label": "PIN Settings",
|
|
1218
1057
|
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
1058
|
},
|
|
1220
|
-
/* @__PURE__ */
|
|
1221
|
-
))), /* @__PURE__ */
|
|
1059
|
+
/* @__PURE__ */ React12.createElement(HugeiconsIcon6, { icon: LockKeyIcon, size: 17, className: "text-black" })
|
|
1060
|
+
))), /* @__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
1061
|
"button",
|
|
1223
1062
|
{
|
|
1224
1063
|
type: "button",
|
|
@@ -1229,7 +1068,7 @@ var UniversalProfileSettings = ({
|
|
|
1229
1068
|
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
1069
|
},
|
|
1231
1070
|
"Cancel"
|
|
1232
|
-
), /* @__PURE__ */
|
|
1071
|
+
), /* @__PURE__ */ React12.createElement(
|
|
1233
1072
|
ThreeDActionButton,
|
|
1234
1073
|
{
|
|
1235
1074
|
type: "submit",
|
|
@@ -1238,7 +1077,7 @@ var UniversalProfileSettings = ({
|
|
|
1238
1077
|
className: "min-w-32 w-full sm:w-auto"
|
|
1239
1078
|
},
|
|
1240
1079
|
"Save Changes"
|
|
1241
|
-
))))), isPinModalOpen && /* @__PURE__ */
|
|
1080
|
+
))))), 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
1081
|
TextInput,
|
|
1243
1082
|
{
|
|
1244
1083
|
type: "password",
|
|
@@ -1249,7 +1088,7 @@ var UniversalProfileSettings = ({
|
|
|
1249
1088
|
onChange: (val) => handlePinInput(val, setOldPin),
|
|
1250
1089
|
placeholder: "\u2022\u2022\u2022\u2022"
|
|
1251
1090
|
}
|
|
1252
|
-
), /* @__PURE__ */
|
|
1091
|
+
), /* @__PURE__ */ React12.createElement(
|
|
1253
1092
|
TextInput,
|
|
1254
1093
|
{
|
|
1255
1094
|
type: "password",
|
|
@@ -1260,7 +1099,7 @@ var UniversalProfileSettings = ({
|
|
|
1260
1099
|
onChange: (val) => handlePinInput(val, setNewPin),
|
|
1261
1100
|
placeholder: "\u2022\u2022\u2022\u2022"
|
|
1262
1101
|
}
|
|
1263
|
-
), /* @__PURE__ */
|
|
1102
|
+
), /* @__PURE__ */ React12.createElement(
|
|
1264
1103
|
TextInput,
|
|
1265
1104
|
{
|
|
1266
1105
|
type: "password",
|
|
@@ -1271,7 +1110,7 @@ var UniversalProfileSettings = ({
|
|
|
1271
1110
|
onChange: (val) => handlePinInput(val, setConfirmPin),
|
|
1272
1111
|
placeholder: "\u2022\u2022\u2022\u2022"
|
|
1273
1112
|
}
|
|
1274
|
-
), /* @__PURE__ */
|
|
1113
|
+
), /* @__PURE__ */ React12.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React12.createElement(
|
|
1275
1114
|
ThreeDActionButton,
|
|
1276
1115
|
{
|
|
1277
1116
|
type: "submit",
|
|
@@ -1284,14 +1123,14 @@ var UniversalProfileSettings = ({
|
|
|
1284
1123
|
};
|
|
1285
1124
|
|
|
1286
1125
|
// src/components/UniversalErrorView.tsx
|
|
1287
|
-
import
|
|
1288
|
-
import { HugeiconsIcon as
|
|
1126
|
+
import React14 from "react";
|
|
1127
|
+
import { HugeiconsIcon as HugeiconsIcon8 } from "@hugeicons/react";
|
|
1289
1128
|
import { ConfusedIcon } from "@hugeicons/core-free-icons";
|
|
1290
1129
|
|
|
1291
1130
|
// src/components/PageSpinner.tsx
|
|
1292
|
-
import
|
|
1293
|
-
import { HugeiconsIcon as
|
|
1294
|
-
import { Loading03Icon as
|
|
1131
|
+
import React13 from "react";
|
|
1132
|
+
import { HugeiconsIcon as HugeiconsIcon7 } from "@hugeicons/react";
|
|
1133
|
+
import { Loading03Icon as Loading03Icon3 } from "@hugeicons/core-free-icons";
|
|
1295
1134
|
var PageSpinner = ({
|
|
1296
1135
|
className = "",
|
|
1297
1136
|
iconClassName = "text-black",
|
|
@@ -1299,10 +1138,10 @@ var PageSpinner = ({
|
|
|
1299
1138
|
}) => {
|
|
1300
1139
|
return (
|
|
1301
1140
|
// z-[100] ensures it sits above absolute headers and modals
|
|
1302
|
-
/* @__PURE__ */
|
|
1303
|
-
|
|
1141
|
+
/* @__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(
|
|
1142
|
+
HugeiconsIcon7,
|
|
1304
1143
|
{
|
|
1305
|
-
icon:
|
|
1144
|
+
icon: Loading03Icon3,
|
|
1306
1145
|
size,
|
|
1307
1146
|
className: `animate-spin mb-4 ${iconClassName}`
|
|
1308
1147
|
}
|
|
@@ -1322,7 +1161,7 @@ var UniversalErrorView = ({
|
|
|
1322
1161
|
returnLabel = "Return to Workspace"
|
|
1323
1162
|
}) => {
|
|
1324
1163
|
if (isBooting || isLoading && !activeData) {
|
|
1325
|
-
return /* @__PURE__ */
|
|
1164
|
+
return /* @__PURE__ */ React14.createElement("div", { className: "flex items-center justify-center h-screen w-full bg-white" }, /* @__PURE__ */ React14.createElement(PageSpinner, null));
|
|
1326
1165
|
}
|
|
1327
1166
|
if (!isLoading && (!activeData || activeError)) {
|
|
1328
1167
|
const errorString = typeof activeError === "string" ? activeError : JSON.stringify(activeError || "");
|
|
@@ -1341,7 +1180,7 @@ var UniversalErrorView = ({
|
|
|
1341
1180
|
title = "Access Restricted";
|
|
1342
1181
|
description = apiMessage || `You have insufficient permissions to view this ${envName}. Please contact your administrator.`;
|
|
1343
1182
|
}
|
|
1344
|
-
return /* @__PURE__ */
|
|
1183
|
+
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
1184
|
"button",
|
|
1346
1185
|
{
|
|
1347
1186
|
onClick: () => window.location.href = returnUrl,
|
|
@@ -1350,14 +1189,14 @@ var UniversalErrorView = ({
|
|
|
1350
1189
|
returnLabel
|
|
1351
1190
|
) : (
|
|
1352
1191
|
// Soft errors (Network timeouts) allow them to retry or optionally retreat
|
|
1353
|
-
/* @__PURE__ */
|
|
1192
|
+
/* @__PURE__ */ React14.createElement(React14.Fragment, null, envName.toLowerCase().includes("application") && /* @__PURE__ */ React14.createElement(
|
|
1354
1193
|
"button",
|
|
1355
1194
|
{
|
|
1356
1195
|
onClick: () => window.location.href = returnUrl,
|
|
1357
1196
|
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
1197
|
},
|
|
1359
1198
|
"Back Home"
|
|
1360
|
-
), /* @__PURE__ */
|
|
1199
|
+
), /* @__PURE__ */ React14.createElement(
|
|
1361
1200
|
"button",
|
|
1362
1201
|
{
|
|
1363
1202
|
onClick: onRetry,
|
|
@@ -1372,21 +1211,22 @@ var UniversalErrorView = ({
|
|
|
1372
1211
|
};
|
|
1373
1212
|
|
|
1374
1213
|
// src/components/UniversalTransactionPage.tsx
|
|
1375
|
-
import
|
|
1376
|
-
import { HugeiconsIcon as
|
|
1214
|
+
import React15, { useState as useState8, useEffect as useEffect6, useRef as useRef3 } from "react";
|
|
1215
|
+
import { HugeiconsIcon as HugeiconsIcon9 } from "@hugeicons/react";
|
|
1377
1216
|
import toast4 from "react-hot-toast";
|
|
1378
1217
|
import {
|
|
1379
|
-
ArrowLeft01Icon
|
|
1218
|
+
ArrowLeft01Icon,
|
|
1380
1219
|
ArrowRight01Icon,
|
|
1381
|
-
Loading03Icon as
|
|
1220
|
+
Loading03Icon as Loading03Icon4,
|
|
1382
1221
|
ArrowDownRight01Icon,
|
|
1383
1222
|
ArrowUpRight01Icon,
|
|
1384
1223
|
Search01Icon,
|
|
1385
1224
|
SearchList02Icon,
|
|
1386
1225
|
ListSettingIcon,
|
|
1387
|
-
CancelCircleIcon as CancelCircleIcon2
|
|
1226
|
+
CancelCircleIcon as CancelCircleIcon2,
|
|
1227
|
+
Copy01Icon
|
|
1388
1228
|
} from "@hugeicons/core-free-icons";
|
|
1389
|
-
var PageSpinner2 = () => /* @__PURE__ */
|
|
1229
|
+
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
1230
|
var formatDate = (dateInput) => {
|
|
1391
1231
|
const d = new Date(dateInput);
|
|
1392
1232
|
const day = d.getDate();
|
|
@@ -1421,12 +1261,12 @@ var UniversalTransactionPage = ({
|
|
|
1421
1261
|
onReportTransaction,
|
|
1422
1262
|
onGenerateReceipt
|
|
1423
1263
|
}) => {
|
|
1424
|
-
const [selectedTransaction, setSelectedTransaction] =
|
|
1425
|
-
const [isGeneratingReceipt, setIsGeneratingReceipt] =
|
|
1426
|
-
const [localSearchQuery, setLocalSearchQuery] =
|
|
1427
|
-
const [isTyping, setIsTyping] =
|
|
1428
|
-
const [isDirectionModalOpen, setIsDirectionModalOpen] =
|
|
1429
|
-
const [isTypeModalOpen, setIsTypeModalOpen] =
|
|
1264
|
+
const [selectedTransaction, setSelectedTransaction] = useState8(null);
|
|
1265
|
+
const [isGeneratingReceipt, setIsGeneratingReceipt] = useState8(false);
|
|
1266
|
+
const [localSearchQuery, setLocalSearchQuery] = useState8(searchQuery);
|
|
1267
|
+
const [isTyping, setIsTyping] = useState8(false);
|
|
1268
|
+
const [isDirectionModalOpen, setIsDirectionModalOpen] = useState8(false);
|
|
1269
|
+
const [isTypeModalOpen, setIsTypeModalOpen] = useState8(false);
|
|
1430
1270
|
const directionDropdownRef = useRef3(null);
|
|
1431
1271
|
const typeDropdownRef = useRef3(null);
|
|
1432
1272
|
useEffect6(() => {
|
|
@@ -1471,63 +1311,75 @@ var UniversalTransactionPage = ({
|
|
|
1471
1311
|
setIsGeneratingReceipt(false);
|
|
1472
1312
|
}
|
|
1473
1313
|
};
|
|
1314
|
+
const handleCopyReference = async (reference) => {
|
|
1315
|
+
try {
|
|
1316
|
+
await navigator.clipboard.writeText(reference);
|
|
1317
|
+
toast4.success("Copied");
|
|
1318
|
+
} catch {
|
|
1319
|
+
}
|
|
1320
|
+
};
|
|
1474
1321
|
const isListLoading = isLoading || isTyping;
|
|
1475
|
-
return /* @__PURE__ */
|
|
1322
|
+
return /* @__PURE__ */ React15.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col animate-in 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
1323
|
"input",
|
|
1477
1324
|
{
|
|
1478
1325
|
type: "text",
|
|
1479
1326
|
placeholder: "Search reference or amount...",
|
|
1480
1327
|
value: localSearchQuery,
|
|
1481
1328
|
onChange: (e) => setLocalSearchQuery(e.target.value),
|
|
1482
|
-
className: "w-full pl-10 pr-4 py-2 bg-white
|
|
1329
|
+
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
1330
|
}
|
|
1484
|
-
)), /* @__PURE__ */
|
|
1331
|
+
)), /* @__PURE__ */ React15.createElement("div", { className: "flex items-center gap-3 w-auto pb-0 shrink-0" }, /* @__PURE__ */ React15.createElement(
|
|
1485
1332
|
"button",
|
|
1486
1333
|
{
|
|
1487
1334
|
onClick: () => setIsDirectionModalOpen(true),
|
|
1488
|
-
|
|
1489
|
-
className: "flex items-center justify-center bg-white w-10 h-10 rounded-full text-neutral-500 hover:text-black transition-colors outline-none"
|
|
1335
|
+
className: "flex items-center justify-center bg-white w-9 h-9 rounded-full text-neutral-500 hover:text-black transition-colors outline-none"
|
|
1490
1336
|
},
|
|
1491
|
-
/* @__PURE__ */
|
|
1492
|
-
), /* @__PURE__ */
|
|
1337
|
+
/* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: SearchList02Icon, size: 16 })
|
|
1338
|
+
), /* @__PURE__ */ React15.createElement(
|
|
1493
1339
|
"button",
|
|
1494
1340
|
{
|
|
1495
1341
|
onClick: () => setIsTypeModalOpen(true),
|
|
1496
|
-
|
|
1497
|
-
className: "flex items-center justify-center bg-white w-10 h-10 rounded-full text-neutral-500 hover:text-black transition-colors outline-none"
|
|
1342
|
+
className: "flex items-center justify-center bg-white w-9 h-9 rounded-full text-neutral-500 hover:text-black transition-colors outline-none"
|
|
1498
1343
|
},
|
|
1499
|
-
/* @__PURE__ */
|
|
1500
|
-
))), /* @__PURE__ */
|
|
1344
|
+
/* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: ListSettingIcon, size: 16 })
|
|
1345
|
+
))), /* @__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
1346
|
"div",
|
|
1502
1347
|
{
|
|
1503
1348
|
key: tx.id,
|
|
1504
1349
|
onClick: () => setSelectedTransaction(tx),
|
|
1505
1350
|
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
1351
|
},
|
|
1507
|
-
/* @__PURE__ */
|
|
1508
|
-
/* @__PURE__ */
|
|
1509
|
-
))), !hidePagination && /* @__PURE__ */
|
|
1352
|
+
/* @__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))),
|
|
1353
|
+
/* @__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()))
|
|
1354
|
+
))), !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
1355
|
"button",
|
|
1511
1356
|
{
|
|
1512
1357
|
onClick: () => onPageChange(currentPage - 1),
|
|
1513
1358
|
disabled: currentPage <= 1 || isListLoading,
|
|
1514
1359
|
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
1360
|
},
|
|
1516
|
-
/* @__PURE__ */
|
|
1517
|
-
), /* @__PURE__ */
|
|
1361
|
+
/* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: ArrowLeft01Icon, size: 14 })
|
|
1362
|
+
), /* @__PURE__ */ React15.createElement(
|
|
1518
1363
|
"button",
|
|
1519
1364
|
{
|
|
1520
1365
|
onClick: () => onPageChange(currentPage + 1),
|
|
1521
1366
|
disabled: currentPage >= totalPages || isListLoading || totalPages === 0,
|
|
1522
1367
|
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
1368
|
},
|
|
1524
|
-
/* @__PURE__ */
|
|
1525
|
-
)))))), selectedTransaction && /* @__PURE__ */
|
|
1369
|
+
/* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: ArrowRight01Icon, size: 14 })
|
|
1370
|
+
)))))), 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(
|
|
1371
|
+
"button",
|
|
1372
|
+
{
|
|
1373
|
+
onClick: () => handleCopyReference(selectedTransaction.reference),
|
|
1374
|
+
className: "text-neutral-400 hover:text-black transition-colors outline-none"
|
|
1375
|
+
},
|
|
1376
|
+
/* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: Copy01Icon, size: 14 })
|
|
1377
|
+
))), /* @__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
1378
|
if (key === "fromAddress" || key === "toAddress") return null;
|
|
1527
1379
|
if (value === null || value === void 0 || typeof value === "object") return null;
|
|
1528
1380
|
const formattedKey = key.replace(/([A-Z])/g, " $1").replace(/^./, (str) => str.toUpperCase());
|
|
1529
|
-
return /* @__PURE__ */
|
|
1530
|
-
})), /* @__PURE__ */
|
|
1381
|
+
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)));
|
|
1382
|
+
})), /* @__PURE__ */ React15.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React15.createElement(
|
|
1531
1383
|
ThreeDActionButton,
|
|
1532
1384
|
{
|
|
1533
1385
|
onClick: handleGenerateReceipt,
|
|
@@ -1535,14 +1387,14 @@ var UniversalTransactionPage = ({
|
|
|
1535
1387
|
className: "w-full py-3 text-[14px]"
|
|
1536
1388
|
},
|
|
1537
1389
|
"Generate Receipt"
|
|
1538
|
-
), /* @__PURE__ */
|
|
1390
|
+
), /* @__PURE__ */ React15.createElement(
|
|
1539
1391
|
"button",
|
|
1540
1392
|
{
|
|
1541
1393
|
onClick: () => onReportTransaction && onReportTransaction(selectedTransaction),
|
|
1542
1394
|
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
1395
|
},
|
|
1544
1396
|
"Report Transaction"
|
|
1545
|
-
), selectedTransaction.type === "WALLET_TRANSACTION" && /* @__PURE__ */
|
|
1397
|
+
), selectedTransaction.type === "WALLET_TRANSACTION" && /* @__PURE__ */ React15.createElement(
|
|
1546
1398
|
"a",
|
|
1547
1399
|
{
|
|
1548
1400
|
href: `https://basescan.org/tx/${selectedTransaction.reference}`,
|
|
@@ -1551,7 +1403,7 @@ var UniversalTransactionPage = ({
|
|
|
1551
1403
|
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
1404
|
},
|
|
1553
1405
|
"View in block explorer"
|
|
1554
|
-
))))), isDirectionModalOpen && /* @__PURE__ */
|
|
1406
|
+
))))), 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
1407
|
"button",
|
|
1556
1408
|
{
|
|
1557
1409
|
key: option,
|
|
@@ -1561,19 +1413,19 @@ var UniversalTransactionPage = ({
|
|
|
1561
1413
|
},
|
|
1562
1414
|
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
1415
|
},
|
|
1564
|
-
/* @__PURE__ */
|
|
1565
|
-
))), /* @__PURE__ */
|
|
1416
|
+
/* @__PURE__ */ React15.createElement("span", { className: "truncate pr-2" }, option.charAt(0).toUpperCase() + option.slice(1).toLowerCase())
|
|
1417
|
+
))), /* @__PURE__ */ React15.createElement("div", { className: "w-full flex mt-2 " }, /* @__PURE__ */ React15.createElement(
|
|
1566
1418
|
"button",
|
|
1567
1419
|
{
|
|
1568
1420
|
onClick: () => setIsDirectionModalOpen(false),
|
|
1569
1421
|
className: "w-full py-4 text-[13px] text-neutral-500 hover:text-black transition-colors outline-none "
|
|
1570
1422
|
},
|
|
1571
1423
|
"Cancel"
|
|
1572
|
-
)))), isTypeModalOpen && /* @__PURE__ */
|
|
1424
|
+
)))), 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
1425
|
{ label: "All Transactions", value: "ALL" },
|
|
1574
1426
|
{ label: "Wallet Transactions", value: "WALLET_TRANSACTION" },
|
|
1575
1427
|
{ label: "Card Transactions", value: "CARD_TRANSACTION" }
|
|
1576
|
-
].map((option) => /* @__PURE__ */
|
|
1428
|
+
].map((option) => /* @__PURE__ */ React15.createElement(
|
|
1577
1429
|
"button",
|
|
1578
1430
|
{
|
|
1579
1431
|
key: option.value,
|
|
@@ -1583,8 +1435,8 @@ var UniversalTransactionPage = ({
|
|
|
1583
1435
|
},
|
|
1584
1436
|
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
1437
|
},
|
|
1586
|
-
/* @__PURE__ */
|
|
1587
|
-
))), /* @__PURE__ */
|
|
1438
|
+
/* @__PURE__ */ React15.createElement("span", { className: "truncate pr-2" }, option.label.charAt(0).toUpperCase() + option.label.slice(1).toLowerCase())
|
|
1439
|
+
))), /* @__PURE__ */ React15.createElement("div", { className: "w-full flex mt-2 " }, /* @__PURE__ */ React15.createElement(
|
|
1588
1440
|
"button",
|
|
1589
1441
|
{
|
|
1590
1442
|
onClick: () => setIsTypeModalOpen(false),
|
|
@@ -1595,8 +1447,8 @@ var UniversalTransactionPage = ({
|
|
|
1595
1447
|
};
|
|
1596
1448
|
|
|
1597
1449
|
// src/components/UniversalHomeView.tsx
|
|
1598
|
-
import
|
|
1599
|
-
import { HugeiconsIcon as
|
|
1450
|
+
import React16, { useState as useState9, useEffect as useEffect7 } from "react";
|
|
1451
|
+
import { HugeiconsIcon as HugeiconsIcon10 } from "@hugeicons/react";
|
|
1600
1452
|
import { ViewOffSlashIcon, ViewIcon } from "@hugeicons/core-free-icons";
|
|
1601
1453
|
var UniversalHomeView = ({
|
|
1602
1454
|
balanceLabel = "Your Balance",
|
|
@@ -1606,8 +1458,8 @@ var UniversalHomeView = ({
|
|
|
1606
1458
|
secondaryAction,
|
|
1607
1459
|
transactionsProps
|
|
1608
1460
|
}) => {
|
|
1609
|
-
const [displayAmount, setDisplayAmount] =
|
|
1610
|
-
const [isBalanceHidden, setIsBalanceHidden] =
|
|
1461
|
+
const [displayAmount, setDisplayAmount] = useState9("0.00");
|
|
1462
|
+
const [isBalanceHidden, setIsBalanceHidden] = useState9(false);
|
|
1611
1463
|
useEffect7(() => {
|
|
1612
1464
|
const target = parseFloat(balanceAmount.replace(/,/g, ""));
|
|
1613
1465
|
if (isNaN(target)) {
|
|
@@ -1637,29 +1489,29 @@ var UniversalHomeView = ({
|
|
|
1637
1489
|
requestAnimationFrame(step);
|
|
1638
1490
|
}, [balanceAmount]);
|
|
1639
1491
|
const [intPart, decPart] = displayAmount.includes(".") ? displayAmount.split(".") : [displayAmount, "00"];
|
|
1640
|
-
return /* @__PURE__ */
|
|
1492
|
+
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
1493
|
"button",
|
|
1642
1494
|
{
|
|
1643
1495
|
onClick: () => setIsBalanceHidden(!isBalanceHidden),
|
|
1644
1496
|
className: "text-neutral-400 hover:text-black transition-colors outline-none"
|
|
1645
1497
|
},
|
|
1646
|
-
/* @__PURE__ */
|
|
1647
|
-
)), /* @__PURE__ */
|
|
1498
|
+
/* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: isBalanceHidden ? ViewIcon : ViewOffSlashIcon, size: 14 })
|
|
1499
|
+
)), /* @__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
1500
|
ThreeDActionButton,
|
|
1649
1501
|
{
|
|
1650
1502
|
onClick: primaryAction.onClick,
|
|
1651
1503
|
className: "px-6 py-2.5 sm:px-8 sm:py-2.5"
|
|
1652
1504
|
},
|
|
1653
|
-
/* @__PURE__ */
|
|
1654
|
-
), secondaryAction && /* @__PURE__ */
|
|
1505
|
+
/* @__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 }))
|
|
1506
|
+
), secondaryAction && /* @__PURE__ */ React16.createElement(
|
|
1655
1507
|
"button",
|
|
1656
1508
|
{
|
|
1657
1509
|
onClick: secondaryAction.onClick,
|
|
1658
|
-
className: "flex items-center gap-1.5 px-6 py-2.
|
|
1510
|
+
className: "flex items-center gap-1.5 px-6 py-2.25 sm:px-8 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 transition-colors outline-none"
|
|
1659
1511
|
},
|
|
1660
|
-
/* @__PURE__ */
|
|
1661
|
-
secondaryAction.icon && /* @__PURE__ */
|
|
1662
|
-
)))), /* @__PURE__ */
|
|
1512
|
+
/* @__PURE__ */ React16.createElement("span", { className: "text-[13px] tracking-wide " }, secondaryAction.label),
|
|
1513
|
+
secondaryAction.icon && /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: secondaryAction.icon, size: 16 })
|
|
1514
|
+
)))), /* @__PURE__ */ React16.createElement("div", { className: "w-full mt-2" }, /* @__PURE__ */ React16.createElement(
|
|
1663
1515
|
UniversalTransactionPage,
|
|
1664
1516
|
{
|
|
1665
1517
|
...transactionsProps,
|
|
@@ -1671,18 +1523,18 @@ var UniversalHomeView = ({
|
|
|
1671
1523
|
};
|
|
1672
1524
|
|
|
1673
1525
|
// src/components/UniversalWalletPage.tsx
|
|
1674
|
-
import
|
|
1526
|
+
import React17, { useState as useState10 } from "react";
|
|
1675
1527
|
import toast5 from "react-hot-toast";
|
|
1676
|
-
import { HugeiconsIcon as
|
|
1528
|
+
import { HugeiconsIcon as HugeiconsIcon11 } from "@hugeicons/react";
|
|
1677
1529
|
import {
|
|
1678
1530
|
Search01Icon as Search01Icon2,
|
|
1679
1531
|
CancelCircleIcon as CancelCircleIcon3,
|
|
1680
|
-
Loading03Icon as
|
|
1532
|
+
Loading03Icon as Loading03Icon5
|
|
1681
1533
|
} from "@hugeicons/core-free-icons";
|
|
1682
|
-
var PageSpinner3 = () => /* @__PURE__ */
|
|
1534
|
+
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
1535
|
var WalletLogo = ({ src, alt, sizeClass = "w-10 h-10" }) => {
|
|
1684
|
-
const [isLoaded, setIsLoaded] =
|
|
1685
|
-
return /* @__PURE__ */
|
|
1536
|
+
const [isLoaded, setIsLoaded] = useState10(false);
|
|
1537
|
+
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
1538
|
"img",
|
|
1687
1539
|
{
|
|
1688
1540
|
src,
|
|
@@ -1704,8 +1556,8 @@ var UniversalWalletPage = ({
|
|
|
1704
1556
|
onDownloadPayId,
|
|
1705
1557
|
onCopyAddress
|
|
1706
1558
|
}) => {
|
|
1707
|
-
const [selectedWallet, setSelectedWallet] =
|
|
1708
|
-
const [localSearchQuery, setLocalSearchQuery] =
|
|
1559
|
+
const [selectedWallet, setSelectedWallet] = useState10(null);
|
|
1560
|
+
const [localSearchQuery, setLocalSearchQuery] = useState10("");
|
|
1709
1561
|
const filteredWallets = wallets.filter((wallet) => {
|
|
1710
1562
|
const q = localSearchQuery.toLowerCase();
|
|
1711
1563
|
return wallet.name.toLowerCase().includes(q) || wallet.currency.toLowerCase().includes(q) || wallet.network.toLowerCase().includes(q);
|
|
@@ -1718,7 +1570,7 @@ var UniversalWalletPage = ({
|
|
|
1718
1570
|
}
|
|
1719
1571
|
toast5.success("Address copied to clipboard");
|
|
1720
1572
|
};
|
|
1721
|
-
return /* @__PURE__ */
|
|
1573
|
+
return /* @__PURE__ */ React17.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col animate-in 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
1574
|
"input",
|
|
1723
1575
|
{
|
|
1724
1576
|
type: "text",
|
|
@@ -1727,16 +1579,16 @@ var UniversalWalletPage = ({
|
|
|
1727
1579
|
onChange: (e) => setLocalSearchQuery(e.target.value),
|
|
1728
1580
|
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
1581
|
}
|
|
1730
|
-
))), /* @__PURE__ */
|
|
1582
|
+
))), /* @__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
1583
|
"div",
|
|
1732
1584
|
{
|
|
1733
1585
|
key: wallet.id,
|
|
1734
1586
|
onClick: () => setSelectedWallet(wallet),
|
|
1735
1587
|
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
1588
|
},
|
|
1737
|
-
/* @__PURE__ */
|
|
1738
|
-
/* @__PURE__ */
|
|
1739
|
-
)))))), selectedWallet && /* @__PURE__ */
|
|
1589
|
+
/* @__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))),
|
|
1590
|
+
/* @__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))
|
|
1591
|
+
)))))), 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
1592
|
ThreeDActionButton,
|
|
1741
1593
|
{
|
|
1742
1594
|
onClick: () => onDownloadPayId && onDownloadPayId(selectedWallet),
|
|
@@ -1744,7 +1596,7 @@ var UniversalWalletPage = ({
|
|
|
1744
1596
|
className: "w-full py-3 text-[13px]"
|
|
1745
1597
|
},
|
|
1746
1598
|
"Generate Statement"
|
|
1747
|
-
), /* @__PURE__ */
|
|
1599
|
+
), /* @__PURE__ */ React17.createElement(
|
|
1748
1600
|
"button",
|
|
1749
1601
|
{
|
|
1750
1602
|
onClick: () => handleCopy(selectedWallet),
|
|
@@ -1755,7 +1607,7 @@ var UniversalWalletPage = ({
|
|
|
1755
1607
|
};
|
|
1756
1608
|
|
|
1757
1609
|
// src/components/UniversalCardPage.tsx
|
|
1758
|
-
import React21, { useState as
|
|
1610
|
+
import React21, { useState as useState12, useEffect as useEffect9 } from "react";
|
|
1759
1611
|
import { HugeiconsIcon as HugeiconsIcon15 } from "@hugeicons/react";
|
|
1760
1612
|
import {
|
|
1761
1613
|
SnowIcon,
|
|
@@ -1766,8 +1618,49 @@ import {
|
|
|
1766
1618
|
Loading03Icon as Loading03Icon8
|
|
1767
1619
|
} from "@hugeicons/core-free-icons";
|
|
1768
1620
|
|
|
1621
|
+
// src/components/ConfirmationDialog.tsx
|
|
1622
|
+
import React18 from "react";
|
|
1623
|
+
import { HugeiconsIcon as HugeiconsIcon12 } from "@hugeicons/react";
|
|
1624
|
+
import { Loading03Icon as Loading03Icon6 } from "@hugeicons/core-free-icons";
|
|
1625
|
+
var ConfirmationDialog = ({
|
|
1626
|
+
isOpen,
|
|
1627
|
+
title,
|
|
1628
|
+
message,
|
|
1629
|
+
confirmText = "Confirm",
|
|
1630
|
+
cancelText = "Cancel",
|
|
1631
|
+
isProcessing = false,
|
|
1632
|
+
isDestructive = true,
|
|
1633
|
+
onClose,
|
|
1634
|
+
onConfirm
|
|
1635
|
+
}) => {
|
|
1636
|
+
if (!isOpen) return null;
|
|
1637
|
+
return /* @__PURE__ */ React18.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React18.createElement(
|
|
1638
|
+
"div",
|
|
1639
|
+
{
|
|
1640
|
+
className: "absolute inset-0 bg-black/40 ",
|
|
1641
|
+
onClick: () => !isProcessing && onClose()
|
|
1642
|
+
}
|
|
1643
|
+
), /* @__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(
|
|
1644
|
+
"button",
|
|
1645
|
+
{
|
|
1646
|
+
onClick: onClose,
|
|
1647
|
+
disabled: isProcessing,
|
|
1648
|
+
className: "flex-1 py-4 text-[14px] text-neutral-500 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none "
|
|
1649
|
+
},
|
|
1650
|
+
cancelText
|
|
1651
|
+
), /* @__PURE__ */ React18.createElement(
|
|
1652
|
+
"button",
|
|
1653
|
+
{
|
|
1654
|
+
onClick: onConfirm,
|
|
1655
|
+
disabled: isProcessing,
|
|
1656
|
+
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"}`
|
|
1657
|
+
},
|
|
1658
|
+
isProcessing ? /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Loading03Icon6, className: "animate-spin", size: 18 }) : confirmText
|
|
1659
|
+
))));
|
|
1660
|
+
};
|
|
1661
|
+
|
|
1769
1662
|
// src/components/PinDialerBottomSheet.tsx
|
|
1770
|
-
import React19, { useState as
|
|
1663
|
+
import React19, { useState as useState11, useEffect as useEffect8 } from "react";
|
|
1771
1664
|
import { HugeiconsIcon as HugeiconsIcon13 } from "@hugeicons/react";
|
|
1772
1665
|
import { Loading03Icon as Loading03Icon7, CancelCircleIcon as CancelCircleIcon4, LessThanIcon } from "@hugeicons/core-free-icons";
|
|
1773
1666
|
var PinDialerBottomSheet = ({
|
|
@@ -1777,7 +1670,7 @@ var PinDialerBottomSheet = ({
|
|
|
1777
1670
|
onClose,
|
|
1778
1671
|
onComplete
|
|
1779
1672
|
}) => {
|
|
1780
|
-
const [pin, setPin] =
|
|
1673
|
+
const [pin, setPin] = useState11("");
|
|
1781
1674
|
useEffect8(() => {
|
|
1782
1675
|
setPin("");
|
|
1783
1676
|
}, [isOpen]);
|
|
@@ -1804,7 +1697,7 @@ var PinDialerBottomSheet = ({
|
|
|
1804
1697
|
if (!isVerifying) onClose();
|
|
1805
1698
|
}
|
|
1806
1699
|
}
|
|
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
|
|
1700
|
+
), /* @__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
1701
|
"button",
|
|
1809
1702
|
{
|
|
1810
1703
|
onClick: () => {
|
|
@@ -1864,7 +1757,7 @@ var CardActionDialog = ({
|
|
|
1864
1757
|
className: "absolute inset-0 bg-black/40 animate-in fade-in duration-200",
|
|
1865
1758
|
onClick: onClose
|
|
1866
1759
|
}
|
|
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
|
|
1760
|
+
), /* @__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
1761
|
"button",
|
|
1869
1762
|
{
|
|
1870
1763
|
onClick: onClose,
|
|
@@ -1875,7 +1768,7 @@ var CardActionDialog = ({
|
|
|
1875
1768
|
"button",
|
|
1876
1769
|
{
|
|
1877
1770
|
onClick: onProceed,
|
|
1878
|
-
className: "w-full py-3.5 bg-black text-white text-[13px]
|
|
1771
|
+
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
1772
|
},
|
|
1880
1773
|
actionType === "ACTIVATE" ? "Activate Now" : "Create Card"
|
|
1881
1774
|
))));
|
|
@@ -1890,23 +1783,23 @@ var UniversalCardPage = ({
|
|
|
1890
1783
|
onDelete,
|
|
1891
1784
|
onCardAction
|
|
1892
1785
|
}) => {
|
|
1893
|
-
const [activeTabIndex, setActiveTabIndex] =
|
|
1786
|
+
const [activeTabIndex, setActiveTabIndex] = useState12(0);
|
|
1894
1787
|
const activeCard = cards[activeTabIndex];
|
|
1895
1788
|
useEffect9(() => {
|
|
1896
1789
|
setIsFlipped(false);
|
|
1897
1790
|
setIsRevealed(false);
|
|
1898
1791
|
}, [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] =
|
|
1792
|
+
const [isFlipped, setIsFlipped] = useState12(false);
|
|
1793
|
+
const [isBgLoaded, setIsBgLoaded] = useState12(false);
|
|
1794
|
+
const [isRevealed, setIsRevealed] = useState12(false);
|
|
1795
|
+
const [isRevealing, setIsRevealing] = useState12(false);
|
|
1796
|
+
const [isFreezing, setIsFreezing] = useState12(false);
|
|
1797
|
+
const [isOverlayActionLoading, setIsOverlayActionLoading] = useState12(false);
|
|
1798
|
+
const [showDeleteDialog, setShowDeleteDialog] = useState12(false);
|
|
1799
|
+
const [isDeleting, setIsDeleting] = useState12(false);
|
|
1800
|
+
const [showPinDialer, setShowPinDialer] = useState12(false);
|
|
1801
|
+
const [showCardActionDialog, setShowCardActionDialog] = useState12(false);
|
|
1802
|
+
const [cardActionType, setCardActionType] = useState12("ACTIVATE");
|
|
1910
1803
|
useEffect9(() => {
|
|
1911
1804
|
setIsBgLoaded(false);
|
|
1912
1805
|
if (!activeCard?.cardBgSrc) return;
|
|
@@ -1979,17 +1872,17 @@ var UniversalCardPage = ({
|
|
|
1979
1872
|
const capitalized = type.charAt(0).toUpperCase() + type.slice(1).toLowerCase();
|
|
1980
1873
|
return `${capitalized} Card`;
|
|
1981
1874
|
};
|
|
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
|
|
1875
|
+
const displayCardNumber = isRevealed ? activeCard.cardNumber : `XXXX XXXX XXXX ${activeCard.cardNumber.slice(-4)}`;
|
|
1876
|
+
const displayExpiry = isRevealed ? activeCard.expiry : "XX/XX";
|
|
1877
|
+
const displayCvv = isRevealed ? activeCard.cvv : "XXX";
|
|
1878
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col animate-in fade-in duration-300" }, 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
1879
|
const isActive = activeTabIndex === idx;
|
|
1987
1880
|
return /* @__PURE__ */ React21.createElement(
|
|
1988
1881
|
"button",
|
|
1989
1882
|
{
|
|
1990
1883
|
key: tab.id,
|
|
1991
1884
|
onClick: () => setActiveTabIndex(idx),
|
|
1992
|
-
className: `px-4
|
|
1885
|
+
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
1886
|
},
|
|
1994
1887
|
formatTabLabel(tab.type)
|
|
1995
1888
|
);
|
|
@@ -2014,7 +1907,7 @@ var UniversalCardPage = ({
|
|
|
2014
1907
|
e.stopPropagation();
|
|
2015
1908
|
handleOverlayActionClick("ACTIVATE");
|
|
2016
1909
|
},
|
|
2017
|
-
className: "px-6 py-2.5 bg-white/35 text-
|
|
1910
|
+
className: "px-6 py-2.5 bg-white/35 text-white text-[12px] rounded-full transition-all outline-none active:scale-95"
|
|
2018
1911
|
},
|
|
2019
1912
|
"Activate Card"
|
|
2020
1913
|
), isDead && /* @__PURE__ */ React21.createElement(
|
|
@@ -2024,7 +1917,7 @@ var UniversalCardPage = ({
|
|
|
2024
1917
|
e.stopPropagation();
|
|
2025
1918
|
handleOverlayActionClick("CREATE");
|
|
2026
1919
|
},
|
|
2027
|
-
className: "px-6 py-2.5 bg-white/35 text-
|
|
1920
|
+
className: "px-6 py-2.5 bg-white/35 text-white text-[12px] rounded-full transition-all outline-none active:scale-95"
|
|
2028
1921
|
},
|
|
2029
1922
|
"Create Card"
|
|
2030
1923
|
), isFrozen && /* @__PURE__ */ React21.createElement(
|
|
@@ -2035,7 +1928,7 @@ var UniversalCardPage = ({
|
|
|
2035
1928
|
handleOverlayUnfreeze();
|
|
2036
1929
|
},
|
|
2037
1930
|
disabled: isOverlayActionLoading,
|
|
2038
|
-
className: "px-6 py-2.5 bg-white/35 text-
|
|
1931
|
+
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
1932
|
},
|
|
2040
1933
|
isOverlayActionLoading ? /* @__PURE__ */ React21.createElement(HugeiconsIcon15, { icon: Loading03Icon8, size: 16, className: "animate-spin" }) : "Unfreeze Card"
|
|
2041
1934
|
)),
|
|
@@ -2087,7 +1980,7 @@ var UniversalCardPage = ({
|
|
|
2087
1980
|
/* @__PURE__ */ React21.createElement("div", { className: "absolute top-6 left-0 right-0 h-10 bg-black/80 w-full" }),
|
|
2088
1981
|
/* @__PURE__ */ React21.createElement("div", { className: "relative z-10 w-full h-full p-5 flex flex-col justify-end" }, /* @__PURE__ */ React21.createElement("div", { className: "w-full text-center mb-6" }, /* @__PURE__ */ React21.createElement("span", { className: "text-white text-3xl italic tracking-wide opacity-90", style: { fontFamily: "'Whisper', cursive" } }, activeCard.cardHolderName)), /* @__PURE__ */ React21.createElement("div", { className: "flex justify-between w-full max-w-[80%]" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React21.createElement("span", { className: "text-[9px] text-white/60 tracking-widest uppercase" }, "Expiry"), /* @__PURE__ */ React21.createElement("span", { className: "text-[14px] text-white font-light" }, displayExpiry)), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React21.createElement("span", { className: "text-[9px] text-white/60 tracking-widest uppercase" }, "CVV"), /* @__PURE__ */ React21.createElement("span", { className: "text-[14px] text-white font-light" }, displayCvv))))
|
|
2089
1982
|
)
|
|
2090
|
-
)), /* @__PURE__ */ React21.createElement("p", { className: "text-xs text-neutral-400 mb-6 mt-1" }, isActivated ? "Tap to flip card" : "Action Required"), /* @__PURE__ */ React21.createElement("div", { className: "w-full flex flex-col gap-4" }, /* @__PURE__ */ React21.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React21.createElement(
|
|
1983
|
+
)), /* @__PURE__ */ React21.createElement("p", { className: "w-full text-center text-xs text-neutral-400 mb-6 mt-1" }, isActivated ? "Tap to flip card" : "Action Required"), /* @__PURE__ */ React21.createElement("div", { className: "w-full flex flex-col gap-4" }, /* @__PURE__ */ React21.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React21.createElement(
|
|
2091
1984
|
MenuRow,
|
|
2092
1985
|
{
|
|
2093
1986
|
icon: ViewOffSlashIcon2,
|
|
@@ -2194,7 +2087,7 @@ var MenuRow = ({
|
|
|
2194
2087
|
);
|
|
2195
2088
|
|
|
2196
2089
|
// src/components/UniversalProfilePage.tsx
|
|
2197
|
-
import React22, { useState as
|
|
2090
|
+
import React22, { useState as useState13 } from "react";
|
|
2198
2091
|
import { HugeiconsIcon as HugeiconsIcon16 } from "@hugeicons/react";
|
|
2199
2092
|
import {
|
|
2200
2093
|
UserIcon,
|
|
@@ -2203,7 +2096,7 @@ import {
|
|
|
2203
2096
|
MessageQuestionIcon,
|
|
2204
2097
|
UserIdVerificationIcon,
|
|
2205
2098
|
FileDownloadIcon,
|
|
2206
|
-
LogoutCircle02Icon
|
|
2099
|
+
LogoutCircle02Icon,
|
|
2207
2100
|
UserRemove01Icon,
|
|
2208
2101
|
ArrowRight01Icon as ArrowRight01Icon3,
|
|
2209
2102
|
Loading03Icon as Loading03Icon9,
|
|
@@ -2222,9 +2115,9 @@ var UniversalProfilePage = ({
|
|
|
2222
2115
|
onLogoutTap,
|
|
2223
2116
|
onDeleteTap
|
|
2224
2117
|
}) => {
|
|
2225
|
-
const [isAvatarLoaded, setIsAvatarLoaded] =
|
|
2226
|
-
const [showLogoutDialog, setShowLogoutDialog] =
|
|
2227
|
-
const [isLoggingOut, setIsLoggingOut] =
|
|
2118
|
+
const [isAvatarLoaded, setIsAvatarLoaded] = useState13(false);
|
|
2119
|
+
const [showLogoutDialog, setShowLogoutDialog] = useState13(false);
|
|
2120
|
+
const [isLoggingOut, setIsLoggingOut] = useState13(false);
|
|
2228
2121
|
const handleConfirmLogout = async () => {
|
|
2229
2122
|
setIsLoggingOut(true);
|
|
2230
2123
|
try {
|
|
@@ -2236,7 +2129,7 @@ var UniversalProfilePage = ({
|
|
|
2236
2129
|
setShowLogoutDialog(false);
|
|
2237
2130
|
}
|
|
2238
2131
|
};
|
|
2239
|
-
return /* @__PURE__ */ React22.createElement("div", { className: "w-full max-w-
|
|
2132
|
+
return /* @__PURE__ */ React22.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__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
2133
|
"img",
|
|
2241
2134
|
{
|
|
2242
2135
|
src: avatarSrc,
|
|
@@ -2296,7 +2189,7 @@ var UniversalProfilePage = ({
|
|
|
2296
2189
|
), /* @__PURE__ */ React22.createElement(
|
|
2297
2190
|
MenuRow2,
|
|
2298
2191
|
{
|
|
2299
|
-
icon:
|
|
2192
|
+
icon: LogoutCircle02Icon,
|
|
2300
2193
|
title: "LogOut",
|
|
2301
2194
|
subtitle: "End your session",
|
|
2302
2195
|
onClick: () => setShowLogoutDialog(true),
|
|
@@ -2336,13 +2229,85 @@ var MenuRow2 = ({ icon, title, subtitle, onClick, iconColor = "text-black", titl
|
|
|
2336
2229
|
/* @__PURE__ */ React22.createElement(HugeiconsIcon16, { icon: ArrowRight01Icon3, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
2337
2230
|
);
|
|
2338
2231
|
|
|
2339
|
-
// src/components/
|
|
2340
|
-
import
|
|
2232
|
+
// src/components/UniversalSidebar.tsx
|
|
2233
|
+
import React23, { useState as useState14 } from "react";
|
|
2341
2234
|
import Link5 from "next/link";
|
|
2235
|
+
import { HugeiconsIcon as HugeiconsIcon17 } from "@hugeicons/react";
|
|
2236
|
+
import {
|
|
2237
|
+
LogoutCircle02Icon as LogoutCircle02Icon2
|
|
2238
|
+
} from "@hugeicons/core-free-icons";
|
|
2239
|
+
var UniversalSidebar = ({
|
|
2240
|
+
navItems,
|
|
2241
|
+
currentPath,
|
|
2242
|
+
onNavClick,
|
|
2243
|
+
showLogoutAction = false,
|
|
2244
|
+
onLogout
|
|
2245
|
+
}) => {
|
|
2246
|
+
const [showLogoutDialog, setShowLogoutDialog] = useState14(false);
|
|
2247
|
+
const [isLoggingOut, setIsLoggingOut] = useState14(false);
|
|
2248
|
+
const hasActiveMatch = navItems.some(
|
|
2249
|
+
(item) => item.path === "/" || item.path === "/app" ? currentPath === "/" || currentPath === "/app" : currentPath === item.path || currentPath?.startsWith(`${item.path}/`)
|
|
2250
|
+
);
|
|
2251
|
+
const handleLogoutInitiation = async () => {
|
|
2252
|
+
if (isLoggingOut || !onLogout) return;
|
|
2253
|
+
setIsLoggingOut(true);
|
|
2254
|
+
try {
|
|
2255
|
+
await onLogout();
|
|
2256
|
+
} catch (error) {
|
|
2257
|
+
setIsLoggingOut(false);
|
|
2258
|
+
setShowLogoutDialog(false);
|
|
2259
|
+
}
|
|
2260
|
+
};
|
|
2261
|
+
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) => {
|
|
2262
|
+
const isExactOrSubMatch = item.path === "/" || item.path === "/app" ? currentPath === "/" || currentPath === "/app" : currentPath === item.path || currentPath?.startsWith(`${item.path}/`);
|
|
2263
|
+
const isCurrentRoute = isExactOrSubMatch || !hasActiveMatch && index === 0;
|
|
2264
|
+
return /* @__PURE__ */ React23.createElement(
|
|
2265
|
+
Link5,
|
|
2266
|
+
{
|
|
2267
|
+
key: item.name,
|
|
2268
|
+
href: item.path,
|
|
2269
|
+
onClick: (e) => onNavClick ? onNavClick(e, item.path) : void 0,
|
|
2270
|
+
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"}`,
|
|
2271
|
+
title: item.name
|
|
2272
|
+
},
|
|
2273
|
+
/* @__PURE__ */ React23.createElement(
|
|
2274
|
+
HugeiconsIcon17,
|
|
2275
|
+
{
|
|
2276
|
+
icon: item.icon,
|
|
2277
|
+
size: 20,
|
|
2278
|
+
className: `shrink-0 transition-colors ${isCurrentRoute ? "text-black" : "text-neutral-400 group-hover:text-black"}`
|
|
2279
|
+
}
|
|
2280
|
+
)
|
|
2281
|
+
);
|
|
2282
|
+
})), /* @__PURE__ */ React23.createElement("div", { className: "p-4 shrink-0 flex flex-col items-center gap-2 mb-4" }, showLogoutAction && /* @__PURE__ */ React23.createElement(
|
|
2283
|
+
"button",
|
|
2284
|
+
{
|
|
2285
|
+
onClick: () => setShowLogoutDialog(true),
|
|
2286
|
+
className: "w-12 h-12 rounded-full flex items-center justify-center text-neutral-500 hover:bg-white/50 transition-all outline-none"
|
|
2287
|
+
},
|
|
2288
|
+
/* @__PURE__ */ React23.createElement(HugeiconsIcon17, { icon: LogoutCircle02Icon2, size: 20 })
|
|
2289
|
+
))), showLogoutAction && /* @__PURE__ */ React23.createElement(
|
|
2290
|
+
ConfirmationDialog,
|
|
2291
|
+
{
|
|
2292
|
+
isOpen: showLogoutDialog,
|
|
2293
|
+
title: "Secure Logout",
|
|
2294
|
+
message: "Are you sure you want to log out? You will need to authenticate to return.",
|
|
2295
|
+
confirmText: "Log Out",
|
|
2296
|
+
isDestructive: true,
|
|
2297
|
+
isProcessing: isLoggingOut,
|
|
2298
|
+
onClose: () => setShowLogoutDialog(false),
|
|
2299
|
+
onConfirm: handleLogoutInitiation
|
|
2300
|
+
}
|
|
2301
|
+
));
|
|
2302
|
+
};
|
|
2303
|
+
|
|
2304
|
+
// src/components/HeroSection.tsx
|
|
2305
|
+
import React25, { useState as useState16, useEffect as useEffect10, useRef as useRef4 } from "react";
|
|
2306
|
+
import Link6 from "next/link";
|
|
2342
2307
|
import Image3 from "next/image";
|
|
2343
2308
|
|
|
2344
2309
|
// src/components/WaitlistDialog.tsx
|
|
2345
|
-
import
|
|
2310
|
+
import React24, { useState as useState15 } from "react";
|
|
2346
2311
|
import { toast as toast6 } from "react-hot-toast";
|
|
2347
2312
|
var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
2348
2313
|
const [email, setEmail] = useState15("");
|
|
@@ -2377,20 +2342,19 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2377
2342
|
setIsLoading(false);
|
|
2378
2343
|
}
|
|
2379
2344
|
};
|
|
2380
|
-
return /* @__PURE__ */
|
|
2345
|
+
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
2346
|
"div",
|
|
2382
2347
|
{
|
|
2383
2348
|
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
2349
|
},
|
|
2385
|
-
/* @__PURE__ */
|
|
2350
|
+
/* @__PURE__ */ React24.createElement(
|
|
2386
2351
|
"button",
|
|
2387
2352
|
{
|
|
2388
2353
|
onClick: onClose,
|
|
2389
2354
|
disabled: isLoading,
|
|
2390
|
-
className: "absolute top-4 right-4 p-2 text-neutral-700 hover:text-neutral-400 transition-colors disabled:opacity-50 outline-none"
|
|
2391
|
-
"aria-label": "Close dialog"
|
|
2355
|
+
className: "absolute top-4 right-4 p-2 text-neutral-700 hover:text-neutral-400 transition-colors disabled:opacity-50 outline-none"
|
|
2392
2356
|
},
|
|
2393
|
-
/* @__PURE__ */
|
|
2357
|
+
/* @__PURE__ */ React24.createElement(
|
|
2394
2358
|
"svg",
|
|
2395
2359
|
{
|
|
2396
2360
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -2403,11 +2367,11 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2403
2367
|
strokeLinecap: "round",
|
|
2404
2368
|
strokeLinejoin: "round"
|
|
2405
2369
|
},
|
|
2406
|
-
/* @__PURE__ */
|
|
2407
|
-
/* @__PURE__ */
|
|
2370
|
+
/* @__PURE__ */ React24.createElement("path", { d: "M18 6 6 18" }),
|
|
2371
|
+
/* @__PURE__ */ React24.createElement("path", { d: "m6 6 12 12" })
|
|
2408
2372
|
)
|
|
2409
2373
|
),
|
|
2410
|
-
/* @__PURE__ */
|
|
2374
|
+
/* @__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
2375
|
TextInput,
|
|
2412
2376
|
{
|
|
2413
2377
|
label: "Email ID",
|
|
@@ -2417,7 +2381,7 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2417
2381
|
placeholder: "name@example.com",
|
|
2418
2382
|
disabled: isLoading
|
|
2419
2383
|
}
|
|
2420
|
-
), /* @__PURE__ */
|
|
2384
|
+
), /* @__PURE__ */ React24.createElement(
|
|
2421
2385
|
ThreeDActionButton,
|
|
2422
2386
|
{
|
|
2423
2387
|
type: "submit",
|
|
@@ -2475,7 +2439,7 @@ var HeroSection = ({
|
|
|
2475
2439
|
setIsWaitlistOpen(true);
|
|
2476
2440
|
}
|
|
2477
2441
|
};
|
|
2478
|
-
return /* @__PURE__ */
|
|
2442
|
+
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
2443
|
"video",
|
|
2480
2444
|
{
|
|
2481
2445
|
src: bgVideoSrc,
|
|
@@ -2486,7 +2450,7 @@ var HeroSection = ({
|
|
|
2486
2450
|
playsInline: true,
|
|
2487
2451
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
2488
2452
|
}
|
|
2489
|
-
) : bgImageSrc ? /* @__PURE__ */
|
|
2453
|
+
) : bgImageSrc ? /* @__PURE__ */ React25.createElement(
|
|
2490
2454
|
Image3,
|
|
2491
2455
|
{
|
|
2492
2456
|
src: bgImageSrc,
|
|
@@ -2495,7 +2459,7 @@ var HeroSection = ({
|
|
|
2495
2459
|
priority: true,
|
|
2496
2460
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
2497
2461
|
}
|
|
2498
|
-
) : null, /* @__PURE__ */
|
|
2462
|
+
) : null, /* @__PURE__ */ React25.createElement(
|
|
2499
2463
|
"div",
|
|
2500
2464
|
{
|
|
2501
2465
|
className: "pointer-events-none absolute inset-0 z-10 opacity-[0.7] mix-blend-overlay",
|
|
@@ -2503,31 +2467,31 @@ var HeroSection = ({
|
|
|
2503
2467
|
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
2468
|
}
|
|
2505
2469
|
}
|
|
2506
|
-
), /* @__PURE__ */
|
|
2470
|
+
), /* @__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
2471
|
"h1",
|
|
2508
2472
|
{
|
|
2509
2473
|
ref: titleRef,
|
|
2510
2474
|
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
2475
|
},
|
|
2512
|
-
/* @__PURE__ */
|
|
2513
|
-
)), /* @__PURE__ */
|
|
2514
|
-
/* @__PURE__ */
|
|
2515
|
-
|
|
2476
|
+
/* @__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" }, "*")))
|
|
2477
|
+
)), /* @__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!
|
|
2478
|
+
/* @__PURE__ */ React25.createElement(
|
|
2479
|
+
Link6,
|
|
2516
2480
|
{
|
|
2517
2481
|
href: isWaitlist ? "#" : ctaHref || "#",
|
|
2518
2482
|
onClick: handleCtaClick,
|
|
2519
2483
|
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
2484
|
},
|
|
2521
2485
|
ctaText,
|
|
2522
|
-
/* @__PURE__ */
|
|
2523
|
-
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
2524
|
-
|
|
2486
|
+
/* @__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" })))
|
|
2487
|
+
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ React25.createElement(
|
|
2488
|
+
Link6,
|
|
2525
2489
|
{
|
|
2526
2490
|
href: secondaryCtaHref,
|
|
2527
2491
|
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
2492
|
},
|
|
2529
2493
|
secondaryCtaText
|
|
2530
|
-
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */
|
|
2494
|
+
)), 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
2495
|
Image3,
|
|
2532
2496
|
{
|
|
2533
2497
|
src: logo.src,
|
|
@@ -2536,7 +2500,7 @@ var HeroSection = ({
|
|
|
2536
2500
|
height: 28,
|
|
2537
2501
|
className: "object-contain"
|
|
2538
2502
|
}
|
|
2539
|
-
))))))))), /* @__PURE__ */
|
|
2503
|
+
))))))))), /* @__PURE__ */ React25.createElement(
|
|
2540
2504
|
WaitlistDialog,
|
|
2541
2505
|
{
|
|
2542
2506
|
isOpen: isWaitlistOpen,
|
|
@@ -2546,8 +2510,8 @@ var HeroSection = ({
|
|
|
2546
2510
|
};
|
|
2547
2511
|
|
|
2548
2512
|
// src/components/AppBento2.tsx
|
|
2549
|
-
import
|
|
2550
|
-
import { HugeiconsIcon as
|
|
2513
|
+
import React26, { useState as useState17, useEffect as useEffect11, useRef as useRef5 } from "react";
|
|
2514
|
+
import { HugeiconsIcon as HugeiconsIcon18 } from "@hugeicons/react";
|
|
2551
2515
|
var AppBento2 = ({ tagline, headline, features }) => {
|
|
2552
2516
|
const [isAnimating, setIsAnimating] = useState17(false);
|
|
2553
2517
|
const titleRef = useRef5(null);
|
|
@@ -2569,7 +2533,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2569
2533
|
}
|
|
2570
2534
|
return () => observer.disconnect();
|
|
2571
2535
|
}, []);
|
|
2572
|
-
return /* @__PURE__ */
|
|
2536
|
+
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
2537
|
"h2",
|
|
2574
2538
|
{
|
|
2575
2539
|
ref: titleRef,
|
|
@@ -2577,7 +2541,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2577
2541
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2578
2542
|
},
|
|
2579
2543
|
headline
|
|
2580
|
-
))), /* @__PURE__ */
|
|
2544
|
+
))), /* @__PURE__ */ React26.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-6 gap-6" }, features.map((f, i) => {
|
|
2581
2545
|
const isWhite = i === 0;
|
|
2582
2546
|
const isBlack = i === 1;
|
|
2583
2547
|
const isNeutral = i === 2;
|
|
@@ -2599,36 +2563,36 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2599
2563
|
const textColor = isBlack ? "text-white" : "text-black";
|
|
2600
2564
|
const subTextColor = isBlack ? "text-neutral-300" : "text-neutral-600";
|
|
2601
2565
|
const labelColor = isBlack ? "text-neutral-400" : "text-neutral-500";
|
|
2602
|
-
return /* @__PURE__ */
|
|
2566
|
+
return /* @__PURE__ */ React26.createElement(
|
|
2603
2567
|
"div",
|
|
2604
2568
|
{
|
|
2605
2569
|
key: i,
|
|
2606
2570
|
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
2571
|
style: { boxShadow: getShadowStyle() }
|
|
2608
2572
|
},
|
|
2609
|
-
/* @__PURE__ */
|
|
2573
|
+
/* @__PURE__ */ React26.createElement(
|
|
2610
2574
|
"div",
|
|
2611
2575
|
{
|
|
2612
2576
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
2613
2577
|
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
2578
|
}
|
|
2615
2579
|
),
|
|
2616
|
-
isBlack && /* @__PURE__ */
|
|
2617
|
-
/* @__PURE__ */
|
|
2618
|
-
/* @__PURE__ */
|
|
2580
|
+
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" }),
|
|
2581
|
+
/* @__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 }))),
|
|
2582
|
+
/* @__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
2583
|
);
|
|
2620
2584
|
})))));
|
|
2621
2585
|
};
|
|
2622
2586
|
|
|
2623
2587
|
// src/components/FeatureScroll.tsx
|
|
2624
|
-
import
|
|
2588
|
+
import React27, { useRef as useRef6, useState as useState18, useEffect as useEffect12 } from "react";
|
|
2625
2589
|
import Image4 from "next/image";
|
|
2626
|
-
import { HugeiconsIcon as
|
|
2627
|
-
import { ArrowLeft01Icon as
|
|
2590
|
+
import { HugeiconsIcon as HugeiconsIcon19 } from "@hugeicons/react";
|
|
2591
|
+
import { ArrowLeft01Icon as ArrowLeft01Icon2, ArrowRight01Icon as ArrowRight01Icon4, Loading03Icon as Loading03Icon10 } from "@hugeicons/core-free-icons";
|
|
2628
2592
|
var FeatureCard = ({ feature, bgImage }) => {
|
|
2629
2593
|
const [isBgLoading, setIsBgLoading] = useState18(true);
|
|
2630
2594
|
const [isFgLoading, setIsFgLoading] = useState18(!!feature.image);
|
|
2631
|
-
return /* @__PURE__ */
|
|
2595
|
+
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
2596
|
Image4,
|
|
2633
2597
|
{
|
|
2634
2598
|
src: bgImage,
|
|
@@ -2641,7 +2605,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2641
2605
|
${isBgLoading ? "blur-xl scale-110" : "blur-0 scale-100"}
|
|
2642
2606
|
`
|
|
2643
2607
|
}
|
|
2644
|
-
), /* @__PURE__ */
|
|
2608
|
+
), /* @__PURE__ */ React27.createElement(
|
|
2645
2609
|
"div",
|
|
2646
2610
|
{
|
|
2647
2611
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.25] mix-blend-overlay",
|
|
@@ -2649,7 +2613,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2649
2613
|
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
2614
|
}
|
|
2651
2615
|
}
|
|
2652
|
-
), isFgLoading && feature.image && /* @__PURE__ */
|
|
2616
|
+
), 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
2617
|
Image4,
|
|
2654
2618
|
{
|
|
2655
2619
|
src: feature.image,
|
|
@@ -2662,7 +2626,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2662
2626
|
${isFgLoading ? "opacity-0 blur-xl" : "opacity-100 blur-0"}
|
|
2663
2627
|
`
|
|
2664
2628
|
}
|
|
2665
|
-
))), /* @__PURE__ */
|
|
2629
|
+
))), /* @__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
2630
|
};
|
|
2667
2631
|
var FeatureScroll = ({ tagline, headline, features }) => {
|
|
2668
2632
|
const scrollRef = useRef6(null);
|
|
@@ -2691,74 +2655,72 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2691
2655
|
"https://retinalabs.company/assets/images/bg_6.avif",
|
|
2692
2656
|
"https://retinalabs.company/assets/images/bg_1.avif"
|
|
2693
2657
|
];
|
|
2694
|
-
return /* @__PURE__ */
|
|
2658
|
+
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
2659
|
"button",
|
|
2696
2660
|
{
|
|
2697
2661
|
onClick: () => scroll("left"),
|
|
2698
2662
|
disabled: !canScrollLeft,
|
|
2699
|
-
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
|
-
"aria-label": "Previous feature"
|
|
2663
|
+
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"
|
|
2701
2664
|
},
|
|
2702
|
-
/* @__PURE__ */
|
|
2703
|
-
), /* @__PURE__ */
|
|
2665
|
+
/* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: ArrowLeft01Icon2, size: 20 })
|
|
2666
|
+
), /* @__PURE__ */ React27.createElement(
|
|
2704
2667
|
"button",
|
|
2705
2668
|
{
|
|
2706
2669
|
onClick: () => scroll("right"),
|
|
2707
2670
|
disabled: !canScrollRight,
|
|
2708
|
-
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
|
-
"aria-label": "Next feature"
|
|
2671
|
+
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"
|
|
2710
2672
|
},
|
|
2711
|
-
/* @__PURE__ */
|
|
2712
|
-
))), /* @__PURE__ */
|
|
2673
|
+
/* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: ArrowRight01Icon4, size: 20 })
|
|
2674
|
+
))), /* @__PURE__ */ React27.createElement(
|
|
2713
2675
|
"div",
|
|
2714
2676
|
{
|
|
2715
2677
|
ref: scrollRef,
|
|
2716
2678
|
onScroll: checkScroll,
|
|
2717
2679
|
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
2680
|
},
|
|
2719
|
-
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */
|
|
2720
|
-
), /* @__PURE__ */
|
|
2681
|
+
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */ React27.createElement(FeatureCard, { key: idx, feature, bgImage: bgImages[idx] }))
|
|
2682
|
+
), /* @__PURE__ */ React27.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ React27.createElement(
|
|
2721
2683
|
"button",
|
|
2722
2684
|
{
|
|
2723
2685
|
onClick: () => scroll("left"),
|
|
2724
2686
|
disabled: !canScrollLeft,
|
|
2725
2687
|
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
2688
|
},
|
|
2727
|
-
/* @__PURE__ */
|
|
2728
|
-
), /* @__PURE__ */
|
|
2689
|
+
/* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: ArrowLeft01Icon2, size: 20 })
|
|
2690
|
+
), /* @__PURE__ */ React27.createElement(
|
|
2729
2691
|
"button",
|
|
2730
2692
|
{
|
|
2731
2693
|
onClick: () => scroll("right"),
|
|
2732
2694
|
disabled: !canScrollRight,
|
|
2733
2695
|
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
2696
|
},
|
|
2735
|
-
/* @__PURE__ */
|
|
2697
|
+
/* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: ArrowRight01Icon4, size: 20 })
|
|
2736
2698
|
))));
|
|
2737
2699
|
};
|
|
2738
2700
|
|
|
2739
2701
|
// src/components/PlatformFeatures.tsx
|
|
2740
|
-
import
|
|
2741
|
-
import { HugeiconsIcon as
|
|
2702
|
+
import React28 from "react";
|
|
2703
|
+
import { HugeiconsIcon as HugeiconsIcon20 } from "@hugeicons/react";
|
|
2742
2704
|
var PlatformFeatures = ({
|
|
2743
2705
|
tagline,
|
|
2744
2706
|
headline,
|
|
2745
2707
|
description,
|
|
2746
2708
|
features
|
|
2747
2709
|
}) => {
|
|
2748
|
-
return /* @__PURE__ */
|
|
2710
|
+
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
2711
|
"div",
|
|
2750
2712
|
{
|
|
2751
2713
|
key: idx,
|
|
2752
2714
|
className: "flex flex-col group animate-in fade-in slide-in-from-bottom-4 duration-700 fill-mode-both",
|
|
2753
2715
|
style: { animationDelay: feature.delay || "0ms" }
|
|
2754
2716
|
},
|
|
2755
|
-
/* @__PURE__ */
|
|
2756
|
-
/* @__PURE__ */
|
|
2717
|
+
/* @__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))),
|
|
2718
|
+
/* @__PURE__ */ React28.createElement("div", null, /* @__PURE__ */ React28.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 pr-4" }, feature.desc))
|
|
2757
2719
|
)))));
|
|
2758
2720
|
};
|
|
2759
2721
|
|
|
2760
2722
|
// src/components/ManagedDocument.tsx
|
|
2761
|
-
import
|
|
2723
|
+
import React29, { useState as useState19, useEffect as useEffect13, useRef as useRef7 } from "react";
|
|
2762
2724
|
var ManagedDocument = ({
|
|
2763
2725
|
tagline,
|
|
2764
2726
|
title,
|
|
@@ -2788,7 +2750,7 @@ var ManagedDocument = ({
|
|
|
2788
2750
|
}, []);
|
|
2789
2751
|
return (
|
|
2790
2752
|
// Outer layout wrapper (takes up available space, adds padding)
|
|
2791
|
-
/* @__PURE__ */
|
|
2753
|
+
/* @__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
2754
|
"h1",
|
|
2793
2755
|
{
|
|
2794
2756
|
ref: titleRef,
|
|
@@ -2796,7 +2758,7 @@ var ManagedDocument = ({
|
|
|
2796
2758
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2797
2759
|
},
|
|
2798
2760
|
title
|
|
2799
|
-
)), sections.map((section, index) => /* @__PURE__ */
|
|
2761
|
+
)), 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
2762
|
"a",
|
|
2801
2763
|
{
|
|
2802
2764
|
href: `mailto:${contactEmail}`,
|
|
@@ -2808,18 +2770,18 @@ var ManagedDocument = ({
|
|
|
2808
2770
|
};
|
|
2809
2771
|
|
|
2810
2772
|
// src/components/ManagedContactBlock.tsx
|
|
2811
|
-
import
|
|
2812
|
-
import { HugeiconsIcon as
|
|
2773
|
+
import React30, { useState as useState20, useEffect as useEffect14 } from "react";
|
|
2774
|
+
import { HugeiconsIcon as HugeiconsIcon21 } from "@hugeicons/react";
|
|
2813
2775
|
var SecureEmail = ({ user, domain, className }) => {
|
|
2814
2776
|
const [isMounted, setIsMounted] = useState20(false);
|
|
2815
2777
|
useEffect14(() => {
|
|
2816
2778
|
setIsMounted(true);
|
|
2817
2779
|
}, []);
|
|
2818
2780
|
if (!isMounted) {
|
|
2819
|
-
return /* @__PURE__ */
|
|
2781
|
+
return /* @__PURE__ */ React30.createElement("span", { className, style: { opacity: 0 } }, "Loading");
|
|
2820
2782
|
}
|
|
2821
2783
|
const email = `${user}@${domain}`;
|
|
2822
|
-
return /* @__PURE__ */
|
|
2784
|
+
return /* @__PURE__ */ React30.createElement("a", { href: `mailto:${email}`, className }, email);
|
|
2823
2785
|
};
|
|
2824
2786
|
var ManagedContactBlock = ({
|
|
2825
2787
|
tagline,
|
|
@@ -2828,7 +2790,7 @@ var ManagedContactBlock = ({
|
|
|
2828
2790
|
emails,
|
|
2829
2791
|
socials
|
|
2830
2792
|
}) => {
|
|
2831
|
-
return /* @__PURE__ */
|
|
2793
|
+
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
2794
|
"div",
|
|
2833
2795
|
{
|
|
2834
2796
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2837,41 +2799,40 @@ var ManagedContactBlock = ({
|
|
|
2837
2799
|
backgroundRepeat: "repeat"
|
|
2838
2800
|
}
|
|
2839
2801
|
}
|
|
2840
|
-
), /* @__PURE__ */
|
|
2802
|
+
), /* @__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
2803
|
"a",
|
|
2842
2804
|
{
|
|
2843
2805
|
href: `tel:${company.phone.replace(/\s+/g, "")}`,
|
|
2844
2806
|
className: "transition-colors hover:text-black"
|
|
2845
2807
|
},
|
|
2846
2808
|
company.phone
|
|
2847
|
-
)))), emails && emails.length > 0 && /* @__PURE__ */
|
|
2809
|
+
)))), 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
2810
|
SecureEmail,
|
|
2849
2811
|
{
|
|
2850
2812
|
user: email.user,
|
|
2851
2813
|
domain: email.domain,
|
|
2852
2814
|
className: "text-neutral-600 transition-colors hover:text-black"
|
|
2853
2815
|
}
|
|
2854
|
-
))))), socials && socials.length > 0 && /* @__PURE__ */
|
|
2816
|
+
))))), 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
2817
|
"a",
|
|
2856
2818
|
{
|
|
2857
2819
|
key: idx,
|
|
2858
2820
|
href: social.href,
|
|
2859
2821
|
target: "_blank",
|
|
2860
2822
|
rel: "noopener noreferrer",
|
|
2861
|
-
className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black"
|
|
2862
|
-
"aria-label": social.label
|
|
2823
|
+
className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black"
|
|
2863
2824
|
},
|
|
2864
|
-
/* @__PURE__ */
|
|
2865
|
-
/* @__PURE__ */
|
|
2825
|
+
/* @__PURE__ */ React30.createElement(HugeiconsIcon21, { icon: social.icon, size: 18 }),
|
|
2826
|
+
/* @__PURE__ */ React30.createElement("span", { className: "text-[13px]" }, social.label)
|
|
2866
2827
|
)))))))));
|
|
2867
2828
|
};
|
|
2868
2829
|
|
|
2869
2830
|
// src/components/ManagedPricingBlock.tsx
|
|
2870
|
-
import
|
|
2871
|
-
import
|
|
2831
|
+
import React31, { useState as useState21, useEffect as useEffect15, useRef as useRef8 } from "react";
|
|
2832
|
+
import Link7 from "next/link";
|
|
2872
2833
|
import Image5 from "next/image";
|
|
2873
|
-
var CheckIcon = ({ className = "" }) => /* @__PURE__ */
|
|
2874
|
-
var CrossIcon = ({ className = "" }) => /* @__PURE__ */
|
|
2834
|
+
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" }));
|
|
2835
|
+
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
2836
|
var ManagedPricingBlock = ({
|
|
2876
2837
|
tagline,
|
|
2877
2838
|
title,
|
|
@@ -2901,7 +2862,7 @@ var ManagedPricingBlock = ({
|
|
|
2901
2862
|
}, []);
|
|
2902
2863
|
const hasTabs = tabs && tabs.length > 0;
|
|
2903
2864
|
const currentPlans = hasTabs ? tabs[activeTabIndex].plans : plans;
|
|
2904
|
-
return /* @__PURE__ */
|
|
2865
|
+
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
2866
|
"h1",
|
|
2906
2867
|
{
|
|
2907
2868
|
ref: titleRef,
|
|
@@ -2909,30 +2870,30 @@ var ManagedPricingBlock = ({
|
|
|
2909
2870
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2910
2871
|
},
|
|
2911
2872
|
title
|
|
2912
|
-
)), hasTabs && /* @__PURE__ */
|
|
2873
|
+
)), 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
2874
|
const isActive = activeTabIndex === idx;
|
|
2914
|
-
return /* @__PURE__ */
|
|
2875
|
+
return /* @__PURE__ */ React31.createElement(
|
|
2915
2876
|
"button",
|
|
2916
2877
|
{
|
|
2917
2878
|
key: idx,
|
|
2918
2879
|
onClick: () => setActiveTabIndex(idx),
|
|
2919
|
-
className: `px-4
|
|
2880
|
+
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
2881
|
},
|
|
2921
2882
|
tab.label
|
|
2922
2883
|
);
|
|
2923
|
-
}))), /* @__PURE__ */
|
|
2884
|
+
}))), /* @__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
2885
|
"div",
|
|
2925
2886
|
{
|
|
2926
2887
|
key: `${activeTabIndex}-${planIdx}`,
|
|
2927
2888
|
className: `bg-white rounded-3xl p-6 flex flex-col relative overflow-hidden transition-all duration-300 ${plan.isPremium ? "" : ""}`
|
|
2928
2889
|
},
|
|
2929
|
-
/* @__PURE__ */
|
|
2890
|
+
/* @__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
2891
|
"div",
|
|
2931
2892
|
{
|
|
2932
2893
|
key: logoIdx,
|
|
2933
2894
|
className: "relative w-5 h-5 overflow-hidden flex items-center justify-center shrink-0"
|
|
2934
2895
|
},
|
|
2935
|
-
/* @__PURE__ */
|
|
2896
|
+
/* @__PURE__ */ React31.createElement(
|
|
2936
2897
|
Image5,
|
|
2937
2898
|
{
|
|
2938
2899
|
src: logo.src,
|
|
@@ -2943,37 +2904,36 @@ var ManagedPricingBlock = ({
|
|
|
2943
2904
|
}
|
|
2944
2905
|
)
|
|
2945
2906
|
)))),
|
|
2946
|
-
plan.isPremium ? /* @__PURE__ */
|
|
2947
|
-
|
|
2907
|
+
plan.isPremium ? /* @__PURE__ */ React31.createElement(ThreeDButton, { href: plan.ctaHref, className: "mb-6 w-full" }, plan.ctaText) : /* @__PURE__ */ React31.createElement(
|
|
2908
|
+
Link7,
|
|
2948
2909
|
{
|
|
2949
2910
|
href: plan.ctaHref,
|
|
2950
2911
|
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
2912
|
},
|
|
2952
2913
|
plan.ctaText
|
|
2953
2914
|
),
|
|
2954
|
-
/* @__PURE__ */
|
|
2915
|
+
/* @__PURE__ */ React31.createElement("div", { className: "flex flex-col gap-3" }, plan.features.map((feature, featureIdx) => {
|
|
2955
2916
|
const isAvailable = feature.value !== false;
|
|
2956
2917
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
2957
|
-
return /* @__PURE__ */
|
|
2918
|
+
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
2919
|
}))
|
|
2959
2920
|
)))));
|
|
2960
2921
|
};
|
|
2961
2922
|
|
|
2962
2923
|
// src/components/ManagedBoardBlock.tsx
|
|
2963
|
-
import
|
|
2924
|
+
import React32 from "react";
|
|
2964
2925
|
import Image6 from "next/image";
|
|
2965
|
-
import { HugeiconsIcon as
|
|
2926
|
+
import { HugeiconsIcon as HugeiconsIcon22 } from "@hugeicons/react";
|
|
2966
2927
|
import { TwitterIcon, LinkedinIcon } from "@hugeicons/core-free-icons";
|
|
2967
|
-
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */
|
|
2928
|
+
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ React32.createElement(
|
|
2968
2929
|
"a",
|
|
2969
2930
|
{
|
|
2970
2931
|
href,
|
|
2971
2932
|
target: "_blank",
|
|
2972
2933
|
rel: "noopener noreferrer",
|
|
2973
|
-
className: "text-neutral-400 hover:text-black transition-colors"
|
|
2974
|
-
"aria-label": `${name} on ${label}`
|
|
2934
|
+
className: "text-neutral-400 hover:text-black transition-colors"
|
|
2975
2935
|
},
|
|
2976
|
-
/* @__PURE__ */
|
|
2936
|
+
/* @__PURE__ */ React32.createElement(HugeiconsIcon22, { icon, size: 16 })
|
|
2977
2937
|
);
|
|
2978
2938
|
var ManagedBoardBlock = ({
|
|
2979
2939
|
tagline,
|
|
@@ -2982,7 +2942,7 @@ var ManagedBoardBlock = ({
|
|
|
2982
2942
|
contactText,
|
|
2983
2943
|
contactEmail
|
|
2984
2944
|
}) => {
|
|
2985
|
-
return /* @__PURE__ */
|
|
2945
|
+
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
2946
|
"div",
|
|
2987
2947
|
{
|
|
2988
2948
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2991,7 +2951,7 @@ var ManagedBoardBlock = ({
|
|
|
2991
2951
|
backgroundRepeat: "repeat"
|
|
2992
2952
|
}
|
|
2993
2953
|
}
|
|
2994
|
-
), /* @__PURE__ */
|
|
2954
|
+
), /* @__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
2955
|
Image6,
|
|
2996
2956
|
{
|
|
2997
2957
|
src: member.imageSrc,
|
|
@@ -3000,7 +2960,7 @@ var ManagedBoardBlock = ({
|
|
|
3000
2960
|
sizes: "(max-width: 768px) 56px, 64px",
|
|
3001
2961
|
className: "object-cover grayscale opacity-100 transition-opacity"
|
|
3002
2962
|
}
|
|
3003
|
-
)), /* @__PURE__ */
|
|
2963
|
+
)), /* @__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
2964
|
MemberSocialLink,
|
|
3005
2965
|
{
|
|
3006
2966
|
href: `https://x.com/${member.twitterHandle}`,
|
|
@@ -3008,7 +2968,7 @@ var ManagedBoardBlock = ({
|
|
|
3008
2968
|
label: "X",
|
|
3009
2969
|
name: member.name
|
|
3010
2970
|
}
|
|
3011
|
-
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */
|
|
2971
|
+
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */ React32.createElement(
|
|
3012
2972
|
MemberSocialLink,
|
|
3013
2973
|
{
|
|
3014
2974
|
href: member.linkedinHandle,
|
|
@@ -3016,28 +2976,28 @@ var ManagedBoardBlock = ({
|
|
|
3016
2976
|
label: "LinkedIn",
|
|
3017
2977
|
name: member.name
|
|
3018
2978
|
}
|
|
3019
|
-
))))))), (contactText || contactEmail) && /* @__PURE__ */
|
|
2979
|
+
))))))), (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
2980
|
};
|
|
3021
2981
|
|
|
3022
2982
|
// src/components/ManagedNotFoundBlock.tsx
|
|
3023
|
-
import
|
|
2983
|
+
import React33 from "react";
|
|
3024
2984
|
var ManagedNotFoundBlock = ({
|
|
3025
2985
|
title = "404 - Page Not Found",
|
|
3026
2986
|
description = "The page you are looking for does not exist or has been moved."
|
|
3027
2987
|
}) => {
|
|
3028
|
-
return /* @__PURE__ */
|
|
2988
|
+
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
2989
|
"svg",
|
|
3030
2990
|
{
|
|
3031
2991
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3032
2992
|
viewBox: "0 0 24 24",
|
|
3033
2993
|
className: "w-12 h-12 fill-neutral-100"
|
|
3034
2994
|
},
|
|
3035
|
-
/* @__PURE__ */
|
|
3036
|
-
)), /* @__PURE__ */
|
|
2995
|
+
/* @__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" })
|
|
2996
|
+
)), /* @__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
2997
|
};
|
|
3038
2998
|
|
|
3039
2999
|
// src/components/ManagedNewsletterSplitBlock.tsx
|
|
3040
|
-
import
|
|
3000
|
+
import React34 from "react";
|
|
3041
3001
|
import Image7 from "next/image";
|
|
3042
3002
|
var ManagedNewsletterSplitBlock = ({
|
|
3043
3003
|
tagline,
|
|
@@ -3051,7 +3011,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3051
3011
|
ctaHref = "/contact",
|
|
3052
3012
|
children
|
|
3053
3013
|
}) => {
|
|
3054
|
-
return /* @__PURE__ */
|
|
3014
|
+
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
3015
|
Image7,
|
|
3056
3016
|
{
|
|
3057
3017
|
src: imageSrc,
|
|
@@ -3061,7 +3021,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3061
3021
|
className: "object-cover object-top grayscale opacity-60",
|
|
3062
3022
|
quality: 100
|
|
3063
3023
|
}
|
|
3064
|
-
), /* @__PURE__ */
|
|
3024
|
+
), /* @__PURE__ */ React34.createElement(
|
|
3065
3025
|
"div",
|
|
3066
3026
|
{
|
|
3067
3027
|
className: "absolute inset-0 z-10 pointer-events-none",
|
|
@@ -3069,7 +3029,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3069
3029
|
background: "linear-gradient(to right, rgba(255,255,255,0) 30%, #ffffff 100%)"
|
|
3070
3030
|
}
|
|
3071
3031
|
}
|
|
3072
|
-
), /* @__PURE__ */
|
|
3032
|
+
), /* @__PURE__ */ React34.createElement(
|
|
3073
3033
|
"div",
|
|
3074
3034
|
{
|
|
3075
3035
|
className: "absolute inset-x-0 bottom-0 h-40 z-10 pointer-events-none",
|
|
@@ -3077,7 +3037,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3077
3037
|
background: "linear-gradient(to bottom, rgba(255,255,255,0) 0%, #ffffff 100%)"
|
|
3078
3038
|
}
|
|
3079
3039
|
}
|
|
3080
|
-
)), /* @__PURE__ */
|
|
3040
|
+
)), /* @__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
3041
|
"div",
|
|
3082
3042
|
{
|
|
3083
3043
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3086,7 +3046,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3086
3046
|
backgroundRepeat: "repeat"
|
|
3087
3047
|
}
|
|
3088
3048
|
}
|
|
3089
|
-
), /* @__PURE__ */
|
|
3049
|
+
), /* @__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
3050
|
ThreeDButton,
|
|
3091
3051
|
{
|
|
3092
3052
|
href: ctaHref,
|
|
@@ -3097,10 +3057,10 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3097
3057
|
};
|
|
3098
3058
|
|
|
3099
3059
|
// src/components/PortfolioHero.tsx
|
|
3100
|
-
import
|
|
3101
|
-
import
|
|
3060
|
+
import React35, { useEffect as useEffect16, useRef as useRef9 } from "react";
|
|
3061
|
+
import Link8 from "next/link";
|
|
3102
3062
|
import Image8 from "next/image";
|
|
3103
|
-
import { HugeiconsIcon as
|
|
3063
|
+
import { HugeiconsIcon as HugeiconsIcon23 } from "@hugeicons/react";
|
|
3104
3064
|
import { ArrowRight01Icon as ArrowRight01Icon5 } from "@hugeicons/core-free-icons";
|
|
3105
3065
|
var useScrollAnimation = () => {
|
|
3106
3066
|
const elementRef = useRef9(null);
|
|
@@ -3140,13 +3100,13 @@ var PortfolioHero = ({
|
|
|
3140
3100
|
secondaryCtaHref
|
|
3141
3101
|
}) => {
|
|
3142
3102
|
const heroContentRef = useScrollAnimation();
|
|
3143
|
-
return /* @__PURE__ */
|
|
3103
|
+
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
3104
|
"div",
|
|
3145
3105
|
{
|
|
3146
3106
|
ref: heroContentRef,
|
|
3147
3107
|
className: "w-full opacity-0 translate-y-5 transition-all duration-1000 ease-out relative z-10"
|
|
3148
3108
|
},
|
|
3149
|
-
/* @__PURE__ */
|
|
3109
|
+
/* @__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
3110
|
Image8,
|
|
3151
3111
|
{
|
|
3152
3112
|
src: imageSrc,
|
|
@@ -3157,7 +3117,7 @@ var PortfolioHero = ({
|
|
|
3157
3117
|
sizes: "(max-width: 640px) 80px, 128px",
|
|
3158
3118
|
quality: 100
|
|
3159
3119
|
}
|
|
3160
|
-
)), /* @__PURE__ */
|
|
3120
|
+
)), /* @__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
3121
|
"a",
|
|
3162
3122
|
{
|
|
3163
3123
|
href: socialLinkHref,
|
|
@@ -3167,30 +3127,30 @@ var PortfolioHero = ({
|
|
|
3167
3127
|
},
|
|
3168
3128
|
socialLinkText
|
|
3169
3129
|
))),
|
|
3170
|
-
/* @__PURE__ */
|
|
3171
|
-
/* @__PURE__ */
|
|
3130
|
+
/* @__PURE__ */ React35.createElement("p", { className: "text-[13px] leading-[1.8] max-w-4xl mb-12 text-neutral-600" }, bio),
|
|
3131
|
+
/* @__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
3132
|
ThreeDButton,
|
|
3173
3133
|
{
|
|
3174
3134
|
href: primaryCtaHref,
|
|
3175
3135
|
className: "py-3 tracking-widest text-[11px]"
|
|
3176
3136
|
},
|
|
3177
3137
|
primaryCtaText
|
|
3178
|
-
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
3179
|
-
|
|
3138
|
+
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ React35.createElement(
|
|
3139
|
+
Link8,
|
|
3180
3140
|
{
|
|
3181
3141
|
href: secondaryCtaHref,
|
|
3182
3142
|
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
3143
|
},
|
|
3184
3144
|
secondaryCtaText,
|
|
3185
|
-
/* @__PURE__ */
|
|
3145
|
+
/* @__PURE__ */ React35.createElement(HugeiconsIcon23, { icon: ArrowRight01Icon5, size: 16 })
|
|
3186
3146
|
))
|
|
3187
3147
|
));
|
|
3188
3148
|
};
|
|
3189
3149
|
|
|
3190
3150
|
// src/components/GifFeatureCard.tsx
|
|
3191
|
-
import
|
|
3151
|
+
import React36, { useState as useState22 } from "react";
|
|
3192
3152
|
import Image9 from "next/image";
|
|
3193
|
-
import { HugeiconsIcon as
|
|
3153
|
+
import { HugeiconsIcon as HugeiconsIcon24 } from "@hugeicons/react";
|
|
3194
3154
|
import { Loading03Icon as Loading03Icon11 } from "@hugeicons/core-free-icons";
|
|
3195
3155
|
var GifFeatureCard = ({
|
|
3196
3156
|
gifSrc,
|
|
@@ -3200,19 +3160,19 @@ var GifFeatureCard = ({
|
|
|
3200
3160
|
className = "aspect-video"
|
|
3201
3161
|
}) => {
|
|
3202
3162
|
const [isLoading, setIsLoading] = useState22(true);
|
|
3203
|
-
return /* @__PURE__ */
|
|
3204
|
-
|
|
3163
|
+
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(
|
|
3164
|
+
HugeiconsIcon24,
|
|
3205
3165
|
{
|
|
3206
3166
|
icon: Loading03Icon11,
|
|
3207
3167
|
size: 32,
|
|
3208
3168
|
className: "animate-spin text-white"
|
|
3209
3169
|
}
|
|
3210
|
-
)), /* @__PURE__ */
|
|
3170
|
+
)), /* @__PURE__ */ React36.createElement(
|
|
3211
3171
|
"div",
|
|
3212
3172
|
{
|
|
3213
3173
|
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
3174
|
},
|
|
3215
|
-
/* @__PURE__ */
|
|
3175
|
+
/* @__PURE__ */ React36.createElement(
|
|
3216
3176
|
Image9,
|
|
3217
3177
|
{
|
|
3218
3178
|
src: gifSrc,
|
|
@@ -3223,16 +3183,16 @@ var GifFeatureCard = ({
|
|
|
3223
3183
|
className: "object-cover object-center pointer-events-none"
|
|
3224
3184
|
}
|
|
3225
3185
|
)
|
|
3226
|
-
), /* @__PURE__ */
|
|
3186
|
+
), /* @__PURE__ */ React36.createElement(
|
|
3227
3187
|
"div",
|
|
3228
3188
|
{
|
|
3229
3189
|
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
3190
|
}
|
|
3231
|
-
), /* @__PURE__ */
|
|
3191
|
+
), /* @__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
3192
|
};
|
|
3233
3193
|
|
|
3234
3194
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
3235
|
-
import
|
|
3195
|
+
import React37, { useState as useState23, useEffect as useEffect17, useRef as useRef10 } from "react";
|
|
3236
3196
|
import Image10 from "next/image";
|
|
3237
3197
|
var MedicalFeatureStatsBlock = ({
|
|
3238
3198
|
bottomHeadline,
|
|
@@ -3261,7 +3221,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3261
3221
|
}
|
|
3262
3222
|
return () => observer.disconnect();
|
|
3263
3223
|
}, []);
|
|
3264
|
-
return /* @__PURE__ */
|
|
3224
|
+
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
3225
|
"h2",
|
|
3266
3226
|
{
|
|
3267
3227
|
ref: titleRef,
|
|
@@ -3269,7 +3229,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3269
3229
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
3270
3230
|
},
|
|
3271
3231
|
bottomHeadline
|
|
3272
|
-
), /* @__PURE__ */
|
|
3232
|
+
), /* @__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
3233
|
Image10,
|
|
3274
3234
|
{
|
|
3275
3235
|
src,
|
|
@@ -3278,17 +3238,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3278
3238
|
sizes: "48px",
|
|
3279
3239
|
className: "object-cover"
|
|
3280
3240
|
}
|
|
3281
|
-
)))), /* @__PURE__ */
|
|
3241
|
+
)))), /* @__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
3242
|
};
|
|
3283
3243
|
|
|
3284
3244
|
// src/components/ConsultantShowcase.tsx
|
|
3285
|
-
import
|
|
3245
|
+
import React38, { useState as useState24 } from "react";
|
|
3286
3246
|
import Image11 from "next/image";
|
|
3287
|
-
import { HugeiconsIcon as
|
|
3247
|
+
import { HugeiconsIcon as HugeiconsIcon25 } from "@hugeicons/react";
|
|
3288
3248
|
import { Loading03Icon as Loading03Icon12 } from "@hugeicons/core-free-icons";
|
|
3289
3249
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
3290
3250
|
const [isLoading, setIsLoading] = useState24(true);
|
|
3291
|
-
return /* @__PURE__ */
|
|
3251
|
+
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
3252
|
Image11,
|
|
3293
3253
|
{
|
|
3294
3254
|
src,
|
|
@@ -3334,7 +3294,7 @@ var ConsultantShowcase = ({
|
|
|
3334
3294
|
}
|
|
3335
3295
|
};
|
|
3336
3296
|
if (!profiles || profiles.length === 0) return null;
|
|
3337
|
-
return /* @__PURE__ */
|
|
3297
|
+
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
3298
|
"div",
|
|
3339
3299
|
{
|
|
3340
3300
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -3344,13 +3304,13 @@ var ConsultantShowcase = ({
|
|
|
3344
3304
|
},
|
|
3345
3305
|
profiles.map((profile, idx) => {
|
|
3346
3306
|
const isActive = idx === currentIndex;
|
|
3347
|
-
return /* @__PURE__ */
|
|
3307
|
+
return /* @__PURE__ */ React38.createElement(
|
|
3348
3308
|
"div",
|
|
3349
3309
|
{
|
|
3350
3310
|
key: profile.id,
|
|
3351
3311
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
3352
3312
|
},
|
|
3353
|
-
/* @__PURE__ */
|
|
3313
|
+
/* @__PURE__ */ React38.createElement(
|
|
3354
3314
|
ImageWithLoader,
|
|
3355
3315
|
{
|
|
3356
3316
|
src: profile.imageSrc,
|
|
@@ -3358,19 +3318,18 @@ var ConsultantShowcase = ({
|
|
|
3358
3318
|
priority: idx === 0
|
|
3359
3319
|
}
|
|
3360
3320
|
),
|
|
3361
|
-
/* @__PURE__ */
|
|
3362
|
-
/* @__PURE__ */
|
|
3363
|
-
/* @__PURE__ */
|
|
3321
|
+
/* @__PURE__ */ React38.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
3322
|
+
/* @__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" }),
|
|
3323
|
+
/* @__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
3324
|
);
|
|
3365
3325
|
}),
|
|
3366
|
-
/* @__PURE__ */
|
|
3367
|
-
/* @__PURE__ */
|
|
3368
|
-
/* @__PURE__ */
|
|
3326
|
+
/* @__PURE__ */ React38.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide }),
|
|
3327
|
+
/* @__PURE__ */ React38.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide }),
|
|
3328
|
+
/* @__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
3329
|
"button",
|
|
3370
3330
|
{
|
|
3371
3331
|
key: idx,
|
|
3372
3332
|
onClick: () => setCurrentIndex(idx),
|
|
3373
|
-
"aria-label": `Go to slide ${idx + 1}`,
|
|
3374
3333
|
className: `h-1 rounded-full transition-all duration-300 ease-out outline-none ${currentIndex === idx ? "w-8 bg-white" : "w-4 bg-white/30 hover:bg-white/60 cursor-pointer"}`
|
|
3375
3334
|
}
|
|
3376
3335
|
)))
|
|
@@ -3378,13 +3337,13 @@ var ConsultantShowcase = ({
|
|
|
3378
3337
|
};
|
|
3379
3338
|
|
|
3380
3339
|
// src/components/ContentGridBlock.tsx
|
|
3381
|
-
import
|
|
3340
|
+
import React39, { useState as useState25 } from "react";
|
|
3382
3341
|
import Image12 from "next/image";
|
|
3383
|
-
import { HugeiconsIcon as
|
|
3342
|
+
import { HugeiconsIcon as HugeiconsIcon26 } from "@hugeicons/react";
|
|
3384
3343
|
import { Loading03Icon as Loading03Icon13 } from "@hugeicons/core-free-icons";
|
|
3385
3344
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
3386
3345
|
const [isLoading, setIsLoading] = useState25(true);
|
|
3387
|
-
return /* @__PURE__ */
|
|
3346
|
+
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
3347
|
Image12,
|
|
3389
3348
|
{
|
|
3390
3349
|
src,
|
|
@@ -3406,30 +3365,30 @@ var ContentGridBlock = ({
|
|
|
3406
3365
|
middleBottomCard,
|
|
3407
3366
|
rightCards
|
|
3408
3367
|
}) => {
|
|
3409
|
-
return /* @__PURE__ */
|
|
3368
|
+
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
3369
|
ImageWithLoader2,
|
|
3411
3370
|
{
|
|
3412
3371
|
src: card.bgImageSrc,
|
|
3413
3372
|
alt: card.title,
|
|
3414
3373
|
className: "absolute inset-0 w-full h-full"
|
|
3415
3374
|
}
|
|
3416
|
-
), /* @__PURE__ */
|
|
3375
|
+
), /* @__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
3376
|
};
|
|
3418
3377
|
|
|
3419
3378
|
// src/components/ManagedProjectsBlock.tsx
|
|
3420
|
-
import
|
|
3421
|
-
import
|
|
3379
|
+
import React40 from "react";
|
|
3380
|
+
import Link9 from "next/link";
|
|
3422
3381
|
var GridSection = ({
|
|
3423
3382
|
children,
|
|
3424
3383
|
isLast = false,
|
|
3425
3384
|
className = "py-8 md:py-10"
|
|
3426
|
-
}) => /* @__PURE__ */
|
|
3385
|
+
}) => /* @__PURE__ */ React40.createElement("div", { className: `relative px-5 md:px-12 ${className} ${!isLast ? "" : ""}` }, children);
|
|
3427
3386
|
var ManagedProjectsBlock = ({
|
|
3428
3387
|
tagline,
|
|
3429
3388
|
title,
|
|
3430
3389
|
projects
|
|
3431
3390
|
}) => {
|
|
3432
|
-
return /* @__PURE__ */
|
|
3391
|
+
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
3392
|
"div",
|
|
3434
3393
|
{
|
|
3435
3394
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3438,10 +3397,10 @@ var ManagedProjectsBlock = ({
|
|
|
3438
3397
|
backgroundRepeat: "repeat"
|
|
3439
3398
|
}
|
|
3440
3399
|
}
|
|
3441
|
-
), /* @__PURE__ */
|
|
3400
|
+
), /* @__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
3401
|
const isLast = index === projects.length - 1;
|
|
3443
|
-
const projectContent = /* @__PURE__ */
|
|
3444
|
-
return /* @__PURE__ */
|
|
3402
|
+
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));
|
|
3403
|
+
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
3404
|
}))));
|
|
3446
3405
|
};
|
|
3447
3406
|
export {
|
|
@@ -3478,6 +3437,7 @@ export {
|
|
|
3478
3437
|
UniversalOrganizationPage,
|
|
3479
3438
|
UniversalProfilePage,
|
|
3480
3439
|
UniversalProfileSettings,
|
|
3440
|
+
UniversalSidebar,
|
|
3481
3441
|
UniversalTransactionPage,
|
|
3482
3442
|
UniversalWalletPage,
|
|
3483
3443
|
WaitlistDialog
|