@retinalabsllc/zairusjs 9.0.40 → 9.0.50
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 +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +355 -244
- package/dist/index.mjs +356 -240
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -593,49 +593,206 @@ var Footer = ({
|
|
|
593
593
|
};
|
|
594
594
|
|
|
595
595
|
// src/components/MobileNav.tsx
|
|
596
|
-
import
|
|
596
|
+
import React8, { useState as useState5 } from "react";
|
|
597
597
|
import Link4 from "next/link";
|
|
598
|
-
import { usePathname as usePathname2 } from "next/navigation";
|
|
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
|
+
import React7 from "react";
|
|
599
609
|
import { HugeiconsIcon as HugeiconsIcon3 } from "@hugeicons/react";
|
|
600
|
-
|
|
610
|
+
import { Loading03Icon as Loading03Icon2 } from "@hugeicons/core-free-icons";
|
|
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
|
+
}) => {
|
|
601
658
|
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);
|
|
602
663
|
if (!items || items.length === 0) return null;
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
664
|
+
const isItemActive = (href) => {
|
|
665
|
+
if (href === "/" || href === "/app") {
|
|
666
|
+
return pathname === "/" || pathname === "/app";
|
|
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(
|
|
606
763
|
Link4,
|
|
607
764
|
{
|
|
608
765
|
key: item.label,
|
|
609
766
|
href: item.href,
|
|
610
767
|
className: "flex flex-col items-center justify-center gap-1 min-w-14 transition-transform active:scale-95 outline-none"
|
|
611
768
|
},
|
|
612
|
-
/* @__PURE__ */
|
|
613
|
-
|
|
614
|
-
{
|
|
615
|
-
icon: item.icon,
|
|
616
|
-
size: 20
|
|
617
|
-
}
|
|
618
|
-
)),
|
|
619
|
-
/* @__PURE__ */ React7.createElement(
|
|
620
|
-
"span",
|
|
621
|
-
{
|
|
622
|
-
className: `text-[9px] tracking-wide transition-colors duration-300 ${isActive ? "text-black" : "text-neutral-400"}`
|
|
623
|
-
},
|
|
624
|
-
item.label
|
|
625
|
-
)
|
|
769
|
+
/* @__PURE__ */ React8.createElement("div", { className: `transition-colors duration-300 ${active ? "text-black" : "text-neutral-400 hover:text-neutral-600"}` }, /* @__PURE__ */ React8.createElement(HugeiconsIcon4, { icon: item.icon, size: 20 })),
|
|
770
|
+
/* @__PURE__ */ React8.createElement("span", { className: `text-[9px] tracking-wide font-medium transition-colors duration-300 ${active ? "text-black" : "text-neutral-400"}` }, item.label)
|
|
626
771
|
);
|
|
627
|
-
})))
|
|
772
|
+
}))), /* @__PURE__ */ React8.createElement(
|
|
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
|
+
));
|
|
628
785
|
};
|
|
629
786
|
|
|
630
787
|
// src/components/UniversalOrganizationPage.tsx
|
|
631
|
-
import
|
|
788
|
+
import React12, { useState as useState7, useEffect as useEffect4 } from "react";
|
|
632
789
|
import toast2 from "react-hot-toast";
|
|
633
790
|
|
|
634
791
|
// src/components/ManagedToaster.tsx
|
|
635
|
-
import
|
|
792
|
+
import React9 from "react";
|
|
636
793
|
import { Toaster } from "react-hot-toast";
|
|
637
794
|
var ManagedToaster = () => {
|
|
638
|
-
return /* @__PURE__ */
|
|
795
|
+
return /* @__PURE__ */ React9.createElement(
|
|
639
796
|
Toaster,
|
|
640
797
|
{
|
|
641
798
|
position: "top-right",
|
|
@@ -667,7 +824,7 @@ var ManagedToaster = () => {
|
|
|
667
824
|
};
|
|
668
825
|
|
|
669
826
|
// src/components/ReusableInputs.tsx
|
|
670
|
-
import
|
|
827
|
+
import React10 from "react";
|
|
671
828
|
var TextInput = ({
|
|
672
829
|
label,
|
|
673
830
|
value,
|
|
@@ -678,7 +835,7 @@ var TextInput = ({
|
|
|
678
835
|
readOnly,
|
|
679
836
|
type = "text",
|
|
680
837
|
onClick
|
|
681
|
-
}) => /* @__PURE__ */
|
|
838
|
+
}) => /* @__PURE__ */ React10.createElement("div", { className: "space-y-2 flex-1 w-full", onClick }, label && /* @__PURE__ */ React10.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block " }, label), /* @__PURE__ */ React10.createElement(
|
|
682
839
|
"input",
|
|
683
840
|
{
|
|
684
841
|
type,
|
|
@@ -699,7 +856,7 @@ var NumberInput = ({
|
|
|
699
856
|
placeholder,
|
|
700
857
|
maxLength,
|
|
701
858
|
disabled
|
|
702
|
-
}) => /* @__PURE__ */
|
|
859
|
+
}) => /* @__PURE__ */ React10.createElement("div", { className: "space-y-2 flex-1 w-full" }, label && /* @__PURE__ */ React10.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block " }, label), /* @__PURE__ */ React10.createElement(
|
|
703
860
|
"input",
|
|
704
861
|
{
|
|
705
862
|
type: "text",
|
|
@@ -717,8 +874,8 @@ var NumberInput = ({
|
|
|
717
874
|
));
|
|
718
875
|
|
|
719
876
|
// src/components/Banner.tsx
|
|
720
|
-
import
|
|
721
|
-
import { HugeiconsIcon as
|
|
877
|
+
import React11, { useState as useState6 } from "react";
|
|
878
|
+
import { HugeiconsIcon as HugeiconsIcon5 } from "@hugeicons/react";
|
|
722
879
|
import {
|
|
723
880
|
Alert02Icon,
|
|
724
881
|
CheckmarkBadge01Icon,
|
|
@@ -734,7 +891,7 @@ var Banner = ({
|
|
|
734
891
|
onDismiss,
|
|
735
892
|
action
|
|
736
893
|
}) => {
|
|
737
|
-
const [isVisible, setIsVisible] =
|
|
894
|
+
const [isVisible, setIsVisible] = useState6(true);
|
|
738
895
|
if (!isVisible) return null;
|
|
739
896
|
const handleDismiss = () => {
|
|
740
897
|
setIsVisible(false);
|
|
@@ -768,23 +925,23 @@ var Banner = ({
|
|
|
768
925
|
};
|
|
769
926
|
const currentConfig = config[type];
|
|
770
927
|
const IconToUse = icon || currentConfig.defaultIcon;
|
|
771
|
-
return /* @__PURE__ */
|
|
928
|
+
return /* @__PURE__ */ React11.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__ */ React11.createElement("div", { className: "flex-1 flex flex-col min-w-0" }, /* @__PURE__ */ React11.createElement("h4", { className: `text-sm tracking-tight mb-1 ${currentConfig.titleColor}` }, title), /* @__PURE__ */ React11.createElement("p", { className: `text-xs leading-relaxed ${currentConfig.msgColor}` }, message), action && /* @__PURE__ */ React11.createElement("div", { className: "mt-3" }, action)), isDismissible && /* @__PURE__ */ React11.createElement(
|
|
772
929
|
"button",
|
|
773
930
|
{
|
|
774
931
|
onClick: handleDismiss,
|
|
775
932
|
className: `absolute top-3 right-3 p-1.5 rounded-full transition-colors outline-none shrink-0 ${currentConfig.closeHover}`,
|
|
776
933
|
"aria-label": "Dismiss banner"
|
|
777
934
|
},
|
|
778
|
-
/* @__PURE__ */
|
|
935
|
+
/* @__PURE__ */ React11.createElement(HugeiconsIcon5, { icon: Cancel01Icon, size: 16 })
|
|
779
936
|
));
|
|
780
937
|
};
|
|
781
938
|
|
|
782
939
|
// src/components/UniversalOrganizationPage.tsx
|
|
783
|
-
import { HugeiconsIcon as
|
|
940
|
+
import { HugeiconsIcon as HugeiconsIcon6 } from "@hugeicons/react";
|
|
784
941
|
import {
|
|
785
942
|
CircleLock02Icon
|
|
786
943
|
} from "@hugeicons/core-free-icons";
|
|
787
|
-
var InputSpinner2 = () => /* @__PURE__ */
|
|
944
|
+
var InputSpinner2 = () => /* @__PURE__ */ React12.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__ */ React12.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ React12.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" }));
|
|
788
945
|
var UniversalOrganizationPage = ({
|
|
789
946
|
initialOrgName,
|
|
790
947
|
initialSlug,
|
|
@@ -797,12 +954,12 @@ var UniversalOrganizationPage = ({
|
|
|
797
954
|
onCheckSlugAvailability
|
|
798
955
|
}) => {
|
|
799
956
|
const resolvedInitialUsername = initialUsername || initialSlug;
|
|
800
|
-
const [web3Name, setWeb3Name] =
|
|
801
|
-
const [username, setUsername] =
|
|
802
|
-
const [slug, setSlug] =
|
|
803
|
-
const [isCheckingSlug, setIsCheckingSlug] =
|
|
804
|
-
const [slugAvailable, setSlugAvailable] =
|
|
805
|
-
const [isSubmitting, setIsSubmitting] =
|
|
957
|
+
const [web3Name, setWeb3Name] = useState7(initialOrgName);
|
|
958
|
+
const [username, setUsername] = useState7(resolvedInitialUsername);
|
|
959
|
+
const [slug, setSlug] = useState7(initialSlug);
|
|
960
|
+
const [isCheckingSlug, setIsCheckingSlug] = useState7(false);
|
|
961
|
+
const [slugAvailable, setSlugAvailable] = useState7(null);
|
|
962
|
+
const [isSubmitting, setIsSubmitting] = useState7(false);
|
|
806
963
|
useEffect4(() => {
|
|
807
964
|
setWeb3Name(initialOrgName || "");
|
|
808
965
|
setSlug(initialSlug || "");
|
|
@@ -872,7 +1029,7 @@ var UniversalOrganizationPage = ({
|
|
|
872
1029
|
};
|
|
873
1030
|
const hasChanges = web3Name !== initialOrgName || slug !== initialSlug || username !== resolvedInitialUsername;
|
|
874
1031
|
const isSaveDisabled = isSubmitting || isReadOnly || isCheckingSlug || !hasChanges || web3Name.length < 3 || slug.length < 3 || username.length < 3 || slug !== initialSlug && slugAvailable === false;
|
|
875
|
-
return /* @__PURE__ */
|
|
1032
|
+
return /* @__PURE__ */ React12.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-5xl rounded-2xl p-6 bg-white fade-in duration-300" }, /* @__PURE__ */ React12.createElement(ManagedToaster, null), /* @__PURE__ */ React12.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ React12.createElement("div", null, /* @__PURE__ */ React12.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, "Public Profile"), /* @__PURE__ */ React12.createElement("p", { className: "text-xs text-neutral-500" }, "Manage your financial payment handle identifiers and global public cryptographic signature identity details.")), 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: CircleLock02Icon, 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(
|
|
876
1033
|
TextInput,
|
|
877
1034
|
{
|
|
878
1035
|
label: "Display Name",
|
|
@@ -882,7 +1039,7 @@ var UniversalOrganizationPage = ({
|
|
|
882
1039
|
placeholder: "Sovereign User",
|
|
883
1040
|
maxLength: 50
|
|
884
1041
|
}
|
|
885
|
-
), /* @__PURE__ */
|
|
1042
|
+
), /* @__PURE__ */ React12.createElement(
|
|
886
1043
|
TextInput,
|
|
887
1044
|
{
|
|
888
1045
|
label: "Digital Identity",
|
|
@@ -892,7 +1049,7 @@ var UniversalOrganizationPage = ({
|
|
|
892
1049
|
placeholder: "sovereignuser",
|
|
893
1050
|
maxLength: 30
|
|
894
1051
|
}
|
|
895
|
-
), /* @__PURE__ */
|
|
1052
|
+
), /* @__PURE__ */ React12.createElement("div", { className: "space-y-1.5 relative w-full" }, /* @__PURE__ */ React12.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block" }, "Wallet Username"), /* @__PURE__ */ React12.createElement("div", { className: "flex items-center relative w-full border-b border-neutral-100 focus-within:border-black transition-all duration-300" }, /* @__PURE__ */ React12.createElement(
|
|
896
1053
|
"input",
|
|
897
1054
|
{
|
|
898
1055
|
type: "text",
|
|
@@ -904,7 +1061,7 @@ var UniversalOrganizationPage = ({
|
|
|
904
1061
|
className: "w-full px-2 py-3 text-sm bg-transparent text-black outline-none disabled:opacity-50 disabled:cursor-not-allowed",
|
|
905
1062
|
placeholder: "sovereign-user-handle"
|
|
906
1063
|
}
|
|
907
|
-
), /* @__PURE__ */
|
|
1064
|
+
), /* @__PURE__ */ React12.createElement("span", { className: "text-neutral-400 text-sm py-3 pr-8 shrink-0 whitespace-nowrap" }, slugPrefixUrl), /* @__PURE__ */ React12.createElement("div", { className: "absolute right-2 top-1/2 -translate-y-1/2" }, isCheckingSlug && /* @__PURE__ */ React12.createElement(InputSpinner2, null), !isCheckingSlug && !isReadOnly && slug !== initialSlug && slug.length >= 3 && slugAvailable === false && /* @__PURE__ */ React12.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-red-100" }, /* @__PURE__ */ React12.createElement("svg", { className: "w-2 h-2 text-red-600", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React12.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__ */ React12.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-green-100" }, /* @__PURE__ */ React12.createElement("svg", { className: "w-2 h-2 text-green-600", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React12.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__ */ React12.createElement("div", { className: "pt-8 mt-2 flex items-center gap-4" }, /* @__PURE__ */ React12.createElement(
|
|
908
1065
|
ThreeDActionButton,
|
|
909
1066
|
{
|
|
910
1067
|
type: "submit",
|
|
@@ -913,7 +1070,7 @@ var UniversalOrganizationPage = ({
|
|
|
913
1070
|
className: "min-w-32"
|
|
914
1071
|
},
|
|
915
1072
|
"Save Changes"
|
|
916
|
-
), hasChanges && !isSubmitting && !isReadOnly && /* @__PURE__ */
|
|
1073
|
+
), hasChanges && !isSubmitting && !isReadOnly && /* @__PURE__ */ React12.createElement(
|
|
917
1074
|
"button",
|
|
918
1075
|
{
|
|
919
1076
|
type: "button",
|
|
@@ -929,13 +1086,13 @@ var UniversalOrganizationPage = ({
|
|
|
929
1086
|
};
|
|
930
1087
|
|
|
931
1088
|
// src/components/UniversalProfileSettings.tsx
|
|
932
|
-
import
|
|
1089
|
+
import React13, { useState as useState8, useEffect as useEffect5 } from "react";
|
|
933
1090
|
import toast3 from "react-hot-toast";
|
|
934
|
-
import { HugeiconsIcon as
|
|
1091
|
+
import { HugeiconsIcon as HugeiconsIcon7 } from "@hugeicons/react";
|
|
935
1092
|
import {
|
|
936
1093
|
CircleLock02Icon as CircleLock02Icon2,
|
|
937
1094
|
CancelCircleIcon,
|
|
938
|
-
Loading03Icon as
|
|
1095
|
+
Loading03Icon as Loading03Icon3,
|
|
939
1096
|
LockKeyIcon
|
|
940
1097
|
} from "@hugeicons/core-free-icons";
|
|
941
1098
|
var UniversalProfileSettings = ({
|
|
@@ -951,14 +1108,14 @@ var UniversalProfileSettings = ({
|
|
|
951
1108
|
onSavePin,
|
|
952
1109
|
onSaveProfile
|
|
953
1110
|
}) => {
|
|
954
|
-
const [firstName, setFirstName] =
|
|
955
|
-
const [lastName, setLastName] =
|
|
956
|
-
const [isSubmitting, setIsSubmitting] =
|
|
957
|
-
const [isPinModalOpen, setIsPinModalOpen] =
|
|
958
|
-
const [oldPin, setOldPin] =
|
|
959
|
-
const [newPin, setNewPin] =
|
|
960
|
-
const [confirmPin, setConfirmPin] =
|
|
961
|
-
const [isPinSubmitting, setIsPinSubmitting] =
|
|
1111
|
+
const [firstName, setFirstName] = useState8(initialFirstName);
|
|
1112
|
+
const [lastName, setLastName] = useState8(initialLastName);
|
|
1113
|
+
const [isSubmitting, setIsSubmitting] = useState8(false);
|
|
1114
|
+
const [isPinModalOpen, setIsPinModalOpen] = useState8(false);
|
|
1115
|
+
const [oldPin, setOldPin] = useState8("");
|
|
1116
|
+
const [newPin, setNewPin] = useState8("");
|
|
1117
|
+
const [confirmPin, setConfirmPin] = useState8("");
|
|
1118
|
+
const [isPinSubmitting, setIsPinSubmitting] = useState8(false);
|
|
962
1119
|
useEffect5(() => {
|
|
963
1120
|
setFirstName(initialFirstName || "");
|
|
964
1121
|
setLastName(initialLastName || "");
|
|
@@ -1025,7 +1182,7 @@ var UniversalProfileSettings = ({
|
|
|
1025
1182
|
};
|
|
1026
1183
|
const hasChanges = firstName !== initialFirstName || lastName !== initialLastName;
|
|
1027
1184
|
const isSaveDisabled = isSubmitting || isReadOnly || !hasChanges || firstName.trim().length === 0 || lastName.trim().length === 0;
|
|
1028
|
-
return /* @__PURE__ */
|
|
1185
|
+
return /* @__PURE__ */ React13.createElement("div", { className: "flex flex-col max-w-5xl rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300" }, /* @__PURE__ */ React13.createElement(ManagedToaster, null), /* @__PURE__ */ React13.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ React13.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React13.createElement("h1", { className: "text-black text-xl mb-1 truncate tracking-tight" }, "Personal Settings"), /* @__PURE__ */ React13.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your personal account profile.")), isReadOnly && /* @__PURE__ */ React13.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-100 text-neutral-400 rounded-full shrink-0" }, /* @__PURE__ */ React13.createElement(HugeiconsIcon7, { icon: CircleLock02Icon2, size: 18, className: "text-current" }))), bannerProps && /* @__PURE__ */ React13.createElement(Banner, { ...bannerProps }), /* @__PURE__ */ React13.createElement("div", { className: "w-full max-w-5xl" }, /* @__PURE__ */ React13.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ React13.createElement("div", { className: "flex flex-col sm:flex-row gap-6" }, /* @__PURE__ */ React13.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React13.createElement(
|
|
1029
1186
|
TextInput,
|
|
1030
1187
|
{
|
|
1031
1188
|
label: "First Name",
|
|
@@ -1034,7 +1191,7 @@ var UniversalProfileSettings = ({
|
|
|
1034
1191
|
disabled: isReadOnly || isSubmitting,
|
|
1035
1192
|
placeholder: "System"
|
|
1036
1193
|
}
|
|
1037
|
-
)), /* @__PURE__ */
|
|
1194
|
+
)), /* @__PURE__ */ React13.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React13.createElement(
|
|
1038
1195
|
TextInput,
|
|
1039
1196
|
{
|
|
1040
1197
|
label: "Last Name",
|
|
@@ -1043,7 +1200,7 @@ var UniversalProfileSettings = ({
|
|
|
1043
1200
|
disabled: isReadOnly || isSubmitting,
|
|
1044
1201
|
placeholder: "Admin"
|
|
1045
1202
|
}
|
|
1046
|
-
))), /* @__PURE__ */
|
|
1203
|
+
))), /* @__PURE__ */ React13.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ React13.createElement(
|
|
1047
1204
|
TextInput,
|
|
1048
1205
|
{
|
|
1049
1206
|
label: "Email ID",
|
|
@@ -1052,7 +1209,7 @@ var UniversalProfileSettings = ({
|
|
|
1052
1209
|
},
|
|
1053
1210
|
disabled: true
|
|
1054
1211
|
}
|
|
1055
|
-
), /* @__PURE__ */
|
|
1212
|
+
), /* @__PURE__ */ React13.createElement("p", { className: "text-[11px] text-neutral-500 mt-1 truncate" }, "To change your email address, please contact support.")), /* @__PURE__ */ React13.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between pt-8 mt-2 gap-6 sm:gap-4" }, /* @__PURE__ */ React13.createElement("div", { className: "flex items-center gap-6 min-w-0" }, /* @__PURE__ */ React13.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React13.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block truncate" }, "Account Status"), /* @__PURE__ */ React13.createElement("span", { className: "text-xs text-black block truncate" }, accountStatus)), /* @__PURE__ */ React13.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React13.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block truncate" }, "Member Since"), /* @__PURE__ */ React13.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__ */ React13.createElement("div", { className: "min-w-0 pl-4" }, /* @__PURE__ */ React13.createElement(
|
|
1056
1213
|
"button",
|
|
1057
1214
|
{
|
|
1058
1215
|
type: "button",
|
|
@@ -1060,8 +1217,8 @@ var UniversalProfileSettings = ({
|
|
|
1060
1217
|
"aria-label": "PIN Settings",
|
|
1061
1218
|
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"
|
|
1062
1219
|
},
|
|
1063
|
-
/* @__PURE__ */
|
|
1064
|
-
))), /* @__PURE__ */
|
|
1220
|
+
/* @__PURE__ */ React13.createElement(HugeiconsIcon7, { icon: LockKeyIcon, size: 17, className: "text-black" })
|
|
1221
|
+
))), /* @__PURE__ */ React13.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__ */ React13.createElement(
|
|
1065
1222
|
"button",
|
|
1066
1223
|
{
|
|
1067
1224
|
type: "button",
|
|
@@ -1072,7 +1229,7 @@ var UniversalProfileSettings = ({
|
|
|
1072
1229
|
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"
|
|
1073
1230
|
},
|
|
1074
1231
|
"Cancel"
|
|
1075
|
-
), /* @__PURE__ */
|
|
1232
|
+
), /* @__PURE__ */ React13.createElement(
|
|
1076
1233
|
ThreeDActionButton,
|
|
1077
1234
|
{
|
|
1078
1235
|
type: "submit",
|
|
@@ -1081,7 +1238,7 @@ var UniversalProfileSettings = ({
|
|
|
1081
1238
|
className: "min-w-32 w-full sm:w-auto"
|
|
1082
1239
|
},
|
|
1083
1240
|
"Save Changes"
|
|
1084
|
-
))))), isPinModalOpen && /* @__PURE__ */
|
|
1241
|
+
))))), isPinModalOpen && /* @__PURE__ */ React13.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React13.createElement("div", { className: "absolute inset-0 bg-black/40", onClick: closePinModal }), /* @__PURE__ */ React13.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__ */ React13.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ React13.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, hasPin ? "Change PIN" : "Create PIN"), /* @__PURE__ */ React13.createElement("button", { onClick: closePinModal, disabled: isPinSubmitting, className: "text-neutral-400 hover:text-black transition-colors outline-none disabled:opacity-50" }, /* @__PURE__ */ React13.createElement(HugeiconsIcon7, { icon: CancelCircleIcon, size: 18 }))), /* @__PURE__ */ React13.createElement("div", { className: "p-6" }, isPinLoading ? /* @__PURE__ */ React13.createElement("div", { className: "flex flex-col items-center justify-center py-10" }, /* @__PURE__ */ React13.createElement(HugeiconsIcon7, { icon: Loading03Icon3, size: 28, className: "animate-spin text-neutral-400 mb-4" })) : /* @__PURE__ */ React13.createElement("form", { onSubmit: handlePinSubmit, className: "flex flex-col gap-6" }, hasPin && /* @__PURE__ */ React13.createElement(
|
|
1085
1242
|
TextInput,
|
|
1086
1243
|
{
|
|
1087
1244
|
type: "password",
|
|
@@ -1092,7 +1249,7 @@ var UniversalProfileSettings = ({
|
|
|
1092
1249
|
onChange: (val) => handlePinInput(val, setOldPin),
|
|
1093
1250
|
placeholder: "\u2022\u2022\u2022\u2022"
|
|
1094
1251
|
}
|
|
1095
|
-
), /* @__PURE__ */
|
|
1252
|
+
), /* @__PURE__ */ React13.createElement(
|
|
1096
1253
|
TextInput,
|
|
1097
1254
|
{
|
|
1098
1255
|
type: "password",
|
|
@@ -1103,7 +1260,7 @@ var UniversalProfileSettings = ({
|
|
|
1103
1260
|
onChange: (val) => handlePinInput(val, setNewPin),
|
|
1104
1261
|
placeholder: "\u2022\u2022\u2022\u2022"
|
|
1105
1262
|
}
|
|
1106
|
-
), /* @__PURE__ */
|
|
1263
|
+
), /* @__PURE__ */ React13.createElement(
|
|
1107
1264
|
TextInput,
|
|
1108
1265
|
{
|
|
1109
1266
|
type: "password",
|
|
@@ -1114,7 +1271,7 @@ var UniversalProfileSettings = ({
|
|
|
1114
1271
|
onChange: (val) => handlePinInput(val, setConfirmPin),
|
|
1115
1272
|
placeholder: "\u2022\u2022\u2022\u2022"
|
|
1116
1273
|
}
|
|
1117
|
-
), /* @__PURE__ */
|
|
1274
|
+
), /* @__PURE__ */ React13.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React13.createElement(
|
|
1118
1275
|
ThreeDActionButton,
|
|
1119
1276
|
{
|
|
1120
1277
|
type: "submit",
|
|
@@ -1127,14 +1284,14 @@ var UniversalProfileSettings = ({
|
|
|
1127
1284
|
};
|
|
1128
1285
|
|
|
1129
1286
|
// src/components/UniversalErrorView.tsx
|
|
1130
|
-
import
|
|
1131
|
-
import { HugeiconsIcon as
|
|
1287
|
+
import React15 from "react";
|
|
1288
|
+
import { HugeiconsIcon as HugeiconsIcon9 } from "@hugeicons/react";
|
|
1132
1289
|
import { ConfusedIcon } from "@hugeicons/core-free-icons";
|
|
1133
1290
|
|
|
1134
1291
|
// src/components/PageSpinner.tsx
|
|
1135
|
-
import
|
|
1136
|
-
import { HugeiconsIcon as
|
|
1137
|
-
import { Loading03Icon as
|
|
1292
|
+
import React14 from "react";
|
|
1293
|
+
import { HugeiconsIcon as HugeiconsIcon8 } from "@hugeicons/react";
|
|
1294
|
+
import { Loading03Icon as Loading03Icon4 } from "@hugeicons/core-free-icons";
|
|
1138
1295
|
var PageSpinner = ({
|
|
1139
1296
|
className = "",
|
|
1140
1297
|
iconClassName = "text-black",
|
|
@@ -1142,10 +1299,10 @@ var PageSpinner = ({
|
|
|
1142
1299
|
}) => {
|
|
1143
1300
|
return (
|
|
1144
1301
|
// z-[100] ensures it sits above absolute headers and modals
|
|
1145
|
-
/* @__PURE__ */
|
|
1146
|
-
|
|
1302
|
+
/* @__PURE__ */ React14.createElement("div", { className: `fixed inset-0 z-100 flex flex-col items-center justify-center w-full h-full pointer-events-none ${className}` }, /* @__PURE__ */ React14.createElement(
|
|
1303
|
+
HugeiconsIcon8,
|
|
1147
1304
|
{
|
|
1148
|
-
icon:
|
|
1305
|
+
icon: Loading03Icon4,
|
|
1149
1306
|
size,
|
|
1150
1307
|
className: `animate-spin mb-4 ${iconClassName}`
|
|
1151
1308
|
}
|
|
@@ -1165,7 +1322,7 @@ var UniversalErrorView = ({
|
|
|
1165
1322
|
returnLabel = "Return to Workspace"
|
|
1166
1323
|
}) => {
|
|
1167
1324
|
if (isBooting || isLoading && !activeData) {
|
|
1168
|
-
return /* @__PURE__ */
|
|
1325
|
+
return /* @__PURE__ */ React15.createElement("div", { className: "flex items-center justify-center h-screen w-full bg-white" }, /* @__PURE__ */ React15.createElement(PageSpinner, null));
|
|
1169
1326
|
}
|
|
1170
1327
|
if (!isLoading && (!activeData || activeError)) {
|
|
1171
1328
|
const errorString = typeof activeError === "string" ? activeError : JSON.stringify(activeError || "");
|
|
@@ -1184,7 +1341,7 @@ var UniversalErrorView = ({
|
|
|
1184
1341
|
title = "Access Restricted";
|
|
1185
1342
|
description = apiMessage || `You have insufficient permissions to view this ${envName}. Please contact your administrator.`;
|
|
1186
1343
|
}
|
|
1187
|
-
return /* @__PURE__ */
|
|
1344
|
+
return /* @__PURE__ */ React15.createElement("div", { className: "flex flex-col items-center justify-center h-screen w-full px-4 animate-in fade-in duration-500" }, /* @__PURE__ */ React15.createElement("div", { className: "mb-4 flex justify-center" }, /* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: IconComponent, size: 48, className: "text-neutral-300" })), /* @__PURE__ */ React15.createElement("h2", { className: "text-lg text-black tracking-tight " }, title), /* @__PURE__ */ React15.createElement("p", { className: "text-xs mt-2 mb-8 text-neutral-500 max-w-sm text-center leading-relaxed" }, description), /* @__PURE__ */ React15.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-3 w-full justify-center sm:w-auto" }, isNotFoundError || isPermissionError ? /* @__PURE__ */ React15.createElement(
|
|
1188
1345
|
"button",
|
|
1189
1346
|
{
|
|
1190
1347
|
onClick: () => window.location.href = returnUrl,
|
|
@@ -1193,14 +1350,14 @@ var UniversalErrorView = ({
|
|
|
1193
1350
|
returnLabel
|
|
1194
1351
|
) : (
|
|
1195
1352
|
// Soft errors (Network timeouts) allow them to retry or optionally retreat
|
|
1196
|
-
/* @__PURE__ */
|
|
1353
|
+
/* @__PURE__ */ React15.createElement(React15.Fragment, null, envName.toLowerCase().includes("application") && /* @__PURE__ */ React15.createElement(
|
|
1197
1354
|
"button",
|
|
1198
1355
|
{
|
|
1199
1356
|
onClick: () => window.location.href = returnUrl,
|
|
1200
1357
|
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 "
|
|
1201
1358
|
},
|
|
1202
1359
|
"Back Home"
|
|
1203
|
-
), /* @__PURE__ */
|
|
1360
|
+
), /* @__PURE__ */ React15.createElement(
|
|
1204
1361
|
"button",
|
|
1205
1362
|
{
|
|
1206
1363
|
onClick: onRetry,
|
|
@@ -1215,13 +1372,13 @@ var UniversalErrorView = ({
|
|
|
1215
1372
|
};
|
|
1216
1373
|
|
|
1217
1374
|
// src/components/UniversalTransactionPage.tsx
|
|
1218
|
-
import
|
|
1219
|
-
import { HugeiconsIcon as
|
|
1375
|
+
import React16, { useState as useState9, useEffect as useEffect6, useRef as useRef3 } from "react";
|
|
1376
|
+
import { HugeiconsIcon as HugeiconsIcon10 } from "@hugeicons/react";
|
|
1220
1377
|
import toast4 from "react-hot-toast";
|
|
1221
1378
|
import {
|
|
1222
|
-
ArrowLeft01Icon,
|
|
1379
|
+
ArrowLeft01Icon as ArrowLeft01Icon2,
|
|
1223
1380
|
ArrowRight01Icon,
|
|
1224
|
-
Loading03Icon as
|
|
1381
|
+
Loading03Icon as Loading03Icon5,
|
|
1225
1382
|
ArrowDownRight01Icon,
|
|
1226
1383
|
ArrowUpRight01Icon,
|
|
1227
1384
|
Search01Icon,
|
|
@@ -1229,7 +1386,7 @@ import {
|
|
|
1229
1386
|
ListSettingIcon,
|
|
1230
1387
|
CancelCircleIcon as CancelCircleIcon2
|
|
1231
1388
|
} from "@hugeicons/core-free-icons";
|
|
1232
|
-
var PageSpinner2 = () => /* @__PURE__ */
|
|
1389
|
+
var PageSpinner2 = () => /* @__PURE__ */ React16.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: Loading03Icon5, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
1233
1390
|
var formatDate = (dateInput) => {
|
|
1234
1391
|
const d = new Date(dateInput);
|
|
1235
1392
|
const day = d.getDate();
|
|
@@ -1264,12 +1421,12 @@ var UniversalTransactionPage = ({
|
|
|
1264
1421
|
onReportTransaction,
|
|
1265
1422
|
onGenerateReceipt
|
|
1266
1423
|
}) => {
|
|
1267
|
-
const [selectedTransaction, setSelectedTransaction] =
|
|
1268
|
-
const [isGeneratingReceipt, setIsGeneratingReceipt] =
|
|
1269
|
-
const [localSearchQuery, setLocalSearchQuery] =
|
|
1270
|
-
const [isTyping, setIsTyping] =
|
|
1271
|
-
const [isDirectionModalOpen, setIsDirectionModalOpen] =
|
|
1272
|
-
const [isTypeModalOpen, setIsTypeModalOpen] =
|
|
1424
|
+
const [selectedTransaction, setSelectedTransaction] = useState9(null);
|
|
1425
|
+
const [isGeneratingReceipt, setIsGeneratingReceipt] = useState9(false);
|
|
1426
|
+
const [localSearchQuery, setLocalSearchQuery] = useState9(searchQuery);
|
|
1427
|
+
const [isTyping, setIsTyping] = useState9(false);
|
|
1428
|
+
const [isDirectionModalOpen, setIsDirectionModalOpen] = useState9(false);
|
|
1429
|
+
const [isTypeModalOpen, setIsTypeModalOpen] = useState9(false);
|
|
1273
1430
|
const directionDropdownRef = useRef3(null);
|
|
1274
1431
|
const typeDropdownRef = useRef3(null);
|
|
1275
1432
|
useEffect6(() => {
|
|
@@ -1315,7 +1472,7 @@ var UniversalTransactionPage = ({
|
|
|
1315
1472
|
}
|
|
1316
1473
|
};
|
|
1317
1474
|
const isListLoading = isLoading || isTyping;
|
|
1318
|
-
return /* @__PURE__ */
|
|
1475
|
+
return /* @__PURE__ */ React16.createElement("div", { className: "flex flex-col gap-6 animate-in max-w-5xl fade-in duration-300" }, /* @__PURE__ */ React16.createElement(ManagedToaster, null), !hideControls && /* @__PURE__ */ React16.createElement("div", { className: "flex flex-col sm:flex-row items-center justify-between gap-4 w-full" }, /* @__PURE__ */ React16.createElement("div", { className: "relative w-full sm:w-96" }, /* @__PURE__ */ React16.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: Search01Icon, size: 16, className: "text-neutral-400" })), /* @__PURE__ */ React16.createElement(
|
|
1319
1476
|
"input",
|
|
1320
1477
|
{
|
|
1321
1478
|
type: "text",
|
|
@@ -1324,53 +1481,53 @@ var UniversalTransactionPage = ({
|
|
|
1324
1481
|
onChange: (e) => setLocalSearchQuery(e.target.value),
|
|
1325
1482
|
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"
|
|
1326
1483
|
}
|
|
1327
|
-
)), /* @__PURE__ */
|
|
1484
|
+
)), /* @__PURE__ */ React16.createElement("div", { className: "flex items-center gap-3 w-auto pb-0" }, /* @__PURE__ */ React16.createElement(
|
|
1328
1485
|
"button",
|
|
1329
1486
|
{
|
|
1330
1487
|
onClick: () => setIsDirectionModalOpen(true),
|
|
1331
1488
|
"aria-label": "Filter by payment type",
|
|
1332
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"
|
|
1333
1490
|
},
|
|
1334
|
-
/* @__PURE__ */
|
|
1335
|
-
), /* @__PURE__ */
|
|
1491
|
+
/* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: SearchList02Icon, size: 16 })
|
|
1492
|
+
), /* @__PURE__ */ React16.createElement(
|
|
1336
1493
|
"button",
|
|
1337
1494
|
{
|
|
1338
1495
|
onClick: () => setIsTypeModalOpen(true),
|
|
1339
1496
|
"aria-label": "Filter by transaction type",
|
|
1340
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"
|
|
1341
1498
|
},
|
|
1342
|
-
/* @__PURE__ */
|
|
1343
|
-
))), /* @__PURE__ */
|
|
1499
|
+
/* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: ListSettingIcon, size: 16 })
|
|
1500
|
+
))), /* @__PURE__ */ React16.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-white w-full" }, /* @__PURE__ */ React16.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, /* @__PURE__ */ React16.createElement("div", null, /* @__PURE__ */ React16.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, headerTitle), headerDescription && /* @__PURE__ */ React16.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription))), /* @__PURE__ */ React16.createElement("div", { className: "w-full overflow-hidden" }, isListLoading ? /* @__PURE__ */ React16.createElement(PageSpinner2, null) : /* @__PURE__ */ React16.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ React16.createElement("div", null, transactions.length === 0 ? /* @__PURE__ */ React16.createElement("p", { className: "text-xs text-neutral-400 py-6 text-center" }, "No transactions found") : transactions.map((tx) => /* @__PURE__ */ React16.createElement(
|
|
1344
1501
|
"div",
|
|
1345
1502
|
{
|
|
1346
1503
|
key: tx.id,
|
|
1347
1504
|
onClick: () => setSelectedTransaction(tx),
|
|
1348
1505
|
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"
|
|
1349
1506
|
},
|
|
1350
|
-
/* @__PURE__ */
|
|
1351
|
-
/* @__PURE__ */
|
|
1352
|
-
))), !hidePagination && /* @__PURE__ */
|
|
1507
|
+
/* @__PURE__ */ React16.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ React16.createElement("div", { className: `w-10 h-10 shrink-0 rounded-full flex items-center justify-center bg-neutral-100 text-black` }, /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: tx.direction === "CREDIT" ? ArrowDownRight01Icon : ArrowUpRight01Icon, size: 18 })), /* @__PURE__ */ React16.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-1" }, /* @__PURE__ */ React16.createElement("p", { className: "text-[13px] text-black truncate" }, getDisplayName(tx)), /* @__PURE__ */ React16.createElement("p", { className: `text-[13px] text-neutral-500 truncate transition-all duration-300 ${hideBalanceAmounts ? "blur-sm opacity-40 select-none" : ""}` }, tx.direction === "CREDIT" ? "+" : "-", tx.amount, " ", tx.currency))),
|
|
1508
|
+
/* @__PURE__ */ React16.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ React16.createElement("span", { className: "text-[11px] text-neutral-400" }, formatDate(tx.createdAt)), /* @__PURE__ */ React16.createElement("span", { className: "text-[11px] text-neutral-400 capitalize" }, tx.direction.toLowerCase()))
|
|
1509
|
+
))), !hidePagination && /* @__PURE__ */ React16.createElement("div", { className: "flex items-center justify-between pt-6 mt-2 " }, /* @__PURE__ */ React16.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", totalPages === 0 ? 1 : totalPages), /* @__PURE__ */ React16.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React16.createElement(
|
|
1353
1510
|
"button",
|
|
1354
1511
|
{
|
|
1355
1512
|
onClick: () => onPageChange(currentPage - 1),
|
|
1356
1513
|
disabled: currentPage <= 1 || isListLoading,
|
|
1357
1514
|
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"
|
|
1358
1515
|
},
|
|
1359
|
-
/* @__PURE__ */
|
|
1360
|
-
), /* @__PURE__ */
|
|
1516
|
+
/* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: ArrowLeft01Icon2, size: 14 })
|
|
1517
|
+
), /* @__PURE__ */ React16.createElement(
|
|
1361
1518
|
"button",
|
|
1362
1519
|
{
|
|
1363
1520
|
onClick: () => onPageChange(currentPage + 1),
|
|
1364
1521
|
disabled: currentPage >= totalPages || isListLoading || totalPages === 0,
|
|
1365
1522
|
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"
|
|
1366
1523
|
},
|
|
1367
|
-
/* @__PURE__ */
|
|
1368
|
-
)))))), selectedTransaction && /* @__PURE__ */
|
|
1524
|
+
/* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: ArrowRight01Icon, size: 14 })
|
|
1525
|
+
)))))), selectedTransaction && /* @__PURE__ */ React16.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React16.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => setSelectedTransaction(null) }), /* @__PURE__ */ React16.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__ */ React16.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ React16.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Details"), /* @__PURE__ */ React16.createElement("button", { onClick: () => setSelectedTransaction(null), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: CancelCircleIcon2, size: 18 }))), /* @__PURE__ */ React16.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6" }, /* @__PURE__ */ React16.createElement("div", { className: "flex flex-col items-center justify-center mb-4" }, /* @__PURE__ */ React16.createElement("div", { className: `w-12 h-12 rounded-full flex items-center justify-center mb-4 bg-neutral-100 text-black` }, /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: selectedTransaction.direction === "CREDIT" ? ArrowDownRight01Icon : ArrowUpRight01Icon, size: 20 })), /* @__PURE__ */ React16.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__ */ React16.createElement("span", { className: "text-[9px] tracking-widest text-neutral-500 px-4 py-1.5 rounded-full bg-neutral-50" }, selectedTransaction.status)), /* @__PURE__ */ React16.createElement("div", { className: "grid grid-cols-1 gap-y-8 gap-x-4 mb-10 mt-6" }, /* @__PURE__ */ React16.createElement("div", null, /* @__PURE__ */ React16.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Reference ID"), /* @__PURE__ */ React16.createElement("span", { className: "text-[13px] text-black break-all" }, selectedTransaction.reference)), /* @__PURE__ */ React16.createElement("div", null, /* @__PURE__ */ React16.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Date & Time"), /* @__PURE__ */ React16.createElement("span", { className: "text-[13px] text-black" }, formatDate(selectedTransaction.createdAt), " at ", formatTime(selectedTransaction.createdAt))), /* @__PURE__ */ React16.createElement("div", null, /* @__PURE__ */ React16.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Transaction Type"), /* @__PURE__ */ React16.createElement("span", { className: "text-[13px] text-black capitalize" }, selectedTransaction.type.replace("_", " ").toLowerCase())), /* @__PURE__ */ React16.createElement("div", null, /* @__PURE__ */ React16.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Flow Direction"), /* @__PURE__ */ React16.createElement("span", { className: "text-[13px] text-black capitalize" }, selectedTransaction.direction.toLowerCase())), selectedTransaction.metadata?.fromAddress && selectedTransaction.metadata?.toAddress && /* @__PURE__ */ React16.createElement("div", null, /* @__PURE__ */ React16.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Transfer Route"), /* @__PURE__ */ React16.createElement("div", { className: "flex items-center gap-2 text-[13px] text-black" }, /* @__PURE__ */ React16.createElement("span", { className: "truncate " }, truncateAddress(String(selectedTransaction.metadata.fromAddress))), /* @__PURE__ */ React16.createElement("span", { className: "text-neutral-400" }, "\u2192"), /* @__PURE__ */ React16.createElement("span", { className: "truncate " }, truncateAddress(String(selectedTransaction.metadata.toAddress))))), selectedTransaction.metadata && Object.entries(selectedTransaction.metadata).map(([key, value]) => {
|
|
1369
1526
|
if (key === "fromAddress" || key === "toAddress") return null;
|
|
1370
1527
|
if (value === null || value === void 0 || typeof value === "object") return null;
|
|
1371
1528
|
const formattedKey = key.replace(/([A-Z])/g, " $1").replace(/^./, (str) => str.toUpperCase());
|
|
1372
|
-
return /* @__PURE__ */
|
|
1373
|
-
})), /* @__PURE__ */
|
|
1529
|
+
return /* @__PURE__ */ React16.createElement("div", { key }, /* @__PURE__ */ React16.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, formattedKey), /* @__PURE__ */ React16.createElement("span", { className: "text-[13px] text-black break-all" }, String(value)));
|
|
1530
|
+
})), /* @__PURE__ */ React16.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React16.createElement(
|
|
1374
1531
|
ThreeDActionButton,
|
|
1375
1532
|
{
|
|
1376
1533
|
onClick: handleGenerateReceipt,
|
|
@@ -1378,14 +1535,14 @@ var UniversalTransactionPage = ({
|
|
|
1378
1535
|
className: "w-full py-3 text-[14px]"
|
|
1379
1536
|
},
|
|
1380
1537
|
"Generate Receipt"
|
|
1381
|
-
), /* @__PURE__ */
|
|
1538
|
+
), /* @__PURE__ */ React16.createElement(
|
|
1382
1539
|
"button",
|
|
1383
1540
|
{
|
|
1384
1541
|
onClick: () => onReportTransaction && onReportTransaction(selectedTransaction),
|
|
1385
1542
|
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"
|
|
1386
1543
|
},
|
|
1387
1544
|
"Report Transaction"
|
|
1388
|
-
), selectedTransaction.type === "WALLET_TRANSACTION" && /* @__PURE__ */
|
|
1545
|
+
), selectedTransaction.type === "WALLET_TRANSACTION" && /* @__PURE__ */ React16.createElement(
|
|
1389
1546
|
"a",
|
|
1390
1547
|
{
|
|
1391
1548
|
href: `https://basescan.org/tx/${selectedTransaction.reference}`,
|
|
@@ -1394,7 +1551,7 @@ var UniversalTransactionPage = ({
|
|
|
1394
1551
|
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"
|
|
1395
1552
|
},
|
|
1396
1553
|
"View in block explorer"
|
|
1397
|
-
))))), isDirectionModalOpen && /* @__PURE__ */
|
|
1554
|
+
))))), isDirectionModalOpen && /* @__PURE__ */ React16.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ React16.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => setIsDirectionModalOpen(false) }), /* @__PURE__ */ React16.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__ */ React16.createElement("div", { className: "p-6 text-center w-full mb-2" }, /* @__PURE__ */ React16.createElement("h3", { className: "text-[14px] text-black tracking-tight" }, "Payment Type")), /* @__PURE__ */ React16.createElement("div", { className: "w-full flex flex-col pl-2 pr-2 gap-1" }, ["ALL", "CREDIT", "DEBIT"].map((option) => /* @__PURE__ */ React16.createElement(
|
|
1398
1555
|
"button",
|
|
1399
1556
|
{
|
|
1400
1557
|
key: option,
|
|
@@ -1404,19 +1561,19 @@ var UniversalTransactionPage = ({
|
|
|
1404
1561
|
},
|
|
1405
1562
|
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"}`
|
|
1406
1563
|
},
|
|
1407
|
-
/* @__PURE__ */
|
|
1408
|
-
))), /* @__PURE__ */
|
|
1564
|
+
/* @__PURE__ */ React16.createElement("span", { className: "truncate pr-2" }, option.charAt(0).toUpperCase() + option.slice(1).toLowerCase())
|
|
1565
|
+
))), /* @__PURE__ */ React16.createElement("div", { className: "w-full flex mt-2 " }, /* @__PURE__ */ React16.createElement(
|
|
1409
1566
|
"button",
|
|
1410
1567
|
{
|
|
1411
1568
|
onClick: () => setIsDirectionModalOpen(false),
|
|
1412
1569
|
className: "w-full py-4 text-[13px] text-neutral-500 hover:text-black transition-colors outline-none "
|
|
1413
1570
|
},
|
|
1414
1571
|
"Cancel"
|
|
1415
|
-
)))), isTypeModalOpen && /* @__PURE__ */
|
|
1572
|
+
)))), isTypeModalOpen && /* @__PURE__ */ React16.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ React16.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => setIsTypeModalOpen(false) }), /* @__PURE__ */ React16.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__ */ React16.createElement("div", { className: "p-6 text-center w-full mb-2" }, /* @__PURE__ */ React16.createElement("h3", { className: "text-[14px] text-black tracking-tight" }, "Transactions Type")), /* @__PURE__ */ React16.createElement("div", { className: "w-full flex flex-col pl-2 pr-2 gap-1" }, [
|
|
1416
1573
|
{ label: "All Transactions", value: "ALL" },
|
|
1417
1574
|
{ label: "Wallet Transactions", value: "WALLET_TRANSACTION" },
|
|
1418
1575
|
{ label: "Card Transactions", value: "CARD_TRANSACTION" }
|
|
1419
|
-
].map((option) => /* @__PURE__ */
|
|
1576
|
+
].map((option) => /* @__PURE__ */ React16.createElement(
|
|
1420
1577
|
"button",
|
|
1421
1578
|
{
|
|
1422
1579
|
key: option.value,
|
|
@@ -1426,8 +1583,8 @@ var UniversalTransactionPage = ({
|
|
|
1426
1583
|
},
|
|
1427
1584
|
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"}`
|
|
1428
1585
|
},
|
|
1429
|
-
/* @__PURE__ */
|
|
1430
|
-
))), /* @__PURE__ */
|
|
1586
|
+
/* @__PURE__ */ React16.createElement("span", { className: "truncate pr-2" }, option.label.charAt(0).toUpperCase() + option.label.slice(1).toLowerCase())
|
|
1587
|
+
))), /* @__PURE__ */ React16.createElement("div", { className: "w-full flex mt-2 " }, /* @__PURE__ */ React16.createElement(
|
|
1431
1588
|
"button",
|
|
1432
1589
|
{
|
|
1433
1590
|
onClick: () => setIsTypeModalOpen(false),
|
|
@@ -1438,8 +1595,8 @@ var UniversalTransactionPage = ({
|
|
|
1438
1595
|
};
|
|
1439
1596
|
|
|
1440
1597
|
// src/components/UniversalHomeView.tsx
|
|
1441
|
-
import
|
|
1442
|
-
import { HugeiconsIcon as
|
|
1598
|
+
import React17, { useState as useState10, useEffect as useEffect7 } from "react";
|
|
1599
|
+
import { HugeiconsIcon as HugeiconsIcon11 } from "@hugeicons/react";
|
|
1443
1600
|
import { ViewOffSlashIcon, ViewIcon } from "@hugeicons/core-free-icons";
|
|
1444
1601
|
var UniversalHomeView = ({
|
|
1445
1602
|
balanceLabel = "Your Balance",
|
|
@@ -1449,8 +1606,8 @@ var UniversalHomeView = ({
|
|
|
1449
1606
|
secondaryAction,
|
|
1450
1607
|
transactionsProps
|
|
1451
1608
|
}) => {
|
|
1452
|
-
const [displayAmount, setDisplayAmount] =
|
|
1453
|
-
const [isBalanceHidden, setIsBalanceHidden] =
|
|
1609
|
+
const [displayAmount, setDisplayAmount] = useState10("0.00");
|
|
1610
|
+
const [isBalanceHidden, setIsBalanceHidden] = useState10(false);
|
|
1454
1611
|
useEffect7(() => {
|
|
1455
1612
|
const target = parseFloat(balanceAmount.replace(/,/g, ""));
|
|
1456
1613
|
if (isNaN(target)) {
|
|
@@ -1480,29 +1637,29 @@ var UniversalHomeView = ({
|
|
|
1480
1637
|
requestAnimationFrame(step);
|
|
1481
1638
|
}, [balanceAmount]);
|
|
1482
1639
|
const [intPart, decPart] = displayAmount.includes(".") ? displayAmount.split(".") : [displayAmount, "00"];
|
|
1483
|
-
return /* @__PURE__ */
|
|
1640
|
+
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("div", { className: "relative flex items-start justify-between w-full pt-4 pb-8" }, /* @__PURE__ */ React17.createElement("div", { className: "flex flex-col items-start text-left z-10 w-full" }, /* @__PURE__ */ React17.createElement("div", { className: "flex items-center gap-2 mb-1.5" }, /* @__PURE__ */ React17.createElement("span", { className: "text-[12px] sm:text-[13px] text-neutral-500" }, balanceLabel), /* @__PURE__ */ React17.createElement(
|
|
1484
1641
|
"button",
|
|
1485
1642
|
{
|
|
1486
1643
|
onClick: () => setIsBalanceHidden(!isBalanceHidden),
|
|
1487
1644
|
className: "text-neutral-400 hover:text-black transition-colors outline-none"
|
|
1488
1645
|
},
|
|
1489
|
-
/* @__PURE__ */
|
|
1490
|
-
)), /* @__PURE__ */
|
|
1646
|
+
/* @__PURE__ */ React17.createElement(HugeiconsIcon11, { icon: isBalanceHidden ? ViewIcon : ViewOffSlashIcon, size: 14 })
|
|
1647
|
+
)), /* @__PURE__ */ React17.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__ */ React17.createElement("span", { className: "text-xl sm:text-2xl text-neutral-400 mr-1" }, balanceCurrency), intPart, /* @__PURE__ */ React17.createElement("span", { className: "text-xl sm:text-2xl text-neutral-400" }, ".", decPart)), /* @__PURE__ */ React17.createElement("div", { className: "flex items-center gap-3" }, primaryAction && /* @__PURE__ */ React17.createElement(
|
|
1491
1648
|
ThreeDActionButton,
|
|
1492
1649
|
{
|
|
1493
1650
|
onClick: primaryAction.onClick,
|
|
1494
1651
|
className: "px-6 py-2.5 sm:px-8 sm:py-2.5"
|
|
1495
1652
|
},
|
|
1496
|
-
/* @__PURE__ */
|
|
1497
|
-
), secondaryAction && /* @__PURE__ */
|
|
1653
|
+
/* @__PURE__ */ React17.createElement("span", { className: "flex items-center gap-1.5 text-[13px] tracking-wide " }, primaryAction.label, primaryAction.icon && /* @__PURE__ */ React17.createElement(HugeiconsIcon11, { icon: primaryAction.icon, size: 16 }))
|
|
1654
|
+
), secondaryAction && /* @__PURE__ */ React17.createElement(
|
|
1498
1655
|
"button",
|
|
1499
1656
|
{
|
|
1500
1657
|
onClick: secondaryAction.onClick,
|
|
1501
1658
|
className: "flex items-center gap-1.5 px-6 py-2.5 sm:px-8 sm:py-2.5 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 transition-colors outline-none"
|
|
1502
1659
|
},
|
|
1503
|
-
/* @__PURE__ */
|
|
1504
|
-
secondaryAction.icon && /* @__PURE__ */
|
|
1505
|
-
)))), /* @__PURE__ */
|
|
1660
|
+
/* @__PURE__ */ React17.createElement("span", { className: "text-[13px] tracking-wide " }, secondaryAction.label),
|
|
1661
|
+
secondaryAction.icon && /* @__PURE__ */ React17.createElement(HugeiconsIcon11, { icon: secondaryAction.icon, size: 16 })
|
|
1662
|
+
)))), /* @__PURE__ */ React17.createElement("div", { className: "w-full mt-2" }, /* @__PURE__ */ React17.createElement(
|
|
1506
1663
|
UniversalTransactionPage,
|
|
1507
1664
|
{
|
|
1508
1665
|
...transactionsProps,
|
|
@@ -1514,18 +1671,18 @@ var UniversalHomeView = ({
|
|
|
1514
1671
|
};
|
|
1515
1672
|
|
|
1516
1673
|
// src/components/UniversalWalletPage.tsx
|
|
1517
|
-
import
|
|
1674
|
+
import React18, { useState as useState11 } from "react";
|
|
1518
1675
|
import toast5 from "react-hot-toast";
|
|
1519
|
-
import { HugeiconsIcon as
|
|
1676
|
+
import { HugeiconsIcon as HugeiconsIcon12 } from "@hugeicons/react";
|
|
1520
1677
|
import {
|
|
1521
1678
|
Search01Icon as Search01Icon2,
|
|
1522
1679
|
CancelCircleIcon as CancelCircleIcon3,
|
|
1523
|
-
Loading03Icon as
|
|
1680
|
+
Loading03Icon as Loading03Icon6
|
|
1524
1681
|
} from "@hugeicons/core-free-icons";
|
|
1525
|
-
var PageSpinner3 = () => /* @__PURE__ */
|
|
1682
|
+
var PageSpinner3 = () => /* @__PURE__ */ React18.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Loading03Icon6, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
1526
1683
|
var WalletLogo = ({ src, alt, sizeClass = "w-10 h-10" }) => {
|
|
1527
|
-
const [isLoaded, setIsLoaded] =
|
|
1528
|
-
return /* @__PURE__ */
|
|
1684
|
+
const [isLoaded, setIsLoaded] = useState11(false);
|
|
1685
|
+
return /* @__PURE__ */ React18.createElement("div", { className: `relative shrink-0 rounded-full bg-neutral-100 flex items-center justify-center overflow-hidden ${sizeClass}` }, !isLoaded && /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Loading03Icon6, size: 16, className: "animate-spin text-neutral-400 absolute" }), /* @__PURE__ */ React18.createElement(
|
|
1529
1686
|
"img",
|
|
1530
1687
|
{
|
|
1531
1688
|
src,
|
|
@@ -1547,8 +1704,8 @@ var UniversalWalletPage = ({
|
|
|
1547
1704
|
onDownloadPayId,
|
|
1548
1705
|
onCopyAddress
|
|
1549
1706
|
}) => {
|
|
1550
|
-
const [selectedWallet, setSelectedWallet] =
|
|
1551
|
-
const [localSearchQuery, setLocalSearchQuery] =
|
|
1707
|
+
const [selectedWallet, setSelectedWallet] = useState11(null);
|
|
1708
|
+
const [localSearchQuery, setLocalSearchQuery] = useState11("");
|
|
1552
1709
|
const filteredWallets = wallets.filter((wallet) => {
|
|
1553
1710
|
const q = localSearchQuery.toLowerCase();
|
|
1554
1711
|
return wallet.name.toLowerCase().includes(q) || wallet.currency.toLowerCase().includes(q) || wallet.network.toLowerCase().includes(q);
|
|
@@ -1561,7 +1718,7 @@ var UniversalWalletPage = ({
|
|
|
1561
1718
|
}
|
|
1562
1719
|
toast5.success("Address copied to clipboard");
|
|
1563
1720
|
};
|
|
1564
|
-
return /* @__PURE__ */
|
|
1721
|
+
return /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-6 animate-in max-w-5xl fade-in duration-300" }, /* @__PURE__ */ React18.createElement(ManagedToaster, null), !hideControls && /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col sm:flex-row items-center justify-between gap-4 w-full" }, /* @__PURE__ */ React18.createElement("div", { className: "relative w-full sm:w-96" }, /* @__PURE__ */ React18.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Search01Icon2, size: 16, className: "text-neutral-400" })), /* @__PURE__ */ React18.createElement(
|
|
1565
1722
|
"input",
|
|
1566
1723
|
{
|
|
1567
1724
|
type: "text",
|
|
@@ -1570,16 +1727,16 @@ var UniversalWalletPage = ({
|
|
|
1570
1727
|
onChange: (e) => setLocalSearchQuery(e.target.value),
|
|
1571
1728
|
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"
|
|
1572
1729
|
}
|
|
1573
|
-
))), /* @__PURE__ */
|
|
1730
|
+
))), /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-white w-full" }, /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, /* @__PURE__ */ React18.createElement("div", null, /* @__PURE__ */ React18.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, headerTitle), headerDescription && /* @__PURE__ */ React18.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription))), /* @__PURE__ */ React18.createElement("div", { className: "w-full overflow-hidden" }, isLoading ? /* @__PURE__ */ React18.createElement(PageSpinner3, null) : /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ React18.createElement("div", null, filteredWallets.length === 0 ? /* @__PURE__ */ React18.createElement("p", { className: "text-xs text-neutral-400 py-6 text-center" }, "No wallets found") : filteredWallets.map((wallet) => /* @__PURE__ */ React18.createElement(
|
|
1574
1731
|
"div",
|
|
1575
1732
|
{
|
|
1576
1733
|
key: wallet.id,
|
|
1577
1734
|
onClick: () => setSelectedWallet(wallet),
|
|
1578
1735
|
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"
|
|
1579
1736
|
},
|
|
1580
|
-
/* @__PURE__ */
|
|
1581
|
-
/* @__PURE__ */
|
|
1582
|
-
)))))), selectedWallet && /* @__PURE__ */
|
|
1737
|
+
/* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ React18.createElement(WalletLogo, { src: wallet.logoSrc, alt: wallet.name }), /* @__PURE__ */ React18.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-1" }, /* @__PURE__ */ React18.createElement("p", { className: "text-[13px] text-black truncate " }, wallet.name), /* @__PURE__ */ React18.createElement("p", { className: `text-[13px] text-neutral-500 truncate transition-all duration-300 ${hideBalanceAmounts ? "blur-sm opacity-40 select-none" : ""}` }, wallet.balance, " ", wallet.currency))),
|
|
1738
|
+
/* @__PURE__ */ React18.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ React18.createElement("span", { className: "text-[10px] tracking-wide text-neutral-600 bg-neutral-100 px-2.5 py-1 rounded-full " }, wallet.network))
|
|
1739
|
+
)))))), selectedWallet && /* @__PURE__ */ React18.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React18.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => setSelectedWallet(null) }), /* @__PURE__ */ React18.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__ */ React18.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ React18.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Wallet Details"), /* @__PURE__ */ React18.createElement("button", { onClick: () => setSelectedWallet(null), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: CancelCircleIcon3, size: 18 }))), /* @__PURE__ */ React18.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-6" }, /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col items-center justify-center mb-6" }, /* @__PURE__ */ React18.createElement(WalletLogo, { src: selectedWallet.logoSrc, alt: selectedWallet.name, sizeClass: "w-14 h-14 mb-4" }), /* @__PURE__ */ React18.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__ */ React18.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__ */ React18.createElement("div", { className: "w-full flex justify-center mb-6 mix-blend-multiply" }, renderQrCode(selectedWallet)), /* @__PURE__ */ React18.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-10" }, /* @__PURE__ */ React18.createElement("div", null, /* @__PURE__ */ React18.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Address"), /* @__PURE__ */ React18.createElement("span", { className: "text-[13px] text-black break-all " }, selectedWallet.address)), /* @__PURE__ */ React18.createElement("div", null, /* @__PURE__ */ React18.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Name"), /* @__PURE__ */ React18.createElement("span", { className: "text-[13px] text-black" }, selectedWallet.name))), /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React18.createElement(
|
|
1583
1740
|
ThreeDActionButton,
|
|
1584
1741
|
{
|
|
1585
1742
|
onClick: () => onDownloadPayId && onDownloadPayId(selectedWallet),
|
|
@@ -1587,7 +1744,7 @@ var UniversalWalletPage = ({
|
|
|
1587
1744
|
className: "w-full py-3 text-[13px]"
|
|
1588
1745
|
},
|
|
1589
1746
|
"Generate Statement"
|
|
1590
|
-
), /* @__PURE__ */
|
|
1747
|
+
), /* @__PURE__ */ React18.createElement(
|
|
1591
1748
|
"button",
|
|
1592
1749
|
{
|
|
1593
1750
|
onClick: () => handleCopy(selectedWallet),
|
|
@@ -1598,7 +1755,7 @@ var UniversalWalletPage = ({
|
|
|
1598
1755
|
};
|
|
1599
1756
|
|
|
1600
1757
|
// src/components/UniversalCardPage.tsx
|
|
1601
|
-
import React21, { useState as
|
|
1758
|
+
import React21, { useState as useState13, useEffect as useEffect9 } from "react";
|
|
1602
1759
|
import { HugeiconsIcon as HugeiconsIcon15 } from "@hugeicons/react";
|
|
1603
1760
|
import {
|
|
1604
1761
|
SnowIcon,
|
|
@@ -1609,49 +1766,8 @@ import {
|
|
|
1609
1766
|
Loading03Icon as Loading03Icon8
|
|
1610
1767
|
} from "@hugeicons/core-free-icons";
|
|
1611
1768
|
|
|
1612
|
-
// src/components/ConfirmationDialog.tsx
|
|
1613
|
-
import React18 from "react";
|
|
1614
|
-
import { HugeiconsIcon as HugeiconsIcon12 } from "@hugeicons/react";
|
|
1615
|
-
import { Loading03Icon as Loading03Icon6 } from "@hugeicons/core-free-icons";
|
|
1616
|
-
var ConfirmationDialog = ({
|
|
1617
|
-
isOpen,
|
|
1618
|
-
title,
|
|
1619
|
-
message,
|
|
1620
|
-
confirmText = "Confirm",
|
|
1621
|
-
cancelText = "Cancel",
|
|
1622
|
-
isProcessing = false,
|
|
1623
|
-
isDestructive = true,
|
|
1624
|
-
onClose,
|
|
1625
|
-
onConfirm
|
|
1626
|
-
}) => {
|
|
1627
|
-
if (!isOpen) return null;
|
|
1628
|
-
return /* @__PURE__ */ React18.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React18.createElement(
|
|
1629
|
-
"div",
|
|
1630
|
-
{
|
|
1631
|
-
className: "absolute inset-0 bg-black/40 ",
|
|
1632
|
-
onClick: () => !isProcessing && onClose()
|
|
1633
|
-
}
|
|
1634
|
-
), /* @__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(
|
|
1635
|
-
"button",
|
|
1636
|
-
{
|
|
1637
|
-
onClick: onClose,
|
|
1638
|
-
disabled: isProcessing,
|
|
1639
|
-
className: "flex-1 py-4 text-[14px] text-neutral-500 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none "
|
|
1640
|
-
},
|
|
1641
|
-
cancelText
|
|
1642
|
-
), /* @__PURE__ */ React18.createElement(
|
|
1643
|
-
"button",
|
|
1644
|
-
{
|
|
1645
|
-
onClick: onConfirm,
|
|
1646
|
-
disabled: isProcessing,
|
|
1647
|
-
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"}`
|
|
1648
|
-
},
|
|
1649
|
-
isProcessing ? /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Loading03Icon6, className: "animate-spin", size: 18 }) : confirmText
|
|
1650
|
-
))));
|
|
1651
|
-
};
|
|
1652
|
-
|
|
1653
1769
|
// src/components/PinDialerBottomSheet.tsx
|
|
1654
|
-
import React19, { useState as
|
|
1770
|
+
import React19, { useState as useState12, useEffect as useEffect8 } from "react";
|
|
1655
1771
|
import { HugeiconsIcon as HugeiconsIcon13 } from "@hugeicons/react";
|
|
1656
1772
|
import { Loading03Icon as Loading03Icon7, CancelCircleIcon as CancelCircleIcon4, LessThanIcon } from "@hugeicons/core-free-icons";
|
|
1657
1773
|
var PinDialerBottomSheet = ({
|
|
@@ -1661,7 +1777,7 @@ var PinDialerBottomSheet = ({
|
|
|
1661
1777
|
onClose,
|
|
1662
1778
|
onComplete
|
|
1663
1779
|
}) => {
|
|
1664
|
-
const [pin, setPin] =
|
|
1780
|
+
const [pin, setPin] = useState12("");
|
|
1665
1781
|
useEffect8(() => {
|
|
1666
1782
|
setPin("");
|
|
1667
1783
|
}, [isOpen]);
|
|
@@ -1774,23 +1890,23 @@ var UniversalCardPage = ({
|
|
|
1774
1890
|
onDelete,
|
|
1775
1891
|
onCardAction
|
|
1776
1892
|
}) => {
|
|
1777
|
-
const [activeTabIndex, setActiveTabIndex] =
|
|
1893
|
+
const [activeTabIndex, setActiveTabIndex] = useState13(0);
|
|
1778
1894
|
const activeCard = cards[activeTabIndex];
|
|
1779
1895
|
useEffect9(() => {
|
|
1780
1896
|
setIsFlipped(false);
|
|
1781
1897
|
setIsRevealed(false);
|
|
1782
1898
|
}, [activeTabIndex]);
|
|
1783
|
-
const [isFlipped, setIsFlipped] =
|
|
1784
|
-
const [isBgLoaded, setIsBgLoaded] =
|
|
1785
|
-
const [isRevealed, setIsRevealed] =
|
|
1786
|
-
const [isRevealing, setIsRevealing] =
|
|
1787
|
-
const [isFreezing, setIsFreezing] =
|
|
1788
|
-
const [isOverlayActionLoading, setIsOverlayActionLoading] =
|
|
1789
|
-
const [showDeleteDialog, setShowDeleteDialog] =
|
|
1790
|
-
const [isDeleting, setIsDeleting] =
|
|
1791
|
-
const [showPinDialer, setShowPinDialer] =
|
|
1792
|
-
const [showCardActionDialog, setShowCardActionDialog] =
|
|
1793
|
-
const [cardActionType, setCardActionType] =
|
|
1899
|
+
const [isFlipped, setIsFlipped] = useState13(false);
|
|
1900
|
+
const [isBgLoaded, setIsBgLoaded] = useState13(false);
|
|
1901
|
+
const [isRevealed, setIsRevealed] = useState13(false);
|
|
1902
|
+
const [isRevealing, setIsRevealing] = useState13(false);
|
|
1903
|
+
const [isFreezing, setIsFreezing] = useState13(false);
|
|
1904
|
+
const [isOverlayActionLoading, setIsOverlayActionLoading] = useState13(false);
|
|
1905
|
+
const [showDeleteDialog, setShowDeleteDialog] = useState13(false);
|
|
1906
|
+
const [isDeleting, setIsDeleting] = useState13(false);
|
|
1907
|
+
const [showPinDialer, setShowPinDialer] = useState13(false);
|
|
1908
|
+
const [showCardActionDialog, setShowCardActionDialog] = useState13(false);
|
|
1909
|
+
const [cardActionType, setCardActionType] = useState13("ACTIVATE");
|
|
1794
1910
|
useEffect9(() => {
|
|
1795
1911
|
setIsBgLoaded(false);
|
|
1796
1912
|
if (!activeCard?.cardBgSrc) return;
|
|
@@ -1891,14 +2007,14 @@ var UniversalCardPage = ({
|
|
|
1891
2007
|
}
|
|
1892
2008
|
},
|
|
1893
2009
|
!isBgLoaded && /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 w-full h-full bg-white rounded-2xl flex items-center justify-center z-50 " }, /* @__PURE__ */ React21.createElement(HugeiconsIcon15, { icon: Loading03Icon8, size: 28, className: "animate-spin text-black" })),
|
|
1894
|
-
!isActivated && isBgLoaded && /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 z-40 w-full h-full rounded-2xl backdrop-blur-
|
|
2010
|
+
!isActivated && isBgLoaded && /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 z-40 w-full h-full rounded-2xl backdrop-blur-sm bg-white/20 flex flex-col items-center justify-center border border-white/30", style: { transform: "translateZ(1px)" } }, isUnactivated && /* @__PURE__ */ React21.createElement(
|
|
1895
2011
|
"button",
|
|
1896
2012
|
{
|
|
1897
2013
|
onClick: (e) => {
|
|
1898
2014
|
e.stopPropagation();
|
|
1899
2015
|
handleOverlayActionClick("ACTIVATE");
|
|
1900
2016
|
},
|
|
1901
|
-
className: "px-6 py-2.5 bg-
|
|
2017
|
+
className: "px-6 py-2.5 bg-white/35 text-black text-[12px] font-medium rounded-full transition-all outline-none active:scale-95"
|
|
1902
2018
|
},
|
|
1903
2019
|
"Activate Card"
|
|
1904
2020
|
), isDead && /* @__PURE__ */ React21.createElement(
|
|
@@ -1908,7 +2024,7 @@ var UniversalCardPage = ({
|
|
|
1908
2024
|
e.stopPropagation();
|
|
1909
2025
|
handleOverlayActionClick("CREATE");
|
|
1910
2026
|
},
|
|
1911
|
-
className: "px-6 py-2.5 bg-
|
|
2027
|
+
className: "px-6 py-2.5 bg-white/35 text-black text-[12px] font-medium rounded-full transition-all outline-none active:scale-95"
|
|
1912
2028
|
},
|
|
1913
2029
|
"Create Card"
|
|
1914
2030
|
), isFrozen && /* @__PURE__ */ React21.createElement(
|
|
@@ -1919,7 +2035,7 @@ var UniversalCardPage = ({
|
|
|
1919
2035
|
handleOverlayUnfreeze();
|
|
1920
2036
|
},
|
|
1921
2037
|
disabled: isOverlayActionLoading,
|
|
1922
|
-
className: "px-6 py-2.5 bg-white text-black text-[12px] font-medium rounded-full
|
|
2038
|
+
className: "px-6 py-2.5 bg-white/35 text-black text-[12px] font-medium rounded-full transition-all outline-none active:scale-95 flex items-center gap-2 disabled:opacity-80"
|
|
1923
2039
|
},
|
|
1924
2040
|
isOverlayActionLoading ? /* @__PURE__ */ React21.createElement(HugeiconsIcon15, { icon: Loading03Icon8, size: 16, className: "animate-spin" }) : "Unfreeze Card"
|
|
1925
2041
|
)),
|
|
@@ -2078,7 +2194,7 @@ var MenuRow = ({
|
|
|
2078
2194
|
);
|
|
2079
2195
|
|
|
2080
2196
|
// src/components/UniversalProfilePage.tsx
|
|
2081
|
-
import React22, { useState as
|
|
2197
|
+
import React22, { useState as useState14 } from "react";
|
|
2082
2198
|
import { HugeiconsIcon as HugeiconsIcon16 } from "@hugeicons/react";
|
|
2083
2199
|
import {
|
|
2084
2200
|
UserIcon,
|
|
@@ -2087,7 +2203,7 @@ import {
|
|
|
2087
2203
|
MessageQuestionIcon,
|
|
2088
2204
|
UserIdVerificationIcon,
|
|
2089
2205
|
FileDownloadIcon,
|
|
2090
|
-
LogoutCircle02Icon,
|
|
2206
|
+
LogoutCircle02Icon as LogoutCircle02Icon2,
|
|
2091
2207
|
UserRemove01Icon,
|
|
2092
2208
|
ArrowRight01Icon as ArrowRight01Icon3,
|
|
2093
2209
|
Loading03Icon as Loading03Icon9,
|
|
@@ -2106,9 +2222,9 @@ var UniversalProfilePage = ({
|
|
|
2106
2222
|
onLogoutTap,
|
|
2107
2223
|
onDeleteTap
|
|
2108
2224
|
}) => {
|
|
2109
|
-
const [isAvatarLoaded, setIsAvatarLoaded] =
|
|
2110
|
-
const [showLogoutDialog, setShowLogoutDialog] =
|
|
2111
|
-
const [isLoggingOut, setIsLoggingOut] =
|
|
2225
|
+
const [isAvatarLoaded, setIsAvatarLoaded] = useState14(false);
|
|
2226
|
+
const [showLogoutDialog, setShowLogoutDialog] = useState14(false);
|
|
2227
|
+
const [isLoggingOut, setIsLoggingOut] = useState14(false);
|
|
2112
2228
|
const handleConfirmLogout = async () => {
|
|
2113
2229
|
setIsLoggingOut(true);
|
|
2114
2230
|
try {
|
|
@@ -2180,7 +2296,7 @@ var UniversalProfilePage = ({
|
|
|
2180
2296
|
), /* @__PURE__ */ React22.createElement(
|
|
2181
2297
|
MenuRow2,
|
|
2182
2298
|
{
|
|
2183
|
-
icon:
|
|
2299
|
+
icon: LogoutCircle02Icon2,
|
|
2184
2300
|
title: "LogOut",
|
|
2185
2301
|
subtitle: "End your session",
|
|
2186
2302
|
onClick: () => setShowLogoutDialog(true),
|
|
@@ -2221,16 +2337,16 @@ var MenuRow2 = ({ icon, title, subtitle, onClick, iconColor = "text-black", titl
|
|
|
2221
2337
|
);
|
|
2222
2338
|
|
|
2223
2339
|
// src/components/HeroSection.tsx
|
|
2224
|
-
import React24, { useState as
|
|
2340
|
+
import React24, { useState as useState16, useEffect as useEffect10, useRef as useRef4 } from "react";
|
|
2225
2341
|
import Link5 from "next/link";
|
|
2226
2342
|
import Image3 from "next/image";
|
|
2227
2343
|
|
|
2228
2344
|
// src/components/WaitlistDialog.tsx
|
|
2229
|
-
import React23, { useState as
|
|
2345
|
+
import React23, { useState as useState15 } from "react";
|
|
2230
2346
|
import { toast as toast6 } from "react-hot-toast";
|
|
2231
2347
|
var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
2232
|
-
const [email, setEmail] =
|
|
2233
|
-
const [isLoading, setIsLoading] =
|
|
2348
|
+
const [email, setEmail] = useState15("");
|
|
2349
|
+
const [isLoading, setIsLoading] = useState15(false);
|
|
2234
2350
|
if (!isOpen) return null;
|
|
2235
2351
|
const handleSubmit = async (e) => {
|
|
2236
2352
|
e.preventDefault();
|
|
@@ -2334,8 +2450,8 @@ var HeroSection = ({
|
|
|
2334
2450
|
bgImageSrc,
|
|
2335
2451
|
isWaitlist = false
|
|
2336
2452
|
}) => {
|
|
2337
|
-
const [isAnimating, setIsAnimating] =
|
|
2338
|
-
const [isWaitlistOpen, setIsWaitlistOpen] =
|
|
2453
|
+
const [isAnimating, setIsAnimating] = useState16(false);
|
|
2454
|
+
const [isWaitlistOpen, setIsWaitlistOpen] = useState16(false);
|
|
2339
2455
|
const titleRef = useRef4(null);
|
|
2340
2456
|
useEffect10(() => {
|
|
2341
2457
|
const observer = new IntersectionObserver(
|
|
@@ -2430,10 +2546,10 @@ var HeroSection = ({
|
|
|
2430
2546
|
};
|
|
2431
2547
|
|
|
2432
2548
|
// src/components/AppBento2.tsx
|
|
2433
|
-
import React25, { useState as
|
|
2549
|
+
import React25, { useState as useState17, useEffect as useEffect11, useRef as useRef5 } from "react";
|
|
2434
2550
|
import { HugeiconsIcon as HugeiconsIcon17 } from "@hugeicons/react";
|
|
2435
2551
|
var AppBento2 = ({ tagline, headline, features }) => {
|
|
2436
|
-
const [isAnimating, setIsAnimating] =
|
|
2552
|
+
const [isAnimating, setIsAnimating] = useState17(false);
|
|
2437
2553
|
const titleRef = useRef5(null);
|
|
2438
2554
|
useEffect11(() => {
|
|
2439
2555
|
const observer = new IntersectionObserver(
|
|
@@ -2505,13 +2621,13 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2505
2621
|
};
|
|
2506
2622
|
|
|
2507
2623
|
// src/components/FeatureScroll.tsx
|
|
2508
|
-
import React26, { useRef as useRef6, useState as
|
|
2624
|
+
import React26, { useRef as useRef6, useState as useState18, useEffect as useEffect12 } from "react";
|
|
2509
2625
|
import Image4 from "next/image";
|
|
2510
2626
|
import { HugeiconsIcon as HugeiconsIcon18 } from "@hugeicons/react";
|
|
2511
|
-
import { ArrowLeft01Icon as
|
|
2627
|
+
import { ArrowLeft01Icon as ArrowLeft01Icon3, ArrowRight01Icon as ArrowRight01Icon4, Loading03Icon as Loading03Icon10 } from "@hugeicons/core-free-icons";
|
|
2512
2628
|
var FeatureCard = ({ feature, bgImage }) => {
|
|
2513
|
-
const [isBgLoading, setIsBgLoading] =
|
|
2514
|
-
const [isFgLoading, setIsFgLoading] =
|
|
2629
|
+
const [isBgLoading, setIsBgLoading] = useState18(true);
|
|
2630
|
+
const [isFgLoading, setIsFgLoading] = useState18(!!feature.image);
|
|
2515
2631
|
return /* @__PURE__ */ React26.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__ */ React26.createElement("div", { className: "relative w-full aspect-16/10 bg-neutral-100 rounded-2xl overflow-hidden mb-6 flex items-center justify-center" }, /* @__PURE__ */ React26.createElement(
|
|
2516
2632
|
Image4,
|
|
2517
2633
|
{
|
|
@@ -2550,8 +2666,8 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2550
2666
|
};
|
|
2551
2667
|
var FeatureScroll = ({ tagline, headline, features }) => {
|
|
2552
2668
|
const scrollRef = useRef6(null);
|
|
2553
|
-
const [canScrollLeft, setCanScrollLeft] =
|
|
2554
|
-
const [canScrollRight, setCanScrollRight] =
|
|
2669
|
+
const [canScrollLeft, setCanScrollLeft] = useState18(false);
|
|
2670
|
+
const [canScrollRight, setCanScrollRight] = useState18(true);
|
|
2555
2671
|
const checkScroll = () => {
|
|
2556
2672
|
if (scrollRef.current) {
|
|
2557
2673
|
const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;
|
|
@@ -2583,7 +2699,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2583
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",
|
|
2584
2700
|
"aria-label": "Previous feature"
|
|
2585
2701
|
},
|
|
2586
|
-
/* @__PURE__ */ React26.createElement(HugeiconsIcon18, { icon:
|
|
2702
|
+
/* @__PURE__ */ React26.createElement(HugeiconsIcon18, { icon: ArrowLeft01Icon3, size: 20 })
|
|
2587
2703
|
), /* @__PURE__ */ React26.createElement(
|
|
2588
2704
|
"button",
|
|
2589
2705
|
{
|
|
@@ -2608,7 +2724,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2608
2724
|
disabled: !canScrollLeft,
|
|
2609
2725
|
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"
|
|
2610
2726
|
},
|
|
2611
|
-
/* @__PURE__ */ React26.createElement(HugeiconsIcon18, { icon:
|
|
2727
|
+
/* @__PURE__ */ React26.createElement(HugeiconsIcon18, { icon: ArrowLeft01Icon3, size: 20 })
|
|
2612
2728
|
), /* @__PURE__ */ React26.createElement(
|
|
2613
2729
|
"button",
|
|
2614
2730
|
{
|
|
@@ -2642,7 +2758,7 @@ var PlatformFeatures = ({
|
|
|
2642
2758
|
};
|
|
2643
2759
|
|
|
2644
2760
|
// src/components/ManagedDocument.tsx
|
|
2645
|
-
import React28, { useState as
|
|
2761
|
+
import React28, { useState as useState19, useEffect as useEffect13, useRef as useRef7 } from "react";
|
|
2646
2762
|
var ManagedDocument = ({
|
|
2647
2763
|
tagline,
|
|
2648
2764
|
title,
|
|
@@ -2650,7 +2766,7 @@ var ManagedDocument = ({
|
|
|
2650
2766
|
contactText,
|
|
2651
2767
|
contactEmail
|
|
2652
2768
|
}) => {
|
|
2653
|
-
const [isAnimating, setIsAnimating] =
|
|
2769
|
+
const [isAnimating, setIsAnimating] = useState19(false);
|
|
2654
2770
|
const titleRef = useRef7(null);
|
|
2655
2771
|
useEffect13(() => {
|
|
2656
2772
|
const observer = new IntersectionObserver(
|
|
@@ -2692,10 +2808,10 @@ var ManagedDocument = ({
|
|
|
2692
2808
|
};
|
|
2693
2809
|
|
|
2694
2810
|
// src/components/ManagedContactBlock.tsx
|
|
2695
|
-
import React29, { useState as
|
|
2811
|
+
import React29, { useState as useState20, useEffect as useEffect14 } from "react";
|
|
2696
2812
|
import { HugeiconsIcon as HugeiconsIcon20 } from "@hugeicons/react";
|
|
2697
2813
|
var SecureEmail = ({ user, domain, className }) => {
|
|
2698
|
-
const [isMounted, setIsMounted] =
|
|
2814
|
+
const [isMounted, setIsMounted] = useState20(false);
|
|
2699
2815
|
useEffect14(() => {
|
|
2700
2816
|
setIsMounted(true);
|
|
2701
2817
|
}, []);
|
|
@@ -2751,7 +2867,7 @@ var ManagedContactBlock = ({
|
|
|
2751
2867
|
};
|
|
2752
2868
|
|
|
2753
2869
|
// src/components/ManagedPricingBlock.tsx
|
|
2754
|
-
import React30, { useState as
|
|
2870
|
+
import React30, { useState as useState21, useEffect as useEffect15, useRef as useRef8 } from "react";
|
|
2755
2871
|
import Link6 from "next/link";
|
|
2756
2872
|
import Image5 from "next/image";
|
|
2757
2873
|
var CheckIcon = ({ className = "" }) => /* @__PURE__ */ React30.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__ */ React30.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ React30.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
@@ -2762,8 +2878,8 @@ var ManagedPricingBlock = ({
|
|
|
2762
2878
|
plans = [],
|
|
2763
2879
|
tabs
|
|
2764
2880
|
}) => {
|
|
2765
|
-
const [isAnimating, setIsAnimating] =
|
|
2766
|
-
const [activeTabIndex, setActiveTabIndex] =
|
|
2881
|
+
const [isAnimating, setIsAnimating] = useState21(false);
|
|
2882
|
+
const [activeTabIndex, setActiveTabIndex] = useState21(0);
|
|
2767
2883
|
const titleRef = useRef8(null);
|
|
2768
2884
|
useEffect15(() => {
|
|
2769
2885
|
const observer = new IntersectionObserver(
|
|
@@ -3072,7 +3188,7 @@ var PortfolioHero = ({
|
|
|
3072
3188
|
};
|
|
3073
3189
|
|
|
3074
3190
|
// src/components/GifFeatureCard.tsx
|
|
3075
|
-
import React35, { useState as
|
|
3191
|
+
import React35, { useState as useState22 } from "react";
|
|
3076
3192
|
import Image9 from "next/image";
|
|
3077
3193
|
import { HugeiconsIcon as HugeiconsIcon23 } from "@hugeicons/react";
|
|
3078
3194
|
import { Loading03Icon as Loading03Icon11 } from "@hugeicons/core-free-icons";
|
|
@@ -3083,7 +3199,7 @@ var GifFeatureCard = ({
|
|
|
3083
3199
|
alt = "Feature animation",
|
|
3084
3200
|
className = "aspect-video"
|
|
3085
3201
|
}) => {
|
|
3086
|
-
const [isLoading, setIsLoading] =
|
|
3202
|
+
const [isLoading, setIsLoading] = useState22(true);
|
|
3087
3203
|
return /* @__PURE__ */ React35.createElement("div", { className: `relative w-full bg-black overflow-hidden shadow-2xl ${className}` }, isLoading && /* @__PURE__ */ React35.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-black" }, /* @__PURE__ */ React35.createElement(
|
|
3088
3204
|
HugeiconsIcon23,
|
|
3089
3205
|
{
|
|
@@ -3116,7 +3232,7 @@ var GifFeatureCard = ({
|
|
|
3116
3232
|
};
|
|
3117
3233
|
|
|
3118
3234
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
3119
|
-
import React36, { useState as
|
|
3235
|
+
import React36, { useState as useState23, useEffect as useEffect17, useRef as useRef10 } from "react";
|
|
3120
3236
|
import Image10 from "next/image";
|
|
3121
3237
|
var MedicalFeatureStatsBlock = ({
|
|
3122
3238
|
bottomHeadline,
|
|
@@ -3125,7 +3241,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3125
3241
|
trustText,
|
|
3126
3242
|
stats
|
|
3127
3243
|
}) => {
|
|
3128
|
-
const [isAnimating, setIsAnimating] =
|
|
3244
|
+
const [isAnimating, setIsAnimating] = useState23(false);
|
|
3129
3245
|
const titleRef = useRef10(null);
|
|
3130
3246
|
useEffect17(() => {
|
|
3131
3247
|
const observer = new IntersectionObserver(
|
|
@@ -3166,12 +3282,12 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3166
3282
|
};
|
|
3167
3283
|
|
|
3168
3284
|
// src/components/ConsultantShowcase.tsx
|
|
3169
|
-
import React37, { useState as
|
|
3285
|
+
import React37, { useState as useState24 } from "react";
|
|
3170
3286
|
import Image11 from "next/image";
|
|
3171
3287
|
import { HugeiconsIcon as HugeiconsIcon24 } from "@hugeicons/react";
|
|
3172
3288
|
import { Loading03Icon as Loading03Icon12 } from "@hugeicons/core-free-icons";
|
|
3173
3289
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
3174
|
-
const [isLoading, setIsLoading] =
|
|
3290
|
+
const [isLoading, setIsLoading] = useState24(true);
|
|
3175
3291
|
return /* @__PURE__ */ React37.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ React37.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__ */ React37.createElement(HugeiconsIcon24, { icon: Loading03Icon12, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ React37.createElement(
|
|
3176
3292
|
Image11,
|
|
3177
3293
|
{
|
|
@@ -3191,9 +3307,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
3191
3307
|
var ConsultantShowcase = ({
|
|
3192
3308
|
profiles
|
|
3193
3309
|
}) => {
|
|
3194
|
-
const [currentIndex, setCurrentIndex] =
|
|
3195
|
-
const [touchStart, setTouchStart] =
|
|
3196
|
-
const [touchEnd, setTouchEnd] =
|
|
3310
|
+
const [currentIndex, setCurrentIndex] = useState24(0);
|
|
3311
|
+
const [touchStart, setTouchStart] = useState24(null);
|
|
3312
|
+
const [touchEnd, setTouchEnd] = useState24(null);
|
|
3197
3313
|
const nextSlide = () => {
|
|
3198
3314
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
3199
3315
|
};
|
|
@@ -3262,12 +3378,12 @@ var ConsultantShowcase = ({
|
|
|
3262
3378
|
};
|
|
3263
3379
|
|
|
3264
3380
|
// src/components/ContentGridBlock.tsx
|
|
3265
|
-
import React38, { useState as
|
|
3381
|
+
import React38, { useState as useState25 } from "react";
|
|
3266
3382
|
import Image12 from "next/image";
|
|
3267
3383
|
import { HugeiconsIcon as HugeiconsIcon25 } from "@hugeicons/react";
|
|
3268
3384
|
import { Loading03Icon as Loading03Icon13 } from "@hugeicons/core-free-icons";
|
|
3269
3385
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
3270
|
-
const [isLoading, setIsLoading] =
|
|
3386
|
+
const [isLoading, setIsLoading] = useState25(true);
|
|
3271
3387
|
return /* @__PURE__ */ React38.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ React38.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__ */ React38.createElement(HugeiconsIcon25, { icon: Loading03Icon13, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ React38.createElement(
|
|
3272
3388
|
Image12,
|
|
3273
3389
|
{
|