@retinalabsllc/zairusjs 9.0.9 → 9.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +476 -237
- package/dist/index.mjs +486 -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, CancelCircleIcon as CancelCircleIcon4 } 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-2xl text-black mb-2 tracking-tight" }, title), /* @__PURE__ */ React19.createElement("p", { className: "text-center text-[13px] text-neutral-500 mb-6 tracking-tight" }, "Confirm your account pin to continue"), /* @__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 h-3 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-14 h-14 rounded-full flex items-center justify-center text-xl 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-14 h-14 rounded-full flex items-center justify-center text-xl 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-14 h-14 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: CancelCircleIcon4, size: 20 })
|
|
1719
|
+
))));
|
|
1720
|
+
};
|
|
1721
|
+
|
|
1722
|
+
// src/components/UniversalCardPage.tsx
|
|
1610
1723
|
var UniversalCardPage = ({
|
|
1611
1724
|
cardHolderName,
|
|
1612
1725
|
cardNumber,
|
|
@@ -1620,100 +1733,200 @@ 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("div", { className: "w-full pt-6 pb-2 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: 1985,
|
|
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 " }, /* @__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-10 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: "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 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
1841
|
)
|
|
1667
|
-
)), /* @__PURE__ */
|
|
1842
|
+
)), /* @__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
1843
|
MenuRow,
|
|
1669
1844
|
{
|
|
1670
|
-
icon:
|
|
1845
|
+
icon: ViewOffSlashIcon2,
|
|
1671
1846
|
title: "Reveal Information",
|
|
1672
1847
|
subtitle: "Show card informations",
|
|
1673
|
-
onClick:
|
|
1848
|
+
onClick: handleToggleReveal,
|
|
1849
|
+
isToggle: true,
|
|
1850
|
+
toggleState: isRevealed,
|
|
1851
|
+
toggleLoading: isRevealing
|
|
1674
1852
|
}
|
|
1675
|
-
), /* @__PURE__ */
|
|
1853
|
+
), /* @__PURE__ */ React20.createElement(
|
|
1676
1854
|
MenuRow,
|
|
1677
1855
|
{
|
|
1678
1856
|
icon: SnowIcon,
|
|
1679
1857
|
title: "Freeze",
|
|
1680
1858
|
subtitle: "Freeze & Unfreeze card",
|
|
1681
|
-
onClick:
|
|
1859
|
+
onClick: handleToggleFreeze,
|
|
1860
|
+
isToggle: true,
|
|
1861
|
+
toggleState: isFrozen,
|
|
1862
|
+
toggleLoading: isFreezing
|
|
1682
1863
|
}
|
|
1683
|
-
), /* @__PURE__ */
|
|
1864
|
+
), /* @__PURE__ */ React20.createElement(
|
|
1684
1865
|
MenuRow,
|
|
1685
1866
|
{
|
|
1686
|
-
icon:
|
|
1867
|
+
icon: Dollar02Icon,
|
|
1687
1868
|
title: "Set Limits",
|
|
1688
1869
|
subtitle: "Set card limits",
|
|
1689
1870
|
onClick: onSetLimits,
|
|
1690
1871
|
isLast: true
|
|
1691
1872
|
}
|
|
1692
|
-
)), /* @__PURE__ */
|
|
1873
|
+
)), /* @__PURE__ */ React20.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React20.createElement(
|
|
1693
1874
|
MenuRow,
|
|
1694
1875
|
{
|
|
1695
1876
|
icon: Delete02Icon,
|
|
1696
1877
|
title: "Delete card",
|
|
1697
1878
|
subtitle: "Permanently delete card",
|
|
1698
|
-
onClick:
|
|
1879
|
+
onClick: () => setShowDeleteDialog(true),
|
|
1699
1880
|
isLast: true
|
|
1700
1881
|
}
|
|
1701
|
-
)))
|
|
1882
|
+
))), /* @__PURE__ */ React20.createElement(
|
|
1883
|
+
ConfirmationDialog,
|
|
1884
|
+
{
|
|
1885
|
+
isOpen: showDeleteDialog,
|
|
1886
|
+
title: "Delete Card",
|
|
1887
|
+
message: "Are you sure? The card will be permanently deleted from your account.",
|
|
1888
|
+
confirmText: "Delete",
|
|
1889
|
+
isDestructive: true,
|
|
1890
|
+
isProcessing: isDeleting,
|
|
1891
|
+
onClose: () => setShowDeleteDialog(false),
|
|
1892
|
+
onConfirm: confirmDelete
|
|
1893
|
+
}
|
|
1894
|
+
), /* @__PURE__ */ React20.createElement(
|
|
1895
|
+
PinDialerBottomSheet,
|
|
1896
|
+
{
|
|
1897
|
+
isOpen: showPinDialer,
|
|
1898
|
+
title: "Enter PIN to Reveal",
|
|
1899
|
+
isVerifying: isRevealing,
|
|
1900
|
+
onClose: () => setShowPinDialer(false),
|
|
1901
|
+
onComplete: handlePinComplete
|
|
1902
|
+
}
|
|
1903
|
+
));
|
|
1702
1904
|
};
|
|
1703
|
-
var MenuRow = ({
|
|
1905
|
+
var MenuRow = ({
|
|
1906
|
+
icon,
|
|
1907
|
+
title,
|
|
1908
|
+
subtitle,
|
|
1909
|
+
onClick,
|
|
1910
|
+
iconColor = "text-black",
|
|
1911
|
+
titleColor = "text-black",
|
|
1912
|
+
isLast = false,
|
|
1913
|
+
isToggle = false,
|
|
1914
|
+
toggleState = false,
|
|
1915
|
+
toggleLoading = false
|
|
1916
|
+
}) => /* @__PURE__ */ React20.createElement(
|
|
1704
1917
|
"div",
|
|
1705
1918
|
{
|
|
1706
1919
|
onClick,
|
|
1707
1920
|
className: `flex items-center p-3 cursor-pointer hover:bg-neutral-50 transition-colors ${!isLast ? "" : ""}`
|
|
1708
1921
|
},
|
|
1709
|
-
/* @__PURE__ */
|
|
1710
|
-
/* @__PURE__ */
|
|
1711
|
-
/* @__PURE__ */
|
|
1922
|
+
/* @__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 })),
|
|
1923
|
+
/* @__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)),
|
|
1924
|
+
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
1925
|
);
|
|
1713
1926
|
|
|
1714
1927
|
// src/components/UniversalProfilePage.tsx
|
|
1715
|
-
import
|
|
1716
|
-
import { HugeiconsIcon as
|
|
1928
|
+
import React21, { useState as useState13 } from "react";
|
|
1929
|
+
import { HugeiconsIcon as HugeiconsIcon15 } from "@hugeicons/react";
|
|
1717
1930
|
import {
|
|
1718
1931
|
UserIcon,
|
|
1719
1932
|
LockKeyIcon as LockKeyIcon2,
|
|
@@ -1723,7 +1936,8 @@ import {
|
|
|
1723
1936
|
Download04Icon,
|
|
1724
1937
|
Logout03Icon,
|
|
1725
1938
|
Delete02Icon as Delete02Icon2,
|
|
1726
|
-
ArrowRight01Icon as ArrowRight01Icon3
|
|
1939
|
+
ArrowRight01Icon as ArrowRight01Icon3,
|
|
1940
|
+
Loading03Icon as Loading03Icon9
|
|
1727
1941
|
} from "@hugeicons/core-free-icons";
|
|
1728
1942
|
var UniversalProfilePage = ({
|
|
1729
1943
|
avatarSrc,
|
|
@@ -1738,14 +1952,29 @@ var UniversalProfilePage = ({
|
|
|
1738
1952
|
onLogoutTap,
|
|
1739
1953
|
onDeleteTap
|
|
1740
1954
|
}) => {
|
|
1741
|
-
|
|
1955
|
+
const [isAvatarLoaded, setIsAvatarLoaded] = useState13(false);
|
|
1956
|
+
const [showLogoutDialog, setShowLogoutDialog] = useState13(false);
|
|
1957
|
+
const [isLoggingOut, setIsLoggingOut] = useState13(false);
|
|
1958
|
+
const handleConfirmLogout = async () => {
|
|
1959
|
+
setIsLoggingOut(true);
|
|
1960
|
+
try {
|
|
1961
|
+
if (onLogoutTap) {
|
|
1962
|
+
await onLogoutTap();
|
|
1963
|
+
}
|
|
1964
|
+
} finally {
|
|
1965
|
+
setIsLoggingOut(false);
|
|
1966
|
+
setShowLogoutDialog(false);
|
|
1967
|
+
}
|
|
1968
|
+
};
|
|
1969
|
+
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
1970
|
"img",
|
|
1743
1971
|
{
|
|
1744
1972
|
src: avatarSrc,
|
|
1745
1973
|
alt: "User Avatar",
|
|
1746
|
-
|
|
1974
|
+
onLoad: () => setIsAvatarLoaded(true),
|
|
1975
|
+
className: `w-full h-full object-cover transition-opacity duration-300 ${isAvatarLoaded ? "opacity-100" : "opacity-0"}`
|
|
1747
1976
|
}
|
|
1748
|
-
) : /* @__PURE__ */
|
|
1977
|
+
)) : /* @__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
1978
|
MenuRow2,
|
|
1750
1979
|
{
|
|
1751
1980
|
icon: UserIcon,
|
|
@@ -1753,7 +1982,7 @@ var UniversalProfilePage = ({
|
|
|
1753
1982
|
subtitle: "Your account details",
|
|
1754
1983
|
onClick: onAccountTap
|
|
1755
1984
|
}
|
|
1756
|
-
), /* @__PURE__ */
|
|
1985
|
+
), /* @__PURE__ */ React21.createElement(
|
|
1757
1986
|
MenuRow2,
|
|
1758
1987
|
{
|
|
1759
1988
|
icon: LockKeyIcon2,
|
|
@@ -1761,7 +1990,7 @@ var UniversalProfilePage = ({
|
|
|
1761
1990
|
subtitle: "2FA & authentication",
|
|
1762
1991
|
onClick: onSecurityTap
|
|
1763
1992
|
}
|
|
1764
|
-
), /* @__PURE__ */
|
|
1993
|
+
), /* @__PURE__ */ React21.createElement(
|
|
1765
1994
|
MenuRow2,
|
|
1766
1995
|
{
|
|
1767
1996
|
icon: Notification03Icon,
|
|
@@ -1769,7 +1998,7 @@ var UniversalProfilePage = ({
|
|
|
1769
1998
|
subtitle: "Manage notifications",
|
|
1770
1999
|
onClick: onNotificationsTap
|
|
1771
2000
|
}
|
|
1772
|
-
), /* @__PURE__ */
|
|
2001
|
+
), /* @__PURE__ */ React21.createElement(
|
|
1773
2002
|
MenuRow2,
|
|
1774
2003
|
{
|
|
1775
2004
|
icon: HelpCircleIcon,
|
|
@@ -1778,7 +2007,7 @@ var UniversalProfilePage = ({
|
|
|
1778
2007
|
onClick: onHelpTap,
|
|
1779
2008
|
isLast: true
|
|
1780
2009
|
}
|
|
1781
|
-
)), /* @__PURE__ */
|
|
2010
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React21.createElement(
|
|
1782
2011
|
MenuRow2,
|
|
1783
2012
|
{
|
|
1784
2013
|
icon: Shield01Icon,
|
|
@@ -1786,7 +2015,7 @@ var UniversalProfilePage = ({
|
|
|
1786
2015
|
subtitle: "Account Verifications",
|
|
1787
2016
|
onClick: onVerificationsTap
|
|
1788
2017
|
}
|
|
1789
|
-
), /* @__PURE__ */
|
|
2018
|
+
), /* @__PURE__ */ React21.createElement(
|
|
1790
2019
|
MenuRow2,
|
|
1791
2020
|
{
|
|
1792
2021
|
icon: Download04Icon,
|
|
@@ -1794,16 +2023,16 @@ var UniversalProfilePage = ({
|
|
|
1794
2023
|
subtitle: "Transfer your account",
|
|
1795
2024
|
onClick: onExportTap
|
|
1796
2025
|
}
|
|
1797
|
-
), /* @__PURE__ */
|
|
2026
|
+
), /* @__PURE__ */ React21.createElement(
|
|
1798
2027
|
MenuRow2,
|
|
1799
2028
|
{
|
|
1800
2029
|
icon: Logout03Icon,
|
|
1801
2030
|
title: "LogOut",
|
|
1802
2031
|
subtitle: "End your session",
|
|
1803
|
-
onClick:
|
|
2032
|
+
onClick: () => setShowLogoutDialog(true),
|
|
1804
2033
|
isLast: true
|
|
1805
2034
|
}
|
|
1806
|
-
)), /* @__PURE__ */
|
|
2035
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden mb-4" }, /* @__PURE__ */ React21.createElement(
|
|
1807
2036
|
MenuRow2,
|
|
1808
2037
|
{
|
|
1809
2038
|
icon: Delete02Icon2,
|
|
@@ -1812,30 +2041,42 @@ var UniversalProfilePage = ({
|
|
|
1812
2041
|
onClick: onDeleteTap,
|
|
1813
2042
|
isLast: true
|
|
1814
2043
|
}
|
|
1815
|
-
)))
|
|
2044
|
+
))), /* @__PURE__ */ React21.createElement(
|
|
2045
|
+
ConfirmationDialog,
|
|
2046
|
+
{
|
|
2047
|
+
isOpen: showLogoutDialog,
|
|
2048
|
+
title: "Secure Logout",
|
|
2049
|
+
message: "Are you sure you want to log out? You will need to authenticate to return.",
|
|
2050
|
+
confirmText: "Log Out",
|
|
2051
|
+
isDestructive: true,
|
|
2052
|
+
isProcessing: isLoggingOut,
|
|
2053
|
+
onClose: () => setShowLogoutDialog(false),
|
|
2054
|
+
onConfirm: handleConfirmLogout
|
|
2055
|
+
}
|
|
2056
|
+
));
|
|
1816
2057
|
};
|
|
1817
|
-
var MenuRow2 = ({ icon, title, subtitle, onClick, iconColor = "text-black", titleColor = "text-black", isLast = false }) => /* @__PURE__ */
|
|
2058
|
+
var MenuRow2 = ({ icon, title, subtitle, onClick, iconColor = "text-black", titleColor = "text-black", isLast = false }) => /* @__PURE__ */ React21.createElement(
|
|
1818
2059
|
"div",
|
|
1819
2060
|
{
|
|
1820
2061
|
onClick,
|
|
1821
2062
|
className: `flex items-center p-4 cursor-pointer hover:bg-neutral-50 transition-colors ${!isLast ? "" : ""}`
|
|
1822
2063
|
},
|
|
1823
|
-
/* @__PURE__ */
|
|
1824
|
-
/* @__PURE__ */
|
|
1825
|
-
/* @__PURE__ */
|
|
2064
|
+
/* @__PURE__ */ React21.createElement("div", { className: "w-9 h-9 rounded-full border border-neutral-200 flex items-center justify-center shrink-0 mr-4" }, /* @__PURE__ */ React21.createElement(HugeiconsIcon15, { icon, size: 16, className: iconColor })),
|
|
2065
|
+
/* @__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)),
|
|
2066
|
+
/* @__PURE__ */ React21.createElement(HugeiconsIcon15, { icon: ArrowRight01Icon3, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
1826
2067
|
);
|
|
1827
2068
|
|
|
1828
2069
|
// src/components/HeroSection.tsx
|
|
1829
|
-
import
|
|
2070
|
+
import React23, { useState as useState15, useEffect as useEffect10, useRef as useRef4 } from "react";
|
|
1830
2071
|
import Link5 from "next/link";
|
|
1831
|
-
import
|
|
2072
|
+
import Image3 from "next/image";
|
|
1832
2073
|
|
|
1833
2074
|
// src/components/WaitlistDialog.tsx
|
|
1834
|
-
import
|
|
2075
|
+
import React22, { useState as useState14 } from "react";
|
|
1835
2076
|
import { toast as toast6 } from "react-hot-toast";
|
|
1836
2077
|
var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
1837
|
-
const [email, setEmail] =
|
|
1838
|
-
const [isLoading, setIsLoading] =
|
|
2078
|
+
const [email, setEmail] = useState14("");
|
|
2079
|
+
const [isLoading, setIsLoading] = useState14(false);
|
|
1839
2080
|
if (!isOpen) return null;
|
|
1840
2081
|
const handleSubmit = async (e) => {
|
|
1841
2082
|
e.preventDefault();
|
|
@@ -1866,12 +2107,12 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
1866
2107
|
setIsLoading(false);
|
|
1867
2108
|
}
|
|
1868
2109
|
};
|
|
1869
|
-
return /* @__PURE__ */
|
|
2110
|
+
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
2111
|
"div",
|
|
1871
2112
|
{
|
|
1872
2113
|
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
2114
|
},
|
|
1874
|
-
/* @__PURE__ */
|
|
2115
|
+
/* @__PURE__ */ React22.createElement(
|
|
1875
2116
|
"button",
|
|
1876
2117
|
{
|
|
1877
2118
|
onClick: onClose,
|
|
@@ -1879,7 +2120,7 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
1879
2120
|
className: "absolute top-4 right-4 p-2 text-neutral-700 hover:text-neutral-400 transition-colors disabled:opacity-50 outline-none",
|
|
1880
2121
|
"aria-label": "Close dialog"
|
|
1881
2122
|
},
|
|
1882
|
-
/* @__PURE__ */
|
|
2123
|
+
/* @__PURE__ */ React22.createElement(
|
|
1883
2124
|
"svg",
|
|
1884
2125
|
{
|
|
1885
2126
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1892,11 +2133,11 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
1892
2133
|
strokeLinecap: "round",
|
|
1893
2134
|
strokeLinejoin: "round"
|
|
1894
2135
|
},
|
|
1895
|
-
/* @__PURE__ */
|
|
1896
|
-
/* @__PURE__ */
|
|
2136
|
+
/* @__PURE__ */ React22.createElement("path", { d: "M18 6 6 18" }),
|
|
2137
|
+
/* @__PURE__ */ React22.createElement("path", { d: "m6 6 12 12" })
|
|
1897
2138
|
)
|
|
1898
2139
|
),
|
|
1899
|
-
/* @__PURE__ */
|
|
2140
|
+
/* @__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
2141
|
TextInput,
|
|
1901
2142
|
{
|
|
1902
2143
|
label: "Email ID",
|
|
@@ -1906,7 +2147,7 @@ var WaitlistDialog = ({ isOpen, onClose }) => {
|
|
|
1906
2147
|
placeholder: "name@example.com",
|
|
1907
2148
|
disabled: isLoading
|
|
1908
2149
|
}
|
|
1909
|
-
), /* @__PURE__ */
|
|
2150
|
+
), /* @__PURE__ */ React22.createElement(
|
|
1910
2151
|
ThreeDActionButton,
|
|
1911
2152
|
{
|
|
1912
2153
|
type: "submit",
|
|
@@ -1939,10 +2180,10 @@ var HeroSection = ({
|
|
|
1939
2180
|
bgImageSrc,
|
|
1940
2181
|
isWaitlist = false
|
|
1941
2182
|
}) => {
|
|
1942
|
-
const [isAnimating, setIsAnimating] =
|
|
1943
|
-
const [isWaitlistOpen, setIsWaitlistOpen] =
|
|
2183
|
+
const [isAnimating, setIsAnimating] = useState15(false);
|
|
2184
|
+
const [isWaitlistOpen, setIsWaitlistOpen] = useState15(false);
|
|
1944
2185
|
const titleRef = useRef4(null);
|
|
1945
|
-
|
|
2186
|
+
useEffect10(() => {
|
|
1946
2187
|
const observer = new IntersectionObserver(
|
|
1947
2188
|
([entry]) => {
|
|
1948
2189
|
if (entry.isIntersecting) {
|
|
@@ -1964,7 +2205,7 @@ var HeroSection = ({
|
|
|
1964
2205
|
setIsWaitlistOpen(true);
|
|
1965
2206
|
}
|
|
1966
2207
|
};
|
|
1967
|
-
return /* @__PURE__ */
|
|
2208
|
+
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
2209
|
"video",
|
|
1969
2210
|
{
|
|
1970
2211
|
src: bgVideoSrc,
|
|
@@ -1975,8 +2216,8 @@ var HeroSection = ({
|
|
|
1975
2216
|
playsInline: true,
|
|
1976
2217
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
1977
2218
|
}
|
|
1978
|
-
) : bgImageSrc ? /* @__PURE__ */
|
|
1979
|
-
|
|
2219
|
+
) : bgImageSrc ? /* @__PURE__ */ React23.createElement(
|
|
2220
|
+
Image3,
|
|
1980
2221
|
{
|
|
1981
2222
|
src: bgImageSrc,
|
|
1982
2223
|
alt: "Hero Background",
|
|
@@ -1984,7 +2225,7 @@ var HeroSection = ({
|
|
|
1984
2225
|
priority: true,
|
|
1985
2226
|
className: "absolute inset-0 h-full w-full object-cover z-0"
|
|
1986
2227
|
}
|
|
1987
|
-
) : null, /* @__PURE__ */
|
|
2228
|
+
) : null, /* @__PURE__ */ React23.createElement(
|
|
1988
2229
|
"div",
|
|
1989
2230
|
{
|
|
1990
2231
|
className: "pointer-events-none absolute inset-0 z-10 opacity-[0.7] mix-blend-overlay",
|
|
@@ -1992,15 +2233,15 @@ var HeroSection = ({
|
|
|
1992
2233
|
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
2234
|
}
|
|
1994
2235
|
}
|
|
1995
|
-
), /* @__PURE__ */
|
|
2236
|
+
), /* @__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
2237
|
"h1",
|
|
1997
2238
|
{
|
|
1998
2239
|
ref: titleRef,
|
|
1999
2240
|
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
2241
|
},
|
|
2001
|
-
/* @__PURE__ */
|
|
2002
|
-
)), /* @__PURE__ */
|
|
2003
|
-
/* @__PURE__ */
|
|
2242
|
+
/* @__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" }, "*")))
|
|
2243
|
+
)), /* @__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!
|
|
2244
|
+
/* @__PURE__ */ React23.createElement(
|
|
2004
2245
|
Link5,
|
|
2005
2246
|
{
|
|
2006
2247
|
href: isWaitlist ? "#" : ctaHref || "#",
|
|
@@ -2008,16 +2249,16 @@ var HeroSection = ({
|
|
|
2008
2249
|
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
2250
|
},
|
|
2010
2251
|
ctaText,
|
|
2011
|
-
/* @__PURE__ */
|
|
2012
|
-
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
2252
|
+
/* @__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" })))
|
|
2253
|
+
), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ React23.createElement(
|
|
2013
2254
|
Link5,
|
|
2014
2255
|
{
|
|
2015
2256
|
href: secondaryCtaHref,
|
|
2016
2257
|
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
2258
|
},
|
|
2018
2259
|
secondaryCtaText
|
|
2019
|
-
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */
|
|
2020
|
-
|
|
2260
|
+
)), 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(
|
|
2261
|
+
Image3,
|
|
2021
2262
|
{
|
|
2022
2263
|
src: logo.src,
|
|
2023
2264
|
alt: logo.alt,
|
|
@@ -2025,7 +2266,7 @@ var HeroSection = ({
|
|
|
2025
2266
|
height: 28,
|
|
2026
2267
|
className: "object-contain"
|
|
2027
2268
|
}
|
|
2028
|
-
))))))))), /* @__PURE__ */
|
|
2269
|
+
))))))))), /* @__PURE__ */ React23.createElement(
|
|
2029
2270
|
WaitlistDialog,
|
|
2030
2271
|
{
|
|
2031
2272
|
isOpen: isWaitlistOpen,
|
|
@@ -2035,12 +2276,12 @@ var HeroSection = ({
|
|
|
2035
2276
|
};
|
|
2036
2277
|
|
|
2037
2278
|
// src/components/AppBento2.tsx
|
|
2038
|
-
import
|
|
2039
|
-
import { HugeiconsIcon as
|
|
2279
|
+
import React24, { useState as useState16, useEffect as useEffect11, useRef as useRef5 } from "react";
|
|
2280
|
+
import { HugeiconsIcon as HugeiconsIcon16 } from "@hugeicons/react";
|
|
2040
2281
|
var AppBento2 = ({ tagline, headline, features }) => {
|
|
2041
|
-
const [isAnimating, setIsAnimating] =
|
|
2282
|
+
const [isAnimating, setIsAnimating] = useState16(false);
|
|
2042
2283
|
const titleRef = useRef5(null);
|
|
2043
|
-
|
|
2284
|
+
useEffect11(() => {
|
|
2044
2285
|
const observer = new IntersectionObserver(
|
|
2045
2286
|
([entry]) => {
|
|
2046
2287
|
if (entry.isIntersecting) {
|
|
@@ -2058,7 +2299,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2058
2299
|
}
|
|
2059
2300
|
return () => observer.disconnect();
|
|
2060
2301
|
}, []);
|
|
2061
|
-
return /* @__PURE__ */
|
|
2302
|
+
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
2303
|
"h2",
|
|
2063
2304
|
{
|
|
2064
2305
|
ref: titleRef,
|
|
@@ -2066,7 +2307,7 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2066
2307
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2067
2308
|
},
|
|
2068
2309
|
headline
|
|
2069
|
-
))), /* @__PURE__ */
|
|
2310
|
+
))), /* @__PURE__ */ React24.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-6 gap-6" }, features.map((f, i) => {
|
|
2070
2311
|
const isWhite = i === 0;
|
|
2071
2312
|
const isBlack = i === 1;
|
|
2072
2313
|
const isNeutral = i === 2;
|
|
@@ -2088,37 +2329,37 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2088
2329
|
const textColor = isBlack ? "text-white" : "text-black";
|
|
2089
2330
|
const subTextColor = isBlack ? "text-neutral-300" : "text-neutral-600";
|
|
2090
2331
|
const labelColor = isBlack ? "text-neutral-400" : "text-neutral-500";
|
|
2091
|
-
return /* @__PURE__ */
|
|
2332
|
+
return /* @__PURE__ */ React24.createElement(
|
|
2092
2333
|
"div",
|
|
2093
2334
|
{
|
|
2094
2335
|
key: i,
|
|
2095
2336
|
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
2337
|
style: { boxShadow: getShadowStyle() }
|
|
2097
2338
|
},
|
|
2098
|
-
/* @__PURE__ */
|
|
2339
|
+
/* @__PURE__ */ React24.createElement(
|
|
2099
2340
|
"div",
|
|
2100
2341
|
{
|
|
2101
2342
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
2102
2343
|
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
2344
|
}
|
|
2104
2345
|
),
|
|
2105
|
-
isBlack && /* @__PURE__ */
|
|
2106
|
-
/* @__PURE__ */
|
|
2107
|
-
/* @__PURE__ */
|
|
2346
|
+
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" }),
|
|
2347
|
+
/* @__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 }))),
|
|
2348
|
+
/* @__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
2349
|
);
|
|
2109
2350
|
})))));
|
|
2110
2351
|
};
|
|
2111
2352
|
|
|
2112
2353
|
// src/components/FeatureScroll.tsx
|
|
2113
|
-
import
|
|
2114
|
-
import
|
|
2115
|
-
import { HugeiconsIcon as
|
|
2116
|
-
import { ArrowLeft01Icon as ArrowLeft01Icon2, ArrowRight01Icon as ArrowRight01Icon4, Loading03Icon as
|
|
2354
|
+
import React25, { useRef as useRef6, useState as useState17, useEffect as useEffect12 } from "react";
|
|
2355
|
+
import Image4 from "next/image";
|
|
2356
|
+
import { HugeiconsIcon as HugeiconsIcon17 } from "@hugeicons/react";
|
|
2357
|
+
import { ArrowLeft01Icon as ArrowLeft01Icon2, ArrowRight01Icon as ArrowRight01Icon4, Loading03Icon as Loading03Icon10 } from "@hugeicons/core-free-icons";
|
|
2117
2358
|
var FeatureCard = ({ feature, bgImage }) => {
|
|
2118
|
-
const [isBgLoading, setIsBgLoading] =
|
|
2119
|
-
const [isFgLoading, setIsFgLoading] =
|
|
2120
|
-
return /* @__PURE__ */
|
|
2121
|
-
|
|
2359
|
+
const [isBgLoading, setIsBgLoading] = useState17(true);
|
|
2360
|
+
const [isFgLoading, setIsFgLoading] = useState17(!!feature.image);
|
|
2361
|
+
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(
|
|
2362
|
+
Image4,
|
|
2122
2363
|
{
|
|
2123
2364
|
src: bgImage,
|
|
2124
2365
|
alt: "Card Background",
|
|
@@ -2130,7 +2371,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2130
2371
|
${isBgLoading ? "blur-xl scale-110" : "blur-0 scale-100"}
|
|
2131
2372
|
`
|
|
2132
2373
|
}
|
|
2133
|
-
), /* @__PURE__ */
|
|
2374
|
+
), /* @__PURE__ */ React25.createElement(
|
|
2134
2375
|
"div",
|
|
2135
2376
|
{
|
|
2136
2377
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.25] mix-blend-overlay",
|
|
@@ -2138,8 +2379,8 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2138
2379
|
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
2380
|
}
|
|
2140
2381
|
}
|
|
2141
|
-
), isFgLoading && feature.image && /* @__PURE__ */
|
|
2142
|
-
|
|
2382
|
+
), 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(
|
|
2383
|
+
Image4,
|
|
2143
2384
|
{
|
|
2144
2385
|
src: feature.image,
|
|
2145
2386
|
alt: feature.title,
|
|
@@ -2151,12 +2392,12 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2151
2392
|
${isFgLoading ? "opacity-0 blur-xl" : "opacity-100 blur-0"}
|
|
2152
2393
|
`
|
|
2153
2394
|
}
|
|
2154
|
-
))), /* @__PURE__ */
|
|
2395
|
+
))), /* @__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
2396
|
};
|
|
2156
2397
|
var FeatureScroll = ({ tagline, headline, features }) => {
|
|
2157
2398
|
const scrollRef = useRef6(null);
|
|
2158
|
-
const [canScrollLeft, setCanScrollLeft] =
|
|
2159
|
-
const [canScrollRight, setCanScrollRight] =
|
|
2399
|
+
const [canScrollLeft, setCanScrollLeft] = useState17(false);
|
|
2400
|
+
const [canScrollRight, setCanScrollRight] = useState17(true);
|
|
2160
2401
|
const checkScroll = () => {
|
|
2161
2402
|
if (scrollRef.current) {
|
|
2162
2403
|
const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;
|
|
@@ -2164,7 +2405,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2164
2405
|
setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 2);
|
|
2165
2406
|
}
|
|
2166
2407
|
};
|
|
2167
|
-
|
|
2408
|
+
useEffect12(() => {
|
|
2168
2409
|
checkScroll();
|
|
2169
2410
|
window.addEventListener("resize", checkScroll);
|
|
2170
2411
|
return () => window.removeEventListener("resize", checkScroll);
|
|
@@ -2180,7 +2421,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2180
2421
|
"https://retinalabs.company/assets/images/bg_6.avif",
|
|
2181
2422
|
"https://retinalabs.company/assets/images/bg_1.avif"
|
|
2182
2423
|
];
|
|
2183
|
-
return /* @__PURE__ */
|
|
2424
|
+
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
2425
|
"button",
|
|
2185
2426
|
{
|
|
2186
2427
|
onClick: () => scroll("left"),
|
|
@@ -2188,8 +2429,8 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2188
2429
|
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
2430
|
"aria-label": "Previous feature"
|
|
2190
2431
|
},
|
|
2191
|
-
/* @__PURE__ */
|
|
2192
|
-
), /* @__PURE__ */
|
|
2432
|
+
/* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon: ArrowLeft01Icon2, size: 20 })
|
|
2433
|
+
), /* @__PURE__ */ React25.createElement(
|
|
2193
2434
|
"button",
|
|
2194
2435
|
{
|
|
2195
2436
|
onClick: () => scroll("right"),
|
|
@@ -2197,57 +2438,57 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2197
2438
|
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
2439
|
"aria-label": "Next feature"
|
|
2199
2440
|
},
|
|
2200
|
-
/* @__PURE__ */
|
|
2201
|
-
))), /* @__PURE__ */
|
|
2441
|
+
/* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon: ArrowRight01Icon4, size: 20 })
|
|
2442
|
+
))), /* @__PURE__ */ React25.createElement(
|
|
2202
2443
|
"div",
|
|
2203
2444
|
{
|
|
2204
2445
|
ref: scrollRef,
|
|
2205
2446
|
onScroll: checkScroll,
|
|
2206
2447
|
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
2448
|
},
|
|
2208
|
-
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */
|
|
2209
|
-
), /* @__PURE__ */
|
|
2449
|
+
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */ React25.createElement(FeatureCard, { key: idx, feature, bgImage: bgImages[idx] }))
|
|
2450
|
+
), /* @__PURE__ */ React25.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ React25.createElement(
|
|
2210
2451
|
"button",
|
|
2211
2452
|
{
|
|
2212
2453
|
onClick: () => scroll("left"),
|
|
2213
2454
|
disabled: !canScrollLeft,
|
|
2214
2455
|
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
2456
|
},
|
|
2216
|
-
/* @__PURE__ */
|
|
2217
|
-
), /* @__PURE__ */
|
|
2457
|
+
/* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon: ArrowLeft01Icon2, size: 20 })
|
|
2458
|
+
), /* @__PURE__ */ React25.createElement(
|
|
2218
2459
|
"button",
|
|
2219
2460
|
{
|
|
2220
2461
|
onClick: () => scroll("right"),
|
|
2221
2462
|
disabled: !canScrollRight,
|
|
2222
2463
|
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
2464
|
},
|
|
2224
|
-
/* @__PURE__ */
|
|
2465
|
+
/* @__PURE__ */ React25.createElement(HugeiconsIcon17, { icon: ArrowRight01Icon4, size: 20 })
|
|
2225
2466
|
))));
|
|
2226
2467
|
};
|
|
2227
2468
|
|
|
2228
2469
|
// src/components/PlatformFeatures.tsx
|
|
2229
|
-
import
|
|
2230
|
-
import { HugeiconsIcon as
|
|
2470
|
+
import React26 from "react";
|
|
2471
|
+
import { HugeiconsIcon as HugeiconsIcon18 } from "@hugeicons/react";
|
|
2231
2472
|
var PlatformFeatures = ({
|
|
2232
2473
|
tagline,
|
|
2233
2474
|
headline,
|
|
2234
2475
|
description,
|
|
2235
2476
|
features
|
|
2236
2477
|
}) => {
|
|
2237
|
-
return /* @__PURE__ */
|
|
2478
|
+
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
2479
|
"div",
|
|
2239
2480
|
{
|
|
2240
2481
|
key: idx,
|
|
2241
2482
|
className: "flex flex-col group animate-in fade-in slide-in-from-bottom-4 duration-700 fill-mode-both",
|
|
2242
2483
|
style: { animationDelay: feature.delay || "0ms" }
|
|
2243
2484
|
},
|
|
2244
|
-
/* @__PURE__ */
|
|
2245
|
-
/* @__PURE__ */
|
|
2485
|
+
/* @__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))),
|
|
2486
|
+
/* @__PURE__ */ React26.createElement("div", null, /* @__PURE__ */ React26.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 pr-4" }, feature.desc))
|
|
2246
2487
|
)))));
|
|
2247
2488
|
};
|
|
2248
2489
|
|
|
2249
2490
|
// src/components/ManagedDocument.tsx
|
|
2250
|
-
import
|
|
2491
|
+
import React27, { useState as useState18, useEffect as useEffect13, useRef as useRef7 } from "react";
|
|
2251
2492
|
var ManagedDocument = ({
|
|
2252
2493
|
tagline,
|
|
2253
2494
|
title,
|
|
@@ -2255,9 +2496,9 @@ var ManagedDocument = ({
|
|
|
2255
2496
|
contactText,
|
|
2256
2497
|
contactEmail
|
|
2257
2498
|
}) => {
|
|
2258
|
-
const [isAnimating, setIsAnimating] =
|
|
2499
|
+
const [isAnimating, setIsAnimating] = useState18(false);
|
|
2259
2500
|
const titleRef = useRef7(null);
|
|
2260
|
-
|
|
2501
|
+
useEffect13(() => {
|
|
2261
2502
|
const observer = new IntersectionObserver(
|
|
2262
2503
|
([entry]) => {
|
|
2263
2504
|
if (entry.isIntersecting) {
|
|
@@ -2277,7 +2518,7 @@ var ManagedDocument = ({
|
|
|
2277
2518
|
}, []);
|
|
2278
2519
|
return (
|
|
2279
2520
|
// Outer layout wrapper (takes up available space, adds padding)
|
|
2280
|
-
/* @__PURE__ */
|
|
2521
|
+
/* @__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
2522
|
"h1",
|
|
2282
2523
|
{
|
|
2283
2524
|
ref: titleRef,
|
|
@@ -2285,7 +2526,7 @@ var ManagedDocument = ({
|
|
|
2285
2526
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2286
2527
|
},
|
|
2287
2528
|
title
|
|
2288
|
-
)), sections.map((section, index) => /* @__PURE__ */
|
|
2529
|
+
)), 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
2530
|
"a",
|
|
2290
2531
|
{
|
|
2291
2532
|
href: `mailto:${contactEmail}`,
|
|
@@ -2297,18 +2538,18 @@ var ManagedDocument = ({
|
|
|
2297
2538
|
};
|
|
2298
2539
|
|
|
2299
2540
|
// src/components/ManagedContactBlock.tsx
|
|
2300
|
-
import
|
|
2301
|
-
import { HugeiconsIcon as
|
|
2541
|
+
import React28, { useState as useState19, useEffect as useEffect14 } from "react";
|
|
2542
|
+
import { HugeiconsIcon as HugeiconsIcon19 } from "@hugeicons/react";
|
|
2302
2543
|
var SecureEmail = ({ user, domain, className }) => {
|
|
2303
|
-
const [isMounted, setIsMounted] =
|
|
2304
|
-
|
|
2544
|
+
const [isMounted, setIsMounted] = useState19(false);
|
|
2545
|
+
useEffect14(() => {
|
|
2305
2546
|
setIsMounted(true);
|
|
2306
2547
|
}, []);
|
|
2307
2548
|
if (!isMounted) {
|
|
2308
|
-
return /* @__PURE__ */
|
|
2549
|
+
return /* @__PURE__ */ React28.createElement("span", { className, style: { opacity: 0 } }, "Loading");
|
|
2309
2550
|
}
|
|
2310
2551
|
const email = `${user}@${domain}`;
|
|
2311
|
-
return /* @__PURE__ */
|
|
2552
|
+
return /* @__PURE__ */ React28.createElement("a", { href: `mailto:${email}`, className }, email);
|
|
2312
2553
|
};
|
|
2313
2554
|
var ManagedContactBlock = ({
|
|
2314
2555
|
tagline,
|
|
@@ -2317,7 +2558,7 @@ var ManagedContactBlock = ({
|
|
|
2317
2558
|
emails,
|
|
2318
2559
|
socials
|
|
2319
2560
|
}) => {
|
|
2320
|
-
return /* @__PURE__ */
|
|
2561
|
+
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
2562
|
"div",
|
|
2322
2563
|
{
|
|
2323
2564
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2326,21 +2567,21 @@ var ManagedContactBlock = ({
|
|
|
2326
2567
|
backgroundRepeat: "repeat"
|
|
2327
2568
|
}
|
|
2328
2569
|
}
|
|
2329
|
-
), /* @__PURE__ */
|
|
2570
|
+
), /* @__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
2571
|
"a",
|
|
2331
2572
|
{
|
|
2332
2573
|
href: `tel:${company.phone.replace(/\s+/g, "")}`,
|
|
2333
2574
|
className: "transition-colors hover:text-black"
|
|
2334
2575
|
},
|
|
2335
2576
|
company.phone
|
|
2336
|
-
)))), emails && emails.length > 0 && /* @__PURE__ */
|
|
2577
|
+
)))), 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
2578
|
SecureEmail,
|
|
2338
2579
|
{
|
|
2339
2580
|
user: email.user,
|
|
2340
2581
|
domain: email.domain,
|
|
2341
2582
|
className: "text-neutral-600 transition-colors hover:text-black"
|
|
2342
2583
|
}
|
|
2343
|
-
))))), socials && socials.length > 0 && /* @__PURE__ */
|
|
2584
|
+
))))), 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
2585
|
"a",
|
|
2345
2586
|
{
|
|
2346
2587
|
key: idx,
|
|
@@ -2350,27 +2591,27 @@ var ManagedContactBlock = ({
|
|
|
2350
2591
|
className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black",
|
|
2351
2592
|
"aria-label": social.label
|
|
2352
2593
|
},
|
|
2353
|
-
/* @__PURE__ */
|
|
2354
|
-
/* @__PURE__ */
|
|
2594
|
+
/* @__PURE__ */ React28.createElement(HugeiconsIcon19, { icon: social.icon, size: 18 }),
|
|
2595
|
+
/* @__PURE__ */ React28.createElement("span", { className: "text-[13px]" }, social.label)
|
|
2355
2596
|
)))))))));
|
|
2356
2597
|
};
|
|
2357
2598
|
|
|
2358
2599
|
// src/components/ManagedPricingBlock.tsx
|
|
2359
|
-
import
|
|
2600
|
+
import React29, { useState as useState20, useEffect as useEffect15, useRef as useRef8 } from "react";
|
|
2360
2601
|
import Link6 from "next/link";
|
|
2361
|
-
import
|
|
2362
|
-
var CheckIcon = ({ className = "" }) => /* @__PURE__ */
|
|
2363
|
-
var CrossIcon = ({ className = "" }) => /* @__PURE__ */
|
|
2602
|
+
import Image5 from "next/image";
|
|
2603
|
+
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" }));
|
|
2604
|
+
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
2605
|
var ManagedPricingBlock = ({
|
|
2365
2606
|
tagline,
|
|
2366
2607
|
title,
|
|
2367
2608
|
plans = [],
|
|
2368
2609
|
tabs
|
|
2369
2610
|
}) => {
|
|
2370
|
-
const [isAnimating, setIsAnimating] =
|
|
2371
|
-
const [activeTabIndex, setActiveTabIndex] =
|
|
2611
|
+
const [isAnimating, setIsAnimating] = useState20(false);
|
|
2612
|
+
const [activeTabIndex, setActiveTabIndex] = useState20(0);
|
|
2372
2613
|
const titleRef = useRef8(null);
|
|
2373
|
-
|
|
2614
|
+
useEffect15(() => {
|
|
2374
2615
|
const observer = new IntersectionObserver(
|
|
2375
2616
|
([entry]) => {
|
|
2376
2617
|
if (entry.isIntersecting) {
|
|
@@ -2390,7 +2631,7 @@ var ManagedPricingBlock = ({
|
|
|
2390
2631
|
}, []);
|
|
2391
2632
|
const hasTabs = tabs && tabs.length > 0;
|
|
2392
2633
|
const currentPlans = hasTabs ? tabs[activeTabIndex].plans : plans;
|
|
2393
|
-
return /* @__PURE__ */
|
|
2634
|
+
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
2635
|
"h1",
|
|
2395
2636
|
{
|
|
2396
2637
|
ref: titleRef,
|
|
@@ -2398,9 +2639,9 @@ var ManagedPricingBlock = ({
|
|
|
2398
2639
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2399
2640
|
},
|
|
2400
2641
|
title
|
|
2401
|
-
)), hasTabs && /* @__PURE__ */
|
|
2642
|
+
)), 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
2643
|
const isActive = activeTabIndex === idx;
|
|
2403
|
-
return /* @__PURE__ */
|
|
2644
|
+
return /* @__PURE__ */ React29.createElement(
|
|
2404
2645
|
"button",
|
|
2405
2646
|
{
|
|
2406
2647
|
key: idx,
|
|
@@ -2409,20 +2650,20 @@ var ManagedPricingBlock = ({
|
|
|
2409
2650
|
},
|
|
2410
2651
|
tab.label
|
|
2411
2652
|
);
|
|
2412
|
-
}))), /* @__PURE__ */
|
|
2653
|
+
}))), /* @__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
2654
|
"div",
|
|
2414
2655
|
{
|
|
2415
2656
|
key: `${activeTabIndex}-${planIdx}`,
|
|
2416
2657
|
className: `bg-white rounded-3xl p-6 flex flex-col relative overflow-hidden transition-all duration-300 ${plan.isPremium ? "" : ""}`
|
|
2417
2658
|
},
|
|
2418
|
-
/* @__PURE__ */
|
|
2659
|
+
/* @__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
2660
|
"div",
|
|
2420
2661
|
{
|
|
2421
2662
|
key: logoIdx,
|
|
2422
2663
|
className: "relative w-5 h-5 overflow-hidden flex items-center justify-center shrink-0"
|
|
2423
2664
|
},
|
|
2424
|
-
/* @__PURE__ */
|
|
2425
|
-
|
|
2665
|
+
/* @__PURE__ */ React29.createElement(
|
|
2666
|
+
Image5,
|
|
2426
2667
|
{
|
|
2427
2668
|
src: logo.src,
|
|
2428
2669
|
alt: logo.alt,
|
|
@@ -2432,7 +2673,7 @@ var ManagedPricingBlock = ({
|
|
|
2432
2673
|
}
|
|
2433
2674
|
)
|
|
2434
2675
|
)))),
|
|
2435
|
-
plan.isPremium ? /* @__PURE__ */
|
|
2676
|
+
plan.isPremium ? /* @__PURE__ */ React29.createElement(ThreeDButton, { href: plan.ctaHref, className: "mb-6 w-full" }, plan.ctaText) : /* @__PURE__ */ React29.createElement(
|
|
2436
2677
|
Link6,
|
|
2437
2678
|
{
|
|
2438
2679
|
href: plan.ctaHref,
|
|
@@ -2440,20 +2681,20 @@ var ManagedPricingBlock = ({
|
|
|
2440
2681
|
},
|
|
2441
2682
|
plan.ctaText
|
|
2442
2683
|
),
|
|
2443
|
-
/* @__PURE__ */
|
|
2684
|
+
/* @__PURE__ */ React29.createElement("div", { className: "flex flex-col gap-3" }, plan.features.map((feature, featureIdx) => {
|
|
2444
2685
|
const isAvailable = feature.value !== false;
|
|
2445
2686
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
2446
|
-
return /* @__PURE__ */
|
|
2687
|
+
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
2688
|
}))
|
|
2448
2689
|
)))));
|
|
2449
2690
|
};
|
|
2450
2691
|
|
|
2451
2692
|
// src/components/ManagedBoardBlock.tsx
|
|
2452
|
-
import
|
|
2453
|
-
import
|
|
2454
|
-
import { HugeiconsIcon as
|
|
2693
|
+
import React30 from "react";
|
|
2694
|
+
import Image6 from "next/image";
|
|
2695
|
+
import { HugeiconsIcon as HugeiconsIcon20 } from "@hugeicons/react";
|
|
2455
2696
|
import { TwitterIcon, LinkedinIcon } from "@hugeicons/core-free-icons";
|
|
2456
|
-
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */
|
|
2697
|
+
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ React30.createElement(
|
|
2457
2698
|
"a",
|
|
2458
2699
|
{
|
|
2459
2700
|
href,
|
|
@@ -2462,7 +2703,7 @@ var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ React28.
|
|
|
2462
2703
|
className: "text-neutral-400 hover:text-black transition-colors",
|
|
2463
2704
|
"aria-label": `${name} on ${label}`
|
|
2464
2705
|
},
|
|
2465
|
-
/* @__PURE__ */
|
|
2706
|
+
/* @__PURE__ */ React30.createElement(HugeiconsIcon20, { icon, size: 16 })
|
|
2466
2707
|
);
|
|
2467
2708
|
var ManagedBoardBlock = ({
|
|
2468
2709
|
tagline,
|
|
@@ -2471,7 +2712,7 @@ var ManagedBoardBlock = ({
|
|
|
2471
2712
|
contactText,
|
|
2472
2713
|
contactEmail
|
|
2473
2714
|
}) => {
|
|
2474
|
-
return /* @__PURE__ */
|
|
2715
|
+
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
2716
|
"div",
|
|
2476
2717
|
{
|
|
2477
2718
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2480,8 +2721,8 @@ var ManagedBoardBlock = ({
|
|
|
2480
2721
|
backgroundRepeat: "repeat"
|
|
2481
2722
|
}
|
|
2482
2723
|
}
|
|
2483
|
-
), /* @__PURE__ */
|
|
2484
|
-
|
|
2724
|
+
), /* @__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(
|
|
2725
|
+
Image6,
|
|
2485
2726
|
{
|
|
2486
2727
|
src: member.imageSrc,
|
|
2487
2728
|
alt: member.name,
|
|
@@ -2489,7 +2730,7 @@ var ManagedBoardBlock = ({
|
|
|
2489
2730
|
sizes: "(max-width: 768px) 56px, 64px",
|
|
2490
2731
|
className: "object-cover grayscale opacity-100 transition-opacity"
|
|
2491
2732
|
}
|
|
2492
|
-
)), /* @__PURE__ */
|
|
2733
|
+
)), /* @__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
2734
|
MemberSocialLink,
|
|
2494
2735
|
{
|
|
2495
2736
|
href: `https://x.com/${member.twitterHandle}`,
|
|
@@ -2497,7 +2738,7 @@ var ManagedBoardBlock = ({
|
|
|
2497
2738
|
label: "X",
|
|
2498
2739
|
name: member.name
|
|
2499
2740
|
}
|
|
2500
|
-
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */
|
|
2741
|
+
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */ React30.createElement(
|
|
2501
2742
|
MemberSocialLink,
|
|
2502
2743
|
{
|
|
2503
2744
|
href: member.linkedinHandle,
|
|
@@ -2505,29 +2746,29 @@ var ManagedBoardBlock = ({
|
|
|
2505
2746
|
label: "LinkedIn",
|
|
2506
2747
|
name: member.name
|
|
2507
2748
|
}
|
|
2508
|
-
))))))), (contactText || contactEmail) && /* @__PURE__ */
|
|
2749
|
+
))))))), (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
2750
|
};
|
|
2510
2751
|
|
|
2511
2752
|
// src/components/ManagedNotFoundBlock.tsx
|
|
2512
|
-
import
|
|
2753
|
+
import React31 from "react";
|
|
2513
2754
|
var ManagedNotFoundBlock = ({
|
|
2514
2755
|
title = "404 - Page Not Found",
|
|
2515
2756
|
description = "The page you are looking for does not exist or has been moved."
|
|
2516
2757
|
}) => {
|
|
2517
|
-
return /* @__PURE__ */
|
|
2758
|
+
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
2759
|
"svg",
|
|
2519
2760
|
{
|
|
2520
2761
|
xmlns: "http://www.w3.org/2000/svg",
|
|
2521
2762
|
viewBox: "0 0 24 24",
|
|
2522
2763
|
className: "w-12 h-12 fill-neutral-100"
|
|
2523
2764
|
},
|
|
2524
|
-
/* @__PURE__ */
|
|
2525
|
-
)), /* @__PURE__ */
|
|
2765
|
+
/* @__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" })
|
|
2766
|
+
)), /* @__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
2767
|
};
|
|
2527
2768
|
|
|
2528
2769
|
// src/components/ManagedNewsletterSplitBlock.tsx
|
|
2529
|
-
import
|
|
2530
|
-
import
|
|
2770
|
+
import React32 from "react";
|
|
2771
|
+
import Image7 from "next/image";
|
|
2531
2772
|
var ManagedNewsletterSplitBlock = ({
|
|
2532
2773
|
tagline,
|
|
2533
2774
|
title,
|
|
@@ -2540,8 +2781,8 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2540
2781
|
ctaHref = "/contact",
|
|
2541
2782
|
children
|
|
2542
2783
|
}) => {
|
|
2543
|
-
return /* @__PURE__ */
|
|
2544
|
-
|
|
2784
|
+
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(
|
|
2785
|
+
Image7,
|
|
2545
2786
|
{
|
|
2546
2787
|
src: imageSrc,
|
|
2547
2788
|
alt: imageAlt,
|
|
@@ -2550,7 +2791,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2550
2791
|
className: "object-cover object-top grayscale opacity-60",
|
|
2551
2792
|
quality: 100
|
|
2552
2793
|
}
|
|
2553
|
-
), /* @__PURE__ */
|
|
2794
|
+
), /* @__PURE__ */ React32.createElement(
|
|
2554
2795
|
"div",
|
|
2555
2796
|
{
|
|
2556
2797
|
className: "absolute inset-0 z-10 pointer-events-none",
|
|
@@ -2558,7 +2799,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2558
2799
|
background: "linear-gradient(to right, rgba(255,255,255,0) 30%, #ffffff 100%)"
|
|
2559
2800
|
}
|
|
2560
2801
|
}
|
|
2561
|
-
), /* @__PURE__ */
|
|
2802
|
+
), /* @__PURE__ */ React32.createElement(
|
|
2562
2803
|
"div",
|
|
2563
2804
|
{
|
|
2564
2805
|
className: "absolute inset-x-0 bottom-0 h-40 z-10 pointer-events-none",
|
|
@@ -2566,7 +2807,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2566
2807
|
background: "linear-gradient(to bottom, rgba(255,255,255,0) 0%, #ffffff 100%)"
|
|
2567
2808
|
}
|
|
2568
2809
|
}
|
|
2569
|
-
)), /* @__PURE__ */
|
|
2810
|
+
)), /* @__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
2811
|
"div",
|
|
2571
2812
|
{
|
|
2572
2813
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2575,7 +2816,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2575
2816
|
backgroundRepeat: "repeat"
|
|
2576
2817
|
}
|
|
2577
2818
|
}
|
|
2578
|
-
), /* @__PURE__ */
|
|
2819
|
+
), /* @__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
2820
|
ThreeDButton,
|
|
2580
2821
|
{
|
|
2581
2822
|
href: ctaHref,
|
|
@@ -2586,14 +2827,14 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
2586
2827
|
};
|
|
2587
2828
|
|
|
2588
2829
|
// src/components/PortfolioHero.tsx
|
|
2589
|
-
import
|
|
2830
|
+
import React33, { useEffect as useEffect16, useRef as useRef9 } from "react";
|
|
2590
2831
|
import Link7 from "next/link";
|
|
2591
|
-
import
|
|
2592
|
-
import { HugeiconsIcon as
|
|
2832
|
+
import Image8 from "next/image";
|
|
2833
|
+
import { HugeiconsIcon as HugeiconsIcon21 } from "@hugeicons/react";
|
|
2593
2834
|
import { ArrowRight01Icon as ArrowRight01Icon5 } from "@hugeicons/core-free-icons";
|
|
2594
2835
|
var useScrollAnimation = () => {
|
|
2595
2836
|
const elementRef = useRef9(null);
|
|
2596
|
-
|
|
2837
|
+
useEffect16(() => {
|
|
2597
2838
|
const el = elementRef.current;
|
|
2598
2839
|
if (!el) return;
|
|
2599
2840
|
const observer = new IntersectionObserver(
|
|
@@ -2629,14 +2870,14 @@ var PortfolioHero = ({
|
|
|
2629
2870
|
secondaryCtaHref
|
|
2630
2871
|
}) => {
|
|
2631
2872
|
const heroContentRef = useScrollAnimation();
|
|
2632
|
-
return /* @__PURE__ */
|
|
2873
|
+
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
2874
|
"div",
|
|
2634
2875
|
{
|
|
2635
2876
|
ref: heroContentRef,
|
|
2636
2877
|
className: "w-full opacity-0 translate-y-5 transition-all duration-1000 ease-out relative z-10"
|
|
2637
2878
|
},
|
|
2638
|
-
/* @__PURE__ */
|
|
2639
|
-
|
|
2879
|
+
/* @__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(
|
|
2880
|
+
Image8,
|
|
2640
2881
|
{
|
|
2641
2882
|
src: imageSrc,
|
|
2642
2883
|
alt: imageAlt,
|
|
@@ -2646,7 +2887,7 @@ var PortfolioHero = ({
|
|
|
2646
2887
|
sizes: "(max-width: 640px) 80px, 128px",
|
|
2647
2888
|
quality: 100
|
|
2648
2889
|
}
|
|
2649
|
-
)), /* @__PURE__ */
|
|
2890
|
+
)), /* @__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
2891
|
"a",
|
|
2651
2892
|
{
|
|
2652
2893
|
href: socialLinkHref,
|
|
@@ -2656,31 +2897,31 @@ var PortfolioHero = ({
|
|
|
2656
2897
|
},
|
|
2657
2898
|
socialLinkText
|
|
2658
2899
|
))),
|
|
2659
|
-
/* @__PURE__ */
|
|
2660
|
-
/* @__PURE__ */
|
|
2900
|
+
/* @__PURE__ */ React33.createElement("p", { className: "text-[13px] leading-[1.8] max-w-4xl mb-12 text-neutral-600" }, bio),
|
|
2901
|
+
/* @__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
2902
|
ThreeDButton,
|
|
2662
2903
|
{
|
|
2663
2904
|
href: primaryCtaHref,
|
|
2664
2905
|
className: "py-3 tracking-widest text-[11px]"
|
|
2665
2906
|
},
|
|
2666
2907
|
primaryCtaText
|
|
2667
|
-
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
2908
|
+
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ React33.createElement(
|
|
2668
2909
|
Link7,
|
|
2669
2910
|
{
|
|
2670
2911
|
href: secondaryCtaHref,
|
|
2671
2912
|
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
2913
|
},
|
|
2673
2914
|
secondaryCtaText,
|
|
2674
|
-
/* @__PURE__ */
|
|
2915
|
+
/* @__PURE__ */ React33.createElement(HugeiconsIcon21, { icon: ArrowRight01Icon5, size: 16 })
|
|
2675
2916
|
))
|
|
2676
2917
|
));
|
|
2677
2918
|
};
|
|
2678
2919
|
|
|
2679
2920
|
// src/components/GifFeatureCard.tsx
|
|
2680
|
-
import
|
|
2681
|
-
import
|
|
2682
|
-
import { HugeiconsIcon as
|
|
2683
|
-
import { Loading03Icon as
|
|
2921
|
+
import React34, { useState as useState21 } from "react";
|
|
2922
|
+
import Image9 from "next/image";
|
|
2923
|
+
import { HugeiconsIcon as HugeiconsIcon22 } from "@hugeicons/react";
|
|
2924
|
+
import { Loading03Icon as Loading03Icon11 } from "@hugeicons/core-free-icons";
|
|
2684
2925
|
var GifFeatureCard = ({
|
|
2685
2926
|
gifSrc,
|
|
2686
2927
|
title,
|
|
@@ -2688,21 +2929,21 @@ var GifFeatureCard = ({
|
|
|
2688
2929
|
alt = "Feature animation",
|
|
2689
2930
|
className = "aspect-video"
|
|
2690
2931
|
}) => {
|
|
2691
|
-
const [isLoading, setIsLoading] =
|
|
2692
|
-
return /* @__PURE__ */
|
|
2693
|
-
|
|
2932
|
+
const [isLoading, setIsLoading] = useState21(true);
|
|
2933
|
+
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(
|
|
2934
|
+
HugeiconsIcon22,
|
|
2694
2935
|
{
|
|
2695
|
-
icon:
|
|
2936
|
+
icon: Loading03Icon11,
|
|
2696
2937
|
size: 32,
|
|
2697
2938
|
className: "animate-spin text-white"
|
|
2698
2939
|
}
|
|
2699
|
-
)), /* @__PURE__ */
|
|
2940
|
+
)), /* @__PURE__ */ React34.createElement(
|
|
2700
2941
|
"div",
|
|
2701
2942
|
{
|
|
2702
2943
|
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
2944
|
},
|
|
2704
|
-
/* @__PURE__ */
|
|
2705
|
-
|
|
2945
|
+
/* @__PURE__ */ React34.createElement(
|
|
2946
|
+
Image9,
|
|
2706
2947
|
{
|
|
2707
2948
|
src: gifSrc,
|
|
2708
2949
|
alt,
|
|
@@ -2712,17 +2953,17 @@ var GifFeatureCard = ({
|
|
|
2712
2953
|
className: "object-cover object-center pointer-events-none"
|
|
2713
2954
|
}
|
|
2714
2955
|
)
|
|
2715
|
-
), /* @__PURE__ */
|
|
2956
|
+
), /* @__PURE__ */ React34.createElement(
|
|
2716
2957
|
"div",
|
|
2717
2958
|
{
|
|
2718
2959
|
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
2960
|
}
|
|
2720
|
-
), /* @__PURE__ */
|
|
2961
|
+
), /* @__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
2962
|
};
|
|
2722
2963
|
|
|
2723
2964
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
2724
|
-
import
|
|
2725
|
-
import
|
|
2965
|
+
import React35, { useState as useState22, useEffect as useEffect17, useRef as useRef10 } from "react";
|
|
2966
|
+
import Image10 from "next/image";
|
|
2726
2967
|
var MedicalFeatureStatsBlock = ({
|
|
2727
2968
|
bottomHeadline,
|
|
2728
2969
|
bottomDescription,
|
|
@@ -2730,9 +2971,9 @@ var MedicalFeatureStatsBlock = ({
|
|
|
2730
2971
|
trustText,
|
|
2731
2972
|
stats
|
|
2732
2973
|
}) => {
|
|
2733
|
-
const [isAnimating, setIsAnimating] =
|
|
2974
|
+
const [isAnimating, setIsAnimating] = useState22(false);
|
|
2734
2975
|
const titleRef = useRef10(null);
|
|
2735
|
-
|
|
2976
|
+
useEffect17(() => {
|
|
2736
2977
|
const observer = new IntersectionObserver(
|
|
2737
2978
|
([entry]) => {
|
|
2738
2979
|
if (entry.isIntersecting) {
|
|
@@ -2750,7 +2991,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
2750
2991
|
}
|
|
2751
2992
|
return () => observer.disconnect();
|
|
2752
2993
|
}, []);
|
|
2753
|
-
return /* @__PURE__ */
|
|
2994
|
+
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
2995
|
"h2",
|
|
2755
2996
|
{
|
|
2756
2997
|
ref: titleRef,
|
|
@@ -2758,8 +2999,8 @@ var MedicalFeatureStatsBlock = ({
|
|
|
2758
2999
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2759
3000
|
},
|
|
2760
3001
|
bottomHeadline
|
|
2761
|
-
), /* @__PURE__ */
|
|
2762
|
-
|
|
3002
|
+
), /* @__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(
|
|
3003
|
+
Image10,
|
|
2763
3004
|
{
|
|
2764
3005
|
src,
|
|
2765
3006
|
alt: "Professional Avatar",
|
|
@@ -2767,18 +3008,18 @@ var MedicalFeatureStatsBlock = ({
|
|
|
2767
3008
|
sizes: "48px",
|
|
2768
3009
|
className: "object-cover"
|
|
2769
3010
|
}
|
|
2770
|
-
)))), /* @__PURE__ */
|
|
3011
|
+
)))), /* @__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
3012
|
};
|
|
2772
3013
|
|
|
2773
3014
|
// src/components/ConsultantShowcase.tsx
|
|
2774
|
-
import
|
|
2775
|
-
import
|
|
2776
|
-
import { HugeiconsIcon as
|
|
2777
|
-
import { Loading03Icon as
|
|
3015
|
+
import React36, { useState as useState23 } from "react";
|
|
3016
|
+
import Image11 from "next/image";
|
|
3017
|
+
import { HugeiconsIcon as HugeiconsIcon23 } from "@hugeicons/react";
|
|
3018
|
+
import { Loading03Icon as Loading03Icon12 } from "@hugeicons/core-free-icons";
|
|
2778
3019
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
2779
|
-
const [isLoading, setIsLoading] =
|
|
2780
|
-
return /* @__PURE__ */
|
|
2781
|
-
|
|
3020
|
+
const [isLoading, setIsLoading] = useState23(true);
|
|
3021
|
+
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(
|
|
3022
|
+
Image11,
|
|
2782
3023
|
{
|
|
2783
3024
|
src,
|
|
2784
3025
|
alt,
|
|
@@ -2796,9 +3037,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
2796
3037
|
var ConsultantShowcase = ({
|
|
2797
3038
|
profiles
|
|
2798
3039
|
}) => {
|
|
2799
|
-
const [currentIndex, setCurrentIndex] =
|
|
2800
|
-
const [touchStart, setTouchStart] =
|
|
2801
|
-
const [touchEnd, setTouchEnd] =
|
|
3040
|
+
const [currentIndex, setCurrentIndex] = useState23(0);
|
|
3041
|
+
const [touchStart, setTouchStart] = useState23(null);
|
|
3042
|
+
const [touchEnd, setTouchEnd] = useState23(null);
|
|
2802
3043
|
const nextSlide = () => {
|
|
2803
3044
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
2804
3045
|
};
|
|
@@ -2823,7 +3064,7 @@ var ConsultantShowcase = ({
|
|
|
2823
3064
|
}
|
|
2824
3065
|
};
|
|
2825
3066
|
if (!profiles || profiles.length === 0) return null;
|
|
2826
|
-
return /* @__PURE__ */
|
|
3067
|
+
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
3068
|
"div",
|
|
2828
3069
|
{
|
|
2829
3070
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -2833,13 +3074,13 @@ var ConsultantShowcase = ({
|
|
|
2833
3074
|
},
|
|
2834
3075
|
profiles.map((profile, idx) => {
|
|
2835
3076
|
const isActive = idx === currentIndex;
|
|
2836
|
-
return /* @__PURE__ */
|
|
3077
|
+
return /* @__PURE__ */ React36.createElement(
|
|
2837
3078
|
"div",
|
|
2838
3079
|
{
|
|
2839
3080
|
key: profile.id,
|
|
2840
3081
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
2841
3082
|
},
|
|
2842
|
-
/* @__PURE__ */
|
|
3083
|
+
/* @__PURE__ */ React36.createElement(
|
|
2843
3084
|
ImageWithLoader,
|
|
2844
3085
|
{
|
|
2845
3086
|
src: profile.imageSrc,
|
|
@@ -2847,14 +3088,14 @@ var ConsultantShowcase = ({
|
|
|
2847
3088
|
priority: idx === 0
|
|
2848
3089
|
}
|
|
2849
3090
|
),
|
|
2850
|
-
/* @__PURE__ */
|
|
2851
|
-
/* @__PURE__ */
|
|
2852
|
-
/* @__PURE__ */
|
|
3091
|
+
/* @__PURE__ */ React36.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
3092
|
+
/* @__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" }),
|
|
3093
|
+
/* @__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
3094
|
);
|
|
2854
3095
|
}),
|
|
2855
|
-
/* @__PURE__ */
|
|
2856
|
-
/* @__PURE__ */
|
|
2857
|
-
/* @__PURE__ */
|
|
3096
|
+
/* @__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" }),
|
|
3097
|
+
/* @__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" }),
|
|
3098
|
+
/* @__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
3099
|
"button",
|
|
2859
3100
|
{
|
|
2860
3101
|
key: idx,
|
|
@@ -2867,14 +3108,14 @@ var ConsultantShowcase = ({
|
|
|
2867
3108
|
};
|
|
2868
3109
|
|
|
2869
3110
|
// src/components/ContentGridBlock.tsx
|
|
2870
|
-
import
|
|
2871
|
-
import
|
|
2872
|
-
import { HugeiconsIcon as
|
|
2873
|
-
import { Loading03Icon as
|
|
3111
|
+
import React37, { useState as useState24 } from "react";
|
|
3112
|
+
import Image12 from "next/image";
|
|
3113
|
+
import { HugeiconsIcon as HugeiconsIcon24 } from "@hugeicons/react";
|
|
3114
|
+
import { Loading03Icon as Loading03Icon13 } from "@hugeicons/core-free-icons";
|
|
2874
3115
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
2875
|
-
const [isLoading, setIsLoading] =
|
|
2876
|
-
return /* @__PURE__ */
|
|
2877
|
-
|
|
3116
|
+
const [isLoading, setIsLoading] = useState24(true);
|
|
3117
|
+
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(
|
|
3118
|
+
Image12,
|
|
2878
3119
|
{
|
|
2879
3120
|
src,
|
|
2880
3121
|
alt,
|
|
@@ -2895,30 +3136,30 @@ var ContentGridBlock = ({
|
|
|
2895
3136
|
middleBottomCard,
|
|
2896
3137
|
rightCards
|
|
2897
3138
|
}) => {
|
|
2898
|
-
return /* @__PURE__ */
|
|
3139
|
+
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
3140
|
ImageWithLoader2,
|
|
2900
3141
|
{
|
|
2901
3142
|
src: card.bgImageSrc,
|
|
2902
3143
|
alt: card.title,
|
|
2903
3144
|
className: "absolute inset-0 w-full h-full"
|
|
2904
3145
|
}
|
|
2905
|
-
), /* @__PURE__ */
|
|
3146
|
+
), /* @__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
3147
|
};
|
|
2907
3148
|
|
|
2908
3149
|
// src/components/ManagedProjectsBlock.tsx
|
|
2909
|
-
import
|
|
3150
|
+
import React38 from "react";
|
|
2910
3151
|
import Link8 from "next/link";
|
|
2911
3152
|
var GridSection = ({
|
|
2912
3153
|
children,
|
|
2913
3154
|
isLast = false,
|
|
2914
3155
|
className = "py-8 md:py-10"
|
|
2915
|
-
}) => /* @__PURE__ */
|
|
3156
|
+
}) => /* @__PURE__ */ React38.createElement("div", { className: `relative px-5 md:px-12 ${className} ${!isLast ? "" : ""}` }, children);
|
|
2916
3157
|
var ManagedProjectsBlock = ({
|
|
2917
3158
|
tagline,
|
|
2918
3159
|
title,
|
|
2919
3160
|
projects
|
|
2920
3161
|
}) => {
|
|
2921
|
-
return /* @__PURE__ */
|
|
3162
|
+
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
3163
|
"div",
|
|
2923
3164
|
{
|
|
2924
3165
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2927,10 +3168,10 @@ var ManagedProjectsBlock = ({
|
|
|
2927
3168
|
backgroundRepeat: "repeat"
|
|
2928
3169
|
}
|
|
2929
3170
|
}
|
|
2930
|
-
), /* @__PURE__ */
|
|
3171
|
+
), /* @__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
3172
|
const isLast = index === projects.length - 1;
|
|
2932
|
-
const projectContent = /* @__PURE__ */
|
|
2933
|
-
return /* @__PURE__ */
|
|
3173
|
+
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));
|
|
3174
|
+
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
3175
|
}))));
|
|
2935
3176
|
};
|
|
2936
3177
|
export {
|