@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.js
CHANGED
|
@@ -53,6 +53,7 @@ __export(index_exports, {
|
|
|
53
53
|
MobileNav: () => MobileNav,
|
|
54
54
|
NumberInput: () => NumberInput,
|
|
55
55
|
PageSpinner: () => PageSpinner,
|
|
56
|
+
PinDialerBottomSheet: () => PinDialerBottomSheet,
|
|
56
57
|
PipleAuth: () => PipleAuth,
|
|
57
58
|
PlatformFeatures: () => PlatformFeatures,
|
|
58
59
|
PortfolioHero: () => PortfolioHero,
|
|
@@ -1963,90 +1964,10 @@ var UniversalWalletPage = ({
|
|
|
1963
1964
|
};
|
|
1964
1965
|
|
|
1965
1966
|
// src/components/UniversalCardPage.tsx
|
|
1966
|
-
var import_react33 = __toESM(require("react"));
|
|
1967
|
-
var import_navigation4 = require("next/navigation");
|
|
1968
|
-
var import_react34 = require("@hugeicons/react");
|
|
1969
|
-
var import_core_free_icons12 = require("@hugeicons/core-free-icons");
|
|
1970
|
-
|
|
1971
|
-
// src/components/PinDialerBottomSheet.tsx
|
|
1972
1967
|
var import_react31 = __toESM(require("react"));
|
|
1968
|
+
var import_navigation4 = require("next/navigation");
|
|
1973
1969
|
var import_react32 = require("@hugeicons/react");
|
|
1974
1970
|
var import_core_free_icons11 = require("@hugeicons/core-free-icons");
|
|
1975
|
-
var PinDialerBottomSheet = ({
|
|
1976
|
-
isOpen,
|
|
1977
|
-
title = "Action Required",
|
|
1978
|
-
isVerifying = false,
|
|
1979
|
-
onClose,
|
|
1980
|
-
onComplete
|
|
1981
|
-
}) => {
|
|
1982
|
-
const [pin, setPin] = (0, import_react31.useState)("");
|
|
1983
|
-
(0, import_react31.useEffect)(() => {
|
|
1984
|
-
setPin("");
|
|
1985
|
-
}, [isOpen]);
|
|
1986
|
-
const handlePinPress = (value) => {
|
|
1987
|
-
if (isVerifying) return;
|
|
1988
|
-
if (value === "del") {
|
|
1989
|
-
setPin((prev) => prev.slice(0, -1));
|
|
1990
|
-
return;
|
|
1991
|
-
}
|
|
1992
|
-
if (pin.length < 4) {
|
|
1993
|
-
const newPin = pin + value;
|
|
1994
|
-
setPin(newPin);
|
|
1995
|
-
if (newPin.length === 4) {
|
|
1996
|
-
onComplete(newPin);
|
|
1997
|
-
}
|
|
1998
|
-
}
|
|
1999
|
-
};
|
|
2000
|
-
if (!isOpen) return null;
|
|
2001
|
-
return /* @__PURE__ */ import_react31.default.createElement("div", { className: "fixed inset-0 z-150 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react31.default.createElement(
|
|
2002
|
-
"div",
|
|
2003
|
-
{
|
|
2004
|
-
className: "absolute inset-0 bg-black/40 animate-in fade-in duration-200",
|
|
2005
|
-
onClick: () => {
|
|
2006
|
-
if (!isVerifying) onClose();
|
|
2007
|
-
}
|
|
2008
|
-
}
|
|
2009
|
-
), /* @__PURE__ */ import_react31.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react31.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ import_react31.default.createElement("h3", { className: "text-[16px] text-black tracking-tight" }, title), /* @__PURE__ */ import_react31.default.createElement(
|
|
2010
|
-
"button",
|
|
2011
|
-
{
|
|
2012
|
-
onClick: () => {
|
|
2013
|
-
if (!isVerifying) onClose();
|
|
2014
|
-
},
|
|
2015
|
-
className: "text-neutral-400 hover:text-black transition-colors outline-none"
|
|
2016
|
-
},
|
|
2017
|
-
/* @__PURE__ */ import_react31.default.createElement(import_react32.HugeiconsIcon, { icon: import_core_free_icons11.CancelCircleIcon, size: 20 })
|
|
2018
|
-
)), /* @__PURE__ */ import_react31.default.createElement("div", { className: "flex flex-col px-6 pb-8 pt-2 relative" }, /* @__PURE__ */ import_react31.default.createElement("div", { className: "flex justify-center gap-4 mb-8" }, [0, 1, 2, 3].map((i) => /* @__PURE__ */ import_react31.default.createElement(
|
|
2019
|
-
"div",
|
|
2020
|
-
{
|
|
2021
|
-
key: i,
|
|
2022
|
-
className: `w-2 h-2 rounded-full transition-colors duration-200 ${pin.length > i ? "bg-black" : "bg-neutral-200"}`
|
|
2023
|
-
}
|
|
2024
|
-
))), isVerifying && /* @__PURE__ */ import_react31.default.createElement("div", { className: "absolute inset-0 bg-white/80 backdrop-blur-sm z-10 flex items-center justify-center rounded-b-2xl" }, /* @__PURE__ */ import_react31.default.createElement(import_react32.HugeiconsIcon, { icon: import_core_free_icons11.Loading03Icon, size: 28, className: "animate-spin text-black" })), /* @__PURE__ */ import_react31.default.createElement("div", { className: "grid grid-cols-3 gap-y-4 gap-x-6 max-w-60 mx-auto" }, [1, 2, 3, 4, 5, 6, 7, 8, 9].map((num) => /* @__PURE__ */ import_react31.default.createElement(
|
|
2025
|
-
"button",
|
|
2026
|
-
{
|
|
2027
|
-
key: num,
|
|
2028
|
-
onClick: () => handlePinPress(num),
|
|
2029
|
-
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"
|
|
2030
|
-
},
|
|
2031
|
-
num
|
|
2032
|
-
)), /* @__PURE__ */ import_react31.default.createElement("div", null), " ", /* @__PURE__ */ import_react31.default.createElement(
|
|
2033
|
-
"button",
|
|
2034
|
-
{
|
|
2035
|
-
onClick: () => handlePinPress(0),
|
|
2036
|
-
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"
|
|
2037
|
-
},
|
|
2038
|
-
"0"
|
|
2039
|
-
), /* @__PURE__ */ import_react31.default.createElement(
|
|
2040
|
-
"button",
|
|
2041
|
-
{
|
|
2042
|
-
onClick: () => handlePinPress("del"),
|
|
2043
|
-
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"
|
|
2044
|
-
},
|
|
2045
|
-
/* @__PURE__ */ import_react31.default.createElement(import_react32.HugeiconsIcon, { icon: import_core_free_icons11.LessThanIcon, size: 20 })
|
|
2046
|
-
)))));
|
|
2047
|
-
};
|
|
2048
|
-
|
|
2049
|
-
// src/components/UniversalCardPage.tsx
|
|
2050
1971
|
var UniversalCardPage = ({
|
|
2051
1972
|
cards = [],
|
|
2052
1973
|
actionPath = "/app/cards/action/",
|
|
@@ -2058,27 +1979,21 @@ var UniversalCardPage = ({
|
|
|
2058
1979
|
onCreateCard
|
|
2059
1980
|
}) => {
|
|
2060
1981
|
const router = (0, import_navigation4.useRouter)();
|
|
2061
|
-
const sortedCards =
|
|
1982
|
+
const sortedCards = import_react31.default.useMemo(() => {
|
|
2062
1983
|
return [...cards].sort((a, b) => {
|
|
2063
1984
|
if (a.type === "VIRTUAL" && b.type !== "VIRTUAL") return -1;
|
|
2064
1985
|
if (b.type === "VIRTUAL" && a.type !== "VIRTUAL") return 1;
|
|
2065
1986
|
return 0;
|
|
2066
1987
|
});
|
|
2067
1988
|
}, [cards]);
|
|
2068
|
-
const [activeTabIndex, setActiveTabIndex] = (0,
|
|
1989
|
+
const [activeTabIndex, setActiveTabIndex] = (0, import_react31.useState)(0);
|
|
2069
1990
|
const activeCard = sortedCards[activeTabIndex];
|
|
2070
|
-
(0,
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
const [
|
|
2074
|
-
const [
|
|
2075
|
-
|
|
2076
|
-
const [isFreezing, setIsFreezing] = (0, import_react33.useState)(false);
|
|
2077
|
-
const [isOverlayActionLoading, setIsOverlayActionLoading] = (0, import_react33.useState)(false);
|
|
2078
|
-
const [showDeleteDialog, setShowDeleteDialog] = (0, import_react33.useState)(false);
|
|
2079
|
-
const [isDeleting, setIsDeleting] = (0, import_react33.useState)(false);
|
|
2080
|
-
const [showPinDialer, setShowPinDialer] = (0, import_react33.useState)(false);
|
|
2081
|
-
(0, import_react33.useEffect)(() => {
|
|
1991
|
+
const [isBgLoaded, setIsBgLoaded] = (0, import_react31.useState)(false);
|
|
1992
|
+
const [isFreezing, setIsFreezing] = (0, import_react31.useState)(false);
|
|
1993
|
+
const [isOverlayActionLoading, setIsOverlayActionLoading] = (0, import_react31.useState)(false);
|
|
1994
|
+
const [showDeleteDialog, setShowDeleteDialog] = (0, import_react31.useState)(false);
|
|
1995
|
+
const [isDeleting, setIsDeleting] = (0, import_react31.useState)(false);
|
|
1996
|
+
(0, import_react31.useEffect)(() => {
|
|
2082
1997
|
setIsBgLoaded(false);
|
|
2083
1998
|
if (!activeCard?.cardBgSrc) return;
|
|
2084
1999
|
const img = new Image();
|
|
@@ -2087,7 +2002,7 @@ var UniversalCardPage = ({
|
|
|
2087
2002
|
setTimeout(() => setIsBgLoaded(true), 300);
|
|
2088
2003
|
};
|
|
2089
2004
|
}, [activeCard?.cardBgSrc]);
|
|
2090
|
-
if (!activeCard) return /* @__PURE__ */
|
|
2005
|
+
if (!activeCard) return /* @__PURE__ */ import_react31.default.createElement("div", { className: "text-center p-8 text-neutral-500" }, "No cards available");
|
|
2091
2006
|
const isActivated = activeCard.status === "ACTIVATED";
|
|
2092
2007
|
const isFrozen = activeCard.status === "FROZEN";
|
|
2093
2008
|
const isUnactivated = activeCard.status === "UNACTIVATED";
|
|
@@ -2099,28 +2014,6 @@ var UniversalCardPage = ({
|
|
|
2099
2014
|
const showActionOverlay = !isActivated && isBgLoaded && !isPreordered || isFrozen;
|
|
2100
2015
|
const overlayClasses = activeCard.contentDark ? "bg-white/20 backdrop-blur-[3px]" : "bg-black/10 backdrop-blur-[2px]";
|
|
2101
2016
|
const buttonClasses = activeCard.contentDark ? "bg-black/10 text-black hover:bg-black/20 font-medium" : "bg-white/25 text-white hover:bg-white/35";
|
|
2102
|
-
const handleToggleReveal = () => {
|
|
2103
|
-
if (revealDisabled || isRevealing) return;
|
|
2104
|
-
if (isRevealed) {
|
|
2105
|
-
setIsRevealed(false);
|
|
2106
|
-
setIsRevealing(true);
|
|
2107
|
-
setTimeout(() => {
|
|
2108
|
-
if (onReveal) onReveal(activeCard.id);
|
|
2109
|
-
setIsRevealing(false);
|
|
2110
|
-
}, 800);
|
|
2111
|
-
} else {
|
|
2112
|
-
setShowPinDialer(true);
|
|
2113
|
-
}
|
|
2114
|
-
};
|
|
2115
|
-
const handlePinComplete = (pin) => {
|
|
2116
|
-
setIsRevealing(true);
|
|
2117
|
-
setTimeout(() => {
|
|
2118
|
-
setShowPinDialer(false);
|
|
2119
|
-
setIsRevealed(true);
|
|
2120
|
-
if (onReveal) onReveal(activeCard.id);
|
|
2121
|
-
setIsRevealing(false);
|
|
2122
|
-
}, 1e3);
|
|
2123
|
-
};
|
|
2124
2017
|
const handleToggleFreeze = () => {
|
|
2125
2018
|
if (freezeDisabled || isFreezing) return;
|
|
2126
2019
|
setIsFreezing(true);
|
|
@@ -2145,38 +2038,40 @@ var UniversalCardPage = ({
|
|
|
2145
2038
|
setShowDeleteDialog(false);
|
|
2146
2039
|
}, 1200);
|
|
2147
2040
|
};
|
|
2148
|
-
const formatTabLabel = (
|
|
2149
|
-
|
|
2150
|
-
|
|
2041
|
+
const formatTabLabel = (card) => {
|
|
2042
|
+
if (card.prepaid) {
|
|
2043
|
+
const capitalizedTier = card.tier.charAt(0).toUpperCase() + card.tier.slice(1).toLowerCase();
|
|
2044
|
+
return `${capitalizedTier}`;
|
|
2045
|
+
}
|
|
2046
|
+
const capitalizedType = card.type.charAt(0).toUpperCase() + card.type.slice(1).toLowerCase();
|
|
2047
|
+
return `${capitalizedType}`;
|
|
2151
2048
|
};
|
|
2152
|
-
return /* @__PURE__ */
|
|
2049
|
+
return /* @__PURE__ */ import_react31.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 relative" }, onCreateCard && /* @__PURE__ */ import_react31.default.createElement(
|
|
2050
|
+
"button",
|
|
2051
|
+
{
|
|
2052
|
+
onClick: onCreateCard,
|
|
2053
|
+
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"
|
|
2054
|
+
},
|
|
2055
|
+
/* @__PURE__ */ import_react31.default.createElement(import_react32.HugeiconsIcon, { icon: import_core_free_icons11.PlusSignIcon, size: 18 })
|
|
2056
|
+
), /* @__PURE__ */ import_react31.default.createElement("div", { className: "flex items-center justify-center mb-6 w-full px-2 gap-3" }, sortedCards.length > 0 && /* @__PURE__ */ import_react31.default.createElement("div", { className: "flex items-center bg-white rounded-full p-1 sm:p-1.5 max-w-full overflow-x-auto custom-scrollbar" }, sortedCards.map((tab, idx) => {
|
|
2153
2057
|
const isActive = activeTabIndex === idx;
|
|
2154
|
-
return /* @__PURE__ */
|
|
2058
|
+
return /* @__PURE__ */ import_react31.default.createElement(
|
|
2155
2059
|
"button",
|
|
2156
2060
|
{
|
|
2157
2061
|
key: tab.id,
|
|
2158
2062
|
onClick: () => setActiveTabIndex(idx),
|
|
2159
2063
|
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"}`
|
|
2160
2064
|
},
|
|
2161
|
-
formatTabLabel(tab
|
|
2065
|
+
formatTabLabel(tab)
|
|
2162
2066
|
);
|
|
2163
|
-
})), /* @__PURE__ */
|
|
2164
|
-
"button",
|
|
2165
|
-
{
|
|
2166
|
-
onClick: () => {
|
|
2167
|
-
if (onCreateCard) onCreateCard();
|
|
2168
|
-
},
|
|
2169
|
-
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"
|
|
2170
|
-
},
|
|
2171
|
-
/* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons12.PlusSignIcon, size: 18 })
|
|
2172
|
-
)), /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-full pt-2 pb-2 flex justify-center" }, /* @__PURE__ */ import_react33.default.createElement(
|
|
2067
|
+
}))), /* @__PURE__ */ import_react31.default.createElement("div", { className: "w-full pt-2 pb-2 flex justify-center" }, /* @__PURE__ */ import_react31.default.createElement(
|
|
2173
2068
|
"div",
|
|
2174
2069
|
{
|
|
2175
2070
|
className: "relative w-full max-w-85",
|
|
2176
|
-
style: { height:
|
|
2071
|
+
style: { height: 179 }
|
|
2177
2072
|
},
|
|
2178
|
-
!isBgLoaded && /* @__PURE__ */
|
|
2179
|
-
showActionOverlay && /* @__PURE__ */
|
|
2073
|
+
!isBgLoaded && /* @__PURE__ */ import_react31.default.createElement("div", { className: "absolute inset-0 w-full h-full bg-white rounded-2xl flex items-center justify-center z-50" }, /* @__PURE__ */ import_react31.default.createElement(import_react32.HugeiconsIcon, { icon: import_core_free_icons11.Loading03Icon, size: 28, className: "animate-spin text-black" })),
|
|
2074
|
+
showActionOverlay && /* @__PURE__ */ import_react31.default.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__ */ import_react31.default.createElement(
|
|
2180
2075
|
"button",
|
|
2181
2076
|
{
|
|
2182
2077
|
onClick: (e) => {
|
|
@@ -2186,7 +2081,7 @@ var UniversalCardPage = ({
|
|
|
2186
2081
|
className: `px-6 py-2 text-[11px] rounded-full transition-all outline-none active:scale-95 ${buttonClasses}`
|
|
2187
2082
|
},
|
|
2188
2083
|
"Activate Card"
|
|
2189
|
-
), isDead && /* @__PURE__ */
|
|
2084
|
+
), isDead && /* @__PURE__ */ import_react31.default.createElement(
|
|
2190
2085
|
"button",
|
|
2191
2086
|
{
|
|
2192
2087
|
onClick: (e) => {
|
|
@@ -2196,7 +2091,7 @@ var UniversalCardPage = ({
|
|
|
2196
2091
|
className: `px-6 py-2 text-[11px] rounded-full transition-all outline-none active:scale-95 ${buttonClasses}`
|
|
2197
2092
|
},
|
|
2198
2093
|
"Create Card"
|
|
2199
|
-
), isFrozen && /* @__PURE__ */
|
|
2094
|
+
), isFrozen && /* @__PURE__ */ import_react31.default.createElement(
|
|
2200
2095
|
"button",
|
|
2201
2096
|
{
|
|
2202
2097
|
onClick: (e) => {
|
|
@@ -2206,23 +2101,23 @@ var UniversalCardPage = ({
|
|
|
2206
2101
|
disabled: isOverlayActionLoading,
|
|
2207
2102
|
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}`
|
|
2208
2103
|
},
|
|
2209
|
-
isOverlayActionLoading ? /* @__PURE__ */
|
|
2104
|
+
isOverlayActionLoading ? /* @__PURE__ */ import_react31.default.createElement(import_react32.HugeiconsIcon, { icon: import_core_free_icons11.Loading03Icon, size: 16, className: `animate-spin ${activeCard.contentDark ? "text-black" : "text-white"}` }) : "Unfreeze Card"
|
|
2210
2105
|
)),
|
|
2211
|
-
/* @__PURE__ */
|
|
2106
|
+
/* @__PURE__ */ import_react31.default.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__ */ import_react31.default.createElement(
|
|
2212
2107
|
"div",
|
|
2213
2108
|
{
|
|
2214
2109
|
className: "absolute inset-0 bg-cover bg-center",
|
|
2215
2110
|
style: { backgroundImage: `url(${activeCard.cardBgSrc})` }
|
|
2216
2111
|
}
|
|
2217
|
-
), /* @__PURE__ */
|
|
2112
|
+
), /* @__PURE__ */ import_react31.default.createElement("div", { className: "relative z-10 w-full h-full p-5 flex flex-col justify-between" }, /* @__PURE__ */ import_react31.default.createElement("div", { className: "flex items-start justify-end w-full gap-4" }, activeCard.prepaid && /* @__PURE__ */ import_react31.default.createElement("div", { className: "flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ import_react31.default.createElement("span", { className: `text-[9px] tracking-widest ${activeCard.contentDark ? "text-black/60" : "text-white/60"}` }, "Card Tier"), /* @__PURE__ */ import_react31.default.createElement("span", { className: `text-[11px] tracking-widest font-medium ${activeCard.contentDark ? "text-black" : "text-white"}` }, activeCard.tier))), /* @__PURE__ */ import_react31.default.createElement("div", { className: "flex justify-between items-end w-full" }, /* @__PURE__ */ import_react31.default.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ import_react31.default.createElement("span", { className: `text-[9px] tracking-widest ${activeCard.contentDark ? "text-black/60" : "text-white/60"}` }, activeCard.prepaid ? "Card Balance" : "Card Tier"), /* @__PURE__ */ import_react31.default.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__ */ import_react31.default.createElement(
|
|
2218
2113
|
"img",
|
|
2219
2114
|
{
|
|
2220
2115
|
src: activeCard.networkLogoSrc,
|
|
2221
2116
|
alt: "Network Logo",
|
|
2222
|
-
className: "h-
|
|
2117
|
+
className: "h-7 w-auto max-w-20 object-contain opacity-90"
|
|
2223
2118
|
}
|
|
2224
2119
|
))))
|
|
2225
|
-
)), activeCard.bannerProps ? /* @__PURE__ */
|
|
2120
|
+
)), activeCard.bannerProps ? /* @__PURE__ */ import_react31.default.createElement("div", { className: "mb-6 w-full mt-2" }, /* @__PURE__ */ import_react31.default.createElement(Banner, { ...activeCard.bannerProps })) : isPreordered ? /* @__PURE__ */ import_react31.default.createElement("div", { className: "mb-6 w-full mt-2" }, /* @__PURE__ */ import_react31.default.createElement(
|
|
2226
2121
|
Banner,
|
|
2227
2122
|
{
|
|
2228
2123
|
type: "success",
|
|
@@ -2230,10 +2125,10 @@ var UniversalCardPage = ({
|
|
|
2230
2125
|
message: `Your ${activeCard.tier} ${activeCard.type.toLowerCase()} card has been pre-ordered successfully and is pending batch processing.`,
|
|
2231
2126
|
isDismissible: false
|
|
2232
2127
|
}
|
|
2233
|
-
)) : null, /* @__PURE__ */
|
|
2128
|
+
)) : null, /* @__PURE__ */ import_react31.default.createElement("div", { className: "w-full flex flex-col gap-4 mt-1" }, /* @__PURE__ */ import_react31.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, activeCard.prepaid && /* @__PURE__ */ import_react31.default.createElement(
|
|
2234
2129
|
MenuRow,
|
|
2235
2130
|
{
|
|
2236
|
-
icon:
|
|
2131
|
+
icon: import_core_free_icons11.PlusSignIcon,
|
|
2237
2132
|
title: "Fund Card",
|
|
2238
2133
|
subtitle: "Add money to card",
|
|
2239
2134
|
onClick: () => {
|
|
@@ -2241,34 +2136,34 @@ var UniversalCardPage = ({
|
|
|
2241
2136
|
},
|
|
2242
2137
|
disabled: actionsDisabled
|
|
2243
2138
|
}
|
|
2244
|
-
), /* @__PURE__ */
|
|
2139
|
+
), /* @__PURE__ */ import_react31.default.createElement(
|
|
2245
2140
|
MenuRow,
|
|
2246
2141
|
{
|
|
2247
|
-
icon:
|
|
2142
|
+
icon: import_core_free_icons11.ViewOffSlashIcon,
|
|
2248
2143
|
title: "Reveal Information",
|
|
2249
2144
|
subtitle: "Show secure card details",
|
|
2250
|
-
onClick:
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
toggleLoading: isRevealing,
|
|
2145
|
+
onClick: () => {
|
|
2146
|
+
if (!revealDisabled && onReveal) onReveal(activeCard.id);
|
|
2147
|
+
},
|
|
2254
2148
|
disabled: revealDisabled
|
|
2255
2149
|
}
|
|
2256
|
-
), /* @__PURE__ */
|
|
2150
|
+
), /* @__PURE__ */ import_react31.default.createElement(
|
|
2257
2151
|
MenuRow,
|
|
2258
2152
|
{
|
|
2259
|
-
icon:
|
|
2153
|
+
icon: import_core_free_icons11.SnowIcon,
|
|
2260
2154
|
title: "Freeze",
|
|
2261
2155
|
subtitle: "Freeze & Unfreeze card",
|
|
2262
2156
|
onClick: handleToggleFreeze,
|
|
2263
2157
|
isToggle: true,
|
|
2264
2158
|
toggleState: isFrozen,
|
|
2265
2159
|
toggleLoading: isFreezing,
|
|
2266
|
-
disabled: freezeDisabled
|
|
2160
|
+
disabled: freezeDisabled,
|
|
2161
|
+
isLast: activeCard.prepaid
|
|
2267
2162
|
}
|
|
2268
|
-
), /* @__PURE__ */
|
|
2163
|
+
), !activeCard.prepaid && /* @__PURE__ */ import_react31.default.createElement(
|
|
2269
2164
|
MenuRow,
|
|
2270
2165
|
{
|
|
2271
|
-
icon:
|
|
2166
|
+
icon: import_core_free_icons11.SlidersHorizontalIcon,
|
|
2272
2167
|
title: "Set Limits",
|
|
2273
2168
|
subtitle: "Set card limits",
|
|
2274
2169
|
onClick: () => {
|
|
@@ -2277,10 +2172,10 @@ var UniversalCardPage = ({
|
|
|
2277
2172
|
disabled: actionsDisabled,
|
|
2278
2173
|
isLast: true
|
|
2279
2174
|
}
|
|
2280
|
-
)), /* @__PURE__ */
|
|
2175
|
+
)), /* @__PURE__ */ import_react31.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react31.default.createElement(
|
|
2281
2176
|
MenuRow,
|
|
2282
2177
|
{
|
|
2283
|
-
icon:
|
|
2178
|
+
icon: import_core_free_icons11.Delete02Icon,
|
|
2284
2179
|
title: "Delete card",
|
|
2285
2180
|
subtitle: "Permanently delete card",
|
|
2286
2181
|
onClick: () => {
|
|
@@ -2289,7 +2184,7 @@ var UniversalCardPage = ({
|
|
|
2289
2184
|
disabled: actionsDisabled,
|
|
2290
2185
|
isLast: true
|
|
2291
2186
|
}
|
|
2292
|
-
))), /* @__PURE__ */
|
|
2187
|
+
))), /* @__PURE__ */ import_react31.default.createElement(
|
|
2293
2188
|
ConfirmationDialog,
|
|
2294
2189
|
{
|
|
2295
2190
|
isOpen: showDeleteDialog,
|
|
@@ -2301,15 +2196,6 @@ var UniversalCardPage = ({
|
|
|
2301
2196
|
onClose: () => setShowDeleteDialog(false),
|
|
2302
2197
|
onConfirm: confirmDelete
|
|
2303
2198
|
}
|
|
2304
|
-
), /* @__PURE__ */ import_react33.default.createElement(
|
|
2305
|
-
PinDialerBottomSheet,
|
|
2306
|
-
{
|
|
2307
|
-
isOpen: showPinDialer,
|
|
2308
|
-
title: "Enter your pin",
|
|
2309
|
-
isVerifying: isRevealing,
|
|
2310
|
-
onClose: () => setShowPinDialer(false),
|
|
2311
|
-
onComplete: handlePinComplete
|
|
2312
|
-
}
|
|
2313
2199
|
));
|
|
2314
2200
|
};
|
|
2315
2201
|
var MenuRow = ({
|
|
@@ -2324,21 +2210,21 @@ var MenuRow = ({
|
|
|
2324
2210
|
toggleState = false,
|
|
2325
2211
|
toggleLoading = false,
|
|
2326
2212
|
disabled = false
|
|
2327
|
-
}) => /* @__PURE__ */
|
|
2213
|
+
}) => /* @__PURE__ */ import_react31.default.createElement(
|
|
2328
2214
|
"div",
|
|
2329
2215
|
{
|
|
2330
2216
|
onClick: disabled ? void 0 : onClick,
|
|
2331
|
-
className: `flex items-center p-3 transition-colors ${!isLast ? "" : ""} ${disabled ? "opacity-40 cursor-not-allowed" : "cursor-pointer hover:bg-neutral-50"}`
|
|
2217
|
+
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"}`
|
|
2332
2218
|
},
|
|
2333
|
-
/* @__PURE__ */
|
|
2334
|
-
/* @__PURE__ */
|
|
2335
|
-
isToggle ? /* @__PURE__ */
|
|
2219
|
+
/* @__PURE__ */ import_react31.default.createElement("div", { className: "w-9 h-9 rounded-full border border-neutral-200 flex items-center justify-center shrink-0 mr-4" }, /* @__PURE__ */ import_react31.default.createElement(import_react32.HugeiconsIcon, { icon, size: 16, className: iconColor })),
|
|
2220
|
+
/* @__PURE__ */ import_react31.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react31.default.createElement("p", { className: `text-[13px] truncate ${titleColor}` }, title), /* @__PURE__ */ import_react31.default.createElement("p", { className: "text-[11px] text-neutral-500 truncate" }, subtitle)),
|
|
2221
|
+
isToggle ? /* @__PURE__ */ import_react31.default.createElement("div", { className: `relative w-11 h-6 rounded-full transition-colors duration-300 ml-2 shrink-0 ${toggleState ? "bg-black" : "bg-neutral-200"} ${disabled ? "opacity-50" : ""}` }, /* @__PURE__ */ import_react31.default.createElement("div", { className: `absolute top-1 left-1 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300 flex items-center justify-center ${toggleState ? "translate-x-5" : "translate-x-0"}` }, toggleLoading && /* @__PURE__ */ import_react31.default.createElement(import_react32.HugeiconsIcon, { icon: import_core_free_icons11.Loading03Icon, size: 10, className: "animate-spin text-black" }))) : /* @__PURE__ */ import_react31.default.createElement(import_react32.HugeiconsIcon, { icon: import_core_free_icons11.ArrowRight01Icon, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
2336
2222
|
);
|
|
2337
2223
|
|
|
2338
2224
|
// src/components/UniversalProfilePage.tsx
|
|
2339
|
-
var
|
|
2340
|
-
var
|
|
2341
|
-
var
|
|
2225
|
+
var import_react33 = __toESM(require("react"));
|
|
2226
|
+
var import_react34 = require("@hugeicons/react");
|
|
2227
|
+
var import_core_free_icons12 = require("@hugeicons/core-free-icons");
|
|
2342
2228
|
var UniversalProfilePage = ({
|
|
2343
2229
|
avatarSrc,
|
|
2344
2230
|
roleName,
|
|
@@ -2352,9 +2238,9 @@ var UniversalProfilePage = ({
|
|
|
2352
2238
|
onLogoutTap,
|
|
2353
2239
|
onDeleteTap
|
|
2354
2240
|
}) => {
|
|
2355
|
-
const [isAvatarLoaded, setIsAvatarLoaded] = (0,
|
|
2356
|
-
const [showLogoutDialog, setShowLogoutDialog] = (0,
|
|
2357
|
-
const [isLoggingOut, setIsLoggingOut] = (0,
|
|
2241
|
+
const [isAvatarLoaded, setIsAvatarLoaded] = (0, import_react33.useState)(false);
|
|
2242
|
+
const [showLogoutDialog, setShowLogoutDialog] = (0, import_react33.useState)(false);
|
|
2243
|
+
const [isLoggingOut, setIsLoggingOut] = (0, import_react33.useState)(false);
|
|
2358
2244
|
const handleConfirmLogout = async () => {
|
|
2359
2245
|
setIsLoggingOut(true);
|
|
2360
2246
|
try {
|
|
@@ -2374,7 +2260,7 @@ var UniversalProfilePage = ({
|
|
|
2374
2260
|
if (r.includes("platinum")) return "text-yellow-400";
|
|
2375
2261
|
return "text-neutral-400";
|
|
2376
2262
|
};
|
|
2377
|
-
return /* @__PURE__ */
|
|
2263
|
+
return /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "pt-8 pb-4 flex flex-col items-center" }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-22 h-22 rounded-full bg-white p-1 mb-4 flex items-center justify-center" }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "relative w-full h-full rounded-full overflow-hidden bg-neutral-100 flex items-center justify-center" }, avatarSrc ? /* @__PURE__ */ import_react33.default.createElement(import_react33.default.Fragment, null, !isAvatarLoaded && /* @__PURE__ */ import_react33.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-100" }, /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons12.Loading03Icon, size: 24, className: "animate-spin text-black" })), /* @__PURE__ */ import_react33.default.createElement(
|
|
2378
2264
|
"img",
|
|
2379
2265
|
{
|
|
2380
2266
|
src: avatarSrc,
|
|
@@ -2382,74 +2268,74 @@ var UniversalProfilePage = ({
|
|
|
2382
2268
|
onLoad: () => setIsAvatarLoaded(true),
|
|
2383
2269
|
className: `w-full h-full object-cover transition-opacity duration-300 ${isAvatarLoaded ? "opacity-100" : "opacity-0"}`
|
|
2384
2270
|
}
|
|
2385
|
-
)) : /* @__PURE__ */
|
|
2271
|
+
)) : /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons12.UserIcon, size: 40, className: "text-neutral-300" }))), /* @__PURE__ */ import_react33.default.createElement("div", { className: "bg-white rounded-full px-4 py-2 flex items-center justify-center gap-2 mb-3" }, /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-[12px] text-black" }, roleName), /* @__PURE__ */ import_react33.default.createElement("span", { className: getBadgeColorClass(roleName), "aria-hidden": true }, /* @__PURE__ */ import_react33.default.createElement("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react33.default.createElement("g", { id: "SVGRepo_bgCarrier", strokeWidth: "0" }), /* @__PURE__ */ import_react33.default.createElement("g", { id: "SVGRepo_tracerCarrier", strokeLinecap: "round", strokeLinejoin: "round" }), /* @__PURE__ */ import_react33.default.createElement("g", { id: "SVGRepo_iconCarrier" }, " ", /* @__PURE__ */ import_react33.default.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__ */ import_react33.default.createElement("span", { className: "text-[12px] text-neutral-500" }, memberSince)), /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-full flex flex-col gap-4 mt-2" }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react33.default.createElement(
|
|
2386
2272
|
MenuRow2,
|
|
2387
2273
|
{
|
|
2388
|
-
icon:
|
|
2274
|
+
icon: import_core_free_icons12.UserIcon,
|
|
2389
2275
|
title: "Account",
|
|
2390
2276
|
subtitle: "Your account details",
|
|
2391
2277
|
onClick: onAccountTap
|
|
2392
2278
|
}
|
|
2393
|
-
), /* @__PURE__ */
|
|
2279
|
+
), /* @__PURE__ */ import_react33.default.createElement(
|
|
2394
2280
|
MenuRow2,
|
|
2395
2281
|
{
|
|
2396
|
-
icon:
|
|
2282
|
+
icon: import_core_free_icons12.LockKeyIcon,
|
|
2397
2283
|
title: "Security",
|
|
2398
2284
|
subtitle: "2FA & authentication",
|
|
2399
2285
|
onClick: onSecurityTap
|
|
2400
2286
|
}
|
|
2401
|
-
), /* @__PURE__ */
|
|
2287
|
+
), /* @__PURE__ */ import_react33.default.createElement(
|
|
2402
2288
|
MenuRow2,
|
|
2403
2289
|
{
|
|
2404
|
-
icon:
|
|
2290
|
+
icon: import_core_free_icons12.ShieldUserIcon,
|
|
2405
2291
|
title: "Web3 Profile",
|
|
2406
2292
|
subtitle: "Manage web3 profile",
|
|
2407
2293
|
onClick: onDefiTap
|
|
2408
2294
|
}
|
|
2409
|
-
), /* @__PURE__ */
|
|
2295
|
+
), /* @__PURE__ */ import_react33.default.createElement(
|
|
2410
2296
|
MenuRow2,
|
|
2411
2297
|
{
|
|
2412
|
-
icon:
|
|
2298
|
+
icon: import_core_free_icons12.MessageQuestionIcon,
|
|
2413
2299
|
title: "Get Help",
|
|
2414
2300
|
subtitle: "24/7 Support",
|
|
2415
2301
|
onClick: onHelpTap,
|
|
2416
2302
|
isLast: true
|
|
2417
2303
|
}
|
|
2418
|
-
)), /* @__PURE__ */
|
|
2304
|
+
)), /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react33.default.createElement(
|
|
2419
2305
|
MenuRow2,
|
|
2420
2306
|
{
|
|
2421
|
-
icon:
|
|
2307
|
+
icon: import_core_free_icons12.UserIdVerificationIcon,
|
|
2422
2308
|
title: "Verifications",
|
|
2423
2309
|
subtitle: "Account Verifications",
|
|
2424
2310
|
onClick: onVerificationsTap
|
|
2425
2311
|
}
|
|
2426
|
-
), /* @__PURE__ */
|
|
2312
|
+
), /* @__PURE__ */ import_react33.default.createElement(
|
|
2427
2313
|
MenuRow2,
|
|
2428
2314
|
{
|
|
2429
|
-
icon:
|
|
2315
|
+
icon: import_core_free_icons12.CrownIcon,
|
|
2430
2316
|
title: "My Referrals",
|
|
2431
2317
|
subtitle: "Referral & Rewards",
|
|
2432
2318
|
onClick: onExportTap
|
|
2433
2319
|
}
|
|
2434
|
-
), /* @__PURE__ */
|
|
2320
|
+
), /* @__PURE__ */ import_react33.default.createElement(
|
|
2435
2321
|
MenuRow2,
|
|
2436
2322
|
{
|
|
2437
|
-
icon:
|
|
2323
|
+
icon: import_core_free_icons12.LogoutCircle02Icon,
|
|
2438
2324
|
title: "Log Out",
|
|
2439
2325
|
subtitle: "End your session",
|
|
2440
2326
|
onClick: () => setShowLogoutDialog(true),
|
|
2441
2327
|
isLast: true
|
|
2442
2328
|
}
|
|
2443
|
-
)), /* @__PURE__ */
|
|
2329
|
+
)), /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden mb-4" }, /* @__PURE__ */ import_react33.default.createElement(
|
|
2444
2330
|
MenuRow2,
|
|
2445
2331
|
{
|
|
2446
|
-
icon:
|
|
2332
|
+
icon: import_core_free_icons12.UserRemove01Icon,
|
|
2447
2333
|
title: "Delete Account",
|
|
2448
2334
|
subtitle: "Remove account",
|
|
2449
2335
|
onClick: onDeleteTap,
|
|
2450
2336
|
isLast: true
|
|
2451
2337
|
}
|
|
2452
|
-
))), /* @__PURE__ */
|
|
2338
|
+
))), /* @__PURE__ */ import_react33.default.createElement(
|
|
2453
2339
|
ConfirmationDialog,
|
|
2454
2340
|
{
|
|
2455
2341
|
isOpen: showLogoutDialog,
|
|
@@ -2463,22 +2349,22 @@ var UniversalProfilePage = ({
|
|
|
2463
2349
|
}
|
|
2464
2350
|
));
|
|
2465
2351
|
};
|
|
2466
|
-
var MenuRow2 = ({ icon, title, subtitle, onClick, iconColor = "text-black", titleColor = "text-black", isLast = false }) => /* @__PURE__ */
|
|
2352
|
+
var MenuRow2 = ({ icon, title, subtitle, onClick, iconColor = "text-black", titleColor = "text-black", isLast = false }) => /* @__PURE__ */ import_react33.default.createElement(
|
|
2467
2353
|
"div",
|
|
2468
2354
|
{
|
|
2469
2355
|
onClick,
|
|
2470
2356
|
className: `flex items-center p-4 cursor-pointer hover:bg-neutral-50 transition-colors ${!isLast ? "" : ""}`
|
|
2471
2357
|
},
|
|
2472
|
-
/* @__PURE__ */
|
|
2473
|
-
/* @__PURE__ */
|
|
2474
|
-
/* @__PURE__ */
|
|
2358
|
+
/* @__PURE__ */ import_react33.default.createElement("div", { className: "w-9 h-9 rounded-full border border-neutral-200 flex items-center justify-center shrink-0 mr-4" }, /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon, size: 16, className: iconColor })),
|
|
2359
|
+
/* @__PURE__ */ import_react33.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react33.default.createElement("p", { className: `text-[13px] truncate ${titleColor}` }, title), /* @__PURE__ */ import_react33.default.createElement("p", { className: "text-[11px] text-neutral-500 truncate" }, subtitle)),
|
|
2360
|
+
/* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons12.ArrowRight01Icon, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
2475
2361
|
);
|
|
2476
2362
|
|
|
2477
2363
|
// src/components/UniversalSidebar.tsx
|
|
2478
|
-
var
|
|
2364
|
+
var import_react35 = __toESM(require("react"));
|
|
2479
2365
|
var import_link5 = __toESM(require("next/link"));
|
|
2480
|
-
var
|
|
2481
|
-
var
|
|
2366
|
+
var import_react36 = require("@hugeicons/react");
|
|
2367
|
+
var import_core_free_icons13 = require("@hugeicons/core-free-icons");
|
|
2482
2368
|
var UniversalSidebar = ({
|
|
2483
2369
|
navItems,
|
|
2484
2370
|
currentPath,
|
|
@@ -2486,8 +2372,8 @@ var UniversalSidebar = ({
|
|
|
2486
2372
|
showLogoutAction = false,
|
|
2487
2373
|
onLogout
|
|
2488
2374
|
}) => {
|
|
2489
|
-
const [showLogoutDialog, setShowLogoutDialog] = (0,
|
|
2490
|
-
const [isLoggingOut, setIsLoggingOut] = (0,
|
|
2375
|
+
const [showLogoutDialog, setShowLogoutDialog] = (0, import_react35.useState)(false);
|
|
2376
|
+
const [isLoggingOut, setIsLoggingOut] = (0, import_react35.useState)(false);
|
|
2491
2377
|
const hasActiveMatch = navItems.some(
|
|
2492
2378
|
(item) => item.path === "/" || item.path === "/app" ? currentPath === "/" || currentPath === "/app" : currentPath === item.path || currentPath?.startsWith(`${item.path}/`)
|
|
2493
2379
|
);
|
|
@@ -2501,10 +2387,10 @@ var UniversalSidebar = ({
|
|
|
2501
2387
|
setShowLogoutDialog(false);
|
|
2502
2388
|
}
|
|
2503
2389
|
};
|
|
2504
|
-
return /* @__PURE__ */
|
|
2390
|
+
return /* @__PURE__ */ import_react35.default.createElement(import_react35.default.Fragment, null, /* @__PURE__ */ import_react35.default.createElement("aside", { className: "hidden md:flex fixed top-0 left-0 h-screen w-20 flex-col z-40 overflow-y-auto custom-scrollbar" }, /* @__PURE__ */ import_react35.default.createElement("div", { className: "h-24 shrink-0" }), /* @__PURE__ */ import_react35.default.createElement("nav", { className: "flex-1 flex flex-col gap-3 px-2" }, navItems.map((item, index) => {
|
|
2505
2391
|
const isExactOrSubMatch = item.path === "/" || item.path === "/app" ? currentPath === "/" || currentPath === "/app" : currentPath === item.path || currentPath?.startsWith(`${item.path}/`);
|
|
2506
2392
|
const isCurrentRoute = isExactOrSubMatch || !hasActiveMatch && index === 0;
|
|
2507
|
-
return /* @__PURE__ */
|
|
2393
|
+
return /* @__PURE__ */ import_react35.default.createElement(
|
|
2508
2394
|
import_link5.default,
|
|
2509
2395
|
{
|
|
2510
2396
|
key: item.name,
|
|
@@ -2513,8 +2399,8 @@ var UniversalSidebar = ({
|
|
|
2513
2399
|
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"}`,
|
|
2514
2400
|
title: item.name
|
|
2515
2401
|
},
|
|
2516
|
-
/* @__PURE__ */
|
|
2517
|
-
|
|
2402
|
+
/* @__PURE__ */ import_react35.default.createElement(
|
|
2403
|
+
import_react36.HugeiconsIcon,
|
|
2518
2404
|
{
|
|
2519
2405
|
icon: item.icon,
|
|
2520
2406
|
size: 20,
|
|
@@ -2522,14 +2408,14 @@ var UniversalSidebar = ({
|
|
|
2522
2408
|
}
|
|
2523
2409
|
)
|
|
2524
2410
|
);
|
|
2525
|
-
})), /* @__PURE__ */
|
|
2411
|
+
})), /* @__PURE__ */ import_react35.default.createElement("div", { className: "p-4 shrink-0 flex flex-col items-center gap-2 mb-4" }, showLogoutAction && /* @__PURE__ */ import_react35.default.createElement(
|
|
2526
2412
|
"button",
|
|
2527
2413
|
{
|
|
2528
2414
|
onClick: () => setShowLogoutDialog(true),
|
|
2529
2415
|
className: "w-12 h-12 rounded-full flex items-center justify-center text-neutral-500 hover:bg-white/50 transition-all outline-none"
|
|
2530
2416
|
},
|
|
2531
|
-
/* @__PURE__ */
|
|
2532
|
-
))), showLogoutAction && /* @__PURE__ */
|
|
2417
|
+
/* @__PURE__ */ import_react35.default.createElement(import_react36.HugeiconsIcon, { icon: import_core_free_icons13.LogoutCircle02Icon, size: 20 })
|
|
2418
|
+
))), showLogoutAction && /* @__PURE__ */ import_react35.default.createElement(
|
|
2533
2419
|
ConfirmationDialog,
|
|
2534
2420
|
{
|
|
2535
2421
|
isOpen: showLogoutDialog,
|
|
@@ -2545,16 +2431,16 @@ var UniversalSidebar = ({
|
|
|
2545
2431
|
};
|
|
2546
2432
|
|
|
2547
2433
|
// src/components/HeroSection.tsx
|
|
2548
|
-
var
|
|
2434
|
+
var import_react38 = __toESM(require("react"));
|
|
2549
2435
|
var import_link6 = __toESM(require("next/link"));
|
|
2550
2436
|
var import_image2 = __toESM(require("next/image"));
|
|
2551
2437
|
|
|
2552
2438
|
// src/components/WaitlistDialog.tsx
|
|
2553
|
-
var
|
|
2439
|
+
var import_react37 = __toESM(require("react"));
|
|
2554
2440
|
var import_react_hot_toast7 = require("react-hot-toast");
|
|
2555
2441
|
var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
2556
|
-
const [email, setEmail] = (0,
|
|
2557
|
-
const [isLoading, setIsLoading] = (0,
|
|
2442
|
+
const [email, setEmail] = (0, import_react37.useState)("");
|
|
2443
|
+
const [isLoading, setIsLoading] = (0, import_react37.useState)(false);
|
|
2558
2444
|
if (!isOpen) return null;
|
|
2559
2445
|
const handleSubmit = async (e) => {
|
|
2560
2446
|
e.preventDefault();
|
|
@@ -2585,19 +2471,19 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2585
2471
|
setIsLoading(false);
|
|
2586
2472
|
}
|
|
2587
2473
|
};
|
|
2588
|
-
return /* @__PURE__ */
|
|
2474
|
+
return /* @__PURE__ */ import_react37.default.createElement("div", { className: "fixed inset-0 z-100 flex items-center justify-center p-4 bg-black/40" }, /* @__PURE__ */ import_react37.default.createElement("div", { className: "absolute inset-0", onClick: !isLoading ? onClose : void 0 }), /* @__PURE__ */ import_react37.default.createElement(
|
|
2589
2475
|
"div",
|
|
2590
2476
|
{
|
|
2591
2477
|
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"
|
|
2592
2478
|
},
|
|
2593
|
-
/* @__PURE__ */
|
|
2479
|
+
/* @__PURE__ */ import_react37.default.createElement(
|
|
2594
2480
|
"button",
|
|
2595
2481
|
{
|
|
2596
2482
|
onClick: onClose,
|
|
2597
2483
|
disabled: isLoading,
|
|
2598
2484
|
className: "absolute top-4 right-4 p-2 text-neutral-700 hover:text-neutral-400 transition-colors disabled:opacity-50 outline-none"
|
|
2599
2485
|
},
|
|
2600
|
-
/* @__PURE__ */
|
|
2486
|
+
/* @__PURE__ */ import_react37.default.createElement(
|
|
2601
2487
|
"svg",
|
|
2602
2488
|
{
|
|
2603
2489
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -2610,11 +2496,11 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2610
2496
|
strokeLinecap: "round",
|
|
2611
2497
|
strokeLinejoin: "round"
|
|
2612
2498
|
},
|
|
2613
|
-
/* @__PURE__ */
|
|
2614
|
-
/* @__PURE__ */
|
|
2499
|
+
/* @__PURE__ */ import_react37.default.createElement("path", { d: "M18 6 6 18" }),
|
|
2500
|
+
/* @__PURE__ */ import_react37.default.createElement("path", { d: "m6 6 12 12" })
|
|
2615
2501
|
)
|
|
2616
2502
|
),
|
|
2617
|
-
/* @__PURE__ */
|
|
2503
|
+
/* @__PURE__ */ import_react37.default.createElement("div", { className: "p-6 sm:p-8" }, /* @__PURE__ */ import_react37.default.createElement("div", { className: "mb-8 mt-2" }, /* @__PURE__ */ import_react37.default.createElement("h2", { className: "text-2xl text-black tracking-tight mb-2" }, "Join the Waitlist"), /* @__PURE__ */ import_react37.default.createElement("p", { className: "text-[13px] text-neutral-500 leading-relaxed" }, "Be the first to experience the future of Web3 freedom. Secure your early access spot today.")), /* @__PURE__ */ import_react37.default.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col gap-8" }, /* @__PURE__ */ import_react37.default.createElement(
|
|
2618
2504
|
TextInput,
|
|
2619
2505
|
{
|
|
2620
2506
|
label: "Email ID",
|
|
@@ -2624,7 +2510,7 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2624
2510
|
placeholder: "name@example.com",
|
|
2625
2511
|
disabled: isLoading
|
|
2626
2512
|
}
|
|
2627
|
-
), /* @__PURE__ */
|
|
2513
|
+
), /* @__PURE__ */ import_react37.default.createElement(
|
|
2628
2514
|
ThreeDActionButton,
|
|
2629
2515
|
{
|
|
2630
2516
|
type: "submit",
|
|
@@ -2657,10 +2543,10 @@ var HeroSection = ({
|
|
|
2657
2543
|
bgImageSrc,
|
|
2658
2544
|
isWaitlist = false
|
|
2659
2545
|
}) => {
|
|
2660
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
2661
|
-
const [isWaitlistOpen, setIsWaitlistOpen] = (0,
|
|
2662
|
-
const titleRef = (0,
|
|
2663
|
-
(0,
|
|
2546
|
+
const [isAnimating, setIsAnimating] = (0, import_react38.useState)(false);
|
|
2547
|
+
const [isWaitlistOpen, setIsWaitlistOpen] = (0, import_react38.useState)(false);
|
|
2548
|
+
const titleRef = (0, import_react38.useRef)(null);
|
|
2549
|
+
(0, import_react38.useEffect)(() => {
|
|
2664
2550
|
const observer = new IntersectionObserver(
|
|
2665
2551
|
([entry]) => {
|
|
2666
2552
|
if (entry.isIntersecting) {
|
|
@@ -2682,7 +2568,7 @@ var HeroSection = ({
|
|
|
2682
2568
|
setIsWaitlistOpen(true);
|
|
2683
2569
|
}
|
|
2684
2570
|
};
|
|
2685
|
-
return /* @__PURE__ */
|
|
2571
|
+
return /* @__PURE__ */ import_react38.default.createElement("div", { className: "w-screen min-h-screen flex justify-center items-center p-4" }, /* @__PURE__ */ import_react38.default.createElement("section", { className: "relative h-[95vh] w-full overflow-hidden rounded-2xl " }, bgVideoSrc ? /* @__PURE__ */ import_react38.default.createElement(
|
|
2686
2572
|
"video",
|
|
2687
2573
|
{
|
|
2688
2574
|
src: bgVideoSrc,
|
|
@@ -2693,7 +2579,7 @@ var HeroSection = ({
|
|
|
2693
2579
|
playsInline: true,
|
|
2694
2580
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
2695
2581
|
}
|
|
2696
|
-
) : bgImageSrc ? /* @__PURE__ */
|
|
2582
|
+
) : bgImageSrc ? /* @__PURE__ */ import_react38.default.createElement(
|
|
2697
2583
|
import_image2.default,
|
|
2698
2584
|
{
|
|
2699
2585
|
src: bgImageSrc,
|
|
@@ -2702,7 +2588,7 @@ var HeroSection = ({
|
|
|
2702
2588
|
priority: true,
|
|
2703
2589
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
2704
2590
|
}
|
|
2705
|
-
) : null, /* @__PURE__ */
|
|
2591
|
+
) : null, /* @__PURE__ */ import_react38.default.createElement(
|
|
2706
2592
|
"div",
|
|
2707
2593
|
{
|
|
2708
2594
|
className: "pointer-events-none absolute inset-0 z-10 opacity-[0.7] mix-blend-overlay",
|
|
@@ -2710,15 +2596,15 @@ var HeroSection = ({
|
|
|
2710
2596
|
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")`
|
|
2711
2597
|
}
|
|
2712
2598
|
}
|
|
2713
|
-
), /* @__PURE__ */
|
|
2599
|
+
), /* @__PURE__ */ import_react38.default.createElement("div", { className: "pointer-events-none absolute inset-0 bg-linear-to-b from-black/30 via-transparent to-black/80 z-10" }), /* @__PURE__ */ import_react38.default.createElement("div", { className: "absolute bottom-0 left-0 right-0 px-4 pb-4 sm:px-6 md:px-10 z-20" }, /* @__PURE__ */ import_react38.default.createElement("div", { className: "grid grid-cols-12 items-end gap-4" }, /* @__PURE__ */ import_react38.default.createElement("div", { className: "col-span-12 lg:col-span-8" }, /* @__PURE__ */ import_react38.default.createElement(
|
|
2714
2600
|
"h1",
|
|
2715
2601
|
{
|
|
2716
2602
|
ref: titleRef,
|
|
2717
2603
|
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]"
|
|
2718
2604
|
},
|
|
2719
|
-
/* @__PURE__ */
|
|
2720
|
-
)), /* @__PURE__ */
|
|
2721
|
-
/* @__PURE__ */
|
|
2605
|
+
/* @__PURE__ */ import_react38.default.createElement("div", { className: "inline-flex flex-wrap" }, /* @__PURE__ */ import_react38.default.createElement("span", { className: `inline-block relative transition-all duration-1000 ${isAnimating ? "opacity-100 translate-y-0" : "opacity-0 translate-y-10"}` }, titlePrefix, titlePrefix && /* @__PURE__ */ import_react38.default.createElement("br", null), highlightText, /* @__PURE__ */ import_react38.default.createElement("span", { className: "absolute top-[0.65em] right-[-0.3em] text-[0.31em] text-[#ffffff]/70" }, "*")))
|
|
2606
|
+
)), /* @__PURE__ */ import_react38.default.createElement("div", { className: "col-span-12 flex flex-col gap-5 pb-6 lg:col-span-4 lg:pb-10" }, subtitle && /* @__PURE__ */ import_react38.default.createElement("p", { className: "text-xs text-[#ffffff]/70 sm:text-sm md:text-base leading-[1.2] max-w-md transition-opacity duration-1000 delay-300" }, subtitle), /* @__PURE__ */ import_react38.default.createElement("div", { className: "flex flex-col sm:flex-row items-start sm:items-center gap-4" }, ctaText && // Changed from <button> to <Link> so it actually navigates!
|
|
2607
|
+
/* @__PURE__ */ import_react38.default.createElement(
|
|
2722
2608
|
import_link6.default,
|
|
2723
2609
|
{
|
|
2724
2610
|
href: isWaitlist ? "#" : ctaHref || "#",
|
|
@@ -2726,15 +2612,15 @@ var HeroSection = ({
|
|
|
2726
2612
|
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"
|
|
2727
2613
|
},
|
|
2728
2614
|
ctaText,
|
|
2729
|
-
/* @__PURE__ */
|
|
2730
|
-
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
2615
|
+
/* @__PURE__ */ import_react38.default.createElement("span", { className: "flex h-8 w-8 items-center justify-center rounded-full bg-[#143731] transition-transform group-hover:scale-110" }, /* @__PURE__ */ import_react38.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "lucide lucide-arrow-right h-4 w-4 text-[#ffffff]" }, /* @__PURE__ */ import_react38.default.createElement("path", { d: "M5 12h14" }), /* @__PURE__ */ import_react38.default.createElement("path", { d: "m12 5 7 7-7 7" })))
|
|
2616
|
+
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react38.default.createElement(
|
|
2731
2617
|
import_link6.default,
|
|
2732
2618
|
{
|
|
2733
2619
|
href: secondaryCtaHref,
|
|
2734
2620
|
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"
|
|
2735
2621
|
},
|
|
2736
2622
|
secondaryCtaText
|
|
2737
|
-
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */
|
|
2623
|
+
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */ import_react38.default.createElement("div", { className: "flex flex-col gap-3 mt-4" }, appsText && /* @__PURE__ */ import_react38.default.createElement("span", { className: "text-[10px] tracking-widest text-[#ffffff]/50 " }, appsText), /* @__PURE__ */ import_react38.default.createElement("div", { className: "flex items-center gap-4" }, appLogos.map((logo, idx) => /* @__PURE__ */ import_react38.default.createElement("div", { key: idx, className: "relative h-6 w-6 sm:h-7 sm:w-7 opacity-70 hover:opacity-100 transition-opacity invert" }, /* @__PURE__ */ import_react38.default.createElement(
|
|
2738
2624
|
import_image2.default,
|
|
2739
2625
|
{
|
|
2740
2626
|
src: logo.src,
|
|
@@ -2743,7 +2629,7 @@ var HeroSection = ({
|
|
|
2743
2629
|
height: 28,
|
|
2744
2630
|
className: "object-contain"
|
|
2745
2631
|
}
|
|
2746
|
-
))))))))), /* @__PURE__ */
|
|
2632
|
+
))))))))), /* @__PURE__ */ import_react38.default.createElement(
|
|
2747
2633
|
WaitlistDialog,
|
|
2748
2634
|
{
|
|
2749
2635
|
isOpen: isWaitlistOpen,
|
|
@@ -2753,12 +2639,12 @@ var HeroSection = ({
|
|
|
2753
2639
|
};
|
|
2754
2640
|
|
|
2755
2641
|
// src/components/AppBento2.tsx
|
|
2756
|
-
var
|
|
2757
|
-
var
|
|
2642
|
+
var import_react39 = __toESM(require("react"));
|
|
2643
|
+
var import_react40 = require("@hugeicons/react");
|
|
2758
2644
|
var AppBento2 = ({ tagline, headline, features }) => {
|
|
2759
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
2760
|
-
const titleRef = (0,
|
|
2761
|
-
(0,
|
|
2645
|
+
const [isAnimating, setIsAnimating] = (0, import_react39.useState)(false);
|
|
2646
|
+
const titleRef = (0, import_react39.useRef)(null);
|
|
2647
|
+
(0, import_react39.useEffect)(() => {
|
|
2762
2648
|
const observer = new IntersectionObserver(
|
|
2763
2649
|
([entry]) => {
|
|
2764
2650
|
if (entry.isIntersecting) {
|
|
@@ -2776,7 +2662,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2776
2662
|
}
|
|
2777
2663
|
return () => observer.disconnect();
|
|
2778
2664
|
}, []);
|
|
2779
|
-
return /* @__PURE__ */
|
|
2665
|
+
return /* @__PURE__ */ import_react39.default.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react39.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), /* @__PURE__ */ import_react39.default.createElement(
|
|
2780
2666
|
"h2",
|
|
2781
2667
|
{
|
|
2782
2668
|
ref: titleRef,
|
|
@@ -2784,7 +2670,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2784
2670
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2785
2671
|
},
|
|
2786
2672
|
headline
|
|
2787
|
-
))), /* @__PURE__ */
|
|
2673
|
+
))), /* @__PURE__ */ import_react39.default.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-6 gap-6" }, features.map((f, i) => {
|
|
2788
2674
|
const isWhite = i === 0;
|
|
2789
2675
|
const isBlack = i === 1;
|
|
2790
2676
|
const isNeutral = i === 2;
|
|
@@ -2806,32 +2692,32 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2806
2692
|
const textColor = isBlack ? "text-white" : "text-black";
|
|
2807
2693
|
const subTextColor = isBlack ? "text-neutral-300" : "text-neutral-600";
|
|
2808
2694
|
const labelColor = isBlack ? "text-neutral-400" : "text-neutral-500";
|
|
2809
|
-
return /* @__PURE__ */
|
|
2695
|
+
return /* @__PURE__ */ import_react39.default.createElement(
|
|
2810
2696
|
"div",
|
|
2811
2697
|
{
|
|
2812
2698
|
key: i,
|
|
2813
2699
|
className: `relative rounded-2xl overflow-hidden p-8 flex flex-col min-h-75 transition-all duration-500 group text-left ${getBgStyle()} ${f.size}`,
|
|
2814
2700
|
style: { boxShadow: getShadowStyle() }
|
|
2815
2701
|
},
|
|
2816
|
-
/* @__PURE__ */
|
|
2702
|
+
/* @__PURE__ */ import_react39.default.createElement(
|
|
2817
2703
|
"div",
|
|
2818
2704
|
{
|
|
2819
2705
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
2820
2706
|
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")` }
|
|
2821
2707
|
}
|
|
2822
2708
|
),
|
|
2823
|
-
isBlack && /* @__PURE__ */
|
|
2824
|
-
/* @__PURE__ */
|
|
2825
|
-
/* @__PURE__ */
|
|
2709
|
+
isBlack && /* @__PURE__ */ import_react39.default.createElement("span", { className: "absolute inset-0 rounded-2xl bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none z-10" }),
|
|
2710
|
+
/* @__PURE__ */ import_react39.default.createElement("div", { className: "absolute inset-0 overflow-hidden pointer-events-none z-0" }, /* @__PURE__ */ import_react39.default.createElement("div", { className: `absolute -bottom-8 -right-8 transform group-hover:scale-110 transition-transform duration-700 ease-out ${isBlack ? "text-white/5" : "text-black/5"}` }, /* @__PURE__ */ import_react39.default.createElement(import_react40.HugeiconsIcon, { icon: f.icon, size: 180 }))),
|
|
2711
|
+
/* @__PURE__ */ import_react39.default.createElement("div", { className: "relative z-10 w-full h-full flex flex-col pointer-events-auto" }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "flex items-center justify-between mb-8" }, /* @__PURE__ */ import_react39.default.createElement("span", { className: `text-[9px] tracking-widest ${labelColor}` }, f.label), /* @__PURE__ */ import_react39.default.createElement("div", { className: `p-2 rounded-full transition-colors ${isBlack ? "bg-white/10" : "bg-white/50 backdrop-blur-sm"}` }, /* @__PURE__ */ import_react39.default.createElement(import_react40.HugeiconsIcon, { icon: f.icon, size: 20, className: textColor }))), /* @__PURE__ */ import_react39.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react39.default.createElement("h3", { className: `text-xl mb-2 tracking-tight ${textColor}` }, f.title), /* @__PURE__ */ import_react39.default.createElement("p", { className: `text-[13px] leading-relaxed max-w-sm ${subTextColor}` }, f.desc)))
|
|
2826
2712
|
);
|
|
2827
2713
|
})))));
|
|
2828
2714
|
};
|
|
2829
2715
|
|
|
2830
2716
|
// src/components/UniversalSecurityPage.tsx
|
|
2831
|
-
var
|
|
2717
|
+
var import_react41 = __toESM(require("react"));
|
|
2832
2718
|
var import_react_hot_toast8 = __toESM(require("react-hot-toast"));
|
|
2833
|
-
var
|
|
2834
|
-
var
|
|
2719
|
+
var import_react42 = require("@hugeicons/react");
|
|
2720
|
+
var import_core_free_icons14 = require("@hugeicons/core-free-icons");
|
|
2835
2721
|
var import_browser2 = require("@simplewebauthn/browser");
|
|
2836
2722
|
var UniversalSecurityPage = ({
|
|
2837
2723
|
has2FA,
|
|
@@ -2847,15 +2733,15 @@ var UniversalSecurityPage = ({
|
|
|
2847
2733
|
onVerifyAndEnablePasskey,
|
|
2848
2734
|
onDisablePasskey
|
|
2849
2735
|
}) => {
|
|
2850
|
-
const [show2FASetupModal, setShow2FASetupModal] = (0,
|
|
2851
|
-
const [show2FADisableModal, setShow2FADisableModal] = (0,
|
|
2852
|
-
const [showPasskeyModal, setShowPasskeyModal] = (0,
|
|
2853
|
-
const [twoFaSecret, setTwoFaSecret] = (0,
|
|
2854
|
-
const [twoFaQr, setTwoFaQr] = (0,
|
|
2855
|
-
const [isFetchingSetup, setIsFetchingSetup] = (0,
|
|
2856
|
-
const [otp, setOtp] = (0,
|
|
2857
|
-
const [isSubmitting, setIsSubmitting] = (0,
|
|
2858
|
-
const inputRefs = (0,
|
|
2736
|
+
const [show2FASetupModal, setShow2FASetupModal] = (0, import_react41.useState)(false);
|
|
2737
|
+
const [show2FADisableModal, setShow2FADisableModal] = (0, import_react41.useState)(false);
|
|
2738
|
+
const [showPasskeyModal, setShowPasskeyModal] = (0, import_react41.useState)(false);
|
|
2739
|
+
const [twoFaSecret, setTwoFaSecret] = (0, import_react41.useState)("");
|
|
2740
|
+
const [twoFaQr, setTwoFaQr] = (0, import_react41.useState)("");
|
|
2741
|
+
const [isFetchingSetup, setIsFetchingSetup] = (0, import_react41.useState)(false);
|
|
2742
|
+
const [otp, setOtp] = (0, import_react41.useState)(Array(6).fill(""));
|
|
2743
|
+
const [isSubmitting, setIsSubmitting] = (0, import_react41.useState)(false);
|
|
2744
|
+
const inputRefs = (0, import_react41.useRef)([]);
|
|
2859
2745
|
const resetOtp = () => {
|
|
2860
2746
|
setOtp(Array(6).fill(""));
|
|
2861
2747
|
setIsSubmitting(false);
|
|
@@ -2997,18 +2883,18 @@ var UniversalSecurityPage = ({
|
|
|
2997
2883
|
setIsSubmitting(false);
|
|
2998
2884
|
}
|
|
2999
2885
|
};
|
|
3000
|
-
return /* @__PURE__ */
|
|
2886
|
+
return /* @__PURE__ */ import_react41.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 pb-12" }, /* @__PURE__ */ import_react41.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react41.default.createElement("div", { className: "mb-6 flex items-center px-1" }, /* @__PURE__ */ import_react41.default.createElement(
|
|
3001
2887
|
"button",
|
|
3002
2888
|
{
|
|
3003
2889
|
onClick: onBack,
|
|
3004
2890
|
className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none"
|
|
3005
2891
|
},
|
|
3006
|
-
/* @__PURE__ */
|
|
2892
|
+
/* @__PURE__ */ import_react41.default.createElement(import_react42.HugeiconsIcon, { icon: import_core_free_icons14.ArrowLeft01Icon, size: 16 }),
|
|
3007
2893
|
" Back"
|
|
3008
|
-
)), /* @__PURE__ */
|
|
2894
|
+
)), /* @__PURE__ */ import_react41.default.createElement("div", { className: "w-full flex flex-col gap-4" }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react41.default.createElement(
|
|
3009
2895
|
MenuRow3,
|
|
3010
2896
|
{
|
|
3011
|
-
icon:
|
|
2897
|
+
icon: import_core_free_icons14.CircleLockCheck02Icon,
|
|
3012
2898
|
title: "Authenticator App",
|
|
3013
2899
|
subtitle: "Secure your account with 2FA",
|
|
3014
2900
|
onClick: handleToggle2FA,
|
|
@@ -3016,10 +2902,10 @@ var UniversalSecurityPage = ({
|
|
|
3016
2902
|
toggleState: has2FA,
|
|
3017
2903
|
toggleLoading: is2FALoading || isFetchingSetup
|
|
3018
2904
|
}
|
|
3019
|
-
), /* @__PURE__ */
|
|
2905
|
+
), /* @__PURE__ */ import_react41.default.createElement(
|
|
3020
2906
|
MenuRow3,
|
|
3021
2907
|
{
|
|
3022
|
-
icon:
|
|
2908
|
+
icon: import_core_free_icons14.Key01Icon,
|
|
3023
2909
|
title: "Passkeys",
|
|
3024
2910
|
subtitle: "Sign in quickly with biometrics",
|
|
3025
2911
|
onClick: handleTogglePasskey,
|
|
@@ -3028,18 +2914,18 @@ var UniversalSecurityPage = ({
|
|
|
3028
2914
|
toggleLoading: isPasskeyLoading,
|
|
3029
2915
|
isLast: true
|
|
3030
2916
|
}
|
|
3031
|
-
))), show2FASetupModal && /* @__PURE__ */
|
|
2917
|
+
))), show2FASetupModal && /* @__PURE__ */ import_react41.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShow2FASetupModal(false) }), /* @__PURE__ */ import_react41.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[90vh]" }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ import_react41.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable 2FA"), /* @__PURE__ */ import_react41.default.createElement("button", { onClick: () => !isSubmitting && setShow2FASetupModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react41.default.createElement(import_react42.HugeiconsIcon, { icon: import_core_free_icons14.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react41.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-2" }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "w-full flex justify-center mb-6 mix-blend-multiply" }, twoFaQr ? /* @__PURE__ */ import_react41.default.createElement("img", { src: twoFaQr, alt: "2FA QR Code", className: "w-40 h-40 object-contain rounded-xl border border-neutral-200 p-2" }) : /* @__PURE__ */ import_react41.default.createElement("div", { className: "w-40 h-40 bg-neutral-100 rounded-xl flex items-center justify-center animate-pulse" })), /* @__PURE__ */ import_react41.default.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-8" }, /* @__PURE__ */ import_react41.default.createElement("div", null, /* @__PURE__ */ import_react41.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2 uppercase" }, "Setup Key"), /* @__PURE__ */ import_react41.default.createElement("div", { className: "flex items-center gap-2 min-w-0 bg-neutral-50 px-3 py-2.5 rounded-xl " }, /* @__PURE__ */ import_react41.default.createElement("span", { className: "text-[13px] font-mono tracking-widest text-black truncate min-w-0 block flex-1" }, twoFaSecret), /* @__PURE__ */ import_react41.default.createElement(
|
|
3032
2918
|
"button",
|
|
3033
2919
|
{
|
|
3034
2920
|
type: "button",
|
|
3035
2921
|
onClick: () => handleCopySecret(twoFaSecret),
|
|
3036
2922
|
className: "text-neutral-400 hover:text-black transition-colors outline-none shrink-0 ml-2"
|
|
3037
2923
|
},
|
|
3038
|
-
/* @__PURE__ */
|
|
3039
|
-
)))), /* @__PURE__ */
|
|
2924
|
+
/* @__PURE__ */ import_react41.default.createElement(import_react42.HugeiconsIcon, { icon: import_core_free_icons14.Copy01Icon, size: 16 })
|
|
2925
|
+
)))), /* @__PURE__ */ import_react41.default.createElement("div", { className: "text-center mb-8 mt-2" }, /* @__PURE__ */ import_react41.default.createElement("h2", { className: "text-xl text-black mb-2 tracking-tight" }, "Security Check"), /* @__PURE__ */ import_react41.default.createElement("p", { className: "text-[13px] text-neutral-500" }, "Enter the 6-digit code from your app")), /* @__PURE__ */ import_react41.default.createElement("form", { className: "space-y-4", autoComplete: "off", onSubmit: (e) => {
|
|
3040
2926
|
e.preventDefault();
|
|
3041
2927
|
submitEnable2FA(otp.join(""));
|
|
3042
|
-
} }, /* @__PURE__ */
|
|
2928
|
+
} }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "flex justify-between gap-2 pb-6", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ import_react41.default.createElement(
|
|
3043
2929
|
"input",
|
|
3044
2930
|
{
|
|
3045
2931
|
key: index,
|
|
@@ -3058,7 +2944,7 @@ var UniversalSecurityPage = ({
|
|
|
3058
2944
|
},
|
|
3059
2945
|
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"
|
|
3060
2946
|
}
|
|
3061
|
-
))), /* @__PURE__ */
|
|
2947
|
+
))), /* @__PURE__ */ import_react41.default.createElement(
|
|
3062
2948
|
ThreeDActionButton,
|
|
3063
2949
|
{
|
|
3064
2950
|
type: "submit",
|
|
@@ -3067,19 +2953,19 @@ var UniversalSecurityPage = ({
|
|
|
3067
2953
|
className: "w-full py-3.5"
|
|
3068
2954
|
},
|
|
3069
2955
|
"Verify & Enable"
|
|
3070
|
-
), /* @__PURE__ */
|
|
2956
|
+
), /* @__PURE__ */ import_react41.default.createElement(
|
|
3071
2957
|
"button",
|
|
3072
2958
|
{
|
|
3073
2959
|
type: "button",
|
|
3074
2960
|
onClick: () => handleCopySecret(twoFaSecret),
|
|
3075
2961
|
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"
|
|
3076
2962
|
},
|
|
3077
|
-
/* @__PURE__ */
|
|
2963
|
+
/* @__PURE__ */ import_react41.default.createElement(import_react42.HugeiconsIcon, { icon: import_core_free_icons14.Copy01Icon, size: 16, className: "mr-2" }),
|
|
3078
2964
|
"Copy Secret Key"
|
|
3079
|
-
))))), show2FADisableModal && /* @__PURE__ */
|
|
2965
|
+
))))), show2FADisableModal && /* @__PURE__ */ import_react41.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShow2FADisableModal(false) }), /* @__PURE__ */ import_react41.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ import_react41.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Disable 2FA"), /* @__PURE__ */ import_react41.default.createElement("button", { onClick: () => !isSubmitting && setShow2FADisableModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react41.default.createElement(import_react42.HugeiconsIcon, { icon: import_core_free_icons14.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react41.default.createElement("div", { className: "p-6" }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "text-center mb-8 mt-2" }, /* @__PURE__ */ import_react41.default.createElement("h2", { className: "text-xl text-black mb-2 tracking-tight" }, "Security Check"), /* @__PURE__ */ import_react41.default.createElement("p", { className: "text-[13px] text-neutral-500" }, "Enter the code from your authenticator app to disable 2FA.")), /* @__PURE__ */ import_react41.default.createElement("form", { className: "space-y-8", autoComplete: "off", onSubmit: (e) => {
|
|
3080
2966
|
e.preventDefault();
|
|
3081
2967
|
submitDisable2FA(otp.join(""));
|
|
3082
|
-
} }, /* @__PURE__ */
|
|
2968
|
+
} }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "flex justify-between gap-2", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ import_react41.default.createElement(
|
|
3083
2969
|
"input",
|
|
3084
2970
|
{
|
|
3085
2971
|
key: index,
|
|
@@ -3098,7 +2984,7 @@ var UniversalSecurityPage = ({
|
|
|
3098
2984
|
},
|
|
3099
2985
|
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"
|
|
3100
2986
|
}
|
|
3101
|
-
))), /* @__PURE__ */
|
|
2987
|
+
))), /* @__PURE__ */ import_react41.default.createElement(
|
|
3102
2988
|
ThreeDActionButton,
|
|
3103
2989
|
{
|
|
3104
2990
|
type: "submit",
|
|
@@ -3107,7 +2993,7 @@ var UniversalSecurityPage = ({
|
|
|
3107
2993
|
className: "w-full py-3.5"
|
|
3108
2994
|
},
|
|
3109
2995
|
"Verify & Disable"
|
|
3110
|
-
))))), showPasskeyModal && /* @__PURE__ */
|
|
2996
|
+
))))), showPasskeyModal && /* @__PURE__ */ import_react41.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShowPasskeyModal(false) }), /* @__PURE__ */ import_react41.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ import_react41.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable Passkey"), /* @__PURE__ */ import_react41.default.createElement("button", { onClick: () => !isSubmitting && setShowPasskeyModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react41.default.createElement(import_react42.HugeiconsIcon, { icon: import_core_free_icons14.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react41.default.createElement("div", { className: "p-6 text-center" }, /* @__PURE__ */ import_react41.default.createElement("h2", { className: "text-lg text-black mb-2 tracking-tight" }, "Simplify your Sign In"), /* @__PURE__ */ import_react41.default.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__ */ import_react41.default.createElement(
|
|
3111
2997
|
ThreeDActionButton,
|
|
3112
2998
|
{
|
|
3113
2999
|
onClick: submitEnablePasskey,
|
|
@@ -3129,26 +3015,26 @@ var MenuRow3 = ({
|
|
|
3129
3015
|
toggleState = false,
|
|
3130
3016
|
toggleLoading = false,
|
|
3131
3017
|
disabled = false
|
|
3132
|
-
}) => /* @__PURE__ */
|
|
3018
|
+
}) => /* @__PURE__ */ import_react41.default.createElement(
|
|
3133
3019
|
"div",
|
|
3134
3020
|
{
|
|
3135
3021
|
onClick: disabled ? void 0 : onClick,
|
|
3136
3022
|
className: `flex items-center p-4 transition-colors ${!isLast ? "" : ""} ${disabled ? "opacity-40 cursor-not-allowed" : "cursor-pointer hover:bg-neutral-50"}`
|
|
3137
3023
|
},
|
|
3138
|
-
/* @__PURE__ */
|
|
3139
|
-
/* @__PURE__ */
|
|
3140
|
-
isToggle ? /* @__PURE__ */
|
|
3024
|
+
/* @__PURE__ */ import_react41.default.createElement("div", { className: "w-9 h-9 rounded-full border border-neutral-200 flex items-center justify-center shrink-0 mr-4" }, /* @__PURE__ */ import_react41.default.createElement(import_react42.HugeiconsIcon, { icon, size: 16, className: iconColor })),
|
|
3025
|
+
/* @__PURE__ */ import_react41.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react41.default.createElement("p", { className: `text-[14px] truncate ${titleColor}` }, title), /* @__PURE__ */ import_react41.default.createElement("p", { className: "text-[12px] text-neutral-500 truncate" }, subtitle)),
|
|
3026
|
+
isToggle ? /* @__PURE__ */ import_react41.default.createElement("div", { className: `relative w-11 h-6 rounded-full transition-colors duration-300 ml-2 shrink-0 ${toggleState ? "bg-black" : "bg-neutral-200"} ${disabled ? "opacity-50" : ""}` }, /* @__PURE__ */ import_react41.default.createElement("div", { className: `absolute top-1 left-1 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300 flex items-center justify-center ${toggleState ? "translate-x-5" : "translate-x-0"}` }, toggleLoading && /* @__PURE__ */ import_react41.default.createElement(import_react42.HugeiconsIcon, { icon: import_core_free_icons14.Loading03Icon, size: 10, className: "animate-spin text-black" }))) : /* @__PURE__ */ import_react41.default.createElement(import_react42.HugeiconsIcon, { icon: import_core_free_icons14.ArrowRight01Icon, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
3141
3027
|
);
|
|
3142
3028
|
|
|
3143
3029
|
// src/components/FeatureScroll.tsx
|
|
3144
|
-
var
|
|
3030
|
+
var import_react43 = __toESM(require("react"));
|
|
3145
3031
|
var import_image3 = __toESM(require("next/image"));
|
|
3146
|
-
var
|
|
3147
|
-
var
|
|
3032
|
+
var import_react44 = require("@hugeicons/react");
|
|
3033
|
+
var import_core_free_icons15 = require("@hugeicons/core-free-icons");
|
|
3148
3034
|
var FeatureCard = ({ feature, bgImage }) => {
|
|
3149
|
-
const [isBgLoading, setIsBgLoading] = (0,
|
|
3150
|
-
const [isFgLoading, setIsFgLoading] = (0,
|
|
3151
|
-
return /* @__PURE__ */
|
|
3035
|
+
const [isBgLoading, setIsBgLoading] = (0, import_react43.useState)(true);
|
|
3036
|
+
const [isFgLoading, setIsFgLoading] = (0, import_react43.useState)(!!feature.image);
|
|
3037
|
+
return /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex flex-col shrink-0 w-[90vw] sm:w-150 snap-center md:snap-start group cursor-grab active:cursor-grabbing" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "relative w-full aspect-16/10 bg-neutral-100 rounded-2xl overflow-hidden mb-6 flex items-center justify-center" }, /* @__PURE__ */ import_react43.default.createElement(
|
|
3152
3038
|
import_image3.default,
|
|
3153
3039
|
{
|
|
3154
3040
|
src: bgImage,
|
|
@@ -3161,7 +3047,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
3161
3047
|
${isBgLoading ? "blur-xl scale-110" : "blur-0 scale-100"}
|
|
3162
3048
|
`
|
|
3163
3049
|
}
|
|
3164
|
-
), /* @__PURE__ */
|
|
3050
|
+
), /* @__PURE__ */ import_react43.default.createElement(
|
|
3165
3051
|
"div",
|
|
3166
3052
|
{
|
|
3167
3053
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.25] mix-blend-overlay",
|
|
@@ -3169,7 +3055,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
3169
3055
|
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")`
|
|
3170
3056
|
}
|
|
3171
3057
|
}
|
|
3172
|
-
), isFgLoading && feature.image && /* @__PURE__ */
|
|
3058
|
+
), isFgLoading && feature.image && /* @__PURE__ */ import_react43.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-50/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons15.Loading03Icon, size: 32, className: "animate-spin text-neutral-400" })), feature.image && /* @__PURE__ */ import_react43.default.createElement("div", { className: "absolute -bottom-6 -right-6 w-[85%] h-[85%] z-10 transition-transform duration-700 ease-out group-hover:-translate-x-2 group-hover:-translate-y-2" }, /* @__PURE__ */ import_react43.default.createElement(
|
|
3173
3059
|
import_image3.default,
|
|
3174
3060
|
{
|
|
3175
3061
|
src: feature.image,
|
|
@@ -3182,12 +3068,12 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
3182
3068
|
${isFgLoading ? "opacity-0 blur-xl" : "opacity-100 blur-0"}
|
|
3183
3069
|
`
|
|
3184
3070
|
}
|
|
3185
|
-
))), /* @__PURE__ */
|
|
3071
|
+
))), /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ import_react43.default.createElement("h3", { className: " text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ import_react43.default.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 max-w-[90%]" }, feature.desc)));
|
|
3186
3072
|
};
|
|
3187
3073
|
var FeatureScroll = ({ tagline, headline, features }) => {
|
|
3188
|
-
const scrollRef = (0,
|
|
3189
|
-
const [canScrollLeft, setCanScrollLeft] = (0,
|
|
3190
|
-
const [canScrollRight, setCanScrollRight] = (0,
|
|
3074
|
+
const scrollRef = (0, import_react43.useRef)(null);
|
|
3075
|
+
const [canScrollLeft, setCanScrollLeft] = (0, import_react43.useState)(false);
|
|
3076
|
+
const [canScrollRight, setCanScrollRight] = (0, import_react43.useState)(true);
|
|
3191
3077
|
const checkScroll = () => {
|
|
3192
3078
|
if (scrollRef.current) {
|
|
3193
3079
|
const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;
|
|
@@ -3195,7 +3081,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
3195
3081
|
setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 2);
|
|
3196
3082
|
}
|
|
3197
3083
|
};
|
|
3198
|
-
(0,
|
|
3084
|
+
(0, import_react43.useEffect)(() => {
|
|
3199
3085
|
checkScroll();
|
|
3200
3086
|
window.addEventListener("resize", checkScroll);
|
|
3201
3087
|
return () => window.removeEventListener("resize", checkScroll);
|
|
@@ -3211,72 +3097,72 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
3211
3097
|
"https://retinalabs.company/assets/images/bg_6.avif",
|
|
3212
3098
|
"https://retinalabs.company/assets/images/bg_1.avif"
|
|
3213
3099
|
];
|
|
3214
|
-
return /* @__PURE__ */
|
|
3100
|
+
return /* @__PURE__ */ import_react43.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "relative z-10 text-left" }, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ import_react43.default.createElement("h2", { className: " text-3xl tracking-tight text-black leading-[1.05]" }, headline)), /* @__PURE__ */ import_react43.default.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ import_react43.default.createElement(
|
|
3215
3101
|
"button",
|
|
3216
3102
|
{
|
|
3217
3103
|
onClick: () => scroll("left"),
|
|
3218
3104
|
disabled: !canScrollLeft,
|
|
3219
3105
|
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"
|
|
3220
3106
|
},
|
|
3221
|
-
/* @__PURE__ */
|
|
3222
|
-
), /* @__PURE__ */
|
|
3107
|
+
/* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons15.ArrowLeft01Icon, size: 20 })
|
|
3108
|
+
), /* @__PURE__ */ import_react43.default.createElement(
|
|
3223
3109
|
"button",
|
|
3224
3110
|
{
|
|
3225
3111
|
onClick: () => scroll("right"),
|
|
3226
3112
|
disabled: !canScrollRight,
|
|
3227
3113
|
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"
|
|
3228
3114
|
},
|
|
3229
|
-
/* @__PURE__ */
|
|
3230
|
-
))), /* @__PURE__ */
|
|
3115
|
+
/* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons15.ArrowRight01Icon, size: 20 })
|
|
3116
|
+
))), /* @__PURE__ */ import_react43.default.createElement(
|
|
3231
3117
|
"div",
|
|
3232
3118
|
{
|
|
3233
3119
|
ref: scrollRef,
|
|
3234
3120
|
onScroll: checkScroll,
|
|
3235
3121
|
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"
|
|
3236
3122
|
},
|
|
3237
|
-
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */
|
|
3238
|
-
), /* @__PURE__ */
|
|
3123
|
+
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */ import_react43.default.createElement(FeatureCard, { key: idx, feature, bgImage: bgImages[idx] }))
|
|
3124
|
+
), /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ import_react43.default.createElement(
|
|
3239
3125
|
"button",
|
|
3240
3126
|
{
|
|
3241
3127
|
onClick: () => scroll("left"),
|
|
3242
3128
|
disabled: !canScrollLeft,
|
|
3243
3129
|
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"
|
|
3244
3130
|
},
|
|
3245
|
-
/* @__PURE__ */
|
|
3246
|
-
), /* @__PURE__ */
|
|
3131
|
+
/* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons15.ArrowLeft01Icon, size: 20 })
|
|
3132
|
+
), /* @__PURE__ */ import_react43.default.createElement(
|
|
3247
3133
|
"button",
|
|
3248
3134
|
{
|
|
3249
3135
|
onClick: () => scroll("right"),
|
|
3250
3136
|
disabled: !canScrollRight,
|
|
3251
3137
|
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"
|
|
3252
3138
|
},
|
|
3253
|
-
/* @__PURE__ */
|
|
3139
|
+
/* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons15.ArrowRight01Icon, size: 20 })
|
|
3254
3140
|
))));
|
|
3255
3141
|
};
|
|
3256
3142
|
|
|
3257
3143
|
// src/components/PlatformFeatures.tsx
|
|
3258
|
-
var
|
|
3259
|
-
var
|
|
3144
|
+
var import_react45 = __toESM(require("react"));
|
|
3145
|
+
var import_react46 = require("@hugeicons/react");
|
|
3260
3146
|
var PlatformFeatures = ({
|
|
3261
3147
|
tagline,
|
|
3262
3148
|
headline,
|
|
3263
3149
|
description,
|
|
3264
3150
|
features
|
|
3265
3151
|
}) => {
|
|
3266
|
-
return /* @__PURE__ */
|
|
3152
|
+
return /* @__PURE__ */ import_react45.default.createElement("section", { className: "w-full flex justify-center mb-15 relative z-10" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex flex-col items-start mb-16 relative z-10" }, /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ import_react45.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.05] mb-6" }, headline), /* @__PURE__ */ import_react45.default.createElement("p", { className: "text-[15px] leading-[1.8] text-neutral-600 max-w-2xl" }, description)), /* @__PURE__ */ import_react45.default.createElement("div", { className: "w-full h-px bg-neutral-100 mb-16", "aria-hidden": "true" }), /* @__PURE__ */ import_react45.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-x-8 gap-y-12" }, features.map((feature, idx) => /* @__PURE__ */ import_react45.default.createElement(
|
|
3267
3153
|
"div",
|
|
3268
3154
|
{
|
|
3269
3155
|
key: idx,
|
|
3270
3156
|
className: "flex flex-col group animate-in fade-in slide-in-from-bottom-4 duration-700 fill-mode-both",
|
|
3271
3157
|
style: { animationDelay: feature.delay || "0ms" }
|
|
3272
3158
|
},
|
|
3273
|
-
/* @__PURE__ */
|
|
3274
|
-
/* @__PURE__ */
|
|
3159
|
+
/* @__PURE__ */ import_react45.default.createElement("div", { className: "flex flex-row items-center gap-4 mb-4" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "w-14 h-14 shrink-0 rounded-xl border border-neutral-200 flex items-center justify-center text-neutral-600 transition-colors duration-300" }, /* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: feature.icon, size: 24 })), /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex flex-col justify-center" }, /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400 mb-0.5" }, feature.label || "CAPABILITY"), /* @__PURE__ */ import_react45.default.createElement("h3", { className: "text-xl tracking-tight text-black" }, feature.title))),
|
|
3160
|
+
/* @__PURE__ */ import_react45.default.createElement("div", null, /* @__PURE__ */ import_react45.default.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 pr-4" }, feature.desc))
|
|
3275
3161
|
)))));
|
|
3276
3162
|
};
|
|
3277
3163
|
|
|
3278
3164
|
// src/components/ManagedDocument.tsx
|
|
3279
|
-
var
|
|
3165
|
+
var import_react47 = __toESM(require("react"));
|
|
3280
3166
|
var ManagedDocument = ({
|
|
3281
3167
|
tagline,
|
|
3282
3168
|
title,
|
|
@@ -3284,9 +3170,9 @@ var ManagedDocument = ({
|
|
|
3284
3170
|
contactText,
|
|
3285
3171
|
contactEmail
|
|
3286
3172
|
}) => {
|
|
3287
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
3288
|
-
const titleRef = (0,
|
|
3289
|
-
(0,
|
|
3173
|
+
const [isAnimating, setIsAnimating] = (0, import_react47.useState)(false);
|
|
3174
|
+
const titleRef = (0, import_react47.useRef)(null);
|
|
3175
|
+
(0, import_react47.useEffect)(() => {
|
|
3290
3176
|
const observer = new IntersectionObserver(
|
|
3291
3177
|
([entry]) => {
|
|
3292
3178
|
if (entry.isIntersecting) {
|
|
@@ -3306,7 +3192,7 @@ var ManagedDocument = ({
|
|
|
3306
3192
|
}, []);
|
|
3307
3193
|
return (
|
|
3308
3194
|
// Outer layout wrapper (takes up available space, adds padding)
|
|
3309
|
-
/* @__PURE__ */
|
|
3195
|
+
/* @__PURE__ */ import_react47.default.createElement("div", { className: "grow pt-4 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react47.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react47.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react47.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react47.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react47.default.createElement(
|
|
3310
3196
|
"h1",
|
|
3311
3197
|
{
|
|
3312
3198
|
ref: titleRef,
|
|
@@ -3314,7 +3200,7 @@ var ManagedDocument = ({
|
|
|
3314
3200
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
3315
3201
|
},
|
|
3316
3202
|
title
|
|
3317
|
-
)), sections.map((section, index) => /* @__PURE__ */
|
|
3203
|
+
)), sections.map((section, index) => /* @__PURE__ */ import_react47.default.createElement("div", { key: index, className: "relative px-5 md:px-12 py-8 md:py-10" }, section.heading && /* @__PURE__ */ import_react47.default.createElement("p", { className: " text-[11px] tracking-[0.2em] text-black mb-4 text-left " }, section.heading), section.paragraphs && section.paragraphs.length > 0 && /* @__PURE__ */ import_react47.default.createElement("div", { className: "text-[14px] leading-[1.8] text-neutral-700 space-y-4 text-left " }, section.paragraphs.map((text, pIndex) => /* @__PURE__ */ import_react47.default.createElement("p", { key: pIndex }, text))), section.quote && /* @__PURE__ */ import_react47.default.createElement("div", { className: `border-neutral-200 border rounded-xl p-6 ${section.paragraphs && section.paragraphs.length > 0 ? "mt-6" : ""}` }, /* @__PURE__ */ import_react47.default.createElement("p", { className: "text-neutral-900 text-[14px] md:text-[14px] leading-relaxed" }, '"', section.quote, '"')))), (contactText || contactEmail) && /* @__PURE__ */ import_react47.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ import_react47.default.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ import_react47.default.createElement(
|
|
3318
3204
|
"a",
|
|
3319
3205
|
{
|
|
3320
3206
|
href: `mailto:${contactEmail}`,
|
|
@@ -3326,18 +3212,18 @@ var ManagedDocument = ({
|
|
|
3326
3212
|
};
|
|
3327
3213
|
|
|
3328
3214
|
// src/components/ManagedContactBlock.tsx
|
|
3329
|
-
var
|
|
3330
|
-
var
|
|
3215
|
+
var import_react48 = __toESM(require("react"));
|
|
3216
|
+
var import_react49 = require("@hugeicons/react");
|
|
3331
3217
|
var SecureEmail = ({ user, domain, className }) => {
|
|
3332
|
-
const [isMounted, setIsMounted] = (0,
|
|
3333
|
-
(0,
|
|
3218
|
+
const [isMounted, setIsMounted] = (0, import_react48.useState)(false);
|
|
3219
|
+
(0, import_react48.useEffect)(() => {
|
|
3334
3220
|
setIsMounted(true);
|
|
3335
3221
|
}, []);
|
|
3336
3222
|
if (!isMounted) {
|
|
3337
|
-
return /* @__PURE__ */
|
|
3223
|
+
return /* @__PURE__ */ import_react48.default.createElement("span", { className, style: { opacity: 0 } }, "Loading");
|
|
3338
3224
|
}
|
|
3339
3225
|
const email = `${user}@${domain}`;
|
|
3340
|
-
return /* @__PURE__ */
|
|
3226
|
+
return /* @__PURE__ */ import_react48.default.createElement("a", { href: `mailto:${email}`, className }, email);
|
|
3341
3227
|
};
|
|
3342
3228
|
var ManagedContactBlock = ({
|
|
3343
3229
|
tagline,
|
|
@@ -3346,7 +3232,7 @@ var ManagedContactBlock = ({
|
|
|
3346
3232
|
emails,
|
|
3347
3233
|
socials
|
|
3348
3234
|
}) => {
|
|
3349
|
-
return /* @__PURE__ */
|
|
3235
|
+
return /* @__PURE__ */ import_react48.default.createElement("div", { className: "grow pt-4 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react48.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react48.default.createElement(
|
|
3350
3236
|
"div",
|
|
3351
3237
|
{
|
|
3352
3238
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3355,21 +3241,21 @@ var ManagedContactBlock = ({
|
|
|
3355
3241
|
backgroundRepeat: "repeat"
|
|
3356
3242
|
}
|
|
3357
3243
|
}
|
|
3358
|
-
), /* @__PURE__ */
|
|
3244
|
+
), /* @__PURE__ */ import_react48.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react48.default.createElement("div", { className: "relative px-8 md:px-12 py-10" }, tagline && /* @__PURE__ */ import_react48.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react48.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ import_react48.default.createElement("div", { className: "relative px-8 md:px-12 py-8 pb-14" }, /* @__PURE__ */ import_react48.default.createElement("div", { className: "flex flex-wrap gap-12 lg:gap-16 w-full" }, company && /* @__PURE__ */ import_react48.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react48.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Contact Details"), /* @__PURE__ */ import_react48.default.createElement("div", { className: "space-y-3 text-[13px] text-neutral-600 leading-[1.8]" }, company.name && /* @__PURE__ */ import_react48.default.createElement("p", { className: "text-black" }, company.name), company.lines && company.lines.map((line, idx) => /* @__PURE__ */ import_react48.default.createElement("p", { key: idx }, line)), company.phone && /* @__PURE__ */ import_react48.default.createElement("p", { className: "pt-2" }, /* @__PURE__ */ import_react48.default.createElement(
|
|
3359
3245
|
"a",
|
|
3360
3246
|
{
|
|
3361
3247
|
href: `tel:${company.phone.replace(/\s+/g, "")}`,
|
|
3362
3248
|
className: "transition-colors hover:text-black"
|
|
3363
3249
|
},
|
|
3364
3250
|
company.phone
|
|
3365
|
-
)))), emails && emails.length > 0 && /* @__PURE__ */
|
|
3251
|
+
)))), emails && emails.length > 0 && /* @__PURE__ */ import_react48.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react48.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Email Directory"), /* @__PURE__ */ import_react48.default.createElement("div", { className: "space-y-6 text-[13px]" }, emails.map((email, idx) => /* @__PURE__ */ import_react48.default.createElement("div", { key: idx }, /* @__PURE__ */ import_react48.default.createElement("p", { className: "text-[11px] tracking-[0.2em] mb-1.5 text-neutral-500 " }, email.label), /* @__PURE__ */ import_react48.default.createElement(
|
|
3366
3252
|
SecureEmail,
|
|
3367
3253
|
{
|
|
3368
3254
|
user: email.user,
|
|
3369
3255
|
domain: email.domain,
|
|
3370
3256
|
className: "text-neutral-600 transition-colors hover:text-black"
|
|
3371
3257
|
}
|
|
3372
|
-
))))), socials && socials.length > 0 && /* @__PURE__ */
|
|
3258
|
+
))))), socials && socials.length > 0 && /* @__PURE__ */ import_react48.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react48.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Find Us Online"), /* @__PURE__ */ import_react48.default.createElement("div", { className: "flex flex-col space-y-5 pt-1" }, socials.map((social, idx) => /* @__PURE__ */ import_react48.default.createElement(
|
|
3373
3259
|
"a",
|
|
3374
3260
|
{
|
|
3375
3261
|
key: idx,
|
|
@@ -3378,27 +3264,27 @@ var ManagedContactBlock = ({
|
|
|
3378
3264
|
rel: "noopener noreferrer",
|
|
3379
3265
|
className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black"
|
|
3380
3266
|
},
|
|
3381
|
-
/* @__PURE__ */
|
|
3382
|
-
/* @__PURE__ */
|
|
3267
|
+
/* @__PURE__ */ import_react48.default.createElement(import_react49.HugeiconsIcon, { icon: social.icon, size: 18 }),
|
|
3268
|
+
/* @__PURE__ */ import_react48.default.createElement("span", { className: "text-[13px]" }, social.label)
|
|
3383
3269
|
)))))))));
|
|
3384
3270
|
};
|
|
3385
3271
|
|
|
3386
3272
|
// src/components/ManagedPricingBlock.tsx
|
|
3387
|
-
var
|
|
3273
|
+
var import_react50 = __toESM(require("react"));
|
|
3388
3274
|
var import_link7 = __toESM(require("next/link"));
|
|
3389
3275
|
var import_image4 = __toESM(require("next/image"));
|
|
3390
|
-
var CheckIcon = ({ className = "" }) => /* @__PURE__ */
|
|
3391
|
-
var CrossIcon = ({ className = "" }) => /* @__PURE__ */
|
|
3276
|
+
var CheckIcon = ({ className = "" }) => /* @__PURE__ */ import_react50.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react50.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ import_react50.default.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
3277
|
+
var CrossIcon = ({ className = "" }) => /* @__PURE__ */ import_react50.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react50.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ import_react50.default.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
3392
3278
|
var ManagedPricingBlock = ({
|
|
3393
3279
|
tagline,
|
|
3394
3280
|
title,
|
|
3395
3281
|
plans = [],
|
|
3396
3282
|
tabs
|
|
3397
3283
|
}) => {
|
|
3398
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
3399
|
-
const [activeTabIndex, setActiveTabIndex] = (0,
|
|
3400
|
-
const titleRef = (0,
|
|
3401
|
-
(0,
|
|
3284
|
+
const [isAnimating, setIsAnimating] = (0, import_react50.useState)(false);
|
|
3285
|
+
const [activeTabIndex, setActiveTabIndex] = (0, import_react50.useState)(0);
|
|
3286
|
+
const titleRef = (0, import_react50.useRef)(null);
|
|
3287
|
+
(0, import_react50.useEffect)(() => {
|
|
3402
3288
|
const observer = new IntersectionObserver(
|
|
3403
3289
|
([entry]) => {
|
|
3404
3290
|
if (entry.isIntersecting) {
|
|
@@ -3418,7 +3304,7 @@ var ManagedPricingBlock = ({
|
|
|
3418
3304
|
}, []);
|
|
3419
3305
|
const hasTabs = tabs && tabs.length > 0;
|
|
3420
3306
|
const currentPlans = hasTabs ? tabs[activeTabIndex].plans : plans;
|
|
3421
|
-
return /* @__PURE__ */
|
|
3307
|
+
return /* @__PURE__ */ import_react50.default.createElement("div", { className: "grow pt-10 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col items-center" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "w-full flex flex-col items-center text-center mb-10 sm:mb-12" }, tagline && /* @__PURE__ */ import_react50.default.createElement("span", { className: "text-[9px] tracking-[0.4em] text-black block " }, tagline), /* @__PURE__ */ import_react50.default.createElement(
|
|
3422
3308
|
"h1",
|
|
3423
3309
|
{
|
|
3424
3310
|
ref: titleRef,
|
|
@@ -3426,9 +3312,9 @@ var ManagedPricingBlock = ({
|
|
|
3426
3312
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
3427
3313
|
},
|
|
3428
3314
|
title
|
|
3429
|
-
)), hasTabs && /* @__PURE__ */
|
|
3315
|
+
)), hasTabs && /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex items-center justify-center mb-8 sm:mb-10 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex items-center bg-white rounded-full p-1 sm:p-1.5 max-w-full overflow-x-auto custom-scrollbar" }, tabs.map((tab, idx) => {
|
|
3430
3316
|
const isActive = activeTabIndex === idx;
|
|
3431
|
-
return /* @__PURE__ */
|
|
3317
|
+
return /* @__PURE__ */ import_react50.default.createElement(
|
|
3432
3318
|
"button",
|
|
3433
3319
|
{
|
|
3434
3320
|
key: idx,
|
|
@@ -3437,19 +3323,19 @@ var ManagedPricingBlock = ({
|
|
|
3437
3323
|
},
|
|
3438
3324
|
tab.label
|
|
3439
3325
|
);
|
|
3440
|
-
}))), /* @__PURE__ */
|
|
3326
|
+
}))), /* @__PURE__ */ import_react50.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-5 w-full max-w-3xl animate-in slide-in-from-bottom-2 fade-in duration-500" }, currentPlans.map((plan, planIdx) => /* @__PURE__ */ import_react50.default.createElement(
|
|
3441
3327
|
"div",
|
|
3442
3328
|
{
|
|
3443
3329
|
key: `${activeTabIndex}-${planIdx}`,
|
|
3444
3330
|
className: `bg-white rounded-3xl p-6 flex flex-col relative overflow-hidden transition-all duration-300 ${plan.isPremium ? "" : ""}`
|
|
3445
3331
|
},
|
|
3446
|
-
/* @__PURE__ */
|
|
3332
|
+
/* @__PURE__ */ import_react50.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ import_react50.default.createElement("span", { className: "text-black text-base block mb-1" }, plan.name), /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ import_react50.default.createElement("h3", { className: "text-3xl font-light text-black" }, plan.price), plan.period && /* @__PURE__ */ import_react50.default.createElement("span", { className: "text-xs text-neutral-500" }, plan.period)), /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-xs text-neutral-500 mt-2 min-h-8" }, plan.description), plan.showApps && plan.appLogos && plan.appLogos.length > 0 && /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex items-center gap-2 mt-4" }, plan.appLogos.map((logo, logoIdx) => /* @__PURE__ */ import_react50.default.createElement(
|
|
3447
3333
|
"div",
|
|
3448
3334
|
{
|
|
3449
3335
|
key: logoIdx,
|
|
3450
3336
|
className: "relative w-5 h-5 overflow-hidden flex items-center justify-center shrink-0"
|
|
3451
3337
|
},
|
|
3452
|
-
/* @__PURE__ */
|
|
3338
|
+
/* @__PURE__ */ import_react50.default.createElement(
|
|
3453
3339
|
import_image4.default,
|
|
3454
3340
|
{
|
|
3455
3341
|
src: logo.src,
|
|
@@ -3460,7 +3346,7 @@ var ManagedPricingBlock = ({
|
|
|
3460
3346
|
}
|
|
3461
3347
|
)
|
|
3462
3348
|
)))),
|
|
3463
|
-
plan.isPremium ? /* @__PURE__ */
|
|
3349
|
+
plan.isPremium ? /* @__PURE__ */ import_react50.default.createElement(ThreeDButton, { href: plan.ctaHref, className: "mb-6 w-full" }, plan.ctaText) : /* @__PURE__ */ import_react50.default.createElement(
|
|
3464
3350
|
import_link7.default,
|
|
3465
3351
|
{
|
|
3466
3352
|
href: plan.ctaHref,
|
|
@@ -3468,20 +3354,20 @@ var ManagedPricingBlock = ({
|
|
|
3468
3354
|
},
|
|
3469
3355
|
plan.ctaText
|
|
3470
3356
|
),
|
|
3471
|
-
/* @__PURE__ */
|
|
3357
|
+
/* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col gap-3" }, plan.features.map((feature, featureIdx) => {
|
|
3472
3358
|
const isAvailable = feature.value !== false;
|
|
3473
3359
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
3474
|
-
return /* @__PURE__ */
|
|
3360
|
+
return /* @__PURE__ */ import_react50.default.createElement("div", { key: featureIdx, className: "flex items-center gap-2.5" }, isAvailable ? /* @__PURE__ */ import_react50.default.createElement(CheckIcon, null) : /* @__PURE__ */ import_react50.default.createElement(CrossIcon, null), /* @__PURE__ */ import_react50.default.createElement("span", { className: `text-xs truncate ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ import_react50.default.createElement("span", { className: "text-neutral-500 ml-1" }, "(", valueText, ")")));
|
|
3475
3361
|
}))
|
|
3476
3362
|
)))));
|
|
3477
3363
|
};
|
|
3478
3364
|
|
|
3479
3365
|
// src/components/ManagedBoardBlock.tsx
|
|
3480
|
-
var
|
|
3366
|
+
var import_react51 = __toESM(require("react"));
|
|
3481
3367
|
var import_image5 = __toESM(require("next/image"));
|
|
3482
|
-
var
|
|
3483
|
-
var
|
|
3484
|
-
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */
|
|
3368
|
+
var import_react52 = require("@hugeicons/react");
|
|
3369
|
+
var import_core_free_icons16 = require("@hugeicons/core-free-icons");
|
|
3370
|
+
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ import_react51.default.createElement(
|
|
3485
3371
|
"a",
|
|
3486
3372
|
{
|
|
3487
3373
|
href,
|
|
@@ -3489,7 +3375,7 @@ var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ import_r
|
|
|
3489
3375
|
rel: "noopener noreferrer",
|
|
3490
3376
|
className: "text-neutral-400 hover:text-black transition-colors"
|
|
3491
3377
|
},
|
|
3492
|
-
/* @__PURE__ */
|
|
3378
|
+
/* @__PURE__ */ import_react51.default.createElement(import_react52.HugeiconsIcon, { icon, size: 16 })
|
|
3493
3379
|
);
|
|
3494
3380
|
var ManagedBoardBlock = ({
|
|
3495
3381
|
tagline,
|
|
@@ -3498,7 +3384,7 @@ var ManagedBoardBlock = ({
|
|
|
3498
3384
|
contactText,
|
|
3499
3385
|
contactEmail
|
|
3500
3386
|
}) => {
|
|
3501
|
-
return /* @__PURE__ */
|
|
3387
|
+
return /* @__PURE__ */ import_react51.default.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react51.default.createElement("div", { className: "relative w-full mx-auto overflow-hidden max-w-7xl" }, /* @__PURE__ */ import_react51.default.createElement(
|
|
3502
3388
|
"div",
|
|
3503
3389
|
{
|
|
3504
3390
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3507,7 +3393,7 @@ var ManagedBoardBlock = ({
|
|
|
3507
3393
|
backgroundRepeat: "repeat"
|
|
3508
3394
|
}
|
|
3509
3395
|
}
|
|
3510
|
-
), /* @__PURE__ */
|
|
3396
|
+
), /* @__PURE__ */ import_react51.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react51.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react51.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react51.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ import_react51.default.createElement("div", { className: "relative px-5 md:px-12 py-4 md:py-8" }, /* @__PURE__ */ import_react51.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-5 md:gap-8" }, members.map((member, idx) => /* @__PURE__ */ import_react51.default.createElement("div", { key: idx, className: "relative p-6 md:p-8 rounded-2xl bg-white flex flex-col transition-all group" }, /* @__PURE__ */ import_react51.default.createElement("div", { className: "flex items-start space-x-4 md:space-x-5 mb-5 md:mb-6" }, /* @__PURE__ */ import_react51.default.createElement("div", { className: "relative w-14 h-14 md:w-16 md:h-16 shrink-0 bg-white overflow-hidden rounded-xl" }, /* @__PURE__ */ import_react51.default.createElement(
|
|
3511
3397
|
import_image5.default,
|
|
3512
3398
|
{
|
|
3513
3399
|
src: member.imageSrc,
|
|
@@ -3516,44 +3402,44 @@ var ManagedBoardBlock = ({
|
|
|
3516
3402
|
sizes: "(max-width: 768px) 56px, 64px",
|
|
3517
3403
|
className: "object-cover grayscale opacity-100 transition-opacity"
|
|
3518
3404
|
}
|
|
3519
|
-
)), /* @__PURE__ */
|
|
3405
|
+
)), /* @__PURE__ */ import_react51.default.createElement("div", { className: "pt-1" }, /* @__PURE__ */ import_react51.default.createElement("h3", { className: " text-[14px] md:text-[15px] text-black tracking-tight" }, member.name), /* @__PURE__ */ import_react51.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 mt-1.5 " }, member.title))), /* @__PURE__ */ import_react51.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 text-left grow mb-8" }, member.bio), /* @__PURE__ */ import_react51.default.createElement("div", { className: "space-y-6 mt-auto" }, /* @__PURE__ */ import_react51.default.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ import_react51.default.createElement(ThreeDButton, { href: member.website }, "Visit Website")), /* @__PURE__ */ import_react51.default.createElement("div", { className: "flex space-x-4 pt-5" }, member.twitterHandle && member.twitterHandle.length > 0 && /* @__PURE__ */ import_react51.default.createElement(
|
|
3520
3406
|
MemberSocialLink,
|
|
3521
3407
|
{
|
|
3522
3408
|
href: `https://x.com/${member.twitterHandle}`,
|
|
3523
|
-
icon:
|
|
3409
|
+
icon: import_core_free_icons16.TwitterIcon,
|
|
3524
3410
|
label: "X",
|
|
3525
3411
|
name: member.name
|
|
3526
3412
|
}
|
|
3527
|
-
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */
|
|
3413
|
+
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */ import_react51.default.createElement(
|
|
3528
3414
|
MemberSocialLink,
|
|
3529
3415
|
{
|
|
3530
3416
|
href: member.linkedinHandle,
|
|
3531
|
-
icon:
|
|
3417
|
+
icon: import_core_free_icons16.LinkedinIcon,
|
|
3532
3418
|
label: "LinkedIn",
|
|
3533
3419
|
name: member.name
|
|
3534
3420
|
}
|
|
3535
|
-
))))))), (contactText || contactEmail) && /* @__PURE__ */
|
|
3421
|
+
))))))), (contactText || contactEmail) && /* @__PURE__ */ import_react51.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ import_react51.default.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ import_react51.default.createElement("a", { href: `mailto:${contactEmail}`, className: "text-black decoration-black decoration-2 underline-offset-4 ml-1 transition-colors" }, contactEmail))))));
|
|
3536
3422
|
};
|
|
3537
3423
|
|
|
3538
3424
|
// src/components/ManagedNotFoundBlock.tsx
|
|
3539
|
-
var
|
|
3425
|
+
var import_react53 = __toESM(require("react"));
|
|
3540
3426
|
var ManagedNotFoundBlock = ({
|
|
3541
3427
|
title = "404 - Page Not Found",
|
|
3542
3428
|
description = "The page you are looking for does not exist or has been moved."
|
|
3543
3429
|
}) => {
|
|
3544
|
-
return /* @__PURE__ */
|
|
3430
|
+
return /* @__PURE__ */ import_react53.default.createElement("main", { className: "min-h-screen flex items-center justify-center relative z-20 bg-transparent" }, /* @__PURE__ */ import_react53.default.createElement("div", { className: "p-6 w-full max-w-md mx-auto text-center" }, /* @__PURE__ */ import_react53.default.createElement("div", { className: "mb-8 flex justify-center" }, /* @__PURE__ */ import_react53.default.createElement(
|
|
3545
3431
|
"svg",
|
|
3546
3432
|
{
|
|
3547
3433
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3548
3434
|
viewBox: "0 0 24 24",
|
|
3549
3435
|
className: "w-12 h-12 fill-neutral-100"
|
|
3550
3436
|
},
|
|
3551
|
-
/* @__PURE__ */
|
|
3552
|
-
)), /* @__PURE__ */
|
|
3437
|
+
/* @__PURE__ */ import_react53.default.createElement("path", { fillRule: "evenodd", d: "M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z", clipRule: "evenodd" })
|
|
3438
|
+
)), /* @__PURE__ */ import_react53.default.createElement("h1", { className: " text-xl md:text-3xl text-black tracking-tight mb-4" }, title), /* @__PURE__ */ import_react53.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-12" }, description)));
|
|
3553
3439
|
};
|
|
3554
3440
|
|
|
3555
3441
|
// src/components/ManagedNewsletterSplitBlock.tsx
|
|
3556
|
-
var
|
|
3442
|
+
var import_react54 = __toESM(require("react"));
|
|
3557
3443
|
var import_image6 = __toESM(require("next/image"));
|
|
3558
3444
|
var ManagedNewsletterSplitBlock = ({
|
|
3559
3445
|
tagline,
|
|
@@ -3567,7 +3453,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3567
3453
|
ctaHref = "/contact",
|
|
3568
3454
|
children
|
|
3569
3455
|
}) => {
|
|
3570
|
-
return /* @__PURE__ */
|
|
3456
|
+
return /* @__PURE__ */ import_react54.default.createElement("div", { className: "grow flex flex-col md:flex-row relative w-full pt-32 md:pt-0" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "hidden md:block md:w-1/2 relative min-h-screen overflow-hidden" }, /* @__PURE__ */ import_react54.default.createElement(
|
|
3571
3457
|
import_image6.default,
|
|
3572
3458
|
{
|
|
3573
3459
|
src: imageSrc,
|
|
@@ -3577,7 +3463,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3577
3463
|
className: "object-cover object-top grayscale opacity-60",
|
|
3578
3464
|
quality: 100
|
|
3579
3465
|
}
|
|
3580
|
-
), /* @__PURE__ */
|
|
3466
|
+
), /* @__PURE__ */ import_react54.default.createElement(
|
|
3581
3467
|
"div",
|
|
3582
3468
|
{
|
|
3583
3469
|
className: "absolute inset-0 z-10 pointer-events-none",
|
|
@@ -3585,7 +3471,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3585
3471
|
background: "linear-gradient(to right, rgba(255,255,255,0) 30%, #ffffff 100%)"
|
|
3586
3472
|
}
|
|
3587
3473
|
}
|
|
3588
|
-
), /* @__PURE__ */
|
|
3474
|
+
), /* @__PURE__ */ import_react54.default.createElement(
|
|
3589
3475
|
"div",
|
|
3590
3476
|
{
|
|
3591
3477
|
className: "absolute inset-x-0 bottom-0 h-40 z-10 pointer-events-none",
|
|
@@ -3593,7 +3479,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3593
3479
|
background: "linear-gradient(to bottom, rgba(255,255,255,0) 0%, #ffffff 100%)"
|
|
3594
3480
|
}
|
|
3595
3481
|
}
|
|
3596
|
-
)), /* @__PURE__ */
|
|
3482
|
+
)), /* @__PURE__ */ import_react54.default.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__ */ import_react54.default.createElement("div", { className: "relative w-full max-w-lg p-8 md:p-12 text-center md:text-left transition-all duration-700 ease-out" }, /* @__PURE__ */ import_react54.default.createElement(
|
|
3597
3483
|
"div",
|
|
3598
3484
|
{
|
|
3599
3485
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3602,7 +3488,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3602
3488
|
backgroundRepeat: "repeat"
|
|
3603
3489
|
}
|
|
3604
3490
|
}
|
|
3605
|
-
), /* @__PURE__ */
|
|
3491
|
+
), /* @__PURE__ */ import_react54.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "mb-10 border-b border-neutral-200 pb-8 text-center md:text-left" }, tagline && /* @__PURE__ */ import_react54.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 " }, tagline), /* @__PURE__ */ import_react54.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight mb-4" }, title), subtitle && /* @__PURE__ */ import_react54.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, subtitle)), /* @__PURE__ */ import_react54.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-10 text-center md:text-left" }, description), children && /* @__PURE__ */ import_react54.default.createElement("div", { className: "mb-8 text-left" }, children), /* @__PURE__ */ import_react54.default.createElement("div", { className: "text-center md:text-left mt-10 space-y-6" }, dividerText && /* @__PURE__ */ import_react54.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "grow h-px bg-neutral-100" }), /* @__PURE__ */ import_react54.default.createElement("span", { className: "shrink mx-4 text-[11px] tracking-[0.2em] text-neutral-400 " }, dividerText), /* @__PURE__ */ import_react54.default.createElement("div", { className: "grow h-px bg-neutral-100" })), ctaText && ctaHref && /* @__PURE__ */ import_react54.default.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ import_react54.default.createElement(
|
|
3606
3492
|
ThreeDButton,
|
|
3607
3493
|
{
|
|
3608
3494
|
href: ctaHref,
|
|
@@ -3613,14 +3499,14 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3613
3499
|
};
|
|
3614
3500
|
|
|
3615
3501
|
// src/components/PortfolioHero.tsx
|
|
3616
|
-
var
|
|
3502
|
+
var import_react55 = __toESM(require("react"));
|
|
3617
3503
|
var import_link8 = __toESM(require("next/link"));
|
|
3618
3504
|
var import_image7 = __toESM(require("next/image"));
|
|
3619
|
-
var
|
|
3620
|
-
var
|
|
3505
|
+
var import_react56 = require("@hugeicons/react");
|
|
3506
|
+
var import_core_free_icons17 = require("@hugeicons/core-free-icons");
|
|
3621
3507
|
var useScrollAnimation = () => {
|
|
3622
|
-
const elementRef = (0,
|
|
3623
|
-
(0,
|
|
3508
|
+
const elementRef = (0, import_react55.useRef)(null);
|
|
3509
|
+
(0, import_react55.useEffect)(() => {
|
|
3624
3510
|
const el = elementRef.current;
|
|
3625
3511
|
if (!el) return;
|
|
3626
3512
|
const observer = new IntersectionObserver(
|
|
@@ -3656,13 +3542,13 @@ var PortfolioHero = ({
|
|
|
3656
3542
|
secondaryCtaHref
|
|
3657
3543
|
}) => {
|
|
3658
3544
|
const heroContentRef = useScrollAnimation();
|
|
3659
|
-
return /* @__PURE__ */
|
|
3545
|
+
return /* @__PURE__ */ import_react55.default.createElement("section", { className: "pt-8 pb-16 px-6 md:px-12 flex flex-col relative overflow-hidden z-10 w-full" }, /* @__PURE__ */ import_react55.default.createElement(
|
|
3660
3546
|
"div",
|
|
3661
3547
|
{
|
|
3662
3548
|
ref: heroContentRef,
|
|
3663
3549
|
className: "w-full opacity-0 translate-y-5 transition-all duration-1000 ease-out relative z-10"
|
|
3664
3550
|
},
|
|
3665
|
-
/* @__PURE__ */
|
|
3551
|
+
/* @__PURE__ */ import_react55.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-5 sm:gap-8 mb-10" }, /* @__PURE__ */ import_react55.default.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__ */ import_react55.default.createElement(
|
|
3666
3552
|
import_image7.default,
|
|
3667
3553
|
{
|
|
3668
3554
|
src: imageSrc,
|
|
@@ -3673,7 +3559,7 @@ var PortfolioHero = ({
|
|
|
3673
3559
|
sizes: "(max-width: 640px) 80px, 128px",
|
|
3674
3560
|
quality: 100
|
|
3675
3561
|
}
|
|
3676
|
-
)), /* @__PURE__ */
|
|
3562
|
+
)), /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex flex-col text-left" }, /* @__PURE__ */ import_react55.default.createElement("h1", { className: " text-3xl sm:text-5xl lg:text-6xl tracking-tight text-black leading-none mb-3" }, name), socialLabel && /* @__PURE__ */ import_react55.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, socialLabel), socialLinkText && socialLinkHref && /* @__PURE__ */ import_react55.default.createElement(
|
|
3677
3563
|
"a",
|
|
3678
3564
|
{
|
|
3679
3565
|
href: socialLinkHref,
|
|
@@ -3683,31 +3569,31 @@ var PortfolioHero = ({
|
|
|
3683
3569
|
},
|
|
3684
3570
|
socialLinkText
|
|
3685
3571
|
))),
|
|
3686
|
-
/* @__PURE__ */
|
|
3687
|
-
/* @__PURE__ */
|
|
3572
|
+
/* @__PURE__ */ import_react55.default.createElement("p", { className: "text-[13px] leading-[1.8] max-w-4xl mb-12 text-neutral-600" }, bio),
|
|
3573
|
+
/* @__PURE__ */ import_react55.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 w-full sm:w-auto" }, primaryCtaText && primaryCtaHref && /* @__PURE__ */ import_react55.default.createElement("div", { className: "w-full sm:w-auto *:w-full" }, /* @__PURE__ */ import_react55.default.createElement(
|
|
3688
3574
|
ThreeDButton,
|
|
3689
3575
|
{
|
|
3690
3576
|
href: primaryCtaHref,
|
|
3691
3577
|
className: "py-3 tracking-widest text-[11px]"
|
|
3692
3578
|
},
|
|
3693
3579
|
primaryCtaText
|
|
3694
|
-
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
3580
|
+
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react55.default.createElement(
|
|
3695
3581
|
import_link8.default,
|
|
3696
3582
|
{
|
|
3697
3583
|
href: secondaryCtaHref,
|
|
3698
3584
|
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"
|
|
3699
3585
|
},
|
|
3700
3586
|
secondaryCtaText,
|
|
3701
|
-
/* @__PURE__ */
|
|
3587
|
+
/* @__PURE__ */ import_react55.default.createElement(import_react56.HugeiconsIcon, { icon: import_core_free_icons17.ArrowRight01Icon, size: 16 })
|
|
3702
3588
|
))
|
|
3703
3589
|
));
|
|
3704
3590
|
};
|
|
3705
3591
|
|
|
3706
3592
|
// src/components/GifFeatureCard.tsx
|
|
3707
|
-
var
|
|
3593
|
+
var import_react57 = __toESM(require("react"));
|
|
3708
3594
|
var import_image8 = __toESM(require("next/image"));
|
|
3709
|
-
var
|
|
3710
|
-
var
|
|
3595
|
+
var import_react58 = require("@hugeicons/react");
|
|
3596
|
+
var import_core_free_icons18 = require("@hugeicons/core-free-icons");
|
|
3711
3597
|
var GifFeatureCard = ({
|
|
3712
3598
|
gifSrc,
|
|
3713
3599
|
title,
|
|
@@ -3715,20 +3601,20 @@ var GifFeatureCard = ({
|
|
|
3715
3601
|
alt = "Feature animation",
|
|
3716
3602
|
className = "aspect-video"
|
|
3717
3603
|
}) => {
|
|
3718
|
-
const [isLoading, setIsLoading] = (0,
|
|
3719
|
-
return /* @__PURE__ */
|
|
3720
|
-
|
|
3604
|
+
const [isLoading, setIsLoading] = (0, import_react57.useState)(true);
|
|
3605
|
+
return /* @__PURE__ */ import_react57.default.createElement("div", { className: `relative w-full bg-black overflow-hidden shadow-2xl ${className}` }, isLoading && /* @__PURE__ */ import_react57.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-black" }, /* @__PURE__ */ import_react57.default.createElement(
|
|
3606
|
+
import_react58.HugeiconsIcon,
|
|
3721
3607
|
{
|
|
3722
|
-
icon:
|
|
3608
|
+
icon: import_core_free_icons18.Loading03Icon,
|
|
3723
3609
|
size: 32,
|
|
3724
3610
|
className: "animate-spin text-white"
|
|
3725
3611
|
}
|
|
3726
|
-
)), /* @__PURE__ */
|
|
3612
|
+
)), /* @__PURE__ */ import_react57.default.createElement(
|
|
3727
3613
|
"div",
|
|
3728
3614
|
{
|
|
3729
3615
|
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"}`
|
|
3730
3616
|
},
|
|
3731
|
-
/* @__PURE__ */
|
|
3617
|
+
/* @__PURE__ */ import_react57.default.createElement(
|
|
3732
3618
|
import_image8.default,
|
|
3733
3619
|
{
|
|
3734
3620
|
src: gifSrc,
|
|
@@ -3739,16 +3625,16 @@ var GifFeatureCard = ({
|
|
|
3739
3625
|
className: "object-cover object-center pointer-events-none"
|
|
3740
3626
|
}
|
|
3741
3627
|
)
|
|
3742
|
-
), /* @__PURE__ */
|
|
3628
|
+
), /* @__PURE__ */ import_react57.default.createElement(
|
|
3743
3629
|
"div",
|
|
3744
3630
|
{
|
|
3745
3631
|
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"
|
|
3746
3632
|
}
|
|
3747
|
-
), /* @__PURE__ */
|
|
3633
|
+
), /* @__PURE__ */ import_react57.default.createElement("div", { className: "absolute inset-x-0 bottom-0 p-6 sm:p-8 z-30 flex flex-col justify-end text-left pointer-events-none" }, title && /* @__PURE__ */ import_react57.default.createElement("h3", { className: " text-xl sm:text-2xl md:text-3xl text-white tracking-tight mb-2 sm:mb-3 drop-shadow-md" }, title), subtitle && /* @__PURE__ */ import_react57.default.createElement("p", { className: "text-[13px] sm:text-[15px] leading-relaxed text-neutral-300 max-w-2xl drop-shadow-sm" }, subtitle)));
|
|
3748
3634
|
};
|
|
3749
3635
|
|
|
3750
3636
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
3751
|
-
var
|
|
3637
|
+
var import_react59 = __toESM(require("react"));
|
|
3752
3638
|
var import_image9 = __toESM(require("next/image"));
|
|
3753
3639
|
var MedicalFeatureStatsBlock = ({
|
|
3754
3640
|
bottomHeadline,
|
|
@@ -3757,9 +3643,9 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3757
3643
|
trustText,
|
|
3758
3644
|
stats
|
|
3759
3645
|
}) => {
|
|
3760
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
3761
|
-
const titleRef = (0,
|
|
3762
|
-
(0,
|
|
3646
|
+
const [isAnimating, setIsAnimating] = (0, import_react59.useState)(false);
|
|
3647
|
+
const titleRef = (0, import_react59.useRef)(null);
|
|
3648
|
+
(0, import_react59.useEffect)(() => {
|
|
3763
3649
|
const observer = new IntersectionObserver(
|
|
3764
3650
|
([entry]) => {
|
|
3765
3651
|
if (entry.isIntersecting) {
|
|
@@ -3777,7 +3663,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3777
3663
|
}
|
|
3778
3664
|
return () => observer.disconnect();
|
|
3779
3665
|
}, []);
|
|
3780
|
-
return /* @__PURE__ */
|
|
3666
|
+
return /* @__PURE__ */ import_react59.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ import_react59.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ import_react59.default.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ import_react59.default.createElement(
|
|
3781
3667
|
"h2",
|
|
3782
3668
|
{
|
|
3783
3669
|
ref: titleRef,
|
|
@@ -3785,7 +3671,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3785
3671
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
3786
3672
|
},
|
|
3787
3673
|
bottomHeadline
|
|
3788
|
-
), /* @__PURE__ */
|
|
3674
|
+
), /* @__PURE__ */ import_react59.default.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ import_react59.default.createElement("div", { key: i, className: "relative w-12 h-12 rounded-full border-[3px] border-white overflow-hidden bg-neutral-100 z-1 hover:z-10 transition-all" }, /* @__PURE__ */ import_react59.default.createElement(
|
|
3789
3675
|
import_image9.default,
|
|
3790
3676
|
{
|
|
3791
3677
|
src,
|
|
@@ -3794,17 +3680,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3794
3680
|
sizes: "48px",
|
|
3795
3681
|
className: "object-cover"
|
|
3796
3682
|
}
|
|
3797
|
-
)))), /* @__PURE__ */
|
|
3683
|
+
)))), /* @__PURE__ */ import_react59.default.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ import_react59.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ import_react59.default.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ import_react59.default.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ import_react59.default.createElement("h1", { className: "text-6xl gradient-text md:text-[80px] tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
|
|
3798
3684
|
};
|
|
3799
3685
|
|
|
3800
3686
|
// src/components/ConsultantShowcase.tsx
|
|
3801
|
-
var
|
|
3687
|
+
var import_react60 = __toESM(require("react"));
|
|
3802
3688
|
var import_image10 = __toESM(require("next/image"));
|
|
3803
|
-
var
|
|
3804
|
-
var
|
|
3689
|
+
var import_react61 = require("@hugeicons/react");
|
|
3690
|
+
var import_core_free_icons19 = require("@hugeicons/core-free-icons");
|
|
3805
3691
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
3806
|
-
const [isLoading, setIsLoading] = (0,
|
|
3807
|
-
return /* @__PURE__ */
|
|
3692
|
+
const [isLoading, setIsLoading] = (0, import_react60.useState)(true);
|
|
3693
|
+
return /* @__PURE__ */ import_react60.default.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ import_react60.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-800/50 backdrop-blur-md transition-opacity duration-300" }, /* @__PURE__ */ import_react60.default.createElement(import_react61.HugeiconsIcon, { icon: import_core_free_icons19.Loading03Icon, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ import_react60.default.createElement(
|
|
3808
3694
|
import_image10.default,
|
|
3809
3695
|
{
|
|
3810
3696
|
src,
|
|
@@ -3823,9 +3709,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
3823
3709
|
var ConsultantShowcase = ({
|
|
3824
3710
|
profiles
|
|
3825
3711
|
}) => {
|
|
3826
|
-
const [currentIndex, setCurrentIndex] = (0,
|
|
3827
|
-
const [touchStart, setTouchStart] = (0,
|
|
3828
|
-
const [touchEnd, setTouchEnd] = (0,
|
|
3712
|
+
const [currentIndex, setCurrentIndex] = (0, import_react60.useState)(0);
|
|
3713
|
+
const [touchStart, setTouchStart] = (0, import_react60.useState)(null);
|
|
3714
|
+
const [touchEnd, setTouchEnd] = (0, import_react60.useState)(null);
|
|
3829
3715
|
const nextSlide = () => {
|
|
3830
3716
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
3831
3717
|
};
|
|
@@ -3850,7 +3736,7 @@ var ConsultantShowcase = ({
|
|
|
3850
3736
|
}
|
|
3851
3737
|
};
|
|
3852
3738
|
if (!profiles || profiles.length === 0) return null;
|
|
3853
|
-
return /* @__PURE__ */
|
|
3739
|
+
return /* @__PURE__ */ import_react60.default.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ import_react60.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react60.default.createElement(
|
|
3854
3740
|
"div",
|
|
3855
3741
|
{
|
|
3856
3742
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -3860,13 +3746,13 @@ var ConsultantShowcase = ({
|
|
|
3860
3746
|
},
|
|
3861
3747
|
profiles.map((profile, idx) => {
|
|
3862
3748
|
const isActive = idx === currentIndex;
|
|
3863
|
-
return /* @__PURE__ */
|
|
3749
|
+
return /* @__PURE__ */ import_react60.default.createElement(
|
|
3864
3750
|
"div",
|
|
3865
3751
|
{
|
|
3866
3752
|
key: profile.id,
|
|
3867
3753
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
3868
3754
|
},
|
|
3869
|
-
/* @__PURE__ */
|
|
3755
|
+
/* @__PURE__ */ import_react60.default.createElement(
|
|
3870
3756
|
ImageWithLoader,
|
|
3871
3757
|
{
|
|
3872
3758
|
src: profile.imageSrc,
|
|
@@ -3874,14 +3760,14 @@ var ConsultantShowcase = ({
|
|
|
3874
3760
|
priority: idx === 0
|
|
3875
3761
|
}
|
|
3876
3762
|
),
|
|
3877
|
-
/* @__PURE__ */
|
|
3878
|
-
/* @__PURE__ */
|
|
3879
|
-
/* @__PURE__ */
|
|
3763
|
+
/* @__PURE__ */ import_react60.default.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
3764
|
+
/* @__PURE__ */ import_react60.default.createElement("div", { className: "absolute top-0 left-0 w-full h-[60%] bg-linear-to-b from-black/80 via-black/30 to-transparent z-20 pointer-events-none" }),
|
|
3765
|
+
/* @__PURE__ */ import_react60.default.createElement("div", { className: `absolute top-8 left-8 md:top-12 md:left-12 z-30 text-white max-w-lg transition-transform duration-700 ease-out ${isActive ? "translate-y-0" : "-translate-y-4"}` }, /* @__PURE__ */ import_react60.default.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ import_react60.default.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ import_react60.default.createElement("p", { className: "text-[15px] text-white/80 tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ import_react60.default.createElement("p", { className: "text-[15px] text-white/80 tracking-wide mt-1" }, profile.description)))
|
|
3880
3766
|
);
|
|
3881
3767
|
}),
|
|
3882
|
-
/* @__PURE__ */
|
|
3883
|
-
/* @__PURE__ */
|
|
3884
|
-
/* @__PURE__ */
|
|
3768
|
+
/* @__PURE__ */ import_react60.default.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide }),
|
|
3769
|
+
/* @__PURE__ */ import_react60.default.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide }),
|
|
3770
|
+
/* @__PURE__ */ import_react60.default.createElement("div", { className: "absolute bottom-6 md:bottom-8 left-0 w-full px-4 z-30 flex justify-center items-center gap-2" }, profiles.map((_, idx) => /* @__PURE__ */ import_react60.default.createElement(
|
|
3885
3771
|
"button",
|
|
3886
3772
|
{
|
|
3887
3773
|
key: idx,
|
|
@@ -3893,10 +3779,10 @@ var ConsultantShowcase = ({
|
|
|
3893
3779
|
};
|
|
3894
3780
|
|
|
3895
3781
|
// src/components/ContentGridBlock.tsx
|
|
3896
|
-
var
|
|
3782
|
+
var import_react62 = __toESM(require("react"));
|
|
3897
3783
|
var import_image11 = __toESM(require("next/image"));
|
|
3898
|
-
var
|
|
3899
|
-
var
|
|
3784
|
+
var import_react63 = require("@hugeicons/react");
|
|
3785
|
+
var import_core_free_icons20 = require("@hugeicons/core-free-icons");
|
|
3900
3786
|
var ContentGridBlock = ({
|
|
3901
3787
|
header,
|
|
3902
3788
|
leftCard,
|
|
@@ -3904,34 +3790,34 @@ var ContentGridBlock = ({
|
|
|
3904
3790
|
middleBottomCard,
|
|
3905
3791
|
rightCards
|
|
3906
3792
|
}) => {
|
|
3907
|
-
return /* @__PURE__ */
|
|
3793
|
+
return /* @__PURE__ */ import_react62.default.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ import_react62.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ import_react62.default.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ import_react62.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react62.default.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ import_react62.default.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ import_react62.default.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ import_react62.default.createElement("div", null, /* @__PURE__ */ import_react62.default.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ import_react62.default.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ import_react62.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react62.default.createElement(import_image11.default, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ import_react62.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ import_react62.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ import_react62.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ import_react62.default.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ import_react62.default.createElement(import_image11.default, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ import_react62.default.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ import_react62.default.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ import_react62.default.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__ */ import_react62.default.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ import_react62.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react62.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ import_react62.default.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ import_react62.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ import_react62.default.createElement("div", null, /* @__PURE__ */ import_react62.default.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ import_react62.default.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ import_react62.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react62.default.createElement(import_image11.default, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ import_react62.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react62.default.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ import_react62.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ import_react62.default.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => {
|
|
3908
3794
|
const isSecondCard = idx === 1;
|
|
3909
|
-
return /* @__PURE__ */
|
|
3795
|
+
return /* @__PURE__ */ import_react62.default.createElement(
|
|
3910
3796
|
"div",
|
|
3911
3797
|
{
|
|
3912
3798
|
key: idx,
|
|
3913
3799
|
className: `relative w-full h-80 rounded-3xl overflow-hidden group ${isSecondCard ? "bg-[#ceff8a]" : "bg-[#143731]"}`
|
|
3914
3800
|
},
|
|
3915
|
-
/* @__PURE__ */
|
|
3916
|
-
/* @__PURE__ */
|
|
3801
|
+
/* @__PURE__ */ import_react62.default.createElement("div", { className: `absolute inset-0 z-20 pointer-events-none ${isSecondCard ? "" : "bg-black/20"}` }),
|
|
3802
|
+
/* @__PURE__ */ import_react62.default.createElement("div", { className: `absolute inset-0 z-30 p-6 flex flex-col justify-end ${isSecondCard ? "text-black" : "text-white"}` }, /* @__PURE__ */ import_react62.default.createElement("p", { className: `text-[14px] leading-snug mb-3 pr-2 ${isSecondCard ? "text-black/90" : "text-white/90"}` }, card.mainText), card.tag && /* @__PURE__ */ import_react62.default.createElement("span", { className: `mb-4 text-[11px] tracking-widest ${isSecondCard ? "text-black/70" : "text-white/50"}` }, card.tag), /* @__PURE__ */ import_react62.default.createElement("div", { className: "pt-3" }, /* @__PURE__ */ import_react62.default.createElement("h4", { className: `text-[15px] tracking-wide ${isSecondCard ? "text-black" : "text-white"}` }, card.title), /* @__PURE__ */ import_react62.default.createElement("p", { className: `text-[13px] ${isSecondCard ? "text-black/60" : "text-white/60"}` }, card.subtitle)))
|
|
3917
3803
|
);
|
|
3918
3804
|
})))));
|
|
3919
3805
|
};
|
|
3920
3806
|
|
|
3921
3807
|
// src/components/ManagedProjectsBlock.tsx
|
|
3922
|
-
var
|
|
3808
|
+
var import_react64 = __toESM(require("react"));
|
|
3923
3809
|
var import_link9 = __toESM(require("next/link"));
|
|
3924
3810
|
var GridSection = ({
|
|
3925
3811
|
children,
|
|
3926
3812
|
isLast = false,
|
|
3927
3813
|
className = "py-8 md:py-10"
|
|
3928
|
-
}) => /* @__PURE__ */
|
|
3814
|
+
}) => /* @__PURE__ */ import_react64.default.createElement("div", { className: `relative px-5 md:px-12 ${className} ${!isLast ? "" : ""}` }, children);
|
|
3929
3815
|
var ManagedProjectsBlock = ({
|
|
3930
3816
|
tagline,
|
|
3931
3817
|
title,
|
|
3932
3818
|
projects
|
|
3933
3819
|
}) => {
|
|
3934
|
-
return /* @__PURE__ */
|
|
3820
|
+
return /* @__PURE__ */ import_react64.default.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-5xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react64.default.createElement(
|
|
3935
3821
|
"div",
|
|
3936
3822
|
{
|
|
3937
3823
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3940,17 +3826,17 @@ var ManagedProjectsBlock = ({
|
|
|
3940
3826
|
backgroundRepeat: "repeat"
|
|
3941
3827
|
}
|
|
3942
3828
|
}
|
|
3943
|
-
), /* @__PURE__ */
|
|
3829
|
+
), /* @__PURE__ */ import_react64.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react64.default.createElement(GridSection, null, tagline && /* @__PURE__ */ import_react64.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react64.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), projects.map((project, index) => {
|
|
3944
3830
|
const isLast = index === projects.length - 1;
|
|
3945
|
-
const projectContent = /* @__PURE__ */
|
|
3946
|
-
return /* @__PURE__ */
|
|
3831
|
+
const projectContent = /* @__PURE__ */ import_react64.default.createElement("div", { className: "group block w-full" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex flex-col md:flex-row md:items-center justify-between gap-3 md:gap-4 mb-4 md:mb-5" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex items-center gap-3 md:gap-4" }, /* @__PURE__ */ import_react64.default.createElement("h2", { className: " text-[16px] text-black transition-all flex items-center gap-2" }, project.title, /* @__PURE__ */ import_react64.default.createElement("span", { className: "text-[11px] opacity-0 -translate-x-2 group-hover:opacity-100 group-hover:translate-x-0 transition-all duration-300" }, project.isExternal ? "\u2197" : "\u2192")), /* @__PURE__ */ import_react64.default.createElement("span", { className: `text-[9px] px-2.5 py-1 rounded-full tracking-[0.15em] transition-colors ${project.status.toLowerCase() === "production" ? "bg-black text-white" : "bg-neutral-100 text-neutral-500 group-hover:bg-neutral-100 group-hover:text-black"}` }, project.status)), /* @__PURE__ */ import_react64.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 shrink-0 " }, project.date)), /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 max-w-4xl text-left transition-colors group-hover:text-black" }, project.description));
|
|
3832
|
+
return /* @__PURE__ */ import_react64.default.createElement(GridSection, { key: project.id || index, isLast, className: isLast ? "py-8 md:py-10 pb-12 md:pb-14" : "py-8 md:py-10" }, project.isExternal ? /* @__PURE__ */ import_react64.default.createElement("a", { href: project.link, target: "_blank", rel: "noopener noreferrer", className: "block outline-none" }, projectContent) : /* @__PURE__ */ import_react64.default.createElement(import_link9.default, { href: project.link, className: "block outline-none" }, projectContent));
|
|
3947
3833
|
}))));
|
|
3948
3834
|
};
|
|
3949
3835
|
|
|
3950
3836
|
// src/components/UniversalVerificationPage.tsx
|
|
3951
|
-
var
|
|
3952
|
-
var
|
|
3953
|
-
var
|
|
3837
|
+
var import_react65 = __toESM(require("react"));
|
|
3838
|
+
var import_react66 = require("@hugeicons/react");
|
|
3839
|
+
var import_core_free_icons21 = require("@hugeicons/core-free-icons");
|
|
3954
3840
|
var VerificationRow = ({
|
|
3955
3841
|
icon,
|
|
3956
3842
|
title,
|
|
@@ -3968,14 +3854,14 @@ var VerificationRow = ({
|
|
|
3968
3854
|
case "APPROVED":
|
|
3969
3855
|
statusText = "Completed";
|
|
3970
3856
|
statusColor = "text-neutral-600";
|
|
3971
|
-
StatusIcon =
|
|
3857
|
+
StatusIcon = import_core_free_icons21.CheckmarkCircle01Icon;
|
|
3972
3858
|
bg = "bg-neutral-50";
|
|
3973
3859
|
iconColor = "text-green-500";
|
|
3974
3860
|
break;
|
|
3975
3861
|
case "PENDING":
|
|
3976
3862
|
statusText = "Awaiting Approval";
|
|
3977
3863
|
statusColor = "text-neutral-500";
|
|
3978
|
-
StatusIcon =
|
|
3864
|
+
StatusIcon = import_core_free_icons21.Time02Icon;
|
|
3979
3865
|
bg = "bg-neutral-50";
|
|
3980
3866
|
iconColor = "text-orange-500";
|
|
3981
3867
|
break;
|
|
@@ -3983,7 +3869,7 @@ var VerificationRow = ({
|
|
|
3983
3869
|
statusText = "Action required to fix issue";
|
|
3984
3870
|
statusColor = "text-neutral-500";
|
|
3985
3871
|
bg = "bg-neutral-50";
|
|
3986
|
-
StatusIcon =
|
|
3872
|
+
StatusIcon = import_core_free_icons21.InformationCircleIcon;
|
|
3987
3873
|
iconColor = "text-red-500";
|
|
3988
3874
|
break;
|
|
3989
3875
|
case "ACTION_REQUIRED":
|
|
@@ -3991,20 +3877,20 @@ var VerificationRow = ({
|
|
|
3991
3877
|
statusText = "Start verification";
|
|
3992
3878
|
statusColor = "text-neutral-500";
|
|
3993
3879
|
bg = "bg-neutral-50";
|
|
3994
|
-
StatusIcon =
|
|
3880
|
+
StatusIcon = import_core_free_icons21.InformationCircleIcon;
|
|
3995
3881
|
iconColor = "text-neutral-400";
|
|
3996
3882
|
break;
|
|
3997
3883
|
}
|
|
3998
3884
|
const isDisabled = status === "APPROVED" || isLoading;
|
|
3999
|
-
return /* @__PURE__ */
|
|
3885
|
+
return /* @__PURE__ */ import_react65.default.createElement(
|
|
4000
3886
|
"div",
|
|
4001
3887
|
{
|
|
4002
3888
|
onClick: isDisabled ? void 0 : onClick,
|
|
4003
3889
|
className: `flex items-center p-4 transition-colors ${!isLast ? "" : ""} ${isDisabled ? "opacity-70 cursor-default" : "cursor-pointer hover:bg-neutral-50"}`
|
|
4004
3890
|
},
|
|
4005
|
-
/* @__PURE__ */
|
|
4006
|
-
/* @__PURE__ */
|
|
4007
|
-
/* @__PURE__ */
|
|
3891
|
+
/* @__PURE__ */ import_react65.default.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__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon, size: 16, className: "text-black" })),
|
|
3892
|
+
/* @__PURE__ */ import_react65.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react65.default.createElement("p", { className: "text-[14px] truncate text-black" }, title), /* @__PURE__ */ import_react65.default.createElement("p", { className: `text-[10px] inline-flex items-center ${bg} rounded-full px-2 py-1 ${statusColor} mt-0.5` }, statusText)),
|
|
3893
|
+
/* @__PURE__ */ import_react65.default.createElement("div", { className: "shrink-0 ml-2" }, isLoading ? /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons21.Loading03Icon, size: 20, className: "animate-spin text-black" }) : /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: StatusIcon, size: 20, className: iconColor }))
|
|
4008
3894
|
);
|
|
4009
3895
|
};
|
|
4010
3896
|
var UniversalVerificationPage = ({
|
|
@@ -4017,36 +3903,36 @@ var UniversalVerificationPage = ({
|
|
|
4017
3903
|
onTriggerVerification,
|
|
4018
3904
|
activeLoadingType
|
|
4019
3905
|
}) => {
|
|
4020
|
-
return /* @__PURE__ */
|
|
3906
|
+
return /* @__PURE__ */ import_react65.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 pb-12" }, /* @__PURE__ */ import_react65.default.createElement("div", { className: "mb-6 flex items-center px-1" }, /* @__PURE__ */ import_react65.default.createElement(
|
|
4021
3907
|
"button",
|
|
4022
3908
|
{
|
|
4023
3909
|
onClick: onBack,
|
|
4024
3910
|
className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none"
|
|
4025
3911
|
},
|
|
4026
|
-
/* @__PURE__ */
|
|
3912
|
+
/* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons21.ArrowLeft01Icon, size: 16 }),
|
|
4027
3913
|
" Back"
|
|
4028
|
-
)), /* @__PURE__ */
|
|
3914
|
+
)), /* @__PURE__ */ import_react65.default.createElement("div", { className: "w-full flex flex-col gap-4 mb-8" }, /* @__PURE__ */ import_react65.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react65.default.createElement(
|
|
4029
3915
|
VerificationRow,
|
|
4030
3916
|
{
|
|
4031
|
-
icon:
|
|
3917
|
+
icon: import_core_free_icons21.Mail01Icon,
|
|
4032
3918
|
title: "Email Verification",
|
|
4033
3919
|
status: emailStatus,
|
|
4034
3920
|
isLoading: activeLoadingType === "EMAIL",
|
|
4035
3921
|
onClick: () => onTriggerVerification("EMAIL")
|
|
4036
3922
|
}
|
|
4037
|
-
), /* @__PURE__ */
|
|
3923
|
+
), /* @__PURE__ */ import_react65.default.createElement(
|
|
4038
3924
|
VerificationRow,
|
|
4039
3925
|
{
|
|
4040
|
-
icon:
|
|
3926
|
+
icon: import_core_free_icons21.SmartPhone01Icon,
|
|
4041
3927
|
title: "Phone Verification",
|
|
4042
3928
|
status: phoneStatus,
|
|
4043
3929
|
isLoading: activeLoadingType === "PHONE",
|
|
4044
3930
|
onClick: () => onTriggerVerification("PHONE")
|
|
4045
3931
|
}
|
|
4046
|
-
), /* @__PURE__ */
|
|
3932
|
+
), /* @__PURE__ */ import_react65.default.createElement(
|
|
4047
3933
|
VerificationRow,
|
|
4048
3934
|
{
|
|
4049
|
-
icon:
|
|
3935
|
+
icon: import_core_free_icons21.UserIcon,
|
|
4050
3936
|
title: "Identity Verification",
|
|
4051
3937
|
status: identityStatus,
|
|
4052
3938
|
isLoading: activeLoadingType === "IDENTITY",
|
|
@@ -4057,23 +3943,23 @@ var UniversalVerificationPage = ({
|
|
|
4057
3943
|
};
|
|
4058
3944
|
|
|
4059
3945
|
// src/components/UniversalRewardPage.tsx
|
|
4060
|
-
var
|
|
3946
|
+
var import_react67 = __toESM(require("react"));
|
|
4061
3947
|
var import_axios = __toESM(require("axios"));
|
|
4062
3948
|
var import_react_hot_toast9 = __toESM(require("react-hot-toast"));
|
|
4063
3949
|
var import_react_confetti = __toESM(require("react-confetti"));
|
|
4064
3950
|
var import_react_use = require("react-use");
|
|
4065
|
-
var
|
|
4066
|
-
var
|
|
3951
|
+
var import_react68 = require("@hugeicons/react");
|
|
3952
|
+
var import_core_free_icons22 = require("@hugeicons/core-free-icons");
|
|
4067
3953
|
var formatWeb3Name = (name) => {
|
|
4068
3954
|
if (!name) return "";
|
|
4069
3955
|
return name.toLowerCase().replace(/\b\w/g, (c) => c.toUpperCase());
|
|
4070
3956
|
};
|
|
4071
|
-
var PageSpinner4 = () => /* @__PURE__ */
|
|
3957
|
+
var PageSpinner4 = () => /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex justify-center items-center py-12 w-full" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons22.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
4072
3958
|
var AvatarLogo = ({ src, alt, name, sizeClass = "w-12 h-12" }) => {
|
|
4073
|
-
const [isLoaded, setIsLoaded] = (0,
|
|
3959
|
+
const [isLoaded, setIsLoaded] = (0, import_react67.useState)(false);
|
|
4074
3960
|
const fallbackUrl = `/api/avatar/?name=${encodeURIComponent(name || " ")}&background=ffffff&color=000000&size=200&font-size=0.33`;
|
|
4075
3961
|
const finalSrc = src || fallbackUrl;
|
|
4076
|
-
return /* @__PURE__ */
|
|
3962
|
+
return /* @__PURE__ */ import_react67.default.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__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons22.Loading03Icon, size: 16, className: "animate-spin text-neutral-400 absolute" }), /* @__PURE__ */ import_react67.default.createElement("img", { src: finalSrc, alt, onLoad: () => setIsLoaded(true), className: `w-full h-full object-cover transition-opacity duration-300 ${isLoaded ? "opacity-100" : "opacity-0"}` }));
|
|
4077
3963
|
};
|
|
4078
3964
|
var UniversalRewardPage = ({
|
|
4079
3965
|
leaderboardToday,
|
|
@@ -4088,11 +3974,11 @@ var UniversalRewardPage = ({
|
|
|
4088
3974
|
const onBackHandler = onBack ?? (() => {
|
|
4089
3975
|
if (typeof window !== "undefined") window.history.back();
|
|
4090
3976
|
});
|
|
4091
|
-
const [activeTabIndex, setActiveTabIndex] = (0,
|
|
3977
|
+
const [activeTabIndex, setActiveTabIndex] = (0, import_react67.useState)(1);
|
|
4092
3978
|
const tabs = [{ label: "Today" }, { label: "Week" }, { label: "Month" }];
|
|
4093
|
-
const [selectedReward, setSelectedReward] = (0,
|
|
4094
|
-
const [isClaiming, setIsClaiming] = (0,
|
|
4095
|
-
const [showConfetti, setShowConfetti] = (0,
|
|
3979
|
+
const [selectedReward, setSelectedReward] = (0, import_react67.useState)(null);
|
|
3980
|
+
const [isClaiming, setIsClaiming] = (0, import_react67.useState)(false);
|
|
3981
|
+
const [showConfetti, setShowConfetti] = (0, import_react67.useState)(false);
|
|
4096
3982
|
const getActiveLeaderboard = () => {
|
|
4097
3983
|
if (activeTabIndex === 0) return leaderboardToday || [];
|
|
4098
3984
|
if (activeTabIndex === 1) return leaderboardWeek || [];
|
|
@@ -4123,9 +4009,9 @@ var UniversalRewardPage = ({
|
|
|
4123
4009
|
setIsClaiming(false);
|
|
4124
4010
|
}
|
|
4125
4011
|
};
|
|
4126
|
-
return /* @__PURE__ */
|
|
4012
|
+
return /* @__PURE__ */ import_react67.default.createElement("div", null, /* @__PURE__ */ import_react67.default.createElement("div", { className: "mb-6 flex max-w-3xl w-full mx-auto items-center px-1" }, /* @__PURE__ */ import_react67.default.createElement("button", { onClick: onBackHandler, className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons22.ArrowLeft01Icon, size: 16 }), " Back")), /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react67.default.createElement(ManagedToaster, null), showConfetti && /* @__PURE__ */ import_react67.default.createElement("div", { className: "fixed inset-0 z-200 pointer-events-none" }, /* @__PURE__ */ import_react67.default.createElement(import_react_confetti.default, { width, height, recycle: false, numberOfPieces: 500, gravity: 0.15 })), isLoading ? /* @__PURE__ */ import_react67.default.createElement(PageSpinner4, null) : /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null, /* @__PURE__ */ import_react67.default.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__ */ import_react67.default.createElement("div", { className: "flex flex-col items-center w-1/3 z-10" }, secondPlace ? /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-black text-[10px] mb-2 truncate max-w-full px-1" }, formatWeb3Name(secondPlace.profile.web3Name)), /* @__PURE__ */ import_react67.default.createElement("div", { className: "relative shrink-0 mb-3" }, /* @__PURE__ */ import_react67.default.createElement(AvatarLogo, { src: secondPlace.profile.avatarUrl, alt: secondPlace.profile.username, name: formatWeb3Name(secondPlace.profile.web3Name), sizeClass: "w-14 h-14" }), /* @__PURE__ */ import_react67.default.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__ */ import_react67.default.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__ */ import_react67.default.createElement("span", { className: "text-neutral-800/30 text-2xl " }, "2nd"))) : /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-neutral-200 rounded-t-xl h-24 mt-auto" })), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col items-center w-1/3 z-20 -mt-8" }, firstPlace ? /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-black text-[10px] mb-2 truncate max-w-full px-1" }, formatWeb3Name(firstPlace.profile.web3Name)), /* @__PURE__ */ import_react67.default.createElement("div", { className: "relative shrink-0 mb-3" }, /* @__PURE__ */ import_react67.default.createElement(AvatarLogo, { src: firstPlace.profile.avatarUrl, alt: firstPlace.profile.username, name: formatWeb3Name(firstPlace.profile.web3Name), sizeClass: "w-17 h-17" }), /* @__PURE__ */ import_react67.default.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__ */ import_react67.default.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__ */ import_react67.default.createElement("span", { className: "text-white/40 text-3xl tracking-widest" }, "1st"))) : /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-neutral-200 rounded-t-xl h-32 mt-auto" })), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col items-center w-1/3 z-10" }, thirdPlace ? /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-black text-[10px] mb-2 truncate max-w-full px-1" }, formatWeb3Name(thirdPlace.profile.web3Name)), /* @__PURE__ */ import_react67.default.createElement("div", { className: "relative shrink-0 mb-3" }, /* @__PURE__ */ import_react67.default.createElement(AvatarLogo, { src: thirdPlace.profile.avatarUrl, alt: thirdPlace.profile.username, name: formatWeb3Name(thirdPlace.profile.web3Name), sizeClass: "w-12 h-12" }), /* @__PURE__ */ import_react67.default.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__ */ import_react67.default.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__ */ import_react67.default.createElement("span", { className: "text-neutral-800/30 text-xl " }, "3rd"))) : /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-neutral-200 rounded-t-xl h-20 mt-auto" }))), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center justify-center mb-6 sm:mb-8 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center bg-white rounded-full p-1 sm:p-1.5 max-w-full overflow-x-auto custom-scrollbar " }, tabs.map((tab, idx) => {
|
|
4127
4013
|
const isActive = activeTabIndex === idx;
|
|
4128
|
-
return /* @__PURE__ */
|
|
4014
|
+
return /* @__PURE__ */ import_react67.default.createElement(
|
|
4129
4015
|
"button",
|
|
4130
4016
|
{
|
|
4131
4017
|
key: idx,
|
|
@@ -4134,19 +4020,19 @@ var UniversalRewardPage = ({
|
|
|
4134
4020
|
},
|
|
4135
4021
|
tab.label
|
|
4136
4022
|
);
|
|
4137
|
-
}))), /* @__PURE__ */
|
|
4023
|
+
}))), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-6 w-full" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "bg-white rounded-2xl p-6 " }, /* @__PURE__ */ import_react67.default.createElement("h2", { className: "text-black text-lg mb-4 tracking-tight" }, "Available Tasks"), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col" }, rewards.length === 0 ? /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-neutral-400 py-6 text-center" }, "No rewards available at the moment.") : rewards.map((reward) => {
|
|
4138
4024
|
const statusText = reward.status === "CLAIMED" ? "Claimed" : "Unclaimed";
|
|
4139
|
-
return /* @__PURE__ */
|
|
4025
|
+
return /* @__PURE__ */ import_react67.default.createElement(
|
|
4140
4026
|
"div",
|
|
4141
4027
|
{
|
|
4142
4028
|
key: reward.id,
|
|
4143
4029
|
onClick: () => setSelectedReward(reward),
|
|
4144
4030
|
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"
|
|
4145
4031
|
},
|
|
4146
|
-
/* @__PURE__ */
|
|
4147
|
-
/* @__PURE__ */
|
|
4032
|
+
/* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-10 h-10 shrink-0 rounded-full flex items-center justify-center border border-neutral-200 text-black" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons22.GiftIcon, size: 16 })), /* @__PURE__ */ import_react67.default.createElement("div", { className: "min-w-0 flex-1 flex flex-col items-start gap-0.5 pr-4" }, /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-[13px] text-black truncate w-full" }, reward.title), /* @__PURE__ */ import_react67.default.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))),
|
|
4033
|
+
/* @__PURE__ */ import_react67.default.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1" }, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-[13px] text-black" }, reward.amount))
|
|
4148
4034
|
);
|
|
4149
|
-
}))), remainingLeaderboard.length > 0 && /* @__PURE__ */
|
|
4035
|
+
}))), remainingLeaderboard.length > 0 && /* @__PURE__ */ import_react67.default.createElement("div", { className: "bg-white rounded-2xl p-6 " }, /* @__PURE__ */ import_react67.default.createElement("h2", { className: "text-black text-lg mb-4 tracking-tight" }, "Leaderboard"), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col" }, remainingLeaderboard.map((lb) => /* @__PURE__ */ import_react67.default.createElement("div", { key: lb.profile.username, className: "flex items-center justify-between py-3 min-w-0" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "text-[12px] text-neutral-400 w-4" }, lb.position), /* @__PURE__ */ import_react67.default.createElement(AvatarLogo, { src: lb.profile.avatarUrl, alt: lb.profile.username, name: formatWeb3Name(lb.profile.web3Name), sizeClass: "w-9 h-9" }), /* @__PURE__ */ import_react67.default.createElement("div", { className: "min-w-0 flex-1 flex flex-col" }, /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-[13px] text-black truncate" }, formatWeb3Name(lb.profile.web3Name)), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-[11px] text-neutral-400 truncate" }, "@", lb.profile.username))), /* @__PURE__ */ import_react67.default.createElement("div", { className: "shrink-0 text-[13px] text-black" }, lb.amount))))))), selectedReward && /* @__PURE__ */ import_react67.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "absolute inset-0 bg-black/40", onClick: () => !isClaiming && setSelectedReward(null) }), /* @__PURE__ */ import_react67.default.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__ */ import_react67.default.createElement("div", { className: "flex-1 p-6 flex flex-col items-center text-center mt-2" }, /* @__PURE__ */ import_react67.default.createElement("h2", { className: "text-xl text-black mb-2" }, selectedReward.title), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-[13px] text-neutral-500 mb-6 leading-relaxed" }, selectedReward.description), selectedReward.progressText && /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-full mb-6" }, /* @__PURE__ */ import_react67.default.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__ */ import_react67.default.createElement("div", { className: " w-full rounded-xl p-4 mb-8 flex flex-col items-center" }, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400 uppercase mb-1" }, "Reward Value"), /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-3xl text-black " }, selectedReward.amount)), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-3 w-full" }, /* @__PURE__ */ import_react67.default.createElement(
|
|
4150
4036
|
ThreeDActionButton,
|
|
4151
4037
|
{
|
|
4152
4038
|
onClick: handleClaimReward,
|
|
@@ -4155,7 +4041,7 @@ var UniversalRewardPage = ({
|
|
|
4155
4041
|
className: "w-full"
|
|
4156
4042
|
},
|
|
4157
4043
|
selectedReward.status === "CLAIMED" ? "Already Claimed" : selectedReward.isEligible ? "Claim Reward" : "Not Eligible Yet"
|
|
4158
|
-
), /* @__PURE__ */
|
|
4044
|
+
), /* @__PURE__ */ import_react67.default.createElement(
|
|
4159
4045
|
"button",
|
|
4160
4046
|
{
|
|
4161
4047
|
onClick: () => setSelectedReward(null),
|
|
@@ -4167,11 +4053,11 @@ var UniversalRewardPage = ({
|
|
|
4167
4053
|
};
|
|
4168
4054
|
|
|
4169
4055
|
// src/components/UniversalReferralPage.tsx
|
|
4170
|
-
var
|
|
4056
|
+
var import_react69 = __toESM(require("react"));
|
|
4171
4057
|
var import_react_hot_toast10 = __toESM(require("react-hot-toast"));
|
|
4172
|
-
var
|
|
4173
|
-
var
|
|
4174
|
-
var PageSpinner5 = () => /* @__PURE__ */
|
|
4058
|
+
var import_react70 = require("@hugeicons/react");
|
|
4059
|
+
var import_core_free_icons23 = require("@hugeicons/core-free-icons");
|
|
4060
|
+
var PageSpinner5 = () => /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons23.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
4175
4061
|
var formatWeb3Name2 = (name) => {
|
|
4176
4062
|
if (!name) return "";
|
|
4177
4063
|
return name.toLowerCase().replace(/\b\w/g, (c) => c.toUpperCase());
|
|
@@ -4202,61 +4088,61 @@ var UniversalReferralPage = ({
|
|
|
4202
4088
|
}
|
|
4203
4089
|
};
|
|
4204
4090
|
const AvatarLogo2 = ({ src, alt, name, sizeClass = "w-10 h-10" }) => {
|
|
4205
|
-
const [isLoaded, setIsLoaded] = (0,
|
|
4091
|
+
const [isLoaded, setIsLoaded] = (0, import_react69.useState)(false);
|
|
4206
4092
|
const fallbackUrl = `/api/avatar/?name=${encodeURIComponent(name || " ")}&background=ffffff&color=000000&size=200&font-size=0.33`;
|
|
4207
4093
|
const finalSrc = src || fallbackUrl;
|
|
4208
|
-
return /* @__PURE__ */
|
|
4094
|
+
return /* @__PURE__ */ import_react69.default.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__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons23.Loading03Icon, size: 16, className: "animate-spin text-neutral-400 absolute" }), /* @__PURE__ */ import_react69.default.createElement("img", { src: finalSrc, alt, onLoad: () => setIsLoaded(true), className: `w-full h-full object-cover transition-opacity duration-300 ${isLoaded ? "opacity-100" : "opacity-0"}` }));
|
|
4209
4095
|
};
|
|
4210
|
-
return /* @__PURE__ */
|
|
4096
|
+
return /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react69.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react69.default.createElement("div", { className: "mb-6 flex w-full items-center px-1" }, /* @__PURE__ */ import_react69.default.createElement("button", { onClick: onBackHandler, className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons23.ArrowLeft01Icon, size: 16 }), " Back")), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-3xl bg-white w-full" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-4 mb-2" }, /* @__PURE__ */ import_react69.default.createElement("div", null, /* @__PURE__ */ import_react69.default.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, "Your Referrals"), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-xs text-neutral-500" }, "Invite friends and earn rewards when they verify and activate cards.")), /* @__PURE__ */ import_react69.default.createElement("div", { className: "border border-neutral-200 rounded-xl p-4 flex items-center justify-between mt-2" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400 " }, "Invitation Code"), isLoading && !referralCode ? /* @__PURE__ */ import_react69.default.createElement("div", { className: "h-6 w-24 bg-neutral-50 animate-pulse rounded mt-1" }) : /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-lg text-black tracking-widest" }, referralCode)), /* @__PURE__ */ import_react69.default.createElement(
|
|
4211
4097
|
"button",
|
|
4212
4098
|
{
|
|
4213
4099
|
onClick: handleCopyCode,
|
|
4214
4100
|
disabled: isLoading || !referralCode,
|
|
4215
4101
|
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"
|
|
4216
4102
|
},
|
|
4217
|
-
/* @__PURE__ */
|
|
4218
|
-
)), /* @__PURE__ */
|
|
4103
|
+
/* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons23.Copy01Icon, size: 18 })
|
|
4104
|
+
)), /* @__PURE__ */ import_react69.default.createElement("div", { className: "text-[13px] text-black px-1 mt-2" }, "Total Invited: ", isLoading && !totalCount ? "-" : totalCount)), /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full overflow-hidden" }, isLoading ? /* @__PURE__ */ import_react69.default.createElement(PageSpinner5, null) : /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react69.default.createElement("div", null, referrals.length === 0 ? /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col items-center justify-center py-12 opacity-50" }, /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-xs text-neutral-500 text-center" }, "You haven't referred anyone yet.")) : referrals.map((ref, idx) => /* @__PURE__ */ import_react69.default.createElement(
|
|
4219
4105
|
"div",
|
|
4220
4106
|
{
|
|
4221
4107
|
key: `${ref.profile.username}-${idx}`,
|
|
4222
4108
|
className: "flex items-center justify-between py-4 hover:bg-neutral-50 transition-colors group min-w-0 px-3 -mx-3 rounded-xl"
|
|
4223
4109
|
},
|
|
4224
|
-
/* @__PURE__ */
|
|
4110
|
+
/* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react69.default.createElement(
|
|
4225
4111
|
AvatarLogo2,
|
|
4226
4112
|
{
|
|
4227
4113
|
src: ref.profile.avatarUrl,
|
|
4228
4114
|
alt: ref.profile.username,
|
|
4229
4115
|
name: formatWeb3Name2(ref.profile.web3Name)
|
|
4230
4116
|
}
|
|
4231
|
-
), /* @__PURE__ */
|
|
4232
|
-
/* @__PURE__ */
|
|
4233
|
-
))), /* @__PURE__ */
|
|
4117
|
+
), /* @__PURE__ */ import_react69.default.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-0.5 pr-4" }, /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-[14px] text-black truncate" }, formatWeb3Name2(ref.profile.web3Name)), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-[12px] text-neutral-500 truncate" }, "@", ref.profile.username))),
|
|
4118
|
+
/* @__PURE__ */ import_react69.default.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-[11px] text-neutral-400" }, "Joined"), /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-[12px] text-black" }, formatDate(ref.joinedAt)))
|
|
4119
|
+
))), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center justify-between pt-6 mt-2 " }, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", totalPages === 0 ? 1 : totalPages), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react69.default.createElement(
|
|
4234
4120
|
"button",
|
|
4235
4121
|
{
|
|
4236
4122
|
onClick: () => onPageChange(currentPage - 1),
|
|
4237
4123
|
disabled: currentPage <= 1 || isLoading,
|
|
4238
4124
|
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"
|
|
4239
4125
|
},
|
|
4240
|
-
/* @__PURE__ */
|
|
4241
|
-
), /* @__PURE__ */
|
|
4126
|
+
/* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons23.ArrowLeft01Icon, size: 14 })
|
|
4127
|
+
), /* @__PURE__ */ import_react69.default.createElement(
|
|
4242
4128
|
"button",
|
|
4243
4129
|
{
|
|
4244
4130
|
onClick: () => onPageChange(currentPage + 1),
|
|
4245
4131
|
disabled: currentPage >= totalPages || isLoading || totalPages === 0,
|
|
4246
4132
|
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"
|
|
4247
4133
|
},
|
|
4248
|
-
/* @__PURE__ */
|
|
4134
|
+
/* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons23.ArrowRight01Icon, size: 14 })
|
|
4249
4135
|
)))))));
|
|
4250
4136
|
};
|
|
4251
4137
|
|
|
4252
4138
|
// src/components/UniversalCardActionPage.tsx
|
|
4253
|
-
var
|
|
4139
|
+
var import_react71 = __toESM(require("react"));
|
|
4254
4140
|
var import_react_confetti2 = __toESM(require("react-confetti"));
|
|
4255
4141
|
var import_react_use2 = require("react-use");
|
|
4256
|
-
var
|
|
4257
|
-
var
|
|
4258
|
-
var CheckIcon2 = ({ className = "" }) => /* @__PURE__ */
|
|
4259
|
-
var CrossIcon2 = ({ className = "" }) => /* @__PURE__ */
|
|
4142
|
+
var import_react72 = require("@hugeicons/react");
|
|
4143
|
+
var import_core_free_icons24 = require("@hugeicons/core-free-icons");
|
|
4144
|
+
var CheckIcon2 = ({ className = "" }) => /* @__PURE__ */ import_react71.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react71.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ import_react71.default.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
4145
|
+
var CrossIcon2 = ({ className = "" }) => /* @__PURE__ */ import_react71.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react71.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ import_react71.default.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
4260
4146
|
var formatTierName = (name) => {
|
|
4261
4147
|
if (!name) return "";
|
|
4262
4148
|
return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
|
|
@@ -4297,10 +4183,10 @@ var UniversalCardActionPage = ({
|
|
|
4297
4183
|
if (typeof window !== "undefined") window.history.back();
|
|
4298
4184
|
});
|
|
4299
4185
|
const { width, height } = (0, import_react_use2.useWindowSize)();
|
|
4300
|
-
const [selectedTier, setSelectedTier] = (0,
|
|
4301
|
-
const [intendedAction, setIntendedAction] = (0,
|
|
4302
|
-
const [isProcessing, setIsProcessing] = (0,
|
|
4303
|
-
const [showConfetti, setShowConfetti] = (0,
|
|
4186
|
+
const [selectedTier, setSelectedTier] = (0, import_react71.useState)(null);
|
|
4187
|
+
const [intendedAction, setIntendedAction] = (0, import_react71.useState)(null);
|
|
4188
|
+
const [isProcessing, setIsProcessing] = (0, import_react71.useState)(false);
|
|
4189
|
+
const [showConfetti, setShowConfetti] = (0, import_react71.useState)(false);
|
|
4304
4190
|
const availableTiers = tiers.filter((t) => t.isAvailable || t.acceptPreorder || t.acceptWaitlist);
|
|
4305
4191
|
const handleTierClick = (tier, explicitAction) => {
|
|
4306
4192
|
setSelectedTier(tier);
|
|
@@ -4337,22 +4223,22 @@ var UniversalCardActionPage = ({
|
|
|
4337
4223
|
if (isCurrent && (onWaitlist || hasPreordered)) return "Joined";
|
|
4338
4224
|
return "Join Waitlist";
|
|
4339
4225
|
};
|
|
4340
|
-
return /* @__PURE__ */
|
|
4226
|
+
return /* @__PURE__ */ import_react71.default.createElement("div", { className: "w-full" }, /* @__PURE__ */ import_react71.default.createElement(ManagedToaster, null), showConfetti && /* @__PURE__ */ import_react71.default.createElement("div", { className: "fixed inset-0 z-200 pointer-events-none" }, /* @__PURE__ */ import_react71.default.createElement(import_react_confetti2.default, { width, height, recycle: false, numberOfPieces: 500, gravity: 0.15 })), /* @__PURE__ */ import_react71.default.createElement("div", { className: "mb-6 flex max-w-3xl w-full mx-auto items-center px-1" }, /* @__PURE__ */ import_react71.default.createElement(
|
|
4341
4227
|
"button",
|
|
4342
4228
|
{
|
|
4343
4229
|
onClick: onBackHandler,
|
|
4344
4230
|
className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none"
|
|
4345
4231
|
},
|
|
4346
|
-
/* @__PURE__ */
|
|
4232
|
+
/* @__PURE__ */ import_react71.default.createElement(import_react72.HugeiconsIcon, { icon: import_core_free_icons24.ArrowLeft01Icon, size: 16 }),
|
|
4347
4233
|
" Back"
|
|
4348
|
-
)), /* @__PURE__ */
|
|
4234
|
+
)), /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex flex-col animate-in max-w-5xl w-full mx-auto fade-in duration-300" }, /* @__PURE__ */ import_react71.default.createElement("div", { className: "w-full flex flex-col items-center text-center mb-10 px-4" }, /* @__PURE__ */ import_react71.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-400 block uppercase mb-3" }, cardType, " CARD ACTIVATION"), /* @__PURE__ */ import_react71.default.createElement("h1", { className: "text-2xl sm:text-3xl text-black tracking-tight mb-2" }, "Select Your Tier"), /* @__PURE__ */ import_react71.default.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__ */ import_react71.default.createElement("div", { className: "flex justify-center py-20" }, /* @__PURE__ */ import_react71.default.createElement(import_react72.HugeiconsIcon, { icon: import_core_free_icons24.Loading03Icon, size: 32, className: "animate-spin text-neutral-300" })) : /* @__PURE__ */ import_react71.default.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) => {
|
|
4349
4235
|
const isCurrent = tier.tierName === currentTier;
|
|
4350
4236
|
const isCardDisabled = hasPreordered && !isCurrent;
|
|
4351
4237
|
const isHighlighted = hasPreordered && isCurrent;
|
|
4352
4238
|
const isThisCardLoading = isProcessing && selectedTier?.tierName === tier.tierName;
|
|
4353
4239
|
const isPrimaryDisabled = isCardDisabled || isHighlighted || isThisCardLoading || !tier.acceptPreorder;
|
|
4354
4240
|
const isWaitlistDisabled = !isCurrent || isCurrent && (onWaitlist || hasPreordered) || isThisCardLoading || !tier.acceptWaitlist;
|
|
4355
|
-
return /* @__PURE__ */
|
|
4241
|
+
return /* @__PURE__ */ import_react71.default.createElement(
|
|
4356
4242
|
"div",
|
|
4357
4243
|
{
|
|
4358
4244
|
key: tier.tierName,
|
|
@@ -4361,15 +4247,15 @@ var UniversalCardActionPage = ({
|
|
|
4361
4247
|
|
|
4362
4248
|
`
|
|
4363
4249
|
},
|
|
4364
|
-
/* @__PURE__ */
|
|
4250
|
+
/* @__PURE__ */ import_react71.default.createElement(
|
|
4365
4251
|
"div",
|
|
4366
4252
|
{
|
|
4367
4253
|
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`
|
|
4368
4254
|
}
|
|
4369
4255
|
),
|
|
4370
|
-
isThisCardLoading && /* @__PURE__ */
|
|
4371
|
-
/* @__PURE__ */
|
|
4372
|
-
/* @__PURE__ */
|
|
4256
|
+
isThisCardLoading && /* @__PURE__ */ import_react71.default.createElement("div", { className: "absolute inset-0 z-50 flex items-center justify-center bg-white/40 backdrop-blur-[1px]" }, /* @__PURE__ */ import_react71.default.createElement(import_react72.HugeiconsIcon, { icon: import_core_free_icons24.Loading03Icon, size: 32, className: "animate-spin text-black" })),
|
|
4257
|
+
/* @__PURE__ */ import_react71.default.createElement("div", { className: "mb-6 relative z-10" }, /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex justify-between items-start mb-1" }, /* @__PURE__ */ import_react71.default.createElement("span", { className: "text-black text-sm tracking-widest " }, formatTierName(tier.tierName)), isCurrent && !hasPreordered && /* @__PURE__ */ import_react71.default.createElement("span", { className: "text-[9px] bg-neutral-100 text-neutral-600 px-2 py-1 rounded-full uppercase tracking-wider" }, "Current")), /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex items-baseline gap-1 mt-2" }, /* @__PURE__ */ import_react71.default.createElement("h3", { className: "text-3xl font-light text-black" }, tier.priceUSD === 0 ? "Free" : `$${tier.priceUSD.toFixed(2)}`), tier.priceUSD > 0 && /* @__PURE__ */ import_react71.default.createElement("span", { className: "text-xs text-neutral-500" }, tier.isYearly ? "/ year" : "one-time")), /* @__PURE__ */ import_react71.default.createElement("p", { className: "text-[13px] text-neutral-500 mt-3 min-h-12 leading-relaxed" }, tier.description)),
|
|
4258
|
+
/* @__PURE__ */ import_react71.default.createElement("div", { className: "flex flex-col gap-2.5 mb-6 relative z-10" }, /* @__PURE__ */ import_react71.default.createElement("div", { className: isPrimaryDisabled ? "opacity-50 pointer-events-none" : "" }, /* @__PURE__ */ import_react71.default.createElement(
|
|
4373
4259
|
ThreeDActionButton,
|
|
4374
4260
|
{
|
|
4375
4261
|
disabled: isPrimaryDisabled,
|
|
@@ -4377,7 +4263,7 @@ var UniversalCardActionPage = ({
|
|
|
4377
4263
|
className: "w-full"
|
|
4378
4264
|
},
|
|
4379
4265
|
getPrimaryButtonText(tier)
|
|
4380
|
-
)), /* @__PURE__ */
|
|
4266
|
+
)), /* @__PURE__ */ import_react71.default.createElement(
|
|
4381
4267
|
"button",
|
|
4382
4268
|
{
|
|
4383
4269
|
disabled: isWaitlistDisabled,
|
|
@@ -4389,26 +4275,26 @@ var UniversalCardActionPage = ({
|
|
|
4389
4275
|
},
|
|
4390
4276
|
getWaitlistButtonText(tier)
|
|
4391
4277
|
)),
|
|
4392
|
-
/* @__PURE__ */
|
|
4278
|
+
/* @__PURE__ */ import_react71.default.createElement("div", { className: "flex flex-col gap-3 relative z-10" }, tier.features.map((feature, featureIdx) => {
|
|
4393
4279
|
const isAvailable = feature.value !== false;
|
|
4394
4280
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
4395
|
-
return /* @__PURE__ */
|
|
4281
|
+
return /* @__PURE__ */ import_react71.default.createElement("div", { key: featureIdx, className: "flex items-center gap-3" }, isAvailable ? /* @__PURE__ */ import_react71.default.createElement(CheckIcon2, null) : /* @__PURE__ */ import_react71.default.createElement(CrossIcon2, null), /* @__PURE__ */ import_react71.default.createElement("span", { className: `text-[12px] truncate ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ import_react71.default.createElement("span", { className: "text-neutral-500 ml-1 " }, valueText)));
|
|
4396
4282
|
}))
|
|
4397
4283
|
);
|
|
4398
|
-
}))), selectedTier && intendedAction !== "join_waitlist" && /* @__PURE__ */
|
|
4284
|
+
}))), selectedTier && intendedAction !== "join_waitlist" && /* @__PURE__ */ import_react71.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react71.default.createElement("div", { className: "absolute inset-0 bg-black/40", onClick: () => !isProcessing && setSelectedTier(null) }), /* @__PURE__ */ import_react71.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react71.default.createElement(
|
|
4399
4285
|
"div",
|
|
4400
4286
|
{
|
|
4401
4287
|
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`
|
|
4402
4288
|
}
|
|
4403
|
-
), /* @__PURE__ */
|
|
4289
|
+
), /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 relative z-10" }, /* @__PURE__ */ import_react71.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Confirm Action"), /* @__PURE__ */ import_react71.default.createElement(
|
|
4404
4290
|
"button",
|
|
4405
4291
|
{
|
|
4406
4292
|
disabled: isProcessing,
|
|
4407
4293
|
onClick: () => setSelectedTier(null),
|
|
4408
4294
|
className: "text-neutral-400 hover:text-black transition-colors outline-none disabled:opacity-50"
|
|
4409
4295
|
},
|
|
4410
|
-
/* @__PURE__ */
|
|
4411
|
-
)), /* @__PURE__ */
|
|
4296
|
+
/* @__PURE__ */ import_react71.default.createElement(import_react72.HugeiconsIcon, { icon: import_core_free_icons24.CancelCircleIcon, size: 18 })
|
|
4297
|
+
)), /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 relative z-10" }, /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex flex-col items-center justify-center mb-6" }, /* @__PURE__ */ import_react71.default.createElement("p", { className: "text-2xl text-black mb-1" }, selectedTier.priceUSD === 0 ? "Free" : `$${selectedTier.priceUSD.toFixed(2)}`), /* @__PURE__ */ import_react71.default.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__ */ import_react71.default.createElement("div", { className: "grid grid-cols-1 gap-y-6 mb-8 mt-4" }, /* @__PURE__ */ import_react71.default.createElement("div", null, /* @__PURE__ */ import_react71.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-1" }, "Action"), /* @__PURE__ */ import_react71.default.createElement("span", { className: "text-[13px] text-black " }, intendedAction === "upgrade" ? `Upgrade to ${formatTierName(selectedTier.tierName)}` : `Pre-order Card`)), intendedAction === "pre_order" && selectedTier.priceUSD > 0 && /* @__PURE__ */ import_react71.default.createElement("div", null, /* @__PURE__ */ import_react71.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-1" }, "Payment Notice"), /* @__PURE__ */ import_react71.default.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__ */ import_react71.default.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ import_react71.default.createElement(
|
|
4412
4298
|
ThreeDActionButton,
|
|
4413
4299
|
{
|
|
4414
4300
|
onClick: processAction,
|
|
@@ -4416,7 +4302,7 @@ var UniversalCardActionPage = ({
|
|
|
4416
4302
|
className: "w-full"
|
|
4417
4303
|
},
|
|
4418
4304
|
"Confirm & Proceed"
|
|
4419
|
-
), /* @__PURE__ */
|
|
4305
|
+
), /* @__PURE__ */ import_react71.default.createElement(
|
|
4420
4306
|
"button",
|
|
4421
4307
|
{
|
|
4422
4308
|
disabled: isProcessing,
|
|
@@ -4424,7 +4310,7 @@ var UniversalCardActionPage = ({
|
|
|
4424
4310
|
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"
|
|
4425
4311
|
},
|
|
4426
4312
|
"Cancel"
|
|
4427
|
-
))))), selectedTier && intendedAction === "join_waitlist" && /* @__PURE__ */
|
|
4313
|
+
))))), selectedTier && intendedAction === "join_waitlist" && /* @__PURE__ */ import_react71.default.createElement(
|
|
4428
4314
|
ConfirmationDialog,
|
|
4429
4315
|
{
|
|
4430
4316
|
isOpen: true,
|
|
@@ -4440,24 +4326,24 @@ var UniversalCardActionPage = ({
|
|
|
4440
4326
|
};
|
|
4441
4327
|
|
|
4442
4328
|
// src/components/CardCreationDialog.tsx
|
|
4443
|
-
var
|
|
4329
|
+
var import_react73 = __toESM(require("react"));
|
|
4444
4330
|
var import_axios2 = __toESM(require("axios"));
|
|
4445
4331
|
var import_react_hot_toast11 = __toESM(require("react-hot-toast"));
|
|
4446
|
-
var
|
|
4447
|
-
var
|
|
4448
|
-
var CheckIcon3 = ({ className = "" }) => /* @__PURE__ */
|
|
4449
|
-
var CrossIcon3 = ({ className = "" }) => /* @__PURE__ */
|
|
4332
|
+
var import_react74 = require("@hugeicons/react");
|
|
4333
|
+
var import_core_free_icons25 = require("@hugeicons/core-free-icons");
|
|
4334
|
+
var CheckIcon3 = ({ className = "" }) => /* @__PURE__ */ import_react73.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react73.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ import_react73.default.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
4335
|
+
var CrossIcon3 = ({ className = "" }) => /* @__PURE__ */ import_react73.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react73.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ import_react73.default.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
4450
4336
|
var formatTierName2 = (name) => {
|
|
4451
4337
|
if (!name) return "";
|
|
4452
4338
|
return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
|
|
4453
4339
|
};
|
|
4454
4340
|
var CardCreationDialog = ({ isOpen, onClose, onSuccess }) => {
|
|
4455
|
-
const [step, setStep] = (0,
|
|
4456
|
-
const [activationCode, setActivationCode] = (0,
|
|
4457
|
-
const [isProcessing, setIsProcessing] = (0,
|
|
4458
|
-
const [cardConfig, setCardConfig] = (0,
|
|
4459
|
-
const [useKyc, setUseKyc] = (0,
|
|
4460
|
-
const [agreedToTerms, setAgreedToTerms] = (0,
|
|
4341
|
+
const [step, setStep] = (0, import_react73.useState)("INPUT");
|
|
4342
|
+
const [activationCode, setActivationCode] = (0, import_react73.useState)("");
|
|
4343
|
+
const [isProcessing, setIsProcessing] = (0, import_react73.useState)(false);
|
|
4344
|
+
const [cardConfig, setCardConfig] = (0, import_react73.useState)(null);
|
|
4345
|
+
const [useKyc, setUseKyc] = (0, import_react73.useState)(true);
|
|
4346
|
+
const [agreedToTerms, setAgreedToTerms] = (0, import_react73.useState)(false);
|
|
4461
4347
|
if (!isOpen) return null;
|
|
4462
4348
|
const handleVerifyCode = async (e) => {
|
|
4463
4349
|
e.preventDefault();
|
|
@@ -4504,15 +4390,15 @@ var CardCreationDialog = ({ isOpen, onClose, onSuccess }) => {
|
|
|
4504
4390
|
const currentFxFeeObj = cardConfig ? useKyc ? cardConfig.fxFee : cardConfig.fxFeeIfKycSkipped : null;
|
|
4505
4391
|
const fxFeeDisplay = currentFxFeeObj ? `$${currentFxFeeObj.fixedUSD} + ${currentFxFeeObj.percentage}%` : "Standard";
|
|
4506
4392
|
const instantCashback = cardConfig?.instantCashbackAmount || 0;
|
|
4507
|
-
return /* @__PURE__ */
|
|
4393
|
+
return /* @__PURE__ */ import_react73.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "absolute inset-0 bg-black/40", onClick: () => !isProcessing && onClose() }), /* @__PURE__ */ import_react73.default.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__ */ import_react73.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 relative z-10" }, /* @__PURE__ */ import_react73.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, step === "INPUT" ? "Activate Card" : "Configure Your Card"), /* @__PURE__ */ import_react73.default.createElement(
|
|
4508
4394
|
"button",
|
|
4509
4395
|
{
|
|
4510
4396
|
disabled: isProcessing,
|
|
4511
4397
|
onClick: onClose,
|
|
4512
4398
|
className: "text-neutral-400 hover:text-black transition-colors outline-none disabled:opacity-50"
|
|
4513
4399
|
},
|
|
4514
|
-
/* @__PURE__ */
|
|
4515
|
-
)), /* @__PURE__ */
|
|
4400
|
+
/* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons25.CancelCircleIcon, size: 18 })
|
|
4401
|
+
)), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-2 relative z-10" }, step === "INPUT" && /* @__PURE__ */ import_react73.default.createElement("div", { className: "animate-in fade-in duration-300" }, /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-neutral-500 mb-6" }, "Enter your secure invitation or activation code to begin the provisioning process."), /* @__PURE__ */ import_react73.default.createElement("form", { onSubmit: handleVerifyCode, className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react73.default.createElement(
|
|
4516
4402
|
TextInput,
|
|
4517
4403
|
{
|
|
4518
4404
|
label: "Activation Code",
|
|
@@ -4521,7 +4407,7 @@ var CardCreationDialog = ({ isOpen, onClose, onSuccess }) => {
|
|
|
4521
4407
|
placeholder: "Code",
|
|
4522
4408
|
disabled: isProcessing
|
|
4523
4409
|
}
|
|
4524
|
-
), /* @__PURE__ */
|
|
4410
|
+
), /* @__PURE__ */ import_react73.default.createElement(
|
|
4525
4411
|
ThreeDActionButton,
|
|
4526
4412
|
{
|
|
4527
4413
|
type: "submit",
|
|
@@ -4530,19 +4416,19 @@ var CardCreationDialog = ({ isOpen, onClose, onSuccess }) => {
|
|
|
4530
4416
|
className: "w-full mt-2"
|
|
4531
4417
|
},
|
|
4532
4418
|
"Verify Code"
|
|
4533
|
-
))), step === "CONFIG" && cardConfig && /* @__PURE__ */
|
|
4419
|
+
))), step === "CONFIG" && cardConfig && /* @__PURE__ */ import_react73.default.createElement("div", { className: "animate-in fade-in slide-in-from-right-4 duration-300 flex flex-col gap-5" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "relative bg-white rounded-xl p-5 overflow-hidden flex flex-col" }, /* @__PURE__ */ import_react73.default.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__ */ import_react73.default.createElement("div", { className: "flex justify-between items-start mb-2 relative z-10" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-black text-sm tracking-widest " }, cardConfig.name || `${formatTierName2(cardConfig.cardTier)} Card`), /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[10px] tracking-widest px-2.5 py-1 rounded-full bg-white text-black uppercase" }, cardConfig.cardBrand || "VISA")), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-baseline justify-between mt-2 relative z-10 flex-wrap gap-2" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ import_react73.default.createElement("h3", { className: "text-3xl font-light text-black" }, currentPrice === 0 ? "Free" : `$${currentPrice.toFixed(2)}`), currentPrice > 0 && /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-xs text-neutral-500" }, "issuance")), instantCashback > 0 && /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[11px] text-white bg-[#143731] px-2.5 py-1 rounded-full" }, "+$", instantCashback.toFixed(2), " Instant Cashback")), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-[12px] text-neutral-500 mt-2 leading-relaxed relative z-10" }, currentDescription || "Premium global spending card.")), canSkipKyc && /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center justify-between p-3.5 border border-neutral-200 rounded-xl bg-white" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "pr-4" }, /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-[13px] text-black mb-0.5" }, "Use Verified Identity (KYC)"), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-[11px] text-neutral-500 leading-snug" }, "Turn off to issue card anonymously via synthetic proxy.")), /* @__PURE__ */ import_react73.default.createElement(
|
|
4534
4420
|
"button",
|
|
4535
4421
|
{
|
|
4536
4422
|
type: "button",
|
|
4537
4423
|
onClick: () => setUseKyc(!useKyc),
|
|
4538
4424
|
className: `relative w-11 h-6 rounded-full transition-colors duration-300 shrink-0 ${useKyc ? "bg-black" : "bg-neutral-200"}`
|
|
4539
4425
|
},
|
|
4540
|
-
/* @__PURE__ */
|
|
4541
|
-
)), /* @__PURE__ */
|
|
4426
|
+
/* @__PURE__ */ import_react73.default.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"}` })
|
|
4427
|
+
)), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-3 bg-neutral-50 p-4 rounded-xl" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex justify-between items-center" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[10px] tracking-wider text-neutral-500 uppercase" }, "Balance Limit"), /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[12px] text-black" }, currentLimit)), /* @__PURE__ */ import_react73.default.createElement("div", { className: "w-full h-px bg-neutral-200/60" }), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex justify-between items-center" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[10px] tracking-wider text-neutral-500 uppercase" }, "Cashback Rate"), /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[12px] text-black" }, currentCashbackRate)), /* @__PURE__ */ import_react73.default.createElement("div", { className: "w-full h-px bg-neutral-200/60" }), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex justify-between items-center" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[10px] tracking-wider text-neutral-500 uppercase" }, "FX Fee"), /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[12px] text-black" }, fxFeeDisplay))), cardConfig.features && cardConfig.features.length > 0 && /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-2.5 my-1" }, cardConfig.features.map((feature, idx) => {
|
|
4542
4428
|
const isAvailable = feature.value !== false;
|
|
4543
4429
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
4544
|
-
return /* @__PURE__ */
|
|
4545
|
-
})), /* @__PURE__ */
|
|
4430
|
+
return /* @__PURE__ */ import_react73.default.createElement("div", { key: idx, className: "flex items-center gap-3" }, isAvailable ? /* @__PURE__ */ import_react73.default.createElement(CheckIcon3, null) : /* @__PURE__ */ import_react73.default.createElement(CrossIcon3, null), /* @__PURE__ */ import_react73.default.createElement("span", { className: `text-[12px] truncate ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-neutral-500 ml-1" }, valueText)));
|
|
4431
|
+
})), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-start gap-3 mt-1" }, /* @__PURE__ */ import_react73.default.createElement(
|
|
4546
4432
|
"input",
|
|
4547
4433
|
{
|
|
4548
4434
|
type: "checkbox",
|
|
@@ -4551,7 +4437,7 @@ var CardCreationDialog = ({ isOpen, onClose, onSuccess }) => {
|
|
|
4551
4437
|
onChange: (e) => setAgreedToTerms(e.target.checked),
|
|
4552
4438
|
className: "mt-0.5 w-4 h-4 bg-white border-neutral-300 rounded text-black focus:ring-black cursor-pointer shrink-0"
|
|
4553
4439
|
}
|
|
4554
|
-
), /* @__PURE__ */
|
|
4440
|
+
), /* @__PURE__ */ import_react73.default.createElement("label", { htmlFor: "card-terms", className: "text-[11px] text-neutral-500 cursor-pointer leading-snug" }, "I agree to the ", /* @__PURE__ */ import_react73.default.createElement("a", { href: "https://aeona.finance/terms", target: "_blank", className: "text-black underline" }, "Terms of Service"), " and ", /* @__PURE__ */ import_react73.default.createElement("a", { href: "https://aeona.finance/privacy", target: "_blank", className: "text-black underline" }, "Privacy Policy"), " governing card issuance.")), /* @__PURE__ */ import_react73.default.createElement("div", { className: "bg-neutral-50 rounded-lg p-3" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-1 uppercase" }, "Payment Notice"), /* @__PURE__ */ import_react73.default.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__ */ import_react73.default.createElement("div", { className: "mt-1" }, /* @__PURE__ */ import_react73.default.createElement(
|
|
4555
4441
|
ThreeDActionButton,
|
|
4556
4442
|
{
|
|
4557
4443
|
onClick: handleCreateCard,
|
|
@@ -4562,6 +4448,84 @@ var CardCreationDialog = ({ isOpen, onClose, onSuccess }) => {
|
|
|
4562
4448
|
"Create Card"
|
|
4563
4449
|
))))));
|
|
4564
4450
|
};
|
|
4451
|
+
|
|
4452
|
+
// src/components/PinDialerBottomSheet.tsx
|
|
4453
|
+
var import_react75 = __toESM(require("react"));
|
|
4454
|
+
var import_react76 = require("@hugeicons/react");
|
|
4455
|
+
var import_core_free_icons26 = require("@hugeicons/core-free-icons");
|
|
4456
|
+
var PinDialerBottomSheet = ({
|
|
4457
|
+
isOpen,
|
|
4458
|
+
title = "Action Required",
|
|
4459
|
+
isVerifying = false,
|
|
4460
|
+
onClose,
|
|
4461
|
+
onComplete
|
|
4462
|
+
}) => {
|
|
4463
|
+
const [pin, setPin] = (0, import_react75.useState)("");
|
|
4464
|
+
(0, import_react75.useEffect)(() => {
|
|
4465
|
+
setPin("");
|
|
4466
|
+
}, [isOpen]);
|
|
4467
|
+
const handlePinPress = (value) => {
|
|
4468
|
+
if (isVerifying) return;
|
|
4469
|
+
if (value === "del") {
|
|
4470
|
+
setPin((prev) => prev.slice(0, -1));
|
|
4471
|
+
return;
|
|
4472
|
+
}
|
|
4473
|
+
if (pin.length < 4) {
|
|
4474
|
+
const newPin = pin + value;
|
|
4475
|
+
setPin(newPin);
|
|
4476
|
+
if (newPin.length === 4) {
|
|
4477
|
+
onComplete(newPin);
|
|
4478
|
+
}
|
|
4479
|
+
}
|
|
4480
|
+
};
|
|
4481
|
+
if (!isOpen) return null;
|
|
4482
|
+
return /* @__PURE__ */ import_react75.default.createElement("div", { className: "fixed inset-0 z-150 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react75.default.createElement(
|
|
4483
|
+
"div",
|
|
4484
|
+
{
|
|
4485
|
+
className: "absolute inset-0 bg-black/40 animate-in fade-in duration-200",
|
|
4486
|
+
onClick: () => {
|
|
4487
|
+
if (!isVerifying) onClose();
|
|
4488
|
+
}
|
|
4489
|
+
}
|
|
4490
|
+
), /* @__PURE__ */ import_react75.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react75.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ import_react75.default.createElement("h3", { className: "text-[16px] text-black tracking-tight" }, title), /* @__PURE__ */ import_react75.default.createElement(
|
|
4491
|
+
"button",
|
|
4492
|
+
{
|
|
4493
|
+
onClick: () => {
|
|
4494
|
+
if (!isVerifying) onClose();
|
|
4495
|
+
},
|
|
4496
|
+
className: "text-neutral-400 hover:text-black transition-colors outline-none"
|
|
4497
|
+
},
|
|
4498
|
+
/* @__PURE__ */ import_react75.default.createElement(import_react76.HugeiconsIcon, { icon: import_core_free_icons26.CancelCircleIcon, size: 20 })
|
|
4499
|
+
)), /* @__PURE__ */ import_react75.default.createElement("div", { className: "flex flex-col px-6 pb-8 pt-2 relative" }, /* @__PURE__ */ import_react75.default.createElement("div", { className: "flex justify-center gap-4 mb-8" }, [0, 1, 2, 3].map((i) => /* @__PURE__ */ import_react75.default.createElement(
|
|
4500
|
+
"div",
|
|
4501
|
+
{
|
|
4502
|
+
key: i,
|
|
4503
|
+
className: `w-2 h-2 rounded-full transition-colors duration-200 ${pin.length > i ? "bg-black" : "bg-neutral-200"}`
|
|
4504
|
+
}
|
|
4505
|
+
))), isVerifying && /* @__PURE__ */ import_react75.default.createElement("div", { className: "absolute inset-0 bg-white/80 backdrop-blur-sm z-10 flex items-center justify-center rounded-b-2xl" }, /* @__PURE__ */ import_react75.default.createElement(import_react76.HugeiconsIcon, { icon: import_core_free_icons26.Loading03Icon, size: 28, className: "animate-spin text-black" })), /* @__PURE__ */ import_react75.default.createElement("div", { className: "grid grid-cols-3 gap-y-4 gap-x-6 max-w-60 mx-auto" }, [1, 2, 3, 4, 5, 6, 7, 8, 9].map((num) => /* @__PURE__ */ import_react75.default.createElement(
|
|
4506
|
+
"button",
|
|
4507
|
+
{
|
|
4508
|
+
key: num,
|
|
4509
|
+
onClick: () => handlePinPress(num),
|
|
4510
|
+
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"
|
|
4511
|
+
},
|
|
4512
|
+
num
|
|
4513
|
+
)), /* @__PURE__ */ import_react75.default.createElement("div", null), " ", /* @__PURE__ */ import_react75.default.createElement(
|
|
4514
|
+
"button",
|
|
4515
|
+
{
|
|
4516
|
+
onClick: () => handlePinPress(0),
|
|
4517
|
+
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"
|
|
4518
|
+
},
|
|
4519
|
+
"0"
|
|
4520
|
+
), /* @__PURE__ */ import_react75.default.createElement(
|
|
4521
|
+
"button",
|
|
4522
|
+
{
|
|
4523
|
+
onClick: () => handlePinPress("del"),
|
|
4524
|
+
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"
|
|
4525
|
+
},
|
|
4526
|
+
/* @__PURE__ */ import_react75.default.createElement(import_react76.HugeiconsIcon, { icon: import_core_free_icons26.LessThanIcon, size: 20 })
|
|
4527
|
+
)))));
|
|
4528
|
+
};
|
|
4565
4529
|
// Annotate the CommonJS export names for ESM import in node:
|
|
4566
4530
|
0 && (module.exports = {
|
|
4567
4531
|
AppBento2,
|
|
@@ -4586,6 +4550,7 @@ var CardCreationDialog = ({ isOpen, onClose, onSuccess }) => {
|
|
|
4586
4550
|
MobileNav,
|
|
4587
4551
|
NumberInput,
|
|
4588
4552
|
PageSpinner,
|
|
4553
|
+
PinDialerBottomSheet,
|
|
4589
4554
|
PipleAuth,
|
|
4590
4555
|
PlatformFeatures,
|
|
4591
4556
|
PortfolioHero,
|