@retinalabsllc/zairusjs 5.1.50 → 5.1.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +11 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +153 -54
- package/dist/index.mjs +167 -66
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -108,7 +108,7 @@ var ThreeDButton = ({
|
|
|
108
108
|
{
|
|
109
109
|
href,
|
|
110
110
|
onClick,
|
|
111
|
-
className: `relative inline-flex items-center justify-center py-2.5 px-8 rounded-full text-neutral-900 text-xs font-
|
|
111
|
+
className: `relative inline-flex items-center justify-center py-2.5 px-8 rounded-full text-neutral-900 text-xs font-medium transition-all duration-150 select-none group overflow-hidden ${className}`,
|
|
112
112
|
style: {
|
|
113
113
|
backgroundImage: silverBg,
|
|
114
114
|
backgroundSize: "cover",
|
|
@@ -165,7 +165,7 @@ var ThreeDActionButton = ({
|
|
|
165
165
|
"aria-label": ariaLabel,
|
|
166
166
|
className: `
|
|
167
167
|
relative inline-flex items-center justify-center py-2.5 px-8 rounded-full
|
|
168
|
-
text-neutral-900 text-xs font-
|
|
168
|
+
text-neutral-900 text-xs font-medium tracking-widest
|
|
169
169
|
transition-all duration-150 select-none group outline-none overflow-hidden
|
|
170
170
|
${isInteractionDisabled ? "opacity-70 cursor-not-allowed" : "active:translate-y-0.5"}
|
|
171
171
|
${className}
|
|
@@ -920,7 +920,7 @@ var HeroSection = ({
|
|
|
920
920
|
Link4,
|
|
921
921
|
{
|
|
922
922
|
href: secondaryCtaHref,
|
|
923
|
-
className: "w-full sm:w-60 inline-flex font-
|
|
923
|
+
className: "w-full sm:w-60 inline-flex font-medium items-center justify-center text-[11px] tracking-widest rounded-full px-8 py-3 bg-black/40 backdrop-blur-md text-center text-white text-xs hover:border-neutral-500 outline-none transition-all drop-shadow-lg"
|
|
924
924
|
},
|
|
925
925
|
secondaryCtaText
|
|
926
926
|
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */ React8.createElement("div", { className: "w-full flex flex-col items-center mt-4" }, appsText && /* @__PURE__ */ React8.createElement("p", { className: "text-[9px] tracking-[0.2em] text-neutral-300 mb-5 " }, appsText), /* @__PURE__ */ React8.createElement("div", { className: "flex flex-wrap justify-center items-center gap-6 opacity-90" }, appLogos.map((logo, idx) => /* @__PURE__ */ React8.createElement("div", { key: idx, className: "relative h-6 w-6 sm:h-8 sm:w-8 flex items-center justify-center cursor-default filter invert" }, /* @__PURE__ */ React8.createElement(
|
|
@@ -1190,7 +1190,7 @@ var ManagedDocument = ({
|
|
|
1190
1190
|
"a",
|
|
1191
1191
|
{
|
|
1192
1192
|
href: `mailto:${contactEmail}`,
|
|
1193
|
-
className: "text-white decoration-neutral-600 decoration-1
|
|
1193
|
+
className: "text-white decoration-neutral-600 decoration-1 ml-1 transition-colors hover:decoration-white"
|
|
1194
1194
|
},
|
|
1195
1195
|
contactEmail
|
|
1196
1196
|
))))))
|
|
@@ -1306,7 +1306,7 @@ var ManagedPricingBlock = ({
|
|
|
1306
1306
|
{
|
|
1307
1307
|
key: idx,
|
|
1308
1308
|
onClick: () => setActiveTabIndex(idx),
|
|
1309
|
-
className: `px-4 sm:px-6 py-1.5 sm:py-2 rounded-full text-[11px] sm:text-xs transition-all duration-200 outline-none whitespace-nowrap shrink-0 ${isActive ? "bg-neutral-800 text-white" : "text-neutral-500 hover:text-white
|
|
1309
|
+
className: `px-4 sm:px-6 py-1.5 sm:py-2 rounded-full text-[11px] sm:text-xs transition-all duration-200 outline-none whitespace-nowrap shrink-0 ${isActive ? "bg-neutral-800 text-white" : "text-neutral-500 hover:text-white /50"}`
|
|
1310
1310
|
},
|
|
1311
1311
|
tab.label
|
|
1312
1312
|
);
|
|
@@ -1337,7 +1337,7 @@ var ManagedPricingBlock = ({
|
|
|
1337
1337
|
Link5,
|
|
1338
1338
|
{
|
|
1339
1339
|
href: plan.ctaHref,
|
|
1340
|
-
className: "w-full py-2.5 px-5 rounded-full font-
|
|
1340
|
+
className: "w-full py-2.5 px-5 rounded-full font-medium border border-neutral-700 text-center text-white text-xs hover:border-neutral-600 transition-colors mb-6 outline-none block"
|
|
1341
1341
|
},
|
|
1342
1342
|
plan.ctaText
|
|
1343
1343
|
),
|
|
@@ -1406,7 +1406,7 @@ var ManagedBoardBlock = ({
|
|
|
1406
1406
|
label: "LinkedIn",
|
|
1407
1407
|
name: member.name
|
|
1408
1408
|
}
|
|
1409
|
-
))))))), (contactText || contactEmail) && /* @__PURE__ */ React15.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ React15.createElement("p", { className: "text-[11px] text-neutral-500 text-left" }, contactText, contactEmail && /* @__PURE__ */ React15.createElement("a", { href: `mailto:${contactEmail}`, className: "text-white decoration-white decoration-2
|
|
1409
|
+
))))))), (contactText || contactEmail) && /* @__PURE__ */ React15.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ React15.createElement("p", { className: "text-[11px] text-neutral-500 text-left" }, contactText, contactEmail && /* @__PURE__ */ React15.createElement("a", { href: `mailto:${contactEmail}`, className: "text-white decoration-white decoration-2 ml-1 transition-colors" }, contactEmail))))));
|
|
1410
1410
|
};
|
|
1411
1411
|
|
|
1412
1412
|
// src/components/ManagedNotFoundBlock.tsx
|
|
@@ -1430,7 +1430,7 @@ var ManagedNotFoundBlock = ({
|
|
|
1430
1430
|
Link6,
|
|
1431
1431
|
{
|
|
1432
1432
|
href: backLinkHref,
|
|
1433
|
-
className: "inline-flex items-center justify-center px-8 py-2.5 border border-neutral-800 text-white
|
|
1433
|
+
className: "inline-flex items-center justify-center px-8 py-2.5 border border-neutral-800 text-white transition-colors rounded-full text-[11px] tracking-widest outline-none"
|
|
1434
1434
|
},
|
|
1435
1435
|
backLinkText
|
|
1436
1436
|
)));
|
|
@@ -1670,7 +1670,7 @@ var PortfolioHero = ({
|
|
|
1670
1670
|
href: socialLinkHref,
|
|
1671
1671
|
target: "_blank",
|
|
1672
1672
|
rel: "noopener noreferrer",
|
|
1673
|
-
className: "text-[11px] md:text-[14px] text-neutral-300 hover:text-white transition-colors mt-1
|
|
1673
|
+
className: "text-[11px] md:text-[14px] text-neutral-300 hover:text-white transition-colors mt-1 decoration-neutral-700 hover:decoration-white"
|
|
1674
1674
|
},
|
|
1675
1675
|
socialLinkText
|
|
1676
1676
|
))),
|
|
@@ -1686,7 +1686,7 @@ var PortfolioHero = ({
|
|
|
1686
1686
|
Link7,
|
|
1687
1687
|
{
|
|
1688
1688
|
href: secondaryCtaHref,
|
|
1689
|
-
className: "w-full sm:w-auto inline-flex items-center justify-center gap-3 text-[11px] tracking-[0.2em] rounded-full px-8 py-2.5 border border-neutral-700 transition-colors text-white
|
|
1689
|
+
className: "w-full sm:w-auto inline-flex items-center justify-center gap-3 text-[11px] tracking-[0.2em] rounded-full px-8 py-2.5 border border-neutral-700 transition-colors text-white outline-none"
|
|
1690
1690
|
},
|
|
1691
1691
|
secondaryCtaText,
|
|
1692
1692
|
/* @__PURE__ */ React21.createElement(HugeiconsIcon9, { icon: ArrowRight01Icon2, size: 16 })
|
|
@@ -1817,7 +1817,7 @@ var UniversalSidebar = ({
|
|
|
1817
1817
|
"div",
|
|
1818
1818
|
{
|
|
1819
1819
|
onClick: handleCopyWallet,
|
|
1820
|
-
className: "flex items-center gap-2 bg-neutral-900 rounded-full p-1 pr-3 cursor-pointer
|
|
1820
|
+
className: "flex items-center gap-2 bg-neutral-900 rounded-full p-1 pr-3 cursor-pointer transition-colors",
|
|
1821
1821
|
title: "Copy Address"
|
|
1822
1822
|
},
|
|
1823
1823
|
web3Avatar ? /* @__PURE__ */ React23.createElement("img", { src: web3Avatar, alt: "Avatar", className: "w-6 h-6 rounded-full bg-neutral-800 object-cover shrink-0" }) : /* @__PURE__ */ React23.createElement("div", { className: "w-6 h-6 rounded-full bg-neutral-800 flex items-center justify-center text-[9px] text-white shrink-0" }, userInitials.substring(0, 2)),
|
|
@@ -1829,7 +1829,7 @@ var UniversalSidebar = ({
|
|
|
1829
1829
|
setShowNotifDialog(true);
|
|
1830
1830
|
setSelectedNotif(null);
|
|
1831
1831
|
},
|
|
1832
|
-
className: "relative w-8 h-8 shrink-0 bg-neutral-900 rounded-full flex items-center justify-center text-neutral-400 hover:text-white
|
|
1832
|
+
className: "relative w-8 h-8 shrink-0 bg-neutral-900 rounded-full flex items-center justify-center text-neutral-400 hover:text-white transition-all duration-300 outline-none"
|
|
1833
1833
|
},
|
|
1834
1834
|
/* @__PURE__ */ React23.createElement(HugeiconsIcon11, { icon: Notification01Icon, size: 14 }),
|
|
1835
1835
|
unreadNotificationsCount > 0 && /* @__PURE__ */ React23.createElement("span", { className: "absolute top-2 right-2.5 w-2 h-2 bg-blue-500 rounded-full border border-neutral-900" })
|
|
@@ -1837,7 +1837,7 @@ var UniversalSidebar = ({
|
|
|
1837
1837
|
Link8,
|
|
1838
1838
|
{
|
|
1839
1839
|
href: backUrl,
|
|
1840
|
-
className: "w-10 h-10 shrink-0 bg-neutral-900 rounded-full flex items-center justify-center text-neutral-400 hover:text-white
|
|
1840
|
+
className: "w-10 h-10 shrink-0 bg-neutral-900 rounded-full flex items-center justify-center text-neutral-400 hover:text-white transition-all duration-300 outline-none",
|
|
1841
1841
|
"aria-label": "Go Back"
|
|
1842
1842
|
},
|
|
1843
1843
|
/* @__PURE__ */ React23.createElement(HugeiconsIcon11, { icon: ArrowLeft01Icon2, size: 18 })
|
|
@@ -1884,7 +1884,7 @@ var UniversalSidebar = ({
|
|
|
1884
1884
|
key: item.name,
|
|
1885
1885
|
href: item.path,
|
|
1886
1886
|
onClick: (e) => onNavClick ? onNavClick(e, item.path) : void 0,
|
|
1887
|
-
className: `flex items-center gap-3 px-3 py-2 rounded-full transition-all outline-none group shrink-0 ${isCurrentRoute ? "bg-neutral-800 text-white" : "text-neutral-400 hover:text-white
|
|
1887
|
+
className: `flex items-center gap-3 px-3 py-2 rounded-full transition-all outline-none group shrink-0 ${isCurrentRoute ? "bg-neutral-800 text-white" : "text-neutral-400 hover:text-white /50"}`,
|
|
1888
1888
|
title: isCollapsed && !isMobileOpen ? item.name : void 0
|
|
1889
1889
|
},
|
|
1890
1890
|
/* @__PURE__ */ React23.createElement(
|
|
@@ -1902,7 +1902,7 @@ var UniversalSidebar = ({
|
|
|
1902
1902
|
"button",
|
|
1903
1903
|
{
|
|
1904
1904
|
onClick: () => setShowLogoutDialog(true),
|
|
1905
|
-
className: "w-8 h-8 shrink-0 rounded-full bg-neutral-800 flex items-center justify-center text-neutral-400 hover:text-white
|
|
1905
|
+
className: "w-8 h-8 shrink-0 rounded-full bg-neutral-800 flex items-center justify-center text-neutral-400 hover:text-white transition-all outline-none",
|
|
1906
1906
|
title: "Secure Logout"
|
|
1907
1907
|
},
|
|
1908
1908
|
/* @__PURE__ */ React23.createElement(HugeiconsIcon11, { icon: LogoutCircle02Icon, size: 16 })
|
|
@@ -1910,7 +1910,7 @@ var UniversalSidebar = ({
|
|
|
1910
1910
|
"button",
|
|
1911
1911
|
{
|
|
1912
1912
|
onClick: () => setIsCollapsed(!isCollapsed),
|
|
1913
|
-
className: "flex items-center justify-center md:justify-start gap-3 w-full p-2.5 rounded-full text-neutral-400 hover:text-white
|
|
1913
|
+
className: "flex items-center justify-center md:justify-start gap-3 w-full p-2.5 rounded-full text-neutral-400 hover:text-white transition-colors outline-none"
|
|
1914
1914
|
},
|
|
1915
1915
|
/* @__PURE__ */ React23.createElement(HugeiconsIcon11, { icon: SidebarLeft01Icon, size: 18, className: "shrink-0 text-neutral-500" }),
|
|
1916
1916
|
!isCollapsed && /* @__PURE__ */ React23.createElement("span", { className: "text-xs " }, "Collapse")
|
|
@@ -1923,7 +1923,7 @@ var UniversalSidebar = ({
|
|
|
1923
1923
|
setSelectedNotif(notif);
|
|
1924
1924
|
onNotificationClick?.(notif);
|
|
1925
1925
|
},
|
|
1926
|
-
className: "p-3 flex items-start gap-3
|
|
1926
|
+
className: "p-3 flex items-start gap-3 cursor-pointer transition-colors"
|
|
1927
1927
|
},
|
|
1928
1928
|
/* @__PURE__ */ React23.createElement("div", { className: "mt-1.5 shrink-0" }, !notif.isRead ? /* @__PURE__ */ React23.createElement("div", { className: "w-1.5 h-1.5 bg-blue-500 rounded-full" }) : /* @__PURE__ */ React23.createElement("div", { className: "w-1.5 h-1.5 bg-transparent" })),
|
|
1929
1929
|
/* @__PURE__ */ React23.createElement("div", { className: "flex-1 min-w-0 text-left" }, /* @__PURE__ */ React23.createElement("h5", { className: `text-[12px] truncate ${notif.isRead ? "text-neutral-400" : "text-white"}` }, notif.title), /* @__PURE__ */ React23.createElement("p", { className: "text-[11px] text-neutral-500 truncate mt-0.5" }, notif.message), /* @__PURE__ */ React23.createElement("span", { className: "text-[9px] text-neutral-600 tracking-widest mt-2 block" }, formatNotifDate(notif.createdAt)))
|
|
@@ -1932,7 +1932,7 @@ var UniversalSidebar = ({
|
|
|
1932
1932
|
{
|
|
1933
1933
|
disabled: notificationPage <= 1,
|
|
1934
1934
|
onClick: () => onNotificationPageChange?.(notificationPage - 1),
|
|
1935
|
-
className: "w-7 h-7 flex items-center justify-center rounded-full border border-neutral-700 text-neutral-400 disabled:opacity-30 outline-none
|
|
1935
|
+
className: "w-7 h-7 flex items-center justify-center rounded-full border border-neutral-700 text-neutral-400 disabled:opacity-30 outline-none hover:text-white transition-colors"
|
|
1936
1936
|
},
|
|
1937
1937
|
/* @__PURE__ */ React23.createElement(HugeiconsIcon11, { icon: ArrowLeft01Icon2, size: 12 })
|
|
1938
1938
|
), /* @__PURE__ */ React23.createElement(
|
|
@@ -1940,7 +1940,7 @@ var UniversalSidebar = ({
|
|
|
1940
1940
|
{
|
|
1941
1941
|
disabled: notificationPage >= notificationTotalPages || notificationTotalPages === 0,
|
|
1942
1942
|
onClick: () => onNotificationPageChange?.(notificationPage + 1),
|
|
1943
|
-
className: "w-7 h-7 flex items-center justify-center rounded-full border border-neutral-700 text-neutral-400 disabled:opacity-30 outline-none
|
|
1943
|
+
className: "w-7 h-7 flex items-center justify-center rounded-full border border-neutral-700 text-neutral-400 disabled:opacity-30 outline-none hover:text-white transition-colors"
|
|
1944
1944
|
},
|
|
1945
1945
|
/* @__PURE__ */ React23.createElement(HugeiconsIcon11, { icon: ArrowRight01Icon3, size: 12 })
|
|
1946
1946
|
))))), showLogoutDialog && showLogoutAction && /* @__PURE__ */ React23.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React23.createElement(
|
|
@@ -1954,7 +1954,7 @@ var UniversalSidebar = ({
|
|
|
1954
1954
|
{
|
|
1955
1955
|
onClick: () => setShowLogoutDialog(false),
|
|
1956
1956
|
disabled: isLoggingOut,
|
|
1957
|
-
className: "flex-1 py-3 text-[13px] text-neutral-400
|
|
1957
|
+
className: "flex-1 py-3 text-[13px] text-neutral-400 hover:text-white transition-colors disabled:opacity-50 outline-none"
|
|
1958
1958
|
},
|
|
1959
1959
|
"Cancel"
|
|
1960
1960
|
), /* @__PURE__ */ React23.createElement(
|
|
@@ -1962,7 +1962,7 @@ var UniversalSidebar = ({
|
|
|
1962
1962
|
{
|
|
1963
1963
|
onClick: handleLogoutInitiation,
|
|
1964
1964
|
disabled: isLoggingOut,
|
|
1965
|
-
className: "flex-1 py-3 text-[13px] text-red-400
|
|
1965
|
+
className: "flex-1 py-3 text-[13px] text-red-400 hover:text-red-300 transition-colors disabled:opacity-50 flex justify-center items-center outline-none"
|
|
1966
1966
|
},
|
|
1967
1967
|
isLoggingOut ? /* @__PURE__ */ React23.createElement(ButtonSpinner, null) : "Log Out"
|
|
1968
1968
|
)))), showInterceptDialog && /* @__PURE__ */ React23.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React23.createElement(
|
|
@@ -1975,14 +1975,14 @@ var UniversalSidebar = ({
|
|
|
1975
1975
|
"button",
|
|
1976
1976
|
{
|
|
1977
1977
|
onClick: onCancelIntercept,
|
|
1978
|
-
className: "flex-1 py-3 text-[13px] text-neutral-400
|
|
1978
|
+
className: "flex-1 py-3 text-[13px] text-neutral-400 hover:text-white transition-colors outline-none"
|
|
1979
1979
|
},
|
|
1980
1980
|
"Cancel"
|
|
1981
1981
|
), /* @__PURE__ */ React23.createElement(
|
|
1982
1982
|
"button",
|
|
1983
1983
|
{
|
|
1984
1984
|
onClick: onConfirmIntercept,
|
|
1985
|
-
className: "flex-1 py-3 text-[13px] text-white
|
|
1985
|
+
className: "flex-1 py-3 text-[13px] text-white transition-colors flex justify-center items-center outline-none"
|
|
1986
1986
|
},
|
|
1987
1987
|
"Leave"
|
|
1988
1988
|
)))));
|
|
@@ -2209,7 +2209,9 @@ import React26, { useState as useState15, useEffect as useEffect13 } from "react
|
|
|
2209
2209
|
import toast5 from "react-hot-toast";
|
|
2210
2210
|
import { HugeiconsIcon as HugeiconsIcon14 } from "@hugeicons/react";
|
|
2211
2211
|
import {
|
|
2212
|
-
CircleLock02Icon as CircleLock02Icon2
|
|
2212
|
+
CircleLock02Icon as CircleLock02Icon2,
|
|
2213
|
+
CancelCircleIcon as CancelCircleIcon2,
|
|
2214
|
+
Loading03Icon as Loading03Icon5
|
|
2213
2215
|
} from "@hugeicons/core-free-icons";
|
|
2214
2216
|
var UniversalProfileSettings = ({
|
|
2215
2217
|
initialFirstName,
|
|
@@ -2219,11 +2221,19 @@ var UniversalProfileSettings = ({
|
|
|
2219
2221
|
memberSince,
|
|
2220
2222
|
isReadOnly = false,
|
|
2221
2223
|
bannerProps,
|
|
2224
|
+
hasPin = false,
|
|
2225
|
+
isPinLoading = false,
|
|
2226
|
+
onSavePin,
|
|
2222
2227
|
onSaveProfile
|
|
2223
2228
|
}) => {
|
|
2224
2229
|
const [firstName, setFirstName] = useState15(initialFirstName);
|
|
2225
2230
|
const [lastName, setLastName] = useState15(initialLastName);
|
|
2226
2231
|
const [isSubmitting, setIsSubmitting] = useState15(false);
|
|
2232
|
+
const [isPinModalOpen, setIsPinModalOpen] = useState15(false);
|
|
2233
|
+
const [oldPin, setOldPin] = useState15("");
|
|
2234
|
+
const [newPin, setNewPin] = useState15("");
|
|
2235
|
+
const [confirmPin, setConfirmPin] = useState15("");
|
|
2236
|
+
const [isPinSubmitting, setIsPinSubmitting] = useState15(false);
|
|
2227
2237
|
useEffect13(() => {
|
|
2228
2238
|
setFirstName(initialFirstName || "");
|
|
2229
2239
|
setLastName(initialLastName || "");
|
|
@@ -2252,9 +2262,45 @@ var UniversalProfileSettings = ({
|
|
|
2252
2262
|
setIsSubmitting(false);
|
|
2253
2263
|
}
|
|
2254
2264
|
};
|
|
2265
|
+
const closePinModal = () => {
|
|
2266
|
+
if (isPinSubmitting) return;
|
|
2267
|
+
setIsPinModalOpen(false);
|
|
2268
|
+
setOldPin("");
|
|
2269
|
+
setNewPin("");
|
|
2270
|
+
setConfirmPin("");
|
|
2271
|
+
};
|
|
2272
|
+
const handlePinInput = (val, setter) => {
|
|
2273
|
+
setter(val.replace(/\D/g, "").substring(0, 4));
|
|
2274
|
+
};
|
|
2275
|
+
const handlePinSubmit = async (e) => {
|
|
2276
|
+
e.preventDefault();
|
|
2277
|
+
if (!onSavePin) return;
|
|
2278
|
+
if (hasPin && oldPin.length !== 4) return toast5.error("Old PIN must be exactly 4 digits.");
|
|
2279
|
+
if (newPin.length !== 4) return toast5.error("New PIN must be exactly 4 digits.");
|
|
2280
|
+
if (newPin !== confirmPin) return toast5.error("New PINs do not match.");
|
|
2281
|
+
setIsPinSubmitting(true);
|
|
2282
|
+
try {
|
|
2283
|
+
const action = hasPin ? "change_pin" : "create_pin";
|
|
2284
|
+
const res = await onSavePin({
|
|
2285
|
+
action,
|
|
2286
|
+
oldPin: hasPin ? oldPin : void 0,
|
|
2287
|
+
newPin
|
|
2288
|
+
});
|
|
2289
|
+
if (res.success) {
|
|
2290
|
+
toast5.success(res.message || "PIN updated successfully.");
|
|
2291
|
+
closePinModal();
|
|
2292
|
+
} else {
|
|
2293
|
+
toast5.error(res.error || "Failed to update PIN.");
|
|
2294
|
+
}
|
|
2295
|
+
} catch (error) {
|
|
2296
|
+
toast5.error("Uh oh! Something went wrong.");
|
|
2297
|
+
} finally {
|
|
2298
|
+
setIsPinSubmitting(false);
|
|
2299
|
+
}
|
|
2300
|
+
};
|
|
2255
2301
|
const hasChanges = firstName !== initialFirstName || lastName !== initialLastName;
|
|
2256
2302
|
const isSaveDisabled = isSubmitting || isReadOnly || !hasChanges || firstName.trim().length === 0 || lastName.trim().length === 0;
|
|
2257
|
-
return /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col max-w-5xl rounded-2xl p-6 bg-neutral-900
|
|
2303
|
+
return /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col max-w-5xl rounded-2xl p-6 bg-neutral-900 gap-8 animate-in fade-in duration-300" }, /* @__PURE__ */ React26.createElement(ManagedToaster, null), /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ React26.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React26.createElement("h1", { className: "text-white text-xl mb-1 truncate tracking-tight" }, "Personal Settings"), /* @__PURE__ */ React26.createElement("p", { className: "text-xs text-neutral-400 truncate" }, "Manage your personal account profile.")), isReadOnly && /* @__PURE__ */ React26.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-800 text-neutral-400 rounded-full shrink-0" }, /* @__PURE__ */ React26.createElement(HugeiconsIcon14, { icon: CircleLock02Icon2, size: 18, className: "text-current" }))), bannerProps && /* @__PURE__ */ React26.createElement(Banner, { ...bannerProps }), /* @__PURE__ */ React26.createElement("div", { className: "w-full max-w-5xl" }, /* @__PURE__ */ React26.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col sm:flex-row gap-6" }, /* @__PURE__ */ React26.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React26.createElement(
|
|
2258
2304
|
TextInput,
|
|
2259
2305
|
{
|
|
2260
2306
|
label: "First Name",
|
|
@@ -2281,7 +2327,15 @@ var UniversalProfileSettings = ({
|
|
|
2281
2327
|
},
|
|
2282
2328
|
disabled: true
|
|
2283
2329
|
}
|
|
2284
|
-
), /* @__PURE__ */ React26.createElement("
|
|
2330
|
+
), /* @__PURE__ */ React26.createElement("div", { className: "flex items-center justify-between mt-1" }, /* @__PURE__ */ React26.createElement("p", { className: "text-[11px] text-neutral-500 truncate" }, "To change your email address, please contact support."), /* @__PURE__ */ React26.createElement(
|
|
2331
|
+
"button",
|
|
2332
|
+
{
|
|
2333
|
+
type: "button",
|
|
2334
|
+
onClick: () => setIsPinModalOpen(true),
|
|
2335
|
+
className: "text-[11px] text-neutral-400 hover:text-white transition-colors underline-offset-4 outline-none"
|
|
2336
|
+
},
|
|
2337
|
+
"PIN Management Settings"
|
|
2338
|
+
))), /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between pt-8 mt-2 gap-6 sm:gap-4" }, /* @__PURE__ */ React26.createElement("div", { className: "flex items-center gap-6 min-w-0" }, /* @__PURE__ */ React26.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React26.createElement("span", { className: "text-[11px] text-neutral-500 tracking-[0.2em] block truncate" }, "Account Status"), /* @__PURE__ */ React26.createElement("span", { className: "text-xs text-white block truncate" }, accountStatus)), /* @__PURE__ */ React26.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React26.createElement("span", { className: "text-[11px] text-neutral-500 tracking-[0.2em] block truncate" }, "Member Since"), /* @__PURE__ */ React26.createElement("span", { className: "text-xs text-white block truncate" }, memberSince ? new Date(memberSince).toLocaleDateString("en-US", { month: "long", day: "numeric", year: "numeric" }) : "N/A"))), /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col-reverse sm:flex-row items-center gap-3 sm:gap-4 w-full sm:w-auto shrink-0" }, hasChanges && !isSubmitting && !isReadOnly && /* @__PURE__ */ React26.createElement(
|
|
2285
2339
|
"button",
|
|
2286
2340
|
{
|
|
2287
2341
|
type: "button",
|
|
@@ -2301,7 +2355,49 @@ var UniversalProfileSettings = ({
|
|
|
2301
2355
|
className: "min-w-32 w-full sm:w-auto"
|
|
2302
2356
|
},
|
|
2303
2357
|
"Save Changes"
|
|
2304
|
-
))))))
|
|
2358
|
+
))))), isPinModalOpen && /* @__PURE__ */ React26.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React26.createElement("div", { className: "absolute inset-0 bg-black/60", onClick: closePinModal }), /* @__PURE__ */ React26.createElement("div", { className: "relative w-full max-w-sm bg-neutral-900 rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React26.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ React26.createElement("h3", { className: "text-[15px] text-white tracking-tight" }, hasPin ? "Change PIN" : "Create PIN"), /* @__PURE__ */ React26.createElement("button", { onClick: closePinModal, disabled: isPinSubmitting, className: "text-neutral-500 hover:text-white transition-colors outline-none disabled:opacity-50" }, /* @__PURE__ */ React26.createElement(HugeiconsIcon14, { icon: CancelCircleIcon2, size: 18 }))), /* @__PURE__ */ React26.createElement("div", { className: "p-6" }, isPinLoading ? /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col items-center justify-center py-10" }, /* @__PURE__ */ React26.createElement(HugeiconsIcon14, { icon: Loading03Icon5, size: 28, className: "animate-spin text-neutral-500 mb-4" })) : /* @__PURE__ */ React26.createElement("form", { onSubmit: handlePinSubmit, className: "flex flex-col gap-5" }, hasPin && /* @__PURE__ */ React26.createElement("div", null, /* @__PURE__ */ React26.createElement("label", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Old PIN"), /* @__PURE__ */ React26.createElement(
|
|
2359
|
+
"input",
|
|
2360
|
+
{
|
|
2361
|
+
type: "password",
|
|
2362
|
+
maxLength: 4,
|
|
2363
|
+
disabled: isPinSubmitting,
|
|
2364
|
+
value: oldPin,
|
|
2365
|
+
onChange: (e) => handlePinInput(e.target.value, setOldPin),
|
|
2366
|
+
className: "w-full px-4 py-2.5 bg-neutral-950 border border-neutral-800 rounded-xl text-white text-[13px] outline-none focus:border-neutral-600 transition-colors placeholder-neutral-700 tracking-[0.2em]",
|
|
2367
|
+
placeholder: "\u2022\u2022\u2022\u2022"
|
|
2368
|
+
}
|
|
2369
|
+
)), /* @__PURE__ */ React26.createElement("div", null, /* @__PURE__ */ React26.createElement("label", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, hasPin ? "New PIN" : "Enter 4-Digit PIN"), /* @__PURE__ */ React26.createElement(
|
|
2370
|
+
"input",
|
|
2371
|
+
{
|
|
2372
|
+
type: "password",
|
|
2373
|
+
maxLength: 4,
|
|
2374
|
+
disabled: isPinSubmitting,
|
|
2375
|
+
value: newPin,
|
|
2376
|
+
onChange: (e) => handlePinInput(e.target.value, setNewPin),
|
|
2377
|
+
className: "w-full px-4 py-2.5 bg-neutral-950 border border-neutral-800 rounded-xl text-white text-[13px] outline-none focus:border-neutral-600 transition-colors placeholder-neutral-700 tracking-[0.2em]",
|
|
2378
|
+
placeholder: "\u2022\u2022\u2022\u2022"
|
|
2379
|
+
}
|
|
2380
|
+
)), /* @__PURE__ */ React26.createElement("div", null, /* @__PURE__ */ React26.createElement("label", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Retype New PIN"), /* @__PURE__ */ React26.createElement(
|
|
2381
|
+
"input",
|
|
2382
|
+
{
|
|
2383
|
+
type: "password",
|
|
2384
|
+
maxLength: 4,
|
|
2385
|
+
disabled: isPinSubmitting,
|
|
2386
|
+
value: confirmPin,
|
|
2387
|
+
onChange: (e) => handlePinInput(e.target.value, setConfirmPin),
|
|
2388
|
+
className: "w-full px-4 py-2.5 bg-neutral-950 border border-neutral-800 rounded-xl text-white text-[13px] outline-none focus:border-neutral-600 transition-colors placeholder-neutral-700 tracking-[0.2em]",
|
|
2389
|
+
placeholder: "\u2022\u2022\u2022\u2022"
|
|
2390
|
+
}
|
|
2391
|
+
)), /* @__PURE__ */ React26.createElement("div", { className: "pt-4" }, /* @__PURE__ */ React26.createElement(
|
|
2392
|
+
ThreeDActionButton,
|
|
2393
|
+
{
|
|
2394
|
+
type: "submit",
|
|
2395
|
+
disabled: isPinSubmitting || newPin.length !== 4 || confirmPin.length !== 4 || hasPin && oldPin.length !== 4,
|
|
2396
|
+
isLoading: isPinSubmitting,
|
|
2397
|
+
className: "w-full py-3"
|
|
2398
|
+
},
|
|
2399
|
+
hasPin ? "Update PIN" : "Set PIN"
|
|
2400
|
+
)))))));
|
|
2305
2401
|
};
|
|
2306
2402
|
|
|
2307
2403
|
// src/components/UniversalErrorView.tsx
|
|
@@ -2342,7 +2438,7 @@ var UniversalErrorView = ({
|
|
|
2342
2438
|
"button",
|
|
2343
2439
|
{
|
|
2344
2440
|
onClick: () => window.location.href = returnUrl,
|
|
2345
|
-
className: "px-6 py-2
|
|
2441
|
+
className: "px-6 py-2 text-white border border-neutral-700 rounded-full text-[11px] tracking-widest transition-colors w-full sm:w-auto outline-none"
|
|
2346
2442
|
},
|
|
2347
2443
|
returnLabel
|
|
2348
2444
|
) : (
|
|
@@ -2351,14 +2447,14 @@ var UniversalErrorView = ({
|
|
|
2351
2447
|
"button",
|
|
2352
2448
|
{
|
|
2353
2449
|
onClick: () => window.location.href = returnUrl,
|
|
2354
|
-
className: "px-6 py-2 bg-transparent border border-neutral-700
|
|
2450
|
+
className: "px-6 py-2 bg-transparent border border-neutral-700 text-neutral-400 hover:text-white rounded-full text-[11px] tracking-widest transition-colors w-full sm:w-auto outline-none"
|
|
2355
2451
|
},
|
|
2356
2452
|
"Back Home"
|
|
2357
2453
|
), /* @__PURE__ */ React27.createElement(
|
|
2358
2454
|
"button",
|
|
2359
2455
|
{
|
|
2360
2456
|
onClick: onRetry,
|
|
2361
|
-
className: "px-6 py-2 bg-white
|
|
2457
|
+
className: "px-6 py-2 bg-white text-black rounded-full text-[11px] tracking-widest transition-colors w-full sm:w-auto outline-none capitalize"
|
|
2362
2458
|
},
|
|
2363
2459
|
"Refresh ",
|
|
2364
2460
|
envName
|
|
@@ -2375,15 +2471,15 @@ import toast6 from "react-hot-toast";
|
|
|
2375
2471
|
import {
|
|
2376
2472
|
ArrowLeft01Icon as ArrowLeft01Icon3,
|
|
2377
2473
|
ArrowRight01Icon as ArrowRight01Icon4,
|
|
2378
|
-
Loading03Icon as
|
|
2474
|
+
Loading03Icon as Loading03Icon6,
|
|
2379
2475
|
ArrowDownRight01Icon,
|
|
2380
2476
|
ArrowUpRight01Icon,
|
|
2381
2477
|
Search01Icon,
|
|
2382
2478
|
SearchList02Icon,
|
|
2383
2479
|
ListSettingIcon,
|
|
2384
|
-
CancelCircleIcon as
|
|
2480
|
+
CancelCircleIcon as CancelCircleIcon3
|
|
2385
2481
|
} from "@hugeicons/core-free-icons";
|
|
2386
|
-
var PageSpinner2 = () => /* @__PURE__ */ React28.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ React28.createElement(HugeiconsIcon16, { icon:
|
|
2482
|
+
var PageSpinner2 = () => /* @__PURE__ */ React28.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ React28.createElement(HugeiconsIcon16, { icon: Loading03Icon6, size: 32, className: "animate-spin mb-4 text-white" }));
|
|
2387
2483
|
var formatDate = (dateInput) => {
|
|
2388
2484
|
const d = new Date(dateInput);
|
|
2389
2485
|
const day = d.getDate();
|
|
@@ -2394,6 +2490,10 @@ var formatDate = (dateInput) => {
|
|
|
2394
2490
|
var formatTime = (dateInput) => {
|
|
2395
2491
|
return new Date(dateInput).toLocaleTimeString("en-US", { hour: "2-digit", minute: "2-digit" });
|
|
2396
2492
|
};
|
|
2493
|
+
var truncateAddress = (address) => {
|
|
2494
|
+
if (!address || address.length < 12) return address;
|
|
2495
|
+
return `${address.substring(0, 6)}...${address.substring(address.length - 4)}`;
|
|
2496
|
+
};
|
|
2397
2497
|
var UniversalTransactionPage = ({
|
|
2398
2498
|
headerTitle,
|
|
2399
2499
|
headerDescription,
|
|
@@ -2478,7 +2578,7 @@ var UniversalTransactionPage = ({
|
|
|
2478
2578
|
"button",
|
|
2479
2579
|
{
|
|
2480
2580
|
onClick: () => setIsDirectionModalOpen(true),
|
|
2481
|
-
className: "flex items-center gap-2 whitespace-nowrap border border-neutral-800 px-5 py-2 rounded-full text-[12px] text-neutral-400 hover:text-white
|
|
2581
|
+
className: "flex items-center gap-2 whitespace-nowrap border border-neutral-800 px-5 py-2 rounded-full text-[12px] text-neutral-400 hover:text-white transition-colors outline-none"
|
|
2482
2582
|
},
|
|
2483
2583
|
/* @__PURE__ */ React28.createElement(HugeiconsIcon16, { icon: SearchList02Icon, size: 12 }),
|
|
2484
2584
|
activeDirectionFilter === "ALL" ? "Payment Type" : activeDirectionFilter
|
|
@@ -2486,7 +2586,7 @@ var UniversalTransactionPage = ({
|
|
|
2486
2586
|
"button",
|
|
2487
2587
|
{
|
|
2488
2588
|
onClick: () => setIsTypeModalOpen(true),
|
|
2489
|
-
className: "flex items-center gap-2 whitespace-nowrap border border-neutral-800 px-5 py-2 rounded-full text-[12px] text-neutral-400 hover:text-white
|
|
2589
|
+
className: "flex items-center gap-2 whitespace-nowrap border border-neutral-800 px-5 py-2 rounded-full text-[12px] text-neutral-400 hover:text-white transition-colors outline-none"
|
|
2490
2590
|
},
|
|
2491
2591
|
/* @__PURE__ */ React28.createElement(HugeiconsIcon16, { icon: ListSettingIcon, size: 14 }),
|
|
2492
2592
|
activeTypeFilter === "ALL" ? "All Transactions" : activeTypeFilter.replace("_", " ")
|
|
@@ -2495,7 +2595,7 @@ var UniversalTransactionPage = ({
|
|
|
2495
2595
|
{
|
|
2496
2596
|
key: tx.id,
|
|
2497
2597
|
onClick: () => setSelectedTransaction(tx),
|
|
2498
|
-
className: "flex items-center justify-between py-4
|
|
2598
|
+
className: "flex items-center justify-between py-4 /50 transition-colors cursor-pointer group min-w-0 px-2 -mx-2 rounded-xl"
|
|
2499
2599
|
},
|
|
2500
2600
|
/* @__PURE__ */ React28.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ React28.createElement("div", { className: `w-10 h-10 shrink-0 rounded-full flex items-center justify-center bg-neutral-700 text-white` }, /* @__PURE__ */ React28.createElement(HugeiconsIcon16, { icon: tx.direction === "CREDIT" ? ArrowDownRight01Icon : ArrowUpRight01Icon, size: 18 })), /* @__PURE__ */ React28.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-1" }, /* @__PURE__ */ React28.createElement("p", { className: "text-[13px] text-white truncate" }, getDisplayName(tx)), /* @__PURE__ */ React28.createElement("p", { className: `text-[13px] text-neutral-400 truncate transition-all duration-300 ${hideBalanceAmounts ? "blur-sm opacity-40 select-none" : ""}` }, tx.direction === "CREDIT" ? "+" : "-", tx.amount, " ", tx.currency))),
|
|
2501
2601
|
/* @__PURE__ */ React28.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] text-neutral-500" }, formatDate(tx.createdAt)), /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] text-neutral-500 capitalize" }, tx.direction.toLowerCase()))
|
|
@@ -2515,16 +2615,8 @@ var UniversalTransactionPage = ({
|
|
|
2515
2615
|
className: "p-2 border border-neutral-800 rounded-full text-neutral-500 hover:text-white hover:border-neutral-600 disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none"
|
|
2516
2616
|
},
|
|
2517
2617
|
/* @__PURE__ */ React28.createElement(HugeiconsIcon16, { icon: ArrowRight01Icon4, size: 14 })
|
|
2518
|
-
)))))), selectedTransaction && /* @__PURE__ */ React28.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React28.createElement("div", { className: "absolute inset-0 bg-black/60", onClick: () => setSelectedTransaction(null) }), /* @__PURE__ */ React28.createElement("div", { className: "relative w-full max-w-sm bg-neutral-900 rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[90vh]" }, /* @__PURE__ */ React28.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React28.createElement("h3", { className: "text-[15px] text-white tracking-tight" }, "Details"), /* @__PURE__ */ React28.createElement("button", { onClick: () => setSelectedTransaction(null), className: "text-neutral-500 hover:text-white transition-colors outline-none" }, /* @__PURE__ */ React28.createElement(HugeiconsIcon16, { icon:
|
|
2519
|
-
"
|
|
2520
|
-
{
|
|
2521
|
-
href: `https://basescan.org/tx/${selectedTransaction.reference}`,
|
|
2522
|
-
target: "_blank",
|
|
2523
|
-
rel: "noopener noreferrer",
|
|
2524
|
-
className: "text-[11px] text-white mt-4 transition-colors tracking-wide hover:text-neutral-300"
|
|
2525
|
-
},
|
|
2526
|
-
"View in block explorer"
|
|
2527
|
-
)), /* @__PURE__ */ React28.createElement("div", { className: "grid grid-cols-1 gap-y-8 gap-x-4 mb-10 mt-6" }, /* @__PURE__ */ React28.createElement("div", null, /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Reference ID"), /* @__PURE__ */ React28.createElement("span", { className: "text-[13px] text-white break-all" }, selectedTransaction.reference)), /* @__PURE__ */ React28.createElement("div", null, /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Date & Time"), /* @__PURE__ */ React28.createElement("span", { className: "text-[13px] text-white" }, formatDate(selectedTransaction.createdAt), " at ", formatTime(selectedTransaction.createdAt))), /* @__PURE__ */ React28.createElement("div", null, /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Transaction Type"), /* @__PURE__ */ React28.createElement("span", { className: "text-[13px] text-white capitalize" }, selectedTransaction.type.replace("_", " ").toLowerCase())), /* @__PURE__ */ React28.createElement("div", null, /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Flow Direction"), /* @__PURE__ */ React28.createElement("span", { className: "text-[13px] text-white capitalize" }, selectedTransaction.direction.toLowerCase())), selectedTransaction.metadata && Object.entries(selectedTransaction.metadata).map(([key, value]) => {
|
|
2618
|
+
)))))), selectedTransaction && /* @__PURE__ */ React28.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React28.createElement("div", { className: "absolute inset-0 bg-black/60", onClick: () => setSelectedTransaction(null) }), /* @__PURE__ */ React28.createElement("div", { className: "relative w-full max-w-sm bg-neutral-900 rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[90vh]" }, /* @__PURE__ */ React28.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React28.createElement("h3", { className: "text-[15px] text-white tracking-tight" }, "Details"), /* @__PURE__ */ React28.createElement("button", { onClick: () => setSelectedTransaction(null), className: "text-neutral-500 hover:text-white transition-colors outline-none" }, /* @__PURE__ */ React28.createElement(HugeiconsIcon16, { icon: CancelCircleIcon3, size: 18 }))), /* @__PURE__ */ React28.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6" }, /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col items-center justify-center mb-4" }, /* @__PURE__ */ React28.createElement("div", { className: `w-12 h-12 rounded-full flex items-center justify-center mb-4 bg-neutral-700 text-white` }, /* @__PURE__ */ React28.createElement(HugeiconsIcon16, { icon: selectedTransaction.direction === "CREDIT" ? ArrowDownRight01Icon : ArrowUpRight01Icon, size: 20 })), /* @__PURE__ */ React28.createElement("h2", { className: `text-2xl text-white mb-2 transition-all duration-300 ${hideBalanceAmounts ? "blur-[6px] opacity-40 select-none" : ""}` }, selectedTransaction.direction === "CREDIT" ? "+" : "-", selectedTransaction.amount, " ", selectedTransaction.currency), /* @__PURE__ */ React28.createElement("span", { className: "text-[9px] tracking-widest text-neutral-400 px-4 py-1.5 rounded-full border border-neutral-800" }, selectedTransaction.status)), /* @__PURE__ */ React28.createElement("div", { className: "grid grid-cols-1 gap-y-8 gap-x-4 mb-10 mt-6" }, /* @__PURE__ */ React28.createElement("div", null, /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Reference ID"), /* @__PURE__ */ React28.createElement("span", { className: "text-[13px] text-white break-all" }, selectedTransaction.reference)), /* @__PURE__ */ React28.createElement("div", null, /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Date & Time"), /* @__PURE__ */ React28.createElement("span", { className: "text-[13px] text-white" }, formatDate(selectedTransaction.createdAt), " at ", formatTime(selectedTransaction.createdAt))), /* @__PURE__ */ React28.createElement("div", null, /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Transaction Type"), /* @__PURE__ */ React28.createElement("span", { className: "text-[13px] text-white capitalize" }, selectedTransaction.type.replace("_", " ").toLowerCase())), /* @__PURE__ */ React28.createElement("div", null, /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Flow Direction"), /* @__PURE__ */ React28.createElement("span", { className: "text-[13px] text-white capitalize" }, selectedTransaction.direction.toLowerCase())), selectedTransaction.metadata?.fromAddress && selectedTransaction.metadata?.toAddress && /* @__PURE__ */ React28.createElement("div", null, /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Transfer Route"), /* @__PURE__ */ React28.createElement("div", { className: "flex items-center gap-2 text-[13px] text-white" }, /* @__PURE__ */ React28.createElement("span", { className: "truncate" }, truncateAddress(String(selectedTransaction.metadata.fromAddress))), /* @__PURE__ */ React28.createElement("span", { className: "text-neutral-500" }, "\u2192"), /* @__PURE__ */ React28.createElement("span", { className: "truncate" }, truncateAddress(String(selectedTransaction.metadata.toAddress))))), selectedTransaction.metadata && Object.entries(selectedTransaction.metadata).map(([key, value]) => {
|
|
2619
|
+
if (key === "fromAddress" || key === "toAddress") return null;
|
|
2528
2620
|
if (value === null || value === void 0 || typeof value === "object") return null;
|
|
2529
2621
|
const formattedKey = key.replace(/([A-Z])/g, " $1").replace(/^./, (str) => str.toUpperCase());
|
|
2530
2622
|
return /* @__PURE__ */ React28.createElement("div", { key }, /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, formattedKey), /* @__PURE__ */ React28.createElement("span", { className: "text-[13px] text-white break-all" }, String(value)));
|
|
@@ -2540,9 +2632,18 @@ var UniversalTransactionPage = ({
|
|
|
2540
2632
|
"button",
|
|
2541
2633
|
{
|
|
2542
2634
|
onClick: () => onReportTransaction && onReportTransaction(selectedTransaction),
|
|
2543
|
-
className: "w-full flex items-center font-
|
|
2635
|
+
className: "w-full flex items-center font-medium justify-center py-2.5 rounded-full border border-neutral-700 text-white transition-colors outline-none text-[13px] tracking-wide mt-2"
|
|
2544
2636
|
},
|
|
2545
2637
|
"Report Transaction"
|
|
2638
|
+
), selectedTransaction.type === "WALLET_TRANSACTION" && /* @__PURE__ */ React28.createElement(
|
|
2639
|
+
"a",
|
|
2640
|
+
{
|
|
2641
|
+
href: `https://basescan.org/tx/${selectedTransaction.reference}`,
|
|
2642
|
+
target: "_blank",
|
|
2643
|
+
rel: "noopener noreferrer",
|
|
2644
|
+
className: "w-full flex items-center font-medium justify-center py-2.5 rounded-full border border-neutral-700 text-white transition-colors outline-none text-[13px] tracking-wide mt-2"
|
|
2645
|
+
},
|
|
2646
|
+
"View in block explorer"
|
|
2546
2647
|
))))), isDirectionModalOpen && /* @__PURE__ */ React28.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ React28.createElement("div", { className: "absolute inset-0 bg-black/60", onClick: () => setIsDirectionModalOpen(false) }), /* @__PURE__ */ React28.createElement("div", { ref: directionDropdownRef, className: "relative w-72 bg-neutral-900 shadow-2xl rounded-2xl flex flex-col items-center overflow-hidden animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React28.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ React28.createElement("h3", { className: "text-[14px] text-white tracking-tight" }, "Payment Type")), /* @__PURE__ */ React28.createElement("div", { className: "w-full flex flex-col pl-2 pr-2" }, ["ALL", "CREDIT", "DEBIT"].map((option) => /* @__PURE__ */ React28.createElement(
|
|
2547
2648
|
"button",
|
|
2548
2649
|
{
|
|
@@ -2551,14 +2652,14 @@ var UniversalTransactionPage = ({
|
|
|
2551
2652
|
onDirectionFilterChange(option);
|
|
2552
2653
|
setIsDirectionModalOpen(false);
|
|
2553
2654
|
},
|
|
2554
|
-
className: `text-left px-4 py-3 text-[11px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none ${activeDirectionFilter === option ? "bg-neutral-800 text-white" : "text-neutral-400
|
|
2655
|
+
className: `text-left px-4 py-3 text-[11px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none ${activeDirectionFilter === option ? "bg-neutral-800 text-white" : "text-neutral-400 hover:text-white"}`
|
|
2555
2656
|
},
|
|
2556
2657
|
/* @__PURE__ */ React28.createElement("span", { className: "truncate pr-2" }, option.charAt(0).toUpperCase() + option.slice(1).toLowerCase())
|
|
2557
2658
|
))), /* @__PURE__ */ React28.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ React28.createElement(
|
|
2558
2659
|
"button",
|
|
2559
2660
|
{
|
|
2560
2661
|
onClick: () => setIsDirectionModalOpen(false),
|
|
2561
|
-
className: "w-full py-3 text-[13px] text-neutral-500
|
|
2662
|
+
className: "w-full py-3 text-[13px] text-neutral-500 hover:text-white transition-colors outline-none"
|
|
2562
2663
|
},
|
|
2563
2664
|
"Cancel"
|
|
2564
2665
|
)))), isTypeModalOpen && /* @__PURE__ */ React28.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ React28.createElement("div", { className: "absolute inset-0 bg-black/60", onClick: () => setIsTypeModalOpen(false) }), /* @__PURE__ */ React28.createElement("div", { ref: typeDropdownRef, className: "relative w-72 bg-neutral-900 shadow-2xl rounded-2xl flex flex-col items-center overflow-hidden animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React28.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ React28.createElement("h3", { className: "text-[14px] text-white tracking-tight" }, "Transactions Type")), /* @__PURE__ */ React28.createElement("div", { className: "w-full flex flex-col pl-2 pr-2" }, [
|
|
@@ -2573,14 +2674,14 @@ var UniversalTransactionPage = ({
|
|
|
2573
2674
|
onTypeFilterChange(option.value);
|
|
2574
2675
|
setIsTypeModalOpen(false);
|
|
2575
2676
|
},
|
|
2576
|
-
className: `text-left px-4 py-3 text-[11px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none ${activeTypeFilter === option.value ? "bg-neutral-800 text-white" : "text-neutral-400
|
|
2677
|
+
className: `text-left px-4 py-3 text-[11px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none ${activeTypeFilter === option.value ? "bg-neutral-800 text-white" : "text-neutral-400 hover:text-white"}`
|
|
2577
2678
|
},
|
|
2578
2679
|
/* @__PURE__ */ React28.createElement("span", { className: "truncate pr-2" }, option.label.charAt(0).toUpperCase() + option.label.slice(1).toLowerCase())
|
|
2579
2680
|
))), /* @__PURE__ */ React28.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ React28.createElement(
|
|
2580
2681
|
"button",
|
|
2581
2682
|
{
|
|
2582
2683
|
onClick: () => setIsTypeModalOpen(false),
|
|
2583
|
-
className: "w-full py-3 text-[13px] text-neutral-500
|
|
2684
|
+
className: "w-full py-3 text-[13px] text-neutral-500 hover:text-white transition-colors outline-none"
|
|
2584
2685
|
},
|
|
2585
2686
|
"Cancel"
|
|
2586
2687
|
)))));
|
|
@@ -2671,12 +2772,12 @@ var UniversalHomeView = ({
|
|
|
2671
2772
|
}
|
|
2672
2773
|
},
|
|
2673
2774
|
/* @__PURE__ */ React29.createElement("span", { className: "absolute inset-0 bg-linear-to-r from-white/30 to-transparent pointer-events-none" }),
|
|
2674
|
-
/* @__PURE__ */ React29.createElement("span", { className: "relative z-10 flex items-center gap-1.5 leading-none text-[13px] tracking-wide font-
|
|
2775
|
+
/* @__PURE__ */ React29.createElement("span", { className: "relative z-10 flex items-center gap-1.5 leading-none text-[13px] tracking-wide font-medium drop-shadow-[0_1px_1px_rgba(255,255,255,0.8)]" }, primaryAction.label, primaryAction.icon && /* @__PURE__ */ React29.createElement(HugeiconsIcon17, { icon: primaryAction.icon, size: 16 }))
|
|
2675
2776
|
), secondaryAction && /* @__PURE__ */ React29.createElement(
|
|
2676
2777
|
"button",
|
|
2677
2778
|
{
|
|
2678
2779
|
onClick: secondaryAction.onClick,
|
|
2679
|
-
className: "flex items-center gap-1.5 px-8 py-2 rounded-full border border-neutral-800 text-white transition-colors
|
|
2780
|
+
className: "flex items-center gap-1.5 px-8 py-2 rounded-full border border-neutral-800 text-white transition-colors outline-none"
|
|
2680
2781
|
},
|
|
2681
2782
|
/* @__PURE__ */ React29.createElement("span", { className: "text-[13px] tracking-wide" }, secondaryAction.label),
|
|
2682
2783
|
secondaryAction.icon && /* @__PURE__ */ React29.createElement(HugeiconsIcon17, { icon: secondaryAction.icon, size: 16 })
|
|
@@ -2685,9 +2786,9 @@ var UniversalHomeView = ({
|
|
|
2685
2786
|
{
|
|
2686
2787
|
key: action.id,
|
|
2687
2788
|
onClick: action.onClick,
|
|
2688
|
-
className: `w-full h-23.75 sm:h-28.75 rounded-2xl
|
|
2789
|
+
className: `w-full h-23.75 sm:h-28.75 rounded-2xl border border-neutral-800 p-2.5 sm:p-3 flex flex-col justify-between items-start cursor-pointer active:scale-[0.98] transition-all outline-none`
|
|
2689
2790
|
},
|
|
2690
|
-
/* @__PURE__ */ React29.createElement("div", { className: `w-7 h-7 sm:w-9 sm:h-9 rounded-full flex items-center justify-center
|
|
2791
|
+
/* @__PURE__ */ React29.createElement("div", { className: `w-7 h-7 sm:w-9 sm:h-9 rounded-full flex items-center justify-center border border-neutral-800 text-white}` }, /* @__PURE__ */ React29.createElement("div", { className: "scale-75 sm:scale-100 text-white flex items-center justify-center" }, /* @__PURE__ */ React29.createElement(HugeiconsIcon17, { icon: action.icon, size: 18 }))),
|
|
2691
2792
|
/* @__PURE__ */ React29.createElement("span", { className: "text-[10px] sm:text-[12px] text-neutral-300 text-left leading-[1.2] whitespace-pre-line mt-1" }, action.label)
|
|
2692
2793
|
)))), /* @__PURE__ */ React29.createElement("div", { className: "w-full" }, /* @__PURE__ */ React29.createElement(
|
|
2693
2794
|
UniversalTransactionPage,
|
|
@@ -2705,13 +2806,13 @@ import React30, { useState as useState18 } from "react";
|
|
|
2705
2806
|
import { HugeiconsIcon as HugeiconsIcon18 } from "@hugeicons/react";
|
|
2706
2807
|
import {
|
|
2707
2808
|
Search01Icon as Search01Icon2,
|
|
2708
|
-
CancelCircleIcon as
|
|
2709
|
-
Loading03Icon as
|
|
2809
|
+
CancelCircleIcon as CancelCircleIcon4,
|
|
2810
|
+
Loading03Icon as Loading03Icon7
|
|
2710
2811
|
} from "@hugeicons/core-free-icons";
|
|
2711
|
-
var PageSpinner3 = () => /* @__PURE__ */ React30.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ React30.createElement(HugeiconsIcon18, { icon:
|
|
2812
|
+
var PageSpinner3 = () => /* @__PURE__ */ React30.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ React30.createElement(HugeiconsIcon18, { icon: Loading03Icon7, size: 32, className: "animate-spin mb-4 text-white" }));
|
|
2712
2813
|
var WalletLogo = ({ src, alt, sizeClass = "w-10 h-10" }) => {
|
|
2713
2814
|
const [isLoaded, setIsLoaded] = useState18(false);
|
|
2714
|
-
return /* @__PURE__ */ React30.createElement("div", { className: `relative shrink-0 rounded-full bg-black flex items-center justify-center overflow-hidden ${sizeClass}` }, !isLoaded && /* @__PURE__ */ React30.createElement(HugeiconsIcon18, { icon:
|
|
2815
|
+
return /* @__PURE__ */ React30.createElement("div", { className: `relative shrink-0 rounded-full bg-black flex items-center justify-center overflow-hidden ${sizeClass}` }, !isLoaded && /* @__PURE__ */ React30.createElement(HugeiconsIcon18, { icon: Loading03Icon7, size: 16, className: "animate-spin text-neutral-600 absolute" }), /* @__PURE__ */ React30.createElement(
|
|
2715
2816
|
"img",
|
|
2716
2817
|
{
|
|
2717
2818
|
src,
|
|
@@ -2763,7 +2864,7 @@ var UniversalWalletPage = ({
|
|
|
2763
2864
|
{
|
|
2764
2865
|
key: wallet.id,
|
|
2765
2866
|
onClick: () => setSelectedWallet(wallet),
|
|
2766
|
-
className: "flex items-center justify-between py-4
|
|
2867
|
+
className: "flex items-center justify-between py-4 /50 transition-colors cursor-pointer group min-w-0 px-2 -mx-2 rounded-xl"
|
|
2767
2868
|
},
|
|
2768
2869
|
/* @__PURE__ */ React30.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ React30.createElement(WalletLogo, { src: wallet.logoSrc, alt: wallet.name }), /* @__PURE__ */ React30.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-1" }, /* @__PURE__ */ React30.createElement("p", { className: "text-[13px] text-white truncate font-medium" }, wallet.name), /* @__PURE__ */ React30.createElement("p", { className: `text-[13px] text-neutral-400 truncate transition-all duration-300 ${hideBalanceAmounts ? "blur-sm opacity-40 select-none" : ""}` }, wallet.balance, " ", wallet.currency))),
|
|
2769
2870
|
/* @__PURE__ */ React30.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ React30.createElement("span", { className: "text-[10px] tracking-wide text-neutral-400 bg-neutral-800 px-2.5 py-1 rounded-full " }, wallet.network))
|
|
@@ -2773,7 +2874,7 @@ var UniversalWalletPage = ({
|
|
|
2773
2874
|
} }), /* @__PURE__ */ React30.createElement("div", { className: "relative w-full max-w-sm bg-neutral-900 rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[90vh]" }, showToast && /* @__PURE__ */ React30.createElement("div", { className: "absolute top-4 left-1/2 -translate-x-1/2 z-50 bg-neutral-800 text-white px-5 py-2.5 rounded-full text-[12px] font-medium tracking-wide shadow-xl animate-in slide-in-from-top-4 fade-in duration-200 pointer-events-none whitespace-nowrap" }, "Address copied to clipboard"), /* @__PURE__ */ React30.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React30.createElement("h3", { className: "text-[15px] text-white tracking-tight" }, "Wallet Details"), /* @__PURE__ */ React30.createElement("button", { onClick: () => {
|
|
2774
2875
|
setSelectedWallet(null);
|
|
2775
2876
|
setShowToast(false);
|
|
2776
|
-
}, className: "text-neutral-500 hover:text-white transition-colors outline-none" }, /* @__PURE__ */ React30.createElement(HugeiconsIcon18, { icon:
|
|
2877
|
+
}, className: "text-neutral-500 hover:text-white transition-colors outline-none" }, /* @__PURE__ */ React30.createElement(HugeiconsIcon18, { icon: CancelCircleIcon4, size: 18 }))), /* @__PURE__ */ React30.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-2" }, /* @__PURE__ */ React30.createElement("div", { className: "flex flex-col items-center justify-center mb-6" }, /* @__PURE__ */ React30.createElement(WalletLogo, { src: selectedWallet.logoSrc, alt: selectedWallet.name, sizeClass: "w-14 h-14 mb-4" }), /* @__PURE__ */ React30.createElement("h2", { className: `text-2xl text-white mb-2 transition-all duration-300 font-medium ${hideBalanceAmounts ? "blur-[6px] opacity-40 select-none" : ""}` }, selectedWallet.balance, " ", selectedWallet.currency), /* @__PURE__ */ React30.createElement("span", { className: "text-[9px] tracking-widest text-neutral-400 px-4 py-1.5 rounded-full border border-neutral-800 uppercase mt-1" }, selectedWallet.network, " NETWORK")), renderQrCode && /* @__PURE__ */ React30.createElement("div", { className: "w-full flex justify-center mb-6" }, renderQrCode(selectedWallet)), /* @__PURE__ */ React30.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-10" }, /* @__PURE__ */ React30.createElement("div", null, /* @__PURE__ */ React30.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Wallet Address"), /* @__PURE__ */ React30.createElement("span", { className: "text-[13px] text-white break-all font-medium" }, selectedWallet.address)), /* @__PURE__ */ React30.createElement("div", null, /* @__PURE__ */ React30.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Wallet Name"), /* @__PURE__ */ React30.createElement("span", { className: "text-[13px] text-white" }, selectedWallet.name))), /* @__PURE__ */ React30.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React30.createElement(
|
|
2777
2878
|
ThreeDActionButton,
|
|
2778
2879
|
{
|
|
2779
2880
|
onClick: () => onDownloadPayId && onDownloadPayId(selectedWallet),
|
|
@@ -2785,7 +2886,7 @@ var UniversalWalletPage = ({
|
|
|
2785
2886
|
"button",
|
|
2786
2887
|
{
|
|
2787
2888
|
onClick: () => handleCopy(selectedWallet),
|
|
2788
|
-
className: "w-full flex font-
|
|
2889
|
+
className: "w-full flex font-medium items-center justify-center py-2.5 rounded-full border border-neutral-700 text-white outline-none text-[13px] tracking-wide"
|
|
2789
2890
|
},
|
|
2790
2891
|
"Copy Wallet Address"
|
|
2791
2892
|
))))));
|
|
@@ -2877,10 +2978,10 @@ var MedicalFeatureStatsBlock = ({
|
|
|
2877
2978
|
import React34, { useState as useState20 } from "react";
|
|
2878
2979
|
import Image10 from "next/image";
|
|
2879
2980
|
import { HugeiconsIcon as HugeiconsIcon20 } from "@hugeicons/react";
|
|
2880
|
-
import { Loading03Icon as
|
|
2981
|
+
import { Loading03Icon as Loading03Icon8 } from "@hugeicons/core-free-icons";
|
|
2881
2982
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
2882
2983
|
const [isLoading, setIsLoading] = useState20(true);
|
|
2883
|
-
return /* @__PURE__ */ React34.createElement("div", { className: `absolute inset-0 bg-neutral-900 ${className}` }, isLoading && /* @__PURE__ */ React34.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-900/50 backdrop-blur-md transition-opacity duration-300" }, /* @__PURE__ */ React34.createElement(HugeiconsIcon20, { icon:
|
|
2984
|
+
return /* @__PURE__ */ React34.createElement("div", { className: `absolute inset-0 bg-neutral-900 ${className}` }, isLoading && /* @__PURE__ */ React34.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-900/50 backdrop-blur-md transition-opacity duration-300" }, /* @__PURE__ */ React34.createElement(HugeiconsIcon20, { icon: Loading03Icon8, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ React34.createElement(
|
|
2884
2985
|
Image10,
|
|
2885
2986
|
{
|
|
2886
2987
|
src,
|
|
@@ -2973,7 +3074,7 @@ var ConsultantShowcase = ({
|
|
|
2973
3074
|
import React35, { useState as useState21 } from "react";
|
|
2974
3075
|
import Image11 from "next/image";
|
|
2975
3076
|
import { HugeiconsIcon as HugeiconsIcon21 } from "@hugeicons/react";
|
|
2976
|
-
import { Loading03Icon as
|
|
3077
|
+
import { Loading03Icon as Loading03Icon9 } from "@hugeicons/core-free-icons";
|
|
2977
3078
|
var ContentGridBlock = ({
|
|
2978
3079
|
header,
|
|
2979
3080
|
leftCard,
|
|
@@ -3008,7 +3109,7 @@ var ManagedProjectsBlock = ({
|
|
|
3008
3109
|
}
|
|
3009
3110
|
), /* @__PURE__ */ React36.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React36.createElement(GridSection, null, tagline && /* @__PURE__ */ React36.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block" }, tagline), /* @__PURE__ */ React36.createElement("h1", { className: "text-3xl mt-4 text-white tracking-tight text-left" }, title)), projects.map((project, index) => {
|
|
3010
3111
|
const isLast = index === projects.length - 1;
|
|
3011
|
-
const projectContent = /* @__PURE__ */ React36.createElement("div", { className: "group block w-full" }, /* @__PURE__ */ React36.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__ */ React36.createElement("div", { className: "flex items-center gap-3 md:gap-4" }, /* @__PURE__ */ React36.createElement("h2", { className: "text-[16px] text-white transition-all flex items-center gap-2" }, project.title, /* @__PURE__ */ React36.createElement("span", { className: "text-[11px] text-neutral-500 opacity-0 -translate-x-2 group-hover:opacity-100 group-hover:translate-x-0 group-hover:text-white transition-all duration-300" }, project.isExternal ? "\u2197" : "\u2192")), /* @__PURE__ */ React36.createElement("span", { className: `text-[9px] px-2.5 py-1 rounded-full tracking-[0.15em] transition-colors ${project.status.toLowerCase() === "production" ? "bg-white text-black" : "bg-neutral-800 text-neutral-400 group-
|
|
3112
|
+
const projectContent = /* @__PURE__ */ React36.createElement("div", { className: "group block w-full" }, /* @__PURE__ */ React36.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__ */ React36.createElement("div", { className: "flex items-center gap-3 md:gap-4" }, /* @__PURE__ */ React36.createElement("h2", { className: "text-[16px] text-white transition-all flex items-center gap-2" }, project.title, /* @__PURE__ */ React36.createElement("span", { className: "text-[11px] text-neutral-500 opacity-0 -translate-x-2 group-hover:opacity-100 group-hover:translate-x-0 group-hover:text-white transition-all duration-300" }, project.isExternal ? "\u2197" : "\u2192")), /* @__PURE__ */ React36.createElement("span", { className: `text-[9px] px-2.5 py-1 rounded-full tracking-[0.15em] transition-colors ${project.status.toLowerCase() === "production" ? "bg-white text-black" : "bg-neutral-800 text-neutral-400 group- group-hover:text-white"}` }, project.status)), /* @__PURE__ */ React36.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 shrink-0" }, project.date)), /* @__PURE__ */ React36.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-400 max-w-4xl text-left transition-colors group-hover:text-neutral-300" }, project.description));
|
|
3012
3113
|
return /* @__PURE__ */ React36.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__ */ React36.createElement("a", { href: project.link, target: "_blank", rel: "noopener noreferrer", className: "block outline-none" }, projectContent) : /* @__PURE__ */ React36.createElement(Link9, { href: project.link, className: "block outline-none" }, projectContent));
|
|
3013
3114
|
}))));
|
|
3014
3115
|
};
|