@retinalabsllc/zairusjs 14.0.10 → 14.0.15
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 +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +359 -412
- package/dist/index.mjs +256 -309
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1890,9 +1890,10 @@ var UniversalWalletPage = ({
|
|
|
1890
1890
|
};
|
|
1891
1891
|
|
|
1892
1892
|
// src/components/UniversalCardPage.tsx
|
|
1893
|
-
var
|
|
1894
|
-
var
|
|
1895
|
-
var
|
|
1893
|
+
var import_react33 = __toESM(require("react"));
|
|
1894
|
+
var import_navigation4 = require("next/navigation");
|
|
1895
|
+
var import_react34 = require("@hugeicons/react");
|
|
1896
|
+
var import_core_free_icons12 = require("@hugeicons/core-free-icons");
|
|
1896
1897
|
|
|
1897
1898
|
// src/components/ConfirmationDialog.tsx
|
|
1898
1899
|
var import_react29 = __toESM(require("react"));
|
|
@@ -2013,70 +2014,32 @@ var PinDialerBottomSheet = ({
|
|
|
2013
2014
|
)))));
|
|
2014
2015
|
};
|
|
2015
2016
|
|
|
2016
|
-
// src/components/CardAction.tsx
|
|
2017
|
-
var import_react33 = __toESM(require("react"));
|
|
2018
|
-
var import_react34 = require("@hugeicons/react");
|
|
2019
|
-
var import_core_free_icons12 = require("@hugeicons/core-free-icons");
|
|
2020
|
-
var CardActionDialog = ({
|
|
2021
|
-
isOpen,
|
|
2022
|
-
card,
|
|
2023
|
-
actionType,
|
|
2024
|
-
onClose,
|
|
2025
|
-
onProceed
|
|
2026
|
-
}) => {
|
|
2027
|
-
if (!isOpen || !card) return null;
|
|
2028
|
-
const title = actionType === "ACTIVATE" ? "Activate Card" : "Create New Card";
|
|
2029
|
-
const description = actionType === "ACTIVATE" ? `You are about to activate your ${card.type.toLowerCase()} card. Once activated, you can view details and set limits.` : `Your current ${card.type.toLowerCase()} card is ${card.status.toLowerCase()}. You need to provision a new one to continue.`;
|
|
2030
|
-
return /* @__PURE__ */ import_react33.default.createElement("div", { className: "fixed inset-0 z-150 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react33.default.createElement(
|
|
2031
|
-
"div",
|
|
2032
|
-
{
|
|
2033
|
-
className: "absolute inset-0 bg-black/40 animate-in fade-in duration-200",
|
|
2034
|
-
onClick: onClose
|
|
2035
|
-
}
|
|
2036
|
-
), /* @__PURE__ */ import_react33.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_react33.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons12.CreditCardIcon, size: 20, className: "text-black" }), /* @__PURE__ */ import_react33.default.createElement("h3", { className: "text-[16px] text-black tracking-tight" }, title)), /* @__PURE__ */ import_react33.default.createElement(
|
|
2037
|
-
"button",
|
|
2038
|
-
{
|
|
2039
|
-
onClick: onClose,
|
|
2040
|
-
className: "text-neutral-400 hover:text-black transition-colors outline-none"
|
|
2041
|
-
},
|
|
2042
|
-
/* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons12.CancelCircleIcon, size: 20 })
|
|
2043
|
-
)), /* @__PURE__ */ import_react33.default.createElement("div", { className: "p-6 text-center" }, /* @__PURE__ */ import_react33.default.createElement("p", { className: "text-[13px] text-neutral-500 leading-relaxed mb-6" }, description), /* @__PURE__ */ import_react33.default.createElement(
|
|
2044
|
-
"button",
|
|
2045
|
-
{
|
|
2046
|
-
onClick: onProceed,
|
|
2047
|
-
className: "w-full py-3.5 bg-black text-white text-[13px] rounded-xl hover:bg-neutral-800 transition-colors outline-none active:scale-95"
|
|
2048
|
-
},
|
|
2049
|
-
actionType === "ACTIVATE" ? "Activate Now" : "Create Card"
|
|
2050
|
-
))));
|
|
2051
|
-
};
|
|
2052
|
-
|
|
2053
2017
|
// src/components/UniversalCardPage.tsx
|
|
2054
2018
|
var UniversalCardPage = ({
|
|
2055
2019
|
cards = [],
|
|
2020
|
+
actionPath = "/app/cards/action/",
|
|
2056
2021
|
onReveal,
|
|
2057
2022
|
onFreeze,
|
|
2058
2023
|
onSetLimits,
|
|
2059
|
-
onDelete
|
|
2060
|
-
onCardAction
|
|
2024
|
+
onDelete
|
|
2061
2025
|
}) => {
|
|
2062
|
-
const
|
|
2026
|
+
const router = (0, import_navigation4.useRouter)();
|
|
2027
|
+
const [activeTabIndex, setActiveTabIndex] = (0, import_react33.useState)(0);
|
|
2063
2028
|
const activeCard = cards[activeTabIndex];
|
|
2064
|
-
(0,
|
|
2029
|
+
(0, import_react33.useEffect)(() => {
|
|
2065
2030
|
setIsFlipped(false);
|
|
2066
2031
|
setIsRevealed(false);
|
|
2067
2032
|
}, [activeTabIndex]);
|
|
2068
|
-
const [isFlipped, setIsFlipped] = (0,
|
|
2069
|
-
const [isBgLoaded, setIsBgLoaded] = (0,
|
|
2070
|
-
const [isRevealed, setIsRevealed] = (0,
|
|
2071
|
-
const [isRevealing, setIsRevealing] = (0,
|
|
2072
|
-
const [isFreezing, setIsFreezing] = (0,
|
|
2073
|
-
const [isOverlayActionLoading, setIsOverlayActionLoading] = (0,
|
|
2074
|
-
const [showDeleteDialog, setShowDeleteDialog] = (0,
|
|
2075
|
-
const [isDeleting, setIsDeleting] = (0,
|
|
2076
|
-
const [showPinDialer, setShowPinDialer] = (0,
|
|
2077
|
-
|
|
2078
|
-
const [cardActionType, setCardActionType] = (0, import_react35.useState)("ACTIVATE");
|
|
2079
|
-
(0, import_react35.useEffect)(() => {
|
|
2033
|
+
const [isFlipped, setIsFlipped] = (0, import_react33.useState)(false);
|
|
2034
|
+
const [isBgLoaded, setIsBgLoaded] = (0, import_react33.useState)(false);
|
|
2035
|
+
const [isRevealed, setIsRevealed] = (0, import_react33.useState)(false);
|
|
2036
|
+
const [isRevealing, setIsRevealing] = (0, import_react33.useState)(false);
|
|
2037
|
+
const [isFreezing, setIsFreezing] = (0, import_react33.useState)(false);
|
|
2038
|
+
const [isOverlayActionLoading, setIsOverlayActionLoading] = (0, import_react33.useState)(false);
|
|
2039
|
+
const [showDeleteDialog, setShowDeleteDialog] = (0, import_react33.useState)(false);
|
|
2040
|
+
const [isDeleting, setIsDeleting] = (0, import_react33.useState)(false);
|
|
2041
|
+
const [showPinDialer, setShowPinDialer] = (0, import_react33.useState)(false);
|
|
2042
|
+
(0, import_react33.useEffect)(() => {
|
|
2080
2043
|
setIsBgLoaded(false);
|
|
2081
2044
|
if (!activeCard?.cardBgSrc) return;
|
|
2082
2045
|
const img = new Image();
|
|
@@ -2085,7 +2048,7 @@ var UniversalCardPage = ({
|
|
|
2085
2048
|
setTimeout(() => setIsBgLoaded(true), 300);
|
|
2086
2049
|
};
|
|
2087
2050
|
}, [activeCard?.cardBgSrc]);
|
|
2088
|
-
if (!activeCard) return /* @__PURE__ */
|
|
2051
|
+
if (!activeCard) return /* @__PURE__ */ import_react33.default.createElement("div", { className: "text-center p-8 text-neutral-500" }, "No cards available");
|
|
2089
2052
|
const isActivated = activeCard.status === "ACTIVATED";
|
|
2090
2053
|
const isFrozen = activeCard.status === "FROZEN";
|
|
2091
2054
|
const isUnactivated = activeCard.status === "UNACTIVATED";
|
|
@@ -2132,10 +2095,6 @@ var UniversalCardPage = ({
|
|
|
2132
2095
|
setIsOverlayActionLoading(false);
|
|
2133
2096
|
}, 800);
|
|
2134
2097
|
};
|
|
2135
|
-
const handleOverlayActionClick = (type) => {
|
|
2136
|
-
setCardActionType(type);
|
|
2137
|
-
setShowCardActionDialog(true);
|
|
2138
|
-
};
|
|
2139
2098
|
const confirmDelete = async () => {
|
|
2140
2099
|
setIsDeleting(true);
|
|
2141
2100
|
setTimeout(() => {
|
|
@@ -2151,9 +2110,9 @@ var UniversalCardPage = ({
|
|
|
2151
2110
|
const displayCardNumber = isRevealed ? activeCard.cardNumber : `XXXX XXXX XXXX ${activeCard.cardNumber.slice(-4)}`;
|
|
2152
2111
|
const displayExpiry = isRevealed ? activeCard.expiry : "XX/XX";
|
|
2153
2112
|
const displayCvv = isRevealed ? activeCard.cvv : "XXX";
|
|
2154
|
-
return /* @__PURE__ */
|
|
2113
|
+
return /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, cards.length > 1 && /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex items-center justify-center mb-6 w-full px-2" }, /* @__PURE__ */ import_react33.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 " }, cards.map((tab, idx) => {
|
|
2155
2114
|
const isActive = activeTabIndex === idx;
|
|
2156
|
-
return /* @__PURE__ */
|
|
2115
|
+
return /* @__PURE__ */ import_react33.default.createElement(
|
|
2157
2116
|
"button",
|
|
2158
2117
|
{
|
|
2159
2118
|
key: tab.id,
|
|
@@ -2162,7 +2121,7 @@ var UniversalCardPage = ({
|
|
|
2162
2121
|
},
|
|
2163
2122
|
formatTabLabel(tab.type)
|
|
2164
2123
|
);
|
|
2165
|
-
}))), /* @__PURE__ */
|
|
2124
|
+
}))), /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-full pt-2 pb-2 flex justify-center", style: { perspective: "1000px" } }, /* @__PURE__ */ import_react33.default.createElement(
|
|
2166
2125
|
"div",
|
|
2167
2126
|
{
|
|
2168
2127
|
onClick: () => {
|
|
@@ -2175,28 +2134,28 @@ var UniversalCardPage = ({
|
|
|
2175
2134
|
transform: isFlipped ? "rotateY(180deg)" : "rotateY(0deg)"
|
|
2176
2135
|
}
|
|
2177
2136
|
},
|
|
2178
|
-
!isBgLoaded && /* @__PURE__ */
|
|
2179
|
-
!isActivated && isBgLoaded && /* @__PURE__ */
|
|
2137
|
+
!isBgLoaded && /* @__PURE__ */ import_react33.default.createElement("div", { className: "absolute inset-0 w-full h-full bg-white rounded-2xl flex items-center justify-center z-50 " }, /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons12.Loading03Icon, size: 28, className: "animate-spin text-black" })),
|
|
2138
|
+
!isActivated && isBgLoaded && /* @__PURE__ */ import_react33.default.createElement("div", { className: "absolute inset-0 z-40 w-full h-full rounded-2xl backdrop-blur-[2px] flex flex-col items-center justify-center ", style: { transform: "translateZ(1px)" } }, isUnactivated && /* @__PURE__ */ import_react33.default.createElement(
|
|
2180
2139
|
"button",
|
|
2181
2140
|
{
|
|
2182
2141
|
onClick: (e) => {
|
|
2183
2142
|
e.stopPropagation();
|
|
2184
|
-
|
|
2143
|
+
router.push(`${actionPath}${activeCard.id}`);
|
|
2185
2144
|
},
|
|
2186
2145
|
className: "px-6 py-2 bg-white/25 text-white text-[11px] rounded-full transition-all outline-none active:scale-95"
|
|
2187
2146
|
},
|
|
2188
2147
|
"Activate Card"
|
|
2189
|
-
), isDead && /* @__PURE__ */
|
|
2148
|
+
), isDead && /* @__PURE__ */ import_react33.default.createElement(
|
|
2190
2149
|
"button",
|
|
2191
2150
|
{
|
|
2192
2151
|
onClick: (e) => {
|
|
2193
2152
|
e.stopPropagation();
|
|
2194
|
-
|
|
2153
|
+
router.push(`${actionPath}${activeCard.id}`);
|
|
2195
2154
|
},
|
|
2196
2155
|
className: "px-6 py-2 bg-white/25 text-white text-[11px] rounded-full transition-all outline-none active:scale-95"
|
|
2197
2156
|
},
|
|
2198
2157
|
"Create Card"
|
|
2199
|
-
), isFrozen && /* @__PURE__ */
|
|
2158
|
+
), isFrozen && /* @__PURE__ */ import_react33.default.createElement(
|
|
2200
2159
|
"button",
|
|
2201
2160
|
{
|
|
2202
2161
|
onClick: (e) => {
|
|
@@ -2206,24 +2165,24 @@ var UniversalCardPage = ({
|
|
|
2206
2165
|
disabled: isOverlayActionLoading,
|
|
2207
2166
|
className: "px-6 py-2.5 bg-white/35 text-white text-[12px] rounded-full transition-all outline-none active:scale-95 flex items-center gap-2 disabled:opacity-80"
|
|
2208
2167
|
},
|
|
2209
|
-
isOverlayActionLoading ? /* @__PURE__ */
|
|
2168
|
+
isOverlayActionLoading ? /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons12.Loading03Icon, size: 16, className: "animate-spin" }) : "Unfreeze Card"
|
|
2210
2169
|
)),
|
|
2211
|
-
/* @__PURE__ */
|
|
2170
|
+
/* @__PURE__ */ import_react33.default.createElement(
|
|
2212
2171
|
"div",
|
|
2213
2172
|
{
|
|
2214
2173
|
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"}`,
|
|
2215
2174
|
style: { backfaceVisibility: "hidden" }
|
|
2216
2175
|
},
|
|
2217
|
-
/* @__PURE__ */
|
|
2176
|
+
/* @__PURE__ */ import_react33.default.createElement(
|
|
2218
2177
|
"div",
|
|
2219
2178
|
{
|
|
2220
2179
|
className: "absolute inset-0 bg-cover bg-center",
|
|
2221
2180
|
style: { backgroundImage: `url(${activeCard.cardBgSrc}), linear-gradient(to bottom right, #111, #333)` }
|
|
2222
2181
|
}
|
|
2223
2182
|
),
|
|
2224
|
-
/* @__PURE__ */
|
|
2183
|
+
/* @__PURE__ */ import_react33.default.createElement("div", { className: "relative z-10 w-full h-full p-5 flex flex-col justify-between" }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex items-start w-full gap-4" }, activeCard.companyLogoSrc && /* @__PURE__ */ import_react33.default.createElement("img", { src: activeCard.companyLogoSrc, alt: "Company Logo", className: "h-10 w-auto max-w-30 object-contain opacity-90" })), /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex justify-between items-end w-full" }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-[9px] text-white/60 tracking-widest " }, "Card Number"), /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-[12px] text-white tracking-widest font-light" }, displayCardNumber)), activeCard.networkLogoSrc && /* @__PURE__ */ import_react33.default.createElement("img", { src: activeCard.networkLogoSrc, alt: "Network Logo", className: "h-10 w-auto max-w-20 object-contain opacity-90" })))
|
|
2225
2184
|
),
|
|
2226
|
-
/* @__PURE__ */
|
|
2185
|
+
/* @__PURE__ */ import_react33.default.createElement(
|
|
2227
2186
|
"div",
|
|
2228
2187
|
{
|
|
2229
2188
|
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"}`,
|
|
@@ -2232,20 +2191,20 @@ var UniversalCardPage = ({
|
|
|
2232
2191
|
transform: "rotateY(180deg)"
|
|
2233
2192
|
}
|
|
2234
2193
|
},
|
|
2235
|
-
/* @__PURE__ */
|
|
2194
|
+
/* @__PURE__ */ import_react33.default.createElement(
|
|
2236
2195
|
"div",
|
|
2237
2196
|
{
|
|
2238
2197
|
className: "absolute inset-0 bg-cover bg-center",
|
|
2239
2198
|
style: { backgroundImage: `url(${activeCard.cardBgSrc}), linear-gradient(to bottom right, #111, #333)` }
|
|
2240
2199
|
}
|
|
2241
2200
|
),
|
|
2242
|
-
/* @__PURE__ */
|
|
2243
|
-
/* @__PURE__ */
|
|
2201
|
+
/* @__PURE__ */ import_react33.default.createElement("div", { className: "absolute top-6 left-0 right-0 h-10 bg-black/80 w-full" }),
|
|
2202
|
+
/* @__PURE__ */ import_react33.default.createElement("div", { className: "relative z-10 w-full h-full p-5 flex flex-col justify-end" }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-full text-center mb-6" }, /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-white text-3xl italic tracking-wide opacity-90", style: { fontFamily: "'Whisper', cursive" } }, activeCard.cardHolderName)), /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex justify-between w-full max-w-[80%]" }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-[9px] text-white/60 tracking-widest " }, "Expiry"), /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-[12px] text-white font-light" }, displayExpiry)), /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-[9px] text-white/60 tracking-widest " }, "CVV"), /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-[12px] text-white font-light" }, displayCvv))))
|
|
2244
2203
|
)
|
|
2245
|
-
)), /* @__PURE__ */
|
|
2204
|
+
)), /* @__PURE__ */ import_react33.default.createElement("p", { className: "w-full text-center text-xs text-neutral-400 mb-6 mt-1" }, isActivated ? "Tap to flip card" : "Action Required"), /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-full flex flex-col gap-4" }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react33.default.createElement(
|
|
2246
2205
|
MenuRow,
|
|
2247
2206
|
{
|
|
2248
|
-
icon:
|
|
2207
|
+
icon: import_core_free_icons12.ViewOffSlashIcon,
|
|
2249
2208
|
title: "Reveal Information",
|
|
2250
2209
|
subtitle: "Show card informations",
|
|
2251
2210
|
onClick: handleToggleReveal,
|
|
@@ -2254,10 +2213,10 @@ var UniversalCardPage = ({
|
|
|
2254
2213
|
toggleLoading: isRevealing,
|
|
2255
2214
|
disabled: revealDisabled
|
|
2256
2215
|
}
|
|
2257
|
-
), /* @__PURE__ */
|
|
2216
|
+
), /* @__PURE__ */ import_react33.default.createElement(
|
|
2258
2217
|
MenuRow,
|
|
2259
2218
|
{
|
|
2260
|
-
icon:
|
|
2219
|
+
icon: import_core_free_icons12.SnowIcon,
|
|
2261
2220
|
title: "Freeze",
|
|
2262
2221
|
subtitle: "Freeze & Unfreeze card",
|
|
2263
2222
|
onClick: handleToggleFreeze,
|
|
@@ -2266,10 +2225,10 @@ var UniversalCardPage = ({
|
|
|
2266
2225
|
toggleLoading: isFreezing,
|
|
2267
2226
|
disabled: freezeDisabled
|
|
2268
2227
|
}
|
|
2269
|
-
), /* @__PURE__ */
|
|
2228
|
+
), /* @__PURE__ */ import_react33.default.createElement(
|
|
2270
2229
|
MenuRow,
|
|
2271
2230
|
{
|
|
2272
|
-
icon:
|
|
2231
|
+
icon: import_core_free_icons12.SlidersHorizontalIcon,
|
|
2273
2232
|
title: "Set Limits",
|
|
2274
2233
|
subtitle: "Set card limits",
|
|
2275
2234
|
onClick: () => {
|
|
@@ -2278,10 +2237,10 @@ var UniversalCardPage = ({
|
|
|
2278
2237
|
disabled: actionsDisabled,
|
|
2279
2238
|
isLast: true
|
|
2280
2239
|
}
|
|
2281
|
-
)), /* @__PURE__ */
|
|
2240
|
+
)), /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react33.default.createElement(
|
|
2282
2241
|
MenuRow,
|
|
2283
2242
|
{
|
|
2284
|
-
icon:
|
|
2243
|
+
icon: import_core_free_icons12.Delete02Icon,
|
|
2285
2244
|
title: "Delete card",
|
|
2286
2245
|
subtitle: "Permanently delete card",
|
|
2287
2246
|
onClick: () => {
|
|
@@ -2290,7 +2249,7 @@ var UniversalCardPage = ({
|
|
|
2290
2249
|
disabled: actionsDisabled,
|
|
2291
2250
|
isLast: true
|
|
2292
2251
|
}
|
|
2293
|
-
))), /* @__PURE__ */
|
|
2252
|
+
))), /* @__PURE__ */ import_react33.default.createElement(
|
|
2294
2253
|
ConfirmationDialog,
|
|
2295
2254
|
{
|
|
2296
2255
|
isOpen: showDeleteDialog,
|
|
@@ -2302,7 +2261,7 @@ var UniversalCardPage = ({
|
|
|
2302
2261
|
onClose: () => setShowDeleteDialog(false),
|
|
2303
2262
|
onConfirm: confirmDelete
|
|
2304
2263
|
}
|
|
2305
|
-
), /* @__PURE__ */
|
|
2264
|
+
), /* @__PURE__ */ import_react33.default.createElement(
|
|
2306
2265
|
PinDialerBottomSheet,
|
|
2307
2266
|
{
|
|
2308
2267
|
isOpen: showPinDialer,
|
|
@@ -2311,18 +2270,6 @@ var UniversalCardPage = ({
|
|
|
2311
2270
|
onClose: () => setShowPinDialer(false),
|
|
2312
2271
|
onComplete: handlePinComplete
|
|
2313
2272
|
}
|
|
2314
|
-
), /* @__PURE__ */ import_react35.default.createElement(
|
|
2315
|
-
CardActionDialog,
|
|
2316
|
-
{
|
|
2317
|
-
isOpen: showCardActionDialog,
|
|
2318
|
-
card: activeCard,
|
|
2319
|
-
actionType: cardActionType,
|
|
2320
|
-
onClose: () => setShowCardActionDialog(false),
|
|
2321
|
-
onProceed: () => {
|
|
2322
|
-
if (onCardAction) onCardAction(activeCard.id, cardActionType);
|
|
2323
|
-
setShowCardActionDialog(false);
|
|
2324
|
-
}
|
|
2325
|
-
}
|
|
2326
2273
|
));
|
|
2327
2274
|
};
|
|
2328
2275
|
var MenuRow = ({
|
|
@@ -2337,21 +2284,21 @@ var MenuRow = ({
|
|
|
2337
2284
|
toggleState = false,
|
|
2338
2285
|
toggleLoading = false,
|
|
2339
2286
|
disabled = false
|
|
2340
|
-
}) => /* @__PURE__ */
|
|
2287
|
+
}) => /* @__PURE__ */ import_react33.default.createElement(
|
|
2341
2288
|
"div",
|
|
2342
2289
|
{
|
|
2343
2290
|
onClick: disabled ? void 0 : onClick,
|
|
2344
2291
|
className: `flex items-center p-3 transition-colors ${!isLast ? "" : ""} ${disabled ? "opacity-40 cursor-not-allowed" : "cursor-pointer hover:bg-neutral-50"}`
|
|
2345
2292
|
},
|
|
2346
|
-
/* @__PURE__ */
|
|
2347
|
-
/* @__PURE__ */
|
|
2348
|
-
isToggle ? /* @__PURE__ */
|
|
2293
|
+
/* @__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 })),
|
|
2294
|
+
/* @__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)),
|
|
2295
|
+
isToggle ? /* @__PURE__ */ import_react33.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_react33.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_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons12.Loading03Icon, size: 10, className: "animate-spin text-black" }))) : /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons12.ArrowRight01Icon, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
2349
2296
|
);
|
|
2350
2297
|
|
|
2351
2298
|
// src/components/UniversalProfilePage.tsx
|
|
2352
|
-
var
|
|
2353
|
-
var
|
|
2354
|
-
var
|
|
2299
|
+
var import_react35 = __toESM(require("react"));
|
|
2300
|
+
var import_react36 = require("@hugeicons/react");
|
|
2301
|
+
var import_core_free_icons13 = require("@hugeicons/core-free-icons");
|
|
2355
2302
|
var UniversalProfilePage = ({
|
|
2356
2303
|
avatarSrc,
|
|
2357
2304
|
roleName,
|
|
@@ -2365,9 +2312,9 @@ var UniversalProfilePage = ({
|
|
|
2365
2312
|
onLogoutTap,
|
|
2366
2313
|
onDeleteTap
|
|
2367
2314
|
}) => {
|
|
2368
|
-
const [isAvatarLoaded, setIsAvatarLoaded] = (0,
|
|
2369
|
-
const [showLogoutDialog, setShowLogoutDialog] = (0,
|
|
2370
|
-
const [isLoggingOut, setIsLoggingOut] = (0,
|
|
2315
|
+
const [isAvatarLoaded, setIsAvatarLoaded] = (0, import_react35.useState)(false);
|
|
2316
|
+
const [showLogoutDialog, setShowLogoutDialog] = (0, import_react35.useState)(false);
|
|
2317
|
+
const [isLoggingOut, setIsLoggingOut] = (0, import_react35.useState)(false);
|
|
2371
2318
|
const handleConfirmLogout = async () => {
|
|
2372
2319
|
setIsLoggingOut(true);
|
|
2373
2320
|
try {
|
|
@@ -2387,7 +2334,7 @@ var UniversalProfilePage = ({
|
|
|
2387
2334
|
if (r.includes("platinum")) return "text-yellow-400";
|
|
2388
2335
|
return "text-neutral-400";
|
|
2389
2336
|
};
|
|
2390
|
-
return /* @__PURE__ */
|
|
2337
|
+
return /* @__PURE__ */ import_react35.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react35.default.createElement("div", { className: "pt-8 pb-4 flex flex-col items-center" }, /* @__PURE__ */ import_react35.default.createElement("div", { className: "w-22 h-22 rounded-full bg-white p-1 mb-4 flex items-center justify-center" }, /* @__PURE__ */ import_react35.default.createElement("div", { className: "relative w-full h-full rounded-full overflow-hidden bg-neutral-100 flex items-center justify-center" }, avatarSrc ? /* @__PURE__ */ import_react35.default.createElement(import_react35.default.Fragment, null, !isAvatarLoaded && /* @__PURE__ */ import_react35.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-100" }, /* @__PURE__ */ import_react35.default.createElement(import_react36.HugeiconsIcon, { icon: import_core_free_icons13.Loading03Icon, size: 24, className: "animate-spin text-black" })), /* @__PURE__ */ import_react35.default.createElement(
|
|
2391
2338
|
"img",
|
|
2392
2339
|
{
|
|
2393
2340
|
src: avatarSrc,
|
|
@@ -2395,74 +2342,74 @@ var UniversalProfilePage = ({
|
|
|
2395
2342
|
onLoad: () => setIsAvatarLoaded(true),
|
|
2396
2343
|
className: `w-full h-full object-cover transition-opacity duration-300 ${isAvatarLoaded ? "opacity-100" : "opacity-0"}`
|
|
2397
2344
|
}
|
|
2398
|
-
)) : /* @__PURE__ */
|
|
2345
|
+
)) : /* @__PURE__ */ import_react35.default.createElement(import_react36.HugeiconsIcon, { icon: import_core_free_icons13.UserIcon, size: 40, className: "text-neutral-300" }))), /* @__PURE__ */ import_react35.default.createElement("div", { className: "bg-white rounded-full px-4 py-2 flex items-center justify-center gap-2 mb-3" }, /* @__PURE__ */ import_react35.default.createElement("span", { className: "text-[12px] text-black" }, roleName), /* @__PURE__ */ import_react35.default.createElement("span", { className: getBadgeColorClass(roleName), "aria-hidden": true }, /* @__PURE__ */ import_react35.default.createElement("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react35.default.createElement("g", { id: "SVGRepo_bgCarrier", strokeWidth: "0" }), /* @__PURE__ */ import_react35.default.createElement("g", { id: "SVGRepo_tracerCarrier", strokeLinecap: "round", strokeLinejoin: "round" }), /* @__PURE__ */ import_react35.default.createElement("g", { id: "SVGRepo_iconCarrier" }, " ", /* @__PURE__ */ import_react35.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_react35.default.createElement("span", { className: "text-[12px] text-neutral-500" }, memberSince)), /* @__PURE__ */ import_react35.default.createElement("div", { className: "w-full flex flex-col gap-4 mt-2" }, /* @__PURE__ */ import_react35.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react35.default.createElement(
|
|
2399
2346
|
MenuRow2,
|
|
2400
2347
|
{
|
|
2401
|
-
icon:
|
|
2348
|
+
icon: import_core_free_icons13.UserIcon,
|
|
2402
2349
|
title: "Account",
|
|
2403
2350
|
subtitle: "Your account details",
|
|
2404
2351
|
onClick: onAccountTap
|
|
2405
2352
|
}
|
|
2406
|
-
), /* @__PURE__ */
|
|
2353
|
+
), /* @__PURE__ */ import_react35.default.createElement(
|
|
2407
2354
|
MenuRow2,
|
|
2408
2355
|
{
|
|
2409
|
-
icon:
|
|
2356
|
+
icon: import_core_free_icons13.LockKeyIcon,
|
|
2410
2357
|
title: "Security",
|
|
2411
2358
|
subtitle: "2FA & authentication",
|
|
2412
2359
|
onClick: onSecurityTap
|
|
2413
2360
|
}
|
|
2414
|
-
), /* @__PURE__ */
|
|
2361
|
+
), /* @__PURE__ */ import_react35.default.createElement(
|
|
2415
2362
|
MenuRow2,
|
|
2416
2363
|
{
|
|
2417
|
-
icon:
|
|
2364
|
+
icon: import_core_free_icons13.ShieldUserIcon,
|
|
2418
2365
|
title: "Web3 Profile",
|
|
2419
2366
|
subtitle: "Manage web3 profile",
|
|
2420
2367
|
onClick: onDefiTap
|
|
2421
2368
|
}
|
|
2422
|
-
), /* @__PURE__ */
|
|
2369
|
+
), /* @__PURE__ */ import_react35.default.createElement(
|
|
2423
2370
|
MenuRow2,
|
|
2424
2371
|
{
|
|
2425
|
-
icon:
|
|
2372
|
+
icon: import_core_free_icons13.MessageQuestionIcon,
|
|
2426
2373
|
title: "Get Help",
|
|
2427
2374
|
subtitle: "24/7 Support",
|
|
2428
2375
|
onClick: onHelpTap,
|
|
2429
2376
|
isLast: true
|
|
2430
2377
|
}
|
|
2431
|
-
)), /* @__PURE__ */
|
|
2378
|
+
)), /* @__PURE__ */ import_react35.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react35.default.createElement(
|
|
2432
2379
|
MenuRow2,
|
|
2433
2380
|
{
|
|
2434
|
-
icon:
|
|
2381
|
+
icon: import_core_free_icons13.UserIdVerificationIcon,
|
|
2435
2382
|
title: "Verifications",
|
|
2436
2383
|
subtitle: "Account Verifications",
|
|
2437
2384
|
onClick: onVerificationsTap
|
|
2438
2385
|
}
|
|
2439
|
-
), /* @__PURE__ */
|
|
2386
|
+
), /* @__PURE__ */ import_react35.default.createElement(
|
|
2440
2387
|
MenuRow2,
|
|
2441
2388
|
{
|
|
2442
|
-
icon:
|
|
2389
|
+
icon: import_core_free_icons13.CrownIcon,
|
|
2443
2390
|
title: "My Referrals",
|
|
2444
2391
|
subtitle: "Referral & Rewards",
|
|
2445
2392
|
onClick: onExportTap
|
|
2446
2393
|
}
|
|
2447
|
-
), /* @__PURE__ */
|
|
2394
|
+
), /* @__PURE__ */ import_react35.default.createElement(
|
|
2448
2395
|
MenuRow2,
|
|
2449
2396
|
{
|
|
2450
|
-
icon:
|
|
2397
|
+
icon: import_core_free_icons13.LogoutCircle02Icon,
|
|
2451
2398
|
title: "Log Out",
|
|
2452
2399
|
subtitle: "End your session",
|
|
2453
2400
|
onClick: () => setShowLogoutDialog(true),
|
|
2454
2401
|
isLast: true
|
|
2455
2402
|
}
|
|
2456
|
-
)), /* @__PURE__ */
|
|
2403
|
+
)), /* @__PURE__ */ import_react35.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden mb-4" }, /* @__PURE__ */ import_react35.default.createElement(
|
|
2457
2404
|
MenuRow2,
|
|
2458
2405
|
{
|
|
2459
|
-
icon:
|
|
2406
|
+
icon: import_core_free_icons13.UserRemove01Icon,
|
|
2460
2407
|
title: "Delete Account",
|
|
2461
2408
|
subtitle: "Remove account",
|
|
2462
2409
|
onClick: onDeleteTap,
|
|
2463
2410
|
isLast: true
|
|
2464
2411
|
}
|
|
2465
|
-
))), /* @__PURE__ */
|
|
2412
|
+
))), /* @__PURE__ */ import_react35.default.createElement(
|
|
2466
2413
|
ConfirmationDialog,
|
|
2467
2414
|
{
|
|
2468
2415
|
isOpen: showLogoutDialog,
|
|
@@ -2476,22 +2423,22 @@ var UniversalProfilePage = ({
|
|
|
2476
2423
|
}
|
|
2477
2424
|
));
|
|
2478
2425
|
};
|
|
2479
|
-
var MenuRow2 = ({ icon, title, subtitle, onClick, iconColor = "text-black", titleColor = "text-black", isLast = false }) => /* @__PURE__ */
|
|
2426
|
+
var MenuRow2 = ({ icon, title, subtitle, onClick, iconColor = "text-black", titleColor = "text-black", isLast = false }) => /* @__PURE__ */ import_react35.default.createElement(
|
|
2480
2427
|
"div",
|
|
2481
2428
|
{
|
|
2482
2429
|
onClick,
|
|
2483
2430
|
className: `flex items-center p-4 cursor-pointer hover:bg-neutral-50 transition-colors ${!isLast ? "" : ""}`
|
|
2484
2431
|
},
|
|
2485
|
-
/* @__PURE__ */
|
|
2486
|
-
/* @__PURE__ */
|
|
2487
|
-
/* @__PURE__ */
|
|
2432
|
+
/* @__PURE__ */ import_react35.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_react35.default.createElement(import_react36.HugeiconsIcon, { icon, size: 16, className: iconColor })),
|
|
2433
|
+
/* @__PURE__ */ import_react35.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react35.default.createElement("p", { className: `text-[13px] truncate ${titleColor}` }, title), /* @__PURE__ */ import_react35.default.createElement("p", { className: "text-[11px] text-neutral-500 truncate" }, subtitle)),
|
|
2434
|
+
/* @__PURE__ */ import_react35.default.createElement(import_react36.HugeiconsIcon, { icon: import_core_free_icons13.ArrowRight01Icon, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
2488
2435
|
);
|
|
2489
2436
|
|
|
2490
2437
|
// src/components/UniversalSidebar.tsx
|
|
2491
|
-
var
|
|
2438
|
+
var import_react37 = __toESM(require("react"));
|
|
2492
2439
|
var import_link5 = __toESM(require("next/link"));
|
|
2493
|
-
var
|
|
2494
|
-
var
|
|
2440
|
+
var import_react38 = require("@hugeicons/react");
|
|
2441
|
+
var import_core_free_icons14 = require("@hugeicons/core-free-icons");
|
|
2495
2442
|
var UniversalSidebar = ({
|
|
2496
2443
|
navItems,
|
|
2497
2444
|
currentPath,
|
|
@@ -2499,8 +2446,8 @@ var UniversalSidebar = ({
|
|
|
2499
2446
|
showLogoutAction = false,
|
|
2500
2447
|
onLogout
|
|
2501
2448
|
}) => {
|
|
2502
|
-
const [showLogoutDialog, setShowLogoutDialog] = (0,
|
|
2503
|
-
const [isLoggingOut, setIsLoggingOut] = (0,
|
|
2449
|
+
const [showLogoutDialog, setShowLogoutDialog] = (0, import_react37.useState)(false);
|
|
2450
|
+
const [isLoggingOut, setIsLoggingOut] = (0, import_react37.useState)(false);
|
|
2504
2451
|
const hasActiveMatch = navItems.some(
|
|
2505
2452
|
(item) => item.path === "/" || item.path === "/app" ? currentPath === "/" || currentPath === "/app" : currentPath === item.path || currentPath?.startsWith(`${item.path}/`)
|
|
2506
2453
|
);
|
|
@@ -2514,10 +2461,10 @@ var UniversalSidebar = ({
|
|
|
2514
2461
|
setShowLogoutDialog(false);
|
|
2515
2462
|
}
|
|
2516
2463
|
};
|
|
2517
|
-
return /* @__PURE__ */
|
|
2464
|
+
return /* @__PURE__ */ import_react37.default.createElement(import_react37.default.Fragment, null, /* @__PURE__ */ import_react37.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_react37.default.createElement("div", { className: "h-24 shrink-0" }), /* @__PURE__ */ import_react37.default.createElement("nav", { className: "flex-1 flex flex-col gap-3 px-2" }, navItems.map((item, index) => {
|
|
2518
2465
|
const isExactOrSubMatch = item.path === "/" || item.path === "/app" ? currentPath === "/" || currentPath === "/app" : currentPath === item.path || currentPath?.startsWith(`${item.path}/`);
|
|
2519
2466
|
const isCurrentRoute = isExactOrSubMatch || !hasActiveMatch && index === 0;
|
|
2520
|
-
return /* @__PURE__ */
|
|
2467
|
+
return /* @__PURE__ */ import_react37.default.createElement(
|
|
2521
2468
|
import_link5.default,
|
|
2522
2469
|
{
|
|
2523
2470
|
key: item.name,
|
|
@@ -2526,8 +2473,8 @@ var UniversalSidebar = ({
|
|
|
2526
2473
|
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"}`,
|
|
2527
2474
|
title: item.name
|
|
2528
2475
|
},
|
|
2529
|
-
/* @__PURE__ */
|
|
2530
|
-
|
|
2476
|
+
/* @__PURE__ */ import_react37.default.createElement(
|
|
2477
|
+
import_react38.HugeiconsIcon,
|
|
2531
2478
|
{
|
|
2532
2479
|
icon: item.icon,
|
|
2533
2480
|
size: 20,
|
|
@@ -2535,14 +2482,14 @@ var UniversalSidebar = ({
|
|
|
2535
2482
|
}
|
|
2536
2483
|
)
|
|
2537
2484
|
);
|
|
2538
|
-
})), /* @__PURE__ */
|
|
2485
|
+
})), /* @__PURE__ */ import_react37.default.createElement("div", { className: "p-4 shrink-0 flex flex-col items-center gap-2 mb-4" }, showLogoutAction && /* @__PURE__ */ import_react37.default.createElement(
|
|
2539
2486
|
"button",
|
|
2540
2487
|
{
|
|
2541
2488
|
onClick: () => setShowLogoutDialog(true),
|
|
2542
2489
|
className: "w-12 h-12 rounded-full flex items-center justify-center text-neutral-500 hover:bg-white/50 transition-all outline-none"
|
|
2543
2490
|
},
|
|
2544
|
-
/* @__PURE__ */
|
|
2545
|
-
))), showLogoutAction && /* @__PURE__ */
|
|
2491
|
+
/* @__PURE__ */ import_react37.default.createElement(import_react38.HugeiconsIcon, { icon: import_core_free_icons14.LogoutCircle02Icon, size: 20 })
|
|
2492
|
+
))), showLogoutAction && /* @__PURE__ */ import_react37.default.createElement(
|
|
2546
2493
|
ConfirmationDialog,
|
|
2547
2494
|
{
|
|
2548
2495
|
isOpen: showLogoutDialog,
|
|
@@ -2558,16 +2505,16 @@ var UniversalSidebar = ({
|
|
|
2558
2505
|
};
|
|
2559
2506
|
|
|
2560
2507
|
// src/components/HeroSection.tsx
|
|
2561
|
-
var
|
|
2508
|
+
var import_react40 = __toESM(require("react"));
|
|
2562
2509
|
var import_link6 = __toESM(require("next/link"));
|
|
2563
2510
|
var import_image2 = __toESM(require("next/image"));
|
|
2564
2511
|
|
|
2565
2512
|
// src/components/WaitlistDialog.tsx
|
|
2566
|
-
var
|
|
2513
|
+
var import_react39 = __toESM(require("react"));
|
|
2567
2514
|
var import_react_hot_toast7 = require("react-hot-toast");
|
|
2568
2515
|
var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
2569
|
-
const [email, setEmail] = (0,
|
|
2570
|
-
const [isLoading, setIsLoading] = (0,
|
|
2516
|
+
const [email, setEmail] = (0, import_react39.useState)("");
|
|
2517
|
+
const [isLoading, setIsLoading] = (0, import_react39.useState)(false);
|
|
2571
2518
|
if (!isOpen) return null;
|
|
2572
2519
|
const handleSubmit = async (e) => {
|
|
2573
2520
|
e.preventDefault();
|
|
@@ -2598,19 +2545,19 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2598
2545
|
setIsLoading(false);
|
|
2599
2546
|
}
|
|
2600
2547
|
};
|
|
2601
|
-
return /* @__PURE__ */
|
|
2548
|
+
return /* @__PURE__ */ import_react39.default.createElement("div", { className: "fixed inset-0 z-100 flex items-center justify-center p-4 bg-black/40" }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "absolute inset-0", onClick: !isLoading ? onClose : void 0 }), /* @__PURE__ */ import_react39.default.createElement(
|
|
2602
2549
|
"div",
|
|
2603
2550
|
{
|
|
2604
2551
|
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"
|
|
2605
2552
|
},
|
|
2606
|
-
/* @__PURE__ */
|
|
2553
|
+
/* @__PURE__ */ import_react39.default.createElement(
|
|
2607
2554
|
"button",
|
|
2608
2555
|
{
|
|
2609
2556
|
onClick: onClose,
|
|
2610
2557
|
disabled: isLoading,
|
|
2611
2558
|
className: "absolute top-4 right-4 p-2 text-neutral-700 hover:text-neutral-400 transition-colors disabled:opacity-50 outline-none"
|
|
2612
2559
|
},
|
|
2613
|
-
/* @__PURE__ */
|
|
2560
|
+
/* @__PURE__ */ import_react39.default.createElement(
|
|
2614
2561
|
"svg",
|
|
2615
2562
|
{
|
|
2616
2563
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -2623,11 +2570,11 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2623
2570
|
strokeLinecap: "round",
|
|
2624
2571
|
strokeLinejoin: "round"
|
|
2625
2572
|
},
|
|
2626
|
-
/* @__PURE__ */
|
|
2627
|
-
/* @__PURE__ */
|
|
2573
|
+
/* @__PURE__ */ import_react39.default.createElement("path", { d: "M18 6 6 18" }),
|
|
2574
|
+
/* @__PURE__ */ import_react39.default.createElement("path", { d: "m6 6 12 12" })
|
|
2628
2575
|
)
|
|
2629
2576
|
),
|
|
2630
|
-
/* @__PURE__ */
|
|
2577
|
+
/* @__PURE__ */ import_react39.default.createElement("div", { className: "p-6 sm:p-8" }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "mb-8 mt-2" }, /* @__PURE__ */ import_react39.default.createElement("h2", { className: "text-2xl text-black tracking-tight mb-2" }, "Join the Waitlist"), /* @__PURE__ */ import_react39.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_react39.default.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col gap-8" }, /* @__PURE__ */ import_react39.default.createElement(
|
|
2631
2578
|
TextInput,
|
|
2632
2579
|
{
|
|
2633
2580
|
label: "Email ID",
|
|
@@ -2637,7 +2584,7 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2637
2584
|
placeholder: "name@example.com",
|
|
2638
2585
|
disabled: isLoading
|
|
2639
2586
|
}
|
|
2640
|
-
), /* @__PURE__ */
|
|
2587
|
+
), /* @__PURE__ */ import_react39.default.createElement(
|
|
2641
2588
|
ThreeDActionButton,
|
|
2642
2589
|
{
|
|
2643
2590
|
type: "submit",
|
|
@@ -2670,10 +2617,10 @@ var HeroSection = ({
|
|
|
2670
2617
|
bgImageSrc,
|
|
2671
2618
|
isWaitlist = false
|
|
2672
2619
|
}) => {
|
|
2673
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
2674
|
-
const [isWaitlistOpen, setIsWaitlistOpen] = (0,
|
|
2675
|
-
const titleRef = (0,
|
|
2676
|
-
(0,
|
|
2620
|
+
const [isAnimating, setIsAnimating] = (0, import_react40.useState)(false);
|
|
2621
|
+
const [isWaitlistOpen, setIsWaitlistOpen] = (0, import_react40.useState)(false);
|
|
2622
|
+
const titleRef = (0, import_react40.useRef)(null);
|
|
2623
|
+
(0, import_react40.useEffect)(() => {
|
|
2677
2624
|
const observer = new IntersectionObserver(
|
|
2678
2625
|
([entry]) => {
|
|
2679
2626
|
if (entry.isIntersecting) {
|
|
@@ -2695,7 +2642,7 @@ var HeroSection = ({
|
|
|
2695
2642
|
setIsWaitlistOpen(true);
|
|
2696
2643
|
}
|
|
2697
2644
|
};
|
|
2698
|
-
return /* @__PURE__ */
|
|
2645
|
+
return /* @__PURE__ */ import_react40.default.createElement("div", { className: "w-screen min-h-screen flex justify-center items-center p-4" }, /* @__PURE__ */ import_react40.default.createElement("section", { className: "relative h-[95vh] w-full overflow-hidden rounded-2xl " }, bgVideoSrc ? /* @__PURE__ */ import_react40.default.createElement(
|
|
2699
2646
|
"video",
|
|
2700
2647
|
{
|
|
2701
2648
|
src: bgVideoSrc,
|
|
@@ -2706,7 +2653,7 @@ var HeroSection = ({
|
|
|
2706
2653
|
playsInline: true,
|
|
2707
2654
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
2708
2655
|
}
|
|
2709
|
-
) : bgImageSrc ? /* @__PURE__ */
|
|
2656
|
+
) : bgImageSrc ? /* @__PURE__ */ import_react40.default.createElement(
|
|
2710
2657
|
import_image2.default,
|
|
2711
2658
|
{
|
|
2712
2659
|
src: bgImageSrc,
|
|
@@ -2715,7 +2662,7 @@ var HeroSection = ({
|
|
|
2715
2662
|
priority: true,
|
|
2716
2663
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
2717
2664
|
}
|
|
2718
|
-
) : null, /* @__PURE__ */
|
|
2665
|
+
) : null, /* @__PURE__ */ import_react40.default.createElement(
|
|
2719
2666
|
"div",
|
|
2720
2667
|
{
|
|
2721
2668
|
className: "pointer-events-none absolute inset-0 z-10 opacity-[0.7] mix-blend-overlay",
|
|
@@ -2723,15 +2670,15 @@ var HeroSection = ({
|
|
|
2723
2670
|
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")`
|
|
2724
2671
|
}
|
|
2725
2672
|
}
|
|
2726
|
-
), /* @__PURE__ */
|
|
2673
|
+
), /* @__PURE__ */ import_react40.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_react40.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_react40.default.createElement("div", { className: "grid grid-cols-12 items-end gap-4" }, /* @__PURE__ */ import_react40.default.createElement("div", { className: "col-span-12 lg:col-span-8" }, /* @__PURE__ */ import_react40.default.createElement(
|
|
2727
2674
|
"h1",
|
|
2728
2675
|
{
|
|
2729
2676
|
ref: titleRef,
|
|
2730
2677
|
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]"
|
|
2731
2678
|
},
|
|
2732
|
-
/* @__PURE__ */
|
|
2733
|
-
)), /* @__PURE__ */
|
|
2734
|
-
/* @__PURE__ */
|
|
2679
|
+
/* @__PURE__ */ import_react40.default.createElement("div", { className: "inline-flex flex-wrap" }, /* @__PURE__ */ import_react40.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_react40.default.createElement("br", null), highlightText, /* @__PURE__ */ import_react40.default.createElement("span", { className: "absolute top-[0.65em] right-[-0.3em] text-[0.31em] text-[#ffffff]/70" }, "*")))
|
|
2680
|
+
)), /* @__PURE__ */ import_react40.default.createElement("div", { className: "col-span-12 flex flex-col gap-5 pb-6 lg:col-span-4 lg:pb-10" }, subtitle && /* @__PURE__ */ import_react40.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_react40.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!
|
|
2681
|
+
/* @__PURE__ */ import_react40.default.createElement(
|
|
2735
2682
|
import_link6.default,
|
|
2736
2683
|
{
|
|
2737
2684
|
href: isWaitlist ? "#" : ctaHref || "#",
|
|
@@ -2739,15 +2686,15 @@ var HeroSection = ({
|
|
|
2739
2686
|
className: "group inline-flex h-10 items-center gap-2 self-start rounded-full bg-[#ffffff] pl-5 pr-1 text-xs text-black transition-all hover:gap-3"
|
|
2740
2687
|
},
|
|
2741
2688
|
ctaText,
|
|
2742
|
-
/* @__PURE__ */
|
|
2743
|
-
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
2689
|
+
/* @__PURE__ */ import_react40.default.createElement("span", { className: "flex h-8 w-8 items-center justify-center rounded-full bg-black transition-transform group-hover:scale-110" }, /* @__PURE__ */ import_react40.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_react40.default.createElement("path", { d: "M5 12h14" }), /* @__PURE__ */ import_react40.default.createElement("path", { d: "m12 5 7 7-7 7" })))
|
|
2690
|
+
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react40.default.createElement(
|
|
2744
2691
|
import_link6.default,
|
|
2745
2692
|
{
|
|
2746
2693
|
href: secondaryCtaHref,
|
|
2747
2694
|
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"
|
|
2748
2695
|
},
|
|
2749
2696
|
secondaryCtaText
|
|
2750
|
-
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */
|
|
2697
|
+
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */ import_react40.default.createElement("div", { className: "flex flex-col gap-3 mt-4" }, appsText && /* @__PURE__ */ import_react40.default.createElement("span", { className: "text-[10px] tracking-widest text-[#ffffff]/50 " }, appsText), /* @__PURE__ */ import_react40.default.createElement("div", { className: "flex items-center gap-4" }, appLogos.map((logo, idx) => /* @__PURE__ */ import_react40.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_react40.default.createElement(
|
|
2751
2698
|
import_image2.default,
|
|
2752
2699
|
{
|
|
2753
2700
|
src: logo.src,
|
|
@@ -2756,7 +2703,7 @@ var HeroSection = ({
|
|
|
2756
2703
|
height: 28,
|
|
2757
2704
|
className: "object-contain"
|
|
2758
2705
|
}
|
|
2759
|
-
))))))))), /* @__PURE__ */
|
|
2706
|
+
))))))))), /* @__PURE__ */ import_react40.default.createElement(
|
|
2760
2707
|
WaitlistDialog,
|
|
2761
2708
|
{
|
|
2762
2709
|
isOpen: isWaitlistOpen,
|
|
@@ -2766,12 +2713,12 @@ var HeroSection = ({
|
|
|
2766
2713
|
};
|
|
2767
2714
|
|
|
2768
2715
|
// src/components/AppBento2.tsx
|
|
2769
|
-
var
|
|
2770
|
-
var
|
|
2716
|
+
var import_react41 = __toESM(require("react"));
|
|
2717
|
+
var import_react42 = require("@hugeicons/react");
|
|
2771
2718
|
var AppBento2 = ({ tagline, headline, features }) => {
|
|
2772
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
2773
|
-
const titleRef = (0,
|
|
2774
|
-
(0,
|
|
2719
|
+
const [isAnimating, setIsAnimating] = (0, import_react41.useState)(false);
|
|
2720
|
+
const titleRef = (0, import_react41.useRef)(null);
|
|
2721
|
+
(0, import_react41.useEffect)(() => {
|
|
2775
2722
|
const observer = new IntersectionObserver(
|
|
2776
2723
|
([entry]) => {
|
|
2777
2724
|
if (entry.isIntersecting) {
|
|
@@ -2789,7 +2736,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2789
2736
|
}
|
|
2790
2737
|
return () => observer.disconnect();
|
|
2791
2738
|
}, []);
|
|
2792
|
-
return /* @__PURE__ */
|
|
2739
|
+
return /* @__PURE__ */ import_react41.default.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react41.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), /* @__PURE__ */ import_react41.default.createElement(
|
|
2793
2740
|
"h2",
|
|
2794
2741
|
{
|
|
2795
2742
|
ref: titleRef,
|
|
@@ -2797,7 +2744,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2797
2744
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2798
2745
|
},
|
|
2799
2746
|
headline
|
|
2800
|
-
))), /* @__PURE__ */
|
|
2747
|
+
))), /* @__PURE__ */ import_react41.default.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-6 gap-6" }, features.map((f, i) => {
|
|
2801
2748
|
const isWhite = i === 0;
|
|
2802
2749
|
const isBlack = i === 1;
|
|
2803
2750
|
const isNeutral = i === 2;
|
|
@@ -2819,32 +2766,32 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2819
2766
|
const textColor = isBlack ? "text-white" : "text-black";
|
|
2820
2767
|
const subTextColor = isBlack ? "text-neutral-300" : "text-neutral-600";
|
|
2821
2768
|
const labelColor = isBlack ? "text-neutral-400" : "text-neutral-500";
|
|
2822
|
-
return /* @__PURE__ */
|
|
2769
|
+
return /* @__PURE__ */ import_react41.default.createElement(
|
|
2823
2770
|
"div",
|
|
2824
2771
|
{
|
|
2825
2772
|
key: i,
|
|
2826
2773
|
className: `relative rounded-2xl overflow-hidden p-8 flex flex-col min-h-75 transition-all duration-500 group text-left ${getBgStyle()} ${f.size}`,
|
|
2827
2774
|
style: { boxShadow: getShadowStyle() }
|
|
2828
2775
|
},
|
|
2829
|
-
/* @__PURE__ */
|
|
2776
|
+
/* @__PURE__ */ import_react41.default.createElement(
|
|
2830
2777
|
"div",
|
|
2831
2778
|
{
|
|
2832
2779
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
2833
2780
|
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")` }
|
|
2834
2781
|
}
|
|
2835
2782
|
),
|
|
2836
|
-
isBlack && /* @__PURE__ */
|
|
2837
|
-
/* @__PURE__ */
|
|
2838
|
-
/* @__PURE__ */
|
|
2783
|
+
isBlack && /* @__PURE__ */ import_react41.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" }),
|
|
2784
|
+
/* @__PURE__ */ import_react41.default.createElement("div", { className: "absolute inset-0 overflow-hidden pointer-events-none z-0" }, /* @__PURE__ */ import_react41.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_react41.default.createElement(import_react42.HugeiconsIcon, { icon: f.icon, size: 180 }))),
|
|
2785
|
+
/* @__PURE__ */ import_react41.default.createElement("div", { className: "relative z-10 w-full h-full flex flex-col pointer-events-auto" }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "flex items-center justify-between mb-8" }, /* @__PURE__ */ import_react41.default.createElement("span", { className: `text-[9px] tracking-widest ${labelColor}` }, f.label), /* @__PURE__ */ import_react41.default.createElement("div", { className: `p-2 rounded-full transition-colors ${isBlack ? "bg-white/10" : "bg-white/50 backdrop-blur-sm"}` }, /* @__PURE__ */ import_react41.default.createElement(import_react42.HugeiconsIcon, { icon: f.icon, size: 20, className: textColor }))), /* @__PURE__ */ import_react41.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react41.default.createElement("h3", { className: `text-xl mb-2 tracking-tight ${textColor}` }, f.title), /* @__PURE__ */ import_react41.default.createElement("p", { className: `text-[13px] leading-relaxed max-w-sm ${subTextColor}` }, f.desc)))
|
|
2839
2786
|
);
|
|
2840
2787
|
})))));
|
|
2841
2788
|
};
|
|
2842
2789
|
|
|
2843
2790
|
// src/components/UniversalSecurityPage.tsx
|
|
2844
|
-
var
|
|
2791
|
+
var import_react43 = __toESM(require("react"));
|
|
2845
2792
|
var import_react_hot_toast8 = __toESM(require("react-hot-toast"));
|
|
2846
|
-
var
|
|
2847
|
-
var
|
|
2793
|
+
var import_react44 = require("@hugeicons/react");
|
|
2794
|
+
var import_core_free_icons15 = require("@hugeicons/core-free-icons");
|
|
2848
2795
|
var import_browser2 = require("@simplewebauthn/browser");
|
|
2849
2796
|
var UniversalSecurityPage = ({
|
|
2850
2797
|
has2FA,
|
|
@@ -2860,15 +2807,15 @@ var UniversalSecurityPage = ({
|
|
|
2860
2807
|
onVerifyAndEnablePasskey,
|
|
2861
2808
|
onDisablePasskey
|
|
2862
2809
|
}) => {
|
|
2863
|
-
const [show2FASetupModal, setShow2FASetupModal] = (0,
|
|
2864
|
-
const [show2FADisableModal, setShow2FADisableModal] = (0,
|
|
2865
|
-
const [showPasskeyModal, setShowPasskeyModal] = (0,
|
|
2866
|
-
const [twoFaSecret, setTwoFaSecret] = (0,
|
|
2867
|
-
const [twoFaQr, setTwoFaQr] = (0,
|
|
2868
|
-
const [isFetchingSetup, setIsFetchingSetup] = (0,
|
|
2869
|
-
const [otp, setOtp] = (0,
|
|
2870
|
-
const [isSubmitting, setIsSubmitting] = (0,
|
|
2871
|
-
const inputRefs = (0,
|
|
2810
|
+
const [show2FASetupModal, setShow2FASetupModal] = (0, import_react43.useState)(false);
|
|
2811
|
+
const [show2FADisableModal, setShow2FADisableModal] = (0, import_react43.useState)(false);
|
|
2812
|
+
const [showPasskeyModal, setShowPasskeyModal] = (0, import_react43.useState)(false);
|
|
2813
|
+
const [twoFaSecret, setTwoFaSecret] = (0, import_react43.useState)("");
|
|
2814
|
+
const [twoFaQr, setTwoFaQr] = (0, import_react43.useState)("");
|
|
2815
|
+
const [isFetchingSetup, setIsFetchingSetup] = (0, import_react43.useState)(false);
|
|
2816
|
+
const [otp, setOtp] = (0, import_react43.useState)(Array(6).fill(""));
|
|
2817
|
+
const [isSubmitting, setIsSubmitting] = (0, import_react43.useState)(false);
|
|
2818
|
+
const inputRefs = (0, import_react43.useRef)([]);
|
|
2872
2819
|
const resetOtp = () => {
|
|
2873
2820
|
setOtp(Array(6).fill(""));
|
|
2874
2821
|
setIsSubmitting(false);
|
|
@@ -3010,18 +2957,18 @@ var UniversalSecurityPage = ({
|
|
|
3010
2957
|
setIsSubmitting(false);
|
|
3011
2958
|
}
|
|
3012
2959
|
};
|
|
3013
|
-
return /* @__PURE__ */
|
|
2960
|
+
return /* @__PURE__ */ import_react43.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 pb-12" }, /* @__PURE__ */ import_react43.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react43.default.createElement("div", { className: "mb-6 flex items-center px-1" }, /* @__PURE__ */ import_react43.default.createElement(
|
|
3014
2961
|
"button",
|
|
3015
2962
|
{
|
|
3016
2963
|
onClick: onBack,
|
|
3017
2964
|
className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none"
|
|
3018
2965
|
},
|
|
3019
|
-
/* @__PURE__ */
|
|
2966
|
+
/* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons15.ArrowLeft01Icon, size: 16 }),
|
|
3020
2967
|
" Back"
|
|
3021
|
-
)), /* @__PURE__ */
|
|
2968
|
+
)), /* @__PURE__ */ import_react43.default.createElement("div", { className: "w-full flex flex-col gap-4" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react43.default.createElement(
|
|
3022
2969
|
MenuRow3,
|
|
3023
2970
|
{
|
|
3024
|
-
icon:
|
|
2971
|
+
icon: import_core_free_icons15.CircleLockCheck02Icon,
|
|
3025
2972
|
title: "Authenticator App",
|
|
3026
2973
|
subtitle: "Secure your account with 2FA",
|
|
3027
2974
|
onClick: handleToggle2FA,
|
|
@@ -3029,10 +2976,10 @@ var UniversalSecurityPage = ({
|
|
|
3029
2976
|
toggleState: has2FA,
|
|
3030
2977
|
toggleLoading: is2FALoading || isFetchingSetup
|
|
3031
2978
|
}
|
|
3032
|
-
), /* @__PURE__ */
|
|
2979
|
+
), /* @__PURE__ */ import_react43.default.createElement(
|
|
3033
2980
|
MenuRow3,
|
|
3034
2981
|
{
|
|
3035
|
-
icon:
|
|
2982
|
+
icon: import_core_free_icons15.Key01Icon,
|
|
3036
2983
|
title: "Passkeys",
|
|
3037
2984
|
subtitle: "Sign in quickly with biometrics",
|
|
3038
2985
|
onClick: handleTogglePasskey,
|
|
@@ -3041,18 +2988,18 @@ var UniversalSecurityPage = ({
|
|
|
3041
2988
|
toggleLoading: isPasskeyLoading,
|
|
3042
2989
|
isLast: true
|
|
3043
2990
|
}
|
|
3044
|
-
))), show2FASetupModal && /* @__PURE__ */
|
|
2991
|
+
))), show2FASetupModal && /* @__PURE__ */ import_react43.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShow2FASetupModal(false) }), /* @__PURE__ */ import_react43.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_react43.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ import_react43.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable 2FA"), /* @__PURE__ */ import_react43.default.createElement("button", { onClick: () => !isSubmitting && setShow2FASetupModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons15.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-2" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "w-full flex justify-center mb-6 mix-blend-multiply" }, twoFaQr ? /* @__PURE__ */ import_react43.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_react43.default.createElement("div", { className: "w-40 h-40 bg-neutral-100 rounded-xl flex items-center justify-center animate-pulse" })), /* @__PURE__ */ import_react43.default.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-8" }, /* @__PURE__ */ import_react43.default.createElement("div", null, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2 uppercase" }, "Setup Key"), /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex items-center gap-2 min-w-0 bg-neutral-50 px-3 py-2.5 rounded-xl " }, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[13px] font-mono tracking-widest text-black truncate min-w-0 block flex-1" }, twoFaSecret), /* @__PURE__ */ import_react43.default.createElement(
|
|
3045
2992
|
"button",
|
|
3046
2993
|
{
|
|
3047
2994
|
type: "button",
|
|
3048
2995
|
onClick: () => handleCopySecret(twoFaSecret),
|
|
3049
2996
|
className: "text-neutral-400 hover:text-black transition-colors outline-none shrink-0 ml-2"
|
|
3050
2997
|
},
|
|
3051
|
-
/* @__PURE__ */
|
|
3052
|
-
)))), /* @__PURE__ */
|
|
2998
|
+
/* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons15.Copy01Icon, size: 16 })
|
|
2999
|
+
)))), /* @__PURE__ */ import_react43.default.createElement("div", { className: "text-center mb-8 mt-2" }, /* @__PURE__ */ import_react43.default.createElement("h2", { className: "text-xl text-black mb-2 tracking-tight" }, "Security Check"), /* @__PURE__ */ import_react43.default.createElement("p", { className: "text-[13px] text-neutral-500" }, "Enter the 6-digit code from your app")), /* @__PURE__ */ import_react43.default.createElement("form", { className: "space-y-4", autoComplete: "off", onSubmit: (e) => {
|
|
3053
3000
|
e.preventDefault();
|
|
3054
3001
|
submitEnable2FA(otp.join(""));
|
|
3055
|
-
} }, /* @__PURE__ */
|
|
3002
|
+
} }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex justify-between gap-2 pb-6", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ import_react43.default.createElement(
|
|
3056
3003
|
"input",
|
|
3057
3004
|
{
|
|
3058
3005
|
key: index,
|
|
@@ -3071,7 +3018,7 @@ var UniversalSecurityPage = ({
|
|
|
3071
3018
|
},
|
|
3072
3019
|
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"
|
|
3073
3020
|
}
|
|
3074
|
-
))), /* @__PURE__ */
|
|
3021
|
+
))), /* @__PURE__ */ import_react43.default.createElement(
|
|
3075
3022
|
ThreeDActionButton,
|
|
3076
3023
|
{
|
|
3077
3024
|
type: "submit",
|
|
@@ -3080,19 +3027,19 @@ var UniversalSecurityPage = ({
|
|
|
3080
3027
|
className: "w-full py-3.5"
|
|
3081
3028
|
},
|
|
3082
3029
|
"Verify & Enable"
|
|
3083
|
-
), /* @__PURE__ */
|
|
3030
|
+
), /* @__PURE__ */ import_react43.default.createElement(
|
|
3084
3031
|
"button",
|
|
3085
3032
|
{
|
|
3086
3033
|
type: "button",
|
|
3087
3034
|
onClick: () => handleCopySecret(twoFaSecret),
|
|
3088
3035
|
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"
|
|
3089
3036
|
},
|
|
3090
|
-
/* @__PURE__ */
|
|
3037
|
+
/* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons15.Copy01Icon, size: 16, className: "mr-2" }),
|
|
3091
3038
|
"Copy Secret Key"
|
|
3092
|
-
))))), show2FADisableModal && /* @__PURE__ */
|
|
3039
|
+
))))), show2FADisableModal && /* @__PURE__ */ import_react43.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShow2FADisableModal(false) }), /* @__PURE__ */ import_react43.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_react43.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ import_react43.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Disable 2FA"), /* @__PURE__ */ import_react43.default.createElement("button", { onClick: () => !isSubmitting && setShow2FADisableModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons15.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react43.default.createElement("div", { className: "p-6" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "text-center mb-8 mt-2" }, /* @__PURE__ */ import_react43.default.createElement("h2", { className: "text-xl text-black mb-2 tracking-tight" }, "Security Check"), /* @__PURE__ */ import_react43.default.createElement("p", { className: "text-[13px] text-neutral-500" }, "Enter the code from your authenticator app to disable 2FA.")), /* @__PURE__ */ import_react43.default.createElement("form", { className: "space-y-8", autoComplete: "off", onSubmit: (e) => {
|
|
3093
3040
|
e.preventDefault();
|
|
3094
3041
|
submitDisable2FA(otp.join(""));
|
|
3095
|
-
} }, /* @__PURE__ */
|
|
3042
|
+
} }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex justify-between gap-2", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ import_react43.default.createElement(
|
|
3096
3043
|
"input",
|
|
3097
3044
|
{
|
|
3098
3045
|
key: index,
|
|
@@ -3111,7 +3058,7 @@ var UniversalSecurityPage = ({
|
|
|
3111
3058
|
},
|
|
3112
3059
|
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"
|
|
3113
3060
|
}
|
|
3114
|
-
))), /* @__PURE__ */
|
|
3061
|
+
))), /* @__PURE__ */ import_react43.default.createElement(
|
|
3115
3062
|
ThreeDActionButton,
|
|
3116
3063
|
{
|
|
3117
3064
|
type: "submit",
|
|
@@ -3120,7 +3067,7 @@ var UniversalSecurityPage = ({
|
|
|
3120
3067
|
className: "w-full py-3.5"
|
|
3121
3068
|
},
|
|
3122
3069
|
"Verify & Disable"
|
|
3123
|
-
))))), showPasskeyModal && /* @__PURE__ */
|
|
3070
|
+
))))), showPasskeyModal && /* @__PURE__ */ import_react43.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShowPasskeyModal(false) }), /* @__PURE__ */ import_react43.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_react43.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ import_react43.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable Passkey"), /* @__PURE__ */ import_react43.default.createElement("button", { onClick: () => !isSubmitting && setShowPasskeyModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons15.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react43.default.createElement("div", { className: "p-6 text-center" }, /* @__PURE__ */ import_react43.default.createElement("h2", { className: "text-lg text-black mb-2 tracking-tight" }, "Simplify your Sign In"), /* @__PURE__ */ import_react43.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_react43.default.createElement(
|
|
3124
3071
|
ThreeDActionButton,
|
|
3125
3072
|
{
|
|
3126
3073
|
onClick: submitEnablePasskey,
|
|
@@ -3142,26 +3089,26 @@ var MenuRow3 = ({
|
|
|
3142
3089
|
toggleState = false,
|
|
3143
3090
|
toggleLoading = false,
|
|
3144
3091
|
disabled = false
|
|
3145
|
-
}) => /* @__PURE__ */
|
|
3092
|
+
}) => /* @__PURE__ */ import_react43.default.createElement(
|
|
3146
3093
|
"div",
|
|
3147
3094
|
{
|
|
3148
3095
|
onClick: disabled ? void 0 : onClick,
|
|
3149
3096
|
className: `flex items-center p-4 transition-colors ${!isLast ? "" : ""} ${disabled ? "opacity-40 cursor-not-allowed" : "cursor-pointer hover:bg-neutral-50"}`
|
|
3150
3097
|
},
|
|
3151
|
-
/* @__PURE__ */
|
|
3152
|
-
/* @__PURE__ */
|
|
3153
|
-
isToggle ? /* @__PURE__ */
|
|
3098
|
+
/* @__PURE__ */ import_react43.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_react43.default.createElement(import_react44.HugeiconsIcon, { icon, size: 16, className: iconColor })),
|
|
3099
|
+
/* @__PURE__ */ import_react43.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react43.default.createElement("p", { className: `text-[14px] truncate ${titleColor}` }, title), /* @__PURE__ */ import_react43.default.createElement("p", { className: "text-[12px] text-neutral-500 truncate" }, subtitle)),
|
|
3100
|
+
isToggle ? /* @__PURE__ */ import_react43.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_react43.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_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons15.Loading03Icon, size: 10, className: "animate-spin text-black" }))) : /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons15.ArrowRight01Icon, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
3154
3101
|
);
|
|
3155
3102
|
|
|
3156
3103
|
// src/components/FeatureScroll.tsx
|
|
3157
|
-
var
|
|
3104
|
+
var import_react45 = __toESM(require("react"));
|
|
3158
3105
|
var import_image3 = __toESM(require("next/image"));
|
|
3159
|
-
var
|
|
3160
|
-
var
|
|
3106
|
+
var import_react46 = require("@hugeicons/react");
|
|
3107
|
+
var import_core_free_icons16 = require("@hugeicons/core-free-icons");
|
|
3161
3108
|
var FeatureCard = ({ feature, bgImage }) => {
|
|
3162
|
-
const [isBgLoading, setIsBgLoading] = (0,
|
|
3163
|
-
const [isFgLoading, setIsFgLoading] = (0,
|
|
3164
|
-
return /* @__PURE__ */
|
|
3109
|
+
const [isBgLoading, setIsBgLoading] = (0, import_react45.useState)(true);
|
|
3110
|
+
const [isFgLoading, setIsFgLoading] = (0, import_react45.useState)(!!feature.image);
|
|
3111
|
+
return /* @__PURE__ */ import_react45.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_react45.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_react45.default.createElement(
|
|
3165
3112
|
import_image3.default,
|
|
3166
3113
|
{
|
|
3167
3114
|
src: bgImage,
|
|
@@ -3174,7 +3121,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
3174
3121
|
${isBgLoading ? "blur-xl scale-110" : "blur-0 scale-100"}
|
|
3175
3122
|
`
|
|
3176
3123
|
}
|
|
3177
|
-
), /* @__PURE__ */
|
|
3124
|
+
), /* @__PURE__ */ import_react45.default.createElement(
|
|
3178
3125
|
"div",
|
|
3179
3126
|
{
|
|
3180
3127
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.25] mix-blend-overlay",
|
|
@@ -3182,7 +3129,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
3182
3129
|
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")`
|
|
3183
3130
|
}
|
|
3184
3131
|
}
|
|
3185
|
-
), isFgLoading && feature.image && /* @__PURE__ */
|
|
3132
|
+
), isFgLoading && feature.image && /* @__PURE__ */ import_react45.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_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.Loading03Icon, size: 32, className: "animate-spin text-neutral-400" })), feature.image && /* @__PURE__ */ import_react45.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_react45.default.createElement(
|
|
3186
3133
|
import_image3.default,
|
|
3187
3134
|
{
|
|
3188
3135
|
src: feature.image,
|
|
@@ -3195,12 +3142,12 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
3195
3142
|
${isFgLoading ? "opacity-0 blur-xl" : "opacity-100 blur-0"}
|
|
3196
3143
|
`
|
|
3197
3144
|
}
|
|
3198
|
-
))), /* @__PURE__ */
|
|
3145
|
+
))), /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ import_react45.default.createElement("h3", { className: " text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ import_react45.default.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 max-w-[90%]" }, feature.desc)));
|
|
3199
3146
|
};
|
|
3200
3147
|
var FeatureScroll = ({ tagline, headline, features }) => {
|
|
3201
|
-
const scrollRef = (0,
|
|
3202
|
-
const [canScrollLeft, setCanScrollLeft] = (0,
|
|
3203
|
-
const [canScrollRight, setCanScrollRight] = (0,
|
|
3148
|
+
const scrollRef = (0, import_react45.useRef)(null);
|
|
3149
|
+
const [canScrollLeft, setCanScrollLeft] = (0, import_react45.useState)(false);
|
|
3150
|
+
const [canScrollRight, setCanScrollRight] = (0, import_react45.useState)(true);
|
|
3204
3151
|
const checkScroll = () => {
|
|
3205
3152
|
if (scrollRef.current) {
|
|
3206
3153
|
const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;
|
|
@@ -3208,7 +3155,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
3208
3155
|
setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 2);
|
|
3209
3156
|
}
|
|
3210
3157
|
};
|
|
3211
|
-
(0,
|
|
3158
|
+
(0, import_react45.useEffect)(() => {
|
|
3212
3159
|
checkScroll();
|
|
3213
3160
|
window.addEventListener("resize", checkScroll);
|
|
3214
3161
|
return () => window.removeEventListener("resize", checkScroll);
|
|
@@ -3224,72 +3171,72 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
3224
3171
|
"https://retinalabs.company/assets/images/bg_6.avif",
|
|
3225
3172
|
"https://retinalabs.company/assets/images/bg_1.avif"
|
|
3226
3173
|
];
|
|
3227
|
-
return /* @__PURE__ */
|
|
3174
|
+
return /* @__PURE__ */ import_react45.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden" }, /* @__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 md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "relative z-10 text-left" }, /* @__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]" }, headline)), /* @__PURE__ */ import_react45.default.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ import_react45.default.createElement(
|
|
3228
3175
|
"button",
|
|
3229
3176
|
{
|
|
3230
3177
|
onClick: () => scroll("left"),
|
|
3231
3178
|
disabled: !canScrollLeft,
|
|
3232
3179
|
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"
|
|
3233
3180
|
},
|
|
3234
|
-
/* @__PURE__ */
|
|
3235
|
-
), /* @__PURE__ */
|
|
3181
|
+
/* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.ArrowLeft01Icon, size: 20 })
|
|
3182
|
+
), /* @__PURE__ */ import_react45.default.createElement(
|
|
3236
3183
|
"button",
|
|
3237
3184
|
{
|
|
3238
3185
|
onClick: () => scroll("right"),
|
|
3239
3186
|
disabled: !canScrollRight,
|
|
3240
3187
|
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"
|
|
3241
3188
|
},
|
|
3242
|
-
/* @__PURE__ */
|
|
3243
|
-
))), /* @__PURE__ */
|
|
3189
|
+
/* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.ArrowRight01Icon, size: 20 })
|
|
3190
|
+
))), /* @__PURE__ */ import_react45.default.createElement(
|
|
3244
3191
|
"div",
|
|
3245
3192
|
{
|
|
3246
3193
|
ref: scrollRef,
|
|
3247
3194
|
onScroll: checkScroll,
|
|
3248
3195
|
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"
|
|
3249
3196
|
},
|
|
3250
|
-
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */
|
|
3251
|
-
), /* @__PURE__ */
|
|
3197
|
+
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */ import_react45.default.createElement(FeatureCard, { key: idx, feature, bgImage: bgImages[idx] }))
|
|
3198
|
+
), /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ import_react45.default.createElement(
|
|
3252
3199
|
"button",
|
|
3253
3200
|
{
|
|
3254
3201
|
onClick: () => scroll("left"),
|
|
3255
3202
|
disabled: !canScrollLeft,
|
|
3256
3203
|
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"
|
|
3257
3204
|
},
|
|
3258
|
-
/* @__PURE__ */
|
|
3259
|
-
), /* @__PURE__ */
|
|
3205
|
+
/* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.ArrowLeft01Icon, size: 20 })
|
|
3206
|
+
), /* @__PURE__ */ import_react45.default.createElement(
|
|
3260
3207
|
"button",
|
|
3261
3208
|
{
|
|
3262
3209
|
onClick: () => scroll("right"),
|
|
3263
3210
|
disabled: !canScrollRight,
|
|
3264
3211
|
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"
|
|
3265
3212
|
},
|
|
3266
|
-
/* @__PURE__ */
|
|
3213
|
+
/* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.ArrowRight01Icon, size: 20 })
|
|
3267
3214
|
))));
|
|
3268
3215
|
};
|
|
3269
3216
|
|
|
3270
3217
|
// src/components/PlatformFeatures.tsx
|
|
3271
|
-
var
|
|
3272
|
-
var
|
|
3218
|
+
var import_react47 = __toESM(require("react"));
|
|
3219
|
+
var import_react48 = require("@hugeicons/react");
|
|
3273
3220
|
var PlatformFeatures = ({
|
|
3274
3221
|
tagline,
|
|
3275
3222
|
headline,
|
|
3276
3223
|
description,
|
|
3277
3224
|
features
|
|
3278
3225
|
}) => {
|
|
3279
|
-
return /* @__PURE__ */
|
|
3226
|
+
return /* @__PURE__ */ import_react47.default.createElement("section", { className: "w-full flex justify-center mb-15 relative z-10" }, /* @__PURE__ */ import_react47.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex flex-col items-start mb-16 relative z-10" }, /* @__PURE__ */ import_react47.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ import_react47.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.05] mb-6" }, headline), /* @__PURE__ */ import_react47.default.createElement("p", { className: "text-[15px] leading-[1.8] text-neutral-600 max-w-2xl" }, description)), /* @__PURE__ */ import_react47.default.createElement("div", { className: "w-full h-px bg-neutral-100 mb-16", "aria-hidden": "true" }), /* @__PURE__ */ import_react47.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_react47.default.createElement(
|
|
3280
3227
|
"div",
|
|
3281
3228
|
{
|
|
3282
3229
|
key: idx,
|
|
3283
3230
|
className: "flex flex-col group animate-in fade-in slide-in-from-bottom-4 duration-700 fill-mode-both",
|
|
3284
3231
|
style: { animationDelay: feature.delay || "0ms" }
|
|
3285
3232
|
},
|
|
3286
|
-
/* @__PURE__ */
|
|
3287
|
-
/* @__PURE__ */
|
|
3233
|
+
/* @__PURE__ */ import_react47.default.createElement("div", { className: "flex flex-row items-center gap-4 mb-4" }, /* @__PURE__ */ import_react47.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_react47.default.createElement(import_react48.HugeiconsIcon, { icon: feature.icon, size: 24 })), /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex flex-col justify-center" }, /* @__PURE__ */ import_react47.default.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400 mb-0.5" }, feature.label || "CAPABILITY"), /* @__PURE__ */ import_react47.default.createElement("h3", { className: "text-xl tracking-tight text-black" }, feature.title))),
|
|
3234
|
+
/* @__PURE__ */ import_react47.default.createElement("div", null, /* @__PURE__ */ import_react47.default.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 pr-4" }, feature.desc))
|
|
3288
3235
|
)))));
|
|
3289
3236
|
};
|
|
3290
3237
|
|
|
3291
3238
|
// src/components/ManagedDocument.tsx
|
|
3292
|
-
var
|
|
3239
|
+
var import_react49 = __toESM(require("react"));
|
|
3293
3240
|
var ManagedDocument = ({
|
|
3294
3241
|
tagline,
|
|
3295
3242
|
title,
|
|
@@ -3297,9 +3244,9 @@ var ManagedDocument = ({
|
|
|
3297
3244
|
contactText,
|
|
3298
3245
|
contactEmail
|
|
3299
3246
|
}) => {
|
|
3300
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
3301
|
-
const titleRef = (0,
|
|
3302
|
-
(0,
|
|
3247
|
+
const [isAnimating, setIsAnimating] = (0, import_react49.useState)(false);
|
|
3248
|
+
const titleRef = (0, import_react49.useRef)(null);
|
|
3249
|
+
(0, import_react49.useEffect)(() => {
|
|
3303
3250
|
const observer = new IntersectionObserver(
|
|
3304
3251
|
([entry]) => {
|
|
3305
3252
|
if (entry.isIntersecting) {
|
|
@@ -3319,7 +3266,7 @@ var ManagedDocument = ({
|
|
|
3319
3266
|
}, []);
|
|
3320
3267
|
return (
|
|
3321
3268
|
// Outer layout wrapper (takes up available space, adds padding)
|
|
3322
|
-
/* @__PURE__ */
|
|
3269
|
+
/* @__PURE__ */ import_react49.default.createElement("div", { className: "grow pt-4 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react49.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react49.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react49.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react49.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react49.default.createElement(
|
|
3323
3270
|
"h1",
|
|
3324
3271
|
{
|
|
3325
3272
|
ref: titleRef,
|
|
@@ -3327,7 +3274,7 @@ var ManagedDocument = ({
|
|
|
3327
3274
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
3328
3275
|
},
|
|
3329
3276
|
title
|
|
3330
|
-
)), sections.map((section, index) => /* @__PURE__ */
|
|
3277
|
+
)), sections.map((section, index) => /* @__PURE__ */ import_react49.default.createElement("div", { key: index, className: "relative px-5 md:px-12 py-8 md:py-10" }, section.heading && /* @__PURE__ */ import_react49.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_react49.default.createElement("div", { className: "text-[14px] leading-[1.8] text-neutral-700 space-y-4 text-left " }, section.paragraphs.map((text, pIndex) => /* @__PURE__ */ import_react49.default.createElement("p", { key: pIndex }, text))), section.quote && /* @__PURE__ */ import_react49.default.createElement("div", { className: `border-neutral-200 border rounded-xl p-6 ${section.paragraphs && section.paragraphs.length > 0 ? "mt-6" : ""}` }, /* @__PURE__ */ import_react49.default.createElement("p", { className: "text-neutral-900 text-[14px] md:text-[14px] leading-relaxed" }, '"', section.quote, '"')))), (contactText || contactEmail) && /* @__PURE__ */ import_react49.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ import_react49.default.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ import_react49.default.createElement(
|
|
3331
3278
|
"a",
|
|
3332
3279
|
{
|
|
3333
3280
|
href: `mailto:${contactEmail}`,
|
|
@@ -3339,18 +3286,18 @@ var ManagedDocument = ({
|
|
|
3339
3286
|
};
|
|
3340
3287
|
|
|
3341
3288
|
// src/components/ManagedContactBlock.tsx
|
|
3342
|
-
var
|
|
3343
|
-
var
|
|
3289
|
+
var import_react50 = __toESM(require("react"));
|
|
3290
|
+
var import_react51 = require("@hugeicons/react");
|
|
3344
3291
|
var SecureEmail = ({ user, domain, className }) => {
|
|
3345
|
-
const [isMounted, setIsMounted] = (0,
|
|
3346
|
-
(0,
|
|
3292
|
+
const [isMounted, setIsMounted] = (0, import_react50.useState)(false);
|
|
3293
|
+
(0, import_react50.useEffect)(() => {
|
|
3347
3294
|
setIsMounted(true);
|
|
3348
3295
|
}, []);
|
|
3349
3296
|
if (!isMounted) {
|
|
3350
|
-
return /* @__PURE__ */
|
|
3297
|
+
return /* @__PURE__ */ import_react50.default.createElement("span", { className, style: { opacity: 0 } }, "Loading");
|
|
3351
3298
|
}
|
|
3352
3299
|
const email = `${user}@${domain}`;
|
|
3353
|
-
return /* @__PURE__ */
|
|
3300
|
+
return /* @__PURE__ */ import_react50.default.createElement("a", { href: `mailto:${email}`, className }, email);
|
|
3354
3301
|
};
|
|
3355
3302
|
var ManagedContactBlock = ({
|
|
3356
3303
|
tagline,
|
|
@@ -3359,7 +3306,7 @@ var ManagedContactBlock = ({
|
|
|
3359
3306
|
emails,
|
|
3360
3307
|
socials
|
|
3361
3308
|
}) => {
|
|
3362
|
-
return /* @__PURE__ */
|
|
3309
|
+
return /* @__PURE__ */ import_react50.default.createElement("div", { className: "grow pt-4 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react50.default.createElement(
|
|
3363
3310
|
"div",
|
|
3364
3311
|
{
|
|
3365
3312
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3368,21 +3315,21 @@ var ManagedContactBlock = ({
|
|
|
3368
3315
|
backgroundRepeat: "repeat"
|
|
3369
3316
|
}
|
|
3370
3317
|
}
|
|
3371
|
-
), /* @__PURE__ */
|
|
3318
|
+
), /* @__PURE__ */ import_react50.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "relative px-8 md:px-12 py-10" }, tagline && /* @__PURE__ */ import_react50.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react50.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ import_react50.default.createElement("div", { className: "relative px-8 md:px-12 py-8 pb-14" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-wrap gap-12 lg:gap-16 w-full" }, company && /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Contact Details"), /* @__PURE__ */ import_react50.default.createElement("div", { className: "space-y-3 text-[13px] text-neutral-600 leading-[1.8]" }, company.name && /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-black" }, company.name), company.lines && company.lines.map((line, idx) => /* @__PURE__ */ import_react50.default.createElement("p", { key: idx }, line)), company.phone && /* @__PURE__ */ import_react50.default.createElement("p", { className: "pt-2" }, /* @__PURE__ */ import_react50.default.createElement(
|
|
3372
3319
|
"a",
|
|
3373
3320
|
{
|
|
3374
3321
|
href: `tel:${company.phone.replace(/\s+/g, "")}`,
|
|
3375
3322
|
className: "transition-colors hover:text-black"
|
|
3376
3323
|
},
|
|
3377
3324
|
company.phone
|
|
3378
|
-
)))), emails && emails.length > 0 && /* @__PURE__ */
|
|
3325
|
+
)))), emails && emails.length > 0 && /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Email Directory"), /* @__PURE__ */ import_react50.default.createElement("div", { className: "space-y-6 text-[13px]" }, emails.map((email, idx) => /* @__PURE__ */ import_react50.default.createElement("div", { key: idx }, /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-[11px] tracking-[0.2em] mb-1.5 text-neutral-500 " }, email.label), /* @__PURE__ */ import_react50.default.createElement(
|
|
3379
3326
|
SecureEmail,
|
|
3380
3327
|
{
|
|
3381
3328
|
user: email.user,
|
|
3382
3329
|
domain: email.domain,
|
|
3383
3330
|
className: "text-neutral-600 transition-colors hover:text-black"
|
|
3384
3331
|
}
|
|
3385
|
-
))))), socials && socials.length > 0 && /* @__PURE__ */
|
|
3332
|
+
))))), socials && socials.length > 0 && /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Find Us Online"), /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col space-y-5 pt-1" }, socials.map((social, idx) => /* @__PURE__ */ import_react50.default.createElement(
|
|
3386
3333
|
"a",
|
|
3387
3334
|
{
|
|
3388
3335
|
key: idx,
|
|
@@ -3391,27 +3338,27 @@ var ManagedContactBlock = ({
|
|
|
3391
3338
|
rel: "noopener noreferrer",
|
|
3392
3339
|
className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black"
|
|
3393
3340
|
},
|
|
3394
|
-
/* @__PURE__ */
|
|
3395
|
-
/* @__PURE__ */
|
|
3341
|
+
/* @__PURE__ */ import_react50.default.createElement(import_react51.HugeiconsIcon, { icon: social.icon, size: 18 }),
|
|
3342
|
+
/* @__PURE__ */ import_react50.default.createElement("span", { className: "text-[13px]" }, social.label)
|
|
3396
3343
|
)))))))));
|
|
3397
3344
|
};
|
|
3398
3345
|
|
|
3399
3346
|
// src/components/ManagedPricingBlock.tsx
|
|
3400
|
-
var
|
|
3347
|
+
var import_react52 = __toESM(require("react"));
|
|
3401
3348
|
var import_link7 = __toESM(require("next/link"));
|
|
3402
3349
|
var import_image4 = __toESM(require("next/image"));
|
|
3403
|
-
var CheckIcon = ({ className = "" }) => /* @__PURE__ */
|
|
3404
|
-
var CrossIcon = ({ className = "" }) => /* @__PURE__ */
|
|
3350
|
+
var CheckIcon = ({ className = "" }) => /* @__PURE__ */ import_react52.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_react52.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ import_react52.default.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
3351
|
+
var CrossIcon = ({ className = "" }) => /* @__PURE__ */ import_react52.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_react52.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ import_react52.default.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
3405
3352
|
var ManagedPricingBlock = ({
|
|
3406
3353
|
tagline,
|
|
3407
3354
|
title,
|
|
3408
3355
|
plans = [],
|
|
3409
3356
|
tabs
|
|
3410
3357
|
}) => {
|
|
3411
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
3412
|
-
const [activeTabIndex, setActiveTabIndex] = (0,
|
|
3413
|
-
const titleRef = (0,
|
|
3414
|
-
(0,
|
|
3358
|
+
const [isAnimating, setIsAnimating] = (0, import_react52.useState)(false);
|
|
3359
|
+
const [activeTabIndex, setActiveTabIndex] = (0, import_react52.useState)(0);
|
|
3360
|
+
const titleRef = (0, import_react52.useRef)(null);
|
|
3361
|
+
(0, import_react52.useEffect)(() => {
|
|
3415
3362
|
const observer = new IntersectionObserver(
|
|
3416
3363
|
([entry]) => {
|
|
3417
3364
|
if (entry.isIntersecting) {
|
|
@@ -3431,7 +3378,7 @@ var ManagedPricingBlock = ({
|
|
|
3431
3378
|
}, []);
|
|
3432
3379
|
const hasTabs = tabs && tabs.length > 0;
|
|
3433
3380
|
const currentPlans = hasTabs ? tabs[activeTabIndex].plans : plans;
|
|
3434
|
-
return /* @__PURE__ */
|
|
3381
|
+
return /* @__PURE__ */ import_react52.default.createElement("div", { className: "grow pt-10 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col items-center" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "w-full flex flex-col items-center text-center mb-10 sm:mb-12" }, tagline && /* @__PURE__ */ import_react52.default.createElement("span", { className: "text-[9px] tracking-[0.4em] text-black block " }, tagline), /* @__PURE__ */ import_react52.default.createElement(
|
|
3435
3382
|
"h1",
|
|
3436
3383
|
{
|
|
3437
3384
|
ref: titleRef,
|
|
@@ -3439,9 +3386,9 @@ var ManagedPricingBlock = ({
|
|
|
3439
3386
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
3440
3387
|
},
|
|
3441
3388
|
title
|
|
3442
|
-
)), hasTabs && /* @__PURE__ */
|
|
3389
|
+
)), hasTabs && /* @__PURE__ */ import_react52.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_react52.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) => {
|
|
3443
3390
|
const isActive = activeTabIndex === idx;
|
|
3444
|
-
return /* @__PURE__ */
|
|
3391
|
+
return /* @__PURE__ */ import_react52.default.createElement(
|
|
3445
3392
|
"button",
|
|
3446
3393
|
{
|
|
3447
3394
|
key: idx,
|
|
@@ -3450,19 +3397,19 @@ var ManagedPricingBlock = ({
|
|
|
3450
3397
|
},
|
|
3451
3398
|
tab.label
|
|
3452
3399
|
);
|
|
3453
|
-
}))), /* @__PURE__ */
|
|
3400
|
+
}))), /* @__PURE__ */ import_react52.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_react52.default.createElement(
|
|
3454
3401
|
"div",
|
|
3455
3402
|
{
|
|
3456
3403
|
key: `${activeTabIndex}-${planIdx}`,
|
|
3457
3404
|
className: `bg-white rounded-3xl p-6 flex flex-col relative overflow-hidden transition-all duration-300 ${plan.isPremium ? "" : ""}`
|
|
3458
3405
|
},
|
|
3459
|
-
/* @__PURE__ */
|
|
3406
|
+
/* @__PURE__ */ import_react52.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ import_react52.default.createElement("span", { className: "text-black text-base block mb-1" }, plan.name), /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ import_react52.default.createElement("h3", { className: "text-3xl font-light text-black" }, plan.price), plan.period && /* @__PURE__ */ import_react52.default.createElement("span", { className: "text-xs text-neutral-500" }, plan.period)), /* @__PURE__ */ import_react52.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_react52.default.createElement("div", { className: "flex items-center gap-2 mt-4" }, plan.appLogos.map((logo, logoIdx) => /* @__PURE__ */ import_react52.default.createElement(
|
|
3460
3407
|
"div",
|
|
3461
3408
|
{
|
|
3462
3409
|
key: logoIdx,
|
|
3463
3410
|
className: "relative w-5 h-5 overflow-hidden flex items-center justify-center shrink-0"
|
|
3464
3411
|
},
|
|
3465
|
-
/* @__PURE__ */
|
|
3412
|
+
/* @__PURE__ */ import_react52.default.createElement(
|
|
3466
3413
|
import_image4.default,
|
|
3467
3414
|
{
|
|
3468
3415
|
src: logo.src,
|
|
@@ -3473,7 +3420,7 @@ var ManagedPricingBlock = ({
|
|
|
3473
3420
|
}
|
|
3474
3421
|
)
|
|
3475
3422
|
)))),
|
|
3476
|
-
plan.isPremium ? /* @__PURE__ */
|
|
3423
|
+
plan.isPremium ? /* @__PURE__ */ import_react52.default.createElement(ThreeDButton, { href: plan.ctaHref, className: "mb-6 w-full" }, plan.ctaText) : /* @__PURE__ */ import_react52.default.createElement(
|
|
3477
3424
|
import_link7.default,
|
|
3478
3425
|
{
|
|
3479
3426
|
href: plan.ctaHref,
|
|
@@ -3481,20 +3428,20 @@ var ManagedPricingBlock = ({
|
|
|
3481
3428
|
},
|
|
3482
3429
|
plan.ctaText
|
|
3483
3430
|
),
|
|
3484
|
-
/* @__PURE__ */
|
|
3431
|
+
/* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-col gap-3" }, plan.features.map((feature, featureIdx) => {
|
|
3485
3432
|
const isAvailable = feature.value !== false;
|
|
3486
3433
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
3487
|
-
return /* @__PURE__ */
|
|
3434
|
+
return /* @__PURE__ */ import_react52.default.createElement("div", { key: featureIdx, className: "flex items-center gap-2.5" }, isAvailable ? /* @__PURE__ */ import_react52.default.createElement(CheckIcon, null) : /* @__PURE__ */ import_react52.default.createElement(CrossIcon, null), /* @__PURE__ */ import_react52.default.createElement("span", { className: `text-xs truncate ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ import_react52.default.createElement("span", { className: "text-neutral-500 ml-1" }, "(", valueText, ")")));
|
|
3488
3435
|
}))
|
|
3489
3436
|
)))));
|
|
3490
3437
|
};
|
|
3491
3438
|
|
|
3492
3439
|
// src/components/ManagedBoardBlock.tsx
|
|
3493
|
-
var
|
|
3440
|
+
var import_react53 = __toESM(require("react"));
|
|
3494
3441
|
var import_image5 = __toESM(require("next/image"));
|
|
3495
|
-
var
|
|
3496
|
-
var
|
|
3497
|
-
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */
|
|
3442
|
+
var import_react54 = require("@hugeicons/react");
|
|
3443
|
+
var import_core_free_icons17 = require("@hugeicons/core-free-icons");
|
|
3444
|
+
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ import_react53.default.createElement(
|
|
3498
3445
|
"a",
|
|
3499
3446
|
{
|
|
3500
3447
|
href,
|
|
@@ -3502,7 +3449,7 @@ var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ import_r
|
|
|
3502
3449
|
rel: "noopener noreferrer",
|
|
3503
3450
|
className: "text-neutral-400 hover:text-black transition-colors"
|
|
3504
3451
|
},
|
|
3505
|
-
/* @__PURE__ */
|
|
3452
|
+
/* @__PURE__ */ import_react53.default.createElement(import_react54.HugeiconsIcon, { icon, size: 16 })
|
|
3506
3453
|
);
|
|
3507
3454
|
var ManagedBoardBlock = ({
|
|
3508
3455
|
tagline,
|
|
@@ -3511,7 +3458,7 @@ var ManagedBoardBlock = ({
|
|
|
3511
3458
|
contactText,
|
|
3512
3459
|
contactEmail
|
|
3513
3460
|
}) => {
|
|
3514
|
-
return /* @__PURE__ */
|
|
3461
|
+
return /* @__PURE__ */ import_react53.default.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react53.default.createElement("div", { className: "relative w-full mx-auto overflow-hidden max-w-7xl" }, /* @__PURE__ */ import_react53.default.createElement(
|
|
3515
3462
|
"div",
|
|
3516
3463
|
{
|
|
3517
3464
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3520,7 +3467,7 @@ var ManagedBoardBlock = ({
|
|
|
3520
3467
|
backgroundRepeat: "repeat"
|
|
3521
3468
|
}
|
|
3522
3469
|
}
|
|
3523
|
-
), /* @__PURE__ */
|
|
3470
|
+
), /* @__PURE__ */ import_react53.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react53.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react53.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react53.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ import_react53.default.createElement("div", { className: "relative px-5 md:px-12 py-4 md:py-8" }, /* @__PURE__ */ import_react53.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_react53.default.createElement("div", { key: idx, className: "relative p-6 md:p-8 rounded-2xl bg-white flex flex-col transition-all group" }, /* @__PURE__ */ import_react53.default.createElement("div", { className: "flex items-start space-x-4 md:space-x-5 mb-5 md:mb-6" }, /* @__PURE__ */ import_react53.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_react53.default.createElement(
|
|
3524
3471
|
import_image5.default,
|
|
3525
3472
|
{
|
|
3526
3473
|
src: member.imageSrc,
|
|
@@ -3529,44 +3476,44 @@ var ManagedBoardBlock = ({
|
|
|
3529
3476
|
sizes: "(max-width: 768px) 56px, 64px",
|
|
3530
3477
|
className: "object-cover grayscale opacity-100 transition-opacity"
|
|
3531
3478
|
}
|
|
3532
|
-
)), /* @__PURE__ */
|
|
3479
|
+
)), /* @__PURE__ */ import_react53.default.createElement("div", { className: "pt-1" }, /* @__PURE__ */ import_react53.default.createElement("h3", { className: " text-[14px] md:text-[15px] text-black tracking-tight" }, member.name), /* @__PURE__ */ import_react53.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 mt-1.5 " }, member.title))), /* @__PURE__ */ import_react53.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 text-left grow mb-8" }, member.bio), /* @__PURE__ */ import_react53.default.createElement("div", { className: "space-y-6 mt-auto" }, /* @__PURE__ */ import_react53.default.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ import_react53.default.createElement(ThreeDButton, { href: member.website }, "Visit Website")), /* @__PURE__ */ import_react53.default.createElement("div", { className: "flex space-x-4 pt-5" }, member.twitterHandle && member.twitterHandle.length > 0 && /* @__PURE__ */ import_react53.default.createElement(
|
|
3533
3480
|
MemberSocialLink,
|
|
3534
3481
|
{
|
|
3535
3482
|
href: `https://x.com/${member.twitterHandle}`,
|
|
3536
|
-
icon:
|
|
3483
|
+
icon: import_core_free_icons17.TwitterIcon,
|
|
3537
3484
|
label: "X",
|
|
3538
3485
|
name: member.name
|
|
3539
3486
|
}
|
|
3540
|
-
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */
|
|
3487
|
+
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */ import_react53.default.createElement(
|
|
3541
3488
|
MemberSocialLink,
|
|
3542
3489
|
{
|
|
3543
3490
|
href: member.linkedinHandle,
|
|
3544
|
-
icon:
|
|
3491
|
+
icon: import_core_free_icons17.LinkedinIcon,
|
|
3545
3492
|
label: "LinkedIn",
|
|
3546
3493
|
name: member.name
|
|
3547
3494
|
}
|
|
3548
|
-
))))))), (contactText || contactEmail) && /* @__PURE__ */
|
|
3495
|
+
))))))), (contactText || contactEmail) && /* @__PURE__ */ import_react53.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ import_react53.default.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ import_react53.default.createElement("a", { href: `mailto:${contactEmail}`, className: "text-black decoration-black decoration-2 underline-offset-4 ml-1 transition-colors" }, contactEmail))))));
|
|
3549
3496
|
};
|
|
3550
3497
|
|
|
3551
3498
|
// src/components/ManagedNotFoundBlock.tsx
|
|
3552
|
-
var
|
|
3499
|
+
var import_react55 = __toESM(require("react"));
|
|
3553
3500
|
var ManagedNotFoundBlock = ({
|
|
3554
3501
|
title = "404 - Page Not Found",
|
|
3555
3502
|
description = "The page you are looking for does not exist or has been moved."
|
|
3556
3503
|
}) => {
|
|
3557
|
-
return /* @__PURE__ */
|
|
3504
|
+
return /* @__PURE__ */ import_react55.default.createElement("main", { className: "min-h-screen flex items-center justify-center relative z-20 bg-transparent" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "p-6 w-full max-w-md mx-auto text-center" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "mb-8 flex justify-center" }, /* @__PURE__ */ import_react55.default.createElement(
|
|
3558
3505
|
"svg",
|
|
3559
3506
|
{
|
|
3560
3507
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3561
3508
|
viewBox: "0 0 24 24",
|
|
3562
3509
|
className: "w-12 h-12 fill-neutral-100"
|
|
3563
3510
|
},
|
|
3564
|
-
/* @__PURE__ */
|
|
3565
|
-
)), /* @__PURE__ */
|
|
3511
|
+
/* @__PURE__ */ import_react55.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" })
|
|
3512
|
+
)), /* @__PURE__ */ import_react55.default.createElement("h1", { className: " text-xl md:text-3xl text-black tracking-tight mb-4" }, title), /* @__PURE__ */ import_react55.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-12" }, description)));
|
|
3566
3513
|
};
|
|
3567
3514
|
|
|
3568
3515
|
// src/components/ManagedNewsletterSplitBlock.tsx
|
|
3569
|
-
var
|
|
3516
|
+
var import_react56 = __toESM(require("react"));
|
|
3570
3517
|
var import_image6 = __toESM(require("next/image"));
|
|
3571
3518
|
var ManagedNewsletterSplitBlock = ({
|
|
3572
3519
|
tagline,
|
|
@@ -3580,7 +3527,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3580
3527
|
ctaHref = "/contact",
|
|
3581
3528
|
children
|
|
3582
3529
|
}) => {
|
|
3583
|
-
return /* @__PURE__ */
|
|
3530
|
+
return /* @__PURE__ */ import_react56.default.createElement("div", { className: "grow flex flex-col md:flex-row relative w-full pt-32 md:pt-0" }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "hidden md:block md:w-1/2 relative min-h-screen overflow-hidden" }, /* @__PURE__ */ import_react56.default.createElement(
|
|
3584
3531
|
import_image6.default,
|
|
3585
3532
|
{
|
|
3586
3533
|
src: imageSrc,
|
|
@@ -3590,7 +3537,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3590
3537
|
className: "object-cover object-top grayscale opacity-60",
|
|
3591
3538
|
quality: 100
|
|
3592
3539
|
}
|
|
3593
|
-
), /* @__PURE__ */
|
|
3540
|
+
), /* @__PURE__ */ import_react56.default.createElement(
|
|
3594
3541
|
"div",
|
|
3595
3542
|
{
|
|
3596
3543
|
className: "absolute inset-0 z-10 pointer-events-none",
|
|
@@ -3598,7 +3545,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3598
3545
|
background: "linear-gradient(to right, rgba(255,255,255,0) 30%, #ffffff 100%)"
|
|
3599
3546
|
}
|
|
3600
3547
|
}
|
|
3601
|
-
), /* @__PURE__ */
|
|
3548
|
+
), /* @__PURE__ */ import_react56.default.createElement(
|
|
3602
3549
|
"div",
|
|
3603
3550
|
{
|
|
3604
3551
|
className: "absolute inset-x-0 bottom-0 h-40 z-10 pointer-events-none",
|
|
@@ -3606,7 +3553,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3606
3553
|
background: "linear-gradient(to bottom, rgba(255,255,255,0) 0%, #ffffff 100%)"
|
|
3607
3554
|
}
|
|
3608
3555
|
}
|
|
3609
|
-
)), /* @__PURE__ */
|
|
3556
|
+
)), /* @__PURE__ */ import_react56.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_react56.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_react56.default.createElement(
|
|
3610
3557
|
"div",
|
|
3611
3558
|
{
|
|
3612
3559
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3615,7 +3562,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3615
3562
|
backgroundRepeat: "repeat"
|
|
3616
3563
|
}
|
|
3617
3564
|
}
|
|
3618
|
-
), /* @__PURE__ */
|
|
3565
|
+
), /* @__PURE__ */ import_react56.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "mb-10 border-b border-neutral-200 pb-8 text-center md:text-left" }, tagline && /* @__PURE__ */ import_react56.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 " }, tagline), /* @__PURE__ */ import_react56.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight mb-4" }, title), subtitle && /* @__PURE__ */ import_react56.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, subtitle)), /* @__PURE__ */ import_react56.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-10 text-center md:text-left" }, description), children && /* @__PURE__ */ import_react56.default.createElement("div", { className: "mb-8 text-left" }, children), /* @__PURE__ */ import_react56.default.createElement("div", { className: "text-center md:text-left mt-10 space-y-6" }, dividerText && /* @__PURE__ */ import_react56.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "grow h-px bg-neutral-100" }), /* @__PURE__ */ import_react56.default.createElement("span", { className: "shrink mx-4 text-[11px] tracking-[0.2em] text-neutral-400 " }, dividerText), /* @__PURE__ */ import_react56.default.createElement("div", { className: "grow h-px bg-neutral-100" })), ctaText && ctaHref && /* @__PURE__ */ import_react56.default.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ import_react56.default.createElement(
|
|
3619
3566
|
ThreeDButton,
|
|
3620
3567
|
{
|
|
3621
3568
|
href: ctaHref,
|
|
@@ -3626,14 +3573,14 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3626
3573
|
};
|
|
3627
3574
|
|
|
3628
3575
|
// src/components/PortfolioHero.tsx
|
|
3629
|
-
var
|
|
3576
|
+
var import_react57 = __toESM(require("react"));
|
|
3630
3577
|
var import_link8 = __toESM(require("next/link"));
|
|
3631
3578
|
var import_image7 = __toESM(require("next/image"));
|
|
3632
|
-
var
|
|
3633
|
-
var
|
|
3579
|
+
var import_react58 = require("@hugeicons/react");
|
|
3580
|
+
var import_core_free_icons18 = require("@hugeicons/core-free-icons");
|
|
3634
3581
|
var useScrollAnimation = () => {
|
|
3635
|
-
const elementRef = (0,
|
|
3636
|
-
(0,
|
|
3582
|
+
const elementRef = (0, import_react57.useRef)(null);
|
|
3583
|
+
(0, import_react57.useEffect)(() => {
|
|
3637
3584
|
const el = elementRef.current;
|
|
3638
3585
|
if (!el) return;
|
|
3639
3586
|
const observer = new IntersectionObserver(
|
|
@@ -3669,13 +3616,13 @@ var PortfolioHero = ({
|
|
|
3669
3616
|
secondaryCtaHref
|
|
3670
3617
|
}) => {
|
|
3671
3618
|
const heroContentRef = useScrollAnimation();
|
|
3672
|
-
return /* @__PURE__ */
|
|
3619
|
+
return /* @__PURE__ */ import_react57.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_react57.default.createElement(
|
|
3673
3620
|
"div",
|
|
3674
3621
|
{
|
|
3675
3622
|
ref: heroContentRef,
|
|
3676
3623
|
className: "w-full opacity-0 translate-y-5 transition-all duration-1000 ease-out relative z-10"
|
|
3677
3624
|
},
|
|
3678
|
-
/* @__PURE__ */
|
|
3625
|
+
/* @__PURE__ */ import_react57.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-5 sm:gap-8 mb-10" }, /* @__PURE__ */ import_react57.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_react57.default.createElement(
|
|
3679
3626
|
import_image7.default,
|
|
3680
3627
|
{
|
|
3681
3628
|
src: imageSrc,
|
|
@@ -3686,7 +3633,7 @@ var PortfolioHero = ({
|
|
|
3686
3633
|
sizes: "(max-width: 640px) 80px, 128px",
|
|
3687
3634
|
quality: 100
|
|
3688
3635
|
}
|
|
3689
|
-
)), /* @__PURE__ */
|
|
3636
|
+
)), /* @__PURE__ */ import_react57.default.createElement("div", { className: "flex flex-col text-left" }, /* @__PURE__ */ import_react57.default.createElement("h1", { className: " text-3xl sm:text-5xl lg:text-6xl tracking-tight text-black leading-none mb-3" }, name), socialLabel && /* @__PURE__ */ import_react57.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, socialLabel), socialLinkText && socialLinkHref && /* @__PURE__ */ import_react57.default.createElement(
|
|
3690
3637
|
"a",
|
|
3691
3638
|
{
|
|
3692
3639
|
href: socialLinkHref,
|
|
@@ -3696,31 +3643,31 @@ var PortfolioHero = ({
|
|
|
3696
3643
|
},
|
|
3697
3644
|
socialLinkText
|
|
3698
3645
|
))),
|
|
3699
|
-
/* @__PURE__ */
|
|
3700
|
-
/* @__PURE__ */
|
|
3646
|
+
/* @__PURE__ */ import_react57.default.createElement("p", { className: "text-[13px] leading-[1.8] max-w-4xl mb-12 text-neutral-600" }, bio),
|
|
3647
|
+
/* @__PURE__ */ import_react57.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 w-full sm:w-auto" }, primaryCtaText && primaryCtaHref && /* @__PURE__ */ import_react57.default.createElement("div", { className: "w-full sm:w-auto *:w-full" }, /* @__PURE__ */ import_react57.default.createElement(
|
|
3701
3648
|
ThreeDButton,
|
|
3702
3649
|
{
|
|
3703
3650
|
href: primaryCtaHref,
|
|
3704
3651
|
className: "py-3 tracking-widest text-[11px]"
|
|
3705
3652
|
},
|
|
3706
3653
|
primaryCtaText
|
|
3707
|
-
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
3654
|
+
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react57.default.createElement(
|
|
3708
3655
|
import_link8.default,
|
|
3709
3656
|
{
|
|
3710
3657
|
href: secondaryCtaHref,
|
|
3711
3658
|
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"
|
|
3712
3659
|
},
|
|
3713
3660
|
secondaryCtaText,
|
|
3714
|
-
/* @__PURE__ */
|
|
3661
|
+
/* @__PURE__ */ import_react57.default.createElement(import_react58.HugeiconsIcon, { icon: import_core_free_icons18.ArrowRight01Icon, size: 16 })
|
|
3715
3662
|
))
|
|
3716
3663
|
));
|
|
3717
3664
|
};
|
|
3718
3665
|
|
|
3719
3666
|
// src/components/GifFeatureCard.tsx
|
|
3720
|
-
var
|
|
3667
|
+
var import_react59 = __toESM(require("react"));
|
|
3721
3668
|
var import_image8 = __toESM(require("next/image"));
|
|
3722
|
-
var
|
|
3723
|
-
var
|
|
3669
|
+
var import_react60 = require("@hugeicons/react");
|
|
3670
|
+
var import_core_free_icons19 = require("@hugeicons/core-free-icons");
|
|
3724
3671
|
var GifFeatureCard = ({
|
|
3725
3672
|
gifSrc,
|
|
3726
3673
|
title,
|
|
@@ -3728,20 +3675,20 @@ var GifFeatureCard = ({
|
|
|
3728
3675
|
alt = "Feature animation",
|
|
3729
3676
|
className = "aspect-video"
|
|
3730
3677
|
}) => {
|
|
3731
|
-
const [isLoading, setIsLoading] = (0,
|
|
3732
|
-
return /* @__PURE__ */
|
|
3733
|
-
|
|
3678
|
+
const [isLoading, setIsLoading] = (0, import_react59.useState)(true);
|
|
3679
|
+
return /* @__PURE__ */ import_react59.default.createElement("div", { className: `relative w-full bg-black overflow-hidden shadow-2xl ${className}` }, isLoading && /* @__PURE__ */ import_react59.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-black" }, /* @__PURE__ */ import_react59.default.createElement(
|
|
3680
|
+
import_react60.HugeiconsIcon,
|
|
3734
3681
|
{
|
|
3735
|
-
icon:
|
|
3682
|
+
icon: import_core_free_icons19.Loading03Icon,
|
|
3736
3683
|
size: 32,
|
|
3737
3684
|
className: "animate-spin text-white"
|
|
3738
3685
|
}
|
|
3739
|
-
)), /* @__PURE__ */
|
|
3686
|
+
)), /* @__PURE__ */ import_react59.default.createElement(
|
|
3740
3687
|
"div",
|
|
3741
3688
|
{
|
|
3742
3689
|
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"}`
|
|
3743
3690
|
},
|
|
3744
|
-
/* @__PURE__ */
|
|
3691
|
+
/* @__PURE__ */ import_react59.default.createElement(
|
|
3745
3692
|
import_image8.default,
|
|
3746
3693
|
{
|
|
3747
3694
|
src: gifSrc,
|
|
@@ -3752,16 +3699,16 @@ var GifFeatureCard = ({
|
|
|
3752
3699
|
className: "object-cover object-center pointer-events-none"
|
|
3753
3700
|
}
|
|
3754
3701
|
)
|
|
3755
|
-
), /* @__PURE__ */
|
|
3702
|
+
), /* @__PURE__ */ import_react59.default.createElement(
|
|
3756
3703
|
"div",
|
|
3757
3704
|
{
|
|
3758
3705
|
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"
|
|
3759
3706
|
}
|
|
3760
|
-
), /* @__PURE__ */
|
|
3707
|
+
), /* @__PURE__ */ import_react59.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_react59.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_react59.default.createElement("p", { className: "text-[13px] sm:text-[15px] leading-relaxed text-neutral-300 max-w-2xl drop-shadow-sm" }, subtitle)));
|
|
3761
3708
|
};
|
|
3762
3709
|
|
|
3763
3710
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
3764
|
-
var
|
|
3711
|
+
var import_react61 = __toESM(require("react"));
|
|
3765
3712
|
var import_image9 = __toESM(require("next/image"));
|
|
3766
3713
|
var MedicalFeatureStatsBlock = ({
|
|
3767
3714
|
bottomHeadline,
|
|
@@ -3770,9 +3717,9 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3770
3717
|
trustText,
|
|
3771
3718
|
stats
|
|
3772
3719
|
}) => {
|
|
3773
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
3774
|
-
const titleRef = (0,
|
|
3775
|
-
(0,
|
|
3720
|
+
const [isAnimating, setIsAnimating] = (0, import_react61.useState)(false);
|
|
3721
|
+
const titleRef = (0, import_react61.useRef)(null);
|
|
3722
|
+
(0, import_react61.useEffect)(() => {
|
|
3776
3723
|
const observer = new IntersectionObserver(
|
|
3777
3724
|
([entry]) => {
|
|
3778
3725
|
if (entry.isIntersecting) {
|
|
@@ -3790,7 +3737,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3790
3737
|
}
|
|
3791
3738
|
return () => observer.disconnect();
|
|
3792
3739
|
}, []);
|
|
3793
|
-
return /* @__PURE__ */
|
|
3740
|
+
return /* @__PURE__ */ import_react61.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
3794
3741
|
"h2",
|
|
3795
3742
|
{
|
|
3796
3743
|
ref: titleRef,
|
|
@@ -3798,7 +3745,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3798
3745
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
3799
3746
|
},
|
|
3800
3747
|
bottomHeadline
|
|
3801
|
-
), /* @__PURE__ */
|
|
3748
|
+
), /* @__PURE__ */ import_react61.default.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ import_react61.default.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ import_react61.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_react61.default.createElement(
|
|
3802
3749
|
import_image9.default,
|
|
3803
3750
|
{
|
|
3804
3751
|
src,
|
|
@@ -3807,17 +3754,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3807
3754
|
sizes: "48px",
|
|
3808
3755
|
className: "object-cover"
|
|
3809
3756
|
}
|
|
3810
|
-
)))), /* @__PURE__ */
|
|
3757
|
+
)))), /* @__PURE__ */ import_react61.default.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ import_react61.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ import_react61.default.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ import_react61.default.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ import_react61.default.createElement("h1", { className: "text-6xl gradient-text md:text-[80px] tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
|
|
3811
3758
|
};
|
|
3812
3759
|
|
|
3813
3760
|
// src/components/ConsultantShowcase.tsx
|
|
3814
|
-
var
|
|
3761
|
+
var import_react62 = __toESM(require("react"));
|
|
3815
3762
|
var import_image10 = __toESM(require("next/image"));
|
|
3816
|
-
var
|
|
3817
|
-
var
|
|
3763
|
+
var import_react63 = require("@hugeicons/react");
|
|
3764
|
+
var import_core_free_icons20 = require("@hugeicons/core-free-icons");
|
|
3818
3765
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
3819
|
-
const [isLoading, setIsLoading] = (0,
|
|
3820
|
-
return /* @__PURE__ */
|
|
3766
|
+
const [isLoading, setIsLoading] = (0, import_react62.useState)(true);
|
|
3767
|
+
return /* @__PURE__ */ import_react62.default.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ import_react62.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_react62.default.createElement(import_react63.HugeiconsIcon, { icon: import_core_free_icons20.Loading03Icon, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ import_react62.default.createElement(
|
|
3821
3768
|
import_image10.default,
|
|
3822
3769
|
{
|
|
3823
3770
|
src,
|
|
@@ -3836,9 +3783,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
3836
3783
|
var ConsultantShowcase = ({
|
|
3837
3784
|
profiles
|
|
3838
3785
|
}) => {
|
|
3839
|
-
const [currentIndex, setCurrentIndex] = (0,
|
|
3840
|
-
const [touchStart, setTouchStart] = (0,
|
|
3841
|
-
const [touchEnd, setTouchEnd] = (0,
|
|
3786
|
+
const [currentIndex, setCurrentIndex] = (0, import_react62.useState)(0);
|
|
3787
|
+
const [touchStart, setTouchStart] = (0, import_react62.useState)(null);
|
|
3788
|
+
const [touchEnd, setTouchEnd] = (0, import_react62.useState)(null);
|
|
3842
3789
|
const nextSlide = () => {
|
|
3843
3790
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
3844
3791
|
};
|
|
@@ -3863,7 +3810,7 @@ var ConsultantShowcase = ({
|
|
|
3863
3810
|
}
|
|
3864
3811
|
};
|
|
3865
3812
|
if (!profiles || profiles.length === 0) return null;
|
|
3866
|
-
return /* @__PURE__ */
|
|
3813
|
+
return /* @__PURE__ */ import_react62.default.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react62.default.createElement(
|
|
3867
3814
|
"div",
|
|
3868
3815
|
{
|
|
3869
3816
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -3873,13 +3820,13 @@ var ConsultantShowcase = ({
|
|
|
3873
3820
|
},
|
|
3874
3821
|
profiles.map((profile, idx) => {
|
|
3875
3822
|
const isActive = idx === currentIndex;
|
|
3876
|
-
return /* @__PURE__ */
|
|
3823
|
+
return /* @__PURE__ */ import_react62.default.createElement(
|
|
3877
3824
|
"div",
|
|
3878
3825
|
{
|
|
3879
3826
|
key: profile.id,
|
|
3880
3827
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
3881
3828
|
},
|
|
3882
|
-
/* @__PURE__ */
|
|
3829
|
+
/* @__PURE__ */ import_react62.default.createElement(
|
|
3883
3830
|
ImageWithLoader,
|
|
3884
3831
|
{
|
|
3885
3832
|
src: profile.imageSrc,
|
|
@@ -3887,14 +3834,14 @@ var ConsultantShowcase = ({
|
|
|
3887
3834
|
priority: idx === 0
|
|
3888
3835
|
}
|
|
3889
3836
|
),
|
|
3890
|
-
/* @__PURE__ */
|
|
3891
|
-
/* @__PURE__ */
|
|
3892
|
-
/* @__PURE__ */
|
|
3837
|
+
/* @__PURE__ */ import_react62.default.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
3838
|
+
/* @__PURE__ */ import_react62.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" }),
|
|
3839
|
+
/* @__PURE__ */ import_react62.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_react62.default.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ import_react62.default.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ import_react62.default.createElement("p", { className: "text-[15px] text-white/80 tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ import_react62.default.createElement("p", { className: "text-[15px] text-white/80 tracking-wide mt-1" }, profile.description)))
|
|
3893
3840
|
);
|
|
3894
3841
|
}),
|
|
3895
|
-
/* @__PURE__ */
|
|
3896
|
-
/* @__PURE__ */
|
|
3897
|
-
/* @__PURE__ */
|
|
3842
|
+
/* @__PURE__ */ import_react62.default.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide }),
|
|
3843
|
+
/* @__PURE__ */ import_react62.default.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide }),
|
|
3844
|
+
/* @__PURE__ */ import_react62.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_react62.default.createElement(
|
|
3898
3845
|
"button",
|
|
3899
3846
|
{
|
|
3900
3847
|
key: idx,
|
|
@@ -3906,13 +3853,13 @@ var ConsultantShowcase = ({
|
|
|
3906
3853
|
};
|
|
3907
3854
|
|
|
3908
3855
|
// src/components/ContentGridBlock.tsx
|
|
3909
|
-
var
|
|
3856
|
+
var import_react64 = __toESM(require("react"));
|
|
3910
3857
|
var import_image11 = __toESM(require("next/image"));
|
|
3911
|
-
var
|
|
3912
|
-
var
|
|
3858
|
+
var import_react65 = require("@hugeicons/react");
|
|
3859
|
+
var import_core_free_icons21 = require("@hugeicons/core-free-icons");
|
|
3913
3860
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
3914
|
-
const [isLoading, setIsLoading] = (0,
|
|
3915
|
-
return /* @__PURE__ */
|
|
3861
|
+
const [isLoading, setIsLoading] = (0, import_react64.useState)(true);
|
|
3862
|
+
return /* @__PURE__ */ import_react64.default.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ import_react64.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-100/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ import_react64.default.createElement(import_react65.HugeiconsIcon, { icon: import_core_free_icons21.Loading03Icon, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ import_react64.default.createElement(
|
|
3916
3863
|
import_image11.default,
|
|
3917
3864
|
{
|
|
3918
3865
|
src,
|
|
@@ -3934,30 +3881,30 @@ var ContentGridBlock = ({
|
|
|
3934
3881
|
middleBottomCard,
|
|
3935
3882
|
rightCards
|
|
3936
3883
|
}) => {
|
|
3937
|
-
return /* @__PURE__ */
|
|
3884
|
+
return /* @__PURE__ */ import_react64.default.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ import_react64.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ import_react64.default.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ import_react64.default.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ import_react64.default.createElement("div", null, /* @__PURE__ */ import_react64.default.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ import_react64.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react64.default.createElement(import_image11.default, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ import_react64.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ import_react64.default.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ import_react64.default.createElement(import_image11.default, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ import_react64.default.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ import_react64.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_react64.default.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ import_react64.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ import_react64.default.createElement("div", null, /* @__PURE__ */ import_react64.default.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ import_react64.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react64.default.createElement(import_image11.default, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ import_react64.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ import_react64.default.createElement("div", { key: idx, className: "relative w-full h-80 text-white rounded-3xl overflow-hidden group" }, /* @__PURE__ */ import_react64.default.createElement(
|
|
3938
3885
|
ImageWithLoader2,
|
|
3939
3886
|
{
|
|
3940
3887
|
src: card.bgImageSrc,
|
|
3941
3888
|
alt: card.title,
|
|
3942
3889
|
className: "absolute inset-0 w-full h-full"
|
|
3943
3890
|
}
|
|
3944
|
-
), /* @__PURE__ */
|
|
3891
|
+
), /* @__PURE__ */ import_react64.default.createElement("div", { className: "absolute inset-0 z-20 pointer-events-none" }), /* @__PURE__ */ import_react64.default.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ import_react64.default.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ import_react64.default.createElement("div", { className: "pt-3" }, /* @__PURE__ */ import_react64.default.createElement("h4", { className: "text-[15px] text-white tracking-wide" }, card.title), /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
|
|
3945
3892
|
};
|
|
3946
3893
|
|
|
3947
3894
|
// src/components/ManagedProjectsBlock.tsx
|
|
3948
|
-
var
|
|
3895
|
+
var import_react66 = __toESM(require("react"));
|
|
3949
3896
|
var import_link9 = __toESM(require("next/link"));
|
|
3950
3897
|
var GridSection = ({
|
|
3951
3898
|
children,
|
|
3952
3899
|
isLast = false,
|
|
3953
3900
|
className = "py-8 md:py-10"
|
|
3954
|
-
}) => /* @__PURE__ */
|
|
3901
|
+
}) => /* @__PURE__ */ import_react66.default.createElement("div", { className: `relative px-5 md:px-12 ${className} ${!isLast ? "" : ""}` }, children);
|
|
3955
3902
|
var ManagedProjectsBlock = ({
|
|
3956
3903
|
tagline,
|
|
3957
3904
|
title,
|
|
3958
3905
|
projects
|
|
3959
3906
|
}) => {
|
|
3960
|
-
return /* @__PURE__ */
|
|
3907
|
+
return /* @__PURE__ */ import_react66.default.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react66.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-5xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react66.default.createElement(
|
|
3961
3908
|
"div",
|
|
3962
3909
|
{
|
|
3963
3910
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3966,17 +3913,17 @@ var ManagedProjectsBlock = ({
|
|
|
3966
3913
|
backgroundRepeat: "repeat"
|
|
3967
3914
|
}
|
|
3968
3915
|
}
|
|
3969
|
-
), /* @__PURE__ */
|
|
3916
|
+
), /* @__PURE__ */ import_react66.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react66.default.createElement(GridSection, null, tagline && /* @__PURE__ */ import_react66.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react66.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), projects.map((project, index) => {
|
|
3970
3917
|
const isLast = index === projects.length - 1;
|
|
3971
|
-
const projectContent = /* @__PURE__ */
|
|
3972
|
-
return /* @__PURE__ */
|
|
3918
|
+
const projectContent = /* @__PURE__ */ import_react66.default.createElement("div", { className: "group block w-full" }, /* @__PURE__ */ import_react66.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_react66.default.createElement("div", { className: "flex items-center gap-3 md:gap-4" }, /* @__PURE__ */ import_react66.default.createElement("h2", { className: " text-[16px] text-black transition-all flex items-center gap-2" }, project.title, /* @__PURE__ */ import_react66.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_react66.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_react66.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 shrink-0 " }, project.date)), /* @__PURE__ */ import_react66.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));
|
|
3919
|
+
return /* @__PURE__ */ import_react66.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_react66.default.createElement("a", { href: project.link, target: "_blank", rel: "noopener noreferrer", className: "block outline-none" }, projectContent) : /* @__PURE__ */ import_react66.default.createElement(import_link9.default, { href: project.link, className: "block outline-none" }, projectContent));
|
|
3973
3920
|
}))));
|
|
3974
3921
|
};
|
|
3975
3922
|
|
|
3976
3923
|
// src/components/UniversalVerificationPage.tsx
|
|
3977
|
-
var
|
|
3978
|
-
var
|
|
3979
|
-
var
|
|
3924
|
+
var import_react67 = __toESM(require("react"));
|
|
3925
|
+
var import_react68 = require("@hugeicons/react");
|
|
3926
|
+
var import_core_free_icons22 = require("@hugeicons/core-free-icons");
|
|
3980
3927
|
var VerificationRow = ({
|
|
3981
3928
|
icon,
|
|
3982
3929
|
title,
|
|
@@ -3994,14 +3941,14 @@ var VerificationRow = ({
|
|
|
3994
3941
|
case "APPROVED":
|
|
3995
3942
|
statusText = "Completed";
|
|
3996
3943
|
statusColor = "text-neutral-600";
|
|
3997
|
-
StatusIcon =
|
|
3944
|
+
StatusIcon = import_core_free_icons22.CheckmarkCircle01Icon;
|
|
3998
3945
|
bg = "bg-neutral-50";
|
|
3999
3946
|
iconColor = "text-green-500";
|
|
4000
3947
|
break;
|
|
4001
3948
|
case "PENDING":
|
|
4002
3949
|
statusText = "Awaiting Approval";
|
|
4003
3950
|
statusColor = "text-neutral-500";
|
|
4004
|
-
StatusIcon =
|
|
3951
|
+
StatusIcon = import_core_free_icons22.Time02Icon;
|
|
4005
3952
|
bg = "bg-neutral-50";
|
|
4006
3953
|
iconColor = "text-orange-500";
|
|
4007
3954
|
break;
|
|
@@ -4009,7 +3956,7 @@ var VerificationRow = ({
|
|
|
4009
3956
|
statusText = "Action required to fix issue";
|
|
4010
3957
|
statusColor = "text-neutral-500";
|
|
4011
3958
|
bg = "bg-neutral-50";
|
|
4012
|
-
StatusIcon =
|
|
3959
|
+
StatusIcon = import_core_free_icons22.InformationCircleIcon;
|
|
4013
3960
|
iconColor = "text-red-500";
|
|
4014
3961
|
break;
|
|
4015
3962
|
case "ACTION_REQUIRED":
|
|
@@ -4017,20 +3964,20 @@ var VerificationRow = ({
|
|
|
4017
3964
|
statusText = "Start verification";
|
|
4018
3965
|
statusColor = "text-neutral-500";
|
|
4019
3966
|
bg = "bg-neutral-50";
|
|
4020
|
-
StatusIcon =
|
|
3967
|
+
StatusIcon = import_core_free_icons22.InformationCircleIcon;
|
|
4021
3968
|
iconColor = "text-neutral-400";
|
|
4022
3969
|
break;
|
|
4023
3970
|
}
|
|
4024
3971
|
const isDisabled = status === "APPROVED" || isLoading;
|
|
4025
|
-
return /* @__PURE__ */
|
|
3972
|
+
return /* @__PURE__ */ import_react67.default.createElement(
|
|
4026
3973
|
"div",
|
|
4027
3974
|
{
|
|
4028
3975
|
onClick: isDisabled ? void 0 : onClick,
|
|
4029
3976
|
className: `flex items-center p-4 transition-colors ${!isLast ? "" : ""} ${isDisabled ? "opacity-70 cursor-default" : "cursor-pointer hover:bg-neutral-50"}`
|
|
4030
3977
|
},
|
|
4031
|
-
/* @__PURE__ */
|
|
4032
|
-
/* @__PURE__ */
|
|
4033
|
-
/* @__PURE__ */
|
|
3978
|
+
/* @__PURE__ */ import_react67.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_react67.default.createElement(import_react68.HugeiconsIcon, { icon, size: 16, className: "text-black" })),
|
|
3979
|
+
/* @__PURE__ */ import_react67.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-[14px] truncate text-black" }, title), /* @__PURE__ */ import_react67.default.createElement("p", { className: `text-[10px] inline-flex items-center ${bg} rounded-full px-2 py-1 ${statusColor} mt-0.5` }, statusText)),
|
|
3980
|
+
/* @__PURE__ */ import_react67.default.createElement("div", { className: "shrink-0 ml-2" }, isLoading ? /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons22.Loading03Icon, size: 20, className: "animate-spin text-black" }) : /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: StatusIcon, size: 20, className: iconColor }))
|
|
4034
3981
|
);
|
|
4035
3982
|
};
|
|
4036
3983
|
var UniversalVerificationPage = ({
|
|
@@ -4043,36 +3990,36 @@ var UniversalVerificationPage = ({
|
|
|
4043
3990
|
onTriggerVerification,
|
|
4044
3991
|
activeLoadingType
|
|
4045
3992
|
}) => {
|
|
4046
|
-
return /* @__PURE__ */
|
|
3993
|
+
return /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 pb-12" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "mb-6 flex items-center px-1" }, /* @__PURE__ */ import_react67.default.createElement(
|
|
4047
3994
|
"button",
|
|
4048
3995
|
{
|
|
4049
3996
|
onClick: onBack,
|
|
4050
3997
|
className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none"
|
|
4051
3998
|
},
|
|
4052
|
-
/* @__PURE__ */
|
|
3999
|
+
/* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons22.ArrowLeft01Icon, size: 16 }),
|
|
4053
4000
|
" Back"
|
|
4054
|
-
)), /* @__PURE__ */
|
|
4001
|
+
)), /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-full flex flex-col gap-4 mb-8" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react67.default.createElement(
|
|
4055
4002
|
VerificationRow,
|
|
4056
4003
|
{
|
|
4057
|
-
icon:
|
|
4004
|
+
icon: import_core_free_icons22.Mail01Icon,
|
|
4058
4005
|
title: "Email Verification",
|
|
4059
4006
|
status: emailStatus,
|
|
4060
4007
|
isLoading: activeLoadingType === "EMAIL",
|
|
4061
4008
|
onClick: () => onTriggerVerification("EMAIL")
|
|
4062
4009
|
}
|
|
4063
|
-
), /* @__PURE__ */
|
|
4010
|
+
), /* @__PURE__ */ import_react67.default.createElement(
|
|
4064
4011
|
VerificationRow,
|
|
4065
4012
|
{
|
|
4066
|
-
icon:
|
|
4013
|
+
icon: import_core_free_icons22.SmartPhone01Icon,
|
|
4067
4014
|
title: "Phone Verification",
|
|
4068
4015
|
status: phoneStatus,
|
|
4069
4016
|
isLoading: activeLoadingType === "PHONE",
|
|
4070
4017
|
onClick: () => onTriggerVerification("PHONE")
|
|
4071
4018
|
}
|
|
4072
|
-
), /* @__PURE__ */
|
|
4019
|
+
), /* @__PURE__ */ import_react67.default.createElement(
|
|
4073
4020
|
VerificationRow,
|
|
4074
4021
|
{
|
|
4075
|
-
icon:
|
|
4022
|
+
icon: import_core_free_icons22.UserIcon,
|
|
4076
4023
|
title: "Identity Verification",
|
|
4077
4024
|
status: identityStatus,
|
|
4078
4025
|
isLoading: activeLoadingType === "IDENTITY",
|
|
@@ -4083,23 +4030,23 @@ var UniversalVerificationPage = ({
|
|
|
4083
4030
|
};
|
|
4084
4031
|
|
|
4085
4032
|
// src/components/UniversalRewardPage.tsx
|
|
4086
|
-
var
|
|
4033
|
+
var import_react69 = __toESM(require("react"));
|
|
4087
4034
|
var import_axios = __toESM(require("axios"));
|
|
4088
4035
|
var import_react_hot_toast9 = __toESM(require("react-hot-toast"));
|
|
4089
4036
|
var import_react_confetti = __toESM(require("react-confetti"));
|
|
4090
4037
|
var import_react_use = require("react-use");
|
|
4091
|
-
var
|
|
4092
|
-
var
|
|
4038
|
+
var import_react70 = require("@hugeicons/react");
|
|
4039
|
+
var import_core_free_icons23 = require("@hugeicons/core-free-icons");
|
|
4093
4040
|
var formatWeb3Name = (name) => {
|
|
4094
4041
|
if (!name) return "";
|
|
4095
4042
|
return name.toLowerCase().replace(/\b\w/g, (c) => c.toUpperCase());
|
|
4096
4043
|
};
|
|
4097
|
-
var PageSpinner4 = () => /* @__PURE__ */
|
|
4044
|
+
var PageSpinner4 = () => /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex justify-center items-center py-12 w-full" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons23.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
4098
4045
|
var AvatarLogo = ({ src, alt, name, sizeClass = "w-12 h-12" }) => {
|
|
4099
|
-
const [isLoaded, setIsLoaded] = (0,
|
|
4046
|
+
const [isLoaded, setIsLoaded] = (0, import_react69.useState)(false);
|
|
4100
4047
|
const fallbackUrl = `/api/avatar/?name=${encodeURIComponent(name || " ")}&background=ffffff&color=000000&size=200&font-size=0.33`;
|
|
4101
4048
|
const finalSrc = src || fallbackUrl;
|
|
4102
|
-
return /* @__PURE__ */
|
|
4049
|
+
return /* @__PURE__ */ import_react69.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_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"}` }));
|
|
4103
4050
|
};
|
|
4104
4051
|
var UniversalRewardPage = ({
|
|
4105
4052
|
leaderboardToday,
|
|
@@ -4114,11 +4061,11 @@ var UniversalRewardPage = ({
|
|
|
4114
4061
|
const onBackHandler = onBack ?? (() => {
|
|
4115
4062
|
if (typeof window !== "undefined") window.history.back();
|
|
4116
4063
|
});
|
|
4117
|
-
const [activeTabIndex, setActiveTabIndex] = (0,
|
|
4064
|
+
const [activeTabIndex, setActiveTabIndex] = (0, import_react69.useState)(1);
|
|
4118
4065
|
const tabs = [{ label: "Today" }, { label: "Week" }, { label: "Month" }];
|
|
4119
|
-
const [selectedReward, setSelectedReward] = (0,
|
|
4120
|
-
const [isClaiming, setIsClaiming] = (0,
|
|
4121
|
-
const [showConfetti, setShowConfetti] = (0,
|
|
4066
|
+
const [selectedReward, setSelectedReward] = (0, import_react69.useState)(null);
|
|
4067
|
+
const [isClaiming, setIsClaiming] = (0, import_react69.useState)(false);
|
|
4068
|
+
const [showConfetti, setShowConfetti] = (0, import_react69.useState)(false);
|
|
4122
4069
|
const getActiveLeaderboard = () => {
|
|
4123
4070
|
if (activeTabIndex === 0) return leaderboardToday || [];
|
|
4124
4071
|
if (activeTabIndex === 1) return leaderboardWeek || [];
|
|
@@ -4149,9 +4096,9 @@ var UniversalRewardPage = ({
|
|
|
4149
4096
|
setIsClaiming(false);
|
|
4150
4097
|
}
|
|
4151
4098
|
};
|
|
4152
|
-
return /* @__PURE__ */
|
|
4099
|
+
return /* @__PURE__ */ import_react69.default.createElement("div", null, /* @__PURE__ */ import_react69.default.createElement("div", { className: "mb-6 flex max-w-3xl w-full mx-auto 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: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react69.default.createElement(ManagedToaster, null), showConfetti && /* @__PURE__ */ import_react69.default.createElement("div", { className: "fixed inset-0 z-200 pointer-events-none" }, /* @__PURE__ */ import_react69.default.createElement(import_react_confetti.default, { width, height, recycle: false, numberOfPieces: 500, gravity: 0.15 })), isLoading ? /* @__PURE__ */ import_react69.default.createElement(PageSpinner4, null) : /* @__PURE__ */ import_react69.default.createElement(import_react69.default.Fragment, null, /* @__PURE__ */ import_react69.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_react69.default.createElement("div", { className: "flex flex-col items-center w-1/3 z-10" }, secondPlace ? /* @__PURE__ */ import_react69.default.createElement(import_react69.default.Fragment, null, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-black text-[10px] mb-2 truncate max-w-full px-1" }, formatWeb3Name(secondPlace.profile.web3Name)), /* @__PURE__ */ import_react69.default.createElement("div", { className: "relative shrink-0 mb-3" }, /* @__PURE__ */ import_react69.default.createElement(AvatarLogo, { src: secondPlace.profile.avatarUrl, alt: secondPlace.profile.username, name: formatWeb3Name(secondPlace.profile.web3Name), sizeClass: "w-14 h-14 ring-4 ring-orange-100" }), /* @__PURE__ */ import_react69.default.createElement("div", { className: "absolute -bottom-2 right-0 w-5 h-5 rounded-full bg-orange-400 text-white flex items-center justify-center text-[10px] border border-white " }, "2")), /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-orange-200 rounded-t-xl h-24 flex items-center justify-center" }, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-orange-400/30 text-2xl " }, "2nd"))) : /* @__PURE__ */ import_react69.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_react69.default.createElement("div", { className: "flex flex-col items-center w-1/3 z-20 -mt-8" }, firstPlace ? /* @__PURE__ */ import_react69.default.createElement(import_react69.default.Fragment, null, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-black text-[10px] mb-2 truncate max-w-full px-1" }, formatWeb3Name(firstPlace.profile.web3Name)), /* @__PURE__ */ import_react69.default.createElement("div", { className: "relative shrink-0 mb-3" }, /* @__PURE__ */ import_react69.default.createElement(AvatarLogo, { src: firstPlace.profile.avatarUrl, alt: firstPlace.profile.username, name: formatWeb3Name(firstPlace.profile.web3Name), sizeClass: "w-17 h-17 ring-4 ring-purple-200" }), /* @__PURE__ */ import_react69.default.createElement("div", { className: "absolute -bottom-2 right-2 w-5 h-5 rounded-full bg-purple-500 text-white flex items-center justify-center text-[10px] border border-white " }, "1")), /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-purple-400 rounded-t-xl h-32 flex items-center justify-center " }, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-white/40 text-3xl tracking-widest" }, "1st"))) : /* @__PURE__ */ import_react69.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_react69.default.createElement("div", { className: "flex flex-col items-center w-1/3 z-10" }, thirdPlace ? /* @__PURE__ */ import_react69.default.createElement(import_react69.default.Fragment, null, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-black text-[10px] mb-2 truncate max-w-full px-1" }, formatWeb3Name(thirdPlace.profile.web3Name)), /* @__PURE__ */ import_react69.default.createElement("div", { className: "relative shrink-0 mb-3" }, /* @__PURE__ */ import_react69.default.createElement(AvatarLogo, { src: thirdPlace.profile.avatarUrl, alt: thirdPlace.profile.username, name: formatWeb3Name(thirdPlace.profile.web3Name), sizeClass: "w-12 h-12 ring-4 ring-blue-100" }), /* @__PURE__ */ import_react69.default.createElement("div", { className: "absolute -bottom-2 right-0 w-5 h-5 rounded-full bg-blue-400 text-white flex items-center justify-center text-[10px] border border-white " }, "3")), /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-blue-200 rounded-t-xl h-20 flex items-center justify-center" }, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-blue-400/30 text-xl " }, "3rd"))) : /* @__PURE__ */ import_react69.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_react69.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_react69.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) => {
|
|
4153
4100
|
const isActive = activeTabIndex === idx;
|
|
4154
|
-
return /* @__PURE__ */
|
|
4101
|
+
return /* @__PURE__ */ import_react69.default.createElement(
|
|
4155
4102
|
"button",
|
|
4156
4103
|
{
|
|
4157
4104
|
key: idx,
|
|
@@ -4160,19 +4107,19 @@ var UniversalRewardPage = ({
|
|
|
4160
4107
|
},
|
|
4161
4108
|
tab.label
|
|
4162
4109
|
);
|
|
4163
|
-
}))), /* @__PURE__ */
|
|
4110
|
+
}))), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-6 w-full" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "bg-white rounded-2xl p-6 " }, /* @__PURE__ */ import_react69.default.createElement("h2", { className: "text-black text-lg mb-4 tracking-tight" }, "Available Tasks"), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col" }, rewards.length === 0 ? /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-xs text-neutral-400 py-6 text-center" }, "No rewards available at the moment.") : rewards.map((reward) => {
|
|
4164
4111
|
const statusText = reward.status === "CLAIMED" ? "Claimed" : "Unclaimed";
|
|
4165
|
-
return /* @__PURE__ */
|
|
4112
|
+
return /* @__PURE__ */ import_react69.default.createElement(
|
|
4166
4113
|
"div",
|
|
4167
4114
|
{
|
|
4168
4115
|
key: reward.id,
|
|
4169
4116
|
onClick: () => setSelectedReward(reward),
|
|
4170
4117
|
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"
|
|
4171
4118
|
},
|
|
4172
|
-
/* @__PURE__ */
|
|
4173
|
-
/* @__PURE__ */
|
|
4119
|
+
/* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react69.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_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons23.GiftIcon, size: 16 })), /* @__PURE__ */ import_react69.default.createElement("div", { className: "min-w-0 flex-1 flex flex-col items-start gap-0.5 pr-4" }, /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-[13px] text-black truncate w-full" }, reward.title), /* @__PURE__ */ import_react69.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))),
|
|
4120
|
+
/* @__PURE__ */ import_react69.default.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1" }, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-[13px] text-black" }, reward.amount))
|
|
4174
4121
|
);
|
|
4175
|
-
}))), remainingLeaderboard.length > 0 && /* @__PURE__ */
|
|
4122
|
+
}))), remainingLeaderboard.length > 0 && /* @__PURE__ */ import_react69.default.createElement("div", { className: "bg-white rounded-2xl p-6 " }, /* @__PURE__ */ import_react69.default.createElement("h2", { className: "text-black text-lg mb-4 tracking-tight" }, "Leaderboard"), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col" }, remainingLeaderboard.map((lb) => /* @__PURE__ */ import_react69.default.createElement("div", { key: lb.profile.username, className: "flex items-center justify-between py-3 min-w-0" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "text-[12px] text-neutral-400 w-4" }, lb.position), /* @__PURE__ */ import_react69.default.createElement(AvatarLogo, { src: lb.profile.avatarUrl, alt: lb.profile.username, name: formatWeb3Name(lb.profile.web3Name), sizeClass: "w-9 h-9" }), /* @__PURE__ */ import_react69.default.createElement("div", { className: "min-w-0 flex-1 flex flex-col" }, /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-[13px] text-black truncate" }, formatWeb3Name(lb.profile.web3Name)), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-[11px] text-neutral-400 truncate" }, "@", lb.profile.username))), /* @__PURE__ */ import_react69.default.createElement("div", { className: "shrink-0 text-[13px] text-black" }, lb.amount))))))), selectedReward && /* @__PURE__ */ import_react69.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "absolute inset-0 bg-black/40", onClick: () => !isClaiming && setSelectedReward(null) }), /* @__PURE__ */ import_react69.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_react69.default.createElement("div", { className: "flex-1 p-6 flex flex-col items-center text-center mt-2" }, /* @__PURE__ */ import_react69.default.createElement("h2", { className: "text-xl text-black mb-2" }, selectedReward.title), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-[13px] text-neutral-500 mb-6 leading-relaxed" }, selectedReward.description), selectedReward.progressText && /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full mb-6" }, /* @__PURE__ */ import_react69.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_react69.default.createElement("div", { className: " w-full rounded-xl p-4 mb-8 flex flex-col items-center" }, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400 uppercase mb-1" }, "Reward Value"), /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-3xl text-black " }, selectedReward.amount)), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-3 w-full" }, /* @__PURE__ */ import_react69.default.createElement(
|
|
4176
4123
|
ThreeDActionButton,
|
|
4177
4124
|
{
|
|
4178
4125
|
onClick: handleClaimReward,
|
|
@@ -4181,7 +4128,7 @@ var UniversalRewardPage = ({
|
|
|
4181
4128
|
className: "w-full"
|
|
4182
4129
|
},
|
|
4183
4130
|
selectedReward.status === "CLAIMED" ? "Already Claimed" : selectedReward.isEligible ? "Claim Reward" : "Not Eligible Yet"
|
|
4184
|
-
), /* @__PURE__ */
|
|
4131
|
+
), /* @__PURE__ */ import_react69.default.createElement(
|
|
4185
4132
|
"button",
|
|
4186
4133
|
{
|
|
4187
4134
|
onClick: () => setSelectedReward(null),
|
|
@@ -4193,11 +4140,11 @@ var UniversalRewardPage = ({
|
|
|
4193
4140
|
};
|
|
4194
4141
|
|
|
4195
4142
|
// src/components/UniversalReferralPage.tsx
|
|
4196
|
-
var
|
|
4143
|
+
var import_react71 = __toESM(require("react"));
|
|
4197
4144
|
var import_react_hot_toast10 = __toESM(require("react-hot-toast"));
|
|
4198
|
-
var
|
|
4199
|
-
var
|
|
4200
|
-
var PageSpinner5 = () => /* @__PURE__ */
|
|
4145
|
+
var import_react72 = require("@hugeicons/react");
|
|
4146
|
+
var import_core_free_icons24 = require("@hugeicons/core-free-icons");
|
|
4147
|
+
var PageSpinner5 = () => /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react71.default.createElement(import_react72.HugeiconsIcon, { icon: import_core_free_icons24.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
4201
4148
|
var formatWeb3Name2 = (name) => {
|
|
4202
4149
|
if (!name) return "";
|
|
4203
4150
|
return name.toLowerCase().replace(/\b\w/g, (c) => c.toUpperCase());
|
|
@@ -4228,50 +4175,50 @@ var UniversalReferralPage = ({
|
|
|
4228
4175
|
}
|
|
4229
4176
|
};
|
|
4230
4177
|
const AvatarLogo2 = ({ src, alt, name, sizeClass = "w-10 h-10" }) => {
|
|
4231
|
-
const [isLoaded, setIsLoaded] = (0,
|
|
4178
|
+
const [isLoaded, setIsLoaded] = (0, import_react71.useState)(false);
|
|
4232
4179
|
const fallbackUrl = `/api/avatar/?name=${encodeURIComponent(name || " ")}&background=ffffff&color=000000&size=200&font-size=0.33`;
|
|
4233
4180
|
const finalSrc = src || fallbackUrl;
|
|
4234
|
-
return /* @__PURE__ */
|
|
4181
|
+
return /* @__PURE__ */ import_react71.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_react71.default.createElement(import_react72.HugeiconsIcon, { icon: import_core_free_icons24.Loading03Icon, size: 16, className: "animate-spin text-neutral-400 absolute" }), /* @__PURE__ */ import_react71.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"}` }));
|
|
4235
4182
|
};
|
|
4236
|
-
return /* @__PURE__ */
|
|
4183
|
+
return /* @__PURE__ */ import_react71.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react71.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react71.default.createElement("div", { className: "mb-6 flex w-full items-center px-1" }, /* @__PURE__ */ import_react71.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_react71.default.createElement(import_react72.HugeiconsIcon, { icon: import_core_free_icons24.ArrowLeft01Icon, size: 16 }), " Back")), /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-3xl bg-white w-full" }, /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex flex-col gap-4 mb-2" }, /* @__PURE__ */ import_react71.default.createElement("div", null, /* @__PURE__ */ import_react71.default.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, "Your Referrals"), /* @__PURE__ */ import_react71.default.createElement("p", { className: "text-xs text-neutral-500" }, "Invite friends and earn rewards when they verify and activate cards.")), /* @__PURE__ */ import_react71.default.createElement("div", { className: "border border-neutral-200 rounded-xl p-4 flex items-center justify-between mt-2" }, /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ import_react71.default.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400 " }, "Invitation Code"), isLoading && !referralCode ? /* @__PURE__ */ import_react71.default.createElement("div", { className: "h-6 w-24 bg-neutral-50 animate-pulse rounded mt-1" }) : /* @__PURE__ */ import_react71.default.createElement("span", { className: "text-lg text-black tracking-widest" }, referralCode)), /* @__PURE__ */ import_react71.default.createElement(
|
|
4237
4184
|
"button",
|
|
4238
4185
|
{
|
|
4239
4186
|
onClick: handleCopyCode,
|
|
4240
4187
|
disabled: isLoading || !referralCode,
|
|
4241
4188
|
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"
|
|
4242
4189
|
},
|
|
4243
|
-
/* @__PURE__ */
|
|
4244
|
-
)), /* @__PURE__ */
|
|
4190
|
+
/* @__PURE__ */ import_react71.default.createElement(import_react72.HugeiconsIcon, { icon: import_core_free_icons24.Copy01Icon, size: 18 })
|
|
4191
|
+
)), /* @__PURE__ */ import_react71.default.createElement("div", { className: "text-[13px] text-black px-1 mt-2" }, "Total Invited: ", isLoading && !totalCount ? "-" : totalCount)), /* @__PURE__ */ import_react71.default.createElement("div", { className: "w-full overflow-hidden" }, isLoading ? /* @__PURE__ */ import_react71.default.createElement(PageSpinner5, null) : /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react71.default.createElement("div", null, referrals.length === 0 ? /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex flex-col items-center justify-center py-12 opacity-50" }, /* @__PURE__ */ import_react71.default.createElement("p", { className: "text-xs text-neutral-500 text-center" }, "You haven't referred anyone yet.")) : referrals.map((ref, idx) => /* @__PURE__ */ import_react71.default.createElement(
|
|
4245
4192
|
"div",
|
|
4246
4193
|
{
|
|
4247
4194
|
key: `${ref.profile.username}-${idx}`,
|
|
4248
4195
|
className: "flex items-center justify-between py-4 hover:bg-neutral-50 transition-colors group min-w-0 px-3 -mx-3 rounded-xl"
|
|
4249
4196
|
},
|
|
4250
|
-
/* @__PURE__ */
|
|
4197
|
+
/* @__PURE__ */ import_react71.default.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react71.default.createElement(
|
|
4251
4198
|
AvatarLogo2,
|
|
4252
4199
|
{
|
|
4253
4200
|
src: ref.profile.avatarUrl,
|
|
4254
4201
|
alt: ref.profile.username,
|
|
4255
4202
|
name: formatWeb3Name2(ref.profile.web3Name)
|
|
4256
4203
|
}
|
|
4257
|
-
), /* @__PURE__ */
|
|
4258
|
-
/* @__PURE__ */
|
|
4259
|
-
))), /* @__PURE__ */
|
|
4204
|
+
), /* @__PURE__ */ import_react71.default.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-0.5 pr-4" }, /* @__PURE__ */ import_react71.default.createElement("p", { className: "text-[14px] text-black truncate" }, formatWeb3Name2(ref.profile.web3Name)), /* @__PURE__ */ import_react71.default.createElement("p", { className: "text-[12px] text-neutral-500 truncate" }, "@", ref.profile.username))),
|
|
4205
|
+
/* @__PURE__ */ import_react71.default.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ import_react71.default.createElement("span", { className: "text-[11px] text-neutral-400" }, "Joined"), /* @__PURE__ */ import_react71.default.createElement("span", { className: "text-[12px] text-black" }, formatDate(ref.joinedAt)))
|
|
4206
|
+
))), /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex items-center justify-between pt-6 mt-2 " }, /* @__PURE__ */ import_react71.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", totalPages === 0 ? 1 : totalPages), /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react71.default.createElement(
|
|
4260
4207
|
"button",
|
|
4261
4208
|
{
|
|
4262
4209
|
onClick: () => onPageChange(currentPage - 1),
|
|
4263
4210
|
disabled: currentPage <= 1 || isLoading,
|
|
4264
4211
|
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"
|
|
4265
4212
|
},
|
|
4266
|
-
/* @__PURE__ */
|
|
4267
|
-
), /* @__PURE__ */
|
|
4213
|
+
/* @__PURE__ */ import_react71.default.createElement(import_react72.HugeiconsIcon, { icon: import_core_free_icons24.ArrowLeft01Icon, size: 14 })
|
|
4214
|
+
), /* @__PURE__ */ import_react71.default.createElement(
|
|
4268
4215
|
"button",
|
|
4269
4216
|
{
|
|
4270
4217
|
onClick: () => onPageChange(currentPage + 1),
|
|
4271
4218
|
disabled: currentPage >= totalPages || isLoading || totalPages === 0,
|
|
4272
4219
|
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"
|
|
4273
4220
|
},
|
|
4274
|
-
/* @__PURE__ */
|
|
4221
|
+
/* @__PURE__ */ import_react71.default.createElement(import_react72.HugeiconsIcon, { icon: import_core_free_icons24.ArrowRight01Icon, size: 14 })
|
|
4275
4222
|
)))))));
|
|
4276
4223
|
};
|
|
4277
4224
|
// Annotate the CommonJS export names for ESM import in node:
|