@retinalabsllc/zairusjs 9.0.80 → 9.0.90
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 +29 -1
- package/dist/index.d.ts +29 -1
- package/dist/index.js +446 -149
- package/dist/index.mjs +450 -144
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -779,6 +779,7 @@ var Banner = ({
|
|
|
779
779
|
// src/components/UniversalOrganizationPage.tsx
|
|
780
780
|
import { HugeiconsIcon as HugeiconsIcon5 } from "@hugeicons/react";
|
|
781
781
|
import {
|
|
782
|
+
ArrowLeft01Icon,
|
|
782
783
|
CircleLock02Icon
|
|
783
784
|
} from "@hugeicons/core-free-icons";
|
|
784
785
|
var InputSpinner2 = () => /* @__PURE__ */ React11.createElement("svg", { className: "animate-spin h-4 w-4 text-neutral-400", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24" }, /* @__PURE__ */ React11.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ React11.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" }));
|
|
@@ -791,8 +792,12 @@ var UniversalOrganizationPage = ({
|
|
|
791
792
|
slugPrefixUrl = ".aeona.eth",
|
|
792
793
|
bannerProps,
|
|
793
794
|
onSaveConfiguration,
|
|
794
|
-
onCheckSlugAvailability
|
|
795
|
+
onCheckSlugAvailability,
|
|
796
|
+
onBack
|
|
795
797
|
}) => {
|
|
798
|
+
const onBackHandler = onBack ?? (() => {
|
|
799
|
+
if (typeof window !== "undefined") window.history.back();
|
|
800
|
+
});
|
|
796
801
|
const resolvedInitialUsername = initialUsername || initialSlug;
|
|
797
802
|
const [web3Name, setWeb3Name] = useState6(initialOrgName);
|
|
798
803
|
const [username, setUsername] = useState6(resolvedInitialUsername);
|
|
@@ -869,7 +874,15 @@ var UniversalOrganizationPage = ({
|
|
|
869
874
|
};
|
|
870
875
|
const hasChanges = web3Name !== initialOrgName || slug !== initialSlug || username !== resolvedInitialUsername;
|
|
871
876
|
const isSaveDisabled = isSubmitting || isReadOnly || isCheckingSlug || !hasChanges || web3Name.length < 3 || slug.length < 3 || username.length < 3 || slug !== initialSlug && slugAvailable === false;
|
|
872
|
-
return /* @__PURE__ */ React11.createElement("div",
|
|
877
|
+
return /* @__PURE__ */ React11.createElement("div", null, /* @__PURE__ */ React11.createElement("div", { className: "mb-3 flex max-w-3xl w-full mx-auto items-center px-1" }, /* @__PURE__ */ React11.createElement(
|
|
878
|
+
"button",
|
|
879
|
+
{
|
|
880
|
+
onClick: onBackHandler,
|
|
881
|
+
className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] font-medium outline-none"
|
|
882
|
+
},
|
|
883
|
+
/* @__PURE__ */ React11.createElement(HugeiconsIcon5, { icon: ArrowLeft01Icon, size: 16 }),
|
|
884
|
+
" Back"
|
|
885
|
+
)), /* @__PURE__ */ React11.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl w-full mx-auto rounded-2xl p-6 bg-white fade-in duration-300" }, /* @__PURE__ */ React11.createElement(ManagedToaster, null), /* @__PURE__ */ React11.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ React11.createElement("div", null, /* @__PURE__ */ React11.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, "Public Profile"), /* @__PURE__ */ React11.createElement("p", { className: "text-xs text-neutral-500" }, "Manage your financial payment handle identifiers and global public cryptographic signature identity details.")), isReadOnly && /* @__PURE__ */ React11.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-100 text-neutral-400 rounded-full shrink-0" }, /* @__PURE__ */ React11.createElement(HugeiconsIcon5, { icon: CircleLock02Icon, size: 18, className: "text-current" }))), bannerProps && /* @__PURE__ */ React11.createElement(Banner, { ...bannerProps }), /* @__PURE__ */ React11.createElement("div", { className: "w-full max-w-5xl" }, /* @__PURE__ */ React11.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ React11.createElement(
|
|
873
886
|
TextInput,
|
|
874
887
|
{
|
|
875
888
|
label: "Display Name",
|
|
@@ -922,7 +935,7 @@ var UniversalOrganizationPage = ({
|
|
|
922
935
|
className: "text-[11px] tracking-widest text-neutral-400 hover:text-black transition-colors outline-none"
|
|
923
936
|
},
|
|
924
937
|
"Cancel"
|
|
925
|
-
)))));
|
|
938
|
+
))))));
|
|
926
939
|
};
|
|
927
940
|
|
|
928
941
|
// src/components/UniversalProfileSettings.tsx
|
|
@@ -933,7 +946,8 @@ import {
|
|
|
933
946
|
CircleLock02Icon as CircleLock02Icon2,
|
|
934
947
|
CancelCircleIcon,
|
|
935
948
|
Loading03Icon as Loading03Icon2,
|
|
936
|
-
LockKeyIcon
|
|
949
|
+
LockKeyIcon,
|
|
950
|
+
ArrowLeft01Icon as ArrowLeft01Icon2
|
|
937
951
|
} from "@hugeicons/core-free-icons";
|
|
938
952
|
var UniversalProfileSettings = ({
|
|
939
953
|
initialFirstName,
|
|
@@ -946,8 +960,12 @@ var UniversalProfileSettings = ({
|
|
|
946
960
|
hasPin = false,
|
|
947
961
|
isPinLoading = false,
|
|
948
962
|
onSavePin,
|
|
949
|
-
onSaveProfile
|
|
963
|
+
onSaveProfile,
|
|
964
|
+
onBack
|
|
950
965
|
}) => {
|
|
966
|
+
const onBackHandler = onBack ?? (() => {
|
|
967
|
+
if (typeof window !== "undefined") window.history.back();
|
|
968
|
+
});
|
|
951
969
|
const [firstName, setFirstName] = useState7(initialFirstName);
|
|
952
970
|
const [lastName, setLastName] = useState7(initialLastName);
|
|
953
971
|
const [isSubmitting, setIsSubmitting] = useState7(false);
|
|
@@ -1022,7 +1040,15 @@ var UniversalProfileSettings = ({
|
|
|
1022
1040
|
};
|
|
1023
1041
|
const hasChanges = firstName !== initialFirstName || lastName !== initialLastName;
|
|
1024
1042
|
const isSaveDisabled = isSubmitting || isReadOnly || !hasChanges || firstName.trim().length === 0 || lastName.trim().length === 0;
|
|
1025
|
-
return /* @__PURE__ */ React12.createElement("div",
|
|
1043
|
+
return /* @__PURE__ */ React12.createElement("div", null, /* @__PURE__ */ React12.createElement("div", { className: "mb-3 flex max-w-3xl w-full mx-auto items-center px-1" }, /* @__PURE__ */ React12.createElement(
|
|
1044
|
+
"button",
|
|
1045
|
+
{
|
|
1046
|
+
onClick: onBackHandler,
|
|
1047
|
+
className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] font-medium outline-none"
|
|
1048
|
+
},
|
|
1049
|
+
/* @__PURE__ */ React12.createElement(HugeiconsIcon6, { icon: ArrowLeft01Icon2, size: 16 }),
|
|
1050
|
+
" Back"
|
|
1051
|
+
)), /* @__PURE__ */ React12.createElement("div", { className: "flex flex-col max-w-3xl w-full mx-auto rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300" }, /* @__PURE__ */ React12.createElement(ManagedToaster, null), /* @__PURE__ */ React12.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ React12.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React12.createElement("h1", { className: "text-black text-xl mb-1 truncate tracking-tight" }, "Personal Settings"), /* @__PURE__ */ React12.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your personal account profile.")), isReadOnly && /* @__PURE__ */ React12.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-100 text-neutral-400 rounded-full shrink-0" }, /* @__PURE__ */ React12.createElement(HugeiconsIcon6, { icon: CircleLock02Icon2, size: 18, className: "text-current" }))), bannerProps && /* @__PURE__ */ React12.createElement(Banner, { ...bannerProps }), /* @__PURE__ */ React12.createElement("div", { className: "w-full max-w-5xl" }, /* @__PURE__ */ React12.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ React12.createElement("div", { className: "flex flex-col sm:flex-row gap-6" }, /* @__PURE__ */ React12.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React12.createElement(
|
|
1026
1052
|
TextInput,
|
|
1027
1053
|
{
|
|
1028
1054
|
label: "First Name",
|
|
@@ -1120,7 +1146,7 @@ var UniversalProfileSettings = ({
|
|
|
1120
1146
|
className: "w-full py-3"
|
|
1121
1147
|
},
|
|
1122
1148
|
hasPin ? "Update PIN" : "Set PIN"
|
|
1123
|
-
)))))));
|
|
1149
|
+
))))))));
|
|
1124
1150
|
};
|
|
1125
1151
|
|
|
1126
1152
|
// src/components/UniversalErrorView.tsx
|
|
@@ -1216,7 +1242,7 @@ import React15, { useState as useState8, useEffect as useEffect6, useRef as useR
|
|
|
1216
1242
|
import { HugeiconsIcon as HugeiconsIcon9 } from "@hugeicons/react";
|
|
1217
1243
|
import toast4 from "react-hot-toast";
|
|
1218
1244
|
import {
|
|
1219
|
-
ArrowLeft01Icon,
|
|
1245
|
+
ArrowLeft01Icon as ArrowLeft01Icon3,
|
|
1220
1246
|
ArrowRight01Icon,
|
|
1221
1247
|
Loading03Icon as Loading03Icon4,
|
|
1222
1248
|
ArrowDownRight01Icon,
|
|
@@ -1363,7 +1389,7 @@ var UniversalTransactionPage = ({
|
|
|
1363
1389
|
disabled: currentPage <= 1 || isListLoading,
|
|
1364
1390
|
className: "p-2 bg-white border border-neutral-200 rounded-full text-black hover:bg-neutral-50 disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none"
|
|
1365
1391
|
},
|
|
1366
|
-
/* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon:
|
|
1392
|
+
/* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: ArrowLeft01Icon3, size: 14 })
|
|
1367
1393
|
), /* @__PURE__ */ React15.createElement(
|
|
1368
1394
|
"button",
|
|
1369
1395
|
{
|
|
@@ -2601,15 +2627,294 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2601
2627
|
})))));
|
|
2602
2628
|
};
|
|
2603
2629
|
|
|
2630
|
+
// src/components/UniversalSecurityPage.tsx
|
|
2631
|
+
import React27, { useState as useState18, useRef as useRef6 } from "react";
|
|
2632
|
+
import toast7 from "react-hot-toast";
|
|
2633
|
+
import { HugeiconsIcon as HugeiconsIcon19 } from "@hugeicons/react";
|
|
2634
|
+
import {
|
|
2635
|
+
CancelCircleIcon as CancelCircleIcon6,
|
|
2636
|
+
Loading03Icon as Loading03Icon10,
|
|
2637
|
+
Copy01Icon as Copy01Icon3,
|
|
2638
|
+
ArrowLeft01Icon as ArrowLeft01Icon4,
|
|
2639
|
+
Shield02Icon,
|
|
2640
|
+
Key01Icon,
|
|
2641
|
+
ArrowRight01Icon as ArrowRight01Icon4
|
|
2642
|
+
} from "@hugeicons/core-free-icons";
|
|
2643
|
+
var UniversalSecurityPage = ({
|
|
2644
|
+
has2FA,
|
|
2645
|
+
hasPasskey,
|
|
2646
|
+
userEmail = "your account",
|
|
2647
|
+
is2FALoading = false,
|
|
2648
|
+
isPasskeyLoading = false,
|
|
2649
|
+
onBack,
|
|
2650
|
+
onRequest2FASetup,
|
|
2651
|
+
onVerifyAndEnable2FA,
|
|
2652
|
+
onVerifyAndDisable2FA,
|
|
2653
|
+
onEnablePasskey,
|
|
2654
|
+
onDisablePasskey
|
|
2655
|
+
}) => {
|
|
2656
|
+
const [show2FASetupModal, setShow2FASetupModal] = useState18(false);
|
|
2657
|
+
const [show2FADisableModal, setShow2FADisableModal] = useState18(false);
|
|
2658
|
+
const [showPasskeyModal, setShowPasskeyModal] = useState18(false);
|
|
2659
|
+
const [twoFaSecret, setTwoFaSecret] = useState18("");
|
|
2660
|
+
const [twoFaQr, setTwoFaQr] = useState18("");
|
|
2661
|
+
const [isFetchingSetup, setIsFetchingSetup] = useState18(false);
|
|
2662
|
+
const [otp, setOtp] = useState18(Array(6).fill(""));
|
|
2663
|
+
const [isSubmitting, setIsSubmitting] = useState18(false);
|
|
2664
|
+
const inputRefs = useRef6([]);
|
|
2665
|
+
const resetOtp = () => {
|
|
2666
|
+
setOtp(Array(6).fill(""));
|
|
2667
|
+
setIsSubmitting(false);
|
|
2668
|
+
};
|
|
2669
|
+
const handleOtpChange = (index, value) => {
|
|
2670
|
+
const sanitizedValue = value.replace(/\D/g, "").slice(-1);
|
|
2671
|
+
const newOtp = [...otp];
|
|
2672
|
+
newOtp[index] = sanitizedValue;
|
|
2673
|
+
setOtp(newOtp);
|
|
2674
|
+
if (sanitizedValue && index < 5) {
|
|
2675
|
+
inputRefs.current[index + 1]?.focus();
|
|
2676
|
+
}
|
|
2677
|
+
};
|
|
2678
|
+
const handlePaste = (e) => {
|
|
2679
|
+
e.preventDefault();
|
|
2680
|
+
const pastedData = e.clipboardData.getData("text").replace(/\D/g, "").slice(0, 6);
|
|
2681
|
+
if (!pastedData) return;
|
|
2682
|
+
const newOtp = [...otp];
|
|
2683
|
+
for (let i = 0; i < pastedData.length; i++) {
|
|
2684
|
+
newOtp[i] = pastedData[i];
|
|
2685
|
+
}
|
|
2686
|
+
setOtp(newOtp);
|
|
2687
|
+
const focusIndex = Math.min(pastedData.length, 5);
|
|
2688
|
+
inputRefs.current[focusIndex]?.focus();
|
|
2689
|
+
};
|
|
2690
|
+
const handleCopySecret = async (secret) => {
|
|
2691
|
+
try {
|
|
2692
|
+
await navigator.clipboard.writeText(secret);
|
|
2693
|
+
toast7.success("Secret copied to clipboard");
|
|
2694
|
+
} catch {
|
|
2695
|
+
toast7.error("Failed to copy");
|
|
2696
|
+
}
|
|
2697
|
+
};
|
|
2698
|
+
const handleToggle2FA = async () => {
|
|
2699
|
+
if (is2FALoading) return;
|
|
2700
|
+
if (has2FA) {
|
|
2701
|
+
resetOtp();
|
|
2702
|
+
setShow2FADisableModal(true);
|
|
2703
|
+
} else {
|
|
2704
|
+
if (!onRequest2FASetup) return;
|
|
2705
|
+
setIsFetchingSetup(true);
|
|
2706
|
+
try {
|
|
2707
|
+
const data = await onRequest2FASetup();
|
|
2708
|
+
setTwoFaSecret(data.secret);
|
|
2709
|
+
setTwoFaQr(data.qrCodeUrl);
|
|
2710
|
+
resetOtp();
|
|
2711
|
+
setShow2FASetupModal(true);
|
|
2712
|
+
} catch (error) {
|
|
2713
|
+
toast7.error("Failed to initialize 2FA setup");
|
|
2714
|
+
} finally {
|
|
2715
|
+
setIsFetchingSetup(false);
|
|
2716
|
+
}
|
|
2717
|
+
}
|
|
2718
|
+
};
|
|
2719
|
+
const handleTogglePasskey = () => {
|
|
2720
|
+
if (isPasskeyLoading) return;
|
|
2721
|
+
if (hasPasskey) {
|
|
2722
|
+
if (onDisablePasskey) onDisablePasskey();
|
|
2723
|
+
} else {
|
|
2724
|
+
setShowPasskeyModal(true);
|
|
2725
|
+
}
|
|
2726
|
+
};
|
|
2727
|
+
const submitEnable2FA = async (code) => {
|
|
2728
|
+
if (!onVerifyAndEnable2FA) return;
|
|
2729
|
+
setIsSubmitting(true);
|
|
2730
|
+
try {
|
|
2731
|
+
const res = await onVerifyAndEnable2FA(code);
|
|
2732
|
+
if (res.success) {
|
|
2733
|
+
toast7.success("2FA Enabled Successfully");
|
|
2734
|
+
setShow2FASetupModal(false);
|
|
2735
|
+
} else {
|
|
2736
|
+
toast7.error("Invalid verification code");
|
|
2737
|
+
}
|
|
2738
|
+
} catch (error) {
|
|
2739
|
+
toast7.error("Verification failed");
|
|
2740
|
+
} finally {
|
|
2741
|
+
setIsSubmitting(false);
|
|
2742
|
+
}
|
|
2743
|
+
};
|
|
2744
|
+
const submitDisable2FA = async (code) => {
|
|
2745
|
+
if (!onVerifyAndDisable2FA) return;
|
|
2746
|
+
setIsSubmitting(true);
|
|
2747
|
+
try {
|
|
2748
|
+
const res = await onVerifyAndDisable2FA(code);
|
|
2749
|
+
if (res.success) {
|
|
2750
|
+
toast7.success("2FA Disabled");
|
|
2751
|
+
setShow2FADisableModal(false);
|
|
2752
|
+
} else {
|
|
2753
|
+
toast7.error("Invalid verification code");
|
|
2754
|
+
}
|
|
2755
|
+
} catch (error) {
|
|
2756
|
+
toast7.error("Verification failed");
|
|
2757
|
+
} finally {
|
|
2758
|
+
setIsSubmitting(false);
|
|
2759
|
+
}
|
|
2760
|
+
};
|
|
2761
|
+
const submitEnablePasskey = async () => {
|
|
2762
|
+
if (!onEnablePasskey) return;
|
|
2763
|
+
setIsSubmitting(true);
|
|
2764
|
+
try {
|
|
2765
|
+
const res = await onEnablePasskey();
|
|
2766
|
+
if (res.success) {
|
|
2767
|
+
toast7.success("Passkey Created Successfully");
|
|
2768
|
+
setShowPasskeyModal(false);
|
|
2769
|
+
}
|
|
2770
|
+
} catch (error) {
|
|
2771
|
+
toast7.error("Passkey setup failed or was canceled");
|
|
2772
|
+
} finally {
|
|
2773
|
+
setIsSubmitting(false);
|
|
2774
|
+
}
|
|
2775
|
+
};
|
|
2776
|
+
return /* @__PURE__ */ React27.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 pb-12" }, /* @__PURE__ */ React27.createElement(ManagedToaster, null), /* @__PURE__ */ React27.createElement("div", { className: "mb-6 flex items-center px-1" }, /* @__PURE__ */ React27.createElement(
|
|
2777
|
+
"button",
|
|
2778
|
+
{
|
|
2779
|
+
onClick: onBack,
|
|
2780
|
+
className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] font-medium outline-none"
|
|
2781
|
+
},
|
|
2782
|
+
/* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: ArrowLeft01Icon4, size: 16 }),
|
|
2783
|
+
" Back"
|
|
2784
|
+
)), /* @__PURE__ */ React27.createElement("div", { className: "w-full flex flex-col gap-4" }, /* @__PURE__ */ React27.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React27.createElement(
|
|
2785
|
+
MenuRow3,
|
|
2786
|
+
{
|
|
2787
|
+
icon: Shield02Icon,
|
|
2788
|
+
title: "Authenticator App",
|
|
2789
|
+
subtitle: "Secure your account with 2FA",
|
|
2790
|
+
onClick: handleToggle2FA,
|
|
2791
|
+
isToggle: true,
|
|
2792
|
+
toggleState: has2FA,
|
|
2793
|
+
toggleLoading: is2FALoading || isFetchingSetup
|
|
2794
|
+
}
|
|
2795
|
+
), /* @__PURE__ */ React27.createElement(
|
|
2796
|
+
MenuRow3,
|
|
2797
|
+
{
|
|
2798
|
+
icon: Key01Icon,
|
|
2799
|
+
title: "Passkeys",
|
|
2800
|
+
subtitle: "Sign in quickly with biometrics",
|
|
2801
|
+
onClick: handleTogglePasskey,
|
|
2802
|
+
isToggle: true,
|
|
2803
|
+
toggleState: hasPasskey,
|
|
2804
|
+
toggleLoading: isPasskeyLoading,
|
|
2805
|
+
isLast: true
|
|
2806
|
+
}
|
|
2807
|
+
))), show2FASetupModal && /* @__PURE__ */ React27.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React27.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShow2FASetupModal(false) }), /* @__PURE__ */ React27.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[90vh]" }, /* @__PURE__ */ React27.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ React27.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable 2FA"), /* @__PURE__ */ React27.createElement("button", { onClick: () => !isSubmitting && setShow2FASetupModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: CancelCircleIcon6, size: 18 }))), /* @__PURE__ */ React27.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-2" }, /* @__PURE__ */ React27.createElement("div", { className: "w-full flex justify-center mb-6 mix-blend-multiply" }, twoFaQr ? /* @__PURE__ */ React27.createElement("img", { src: twoFaQr, alt: "2FA QR Code", className: "w-40 h-40 object-contain rounded-xl border border-neutral-100 p-2" }) : /* @__PURE__ */ React27.createElement("div", { className: "w-40 h-40 bg-neutral-100 rounded-xl flex items-center justify-center animate-pulse" })), /* @__PURE__ */ React27.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-8" }, /* @__PURE__ */ React27.createElement("div", null, /* @__PURE__ */ React27.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2 uppercase" }, "Setup Key"), /* @__PURE__ */ React27.createElement("div", { className: "flex items-center gap-2 min-w-0 bg-neutral-50 px-3 py-2.5 rounded-xl border border-neutral-100" }, /* @__PURE__ */ React27.createElement("span", { className: "text-[13px] font-mono tracking-widest text-black truncate min-w-0 block flex-1" }, twoFaSecret), /* @__PURE__ */ React27.createElement(
|
|
2808
|
+
"button",
|
|
2809
|
+
{
|
|
2810
|
+
onClick: () => handleCopySecret(twoFaSecret),
|
|
2811
|
+
className: "text-neutral-400 hover:text-black transition-colors outline-none shrink-0 ml-2"
|
|
2812
|
+
},
|
|
2813
|
+
/* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: Copy01Icon3, size: 16 })
|
|
2814
|
+
)))), /* @__PURE__ */ React27.createElement("div", { className: "text-center mb-8 mt-2" }, /* @__PURE__ */ React27.createElement("h2", { className: "text-xl text-black mb-2 tracking-tight" }, "Security Check"), /* @__PURE__ */ React27.createElement("p", { className: "text-[13px] text-neutral-500" }, "Enter the 6-digit code from your app")), /* @__PURE__ */ React27.createElement("form", { className: "space-y-8", autoComplete: "off", onSubmit: (e) => {
|
|
2815
|
+
e.preventDefault();
|
|
2816
|
+
submitEnable2FA(otp.join(""));
|
|
2817
|
+
} }, /* @__PURE__ */ React27.createElement("div", { className: "flex justify-between gap-2", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ React27.createElement(
|
|
2818
|
+
"input",
|
|
2819
|
+
{
|
|
2820
|
+
key: index,
|
|
2821
|
+
ref: (el) => {
|
|
2822
|
+
inputRefs.current[index] = el;
|
|
2823
|
+
},
|
|
2824
|
+
type: "text",
|
|
2825
|
+
inputMode: "numeric",
|
|
2826
|
+
maxLength: 1,
|
|
2827
|
+
value: digit,
|
|
2828
|
+
onChange: (e) => handleOtpChange(index, e.target.value),
|
|
2829
|
+
onKeyDown: (e) => {
|
|
2830
|
+
if (e.key === "Backspace" && !otp[index] && index > 0) {
|
|
2831
|
+
inputRefs.current[index - 1]?.focus();
|
|
2832
|
+
}
|
|
2833
|
+
},
|
|
2834
|
+
className: "w-10 h-12 text-center text-lg bg-transparent border-b-2 border-neutral-100 text-black outline-none focus:border-black transition-all duration-300"
|
|
2835
|
+
}
|
|
2836
|
+
))), /* @__PURE__ */ React27.createElement(
|
|
2837
|
+
ThreeDActionButton,
|
|
2838
|
+
{
|
|
2839
|
+
type: "submit",
|
|
2840
|
+
disabled: otp.join("").length < 6,
|
|
2841
|
+
isLoading: isSubmitting,
|
|
2842
|
+
className: "w-full py-3.5"
|
|
2843
|
+
},
|
|
2844
|
+
"Verify & Enable"
|
|
2845
|
+
))))), show2FADisableModal && /* @__PURE__ */ React27.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React27.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShow2FADisableModal(false) }), /* @__PURE__ */ React27.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React27.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 border-b border-neutral-50" }, /* @__PURE__ */ React27.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Disable 2FA"), /* @__PURE__ */ React27.createElement("button", { onClick: () => !isSubmitting && setShow2FADisableModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: CancelCircleIcon6, size: 18 }))), /* @__PURE__ */ React27.createElement("div", { className: "p-6" }, /* @__PURE__ */ React27.createElement("div", { className: "text-center mb-8 mt-2" }, /* @__PURE__ */ React27.createElement("h2", { className: "text-xl text-black mb-2 tracking-tight" }, "Security Check"), /* @__PURE__ */ React27.createElement("p", { className: "text-[13px] text-neutral-500" }, "Enter the code from your authenticator app to disable 2FA.")), /* @__PURE__ */ React27.createElement("form", { className: "space-y-8", autoComplete: "off", onSubmit: (e) => {
|
|
2846
|
+
e.preventDefault();
|
|
2847
|
+
submitDisable2FA(otp.join(""));
|
|
2848
|
+
} }, /* @__PURE__ */ React27.createElement("div", { className: "flex justify-between gap-2", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ React27.createElement(
|
|
2849
|
+
"input",
|
|
2850
|
+
{
|
|
2851
|
+
key: index,
|
|
2852
|
+
ref: (el) => {
|
|
2853
|
+
inputRefs.current[index] = el;
|
|
2854
|
+
},
|
|
2855
|
+
type: "text",
|
|
2856
|
+
inputMode: "numeric",
|
|
2857
|
+
maxLength: 1,
|
|
2858
|
+
value: digit,
|
|
2859
|
+
onChange: (e) => handleOtpChange(index, e.target.value),
|
|
2860
|
+
onKeyDown: (e) => {
|
|
2861
|
+
if (e.key === "Backspace" && !otp[index] && index > 0) {
|
|
2862
|
+
inputRefs.current[index - 1]?.focus();
|
|
2863
|
+
}
|
|
2864
|
+
},
|
|
2865
|
+
className: "w-10 h-12 text-center text-lg bg-transparent border-b-2 border-neutral-100 text-black outline-none focus:border-black transition-all duration-300"
|
|
2866
|
+
}
|
|
2867
|
+
))), /* @__PURE__ */ React27.createElement(
|
|
2868
|
+
ThreeDActionButton,
|
|
2869
|
+
{
|
|
2870
|
+
type: "submit",
|
|
2871
|
+
disabled: otp.join("").length < 6,
|
|
2872
|
+
isLoading: isSubmitting,
|
|
2873
|
+
className: "w-full py-3.5"
|
|
2874
|
+
},
|
|
2875
|
+
"Verify & Disable"
|
|
2876
|
+
))))), showPasskeyModal && /* @__PURE__ */ React27.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React27.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShowPasskeyModal(false) }), /* @__PURE__ */ React27.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React27.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 border-b border-neutral-50" }, /* @__PURE__ */ React27.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable Passkey"), /* @__PURE__ */ React27.createElement("button", { onClick: () => !isSubmitting && setShowPasskeyModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: CancelCircleIcon6, size: 18 }))), /* @__PURE__ */ React27.createElement("div", { className: "p-6 text-center" }, /* @__PURE__ */ React27.createElement("div", { className: "w-16 h-16 bg-neutral-100 rounded-full flex items-center justify-center mx-auto mb-4 text-black" }, /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: Key01Icon, size: 28 })), /* @__PURE__ */ React27.createElement("h2", { className: "text-lg text-black mb-2 tracking-tight" }, "Simplify your Sign In"), /* @__PURE__ */ React27.createElement("p", { className: "text-[13px] text-neutral-500 mb-8 leading-relaxed" }, "Use your device's biometrics (Face ID, Touch ID, or PIN) to securely sign into your account without needing a password."), /* @__PURE__ */ React27.createElement(
|
|
2877
|
+
ThreeDActionButton,
|
|
2878
|
+
{
|
|
2879
|
+
onClick: submitEnablePasskey,
|
|
2880
|
+
isLoading: isSubmitting,
|
|
2881
|
+
className: "w-full py-3.5"
|
|
2882
|
+
},
|
|
2883
|
+
"Create Passkey"
|
|
2884
|
+
)))));
|
|
2885
|
+
};
|
|
2886
|
+
var MenuRow3 = ({
|
|
2887
|
+
icon,
|
|
2888
|
+
title,
|
|
2889
|
+
subtitle,
|
|
2890
|
+
onClick,
|
|
2891
|
+
iconColor = "text-black",
|
|
2892
|
+
titleColor = "text-black",
|
|
2893
|
+
isLast = false,
|
|
2894
|
+
isToggle = false,
|
|
2895
|
+
toggleState = false,
|
|
2896
|
+
toggleLoading = false,
|
|
2897
|
+
disabled = false
|
|
2898
|
+
}) => /* @__PURE__ */ React27.createElement(
|
|
2899
|
+
"div",
|
|
2900
|
+
{
|
|
2901
|
+
onClick: disabled ? void 0 : onClick,
|
|
2902
|
+
className: `flex items-center p-4 transition-colors ${!isLast ? "border-b border-neutral-50" : ""} ${disabled ? "opacity-40 cursor-not-allowed" : "cursor-pointer hover:bg-neutral-50"}`
|
|
2903
|
+
},
|
|
2904
|
+
/* @__PURE__ */ React27.createElement("div", { className: "w-10 h-10 rounded-full border border-neutral-100 bg-neutral-50 flex items-center justify-center shrink-0 mr-4" }, /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon, size: 18, className: iconColor })),
|
|
2905
|
+
/* @__PURE__ */ React27.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React27.createElement("p", { className: `text-[14px] font-medium truncate ${titleColor}` }, title), /* @__PURE__ */ React27.createElement("p", { className: "text-[12px] text-neutral-500 truncate" }, subtitle)),
|
|
2906
|
+
isToggle ? /* @__PURE__ */ React27.createElement("div", { className: `relative w-11 h-6 rounded-full transition-colors duration-300 ml-2 shrink-0 ${toggleState ? "bg-black" : "bg-neutral-200"} ${disabled ? "opacity-50" : ""}` }, /* @__PURE__ */ React27.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__ */ React27.createElement(HugeiconsIcon19, { icon: Loading03Icon10, size: 10, className: "animate-spin text-black" }))) : /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: ArrowRight01Icon4, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
2907
|
+
);
|
|
2908
|
+
|
|
2604
2909
|
// src/components/FeatureScroll.tsx
|
|
2605
|
-
import
|
|
2910
|
+
import React28, { useRef as useRef7, useState as useState19, useEffect as useEffect12 } from "react";
|
|
2606
2911
|
import Image4 from "next/image";
|
|
2607
|
-
import { HugeiconsIcon as
|
|
2608
|
-
import { ArrowLeft01Icon as
|
|
2912
|
+
import { HugeiconsIcon as HugeiconsIcon20 } from "@hugeicons/react";
|
|
2913
|
+
import { ArrowLeft01Icon as ArrowLeft01Icon5, ArrowRight01Icon as ArrowRight01Icon5, Loading03Icon as Loading03Icon11 } from "@hugeicons/core-free-icons";
|
|
2609
2914
|
var FeatureCard = ({ feature, bgImage }) => {
|
|
2610
|
-
const [isBgLoading, setIsBgLoading] =
|
|
2611
|
-
const [isFgLoading, setIsFgLoading] =
|
|
2612
|
-
return /* @__PURE__ */
|
|
2915
|
+
const [isBgLoading, setIsBgLoading] = useState19(true);
|
|
2916
|
+
const [isFgLoading, setIsFgLoading] = useState19(!!feature.image);
|
|
2917
|
+
return /* @__PURE__ */ React28.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__ */ React28.createElement("div", { className: "relative w-full aspect-16/10 bg-neutral-100 rounded-2xl overflow-hidden mb-6 flex items-center justify-center" }, /* @__PURE__ */ React28.createElement(
|
|
2613
2918
|
Image4,
|
|
2614
2919
|
{
|
|
2615
2920
|
src: bgImage,
|
|
@@ -2622,7 +2927,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2622
2927
|
${isBgLoading ? "blur-xl scale-110" : "blur-0 scale-100"}
|
|
2623
2928
|
`
|
|
2624
2929
|
}
|
|
2625
|
-
), /* @__PURE__ */
|
|
2930
|
+
), /* @__PURE__ */ React28.createElement(
|
|
2626
2931
|
"div",
|
|
2627
2932
|
{
|
|
2628
2933
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.25] mix-blend-overlay",
|
|
@@ -2630,7 +2935,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2630
2935
|
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")`
|
|
2631
2936
|
}
|
|
2632
2937
|
}
|
|
2633
|
-
), isFgLoading && feature.image && /* @__PURE__ */
|
|
2938
|
+
), isFgLoading && feature.image && /* @__PURE__ */ React28.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__ */ React28.createElement(HugeiconsIcon20, { icon: Loading03Icon11, size: 32, className: "animate-spin text-neutral-400" })), feature.image && /* @__PURE__ */ React28.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__ */ React28.createElement(
|
|
2634
2939
|
Image4,
|
|
2635
2940
|
{
|
|
2636
2941
|
src: feature.image,
|
|
@@ -2643,12 +2948,12 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2643
2948
|
${isFgLoading ? "opacity-0 blur-xl" : "opacity-100 blur-0"}
|
|
2644
2949
|
`
|
|
2645
2950
|
}
|
|
2646
|
-
))), /* @__PURE__ */
|
|
2951
|
+
))), /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ React28.createElement("h3", { className: " text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ React28.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 max-w-[90%]" }, feature.desc)));
|
|
2647
2952
|
};
|
|
2648
2953
|
var FeatureScroll = ({ tagline, headline, features }) => {
|
|
2649
|
-
const scrollRef =
|
|
2650
|
-
const [canScrollLeft, setCanScrollLeft] =
|
|
2651
|
-
const [canScrollRight, setCanScrollRight] =
|
|
2954
|
+
const scrollRef = useRef7(null);
|
|
2955
|
+
const [canScrollLeft, setCanScrollLeft] = useState19(false);
|
|
2956
|
+
const [canScrollRight, setCanScrollRight] = useState19(true);
|
|
2652
2957
|
const checkScroll = () => {
|
|
2653
2958
|
if (scrollRef.current) {
|
|
2654
2959
|
const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;
|
|
@@ -2672,72 +2977,72 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2672
2977
|
"https://retinalabs.company/assets/images/bg_6.avif",
|
|
2673
2978
|
"https://retinalabs.company/assets/images/bg_1.avif"
|
|
2674
2979
|
];
|
|
2675
|
-
return /* @__PURE__ */
|
|
2980
|
+
return /* @__PURE__ */ React28.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden" }, /* @__PURE__ */ React28.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ React28.createElement("div", { className: "relative z-10 text-left" }, /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ React28.createElement("h2", { className: " text-3xl tracking-tight text-black leading-[1.05]" }, headline)), /* @__PURE__ */ React28.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ React28.createElement(
|
|
2676
2981
|
"button",
|
|
2677
2982
|
{
|
|
2678
2983
|
onClick: () => scroll("left"),
|
|
2679
2984
|
disabled: !canScrollLeft,
|
|
2680
2985
|
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"
|
|
2681
2986
|
},
|
|
2682
|
-
/* @__PURE__ */
|
|
2683
|
-
), /* @__PURE__ */
|
|
2987
|
+
/* @__PURE__ */ React28.createElement(HugeiconsIcon20, { icon: ArrowLeft01Icon5, size: 20 })
|
|
2988
|
+
), /* @__PURE__ */ React28.createElement(
|
|
2684
2989
|
"button",
|
|
2685
2990
|
{
|
|
2686
2991
|
onClick: () => scroll("right"),
|
|
2687
2992
|
disabled: !canScrollRight,
|
|
2688
2993
|
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"
|
|
2689
2994
|
},
|
|
2690
|
-
/* @__PURE__ */
|
|
2691
|
-
))), /* @__PURE__ */
|
|
2995
|
+
/* @__PURE__ */ React28.createElement(HugeiconsIcon20, { icon: ArrowRight01Icon5, size: 20 })
|
|
2996
|
+
))), /* @__PURE__ */ React28.createElement(
|
|
2692
2997
|
"div",
|
|
2693
2998
|
{
|
|
2694
2999
|
ref: scrollRef,
|
|
2695
3000
|
onScroll: checkScroll,
|
|
2696
3001
|
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"
|
|
2697
3002
|
},
|
|
2698
|
-
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */
|
|
2699
|
-
), /* @__PURE__ */
|
|
3003
|
+
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */ React28.createElement(FeatureCard, { key: idx, feature, bgImage: bgImages[idx] }))
|
|
3004
|
+
), /* @__PURE__ */ React28.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ React28.createElement(
|
|
2700
3005
|
"button",
|
|
2701
3006
|
{
|
|
2702
3007
|
onClick: () => scroll("left"),
|
|
2703
3008
|
disabled: !canScrollLeft,
|
|
2704
3009
|
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"
|
|
2705
3010
|
},
|
|
2706
|
-
/* @__PURE__ */
|
|
2707
|
-
), /* @__PURE__ */
|
|
3011
|
+
/* @__PURE__ */ React28.createElement(HugeiconsIcon20, { icon: ArrowLeft01Icon5, size: 20 })
|
|
3012
|
+
), /* @__PURE__ */ React28.createElement(
|
|
2708
3013
|
"button",
|
|
2709
3014
|
{
|
|
2710
3015
|
onClick: () => scroll("right"),
|
|
2711
3016
|
disabled: !canScrollRight,
|
|
2712
3017
|
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"
|
|
2713
3018
|
},
|
|
2714
|
-
/* @__PURE__ */
|
|
3019
|
+
/* @__PURE__ */ React28.createElement(HugeiconsIcon20, { icon: ArrowRight01Icon5, size: 20 })
|
|
2715
3020
|
))));
|
|
2716
3021
|
};
|
|
2717
3022
|
|
|
2718
3023
|
// src/components/PlatformFeatures.tsx
|
|
2719
|
-
import
|
|
2720
|
-
import { HugeiconsIcon as
|
|
3024
|
+
import React29 from "react";
|
|
3025
|
+
import { HugeiconsIcon as HugeiconsIcon21 } from "@hugeicons/react";
|
|
2721
3026
|
var PlatformFeatures = ({
|
|
2722
3027
|
tagline,
|
|
2723
3028
|
headline,
|
|
2724
3029
|
description,
|
|
2725
3030
|
features
|
|
2726
3031
|
}) => {
|
|
2727
|
-
return /* @__PURE__ */
|
|
3032
|
+
return /* @__PURE__ */ React29.createElement("section", { className: "w-full flex justify-center mb-15 relative z-10" }, /* @__PURE__ */ React29.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col items-start mb-16 relative z-10" }, /* @__PURE__ */ React29.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ React29.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.05] mb-6" }, headline), /* @__PURE__ */ React29.createElement("p", { className: "text-[15px] leading-[1.8] text-neutral-600 max-w-2xl" }, description)), /* @__PURE__ */ React29.createElement("div", { className: "w-full h-px bg-neutral-100 mb-16", "aria-hidden": "true" }), /* @__PURE__ */ React29.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__ */ React29.createElement(
|
|
2728
3033
|
"div",
|
|
2729
3034
|
{
|
|
2730
3035
|
key: idx,
|
|
2731
3036
|
className: "flex flex-col group animate-in fade-in slide-in-from-bottom-4 duration-700 fill-mode-both",
|
|
2732
3037
|
style: { animationDelay: feature.delay || "0ms" }
|
|
2733
3038
|
},
|
|
2734
|
-
/* @__PURE__ */
|
|
2735
|
-
/* @__PURE__ */
|
|
3039
|
+
/* @__PURE__ */ React29.createElement("div", { className: "flex flex-row items-center gap-4 mb-4" }, /* @__PURE__ */ React29.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__ */ React29.createElement(HugeiconsIcon21, { icon: feature.icon, size: 24 })), /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col justify-center" }, /* @__PURE__ */ React29.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400 mb-0.5" }, feature.label || "CAPABILITY"), /* @__PURE__ */ React29.createElement("h3", { className: "text-xl tracking-tight text-black" }, feature.title))),
|
|
3040
|
+
/* @__PURE__ */ React29.createElement("div", null, /* @__PURE__ */ React29.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 pr-4" }, feature.desc))
|
|
2736
3041
|
)))));
|
|
2737
3042
|
};
|
|
2738
3043
|
|
|
2739
3044
|
// src/components/ManagedDocument.tsx
|
|
2740
|
-
import
|
|
3045
|
+
import React30, { useState as useState20, useEffect as useEffect13, useRef as useRef8 } from "react";
|
|
2741
3046
|
var ManagedDocument = ({
|
|
2742
3047
|
tagline,
|
|
2743
3048
|
title,
|
|
@@ -2745,8 +3050,8 @@ var ManagedDocument = ({
|
|
|
2745
3050
|
contactText,
|
|
2746
3051
|
contactEmail
|
|
2747
3052
|
}) => {
|
|
2748
|
-
const [isAnimating, setIsAnimating] =
|
|
2749
|
-
const titleRef =
|
|
3053
|
+
const [isAnimating, setIsAnimating] = useState20(false);
|
|
3054
|
+
const titleRef = useRef8(null);
|
|
2750
3055
|
useEffect13(() => {
|
|
2751
3056
|
const observer = new IntersectionObserver(
|
|
2752
3057
|
([entry]) => {
|
|
@@ -2767,7 +3072,7 @@ var ManagedDocument = ({
|
|
|
2767
3072
|
}, []);
|
|
2768
3073
|
return (
|
|
2769
3074
|
// Outer layout wrapper (takes up available space, adds padding)
|
|
2770
|
-
/* @__PURE__ */
|
|
3075
|
+
/* @__PURE__ */ React30.createElement("div", { className: "grow pt-4 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React30.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__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(
|
|
2771
3076
|
"h1",
|
|
2772
3077
|
{
|
|
2773
3078
|
ref: titleRef,
|
|
@@ -2775,7 +3080,7 @@ var ManagedDocument = ({
|
|
|
2775
3080
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2776
3081
|
},
|
|
2777
3082
|
title
|
|
2778
|
-
)), sections.map((section, index) => /* @__PURE__ */
|
|
3083
|
+
)), sections.map((section, index) => /* @__PURE__ */ React30.createElement("div", { key: index, className: "relative px-5 md:px-12 py-8 md:py-10" }, section.heading && /* @__PURE__ */ React30.createElement("p", { className: " text-[11px] tracking-[0.2em] text-black mb-4 text-left " }, section.heading), section.paragraphs && section.paragraphs.length > 0 && /* @__PURE__ */ React30.createElement("div", { className: "text-[14px] leading-[1.8] text-neutral-700 space-y-4 text-left " }, section.paragraphs.map((text, pIndex) => /* @__PURE__ */ React30.createElement("p", { key: pIndex }, text))), section.quote && /* @__PURE__ */ React30.createElement("div", { className: `border-neutral-100 border rounded-xl p-6 ${section.paragraphs && section.paragraphs.length > 0 ? "mt-6" : ""}` }, /* @__PURE__ */ React30.createElement("p", { className: "text-neutral-900 text-[14px] md:text-[14px] leading-relaxed" }, '"', section.quote, '"')))), (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(
|
|
2779
3084
|
"a",
|
|
2780
3085
|
{
|
|
2781
3086
|
href: `mailto:${contactEmail}`,
|
|
@@ -2787,18 +3092,18 @@ var ManagedDocument = ({
|
|
|
2787
3092
|
};
|
|
2788
3093
|
|
|
2789
3094
|
// src/components/ManagedContactBlock.tsx
|
|
2790
|
-
import
|
|
2791
|
-
import { HugeiconsIcon as
|
|
3095
|
+
import React31, { useState as useState21, useEffect as useEffect14 } from "react";
|
|
3096
|
+
import { HugeiconsIcon as HugeiconsIcon22 } from "@hugeicons/react";
|
|
2792
3097
|
var SecureEmail = ({ user, domain, className }) => {
|
|
2793
|
-
const [isMounted, setIsMounted] =
|
|
3098
|
+
const [isMounted, setIsMounted] = useState21(false);
|
|
2794
3099
|
useEffect14(() => {
|
|
2795
3100
|
setIsMounted(true);
|
|
2796
3101
|
}, []);
|
|
2797
3102
|
if (!isMounted) {
|
|
2798
|
-
return /* @__PURE__ */
|
|
3103
|
+
return /* @__PURE__ */ React31.createElement("span", { className, style: { opacity: 0 } }, "Loading");
|
|
2799
3104
|
}
|
|
2800
3105
|
const email = `${user}@${domain}`;
|
|
2801
|
-
return /* @__PURE__ */
|
|
3106
|
+
return /* @__PURE__ */ React31.createElement("a", { href: `mailto:${email}`, className }, email);
|
|
2802
3107
|
};
|
|
2803
3108
|
var ManagedContactBlock = ({
|
|
2804
3109
|
tagline,
|
|
@@ -2807,7 +3112,7 @@ var ManagedContactBlock = ({
|
|
|
2807
3112
|
emails,
|
|
2808
3113
|
socials
|
|
2809
3114
|
}) => {
|
|
2810
|
-
return /* @__PURE__ */
|
|
3115
|
+
return /* @__PURE__ */ React31.createElement("div", { className: "grow pt-4 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React31.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ React31.createElement(
|
|
2811
3116
|
"div",
|
|
2812
3117
|
{
|
|
2813
3118
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2816,21 +3121,21 @@ var ManagedContactBlock = ({
|
|
|
2816
3121
|
backgroundRepeat: "repeat"
|
|
2817
3122
|
}
|
|
2818
3123
|
}
|
|
2819
|
-
), /* @__PURE__ */
|
|
3124
|
+
), /* @__PURE__ */ React31.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React31.createElement("div", { className: "relative px-8 md:px-12 py-10" }, tagline && /* @__PURE__ */ React31.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React31.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ React31.createElement("div", { className: "relative px-8 md:px-12 py-8 pb-14" }, /* @__PURE__ */ React31.createElement("div", { className: "flex flex-wrap gap-12 lg:gap-16 w-full" }, company && /* @__PURE__ */ React31.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React31.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Contact Details"), /* @__PURE__ */ React31.createElement("div", { className: "space-y-3 text-[13px] text-neutral-600 leading-[1.8]" }, company.name && /* @__PURE__ */ React31.createElement("p", { className: "text-black" }, company.name), company.lines && company.lines.map((line, idx) => /* @__PURE__ */ React31.createElement("p", { key: idx }, line)), company.phone && /* @__PURE__ */ React31.createElement("p", { className: "pt-2" }, /* @__PURE__ */ React31.createElement(
|
|
2820
3125
|
"a",
|
|
2821
3126
|
{
|
|
2822
3127
|
href: `tel:${company.phone.replace(/\s+/g, "")}`,
|
|
2823
3128
|
className: "transition-colors hover:text-black"
|
|
2824
3129
|
},
|
|
2825
3130
|
company.phone
|
|
2826
|
-
)))), emails && emails.length > 0 && /* @__PURE__ */
|
|
3131
|
+
)))), emails && emails.length > 0 && /* @__PURE__ */ React31.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React31.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Email Directory"), /* @__PURE__ */ React31.createElement("div", { className: "space-y-6 text-[13px]" }, emails.map((email, idx) => /* @__PURE__ */ React31.createElement("div", { key: idx }, /* @__PURE__ */ React31.createElement("p", { className: "text-[11px] tracking-[0.2em] mb-1.5 text-neutral-500 " }, email.label), /* @__PURE__ */ React31.createElement(
|
|
2827
3132
|
SecureEmail,
|
|
2828
3133
|
{
|
|
2829
3134
|
user: email.user,
|
|
2830
3135
|
domain: email.domain,
|
|
2831
3136
|
className: "text-neutral-600 transition-colors hover:text-black"
|
|
2832
3137
|
}
|
|
2833
|
-
))))), socials && socials.length > 0 && /* @__PURE__ */
|
|
3138
|
+
))))), socials && socials.length > 0 && /* @__PURE__ */ React31.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React31.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Find Us Online"), /* @__PURE__ */ React31.createElement("div", { className: "flex flex-col space-y-5 pt-1" }, socials.map((social, idx) => /* @__PURE__ */ React31.createElement(
|
|
2834
3139
|
"a",
|
|
2835
3140
|
{
|
|
2836
3141
|
key: idx,
|
|
@@ -2839,26 +3144,26 @@ var ManagedContactBlock = ({
|
|
|
2839
3144
|
rel: "noopener noreferrer",
|
|
2840
3145
|
className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black"
|
|
2841
3146
|
},
|
|
2842
|
-
/* @__PURE__ */
|
|
2843
|
-
/* @__PURE__ */
|
|
3147
|
+
/* @__PURE__ */ React31.createElement(HugeiconsIcon22, { icon: social.icon, size: 18 }),
|
|
3148
|
+
/* @__PURE__ */ React31.createElement("span", { className: "text-[13px]" }, social.label)
|
|
2844
3149
|
)))))))));
|
|
2845
3150
|
};
|
|
2846
3151
|
|
|
2847
3152
|
// src/components/ManagedPricingBlock.tsx
|
|
2848
|
-
import
|
|
3153
|
+
import React32, { useState as useState22, useEffect as useEffect15, useRef as useRef9 } from "react";
|
|
2849
3154
|
import Link7 from "next/link";
|
|
2850
3155
|
import Image5 from "next/image";
|
|
2851
|
-
var CheckIcon = ({ className = "" }) => /* @__PURE__ */
|
|
2852
|
-
var CrossIcon = ({ className = "" }) => /* @__PURE__ */
|
|
3156
|
+
var CheckIcon = ({ className = "" }) => /* @__PURE__ */ React32.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__ */ React32.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ React32.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
3157
|
+
var CrossIcon = ({ className = "" }) => /* @__PURE__ */ React32.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__ */ React32.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ React32.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
2853
3158
|
var ManagedPricingBlock = ({
|
|
2854
3159
|
tagline,
|
|
2855
3160
|
title,
|
|
2856
3161
|
plans = [],
|
|
2857
3162
|
tabs
|
|
2858
3163
|
}) => {
|
|
2859
|
-
const [isAnimating, setIsAnimating] =
|
|
2860
|
-
const [activeTabIndex, setActiveTabIndex] =
|
|
2861
|
-
const titleRef =
|
|
3164
|
+
const [isAnimating, setIsAnimating] = useState22(false);
|
|
3165
|
+
const [activeTabIndex, setActiveTabIndex] = useState22(0);
|
|
3166
|
+
const titleRef = useRef9(null);
|
|
2862
3167
|
useEffect15(() => {
|
|
2863
3168
|
const observer = new IntersectionObserver(
|
|
2864
3169
|
([entry]) => {
|
|
@@ -2879,7 +3184,7 @@ var ManagedPricingBlock = ({
|
|
|
2879
3184
|
}, []);
|
|
2880
3185
|
const hasTabs = tabs && tabs.length > 0;
|
|
2881
3186
|
const currentPlans = hasTabs ? tabs[activeTabIndex].plans : plans;
|
|
2882
|
-
return /* @__PURE__ */
|
|
3187
|
+
return /* @__PURE__ */ React32.createElement("div", { className: "grow pt-10 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React32.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col items-center" }, /* @__PURE__ */ React32.createElement("div", { className: "w-full flex flex-col items-center text-center mb-10 sm:mb-12" }, tagline && /* @__PURE__ */ React32.createElement("span", { className: "text-[9px] tracking-[0.4em] text-black block " }, tagline), /* @__PURE__ */ React32.createElement(
|
|
2883
3188
|
"h1",
|
|
2884
3189
|
{
|
|
2885
3190
|
ref: titleRef,
|
|
@@ -2887,9 +3192,9 @@ var ManagedPricingBlock = ({
|
|
|
2887
3192
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2888
3193
|
},
|
|
2889
3194
|
title
|
|
2890
|
-
)), hasTabs && /* @__PURE__ */
|
|
3195
|
+
)), hasTabs && /* @__PURE__ */ React32.createElement("div", { className: "flex items-center justify-center mb-8 sm:mb-10 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ React32.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) => {
|
|
2891
3196
|
const isActive = activeTabIndex === idx;
|
|
2892
|
-
return /* @__PURE__ */
|
|
3197
|
+
return /* @__PURE__ */ React32.createElement(
|
|
2893
3198
|
"button",
|
|
2894
3199
|
{
|
|
2895
3200
|
key: idx,
|
|
@@ -2898,19 +3203,19 @@ var ManagedPricingBlock = ({
|
|
|
2898
3203
|
},
|
|
2899
3204
|
tab.label
|
|
2900
3205
|
);
|
|
2901
|
-
}))), /* @__PURE__ */
|
|
3206
|
+
}))), /* @__PURE__ */ React32.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__ */ React32.createElement(
|
|
2902
3207
|
"div",
|
|
2903
3208
|
{
|
|
2904
3209
|
key: `${activeTabIndex}-${planIdx}`,
|
|
2905
3210
|
className: `bg-white rounded-3xl p-6 flex flex-col relative overflow-hidden transition-all duration-300 ${plan.isPremium ? "" : ""}`
|
|
2906
3211
|
},
|
|
2907
|
-
/* @__PURE__ */
|
|
3212
|
+
/* @__PURE__ */ React32.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React32.createElement("span", { className: "text-black text-base block mb-1" }, plan.name), /* @__PURE__ */ React32.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ React32.createElement("h3", { className: "text-3xl font-light text-black" }, plan.price), plan.period && /* @__PURE__ */ React32.createElement("span", { className: "text-xs text-neutral-500" }, plan.period)), /* @__PURE__ */ React32.createElement("p", { className: "text-xs text-neutral-500 mt-2 min-h-8" }, plan.description), plan.showApps && plan.appLogos && plan.appLogos.length > 0 && /* @__PURE__ */ React32.createElement("div", { className: "flex items-center gap-2 mt-4" }, plan.appLogos.map((logo, logoIdx) => /* @__PURE__ */ React32.createElement(
|
|
2908
3213
|
"div",
|
|
2909
3214
|
{
|
|
2910
3215
|
key: logoIdx,
|
|
2911
3216
|
className: "relative w-5 h-5 overflow-hidden flex items-center justify-center shrink-0"
|
|
2912
3217
|
},
|
|
2913
|
-
/* @__PURE__ */
|
|
3218
|
+
/* @__PURE__ */ React32.createElement(
|
|
2914
3219
|
Image5,
|
|
2915
3220
|
{
|
|
2916
3221
|
src: logo.src,
|
|
@@ -2921,7 +3226,7 @@ var ManagedPricingBlock = ({
|
|
|
2921
3226
|
}
|
|
2922
3227
|
)
|
|
2923
3228
|
)))),
|
|
2924
|
-
plan.isPremium ? /* @__PURE__ */
|
|
3229
|
+
plan.isPremium ? /* @__PURE__ */ React32.createElement(ThreeDButton, { href: plan.ctaHref, className: "mb-6 w-full" }, plan.ctaText) : /* @__PURE__ */ React32.createElement(
|
|
2925
3230
|
Link7,
|
|
2926
3231
|
{
|
|
2927
3232
|
href: plan.ctaHref,
|
|
@@ -2929,20 +3234,20 @@ var ManagedPricingBlock = ({
|
|
|
2929
3234
|
},
|
|
2930
3235
|
plan.ctaText
|
|
2931
3236
|
),
|
|
2932
|
-
/* @__PURE__ */
|
|
3237
|
+
/* @__PURE__ */ React32.createElement("div", { className: "flex flex-col gap-3" }, plan.features.map((feature, featureIdx) => {
|
|
2933
3238
|
const isAvailable = feature.value !== false;
|
|
2934
3239
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
2935
|
-
return /* @__PURE__ */
|
|
3240
|
+
return /* @__PURE__ */ React32.createElement("div", { key: featureIdx, className: "flex items-center gap-2.5" }, isAvailable ? /* @__PURE__ */ React32.createElement(CheckIcon, null) : /* @__PURE__ */ React32.createElement(CrossIcon, null), /* @__PURE__ */ React32.createElement("span", { className: `text-xs truncate ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ React32.createElement("span", { className: "text-neutral-500 ml-1" }, "(", valueText, ")")));
|
|
2936
3241
|
}))
|
|
2937
3242
|
)))));
|
|
2938
3243
|
};
|
|
2939
3244
|
|
|
2940
3245
|
// src/components/ManagedBoardBlock.tsx
|
|
2941
|
-
import
|
|
3246
|
+
import React33 from "react";
|
|
2942
3247
|
import Image6 from "next/image";
|
|
2943
|
-
import { HugeiconsIcon as
|
|
3248
|
+
import { HugeiconsIcon as HugeiconsIcon23 } from "@hugeicons/react";
|
|
2944
3249
|
import { TwitterIcon, LinkedinIcon } from "@hugeicons/core-free-icons";
|
|
2945
|
-
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */
|
|
3250
|
+
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ React33.createElement(
|
|
2946
3251
|
"a",
|
|
2947
3252
|
{
|
|
2948
3253
|
href,
|
|
@@ -2950,7 +3255,7 @@ var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ React32.
|
|
|
2950
3255
|
rel: "noopener noreferrer",
|
|
2951
3256
|
className: "text-neutral-400 hover:text-black transition-colors"
|
|
2952
3257
|
},
|
|
2953
|
-
/* @__PURE__ */
|
|
3258
|
+
/* @__PURE__ */ React33.createElement(HugeiconsIcon23, { icon, size: 16 })
|
|
2954
3259
|
);
|
|
2955
3260
|
var ManagedBoardBlock = ({
|
|
2956
3261
|
tagline,
|
|
@@ -2959,7 +3264,7 @@ var ManagedBoardBlock = ({
|
|
|
2959
3264
|
contactText,
|
|
2960
3265
|
contactEmail
|
|
2961
3266
|
}) => {
|
|
2962
|
-
return /* @__PURE__ */
|
|
3267
|
+
return /* @__PURE__ */ React33.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React33.createElement("div", { className: "relative w-full mx-auto overflow-hidden max-w-7xl" }, /* @__PURE__ */ React33.createElement(
|
|
2963
3268
|
"div",
|
|
2964
3269
|
{
|
|
2965
3270
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2968,7 +3273,7 @@ var ManagedBoardBlock = ({
|
|
|
2968
3273
|
backgroundRepeat: "repeat"
|
|
2969
3274
|
}
|
|
2970
3275
|
}
|
|
2971
|
-
), /* @__PURE__ */
|
|
3276
|
+
), /* @__PURE__ */ React33.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React33.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ React33.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React33.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ React33.createElement("div", { className: "relative px-5 md:px-12 py-4 md:py-8" }, /* @__PURE__ */ React33.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__ */ React33.createElement("div", { key: idx, className: "relative p-6 md:p-8 rounded-2xl bg-white flex flex-col transition-all group" }, /* @__PURE__ */ React33.createElement("div", { className: "flex items-start space-x-4 md:space-x-5 mb-5 md:mb-6" }, /* @__PURE__ */ React33.createElement("div", { className: "relative w-14 h-14 md:w-16 md:h-16 shrink-0 bg-white overflow-hidden rounded-xl" }, /* @__PURE__ */ React33.createElement(
|
|
2972
3277
|
Image6,
|
|
2973
3278
|
{
|
|
2974
3279
|
src: member.imageSrc,
|
|
@@ -2977,7 +3282,7 @@ var ManagedBoardBlock = ({
|
|
|
2977
3282
|
sizes: "(max-width: 768px) 56px, 64px",
|
|
2978
3283
|
className: "object-cover grayscale opacity-100 transition-opacity"
|
|
2979
3284
|
}
|
|
2980
|
-
)), /* @__PURE__ */
|
|
3285
|
+
)), /* @__PURE__ */ React33.createElement("div", { className: "pt-1" }, /* @__PURE__ */ React33.createElement("h3", { className: " text-[14px] md:text-[15px] text-black tracking-tight" }, member.name), /* @__PURE__ */ React33.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 mt-1.5 " }, member.title))), /* @__PURE__ */ React33.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 text-left grow mb-8" }, member.bio), /* @__PURE__ */ React33.createElement("div", { className: "space-y-6 mt-auto" }, /* @__PURE__ */ React33.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ React33.createElement(ThreeDButton, { href: member.website }, "Visit Website")), /* @__PURE__ */ React33.createElement("div", { className: "flex space-x-4 pt-5" }, member.twitterHandle && member.twitterHandle.length > 0 && /* @__PURE__ */ React33.createElement(
|
|
2981
3286
|
MemberSocialLink,
|
|
2982
3287
|
{
|
|
2983
3288
|
href: `https://x.com/${member.twitterHandle}`,
|
|
@@ -2985,7 +3290,7 @@ var ManagedBoardBlock = ({
|
|
|
2985
3290
|
label: "X",
|
|
2986
3291
|
name: member.name
|
|
2987
3292
|
}
|
|
2988
|
-
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */
|
|
3293
|
+
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */ React33.createElement(
|
|
2989
3294
|
MemberSocialLink,
|
|
2990
3295
|
{
|
|
2991
3296
|
href: member.linkedinHandle,
|
|
@@ -2993,28 +3298,28 @@ var ManagedBoardBlock = ({
|
|
|
2993
3298
|
label: "LinkedIn",
|
|
2994
3299
|
name: member.name
|
|
2995
3300
|
}
|
|
2996
|
-
))))))), (contactText || contactEmail) && /* @__PURE__ */
|
|
3301
|
+
))))))), (contactText || contactEmail) && /* @__PURE__ */ React33.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ React33.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ React33.createElement("a", { href: `mailto:${contactEmail}`, className: "text-black decoration-black decoration-2 underline-offset-4 ml-1 transition-colors" }, contactEmail))))));
|
|
2997
3302
|
};
|
|
2998
3303
|
|
|
2999
3304
|
// src/components/ManagedNotFoundBlock.tsx
|
|
3000
|
-
import
|
|
3305
|
+
import React34 from "react";
|
|
3001
3306
|
var ManagedNotFoundBlock = ({
|
|
3002
3307
|
title = "404 - Page Not Found",
|
|
3003
3308
|
description = "The page you are looking for does not exist or has been moved."
|
|
3004
3309
|
}) => {
|
|
3005
|
-
return /* @__PURE__ */
|
|
3310
|
+
return /* @__PURE__ */ React34.createElement("main", { className: "min-h-screen flex items-center justify-center relative z-20 bg-transparent" }, /* @__PURE__ */ React34.createElement("div", { className: "p-6 w-full max-w-md mx-auto text-center" }, /* @__PURE__ */ React34.createElement("div", { className: "mb-8 flex justify-center" }, /* @__PURE__ */ React34.createElement(
|
|
3006
3311
|
"svg",
|
|
3007
3312
|
{
|
|
3008
3313
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3009
3314
|
viewBox: "0 0 24 24",
|
|
3010
3315
|
className: "w-12 h-12 fill-neutral-100"
|
|
3011
3316
|
},
|
|
3012
|
-
/* @__PURE__ */
|
|
3013
|
-
)), /* @__PURE__ */
|
|
3317
|
+
/* @__PURE__ */ React34.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" })
|
|
3318
|
+
)), /* @__PURE__ */ React34.createElement("h1", { className: " text-xl md:text-3xl text-black tracking-tight mb-4" }, title), /* @__PURE__ */ React34.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-12" }, description)));
|
|
3014
3319
|
};
|
|
3015
3320
|
|
|
3016
3321
|
// src/components/ManagedNewsletterSplitBlock.tsx
|
|
3017
|
-
import
|
|
3322
|
+
import React35 from "react";
|
|
3018
3323
|
import Image7 from "next/image";
|
|
3019
3324
|
var ManagedNewsletterSplitBlock = ({
|
|
3020
3325
|
tagline,
|
|
@@ -3028,7 +3333,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3028
3333
|
ctaHref = "/contact",
|
|
3029
3334
|
children
|
|
3030
3335
|
}) => {
|
|
3031
|
-
return /* @__PURE__ */
|
|
3336
|
+
return /* @__PURE__ */ React35.createElement("div", { className: "grow flex flex-col md:flex-row relative w-full pt-32 md:pt-0" }, /* @__PURE__ */ React35.createElement("div", { className: "hidden md:block md:w-1/2 relative min-h-screen overflow-hidden" }, /* @__PURE__ */ React35.createElement(
|
|
3032
3337
|
Image7,
|
|
3033
3338
|
{
|
|
3034
3339
|
src: imageSrc,
|
|
@@ -3038,7 +3343,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3038
3343
|
className: "object-cover object-top grayscale opacity-60",
|
|
3039
3344
|
quality: 100
|
|
3040
3345
|
}
|
|
3041
|
-
), /* @__PURE__ */
|
|
3346
|
+
), /* @__PURE__ */ React35.createElement(
|
|
3042
3347
|
"div",
|
|
3043
3348
|
{
|
|
3044
3349
|
className: "absolute inset-0 z-10 pointer-events-none",
|
|
@@ -3046,7 +3351,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3046
3351
|
background: "linear-gradient(to right, rgba(255,255,255,0) 30%, #ffffff 100%)"
|
|
3047
3352
|
}
|
|
3048
3353
|
}
|
|
3049
|
-
), /* @__PURE__ */
|
|
3354
|
+
), /* @__PURE__ */ React35.createElement(
|
|
3050
3355
|
"div",
|
|
3051
3356
|
{
|
|
3052
3357
|
className: "absolute inset-x-0 bottom-0 h-40 z-10 pointer-events-none",
|
|
@@ -3054,7 +3359,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3054
3359
|
background: "linear-gradient(to bottom, rgba(255,255,255,0) 0%, #ffffff 100%)"
|
|
3055
3360
|
}
|
|
3056
3361
|
}
|
|
3057
|
-
)), /* @__PURE__ */
|
|
3362
|
+
)), /* @__PURE__ */ React35.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__ */ React35.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__ */ React35.createElement(
|
|
3058
3363
|
"div",
|
|
3059
3364
|
{
|
|
3060
3365
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3063,7 +3368,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3063
3368
|
backgroundRepeat: "repeat"
|
|
3064
3369
|
}
|
|
3065
3370
|
}
|
|
3066
|
-
), /* @__PURE__ */
|
|
3371
|
+
), /* @__PURE__ */ React35.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React35.createElement("div", { className: "mb-10 border-b border-neutral-100 pb-8 text-center md:text-left" }, tagline && /* @__PURE__ */ React35.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 " }, tagline), /* @__PURE__ */ React35.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight mb-4" }, title), subtitle && /* @__PURE__ */ React35.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, subtitle)), /* @__PURE__ */ React35.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-10 text-center md:text-left" }, description), children && /* @__PURE__ */ React35.createElement("div", { className: "mb-8 text-left" }, children), /* @__PURE__ */ React35.createElement("div", { className: "text-center md:text-left mt-10 space-y-6" }, dividerText && /* @__PURE__ */ React35.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React35.createElement("div", { className: "grow h-px bg-neutral-100" }), /* @__PURE__ */ React35.createElement("span", { className: "shrink mx-4 text-[11px] tracking-[0.2em] text-neutral-400 " }, dividerText), /* @__PURE__ */ React35.createElement("div", { className: "grow h-px bg-neutral-100" })), ctaText && ctaHref && /* @__PURE__ */ React35.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ React35.createElement(
|
|
3067
3372
|
ThreeDButton,
|
|
3068
3373
|
{
|
|
3069
3374
|
href: ctaHref,
|
|
@@ -3074,13 +3379,13 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3074
3379
|
};
|
|
3075
3380
|
|
|
3076
3381
|
// src/components/PortfolioHero.tsx
|
|
3077
|
-
import
|
|
3382
|
+
import React36, { useEffect as useEffect16, useRef as useRef10 } from "react";
|
|
3078
3383
|
import Link8 from "next/link";
|
|
3079
3384
|
import Image8 from "next/image";
|
|
3080
|
-
import { HugeiconsIcon as
|
|
3081
|
-
import { ArrowRight01Icon as
|
|
3385
|
+
import { HugeiconsIcon as HugeiconsIcon24 } from "@hugeicons/react";
|
|
3386
|
+
import { ArrowRight01Icon as ArrowRight01Icon6 } from "@hugeicons/core-free-icons";
|
|
3082
3387
|
var useScrollAnimation = () => {
|
|
3083
|
-
const elementRef =
|
|
3388
|
+
const elementRef = useRef10(null);
|
|
3084
3389
|
useEffect16(() => {
|
|
3085
3390
|
const el = elementRef.current;
|
|
3086
3391
|
if (!el) return;
|
|
@@ -3117,13 +3422,13 @@ var PortfolioHero = ({
|
|
|
3117
3422
|
secondaryCtaHref
|
|
3118
3423
|
}) => {
|
|
3119
3424
|
const heroContentRef = useScrollAnimation();
|
|
3120
|
-
return /* @__PURE__ */
|
|
3425
|
+
return /* @__PURE__ */ React36.createElement("section", { className: "pt-8 pb-16 px-6 md:px-12 flex flex-col relative overflow-hidden z-10 w-full" }, /* @__PURE__ */ React36.createElement(
|
|
3121
3426
|
"div",
|
|
3122
3427
|
{
|
|
3123
3428
|
ref: heroContentRef,
|
|
3124
3429
|
className: "w-full opacity-0 translate-y-5 transition-all duration-1000 ease-out relative z-10"
|
|
3125
3430
|
},
|
|
3126
|
-
/* @__PURE__ */
|
|
3431
|
+
/* @__PURE__ */ React36.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-5 sm:gap-8 mb-10" }, /* @__PURE__ */ React36.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__ */ React36.createElement(
|
|
3127
3432
|
Image8,
|
|
3128
3433
|
{
|
|
3129
3434
|
src: imageSrc,
|
|
@@ -3134,7 +3439,7 @@ var PortfolioHero = ({
|
|
|
3134
3439
|
sizes: "(max-width: 640px) 80px, 128px",
|
|
3135
3440
|
quality: 100
|
|
3136
3441
|
}
|
|
3137
|
-
)), /* @__PURE__ */
|
|
3442
|
+
)), /* @__PURE__ */ React36.createElement("div", { className: "flex flex-col text-left" }, /* @__PURE__ */ React36.createElement("h1", { className: " text-3xl sm:text-5xl lg:text-6xl tracking-tight text-black leading-none mb-3" }, name), socialLabel && /* @__PURE__ */ React36.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, socialLabel), socialLinkText && socialLinkHref && /* @__PURE__ */ React36.createElement(
|
|
3138
3443
|
"a",
|
|
3139
3444
|
{
|
|
3140
3445
|
href: socialLinkHref,
|
|
@@ -3144,31 +3449,31 @@ var PortfolioHero = ({
|
|
|
3144
3449
|
},
|
|
3145
3450
|
socialLinkText
|
|
3146
3451
|
))),
|
|
3147
|
-
/* @__PURE__ */
|
|
3148
|
-
/* @__PURE__ */
|
|
3452
|
+
/* @__PURE__ */ React36.createElement("p", { className: "text-[13px] leading-[1.8] max-w-4xl mb-12 text-neutral-600" }, bio),
|
|
3453
|
+
/* @__PURE__ */ React36.createElement("div", { className: "flex flex-col sm:flex-row gap-4 w-full sm:w-auto" }, primaryCtaText && primaryCtaHref && /* @__PURE__ */ React36.createElement("div", { className: "w-full sm:w-auto *:w-full" }, /* @__PURE__ */ React36.createElement(
|
|
3149
3454
|
ThreeDButton,
|
|
3150
3455
|
{
|
|
3151
3456
|
href: primaryCtaHref,
|
|
3152
3457
|
className: "py-3 tracking-widest text-[11px]"
|
|
3153
3458
|
},
|
|
3154
3459
|
primaryCtaText
|
|
3155
|
-
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
3460
|
+
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ React36.createElement(
|
|
3156
3461
|
Link8,
|
|
3157
3462
|
{
|
|
3158
3463
|
href: secondaryCtaHref,
|
|
3159
3464
|
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"
|
|
3160
3465
|
},
|
|
3161
3466
|
secondaryCtaText,
|
|
3162
|
-
/* @__PURE__ */
|
|
3467
|
+
/* @__PURE__ */ React36.createElement(HugeiconsIcon24, { icon: ArrowRight01Icon6, size: 16 })
|
|
3163
3468
|
))
|
|
3164
3469
|
));
|
|
3165
3470
|
};
|
|
3166
3471
|
|
|
3167
3472
|
// src/components/GifFeatureCard.tsx
|
|
3168
|
-
import
|
|
3473
|
+
import React37, { useState as useState23 } from "react";
|
|
3169
3474
|
import Image9 from "next/image";
|
|
3170
|
-
import { HugeiconsIcon as
|
|
3171
|
-
import { Loading03Icon as
|
|
3475
|
+
import { HugeiconsIcon as HugeiconsIcon25 } from "@hugeicons/react";
|
|
3476
|
+
import { Loading03Icon as Loading03Icon12 } from "@hugeicons/core-free-icons";
|
|
3172
3477
|
var GifFeatureCard = ({
|
|
3173
3478
|
gifSrc,
|
|
3174
3479
|
title,
|
|
@@ -3176,20 +3481,20 @@ var GifFeatureCard = ({
|
|
|
3176
3481
|
alt = "Feature animation",
|
|
3177
3482
|
className = "aspect-video"
|
|
3178
3483
|
}) => {
|
|
3179
|
-
const [isLoading, setIsLoading] =
|
|
3180
|
-
return /* @__PURE__ */
|
|
3181
|
-
|
|
3484
|
+
const [isLoading, setIsLoading] = useState23(true);
|
|
3485
|
+
return /* @__PURE__ */ React37.createElement("div", { className: `relative w-full bg-black overflow-hidden shadow-2xl ${className}` }, isLoading && /* @__PURE__ */ React37.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-black" }, /* @__PURE__ */ React37.createElement(
|
|
3486
|
+
HugeiconsIcon25,
|
|
3182
3487
|
{
|
|
3183
|
-
icon:
|
|
3488
|
+
icon: Loading03Icon12,
|
|
3184
3489
|
size: 32,
|
|
3185
3490
|
className: "animate-spin text-white"
|
|
3186
3491
|
}
|
|
3187
|
-
)), /* @__PURE__ */
|
|
3492
|
+
)), /* @__PURE__ */ React37.createElement(
|
|
3188
3493
|
"div",
|
|
3189
3494
|
{
|
|
3190
3495
|
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"}`
|
|
3191
3496
|
},
|
|
3192
|
-
/* @__PURE__ */
|
|
3497
|
+
/* @__PURE__ */ React37.createElement(
|
|
3193
3498
|
Image9,
|
|
3194
3499
|
{
|
|
3195
3500
|
src: gifSrc,
|
|
@@ -3200,16 +3505,16 @@ var GifFeatureCard = ({
|
|
|
3200
3505
|
className: "object-cover object-center pointer-events-none"
|
|
3201
3506
|
}
|
|
3202
3507
|
)
|
|
3203
|
-
), /* @__PURE__ */
|
|
3508
|
+
), /* @__PURE__ */ React37.createElement(
|
|
3204
3509
|
"div",
|
|
3205
3510
|
{
|
|
3206
3511
|
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"
|
|
3207
3512
|
}
|
|
3208
|
-
), /* @__PURE__ */
|
|
3513
|
+
), /* @__PURE__ */ React37.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__ */ React37.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__ */ React37.createElement("p", { className: "text-[13px] sm:text-[15px] leading-relaxed text-neutral-300 max-w-2xl drop-shadow-sm" }, subtitle)));
|
|
3209
3514
|
};
|
|
3210
3515
|
|
|
3211
3516
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
3212
|
-
import
|
|
3517
|
+
import React38, { useState as useState24, useEffect as useEffect17, useRef as useRef11 } from "react";
|
|
3213
3518
|
import Image10 from "next/image";
|
|
3214
3519
|
var MedicalFeatureStatsBlock = ({
|
|
3215
3520
|
bottomHeadline,
|
|
@@ -3218,8 +3523,8 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3218
3523
|
trustText,
|
|
3219
3524
|
stats
|
|
3220
3525
|
}) => {
|
|
3221
|
-
const [isAnimating, setIsAnimating] =
|
|
3222
|
-
const titleRef =
|
|
3526
|
+
const [isAnimating, setIsAnimating] = useState24(false);
|
|
3527
|
+
const titleRef = useRef11(null);
|
|
3223
3528
|
useEffect17(() => {
|
|
3224
3529
|
const observer = new IntersectionObserver(
|
|
3225
3530
|
([entry]) => {
|
|
@@ -3238,7 +3543,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3238
3543
|
}
|
|
3239
3544
|
return () => observer.disconnect();
|
|
3240
3545
|
}, []);
|
|
3241
|
-
return /* @__PURE__ */
|
|
3546
|
+
return /* @__PURE__ */ React38.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ React38.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React38.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ React38.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ React38.createElement(
|
|
3242
3547
|
"h2",
|
|
3243
3548
|
{
|
|
3244
3549
|
ref: titleRef,
|
|
@@ -3246,7 +3551,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3246
3551
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
3247
3552
|
},
|
|
3248
3553
|
bottomHeadline
|
|
3249
|
-
), /* @__PURE__ */
|
|
3554
|
+
), /* @__PURE__ */ React38.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ React38.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ React38.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ React38.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__ */ React38.createElement(
|
|
3250
3555
|
Image10,
|
|
3251
3556
|
{
|
|
3252
3557
|
src,
|
|
@@ -3255,17 +3560,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3255
3560
|
sizes: "48px",
|
|
3256
3561
|
className: "object-cover"
|
|
3257
3562
|
}
|
|
3258
|
-
)))), /* @__PURE__ */
|
|
3563
|
+
)))), /* @__PURE__ */ React38.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ React38.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ React38.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ React38.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ React38.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ React38.createElement("h1", { className: "text-6xl gradient-text md:text-[80px] tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
|
|
3259
3564
|
};
|
|
3260
3565
|
|
|
3261
3566
|
// src/components/ConsultantShowcase.tsx
|
|
3262
|
-
import
|
|
3567
|
+
import React39, { useState as useState25 } from "react";
|
|
3263
3568
|
import Image11 from "next/image";
|
|
3264
|
-
import { HugeiconsIcon as
|
|
3265
|
-
import { Loading03Icon as
|
|
3569
|
+
import { HugeiconsIcon as HugeiconsIcon26 } from "@hugeicons/react";
|
|
3570
|
+
import { Loading03Icon as Loading03Icon13 } from "@hugeicons/core-free-icons";
|
|
3266
3571
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
3267
|
-
const [isLoading, setIsLoading] =
|
|
3268
|
-
return /* @__PURE__ */
|
|
3572
|
+
const [isLoading, setIsLoading] = useState25(true);
|
|
3573
|
+
return /* @__PURE__ */ React39.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ React39.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__ */ React39.createElement(HugeiconsIcon26, { icon: Loading03Icon13, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ React39.createElement(
|
|
3269
3574
|
Image11,
|
|
3270
3575
|
{
|
|
3271
3576
|
src,
|
|
@@ -3284,9 +3589,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
3284
3589
|
var ConsultantShowcase = ({
|
|
3285
3590
|
profiles
|
|
3286
3591
|
}) => {
|
|
3287
|
-
const [currentIndex, setCurrentIndex] =
|
|
3288
|
-
const [touchStart, setTouchStart] =
|
|
3289
|
-
const [touchEnd, setTouchEnd] =
|
|
3592
|
+
const [currentIndex, setCurrentIndex] = useState25(0);
|
|
3593
|
+
const [touchStart, setTouchStart] = useState25(null);
|
|
3594
|
+
const [touchEnd, setTouchEnd] = useState25(null);
|
|
3290
3595
|
const nextSlide = () => {
|
|
3291
3596
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
3292
3597
|
};
|
|
@@ -3311,7 +3616,7 @@ var ConsultantShowcase = ({
|
|
|
3311
3616
|
}
|
|
3312
3617
|
};
|
|
3313
3618
|
if (!profiles || profiles.length === 0) return null;
|
|
3314
|
-
return /* @__PURE__ */
|
|
3619
|
+
return /* @__PURE__ */ React39.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ React39.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React39.createElement(
|
|
3315
3620
|
"div",
|
|
3316
3621
|
{
|
|
3317
3622
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -3321,13 +3626,13 @@ var ConsultantShowcase = ({
|
|
|
3321
3626
|
},
|
|
3322
3627
|
profiles.map((profile, idx) => {
|
|
3323
3628
|
const isActive = idx === currentIndex;
|
|
3324
|
-
return /* @__PURE__ */
|
|
3629
|
+
return /* @__PURE__ */ React39.createElement(
|
|
3325
3630
|
"div",
|
|
3326
3631
|
{
|
|
3327
3632
|
key: profile.id,
|
|
3328
3633
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
3329
3634
|
},
|
|
3330
|
-
/* @__PURE__ */
|
|
3635
|
+
/* @__PURE__ */ React39.createElement(
|
|
3331
3636
|
ImageWithLoader,
|
|
3332
3637
|
{
|
|
3333
3638
|
src: profile.imageSrc,
|
|
@@ -3335,14 +3640,14 @@ var ConsultantShowcase = ({
|
|
|
3335
3640
|
priority: idx === 0
|
|
3336
3641
|
}
|
|
3337
3642
|
),
|
|
3338
|
-
/* @__PURE__ */
|
|
3339
|
-
/* @__PURE__ */
|
|
3340
|
-
/* @__PURE__ */
|
|
3643
|
+
/* @__PURE__ */ React39.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
3644
|
+
/* @__PURE__ */ React39.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" }),
|
|
3645
|
+
/* @__PURE__ */ React39.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__ */ React39.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ React39.createElement("p", { className: "text-[15px] text-white/80 tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ React39.createElement("p", { className: "text-[15px] text-white/80 tracking-wide mt-1" }, profile.description)))
|
|
3341
3646
|
);
|
|
3342
3647
|
}),
|
|
3343
|
-
/* @__PURE__ */
|
|
3344
|
-
/* @__PURE__ */
|
|
3345
|
-
/* @__PURE__ */
|
|
3648
|
+
/* @__PURE__ */ React39.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide }),
|
|
3649
|
+
/* @__PURE__ */ React39.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide }),
|
|
3650
|
+
/* @__PURE__ */ React39.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__ */ React39.createElement(
|
|
3346
3651
|
"button",
|
|
3347
3652
|
{
|
|
3348
3653
|
key: idx,
|
|
@@ -3354,13 +3659,13 @@ var ConsultantShowcase = ({
|
|
|
3354
3659
|
};
|
|
3355
3660
|
|
|
3356
3661
|
// src/components/ContentGridBlock.tsx
|
|
3357
|
-
import
|
|
3662
|
+
import React40, { useState as useState26 } from "react";
|
|
3358
3663
|
import Image12 from "next/image";
|
|
3359
|
-
import { HugeiconsIcon as
|
|
3360
|
-
import { Loading03Icon as
|
|
3664
|
+
import { HugeiconsIcon as HugeiconsIcon27 } from "@hugeicons/react";
|
|
3665
|
+
import { Loading03Icon as Loading03Icon14 } from "@hugeicons/core-free-icons";
|
|
3361
3666
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
3362
|
-
const [isLoading, setIsLoading] =
|
|
3363
|
-
return /* @__PURE__ */
|
|
3667
|
+
const [isLoading, setIsLoading] = useState26(true);
|
|
3668
|
+
return /* @__PURE__ */ React40.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ React40.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__ */ React40.createElement(HugeiconsIcon27, { icon: Loading03Icon14, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ React40.createElement(
|
|
3364
3669
|
Image12,
|
|
3365
3670
|
{
|
|
3366
3671
|
src,
|
|
@@ -3382,30 +3687,30 @@ var ContentGridBlock = ({
|
|
|
3382
3687
|
middleBottomCard,
|
|
3383
3688
|
rightCards
|
|
3384
3689
|
}) => {
|
|
3385
|
-
return /* @__PURE__ */
|
|
3690
|
+
return /* @__PURE__ */ React40.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React40.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ React40.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ React40.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ React40.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ React40.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ React40.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ React40.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React40.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ React40.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ React40.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ React40.createElement("div", null, /* @__PURE__ */ React40.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ React40.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ React40.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React40.createElement(Image12, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ React40.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React40.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ React40.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ React40.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ React40.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React40.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ React40.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ React40.createElement(Image12, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ React40.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ React40.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ React40.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__ */ React40.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ React40.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React40.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ React40.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ React40.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React40.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ React40.createElement("div", null, /* @__PURE__ */ React40.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ React40.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ React40.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React40.createElement(Image12, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ React40.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React40.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ React40.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ React40.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ React40.createElement("div", { key: idx, className: "relative w-full h-80 text-white rounded-3xl overflow-hidden group" }, /* @__PURE__ */ React40.createElement(
|
|
3386
3691
|
ImageWithLoader2,
|
|
3387
3692
|
{
|
|
3388
3693
|
src: card.bgImageSrc,
|
|
3389
3694
|
alt: card.title,
|
|
3390
3695
|
className: "absolute inset-0 w-full h-full"
|
|
3391
3696
|
}
|
|
3392
|
-
), /* @__PURE__ */
|
|
3697
|
+
), /* @__PURE__ */ React40.createElement("div", { className: "absolute inset-0 z-20 pointer-events-none" }), /* @__PURE__ */ React40.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ React40.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ React40.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ React40.createElement("div", { className: "pt-3" }, /* @__PURE__ */ React40.createElement("h4", { className: "text-[15px] text-white tracking-wide" }, card.title), /* @__PURE__ */ React40.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
|
|
3393
3698
|
};
|
|
3394
3699
|
|
|
3395
3700
|
// src/components/ManagedProjectsBlock.tsx
|
|
3396
|
-
import
|
|
3701
|
+
import React41 from "react";
|
|
3397
3702
|
import Link9 from "next/link";
|
|
3398
3703
|
var GridSection = ({
|
|
3399
3704
|
children,
|
|
3400
3705
|
isLast = false,
|
|
3401
3706
|
className = "py-8 md:py-10"
|
|
3402
|
-
}) => /* @__PURE__ */
|
|
3707
|
+
}) => /* @__PURE__ */ React41.createElement("div", { className: `relative px-5 md:px-12 ${className} ${!isLast ? "" : ""}` }, children);
|
|
3403
3708
|
var ManagedProjectsBlock = ({
|
|
3404
3709
|
tagline,
|
|
3405
3710
|
title,
|
|
3406
3711
|
projects
|
|
3407
3712
|
}) => {
|
|
3408
|
-
return /* @__PURE__ */
|
|
3713
|
+
return /* @__PURE__ */ React41.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React41.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-5xl mx-auto overflow-hidden" }, /* @__PURE__ */ React41.createElement(
|
|
3409
3714
|
"div",
|
|
3410
3715
|
{
|
|
3411
3716
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3414,10 +3719,10 @@ var ManagedProjectsBlock = ({
|
|
|
3414
3719
|
backgroundRepeat: "repeat"
|
|
3415
3720
|
}
|
|
3416
3721
|
}
|
|
3417
|
-
), /* @__PURE__ */
|
|
3722
|
+
), /* @__PURE__ */ React41.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React41.createElement(GridSection, null, tagline && /* @__PURE__ */ React41.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React41.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), projects.map((project, index) => {
|
|
3418
3723
|
const isLast = index === projects.length - 1;
|
|
3419
|
-
const projectContent = /* @__PURE__ */
|
|
3420
|
-
return /* @__PURE__ */
|
|
3724
|
+
const projectContent = /* @__PURE__ */ React41.createElement("div", { className: "group block w-full" }, /* @__PURE__ */ React41.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__ */ React41.createElement("div", { className: "flex items-center gap-3 md:gap-4" }, /* @__PURE__ */ React41.createElement("h2", { className: " text-[16px] text-black transition-all flex items-center gap-2" }, project.title, /* @__PURE__ */ React41.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__ */ React41.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__ */ React41.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 shrink-0 " }, project.date)), /* @__PURE__ */ React41.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 max-w-4xl text-left transition-colors group-hover:text-black" }, project.description));
|
|
3725
|
+
return /* @__PURE__ */ React41.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__ */ React41.createElement("a", { href: project.link, target: "_blank", rel: "noopener noreferrer", className: "block outline-none" }, projectContent) : /* @__PURE__ */ React41.createElement(Link9, { href: project.link, className: "block outline-none" }, projectContent));
|
|
3421
3726
|
}))));
|
|
3422
3727
|
};
|
|
3423
3728
|
export {
|
|
@@ -3454,6 +3759,7 @@ export {
|
|
|
3454
3759
|
UniversalOrganizationPage,
|
|
3455
3760
|
UniversalProfilePage,
|
|
3456
3761
|
UniversalProfileSettings,
|
|
3762
|
+
UniversalSecurityPage,
|
|
3457
3763
|
UniversalSidebar,
|
|
3458
3764
|
UniversalTransactionPage,
|
|
3459
3765
|
UniversalWalletPage,
|