@retinalabsllc/zairusjs 15.0.0 → 15.0.2
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 +10 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.js +494 -529
- package/dist/index.mjs +462 -498
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1929,98 +1929,18 @@ var UniversalWalletPage = ({
|
|
|
1929
1929
|
};
|
|
1930
1930
|
|
|
1931
1931
|
// src/components/UniversalCardPage.tsx
|
|
1932
|
-
import
|
|
1932
|
+
import React19, { useState as useState11, useEffect as useEffect8 } from "react";
|
|
1933
1933
|
import { useRouter } from "next/navigation";
|
|
1934
|
-
import { HugeiconsIcon as
|
|
1934
|
+
import { HugeiconsIcon as HugeiconsIcon13 } from "@hugeicons/react";
|
|
1935
1935
|
import {
|
|
1936
1936
|
SnowIcon,
|
|
1937
1937
|
Delete02Icon,
|
|
1938
1938
|
ArrowRight01Icon as ArrowRight01Icon3,
|
|
1939
1939
|
SlidersHorizontalIcon,
|
|
1940
1940
|
ViewOffSlashIcon as ViewOffSlashIcon2,
|
|
1941
|
-
Loading03Icon as
|
|
1941
|
+
Loading03Icon as Loading03Icon8,
|
|
1942
1942
|
PlusSignIcon as PlusSignIcon2
|
|
1943
1943
|
} from "@hugeicons/core-free-icons";
|
|
1944
|
-
|
|
1945
|
-
// src/components/PinDialerBottomSheet.tsx
|
|
1946
|
-
import React19, { useState as useState11, useEffect as useEffect8 } from "react";
|
|
1947
|
-
import { HugeiconsIcon as HugeiconsIcon13 } from "@hugeicons/react";
|
|
1948
|
-
import { Loading03Icon as Loading03Icon8, CancelCircleIcon as CancelCircleIcon5, LessThanIcon } from "@hugeicons/core-free-icons";
|
|
1949
|
-
var PinDialerBottomSheet = ({
|
|
1950
|
-
isOpen,
|
|
1951
|
-
title = "Action Required",
|
|
1952
|
-
isVerifying = false,
|
|
1953
|
-
onClose,
|
|
1954
|
-
onComplete
|
|
1955
|
-
}) => {
|
|
1956
|
-
const [pin, setPin] = useState11("");
|
|
1957
|
-
useEffect8(() => {
|
|
1958
|
-
setPin("");
|
|
1959
|
-
}, [isOpen]);
|
|
1960
|
-
const handlePinPress = (value) => {
|
|
1961
|
-
if (isVerifying) return;
|
|
1962
|
-
if (value === "del") {
|
|
1963
|
-
setPin((prev) => prev.slice(0, -1));
|
|
1964
|
-
return;
|
|
1965
|
-
}
|
|
1966
|
-
if (pin.length < 4) {
|
|
1967
|
-
const newPin = pin + value;
|
|
1968
|
-
setPin(newPin);
|
|
1969
|
-
if (newPin.length === 4) {
|
|
1970
|
-
onComplete(newPin);
|
|
1971
|
-
}
|
|
1972
|
-
}
|
|
1973
|
-
};
|
|
1974
|
-
if (!isOpen) return null;
|
|
1975
|
-
return /* @__PURE__ */ React19.createElement("div", { className: "fixed inset-0 z-150 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React19.createElement(
|
|
1976
|
-
"div",
|
|
1977
|
-
{
|
|
1978
|
-
className: "absolute inset-0 bg-black/40 animate-in fade-in duration-200",
|
|
1979
|
-
onClick: () => {
|
|
1980
|
-
if (!isVerifying) onClose();
|
|
1981
|
-
}
|
|
1982
|
-
}
|
|
1983
|
-
), /* @__PURE__ */ React19.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React19.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React19.createElement("h3", { className: "text-[16px] text-black tracking-tight" }, title), /* @__PURE__ */ React19.createElement(
|
|
1984
|
-
"button",
|
|
1985
|
-
{
|
|
1986
|
-
onClick: () => {
|
|
1987
|
-
if (!isVerifying) onClose();
|
|
1988
|
-
},
|
|
1989
|
-
className: "text-neutral-400 hover:text-black transition-colors outline-none"
|
|
1990
|
-
},
|
|
1991
|
-
/* @__PURE__ */ React19.createElement(HugeiconsIcon13, { icon: CancelCircleIcon5, size: 20 })
|
|
1992
|
-
)), /* @__PURE__ */ React19.createElement("div", { className: "flex flex-col px-6 pb-8 pt-2 relative" }, /* @__PURE__ */ React19.createElement("div", { className: "flex justify-center gap-4 mb-8" }, [0, 1, 2, 3].map((i) => /* @__PURE__ */ React19.createElement(
|
|
1993
|
-
"div",
|
|
1994
|
-
{
|
|
1995
|
-
key: i,
|
|
1996
|
-
className: `w-2 h-2 rounded-full transition-colors duration-200 ${pin.length > i ? "bg-black" : "bg-neutral-200"}`
|
|
1997
|
-
}
|
|
1998
|
-
))), isVerifying && /* @__PURE__ */ React19.createElement("div", { className: "absolute inset-0 bg-white/80 backdrop-blur-sm z-10 flex items-center justify-center rounded-b-2xl" }, /* @__PURE__ */ React19.createElement(HugeiconsIcon13, { icon: Loading03Icon8, size: 28, className: "animate-spin text-black" })), /* @__PURE__ */ React19.createElement("div", { className: "grid grid-cols-3 gap-y-4 gap-x-6 max-w-60 mx-auto" }, [1, 2, 3, 4, 5, 6, 7, 8, 9].map((num) => /* @__PURE__ */ React19.createElement(
|
|
1999
|
-
"button",
|
|
2000
|
-
{
|
|
2001
|
-
key: num,
|
|
2002
|
-
onClick: () => handlePinPress(num),
|
|
2003
|
-
className: "w-14 h-14 rounded-full flex bg-neutral-50 items-center justify-center text-sm text-black hover:bg-neutral-50 transition-colors mx-auto outline-none active:scale-95"
|
|
2004
|
-
},
|
|
2005
|
-
num
|
|
2006
|
-
)), /* @__PURE__ */ React19.createElement("div", null), " ", /* @__PURE__ */ React19.createElement(
|
|
2007
|
-
"button",
|
|
2008
|
-
{
|
|
2009
|
-
onClick: () => handlePinPress(0),
|
|
2010
|
-
className: "w-14 h-14 rounded-full flex bg-neutral-50 items-center justify-center text-sm text-black hover:bg-neutral-50 transition-colors mx-auto outline-none active:scale-95"
|
|
2011
|
-
},
|
|
2012
|
-
"0"
|
|
2013
|
-
), /* @__PURE__ */ React19.createElement(
|
|
2014
|
-
"button",
|
|
2015
|
-
{
|
|
2016
|
-
onClick: () => handlePinPress("del"),
|
|
2017
|
-
className: "w-14 h-14 rounded-full flex items-center justify-center text-neutral-400 hover:text-black hover:bg-neutral-50 transition-colors mx-auto outline-none active:scale-95"
|
|
2018
|
-
},
|
|
2019
|
-
/* @__PURE__ */ React19.createElement(HugeiconsIcon13, { icon: LessThanIcon, size: 20 })
|
|
2020
|
-
)))));
|
|
2021
|
-
};
|
|
2022
|
-
|
|
2023
|
-
// src/components/UniversalCardPage.tsx
|
|
2024
1944
|
var UniversalCardPage = ({
|
|
2025
1945
|
cards = [],
|
|
2026
1946
|
actionPath = "/app/cards/action/",
|
|
@@ -2032,27 +1952,21 @@ var UniversalCardPage = ({
|
|
|
2032
1952
|
onCreateCard
|
|
2033
1953
|
}) => {
|
|
2034
1954
|
const router = useRouter();
|
|
2035
|
-
const sortedCards =
|
|
1955
|
+
const sortedCards = React19.useMemo(() => {
|
|
2036
1956
|
return [...cards].sort((a, b) => {
|
|
2037
1957
|
if (a.type === "VIRTUAL" && b.type !== "VIRTUAL") return -1;
|
|
2038
1958
|
if (b.type === "VIRTUAL" && a.type !== "VIRTUAL") return 1;
|
|
2039
1959
|
return 0;
|
|
2040
1960
|
});
|
|
2041
1961
|
}, [cards]);
|
|
2042
|
-
const [activeTabIndex, setActiveTabIndex] =
|
|
1962
|
+
const [activeTabIndex, setActiveTabIndex] = useState11(0);
|
|
2043
1963
|
const activeCard = sortedCards[activeTabIndex];
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
const [
|
|
2048
|
-
const [
|
|
2049
|
-
|
|
2050
|
-
const [isFreezing, setIsFreezing] = useState12(false);
|
|
2051
|
-
const [isOverlayActionLoading, setIsOverlayActionLoading] = useState12(false);
|
|
2052
|
-
const [showDeleteDialog, setShowDeleteDialog] = useState12(false);
|
|
2053
|
-
const [isDeleting, setIsDeleting] = useState12(false);
|
|
2054
|
-
const [showPinDialer, setShowPinDialer] = useState12(false);
|
|
2055
|
-
useEffect9(() => {
|
|
1964
|
+
const [isBgLoaded, setIsBgLoaded] = useState11(false);
|
|
1965
|
+
const [isFreezing, setIsFreezing] = useState11(false);
|
|
1966
|
+
const [isOverlayActionLoading, setIsOverlayActionLoading] = useState11(false);
|
|
1967
|
+
const [showDeleteDialog, setShowDeleteDialog] = useState11(false);
|
|
1968
|
+
const [isDeleting, setIsDeleting] = useState11(false);
|
|
1969
|
+
useEffect8(() => {
|
|
2056
1970
|
setIsBgLoaded(false);
|
|
2057
1971
|
if (!activeCard?.cardBgSrc) return;
|
|
2058
1972
|
const img = new Image();
|
|
@@ -2061,7 +1975,7 @@ var UniversalCardPage = ({
|
|
|
2061
1975
|
setTimeout(() => setIsBgLoaded(true), 300);
|
|
2062
1976
|
};
|
|
2063
1977
|
}, [activeCard?.cardBgSrc]);
|
|
2064
|
-
if (!activeCard) return /* @__PURE__ */
|
|
1978
|
+
if (!activeCard) return /* @__PURE__ */ React19.createElement("div", { className: "text-center p-8 text-neutral-500" }, "No cards available");
|
|
2065
1979
|
const isActivated = activeCard.status === "ACTIVATED";
|
|
2066
1980
|
const isFrozen = activeCard.status === "FROZEN";
|
|
2067
1981
|
const isUnactivated = activeCard.status === "UNACTIVATED";
|
|
@@ -2073,28 +1987,6 @@ var UniversalCardPage = ({
|
|
|
2073
1987
|
const showActionOverlay = !isActivated && isBgLoaded && !isPreordered || isFrozen;
|
|
2074
1988
|
const overlayClasses = activeCard.contentDark ? "bg-white/20 backdrop-blur-[3px]" : "bg-black/10 backdrop-blur-[2px]";
|
|
2075
1989
|
const buttonClasses = activeCard.contentDark ? "bg-black/10 text-black hover:bg-black/20 font-medium" : "bg-white/25 text-white hover:bg-white/35";
|
|
2076
|
-
const handleToggleReveal = () => {
|
|
2077
|
-
if (revealDisabled || isRevealing) return;
|
|
2078
|
-
if (isRevealed) {
|
|
2079
|
-
setIsRevealed(false);
|
|
2080
|
-
setIsRevealing(true);
|
|
2081
|
-
setTimeout(() => {
|
|
2082
|
-
if (onReveal) onReveal(activeCard.id);
|
|
2083
|
-
setIsRevealing(false);
|
|
2084
|
-
}, 800);
|
|
2085
|
-
} else {
|
|
2086
|
-
setShowPinDialer(true);
|
|
2087
|
-
}
|
|
2088
|
-
};
|
|
2089
|
-
const handlePinComplete = (pin) => {
|
|
2090
|
-
setIsRevealing(true);
|
|
2091
|
-
setTimeout(() => {
|
|
2092
|
-
setShowPinDialer(false);
|
|
2093
|
-
setIsRevealed(true);
|
|
2094
|
-
if (onReveal) onReveal(activeCard.id);
|
|
2095
|
-
setIsRevealing(false);
|
|
2096
|
-
}, 1e3);
|
|
2097
|
-
};
|
|
2098
1990
|
const handleToggleFreeze = () => {
|
|
2099
1991
|
if (freezeDisabled || isFreezing) return;
|
|
2100
1992
|
setIsFreezing(true);
|
|
@@ -2119,38 +2011,40 @@ var UniversalCardPage = ({
|
|
|
2119
2011
|
setShowDeleteDialog(false);
|
|
2120
2012
|
}, 1200);
|
|
2121
2013
|
};
|
|
2122
|
-
const formatTabLabel = (
|
|
2123
|
-
|
|
2124
|
-
|
|
2014
|
+
const formatTabLabel = (card) => {
|
|
2015
|
+
if (card.prepaid) {
|
|
2016
|
+
const capitalizedTier = card.tier.charAt(0).toUpperCase() + card.tier.slice(1).toLowerCase();
|
|
2017
|
+
return `${capitalizedTier}`;
|
|
2018
|
+
}
|
|
2019
|
+
const capitalizedType = card.type.charAt(0).toUpperCase() + card.type.slice(1).toLowerCase();
|
|
2020
|
+
return `${capitalizedType}`;
|
|
2125
2021
|
};
|
|
2126
|
-
return /* @__PURE__ */
|
|
2022
|
+
return /* @__PURE__ */ React19.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 relative" }, onCreateCard && /* @__PURE__ */ React19.createElement(
|
|
2023
|
+
"button",
|
|
2024
|
+
{
|
|
2025
|
+
onClick: onCreateCard,
|
|
2026
|
+
className: "fixed bottom-24 right-6 sm:right-50 z-50 w-11 h-11 rounded-full bg-white shadow-xl flex items-center justify-center text-black transition-all outline-none"
|
|
2027
|
+
},
|
|
2028
|
+
/* @__PURE__ */ React19.createElement(HugeiconsIcon13, { icon: PlusSignIcon2, size: 18 })
|
|
2029
|
+
), /* @__PURE__ */ React19.createElement("div", { className: "flex items-center justify-center mb-6 w-full px-2 gap-3" }, sortedCards.length > 0 && /* @__PURE__ */ React19.createElement("div", { className: "flex items-center bg-white rounded-full p-1 sm:p-1.5 max-w-full overflow-x-auto custom-scrollbar" }, sortedCards.map((tab, idx) => {
|
|
2127
2030
|
const isActive = activeTabIndex === idx;
|
|
2128
|
-
return /* @__PURE__ */
|
|
2031
|
+
return /* @__PURE__ */ React19.createElement(
|
|
2129
2032
|
"button",
|
|
2130
2033
|
{
|
|
2131
2034
|
key: tab.id,
|
|
2132
2035
|
onClick: () => setActiveTabIndex(idx),
|
|
2133
2036
|
className: `px-4 py-1.5 rounded-full text-[11px] transition-all duration-200 outline-none whitespace-nowrap shrink-0 ${isActive ? "bg-neutral-100 text-black" : "text-neutral-500 hover:text-black hover:bg-neutral-50/50"}`
|
|
2134
2037
|
},
|
|
2135
|
-
formatTabLabel(tab
|
|
2038
|
+
formatTabLabel(tab)
|
|
2136
2039
|
);
|
|
2137
|
-
})), /* @__PURE__ */
|
|
2138
|
-
"button",
|
|
2139
|
-
{
|
|
2140
|
-
onClick: () => {
|
|
2141
|
-
if (onCreateCard) onCreateCard();
|
|
2142
|
-
},
|
|
2143
|
-
className: "w-9 h-9 rounded-full bg-white flex items-center justify-center text-neutral-500 hover:text-black transition-colors shrink-0 outline-none"
|
|
2144
|
-
},
|
|
2145
|
-
/* @__PURE__ */ React20.createElement(HugeiconsIcon14, { icon: PlusSignIcon2, size: 18 })
|
|
2146
|
-
)), /* @__PURE__ */ React20.createElement("div", { className: "w-full pt-2 pb-2 flex justify-center" }, /* @__PURE__ */ React20.createElement(
|
|
2040
|
+
}))), /* @__PURE__ */ React19.createElement("div", { className: "w-full pt-2 pb-2 flex justify-center" }, /* @__PURE__ */ React19.createElement(
|
|
2147
2041
|
"div",
|
|
2148
2042
|
{
|
|
2149
2043
|
className: "relative w-full max-w-85",
|
|
2150
|
-
style: { height:
|
|
2044
|
+
style: { height: 179 }
|
|
2151
2045
|
},
|
|
2152
|
-
!isBgLoaded && /* @__PURE__ */
|
|
2153
|
-
showActionOverlay && /* @__PURE__ */
|
|
2046
|
+
!isBgLoaded && /* @__PURE__ */ React19.createElement("div", { className: "absolute inset-0 w-full h-full bg-white rounded-2xl flex items-center justify-center z-50" }, /* @__PURE__ */ React19.createElement(HugeiconsIcon13, { icon: Loading03Icon8, size: 28, className: "animate-spin text-black" })),
|
|
2047
|
+
showActionOverlay && /* @__PURE__ */ React19.createElement("div", { className: `absolute inset-0 z-40 w-full h-full rounded-2xl flex flex-col items-center justify-center transition-all ${overlayClasses}` }, isUnactivated && /* @__PURE__ */ React19.createElement(
|
|
2154
2048
|
"button",
|
|
2155
2049
|
{
|
|
2156
2050
|
onClick: (e) => {
|
|
@@ -2160,7 +2054,7 @@ var UniversalCardPage = ({
|
|
|
2160
2054
|
className: `px-6 py-2 text-[11px] rounded-full transition-all outline-none active:scale-95 ${buttonClasses}`
|
|
2161
2055
|
},
|
|
2162
2056
|
"Activate Card"
|
|
2163
|
-
), isDead && /* @__PURE__ */
|
|
2057
|
+
), isDead && /* @__PURE__ */ React19.createElement(
|
|
2164
2058
|
"button",
|
|
2165
2059
|
{
|
|
2166
2060
|
onClick: (e) => {
|
|
@@ -2170,7 +2064,7 @@ var UniversalCardPage = ({
|
|
|
2170
2064
|
className: `px-6 py-2 text-[11px] rounded-full transition-all outline-none active:scale-95 ${buttonClasses}`
|
|
2171
2065
|
},
|
|
2172
2066
|
"Create Card"
|
|
2173
|
-
), isFrozen && /* @__PURE__ */
|
|
2067
|
+
), isFrozen && /* @__PURE__ */ React19.createElement(
|
|
2174
2068
|
"button",
|
|
2175
2069
|
{
|
|
2176
2070
|
onClick: (e) => {
|
|
@@ -2180,23 +2074,23 @@ var UniversalCardPage = ({
|
|
|
2180
2074
|
disabled: isOverlayActionLoading,
|
|
2181
2075
|
className: `px-6 py-2.5 text-[12px] rounded-full transition-all outline-none active:scale-95 flex items-center gap-2 disabled:opacity-80 ${buttonClasses}`
|
|
2182
2076
|
},
|
|
2183
|
-
isOverlayActionLoading ? /* @__PURE__ */
|
|
2077
|
+
isOverlayActionLoading ? /* @__PURE__ */ React19.createElement(HugeiconsIcon13, { icon: Loading03Icon8, size: 16, className: `animate-spin ${activeCard.contentDark ? "text-black" : "text-white"}` }) : "Unfreeze Card"
|
|
2184
2078
|
)),
|
|
2185
|
-
/* @__PURE__ */
|
|
2079
|
+
/* @__PURE__ */ React19.createElement("div", { className: `absolute inset-0 w-full h-full rounded-2xl overflow-hidden transition-all duration-700 ${isBgLoaded ? "opacity-100 scale-100" : "opacity-0 scale-105"}` }, /* @__PURE__ */ React19.createElement(
|
|
2186
2080
|
"div",
|
|
2187
2081
|
{
|
|
2188
2082
|
className: "absolute inset-0 bg-cover bg-center",
|
|
2189
2083
|
style: { backgroundImage: `url(${activeCard.cardBgSrc})` }
|
|
2190
2084
|
}
|
|
2191
|
-
), /* @__PURE__ */
|
|
2085
|
+
), /* @__PURE__ */ React19.createElement("div", { className: "relative z-10 w-full h-full p-5 flex flex-col justify-between" }, /* @__PURE__ */ React19.createElement("div", { className: "flex items-start justify-end w-full gap-4" }, activeCard.prepaid && /* @__PURE__ */ React19.createElement("div", { className: "flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ React19.createElement("span", { className: `text-[9px] tracking-widest ${activeCard.contentDark ? "text-black/60" : "text-white/60"}` }, "Card Tier"), /* @__PURE__ */ React19.createElement("span", { className: `text-[11px] tracking-widest font-medium ${activeCard.contentDark ? "text-black" : "text-white"}` }, activeCard.tier))), /* @__PURE__ */ React19.createElement("div", { className: "flex justify-between items-end w-full" }, /* @__PURE__ */ React19.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ React19.createElement("span", { className: `text-[9px] tracking-widest ${activeCard.contentDark ? "text-black/60" : "text-white/60"}` }, activeCard.prepaid ? "Card Balance" : "Card Tier"), /* @__PURE__ */ React19.createElement("span", { className: `text-[12px] tracking-widest font-medium ${activeCard.contentDark ? "text-black" : "text-white"}` }, activeCard.prepaid ? activeCard.balance || "$0.00" : activeCard.tier)), activeCard.networkLogoSrc && /* @__PURE__ */ React19.createElement(
|
|
2192
2086
|
"img",
|
|
2193
2087
|
{
|
|
2194
2088
|
src: activeCard.networkLogoSrc,
|
|
2195
2089
|
alt: "Network Logo",
|
|
2196
|
-
className: "h-
|
|
2090
|
+
className: "h-7 w-auto max-w-20 object-contain opacity-90"
|
|
2197
2091
|
}
|
|
2198
2092
|
))))
|
|
2199
|
-
)), activeCard.bannerProps ? /* @__PURE__ */
|
|
2093
|
+
)), activeCard.bannerProps ? /* @__PURE__ */ React19.createElement("div", { className: "mb-6 w-full mt-2" }, /* @__PURE__ */ React19.createElement(Banner, { ...activeCard.bannerProps })) : isPreordered ? /* @__PURE__ */ React19.createElement("div", { className: "mb-6 w-full mt-2" }, /* @__PURE__ */ React19.createElement(
|
|
2200
2094
|
Banner,
|
|
2201
2095
|
{
|
|
2202
2096
|
type: "success",
|
|
@@ -2204,7 +2098,7 @@ var UniversalCardPage = ({
|
|
|
2204
2098
|
message: `Your ${activeCard.tier} ${activeCard.type.toLowerCase()} card has been pre-ordered successfully and is pending batch processing.`,
|
|
2205
2099
|
isDismissible: false
|
|
2206
2100
|
}
|
|
2207
|
-
)) : null, /* @__PURE__ */
|
|
2101
|
+
)) : null, /* @__PURE__ */ React19.createElement("div", { className: "w-full flex flex-col gap-4 mt-1" }, /* @__PURE__ */ React19.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, activeCard.prepaid && /* @__PURE__ */ React19.createElement(
|
|
2208
2102
|
MenuRow,
|
|
2209
2103
|
{
|
|
2210
2104
|
icon: PlusSignIcon2,
|
|
@@ -2215,19 +2109,18 @@ var UniversalCardPage = ({
|
|
|
2215
2109
|
},
|
|
2216
2110
|
disabled: actionsDisabled
|
|
2217
2111
|
}
|
|
2218
|
-
), /* @__PURE__ */
|
|
2112
|
+
), /* @__PURE__ */ React19.createElement(
|
|
2219
2113
|
MenuRow,
|
|
2220
2114
|
{
|
|
2221
2115
|
icon: ViewOffSlashIcon2,
|
|
2222
2116
|
title: "Reveal Information",
|
|
2223
2117
|
subtitle: "Show secure card details",
|
|
2224
|
-
onClick:
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
toggleLoading: isRevealing,
|
|
2118
|
+
onClick: () => {
|
|
2119
|
+
if (!revealDisabled && onReveal) onReveal(activeCard.id);
|
|
2120
|
+
},
|
|
2228
2121
|
disabled: revealDisabled
|
|
2229
2122
|
}
|
|
2230
|
-
), /* @__PURE__ */
|
|
2123
|
+
), /* @__PURE__ */ React19.createElement(
|
|
2231
2124
|
MenuRow,
|
|
2232
2125
|
{
|
|
2233
2126
|
icon: SnowIcon,
|
|
@@ -2237,9 +2130,10 @@ var UniversalCardPage = ({
|
|
|
2237
2130
|
isToggle: true,
|
|
2238
2131
|
toggleState: isFrozen,
|
|
2239
2132
|
toggleLoading: isFreezing,
|
|
2240
|
-
disabled: freezeDisabled
|
|
2133
|
+
disabled: freezeDisabled,
|
|
2134
|
+
isLast: activeCard.prepaid
|
|
2241
2135
|
}
|
|
2242
|
-
), /* @__PURE__ */
|
|
2136
|
+
), !activeCard.prepaid && /* @__PURE__ */ React19.createElement(
|
|
2243
2137
|
MenuRow,
|
|
2244
2138
|
{
|
|
2245
2139
|
icon: SlidersHorizontalIcon,
|
|
@@ -2251,7 +2145,7 @@ var UniversalCardPage = ({
|
|
|
2251
2145
|
disabled: actionsDisabled,
|
|
2252
2146
|
isLast: true
|
|
2253
2147
|
}
|
|
2254
|
-
)), /* @__PURE__ */
|
|
2148
|
+
)), /* @__PURE__ */ React19.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React19.createElement(
|
|
2255
2149
|
MenuRow,
|
|
2256
2150
|
{
|
|
2257
2151
|
icon: Delete02Icon,
|
|
@@ -2263,7 +2157,7 @@ var UniversalCardPage = ({
|
|
|
2263
2157
|
disabled: actionsDisabled,
|
|
2264
2158
|
isLast: true
|
|
2265
2159
|
}
|
|
2266
|
-
))), /* @__PURE__ */
|
|
2160
|
+
))), /* @__PURE__ */ React19.createElement(
|
|
2267
2161
|
ConfirmationDialog,
|
|
2268
2162
|
{
|
|
2269
2163
|
isOpen: showDeleteDialog,
|
|
@@ -2275,15 +2169,6 @@ var UniversalCardPage = ({
|
|
|
2275
2169
|
onClose: () => setShowDeleteDialog(false),
|
|
2276
2170
|
onConfirm: confirmDelete
|
|
2277
2171
|
}
|
|
2278
|
-
), /* @__PURE__ */ React20.createElement(
|
|
2279
|
-
PinDialerBottomSheet,
|
|
2280
|
-
{
|
|
2281
|
-
isOpen: showPinDialer,
|
|
2282
|
-
title: "Enter your pin",
|
|
2283
|
-
isVerifying: isRevealing,
|
|
2284
|
-
onClose: () => setShowPinDialer(false),
|
|
2285
|
-
onComplete: handlePinComplete
|
|
2286
|
-
}
|
|
2287
2172
|
));
|
|
2288
2173
|
};
|
|
2289
2174
|
var MenuRow = ({
|
|
@@ -2298,20 +2183,20 @@ var MenuRow = ({
|
|
|
2298
2183
|
toggleState = false,
|
|
2299
2184
|
toggleLoading = false,
|
|
2300
2185
|
disabled = false
|
|
2301
|
-
}) => /* @__PURE__ */
|
|
2186
|
+
}) => /* @__PURE__ */ React19.createElement(
|
|
2302
2187
|
"div",
|
|
2303
2188
|
{
|
|
2304
2189
|
onClick: disabled ? void 0 : onClick,
|
|
2305
|
-
className: `flex items-center p-3 transition-colors ${!isLast ? "" : ""} ${disabled ? "opacity-40 cursor-not-allowed" : "cursor-pointer hover:bg-neutral-50"}`
|
|
2190
|
+
className: `flex items-center p-3 transition-colors ${!isLast ? "border-b border-neutral-100" : ""} ${disabled ? "opacity-40 cursor-not-allowed" : "cursor-pointer hover:bg-neutral-50"}`
|
|
2306
2191
|
},
|
|
2307
|
-
/* @__PURE__ */
|
|
2308
|
-
/* @__PURE__ */
|
|
2309
|
-
isToggle ? /* @__PURE__ */
|
|
2192
|
+
/* @__PURE__ */ React19.createElement("div", { className: "w-9 h-9 rounded-full border border-neutral-200 flex items-center justify-center shrink-0 mr-4" }, /* @__PURE__ */ React19.createElement(HugeiconsIcon13, { icon, size: 16, className: iconColor })),
|
|
2193
|
+
/* @__PURE__ */ React19.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React19.createElement("p", { className: `text-[13px] truncate ${titleColor}` }, title), /* @__PURE__ */ React19.createElement("p", { className: "text-[11px] text-neutral-500 truncate" }, subtitle)),
|
|
2194
|
+
isToggle ? /* @__PURE__ */ React19.createElement("div", { className: `relative w-11 h-6 rounded-full transition-colors duration-300 ml-2 shrink-0 ${toggleState ? "bg-black" : "bg-neutral-200"} ${disabled ? "opacity-50" : ""}` }, /* @__PURE__ */ React19.createElement("div", { className: `absolute top-1 left-1 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300 flex items-center justify-center ${toggleState ? "translate-x-5" : "translate-x-0"}` }, toggleLoading && /* @__PURE__ */ React19.createElement(HugeiconsIcon13, { icon: Loading03Icon8, size: 10, className: "animate-spin text-black" }))) : /* @__PURE__ */ React19.createElement(HugeiconsIcon13, { icon: ArrowRight01Icon3, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
2310
2195
|
);
|
|
2311
2196
|
|
|
2312
2197
|
// src/components/UniversalProfilePage.tsx
|
|
2313
|
-
import
|
|
2314
|
-
import { HugeiconsIcon as
|
|
2198
|
+
import React20, { useState as useState12 } from "react";
|
|
2199
|
+
import { HugeiconsIcon as HugeiconsIcon14 } from "@hugeicons/react";
|
|
2315
2200
|
import {
|
|
2316
2201
|
UserIcon,
|
|
2317
2202
|
LockKeyIcon as LockKeyIcon2,
|
|
@@ -2322,7 +2207,7 @@ import {
|
|
|
2322
2207
|
LogoutCircle02Icon,
|
|
2323
2208
|
UserRemove01Icon,
|
|
2324
2209
|
ArrowRight01Icon as ArrowRight01Icon4,
|
|
2325
|
-
Loading03Icon as
|
|
2210
|
+
Loading03Icon as Loading03Icon9
|
|
2326
2211
|
} from "@hugeicons/core-free-icons";
|
|
2327
2212
|
var UniversalProfilePage = ({
|
|
2328
2213
|
avatarSrc,
|
|
@@ -2337,9 +2222,9 @@ var UniversalProfilePage = ({
|
|
|
2337
2222
|
onLogoutTap,
|
|
2338
2223
|
onDeleteTap
|
|
2339
2224
|
}) => {
|
|
2340
|
-
const [isAvatarLoaded, setIsAvatarLoaded] =
|
|
2341
|
-
const [showLogoutDialog, setShowLogoutDialog] =
|
|
2342
|
-
const [isLoggingOut, setIsLoggingOut] =
|
|
2225
|
+
const [isAvatarLoaded, setIsAvatarLoaded] = useState12(false);
|
|
2226
|
+
const [showLogoutDialog, setShowLogoutDialog] = useState12(false);
|
|
2227
|
+
const [isLoggingOut, setIsLoggingOut] = useState12(false);
|
|
2343
2228
|
const handleConfirmLogout = async () => {
|
|
2344
2229
|
setIsLoggingOut(true);
|
|
2345
2230
|
try {
|
|
@@ -2359,7 +2244,7 @@ var UniversalProfilePage = ({
|
|
|
2359
2244
|
if (r.includes("platinum")) return "text-yellow-400";
|
|
2360
2245
|
return "text-neutral-400";
|
|
2361
2246
|
};
|
|
2362
|
-
return /* @__PURE__ */
|
|
2247
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ React20.createElement("div", { className: "pt-8 pb-4 flex flex-col items-center" }, /* @__PURE__ */ React20.createElement("div", { className: "w-22 h-22 rounded-full bg-white p-1 mb-4 flex items-center justify-center" }, /* @__PURE__ */ React20.createElement("div", { className: "relative w-full h-full rounded-full overflow-hidden bg-neutral-100 flex items-center justify-center" }, avatarSrc ? /* @__PURE__ */ React20.createElement(React20.Fragment, null, !isAvatarLoaded && /* @__PURE__ */ React20.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-100" }, /* @__PURE__ */ React20.createElement(HugeiconsIcon14, { icon: Loading03Icon9, size: 24, className: "animate-spin text-black" })), /* @__PURE__ */ React20.createElement(
|
|
2363
2248
|
"img",
|
|
2364
2249
|
{
|
|
2365
2250
|
src: avatarSrc,
|
|
@@ -2367,7 +2252,7 @@ var UniversalProfilePage = ({
|
|
|
2367
2252
|
onLoad: () => setIsAvatarLoaded(true),
|
|
2368
2253
|
className: `w-full h-full object-cover transition-opacity duration-300 ${isAvatarLoaded ? "opacity-100" : "opacity-0"}`
|
|
2369
2254
|
}
|
|
2370
|
-
)) : /* @__PURE__ */
|
|
2255
|
+
)) : /* @__PURE__ */ React20.createElement(HugeiconsIcon14, { icon: UserIcon, size: 40, className: "text-neutral-300" }))), /* @__PURE__ */ React20.createElement("div", { className: "bg-white rounded-full px-4 py-2 flex items-center justify-center gap-2 mb-3" }, /* @__PURE__ */ React20.createElement("span", { className: "text-[12px] text-black" }, roleName), /* @__PURE__ */ React20.createElement("span", { className: getBadgeColorClass(roleName), "aria-hidden": true }, /* @__PURE__ */ React20.createElement("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React20.createElement("g", { id: "SVGRepo_bgCarrier", strokeWidth: "0" }), /* @__PURE__ */ React20.createElement("g", { id: "SVGRepo_tracerCarrier", strokeLinecap: "round", strokeLinejoin: "round" }), /* @__PURE__ */ React20.createElement("g", { id: "SVGRepo_iconCarrier" }, " ", /* @__PURE__ */ React20.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M9.5924 3.20027C9.34888 3.4078 9.22711 3.51158 9.09706 3.59874C8.79896 3.79854 8.46417 3.93721 8.1121 4.00672C7.95851 4.03705 7.79903 4.04977 7.48008 4.07522C6.6787 4.13918 6.278 4.17115 5.94371 4.28923C5.17051 4.56233 4.56233 5.17051 4.28923 5.94371C4.17115 6.278 4.13918 6.6787 4.07522 7.48008C4.04977 7.79903 4.03705 7.95851 4.00672 8.1121C3.93721 8.46417 3.79854 8.79896 3.59874 9.09706C3.51158 9.22711 3.40781 9.34887 3.20027 9.5924C2.67883 10.2043 2.4181 10.5102 2.26522 10.8301C1.91159 11.57 1.91159 12.43 2.26522 13.1699C2.41811 13.4898 2.67883 13.7957 3.20027 14.4076C3.40778 14.6511 3.51158 14.7729 3.59874 14.9029C3.79854 15.201 3.93721 15.5358 4.00672 15.8879C4.03705 16.0415 4.04977 16.201 4.07522 16.5199C4.13918 17.3213 4.17115 17.722 4.28923 18.0563C4.56233 18.8295 5.17051 19.4377 5.94371 19.7108C6.278 19.8288 6.6787 19.8608 7.48008 19.9248C7.79903 19.9502 7.95851 19.963 8.1121 19.9933C8.46417 20.0628 8.79896 20.2015 9.09706 20.4013C9.22711 20.4884 9.34887 20.5922 9.5924 20.7997C10.2043 21.3212 10.5102 21.5819 10.8301 21.7348C11.57 22.0884 12.43 22.0884 13.1699 21.7348C13.4898 21.5819 13.7957 21.3212 14.4076 20.7997C14.6511 20.5922 14.7729 20.4884 14.9029 20.4013C15.201 20.2015 15.5358 20.0628 15.8879 19.9933C16.0415 19.963 16.201 19.9502 16.5199 19.9248C17.3213 19.8608 17.722 19.8288 18.0563 19.7108C18.8295 19.4377 19.4377 18.8295 19.7108 18.0563C19.8288 17.722 19.8608 17.3213 19.9248 16.5199C19.9502 16.201 19.963 16.0415 19.9933 15.8879C20.0628 15.5358 20.2015 15.201 20.4013 14.9029C20.4884 14.7729 20.5922 14.6511 20.7997 14.4076C21.3212 13.7957 21.5819 13.4898 21.7348 13.1699C22.0884 12.43 22.0884 11.57 21.7348 10.8301C21.5819 10.5102 21.3212 10.2043 20.7997 9.5924C20.5922 9.34887 20.4884 9.22711 20.4013 9.09706C20.2015 8.79896 20.0628 8.46417 19.9933 8.1121C19.963 7.95851 19.9502 7.79903 19.9248 7.48008C19.8608 6.6787 19.8288 6.278 19.7108 5.94371C19.4377 5.17051 18.8295 4.56233 18.0563 4.28923C17.722 4.17115 17.3213 4.13918 16.5199 4.07522C16.201 4.04977 16.0415 4.03705 15.8879 4.00672C15.5358 3.93721 15.201 3.79854 14.9029 3.59874C14.7729 3.51158 14.6511 3.40781 14.4076 3.20027C13.7957 2.67883 13.4898 2.41811 13.1699 2.26522C12.43 1.91159 11.57 1.91159 10.8301 2.26522C10.5102 2.4181 10.2043 2.67883 9.5924 3.20027ZM16.3735 9.86314C16.6913 9.5453 16.6913 9.03 16.3735 8.71216C16.0557 8.39433 15.5403 8.39433 15.2225 8.71216L10.3723 13.5624L8.77746 11.9676C8.45963 11.6498 7.94432 11.6498 7.62649 11.9676C7.30866 12.2854 7.30866 12.8007 7.62649 13.1186L9.79678 15.2889C10.1146 15.6067 10.6299 15.6067 10.9478 15.2889L16.3735 9.86314Z", fill: "currentColor" }), " ")))), /* @__PURE__ */ React20.createElement("span", { className: "text-[12px] text-neutral-500" }, memberSince)), /* @__PURE__ */ React20.createElement("div", { className: "w-full flex flex-col gap-4 mt-2" }, /* @__PURE__ */ React20.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React20.createElement(
|
|
2371
2256
|
MenuRow2,
|
|
2372
2257
|
{
|
|
2373
2258
|
icon: UserIcon,
|
|
@@ -2375,7 +2260,7 @@ var UniversalProfilePage = ({
|
|
|
2375
2260
|
subtitle: "Your account details",
|
|
2376
2261
|
onClick: onAccountTap
|
|
2377
2262
|
}
|
|
2378
|
-
), /* @__PURE__ */
|
|
2263
|
+
), /* @__PURE__ */ React20.createElement(
|
|
2379
2264
|
MenuRow2,
|
|
2380
2265
|
{
|
|
2381
2266
|
icon: LockKeyIcon2,
|
|
@@ -2383,7 +2268,7 @@ var UniversalProfilePage = ({
|
|
|
2383
2268
|
subtitle: "2FA & authentication",
|
|
2384
2269
|
onClick: onSecurityTap
|
|
2385
2270
|
}
|
|
2386
|
-
), /* @__PURE__ */
|
|
2271
|
+
), /* @__PURE__ */ React20.createElement(
|
|
2387
2272
|
MenuRow2,
|
|
2388
2273
|
{
|
|
2389
2274
|
icon: ShieldUserIcon,
|
|
@@ -2391,7 +2276,7 @@ var UniversalProfilePage = ({
|
|
|
2391
2276
|
subtitle: "Manage web3 profile",
|
|
2392
2277
|
onClick: onDefiTap
|
|
2393
2278
|
}
|
|
2394
|
-
), /* @__PURE__ */
|
|
2279
|
+
), /* @__PURE__ */ React20.createElement(
|
|
2395
2280
|
MenuRow2,
|
|
2396
2281
|
{
|
|
2397
2282
|
icon: MessageQuestionIcon,
|
|
@@ -2400,7 +2285,7 @@ var UniversalProfilePage = ({
|
|
|
2400
2285
|
onClick: onHelpTap,
|
|
2401
2286
|
isLast: true
|
|
2402
2287
|
}
|
|
2403
|
-
)), /* @__PURE__ */
|
|
2288
|
+
)), /* @__PURE__ */ React20.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React20.createElement(
|
|
2404
2289
|
MenuRow2,
|
|
2405
2290
|
{
|
|
2406
2291
|
icon: UserIdVerificationIcon,
|
|
@@ -2408,7 +2293,7 @@ var UniversalProfilePage = ({
|
|
|
2408
2293
|
subtitle: "Account Verifications",
|
|
2409
2294
|
onClick: onVerificationsTap
|
|
2410
2295
|
}
|
|
2411
|
-
), /* @__PURE__ */
|
|
2296
|
+
), /* @__PURE__ */ React20.createElement(
|
|
2412
2297
|
MenuRow2,
|
|
2413
2298
|
{
|
|
2414
2299
|
icon: CrownIcon,
|
|
@@ -2416,7 +2301,7 @@ var UniversalProfilePage = ({
|
|
|
2416
2301
|
subtitle: "Referral & Rewards",
|
|
2417
2302
|
onClick: onExportTap
|
|
2418
2303
|
}
|
|
2419
|
-
), /* @__PURE__ */
|
|
2304
|
+
), /* @__PURE__ */ React20.createElement(
|
|
2420
2305
|
MenuRow2,
|
|
2421
2306
|
{
|
|
2422
2307
|
icon: LogoutCircle02Icon,
|
|
@@ -2425,7 +2310,7 @@ var UniversalProfilePage = ({
|
|
|
2425
2310
|
onClick: () => setShowLogoutDialog(true),
|
|
2426
2311
|
isLast: true
|
|
2427
2312
|
}
|
|
2428
|
-
)), /* @__PURE__ */
|
|
2313
|
+
)), /* @__PURE__ */ React20.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden mb-4" }, /* @__PURE__ */ React20.createElement(
|
|
2429
2314
|
MenuRow2,
|
|
2430
2315
|
{
|
|
2431
2316
|
icon: UserRemove01Icon,
|
|
@@ -2434,7 +2319,7 @@ var UniversalProfilePage = ({
|
|
|
2434
2319
|
onClick: onDeleteTap,
|
|
2435
2320
|
isLast: true
|
|
2436
2321
|
}
|
|
2437
|
-
))), /* @__PURE__ */
|
|
2322
|
+
))), /* @__PURE__ */ React20.createElement(
|
|
2438
2323
|
ConfirmationDialog,
|
|
2439
2324
|
{
|
|
2440
2325
|
isOpen: showLogoutDialog,
|
|
@@ -2448,21 +2333,21 @@ var UniversalProfilePage = ({
|
|
|
2448
2333
|
}
|
|
2449
2334
|
));
|
|
2450
2335
|
};
|
|
2451
|
-
var MenuRow2 = ({ icon, title, subtitle, onClick, iconColor = "text-black", titleColor = "text-black", isLast = false }) => /* @__PURE__ */
|
|
2336
|
+
var MenuRow2 = ({ icon, title, subtitle, onClick, iconColor = "text-black", titleColor = "text-black", isLast = false }) => /* @__PURE__ */ React20.createElement(
|
|
2452
2337
|
"div",
|
|
2453
2338
|
{
|
|
2454
2339
|
onClick,
|
|
2455
2340
|
className: `flex items-center p-4 cursor-pointer hover:bg-neutral-50 transition-colors ${!isLast ? "" : ""}`
|
|
2456
2341
|
},
|
|
2457
|
-
/* @__PURE__ */
|
|
2458
|
-
/* @__PURE__ */
|
|
2459
|
-
/* @__PURE__ */
|
|
2342
|
+
/* @__PURE__ */ React20.createElement("div", { className: "w-9 h-9 rounded-full border border-neutral-200 flex items-center justify-center shrink-0 mr-4" }, /* @__PURE__ */ React20.createElement(HugeiconsIcon14, { icon, size: 16, className: iconColor })),
|
|
2343
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React20.createElement("p", { className: `text-[13px] truncate ${titleColor}` }, title), /* @__PURE__ */ React20.createElement("p", { className: "text-[11px] text-neutral-500 truncate" }, subtitle)),
|
|
2344
|
+
/* @__PURE__ */ React20.createElement(HugeiconsIcon14, { icon: ArrowRight01Icon4, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
2460
2345
|
);
|
|
2461
2346
|
|
|
2462
2347
|
// src/components/UniversalSidebar.tsx
|
|
2463
|
-
import
|
|
2348
|
+
import React21, { useState as useState13 } from "react";
|
|
2464
2349
|
import Link5 from "next/link";
|
|
2465
|
-
import { HugeiconsIcon as
|
|
2350
|
+
import { HugeiconsIcon as HugeiconsIcon15 } from "@hugeicons/react";
|
|
2466
2351
|
import {
|
|
2467
2352
|
LogoutCircle02Icon as LogoutCircle02Icon2
|
|
2468
2353
|
} from "@hugeicons/core-free-icons";
|
|
@@ -2473,8 +2358,8 @@ var UniversalSidebar = ({
|
|
|
2473
2358
|
showLogoutAction = false,
|
|
2474
2359
|
onLogout
|
|
2475
2360
|
}) => {
|
|
2476
|
-
const [showLogoutDialog, setShowLogoutDialog] =
|
|
2477
|
-
const [isLoggingOut, setIsLoggingOut] =
|
|
2361
|
+
const [showLogoutDialog, setShowLogoutDialog] = useState13(false);
|
|
2362
|
+
const [isLoggingOut, setIsLoggingOut] = useState13(false);
|
|
2478
2363
|
const hasActiveMatch = navItems.some(
|
|
2479
2364
|
(item) => item.path === "/" || item.path === "/app" ? currentPath === "/" || currentPath === "/app" : currentPath === item.path || currentPath?.startsWith(`${item.path}/`)
|
|
2480
2365
|
);
|
|
@@ -2488,10 +2373,10 @@ var UniversalSidebar = ({
|
|
|
2488
2373
|
setShowLogoutDialog(false);
|
|
2489
2374
|
}
|
|
2490
2375
|
};
|
|
2491
|
-
return /* @__PURE__ */
|
|
2376
|
+
return /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement("aside", { className: "hidden md:flex fixed top-0 left-0 h-screen w-20 flex-col z-40 overflow-y-auto custom-scrollbar" }, /* @__PURE__ */ React21.createElement("div", { className: "h-24 shrink-0" }), /* @__PURE__ */ React21.createElement("nav", { className: "flex-1 flex flex-col gap-3 px-2" }, navItems.map((item, index) => {
|
|
2492
2377
|
const isExactOrSubMatch = item.path === "/" || item.path === "/app" ? currentPath === "/" || currentPath === "/app" : currentPath === item.path || currentPath?.startsWith(`${item.path}/`);
|
|
2493
2378
|
const isCurrentRoute = isExactOrSubMatch || !hasActiveMatch && index === 0;
|
|
2494
|
-
return /* @__PURE__ */
|
|
2379
|
+
return /* @__PURE__ */ React21.createElement(
|
|
2495
2380
|
Link5,
|
|
2496
2381
|
{
|
|
2497
2382
|
key: item.name,
|
|
@@ -2500,8 +2385,8 @@ var UniversalSidebar = ({
|
|
|
2500
2385
|
className: `flex items-center justify-center w-12 h-12 mx-auto rounded-full transition-all outline-none group shrink-0 ${isCurrentRoute ? "bg-white text-black" : "text-neutral-500 hover:text-black hover:bg-white/50"}`,
|
|
2501
2386
|
title: item.name
|
|
2502
2387
|
},
|
|
2503
|
-
/* @__PURE__ */
|
|
2504
|
-
|
|
2388
|
+
/* @__PURE__ */ React21.createElement(
|
|
2389
|
+
HugeiconsIcon15,
|
|
2505
2390
|
{
|
|
2506
2391
|
icon: item.icon,
|
|
2507
2392
|
size: 20,
|
|
@@ -2509,14 +2394,14 @@ var UniversalSidebar = ({
|
|
|
2509
2394
|
}
|
|
2510
2395
|
)
|
|
2511
2396
|
);
|
|
2512
|
-
})), /* @__PURE__ */
|
|
2397
|
+
})), /* @__PURE__ */ React21.createElement("div", { className: "p-4 shrink-0 flex flex-col items-center gap-2 mb-4" }, showLogoutAction && /* @__PURE__ */ React21.createElement(
|
|
2513
2398
|
"button",
|
|
2514
2399
|
{
|
|
2515
2400
|
onClick: () => setShowLogoutDialog(true),
|
|
2516
2401
|
className: "w-12 h-12 rounded-full flex items-center justify-center text-neutral-500 hover:bg-white/50 transition-all outline-none"
|
|
2517
2402
|
},
|
|
2518
|
-
/* @__PURE__ */
|
|
2519
|
-
))), showLogoutAction && /* @__PURE__ */
|
|
2403
|
+
/* @__PURE__ */ React21.createElement(HugeiconsIcon15, { icon: LogoutCircle02Icon2, size: 20 })
|
|
2404
|
+
))), showLogoutAction && /* @__PURE__ */ React21.createElement(
|
|
2520
2405
|
ConfirmationDialog,
|
|
2521
2406
|
{
|
|
2522
2407
|
isOpen: showLogoutDialog,
|
|
@@ -2532,16 +2417,16 @@ var UniversalSidebar = ({
|
|
|
2532
2417
|
};
|
|
2533
2418
|
|
|
2534
2419
|
// src/components/HeroSection.tsx
|
|
2535
|
-
import
|
|
2420
|
+
import React23, { useState as useState15, useEffect as useEffect9, useRef as useRef4 } from "react";
|
|
2536
2421
|
import Link6 from "next/link";
|
|
2537
2422
|
import Image3 from "next/image";
|
|
2538
2423
|
|
|
2539
2424
|
// src/components/WaitlistDialog.tsx
|
|
2540
|
-
import
|
|
2425
|
+
import React22, { useState as useState14 } from "react";
|
|
2541
2426
|
import { toast as toast6 } from "react-hot-toast";
|
|
2542
2427
|
var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
2543
|
-
const [email, setEmail] =
|
|
2544
|
-
const [isLoading, setIsLoading] =
|
|
2428
|
+
const [email, setEmail] = useState14("");
|
|
2429
|
+
const [isLoading, setIsLoading] = useState14(false);
|
|
2545
2430
|
if (!isOpen) return null;
|
|
2546
2431
|
const handleSubmit = async (e) => {
|
|
2547
2432
|
e.preventDefault();
|
|
@@ -2572,19 +2457,19 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2572
2457
|
setIsLoading(false);
|
|
2573
2458
|
}
|
|
2574
2459
|
};
|
|
2575
|
-
return /* @__PURE__ */
|
|
2460
|
+
return /* @__PURE__ */ React22.createElement("div", { className: "fixed inset-0 z-100 flex items-center justify-center p-4 bg-black/40" }, /* @__PURE__ */ React22.createElement("div", { className: "absolute inset-0", onClick: !isLoading ? onClose : void 0 }), /* @__PURE__ */ React22.createElement(
|
|
2576
2461
|
"div",
|
|
2577
2462
|
{
|
|
2578
2463
|
className: "w-full max-w-md bg-white rounded-2xl shadow-2xl overflow-hidden relative z-10 animate-in fade-in zoom-in-95 duration-200"
|
|
2579
2464
|
},
|
|
2580
|
-
/* @__PURE__ */
|
|
2465
|
+
/* @__PURE__ */ React22.createElement(
|
|
2581
2466
|
"button",
|
|
2582
2467
|
{
|
|
2583
2468
|
onClick: onClose,
|
|
2584
2469
|
disabled: isLoading,
|
|
2585
2470
|
className: "absolute top-4 right-4 p-2 text-neutral-700 hover:text-neutral-400 transition-colors disabled:opacity-50 outline-none"
|
|
2586
2471
|
},
|
|
2587
|
-
/* @__PURE__ */
|
|
2472
|
+
/* @__PURE__ */ React22.createElement(
|
|
2588
2473
|
"svg",
|
|
2589
2474
|
{
|
|
2590
2475
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -2597,11 +2482,11 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2597
2482
|
strokeLinecap: "round",
|
|
2598
2483
|
strokeLinejoin: "round"
|
|
2599
2484
|
},
|
|
2600
|
-
/* @__PURE__ */
|
|
2601
|
-
/* @__PURE__ */
|
|
2485
|
+
/* @__PURE__ */ React22.createElement("path", { d: "M18 6 6 18" }),
|
|
2486
|
+
/* @__PURE__ */ React22.createElement("path", { d: "m6 6 12 12" })
|
|
2602
2487
|
)
|
|
2603
2488
|
),
|
|
2604
|
-
/* @__PURE__ */
|
|
2489
|
+
/* @__PURE__ */ React22.createElement("div", { className: "p-6 sm:p-8" }, /* @__PURE__ */ React22.createElement("div", { className: "mb-8 mt-2" }, /* @__PURE__ */ React22.createElement("h2", { className: "text-2xl text-black tracking-tight mb-2" }, "Join the Waitlist"), /* @__PURE__ */ React22.createElement("p", { className: "text-[13px] text-neutral-500 leading-relaxed" }, "Be the first to experience the future of Web3 freedom. Secure your early access spot today.")), /* @__PURE__ */ React22.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col gap-8" }, /* @__PURE__ */ React22.createElement(
|
|
2605
2490
|
TextInput,
|
|
2606
2491
|
{
|
|
2607
2492
|
label: "Email ID",
|
|
@@ -2611,7 +2496,7 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2611
2496
|
placeholder: "name@example.com",
|
|
2612
2497
|
disabled: isLoading
|
|
2613
2498
|
}
|
|
2614
|
-
), /* @__PURE__ */
|
|
2499
|
+
), /* @__PURE__ */ React22.createElement(
|
|
2615
2500
|
ThreeDActionButton,
|
|
2616
2501
|
{
|
|
2617
2502
|
type: "submit",
|
|
@@ -2644,10 +2529,10 @@ var HeroSection = ({
|
|
|
2644
2529
|
bgImageSrc,
|
|
2645
2530
|
isWaitlist = false
|
|
2646
2531
|
}) => {
|
|
2647
|
-
const [isAnimating, setIsAnimating] =
|
|
2648
|
-
const [isWaitlistOpen, setIsWaitlistOpen] =
|
|
2532
|
+
const [isAnimating, setIsAnimating] = useState15(false);
|
|
2533
|
+
const [isWaitlistOpen, setIsWaitlistOpen] = useState15(false);
|
|
2649
2534
|
const titleRef = useRef4(null);
|
|
2650
|
-
|
|
2535
|
+
useEffect9(() => {
|
|
2651
2536
|
const observer = new IntersectionObserver(
|
|
2652
2537
|
([entry]) => {
|
|
2653
2538
|
if (entry.isIntersecting) {
|
|
@@ -2669,7 +2554,7 @@ var HeroSection = ({
|
|
|
2669
2554
|
setIsWaitlistOpen(true);
|
|
2670
2555
|
}
|
|
2671
2556
|
};
|
|
2672
|
-
return /* @__PURE__ */
|
|
2557
|
+
return /* @__PURE__ */ React23.createElement("div", { className: "w-screen min-h-screen flex justify-center items-center p-4" }, /* @__PURE__ */ React23.createElement("section", { className: "relative h-[95vh] w-full overflow-hidden rounded-2xl " }, bgVideoSrc ? /* @__PURE__ */ React23.createElement(
|
|
2673
2558
|
"video",
|
|
2674
2559
|
{
|
|
2675
2560
|
src: bgVideoSrc,
|
|
@@ -2680,7 +2565,7 @@ var HeroSection = ({
|
|
|
2680
2565
|
playsInline: true,
|
|
2681
2566
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
2682
2567
|
}
|
|
2683
|
-
) : bgImageSrc ? /* @__PURE__ */
|
|
2568
|
+
) : bgImageSrc ? /* @__PURE__ */ React23.createElement(
|
|
2684
2569
|
Image3,
|
|
2685
2570
|
{
|
|
2686
2571
|
src: bgImageSrc,
|
|
@@ -2689,7 +2574,7 @@ var HeroSection = ({
|
|
|
2689
2574
|
priority: true,
|
|
2690
2575
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
2691
2576
|
}
|
|
2692
|
-
) : null, /* @__PURE__ */
|
|
2577
|
+
) : null, /* @__PURE__ */ React23.createElement(
|
|
2693
2578
|
"div",
|
|
2694
2579
|
{
|
|
2695
2580
|
className: "pointer-events-none absolute inset-0 z-10 opacity-[0.7] mix-blend-overlay",
|
|
@@ -2697,15 +2582,15 @@ var HeroSection = ({
|
|
|
2697
2582
|
backgroundImage: `url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")`
|
|
2698
2583
|
}
|
|
2699
2584
|
}
|
|
2700
|
-
), /* @__PURE__ */
|
|
2585
|
+
), /* @__PURE__ */ React23.createElement("div", { className: "pointer-events-none absolute inset-0 bg-linear-to-b from-black/30 via-transparent to-black/80 z-10" }), /* @__PURE__ */ React23.createElement("div", { className: "absolute bottom-0 left-0 right-0 px-4 pb-4 sm:px-6 md:px-10 z-20" }, /* @__PURE__ */ React23.createElement("div", { className: "grid grid-cols-12 items-end gap-4" }, /* @__PURE__ */ React23.createElement("div", { className: "col-span-12 lg:col-span-8" }, /* @__PURE__ */ React23.createElement(
|
|
2701
2586
|
"h1",
|
|
2702
2587
|
{
|
|
2703
2588
|
ref: titleRef,
|
|
2704
2589
|
className: "leading-[0.85] tracking-[-0.07em] text-[18.2vw] sm:text-[16.8vw] md:text-[15.4vw] lg:text-[14vw] xl:text-[13.3vw] 2xl:text-[14vw] text-[#ffffff]"
|
|
2705
2590
|
},
|
|
2706
|
-
/* @__PURE__ */
|
|
2707
|
-
)), /* @__PURE__ */
|
|
2708
|
-
/* @__PURE__ */
|
|
2591
|
+
/* @__PURE__ */ React23.createElement("div", { className: "inline-flex flex-wrap" }, /* @__PURE__ */ React23.createElement("span", { className: `inline-block relative transition-all duration-1000 ${isAnimating ? "opacity-100 translate-y-0" : "opacity-0 translate-y-10"}` }, titlePrefix, titlePrefix && /* @__PURE__ */ React23.createElement("br", null), highlightText, /* @__PURE__ */ React23.createElement("span", { className: "absolute top-[0.65em] right-[-0.3em] text-[0.31em] text-[#ffffff]/70" }, "*")))
|
|
2592
|
+
)), /* @__PURE__ */ React23.createElement("div", { className: "col-span-12 flex flex-col gap-5 pb-6 lg:col-span-4 lg:pb-10" }, subtitle && /* @__PURE__ */ React23.createElement("p", { className: "text-xs text-[#ffffff]/70 sm:text-sm md:text-base leading-[1.2] max-w-md transition-opacity duration-1000 delay-300" }, subtitle), /* @__PURE__ */ React23.createElement("div", { className: "flex flex-col sm:flex-row items-start sm:items-center gap-4" }, ctaText && // Changed from <button> to <Link> so it actually navigates!
|
|
2593
|
+
/* @__PURE__ */ React23.createElement(
|
|
2709
2594
|
Link6,
|
|
2710
2595
|
{
|
|
2711
2596
|
href: isWaitlist ? "#" : ctaHref || "#",
|
|
@@ -2713,15 +2598,15 @@ var HeroSection = ({
|
|
|
2713
2598
|
className: "group inline-flex h-10 items-center gap-2 self-start rounded-full bg-[#ceff8a] pl-5 pr-1 text-xs text-black transition-all hover:gap-3"
|
|
2714
2599
|
},
|
|
2715
2600
|
ctaText,
|
|
2716
|
-
/* @__PURE__ */
|
|
2717
|
-
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
2601
|
+
/* @__PURE__ */ React23.createElement("span", { className: "flex h-8 w-8 items-center justify-center rounded-full bg-[#143731] transition-transform group-hover:scale-110" }, /* @__PURE__ */ React23.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "lucide lucide-arrow-right h-4 w-4 text-[#ffffff]" }, /* @__PURE__ */ React23.createElement("path", { d: "M5 12h14" }), /* @__PURE__ */ React23.createElement("path", { d: "m12 5 7 7-7 7" })))
|
|
2602
|
+
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ React23.createElement(
|
|
2718
2603
|
Link6,
|
|
2719
2604
|
{
|
|
2720
2605
|
href: secondaryCtaHref,
|
|
2721
2606
|
className: "inline-flex h-10 items-center self-start justify-center text-xs tracking-wide rounded-full px-6 border border-[#ffffff]/30 text-[#ffffff] hover:bg-[#ffffff]/10 transition-colors"
|
|
2722
2607
|
},
|
|
2723
2608
|
secondaryCtaText
|
|
2724
|
-
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */
|
|
2609
|
+
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */ React23.createElement("div", { className: "flex flex-col gap-3 mt-4" }, appsText && /* @__PURE__ */ React23.createElement("span", { className: "text-[10px] tracking-widest text-[#ffffff]/50 " }, appsText), /* @__PURE__ */ React23.createElement("div", { className: "flex items-center gap-4" }, appLogos.map((logo, idx) => /* @__PURE__ */ React23.createElement("div", { key: idx, className: "relative h-6 w-6 sm:h-7 sm:w-7 opacity-70 hover:opacity-100 transition-opacity invert" }, /* @__PURE__ */ React23.createElement(
|
|
2725
2610
|
Image3,
|
|
2726
2611
|
{
|
|
2727
2612
|
src: logo.src,
|
|
@@ -2730,7 +2615,7 @@ var HeroSection = ({
|
|
|
2730
2615
|
height: 28,
|
|
2731
2616
|
className: "object-contain"
|
|
2732
2617
|
}
|
|
2733
|
-
))))))))), /* @__PURE__ */
|
|
2618
|
+
))))))))), /* @__PURE__ */ React23.createElement(
|
|
2734
2619
|
WaitlistDialog,
|
|
2735
2620
|
{
|
|
2736
2621
|
isOpen: isWaitlistOpen,
|
|
@@ -2740,12 +2625,12 @@ var HeroSection = ({
|
|
|
2740
2625
|
};
|
|
2741
2626
|
|
|
2742
2627
|
// src/components/AppBento2.tsx
|
|
2743
|
-
import
|
|
2744
|
-
import { HugeiconsIcon as
|
|
2628
|
+
import React24, { useState as useState16, useEffect as useEffect10, useRef as useRef5 } from "react";
|
|
2629
|
+
import { HugeiconsIcon as HugeiconsIcon16 } from "@hugeicons/react";
|
|
2745
2630
|
var AppBento2 = ({ tagline, headline, features }) => {
|
|
2746
|
-
const [isAnimating, setIsAnimating] =
|
|
2631
|
+
const [isAnimating, setIsAnimating] = useState16(false);
|
|
2747
2632
|
const titleRef = useRef5(null);
|
|
2748
|
-
|
|
2633
|
+
useEffect10(() => {
|
|
2749
2634
|
const observer = new IntersectionObserver(
|
|
2750
2635
|
([entry]) => {
|
|
2751
2636
|
if (entry.isIntersecting) {
|
|
@@ -2763,7 +2648,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2763
2648
|
}
|
|
2764
2649
|
return () => observer.disconnect();
|
|
2765
2650
|
}, []);
|
|
2766
|
-
return /* @__PURE__ */
|
|
2651
|
+
return /* @__PURE__ */ React24.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ React24.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ React24.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React24.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ React24.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React24.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), /* @__PURE__ */ React24.createElement(
|
|
2767
2652
|
"h2",
|
|
2768
2653
|
{
|
|
2769
2654
|
ref: titleRef,
|
|
@@ -2771,7 +2656,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2771
2656
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2772
2657
|
},
|
|
2773
2658
|
headline
|
|
2774
|
-
))), /* @__PURE__ */
|
|
2659
|
+
))), /* @__PURE__ */ React24.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-6 gap-6" }, features.map((f, i) => {
|
|
2775
2660
|
const isWhite = i === 0;
|
|
2776
2661
|
const isBlack = i === 1;
|
|
2777
2662
|
const isNeutral = i === 2;
|
|
@@ -2793,34 +2678,34 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2793
2678
|
const textColor = isBlack ? "text-white" : "text-black";
|
|
2794
2679
|
const subTextColor = isBlack ? "text-neutral-300" : "text-neutral-600";
|
|
2795
2680
|
const labelColor = isBlack ? "text-neutral-400" : "text-neutral-500";
|
|
2796
|
-
return /* @__PURE__ */
|
|
2681
|
+
return /* @__PURE__ */ React24.createElement(
|
|
2797
2682
|
"div",
|
|
2798
2683
|
{
|
|
2799
2684
|
key: i,
|
|
2800
2685
|
className: `relative rounded-2xl overflow-hidden p-8 flex flex-col min-h-75 transition-all duration-500 group text-left ${getBgStyle()} ${f.size}`,
|
|
2801
2686
|
style: { boxShadow: getShadowStyle() }
|
|
2802
2687
|
},
|
|
2803
|
-
/* @__PURE__ */
|
|
2688
|
+
/* @__PURE__ */ React24.createElement(
|
|
2804
2689
|
"div",
|
|
2805
2690
|
{
|
|
2806
2691
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
2807
2692
|
style: { backgroundImage: `url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")` }
|
|
2808
2693
|
}
|
|
2809
2694
|
),
|
|
2810
|
-
isBlack && /* @__PURE__ */
|
|
2811
|
-
/* @__PURE__ */
|
|
2812
|
-
/* @__PURE__ */
|
|
2695
|
+
isBlack && /* @__PURE__ */ React24.createElement("span", { className: "absolute inset-0 rounded-2xl bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none z-10" }),
|
|
2696
|
+
/* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 overflow-hidden pointer-events-none z-0" }, /* @__PURE__ */ React24.createElement("div", { className: `absolute -bottom-8 -right-8 transform group-hover:scale-110 transition-transform duration-700 ease-out ${isBlack ? "text-white/5" : "text-black/5"}` }, /* @__PURE__ */ React24.createElement(HugeiconsIcon16, { icon: f.icon, size: 180 }))),
|
|
2697
|
+
/* @__PURE__ */ React24.createElement("div", { className: "relative z-10 w-full h-full flex flex-col pointer-events-auto" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between mb-8" }, /* @__PURE__ */ React24.createElement("span", { className: `text-[9px] tracking-widest ${labelColor}` }, f.label), /* @__PURE__ */ React24.createElement("div", { className: `p-2 rounded-full transition-colors ${isBlack ? "bg-white/10" : "bg-white/50 backdrop-blur-sm"}` }, /* @__PURE__ */ React24.createElement(HugeiconsIcon16, { icon: f.icon, size: 20, className: textColor }))), /* @__PURE__ */ React24.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React24.createElement("h3", { className: `text-xl mb-2 tracking-tight ${textColor}` }, f.title), /* @__PURE__ */ React24.createElement("p", { className: `text-[13px] leading-relaxed max-w-sm ${subTextColor}` }, f.desc)))
|
|
2813
2698
|
);
|
|
2814
2699
|
})))));
|
|
2815
2700
|
};
|
|
2816
2701
|
|
|
2817
2702
|
// src/components/UniversalSecurityPage.tsx
|
|
2818
|
-
import
|
|
2703
|
+
import React25, { useState as useState17, useRef as useRef6 } from "react";
|
|
2819
2704
|
import toast7 from "react-hot-toast";
|
|
2820
|
-
import { HugeiconsIcon as
|
|
2705
|
+
import { HugeiconsIcon as HugeiconsIcon17 } from "@hugeicons/react";
|
|
2821
2706
|
import {
|
|
2822
|
-
CancelCircleIcon as
|
|
2823
|
-
Loading03Icon as
|
|
2707
|
+
CancelCircleIcon as CancelCircleIcon5,
|
|
2708
|
+
Loading03Icon as Loading03Icon10,
|
|
2824
2709
|
Copy01Icon as Copy01Icon3,
|
|
2825
2710
|
ArrowLeft01Icon as ArrowLeft01Icon6,
|
|
2826
2711
|
CircleLockCheck02Icon,
|
|
@@ -2842,14 +2727,14 @@ var UniversalSecurityPage = ({
|
|
|
2842
2727
|
onVerifyAndEnablePasskey,
|
|
2843
2728
|
onDisablePasskey
|
|
2844
2729
|
}) => {
|
|
2845
|
-
const [show2FASetupModal, setShow2FASetupModal] =
|
|
2846
|
-
const [show2FADisableModal, setShow2FADisableModal] =
|
|
2847
|
-
const [showPasskeyModal, setShowPasskeyModal] =
|
|
2848
|
-
const [twoFaSecret, setTwoFaSecret] =
|
|
2849
|
-
const [twoFaQr, setTwoFaQr] =
|
|
2850
|
-
const [isFetchingSetup, setIsFetchingSetup] =
|
|
2851
|
-
const [otp, setOtp] =
|
|
2852
|
-
const [isSubmitting, setIsSubmitting] =
|
|
2730
|
+
const [show2FASetupModal, setShow2FASetupModal] = useState17(false);
|
|
2731
|
+
const [show2FADisableModal, setShow2FADisableModal] = useState17(false);
|
|
2732
|
+
const [showPasskeyModal, setShowPasskeyModal] = useState17(false);
|
|
2733
|
+
const [twoFaSecret, setTwoFaSecret] = useState17("");
|
|
2734
|
+
const [twoFaQr, setTwoFaQr] = useState17("");
|
|
2735
|
+
const [isFetchingSetup, setIsFetchingSetup] = useState17(false);
|
|
2736
|
+
const [otp, setOtp] = useState17(Array(6).fill(""));
|
|
2737
|
+
const [isSubmitting, setIsSubmitting] = useState17(false);
|
|
2853
2738
|
const inputRefs = useRef6([]);
|
|
2854
2739
|
const resetOtp = () => {
|
|
2855
2740
|
setOtp(Array(6).fill(""));
|
|
@@ -2992,15 +2877,15 @@ var UniversalSecurityPage = ({
|
|
|
2992
2877
|
setIsSubmitting(false);
|
|
2993
2878
|
}
|
|
2994
2879
|
};
|
|
2995
|
-
return /* @__PURE__ */
|
|
2880
|
+
return /* @__PURE__ */ React25.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 pb-12" }, /* @__PURE__ */ React25.createElement(ManagedToaster, null), /* @__PURE__ */ React25.createElement("div", { className: "mb-6 flex items-center px-1" }, /* @__PURE__ */ React25.createElement(
|
|
2996
2881
|
"button",
|
|
2997
2882
|
{
|
|
2998
2883
|
onClick: onBack,
|
|
2999
2884
|
className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none"
|
|
3000
2885
|
},
|
|
3001
|
-
/* @__PURE__ */
|
|
2886
|
+
/* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon: ArrowLeft01Icon6, size: 16 }),
|
|
3002
2887
|
" Back"
|
|
3003
|
-
)), /* @__PURE__ */
|
|
2888
|
+
)), /* @__PURE__ */ React25.createElement("div", { className: "w-full flex flex-col gap-4" }, /* @__PURE__ */ React25.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React25.createElement(
|
|
3004
2889
|
MenuRow3,
|
|
3005
2890
|
{
|
|
3006
2891
|
icon: CircleLockCheck02Icon,
|
|
@@ -3011,7 +2896,7 @@ var UniversalSecurityPage = ({
|
|
|
3011
2896
|
toggleState: has2FA,
|
|
3012
2897
|
toggleLoading: is2FALoading || isFetchingSetup
|
|
3013
2898
|
}
|
|
3014
|
-
), /* @__PURE__ */
|
|
2899
|
+
), /* @__PURE__ */ React25.createElement(
|
|
3015
2900
|
MenuRow3,
|
|
3016
2901
|
{
|
|
3017
2902
|
icon: Key01Icon,
|
|
@@ -3023,18 +2908,18 @@ var UniversalSecurityPage = ({
|
|
|
3023
2908
|
toggleLoading: isPasskeyLoading,
|
|
3024
2909
|
isLast: true
|
|
3025
2910
|
}
|
|
3026
|
-
))), show2FASetupModal && /* @__PURE__ */
|
|
2911
|
+
))), show2FASetupModal && /* @__PURE__ */ React25.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React25.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShow2FASetupModal(false) }), /* @__PURE__ */ React25.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__ */ React25.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ React25.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable 2FA"), /* @__PURE__ */ React25.createElement("button", { onClick: () => !isSubmitting && setShow2FASetupModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon: CancelCircleIcon5, size: 18 }))), /* @__PURE__ */ React25.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-2" }, /* @__PURE__ */ React25.createElement("div", { className: "w-full flex justify-center mb-6 mix-blend-multiply" }, twoFaQr ? /* @__PURE__ */ React25.createElement("img", { src: twoFaQr, alt: "2FA QR Code", className: "w-40 h-40 object-contain rounded-xl border border-neutral-200 p-2" }) : /* @__PURE__ */ React25.createElement("div", { className: "w-40 h-40 bg-neutral-100 rounded-xl flex items-center justify-center animate-pulse" })), /* @__PURE__ */ React25.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-8" }, /* @__PURE__ */ React25.createElement("div", null, /* @__PURE__ */ React25.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2 uppercase" }, "Setup Key"), /* @__PURE__ */ React25.createElement("div", { className: "flex items-center gap-2 min-w-0 bg-neutral-50 px-3 py-2.5 rounded-xl " }, /* @__PURE__ */ React25.createElement("span", { className: "text-[13px] font-mono tracking-widest text-black truncate min-w-0 block flex-1" }, twoFaSecret), /* @__PURE__ */ React25.createElement(
|
|
3027
2912
|
"button",
|
|
3028
2913
|
{
|
|
3029
2914
|
type: "button",
|
|
3030
2915
|
onClick: () => handleCopySecret(twoFaSecret),
|
|
3031
2916
|
className: "text-neutral-400 hover:text-black transition-colors outline-none shrink-0 ml-2"
|
|
3032
2917
|
},
|
|
3033
|
-
/* @__PURE__ */
|
|
3034
|
-
)))), /* @__PURE__ */
|
|
2918
|
+
/* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon: Copy01Icon3, size: 16 })
|
|
2919
|
+
)))), /* @__PURE__ */ React25.createElement("div", { className: "text-center mb-8 mt-2" }, /* @__PURE__ */ React25.createElement("h2", { className: "text-xl text-black mb-2 tracking-tight" }, "Security Check"), /* @__PURE__ */ React25.createElement("p", { className: "text-[13px] text-neutral-500" }, "Enter the 6-digit code from your app")), /* @__PURE__ */ React25.createElement("form", { className: "space-y-4", autoComplete: "off", onSubmit: (e) => {
|
|
3035
2920
|
e.preventDefault();
|
|
3036
2921
|
submitEnable2FA(otp.join(""));
|
|
3037
|
-
} }, /* @__PURE__ */
|
|
2922
|
+
} }, /* @__PURE__ */ React25.createElement("div", { className: "flex justify-between gap-2 pb-6", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ React25.createElement(
|
|
3038
2923
|
"input",
|
|
3039
2924
|
{
|
|
3040
2925
|
key: index,
|
|
@@ -3053,7 +2938,7 @@ var UniversalSecurityPage = ({
|
|
|
3053
2938
|
},
|
|
3054
2939
|
className: "w-8 h-12 text-center text-lg bg-transparent border-b-2 border-neutral-200 text-black outline-none focus:border-black transition-all duration-300"
|
|
3055
2940
|
}
|
|
3056
|
-
))), /* @__PURE__ */
|
|
2941
|
+
))), /* @__PURE__ */ React25.createElement(
|
|
3057
2942
|
ThreeDActionButton,
|
|
3058
2943
|
{
|
|
3059
2944
|
type: "submit",
|
|
@@ -3062,19 +2947,19 @@ var UniversalSecurityPage = ({
|
|
|
3062
2947
|
className: "w-full py-3.5"
|
|
3063
2948
|
},
|
|
3064
2949
|
"Verify & Enable"
|
|
3065
|
-
), /* @__PURE__ */
|
|
2950
|
+
), /* @__PURE__ */ React25.createElement(
|
|
3066
2951
|
"button",
|
|
3067
2952
|
{
|
|
3068
2953
|
type: "button",
|
|
3069
2954
|
onClick: () => handleCopySecret(twoFaSecret),
|
|
3070
2955
|
className: "w-full flex items-center justify-center py-2.5 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 outline-none text-xs tracking-wide transition-colors mt-2"
|
|
3071
2956
|
},
|
|
3072
|
-
/* @__PURE__ */
|
|
2957
|
+
/* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon: Copy01Icon3, size: 16, className: "mr-2" }),
|
|
3073
2958
|
"Copy Secret Key"
|
|
3074
|
-
))))), show2FADisableModal && /* @__PURE__ */
|
|
2959
|
+
))))), show2FADisableModal && /* @__PURE__ */ React25.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React25.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShow2FADisableModal(false) }), /* @__PURE__ */ React25.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__ */ React25.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ React25.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Disable 2FA"), /* @__PURE__ */ React25.createElement("button", { onClick: () => !isSubmitting && setShow2FADisableModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon: CancelCircleIcon5, size: 18 }))), /* @__PURE__ */ React25.createElement("div", { className: "p-6" }, /* @__PURE__ */ React25.createElement("div", { className: "text-center mb-8 mt-2" }, /* @__PURE__ */ React25.createElement("h2", { className: "text-xl text-black mb-2 tracking-tight" }, "Security Check"), /* @__PURE__ */ React25.createElement("p", { className: "text-[13px] text-neutral-500" }, "Enter the code from your authenticator app to disable 2FA.")), /* @__PURE__ */ React25.createElement("form", { className: "space-y-8", autoComplete: "off", onSubmit: (e) => {
|
|
3075
2960
|
e.preventDefault();
|
|
3076
2961
|
submitDisable2FA(otp.join(""));
|
|
3077
|
-
} }, /* @__PURE__ */
|
|
2962
|
+
} }, /* @__PURE__ */ React25.createElement("div", { className: "flex justify-between gap-2", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ React25.createElement(
|
|
3078
2963
|
"input",
|
|
3079
2964
|
{
|
|
3080
2965
|
key: index,
|
|
@@ -3093,7 +2978,7 @@ var UniversalSecurityPage = ({
|
|
|
3093
2978
|
},
|
|
3094
2979
|
className: "w-10 h-12 text-center text-lg bg-transparent border-b-2 border-neutral-200 text-black outline-none focus:border-black transition-all duration-300"
|
|
3095
2980
|
}
|
|
3096
|
-
))), /* @__PURE__ */
|
|
2981
|
+
))), /* @__PURE__ */ React25.createElement(
|
|
3097
2982
|
ThreeDActionButton,
|
|
3098
2983
|
{
|
|
3099
2984
|
type: "submit",
|
|
@@ -3102,7 +2987,7 @@ var UniversalSecurityPage = ({
|
|
|
3102
2987
|
className: "w-full py-3.5"
|
|
3103
2988
|
},
|
|
3104
2989
|
"Verify & Disable"
|
|
3105
|
-
))))), showPasskeyModal && /* @__PURE__ */
|
|
2990
|
+
))))), showPasskeyModal && /* @__PURE__ */ React25.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React25.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShowPasskeyModal(false) }), /* @__PURE__ */ React25.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__ */ React25.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React25.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable Passkey"), /* @__PURE__ */ React25.createElement("button", { onClick: () => !isSubmitting && setShowPasskeyModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon: CancelCircleIcon5, size: 18 }))), /* @__PURE__ */ React25.createElement("div", { className: "p-6 text-center" }, /* @__PURE__ */ React25.createElement("h2", { className: "text-lg text-black mb-2 tracking-tight" }, "Simplify your Sign In"), /* @__PURE__ */ React25.createElement("p", { className: "text-[13px] text-neutral-500 mb-8 leading-relaxed" }, "Use your device's biometrics (Face ID, Touch ID, or PIN) to securely sign into your account without needing a password."), /* @__PURE__ */ React25.createElement(
|
|
3106
2991
|
ThreeDActionButton,
|
|
3107
2992
|
{
|
|
3108
2993
|
onClick: submitEnablePasskey,
|
|
@@ -3124,26 +3009,26 @@ var MenuRow3 = ({
|
|
|
3124
3009
|
toggleState = false,
|
|
3125
3010
|
toggleLoading = false,
|
|
3126
3011
|
disabled = false
|
|
3127
|
-
}) => /* @__PURE__ */
|
|
3012
|
+
}) => /* @__PURE__ */ React25.createElement(
|
|
3128
3013
|
"div",
|
|
3129
3014
|
{
|
|
3130
3015
|
onClick: disabled ? void 0 : onClick,
|
|
3131
3016
|
className: `flex items-center p-4 transition-colors ${!isLast ? "" : ""} ${disabled ? "opacity-40 cursor-not-allowed" : "cursor-pointer hover:bg-neutral-50"}`
|
|
3132
3017
|
},
|
|
3133
|
-
/* @__PURE__ */
|
|
3134
|
-
/* @__PURE__ */
|
|
3135
|
-
isToggle ? /* @__PURE__ */
|
|
3018
|
+
/* @__PURE__ */ React25.createElement("div", { className: "w-9 h-9 rounded-full border border-neutral-200 flex items-center justify-center shrink-0 mr-4" }, /* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon, size: 16, className: iconColor })),
|
|
3019
|
+
/* @__PURE__ */ React25.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React25.createElement("p", { className: `text-[14px] truncate ${titleColor}` }, title), /* @__PURE__ */ React25.createElement("p", { className: "text-[12px] text-neutral-500 truncate" }, subtitle)),
|
|
3020
|
+
isToggle ? /* @__PURE__ */ React25.createElement("div", { className: `relative w-11 h-6 rounded-full transition-colors duration-300 ml-2 shrink-0 ${toggleState ? "bg-black" : "bg-neutral-200"} ${disabled ? "opacity-50" : ""}` }, /* @__PURE__ */ React25.createElement("div", { className: `absolute top-1 left-1 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300 flex items-center justify-center ${toggleState ? "translate-x-5" : "translate-x-0"}` }, toggleLoading && /* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon: Loading03Icon10, size: 10, className: "animate-spin text-black" }))) : /* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon: ArrowRight01Icon5, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
3136
3021
|
);
|
|
3137
3022
|
|
|
3138
3023
|
// src/components/FeatureScroll.tsx
|
|
3139
|
-
import
|
|
3024
|
+
import React26, { useRef as useRef7, useState as useState18, useEffect as useEffect11 } from "react";
|
|
3140
3025
|
import Image4 from "next/image";
|
|
3141
|
-
import { HugeiconsIcon as
|
|
3142
|
-
import { ArrowLeft01Icon as ArrowLeft01Icon7, ArrowRight01Icon as ArrowRight01Icon6, Loading03Icon as
|
|
3026
|
+
import { HugeiconsIcon as HugeiconsIcon18 } from "@hugeicons/react";
|
|
3027
|
+
import { ArrowLeft01Icon as ArrowLeft01Icon7, ArrowRight01Icon as ArrowRight01Icon6, Loading03Icon as Loading03Icon11 } from "@hugeicons/core-free-icons";
|
|
3143
3028
|
var FeatureCard = ({ feature, bgImage }) => {
|
|
3144
|
-
const [isBgLoading, setIsBgLoading] =
|
|
3145
|
-
const [isFgLoading, setIsFgLoading] =
|
|
3146
|
-
return /* @__PURE__ */
|
|
3029
|
+
const [isBgLoading, setIsBgLoading] = useState18(true);
|
|
3030
|
+
const [isFgLoading, setIsFgLoading] = useState18(!!feature.image);
|
|
3031
|
+
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(
|
|
3147
3032
|
Image4,
|
|
3148
3033
|
{
|
|
3149
3034
|
src: bgImage,
|
|
@@ -3156,7 +3041,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
3156
3041
|
${isBgLoading ? "blur-xl scale-110" : "blur-0 scale-100"}
|
|
3157
3042
|
`
|
|
3158
3043
|
}
|
|
3159
|
-
), /* @__PURE__ */
|
|
3044
|
+
), /* @__PURE__ */ React26.createElement(
|
|
3160
3045
|
"div",
|
|
3161
3046
|
{
|
|
3162
3047
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.25] mix-blend-overlay",
|
|
@@ -3164,7 +3049,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
3164
3049
|
backgroundImage: `url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")`
|
|
3165
3050
|
}
|
|
3166
3051
|
}
|
|
3167
|
-
), isFgLoading && feature.image && /* @__PURE__ */
|
|
3052
|
+
), isFgLoading && feature.image && /* @__PURE__ */ React26.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-50/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ React26.createElement(HugeiconsIcon18, { icon: Loading03Icon11, size: 32, className: "animate-spin text-neutral-400" })), feature.image && /* @__PURE__ */ React26.createElement("div", { className: "absolute -bottom-6 -right-6 w-[85%] h-[85%] z-10 transition-transform duration-700 ease-out group-hover:-translate-x-2 group-hover:-translate-y-2" }, /* @__PURE__ */ React26.createElement(
|
|
3168
3053
|
Image4,
|
|
3169
3054
|
{
|
|
3170
3055
|
src: feature.image,
|
|
@@ -3177,12 +3062,12 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
3177
3062
|
${isFgLoading ? "opacity-0 blur-xl" : "opacity-100 blur-0"}
|
|
3178
3063
|
`
|
|
3179
3064
|
}
|
|
3180
|
-
))), /* @__PURE__ */
|
|
3065
|
+
))), /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ React26.createElement("h3", { className: " text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ React26.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 max-w-[90%]" }, feature.desc)));
|
|
3181
3066
|
};
|
|
3182
3067
|
var FeatureScroll = ({ tagline, headline, features }) => {
|
|
3183
3068
|
const scrollRef = useRef7(null);
|
|
3184
|
-
const [canScrollLeft, setCanScrollLeft] =
|
|
3185
|
-
const [canScrollRight, setCanScrollRight] =
|
|
3069
|
+
const [canScrollLeft, setCanScrollLeft] = useState18(false);
|
|
3070
|
+
const [canScrollRight, setCanScrollRight] = useState18(true);
|
|
3186
3071
|
const checkScroll = () => {
|
|
3187
3072
|
if (scrollRef.current) {
|
|
3188
3073
|
const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;
|
|
@@ -3190,7 +3075,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
3190
3075
|
setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 2);
|
|
3191
3076
|
}
|
|
3192
3077
|
};
|
|
3193
|
-
|
|
3078
|
+
useEffect11(() => {
|
|
3194
3079
|
checkScroll();
|
|
3195
3080
|
window.addEventListener("resize", checkScroll);
|
|
3196
3081
|
return () => window.removeEventListener("resize", checkScroll);
|
|
@@ -3206,72 +3091,72 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
3206
3091
|
"https://retinalabs.company/assets/images/bg_6.avif",
|
|
3207
3092
|
"https://retinalabs.company/assets/images/bg_1.avif"
|
|
3208
3093
|
];
|
|
3209
|
-
return /* @__PURE__ */
|
|
3094
|
+
return /* @__PURE__ */ React26.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden" }, /* @__PURE__ */ React26.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ React26.createElement("div", { className: "relative z-10 text-left" }, /* @__PURE__ */ React26.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ React26.createElement("h2", { className: " text-3xl tracking-tight text-black leading-[1.05]" }, headline)), /* @__PURE__ */ React26.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ React26.createElement(
|
|
3210
3095
|
"button",
|
|
3211
3096
|
{
|
|
3212
3097
|
onClick: () => scroll("left"),
|
|
3213
3098
|
disabled: !canScrollLeft,
|
|
3214
3099
|
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"
|
|
3215
3100
|
},
|
|
3216
|
-
/* @__PURE__ */
|
|
3217
|
-
), /* @__PURE__ */
|
|
3101
|
+
/* @__PURE__ */ React26.createElement(HugeiconsIcon18, { icon: ArrowLeft01Icon7, size: 20 })
|
|
3102
|
+
), /* @__PURE__ */ React26.createElement(
|
|
3218
3103
|
"button",
|
|
3219
3104
|
{
|
|
3220
3105
|
onClick: () => scroll("right"),
|
|
3221
3106
|
disabled: !canScrollRight,
|
|
3222
3107
|
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"
|
|
3223
3108
|
},
|
|
3224
|
-
/* @__PURE__ */
|
|
3225
|
-
))), /* @__PURE__ */
|
|
3109
|
+
/* @__PURE__ */ React26.createElement(HugeiconsIcon18, { icon: ArrowRight01Icon6, size: 20 })
|
|
3110
|
+
))), /* @__PURE__ */ React26.createElement(
|
|
3226
3111
|
"div",
|
|
3227
3112
|
{
|
|
3228
3113
|
ref: scrollRef,
|
|
3229
3114
|
onScroll: checkScroll,
|
|
3230
3115
|
className: "flex gap-6 overflow-x-auto snap-x snap-mandatory [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] scrollbar-none pb-8 -mx-4 px-4 md:mx-0 md:px-0"
|
|
3231
3116
|
},
|
|
3232
|
-
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */
|
|
3233
|
-
), /* @__PURE__ */
|
|
3117
|
+
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */ React26.createElement(FeatureCard, { key: idx, feature, bgImage: bgImages[idx] }))
|
|
3118
|
+
), /* @__PURE__ */ React26.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ React26.createElement(
|
|
3234
3119
|
"button",
|
|
3235
3120
|
{
|
|
3236
3121
|
onClick: () => scroll("left"),
|
|
3237
3122
|
disabled: !canScrollLeft,
|
|
3238
3123
|
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"
|
|
3239
3124
|
},
|
|
3240
|
-
/* @__PURE__ */
|
|
3241
|
-
), /* @__PURE__ */
|
|
3125
|
+
/* @__PURE__ */ React26.createElement(HugeiconsIcon18, { icon: ArrowLeft01Icon7, size: 20 })
|
|
3126
|
+
), /* @__PURE__ */ React26.createElement(
|
|
3242
3127
|
"button",
|
|
3243
3128
|
{
|
|
3244
3129
|
onClick: () => scroll("right"),
|
|
3245
3130
|
disabled: !canScrollRight,
|
|
3246
3131
|
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"
|
|
3247
3132
|
},
|
|
3248
|
-
/* @__PURE__ */
|
|
3133
|
+
/* @__PURE__ */ React26.createElement(HugeiconsIcon18, { icon: ArrowRight01Icon6, size: 20 })
|
|
3249
3134
|
))));
|
|
3250
3135
|
};
|
|
3251
3136
|
|
|
3252
3137
|
// src/components/PlatformFeatures.tsx
|
|
3253
|
-
import
|
|
3254
|
-
import { HugeiconsIcon as
|
|
3138
|
+
import React27 from "react";
|
|
3139
|
+
import { HugeiconsIcon as HugeiconsIcon19 } from "@hugeicons/react";
|
|
3255
3140
|
var PlatformFeatures = ({
|
|
3256
3141
|
tagline,
|
|
3257
3142
|
headline,
|
|
3258
3143
|
description,
|
|
3259
3144
|
features
|
|
3260
3145
|
}) => {
|
|
3261
|
-
return /* @__PURE__ */
|
|
3146
|
+
return /* @__PURE__ */ React27.createElement("section", { className: "w-full flex justify-center mb-15 relative z-10" }, /* @__PURE__ */ React27.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React27.createElement("div", { className: "flex flex-col items-start mb-16 relative z-10" }, /* @__PURE__ */ React27.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ React27.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.05] mb-6" }, headline), /* @__PURE__ */ React27.createElement("p", { className: "text-[15px] leading-[1.8] text-neutral-600 max-w-2xl" }, description)), /* @__PURE__ */ React27.createElement("div", { className: "w-full h-px bg-neutral-100 mb-16", "aria-hidden": "true" }), /* @__PURE__ */ React27.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-x-8 gap-y-12" }, features.map((feature, idx) => /* @__PURE__ */ React27.createElement(
|
|
3262
3147
|
"div",
|
|
3263
3148
|
{
|
|
3264
3149
|
key: idx,
|
|
3265
3150
|
className: "flex flex-col group animate-in fade-in slide-in-from-bottom-4 duration-700 fill-mode-both",
|
|
3266
3151
|
style: { animationDelay: feature.delay || "0ms" }
|
|
3267
3152
|
},
|
|
3268
|
-
/* @__PURE__ */
|
|
3269
|
-
/* @__PURE__ */
|
|
3153
|
+
/* @__PURE__ */ React27.createElement("div", { className: "flex flex-row items-center gap-4 mb-4" }, /* @__PURE__ */ React27.createElement("div", { className: "w-14 h-14 shrink-0 rounded-xl border border-neutral-200 flex items-center justify-center text-neutral-600 transition-colors duration-300" }, /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: feature.icon, size: 24 })), /* @__PURE__ */ React27.createElement("div", { className: "flex flex-col justify-center" }, /* @__PURE__ */ React27.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400 mb-0.5" }, feature.label || "CAPABILITY"), /* @__PURE__ */ React27.createElement("h3", { className: "text-xl tracking-tight text-black" }, feature.title))),
|
|
3154
|
+
/* @__PURE__ */ React27.createElement("div", null, /* @__PURE__ */ React27.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 pr-4" }, feature.desc))
|
|
3270
3155
|
)))));
|
|
3271
3156
|
};
|
|
3272
3157
|
|
|
3273
3158
|
// src/components/ManagedDocument.tsx
|
|
3274
|
-
import
|
|
3159
|
+
import React28, { useState as useState19, useEffect as useEffect12, useRef as useRef8 } from "react";
|
|
3275
3160
|
var ManagedDocument = ({
|
|
3276
3161
|
tagline,
|
|
3277
3162
|
title,
|
|
@@ -3279,9 +3164,9 @@ var ManagedDocument = ({
|
|
|
3279
3164
|
contactText,
|
|
3280
3165
|
contactEmail
|
|
3281
3166
|
}) => {
|
|
3282
|
-
const [isAnimating, setIsAnimating] =
|
|
3167
|
+
const [isAnimating, setIsAnimating] = useState19(false);
|
|
3283
3168
|
const titleRef = useRef8(null);
|
|
3284
|
-
|
|
3169
|
+
useEffect12(() => {
|
|
3285
3170
|
const observer = new IntersectionObserver(
|
|
3286
3171
|
([entry]) => {
|
|
3287
3172
|
if (entry.isIntersecting) {
|
|
@@ -3301,7 +3186,7 @@ var ManagedDocument = ({
|
|
|
3301
3186
|
}, []);
|
|
3302
3187
|
return (
|
|
3303
3188
|
// Outer layout wrapper (takes up available space, adds padding)
|
|
3304
|
-
/* @__PURE__ */
|
|
3189
|
+
/* @__PURE__ */ React28.createElement("div", { className: "grow pt-4 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React28.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ React28.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React28.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React28.createElement(
|
|
3305
3190
|
"h1",
|
|
3306
3191
|
{
|
|
3307
3192
|
ref: titleRef,
|
|
@@ -3309,7 +3194,7 @@ var ManagedDocument = ({
|
|
|
3309
3194
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
3310
3195
|
},
|
|
3311
3196
|
title
|
|
3312
|
-
)), sections.map((section, index) => /* @__PURE__ */
|
|
3197
|
+
)), sections.map((section, index) => /* @__PURE__ */ React28.createElement("div", { key: index, className: "relative px-5 md:px-12 py-8 md:py-10" }, section.heading && /* @__PURE__ */ React28.createElement("p", { className: " text-[11px] tracking-[0.2em] text-black mb-4 text-left " }, section.heading), section.paragraphs && section.paragraphs.length > 0 && /* @__PURE__ */ React28.createElement("div", { className: "text-[14px] leading-[1.8] text-neutral-700 space-y-4 text-left " }, section.paragraphs.map((text, pIndex) => /* @__PURE__ */ React28.createElement("p", { key: pIndex }, text))), section.quote && /* @__PURE__ */ React28.createElement("div", { className: `border-neutral-200 border rounded-xl p-6 ${section.paragraphs && section.paragraphs.length > 0 ? "mt-6" : ""}` }, /* @__PURE__ */ React28.createElement("p", { className: "text-neutral-900 text-[14px] md:text-[14px] leading-relaxed" }, '"', section.quote, '"')))), (contactText || contactEmail) && /* @__PURE__ */ React28.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ React28.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ React28.createElement(
|
|
3313
3198
|
"a",
|
|
3314
3199
|
{
|
|
3315
3200
|
href: `mailto:${contactEmail}`,
|
|
@@ -3321,18 +3206,18 @@ var ManagedDocument = ({
|
|
|
3321
3206
|
};
|
|
3322
3207
|
|
|
3323
3208
|
// src/components/ManagedContactBlock.tsx
|
|
3324
|
-
import
|
|
3325
|
-
import { HugeiconsIcon as
|
|
3209
|
+
import React29, { useState as useState20, useEffect as useEffect13 } from "react";
|
|
3210
|
+
import { HugeiconsIcon as HugeiconsIcon20 } from "@hugeicons/react";
|
|
3326
3211
|
var SecureEmail = ({ user, domain, className }) => {
|
|
3327
|
-
const [isMounted, setIsMounted] =
|
|
3328
|
-
|
|
3212
|
+
const [isMounted, setIsMounted] = useState20(false);
|
|
3213
|
+
useEffect13(() => {
|
|
3329
3214
|
setIsMounted(true);
|
|
3330
3215
|
}, []);
|
|
3331
3216
|
if (!isMounted) {
|
|
3332
|
-
return /* @__PURE__ */
|
|
3217
|
+
return /* @__PURE__ */ React29.createElement("span", { className, style: { opacity: 0 } }, "Loading");
|
|
3333
3218
|
}
|
|
3334
3219
|
const email = `${user}@${domain}`;
|
|
3335
|
-
return /* @__PURE__ */
|
|
3220
|
+
return /* @__PURE__ */ React29.createElement("a", { href: `mailto:${email}`, className }, email);
|
|
3336
3221
|
};
|
|
3337
3222
|
var ManagedContactBlock = ({
|
|
3338
3223
|
tagline,
|
|
@@ -3341,7 +3226,7 @@ var ManagedContactBlock = ({
|
|
|
3341
3226
|
emails,
|
|
3342
3227
|
socials
|
|
3343
3228
|
}) => {
|
|
3344
|
-
return /* @__PURE__ */
|
|
3229
|
+
return /* @__PURE__ */ React29.createElement("div", { className: "grow pt-4 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React29.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ React29.createElement(
|
|
3345
3230
|
"div",
|
|
3346
3231
|
{
|
|
3347
3232
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3350,21 +3235,21 @@ var ManagedContactBlock = ({
|
|
|
3350
3235
|
backgroundRepeat: "repeat"
|
|
3351
3236
|
}
|
|
3352
3237
|
}
|
|
3353
|
-
), /* @__PURE__ */
|
|
3238
|
+
), /* @__PURE__ */ React29.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React29.createElement("div", { className: "relative px-8 md:px-12 py-10" }, tagline && /* @__PURE__ */ React29.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React29.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ React29.createElement("div", { className: "relative px-8 md:px-12 py-8 pb-14" }, /* @__PURE__ */ React29.createElement("div", { className: "flex flex-wrap gap-12 lg:gap-16 w-full" }, company && /* @__PURE__ */ React29.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React29.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Contact Details"), /* @__PURE__ */ React29.createElement("div", { className: "space-y-3 text-[13px] text-neutral-600 leading-[1.8]" }, company.name && /* @__PURE__ */ React29.createElement("p", { className: "text-black" }, company.name), company.lines && company.lines.map((line, idx) => /* @__PURE__ */ React29.createElement("p", { key: idx }, line)), company.phone && /* @__PURE__ */ React29.createElement("p", { className: "pt-2" }, /* @__PURE__ */ React29.createElement(
|
|
3354
3239
|
"a",
|
|
3355
3240
|
{
|
|
3356
3241
|
href: `tel:${company.phone.replace(/\s+/g, "")}`,
|
|
3357
3242
|
className: "transition-colors hover:text-black"
|
|
3358
3243
|
},
|
|
3359
3244
|
company.phone
|
|
3360
|
-
)))), emails && emails.length > 0 && /* @__PURE__ */
|
|
3245
|
+
)))), emails && emails.length > 0 && /* @__PURE__ */ React29.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React29.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Email Directory"), /* @__PURE__ */ React29.createElement("div", { className: "space-y-6 text-[13px]" }, emails.map((email, idx) => /* @__PURE__ */ React29.createElement("div", { key: idx }, /* @__PURE__ */ React29.createElement("p", { className: "text-[11px] tracking-[0.2em] mb-1.5 text-neutral-500 " }, email.label), /* @__PURE__ */ React29.createElement(
|
|
3361
3246
|
SecureEmail,
|
|
3362
3247
|
{
|
|
3363
3248
|
user: email.user,
|
|
3364
3249
|
domain: email.domain,
|
|
3365
3250
|
className: "text-neutral-600 transition-colors hover:text-black"
|
|
3366
3251
|
}
|
|
3367
|
-
))))), socials && socials.length > 0 && /* @__PURE__ */
|
|
3252
|
+
))))), socials && socials.length > 0 && /* @__PURE__ */ React29.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React29.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Find Us Online"), /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col space-y-5 pt-1" }, socials.map((social, idx) => /* @__PURE__ */ React29.createElement(
|
|
3368
3253
|
"a",
|
|
3369
3254
|
{
|
|
3370
3255
|
key: idx,
|
|
@@ -3373,27 +3258,27 @@ var ManagedContactBlock = ({
|
|
|
3373
3258
|
rel: "noopener noreferrer",
|
|
3374
3259
|
className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black"
|
|
3375
3260
|
},
|
|
3376
|
-
/* @__PURE__ */
|
|
3377
|
-
/* @__PURE__ */
|
|
3261
|
+
/* @__PURE__ */ React29.createElement(HugeiconsIcon20, { icon: social.icon, size: 18 }),
|
|
3262
|
+
/* @__PURE__ */ React29.createElement("span", { className: "text-[13px]" }, social.label)
|
|
3378
3263
|
)))))))));
|
|
3379
3264
|
};
|
|
3380
3265
|
|
|
3381
3266
|
// src/components/ManagedPricingBlock.tsx
|
|
3382
|
-
import
|
|
3267
|
+
import React30, { useState as useState21, useEffect as useEffect14, useRef as useRef9 } from "react";
|
|
3383
3268
|
import Link7 from "next/link";
|
|
3384
3269
|
import Image5 from "next/image";
|
|
3385
|
-
var CheckIcon = ({ className = "" }) => /* @__PURE__ */
|
|
3386
|
-
var CrossIcon = ({ className = "" }) => /* @__PURE__ */
|
|
3270
|
+
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" }));
|
|
3271
|
+
var CrossIcon = ({ 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: "#F5F5F5" }), /* @__PURE__ */ React30.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
3387
3272
|
var ManagedPricingBlock = ({
|
|
3388
3273
|
tagline,
|
|
3389
3274
|
title,
|
|
3390
3275
|
plans = [],
|
|
3391
3276
|
tabs
|
|
3392
3277
|
}) => {
|
|
3393
|
-
const [isAnimating, setIsAnimating] =
|
|
3394
|
-
const [activeTabIndex, setActiveTabIndex] =
|
|
3278
|
+
const [isAnimating, setIsAnimating] = useState21(false);
|
|
3279
|
+
const [activeTabIndex, setActiveTabIndex] = useState21(0);
|
|
3395
3280
|
const titleRef = useRef9(null);
|
|
3396
|
-
|
|
3281
|
+
useEffect14(() => {
|
|
3397
3282
|
const observer = new IntersectionObserver(
|
|
3398
3283
|
([entry]) => {
|
|
3399
3284
|
if (entry.isIntersecting) {
|
|
@@ -3413,7 +3298,7 @@ var ManagedPricingBlock = ({
|
|
|
3413
3298
|
}, []);
|
|
3414
3299
|
const hasTabs = tabs && tabs.length > 0;
|
|
3415
3300
|
const currentPlans = hasTabs ? tabs[activeTabIndex].plans : plans;
|
|
3416
|
-
return /* @__PURE__ */
|
|
3301
|
+
return /* @__PURE__ */ React30.createElement("div", { className: "grow pt-10 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React30.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col items-center" }, /* @__PURE__ */ React30.createElement("div", { className: "w-full flex flex-col items-center text-center mb-10 sm:mb-12" }, tagline && /* @__PURE__ */ React30.createElement("span", { className: "text-[9px] tracking-[0.4em] text-black block " }, tagline), /* @__PURE__ */ React30.createElement(
|
|
3417
3302
|
"h1",
|
|
3418
3303
|
{
|
|
3419
3304
|
ref: titleRef,
|
|
@@ -3421,9 +3306,9 @@ var ManagedPricingBlock = ({
|
|
|
3421
3306
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
3422
3307
|
},
|
|
3423
3308
|
title
|
|
3424
|
-
)), hasTabs && /* @__PURE__ */
|
|
3309
|
+
)), hasTabs && /* @__PURE__ */ React30.createElement("div", { className: "flex items-center justify-center mb-8 sm:mb-10 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ React30.createElement("div", { className: "flex items-center bg-white rounded-full p-1 sm:p-1.5 max-w-full overflow-x-auto custom-scrollbar" }, tabs.map((tab, idx) => {
|
|
3425
3310
|
const isActive = activeTabIndex === idx;
|
|
3426
|
-
return /* @__PURE__ */
|
|
3311
|
+
return /* @__PURE__ */ React30.createElement(
|
|
3427
3312
|
"button",
|
|
3428
3313
|
{
|
|
3429
3314
|
key: idx,
|
|
@@ -3432,19 +3317,19 @@ var ManagedPricingBlock = ({
|
|
|
3432
3317
|
},
|
|
3433
3318
|
tab.label
|
|
3434
3319
|
);
|
|
3435
|
-
}))), /* @__PURE__ */
|
|
3320
|
+
}))), /* @__PURE__ */ React30.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-5 w-full max-w-3xl animate-in slide-in-from-bottom-2 fade-in duration-500" }, currentPlans.map((plan, planIdx) => /* @__PURE__ */ React30.createElement(
|
|
3436
3321
|
"div",
|
|
3437
3322
|
{
|
|
3438
3323
|
key: `${activeTabIndex}-${planIdx}`,
|
|
3439
3324
|
className: `bg-white rounded-3xl p-6 flex flex-col relative overflow-hidden transition-all duration-300 ${plan.isPremium ? "" : ""}`
|
|
3440
3325
|
},
|
|
3441
|
-
/* @__PURE__ */
|
|
3326
|
+
/* @__PURE__ */ React30.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React30.createElement("span", { className: "text-black text-base block mb-1" }, plan.name), /* @__PURE__ */ React30.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ React30.createElement("h3", { className: "text-3xl font-light text-black" }, plan.price), plan.period && /* @__PURE__ */ React30.createElement("span", { className: "text-xs text-neutral-500" }, plan.period)), /* @__PURE__ */ React30.createElement("p", { className: "text-xs text-neutral-500 mt-2 min-h-8" }, plan.description), plan.showApps && plan.appLogos && plan.appLogos.length > 0 && /* @__PURE__ */ React30.createElement("div", { className: "flex items-center gap-2 mt-4" }, plan.appLogos.map((logo, logoIdx) => /* @__PURE__ */ React30.createElement(
|
|
3442
3327
|
"div",
|
|
3443
3328
|
{
|
|
3444
3329
|
key: logoIdx,
|
|
3445
3330
|
className: "relative w-5 h-5 overflow-hidden flex items-center justify-center shrink-0"
|
|
3446
3331
|
},
|
|
3447
|
-
/* @__PURE__ */
|
|
3332
|
+
/* @__PURE__ */ React30.createElement(
|
|
3448
3333
|
Image5,
|
|
3449
3334
|
{
|
|
3450
3335
|
src: logo.src,
|
|
@@ -3455,7 +3340,7 @@ var ManagedPricingBlock = ({
|
|
|
3455
3340
|
}
|
|
3456
3341
|
)
|
|
3457
3342
|
)))),
|
|
3458
|
-
plan.isPremium ? /* @__PURE__ */
|
|
3343
|
+
plan.isPremium ? /* @__PURE__ */ React30.createElement(ThreeDButton, { href: plan.ctaHref, className: "mb-6 w-full" }, plan.ctaText) : /* @__PURE__ */ React30.createElement(
|
|
3459
3344
|
Link7,
|
|
3460
3345
|
{
|
|
3461
3346
|
href: plan.ctaHref,
|
|
@@ -3463,20 +3348,20 @@ var ManagedPricingBlock = ({
|
|
|
3463
3348
|
},
|
|
3464
3349
|
plan.ctaText
|
|
3465
3350
|
),
|
|
3466
|
-
/* @__PURE__ */
|
|
3351
|
+
/* @__PURE__ */ React30.createElement("div", { className: "flex flex-col gap-3" }, plan.features.map((feature, featureIdx) => {
|
|
3467
3352
|
const isAvailable = feature.value !== false;
|
|
3468
3353
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
3469
|
-
return /* @__PURE__ */
|
|
3354
|
+
return /* @__PURE__ */ React30.createElement("div", { key: featureIdx, className: "flex items-center gap-2.5" }, isAvailable ? /* @__PURE__ */ React30.createElement(CheckIcon, null) : /* @__PURE__ */ React30.createElement(CrossIcon, null), /* @__PURE__ */ React30.createElement("span", { className: `text-xs truncate ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ React30.createElement("span", { className: "text-neutral-500 ml-1" }, "(", valueText, ")")));
|
|
3470
3355
|
}))
|
|
3471
3356
|
)))));
|
|
3472
3357
|
};
|
|
3473
3358
|
|
|
3474
3359
|
// src/components/ManagedBoardBlock.tsx
|
|
3475
|
-
import
|
|
3360
|
+
import React31 from "react";
|
|
3476
3361
|
import Image6 from "next/image";
|
|
3477
|
-
import { HugeiconsIcon as
|
|
3362
|
+
import { HugeiconsIcon as HugeiconsIcon21 } from "@hugeicons/react";
|
|
3478
3363
|
import { TwitterIcon, LinkedinIcon } from "@hugeicons/core-free-icons";
|
|
3479
|
-
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */
|
|
3364
|
+
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ React31.createElement(
|
|
3480
3365
|
"a",
|
|
3481
3366
|
{
|
|
3482
3367
|
href,
|
|
@@ -3484,7 +3369,7 @@ var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ React32.
|
|
|
3484
3369
|
rel: "noopener noreferrer",
|
|
3485
3370
|
className: "text-neutral-400 hover:text-black transition-colors"
|
|
3486
3371
|
},
|
|
3487
|
-
/* @__PURE__ */
|
|
3372
|
+
/* @__PURE__ */ React31.createElement(HugeiconsIcon21, { icon, size: 16 })
|
|
3488
3373
|
);
|
|
3489
3374
|
var ManagedBoardBlock = ({
|
|
3490
3375
|
tagline,
|
|
@@ -3493,7 +3378,7 @@ var ManagedBoardBlock = ({
|
|
|
3493
3378
|
contactText,
|
|
3494
3379
|
contactEmail
|
|
3495
3380
|
}) => {
|
|
3496
|
-
return /* @__PURE__ */
|
|
3381
|
+
return /* @__PURE__ */ React31.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React31.createElement("div", { className: "relative w-full mx-auto overflow-hidden max-w-7xl" }, /* @__PURE__ */ React31.createElement(
|
|
3497
3382
|
"div",
|
|
3498
3383
|
{
|
|
3499
3384
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3502,7 +3387,7 @@ var ManagedBoardBlock = ({
|
|
|
3502
3387
|
backgroundRepeat: "repeat"
|
|
3503
3388
|
}
|
|
3504
3389
|
}
|
|
3505
|
-
), /* @__PURE__ */
|
|
3390
|
+
), /* @__PURE__ */ React31.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React31.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ React31.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React31.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ React31.createElement("div", { className: "relative px-5 md:px-12 py-4 md:py-8" }, /* @__PURE__ */ React31.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-5 md:gap-8" }, members.map((member, idx) => /* @__PURE__ */ React31.createElement("div", { key: idx, className: "relative p-6 md:p-8 rounded-2xl bg-white flex flex-col transition-all group" }, /* @__PURE__ */ React31.createElement("div", { className: "flex items-start space-x-4 md:space-x-5 mb-5 md:mb-6" }, /* @__PURE__ */ React31.createElement("div", { className: "relative w-14 h-14 md:w-16 md:h-16 shrink-0 bg-white overflow-hidden rounded-xl" }, /* @__PURE__ */ React31.createElement(
|
|
3506
3391
|
Image6,
|
|
3507
3392
|
{
|
|
3508
3393
|
src: member.imageSrc,
|
|
@@ -3511,7 +3396,7 @@ var ManagedBoardBlock = ({
|
|
|
3511
3396
|
sizes: "(max-width: 768px) 56px, 64px",
|
|
3512
3397
|
className: "object-cover grayscale opacity-100 transition-opacity"
|
|
3513
3398
|
}
|
|
3514
|
-
)), /* @__PURE__ */
|
|
3399
|
+
)), /* @__PURE__ */ React31.createElement("div", { className: "pt-1" }, /* @__PURE__ */ React31.createElement("h3", { className: " text-[14px] md:text-[15px] text-black tracking-tight" }, member.name), /* @__PURE__ */ React31.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 mt-1.5 " }, member.title))), /* @__PURE__ */ React31.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 text-left grow mb-8" }, member.bio), /* @__PURE__ */ React31.createElement("div", { className: "space-y-6 mt-auto" }, /* @__PURE__ */ React31.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ React31.createElement(ThreeDButton, { href: member.website }, "Visit Website")), /* @__PURE__ */ React31.createElement("div", { className: "flex space-x-4 pt-5" }, member.twitterHandle && member.twitterHandle.length > 0 && /* @__PURE__ */ React31.createElement(
|
|
3515
3400
|
MemberSocialLink,
|
|
3516
3401
|
{
|
|
3517
3402
|
href: `https://x.com/${member.twitterHandle}`,
|
|
@@ -3519,7 +3404,7 @@ var ManagedBoardBlock = ({
|
|
|
3519
3404
|
label: "X",
|
|
3520
3405
|
name: member.name
|
|
3521
3406
|
}
|
|
3522
|
-
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */
|
|
3407
|
+
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */ React31.createElement(
|
|
3523
3408
|
MemberSocialLink,
|
|
3524
3409
|
{
|
|
3525
3410
|
href: member.linkedinHandle,
|
|
@@ -3527,28 +3412,28 @@ var ManagedBoardBlock = ({
|
|
|
3527
3412
|
label: "LinkedIn",
|
|
3528
3413
|
name: member.name
|
|
3529
3414
|
}
|
|
3530
|
-
))))))), (contactText || contactEmail) && /* @__PURE__ */
|
|
3415
|
+
))))))), (contactText || contactEmail) && /* @__PURE__ */ React31.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ React31.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ React31.createElement("a", { href: `mailto:${contactEmail}`, className: "text-black decoration-black decoration-2 underline-offset-4 ml-1 transition-colors" }, contactEmail))))));
|
|
3531
3416
|
};
|
|
3532
3417
|
|
|
3533
3418
|
// src/components/ManagedNotFoundBlock.tsx
|
|
3534
|
-
import
|
|
3419
|
+
import React32 from "react";
|
|
3535
3420
|
var ManagedNotFoundBlock = ({
|
|
3536
3421
|
title = "404 - Page Not Found",
|
|
3537
3422
|
description = "The page you are looking for does not exist or has been moved."
|
|
3538
3423
|
}) => {
|
|
3539
|
-
return /* @__PURE__ */
|
|
3424
|
+
return /* @__PURE__ */ React32.createElement("main", { className: "min-h-screen flex items-center justify-center relative z-20 bg-transparent" }, /* @__PURE__ */ React32.createElement("div", { className: "p-6 w-full max-w-md mx-auto text-center" }, /* @__PURE__ */ React32.createElement("div", { className: "mb-8 flex justify-center" }, /* @__PURE__ */ React32.createElement(
|
|
3540
3425
|
"svg",
|
|
3541
3426
|
{
|
|
3542
3427
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3543
3428
|
viewBox: "0 0 24 24",
|
|
3544
3429
|
className: "w-12 h-12 fill-neutral-100"
|
|
3545
3430
|
},
|
|
3546
|
-
/* @__PURE__ */
|
|
3547
|
-
)), /* @__PURE__ */
|
|
3431
|
+
/* @__PURE__ */ React32.createElement("path", { fillRule: "evenodd", d: "M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z", clipRule: "evenodd" })
|
|
3432
|
+
)), /* @__PURE__ */ React32.createElement("h1", { className: " text-xl md:text-3xl text-black tracking-tight mb-4" }, title), /* @__PURE__ */ React32.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-12" }, description)));
|
|
3548
3433
|
};
|
|
3549
3434
|
|
|
3550
3435
|
// src/components/ManagedNewsletterSplitBlock.tsx
|
|
3551
|
-
import
|
|
3436
|
+
import React33 from "react";
|
|
3552
3437
|
import Image7 from "next/image";
|
|
3553
3438
|
var ManagedNewsletterSplitBlock = ({
|
|
3554
3439
|
tagline,
|
|
@@ -3562,7 +3447,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3562
3447
|
ctaHref = "/contact",
|
|
3563
3448
|
children
|
|
3564
3449
|
}) => {
|
|
3565
|
-
return /* @__PURE__ */
|
|
3450
|
+
return /* @__PURE__ */ React33.createElement("div", { className: "grow flex flex-col md:flex-row relative w-full pt-32 md:pt-0" }, /* @__PURE__ */ React33.createElement("div", { className: "hidden md:block md:w-1/2 relative min-h-screen overflow-hidden" }, /* @__PURE__ */ React33.createElement(
|
|
3566
3451
|
Image7,
|
|
3567
3452
|
{
|
|
3568
3453
|
src: imageSrc,
|
|
@@ -3572,7 +3457,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3572
3457
|
className: "object-cover object-top grayscale opacity-60",
|
|
3573
3458
|
quality: 100
|
|
3574
3459
|
}
|
|
3575
|
-
), /* @__PURE__ */
|
|
3460
|
+
), /* @__PURE__ */ React33.createElement(
|
|
3576
3461
|
"div",
|
|
3577
3462
|
{
|
|
3578
3463
|
className: "absolute inset-0 z-10 pointer-events-none",
|
|
@@ -3580,7 +3465,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3580
3465
|
background: "linear-gradient(to right, rgba(255,255,255,0) 30%, #ffffff 100%)"
|
|
3581
3466
|
}
|
|
3582
3467
|
}
|
|
3583
|
-
), /* @__PURE__ */
|
|
3468
|
+
), /* @__PURE__ */ React33.createElement(
|
|
3584
3469
|
"div",
|
|
3585
3470
|
{
|
|
3586
3471
|
className: "absolute inset-x-0 bottom-0 h-40 z-10 pointer-events-none",
|
|
@@ -3588,7 +3473,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3588
3473
|
background: "linear-gradient(to bottom, rgba(255,255,255,0) 0%, #ffffff 100%)"
|
|
3589
3474
|
}
|
|
3590
3475
|
}
|
|
3591
|
-
)), /* @__PURE__ */
|
|
3476
|
+
)), /* @__PURE__ */ React33.createElement("div", { className: "w-full md:w-1/2 flex flex-col items-center justify-center p-4 md:p-12 relative z-20" }, /* @__PURE__ */ React33.createElement("div", { className: "relative w-full max-w-lg p-8 md:p-12 text-center md:text-left transition-all duration-700 ease-out" }, /* @__PURE__ */ React33.createElement(
|
|
3592
3477
|
"div",
|
|
3593
3478
|
{
|
|
3594
3479
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3597,7 +3482,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3597
3482
|
backgroundRepeat: "repeat"
|
|
3598
3483
|
}
|
|
3599
3484
|
}
|
|
3600
|
-
), /* @__PURE__ */
|
|
3485
|
+
), /* @__PURE__ */ React33.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React33.createElement("div", { className: "mb-10 border-b border-neutral-200 pb-8 text-center md:text-left" }, tagline && /* @__PURE__ */ React33.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 " }, tagline), /* @__PURE__ */ React33.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight mb-4" }, title), subtitle && /* @__PURE__ */ React33.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, subtitle)), /* @__PURE__ */ React33.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-10 text-center md:text-left" }, description), children && /* @__PURE__ */ React33.createElement("div", { className: "mb-8 text-left" }, children), /* @__PURE__ */ React33.createElement("div", { className: "text-center md:text-left mt-10 space-y-6" }, dividerText && /* @__PURE__ */ React33.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React33.createElement("div", { className: "grow h-px bg-neutral-100" }), /* @__PURE__ */ React33.createElement("span", { className: "shrink mx-4 text-[11px] tracking-[0.2em] text-neutral-400 " }, dividerText), /* @__PURE__ */ React33.createElement("div", { className: "grow h-px bg-neutral-100" })), ctaText && ctaHref && /* @__PURE__ */ React33.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ React33.createElement(
|
|
3601
3486
|
ThreeDButton,
|
|
3602
3487
|
{
|
|
3603
3488
|
href: ctaHref,
|
|
@@ -3608,14 +3493,14 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3608
3493
|
};
|
|
3609
3494
|
|
|
3610
3495
|
// src/components/PortfolioHero.tsx
|
|
3611
|
-
import
|
|
3496
|
+
import React34, { useEffect as useEffect15, useRef as useRef10 } from "react";
|
|
3612
3497
|
import Link8 from "next/link";
|
|
3613
3498
|
import Image8 from "next/image";
|
|
3614
|
-
import { HugeiconsIcon as
|
|
3499
|
+
import { HugeiconsIcon as HugeiconsIcon22 } from "@hugeicons/react";
|
|
3615
3500
|
import { ArrowRight01Icon as ArrowRight01Icon7 } from "@hugeicons/core-free-icons";
|
|
3616
3501
|
var useScrollAnimation = () => {
|
|
3617
3502
|
const elementRef = useRef10(null);
|
|
3618
|
-
|
|
3503
|
+
useEffect15(() => {
|
|
3619
3504
|
const el = elementRef.current;
|
|
3620
3505
|
if (!el) return;
|
|
3621
3506
|
const observer = new IntersectionObserver(
|
|
@@ -3651,13 +3536,13 @@ var PortfolioHero = ({
|
|
|
3651
3536
|
secondaryCtaHref
|
|
3652
3537
|
}) => {
|
|
3653
3538
|
const heroContentRef = useScrollAnimation();
|
|
3654
|
-
return /* @__PURE__ */
|
|
3539
|
+
return /* @__PURE__ */ React34.createElement("section", { className: "pt-8 pb-16 px-6 md:px-12 flex flex-col relative overflow-hidden z-10 w-full" }, /* @__PURE__ */ React34.createElement(
|
|
3655
3540
|
"div",
|
|
3656
3541
|
{
|
|
3657
3542
|
ref: heroContentRef,
|
|
3658
3543
|
className: "w-full opacity-0 translate-y-5 transition-all duration-1000 ease-out relative z-10"
|
|
3659
3544
|
},
|
|
3660
|
-
/* @__PURE__ */
|
|
3545
|
+
/* @__PURE__ */ React34.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-5 sm:gap-8 mb-10" }, /* @__PURE__ */ React34.createElement("div", { className: "relative w-20 h-20 sm:w-32 sm:h-32 rounded-full overflow-hidden border border-neutral-200 shrink-0 shadow-sm" }, /* @__PURE__ */ React34.createElement(
|
|
3661
3546
|
Image8,
|
|
3662
3547
|
{
|
|
3663
3548
|
src: imageSrc,
|
|
@@ -3668,7 +3553,7 @@ var PortfolioHero = ({
|
|
|
3668
3553
|
sizes: "(max-width: 640px) 80px, 128px",
|
|
3669
3554
|
quality: 100
|
|
3670
3555
|
}
|
|
3671
|
-
)), /* @__PURE__ */
|
|
3556
|
+
)), /* @__PURE__ */ React34.createElement("div", { className: "flex flex-col text-left" }, /* @__PURE__ */ React34.createElement("h1", { className: " text-3xl sm:text-5xl lg:text-6xl tracking-tight text-black leading-none mb-3" }, name), socialLabel && /* @__PURE__ */ React34.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, socialLabel), socialLinkText && socialLinkHref && /* @__PURE__ */ React34.createElement(
|
|
3672
3557
|
"a",
|
|
3673
3558
|
{
|
|
3674
3559
|
href: socialLinkHref,
|
|
@@ -3678,31 +3563,31 @@ var PortfolioHero = ({
|
|
|
3678
3563
|
},
|
|
3679
3564
|
socialLinkText
|
|
3680
3565
|
))),
|
|
3681
|
-
/* @__PURE__ */
|
|
3682
|
-
/* @__PURE__ */
|
|
3566
|
+
/* @__PURE__ */ React34.createElement("p", { className: "text-[13px] leading-[1.8] max-w-4xl mb-12 text-neutral-600" }, bio),
|
|
3567
|
+
/* @__PURE__ */ React34.createElement("div", { className: "flex flex-col sm:flex-row gap-4 w-full sm:w-auto" }, primaryCtaText && primaryCtaHref && /* @__PURE__ */ React34.createElement("div", { className: "w-full sm:w-auto *:w-full" }, /* @__PURE__ */ React34.createElement(
|
|
3683
3568
|
ThreeDButton,
|
|
3684
3569
|
{
|
|
3685
3570
|
href: primaryCtaHref,
|
|
3686
3571
|
className: "py-3 tracking-widest text-[11px]"
|
|
3687
3572
|
},
|
|
3688
3573
|
primaryCtaText
|
|
3689
|
-
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
3574
|
+
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ React34.createElement(
|
|
3690
3575
|
Link8,
|
|
3691
3576
|
{
|
|
3692
3577
|
href: secondaryCtaHref,
|
|
3693
3578
|
className: "w-full sm:w-auto inline-flex items-center justify-center gap-3 text-[11px] tracking-[0.2em] rounded-full px-8 py-3.5 bg-neutral-200 transition-colors text-black hover:bg-neutral-200 outline-none"
|
|
3694
3579
|
},
|
|
3695
3580
|
secondaryCtaText,
|
|
3696
|
-
/* @__PURE__ */
|
|
3581
|
+
/* @__PURE__ */ React34.createElement(HugeiconsIcon22, { icon: ArrowRight01Icon7, size: 16 })
|
|
3697
3582
|
))
|
|
3698
3583
|
));
|
|
3699
3584
|
};
|
|
3700
3585
|
|
|
3701
3586
|
// src/components/GifFeatureCard.tsx
|
|
3702
|
-
import
|
|
3587
|
+
import React35, { useState as useState22 } from "react";
|
|
3703
3588
|
import Image9 from "next/image";
|
|
3704
|
-
import { HugeiconsIcon as
|
|
3705
|
-
import { Loading03Icon as
|
|
3589
|
+
import { HugeiconsIcon as HugeiconsIcon23 } from "@hugeicons/react";
|
|
3590
|
+
import { Loading03Icon as Loading03Icon12 } from "@hugeicons/core-free-icons";
|
|
3706
3591
|
var GifFeatureCard = ({
|
|
3707
3592
|
gifSrc,
|
|
3708
3593
|
title,
|
|
@@ -3710,20 +3595,20 @@ var GifFeatureCard = ({
|
|
|
3710
3595
|
alt = "Feature animation",
|
|
3711
3596
|
className = "aspect-video"
|
|
3712
3597
|
}) => {
|
|
3713
|
-
const [isLoading, setIsLoading] =
|
|
3714
|
-
return /* @__PURE__ */
|
|
3715
|
-
|
|
3598
|
+
const [isLoading, setIsLoading] = useState22(true);
|
|
3599
|
+
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(
|
|
3600
|
+
HugeiconsIcon23,
|
|
3716
3601
|
{
|
|
3717
|
-
icon:
|
|
3602
|
+
icon: Loading03Icon12,
|
|
3718
3603
|
size: 32,
|
|
3719
3604
|
className: "animate-spin text-white"
|
|
3720
3605
|
}
|
|
3721
|
-
)), /* @__PURE__ */
|
|
3606
|
+
)), /* @__PURE__ */ React35.createElement(
|
|
3722
3607
|
"div",
|
|
3723
3608
|
{
|
|
3724
3609
|
className: `absolute inset-0 z-0 transition-all duration-1000 ease-out ${isLoading ? "scale-105 blur-2xl opacity-0" : "scale-100 blur-0 opacity-100"}`
|
|
3725
3610
|
},
|
|
3726
|
-
/* @__PURE__ */
|
|
3611
|
+
/* @__PURE__ */ React35.createElement(
|
|
3727
3612
|
Image9,
|
|
3728
3613
|
{
|
|
3729
3614
|
src: gifSrc,
|
|
@@ -3734,16 +3619,16 @@ var GifFeatureCard = ({
|
|
|
3734
3619
|
className: "object-cover object-center pointer-events-none"
|
|
3735
3620
|
}
|
|
3736
3621
|
)
|
|
3737
|
-
), /* @__PURE__ */
|
|
3622
|
+
), /* @__PURE__ */ React35.createElement(
|
|
3738
3623
|
"div",
|
|
3739
3624
|
{
|
|
3740
3625
|
className: "absolute inset-x-0 bottom-0 h-1/2 sm:h-2/3 bg-linear-to-t from-black/95 via-black/40 to-transparent z-10 pointer-events-none transition-opacity duration-700"
|
|
3741
3626
|
}
|
|
3742
|
-
), /* @__PURE__ */
|
|
3627
|
+
), /* @__PURE__ */ React35.createElement("div", { className: "absolute inset-x-0 bottom-0 p-6 sm:p-8 z-30 flex flex-col justify-end text-left pointer-events-none" }, title && /* @__PURE__ */ React35.createElement("h3", { className: " text-xl sm:text-2xl md:text-3xl text-white tracking-tight mb-2 sm:mb-3 drop-shadow-md" }, title), subtitle && /* @__PURE__ */ React35.createElement("p", { className: "text-[13px] sm:text-[15px] leading-relaxed text-neutral-300 max-w-2xl drop-shadow-sm" }, subtitle)));
|
|
3743
3628
|
};
|
|
3744
3629
|
|
|
3745
3630
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
3746
|
-
import
|
|
3631
|
+
import React36, { useState as useState23, useEffect as useEffect16, useRef as useRef11 } from "react";
|
|
3747
3632
|
import Image10 from "next/image";
|
|
3748
3633
|
var MedicalFeatureStatsBlock = ({
|
|
3749
3634
|
bottomHeadline,
|
|
@@ -3752,9 +3637,9 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3752
3637
|
trustText,
|
|
3753
3638
|
stats
|
|
3754
3639
|
}) => {
|
|
3755
|
-
const [isAnimating, setIsAnimating] =
|
|
3640
|
+
const [isAnimating, setIsAnimating] = useState23(false);
|
|
3756
3641
|
const titleRef = useRef11(null);
|
|
3757
|
-
|
|
3642
|
+
useEffect16(() => {
|
|
3758
3643
|
const observer = new IntersectionObserver(
|
|
3759
3644
|
([entry]) => {
|
|
3760
3645
|
if (entry.isIntersecting) {
|
|
@@ -3772,7 +3657,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3772
3657
|
}
|
|
3773
3658
|
return () => observer.disconnect();
|
|
3774
3659
|
}, []);
|
|
3775
|
-
return /* @__PURE__ */
|
|
3660
|
+
return /* @__PURE__ */ React36.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ React36.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React36.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ React36.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ React36.createElement(
|
|
3776
3661
|
"h2",
|
|
3777
3662
|
{
|
|
3778
3663
|
ref: titleRef,
|
|
@@ -3780,7 +3665,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3780
3665
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
3781
3666
|
},
|
|
3782
3667
|
bottomHeadline
|
|
3783
|
-
), /* @__PURE__ */
|
|
3668
|
+
), /* @__PURE__ */ React36.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ React36.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ React36.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ React36.createElement("div", { key: i, className: "relative w-12 h-12 rounded-full border-[3px] border-white overflow-hidden bg-neutral-100 z-1 hover:z-10 transition-all" }, /* @__PURE__ */ React36.createElement(
|
|
3784
3669
|
Image10,
|
|
3785
3670
|
{
|
|
3786
3671
|
src,
|
|
@@ -3789,17 +3674,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3789
3674
|
sizes: "48px",
|
|
3790
3675
|
className: "object-cover"
|
|
3791
3676
|
}
|
|
3792
|
-
)))), /* @__PURE__ */
|
|
3677
|
+
)))), /* @__PURE__ */ React36.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ React36.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ React36.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ React36.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ React36.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ React36.createElement("h1", { className: "text-6xl gradient-text md:text-[80px] tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
|
|
3793
3678
|
};
|
|
3794
3679
|
|
|
3795
3680
|
// src/components/ConsultantShowcase.tsx
|
|
3796
|
-
import
|
|
3681
|
+
import React37, { useState as useState24 } from "react";
|
|
3797
3682
|
import Image11 from "next/image";
|
|
3798
|
-
import { HugeiconsIcon as
|
|
3799
|
-
import { Loading03Icon as
|
|
3683
|
+
import { HugeiconsIcon as HugeiconsIcon24 } from "@hugeicons/react";
|
|
3684
|
+
import { Loading03Icon as Loading03Icon13 } from "@hugeicons/core-free-icons";
|
|
3800
3685
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
3801
|
-
const [isLoading, setIsLoading] =
|
|
3802
|
-
return /* @__PURE__ */
|
|
3686
|
+
const [isLoading, setIsLoading] = useState24(true);
|
|
3687
|
+
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: Loading03Icon13, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ React37.createElement(
|
|
3803
3688
|
Image11,
|
|
3804
3689
|
{
|
|
3805
3690
|
src,
|
|
@@ -3818,9 +3703,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
3818
3703
|
var ConsultantShowcase = ({
|
|
3819
3704
|
profiles
|
|
3820
3705
|
}) => {
|
|
3821
|
-
const [currentIndex, setCurrentIndex] =
|
|
3822
|
-
const [touchStart, setTouchStart] =
|
|
3823
|
-
const [touchEnd, setTouchEnd] =
|
|
3706
|
+
const [currentIndex, setCurrentIndex] = useState24(0);
|
|
3707
|
+
const [touchStart, setTouchStart] = useState24(null);
|
|
3708
|
+
const [touchEnd, setTouchEnd] = useState24(null);
|
|
3824
3709
|
const nextSlide = () => {
|
|
3825
3710
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
3826
3711
|
};
|
|
@@ -3845,7 +3730,7 @@ var ConsultantShowcase = ({
|
|
|
3845
3730
|
}
|
|
3846
3731
|
};
|
|
3847
3732
|
if (!profiles || profiles.length === 0) return null;
|
|
3848
|
-
return /* @__PURE__ */
|
|
3733
|
+
return /* @__PURE__ */ React37.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ React37.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React37.createElement(
|
|
3849
3734
|
"div",
|
|
3850
3735
|
{
|
|
3851
3736
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -3855,13 +3740,13 @@ var ConsultantShowcase = ({
|
|
|
3855
3740
|
},
|
|
3856
3741
|
profiles.map((profile, idx) => {
|
|
3857
3742
|
const isActive = idx === currentIndex;
|
|
3858
|
-
return /* @__PURE__ */
|
|
3743
|
+
return /* @__PURE__ */ React37.createElement(
|
|
3859
3744
|
"div",
|
|
3860
3745
|
{
|
|
3861
3746
|
key: profile.id,
|
|
3862
3747
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
3863
3748
|
},
|
|
3864
|
-
/* @__PURE__ */
|
|
3749
|
+
/* @__PURE__ */ React37.createElement(
|
|
3865
3750
|
ImageWithLoader,
|
|
3866
3751
|
{
|
|
3867
3752
|
src: profile.imageSrc,
|
|
@@ -3869,14 +3754,14 @@ var ConsultantShowcase = ({
|
|
|
3869
3754
|
priority: idx === 0
|
|
3870
3755
|
}
|
|
3871
3756
|
),
|
|
3872
|
-
/* @__PURE__ */
|
|
3873
|
-
/* @__PURE__ */
|
|
3874
|
-
/* @__PURE__ */
|
|
3757
|
+
/* @__PURE__ */ React37.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
3758
|
+
/* @__PURE__ */ React37.createElement("div", { className: "absolute top-0 left-0 w-full h-[60%] bg-linear-to-b from-black/80 via-black/30 to-transparent z-20 pointer-events-none" }),
|
|
3759
|
+
/* @__PURE__ */ React37.createElement("div", { className: `absolute top-8 left-8 md:top-12 md:left-12 z-30 text-white max-w-lg transition-transform duration-700 ease-out ${isActive ? "translate-y-0" : "-translate-y-4"}` }, /* @__PURE__ */ React37.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ React37.createElement("p", { className: "text-[15px] text-white/80 tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ React37.createElement("p", { className: "text-[15px] text-white/80 tracking-wide mt-1" }, profile.description)))
|
|
3875
3760
|
);
|
|
3876
3761
|
}),
|
|
3877
|
-
/* @__PURE__ */
|
|
3878
|
-
/* @__PURE__ */
|
|
3879
|
-
/* @__PURE__ */
|
|
3762
|
+
/* @__PURE__ */ React37.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide }),
|
|
3763
|
+
/* @__PURE__ */ React37.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide }),
|
|
3764
|
+
/* @__PURE__ */ React37.createElement("div", { className: "absolute bottom-6 md:bottom-8 left-0 w-full px-4 z-30 flex justify-center items-center gap-2" }, profiles.map((_, idx) => /* @__PURE__ */ React37.createElement(
|
|
3880
3765
|
"button",
|
|
3881
3766
|
{
|
|
3882
3767
|
key: idx,
|
|
@@ -3888,10 +3773,10 @@ var ConsultantShowcase = ({
|
|
|
3888
3773
|
};
|
|
3889
3774
|
|
|
3890
3775
|
// src/components/ContentGridBlock.tsx
|
|
3891
|
-
import
|
|
3776
|
+
import React38, { useState as useState25 } from "react";
|
|
3892
3777
|
import Image12 from "next/image";
|
|
3893
|
-
import { HugeiconsIcon as
|
|
3894
|
-
import { Loading03Icon as
|
|
3778
|
+
import { HugeiconsIcon as HugeiconsIcon25 } from "@hugeicons/react";
|
|
3779
|
+
import { Loading03Icon as Loading03Icon14 } from "@hugeicons/core-free-icons";
|
|
3895
3780
|
var ContentGridBlock = ({
|
|
3896
3781
|
header,
|
|
3897
3782
|
leftCard,
|
|
@@ -3899,34 +3784,34 @@ var ContentGridBlock = ({
|
|
|
3899
3784
|
middleBottomCard,
|
|
3900
3785
|
rightCards
|
|
3901
3786
|
}) => {
|
|
3902
|
-
return /* @__PURE__ */
|
|
3787
|
+
return /* @__PURE__ */ React38.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React38.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ React38.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ React38.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ React38.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ React38.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ React38.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ React38.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React38.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ React38.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ React38.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ React38.createElement("div", null, /* @__PURE__ */ React38.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ React38.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ React38.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React38.createElement(Image12, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ React38.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React38.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ React38.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ React38.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ React38.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React38.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ React38.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ React38.createElement(Image12, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ React38.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ React38.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ React38.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-200 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ React38.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ React38.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React38.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ React38.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ React38.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React38.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ React38.createElement("div", null, /* @__PURE__ */ React38.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ React38.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ React38.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React38.createElement(Image12, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ React38.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React38.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ React38.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ React38.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => {
|
|
3903
3788
|
const isSecondCard = idx === 1;
|
|
3904
|
-
return /* @__PURE__ */
|
|
3789
|
+
return /* @__PURE__ */ React38.createElement(
|
|
3905
3790
|
"div",
|
|
3906
3791
|
{
|
|
3907
3792
|
key: idx,
|
|
3908
3793
|
className: `relative w-full h-80 rounded-3xl overflow-hidden group ${isSecondCard ? "bg-[#ceff8a]" : "bg-[#143731]"}`
|
|
3909
3794
|
},
|
|
3910
|
-
/* @__PURE__ */
|
|
3911
|
-
/* @__PURE__ */
|
|
3795
|
+
/* @__PURE__ */ React38.createElement("div", { className: `absolute inset-0 z-20 pointer-events-none ${isSecondCard ? "" : "bg-black/20"}` }),
|
|
3796
|
+
/* @__PURE__ */ React38.createElement("div", { className: `absolute inset-0 z-30 p-6 flex flex-col justify-end ${isSecondCard ? "text-black" : "text-white"}` }, /* @__PURE__ */ React38.createElement("p", { className: `text-[14px] leading-snug mb-3 pr-2 ${isSecondCard ? "text-black/90" : "text-white/90"}` }, card.mainText), card.tag && /* @__PURE__ */ React38.createElement("span", { className: `mb-4 text-[11px] tracking-widest ${isSecondCard ? "text-black/70" : "text-white/50"}` }, card.tag), /* @__PURE__ */ React38.createElement("div", { className: "pt-3" }, /* @__PURE__ */ React38.createElement("h4", { className: `text-[15px] tracking-wide ${isSecondCard ? "text-black" : "text-white"}` }, card.title), /* @__PURE__ */ React38.createElement("p", { className: `text-[13px] ${isSecondCard ? "text-black/60" : "text-white/60"}` }, card.subtitle)))
|
|
3912
3797
|
);
|
|
3913
3798
|
})))));
|
|
3914
3799
|
};
|
|
3915
3800
|
|
|
3916
3801
|
// src/components/ManagedProjectsBlock.tsx
|
|
3917
|
-
import
|
|
3802
|
+
import React39 from "react";
|
|
3918
3803
|
import Link9 from "next/link";
|
|
3919
3804
|
var GridSection = ({
|
|
3920
3805
|
children,
|
|
3921
3806
|
isLast = false,
|
|
3922
3807
|
className = "py-8 md:py-10"
|
|
3923
|
-
}) => /* @__PURE__ */
|
|
3808
|
+
}) => /* @__PURE__ */ React39.createElement("div", { className: `relative px-5 md:px-12 ${className} ${!isLast ? "" : ""}` }, children);
|
|
3924
3809
|
var ManagedProjectsBlock = ({
|
|
3925
3810
|
tagline,
|
|
3926
3811
|
title,
|
|
3927
3812
|
projects
|
|
3928
3813
|
}) => {
|
|
3929
|
-
return /* @__PURE__ */
|
|
3814
|
+
return /* @__PURE__ */ React39.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React39.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-5xl mx-auto overflow-hidden" }, /* @__PURE__ */ React39.createElement(
|
|
3930
3815
|
"div",
|
|
3931
3816
|
{
|
|
3932
3817
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3935,16 +3820,16 @@ var ManagedProjectsBlock = ({
|
|
|
3935
3820
|
backgroundRepeat: "repeat"
|
|
3936
3821
|
}
|
|
3937
3822
|
}
|
|
3938
|
-
), /* @__PURE__ */
|
|
3823
|
+
), /* @__PURE__ */ React39.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React39.createElement(GridSection, null, tagline && /* @__PURE__ */ React39.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React39.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), projects.map((project, index) => {
|
|
3939
3824
|
const isLast = index === projects.length - 1;
|
|
3940
|
-
const projectContent = /* @__PURE__ */
|
|
3941
|
-
return /* @__PURE__ */
|
|
3825
|
+
const projectContent = /* @__PURE__ */ React39.createElement("div", { className: "group block w-full" }, /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col md:flex-row md:items-center justify-between gap-3 md:gap-4 mb-4 md:mb-5" }, /* @__PURE__ */ React39.createElement("div", { className: "flex items-center gap-3 md:gap-4" }, /* @__PURE__ */ React39.createElement("h2", { className: " text-[16px] text-black transition-all flex items-center gap-2" }, project.title, /* @__PURE__ */ React39.createElement("span", { className: "text-[11px] opacity-0 -translate-x-2 group-hover:opacity-100 group-hover:translate-x-0 transition-all duration-300" }, project.isExternal ? "\u2197" : "\u2192")), /* @__PURE__ */ React39.createElement("span", { className: `text-[9px] px-2.5 py-1 rounded-full tracking-[0.15em] transition-colors ${project.status.toLowerCase() === "production" ? "bg-black text-white" : "bg-neutral-100 text-neutral-500 group-hover:bg-neutral-100 group-hover:text-black"}` }, project.status)), /* @__PURE__ */ React39.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 shrink-0 " }, project.date)), /* @__PURE__ */ React39.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 max-w-4xl text-left transition-colors group-hover:text-black" }, project.description));
|
|
3826
|
+
return /* @__PURE__ */ React39.createElement(GridSection, { key: project.id || index, isLast, className: isLast ? "py-8 md:py-10 pb-12 md:pb-14" : "py-8 md:py-10" }, project.isExternal ? /* @__PURE__ */ React39.createElement("a", { href: project.link, target: "_blank", rel: "noopener noreferrer", className: "block outline-none" }, projectContent) : /* @__PURE__ */ React39.createElement(Link9, { href: project.link, className: "block outline-none" }, projectContent));
|
|
3942
3827
|
}))));
|
|
3943
3828
|
};
|
|
3944
3829
|
|
|
3945
3830
|
// src/components/UniversalVerificationPage.tsx
|
|
3946
|
-
import
|
|
3947
|
-
import { HugeiconsIcon as
|
|
3831
|
+
import React40 from "react";
|
|
3832
|
+
import { HugeiconsIcon as HugeiconsIcon26 } from "@hugeicons/react";
|
|
3948
3833
|
import {
|
|
3949
3834
|
ArrowLeft01Icon as ArrowLeft01Icon8,
|
|
3950
3835
|
Mail01Icon,
|
|
@@ -3953,7 +3838,7 @@ import {
|
|
|
3953
3838
|
CheckmarkCircle01Icon,
|
|
3954
3839
|
Time02Icon,
|
|
3955
3840
|
InformationCircleIcon as InformationCircleIcon2,
|
|
3956
|
-
Loading03Icon as
|
|
3841
|
+
Loading03Icon as Loading03Icon15
|
|
3957
3842
|
} from "@hugeicons/core-free-icons";
|
|
3958
3843
|
var VerificationRow = ({
|
|
3959
3844
|
icon,
|
|
@@ -4000,15 +3885,15 @@ var VerificationRow = ({
|
|
|
4000
3885
|
break;
|
|
4001
3886
|
}
|
|
4002
3887
|
const isDisabled = status === "APPROVED" || isLoading;
|
|
4003
|
-
return /* @__PURE__ */
|
|
3888
|
+
return /* @__PURE__ */ React40.createElement(
|
|
4004
3889
|
"div",
|
|
4005
3890
|
{
|
|
4006
3891
|
onClick: isDisabled ? void 0 : onClick,
|
|
4007
3892
|
className: `flex items-center p-4 transition-colors ${!isLast ? "" : ""} ${isDisabled ? "opacity-70 cursor-default" : "cursor-pointer hover:bg-neutral-50"}`
|
|
4008
3893
|
},
|
|
4009
|
-
/* @__PURE__ */
|
|
4010
|
-
/* @__PURE__ */
|
|
4011
|
-
/* @__PURE__ */
|
|
3894
|
+
/* @__PURE__ */ React40.createElement("div", { className: "w-9 h-9 rounded-full border border-neutral-200 bg-white flex items-center justify-center shrink-0 mr-4" }, /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon, size: 16, className: "text-black" })),
|
|
3895
|
+
/* @__PURE__ */ React40.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React40.createElement("p", { className: "text-[14px] truncate text-black" }, title), /* @__PURE__ */ React40.createElement("p", { className: `text-[10px] inline-flex items-center ${bg} rounded-full px-2 py-1 ${statusColor} mt-0.5` }, statusText)),
|
|
3896
|
+
/* @__PURE__ */ React40.createElement("div", { className: "shrink-0 ml-2" }, isLoading ? /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: Loading03Icon15, size: 20, className: "animate-spin text-black" }) : /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: StatusIcon, size: 20, className: iconColor }))
|
|
4012
3897
|
);
|
|
4013
3898
|
};
|
|
4014
3899
|
var UniversalVerificationPage = ({
|
|
@@ -4021,15 +3906,15 @@ var UniversalVerificationPage = ({
|
|
|
4021
3906
|
onTriggerVerification,
|
|
4022
3907
|
activeLoadingType
|
|
4023
3908
|
}) => {
|
|
4024
|
-
return /* @__PURE__ */
|
|
3909
|
+
return /* @__PURE__ */ React40.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 pb-12" }, /* @__PURE__ */ React40.createElement("div", { className: "mb-6 flex items-center px-1" }, /* @__PURE__ */ React40.createElement(
|
|
4025
3910
|
"button",
|
|
4026
3911
|
{
|
|
4027
3912
|
onClick: onBack,
|
|
4028
3913
|
className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none"
|
|
4029
3914
|
},
|
|
4030
|
-
/* @__PURE__ */
|
|
3915
|
+
/* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: ArrowLeft01Icon8, size: 16 }),
|
|
4031
3916
|
" Back"
|
|
4032
|
-
)), /* @__PURE__ */
|
|
3917
|
+
)), /* @__PURE__ */ React40.createElement("div", { className: "w-full flex flex-col gap-4 mb-8" }, /* @__PURE__ */ React40.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React40.createElement(
|
|
4033
3918
|
VerificationRow,
|
|
4034
3919
|
{
|
|
4035
3920
|
icon: Mail01Icon,
|
|
@@ -4038,7 +3923,7 @@ var UniversalVerificationPage = ({
|
|
|
4038
3923
|
isLoading: activeLoadingType === "EMAIL",
|
|
4039
3924
|
onClick: () => onTriggerVerification("EMAIL")
|
|
4040
3925
|
}
|
|
4041
|
-
), /* @__PURE__ */
|
|
3926
|
+
), /* @__PURE__ */ React40.createElement(
|
|
4042
3927
|
VerificationRow,
|
|
4043
3928
|
{
|
|
4044
3929
|
icon: SmartPhone01Icon,
|
|
@@ -4047,7 +3932,7 @@ var UniversalVerificationPage = ({
|
|
|
4047
3932
|
isLoading: activeLoadingType === "PHONE",
|
|
4048
3933
|
onClick: () => onTriggerVerification("PHONE")
|
|
4049
3934
|
}
|
|
4050
|
-
), /* @__PURE__ */
|
|
3935
|
+
), /* @__PURE__ */ React40.createElement(
|
|
4051
3936
|
VerificationRow,
|
|
4052
3937
|
{
|
|
4053
3938
|
icon: UserIcon2,
|
|
@@ -4061,27 +3946,27 @@ var UniversalVerificationPage = ({
|
|
|
4061
3946
|
};
|
|
4062
3947
|
|
|
4063
3948
|
// src/components/UniversalRewardPage.tsx
|
|
4064
|
-
import
|
|
3949
|
+
import React41, { useState as useState26 } from "react";
|
|
4065
3950
|
import axios from "axios";
|
|
4066
3951
|
import toast8 from "react-hot-toast";
|
|
4067
3952
|
import Confetti from "react-confetti";
|
|
4068
3953
|
import { useWindowSize } from "react-use";
|
|
4069
|
-
import { HugeiconsIcon as
|
|
3954
|
+
import { HugeiconsIcon as HugeiconsIcon27 } from "@hugeicons/react";
|
|
4070
3955
|
import {
|
|
4071
3956
|
GiftIcon,
|
|
4072
|
-
Loading03Icon as
|
|
3957
|
+
Loading03Icon as Loading03Icon16,
|
|
4073
3958
|
ArrowLeft01Icon as ArrowLeft01Icon9
|
|
4074
3959
|
} from "@hugeicons/core-free-icons";
|
|
4075
3960
|
var formatWeb3Name = (name) => {
|
|
4076
3961
|
if (!name) return "";
|
|
4077
3962
|
return name.toLowerCase().replace(/\b\w/g, (c) => c.toUpperCase());
|
|
4078
3963
|
};
|
|
4079
|
-
var PageSpinner4 = () => /* @__PURE__ */
|
|
3964
|
+
var PageSpinner4 = () => /* @__PURE__ */ React41.createElement("div", { className: "flex justify-center items-center py-12 w-full" }, /* @__PURE__ */ React41.createElement(HugeiconsIcon27, { icon: Loading03Icon16, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
4080
3965
|
var AvatarLogo = ({ src, alt, name, sizeClass = "w-12 h-12" }) => {
|
|
4081
|
-
const [isLoaded, setIsLoaded] =
|
|
3966
|
+
const [isLoaded, setIsLoaded] = useState26(false);
|
|
4082
3967
|
const fallbackUrl = `/api/avatar/?name=${encodeURIComponent(name || " ")}&background=ffffff&color=000000&size=200&font-size=0.33`;
|
|
4083
3968
|
const finalSrc = src || fallbackUrl;
|
|
4084
|
-
return /* @__PURE__ */
|
|
3969
|
+
return /* @__PURE__ */ React41.createElement("div", { className: `relative shrink-0 rounded-full bg-neutral-100 flex items-center justify-center overflow-hidden border-[3px] border-white ${sizeClass}` }, !isLoaded && /* @__PURE__ */ React41.createElement(HugeiconsIcon27, { icon: Loading03Icon16, size: 16, className: "animate-spin text-neutral-400 absolute" }), /* @__PURE__ */ React41.createElement("img", { src: finalSrc, alt, onLoad: () => setIsLoaded(true), className: `w-full h-full object-cover transition-opacity duration-300 ${isLoaded ? "opacity-100" : "opacity-0"}` }));
|
|
4085
3970
|
};
|
|
4086
3971
|
var UniversalRewardPage = ({
|
|
4087
3972
|
leaderboardToday,
|
|
@@ -4096,11 +3981,11 @@ var UniversalRewardPage = ({
|
|
|
4096
3981
|
const onBackHandler = onBack ?? (() => {
|
|
4097
3982
|
if (typeof window !== "undefined") window.history.back();
|
|
4098
3983
|
});
|
|
4099
|
-
const [activeTabIndex, setActiveTabIndex] =
|
|
3984
|
+
const [activeTabIndex, setActiveTabIndex] = useState26(1);
|
|
4100
3985
|
const tabs = [{ label: "Today" }, { label: "Week" }, { label: "Month" }];
|
|
4101
|
-
const [selectedReward, setSelectedReward] =
|
|
4102
|
-
const [isClaiming, setIsClaiming] =
|
|
4103
|
-
const [showConfetti, setShowConfetti] =
|
|
3986
|
+
const [selectedReward, setSelectedReward] = useState26(null);
|
|
3987
|
+
const [isClaiming, setIsClaiming] = useState26(false);
|
|
3988
|
+
const [showConfetti, setShowConfetti] = useState26(false);
|
|
4104
3989
|
const getActiveLeaderboard = () => {
|
|
4105
3990
|
if (activeTabIndex === 0) return leaderboardToday || [];
|
|
4106
3991
|
if (activeTabIndex === 1) return leaderboardWeek || [];
|
|
@@ -4131,9 +4016,9 @@ var UniversalRewardPage = ({
|
|
|
4131
4016
|
setIsClaiming(false);
|
|
4132
4017
|
}
|
|
4133
4018
|
};
|
|
4134
|
-
return /* @__PURE__ */
|
|
4019
|
+
return /* @__PURE__ */ React41.createElement("div", null, /* @__PURE__ */ React41.createElement("div", { className: "mb-6 flex max-w-3xl w-full mx-auto items-center px-1" }, /* @__PURE__ */ React41.createElement("button", { onClick: onBackHandler, className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none" }, /* @__PURE__ */ React41.createElement(HugeiconsIcon27, { icon: ArrowLeft01Icon9, size: 16 }), " Back")), /* @__PURE__ */ React41.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ React41.createElement(ManagedToaster, null), showConfetti && /* @__PURE__ */ React41.createElement("div", { className: "fixed inset-0 z-200 pointer-events-none" }, /* @__PURE__ */ React41.createElement(Confetti, { width, height, recycle: false, numberOfPieces: 500, gravity: 0.15 })), isLoading ? /* @__PURE__ */ React41.createElement(PageSpinner4, null) : /* @__PURE__ */ React41.createElement(React41.Fragment, null, /* @__PURE__ */ React41.createElement("div", { className: "w-full p-4 pt-10 mb-6 flex items-end justify-center gap-2 sm:gap-6 h-64 relative overflow-hidden" }, /* @__PURE__ */ React41.createElement("div", { className: "flex flex-col items-center w-1/3 z-10" }, secondPlace ? /* @__PURE__ */ React41.createElement(React41.Fragment, null, /* @__PURE__ */ React41.createElement("span", { className: "text-black text-[10px] mb-2 truncate max-w-full px-1" }, formatWeb3Name(secondPlace.profile.web3Name)), /* @__PURE__ */ React41.createElement("div", { className: "relative shrink-0 mb-3" }, /* @__PURE__ */ React41.createElement(AvatarLogo, { src: secondPlace.profile.avatarUrl, alt: secondPlace.profile.username, name: formatWeb3Name(secondPlace.profile.web3Name), sizeClass: "w-14 h-14" }), /* @__PURE__ */ React41.createElement("div", { className: "absolute -bottom-2 right-0 w-5 h-5 rounded-full bg-[#ceff8a] text-black flex items-center justify-center text-[10px] border border-white " }, "2")), /* @__PURE__ */ React41.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-[#ceff8a] rounded-t-xl h-24 flex items-center justify-center" }, /* @__PURE__ */ React41.createElement("span", { className: "text-neutral-800/30 text-2xl " }, "2nd"))) : /* @__PURE__ */ React41.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-neutral-200 rounded-t-xl h-24 mt-auto" })), /* @__PURE__ */ React41.createElement("div", { className: "flex flex-col items-center w-1/3 z-20 -mt-8" }, firstPlace ? /* @__PURE__ */ React41.createElement(React41.Fragment, null, /* @__PURE__ */ React41.createElement("span", { className: "text-black text-[10px] mb-2 truncate max-w-full px-1" }, formatWeb3Name(firstPlace.profile.web3Name)), /* @__PURE__ */ React41.createElement("div", { className: "relative shrink-0 mb-3" }, /* @__PURE__ */ React41.createElement(AvatarLogo, { src: firstPlace.profile.avatarUrl, alt: firstPlace.profile.username, name: formatWeb3Name(firstPlace.profile.web3Name), sizeClass: "w-17 h-17" }), /* @__PURE__ */ React41.createElement("div", { className: "absolute -bottom-2 right-2 w-5 h-5 rounded-full bg-[#143731] text-white flex items-center justify-center text-[10px] border border-white " }, "1")), /* @__PURE__ */ React41.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-[#143731] rounded-t-xl h-32 flex items-center justify-center " }, /* @__PURE__ */ React41.createElement("span", { className: "text-white/40 text-3xl tracking-widest" }, "1st"))) : /* @__PURE__ */ React41.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-neutral-200 rounded-t-xl h-32 mt-auto" })), /* @__PURE__ */ React41.createElement("div", { className: "flex flex-col items-center w-1/3 z-10" }, thirdPlace ? /* @__PURE__ */ React41.createElement(React41.Fragment, null, /* @__PURE__ */ React41.createElement("span", { className: "text-black text-[10px] mb-2 truncate max-w-full px-1" }, formatWeb3Name(thirdPlace.profile.web3Name)), /* @__PURE__ */ React41.createElement("div", { className: "relative shrink-0 mb-3" }, /* @__PURE__ */ React41.createElement(AvatarLogo, { src: thirdPlace.profile.avatarUrl, alt: thirdPlace.profile.username, name: formatWeb3Name(thirdPlace.profile.web3Name), sizeClass: "w-12 h-12" }), /* @__PURE__ */ React41.createElement("div", { className: "absolute -bottom-2 right-0 w-5 h-5 rounded-full bg-[#ceff8a] text-black flex items-center justify-center text-[10px] border border-white " }, "3")), /* @__PURE__ */ React41.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-[#ceff8a] rounded-t-xl h-20 flex items-center justify-center" }, /* @__PURE__ */ React41.createElement("span", { className: "text-neutral-800/30 text-xl " }, "3rd"))) : /* @__PURE__ */ React41.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-neutral-200 rounded-t-xl h-20 mt-auto" }))), /* @__PURE__ */ React41.createElement("div", { className: "flex items-center justify-center mb-6 sm:mb-8 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ React41.createElement("div", { className: "flex items-center bg-white rounded-full p-1 sm:p-1.5 max-w-full overflow-x-auto custom-scrollbar " }, tabs.map((tab, idx) => {
|
|
4135
4020
|
const isActive = activeTabIndex === idx;
|
|
4136
|
-
return /* @__PURE__ */
|
|
4021
|
+
return /* @__PURE__ */ React41.createElement(
|
|
4137
4022
|
"button",
|
|
4138
4023
|
{
|
|
4139
4024
|
key: idx,
|
|
@@ -4142,19 +4027,19 @@ var UniversalRewardPage = ({
|
|
|
4142
4027
|
},
|
|
4143
4028
|
tab.label
|
|
4144
4029
|
);
|
|
4145
|
-
}))), /* @__PURE__ */
|
|
4030
|
+
}))), /* @__PURE__ */ React41.createElement("div", { className: "flex flex-col gap-6 w-full" }, /* @__PURE__ */ React41.createElement("div", { className: "bg-white rounded-2xl p-6 " }, /* @__PURE__ */ React41.createElement("h2", { className: "text-black text-lg mb-4 tracking-tight" }, "Available Tasks"), /* @__PURE__ */ React41.createElement("div", { className: "flex flex-col" }, rewards.length === 0 ? /* @__PURE__ */ React41.createElement("p", { className: "text-xs text-neutral-400 py-6 text-center" }, "No rewards available at the moment.") : rewards.map((reward) => {
|
|
4146
4031
|
const statusText = reward.status === "CLAIMED" ? "Claimed" : "Unclaimed";
|
|
4147
|
-
return /* @__PURE__ */
|
|
4032
|
+
return /* @__PURE__ */ React41.createElement(
|
|
4148
4033
|
"div",
|
|
4149
4034
|
{
|
|
4150
4035
|
key: reward.id,
|
|
4151
4036
|
onClick: () => setSelectedReward(reward),
|
|
4152
4037
|
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"
|
|
4153
4038
|
},
|
|
4154
|
-
/* @__PURE__ */
|
|
4155
|
-
/* @__PURE__ */
|
|
4039
|
+
/* @__PURE__ */ React41.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ React41.createElement("div", { className: "w-10 h-10 shrink-0 rounded-full flex items-center justify-center border border-neutral-200 text-black" }, /* @__PURE__ */ React41.createElement(HugeiconsIcon27, { icon: GiftIcon, size: 16 })), /* @__PURE__ */ React41.createElement("div", { className: "min-w-0 flex-1 flex flex-col items-start gap-0.5 pr-4" }, /* @__PURE__ */ React41.createElement("p", { className: "text-[13px] text-black truncate w-full" }, reward.title), /* @__PURE__ */ React41.createElement("p", { className: `text-[10px] inline-flex items-center bg-neutral-50 rounded-full px-2 py-1 text-neutral-500 mt-0.5` }, statusText))),
|
|
4040
|
+
/* @__PURE__ */ React41.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1" }, /* @__PURE__ */ React41.createElement("span", { className: "text-[13px] text-black" }, reward.amount))
|
|
4156
4041
|
);
|
|
4157
|
-
}))), remainingLeaderboard.length > 0 && /* @__PURE__ */
|
|
4042
|
+
}))), remainingLeaderboard.length > 0 && /* @__PURE__ */ React41.createElement("div", { className: "bg-white rounded-2xl p-6 " }, /* @__PURE__ */ React41.createElement("h2", { className: "text-black text-lg mb-4 tracking-tight" }, "Leaderboard"), /* @__PURE__ */ React41.createElement("div", { className: "flex flex-col" }, remainingLeaderboard.map((lb) => /* @__PURE__ */ React41.createElement("div", { key: lb.profile.username, className: "flex items-center justify-between py-3 min-w-0" }, /* @__PURE__ */ React41.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ React41.createElement("div", { className: "text-[12px] text-neutral-400 w-4" }, lb.position), /* @__PURE__ */ React41.createElement(AvatarLogo, { src: lb.profile.avatarUrl, alt: lb.profile.username, name: formatWeb3Name(lb.profile.web3Name), sizeClass: "w-9 h-9" }), /* @__PURE__ */ React41.createElement("div", { className: "min-w-0 flex-1 flex flex-col" }, /* @__PURE__ */ React41.createElement("p", { className: "text-[13px] text-black truncate" }, formatWeb3Name(lb.profile.web3Name)), /* @__PURE__ */ React41.createElement("p", { className: "text-[11px] text-neutral-400 truncate" }, "@", lb.profile.username))), /* @__PURE__ */ React41.createElement("div", { className: "shrink-0 text-[13px] text-black" }, lb.amount))))))), selectedReward && /* @__PURE__ */ React41.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React41.createElement("div", { className: "absolute inset-0 bg-black/40", onClick: () => !isClaiming && setSelectedReward(null) }), /* @__PURE__ */ React41.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-3xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React41.createElement("div", { className: "flex-1 p-6 flex flex-col items-center text-center mt-2" }, /* @__PURE__ */ React41.createElement("h2", { className: "text-xl text-black mb-2" }, selectedReward.title), /* @__PURE__ */ React41.createElement("p", { className: "text-[13px] text-neutral-500 mb-6 leading-relaxed" }, selectedReward.description), selectedReward.progressText && /* @__PURE__ */ React41.createElement("div", { className: "w-full mb-6" }, /* @__PURE__ */ React41.createElement("div", { className: `px-4 py-2 rounded-full text-[11px] tracking-wide ${selectedReward.status === "CLAIMED" ? "bg-green-50 text-green-600" : selectedReward.isEligible ? "bg-blue-50 text-blue-600" : "bg-neutral-100 text-neutral-600"}` }, selectedReward.progressText)), /* @__PURE__ */ React41.createElement("div", { className: " w-full rounded-xl p-4 mb-8 flex flex-col items-center" }, /* @__PURE__ */ React41.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400 uppercase mb-1" }, "Reward Value"), /* @__PURE__ */ React41.createElement("span", { className: "text-3xl text-black " }, selectedReward.amount)), /* @__PURE__ */ React41.createElement("div", { className: "flex flex-col gap-3 w-full" }, /* @__PURE__ */ React41.createElement(
|
|
4158
4043
|
ThreeDActionButton,
|
|
4159
4044
|
{
|
|
4160
4045
|
onClick: handleClaimReward,
|
|
@@ -4163,7 +4048,7 @@ var UniversalRewardPage = ({
|
|
|
4163
4048
|
className: "w-full"
|
|
4164
4049
|
},
|
|
4165
4050
|
selectedReward.status === "CLAIMED" ? "Already Claimed" : selectedReward.isEligible ? "Claim Reward" : "Not Eligible Yet"
|
|
4166
|
-
), /* @__PURE__ */
|
|
4051
|
+
), /* @__PURE__ */ React41.createElement(
|
|
4167
4052
|
"button",
|
|
4168
4053
|
{
|
|
4169
4054
|
onClick: () => setSelectedReward(null),
|
|
@@ -4175,16 +4060,16 @@ var UniversalRewardPage = ({
|
|
|
4175
4060
|
};
|
|
4176
4061
|
|
|
4177
4062
|
// src/components/UniversalReferralPage.tsx
|
|
4178
|
-
import
|
|
4063
|
+
import React42, { useState as useState27 } from "react";
|
|
4179
4064
|
import toast9 from "react-hot-toast";
|
|
4180
|
-
import { HugeiconsIcon as
|
|
4065
|
+
import { HugeiconsIcon as HugeiconsIcon28 } from "@hugeicons/react";
|
|
4181
4066
|
import {
|
|
4182
4067
|
ArrowLeft01Icon as ArrowLeft01Icon10,
|
|
4183
4068
|
ArrowRight01Icon as ArrowRight01Icon8,
|
|
4184
|
-
Loading03Icon as
|
|
4069
|
+
Loading03Icon as Loading03Icon17,
|
|
4185
4070
|
Copy01Icon as Copy01Icon4
|
|
4186
4071
|
} from "@hugeicons/core-free-icons";
|
|
4187
|
-
var PageSpinner5 = () => /* @__PURE__ */
|
|
4072
|
+
var PageSpinner5 = () => /* @__PURE__ */ React42.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: Loading03Icon17, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
4188
4073
|
var formatWeb3Name2 = (name) => {
|
|
4189
4074
|
if (!name) return "";
|
|
4190
4075
|
return name.toLowerCase().replace(/\b\w/g, (c) => c.toUpperCase());
|
|
@@ -4215,65 +4100,65 @@ var UniversalReferralPage = ({
|
|
|
4215
4100
|
}
|
|
4216
4101
|
};
|
|
4217
4102
|
const AvatarLogo2 = ({ src, alt, name, sizeClass = "w-10 h-10" }) => {
|
|
4218
|
-
const [isLoaded, setIsLoaded] =
|
|
4103
|
+
const [isLoaded, setIsLoaded] = useState27(false);
|
|
4219
4104
|
const fallbackUrl = `/api/avatar/?name=${encodeURIComponent(name || " ")}&background=ffffff&color=000000&size=200&font-size=0.33`;
|
|
4220
4105
|
const finalSrc = src || fallbackUrl;
|
|
4221
|
-
return /* @__PURE__ */
|
|
4106
|
+
return /* @__PURE__ */ React42.createElement("div", { className: `relative shrink-0 rounded-full bg-neutral-100 flex items-center justify-center overflow-hidden border-2 border-white ${sizeClass}` }, !isLoaded && /* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: Loading03Icon17, size: 16, className: "animate-spin text-neutral-400 absolute" }), /* @__PURE__ */ React42.createElement("img", { src: finalSrc, alt, onLoad: () => setIsLoaded(true), className: `w-full h-full object-cover transition-opacity duration-300 ${isLoaded ? "opacity-100" : "opacity-0"}` }));
|
|
4222
4107
|
};
|
|
4223
|
-
return /* @__PURE__ */
|
|
4108
|
+
return /* @__PURE__ */ React42.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ React42.createElement(ManagedToaster, null), /* @__PURE__ */ React42.createElement("div", { className: "mb-6 flex w-full items-center px-1" }, /* @__PURE__ */ React42.createElement("button", { onClick: onBackHandler, className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none" }, /* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: ArrowLeft01Icon10, size: 16 }), " Back")), /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-3xl bg-white w-full" }, /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col gap-4 mb-2" }, /* @__PURE__ */ React42.createElement("div", null, /* @__PURE__ */ React42.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, "Your Referrals"), /* @__PURE__ */ React42.createElement("p", { className: "text-xs text-neutral-500" }, "Invite friends and earn rewards when they verify and activate cards.")), /* @__PURE__ */ React42.createElement("div", { className: "border border-neutral-200 rounded-xl p-4 flex items-center justify-between mt-2" }, /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ React42.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400 " }, "Invitation Code"), isLoading && !referralCode ? /* @__PURE__ */ React42.createElement("div", { className: "h-6 w-24 bg-neutral-50 animate-pulse rounded mt-1" }) : /* @__PURE__ */ React42.createElement("span", { className: "text-lg text-black tracking-widest" }, referralCode)), /* @__PURE__ */ React42.createElement(
|
|
4224
4109
|
"button",
|
|
4225
4110
|
{
|
|
4226
4111
|
onClick: handleCopyCode,
|
|
4227
4112
|
disabled: isLoading || !referralCode,
|
|
4228
4113
|
className: "w-10 h-10 rounded-full bg-white flex items-center justify-center text-neutral-500 hover:text-black transition-colors outline-none disabled:opacity-50"
|
|
4229
4114
|
},
|
|
4230
|
-
/* @__PURE__ */
|
|
4231
|
-
)), /* @__PURE__ */
|
|
4115
|
+
/* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: Copy01Icon4, size: 18 })
|
|
4116
|
+
)), /* @__PURE__ */ React42.createElement("div", { className: "text-[13px] text-black px-1 mt-2" }, "Total Invited: ", isLoading && !totalCount ? "-" : totalCount)), /* @__PURE__ */ React42.createElement("div", { className: "w-full overflow-hidden" }, isLoading ? /* @__PURE__ */ React42.createElement(PageSpinner5, null) : /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ React42.createElement("div", null, referrals.length === 0 ? /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col items-center justify-center py-12 opacity-50" }, /* @__PURE__ */ React42.createElement("p", { className: "text-xs text-neutral-500 text-center" }, "You haven't referred anyone yet.")) : referrals.map((ref, idx) => /* @__PURE__ */ React42.createElement(
|
|
4232
4117
|
"div",
|
|
4233
4118
|
{
|
|
4234
4119
|
key: `${ref.profile.username}-${idx}`,
|
|
4235
4120
|
className: "flex items-center justify-between py-4 hover:bg-neutral-50 transition-colors group min-w-0 px-3 -mx-3 rounded-xl"
|
|
4236
4121
|
},
|
|
4237
|
-
/* @__PURE__ */
|
|
4122
|
+
/* @__PURE__ */ React42.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ React42.createElement(
|
|
4238
4123
|
AvatarLogo2,
|
|
4239
4124
|
{
|
|
4240
4125
|
src: ref.profile.avatarUrl,
|
|
4241
4126
|
alt: ref.profile.username,
|
|
4242
4127
|
name: formatWeb3Name2(ref.profile.web3Name)
|
|
4243
4128
|
}
|
|
4244
|
-
), /* @__PURE__ */
|
|
4245
|
-
/* @__PURE__ */
|
|
4246
|
-
))), /* @__PURE__ */
|
|
4129
|
+
), /* @__PURE__ */ React42.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-0.5 pr-4" }, /* @__PURE__ */ React42.createElement("p", { className: "text-[14px] text-black truncate" }, formatWeb3Name2(ref.profile.web3Name)), /* @__PURE__ */ React42.createElement("p", { className: "text-[12px] text-neutral-500 truncate" }, "@", ref.profile.username))),
|
|
4130
|
+
/* @__PURE__ */ React42.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ React42.createElement("span", { className: "text-[11px] text-neutral-400" }, "Joined"), /* @__PURE__ */ React42.createElement("span", { className: "text-[12px] text-black" }, formatDate(ref.joinedAt)))
|
|
4131
|
+
))), /* @__PURE__ */ React42.createElement("div", { className: "flex items-center justify-between pt-6 mt-2 " }, /* @__PURE__ */ React42.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", totalPages === 0 ? 1 : totalPages), /* @__PURE__ */ React42.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React42.createElement(
|
|
4247
4132
|
"button",
|
|
4248
4133
|
{
|
|
4249
4134
|
onClick: () => onPageChange(currentPage - 1),
|
|
4250
4135
|
disabled: currentPage <= 1 || isLoading,
|
|
4251
4136
|
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"
|
|
4252
4137
|
},
|
|
4253
|
-
/* @__PURE__ */
|
|
4254
|
-
), /* @__PURE__ */
|
|
4138
|
+
/* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: ArrowLeft01Icon10, size: 14 })
|
|
4139
|
+
), /* @__PURE__ */ React42.createElement(
|
|
4255
4140
|
"button",
|
|
4256
4141
|
{
|
|
4257
4142
|
onClick: () => onPageChange(currentPage + 1),
|
|
4258
4143
|
disabled: currentPage >= totalPages || isLoading || totalPages === 0,
|
|
4259
4144
|
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"
|
|
4260
4145
|
},
|
|
4261
|
-
/* @__PURE__ */
|
|
4146
|
+
/* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: ArrowRight01Icon8, size: 14 })
|
|
4262
4147
|
)))))));
|
|
4263
4148
|
};
|
|
4264
4149
|
|
|
4265
4150
|
// src/components/UniversalCardActionPage.tsx
|
|
4266
|
-
import
|
|
4151
|
+
import React43, { useState as useState28 } from "react";
|
|
4267
4152
|
import Confetti2 from "react-confetti";
|
|
4268
4153
|
import { useWindowSize as useWindowSize2 } from "react-use";
|
|
4269
|
-
import { HugeiconsIcon as
|
|
4154
|
+
import { HugeiconsIcon as HugeiconsIcon29 } from "@hugeicons/react";
|
|
4270
4155
|
import {
|
|
4271
4156
|
ArrowLeft01Icon as ArrowLeft01Icon11,
|
|
4272
|
-
CancelCircleIcon as
|
|
4273
|
-
Loading03Icon as
|
|
4157
|
+
CancelCircleIcon as CancelCircleIcon6,
|
|
4158
|
+
Loading03Icon as Loading03Icon18
|
|
4274
4159
|
} from "@hugeicons/core-free-icons";
|
|
4275
|
-
var CheckIcon2 = ({ className = "" }) => /* @__PURE__ */
|
|
4276
|
-
var CrossIcon2 = ({ className = "" }) => /* @__PURE__ */
|
|
4160
|
+
var CheckIcon2 = ({ className = "" }) => /* @__PURE__ */ React43.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__ */ React43.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ React43.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
4161
|
+
var CrossIcon2 = ({ className = "" }) => /* @__PURE__ */ React43.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__ */ React43.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ React43.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
4277
4162
|
var formatTierName = (name) => {
|
|
4278
4163
|
if (!name) return "";
|
|
4279
4164
|
return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
|
|
@@ -4314,10 +4199,10 @@ var UniversalCardActionPage = ({
|
|
|
4314
4199
|
if (typeof window !== "undefined") window.history.back();
|
|
4315
4200
|
});
|
|
4316
4201
|
const { width, height } = useWindowSize2();
|
|
4317
|
-
const [selectedTier, setSelectedTier] =
|
|
4318
|
-
const [intendedAction, setIntendedAction] =
|
|
4319
|
-
const [isProcessing, setIsProcessing] =
|
|
4320
|
-
const [showConfetti, setShowConfetti] =
|
|
4202
|
+
const [selectedTier, setSelectedTier] = useState28(null);
|
|
4203
|
+
const [intendedAction, setIntendedAction] = useState28(null);
|
|
4204
|
+
const [isProcessing, setIsProcessing] = useState28(false);
|
|
4205
|
+
const [showConfetti, setShowConfetti] = useState28(false);
|
|
4321
4206
|
const availableTiers = tiers.filter((t) => t.isAvailable || t.acceptPreorder || t.acceptWaitlist);
|
|
4322
4207
|
const handleTierClick = (tier, explicitAction) => {
|
|
4323
4208
|
setSelectedTier(tier);
|
|
@@ -4354,22 +4239,22 @@ var UniversalCardActionPage = ({
|
|
|
4354
4239
|
if (isCurrent && (onWaitlist || hasPreordered)) return "Joined";
|
|
4355
4240
|
return "Join Waitlist";
|
|
4356
4241
|
};
|
|
4357
|
-
return /* @__PURE__ */
|
|
4242
|
+
return /* @__PURE__ */ React43.createElement("div", { className: "w-full" }, /* @__PURE__ */ React43.createElement(ManagedToaster, null), showConfetti && /* @__PURE__ */ React43.createElement("div", { className: "fixed inset-0 z-200 pointer-events-none" }, /* @__PURE__ */ React43.createElement(Confetti2, { width, height, recycle: false, numberOfPieces: 500, gravity: 0.15 })), /* @__PURE__ */ React43.createElement("div", { className: "mb-6 flex max-w-3xl w-full mx-auto items-center px-1" }, /* @__PURE__ */ React43.createElement(
|
|
4358
4243
|
"button",
|
|
4359
4244
|
{
|
|
4360
4245
|
onClick: onBackHandler,
|
|
4361
4246
|
className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none"
|
|
4362
4247
|
},
|
|
4363
|
-
/* @__PURE__ */
|
|
4248
|
+
/* @__PURE__ */ React43.createElement(HugeiconsIcon29, { icon: ArrowLeft01Icon11, size: 16 }),
|
|
4364
4249
|
" Back"
|
|
4365
|
-
)), /* @__PURE__ */
|
|
4250
|
+
)), /* @__PURE__ */ React43.createElement("div", { className: "flex flex-col animate-in max-w-5xl w-full mx-auto fade-in duration-300" }, /* @__PURE__ */ React43.createElement("div", { className: "w-full flex flex-col items-center text-center mb-10 px-4" }, /* @__PURE__ */ React43.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-400 block uppercase mb-3" }, cardType, " CARD ACTIVATION"), /* @__PURE__ */ React43.createElement("h1", { className: "text-2xl sm:text-3xl text-black tracking-tight mb-2" }, "Select Your Tier"), /* @__PURE__ */ React43.createElement("p", { className: "text-xs text-neutral-500 max-w-lg" }, hasPreordered ? "You have already secured your card. Upgrades are disabled while your order is pending processing." : "Upgrade your tier or secure your card now. Pre-orders guarantee priority processing when the batch goes live.")), isLoadingData ? /* @__PURE__ */ React43.createElement("div", { className: "flex justify-center py-20" }, /* @__PURE__ */ React43.createElement(HugeiconsIcon29, { icon: Loading03Icon18, size: 32, className: "animate-spin text-neutral-300" })) : /* @__PURE__ */ React43.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-5 w-full max-w-4xl mx-auto px-4" }, availableTiers.map((tier) => {
|
|
4366
4251
|
const isCurrent = tier.tierName === currentTier;
|
|
4367
4252
|
const isCardDisabled = hasPreordered && !isCurrent;
|
|
4368
4253
|
const isHighlighted = hasPreordered && isCurrent;
|
|
4369
4254
|
const isThisCardLoading = isProcessing && selectedTier?.tierName === tier.tierName;
|
|
4370
4255
|
const isPrimaryDisabled = isCardDisabled || isHighlighted || isThisCardLoading || !tier.acceptPreorder;
|
|
4371
4256
|
const isWaitlistDisabled = !isCurrent || isCurrent && (onWaitlist || hasPreordered) || isThisCardLoading || !tier.acceptWaitlist;
|
|
4372
|
-
return /* @__PURE__ */
|
|
4257
|
+
return /* @__PURE__ */ React43.createElement(
|
|
4373
4258
|
"div",
|
|
4374
4259
|
{
|
|
4375
4260
|
key: tier.tierName,
|
|
@@ -4378,15 +4263,15 @@ var UniversalCardActionPage = ({
|
|
|
4378
4263
|
|
|
4379
4264
|
`
|
|
4380
4265
|
},
|
|
4381
|
-
/* @__PURE__ */
|
|
4266
|
+
/* @__PURE__ */ React43.createElement(
|
|
4382
4267
|
"div",
|
|
4383
4268
|
{
|
|
4384
4269
|
className: `absolute -top-10 -right-10 w-48 h-48 bg-linear-to-bl ${getTierGlow(tier.tierName)} to-transparent opacity-40 blur-2xl rounded-full pointer-events-none`
|
|
4385
4270
|
}
|
|
4386
4271
|
),
|
|
4387
|
-
isThisCardLoading && /* @__PURE__ */
|
|
4388
|
-
/* @__PURE__ */
|
|
4389
|
-
/* @__PURE__ */
|
|
4272
|
+
isThisCardLoading && /* @__PURE__ */ React43.createElement("div", { className: "absolute inset-0 z-50 flex items-center justify-center bg-white/40 backdrop-blur-[1px]" }, /* @__PURE__ */ React43.createElement(HugeiconsIcon29, { icon: Loading03Icon18, size: 32, className: "animate-spin text-black" })),
|
|
4273
|
+
/* @__PURE__ */ React43.createElement("div", { className: "mb-6 relative z-10" }, /* @__PURE__ */ React43.createElement("div", { className: "flex justify-between items-start mb-1" }, /* @__PURE__ */ React43.createElement("span", { className: "text-black text-sm tracking-widest " }, formatTierName(tier.tierName)), isCurrent && !hasPreordered && /* @__PURE__ */ React43.createElement("span", { className: "text-[9px] bg-neutral-100 text-neutral-600 px-2 py-1 rounded-full uppercase tracking-wider" }, "Current")), /* @__PURE__ */ React43.createElement("div", { className: "flex items-baseline gap-1 mt-2" }, /* @__PURE__ */ React43.createElement("h3", { className: "text-3xl font-light text-black" }, tier.priceUSD === 0 ? "Free" : `$${tier.priceUSD.toFixed(2)}`), tier.priceUSD > 0 && /* @__PURE__ */ React43.createElement("span", { className: "text-xs text-neutral-500" }, tier.isYearly ? "/ year" : "one-time")), /* @__PURE__ */ React43.createElement("p", { className: "text-[13px] text-neutral-500 mt-3 min-h-12 leading-relaxed" }, tier.description)),
|
|
4274
|
+
/* @__PURE__ */ React43.createElement("div", { className: "flex flex-col gap-2.5 mb-6 relative z-10" }, /* @__PURE__ */ React43.createElement("div", { className: isPrimaryDisabled ? "opacity-50 pointer-events-none" : "" }, /* @__PURE__ */ React43.createElement(
|
|
4390
4275
|
ThreeDActionButton,
|
|
4391
4276
|
{
|
|
4392
4277
|
disabled: isPrimaryDisabled,
|
|
@@ -4394,7 +4279,7 @@ var UniversalCardActionPage = ({
|
|
|
4394
4279
|
className: "w-full"
|
|
4395
4280
|
},
|
|
4396
4281
|
getPrimaryButtonText(tier)
|
|
4397
|
-
)), /* @__PURE__ */
|
|
4282
|
+
)), /* @__PURE__ */ React43.createElement(
|
|
4398
4283
|
"button",
|
|
4399
4284
|
{
|
|
4400
4285
|
disabled: isWaitlistDisabled,
|
|
@@ -4406,26 +4291,26 @@ var UniversalCardActionPage = ({
|
|
|
4406
4291
|
},
|
|
4407
4292
|
getWaitlistButtonText(tier)
|
|
4408
4293
|
)),
|
|
4409
|
-
/* @__PURE__ */
|
|
4294
|
+
/* @__PURE__ */ React43.createElement("div", { className: "flex flex-col gap-3 relative z-10" }, tier.features.map((feature, featureIdx) => {
|
|
4410
4295
|
const isAvailable = feature.value !== false;
|
|
4411
4296
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
4412
|
-
return /* @__PURE__ */
|
|
4297
|
+
return /* @__PURE__ */ React43.createElement("div", { key: featureIdx, className: "flex items-center gap-3" }, isAvailable ? /* @__PURE__ */ React43.createElement(CheckIcon2, null) : /* @__PURE__ */ React43.createElement(CrossIcon2, null), /* @__PURE__ */ React43.createElement("span", { className: `text-[12px] truncate ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ React43.createElement("span", { className: "text-neutral-500 ml-1 " }, valueText)));
|
|
4413
4298
|
}))
|
|
4414
4299
|
);
|
|
4415
|
-
}))), selectedTier && intendedAction !== "join_waitlist" && /* @__PURE__ */
|
|
4300
|
+
}))), selectedTier && intendedAction !== "join_waitlist" && /* @__PURE__ */ React43.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React43.createElement("div", { className: "absolute inset-0 bg-black/40", onClick: () => !isProcessing && setSelectedTier(null) }), /* @__PURE__ */ React43.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__ */ React43.createElement(
|
|
4416
4301
|
"div",
|
|
4417
4302
|
{
|
|
4418
4303
|
className: `absolute -top-10 -right-10 w-40 h-40 bg-linear-to-bl ${getTierGlow(selectedTier.tierName)} to-transparent opacity-40 blur-2xl rounded-full pointer-events-none`
|
|
4419
4304
|
}
|
|
4420
|
-
), /* @__PURE__ */
|
|
4305
|
+
), /* @__PURE__ */ React43.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 relative z-10" }, /* @__PURE__ */ React43.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Confirm Action"), /* @__PURE__ */ React43.createElement(
|
|
4421
4306
|
"button",
|
|
4422
4307
|
{
|
|
4423
4308
|
disabled: isProcessing,
|
|
4424
4309
|
onClick: () => setSelectedTier(null),
|
|
4425
4310
|
className: "text-neutral-400 hover:text-black transition-colors outline-none disabled:opacity-50"
|
|
4426
4311
|
},
|
|
4427
|
-
/* @__PURE__ */
|
|
4428
|
-
)), /* @__PURE__ */
|
|
4312
|
+
/* @__PURE__ */ React43.createElement(HugeiconsIcon29, { icon: CancelCircleIcon6, size: 18 })
|
|
4313
|
+
)), /* @__PURE__ */ React43.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 relative z-10" }, /* @__PURE__ */ React43.createElement("div", { className: "flex flex-col items-center justify-center mb-6" }, /* @__PURE__ */ React43.createElement("p", { className: "text-2xl text-black mb-1" }, selectedTier.priceUSD === 0 ? "Free" : `$${selectedTier.priceUSD.toFixed(2)}`), /* @__PURE__ */ React43.createElement("span", { className: `text-[10px] tracking-widest px-4 py-1.5 rounded-full bg-neutral-100 text-black mt-1` }, formatTierName(selectedTier.tierName), " ", formatTierName(cardType))), /* @__PURE__ */ React43.createElement("div", { className: "grid grid-cols-1 gap-y-6 mb-8 mt-4" }, /* @__PURE__ */ React43.createElement("div", null, /* @__PURE__ */ React43.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-1" }, "Action"), /* @__PURE__ */ React43.createElement("span", { className: "text-[13px] text-black " }, intendedAction === "upgrade" ? `Upgrade to ${formatTierName(selectedTier.tierName)}` : `Pre-order Card`)), intendedAction === "pre_order" && selectedTier.priceUSD > 0 && /* @__PURE__ */ React43.createElement("div", null, /* @__PURE__ */ React43.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-1" }, "Payment Notice"), /* @__PURE__ */ React43.createElement("span", { className: "text-[12px] text-neutral-600 leading-relaxed block" }, "By confirming, $", selectedTier.priceUSD.toFixed(2), " will be securely deducted from your USD asset balance to guarantee your order."))), /* @__PURE__ */ React43.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React43.createElement(
|
|
4429
4314
|
ThreeDActionButton,
|
|
4430
4315
|
{
|
|
4431
4316
|
onClick: processAction,
|
|
@@ -4433,7 +4318,7 @@ var UniversalCardActionPage = ({
|
|
|
4433
4318
|
className: "w-full"
|
|
4434
4319
|
},
|
|
4435
4320
|
"Confirm & Proceed"
|
|
4436
|
-
), /* @__PURE__ */
|
|
4321
|
+
), /* @__PURE__ */ React43.createElement(
|
|
4437
4322
|
"button",
|
|
4438
4323
|
{
|
|
4439
4324
|
disabled: isProcessing,
|
|
@@ -4441,7 +4326,7 @@ var UniversalCardActionPage = ({
|
|
|
4441
4326
|
className: "w-full flex items-center justify-center py-2.5 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 transition-colors outline-none text-[13px] mt-1 disabled:opacity-50"
|
|
4442
4327
|
},
|
|
4443
4328
|
"Cancel"
|
|
4444
|
-
))))), selectedTier && intendedAction === "join_waitlist" && /* @__PURE__ */
|
|
4329
|
+
))))), selectedTier && intendedAction === "join_waitlist" && /* @__PURE__ */ React43.createElement(
|
|
4445
4330
|
ConfirmationDialog,
|
|
4446
4331
|
{
|
|
4447
4332
|
isOpen: true,
|
|
@@ -4457,24 +4342,24 @@ var UniversalCardActionPage = ({
|
|
|
4457
4342
|
};
|
|
4458
4343
|
|
|
4459
4344
|
// src/components/CardCreationDialog.tsx
|
|
4460
|
-
import
|
|
4345
|
+
import React44, { useState as useState29 } from "react";
|
|
4461
4346
|
import axios2 from "axios";
|
|
4462
4347
|
import toast10 from "react-hot-toast";
|
|
4463
|
-
import { HugeiconsIcon as
|
|
4464
|
-
import { CancelCircleIcon as
|
|
4465
|
-
var CheckIcon3 = ({ className = "" }) => /* @__PURE__ */
|
|
4466
|
-
var CrossIcon3 = ({ className = "" }) => /* @__PURE__ */
|
|
4348
|
+
import { HugeiconsIcon as HugeiconsIcon30 } from "@hugeicons/react";
|
|
4349
|
+
import { CancelCircleIcon as CancelCircleIcon7 } from "@hugeicons/core-free-icons";
|
|
4350
|
+
var CheckIcon3 = ({ className = "" }) => /* @__PURE__ */ React44.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React44.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ React44.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
4351
|
+
var CrossIcon3 = ({ className = "" }) => /* @__PURE__ */ React44.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React44.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ React44.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
4467
4352
|
var formatTierName2 = (name) => {
|
|
4468
4353
|
if (!name) return "";
|
|
4469
4354
|
return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
|
|
4470
4355
|
};
|
|
4471
4356
|
var CardCreationDialog = ({ isOpen, onClose, onSuccess }) => {
|
|
4472
|
-
const [step, setStep] =
|
|
4473
|
-
const [activationCode, setActivationCode] =
|
|
4474
|
-
const [isProcessing, setIsProcessing] =
|
|
4475
|
-
const [cardConfig, setCardConfig] =
|
|
4476
|
-
const [useKyc, setUseKyc] =
|
|
4477
|
-
const [agreedToTerms, setAgreedToTerms] =
|
|
4357
|
+
const [step, setStep] = useState29("INPUT");
|
|
4358
|
+
const [activationCode, setActivationCode] = useState29("");
|
|
4359
|
+
const [isProcessing, setIsProcessing] = useState29(false);
|
|
4360
|
+
const [cardConfig, setCardConfig] = useState29(null);
|
|
4361
|
+
const [useKyc, setUseKyc] = useState29(true);
|
|
4362
|
+
const [agreedToTerms, setAgreedToTerms] = useState29(false);
|
|
4478
4363
|
if (!isOpen) return null;
|
|
4479
4364
|
const handleVerifyCode = async (e) => {
|
|
4480
4365
|
e.preventDefault();
|
|
@@ -4521,15 +4406,15 @@ var CardCreationDialog = ({ isOpen, onClose, onSuccess }) => {
|
|
|
4521
4406
|
const currentFxFeeObj = cardConfig ? useKyc ? cardConfig.fxFee : cardConfig.fxFeeIfKycSkipped : null;
|
|
4522
4407
|
const fxFeeDisplay = currentFxFeeObj ? `$${currentFxFeeObj.fixedUSD} + ${currentFxFeeObj.percentage}%` : "Standard";
|
|
4523
4408
|
const instantCashback = cardConfig?.instantCashbackAmount || 0;
|
|
4524
|
-
return /* @__PURE__ */
|
|
4409
|
+
return /* @__PURE__ */ React44.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React44.createElement("div", { className: "absolute inset-0 bg-black/40", onClick: () => !isProcessing && onClose() }), /* @__PURE__ */ React44.createElement("div", { className: "relative w-full max-w-md bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[90vh]" }, /* @__PURE__ */ React44.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 relative z-10" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, step === "INPUT" ? "Activate Card" : "Configure Your Card"), /* @__PURE__ */ React44.createElement(
|
|
4525
4410
|
"button",
|
|
4526
4411
|
{
|
|
4527
4412
|
disabled: isProcessing,
|
|
4528
4413
|
onClick: onClose,
|
|
4529
4414
|
className: "text-neutral-400 hover:text-black transition-colors outline-none disabled:opacity-50"
|
|
4530
4415
|
},
|
|
4531
|
-
/* @__PURE__ */
|
|
4532
|
-
)), /* @__PURE__ */
|
|
4416
|
+
/* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: CancelCircleIcon7, size: 18 })
|
|
4417
|
+
)), /* @__PURE__ */ React44.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-2 relative z-10" }, step === "INPUT" && /* @__PURE__ */ React44.createElement("div", { className: "animate-in fade-in duration-300" }, /* @__PURE__ */ React44.createElement("p", { className: "text-xs text-neutral-500 mb-6" }, "Enter your secure invitation or activation code to begin the provisioning process."), /* @__PURE__ */ React44.createElement("form", { onSubmit: handleVerifyCode, className: "flex flex-col gap-6" }, /* @__PURE__ */ React44.createElement(
|
|
4533
4418
|
TextInput,
|
|
4534
4419
|
{
|
|
4535
4420
|
label: "Activation Code",
|
|
@@ -4538,7 +4423,7 @@ var CardCreationDialog = ({ isOpen, onClose, onSuccess }) => {
|
|
|
4538
4423
|
placeholder: "Code",
|
|
4539
4424
|
disabled: isProcessing
|
|
4540
4425
|
}
|
|
4541
|
-
), /* @__PURE__ */
|
|
4426
|
+
), /* @__PURE__ */ React44.createElement(
|
|
4542
4427
|
ThreeDActionButton,
|
|
4543
4428
|
{
|
|
4544
4429
|
type: "submit",
|
|
@@ -4547,19 +4432,19 @@ var CardCreationDialog = ({ isOpen, onClose, onSuccess }) => {
|
|
|
4547
4432
|
className: "w-full mt-2"
|
|
4548
4433
|
},
|
|
4549
4434
|
"Verify Code"
|
|
4550
|
-
))), step === "CONFIG" && cardConfig && /* @__PURE__ */
|
|
4435
|
+
))), step === "CONFIG" && cardConfig && /* @__PURE__ */ React44.createElement("div", { className: "animate-in fade-in slide-in-from-right-4 duration-300 flex flex-col gap-5" }, /* @__PURE__ */ React44.createElement("div", { className: "relative bg-white rounded-xl p-5 overflow-hidden flex flex-col" }, /* @__PURE__ */ React44.createElement("div", { className: `absolute -top-10 -right-10 w-40 h-40 bg-linear-to-bl from-[#ceff8a] to-transparent opacity-40 blur-2xl rounded-full pointer-events-none` }), /* @__PURE__ */ React44.createElement("div", { className: "flex justify-between items-start mb-2 relative z-10" }, /* @__PURE__ */ React44.createElement("span", { className: "text-black text-sm tracking-widest " }, cardConfig.name || `${formatTierName2(cardConfig.cardTier)} Card`), /* @__PURE__ */ React44.createElement("span", { className: "text-[10px] tracking-widest px-2.5 py-1 rounded-full bg-white text-black uppercase" }, cardConfig.cardBrand || "VISA")), /* @__PURE__ */ React44.createElement("div", { className: "flex items-baseline justify-between mt-2 relative z-10 flex-wrap gap-2" }, /* @__PURE__ */ React44.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-3xl font-light text-black" }, currentPrice === 0 ? "Free" : `$${currentPrice.toFixed(2)}`), currentPrice > 0 && /* @__PURE__ */ React44.createElement("span", { className: "text-xs text-neutral-500" }, "issuance")), instantCashback > 0 && /* @__PURE__ */ React44.createElement("span", { className: "text-[11px] text-white bg-[#143731] px-2.5 py-1 rounded-full" }, "+$", instantCashback.toFixed(2), " Instant Cashback")), /* @__PURE__ */ React44.createElement("p", { className: "text-[12px] text-neutral-500 mt-2 leading-relaxed relative z-10" }, currentDescription || "Premium global spending card.")), canSkipKyc && /* @__PURE__ */ React44.createElement("div", { className: "flex items-center justify-between p-3.5 border border-neutral-200 rounded-xl bg-white" }, /* @__PURE__ */ React44.createElement("div", { className: "pr-4" }, /* @__PURE__ */ React44.createElement("p", { className: "text-[13px] text-black mb-0.5" }, "Use Verified Identity (KYC)"), /* @__PURE__ */ React44.createElement("p", { className: "text-[11px] text-neutral-500 leading-snug" }, "Turn off to issue card anonymously via synthetic proxy.")), /* @__PURE__ */ React44.createElement(
|
|
4551
4436
|
"button",
|
|
4552
4437
|
{
|
|
4553
4438
|
type: "button",
|
|
4554
4439
|
onClick: () => setUseKyc(!useKyc),
|
|
4555
4440
|
className: `relative w-11 h-6 rounded-full transition-colors duration-300 shrink-0 ${useKyc ? "bg-black" : "bg-neutral-200"}`
|
|
4556
4441
|
},
|
|
4557
|
-
/* @__PURE__ */
|
|
4558
|
-
)), /* @__PURE__ */
|
|
4442
|
+
/* @__PURE__ */ React44.createElement("div", { className: `absolute top-1 left-1 w-4 h-4 rounded-full bg-white shadow-xs transition-transform duration-300 flex items-center justify-center ${useKyc ? "translate-x-5" : "translate-x-0"}` })
|
|
4443
|
+
)), /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-3 bg-neutral-50 p-4 rounded-xl" }, /* @__PURE__ */ React44.createElement("div", { className: "flex justify-between items-center" }, /* @__PURE__ */ React44.createElement("span", { className: "text-[10px] tracking-wider text-neutral-500 uppercase" }, "Balance Limit"), /* @__PURE__ */ React44.createElement("span", { className: "text-[12px] text-black" }, currentLimit)), /* @__PURE__ */ React44.createElement("div", { className: "w-full h-px bg-neutral-200/60" }), /* @__PURE__ */ React44.createElement("div", { className: "flex justify-between items-center" }, /* @__PURE__ */ React44.createElement("span", { className: "text-[10px] tracking-wider text-neutral-500 uppercase" }, "Cashback Rate"), /* @__PURE__ */ React44.createElement("span", { className: "text-[12px] text-black" }, currentCashbackRate)), /* @__PURE__ */ React44.createElement("div", { className: "w-full h-px bg-neutral-200/60" }), /* @__PURE__ */ React44.createElement("div", { className: "flex justify-between items-center" }, /* @__PURE__ */ React44.createElement("span", { className: "text-[10px] tracking-wider text-neutral-500 uppercase" }, "FX Fee"), /* @__PURE__ */ React44.createElement("span", { className: "text-[12px] text-black" }, fxFeeDisplay))), cardConfig.features && cardConfig.features.length > 0 && /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-2.5 my-1" }, cardConfig.features.map((feature, idx) => {
|
|
4559
4444
|
const isAvailable = feature.value !== false;
|
|
4560
4445
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
4561
|
-
return /* @__PURE__ */
|
|
4562
|
-
})), /* @__PURE__ */
|
|
4446
|
+
return /* @__PURE__ */ React44.createElement("div", { key: idx, className: "flex items-center gap-3" }, isAvailable ? /* @__PURE__ */ React44.createElement(CheckIcon3, null) : /* @__PURE__ */ React44.createElement(CrossIcon3, null), /* @__PURE__ */ React44.createElement("span", { className: `text-[12px] truncate ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ React44.createElement("span", { className: "text-neutral-500 ml-1" }, valueText)));
|
|
4447
|
+
})), /* @__PURE__ */ React44.createElement("div", { className: "flex items-start gap-3 mt-1" }, /* @__PURE__ */ React44.createElement(
|
|
4563
4448
|
"input",
|
|
4564
4449
|
{
|
|
4565
4450
|
type: "checkbox",
|
|
@@ -4568,7 +4453,7 @@ var CardCreationDialog = ({ isOpen, onClose, onSuccess }) => {
|
|
|
4568
4453
|
onChange: (e) => setAgreedToTerms(e.target.checked),
|
|
4569
4454
|
className: "mt-0.5 w-4 h-4 bg-white border-neutral-300 rounded text-black focus:ring-black cursor-pointer shrink-0"
|
|
4570
4455
|
}
|
|
4571
|
-
), /* @__PURE__ */
|
|
4456
|
+
), /* @__PURE__ */ React44.createElement("label", { htmlFor: "card-terms", className: "text-[11px] text-neutral-500 cursor-pointer leading-snug" }, "I agree to the ", /* @__PURE__ */ React44.createElement("a", { href: "https://aeona.finance/terms", target: "_blank", className: "text-black underline" }, "Terms of Service"), " and ", /* @__PURE__ */ React44.createElement("a", { href: "https://aeona.finance/privacy", target: "_blank", className: "text-black underline" }, "Privacy Policy"), " governing card issuance.")), /* @__PURE__ */ React44.createElement("div", { className: "bg-neutral-50 rounded-lg p-3" }, /* @__PURE__ */ React44.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-1 uppercase" }, "Payment Notice"), /* @__PURE__ */ React44.createElement("span", { className: "text-[11px] text-neutral-600 leading-relaxed block" }, "By confirming, $", currentPrice.toFixed(2), " will be securely deducted from your USD asset balance to guarantee your order.")), /* @__PURE__ */ React44.createElement("div", { className: "mt-1" }, /* @__PURE__ */ React44.createElement(
|
|
4572
4457
|
ThreeDActionButton,
|
|
4573
4458
|
{
|
|
4574
4459
|
onClick: handleCreateCard,
|
|
@@ -4579,6 +4464,84 @@ var CardCreationDialog = ({ isOpen, onClose, onSuccess }) => {
|
|
|
4579
4464
|
"Create Card"
|
|
4580
4465
|
))))));
|
|
4581
4466
|
};
|
|
4467
|
+
|
|
4468
|
+
// src/components/PinDialerBottomSheet.tsx
|
|
4469
|
+
import React45, { useState as useState30, useEffect as useEffect17 } from "react";
|
|
4470
|
+
import { HugeiconsIcon as HugeiconsIcon31 } from "@hugeicons/react";
|
|
4471
|
+
import { Loading03Icon as Loading03Icon19, CancelCircleIcon as CancelCircleIcon8, LessThanIcon } from "@hugeicons/core-free-icons";
|
|
4472
|
+
var PinDialerBottomSheet = ({
|
|
4473
|
+
isOpen,
|
|
4474
|
+
title = "Action Required",
|
|
4475
|
+
isVerifying = false,
|
|
4476
|
+
onClose,
|
|
4477
|
+
onComplete
|
|
4478
|
+
}) => {
|
|
4479
|
+
const [pin, setPin] = useState30("");
|
|
4480
|
+
useEffect17(() => {
|
|
4481
|
+
setPin("");
|
|
4482
|
+
}, [isOpen]);
|
|
4483
|
+
const handlePinPress = (value) => {
|
|
4484
|
+
if (isVerifying) return;
|
|
4485
|
+
if (value === "del") {
|
|
4486
|
+
setPin((prev) => prev.slice(0, -1));
|
|
4487
|
+
return;
|
|
4488
|
+
}
|
|
4489
|
+
if (pin.length < 4) {
|
|
4490
|
+
const newPin = pin + value;
|
|
4491
|
+
setPin(newPin);
|
|
4492
|
+
if (newPin.length === 4) {
|
|
4493
|
+
onComplete(newPin);
|
|
4494
|
+
}
|
|
4495
|
+
}
|
|
4496
|
+
};
|
|
4497
|
+
if (!isOpen) return null;
|
|
4498
|
+
return /* @__PURE__ */ React45.createElement("div", { className: "fixed inset-0 z-150 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React45.createElement(
|
|
4499
|
+
"div",
|
|
4500
|
+
{
|
|
4501
|
+
className: "absolute inset-0 bg-black/40 animate-in fade-in duration-200",
|
|
4502
|
+
onClick: () => {
|
|
4503
|
+
if (!isVerifying) onClose();
|
|
4504
|
+
}
|
|
4505
|
+
}
|
|
4506
|
+
), /* @__PURE__ */ React45.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__ */ React45.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React45.createElement("h3", { className: "text-[16px] text-black tracking-tight" }, title), /* @__PURE__ */ React45.createElement(
|
|
4507
|
+
"button",
|
|
4508
|
+
{
|
|
4509
|
+
onClick: () => {
|
|
4510
|
+
if (!isVerifying) onClose();
|
|
4511
|
+
},
|
|
4512
|
+
className: "text-neutral-400 hover:text-black transition-colors outline-none"
|
|
4513
|
+
},
|
|
4514
|
+
/* @__PURE__ */ React45.createElement(HugeiconsIcon31, { icon: CancelCircleIcon8, size: 20 })
|
|
4515
|
+
)), /* @__PURE__ */ React45.createElement("div", { className: "flex flex-col px-6 pb-8 pt-2 relative" }, /* @__PURE__ */ React45.createElement("div", { className: "flex justify-center gap-4 mb-8" }, [0, 1, 2, 3].map((i) => /* @__PURE__ */ React45.createElement(
|
|
4516
|
+
"div",
|
|
4517
|
+
{
|
|
4518
|
+
key: i,
|
|
4519
|
+
className: `w-2 h-2 rounded-full transition-colors duration-200 ${pin.length > i ? "bg-black" : "bg-neutral-200"}`
|
|
4520
|
+
}
|
|
4521
|
+
))), isVerifying && /* @__PURE__ */ React45.createElement("div", { className: "absolute inset-0 bg-white/80 backdrop-blur-sm z-10 flex items-center justify-center rounded-b-2xl" }, /* @__PURE__ */ React45.createElement(HugeiconsIcon31, { icon: Loading03Icon19, size: 28, className: "animate-spin text-black" })), /* @__PURE__ */ React45.createElement("div", { className: "grid grid-cols-3 gap-y-4 gap-x-6 max-w-60 mx-auto" }, [1, 2, 3, 4, 5, 6, 7, 8, 9].map((num) => /* @__PURE__ */ React45.createElement(
|
|
4522
|
+
"button",
|
|
4523
|
+
{
|
|
4524
|
+
key: num,
|
|
4525
|
+
onClick: () => handlePinPress(num),
|
|
4526
|
+
className: "w-14 h-14 rounded-full flex bg-neutral-50 items-center justify-center text-sm text-black hover:bg-neutral-50 transition-colors mx-auto outline-none active:scale-95"
|
|
4527
|
+
},
|
|
4528
|
+
num
|
|
4529
|
+
)), /* @__PURE__ */ React45.createElement("div", null), " ", /* @__PURE__ */ React45.createElement(
|
|
4530
|
+
"button",
|
|
4531
|
+
{
|
|
4532
|
+
onClick: () => handlePinPress(0),
|
|
4533
|
+
className: "w-14 h-14 rounded-full flex bg-neutral-50 items-center justify-center text-sm text-black hover:bg-neutral-50 transition-colors mx-auto outline-none active:scale-95"
|
|
4534
|
+
},
|
|
4535
|
+
"0"
|
|
4536
|
+
), /* @__PURE__ */ React45.createElement(
|
|
4537
|
+
"button",
|
|
4538
|
+
{
|
|
4539
|
+
onClick: () => handlePinPress("del"),
|
|
4540
|
+
className: "w-14 h-14 rounded-full flex items-center justify-center text-neutral-400 hover:text-black hover:bg-neutral-50 transition-colors mx-auto outline-none active:scale-95"
|
|
4541
|
+
},
|
|
4542
|
+
/* @__PURE__ */ React45.createElement(HugeiconsIcon31, { icon: LessThanIcon, size: 20 })
|
|
4543
|
+
)))));
|
|
4544
|
+
};
|
|
4582
4545
|
export {
|
|
4583
4546
|
AppBento2,
|
|
4584
4547
|
CardCreationDialog,
|
|
@@ -4602,6 +4565,7 @@ export {
|
|
|
4602
4565
|
MobileNav,
|
|
4603
4566
|
NumberInput,
|
|
4604
4567
|
PageSpinner,
|
|
4568
|
+
PinDialerBottomSheet,
|
|
4605
4569
|
PipleAuth,
|
|
4606
4570
|
PlatformFeatures,
|
|
4607
4571
|
PortfolioHero,
|