@retinalabsllc/zairusjs 9.0.8 → 9.0.10
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 +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +479 -237
- package/dist/index.mjs +489 -245
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -226,7 +226,7 @@ var ThreeDActionButton = ({
|
|
|
226
226
|
// src/components/Header.tsx
|
|
227
227
|
import React4, { useState as useState2, useEffect as useEffect2 } from "react";
|
|
228
228
|
import Link2 from "next/link";
|
|
229
|
-
import
|
|
229
|
+
import Image2 from "next/image";
|
|
230
230
|
import { usePathname } from "next/navigation";
|
|
231
231
|
var NavLink = ({
|
|
232
232
|
href,
|
|
@@ -272,7 +272,7 @@ var Header = ({
|
|
|
272
272
|
return (
|
|
273
273
|
// Removed 'absolute inset-x-0 top-0 z-50 pointer-events-none' to let it sit in the normal document flow
|
|
274
274
|
/* @__PURE__ */ React4.createElement("div", { className: "w-full px-4 pt-4 sm:pt-6 mb-4" }, /* @__PURE__ */ React4.createElement("div", { className: "max-w-5xl mx-auto w-full flex justify-center" }, /* @__PURE__ */ React4.createElement("header", { className: `${headerLayoutWidth} ${headerBgClass} backdrop-blur-md rounded-full py-2 px-6 flex items-center transition-all duration-300` }, hasBrandSection && /* @__PURE__ */ React4.createElement("div", { className: "flex items-center shrink-0" }, /* @__PURE__ */ React4.createElement(Link2, { href: "/", className: "flex items-center gap-3 transition-opacity hover:opacity-70 outline-none" }, showLogo && /* @__PURE__ */ React4.createElement(
|
|
275
|
-
|
|
275
|
+
Image2,
|
|
276
276
|
{
|
|
277
277
|
src: logoSrc,
|
|
278
278
|
alt: `${companyName} Logo`,
|
|
@@ -1598,15 +1598,128 @@ var UniversalWalletPage = ({
|
|
|
1598
1598
|
};
|
|
1599
1599
|
|
|
1600
1600
|
// src/components/UniversalCardPage.tsx
|
|
1601
|
-
import
|
|
1602
|
-
import { HugeiconsIcon as
|
|
1601
|
+
import React20, { useState as useState12, useEffect as useEffect9 } from "react";
|
|
1602
|
+
import { HugeiconsIcon as HugeiconsIcon14 } from "@hugeicons/react";
|
|
1603
1603
|
import {
|
|
1604
|
-
EyeIcon,
|
|
1605
1604
|
SnowIcon,
|
|
1606
|
-
Settings02Icon,
|
|
1607
1605
|
Delete02Icon,
|
|
1608
|
-
ArrowRight01Icon as ArrowRight01Icon2
|
|
1606
|
+
ArrowRight01Icon as ArrowRight01Icon2,
|
|
1607
|
+
Dollar02Icon,
|
|
1608
|
+
ViewOffSlashIcon as ViewOffSlashIcon2,
|
|
1609
|
+
Loading03Icon as Loading03Icon8
|
|
1609
1610
|
} from "@hugeicons/core-free-icons";
|
|
1611
|
+
|
|
1612
|
+
// src/components/ConfirmationDialog.tsx
|
|
1613
|
+
import React18 from "react";
|
|
1614
|
+
import { HugeiconsIcon as HugeiconsIcon12 } from "@hugeicons/react";
|
|
1615
|
+
import { Loading03Icon as Loading03Icon6 } from "@hugeicons/core-free-icons";
|
|
1616
|
+
var ConfirmationDialog = ({
|
|
1617
|
+
isOpen,
|
|
1618
|
+
title,
|
|
1619
|
+
message,
|
|
1620
|
+
confirmText = "Confirm",
|
|
1621
|
+
cancelText = "Cancel",
|
|
1622
|
+
isProcessing = false,
|
|
1623
|
+
isDestructive = true,
|
|
1624
|
+
onClose,
|
|
1625
|
+
onConfirm
|
|
1626
|
+
}) => {
|
|
1627
|
+
if (!isOpen) return null;
|
|
1628
|
+
return /* @__PURE__ */ React18.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React18.createElement(
|
|
1629
|
+
"div",
|
|
1630
|
+
{
|
|
1631
|
+
className: "absolute inset-0 bg-black/40 ",
|
|
1632
|
+
onClick: () => !isProcessing && onClose()
|
|
1633
|
+
}
|
|
1634
|
+
), /* @__PURE__ */ React18.createElement("div", { className: "relative w-72 bg-white rounded-2xl flex flex-col items-center overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React18.createElement("div", { className: "p-6 pb-4 text-center w-full" }, /* @__PURE__ */ React18.createElement("h3", { className: "text-[17px] text-black font-medium tracking-tight mb-2" }, title), /* @__PURE__ */ React18.createElement("p", { className: "text-[12px] text-neutral-500 leading-relaxed px-2" }, message)), /* @__PURE__ */ React18.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ React18.createElement(
|
|
1635
|
+
"button",
|
|
1636
|
+
{
|
|
1637
|
+
onClick: onClose,
|
|
1638
|
+
disabled: isProcessing,
|
|
1639
|
+
className: "flex-1 py-4 text-[14px] text-neutral-500 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none font-medium"
|
|
1640
|
+
},
|
|
1641
|
+
cancelText
|
|
1642
|
+
), /* @__PURE__ */ React18.createElement(
|
|
1643
|
+
"button",
|
|
1644
|
+
{
|
|
1645
|
+
onClick: onConfirm,
|
|
1646
|
+
disabled: isProcessing,
|
|
1647
|
+
className: `flex-1 py-4 text-[14px] transition-colors disabled:opacity-50 flex justify-center items-center outline-none font-medium ${isDestructive ? "text-red-500 hover:bg-red-50" : "text-black hover:bg-neutral-50"}`
|
|
1648
|
+
},
|
|
1649
|
+
isProcessing ? /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Loading03Icon6, className: "animate-spin", size: 18 }) : confirmText
|
|
1650
|
+
))));
|
|
1651
|
+
};
|
|
1652
|
+
|
|
1653
|
+
// src/components/PinDialerBottomSheet.tsx
|
|
1654
|
+
import React19, { useState as useState11, useEffect as useEffect8 } from "react";
|
|
1655
|
+
import { HugeiconsIcon as HugeiconsIcon13 } from "@hugeicons/react";
|
|
1656
|
+
import { Loading03Icon as Loading03Icon7, Delete01Icon } from "@hugeicons/core-free-icons";
|
|
1657
|
+
var PinDialerBottomSheet = ({
|
|
1658
|
+
isOpen,
|
|
1659
|
+
title = "Enter PIN to Continue",
|
|
1660
|
+
isVerifying = false,
|
|
1661
|
+
onClose,
|
|
1662
|
+
onComplete
|
|
1663
|
+
}) => {
|
|
1664
|
+
const [pin, setPin] = useState11("");
|
|
1665
|
+
useEffect8(() => {
|
|
1666
|
+
setPin("");
|
|
1667
|
+
}, [isOpen]);
|
|
1668
|
+
const handlePinPress = (value) => {
|
|
1669
|
+
if (isVerifying) return;
|
|
1670
|
+
if (value === "del") {
|
|
1671
|
+
setPin((prev) => prev.slice(0, -1));
|
|
1672
|
+
return;
|
|
1673
|
+
}
|
|
1674
|
+
if (pin.length < 4) {
|
|
1675
|
+
const newPin = pin + value;
|
|
1676
|
+
setPin(newPin);
|
|
1677
|
+
if (newPin.length === 4) {
|
|
1678
|
+
onComplete(newPin);
|
|
1679
|
+
}
|
|
1680
|
+
}
|
|
1681
|
+
};
|
|
1682
|
+
if (!isOpen) return null;
|
|
1683
|
+
return /* @__PURE__ */ React19.createElement("div", { className: "fixed inset-0 z-150 flex flex-col justify-end pointer-events-auto" }, /* @__PURE__ */ React19.createElement(
|
|
1684
|
+
"div",
|
|
1685
|
+
{
|
|
1686
|
+
className: "absolute inset-0 bg-black/40 animate-in fade-in duration-300",
|
|
1687
|
+
onClick: () => {
|
|
1688
|
+
if (!isVerifying) onClose();
|
|
1689
|
+
}
|
|
1690
|
+
}
|
|
1691
|
+
), /* @__PURE__ */ React19.createElement("div", { className: "relative w-full max-w-md mx-auto bg-white rounded-t-3xl shadow-2xl p-6 pb-12 animate-in slide-in-from-bottom-full duration-300" }, /* @__PURE__ */ React19.createElement("h3", { className: "text-center font-medium text-black mb-6 tracking-tight" }, title), /* @__PURE__ */ React19.createElement("div", { className: "flex justify-center gap-4 mb-8" }, [0, 1, 2, 3].map((i) => /* @__PURE__ */ React19.createElement(
|
|
1692
|
+
"div",
|
|
1693
|
+
{
|
|
1694
|
+
key: i,
|
|
1695
|
+
className: `w-3.5 h-3.5 rounded-full transition-colors duration-200 ${pin.length > i ? "bg-black" : "bg-neutral-200"}`
|
|
1696
|
+
}
|
|
1697
|
+
))), isVerifying && /* @__PURE__ */ React19.createElement("div", { className: "absolute inset-0 bg-white/80 backdrop-blur-sm z-10 flex flex-col items-center justify-center rounded-t-3xl" }, /* @__PURE__ */ React19.createElement(HugeiconsIcon13, { icon: Loading03Icon7, size: 32, className: "animate-spin text-black mb-2" })), /* @__PURE__ */ React19.createElement("div", { className: "grid grid-cols-3 gap-y-4 gap-x-6 max-w-65 mx-auto" }, [1, 2, 3, 4, 5, 6, 7, 8, 9].map((num) => /* @__PURE__ */ React19.createElement(
|
|
1698
|
+
"button",
|
|
1699
|
+
{
|
|
1700
|
+
key: num,
|
|
1701
|
+
onClick: () => handlePinPress(num),
|
|
1702
|
+
className: "w-16 h-16 rounded-full flex items-center justify-center text-2xl font-medium text-black hover:bg-neutral-100 transition-colors mx-auto outline-none active:scale-95"
|
|
1703
|
+
},
|
|
1704
|
+
num
|
|
1705
|
+
)), /* @__PURE__ */ React19.createElement("div", null), " ", /* @__PURE__ */ React19.createElement(
|
|
1706
|
+
"button",
|
|
1707
|
+
{
|
|
1708
|
+
onClick: () => handlePinPress(0),
|
|
1709
|
+
className: "w-16 h-16 rounded-full flex items-center justify-center text-2xl font-medium text-black hover:bg-neutral-100 transition-colors mx-auto outline-none active:scale-95"
|
|
1710
|
+
},
|
|
1711
|
+
"0"
|
|
1712
|
+
), /* @__PURE__ */ React19.createElement(
|
|
1713
|
+
"button",
|
|
1714
|
+
{
|
|
1715
|
+
onClick: () => handlePinPress("del"),
|
|
1716
|
+
className: "w-16 h-16 rounded-full flex items-center justify-center text-black hover:bg-neutral-100 transition-colors mx-auto outline-none active:scale-95"
|
|
1717
|
+
},
|
|
1718
|
+
/* @__PURE__ */ React19.createElement(HugeiconsIcon13, { icon: Delete01Icon, size: 24 })
|
|
1719
|
+
))));
|
|
1720
|
+
};
|
|
1721
|
+
|
|
1722
|
+
// src/components/UniversalCardPage.tsx
|
|
1610
1723
|
var UniversalCardPage = ({
|
|
1611
1724
|
cardHolderName,
|
|
1612
1725
|
cardNumber,
|
|
@@ -1620,100 +1733,203 @@ var UniversalCardPage = ({
|
|
|
1620
1733
|
onSetLimits,
|
|
1621
1734
|
onDelete
|
|
1622
1735
|
}) => {
|
|
1623
|
-
const [isFlipped, setIsFlipped] =
|
|
1624
|
-
|
|
1736
|
+
const [isFlipped, setIsFlipped] = useState12(false);
|
|
1737
|
+
const [isBgLoaded, setIsBgLoaded] = useState12(false);
|
|
1738
|
+
const [isRevealed, setIsRevealed] = useState12(false);
|
|
1739
|
+
const [isRevealing, setIsRevealing] = useState12(false);
|
|
1740
|
+
const [isFrozen, setIsFrozen] = useState12(false);
|
|
1741
|
+
const [isFreezing, setIsFreezing] = useState12(false);
|
|
1742
|
+
const [showDeleteDialog, setShowDeleteDialog] = useState12(false);
|
|
1743
|
+
const [isDeleting, setIsDeleting] = useState12(false);
|
|
1744
|
+
const [showPinDialer, setShowPinDialer] = useState12(false);
|
|
1745
|
+
useEffect9(() => {
|
|
1746
|
+
if (!cardBgSrc) return;
|
|
1747
|
+
const img = new Image();
|
|
1748
|
+
img.src = cardBgSrc;
|
|
1749
|
+
img.onload = () => {
|
|
1750
|
+
setTimeout(() => setIsBgLoaded(true), 300);
|
|
1751
|
+
};
|
|
1752
|
+
}, [cardBgSrc]);
|
|
1753
|
+
const handleToggleReveal = () => {
|
|
1754
|
+
if (isRevealing) return;
|
|
1755
|
+
if (isRevealed) {
|
|
1756
|
+
setIsRevealed(false);
|
|
1757
|
+
setIsRevealing(true);
|
|
1758
|
+
setTimeout(() => {
|
|
1759
|
+
if (onReveal) onReveal();
|
|
1760
|
+
setIsRevealing(false);
|
|
1761
|
+
}, 800);
|
|
1762
|
+
} else {
|
|
1763
|
+
setShowPinDialer(true);
|
|
1764
|
+
}
|
|
1765
|
+
};
|
|
1766
|
+
const handlePinComplete = (pin) => {
|
|
1767
|
+
setIsRevealing(true);
|
|
1768
|
+
setTimeout(() => {
|
|
1769
|
+
setShowPinDialer(false);
|
|
1770
|
+
setIsRevealed(true);
|
|
1771
|
+
if (onReveal) onReveal();
|
|
1772
|
+
setIsRevealing(false);
|
|
1773
|
+
}, 1e3);
|
|
1774
|
+
};
|
|
1775
|
+
const handleToggleFreeze = () => {
|
|
1776
|
+
if (isFreezing) return;
|
|
1777
|
+
setIsFreezing(true);
|
|
1778
|
+
setTimeout(() => {
|
|
1779
|
+
setIsFrozen(!isFrozen);
|
|
1780
|
+
if (onFreeze) onFreeze();
|
|
1781
|
+
setIsFreezing(false);
|
|
1782
|
+
}, 800);
|
|
1783
|
+
};
|
|
1784
|
+
const confirmDelete = async () => {
|
|
1785
|
+
setIsDeleting(true);
|
|
1786
|
+
setTimeout(() => {
|
|
1787
|
+
if (onDelete) onDelete();
|
|
1788
|
+
setIsDeleting(false);
|
|
1789
|
+
setShowDeleteDialog(false);
|
|
1790
|
+
}, 1200);
|
|
1791
|
+
};
|
|
1792
|
+
const displayCardNumber = isRevealed ? cardNumber : `\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 ${cardNumber.slice(-4)}`;
|
|
1793
|
+
const displayExpiry = isRevealed ? expiry : "\u2022\u2022/\u2022\u2022";
|
|
1794
|
+
const displayCvv = isRevealed ? cvv : "\u2022\u2022\u2022";
|
|
1795
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "w-full flex flex-col items-center animate-in fade-in duration-300 pb-12" }, /* @__PURE__ */ React20.createElement("style", { jsx: true, global: true }, `@import url('https://fonts.googleapis.com/css2?family=Whisper&display=swap');`), /* @__PURE__ */ React20.createElement("div", { className: "w-full pt-6 pb-2 shadow-sm flex justify-center", style: { perspective: "1000px" } }, /* @__PURE__ */ React20.createElement(
|
|
1625
1796
|
"div",
|
|
1626
1797
|
{
|
|
1627
|
-
onClick: () =>
|
|
1628
|
-
|
|
1798
|
+
onClick: () => {
|
|
1799
|
+
if (isBgLoaded) setIsFlipped(!isFlipped);
|
|
1800
|
+
},
|
|
1801
|
+
className: `relative w-full max-w-85 transition-transform duration-700 ${!isBgLoaded ? "cursor-wait" : "cursor-pointer"}`,
|
|
1629
1802
|
style: {
|
|
1803
|
+
height: 215,
|
|
1630
1804
|
transformStyle: "preserve-3d",
|
|
1631
1805
|
transform: isFlipped ? "rotateY(180deg)" : "rotateY(0deg)"
|
|
1632
1806
|
}
|
|
1633
1807
|
},
|
|
1634
|
-
/* @__PURE__ */
|
|
1808
|
+
!isBgLoaded && /* @__PURE__ */ React20.createElement("div", { className: "absolute inset-0 w-full h-full bg-white rounded-2xl flex items-center justify-center z-50 shadow-sm" }, /* @__PURE__ */ React20.createElement(HugeiconsIcon14, { icon: Loading03Icon8, size: 28, className: "animate-spin text-black" })),
|
|
1809
|
+
/* @__PURE__ */ React20.createElement(
|
|
1635
1810
|
"div",
|
|
1636
1811
|
{
|
|
1637
|
-
className:
|
|
1812
|
+
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"}`,
|
|
1638
1813
|
style: { backfaceVisibility: "hidden" }
|
|
1639
1814
|
},
|
|
1640
|
-
/* @__PURE__ */
|
|
1815
|
+
/* @__PURE__ */ React20.createElement(
|
|
1641
1816
|
"div",
|
|
1642
1817
|
{
|
|
1643
1818
|
className: "absolute inset-0 bg-cover bg-center",
|
|
1644
1819
|
style: { backgroundImage: `url(${cardBgSrc}), linear-gradient(to bottom right, #111, #333)` }
|
|
1645
1820
|
}
|
|
1646
1821
|
),
|
|
1647
|
-
/* @__PURE__ */
|
|
1822
|
+
/* @__PURE__ */ React20.createElement("div", { className: "relative z-10 w-full h-full p-5 flex flex-col justify-between" }, /* @__PURE__ */ React20.createElement("div", { className: "flex justify-between items-start w-full" }, /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("span", { className: "text-[12px] text-white/70 font-medium" }, "Prepaid Card")), companyLogoSrc && /* @__PURE__ */ React20.createElement("img", { src: companyLogoSrc, alt: "Company Logo", className: "h-8 max-h-8 object-contain opacity-90" })), /* @__PURE__ */ React20.createElement("div", { className: "flex justify-between items-end w-full" }, /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ React20.createElement("span", { className: "text-[10px] text-white/60 tracking-widest uppercase" }, "Card Number"), /* @__PURE__ */ React20.createElement("span", { className: "text-[14px] text-white tracking-widest font-light" }, displayCardNumber)), networkLogoSrc && /* @__PURE__ */ React20.createElement("img", { src: networkLogoSrc, alt: "Network Logo", className: "h-8 max-h-8 object-contain opacity-90" })))
|
|
1648
1823
|
),
|
|
1649
|
-
/* @__PURE__ */
|
|
1824
|
+
/* @__PURE__ */ React20.createElement(
|
|
1650
1825
|
"div",
|
|
1651
1826
|
{
|
|
1652
|
-
className:
|
|
1827
|
+
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"}`,
|
|
1653
1828
|
style: {
|
|
1654
1829
|
backfaceVisibility: "hidden",
|
|
1655
1830
|
transform: "rotateY(180deg)"
|
|
1656
1831
|
}
|
|
1657
1832
|
},
|
|
1658
|
-
/* @__PURE__ */
|
|
1833
|
+
/* @__PURE__ */ React20.createElement(
|
|
1659
1834
|
"div",
|
|
1660
1835
|
{
|
|
1661
1836
|
className: "absolute inset-0 bg-cover bg-center",
|
|
1662
1837
|
style: { backgroundImage: `url(${cardBgSrc}), linear-gradient(to bottom right, #111, #333)` }
|
|
1663
1838
|
}
|
|
1664
1839
|
),
|
|
1665
|
-
/* @__PURE__ */
|
|
1840
|
+
/* @__PURE__ */ React20.createElement("div", { className: "absolute top-6 left-0 right-0 h-10 bg-black/80 w-full" }),
|
|
1841
|
+
/* @__PURE__ */ React20.createElement("div", { className: "relative z-10 w-full h-full p-5 flex flex-col justify-end" }, /* @__PURE__ */ React20.createElement("div", { className: "w-full text-center mb-6" }, /* @__PURE__ */ React20.createElement("span", { className: "text-white text-3xl font-serif italic tracking-wide opacity-90" }, cardHolderName)), /* @__PURE__ */ React20.createElement("div", { className: "flex justify-between w-full max-w-[80%]" }, /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React20.createElement("span", { className: "text-[9px] text-white/60 tracking-widest uppercase" }, "Expiry"), /* @__PURE__ */ React20.createElement("span", { className: "text-[14px] text-white font-light" }, displayExpiry)), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React20.createElement("span", { className: "text-[9px] text-white/60 tracking-widest uppercase" }, "CVV"), /* @__PURE__ */ React20.createElement("span", { className: "text-[14px] text-white font-light" }, displayCvv))))
|
|
1666
1842
|
)
|
|
1667
|
-
)), /* @__PURE__ */
|
|
1843
|
+
)), /* @__PURE__ */ React20.createElement("p", { className: "text-xs text-neutral-400 mb-6" }, "Tap to flip card"), /* @__PURE__ */ React20.createElement("div", { className: "w-full flex flex-col gap-4" }, /* @__PURE__ */ React20.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React20.createElement(
|
|
1668
1844
|
MenuRow,
|
|
1669
1845
|
{
|
|
1670
|
-
icon:
|
|
1846
|
+
icon: ViewOffSlashIcon2,
|
|
1671
1847
|
title: "Reveal Information",
|
|
1672
1848
|
subtitle: "Show card informations",
|
|
1673
|
-
onClick:
|
|
1849
|
+
onClick: handleToggleReveal,
|
|
1850
|
+
isToggle: true,
|
|
1851
|
+
toggleState: isRevealed,
|
|
1852
|
+
toggleLoading: isRevealing
|
|
1674
1853
|
}
|
|
1675
|
-
), /* @__PURE__ */
|
|
1854
|
+
), /* @__PURE__ */ React20.createElement(
|
|
1676
1855
|
MenuRow,
|
|
1677
1856
|
{
|
|
1678
1857
|
icon: SnowIcon,
|
|
1679
1858
|
title: "Freeze",
|
|
1680
1859
|
subtitle: "Freeze & Unfreeze card",
|
|
1681
|
-
onClick:
|
|
1860
|
+
onClick: handleToggleFreeze,
|
|
1861
|
+
isToggle: true,
|
|
1862
|
+
toggleState: isFrozen,
|
|
1863
|
+
toggleLoading: isFreezing
|
|
1682
1864
|
}
|
|
1683
|
-
), /* @__PURE__ */
|
|
1865
|
+
), /* @__PURE__ */ React20.createElement(
|
|
1684
1866
|
MenuRow,
|
|
1685
1867
|
{
|
|
1686
|
-
icon:
|
|
1868
|
+
icon: Dollar02Icon,
|
|
1687
1869
|
title: "Set Limits",
|
|
1688
1870
|
subtitle: "Set card limits",
|
|
1689
1871
|
onClick: onSetLimits,
|
|
1690
1872
|
isLast: true
|
|
1691
1873
|
}
|
|
1692
|
-
)), /* @__PURE__ */
|
|
1874
|
+
)), /* @__PURE__ */ React20.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React20.createElement(
|
|
1693
1875
|
MenuRow,
|
|
1694
1876
|
{
|
|
1695
1877
|
icon: Delete02Icon,
|
|
1696
1878
|
title: "Delete card",
|
|
1697
1879
|
subtitle: "Permanently delete card",
|
|
1698
|
-
onClick:
|
|
1880
|
+
onClick: () => setShowDeleteDialog(true),
|
|
1881
|
+
iconColor: "text-red-500",
|
|
1882
|
+
titleColor: "text-red-500",
|
|
1699
1883
|
isLast: true
|
|
1700
1884
|
}
|
|
1701
|
-
)))
|
|
1885
|
+
))), /* @__PURE__ */ React20.createElement(
|
|
1886
|
+
ConfirmationDialog,
|
|
1887
|
+
{
|
|
1888
|
+
isOpen: showDeleteDialog,
|
|
1889
|
+
title: "Delete Card",
|
|
1890
|
+
message: "Are you sure? The card will be permanently deleted from your account.",
|
|
1891
|
+
confirmText: "Delete",
|
|
1892
|
+
isDestructive: true,
|
|
1893
|
+
isProcessing: isDeleting,
|
|
1894
|
+
onClose: () => setShowDeleteDialog(false),
|
|
1895
|
+
onConfirm: confirmDelete
|
|
1896
|
+
}
|
|
1897
|
+
), /* @__PURE__ */ React20.createElement(
|
|
1898
|
+
PinDialerBottomSheet,
|
|
1899
|
+
{
|
|
1900
|
+
isOpen: showPinDialer,
|
|
1901
|
+
title: "Enter PIN to Reveal",
|
|
1902
|
+
isVerifying: isRevealing,
|
|
1903
|
+
onClose: () => setShowPinDialer(false),
|
|
1904
|
+
onComplete: handlePinComplete
|
|
1905
|
+
}
|
|
1906
|
+
));
|
|
1702
1907
|
};
|
|
1703
|
-
var MenuRow = ({
|
|
1908
|
+
var MenuRow = ({
|
|
1909
|
+
icon,
|
|
1910
|
+
title,
|
|
1911
|
+
subtitle,
|
|
1912
|
+
onClick,
|
|
1913
|
+
iconColor = "text-black",
|
|
1914
|
+
titleColor = "text-black",
|
|
1915
|
+
isLast = false,
|
|
1916
|
+
isToggle = false,
|
|
1917
|
+
toggleState = false,
|
|
1918
|
+
toggleLoading = false
|
|
1919
|
+
}) => /* @__PURE__ */ React20.createElement(
|
|
1704
1920
|
"div",
|
|
1705
1921
|
{
|
|
1706
1922
|
onClick,
|
|
1707
1923
|
className: `flex items-center p-3 cursor-pointer hover:bg-neutral-50 transition-colors ${!isLast ? "" : ""}`
|
|
1708
1924
|
},
|
|
1709
|
-
/* @__PURE__ */
|
|
1710
|
-
/* @__PURE__ */
|
|
1711
|
-
/* @__PURE__ */
|
|
1925
|
+
/* @__PURE__ */ React20.createElement("div", { className: "w-9 h-9 rounded-full border border-neutral-200 flex items-center justify-center shrink-0 mr-4" }, /* @__PURE__ */ React20.createElement(HugeiconsIcon14, { icon, size: 16, className: iconColor })),
|
|
1926
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React20.createElement("p", { className: `text-[13px] font-medium truncate ${titleColor}` }, title), /* @__PURE__ */ React20.createElement("p", { className: "text-[11px] text-neutral-500 truncate" }, subtitle)),
|
|
1927
|
+
isToggle ? /* @__PURE__ */ React20.createElement("div", { className: `relative w-11 h-6 rounded-full transition-colors duration-300 ml-2 shrink-0 ${toggleState ? "bg-black" : "bg-neutral-200"}` }, /* @__PURE__ */ React20.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__ */ React20.createElement(HugeiconsIcon14, { icon: Loading03Icon8, size: 10, className: "animate-spin text-black" }))) : /* @__PURE__ */ React20.createElement(HugeiconsIcon14, { icon: ArrowRight01Icon2, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
1712
1928
|
);
|
|
1713
1929
|
|
|
1714
1930
|
// src/components/UniversalProfilePage.tsx
|
|
1715
|
-
import
|
|
1716
|
-
import { HugeiconsIcon as
|
|
1931
|
+
import React21, { useState as useState13 } from "react";
|
|
1932
|
+
import { HugeiconsIcon as HugeiconsIcon15 } from "@hugeicons/react";
|
|
1717
1933
|
import {
|
|
1718
1934
|
UserIcon,
|
|
1719
1935
|
LockKeyIcon as LockKeyIcon2,
|
|
@@ -1723,7 +1939,8 @@ import {
|
|
|
1723
1939
|
Download04Icon,
|
|
1724
1940
|
Logout03Icon,
|
|
1725
1941
|
Delete02Icon as Delete02Icon2,
|
|
1726
|
-
ArrowRight01Icon as ArrowRight01Icon3
|
|
1942
|
+
ArrowRight01Icon as ArrowRight01Icon3,
|
|
1943
|
+
Loading03Icon as Loading03Icon9
|
|
1727
1944
|
} from "@hugeicons/core-free-icons";
|
|
1728
1945
|
var UniversalProfilePage = ({
|
|
1729
1946
|
avatarSrc,
|
|
@@ -1738,14 +1955,29 @@ var UniversalProfilePage = ({
|
|
|
1738
1955
|
onLogoutTap,
|
|
1739
1956
|
onDeleteTap
|
|
1740
1957
|
}) => {
|
|
1741
|
-
|
|
1958
|
+
const [isAvatarLoaded, setIsAvatarLoaded] = useState13(false);
|
|
1959
|
+
const [showLogoutDialog, setShowLogoutDialog] = useState13(false);
|
|
1960
|
+
const [isLoggingOut, setIsLoggingOut] = useState13(false);
|
|
1961
|
+
const handleConfirmLogout = async () => {
|
|
1962
|
+
setIsLoggingOut(true);
|
|
1963
|
+
try {
|
|
1964
|
+
if (onLogoutTap) {
|
|
1965
|
+
await onLogoutTap();
|
|
1966
|
+
}
|
|
1967
|
+
} finally {
|
|
1968
|
+
setIsLoggingOut(false);
|
|
1969
|
+
setShowLogoutDialog(false);
|
|
1970
|
+
}
|
|
1971
|
+
};
|
|
1972
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "w-full max-w-md mx-auto flex flex-col items-center animate-in fade-in duration-300 pb-12" }, /* @__PURE__ */ React21.createElement("div", { className: "pt-8 pb-4 flex flex-col items-center" }, /* @__PURE__ */ React21.createElement("div", { className: "w-22 h-22 rounded-full bg-white p-1 mb-4 flex items-center justify-center" }, /* @__PURE__ */ React21.createElement("div", { className: "relative w-full h-full rounded-full overflow-hidden bg-neutral-100 flex items-center justify-center" }, avatarSrc ? /* @__PURE__ */ React21.createElement(React21.Fragment, null, !isAvatarLoaded && /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-100" }, /* @__PURE__ */ React21.createElement(HugeiconsIcon15, { icon: Loading03Icon9, size: 24, className: "animate-spin text-black" })), /* @__PURE__ */ React21.createElement(
|
|
1742
1973
|
"img",
|
|
1743
1974
|
{
|
|
1744
1975
|
src: avatarSrc,
|
|
1745
1976
|
alt: "User Avatar",
|
|
1746
|
-
|
|
1977
|
+
onLoad: () => setIsAvatarLoaded(true),
|
|
1978
|
+
className: `w-full h-full object-cover transition-opacity duration-300 ${isAvatarLoaded ? "opacity-100" : "opacity-0"}`
|
|
1747
1979
|
}
|
|
1748
|
-
) : /* @__PURE__ */
|
|
1980
|
+
)) : /* @__PURE__ */ React21.createElement(HugeiconsIcon15, { icon: UserIcon, size: 40, className: "text-neutral-300" }))), /* @__PURE__ */ React21.createElement("div", { className: "bg-white rounded-full px-4 py-2 flex items-center justify-center gap-2 mb-3" }, /* @__PURE__ */ React21.createElement("span", { className: "text-[12px] font-medium text-black" }, roleName), /* @__PURE__ */ React21.createElement(HugeiconsIcon15, { icon: ArrowRight01Icon3, size: 14, className: "text-neutral-400" })), /* @__PURE__ */ React21.createElement("span", { className: "text-[12px] text-neutral-500" }, memberSince)), /* @__PURE__ */ React21.createElement("div", { className: "w-full flex flex-col gap-4 mt-2" }, /* @__PURE__ */ React21.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React21.createElement(
|
|
1749
1981
|
MenuRow2,
|
|
1750
1982
|
{
|
|
1751
1983
|
icon: UserIcon,
|
|
@@ -1753,7 +1985,7 @@ var UniversalProfilePage = ({
|
|
|
1753
1985
|
subtitle: "Your account details",
|
|
1754
1986
|
onClick: onAccountTap
|
|
1755
1987
|
}
|
|
1756
|
-
), /* @__PURE__ */
|
|
1988
|
+
), /* @__PURE__ */ React21.createElement(
|
|
1757
1989
|
MenuRow2,
|
|
1758
1990
|
{
|
|
1759
1991
|
icon: LockKeyIcon2,
|
|
@@ -1761,7 +1993,7 @@ var UniversalProfilePage = ({
|
|
|
1761
1993
|
subtitle: "2FA & authentication",
|
|
1762
1994
|
onClick: onSecurityTap
|
|
1763
1995
|
}
|
|
1764
|
-
), /* @__PURE__ */
|
|
1996
|
+
), /* @__PURE__ */ React21.createElement(
|
|
1765
1997
|
MenuRow2,
|
|
1766
1998
|
{
|
|
1767
1999
|
icon: Notification03Icon,
|
|
@@ -1769,7 +2001,7 @@ var UniversalProfilePage = ({
|
|
|
1769
2001
|
subtitle: "Manage notifications",
|
|
1770
2002
|
onClick: onNotificationsTap
|
|
1771
2003
|
}
|
|
1772
|
-
), /* @__PURE__ */
|
|
2004
|
+
), /* @__PURE__ */ React21.createElement(
|
|
1773
2005
|
MenuRow2,
|
|
1774
2006
|
{
|
|
1775
2007
|
icon: HelpCircleIcon,
|
|
@@ -1778,7 +2010,7 @@ var UniversalProfilePage = ({
|
|
|
1778
2010
|
onClick: onHelpTap,
|
|
1779
2011
|
isLast: true
|
|
1780
2012
|
}
|
|
1781
|
-
)), /* @__PURE__ */
|
|
2013
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React21.createElement(
|
|
1782
2014
|
MenuRow2,
|
|
1783
2015
|
{
|
|
1784
2016
|
icon: Shield01Icon,
|
|
@@ -1786,7 +2018,7 @@ var UniversalProfilePage = ({
|
|
|
1786
2018
|
subtitle: "Account Verifications",
|
|
1787
2019
|
onClick: onVerificationsTap
|
|
1788
2020
|
}
|
|
1789
|
-
), /* @__PURE__ */
|
|
2021
|
+
), /* @__PURE__ */ React21.createElement(
|
|
1790
2022
|
MenuRow2,
|
|
1791
2023
|
{
|
|
1792
2024
|
icon: Download04Icon,
|
|
@@ -1794,16 +2026,16 @@ var UniversalProfilePage = ({
|
|
|
1794
2026
|
subtitle: "Transfer your account",
|
|
1795
2027
|
onClick: onExportTap
|
|
1796
2028
|
}
|
|
1797
|
-
), /* @__PURE__ */
|
|
2029
|
+
), /* @__PURE__ */ React21.createElement(
|
|
1798
2030
|
MenuRow2,
|
|
1799
2031
|
{
|
|
1800
2032
|
icon: Logout03Icon,
|
|
1801
2033
|
title: "LogOut",
|
|
1802
2034
|
subtitle: "End your session",
|
|
1803
|
-
onClick:
|
|
2035
|
+
onClick: () => setShowLogoutDialog(true),
|
|
1804
2036
|
isLast: true
|
|
1805
2037
|
}
|
|
1806
|
-
)), /* @__PURE__ */
|
|
2038
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden mb-4" }, /* @__PURE__ */ React21.createElement(
|
|
1807
2039
|
MenuRow2,
|
|
1808
2040
|
{
|
|
1809
2041
|
icon: Delete02Icon2,
|
|
@@ -1812,30 +2044,42 @@ var UniversalProfilePage = ({
|
|
|
1812
2044
|
onClick: onDeleteTap,
|
|
1813
2045
|
isLast: true
|
|
1814
2046
|
}
|
|
1815
|
-
)))
|
|
2047
|
+
))), /* @__PURE__ */ React21.createElement(
|
|
2048
|
+
ConfirmationDialog,
|
|
2049
|
+
{
|
|
2050
|
+
isOpen: showLogoutDialog,
|
|
2051
|
+
title: "Secure Logout",
|
|
2052
|
+
message: "Are you sure you want to log out? You will need to authenticate to return.",
|
|
2053
|
+
confirmText: "Log Out",
|
|
2054
|
+
isDestructive: true,
|
|
2055
|
+
isProcessing: isLoggingOut,
|
|
2056
|
+
onClose: () => setShowLogoutDialog(false),
|
|
2057
|
+
onConfirm: handleConfirmLogout
|
|
2058
|
+
}
|
|
2059
|
+
));
|
|
1816
2060
|
};
|
|
1817
|
-
var MenuRow2 = ({ icon, title, subtitle, onClick, iconColor = "text-black", titleColor = "text-black", isLast = false }) => /* @__PURE__ */
|
|
2061
|
+
var MenuRow2 = ({ icon, title, subtitle, onClick, iconColor = "text-black", titleColor = "text-black", isLast = false }) => /* @__PURE__ */ React21.createElement(
|
|
1818
2062
|
"div",
|
|
1819
2063
|
{
|
|
1820
2064
|
onClick,
|
|
1821
2065
|
className: `flex items-center p-4 cursor-pointer hover:bg-neutral-50 transition-colors ${!isLast ? "" : ""}`
|
|
1822
2066
|
},
|
|
1823
|
-
/* @__PURE__ */
|
|
1824
|
-
/* @__PURE__ */
|
|
1825
|
-
/* @__PURE__ */
|
|
2067
|
+
/* @__PURE__ */ React21.createElement("div", { className: "w-9 h-9 rounded-full flex items-center justify-center shrink-0 mr-4" }, /* @__PURE__ */ React21.createElement(HugeiconsIcon15, { icon, size: 16, className: iconColor })),
|
|
2068
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React21.createElement("p", { className: `text-[13px] font-medium truncate ${titleColor}` }, title), /* @__PURE__ */ React21.createElement("p", { className: "text-[11px] text-neutral-500 truncate" }, subtitle)),
|
|
2069
|
+
/* @__PURE__ */ React21.createElement(HugeiconsIcon15, { icon: ArrowRight01Icon3, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
1826
2070
|
);
|
|
1827
2071
|
|
|
1828
2072
|
// src/components/HeroSection.tsx
|
|
1829
|
-
import
|
|
2073
|
+
import React23, { useState as useState15, useEffect as useEffect10, useRef as useRef4 } from "react";
|
|
1830
2074
|
import Link5 from "next/link";
|
|
1831
|
-
import
|
|
2075
|
+
import Image3 from "next/image";
|
|
1832
2076
|
|
|
1833
2077
|
// src/components/WaitlistDialog.tsx
|
|
1834
|
-
import
|
|
2078
|
+
import React22, { useState as useState14 } from "react";
|
|
1835
2079
|
import { toast as toast6 } from "react-hot-toast";
|
|
1836
2080
|
var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
1837
|
-
const [email, setEmail] =
|
|
1838
|
-
const [isLoading, setIsLoading] =
|
|
2081
|
+
const [email, setEmail] = useState14("");
|
|
2082
|
+
const [isLoading, setIsLoading] = useState14(false);
|
|
1839
2083
|
if (!isOpen) return null;
|
|
1840
2084
|
const handleSubmit = async (e) => {
|
|
1841
2085
|
e.preventDefault();
|
|
@@ -1866,12 +2110,12 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
1866
2110
|
setIsLoading(false);
|
|
1867
2111
|
}
|
|
1868
2112
|
};
|
|
1869
|
-
return /* @__PURE__ */
|
|
2113
|
+
return /* @__PURE__ */ React22.createElement("div", { className: "fixed inset-0 z-100 flex items-center justify-center p-4 bg-black/40" }, /* @__PURE__ */ React22.createElement("div", { className: "absolute inset-0", onClick: !isLoading ? onClose : void 0 }), /* @__PURE__ */ React22.createElement(
|
|
1870
2114
|
"div",
|
|
1871
2115
|
{
|
|
1872
2116
|
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"
|
|
1873
2117
|
},
|
|
1874
|
-
/* @__PURE__ */
|
|
2118
|
+
/* @__PURE__ */ React22.createElement(
|
|
1875
2119
|
"button",
|
|
1876
2120
|
{
|
|
1877
2121
|
onClick: onClose,
|
|
@@ -1879,7 +2123,7 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
1879
2123
|
className: "absolute top-4 right-4 p-2 text-neutral-700 hover:text-neutral-400 transition-colors disabled:opacity-50 outline-none",
|
|
1880
2124
|
"aria-label": "Close dialog"
|
|
1881
2125
|
},
|
|
1882
|
-
/* @__PURE__ */
|
|
2126
|
+
/* @__PURE__ */ React22.createElement(
|
|
1883
2127
|
"svg",
|
|
1884
2128
|
{
|
|
1885
2129
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1892,11 +2136,11 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
1892
2136
|
strokeLinecap: "round",
|
|
1893
2137
|
strokeLinejoin: "round"
|
|
1894
2138
|
},
|
|
1895
|
-
/* @__PURE__ */
|
|
1896
|
-
/* @__PURE__ */
|
|
2139
|
+
/* @__PURE__ */ React22.createElement("path", { d: "M18 6 6 18" }),
|
|
2140
|
+
/* @__PURE__ */ React22.createElement("path", { d: "m6 6 12 12" })
|
|
1897
2141
|
)
|
|
1898
2142
|
),
|
|
1899
|
-
/* @__PURE__ */
|
|
2143
|
+
/* @__PURE__ */ React22.createElement("div", { className: "p-6 sm:p-8" }, /* @__PURE__ */ React22.createElement("div", { className: "mb-8 mt-2" }, /* @__PURE__ */ React22.createElement("h2", { className: "text-2xl text-black tracking-tight mb-2" }, "Join the Waitlist"), /* @__PURE__ */ React22.createElement("p", { className: "text-[13px] text-neutral-500 leading-relaxed" }, "Be the first to experience the future of natural language computing. Secure your early access spot today.")), /* @__PURE__ */ React22.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col gap-8" }, /* @__PURE__ */ React22.createElement(
|
|
1900
2144
|
TextInput,
|
|
1901
2145
|
{
|
|
1902
2146
|
label: "Email ID",
|
|
@@ -1906,7 +2150,7 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
1906
2150
|
placeholder: "name@example.com",
|
|
1907
2151
|
disabled: isLoading
|
|
1908
2152
|
}
|
|
1909
|
-
), /* @__PURE__ */
|
|
2153
|
+
), /* @__PURE__ */ React22.createElement(
|
|
1910
2154
|
ThreeDActionButton,
|
|
1911
2155
|
{
|
|
1912
2156
|
type: "submit",
|
|
@@ -1939,10 +2183,10 @@ var HeroSection = ({
|
|
|
1939
2183
|
bgImageSrc,
|
|
1940
2184
|
isWaitlist = false
|
|
1941
2185
|
}) => {
|
|
1942
|
-
const [isAnimating, setIsAnimating] =
|
|
1943
|
-
const [isWaitlistOpen, setIsWaitlistOpen] =
|
|
2186
|
+
const [isAnimating, setIsAnimating] = useState15(false);
|
|
2187
|
+
const [isWaitlistOpen, setIsWaitlistOpen] = useState15(false);
|
|
1944
2188
|
const titleRef = useRef4(null);
|
|
1945
|
-
|
|
2189
|
+
useEffect10(() => {
|
|
1946
2190
|
const observer = new IntersectionObserver(
|
|
1947
2191
|
([entry]) => {
|
|
1948
2192
|
if (entry.isIntersecting) {
|
|
@@ -1964,7 +2208,7 @@ var HeroSection = ({
|
|
|
1964
2208
|
setIsWaitlistOpen(true);
|
|
1965
2209
|
}
|
|
1966
2210
|
};
|
|
1967
|
-
return /* @__PURE__ */
|
|
2211
|
+
return /* @__PURE__ */ React23.createElement("div", { className: "w-screen min-h-screen flex justify-center items-center p-4" }, /* @__PURE__ */ React23.createElement("section", { className: "relative h-[95vh] w-full overflow-hidden rounded-2xl " }, bgVideoSrc ? /* @__PURE__ */ React23.createElement(
|
|
1968
2212
|
"video",
|
|
1969
2213
|
{
|
|
1970
2214
|
src: bgVideoSrc,
|
|
@@ -1975,8 +2219,8 @@ var HeroSection = ({
|
|
|
1975
2219
|
playsInline: true,
|
|
1976
2220
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
1977
2221
|
}
|
|
1978
|
-
) : bgImageSrc ? /* @__PURE__ */
|
|
1979
|
-
|
|
2222
|
+
) : bgImageSrc ? /* @__PURE__ */ React23.createElement(
|
|
2223
|
+
Image3,
|
|
1980
2224
|
{
|
|
1981
2225
|
src: bgImageSrc,
|
|
1982
2226
|
alt: "Hero Background",
|
|
@@ -1984,7 +2228,7 @@ var HeroSection = ({
|
|
|
1984
2228
|
priority: true,
|
|
1985
2229
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
1986
2230
|
}
|
|
1987
|
-
) : null, /* @__PURE__ */
|
|
2231
|
+
) : null, /* @__PURE__ */ React23.createElement(
|
|
1988
2232
|
"div",
|
|
1989
2233
|
{
|
|
1990
2234
|
className: "pointer-events-none absolute inset-0 z-10 opacity-[0.7] mix-blend-overlay",
|
|
@@ -1992,15 +2236,15 @@ var HeroSection = ({
|
|
|
1992
2236
|
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")`
|
|
1993
2237
|
}
|
|
1994
2238
|
}
|
|
1995
|
-
), /* @__PURE__ */
|
|
2239
|
+
), /* @__PURE__ */ React23.createElement("div", { className: "pointer-events-none absolute inset-0 bg-linear-to-b from-black/30 via-transparent to-black/80 z-10" }), /* @__PURE__ */ React23.createElement("div", { className: "absolute bottom-0 left-0 right-0 px-4 pb-4 sm:px-6 md:px-10 z-20" }, /* @__PURE__ */ React23.createElement("div", { className: "grid grid-cols-12 items-end gap-4" }, /* @__PURE__ */ React23.createElement("div", { className: "col-span-12 lg:col-span-8" }, /* @__PURE__ */ React23.createElement(
|
|
1996
2240
|
"h1",
|
|
1997
2241
|
{
|
|
1998
2242
|
ref: titleRef,
|
|
1999
2243
|
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]"
|
|
2000
2244
|
},
|
|
2001
|
-
/* @__PURE__ */
|
|
2002
|
-
)), /* @__PURE__ */
|
|
2003
|
-
/* @__PURE__ */
|
|
2245
|
+
/* @__PURE__ */ React23.createElement("div", { className: "inline-flex flex-wrap" }, /* @__PURE__ */ React23.createElement("span", { className: `inline-block relative transition-all duration-1000 ${isAnimating ? "opacity-100 translate-y-0" : "opacity-0 translate-y-10"}` }, titlePrefix, titlePrefix && /* @__PURE__ */ React23.createElement("br", null), highlightText, /* @__PURE__ */ React23.createElement("span", { className: "absolute top-[0.65em] right-[-0.3em] text-[0.31em] text-[#ffffff]/70" }, "*")))
|
|
2246
|
+
)), /* @__PURE__ */ React23.createElement("div", { className: "col-span-12 flex flex-col gap-5 pb-6 lg:col-span-4 lg:pb-10" }, subtitle && /* @__PURE__ */ React23.createElement("p", { className: "text-xs text-[#ffffff]/70 sm:text-sm md:text-base leading-[1.2] max-w-md transition-opacity duration-1000 delay-300" }, subtitle), /* @__PURE__ */ React23.createElement("div", { className: "flex flex-col sm:flex-row items-start sm:items-center gap-4" }, ctaText && // Changed from <button> to <Link> so it actually navigates!
|
|
2247
|
+
/* @__PURE__ */ React23.createElement(
|
|
2004
2248
|
Link5,
|
|
2005
2249
|
{
|
|
2006
2250
|
href: isWaitlist ? "#" : ctaHref || "#",
|
|
@@ -2008,16 +2252,16 @@ var HeroSection = ({
|
|
|
2008
2252
|
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"
|
|
2009
2253
|
},
|
|
2010
2254
|
ctaText,
|
|
2011
|
-
/* @__PURE__ */
|
|
2012
|
-
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
2255
|
+
/* @__PURE__ */ React23.createElement("span", { className: "flex h-8 w-8 items-center justify-center rounded-full bg-black transition-transform group-hover:scale-110" }, /* @__PURE__ */ React23.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "lucide lucide-arrow-right h-4 w-4 text-[#ffffff]" }, /* @__PURE__ */ React23.createElement("path", { d: "M5 12h14" }), /* @__PURE__ */ React23.createElement("path", { d: "m12 5 7 7-7 7" })))
|
|
2256
|
+
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ React23.createElement(
|
|
2013
2257
|
Link5,
|
|
2014
2258
|
{
|
|
2015
2259
|
href: secondaryCtaHref,
|
|
2016
2260
|
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"
|
|
2017
2261
|
},
|
|
2018
2262
|
secondaryCtaText
|
|
2019
|
-
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */
|
|
2020
|
-
|
|
2263
|
+
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */ React23.createElement("div", { className: "flex flex-col gap-3 mt-4" }, appsText && /* @__PURE__ */ React23.createElement("span", { className: "text-[10px] tracking-widest uppercase text-[#ffffff]/50 " }, appsText), /* @__PURE__ */ React23.createElement("div", { className: "flex items-center gap-4" }, appLogos.map((logo, idx) => /* @__PURE__ */ React23.createElement("div", { key: idx, className: "relative h-6 w-6 sm:h-7 sm:w-7 opacity-70 hover:opacity-100 transition-opacity invert" }, /* @__PURE__ */ React23.createElement(
|
|
2264
|
+
Image3,
|
|
2021
2265
|
{
|
|
2022
2266
|
src: logo.src,
|
|
2023
2267
|
alt: logo.alt,
|
|
@@ -2025,7 +2269,7 @@ var HeroSection = ({
|
|
|
2025
2269
|
height: 28,
|
|
2026
2270
|
className: "object-contain"
|
|
2027
2271
|
}
|
|
2028
|
-
))))))))), /* @__PURE__ */
|
|
2272
|
+
))))))))), /* @__PURE__ */ React23.createElement(
|
|
2029
2273
|
WaitlistDialog,
|
|
2030
2274
|
{
|
|
2031
2275
|
isOpen: isWaitlistOpen,
|
|
@@ -2035,12 +2279,12 @@ var HeroSection = ({
|
|
|
2035
2279
|
};
|
|
2036
2280
|
|
|
2037
2281
|
// src/components/AppBento2.tsx
|
|
2038
|
-
import
|
|
2039
|
-
import { HugeiconsIcon as
|
|
2282
|
+
import React24, { useState as useState16, useEffect as useEffect11, useRef as useRef5 } from "react";
|
|
2283
|
+
import { HugeiconsIcon as HugeiconsIcon16 } from "@hugeicons/react";
|
|
2040
2284
|
var AppBento2 = ({ tagline, headline, features }) => {
|
|
2041
|
-
const [isAnimating, setIsAnimating] =
|
|
2285
|
+
const [isAnimating, setIsAnimating] = useState16(false);
|
|
2042
2286
|
const titleRef = useRef5(null);
|
|
2043
|
-
|
|
2287
|
+
useEffect11(() => {
|
|
2044
2288
|
const observer = new IntersectionObserver(
|
|
2045
2289
|
([entry]) => {
|
|
2046
2290
|
if (entry.isIntersecting) {
|
|
@@ -2058,7 +2302,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2058
2302
|
}
|
|
2059
2303
|
return () => observer.disconnect();
|
|
2060
2304
|
}, []);
|
|
2061
|
-
return /* @__PURE__ */
|
|
2305
|
+
return /* @__PURE__ */ React24.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ React24.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ React24.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React24.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ React24.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React24.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), /* @__PURE__ */ React24.createElement(
|
|
2062
2306
|
"h2",
|
|
2063
2307
|
{
|
|
2064
2308
|
ref: titleRef,
|
|
@@ -2066,7 +2310,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2066
2310
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2067
2311
|
},
|
|
2068
2312
|
headline
|
|
2069
|
-
))), /* @__PURE__ */
|
|
2313
|
+
))), /* @__PURE__ */ React24.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-6 gap-6" }, features.map((f, i) => {
|
|
2070
2314
|
const isWhite = i === 0;
|
|
2071
2315
|
const isBlack = i === 1;
|
|
2072
2316
|
const isNeutral = i === 2;
|
|
@@ -2088,37 +2332,37 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2088
2332
|
const textColor = isBlack ? "text-white" : "text-black";
|
|
2089
2333
|
const subTextColor = isBlack ? "text-neutral-300" : "text-neutral-600";
|
|
2090
2334
|
const labelColor = isBlack ? "text-neutral-400" : "text-neutral-500";
|
|
2091
|
-
return /* @__PURE__ */
|
|
2335
|
+
return /* @__PURE__ */ React24.createElement(
|
|
2092
2336
|
"div",
|
|
2093
2337
|
{
|
|
2094
2338
|
key: i,
|
|
2095
2339
|
className: `relative rounded-2xl overflow-hidden p-8 flex flex-col min-h-75 transition-all duration-500 group text-left ${getBgStyle()} ${f.size}`,
|
|
2096
2340
|
style: { boxShadow: getShadowStyle() }
|
|
2097
2341
|
},
|
|
2098
|
-
/* @__PURE__ */
|
|
2342
|
+
/* @__PURE__ */ React24.createElement(
|
|
2099
2343
|
"div",
|
|
2100
2344
|
{
|
|
2101
2345
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
2102
2346
|
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")` }
|
|
2103
2347
|
}
|
|
2104
2348
|
),
|
|
2105
|
-
isBlack && /* @__PURE__ */
|
|
2106
|
-
/* @__PURE__ */
|
|
2107
|
-
/* @__PURE__ */
|
|
2349
|
+
isBlack && /* @__PURE__ */ React24.createElement("span", { className: "absolute inset-0 rounded-2xl bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none z-10" }),
|
|
2350
|
+
/* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 overflow-hidden pointer-events-none z-0" }, /* @__PURE__ */ React24.createElement("div", { className: `absolute -bottom-8 -right-8 transform group-hover:scale-110 transition-transform duration-700 ease-out ${isBlack ? "text-white/5" : "text-black/5"}` }, /* @__PURE__ */ React24.createElement(HugeiconsIcon16, { icon: f.icon, size: 180 }))),
|
|
2351
|
+
/* @__PURE__ */ React24.createElement("div", { className: "relative z-10 w-full h-full flex flex-col pointer-events-auto" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between mb-8" }, /* @__PURE__ */ React24.createElement("span", { className: `text-[9px] tracking-widest ${labelColor}` }, f.label), /* @__PURE__ */ React24.createElement("div", { className: `p-2 rounded-full transition-colors ${isBlack ? "bg-white/10" : "bg-white/50 backdrop-blur-sm"}` }, /* @__PURE__ */ React24.createElement(HugeiconsIcon16, { icon: f.icon, size: 20, className: textColor }))), /* @__PURE__ */ React24.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React24.createElement("h3", { className: `text-xl mb-2 tracking-tight ${textColor}` }, f.title), /* @__PURE__ */ React24.createElement("p", { className: `text-[13px] leading-relaxed max-w-sm ${subTextColor}` }, f.desc)))
|
|
2108
2352
|
);
|
|
2109
2353
|
})))));
|
|
2110
2354
|
};
|
|
2111
2355
|
|
|
2112
2356
|
// src/components/FeatureScroll.tsx
|
|
2113
|
-
import
|
|
2114
|
-
import
|
|
2115
|
-
import { HugeiconsIcon as
|
|
2116
|
-
import { ArrowLeft01Icon as ArrowLeft01Icon2, ArrowRight01Icon as ArrowRight01Icon4, Loading03Icon as
|
|
2357
|
+
import React25, { useRef as useRef6, useState as useState17, useEffect as useEffect12 } from "react";
|
|
2358
|
+
import Image4 from "next/image";
|
|
2359
|
+
import { HugeiconsIcon as HugeiconsIcon17 } from "@hugeicons/react";
|
|
2360
|
+
import { ArrowLeft01Icon as ArrowLeft01Icon2, ArrowRight01Icon as ArrowRight01Icon4, Loading03Icon as Loading03Icon10 } from "@hugeicons/core-free-icons";
|
|
2117
2361
|
var FeatureCard = ({ feature, bgImage }) => {
|
|
2118
|
-
const [isBgLoading, setIsBgLoading] =
|
|
2119
|
-
const [isFgLoading, setIsFgLoading] =
|
|
2120
|
-
return /* @__PURE__ */
|
|
2121
|
-
|
|
2362
|
+
const [isBgLoading, setIsBgLoading] = useState17(true);
|
|
2363
|
+
const [isFgLoading, setIsFgLoading] = useState17(!!feature.image);
|
|
2364
|
+
return /* @__PURE__ */ React25.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__ */ React25.createElement("div", { className: "relative w-full aspect-16/10 bg-neutral-100 rounded-2xl overflow-hidden mb-6 flex items-center justify-center" }, /* @__PURE__ */ React25.createElement(
|
|
2365
|
+
Image4,
|
|
2122
2366
|
{
|
|
2123
2367
|
src: bgImage,
|
|
2124
2368
|
alt: "Card Background",
|
|
@@ -2130,7 +2374,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2130
2374
|
${isBgLoading ? "blur-xl scale-110" : "blur-0 scale-100"}
|
|
2131
2375
|
`
|
|
2132
2376
|
}
|
|
2133
|
-
), /* @__PURE__ */
|
|
2377
|
+
), /* @__PURE__ */ React25.createElement(
|
|
2134
2378
|
"div",
|
|
2135
2379
|
{
|
|
2136
2380
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.25] mix-blend-overlay",
|
|
@@ -2138,8 +2382,8 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2138
2382
|
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")`
|
|
2139
2383
|
}
|
|
2140
2384
|
}
|
|
2141
|
-
), isFgLoading && feature.image && /* @__PURE__ */
|
|
2142
|
-
|
|
2385
|
+
), isFgLoading && feature.image && /* @__PURE__ */ React25.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__ */ React25.createElement(HugeiconsIcon17, { icon: Loading03Icon10, size: 32, className: "animate-spin text-neutral-400" })), feature.image && /* @__PURE__ */ React25.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__ */ React25.createElement(
|
|
2386
|
+
Image4,
|
|
2143
2387
|
{
|
|
2144
2388
|
src: feature.image,
|
|
2145
2389
|
alt: feature.title,
|
|
@@ -2151,12 +2395,12 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2151
2395
|
${isFgLoading ? "opacity-0 blur-xl" : "opacity-100 blur-0"}
|
|
2152
2396
|
`
|
|
2153
2397
|
}
|
|
2154
|
-
))), /* @__PURE__ */
|
|
2398
|
+
))), /* @__PURE__ */ React25.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ React25.createElement("h3", { className: " text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ React25.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 max-w-[90%]" }, feature.desc)));
|
|
2155
2399
|
};
|
|
2156
2400
|
var FeatureScroll = ({ tagline, headline, features }) => {
|
|
2157
2401
|
const scrollRef = useRef6(null);
|
|
2158
|
-
const [canScrollLeft, setCanScrollLeft] =
|
|
2159
|
-
const [canScrollRight, setCanScrollRight] =
|
|
2402
|
+
const [canScrollLeft, setCanScrollLeft] = useState17(false);
|
|
2403
|
+
const [canScrollRight, setCanScrollRight] = useState17(true);
|
|
2160
2404
|
const checkScroll = () => {
|
|
2161
2405
|
if (scrollRef.current) {
|
|
2162
2406
|
const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;
|
|
@@ -2164,7 +2408,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2164
2408
|
setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 2);
|
|
2165
2409
|
}
|
|
2166
2410
|
};
|
|
2167
|
-
|
|
2411
|
+
useEffect12(() => {
|
|
2168
2412
|
checkScroll();
|
|
2169
2413
|
window.addEventListener("resize", checkScroll);
|
|
2170
2414
|
return () => window.removeEventListener("resize", checkScroll);
|
|
@@ -2180,7 +2424,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2180
2424
|
"https://retinalabs.company/assets/images/bg_6.avif",
|
|
2181
2425
|
"https://retinalabs.company/assets/images/bg_1.avif"
|
|
2182
2426
|
];
|
|
2183
|
-
return /* @__PURE__ */
|
|
2427
|
+
return /* @__PURE__ */ React25.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden" }, /* @__PURE__ */ React25.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React25.createElement("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ React25.createElement("div", { className: "relative z-10 text-left" }, /* @__PURE__ */ React25.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ React25.createElement("h2", { className: " text-3xl tracking-tight text-black leading-[1.05]" }, headline)), /* @__PURE__ */ React25.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ React25.createElement(
|
|
2184
2428
|
"button",
|
|
2185
2429
|
{
|
|
2186
2430
|
onClick: () => scroll("left"),
|
|
@@ -2188,8 +2432,8 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2188
2432
|
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",
|
|
2189
2433
|
"aria-label": "Previous feature"
|
|
2190
2434
|
},
|
|
2191
|
-
/* @__PURE__ */
|
|
2192
|
-
), /* @__PURE__ */
|
|
2435
|
+
/* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon: ArrowLeft01Icon2, size: 20 })
|
|
2436
|
+
), /* @__PURE__ */ React25.createElement(
|
|
2193
2437
|
"button",
|
|
2194
2438
|
{
|
|
2195
2439
|
onClick: () => scroll("right"),
|
|
@@ -2197,57 +2441,57 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2197
2441
|
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",
|
|
2198
2442
|
"aria-label": "Next feature"
|
|
2199
2443
|
},
|
|
2200
|
-
/* @__PURE__ */
|
|
2201
|
-
))), /* @__PURE__ */
|
|
2444
|
+
/* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon: ArrowRight01Icon4, size: 20 })
|
|
2445
|
+
))), /* @__PURE__ */ React25.createElement(
|
|
2202
2446
|
"div",
|
|
2203
2447
|
{
|
|
2204
2448
|
ref: scrollRef,
|
|
2205
2449
|
onScroll: checkScroll,
|
|
2206
2450
|
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"
|
|
2207
2451
|
},
|
|
2208
|
-
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */
|
|
2209
|
-
), /* @__PURE__ */
|
|
2452
|
+
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */ React25.createElement(FeatureCard, { key: idx, feature, bgImage: bgImages[idx] }))
|
|
2453
|
+
), /* @__PURE__ */ React25.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ React25.createElement(
|
|
2210
2454
|
"button",
|
|
2211
2455
|
{
|
|
2212
2456
|
onClick: () => scroll("left"),
|
|
2213
2457
|
disabled: !canScrollLeft,
|
|
2214
2458
|
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"
|
|
2215
2459
|
},
|
|
2216
|
-
/* @__PURE__ */
|
|
2217
|
-
), /* @__PURE__ */
|
|
2460
|
+
/* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon: ArrowLeft01Icon2, size: 20 })
|
|
2461
|
+
), /* @__PURE__ */ React25.createElement(
|
|
2218
2462
|
"button",
|
|
2219
2463
|
{
|
|
2220
2464
|
onClick: () => scroll("right"),
|
|
2221
2465
|
disabled: !canScrollRight,
|
|
2222
2466
|
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"
|
|
2223
2467
|
},
|
|
2224
|
-
/* @__PURE__ */
|
|
2468
|
+
/* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon: ArrowRight01Icon4, size: 20 })
|
|
2225
2469
|
))));
|
|
2226
2470
|
};
|
|
2227
2471
|
|
|
2228
2472
|
// src/components/PlatformFeatures.tsx
|
|
2229
|
-
import
|
|
2230
|
-
import { HugeiconsIcon as
|
|
2473
|
+
import React26 from "react";
|
|
2474
|
+
import { HugeiconsIcon as HugeiconsIcon18 } from "@hugeicons/react";
|
|
2231
2475
|
var PlatformFeatures = ({
|
|
2232
2476
|
tagline,
|
|
2233
2477
|
headline,
|
|
2234
2478
|
description,
|
|
2235
2479
|
features
|
|
2236
2480
|
}) => {
|
|
2237
|
-
return /* @__PURE__ */
|
|
2481
|
+
return /* @__PURE__ */ React26.createElement("section", { className: "w-full flex justify-center mb-15 relative z-10" }, /* @__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 items-start mb-16 relative z-10" }, /* @__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] mb-6" }, headline), /* @__PURE__ */ React26.createElement("p", { className: "text-[15px] leading-[1.8] text-neutral-600 max-w-2xl" }, description)), /* @__PURE__ */ React26.createElement("div", { className: "w-full h-px bg-neutral-100 mb-16", "aria-hidden": "true" }), /* @__PURE__ */ React26.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__ */ React26.createElement(
|
|
2238
2482
|
"div",
|
|
2239
2483
|
{
|
|
2240
2484
|
key: idx,
|
|
2241
2485
|
className: "flex flex-col group animate-in fade-in slide-in-from-bottom-4 duration-700 fill-mode-both",
|
|
2242
2486
|
style: { animationDelay: feature.delay || "0ms" }
|
|
2243
2487
|
},
|
|
2244
|
-
/* @__PURE__ */
|
|
2245
|
-
/* @__PURE__ */
|
|
2488
|
+
/* @__PURE__ */ React26.createElement("div", { className: "flex flex-row items-center gap-4 mb-4" }, /* @__PURE__ */ React26.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__ */ React26.createElement(HugeiconsIcon18, { icon: feature.icon, size: 24 })), /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col justify-center" }, /* @__PURE__ */ React26.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400 mb-0.5" }, feature.label || "CAPABILITY"), /* @__PURE__ */ React26.createElement("h3", { className: "text-xl tracking-tight text-black" }, feature.title))),
|
|
2489
|
+
/* @__PURE__ */ React26.createElement("div", null, /* @__PURE__ */ React26.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 pr-4" }, feature.desc))
|
|
2246
2490
|
)))));
|
|
2247
2491
|
};
|
|
2248
2492
|
|
|
2249
2493
|
// src/components/ManagedDocument.tsx
|
|
2250
|
-
import
|
|
2494
|
+
import React27, { useState as useState18, useEffect as useEffect13, useRef as useRef7 } from "react";
|
|
2251
2495
|
var ManagedDocument = ({
|
|
2252
2496
|
tagline,
|
|
2253
2497
|
title,
|
|
@@ -2255,9 +2499,9 @@ var ManagedDocument = ({
|
|
|
2255
2499
|
contactText,
|
|
2256
2500
|
contactEmail
|
|
2257
2501
|
}) => {
|
|
2258
|
-
const [isAnimating, setIsAnimating] =
|
|
2502
|
+
const [isAnimating, setIsAnimating] = useState18(false);
|
|
2259
2503
|
const titleRef = useRef7(null);
|
|
2260
|
-
|
|
2504
|
+
useEffect13(() => {
|
|
2261
2505
|
const observer = new IntersectionObserver(
|
|
2262
2506
|
([entry]) => {
|
|
2263
2507
|
if (entry.isIntersecting) {
|
|
@@ -2277,7 +2521,7 @@ var ManagedDocument = ({
|
|
|
2277
2521
|
}, []);
|
|
2278
2522
|
return (
|
|
2279
2523
|
// Outer layout wrapper (takes up available space, adds padding)
|
|
2280
|
-
/* @__PURE__ */
|
|
2524
|
+
/* @__PURE__ */ React27.createElement("div", { className: "grow pt-4 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React27.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ React27.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React27.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ React27.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React27.createElement(
|
|
2281
2525
|
"h1",
|
|
2282
2526
|
{
|
|
2283
2527
|
ref: titleRef,
|
|
@@ -2285,7 +2529,7 @@ var ManagedDocument = ({
|
|
|
2285
2529
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2286
2530
|
},
|
|
2287
2531
|
title
|
|
2288
|
-
)), sections.map((section, index) => /* @__PURE__ */
|
|
2532
|
+
)), sections.map((section, index) => /* @__PURE__ */ React27.createElement("div", { key: index, className: "relative px-5 md:px-12 py-8 md:py-10" }, section.heading && /* @__PURE__ */ React27.createElement("p", { className: " text-[11px] tracking-[0.2em] text-black mb-4 text-left " }, section.heading), section.paragraphs && section.paragraphs.length > 0 && /* @__PURE__ */ React27.createElement("div", { className: "text-[14px] leading-[1.8] text-neutral-700 space-y-4 text-left " }, section.paragraphs.map((text, pIndex) => /* @__PURE__ */ React27.createElement("p", { key: pIndex }, text))), section.quote && /* @__PURE__ */ React27.createElement("div", { className: `border-neutral-100 border rounded-xl p-6 ${section.paragraphs && section.paragraphs.length > 0 ? "mt-6" : ""}` }, /* @__PURE__ */ React27.createElement("p", { className: "text-neutral-900 text-[14px] md:text-[14px] leading-relaxed" }, '"', section.quote, '"')))), (contactText || contactEmail) && /* @__PURE__ */ React27.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ React27.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ React27.createElement(
|
|
2289
2533
|
"a",
|
|
2290
2534
|
{
|
|
2291
2535
|
href: `mailto:${contactEmail}`,
|
|
@@ -2297,18 +2541,18 @@ var ManagedDocument = ({
|
|
|
2297
2541
|
};
|
|
2298
2542
|
|
|
2299
2543
|
// src/components/ManagedContactBlock.tsx
|
|
2300
|
-
import
|
|
2301
|
-
import { HugeiconsIcon as
|
|
2544
|
+
import React28, { useState as useState19, useEffect as useEffect14 } from "react";
|
|
2545
|
+
import { HugeiconsIcon as HugeiconsIcon19 } from "@hugeicons/react";
|
|
2302
2546
|
var SecureEmail = ({ user, domain, className }) => {
|
|
2303
|
-
const [isMounted, setIsMounted] =
|
|
2304
|
-
|
|
2547
|
+
const [isMounted, setIsMounted] = useState19(false);
|
|
2548
|
+
useEffect14(() => {
|
|
2305
2549
|
setIsMounted(true);
|
|
2306
2550
|
}, []);
|
|
2307
2551
|
if (!isMounted) {
|
|
2308
|
-
return /* @__PURE__ */
|
|
2552
|
+
return /* @__PURE__ */ React28.createElement("span", { className, style: { opacity: 0 } }, "Loading");
|
|
2309
2553
|
}
|
|
2310
2554
|
const email = `${user}@${domain}`;
|
|
2311
|
-
return /* @__PURE__ */
|
|
2555
|
+
return /* @__PURE__ */ React28.createElement("a", { href: `mailto:${email}`, className }, email);
|
|
2312
2556
|
};
|
|
2313
2557
|
var ManagedContactBlock = ({
|
|
2314
2558
|
tagline,
|
|
@@ -2317,7 +2561,7 @@ var ManagedContactBlock = ({
|
|
|
2317
2561
|
emails,
|
|
2318
2562
|
socials
|
|
2319
2563
|
}) => {
|
|
2320
|
-
return /* @__PURE__ */
|
|
2564
|
+
return /* @__PURE__ */ React28.createElement("div", { className: "grow pt-4 pb-20 px-4 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(
|
|
2321
2565
|
"div",
|
|
2322
2566
|
{
|
|
2323
2567
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2326,21 +2570,21 @@ var ManagedContactBlock = ({
|
|
|
2326
2570
|
backgroundRepeat: "repeat"
|
|
2327
2571
|
}
|
|
2328
2572
|
}
|
|
2329
|
-
), /* @__PURE__ */
|
|
2573
|
+
), /* @__PURE__ */ React28.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React28.createElement("div", { className: "relative px-8 md:px-12 py-10" }, tagline && /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React28.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ React28.createElement("div", { className: "relative px-8 md:px-12 py-8 pb-14" }, /* @__PURE__ */ React28.createElement("div", { className: "flex flex-wrap gap-12 lg:gap-16 w-full" }, company && /* @__PURE__ */ React28.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React28.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Contact Details"), /* @__PURE__ */ React28.createElement("div", { className: "space-y-3 text-[13px] text-neutral-600 leading-[1.8]" }, company.name && /* @__PURE__ */ React28.createElement("p", { className: "text-black" }, company.name), company.lines && company.lines.map((line, idx) => /* @__PURE__ */ React28.createElement("p", { key: idx }, line)), company.phone && /* @__PURE__ */ React28.createElement("p", { className: "pt-2" }, /* @__PURE__ */ React28.createElement(
|
|
2330
2574
|
"a",
|
|
2331
2575
|
{
|
|
2332
2576
|
href: `tel:${company.phone.replace(/\s+/g, "")}`,
|
|
2333
2577
|
className: "transition-colors hover:text-black"
|
|
2334
2578
|
},
|
|
2335
2579
|
company.phone
|
|
2336
|
-
)))), emails && emails.length > 0 && /* @__PURE__ */
|
|
2580
|
+
)))), emails && emails.length > 0 && /* @__PURE__ */ React28.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React28.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Email Directory"), /* @__PURE__ */ React28.createElement("div", { className: "space-y-6 text-[13px]" }, emails.map((email, idx) => /* @__PURE__ */ React28.createElement("div", { key: idx }, /* @__PURE__ */ React28.createElement("p", { className: "text-[11px] tracking-[0.2em] mb-1.5 text-neutral-500 " }, email.label), /* @__PURE__ */ React28.createElement(
|
|
2337
2581
|
SecureEmail,
|
|
2338
2582
|
{
|
|
2339
2583
|
user: email.user,
|
|
2340
2584
|
domain: email.domain,
|
|
2341
2585
|
className: "text-neutral-600 transition-colors hover:text-black"
|
|
2342
2586
|
}
|
|
2343
|
-
))))), socials && socials.length > 0 && /* @__PURE__ */
|
|
2587
|
+
))))), socials && socials.length > 0 && /* @__PURE__ */ React28.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React28.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Find Us Online"), /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col space-y-5 pt-1" }, socials.map((social, idx) => /* @__PURE__ */ React28.createElement(
|
|
2344
2588
|
"a",
|
|
2345
2589
|
{
|
|
2346
2590
|
key: idx,
|
|
@@ -2350,27 +2594,27 @@ var ManagedContactBlock = ({
|
|
|
2350
2594
|
className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black",
|
|
2351
2595
|
"aria-label": social.label
|
|
2352
2596
|
},
|
|
2353
|
-
/* @__PURE__ */
|
|
2354
|
-
/* @__PURE__ */
|
|
2597
|
+
/* @__PURE__ */ React28.createElement(HugeiconsIcon19, { icon: social.icon, size: 18 }),
|
|
2598
|
+
/* @__PURE__ */ React28.createElement("span", { className: "text-[13px]" }, social.label)
|
|
2355
2599
|
)))))))));
|
|
2356
2600
|
};
|
|
2357
2601
|
|
|
2358
2602
|
// src/components/ManagedPricingBlock.tsx
|
|
2359
|
-
import
|
|
2603
|
+
import React29, { useState as useState20, useEffect as useEffect15, useRef as useRef8 } from "react";
|
|
2360
2604
|
import Link6 from "next/link";
|
|
2361
|
-
import
|
|
2362
|
-
var CheckIcon = ({ className = "" }) => /* @__PURE__ */
|
|
2363
|
-
var CrossIcon = ({ className = "" }) => /* @__PURE__ */
|
|
2605
|
+
import Image5 from "next/image";
|
|
2606
|
+
var CheckIcon = ({ className = "" }) => /* @__PURE__ */ React29.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__ */ React29.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ React29.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
2607
|
+
var CrossIcon = ({ className = "" }) => /* @__PURE__ */ React29.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__ */ React29.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ React29.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
2364
2608
|
var ManagedPricingBlock = ({
|
|
2365
2609
|
tagline,
|
|
2366
2610
|
title,
|
|
2367
2611
|
plans = [],
|
|
2368
2612
|
tabs
|
|
2369
2613
|
}) => {
|
|
2370
|
-
const [isAnimating, setIsAnimating] =
|
|
2371
|
-
const [activeTabIndex, setActiveTabIndex] =
|
|
2614
|
+
const [isAnimating, setIsAnimating] = useState20(false);
|
|
2615
|
+
const [activeTabIndex, setActiveTabIndex] = useState20(0);
|
|
2372
2616
|
const titleRef = useRef8(null);
|
|
2373
|
-
|
|
2617
|
+
useEffect15(() => {
|
|
2374
2618
|
const observer = new IntersectionObserver(
|
|
2375
2619
|
([entry]) => {
|
|
2376
2620
|
if (entry.isIntersecting) {
|
|
@@ -2390,7 +2634,7 @@ var ManagedPricingBlock = ({
|
|
|
2390
2634
|
}, []);
|
|
2391
2635
|
const hasTabs = tabs && tabs.length > 0;
|
|
2392
2636
|
const currentPlans = hasTabs ? tabs[activeTabIndex].plans : plans;
|
|
2393
|
-
return /* @__PURE__ */
|
|
2637
|
+
return /* @__PURE__ */ React29.createElement("div", { className: "grow pt-10 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React29.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col items-center" }, /* @__PURE__ */ React29.createElement("div", { className: "w-full flex flex-col items-center text-center mb-10 sm:mb-12" }, tagline && /* @__PURE__ */ React29.createElement("span", { className: "text-[9px] tracking-[0.4em] text-black block " }, tagline), /* @__PURE__ */ React29.createElement(
|
|
2394
2638
|
"h1",
|
|
2395
2639
|
{
|
|
2396
2640
|
ref: titleRef,
|
|
@@ -2398,9 +2642,9 @@ var ManagedPricingBlock = ({
|
|
|
2398
2642
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2399
2643
|
},
|
|
2400
2644
|
title
|
|
2401
|
-
)), hasTabs && /* @__PURE__ */
|
|
2645
|
+
)), hasTabs && /* @__PURE__ */ React29.createElement("div", { className: "flex items-center justify-center mb-8 sm:mb-10 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ React29.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) => {
|
|
2402
2646
|
const isActive = activeTabIndex === idx;
|
|
2403
|
-
return /* @__PURE__ */
|
|
2647
|
+
return /* @__PURE__ */ React29.createElement(
|
|
2404
2648
|
"button",
|
|
2405
2649
|
{
|
|
2406
2650
|
key: idx,
|
|
@@ -2409,20 +2653,20 @@ var ManagedPricingBlock = ({
|
|
|
2409
2653
|
},
|
|
2410
2654
|
tab.label
|
|
2411
2655
|
);
|
|
2412
|
-
}))), /* @__PURE__ */
|
|
2656
|
+
}))), /* @__PURE__ */ React29.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__ */ React29.createElement(
|
|
2413
2657
|
"div",
|
|
2414
2658
|
{
|
|
2415
2659
|
key: `${activeTabIndex}-${planIdx}`,
|
|
2416
2660
|
className: `bg-white rounded-3xl p-6 flex flex-col relative overflow-hidden transition-all duration-300 ${plan.isPremium ? "" : ""}`
|
|
2417
2661
|
},
|
|
2418
|
-
/* @__PURE__ */
|
|
2662
|
+
/* @__PURE__ */ React29.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React29.createElement("span", { className: "text-black text-base block mb-1" }, plan.name), /* @__PURE__ */ React29.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ React29.createElement("h3", { className: "text-3xl font-light text-black" }, plan.price), plan.period && /* @__PURE__ */ React29.createElement("span", { className: "text-xs text-neutral-500" }, plan.period)), /* @__PURE__ */ React29.createElement("p", { className: "text-xs text-neutral-500 mt-2 min-h-8" }, plan.description), plan.showApps && plan.appLogos && plan.appLogos.length > 0 && /* @__PURE__ */ React29.createElement("div", { className: "flex items-center gap-2 mt-4" }, plan.appLogos.map((logo, logoIdx) => /* @__PURE__ */ React29.createElement(
|
|
2419
2663
|
"div",
|
|
2420
2664
|
{
|
|
2421
2665
|
key: logoIdx,
|
|
2422
2666
|
className: "relative w-5 h-5 overflow-hidden flex items-center justify-center shrink-0"
|
|
2423
2667
|
},
|
|
2424
|
-
/* @__PURE__ */
|
|
2425
|
-
|
|
2668
|
+
/* @__PURE__ */ React29.createElement(
|
|
2669
|
+
Image5,
|
|
2426
2670
|
{
|
|
2427
2671
|
src: logo.src,
|
|
2428
2672
|
alt: logo.alt,
|
|
@@ -2432,7 +2676,7 @@ var ManagedPricingBlock = ({
|
|
|
2432
2676
|
}
|
|
2433
2677
|
)
|
|
2434
2678
|
)))),
|
|
2435
|
-
plan.isPremium ? /* @__PURE__ */
|
|
2679
|
+
plan.isPremium ? /* @__PURE__ */ React29.createElement(ThreeDButton, { href: plan.ctaHref, className: "mb-6 w-full" }, plan.ctaText) : /* @__PURE__ */ React29.createElement(
|
|
2436
2680
|
Link6,
|
|
2437
2681
|
{
|
|
2438
2682
|
href: plan.ctaHref,
|
|
@@ -2440,20 +2684,20 @@ var ManagedPricingBlock = ({
|
|
|
2440
2684
|
},
|
|
2441
2685
|
plan.ctaText
|
|
2442
2686
|
),
|
|
2443
|
-
/* @__PURE__ */
|
|
2687
|
+
/* @__PURE__ */ React29.createElement("div", { className: "flex flex-col gap-3" }, plan.features.map((feature, featureIdx) => {
|
|
2444
2688
|
const isAvailable = feature.value !== false;
|
|
2445
2689
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
2446
|
-
return /* @__PURE__ */
|
|
2690
|
+
return /* @__PURE__ */ React29.createElement("div", { key: featureIdx, className: "flex items-center gap-2.5" }, isAvailable ? /* @__PURE__ */ React29.createElement(CheckIcon, null) : /* @__PURE__ */ React29.createElement(CrossIcon, null), /* @__PURE__ */ React29.createElement("span", { className: `text-xs truncate ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ React29.createElement("span", { className: "text-neutral-500 ml-1" }, "(", valueText, ")")));
|
|
2447
2691
|
}))
|
|
2448
2692
|
)))));
|
|
2449
2693
|
};
|
|
2450
2694
|
|
|
2451
2695
|
// src/components/ManagedBoardBlock.tsx
|
|
2452
|
-
import
|
|
2453
|
-
import
|
|
2454
|
-
import { HugeiconsIcon as
|
|
2696
|
+
import React30 from "react";
|
|
2697
|
+
import Image6 from "next/image";
|
|
2698
|
+
import { HugeiconsIcon as HugeiconsIcon20 } from "@hugeicons/react";
|
|
2455
2699
|
import { TwitterIcon, LinkedinIcon } from "@hugeicons/core-free-icons";
|
|
2456
|
-
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */
|
|
2700
|
+
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ React30.createElement(
|
|
2457
2701
|
"a",
|
|
2458
2702
|
{
|
|
2459
2703
|
href,
|
|
@@ -2462,7 +2706,7 @@ var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ React28.
|
|
|
2462
2706
|
className: "text-neutral-400 hover:text-black transition-colors",
|
|
2463
2707
|
"aria-label": `${name} on ${label}`
|
|
2464
2708
|
},
|
|
2465
|
-
/* @__PURE__ */
|
|
2709
|
+
/* @__PURE__ */ React30.createElement(HugeiconsIcon20, { icon, size: 16 })
|
|
2466
2710
|
);
|
|
2467
2711
|
var ManagedBoardBlock = ({
|
|
2468
2712
|
tagline,
|
|
@@ -2471,7 +2715,7 @@ var ManagedBoardBlock = ({
|
|
|
2471
2715
|
contactText,
|
|
2472
2716
|
contactEmail
|
|
2473
2717
|
}) => {
|
|
2474
|
-
return /* @__PURE__ */
|
|
2718
|
+
return /* @__PURE__ */ React30.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React30.createElement("div", { className: "relative w-full mx-auto overflow-hidden max-w-7xl" }, /* @__PURE__ */ React30.createElement(
|
|
2475
2719
|
"div",
|
|
2476
2720
|
{
|
|
2477
2721
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2480,8 +2724,8 @@ var ManagedBoardBlock = ({
|
|
|
2480
2724
|
backgroundRepeat: "repeat"
|
|
2481
2725
|
}
|
|
2482
2726
|
}
|
|
2483
|
-
), /* @__PURE__ */
|
|
2484
|
-
|
|
2727
|
+
), /* @__PURE__ */ React30.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React30.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ React30.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React30.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ React30.createElement("div", { className: "relative px-5 md:px-12 py-4 md:py-8" }, /* @__PURE__ */ React30.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__ */ React30.createElement("div", { key: idx, className: "relative p-6 md:p-8 rounded-2xl bg-white flex flex-col transition-all group" }, /* @__PURE__ */ React30.createElement("div", { className: "flex items-start space-x-4 md:space-x-5 mb-5 md:mb-6" }, /* @__PURE__ */ React30.createElement("div", { className: "relative w-14 h-14 md:w-16 md:h-16 shrink-0 bg-white overflow-hidden rounded-xl" }, /* @__PURE__ */ React30.createElement(
|
|
2728
|
+
Image6,
|
|
2485
2729
|
{
|
|
2486
2730
|
src: member.imageSrc,
|
|
2487
2731
|
alt: member.name,
|
|
@@ -2489,7 +2733,7 @@ var ManagedBoardBlock = ({
|
|
|
2489
2733
|
sizes: "(max-width: 768px) 56px, 64px",
|
|
2490
2734
|
className: "object-cover grayscale opacity-100 transition-opacity"
|
|
2491
2735
|
}
|
|
2492
|
-
)), /* @__PURE__ */
|
|
2736
|
+
)), /* @__PURE__ */ React30.createElement("div", { className: "pt-1" }, /* @__PURE__ */ React30.createElement("h3", { className: " text-[14px] md:text-[15px] text-black tracking-tight" }, member.name), /* @__PURE__ */ React30.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 mt-1.5 " }, member.title))), /* @__PURE__ */ React30.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 text-left grow mb-8" }, member.bio), /* @__PURE__ */ React30.createElement("div", { className: "space-y-6 mt-auto" }, /* @__PURE__ */ React30.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ React30.createElement(ThreeDButton, { href: member.website }, "Visit Website")), /* @__PURE__ */ React30.createElement("div", { className: "flex space-x-4 pt-5" }, member.twitterHandle && member.twitterHandle.length > 0 && /* @__PURE__ */ React30.createElement(
|
|
2493
2737
|
MemberSocialLink,
|
|
2494
2738
|
{
|
|
2495
2739
|
href: `https://x.com/${member.twitterHandle}`,
|
|
@@ -2497,7 +2741,7 @@ var ManagedBoardBlock = ({
|
|
|
2497
2741
|
label: "X",
|
|
2498
2742
|
name: member.name
|
|
2499
2743
|
}
|
|
2500
|
-
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */
|
|
2744
|
+
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */ React30.createElement(
|
|
2501
2745
|
MemberSocialLink,
|
|
2502
2746
|
{
|
|
2503
2747
|
href: member.linkedinHandle,
|
|
@@ -2505,29 +2749,29 @@ var ManagedBoardBlock = ({
|
|
|
2505
2749
|
label: "LinkedIn",
|
|
2506
2750
|
name: member.name
|
|
2507
2751
|
}
|
|
2508
|
-
))))))), (contactText || contactEmail) && /* @__PURE__ */
|
|
2752
|
+
))))))), (contactText || contactEmail) && /* @__PURE__ */ React30.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ React30.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ React30.createElement("a", { href: `mailto:${contactEmail}`, className: "text-black decoration-black decoration-2 underline-offset-4 ml-1 transition-colors" }, contactEmail))))));
|
|
2509
2753
|
};
|
|
2510
2754
|
|
|
2511
2755
|
// src/components/ManagedNotFoundBlock.tsx
|
|
2512
|
-
import
|
|
2756
|
+
import React31 from "react";
|
|
2513
2757
|
var ManagedNotFoundBlock = ({
|
|
2514
2758
|
title = "404 - Page Not Found",
|
|
2515
2759
|
description = "The page you are looking for does not exist or has been moved."
|
|
2516
2760
|
}) => {
|
|
2517
|
-
return /* @__PURE__ */
|
|
2761
|
+
return /* @__PURE__ */ React31.createElement("main", { className: "min-h-screen flex items-center justify-center relative z-20 bg-transparent" }, /* @__PURE__ */ React31.createElement("div", { className: "p-6 w-full max-w-md mx-auto text-center" }, /* @__PURE__ */ React31.createElement("div", { className: "mb-8 flex justify-center" }, /* @__PURE__ */ React31.createElement(
|
|
2518
2762
|
"svg",
|
|
2519
2763
|
{
|
|
2520
2764
|
xmlns: "http://www.w3.org/2000/svg",
|
|
2521
2765
|
viewBox: "0 0 24 24",
|
|
2522
2766
|
className: "w-12 h-12 fill-neutral-100"
|
|
2523
2767
|
},
|
|
2524
|
-
/* @__PURE__ */
|
|
2525
|
-
)), /* @__PURE__ */
|
|
2768
|
+
/* @__PURE__ */ React31.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" })
|
|
2769
|
+
)), /* @__PURE__ */ React31.createElement("h1", { className: " text-xl md:text-3xl text-black tracking-tight mb-4" }, title), /* @__PURE__ */ React31.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-12" }, description)));
|
|
2526
2770
|
};
|
|
2527
2771
|
|
|
2528
2772
|
// src/components/ManagedNewsletterSplitBlock.tsx
|
|
2529
|
-
import
|
|
2530
|
-
import
|
|
2773
|
+
import React32 from "react";
|
|
2774
|
+
import Image7 from "next/image";
|
|
2531
2775
|
var ManagedNewsletterSplitBlock = ({
|
|
2532
2776
|
tagline,
|
|
2533
2777
|
title,
|
|
@@ -2540,8 +2784,8 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2540
2784
|
ctaHref = "/contact",
|
|
2541
2785
|
children
|
|
2542
2786
|
}) => {
|
|
2543
|
-
return /* @__PURE__ */
|
|
2544
|
-
|
|
2787
|
+
return /* @__PURE__ */ React32.createElement("div", { className: "grow flex flex-col md:flex-row relative w-full pt-32 md:pt-0" }, /* @__PURE__ */ React32.createElement("div", { className: "hidden md:block md:w-1/2 relative min-h-screen overflow-hidden" }, /* @__PURE__ */ React32.createElement(
|
|
2788
|
+
Image7,
|
|
2545
2789
|
{
|
|
2546
2790
|
src: imageSrc,
|
|
2547
2791
|
alt: imageAlt,
|
|
@@ -2550,7 +2794,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2550
2794
|
className: "object-cover object-top grayscale opacity-60",
|
|
2551
2795
|
quality: 100
|
|
2552
2796
|
}
|
|
2553
|
-
), /* @__PURE__ */
|
|
2797
|
+
), /* @__PURE__ */ React32.createElement(
|
|
2554
2798
|
"div",
|
|
2555
2799
|
{
|
|
2556
2800
|
className: "absolute inset-0 z-10 pointer-events-none",
|
|
@@ -2558,7 +2802,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2558
2802
|
background: "linear-gradient(to right, rgba(255,255,255,0) 30%, #ffffff 100%)"
|
|
2559
2803
|
}
|
|
2560
2804
|
}
|
|
2561
|
-
), /* @__PURE__ */
|
|
2805
|
+
), /* @__PURE__ */ React32.createElement(
|
|
2562
2806
|
"div",
|
|
2563
2807
|
{
|
|
2564
2808
|
className: "absolute inset-x-0 bottom-0 h-40 z-10 pointer-events-none",
|
|
@@ -2566,7 +2810,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2566
2810
|
background: "linear-gradient(to bottom, rgba(255,255,255,0) 0%, #ffffff 100%)"
|
|
2567
2811
|
}
|
|
2568
2812
|
}
|
|
2569
|
-
)), /* @__PURE__ */
|
|
2813
|
+
)), /* @__PURE__ */ React32.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__ */ React32.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__ */ React32.createElement(
|
|
2570
2814
|
"div",
|
|
2571
2815
|
{
|
|
2572
2816
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2575,7 +2819,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2575
2819
|
backgroundRepeat: "repeat"
|
|
2576
2820
|
}
|
|
2577
2821
|
}
|
|
2578
|
-
), /* @__PURE__ */
|
|
2822
|
+
), /* @__PURE__ */ React32.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React32.createElement("div", { className: "mb-10 border-b border-neutral-100 pb-8 text-center md:text-left" }, tagline && /* @__PURE__ */ React32.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 " }, tagline), /* @__PURE__ */ React32.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight mb-4" }, title), subtitle && /* @__PURE__ */ React32.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, subtitle)), /* @__PURE__ */ React32.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-10 text-center md:text-left" }, description), children && /* @__PURE__ */ React32.createElement("div", { className: "mb-8 text-left" }, children), /* @__PURE__ */ React32.createElement("div", { className: "text-center md:text-left mt-10 space-y-6" }, dividerText && /* @__PURE__ */ React32.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React32.createElement("div", { className: "grow h-px bg-neutral-100" }), /* @__PURE__ */ React32.createElement("span", { className: "shrink mx-4 text-[11px] tracking-[0.2em] text-neutral-400 " }, dividerText), /* @__PURE__ */ React32.createElement("div", { className: "grow h-px bg-neutral-100" })), ctaText && ctaHref && /* @__PURE__ */ React32.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ React32.createElement(
|
|
2579
2823
|
ThreeDButton,
|
|
2580
2824
|
{
|
|
2581
2825
|
href: ctaHref,
|
|
@@ -2586,14 +2830,14 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2586
2830
|
};
|
|
2587
2831
|
|
|
2588
2832
|
// src/components/PortfolioHero.tsx
|
|
2589
|
-
import
|
|
2833
|
+
import React33, { useEffect as useEffect16, useRef as useRef9 } from "react";
|
|
2590
2834
|
import Link7 from "next/link";
|
|
2591
|
-
import
|
|
2592
|
-
import { HugeiconsIcon as
|
|
2835
|
+
import Image8 from "next/image";
|
|
2836
|
+
import { HugeiconsIcon as HugeiconsIcon21 } from "@hugeicons/react";
|
|
2593
2837
|
import { ArrowRight01Icon as ArrowRight01Icon5 } from "@hugeicons/core-free-icons";
|
|
2594
2838
|
var useScrollAnimation = () => {
|
|
2595
2839
|
const elementRef = useRef9(null);
|
|
2596
|
-
|
|
2840
|
+
useEffect16(() => {
|
|
2597
2841
|
const el = elementRef.current;
|
|
2598
2842
|
if (!el) return;
|
|
2599
2843
|
const observer = new IntersectionObserver(
|
|
@@ -2629,14 +2873,14 @@ var PortfolioHero = ({
|
|
|
2629
2873
|
secondaryCtaHref
|
|
2630
2874
|
}) => {
|
|
2631
2875
|
const heroContentRef = useScrollAnimation();
|
|
2632
|
-
return /* @__PURE__ */
|
|
2876
|
+
return /* @__PURE__ */ React33.createElement("section", { className: "pt-8 pb-16 px-6 md:px-12 flex flex-col relative overflow-hidden z-10 w-full" }, /* @__PURE__ */ React33.createElement(
|
|
2633
2877
|
"div",
|
|
2634
2878
|
{
|
|
2635
2879
|
ref: heroContentRef,
|
|
2636
2880
|
className: "w-full opacity-0 translate-y-5 transition-all duration-1000 ease-out relative z-10"
|
|
2637
2881
|
},
|
|
2638
|
-
/* @__PURE__ */
|
|
2639
|
-
|
|
2882
|
+
/* @__PURE__ */ React33.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-5 sm:gap-8 mb-10" }, /* @__PURE__ */ React33.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__ */ React33.createElement(
|
|
2883
|
+
Image8,
|
|
2640
2884
|
{
|
|
2641
2885
|
src: imageSrc,
|
|
2642
2886
|
alt: imageAlt,
|
|
@@ -2646,7 +2890,7 @@ var PortfolioHero = ({
|
|
|
2646
2890
|
sizes: "(max-width: 640px) 80px, 128px",
|
|
2647
2891
|
quality: 100
|
|
2648
2892
|
}
|
|
2649
|
-
)), /* @__PURE__ */
|
|
2893
|
+
)), /* @__PURE__ */ React33.createElement("div", { className: "flex flex-col text-left" }, /* @__PURE__ */ React33.createElement("h1", { className: " text-3xl sm:text-5xl lg:text-6xl tracking-tight text-black leading-none mb-3" }, name), socialLabel && /* @__PURE__ */ React33.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, socialLabel), socialLinkText && socialLinkHref && /* @__PURE__ */ React33.createElement(
|
|
2650
2894
|
"a",
|
|
2651
2895
|
{
|
|
2652
2896
|
href: socialLinkHref,
|
|
@@ -2656,31 +2900,31 @@ var PortfolioHero = ({
|
|
|
2656
2900
|
},
|
|
2657
2901
|
socialLinkText
|
|
2658
2902
|
))),
|
|
2659
|
-
/* @__PURE__ */
|
|
2660
|
-
/* @__PURE__ */
|
|
2903
|
+
/* @__PURE__ */ React33.createElement("p", { className: "text-[13px] leading-[1.8] max-w-4xl mb-12 text-neutral-600" }, bio),
|
|
2904
|
+
/* @__PURE__ */ React33.createElement("div", { className: "flex flex-col sm:flex-row gap-4 w-full sm:w-auto" }, primaryCtaText && primaryCtaHref && /* @__PURE__ */ React33.createElement("div", { className: "w-full sm:w-auto *:w-full" }, /* @__PURE__ */ React33.createElement(
|
|
2661
2905
|
ThreeDButton,
|
|
2662
2906
|
{
|
|
2663
2907
|
href: primaryCtaHref,
|
|
2664
2908
|
className: "py-3 tracking-widest text-[11px]"
|
|
2665
2909
|
},
|
|
2666
2910
|
primaryCtaText
|
|
2667
|
-
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
2911
|
+
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ React33.createElement(
|
|
2668
2912
|
Link7,
|
|
2669
2913
|
{
|
|
2670
2914
|
href: secondaryCtaHref,
|
|
2671
2915
|
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"
|
|
2672
2916
|
},
|
|
2673
2917
|
secondaryCtaText,
|
|
2674
|
-
/* @__PURE__ */
|
|
2918
|
+
/* @__PURE__ */ React33.createElement(HugeiconsIcon21, { icon: ArrowRight01Icon5, size: 16 })
|
|
2675
2919
|
))
|
|
2676
2920
|
));
|
|
2677
2921
|
};
|
|
2678
2922
|
|
|
2679
2923
|
// src/components/GifFeatureCard.tsx
|
|
2680
|
-
import
|
|
2681
|
-
import
|
|
2682
|
-
import { HugeiconsIcon as
|
|
2683
|
-
import { Loading03Icon as
|
|
2924
|
+
import React34, { useState as useState21 } from "react";
|
|
2925
|
+
import Image9 from "next/image";
|
|
2926
|
+
import { HugeiconsIcon as HugeiconsIcon22 } from "@hugeicons/react";
|
|
2927
|
+
import { Loading03Icon as Loading03Icon11 } from "@hugeicons/core-free-icons";
|
|
2684
2928
|
var GifFeatureCard = ({
|
|
2685
2929
|
gifSrc,
|
|
2686
2930
|
title,
|
|
@@ -2688,21 +2932,21 @@ var GifFeatureCard = ({
|
|
|
2688
2932
|
alt = "Feature animation",
|
|
2689
2933
|
className = "aspect-video"
|
|
2690
2934
|
}) => {
|
|
2691
|
-
const [isLoading, setIsLoading] =
|
|
2692
|
-
return /* @__PURE__ */
|
|
2693
|
-
|
|
2935
|
+
const [isLoading, setIsLoading] = useState21(true);
|
|
2936
|
+
return /* @__PURE__ */ React34.createElement("div", { className: `relative w-full bg-black overflow-hidden shadow-2xl ${className}` }, isLoading && /* @__PURE__ */ React34.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-black" }, /* @__PURE__ */ React34.createElement(
|
|
2937
|
+
HugeiconsIcon22,
|
|
2694
2938
|
{
|
|
2695
|
-
icon:
|
|
2939
|
+
icon: Loading03Icon11,
|
|
2696
2940
|
size: 32,
|
|
2697
2941
|
className: "animate-spin text-white"
|
|
2698
2942
|
}
|
|
2699
|
-
)), /* @__PURE__ */
|
|
2943
|
+
)), /* @__PURE__ */ React34.createElement(
|
|
2700
2944
|
"div",
|
|
2701
2945
|
{
|
|
2702
2946
|
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"}`
|
|
2703
2947
|
},
|
|
2704
|
-
/* @__PURE__ */
|
|
2705
|
-
|
|
2948
|
+
/* @__PURE__ */ React34.createElement(
|
|
2949
|
+
Image9,
|
|
2706
2950
|
{
|
|
2707
2951
|
src: gifSrc,
|
|
2708
2952
|
alt,
|
|
@@ -2712,17 +2956,17 @@ var GifFeatureCard = ({
|
|
|
2712
2956
|
className: "object-cover object-center pointer-events-none"
|
|
2713
2957
|
}
|
|
2714
2958
|
)
|
|
2715
|
-
), /* @__PURE__ */
|
|
2959
|
+
), /* @__PURE__ */ React34.createElement(
|
|
2716
2960
|
"div",
|
|
2717
2961
|
{
|
|
2718
2962
|
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"
|
|
2719
2963
|
}
|
|
2720
|
-
), /* @__PURE__ */
|
|
2964
|
+
), /* @__PURE__ */ React34.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__ */ React34.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__ */ React34.createElement("p", { className: "text-[13px] sm:text-[15px] leading-relaxed text-neutral-300 max-w-2xl drop-shadow-sm" }, subtitle)));
|
|
2721
2965
|
};
|
|
2722
2966
|
|
|
2723
2967
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
2724
|
-
import
|
|
2725
|
-
import
|
|
2968
|
+
import React35, { useState as useState22, useEffect as useEffect17, useRef as useRef10 } from "react";
|
|
2969
|
+
import Image10 from "next/image";
|
|
2726
2970
|
var MedicalFeatureStatsBlock = ({
|
|
2727
2971
|
bottomHeadline,
|
|
2728
2972
|
bottomDescription,
|
|
@@ -2730,9 +2974,9 @@ var MedicalFeatureStatsBlock = ({
|
|
|
2730
2974
|
trustText,
|
|
2731
2975
|
stats
|
|
2732
2976
|
}) => {
|
|
2733
|
-
const [isAnimating, setIsAnimating] =
|
|
2977
|
+
const [isAnimating, setIsAnimating] = useState22(false);
|
|
2734
2978
|
const titleRef = useRef10(null);
|
|
2735
|
-
|
|
2979
|
+
useEffect17(() => {
|
|
2736
2980
|
const observer = new IntersectionObserver(
|
|
2737
2981
|
([entry]) => {
|
|
2738
2982
|
if (entry.isIntersecting) {
|
|
@@ -2750,7 +2994,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
2750
2994
|
}
|
|
2751
2995
|
return () => observer.disconnect();
|
|
2752
2996
|
}, []);
|
|
2753
|
-
return /* @__PURE__ */
|
|
2997
|
+
return /* @__PURE__ */ React35.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ React35.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React35.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ React35.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ React35.createElement(
|
|
2754
2998
|
"h2",
|
|
2755
2999
|
{
|
|
2756
3000
|
ref: titleRef,
|
|
@@ -2758,8 +3002,8 @@ var MedicalFeatureStatsBlock = ({
|
|
|
2758
3002
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2759
3003
|
},
|
|
2760
3004
|
bottomHeadline
|
|
2761
|
-
), /* @__PURE__ */
|
|
2762
|
-
|
|
3005
|
+
), /* @__PURE__ */ React35.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ React35.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ React35.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ React35.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__ */ React35.createElement(
|
|
3006
|
+
Image10,
|
|
2763
3007
|
{
|
|
2764
3008
|
src,
|
|
2765
3009
|
alt: "Professional Avatar",
|
|
@@ -2767,18 +3011,18 @@ var MedicalFeatureStatsBlock = ({
|
|
|
2767
3011
|
sizes: "48px",
|
|
2768
3012
|
className: "object-cover"
|
|
2769
3013
|
}
|
|
2770
|
-
)))), /* @__PURE__ */
|
|
3014
|
+
)))), /* @__PURE__ */ React35.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ React35.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ React35.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ React35.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ React35.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ React35.createElement("h1", { className: "text-6xl gradient-text md:text-[80px] tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
|
|
2771
3015
|
};
|
|
2772
3016
|
|
|
2773
3017
|
// src/components/ConsultantShowcase.tsx
|
|
2774
|
-
import
|
|
2775
|
-
import
|
|
2776
|
-
import { HugeiconsIcon as
|
|
2777
|
-
import { Loading03Icon as
|
|
3018
|
+
import React36, { useState as useState23 } from "react";
|
|
3019
|
+
import Image11 from "next/image";
|
|
3020
|
+
import { HugeiconsIcon as HugeiconsIcon23 } from "@hugeicons/react";
|
|
3021
|
+
import { Loading03Icon as Loading03Icon12 } from "@hugeicons/core-free-icons";
|
|
2778
3022
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
2779
|
-
const [isLoading, setIsLoading] =
|
|
2780
|
-
return /* @__PURE__ */
|
|
2781
|
-
|
|
3023
|
+
const [isLoading, setIsLoading] = useState23(true);
|
|
3024
|
+
return /* @__PURE__ */ React36.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ React36.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__ */ React36.createElement(HugeiconsIcon23, { icon: Loading03Icon12, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ React36.createElement(
|
|
3025
|
+
Image11,
|
|
2782
3026
|
{
|
|
2783
3027
|
src,
|
|
2784
3028
|
alt,
|
|
@@ -2796,9 +3040,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
2796
3040
|
var ConsultantShowcase = ({
|
|
2797
3041
|
profiles
|
|
2798
3042
|
}) => {
|
|
2799
|
-
const [currentIndex, setCurrentIndex] =
|
|
2800
|
-
const [touchStart, setTouchStart] =
|
|
2801
|
-
const [touchEnd, setTouchEnd] =
|
|
3043
|
+
const [currentIndex, setCurrentIndex] = useState23(0);
|
|
3044
|
+
const [touchStart, setTouchStart] = useState23(null);
|
|
3045
|
+
const [touchEnd, setTouchEnd] = useState23(null);
|
|
2802
3046
|
const nextSlide = () => {
|
|
2803
3047
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
2804
3048
|
};
|
|
@@ -2823,7 +3067,7 @@ var ConsultantShowcase = ({
|
|
|
2823
3067
|
}
|
|
2824
3068
|
};
|
|
2825
3069
|
if (!profiles || profiles.length === 0) return null;
|
|
2826
|
-
return /* @__PURE__ */
|
|
3070
|
+
return /* @__PURE__ */ React36.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ React36.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React36.createElement(
|
|
2827
3071
|
"div",
|
|
2828
3072
|
{
|
|
2829
3073
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -2833,13 +3077,13 @@ var ConsultantShowcase = ({
|
|
|
2833
3077
|
},
|
|
2834
3078
|
profiles.map((profile, idx) => {
|
|
2835
3079
|
const isActive = idx === currentIndex;
|
|
2836
|
-
return /* @__PURE__ */
|
|
3080
|
+
return /* @__PURE__ */ React36.createElement(
|
|
2837
3081
|
"div",
|
|
2838
3082
|
{
|
|
2839
3083
|
key: profile.id,
|
|
2840
3084
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
2841
3085
|
},
|
|
2842
|
-
/* @__PURE__ */
|
|
3086
|
+
/* @__PURE__ */ React36.createElement(
|
|
2843
3087
|
ImageWithLoader,
|
|
2844
3088
|
{
|
|
2845
3089
|
src: profile.imageSrc,
|
|
@@ -2847,14 +3091,14 @@ var ConsultantShowcase = ({
|
|
|
2847
3091
|
priority: idx === 0
|
|
2848
3092
|
}
|
|
2849
3093
|
),
|
|
2850
|
-
/* @__PURE__ */
|
|
2851
|
-
/* @__PURE__ */
|
|
2852
|
-
/* @__PURE__ */
|
|
3094
|
+
/* @__PURE__ */ React36.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
3095
|
+
/* @__PURE__ */ React36.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" }),
|
|
3096
|
+
/* @__PURE__ */ React36.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__ */ React36.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ React36.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ React36.createElement("p", { className: "text-[15px] text-white/80 tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ React36.createElement("p", { className: "text-[15px] text-white/80 tracking-wide mt-1" }, profile.description)))
|
|
2853
3097
|
);
|
|
2854
3098
|
}),
|
|
2855
|
-
/* @__PURE__ */
|
|
2856
|
-
/* @__PURE__ */
|
|
2857
|
-
/* @__PURE__ */
|
|
3099
|
+
/* @__PURE__ */ React36.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" }),
|
|
3100
|
+
/* @__PURE__ */ React36.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" }),
|
|
3101
|
+
/* @__PURE__ */ React36.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__ */ React36.createElement(
|
|
2858
3102
|
"button",
|
|
2859
3103
|
{
|
|
2860
3104
|
key: idx,
|
|
@@ -2867,14 +3111,14 @@ var ConsultantShowcase = ({
|
|
|
2867
3111
|
};
|
|
2868
3112
|
|
|
2869
3113
|
// src/components/ContentGridBlock.tsx
|
|
2870
|
-
import
|
|
2871
|
-
import
|
|
2872
|
-
import { HugeiconsIcon as
|
|
2873
|
-
import { Loading03Icon as
|
|
3114
|
+
import React37, { useState as useState24 } from "react";
|
|
3115
|
+
import Image12 from "next/image";
|
|
3116
|
+
import { HugeiconsIcon as HugeiconsIcon24 } from "@hugeicons/react";
|
|
3117
|
+
import { Loading03Icon as Loading03Icon13 } from "@hugeicons/core-free-icons";
|
|
2874
3118
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
2875
|
-
const [isLoading, setIsLoading] =
|
|
2876
|
-
return /* @__PURE__ */
|
|
2877
|
-
|
|
3119
|
+
const [isLoading, setIsLoading] = useState24(true);
|
|
3120
|
+
return /* @__PURE__ */ React37.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ React37.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__ */ React37.createElement(HugeiconsIcon24, { icon: Loading03Icon13, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ React37.createElement(
|
|
3121
|
+
Image12,
|
|
2878
3122
|
{
|
|
2879
3123
|
src,
|
|
2880
3124
|
alt,
|
|
@@ -2895,30 +3139,30 @@ var ContentGridBlock = ({
|
|
|
2895
3139
|
middleBottomCard,
|
|
2896
3140
|
rightCards
|
|
2897
3141
|
}) => {
|
|
2898
|
-
return /* @__PURE__ */
|
|
3142
|
+
return /* @__PURE__ */ React37.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React37.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ React37.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ React37.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ React37.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ React37.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React37.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ React37.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ React37.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ React37.createElement("div", null, /* @__PURE__ */ React37.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ React37.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ React37.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React37.createElement(Image12, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React37.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ React37.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ React37.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ React37.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React37.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ React37.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ React37.createElement(Image12, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ React37.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ React37.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ React37.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__ */ React37.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ React37.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React37.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ React37.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ React37.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React37.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ React37.createElement("div", null, /* @__PURE__ */ React37.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ React37.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ React37.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React37.createElement(Image12, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ React37.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React37.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ React37.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ React37.createElement("div", { key: idx, className: "relative w-full h-80 text-white rounded-3xl overflow-hidden group" }, /* @__PURE__ */ React37.createElement(
|
|
2899
3143
|
ImageWithLoader2,
|
|
2900
3144
|
{
|
|
2901
3145
|
src: card.bgImageSrc,
|
|
2902
3146
|
alt: card.title,
|
|
2903
3147
|
className: "absolute inset-0 w-full h-full"
|
|
2904
3148
|
}
|
|
2905
|
-
), /* @__PURE__ */
|
|
3149
|
+
), /* @__PURE__ */ React37.createElement("div", { className: "absolute inset-0 z-20 pointer-events-none" }), /* @__PURE__ */ React37.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ React37.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ React37.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ React37.createElement("div", { className: "pt-3" }, /* @__PURE__ */ React37.createElement("h4", { className: "text-[15px] text-white tracking-wide" }, card.title), /* @__PURE__ */ React37.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
|
|
2906
3150
|
};
|
|
2907
3151
|
|
|
2908
3152
|
// src/components/ManagedProjectsBlock.tsx
|
|
2909
|
-
import
|
|
3153
|
+
import React38 from "react";
|
|
2910
3154
|
import Link8 from "next/link";
|
|
2911
3155
|
var GridSection = ({
|
|
2912
3156
|
children,
|
|
2913
3157
|
isLast = false,
|
|
2914
3158
|
className = "py-8 md:py-10"
|
|
2915
|
-
}) => /* @__PURE__ */
|
|
3159
|
+
}) => /* @__PURE__ */ React38.createElement("div", { className: `relative px-5 md:px-12 ${className} ${!isLast ? "" : ""}` }, children);
|
|
2916
3160
|
var ManagedProjectsBlock = ({
|
|
2917
3161
|
tagline,
|
|
2918
3162
|
title,
|
|
2919
3163
|
projects
|
|
2920
3164
|
}) => {
|
|
2921
|
-
return /* @__PURE__ */
|
|
3165
|
+
return /* @__PURE__ */ React38.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React38.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-5xl mx-auto overflow-hidden" }, /* @__PURE__ */ React38.createElement(
|
|
2922
3166
|
"div",
|
|
2923
3167
|
{
|
|
2924
3168
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2927,10 +3171,10 @@ var ManagedProjectsBlock = ({
|
|
|
2927
3171
|
backgroundRepeat: "repeat"
|
|
2928
3172
|
}
|
|
2929
3173
|
}
|
|
2930
|
-
), /* @__PURE__ */
|
|
3174
|
+
), /* @__PURE__ */ React38.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React38.createElement(GridSection, null, tagline && /* @__PURE__ */ React38.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React38.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), projects.map((project, index) => {
|
|
2931
3175
|
const isLast = index === projects.length - 1;
|
|
2932
|
-
const projectContent = /* @__PURE__ */
|
|
2933
|
-
return /* @__PURE__ */
|
|
3176
|
+
const projectContent = /* @__PURE__ */ React38.createElement("div", { className: "group block w-full" }, /* @__PURE__ */ React38.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__ */ React38.createElement("div", { className: "flex items-center gap-3 md:gap-4" }, /* @__PURE__ */ React38.createElement("h2", { className: " text-[16px] text-black transition-all flex items-center gap-2" }, project.title, /* @__PURE__ */ React38.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__ */ React38.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__ */ React38.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 shrink-0 " }, project.date)), /* @__PURE__ */ React38.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 max-w-4xl text-left transition-colors group-hover:text-black" }, project.description));
|
|
3177
|
+
return /* @__PURE__ */ React38.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__ */ React38.createElement("a", { href: project.link, target: "_blank", rel: "noopener noreferrer", className: "block outline-none" }, projectContent) : /* @__PURE__ */ React38.createElement(Link8, { href: project.link, className: "block outline-none" }, projectContent));
|
|
2934
3178
|
}))));
|
|
2935
3179
|
};
|
|
2936
3180
|
export {
|