@retinalabsllc/zairusjs 9.0.30 → 9.0.40
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 +15 -5
- package/dist/index.d.ts +15 -5
- package/dist/index.js +415 -286
- package/dist/index.mjs +348 -218
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -600,7 +600,7 @@ import { HugeiconsIcon as HugeiconsIcon3 } from "@hugeicons/react";
|
|
|
600
600
|
var MobileNav = ({ items }) => {
|
|
601
601
|
const pathname = usePathname2();
|
|
602
602
|
if (!items || items.length === 0) return null;
|
|
603
|
-
return /* @__PURE__ */ React7.createElement("div", { className: "fixed bottom-6 inset-x-0 z-100 flex justify-center pointer-events-none px-3 animate-in slide-in-from-bottom-8 fade-in duration-500" }, /* @__PURE__ */ React7.createElement("nav", { className: "pointer-events-auto w-full max-w-sm bg-white/
|
|
603
|
+
return /* @__PURE__ */ React7.createElement("div", { className: "fixed bottom-6 inset-x-0 z-100 flex justify-center pointer-events-none px-3 animate-in slide-in-from-bottom-8 fade-in duration-500" }, /* @__PURE__ */ React7.createElement("nav", { className: "pointer-events-auto w-full max-w-sm bg-white/50 backdrop-blur-xl shadow-[0_8px_30px_rgb(0,0,0,0.08)] rounded-full px-6 py-2.5 flex items-center justify-between" }, items.map((item) => {
|
|
604
604
|
const isActive = item.href === "/" ? pathname === "/" : pathname?.startsWith(item.href);
|
|
605
605
|
return /* @__PURE__ */ React7.createElement(
|
|
606
606
|
Link4,
|
|
@@ -1598,8 +1598,8 @@ var UniversalWalletPage = ({
|
|
|
1598
1598
|
};
|
|
1599
1599
|
|
|
1600
1600
|
// src/components/UniversalCardPage.tsx
|
|
1601
|
-
import
|
|
1602
|
-
import { HugeiconsIcon as
|
|
1601
|
+
import React21, { useState as useState12, useEffect as useEffect9 } from "react";
|
|
1602
|
+
import { HugeiconsIcon as HugeiconsIcon15 } from "@hugeicons/react";
|
|
1603
1603
|
import {
|
|
1604
1604
|
SnowIcon,
|
|
1605
1605
|
Delete02Icon,
|
|
@@ -1653,7 +1653,7 @@ var ConfirmationDialog = ({
|
|
|
1653
1653
|
// src/components/PinDialerBottomSheet.tsx
|
|
1654
1654
|
import React19, { useState as useState11, useEffect as useEffect8 } from "react";
|
|
1655
1655
|
import { HugeiconsIcon as HugeiconsIcon13 } from "@hugeicons/react";
|
|
1656
|
-
import { Loading03Icon as Loading03Icon7, CancelCircleIcon as CancelCircleIcon4 } from "@hugeicons/core-free-icons";
|
|
1656
|
+
import { Loading03Icon as Loading03Icon7, CancelCircleIcon as CancelCircleIcon4, LessThanIcon } from "@hugeicons/core-free-icons";
|
|
1657
1657
|
var PinDialerBottomSheet = ({
|
|
1658
1658
|
isOpen,
|
|
1659
1659
|
title = "Action Required",
|
|
@@ -1708,14 +1708,14 @@ var PinDialerBottomSheet = ({
|
|
|
1708
1708
|
{
|
|
1709
1709
|
key: num,
|
|
1710
1710
|
onClick: () => handlePinPress(num),
|
|
1711
|
-
className: "w-14 h-14 rounded-full flex
|
|
1711
|
+
className: "w-14 h-14 rounded-full flex bg-neutral-50 items-center justify-center text-sm text-black hover:bg-neutral-50 transition-colors mx-auto outline-none active:scale-95"
|
|
1712
1712
|
},
|
|
1713
1713
|
num
|
|
1714
1714
|
)), /* @__PURE__ */ React19.createElement("div", null), " ", /* @__PURE__ */ React19.createElement(
|
|
1715
1715
|
"button",
|
|
1716
1716
|
{
|
|
1717
1717
|
onClick: () => handlePinPress(0),
|
|
1718
|
-
className: "w-14 h-14 rounded-full flex
|
|
1718
|
+
className: "w-14 h-14 rounded-full flex bg-neutral-50 items-center justify-center text-sm text-black hover:bg-neutral-50 transition-colors mx-auto outline-none active:scale-95"
|
|
1719
1719
|
},
|
|
1720
1720
|
"0"
|
|
1721
1721
|
), /* @__PURE__ */ React19.createElement(
|
|
@@ -1724,49 +1724,98 @@ var PinDialerBottomSheet = ({
|
|
|
1724
1724
|
onClick: () => handlePinPress("del"),
|
|
1725
1725
|
className: "w-14 h-14 rounded-full flex items-center justify-center text-neutral-400 hover:text-black hover:bg-neutral-50 transition-colors mx-auto outline-none active:scale-95"
|
|
1726
1726
|
},
|
|
1727
|
-
/* @__PURE__ */ React19.createElement(HugeiconsIcon13, { icon:
|
|
1727
|
+
/* @__PURE__ */ React19.createElement(HugeiconsIcon13, { icon: LessThanIcon, size: 20 })
|
|
1728
1728
|
)))));
|
|
1729
1729
|
};
|
|
1730
1730
|
|
|
1731
|
+
// src/components/CardAction.tsx
|
|
1732
|
+
import React20 from "react";
|
|
1733
|
+
import { HugeiconsIcon as HugeiconsIcon14 } from "@hugeicons/react";
|
|
1734
|
+
import { CancelCircleIcon as CancelCircleIcon5, CreditCardIcon } from "@hugeicons/core-free-icons";
|
|
1735
|
+
var CardActionDialog = ({
|
|
1736
|
+
isOpen,
|
|
1737
|
+
card,
|
|
1738
|
+
actionType,
|
|
1739
|
+
onClose,
|
|
1740
|
+
onProceed
|
|
1741
|
+
}) => {
|
|
1742
|
+
if (!isOpen || !card) return null;
|
|
1743
|
+
const title = actionType === "ACTIVATE" ? "Activate Card" : "Create New Card";
|
|
1744
|
+
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.`;
|
|
1745
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "fixed inset-0 z-150 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React20.createElement(
|
|
1746
|
+
"div",
|
|
1747
|
+
{
|
|
1748
|
+
className: "absolute inset-0 bg-black/40 animate-in fade-in duration-200",
|
|
1749
|
+
onClick: onClose
|
|
1750
|
+
}
|
|
1751
|
+
), /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement(HugeiconsIcon14, { icon: CreditCardIcon, size: 20, className: "text-black" }), /* @__PURE__ */ React20.createElement("h3", { className: "text-[16px] text-black font-medium tracking-tight" }, title)), /* @__PURE__ */ React20.createElement(
|
|
1752
|
+
"button",
|
|
1753
|
+
{
|
|
1754
|
+
onClick: onClose,
|
|
1755
|
+
className: "text-neutral-400 hover:text-black transition-colors outline-none"
|
|
1756
|
+
},
|
|
1757
|
+
/* @__PURE__ */ React20.createElement(HugeiconsIcon14, { icon: CancelCircleIcon5, size: 20 })
|
|
1758
|
+
)), /* @__PURE__ */ React20.createElement("div", { className: "p-6 text-center" }, /* @__PURE__ */ React20.createElement("p", { className: "text-[13px] text-neutral-500 leading-relaxed mb-6" }, description), /* @__PURE__ */ React20.createElement(
|
|
1759
|
+
"button",
|
|
1760
|
+
{
|
|
1761
|
+
onClick: onProceed,
|
|
1762
|
+
className: "w-full py-3.5 bg-black text-white text-[13px] font-medium rounded-xl hover:bg-neutral-800 transition-colors outline-none active:scale-95"
|
|
1763
|
+
},
|
|
1764
|
+
actionType === "ACTIVATE" ? "Activate Now" : "Create Card"
|
|
1765
|
+
))));
|
|
1766
|
+
};
|
|
1767
|
+
|
|
1731
1768
|
// src/components/UniversalCardPage.tsx
|
|
1732
1769
|
var UniversalCardPage = ({
|
|
1733
|
-
|
|
1734
|
-
cardNumber,
|
|
1735
|
-
expiry,
|
|
1736
|
-
cvv,
|
|
1737
|
-
cardBgSrc,
|
|
1738
|
-
backgroundOverlay,
|
|
1739
|
-
companyLogoSrc,
|
|
1740
|
-
networkLogoSrc,
|
|
1770
|
+
cards = [],
|
|
1741
1771
|
onReveal,
|
|
1742
1772
|
onFreeze,
|
|
1743
1773
|
onSetLimits,
|
|
1744
|
-
onDelete
|
|
1774
|
+
onDelete,
|
|
1775
|
+
onCardAction
|
|
1745
1776
|
}) => {
|
|
1777
|
+
const [activeTabIndex, setActiveTabIndex] = useState12(0);
|
|
1778
|
+
const activeCard = cards[activeTabIndex];
|
|
1779
|
+
useEffect9(() => {
|
|
1780
|
+
setIsFlipped(false);
|
|
1781
|
+
setIsRevealed(false);
|
|
1782
|
+
}, [activeTabIndex]);
|
|
1746
1783
|
const [isFlipped, setIsFlipped] = useState12(false);
|
|
1747
1784
|
const [isBgLoaded, setIsBgLoaded] = useState12(false);
|
|
1748
1785
|
const [isRevealed, setIsRevealed] = useState12(false);
|
|
1749
1786
|
const [isRevealing, setIsRevealing] = useState12(false);
|
|
1750
|
-
const [isFrozen, setIsFrozen] = useState12(false);
|
|
1751
1787
|
const [isFreezing, setIsFreezing] = useState12(false);
|
|
1788
|
+
const [isOverlayActionLoading, setIsOverlayActionLoading] = useState12(false);
|
|
1752
1789
|
const [showDeleteDialog, setShowDeleteDialog] = useState12(false);
|
|
1753
1790
|
const [isDeleting, setIsDeleting] = useState12(false);
|
|
1754
1791
|
const [showPinDialer, setShowPinDialer] = useState12(false);
|
|
1792
|
+
const [showCardActionDialog, setShowCardActionDialog] = useState12(false);
|
|
1793
|
+
const [cardActionType, setCardActionType] = useState12("ACTIVATE");
|
|
1755
1794
|
useEffect9(() => {
|
|
1756
|
-
|
|
1795
|
+
setIsBgLoaded(false);
|
|
1796
|
+
if (!activeCard?.cardBgSrc) return;
|
|
1757
1797
|
const img = new Image();
|
|
1758
|
-
img.src = cardBgSrc;
|
|
1798
|
+
img.src = activeCard.cardBgSrc;
|
|
1759
1799
|
img.onload = () => {
|
|
1760
1800
|
setTimeout(() => setIsBgLoaded(true), 300);
|
|
1761
1801
|
};
|
|
1762
|
-
}, [cardBgSrc]);
|
|
1802
|
+
}, [activeCard?.cardBgSrc]);
|
|
1803
|
+
if (!activeCard) return /* @__PURE__ */ React21.createElement("div", { className: "text-center p-8 text-neutral-500" }, "No cards available");
|
|
1804
|
+
const isActivated = activeCard.status === "ACTIVATED";
|
|
1805
|
+
const isFrozen = activeCard.status === "FROZEN";
|
|
1806
|
+
const isUnactivated = activeCard.status === "UNACTIVATED";
|
|
1807
|
+
const isDead = ["BLOCKED", "EXPIRED", "DELETED"].includes(activeCard.status);
|
|
1808
|
+
const canFlip = isBgLoaded && isActivated;
|
|
1809
|
+
const actionsDisabled = !isActivated && !isFrozen;
|
|
1810
|
+
const revealDisabled = !isActivated;
|
|
1811
|
+
const freezeDisabled = isUnactivated || isDead;
|
|
1763
1812
|
const handleToggleReveal = () => {
|
|
1764
|
-
if (isRevealing) return;
|
|
1813
|
+
if (revealDisabled || isRevealing) return;
|
|
1765
1814
|
if (isRevealed) {
|
|
1766
1815
|
setIsRevealed(false);
|
|
1767
1816
|
setIsRevealing(true);
|
|
1768
1817
|
setTimeout(() => {
|
|
1769
|
-
if (onReveal) onReveal();
|
|
1818
|
+
if (onReveal) onReveal(activeCard.id);
|
|
1770
1819
|
setIsRevealing(false);
|
|
1771
1820
|
}, 800);
|
|
1772
1821
|
} else {
|
|
@@ -1778,67 +1827,125 @@ var UniversalCardPage = ({
|
|
|
1778
1827
|
setTimeout(() => {
|
|
1779
1828
|
setShowPinDialer(false);
|
|
1780
1829
|
setIsRevealed(true);
|
|
1781
|
-
if (onReveal) onReveal();
|
|
1830
|
+
if (onReveal) onReveal(activeCard.id);
|
|
1782
1831
|
setIsRevealing(false);
|
|
1783
1832
|
}, 1e3);
|
|
1784
1833
|
};
|
|
1785
1834
|
const handleToggleFreeze = () => {
|
|
1786
|
-
if (isFreezing) return;
|
|
1835
|
+
if (freezeDisabled || isFreezing) return;
|
|
1787
1836
|
setIsFreezing(true);
|
|
1788
1837
|
setTimeout(() => {
|
|
1789
|
-
|
|
1790
|
-
if (onFreeze) onFreeze();
|
|
1838
|
+
if (onFreeze) onFreeze(activeCard.id);
|
|
1791
1839
|
setIsFreezing(false);
|
|
1792
1840
|
}, 800);
|
|
1793
1841
|
};
|
|
1842
|
+
const handleOverlayUnfreeze = () => {
|
|
1843
|
+
if (isOverlayActionLoading) return;
|
|
1844
|
+
setIsOverlayActionLoading(true);
|
|
1845
|
+
setTimeout(() => {
|
|
1846
|
+
if (onFreeze) onFreeze(activeCard.id);
|
|
1847
|
+
setIsOverlayActionLoading(false);
|
|
1848
|
+
}, 800);
|
|
1849
|
+
};
|
|
1850
|
+
const handleOverlayActionClick = (type) => {
|
|
1851
|
+
setCardActionType(type);
|
|
1852
|
+
setShowCardActionDialog(true);
|
|
1853
|
+
};
|
|
1794
1854
|
const confirmDelete = async () => {
|
|
1795
1855
|
setIsDeleting(true);
|
|
1796
1856
|
setTimeout(() => {
|
|
1797
|
-
if (onDelete) onDelete();
|
|
1857
|
+
if (onDelete) onDelete(activeCard.id);
|
|
1798
1858
|
setIsDeleting(false);
|
|
1799
1859
|
setShowDeleteDialog(false);
|
|
1800
1860
|
}, 1200);
|
|
1801
1861
|
};
|
|
1802
|
-
const
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1862
|
+
const formatTabLabel = (type) => {
|
|
1863
|
+
const capitalized = type.charAt(0).toUpperCase() + type.slice(1).toLowerCase();
|
|
1864
|
+
return `${capitalized} Card`;
|
|
1865
|
+
};
|
|
1866
|
+
const displayCardNumber = isRevealed ? activeCard.cardNumber : `\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 ${activeCard.cardNumber.slice(-4)}`;
|
|
1867
|
+
const displayExpiry = isRevealed ? activeCard.expiry : "\u2022\u2022/\u2022\u2022";
|
|
1868
|
+
const displayCvv = isRevealed ? activeCard.cvv : "\u2022\u2022\u2022";
|
|
1869
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "w-full flex flex-col items-center animate-in fade-in duration-300 pb-12" }, cards.length > 1 && /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-center mb-6 w-full px-2" }, /* @__PURE__ */ React21.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) => {
|
|
1870
|
+
const isActive = activeTabIndex === idx;
|
|
1871
|
+
return /* @__PURE__ */ React21.createElement(
|
|
1872
|
+
"button",
|
|
1873
|
+
{
|
|
1874
|
+
key: tab.id,
|
|
1875
|
+
onClick: () => setActiveTabIndex(idx),
|
|
1876
|
+
className: `px-4 sm:px-6 py-1.5 sm:py-2 rounded-full text-[11px] sm:text-xs font-medium transition-all duration-200 outline-none whitespace-nowrap shrink-0 ${isActive ? "bg-neutral-100 text-black" : "text-neutral-500 hover:text-black hover:bg-neutral-50/50"}`
|
|
1877
|
+
},
|
|
1878
|
+
formatTabLabel(tab.type)
|
|
1879
|
+
);
|
|
1880
|
+
}))), /* @__PURE__ */ React21.createElement("div", { className: "w-full pt-2 pb-2 flex justify-center", style: { perspective: "1000px" } }, /* @__PURE__ */ React21.createElement(
|
|
1806
1881
|
"div",
|
|
1807
1882
|
{
|
|
1808
1883
|
onClick: () => {
|
|
1809
|
-
if (
|
|
1884
|
+
if (canFlip) setIsFlipped(!isFlipped);
|
|
1810
1885
|
},
|
|
1811
|
-
className: `relative w-full max-w-85 transition-transform duration-700 ${!isBgLoaded ? "cursor-wait" : "cursor-pointer"}`,
|
|
1886
|
+
className: `relative w-full max-w-85 transition-transform duration-700 ${!isBgLoaded ? "cursor-wait" : canFlip ? "cursor-pointer" : "cursor-default"}`,
|
|
1812
1887
|
style: {
|
|
1813
1888
|
height: 185,
|
|
1814
1889
|
transformStyle: "preserve-3d",
|
|
1815
1890
|
transform: isFlipped ? "rotateY(180deg)" : "rotateY(0deg)"
|
|
1816
1891
|
}
|
|
1817
1892
|
},
|
|
1818
|
-
!isBgLoaded && /* @__PURE__ */
|
|
1819
|
-
/* @__PURE__ */
|
|
1893
|
+
!isBgLoaded && /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 w-full h-full bg-white rounded-2xl flex items-center justify-center z-50 " }, /* @__PURE__ */ React21.createElement(HugeiconsIcon15, { icon: Loading03Icon8, size: 28, className: "animate-spin text-black" })),
|
|
1894
|
+
!isActivated && isBgLoaded && /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 z-40 w-full h-full rounded-2xl backdrop-blur-md bg-white/20 flex flex-col items-center justify-center border border-white/30", style: { transform: "translateZ(1px)" } }, isUnactivated && /* @__PURE__ */ React21.createElement(
|
|
1895
|
+
"button",
|
|
1896
|
+
{
|
|
1897
|
+
onClick: (e) => {
|
|
1898
|
+
e.stopPropagation();
|
|
1899
|
+
handleOverlayActionClick("ACTIVATE");
|
|
1900
|
+
},
|
|
1901
|
+
className: "px-6 py-2.5 bg-black text-white text-[12px] font-medium rounded-full hover:bg-neutral-800 transition-all outline-none active:scale-95"
|
|
1902
|
+
},
|
|
1903
|
+
"Activate Card"
|
|
1904
|
+
), isDead && /* @__PURE__ */ React21.createElement(
|
|
1905
|
+
"button",
|
|
1906
|
+
{
|
|
1907
|
+
onClick: (e) => {
|
|
1908
|
+
e.stopPropagation();
|
|
1909
|
+
handleOverlayActionClick("CREATE");
|
|
1910
|
+
},
|
|
1911
|
+
className: "px-6 py-2.5 bg-black text-white text-[12px] font-medium rounded-full hover:bg-neutral-800 transition-all outline-none active:scale-95"
|
|
1912
|
+
},
|
|
1913
|
+
"Create Card"
|
|
1914
|
+
), isFrozen && /* @__PURE__ */ React21.createElement(
|
|
1915
|
+
"button",
|
|
1916
|
+
{
|
|
1917
|
+
onClick: (e) => {
|
|
1918
|
+
e.stopPropagation();
|
|
1919
|
+
handleOverlayUnfreeze();
|
|
1920
|
+
},
|
|
1921
|
+
disabled: isOverlayActionLoading,
|
|
1922
|
+
className: "px-6 py-2.5 bg-white text-black text-[12px] font-medium rounded-full hover:bg-neutral-100 transition-all outline-none active:scale-95 flex items-center gap-2 disabled:opacity-80"
|
|
1923
|
+
},
|
|
1924
|
+
isOverlayActionLoading ? /* @__PURE__ */ React21.createElement(HugeiconsIcon15, { icon: Loading03Icon8, size: 16, className: "animate-spin" }) : "Unfreeze Card"
|
|
1925
|
+
)),
|
|
1926
|
+
/* @__PURE__ */ React21.createElement(
|
|
1820
1927
|
"div",
|
|
1821
1928
|
{
|
|
1822
1929
|
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"}`,
|
|
1823
1930
|
style: { backfaceVisibility: "hidden" }
|
|
1824
1931
|
},
|
|
1825
|
-
/* @__PURE__ */
|
|
1932
|
+
/* @__PURE__ */ React21.createElement(
|
|
1826
1933
|
"div",
|
|
1827
1934
|
{
|
|
1828
1935
|
className: "absolute inset-0 bg-cover bg-center",
|
|
1829
|
-
style: { backgroundImage: `url(${cardBgSrc}), linear-gradient(to bottom right, #111, #333)` }
|
|
1936
|
+
style: { backgroundImage: `url(${activeCard.cardBgSrc}), linear-gradient(to bottom right, #111, #333)` }
|
|
1830
1937
|
}
|
|
1831
1938
|
),
|
|
1832
|
-
backgroundOverlay && /* @__PURE__ */
|
|
1939
|
+
activeCard.backgroundOverlay && /* @__PURE__ */ React21.createElement(
|
|
1833
1940
|
"div",
|
|
1834
1941
|
{
|
|
1835
1942
|
className: "absolute inset-0 bg-cover bg-center pointer-events-none",
|
|
1836
|
-
style: { backgroundImage: `url(${backgroundOverlay})` }
|
|
1943
|
+
style: { backgroundImage: `url(${activeCard.backgroundOverlay})` }
|
|
1837
1944
|
}
|
|
1838
1945
|
),
|
|
1839
|
-
/* @__PURE__ */
|
|
1946
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative z-10 w-full h-full p-5 flex flex-col justify-between" }, /* @__PURE__ */ React21.createElement("div", { className: "flex justify-between items-start w-full" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("span", { className: "text-[12px] text-white/70 " }, "Prepaid Card")), activeCard.companyLogoSrc && /* @__PURE__ */ React21.createElement("img", { src: activeCard.companyLogoSrc, alt: "Company Logo", className: "h-10 w-auto max-w-30 object-contain opacity-90" })), /* @__PURE__ */ React21.createElement("div", { className: "flex justify-between items-end w-full" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ React21.createElement("span", { className: "text-[10px] text-white/60 tracking-widest uppercase" }, "Card Number"), /* @__PURE__ */ React21.createElement("span", { className: "text-[14px] text-white tracking-widest font-light" }, displayCardNumber)), activeCard.networkLogoSrc && /* @__PURE__ */ React21.createElement("img", { src: activeCard.networkLogoSrc, alt: "Network Logo", className: "h-10 w-auto max-w-20 object-contain opacity-90" })))
|
|
1840
1947
|
),
|
|
1841
|
-
/* @__PURE__ */
|
|
1948
|
+
/* @__PURE__ */ React21.createElement(
|
|
1842
1949
|
"div",
|
|
1843
1950
|
{
|
|
1844
1951
|
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"}`,
|
|
@@ -1847,23 +1954,24 @@ var UniversalCardPage = ({
|
|
|
1847
1954
|
transform: "rotateY(180deg)"
|
|
1848
1955
|
}
|
|
1849
1956
|
},
|
|
1850
|
-
/* @__PURE__ */
|
|
1957
|
+
/* @__PURE__ */ React21.createElement(
|
|
1851
1958
|
"div",
|
|
1852
1959
|
{
|
|
1853
1960
|
className: "absolute inset-0 bg-cover bg-center",
|
|
1854
|
-
style: { backgroundImage: `url(${cardBgSrc}), linear-gradient(to bottom right, #111, #333)` }
|
|
1961
|
+
style: { backgroundImage: `url(${activeCard.cardBgSrc}), linear-gradient(to bottom right, #111, #333)` }
|
|
1855
1962
|
}
|
|
1856
1963
|
),
|
|
1857
|
-
backgroundOverlay && /* @__PURE__ */
|
|
1964
|
+
activeCard.backgroundOverlay && /* @__PURE__ */ React21.createElement(
|
|
1858
1965
|
"div",
|
|
1859
1966
|
{
|
|
1860
1967
|
className: "absolute inset-0 bg-cover bg-center pointer-events-none",
|
|
1861
|
-
style: { backgroundImage: `url(${backgroundOverlay})` }
|
|
1968
|
+
style: { backgroundImage: `url(${activeCard.backgroundOverlay})` }
|
|
1862
1969
|
}
|
|
1863
1970
|
),
|
|
1864
|
-
/* @__PURE__ */
|
|
1971
|
+
/* @__PURE__ */ React21.createElement("div", { className: "absolute top-6 left-0 right-0 h-10 bg-black/80 w-full" }),
|
|
1972
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative z-10 w-full h-full p-5 flex flex-col justify-end" }, /* @__PURE__ */ React21.createElement("div", { className: "w-full text-center mb-6" }, /* @__PURE__ */ React21.createElement("span", { className: "text-white text-3xl italic tracking-wide opacity-90", style: { fontFamily: "'Whisper', cursive" } }, activeCard.cardHolderName)), /* @__PURE__ */ React21.createElement("div", { className: "flex justify-between w-full max-w-[80%]" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React21.createElement("span", { className: "text-[9px] text-white/60 tracking-widest uppercase" }, "Expiry"), /* @__PURE__ */ React21.createElement("span", { className: "text-[14px] text-white font-light" }, displayExpiry)), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React21.createElement("span", { className: "text-[9px] text-white/60 tracking-widest uppercase" }, "CVV"), /* @__PURE__ */ React21.createElement("span", { className: "text-[14px] text-white font-light" }, displayCvv))))
|
|
1865
1973
|
)
|
|
1866
|
-
)), /* @__PURE__ */
|
|
1974
|
+
)), /* @__PURE__ */ React21.createElement("p", { className: "text-xs text-neutral-400 mb-6 mt-1" }, isActivated ? "Tap to flip card" : "Action Required"), /* @__PURE__ */ React21.createElement("div", { className: "w-full flex flex-col gap-4" }, /* @__PURE__ */ React21.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React21.createElement(
|
|
1867
1975
|
MenuRow,
|
|
1868
1976
|
{
|
|
1869
1977
|
icon: ViewOffSlashIcon2,
|
|
@@ -1872,9 +1980,10 @@ var UniversalCardPage = ({
|
|
|
1872
1980
|
onClick: handleToggleReveal,
|
|
1873
1981
|
isToggle: true,
|
|
1874
1982
|
toggleState: isRevealed,
|
|
1875
|
-
toggleLoading: isRevealing
|
|
1983
|
+
toggleLoading: isRevealing,
|
|
1984
|
+
disabled: revealDisabled
|
|
1876
1985
|
}
|
|
1877
|
-
), /* @__PURE__ */
|
|
1986
|
+
), /* @__PURE__ */ React21.createElement(
|
|
1878
1987
|
MenuRow,
|
|
1879
1988
|
{
|
|
1880
1989
|
icon: SnowIcon,
|
|
@@ -1883,27 +1992,34 @@ var UniversalCardPage = ({
|
|
|
1883
1992
|
onClick: handleToggleFreeze,
|
|
1884
1993
|
isToggle: true,
|
|
1885
1994
|
toggleState: isFrozen,
|
|
1886
|
-
toggleLoading: isFreezing
|
|
1995
|
+
toggleLoading: isFreezing,
|
|
1996
|
+
disabled: freezeDisabled
|
|
1887
1997
|
}
|
|
1888
|
-
), /* @__PURE__ */
|
|
1998
|
+
), /* @__PURE__ */ React21.createElement(
|
|
1889
1999
|
MenuRow,
|
|
1890
2000
|
{
|
|
1891
2001
|
icon: Dollar02Icon,
|
|
1892
2002
|
title: "Set Limits",
|
|
1893
2003
|
subtitle: "Set card limits",
|
|
1894
|
-
onClick:
|
|
2004
|
+
onClick: () => {
|
|
2005
|
+
if (!actionsDisabled && onSetLimits) onSetLimits(activeCard.id);
|
|
2006
|
+
},
|
|
2007
|
+
disabled: actionsDisabled,
|
|
1895
2008
|
isLast: true
|
|
1896
2009
|
}
|
|
1897
|
-
)), /* @__PURE__ */
|
|
2010
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React21.createElement(
|
|
1898
2011
|
MenuRow,
|
|
1899
2012
|
{
|
|
1900
2013
|
icon: Delete02Icon,
|
|
1901
2014
|
title: "Delete card",
|
|
1902
2015
|
subtitle: "Permanently delete card",
|
|
1903
|
-
onClick: () =>
|
|
2016
|
+
onClick: () => {
|
|
2017
|
+
if (!actionsDisabled) setShowDeleteDialog(true);
|
|
2018
|
+
},
|
|
2019
|
+
disabled: actionsDisabled,
|
|
1904
2020
|
isLast: true
|
|
1905
2021
|
}
|
|
1906
|
-
))), /* @__PURE__ */
|
|
2022
|
+
))), /* @__PURE__ */ React21.createElement(
|
|
1907
2023
|
ConfirmationDialog,
|
|
1908
2024
|
{
|
|
1909
2025
|
isOpen: showDeleteDialog,
|
|
@@ -1915,7 +2031,7 @@ var UniversalCardPage = ({
|
|
|
1915
2031
|
onClose: () => setShowDeleteDialog(false),
|
|
1916
2032
|
onConfirm: confirmDelete
|
|
1917
2033
|
}
|
|
1918
|
-
), /* @__PURE__ */
|
|
2034
|
+
), /* @__PURE__ */ React21.createElement(
|
|
1919
2035
|
PinDialerBottomSheet,
|
|
1920
2036
|
{
|
|
1921
2037
|
isOpen: showPinDialer,
|
|
@@ -1924,6 +2040,18 @@ var UniversalCardPage = ({
|
|
|
1924
2040
|
onClose: () => setShowPinDialer(false),
|
|
1925
2041
|
onComplete: handlePinComplete
|
|
1926
2042
|
}
|
|
2043
|
+
), /* @__PURE__ */ React21.createElement(
|
|
2044
|
+
CardActionDialog,
|
|
2045
|
+
{
|
|
2046
|
+
isOpen: showCardActionDialog,
|
|
2047
|
+
card: activeCard,
|
|
2048
|
+
actionType: cardActionType,
|
|
2049
|
+
onClose: () => setShowCardActionDialog(false),
|
|
2050
|
+
onProceed: () => {
|
|
2051
|
+
if (onCardAction) onCardAction(activeCard.id, cardActionType);
|
|
2052
|
+
setShowCardActionDialog(false);
|
|
2053
|
+
}
|
|
2054
|
+
}
|
|
1927
2055
|
));
|
|
1928
2056
|
};
|
|
1929
2057
|
var MenuRow = ({
|
|
@@ -1936,21 +2064,22 @@ var MenuRow = ({
|
|
|
1936
2064
|
isLast = false,
|
|
1937
2065
|
isToggle = false,
|
|
1938
2066
|
toggleState = false,
|
|
1939
|
-
toggleLoading = false
|
|
1940
|
-
|
|
2067
|
+
toggleLoading = false,
|
|
2068
|
+
disabled = false
|
|
2069
|
+
}) => /* @__PURE__ */ React21.createElement(
|
|
1941
2070
|
"div",
|
|
1942
2071
|
{
|
|
1943
|
-
onClick,
|
|
1944
|
-
className: `flex items-center p-3
|
|
2072
|
+
onClick: disabled ? void 0 : onClick,
|
|
2073
|
+
className: `flex items-center p-3 transition-colors ${!isLast ? "" : ""} ${disabled ? "opacity-40 cursor-not-allowed" : "cursor-pointer hover:bg-neutral-50"}`
|
|
1945
2074
|
},
|
|
1946
|
-
/* @__PURE__ */
|
|
1947
|
-
/* @__PURE__ */
|
|
1948
|
-
isToggle ? /* @__PURE__ */
|
|
2075
|
+
/* @__PURE__ */ React21.createElement("div", { className: "w-9 h-9 rounded-full border border-neutral-200 flex items-center justify-center shrink-0 mr-4" }, /* @__PURE__ */ React21.createElement(HugeiconsIcon15, { icon, size: 16, className: iconColor })),
|
|
2076
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React21.createElement("p", { className: `text-[13px] truncate ${titleColor}` }, title), /* @__PURE__ */ React21.createElement("p", { className: "text-[11px] text-neutral-500 truncate" }, subtitle)),
|
|
2077
|
+
isToggle ? /* @__PURE__ */ React21.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__ */ React21.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__ */ React21.createElement(HugeiconsIcon15, { icon: Loading03Icon8, size: 10, className: "animate-spin text-black" }))) : /* @__PURE__ */ React21.createElement(HugeiconsIcon15, { icon: ArrowRight01Icon2, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
1949
2078
|
);
|
|
1950
2079
|
|
|
1951
2080
|
// src/components/UniversalProfilePage.tsx
|
|
1952
|
-
import
|
|
1953
|
-
import { HugeiconsIcon as
|
|
2081
|
+
import React22, { useState as useState13 } from "react";
|
|
2082
|
+
import { HugeiconsIcon as HugeiconsIcon16 } from "@hugeicons/react";
|
|
1954
2083
|
import {
|
|
1955
2084
|
UserIcon,
|
|
1956
2085
|
LockKeyIcon as LockKeyIcon2,
|
|
@@ -1961,7 +2090,8 @@ import {
|
|
|
1961
2090
|
LogoutCircle02Icon,
|
|
1962
2091
|
UserRemove01Icon,
|
|
1963
2092
|
ArrowRight01Icon as ArrowRight01Icon3,
|
|
1964
|
-
Loading03Icon as Loading03Icon9
|
|
2093
|
+
Loading03Icon as Loading03Icon9,
|
|
2094
|
+
CrownIcon
|
|
1965
2095
|
} from "@hugeicons/core-free-icons";
|
|
1966
2096
|
var UniversalProfilePage = ({
|
|
1967
2097
|
avatarSrc,
|
|
@@ -1990,7 +2120,7 @@ var UniversalProfilePage = ({
|
|
|
1990
2120
|
setShowLogoutDialog(false);
|
|
1991
2121
|
}
|
|
1992
2122
|
};
|
|
1993
|
-
return /* @__PURE__ */
|
|
2123
|
+
return /* @__PURE__ */ React22.createElement("div", { className: "w-full max-w-md mx-auto flex flex-col items-center animate-in fade-in duration-300 pb-12" }, /* @__PURE__ */ React22.createElement("div", { className: "pt-8 pb-4 flex flex-col items-center" }, /* @__PURE__ */ React22.createElement("div", { className: "w-22 h-22 rounded-full bg-white p-1 mb-4 flex items-center justify-center" }, /* @__PURE__ */ React22.createElement("div", { className: "relative w-full h-full rounded-full overflow-hidden bg-neutral-100 flex items-center justify-center" }, avatarSrc ? /* @__PURE__ */ React22.createElement(React22.Fragment, null, !isAvatarLoaded && /* @__PURE__ */ React22.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-100" }, /* @__PURE__ */ React22.createElement(HugeiconsIcon16, { icon: Loading03Icon9, size: 24, className: "animate-spin text-black" })), /* @__PURE__ */ React22.createElement(
|
|
1994
2124
|
"img",
|
|
1995
2125
|
{
|
|
1996
2126
|
src: avatarSrc,
|
|
@@ -1998,7 +2128,7 @@ var UniversalProfilePage = ({
|
|
|
1998
2128
|
onLoad: () => setIsAvatarLoaded(true),
|
|
1999
2129
|
className: `w-full h-full object-cover transition-opacity duration-300 ${isAvatarLoaded ? "opacity-100" : "opacity-0"}`
|
|
2000
2130
|
}
|
|
2001
|
-
)) : /* @__PURE__ */
|
|
2131
|
+
)) : /* @__PURE__ */ React22.createElement(HugeiconsIcon16, { icon: UserIcon, size: 40, className: "text-neutral-300" }))), /* @__PURE__ */ React22.createElement("div", { className: "bg-white rounded-full px-4 py-2 flex items-center justify-center gap-2 mb-3" }, /* @__PURE__ */ React22.createElement("span", { className: "text-[12px] text-black" }, roleName), /* @__PURE__ */ React22.createElement(HugeiconsIcon16, { icon: CrownIcon, size: 14, className: "text-neutral-400" })), /* @__PURE__ */ React22.createElement("span", { className: "text-[12px] text-neutral-500" }, memberSince)), /* @__PURE__ */ React22.createElement("div", { className: "w-full flex flex-col gap-4 mt-2" }, /* @__PURE__ */ React22.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React22.createElement(
|
|
2002
2132
|
MenuRow2,
|
|
2003
2133
|
{
|
|
2004
2134
|
icon: UserIcon,
|
|
@@ -2006,7 +2136,7 @@ var UniversalProfilePage = ({
|
|
|
2006
2136
|
subtitle: "Your account details",
|
|
2007
2137
|
onClick: onAccountTap
|
|
2008
2138
|
}
|
|
2009
|
-
), /* @__PURE__ */
|
|
2139
|
+
), /* @__PURE__ */ React22.createElement(
|
|
2010
2140
|
MenuRow2,
|
|
2011
2141
|
{
|
|
2012
2142
|
icon: LockKeyIcon2,
|
|
@@ -2014,7 +2144,7 @@ var UniversalProfilePage = ({
|
|
|
2014
2144
|
subtitle: "2FA & authentication",
|
|
2015
2145
|
onClick: onSecurityTap
|
|
2016
2146
|
}
|
|
2017
|
-
), /* @__PURE__ */
|
|
2147
|
+
), /* @__PURE__ */ React22.createElement(
|
|
2018
2148
|
MenuRow2,
|
|
2019
2149
|
{
|
|
2020
2150
|
icon: ShieldUserIcon,
|
|
@@ -2022,7 +2152,7 @@ var UniversalProfilePage = ({
|
|
|
2022
2152
|
subtitle: "Manage web3 profile",
|
|
2023
2153
|
onClick: onDefiTap
|
|
2024
2154
|
}
|
|
2025
|
-
), /* @__PURE__ */
|
|
2155
|
+
), /* @__PURE__ */ React22.createElement(
|
|
2026
2156
|
MenuRow2,
|
|
2027
2157
|
{
|
|
2028
2158
|
icon: MessageQuestionIcon,
|
|
@@ -2031,7 +2161,7 @@ var UniversalProfilePage = ({
|
|
|
2031
2161
|
onClick: onHelpTap,
|
|
2032
2162
|
isLast: true
|
|
2033
2163
|
}
|
|
2034
|
-
)), /* @__PURE__ */
|
|
2164
|
+
)), /* @__PURE__ */ React22.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React22.createElement(
|
|
2035
2165
|
MenuRow2,
|
|
2036
2166
|
{
|
|
2037
2167
|
icon: UserIdVerificationIcon,
|
|
@@ -2039,7 +2169,7 @@ var UniversalProfilePage = ({
|
|
|
2039
2169
|
subtitle: "Account Verifications",
|
|
2040
2170
|
onClick: onVerificationsTap
|
|
2041
2171
|
}
|
|
2042
|
-
), /* @__PURE__ */
|
|
2172
|
+
), /* @__PURE__ */ React22.createElement(
|
|
2043
2173
|
MenuRow2,
|
|
2044
2174
|
{
|
|
2045
2175
|
icon: FileDownloadIcon,
|
|
@@ -2047,7 +2177,7 @@ var UniversalProfilePage = ({
|
|
|
2047
2177
|
subtitle: "Transfer your account",
|
|
2048
2178
|
onClick: onExportTap
|
|
2049
2179
|
}
|
|
2050
|
-
), /* @__PURE__ */
|
|
2180
|
+
), /* @__PURE__ */ React22.createElement(
|
|
2051
2181
|
MenuRow2,
|
|
2052
2182
|
{
|
|
2053
2183
|
icon: LogoutCircle02Icon,
|
|
@@ -2056,7 +2186,7 @@ var UniversalProfilePage = ({
|
|
|
2056
2186
|
onClick: () => setShowLogoutDialog(true),
|
|
2057
2187
|
isLast: true
|
|
2058
2188
|
}
|
|
2059
|
-
)), /* @__PURE__ */
|
|
2189
|
+
)), /* @__PURE__ */ React22.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden mb-4" }, /* @__PURE__ */ React22.createElement(
|
|
2060
2190
|
MenuRow2,
|
|
2061
2191
|
{
|
|
2062
2192
|
icon: UserRemove01Icon,
|
|
@@ -2065,7 +2195,7 @@ var UniversalProfilePage = ({
|
|
|
2065
2195
|
onClick: onDeleteTap,
|
|
2066
2196
|
isLast: true
|
|
2067
2197
|
}
|
|
2068
|
-
))), /* @__PURE__ */
|
|
2198
|
+
))), /* @__PURE__ */ React22.createElement(
|
|
2069
2199
|
ConfirmationDialog,
|
|
2070
2200
|
{
|
|
2071
2201
|
isOpen: showLogoutDialog,
|
|
@@ -2079,24 +2209,24 @@ var UniversalProfilePage = ({
|
|
|
2079
2209
|
}
|
|
2080
2210
|
));
|
|
2081
2211
|
};
|
|
2082
|
-
var MenuRow2 = ({ icon, title, subtitle, onClick, iconColor = "text-black", titleColor = "text-black", isLast = false }) => /* @__PURE__ */
|
|
2212
|
+
var MenuRow2 = ({ icon, title, subtitle, onClick, iconColor = "text-black", titleColor = "text-black", isLast = false }) => /* @__PURE__ */ React22.createElement(
|
|
2083
2213
|
"div",
|
|
2084
2214
|
{
|
|
2085
2215
|
onClick,
|
|
2086
2216
|
className: `flex items-center p-4 cursor-pointer hover:bg-neutral-50 transition-colors ${!isLast ? "" : ""}`
|
|
2087
2217
|
},
|
|
2088
|
-
/* @__PURE__ */
|
|
2089
|
-
/* @__PURE__ */
|
|
2090
|
-
/* @__PURE__ */
|
|
2218
|
+
/* @__PURE__ */ React22.createElement("div", { className: "w-9 h-9 rounded-full border border-neutral-200 flex items-center justify-center shrink-0 mr-4" }, /* @__PURE__ */ React22.createElement(HugeiconsIcon16, { icon, size: 16, className: iconColor })),
|
|
2219
|
+
/* @__PURE__ */ React22.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React22.createElement("p", { className: `text-[13px] truncate ${titleColor}` }, title), /* @__PURE__ */ React22.createElement("p", { className: "text-[11px] text-neutral-500 truncate" }, subtitle)),
|
|
2220
|
+
/* @__PURE__ */ React22.createElement(HugeiconsIcon16, { icon: ArrowRight01Icon3, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
2091
2221
|
);
|
|
2092
2222
|
|
|
2093
2223
|
// src/components/HeroSection.tsx
|
|
2094
|
-
import
|
|
2224
|
+
import React24, { useState as useState15, useEffect as useEffect10, useRef as useRef4 } from "react";
|
|
2095
2225
|
import Link5 from "next/link";
|
|
2096
2226
|
import Image3 from "next/image";
|
|
2097
2227
|
|
|
2098
2228
|
// src/components/WaitlistDialog.tsx
|
|
2099
|
-
import
|
|
2229
|
+
import React23, { useState as useState14 } from "react";
|
|
2100
2230
|
import { toast as toast6 } from "react-hot-toast";
|
|
2101
2231
|
var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
2102
2232
|
const [email, setEmail] = useState14("");
|
|
@@ -2131,12 +2261,12 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2131
2261
|
setIsLoading(false);
|
|
2132
2262
|
}
|
|
2133
2263
|
};
|
|
2134
|
-
return /* @__PURE__ */
|
|
2264
|
+
return /* @__PURE__ */ React23.createElement("div", { className: "fixed inset-0 z-100 flex items-center justify-center p-4 bg-black/40" }, /* @__PURE__ */ React23.createElement("div", { className: "absolute inset-0", onClick: !isLoading ? onClose : void 0 }), /* @__PURE__ */ React23.createElement(
|
|
2135
2265
|
"div",
|
|
2136
2266
|
{
|
|
2137
2267
|
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"
|
|
2138
2268
|
},
|
|
2139
|
-
/* @__PURE__ */
|
|
2269
|
+
/* @__PURE__ */ React23.createElement(
|
|
2140
2270
|
"button",
|
|
2141
2271
|
{
|
|
2142
2272
|
onClick: onClose,
|
|
@@ -2144,7 +2274,7 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2144
2274
|
className: "absolute top-4 right-4 p-2 text-neutral-700 hover:text-neutral-400 transition-colors disabled:opacity-50 outline-none",
|
|
2145
2275
|
"aria-label": "Close dialog"
|
|
2146
2276
|
},
|
|
2147
|
-
/* @__PURE__ */
|
|
2277
|
+
/* @__PURE__ */ React23.createElement(
|
|
2148
2278
|
"svg",
|
|
2149
2279
|
{
|
|
2150
2280
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -2157,11 +2287,11 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2157
2287
|
strokeLinecap: "round",
|
|
2158
2288
|
strokeLinejoin: "round"
|
|
2159
2289
|
},
|
|
2160
|
-
/* @__PURE__ */
|
|
2161
|
-
/* @__PURE__ */
|
|
2290
|
+
/* @__PURE__ */ React23.createElement("path", { d: "M18 6 6 18" }),
|
|
2291
|
+
/* @__PURE__ */ React23.createElement("path", { d: "m6 6 12 12" })
|
|
2162
2292
|
)
|
|
2163
2293
|
),
|
|
2164
|
-
/* @__PURE__ */
|
|
2294
|
+
/* @__PURE__ */ React23.createElement("div", { className: "p-6 sm:p-8" }, /* @__PURE__ */ React23.createElement("div", { className: "mb-8 mt-2" }, /* @__PURE__ */ React23.createElement("h2", { className: "text-2xl text-black tracking-tight mb-2" }, "Join the Waitlist"), /* @__PURE__ */ React23.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__ */ React23.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col gap-8" }, /* @__PURE__ */ React23.createElement(
|
|
2165
2295
|
TextInput,
|
|
2166
2296
|
{
|
|
2167
2297
|
label: "Email ID",
|
|
@@ -2171,7 +2301,7 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
2171
2301
|
placeholder: "name@example.com",
|
|
2172
2302
|
disabled: isLoading
|
|
2173
2303
|
}
|
|
2174
|
-
), /* @__PURE__ */
|
|
2304
|
+
), /* @__PURE__ */ React23.createElement(
|
|
2175
2305
|
ThreeDActionButton,
|
|
2176
2306
|
{
|
|
2177
2307
|
type: "submit",
|
|
@@ -2229,7 +2359,7 @@ var HeroSection = ({
|
|
|
2229
2359
|
setIsWaitlistOpen(true);
|
|
2230
2360
|
}
|
|
2231
2361
|
};
|
|
2232
|
-
return /* @__PURE__ */
|
|
2362
|
+
return /* @__PURE__ */ React24.createElement("div", { className: "w-screen min-h-screen flex justify-center items-center p-4" }, /* @__PURE__ */ React24.createElement("section", { className: "relative h-[95vh] w-full overflow-hidden rounded-2xl " }, bgVideoSrc ? /* @__PURE__ */ React24.createElement(
|
|
2233
2363
|
"video",
|
|
2234
2364
|
{
|
|
2235
2365
|
src: bgVideoSrc,
|
|
@@ -2240,7 +2370,7 @@ var HeroSection = ({
|
|
|
2240
2370
|
playsInline: true,
|
|
2241
2371
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
2242
2372
|
}
|
|
2243
|
-
) : bgImageSrc ? /* @__PURE__ */
|
|
2373
|
+
) : bgImageSrc ? /* @__PURE__ */ React24.createElement(
|
|
2244
2374
|
Image3,
|
|
2245
2375
|
{
|
|
2246
2376
|
src: bgImageSrc,
|
|
@@ -2249,7 +2379,7 @@ var HeroSection = ({
|
|
|
2249
2379
|
priority: true,
|
|
2250
2380
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
2251
2381
|
}
|
|
2252
|
-
) : null, /* @__PURE__ */
|
|
2382
|
+
) : null, /* @__PURE__ */ React24.createElement(
|
|
2253
2383
|
"div",
|
|
2254
2384
|
{
|
|
2255
2385
|
className: "pointer-events-none absolute inset-0 z-10 opacity-[0.7] mix-blend-overlay",
|
|
@@ -2257,15 +2387,15 @@ var HeroSection = ({
|
|
|
2257
2387
|
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")`
|
|
2258
2388
|
}
|
|
2259
2389
|
}
|
|
2260
|
-
), /* @__PURE__ */
|
|
2390
|
+
), /* @__PURE__ */ React24.createElement("div", { className: "pointer-events-none absolute inset-0 bg-linear-to-b from-black/30 via-transparent to-black/80 z-10" }), /* @__PURE__ */ React24.createElement("div", { className: "absolute bottom-0 left-0 right-0 px-4 pb-4 sm:px-6 md:px-10 z-20" }, /* @__PURE__ */ React24.createElement("div", { className: "grid grid-cols-12 items-end gap-4" }, /* @__PURE__ */ React24.createElement("div", { className: "col-span-12 lg:col-span-8" }, /* @__PURE__ */ React24.createElement(
|
|
2261
2391
|
"h1",
|
|
2262
2392
|
{
|
|
2263
2393
|
ref: titleRef,
|
|
2264
2394
|
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]"
|
|
2265
2395
|
},
|
|
2266
|
-
/* @__PURE__ */
|
|
2267
|
-
)), /* @__PURE__ */
|
|
2268
|
-
/* @__PURE__ */
|
|
2396
|
+
/* @__PURE__ */ React24.createElement("div", { className: "inline-flex flex-wrap" }, /* @__PURE__ */ React24.createElement("span", { className: `inline-block relative transition-all duration-1000 ${isAnimating ? "opacity-100 translate-y-0" : "opacity-0 translate-y-10"}` }, titlePrefix, titlePrefix && /* @__PURE__ */ React24.createElement("br", null), highlightText, /* @__PURE__ */ React24.createElement("span", { className: "absolute top-[0.65em] right-[-0.3em] text-[0.31em] text-[#ffffff]/70" }, "*")))
|
|
2397
|
+
)), /* @__PURE__ */ React24.createElement("div", { className: "col-span-12 flex flex-col gap-5 pb-6 lg:col-span-4 lg:pb-10" }, subtitle && /* @__PURE__ */ React24.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__ */ React24.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!
|
|
2398
|
+
/* @__PURE__ */ React24.createElement(
|
|
2269
2399
|
Link5,
|
|
2270
2400
|
{
|
|
2271
2401
|
href: isWaitlist ? "#" : ctaHref || "#",
|
|
@@ -2273,15 +2403,15 @@ var HeroSection = ({
|
|
|
2273
2403
|
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"
|
|
2274
2404
|
},
|
|
2275
2405
|
ctaText,
|
|
2276
|
-
/* @__PURE__ */
|
|
2277
|
-
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
2406
|
+
/* @__PURE__ */ React24.createElement("span", { className: "flex h-8 w-8 items-center justify-center rounded-full bg-black transition-transform group-hover:scale-110" }, /* @__PURE__ */ React24.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__ */ React24.createElement("path", { d: "M5 12h14" }), /* @__PURE__ */ React24.createElement("path", { d: "m12 5 7 7-7 7" })))
|
|
2407
|
+
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ React24.createElement(
|
|
2278
2408
|
Link5,
|
|
2279
2409
|
{
|
|
2280
2410
|
href: secondaryCtaHref,
|
|
2281
2411
|
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"
|
|
2282
2412
|
},
|
|
2283
2413
|
secondaryCtaText
|
|
2284
|
-
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */
|
|
2414
|
+
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col gap-3 mt-4" }, appsText && /* @__PURE__ */ React24.createElement("span", { className: "text-[10px] tracking-widest uppercase text-[#ffffff]/50 " }, appsText), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center gap-4" }, appLogos.map((logo, idx) => /* @__PURE__ */ React24.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__ */ React24.createElement(
|
|
2285
2415
|
Image3,
|
|
2286
2416
|
{
|
|
2287
2417
|
src: logo.src,
|
|
@@ -2290,7 +2420,7 @@ var HeroSection = ({
|
|
|
2290
2420
|
height: 28,
|
|
2291
2421
|
className: "object-contain"
|
|
2292
2422
|
}
|
|
2293
|
-
))))))))), /* @__PURE__ */
|
|
2423
|
+
))))))))), /* @__PURE__ */ React24.createElement(
|
|
2294
2424
|
WaitlistDialog,
|
|
2295
2425
|
{
|
|
2296
2426
|
isOpen: isWaitlistOpen,
|
|
@@ -2300,8 +2430,8 @@ var HeroSection = ({
|
|
|
2300
2430
|
};
|
|
2301
2431
|
|
|
2302
2432
|
// src/components/AppBento2.tsx
|
|
2303
|
-
import
|
|
2304
|
-
import { HugeiconsIcon as
|
|
2433
|
+
import React25, { useState as useState16, useEffect as useEffect11, useRef as useRef5 } from "react";
|
|
2434
|
+
import { HugeiconsIcon as HugeiconsIcon17 } from "@hugeicons/react";
|
|
2305
2435
|
var AppBento2 = ({ tagline, headline, features }) => {
|
|
2306
2436
|
const [isAnimating, setIsAnimating] = useState16(false);
|
|
2307
2437
|
const titleRef = useRef5(null);
|
|
@@ -2323,7 +2453,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2323
2453
|
}
|
|
2324
2454
|
return () => observer.disconnect();
|
|
2325
2455
|
}, []);
|
|
2326
|
-
return /* @__PURE__ */
|
|
2456
|
+
return /* @__PURE__ */ React25.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ React25.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ React25.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React25.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ React25.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React25.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), /* @__PURE__ */ React25.createElement(
|
|
2327
2457
|
"h2",
|
|
2328
2458
|
{
|
|
2329
2459
|
ref: titleRef,
|
|
@@ -2331,7 +2461,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2331
2461
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2332
2462
|
},
|
|
2333
2463
|
headline
|
|
2334
|
-
))), /* @__PURE__ */
|
|
2464
|
+
))), /* @__PURE__ */ React25.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-6 gap-6" }, features.map((f, i) => {
|
|
2335
2465
|
const isWhite = i === 0;
|
|
2336
2466
|
const isBlack = i === 1;
|
|
2337
2467
|
const isNeutral = i === 2;
|
|
@@ -2353,36 +2483,36 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2353
2483
|
const textColor = isBlack ? "text-white" : "text-black";
|
|
2354
2484
|
const subTextColor = isBlack ? "text-neutral-300" : "text-neutral-600";
|
|
2355
2485
|
const labelColor = isBlack ? "text-neutral-400" : "text-neutral-500";
|
|
2356
|
-
return /* @__PURE__ */
|
|
2486
|
+
return /* @__PURE__ */ React25.createElement(
|
|
2357
2487
|
"div",
|
|
2358
2488
|
{
|
|
2359
2489
|
key: i,
|
|
2360
2490
|
className: `relative rounded-2xl overflow-hidden p-8 flex flex-col min-h-75 transition-all duration-500 group text-left ${getBgStyle()} ${f.size}`,
|
|
2361
2491
|
style: { boxShadow: getShadowStyle() }
|
|
2362
2492
|
},
|
|
2363
|
-
/* @__PURE__ */
|
|
2493
|
+
/* @__PURE__ */ React25.createElement(
|
|
2364
2494
|
"div",
|
|
2365
2495
|
{
|
|
2366
2496
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
2367
2497
|
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")` }
|
|
2368
2498
|
}
|
|
2369
2499
|
),
|
|
2370
|
-
isBlack && /* @__PURE__ */
|
|
2371
|
-
/* @__PURE__ */
|
|
2372
|
-
/* @__PURE__ */
|
|
2500
|
+
isBlack && /* @__PURE__ */ React25.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" }),
|
|
2501
|
+
/* @__PURE__ */ React25.createElement("div", { className: "absolute inset-0 overflow-hidden pointer-events-none z-0" }, /* @__PURE__ */ React25.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__ */ React25.createElement(HugeiconsIcon17, { icon: f.icon, size: 180 }))),
|
|
2502
|
+
/* @__PURE__ */ React25.createElement("div", { className: "relative z-10 w-full h-full flex flex-col pointer-events-auto" }, /* @__PURE__ */ React25.createElement("div", { className: "flex items-center justify-between mb-8" }, /* @__PURE__ */ React25.createElement("span", { className: `text-[9px] tracking-widest ${labelColor}` }, f.label), /* @__PURE__ */ React25.createElement("div", { className: `p-2 rounded-full transition-colors ${isBlack ? "bg-white/10" : "bg-white/50 backdrop-blur-sm"}` }, /* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon: f.icon, size: 20, className: textColor }))), /* @__PURE__ */ React25.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React25.createElement("h3", { className: `text-xl mb-2 tracking-tight ${textColor}` }, f.title), /* @__PURE__ */ React25.createElement("p", { className: `text-[13px] leading-relaxed max-w-sm ${subTextColor}` }, f.desc)))
|
|
2373
2503
|
);
|
|
2374
2504
|
})))));
|
|
2375
2505
|
};
|
|
2376
2506
|
|
|
2377
2507
|
// src/components/FeatureScroll.tsx
|
|
2378
|
-
import
|
|
2508
|
+
import React26, { useRef as useRef6, useState as useState17, useEffect as useEffect12 } from "react";
|
|
2379
2509
|
import Image4 from "next/image";
|
|
2380
|
-
import { HugeiconsIcon as
|
|
2510
|
+
import { HugeiconsIcon as HugeiconsIcon18 } from "@hugeicons/react";
|
|
2381
2511
|
import { ArrowLeft01Icon as ArrowLeft01Icon2, ArrowRight01Icon as ArrowRight01Icon4, Loading03Icon as Loading03Icon10 } from "@hugeicons/core-free-icons";
|
|
2382
2512
|
var FeatureCard = ({ feature, bgImage }) => {
|
|
2383
2513
|
const [isBgLoading, setIsBgLoading] = useState17(true);
|
|
2384
2514
|
const [isFgLoading, setIsFgLoading] = useState17(!!feature.image);
|
|
2385
|
-
return /* @__PURE__ */
|
|
2515
|
+
return /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col shrink-0 w-[90vw] sm:w-150 snap-center md:snap-start group cursor-grab active:cursor-grabbing" }, /* @__PURE__ */ React26.createElement("div", { className: "relative w-full aspect-16/10 bg-neutral-100 rounded-2xl overflow-hidden mb-6 flex items-center justify-center" }, /* @__PURE__ */ React26.createElement(
|
|
2386
2516
|
Image4,
|
|
2387
2517
|
{
|
|
2388
2518
|
src: bgImage,
|
|
@@ -2395,7 +2525,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2395
2525
|
${isBgLoading ? "blur-xl scale-110" : "blur-0 scale-100"}
|
|
2396
2526
|
`
|
|
2397
2527
|
}
|
|
2398
|
-
), /* @__PURE__ */
|
|
2528
|
+
), /* @__PURE__ */ React26.createElement(
|
|
2399
2529
|
"div",
|
|
2400
2530
|
{
|
|
2401
2531
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.25] mix-blend-overlay",
|
|
@@ -2403,7 +2533,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2403
2533
|
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")`
|
|
2404
2534
|
}
|
|
2405
2535
|
}
|
|
2406
|
-
), isFgLoading && feature.image && /* @__PURE__ */
|
|
2536
|
+
), isFgLoading && feature.image && /* @__PURE__ */ React26.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-50/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ React26.createElement(HugeiconsIcon18, { icon: Loading03Icon10, size: 32, className: "animate-spin text-neutral-400" })), feature.image && /* @__PURE__ */ React26.createElement("div", { className: "absolute -bottom-6 -right-6 w-[85%] h-[85%] z-10 transition-transform duration-700 ease-out group-hover:-translate-x-2 group-hover:-translate-y-2" }, /* @__PURE__ */ React26.createElement(
|
|
2407
2537
|
Image4,
|
|
2408
2538
|
{
|
|
2409
2539
|
src: feature.image,
|
|
@@ -2416,7 +2546,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2416
2546
|
${isFgLoading ? "opacity-0 blur-xl" : "opacity-100 blur-0"}
|
|
2417
2547
|
`
|
|
2418
2548
|
}
|
|
2419
|
-
))), /* @__PURE__ */
|
|
2549
|
+
))), /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ React26.createElement("h3", { className: " text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ React26.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 max-w-[90%]" }, feature.desc)));
|
|
2420
2550
|
};
|
|
2421
2551
|
var FeatureScroll = ({ tagline, headline, features }) => {
|
|
2422
2552
|
const scrollRef = useRef6(null);
|
|
@@ -2445,7 +2575,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2445
2575
|
"https://retinalabs.company/assets/images/bg_6.avif",
|
|
2446
2576
|
"https://retinalabs.company/assets/images/bg_1.avif"
|
|
2447
2577
|
];
|
|
2448
|
-
return /* @__PURE__ */
|
|
2578
|
+
return /* @__PURE__ */ React26.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden" }, /* @__PURE__ */ React26.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ React26.createElement("div", { className: "relative z-10 text-left" }, /* @__PURE__ */ React26.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ React26.createElement("h2", { className: " text-3xl tracking-tight text-black leading-[1.05]" }, headline)), /* @__PURE__ */ React26.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ React26.createElement(
|
|
2449
2579
|
"button",
|
|
2450
2580
|
{
|
|
2451
2581
|
onClick: () => scroll("left"),
|
|
@@ -2453,8 +2583,8 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2453
2583
|
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",
|
|
2454
2584
|
"aria-label": "Previous feature"
|
|
2455
2585
|
},
|
|
2456
|
-
/* @__PURE__ */
|
|
2457
|
-
), /* @__PURE__ */
|
|
2586
|
+
/* @__PURE__ */ React26.createElement(HugeiconsIcon18, { icon: ArrowLeft01Icon2, size: 20 })
|
|
2587
|
+
), /* @__PURE__ */ React26.createElement(
|
|
2458
2588
|
"button",
|
|
2459
2589
|
{
|
|
2460
2590
|
onClick: () => scroll("right"),
|
|
@@ -2462,57 +2592,57 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2462
2592
|
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",
|
|
2463
2593
|
"aria-label": "Next feature"
|
|
2464
2594
|
},
|
|
2465
|
-
/* @__PURE__ */
|
|
2466
|
-
))), /* @__PURE__ */
|
|
2595
|
+
/* @__PURE__ */ React26.createElement(HugeiconsIcon18, { icon: ArrowRight01Icon4, size: 20 })
|
|
2596
|
+
))), /* @__PURE__ */ React26.createElement(
|
|
2467
2597
|
"div",
|
|
2468
2598
|
{
|
|
2469
2599
|
ref: scrollRef,
|
|
2470
2600
|
onScroll: checkScroll,
|
|
2471
2601
|
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"
|
|
2472
2602
|
},
|
|
2473
|
-
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */
|
|
2474
|
-
), /* @__PURE__ */
|
|
2603
|
+
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */ React26.createElement(FeatureCard, { key: idx, feature, bgImage: bgImages[idx] }))
|
|
2604
|
+
), /* @__PURE__ */ React26.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ React26.createElement(
|
|
2475
2605
|
"button",
|
|
2476
2606
|
{
|
|
2477
2607
|
onClick: () => scroll("left"),
|
|
2478
2608
|
disabled: !canScrollLeft,
|
|
2479
2609
|
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"
|
|
2480
2610
|
},
|
|
2481
|
-
/* @__PURE__ */
|
|
2482
|
-
), /* @__PURE__ */
|
|
2611
|
+
/* @__PURE__ */ React26.createElement(HugeiconsIcon18, { icon: ArrowLeft01Icon2, size: 20 })
|
|
2612
|
+
), /* @__PURE__ */ React26.createElement(
|
|
2483
2613
|
"button",
|
|
2484
2614
|
{
|
|
2485
2615
|
onClick: () => scroll("right"),
|
|
2486
2616
|
disabled: !canScrollRight,
|
|
2487
2617
|
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"
|
|
2488
2618
|
},
|
|
2489
|
-
/* @__PURE__ */
|
|
2619
|
+
/* @__PURE__ */ React26.createElement(HugeiconsIcon18, { icon: ArrowRight01Icon4, size: 20 })
|
|
2490
2620
|
))));
|
|
2491
2621
|
};
|
|
2492
2622
|
|
|
2493
2623
|
// src/components/PlatformFeatures.tsx
|
|
2494
|
-
import
|
|
2495
|
-
import { HugeiconsIcon as
|
|
2624
|
+
import React27 from "react";
|
|
2625
|
+
import { HugeiconsIcon as HugeiconsIcon19 } from "@hugeicons/react";
|
|
2496
2626
|
var PlatformFeatures = ({
|
|
2497
2627
|
tagline,
|
|
2498
2628
|
headline,
|
|
2499
2629
|
description,
|
|
2500
2630
|
features
|
|
2501
2631
|
}) => {
|
|
2502
|
-
return /* @__PURE__ */
|
|
2632
|
+
return /* @__PURE__ */ React27.createElement("section", { className: "w-full flex justify-center mb-15 relative z-10" }, /* @__PURE__ */ React27.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React27.createElement("div", { className: "flex flex-col items-start mb-16 relative z-10" }, /* @__PURE__ */ React27.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ React27.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.05] mb-6" }, headline), /* @__PURE__ */ React27.createElement("p", { className: "text-[15px] leading-[1.8] text-neutral-600 max-w-2xl" }, description)), /* @__PURE__ */ React27.createElement("div", { className: "w-full h-px bg-neutral-100 mb-16", "aria-hidden": "true" }), /* @__PURE__ */ React27.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-x-8 gap-y-12" }, features.map((feature, idx) => /* @__PURE__ */ React27.createElement(
|
|
2503
2633
|
"div",
|
|
2504
2634
|
{
|
|
2505
2635
|
key: idx,
|
|
2506
2636
|
className: "flex flex-col group animate-in fade-in slide-in-from-bottom-4 duration-700 fill-mode-both",
|
|
2507
2637
|
style: { animationDelay: feature.delay || "0ms" }
|
|
2508
2638
|
},
|
|
2509
|
-
/* @__PURE__ */
|
|
2510
|
-
/* @__PURE__ */
|
|
2639
|
+
/* @__PURE__ */ React27.createElement("div", { className: "flex flex-row items-center gap-4 mb-4" }, /* @__PURE__ */ React27.createElement("div", { className: "w-14 h-14 shrink-0 rounded-xl border border-neutral-200 flex items-center justify-center text-neutral-600 transition-colors duration-300" }, /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: feature.icon, size: 24 })), /* @__PURE__ */ React27.createElement("div", { className: "flex flex-col justify-center" }, /* @__PURE__ */ React27.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400 mb-0.5" }, feature.label || "CAPABILITY"), /* @__PURE__ */ React27.createElement("h3", { className: "text-xl tracking-tight text-black" }, feature.title))),
|
|
2640
|
+
/* @__PURE__ */ React27.createElement("div", null, /* @__PURE__ */ React27.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 pr-4" }, feature.desc))
|
|
2511
2641
|
)))));
|
|
2512
2642
|
};
|
|
2513
2643
|
|
|
2514
2644
|
// src/components/ManagedDocument.tsx
|
|
2515
|
-
import
|
|
2645
|
+
import React28, { useState as useState18, useEffect as useEffect13, useRef as useRef7 } from "react";
|
|
2516
2646
|
var ManagedDocument = ({
|
|
2517
2647
|
tagline,
|
|
2518
2648
|
title,
|
|
@@ -2542,7 +2672,7 @@ var ManagedDocument = ({
|
|
|
2542
2672
|
}, []);
|
|
2543
2673
|
return (
|
|
2544
2674
|
// Outer layout wrapper (takes up available space, adds padding)
|
|
2545
|
-
/* @__PURE__ */
|
|
2675
|
+
/* @__PURE__ */ React28.createElement("div", { className: "grow pt-4 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React28.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ React28.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React28.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React28.createElement(
|
|
2546
2676
|
"h1",
|
|
2547
2677
|
{
|
|
2548
2678
|
ref: titleRef,
|
|
@@ -2550,7 +2680,7 @@ var ManagedDocument = ({
|
|
|
2550
2680
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2551
2681
|
},
|
|
2552
2682
|
title
|
|
2553
|
-
)), sections.map((section, index) => /* @__PURE__ */
|
|
2683
|
+
)), sections.map((section, index) => /* @__PURE__ */ React28.createElement("div", { key: index, className: "relative px-5 md:px-12 py-8 md:py-10" }, section.heading && /* @__PURE__ */ React28.createElement("p", { className: " text-[11px] tracking-[0.2em] text-black mb-4 text-left " }, section.heading), section.paragraphs && section.paragraphs.length > 0 && /* @__PURE__ */ React28.createElement("div", { className: "text-[14px] leading-[1.8] text-neutral-700 space-y-4 text-left " }, section.paragraphs.map((text, pIndex) => /* @__PURE__ */ React28.createElement("p", { key: pIndex }, text))), section.quote && /* @__PURE__ */ React28.createElement("div", { className: `border-neutral-100 border rounded-xl p-6 ${section.paragraphs && section.paragraphs.length > 0 ? "mt-6" : ""}` }, /* @__PURE__ */ React28.createElement("p", { className: "text-neutral-900 text-[14px] md:text-[14px] leading-relaxed" }, '"', section.quote, '"')))), (contactText || contactEmail) && /* @__PURE__ */ React28.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ React28.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ React28.createElement(
|
|
2554
2684
|
"a",
|
|
2555
2685
|
{
|
|
2556
2686
|
href: `mailto:${contactEmail}`,
|
|
@@ -2562,18 +2692,18 @@ var ManagedDocument = ({
|
|
|
2562
2692
|
};
|
|
2563
2693
|
|
|
2564
2694
|
// src/components/ManagedContactBlock.tsx
|
|
2565
|
-
import
|
|
2566
|
-
import { HugeiconsIcon as
|
|
2695
|
+
import React29, { useState as useState19, useEffect as useEffect14 } from "react";
|
|
2696
|
+
import { HugeiconsIcon as HugeiconsIcon20 } from "@hugeicons/react";
|
|
2567
2697
|
var SecureEmail = ({ user, domain, className }) => {
|
|
2568
2698
|
const [isMounted, setIsMounted] = useState19(false);
|
|
2569
2699
|
useEffect14(() => {
|
|
2570
2700
|
setIsMounted(true);
|
|
2571
2701
|
}, []);
|
|
2572
2702
|
if (!isMounted) {
|
|
2573
|
-
return /* @__PURE__ */
|
|
2703
|
+
return /* @__PURE__ */ React29.createElement("span", { className, style: { opacity: 0 } }, "Loading");
|
|
2574
2704
|
}
|
|
2575
2705
|
const email = `${user}@${domain}`;
|
|
2576
|
-
return /* @__PURE__ */
|
|
2706
|
+
return /* @__PURE__ */ React29.createElement("a", { href: `mailto:${email}`, className }, email);
|
|
2577
2707
|
};
|
|
2578
2708
|
var ManagedContactBlock = ({
|
|
2579
2709
|
tagline,
|
|
@@ -2582,7 +2712,7 @@ var ManagedContactBlock = ({
|
|
|
2582
2712
|
emails,
|
|
2583
2713
|
socials
|
|
2584
2714
|
}) => {
|
|
2585
|
-
return /* @__PURE__ */
|
|
2715
|
+
return /* @__PURE__ */ React29.createElement("div", { className: "grow pt-4 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React29.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ React29.createElement(
|
|
2586
2716
|
"div",
|
|
2587
2717
|
{
|
|
2588
2718
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2591,21 +2721,21 @@ var ManagedContactBlock = ({
|
|
|
2591
2721
|
backgroundRepeat: "repeat"
|
|
2592
2722
|
}
|
|
2593
2723
|
}
|
|
2594
|
-
), /* @__PURE__ */
|
|
2724
|
+
), /* @__PURE__ */ React29.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React29.createElement("div", { className: "relative px-8 md:px-12 py-10" }, tagline && /* @__PURE__ */ React29.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React29.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ React29.createElement("div", { className: "relative px-8 md:px-12 py-8 pb-14" }, /* @__PURE__ */ React29.createElement("div", { className: "flex flex-wrap gap-12 lg:gap-16 w-full" }, company && /* @__PURE__ */ React29.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React29.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Contact Details"), /* @__PURE__ */ React29.createElement("div", { className: "space-y-3 text-[13px] text-neutral-600 leading-[1.8]" }, company.name && /* @__PURE__ */ React29.createElement("p", { className: "text-black" }, company.name), company.lines && company.lines.map((line, idx) => /* @__PURE__ */ React29.createElement("p", { key: idx }, line)), company.phone && /* @__PURE__ */ React29.createElement("p", { className: "pt-2" }, /* @__PURE__ */ React29.createElement(
|
|
2595
2725
|
"a",
|
|
2596
2726
|
{
|
|
2597
2727
|
href: `tel:${company.phone.replace(/\s+/g, "")}`,
|
|
2598
2728
|
className: "transition-colors hover:text-black"
|
|
2599
2729
|
},
|
|
2600
2730
|
company.phone
|
|
2601
|
-
)))), emails && emails.length > 0 && /* @__PURE__ */
|
|
2731
|
+
)))), emails && emails.length > 0 && /* @__PURE__ */ React29.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React29.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Email Directory"), /* @__PURE__ */ React29.createElement("div", { className: "space-y-6 text-[13px]" }, emails.map((email, idx) => /* @__PURE__ */ React29.createElement("div", { key: idx }, /* @__PURE__ */ React29.createElement("p", { className: "text-[11px] tracking-[0.2em] mb-1.5 text-neutral-500 " }, email.label), /* @__PURE__ */ React29.createElement(
|
|
2602
2732
|
SecureEmail,
|
|
2603
2733
|
{
|
|
2604
2734
|
user: email.user,
|
|
2605
2735
|
domain: email.domain,
|
|
2606
2736
|
className: "text-neutral-600 transition-colors hover:text-black"
|
|
2607
2737
|
}
|
|
2608
|
-
))))), socials && socials.length > 0 && /* @__PURE__ */
|
|
2738
|
+
))))), socials && socials.length > 0 && /* @__PURE__ */ React29.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React29.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Find Us Online"), /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col space-y-5 pt-1" }, socials.map((social, idx) => /* @__PURE__ */ React29.createElement(
|
|
2609
2739
|
"a",
|
|
2610
2740
|
{
|
|
2611
2741
|
key: idx,
|
|
@@ -2615,17 +2745,17 @@ var ManagedContactBlock = ({
|
|
|
2615
2745
|
className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black",
|
|
2616
2746
|
"aria-label": social.label
|
|
2617
2747
|
},
|
|
2618
|
-
/* @__PURE__ */
|
|
2619
|
-
/* @__PURE__ */
|
|
2748
|
+
/* @__PURE__ */ React29.createElement(HugeiconsIcon20, { icon: social.icon, size: 18 }),
|
|
2749
|
+
/* @__PURE__ */ React29.createElement("span", { className: "text-[13px]" }, social.label)
|
|
2620
2750
|
)))))))));
|
|
2621
2751
|
};
|
|
2622
2752
|
|
|
2623
2753
|
// src/components/ManagedPricingBlock.tsx
|
|
2624
|
-
import
|
|
2754
|
+
import React30, { useState as useState20, useEffect as useEffect15, useRef as useRef8 } from "react";
|
|
2625
2755
|
import Link6 from "next/link";
|
|
2626
2756
|
import Image5 from "next/image";
|
|
2627
|
-
var CheckIcon = ({ className = "" }) => /* @__PURE__ */
|
|
2628
|
-
var CrossIcon = ({ className = "" }) => /* @__PURE__ */
|
|
2757
|
+
var CheckIcon = ({ className = "" }) => /* @__PURE__ */ React30.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React30.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ React30.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
2758
|
+
var CrossIcon = ({ className = "" }) => /* @__PURE__ */ React30.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React30.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ React30.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
2629
2759
|
var ManagedPricingBlock = ({
|
|
2630
2760
|
tagline,
|
|
2631
2761
|
title,
|
|
@@ -2655,7 +2785,7 @@ var ManagedPricingBlock = ({
|
|
|
2655
2785
|
}, []);
|
|
2656
2786
|
const hasTabs = tabs && tabs.length > 0;
|
|
2657
2787
|
const currentPlans = hasTabs ? tabs[activeTabIndex].plans : plans;
|
|
2658
|
-
return /* @__PURE__ */
|
|
2788
|
+
return /* @__PURE__ */ React30.createElement("div", { className: "grow pt-10 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React30.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col items-center" }, /* @__PURE__ */ React30.createElement("div", { className: "w-full flex flex-col items-center text-center mb-10 sm:mb-12" }, tagline && /* @__PURE__ */ React30.createElement("span", { className: "text-[9px] tracking-[0.4em] text-black block " }, tagline), /* @__PURE__ */ React30.createElement(
|
|
2659
2789
|
"h1",
|
|
2660
2790
|
{
|
|
2661
2791
|
ref: titleRef,
|
|
@@ -2663,9 +2793,9 @@ var ManagedPricingBlock = ({
|
|
|
2663
2793
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2664
2794
|
},
|
|
2665
2795
|
title
|
|
2666
|
-
)), hasTabs && /* @__PURE__ */
|
|
2796
|
+
)), hasTabs && /* @__PURE__ */ React30.createElement("div", { className: "flex items-center justify-center mb-8 sm:mb-10 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ React30.createElement("div", { className: "flex items-center bg-white rounded-full p-1 sm:p-1.5 max-w-full overflow-x-auto custom-scrollbar" }, tabs.map((tab, idx) => {
|
|
2667
2797
|
const isActive = activeTabIndex === idx;
|
|
2668
|
-
return /* @__PURE__ */
|
|
2798
|
+
return /* @__PURE__ */ React30.createElement(
|
|
2669
2799
|
"button",
|
|
2670
2800
|
{
|
|
2671
2801
|
key: idx,
|
|
@@ -2674,19 +2804,19 @@ var ManagedPricingBlock = ({
|
|
|
2674
2804
|
},
|
|
2675
2805
|
tab.label
|
|
2676
2806
|
);
|
|
2677
|
-
}))), /* @__PURE__ */
|
|
2807
|
+
}))), /* @__PURE__ */ React30.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-5 w-full max-w-3xl animate-in slide-in-from-bottom-2 fade-in duration-500" }, currentPlans.map((plan, planIdx) => /* @__PURE__ */ React30.createElement(
|
|
2678
2808
|
"div",
|
|
2679
2809
|
{
|
|
2680
2810
|
key: `${activeTabIndex}-${planIdx}`,
|
|
2681
2811
|
className: `bg-white rounded-3xl p-6 flex flex-col relative overflow-hidden transition-all duration-300 ${plan.isPremium ? "" : ""}`
|
|
2682
2812
|
},
|
|
2683
|
-
/* @__PURE__ */
|
|
2813
|
+
/* @__PURE__ */ React30.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React30.createElement("span", { className: "text-black text-base block mb-1" }, plan.name), /* @__PURE__ */ React30.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ React30.createElement("h3", { className: "text-3xl font-light text-black" }, plan.price), plan.period && /* @__PURE__ */ React30.createElement("span", { className: "text-xs text-neutral-500" }, plan.period)), /* @__PURE__ */ React30.createElement("p", { className: "text-xs text-neutral-500 mt-2 min-h-8" }, plan.description), plan.showApps && plan.appLogos && plan.appLogos.length > 0 && /* @__PURE__ */ React30.createElement("div", { className: "flex items-center gap-2 mt-4" }, plan.appLogos.map((logo, logoIdx) => /* @__PURE__ */ React30.createElement(
|
|
2684
2814
|
"div",
|
|
2685
2815
|
{
|
|
2686
2816
|
key: logoIdx,
|
|
2687
2817
|
className: "relative w-5 h-5 overflow-hidden flex items-center justify-center shrink-0"
|
|
2688
2818
|
},
|
|
2689
|
-
/* @__PURE__ */
|
|
2819
|
+
/* @__PURE__ */ React30.createElement(
|
|
2690
2820
|
Image5,
|
|
2691
2821
|
{
|
|
2692
2822
|
src: logo.src,
|
|
@@ -2697,7 +2827,7 @@ var ManagedPricingBlock = ({
|
|
|
2697
2827
|
}
|
|
2698
2828
|
)
|
|
2699
2829
|
)))),
|
|
2700
|
-
plan.isPremium ? /* @__PURE__ */
|
|
2830
|
+
plan.isPremium ? /* @__PURE__ */ React30.createElement(ThreeDButton, { href: plan.ctaHref, className: "mb-6 w-full" }, plan.ctaText) : /* @__PURE__ */ React30.createElement(
|
|
2701
2831
|
Link6,
|
|
2702
2832
|
{
|
|
2703
2833
|
href: plan.ctaHref,
|
|
@@ -2705,20 +2835,20 @@ var ManagedPricingBlock = ({
|
|
|
2705
2835
|
},
|
|
2706
2836
|
plan.ctaText
|
|
2707
2837
|
),
|
|
2708
|
-
/* @__PURE__ */
|
|
2838
|
+
/* @__PURE__ */ React30.createElement("div", { className: "flex flex-col gap-3" }, plan.features.map((feature, featureIdx) => {
|
|
2709
2839
|
const isAvailable = feature.value !== false;
|
|
2710
2840
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
2711
|
-
return /* @__PURE__ */
|
|
2841
|
+
return /* @__PURE__ */ React30.createElement("div", { key: featureIdx, className: "flex items-center gap-2.5" }, isAvailable ? /* @__PURE__ */ React30.createElement(CheckIcon, null) : /* @__PURE__ */ React30.createElement(CrossIcon, null), /* @__PURE__ */ React30.createElement("span", { className: `text-xs truncate ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ React30.createElement("span", { className: "text-neutral-500 ml-1" }, "(", valueText, ")")));
|
|
2712
2842
|
}))
|
|
2713
2843
|
)))));
|
|
2714
2844
|
};
|
|
2715
2845
|
|
|
2716
2846
|
// src/components/ManagedBoardBlock.tsx
|
|
2717
|
-
import
|
|
2847
|
+
import React31 from "react";
|
|
2718
2848
|
import Image6 from "next/image";
|
|
2719
|
-
import { HugeiconsIcon as
|
|
2849
|
+
import { HugeiconsIcon as HugeiconsIcon21 } from "@hugeicons/react";
|
|
2720
2850
|
import { TwitterIcon, LinkedinIcon } from "@hugeicons/core-free-icons";
|
|
2721
|
-
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */
|
|
2851
|
+
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ React31.createElement(
|
|
2722
2852
|
"a",
|
|
2723
2853
|
{
|
|
2724
2854
|
href,
|
|
@@ -2727,7 +2857,7 @@ var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ React30.
|
|
|
2727
2857
|
className: "text-neutral-400 hover:text-black transition-colors",
|
|
2728
2858
|
"aria-label": `${name} on ${label}`
|
|
2729
2859
|
},
|
|
2730
|
-
/* @__PURE__ */
|
|
2860
|
+
/* @__PURE__ */ React31.createElement(HugeiconsIcon21, { icon, size: 16 })
|
|
2731
2861
|
);
|
|
2732
2862
|
var ManagedBoardBlock = ({
|
|
2733
2863
|
tagline,
|
|
@@ -2736,7 +2866,7 @@ var ManagedBoardBlock = ({
|
|
|
2736
2866
|
contactText,
|
|
2737
2867
|
contactEmail
|
|
2738
2868
|
}) => {
|
|
2739
|
-
return /* @__PURE__ */
|
|
2869
|
+
return /* @__PURE__ */ React31.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React31.createElement("div", { className: "relative w-full mx-auto overflow-hidden max-w-7xl" }, /* @__PURE__ */ React31.createElement(
|
|
2740
2870
|
"div",
|
|
2741
2871
|
{
|
|
2742
2872
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2745,7 +2875,7 @@ var ManagedBoardBlock = ({
|
|
|
2745
2875
|
backgroundRepeat: "repeat"
|
|
2746
2876
|
}
|
|
2747
2877
|
}
|
|
2748
|
-
), /* @__PURE__ */
|
|
2878
|
+
), /* @__PURE__ */ React31.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React31.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ React31.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React31.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ React31.createElement("div", { className: "relative px-5 md:px-12 py-4 md:py-8" }, /* @__PURE__ */ React31.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-5 md:gap-8" }, members.map((member, idx) => /* @__PURE__ */ React31.createElement("div", { key: idx, className: "relative p-6 md:p-8 rounded-2xl bg-white flex flex-col transition-all group" }, /* @__PURE__ */ React31.createElement("div", { className: "flex items-start space-x-4 md:space-x-5 mb-5 md:mb-6" }, /* @__PURE__ */ React31.createElement("div", { className: "relative w-14 h-14 md:w-16 md:h-16 shrink-0 bg-white overflow-hidden rounded-xl" }, /* @__PURE__ */ React31.createElement(
|
|
2749
2879
|
Image6,
|
|
2750
2880
|
{
|
|
2751
2881
|
src: member.imageSrc,
|
|
@@ -2754,7 +2884,7 @@ var ManagedBoardBlock = ({
|
|
|
2754
2884
|
sizes: "(max-width: 768px) 56px, 64px",
|
|
2755
2885
|
className: "object-cover grayscale opacity-100 transition-opacity"
|
|
2756
2886
|
}
|
|
2757
|
-
)), /* @__PURE__ */
|
|
2887
|
+
)), /* @__PURE__ */ React31.createElement("div", { className: "pt-1" }, /* @__PURE__ */ React31.createElement("h3", { className: " text-[14px] md:text-[15px] text-black tracking-tight" }, member.name), /* @__PURE__ */ React31.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 mt-1.5 " }, member.title))), /* @__PURE__ */ React31.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 text-left grow mb-8" }, member.bio), /* @__PURE__ */ React31.createElement("div", { className: "space-y-6 mt-auto" }, /* @__PURE__ */ React31.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ React31.createElement(ThreeDButton, { href: member.website }, "Visit Website")), /* @__PURE__ */ React31.createElement("div", { className: "flex space-x-4 pt-5" }, member.twitterHandle && member.twitterHandle.length > 0 && /* @__PURE__ */ React31.createElement(
|
|
2758
2888
|
MemberSocialLink,
|
|
2759
2889
|
{
|
|
2760
2890
|
href: `https://x.com/${member.twitterHandle}`,
|
|
@@ -2762,7 +2892,7 @@ var ManagedBoardBlock = ({
|
|
|
2762
2892
|
label: "X",
|
|
2763
2893
|
name: member.name
|
|
2764
2894
|
}
|
|
2765
|
-
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */
|
|
2895
|
+
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */ React31.createElement(
|
|
2766
2896
|
MemberSocialLink,
|
|
2767
2897
|
{
|
|
2768
2898
|
href: member.linkedinHandle,
|
|
@@ -2770,28 +2900,28 @@ var ManagedBoardBlock = ({
|
|
|
2770
2900
|
label: "LinkedIn",
|
|
2771
2901
|
name: member.name
|
|
2772
2902
|
}
|
|
2773
|
-
))))))), (contactText || contactEmail) && /* @__PURE__ */
|
|
2903
|
+
))))))), (contactText || contactEmail) && /* @__PURE__ */ React31.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ React31.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ React31.createElement("a", { href: `mailto:${contactEmail}`, className: "text-black decoration-black decoration-2 underline-offset-4 ml-1 transition-colors" }, contactEmail))))));
|
|
2774
2904
|
};
|
|
2775
2905
|
|
|
2776
2906
|
// src/components/ManagedNotFoundBlock.tsx
|
|
2777
|
-
import
|
|
2907
|
+
import React32 from "react";
|
|
2778
2908
|
var ManagedNotFoundBlock = ({
|
|
2779
2909
|
title = "404 - Page Not Found",
|
|
2780
2910
|
description = "The page you are looking for does not exist or has been moved."
|
|
2781
2911
|
}) => {
|
|
2782
|
-
return /* @__PURE__ */
|
|
2912
|
+
return /* @__PURE__ */ React32.createElement("main", { className: "min-h-screen flex items-center justify-center relative z-20 bg-transparent" }, /* @__PURE__ */ React32.createElement("div", { className: "p-6 w-full max-w-md mx-auto text-center" }, /* @__PURE__ */ React32.createElement("div", { className: "mb-8 flex justify-center" }, /* @__PURE__ */ React32.createElement(
|
|
2783
2913
|
"svg",
|
|
2784
2914
|
{
|
|
2785
2915
|
xmlns: "http://www.w3.org/2000/svg",
|
|
2786
2916
|
viewBox: "0 0 24 24",
|
|
2787
2917
|
className: "w-12 h-12 fill-neutral-100"
|
|
2788
2918
|
},
|
|
2789
|
-
/* @__PURE__ */
|
|
2790
|
-
)), /* @__PURE__ */
|
|
2919
|
+
/* @__PURE__ */ React32.createElement("path", { fillRule: "evenodd", d: "M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z", clipRule: "evenodd" })
|
|
2920
|
+
)), /* @__PURE__ */ React32.createElement("h1", { className: " text-xl md:text-3xl text-black tracking-tight mb-4" }, title), /* @__PURE__ */ React32.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-12" }, description)));
|
|
2791
2921
|
};
|
|
2792
2922
|
|
|
2793
2923
|
// src/components/ManagedNewsletterSplitBlock.tsx
|
|
2794
|
-
import
|
|
2924
|
+
import React33 from "react";
|
|
2795
2925
|
import Image7 from "next/image";
|
|
2796
2926
|
var ManagedNewsletterSplitBlock = ({
|
|
2797
2927
|
tagline,
|
|
@@ -2805,7 +2935,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2805
2935
|
ctaHref = "/contact",
|
|
2806
2936
|
children
|
|
2807
2937
|
}) => {
|
|
2808
|
-
return /* @__PURE__ */
|
|
2938
|
+
return /* @__PURE__ */ React33.createElement("div", { className: "grow flex flex-col md:flex-row relative w-full pt-32 md:pt-0" }, /* @__PURE__ */ React33.createElement("div", { className: "hidden md:block md:w-1/2 relative min-h-screen overflow-hidden" }, /* @__PURE__ */ React33.createElement(
|
|
2809
2939
|
Image7,
|
|
2810
2940
|
{
|
|
2811
2941
|
src: imageSrc,
|
|
@@ -2815,7 +2945,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2815
2945
|
className: "object-cover object-top grayscale opacity-60",
|
|
2816
2946
|
quality: 100
|
|
2817
2947
|
}
|
|
2818
|
-
), /* @__PURE__ */
|
|
2948
|
+
), /* @__PURE__ */ React33.createElement(
|
|
2819
2949
|
"div",
|
|
2820
2950
|
{
|
|
2821
2951
|
className: "absolute inset-0 z-10 pointer-events-none",
|
|
@@ -2823,7 +2953,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2823
2953
|
background: "linear-gradient(to right, rgba(255,255,255,0) 30%, #ffffff 100%)"
|
|
2824
2954
|
}
|
|
2825
2955
|
}
|
|
2826
|
-
), /* @__PURE__ */
|
|
2956
|
+
), /* @__PURE__ */ React33.createElement(
|
|
2827
2957
|
"div",
|
|
2828
2958
|
{
|
|
2829
2959
|
className: "absolute inset-x-0 bottom-0 h-40 z-10 pointer-events-none",
|
|
@@ -2831,7 +2961,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2831
2961
|
background: "linear-gradient(to bottom, rgba(255,255,255,0) 0%, #ffffff 100%)"
|
|
2832
2962
|
}
|
|
2833
2963
|
}
|
|
2834
|
-
)), /* @__PURE__ */
|
|
2964
|
+
)), /* @__PURE__ */ React33.createElement("div", { className: "w-full md:w-1/2 flex mt-22 flex-col items-center justify-center p-4 md:p-12 relative z-20" }, /* @__PURE__ */ React33.createElement("div", { className: "relative w-full max-w-lg p-8 md:p-12 text-center md:text-left transition-all duration-700 ease-out" }, /* @__PURE__ */ React33.createElement(
|
|
2835
2965
|
"div",
|
|
2836
2966
|
{
|
|
2837
2967
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2840,7 +2970,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2840
2970
|
backgroundRepeat: "repeat"
|
|
2841
2971
|
}
|
|
2842
2972
|
}
|
|
2843
|
-
), /* @__PURE__ */
|
|
2973
|
+
), /* @__PURE__ */ React33.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React33.createElement("div", { className: "mb-10 border-b border-neutral-100 pb-8 text-center md:text-left" }, tagline && /* @__PURE__ */ React33.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 " }, tagline), /* @__PURE__ */ React33.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight mb-4" }, title), subtitle && /* @__PURE__ */ React33.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, subtitle)), /* @__PURE__ */ React33.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-10 text-center md:text-left" }, description), children && /* @__PURE__ */ React33.createElement("div", { className: "mb-8 text-left" }, children), /* @__PURE__ */ React33.createElement("div", { className: "text-center md:text-left mt-10 space-y-6" }, dividerText && /* @__PURE__ */ React33.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React33.createElement("div", { className: "grow h-px bg-neutral-100" }), /* @__PURE__ */ React33.createElement("span", { className: "shrink mx-4 text-[11px] tracking-[0.2em] text-neutral-400 " }, dividerText), /* @__PURE__ */ React33.createElement("div", { className: "grow h-px bg-neutral-100" })), ctaText && ctaHref && /* @__PURE__ */ React33.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ React33.createElement(
|
|
2844
2974
|
ThreeDButton,
|
|
2845
2975
|
{
|
|
2846
2976
|
href: ctaHref,
|
|
@@ -2851,10 +2981,10 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2851
2981
|
};
|
|
2852
2982
|
|
|
2853
2983
|
// src/components/PortfolioHero.tsx
|
|
2854
|
-
import
|
|
2984
|
+
import React34, { useEffect as useEffect16, useRef as useRef9 } from "react";
|
|
2855
2985
|
import Link7 from "next/link";
|
|
2856
2986
|
import Image8 from "next/image";
|
|
2857
|
-
import { HugeiconsIcon as
|
|
2987
|
+
import { HugeiconsIcon as HugeiconsIcon22 } from "@hugeicons/react";
|
|
2858
2988
|
import { ArrowRight01Icon as ArrowRight01Icon5 } from "@hugeicons/core-free-icons";
|
|
2859
2989
|
var useScrollAnimation = () => {
|
|
2860
2990
|
const elementRef = useRef9(null);
|
|
@@ -2894,13 +3024,13 @@ var PortfolioHero = ({
|
|
|
2894
3024
|
secondaryCtaHref
|
|
2895
3025
|
}) => {
|
|
2896
3026
|
const heroContentRef = useScrollAnimation();
|
|
2897
|
-
return /* @__PURE__ */
|
|
3027
|
+
return /* @__PURE__ */ React34.createElement("section", { className: "pt-8 pb-16 px-6 md:px-12 flex flex-col relative overflow-hidden z-10 w-full" }, /* @__PURE__ */ React34.createElement(
|
|
2898
3028
|
"div",
|
|
2899
3029
|
{
|
|
2900
3030
|
ref: heroContentRef,
|
|
2901
3031
|
className: "w-full opacity-0 translate-y-5 transition-all duration-1000 ease-out relative z-10"
|
|
2902
3032
|
},
|
|
2903
|
-
/* @__PURE__ */
|
|
3033
|
+
/* @__PURE__ */ React34.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-5 sm:gap-8 mb-10" }, /* @__PURE__ */ React34.createElement("div", { className: "relative w-20 h-20 sm:w-32 sm:h-32 rounded-full overflow-hidden border border-neutral-100 shrink-0 shadow-sm" }, /* @__PURE__ */ React34.createElement(
|
|
2904
3034
|
Image8,
|
|
2905
3035
|
{
|
|
2906
3036
|
src: imageSrc,
|
|
@@ -2911,7 +3041,7 @@ var PortfolioHero = ({
|
|
|
2911
3041
|
sizes: "(max-width: 640px) 80px, 128px",
|
|
2912
3042
|
quality: 100
|
|
2913
3043
|
}
|
|
2914
|
-
)), /* @__PURE__ */
|
|
3044
|
+
)), /* @__PURE__ */ React34.createElement("div", { className: "flex flex-col text-left" }, /* @__PURE__ */ React34.createElement("h1", { className: " text-3xl sm:text-5xl lg:text-6xl tracking-tight text-black leading-none mb-3" }, name), socialLabel && /* @__PURE__ */ React34.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, socialLabel), socialLinkText && socialLinkHref && /* @__PURE__ */ React34.createElement(
|
|
2915
3045
|
"a",
|
|
2916
3046
|
{
|
|
2917
3047
|
href: socialLinkHref,
|
|
@@ -2921,30 +3051,30 @@ var PortfolioHero = ({
|
|
|
2921
3051
|
},
|
|
2922
3052
|
socialLinkText
|
|
2923
3053
|
))),
|
|
2924
|
-
/* @__PURE__ */
|
|
2925
|
-
/* @__PURE__ */
|
|
3054
|
+
/* @__PURE__ */ React34.createElement("p", { className: "text-[13px] leading-[1.8] max-w-4xl mb-12 text-neutral-600" }, bio),
|
|
3055
|
+
/* @__PURE__ */ React34.createElement("div", { className: "flex flex-col sm:flex-row gap-4 w-full sm:w-auto" }, primaryCtaText && primaryCtaHref && /* @__PURE__ */ React34.createElement("div", { className: "w-full sm:w-auto *:w-full" }, /* @__PURE__ */ React34.createElement(
|
|
2926
3056
|
ThreeDButton,
|
|
2927
3057
|
{
|
|
2928
3058
|
href: primaryCtaHref,
|
|
2929
3059
|
className: "py-3 tracking-widest text-[11px]"
|
|
2930
3060
|
},
|
|
2931
3061
|
primaryCtaText
|
|
2932
|
-
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
3062
|
+
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ React34.createElement(
|
|
2933
3063
|
Link7,
|
|
2934
3064
|
{
|
|
2935
3065
|
href: secondaryCtaHref,
|
|
2936
3066
|
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"
|
|
2937
3067
|
},
|
|
2938
3068
|
secondaryCtaText,
|
|
2939
|
-
/* @__PURE__ */
|
|
3069
|
+
/* @__PURE__ */ React34.createElement(HugeiconsIcon22, { icon: ArrowRight01Icon5, size: 16 })
|
|
2940
3070
|
))
|
|
2941
3071
|
));
|
|
2942
3072
|
};
|
|
2943
3073
|
|
|
2944
3074
|
// src/components/GifFeatureCard.tsx
|
|
2945
|
-
import
|
|
3075
|
+
import React35, { useState as useState21 } from "react";
|
|
2946
3076
|
import Image9 from "next/image";
|
|
2947
|
-
import { HugeiconsIcon as
|
|
3077
|
+
import { HugeiconsIcon as HugeiconsIcon23 } from "@hugeicons/react";
|
|
2948
3078
|
import { Loading03Icon as Loading03Icon11 } from "@hugeicons/core-free-icons";
|
|
2949
3079
|
var GifFeatureCard = ({
|
|
2950
3080
|
gifSrc,
|
|
@@ -2954,19 +3084,19 @@ var GifFeatureCard = ({
|
|
|
2954
3084
|
className = "aspect-video"
|
|
2955
3085
|
}) => {
|
|
2956
3086
|
const [isLoading, setIsLoading] = useState21(true);
|
|
2957
|
-
return /* @__PURE__ */
|
|
2958
|
-
|
|
3087
|
+
return /* @__PURE__ */ React35.createElement("div", { className: `relative w-full bg-black overflow-hidden shadow-2xl ${className}` }, isLoading && /* @__PURE__ */ React35.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-black" }, /* @__PURE__ */ React35.createElement(
|
|
3088
|
+
HugeiconsIcon23,
|
|
2959
3089
|
{
|
|
2960
3090
|
icon: Loading03Icon11,
|
|
2961
3091
|
size: 32,
|
|
2962
3092
|
className: "animate-spin text-white"
|
|
2963
3093
|
}
|
|
2964
|
-
)), /* @__PURE__ */
|
|
3094
|
+
)), /* @__PURE__ */ React35.createElement(
|
|
2965
3095
|
"div",
|
|
2966
3096
|
{
|
|
2967
3097
|
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"}`
|
|
2968
3098
|
},
|
|
2969
|
-
/* @__PURE__ */
|
|
3099
|
+
/* @__PURE__ */ React35.createElement(
|
|
2970
3100
|
Image9,
|
|
2971
3101
|
{
|
|
2972
3102
|
src: gifSrc,
|
|
@@ -2977,16 +3107,16 @@ var GifFeatureCard = ({
|
|
|
2977
3107
|
className: "object-cover object-center pointer-events-none"
|
|
2978
3108
|
}
|
|
2979
3109
|
)
|
|
2980
|
-
), /* @__PURE__ */
|
|
3110
|
+
), /* @__PURE__ */ React35.createElement(
|
|
2981
3111
|
"div",
|
|
2982
3112
|
{
|
|
2983
3113
|
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"
|
|
2984
3114
|
}
|
|
2985
|
-
), /* @__PURE__ */
|
|
3115
|
+
), /* @__PURE__ */ React35.createElement("div", { className: "absolute inset-x-0 bottom-0 p-6 sm:p-8 z-30 flex flex-col justify-end text-left pointer-events-none" }, title && /* @__PURE__ */ React35.createElement("h3", { className: " text-xl sm:text-2xl md:text-3xl text-white tracking-tight mb-2 sm:mb-3 drop-shadow-md" }, title), subtitle && /* @__PURE__ */ React35.createElement("p", { className: "text-[13px] sm:text-[15px] leading-relaxed text-neutral-300 max-w-2xl drop-shadow-sm" }, subtitle)));
|
|
2986
3116
|
};
|
|
2987
3117
|
|
|
2988
3118
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
2989
|
-
import
|
|
3119
|
+
import React36, { useState as useState22, useEffect as useEffect17, useRef as useRef10 } from "react";
|
|
2990
3120
|
import Image10 from "next/image";
|
|
2991
3121
|
var MedicalFeatureStatsBlock = ({
|
|
2992
3122
|
bottomHeadline,
|
|
@@ -3015,7 +3145,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3015
3145
|
}
|
|
3016
3146
|
return () => observer.disconnect();
|
|
3017
3147
|
}, []);
|
|
3018
|
-
return /* @__PURE__ */
|
|
3148
|
+
return /* @__PURE__ */ React36.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ React36.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React36.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ React36.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ React36.createElement(
|
|
3019
3149
|
"h2",
|
|
3020
3150
|
{
|
|
3021
3151
|
ref: titleRef,
|
|
@@ -3023,7 +3153,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3023
3153
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
3024
3154
|
},
|
|
3025
3155
|
bottomHeadline
|
|
3026
|
-
), /* @__PURE__ */
|
|
3156
|
+
), /* @__PURE__ */ React36.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ React36.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ React36.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ React36.createElement("div", { key: i, className: "relative w-12 h-12 rounded-full border-[3px] border-white overflow-hidden bg-neutral-100 z-1 hover:z-10 transition-all" }, /* @__PURE__ */ React36.createElement(
|
|
3027
3157
|
Image10,
|
|
3028
3158
|
{
|
|
3029
3159
|
src,
|
|
@@ -3032,17 +3162,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3032
3162
|
sizes: "48px",
|
|
3033
3163
|
className: "object-cover"
|
|
3034
3164
|
}
|
|
3035
|
-
)))), /* @__PURE__ */
|
|
3165
|
+
)))), /* @__PURE__ */ React36.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ React36.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ React36.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ React36.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ React36.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ React36.createElement("h1", { className: "text-6xl gradient-text md:text-[80px] tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
|
|
3036
3166
|
};
|
|
3037
3167
|
|
|
3038
3168
|
// src/components/ConsultantShowcase.tsx
|
|
3039
|
-
import
|
|
3169
|
+
import React37, { useState as useState23 } from "react";
|
|
3040
3170
|
import Image11 from "next/image";
|
|
3041
|
-
import { HugeiconsIcon as
|
|
3171
|
+
import { HugeiconsIcon as HugeiconsIcon24 } from "@hugeicons/react";
|
|
3042
3172
|
import { Loading03Icon as Loading03Icon12 } from "@hugeicons/core-free-icons";
|
|
3043
3173
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
3044
3174
|
const [isLoading, setIsLoading] = useState23(true);
|
|
3045
|
-
return /* @__PURE__ */
|
|
3175
|
+
return /* @__PURE__ */ React37.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ React37.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-800/50 backdrop-blur-md transition-opacity duration-300" }, /* @__PURE__ */ React37.createElement(HugeiconsIcon24, { icon: Loading03Icon12, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ React37.createElement(
|
|
3046
3176
|
Image11,
|
|
3047
3177
|
{
|
|
3048
3178
|
src,
|
|
@@ -3088,7 +3218,7 @@ var ConsultantShowcase = ({
|
|
|
3088
3218
|
}
|
|
3089
3219
|
};
|
|
3090
3220
|
if (!profiles || profiles.length === 0) return null;
|
|
3091
|
-
return /* @__PURE__ */
|
|
3221
|
+
return /* @__PURE__ */ React37.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ React37.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React37.createElement(
|
|
3092
3222
|
"div",
|
|
3093
3223
|
{
|
|
3094
3224
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -3098,13 +3228,13 @@ var ConsultantShowcase = ({
|
|
|
3098
3228
|
},
|
|
3099
3229
|
profiles.map((profile, idx) => {
|
|
3100
3230
|
const isActive = idx === currentIndex;
|
|
3101
|
-
return /* @__PURE__ */
|
|
3231
|
+
return /* @__PURE__ */ React37.createElement(
|
|
3102
3232
|
"div",
|
|
3103
3233
|
{
|
|
3104
3234
|
key: profile.id,
|
|
3105
3235
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
3106
3236
|
},
|
|
3107
|
-
/* @__PURE__ */
|
|
3237
|
+
/* @__PURE__ */ React37.createElement(
|
|
3108
3238
|
ImageWithLoader,
|
|
3109
3239
|
{
|
|
3110
3240
|
src: profile.imageSrc,
|
|
@@ -3112,14 +3242,14 @@ var ConsultantShowcase = ({
|
|
|
3112
3242
|
priority: idx === 0
|
|
3113
3243
|
}
|
|
3114
3244
|
),
|
|
3115
|
-
/* @__PURE__ */
|
|
3116
|
-
/* @__PURE__ */
|
|
3117
|
-
/* @__PURE__ */
|
|
3245
|
+
/* @__PURE__ */ React37.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
3246
|
+
/* @__PURE__ */ React37.createElement("div", { className: "absolute top-0 left-0 w-full h-[60%] bg-linear-to-b from-black/80 via-black/30 to-transparent z-20 pointer-events-none" }),
|
|
3247
|
+
/* @__PURE__ */ React37.createElement("div", { className: `absolute top-8 left-8 md:top-12 md:left-12 z-30 text-white max-w-lg transition-transform duration-700 ease-out ${isActive ? "translate-y-0" : "-translate-y-4"}` }, /* @__PURE__ */ React37.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ React37.createElement("p", { className: "text-[15px] text-white/80 tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ React37.createElement("p", { className: "text-[15px] text-white/80 tracking-wide mt-1" }, profile.description)))
|
|
3118
3248
|
);
|
|
3119
3249
|
}),
|
|
3120
|
-
/* @__PURE__ */
|
|
3121
|
-
/* @__PURE__ */
|
|
3122
|
-
/* @__PURE__ */
|
|
3250
|
+
/* @__PURE__ */ React37.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide, "aria-label": "Previous image" }),
|
|
3251
|
+
/* @__PURE__ */ React37.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide, "aria-label": "Next image" }),
|
|
3252
|
+
/* @__PURE__ */ React37.createElement("div", { className: "absolute bottom-6 md:bottom-8 left-0 w-full px-4 z-30 flex justify-center items-center gap-2" }, profiles.map((_, idx) => /* @__PURE__ */ React37.createElement(
|
|
3123
3253
|
"button",
|
|
3124
3254
|
{
|
|
3125
3255
|
key: idx,
|
|
@@ -3132,13 +3262,13 @@ var ConsultantShowcase = ({
|
|
|
3132
3262
|
};
|
|
3133
3263
|
|
|
3134
3264
|
// src/components/ContentGridBlock.tsx
|
|
3135
|
-
import
|
|
3265
|
+
import React38, { useState as useState24 } from "react";
|
|
3136
3266
|
import Image12 from "next/image";
|
|
3137
|
-
import { HugeiconsIcon as
|
|
3267
|
+
import { HugeiconsIcon as HugeiconsIcon25 } from "@hugeicons/react";
|
|
3138
3268
|
import { Loading03Icon as Loading03Icon13 } from "@hugeicons/core-free-icons";
|
|
3139
3269
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
3140
3270
|
const [isLoading, setIsLoading] = useState24(true);
|
|
3141
|
-
return /* @__PURE__ */
|
|
3271
|
+
return /* @__PURE__ */ React38.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ React38.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-100/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ React38.createElement(HugeiconsIcon25, { icon: Loading03Icon13, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ React38.createElement(
|
|
3142
3272
|
Image12,
|
|
3143
3273
|
{
|
|
3144
3274
|
src,
|
|
@@ -3160,30 +3290,30 @@ var ContentGridBlock = ({
|
|
|
3160
3290
|
middleBottomCard,
|
|
3161
3291
|
rightCards
|
|
3162
3292
|
}) => {
|
|
3163
|
-
return /* @__PURE__ */
|
|
3293
|
+
return /* @__PURE__ */ React38.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React38.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ React38.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ React38.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ React38.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ React38.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ React38.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ React38.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React38.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ React38.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ React38.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ React38.createElement("div", null, /* @__PURE__ */ React38.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ React38.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ React38.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React38.createElement(Image12, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ React38.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React38.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ React38.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ React38.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ React38.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React38.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ React38.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ React38.createElement(Image12, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ React38.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ React38.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ React38.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-100 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ React38.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ React38.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React38.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ React38.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ React38.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React38.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ React38.createElement("div", null, /* @__PURE__ */ React38.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ React38.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ React38.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React38.createElement(Image12, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ React38.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React38.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ React38.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ React38.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ React38.createElement("div", { key: idx, className: "relative w-full h-80 text-white rounded-3xl overflow-hidden group" }, /* @__PURE__ */ React38.createElement(
|
|
3164
3294
|
ImageWithLoader2,
|
|
3165
3295
|
{
|
|
3166
3296
|
src: card.bgImageSrc,
|
|
3167
3297
|
alt: card.title,
|
|
3168
3298
|
className: "absolute inset-0 w-full h-full"
|
|
3169
3299
|
}
|
|
3170
|
-
), /* @__PURE__ */
|
|
3300
|
+
), /* @__PURE__ */ React38.createElement("div", { className: "absolute inset-0 z-20 pointer-events-none" }), /* @__PURE__ */ React38.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ React38.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ React38.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ React38.createElement("div", { className: "pt-3" }, /* @__PURE__ */ React38.createElement("h4", { className: "text-[15px] text-white tracking-wide" }, card.title), /* @__PURE__ */ React38.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
|
|
3171
3301
|
};
|
|
3172
3302
|
|
|
3173
3303
|
// src/components/ManagedProjectsBlock.tsx
|
|
3174
|
-
import
|
|
3304
|
+
import React39 from "react";
|
|
3175
3305
|
import Link8 from "next/link";
|
|
3176
3306
|
var GridSection = ({
|
|
3177
3307
|
children,
|
|
3178
3308
|
isLast = false,
|
|
3179
3309
|
className = "py-8 md:py-10"
|
|
3180
|
-
}) => /* @__PURE__ */
|
|
3310
|
+
}) => /* @__PURE__ */ React39.createElement("div", { className: `relative px-5 md:px-12 ${className} ${!isLast ? "" : ""}` }, children);
|
|
3181
3311
|
var ManagedProjectsBlock = ({
|
|
3182
3312
|
tagline,
|
|
3183
3313
|
title,
|
|
3184
3314
|
projects
|
|
3185
3315
|
}) => {
|
|
3186
|
-
return /* @__PURE__ */
|
|
3316
|
+
return /* @__PURE__ */ React39.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React39.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-5xl mx-auto overflow-hidden" }, /* @__PURE__ */ React39.createElement(
|
|
3187
3317
|
"div",
|
|
3188
3318
|
{
|
|
3189
3319
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3192,10 +3322,10 @@ var ManagedProjectsBlock = ({
|
|
|
3192
3322
|
backgroundRepeat: "repeat"
|
|
3193
3323
|
}
|
|
3194
3324
|
}
|
|
3195
|
-
), /* @__PURE__ */
|
|
3325
|
+
), /* @__PURE__ */ React39.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React39.createElement(GridSection, null, tagline && /* @__PURE__ */ React39.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React39.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), projects.map((project, index) => {
|
|
3196
3326
|
const isLast = index === projects.length - 1;
|
|
3197
|
-
const projectContent = /* @__PURE__ */
|
|
3198
|
-
return /* @__PURE__ */
|
|
3327
|
+
const projectContent = /* @__PURE__ */ React39.createElement("div", { className: "group block w-full" }, /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col md:flex-row md:items-center justify-between gap-3 md:gap-4 mb-4 md:mb-5" }, /* @__PURE__ */ React39.createElement("div", { className: "flex items-center gap-3 md:gap-4" }, /* @__PURE__ */ React39.createElement("h2", { className: " text-[16px] text-black transition-all flex items-center gap-2" }, project.title, /* @__PURE__ */ React39.createElement("span", { className: "text-[11px] opacity-0 -translate-x-2 group-hover:opacity-100 group-hover:translate-x-0 transition-all duration-300" }, project.isExternal ? "\u2197" : "\u2192")), /* @__PURE__ */ React39.createElement("span", { className: `text-[9px] px-2.5 py-1 rounded-full tracking-[0.15em] transition-colors ${project.status.toLowerCase() === "production" ? "bg-black text-white" : "bg-neutral-100 text-neutral-500 group-hover:bg-neutral-100 group-hover:text-black"}` }, project.status)), /* @__PURE__ */ React39.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 shrink-0 " }, project.date)), /* @__PURE__ */ React39.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 max-w-4xl text-left transition-colors group-hover:text-black" }, project.description));
|
|
3328
|
+
return /* @__PURE__ */ React39.createElement(GridSection, { key: project.id || index, isLast, className: isLast ? "py-8 md:py-10 pb-12 md:pb-14" : "py-8 md:py-10" }, project.isExternal ? /* @__PURE__ */ React39.createElement("a", { href: project.link, target: "_blank", rel: "noopener noreferrer", className: "block outline-none" }, projectContent) : /* @__PURE__ */ React39.createElement(Link8, { href: project.link, className: "block outline-none" }, projectContent));
|
|
3199
3329
|
}))));
|
|
3200
3330
|
};
|
|
3201
3331
|
export {
|