nvis-fe-cms-libs 2.1.5 → 2.1.7
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.
|
@@ -847,7 +847,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
847
847
|
}
|
|
848
848
|
);
|
|
849
849
|
};
|
|
850
|
-
function useWindowSize$
|
|
850
|
+
function useWindowSize$3() {
|
|
851
851
|
const [width, setWidth] = require$$0.useState(
|
|
852
852
|
typeof window !== "undefined" ? window.innerWidth : 1200
|
|
853
853
|
);
|
|
@@ -859,13 +859,13 @@ var __async = (__this, __arguments, generator) => {
|
|
|
859
859
|
}, []);
|
|
860
860
|
return width;
|
|
861
861
|
}
|
|
862
|
-
const PartnersSection = ({ data, t, imageBaseUrl = "", section }) => {
|
|
862
|
+
const PartnersSection$1 = ({ data, t, imageBaseUrl = "", section }) => {
|
|
863
863
|
var _a, _b, _c;
|
|
864
864
|
const partnersData = ((_c = (_b = (_a = data == null ? void 0 : data.sectionDataBindingItems) == null ? void 0 : _a.filter((item) => item == null ? void 0 : item.data)) == null ? void 0 : _b.sort((a, b) => (a.sortOrder || 0) - (b.sortOrder || 0))) == null ? void 0 : _c.map((item) => item.data)) || [];
|
|
865
865
|
const [currentPartnerSlide, setCurrentPartnerSlide] = require$$0.useState(0);
|
|
866
866
|
const [partnersVisible, setPartnersVisible] = require$$0.useState(false);
|
|
867
867
|
const partnersRef = require$$0.useRef(null);
|
|
868
|
-
const windowWidth = useWindowSize$
|
|
868
|
+
const windowWidth = useWindowSize$3();
|
|
869
869
|
const sectionTitle = (section == null ? void 0 : section.title) || t("partners.sectionTitle") || "Đối tác";
|
|
870
870
|
const getLogoUrl = (logoUrl) => {
|
|
871
871
|
if (!logoUrl) return null;
|
|
@@ -951,6 +951,189 @@ var __async = (__this, __arguments, generator) => {
|
|
|
951
951
|
) })
|
|
952
952
|
] }) });
|
|
953
953
|
};
|
|
954
|
+
const PartnerCard_2 = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
|
|
955
|
+
const itemRef = require$$0.useRef(null);
|
|
956
|
+
const [visible, setVisible] = require$$0.useState(false);
|
|
957
|
+
const [isHovered, setIsHovered] = require$$0.useState(false);
|
|
958
|
+
require$$0.useEffect(() => {
|
|
959
|
+
const observer = new IntersectionObserver(
|
|
960
|
+
(entries) => {
|
|
961
|
+
entries.forEach((entry) => {
|
|
962
|
+
if (entry.isIntersecting) {
|
|
963
|
+
setVisible(true);
|
|
964
|
+
observer.unobserve(entry.target);
|
|
965
|
+
}
|
|
966
|
+
});
|
|
967
|
+
},
|
|
968
|
+
{ threshold: 0.2 }
|
|
969
|
+
);
|
|
970
|
+
if (itemRef.current) observer.observe(itemRef.current);
|
|
971
|
+
return () => itemRef.current && observer.unobserve(itemRef.current);
|
|
972
|
+
}, []);
|
|
973
|
+
const logoSrc = getLogoUrl(partner.logoUrl);
|
|
974
|
+
const cardContent = /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
975
|
+
display: "flex",
|
|
976
|
+
flexDirection: "column",
|
|
977
|
+
alignItems: "center",
|
|
978
|
+
justifyContent: "center",
|
|
979
|
+
flex: 1
|
|
980
|
+
}, children: logoSrc ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
981
|
+
width: "100%",
|
|
982
|
+
height: "100px",
|
|
983
|
+
display: "flex",
|
|
984
|
+
alignItems: "center",
|
|
985
|
+
justifyContent: "center"
|
|
986
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
987
|
+
"img",
|
|
988
|
+
{
|
|
989
|
+
src: logoSrc,
|
|
990
|
+
alt: partner.name || t("partners.logoAlt") || "Partner logo",
|
|
991
|
+
style: {
|
|
992
|
+
maxWidth: "100%",
|
|
993
|
+
maxHeight: "100%",
|
|
994
|
+
objectFit: "contain",
|
|
995
|
+
transform: isHovered ? "scale(1.05)" : "scale(1)",
|
|
996
|
+
transition: "transform 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
997
|
+
},
|
|
998
|
+
loading: "lazy"
|
|
999
|
+
}
|
|
1000
|
+
) }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-surface", style: {
|
|
1001
|
+
width: "5rem",
|
|
1002
|
+
height: "5rem",
|
|
1003
|
+
borderRadius: "9999px",
|
|
1004
|
+
display: "flex",
|
|
1005
|
+
alignItems: "center",
|
|
1006
|
+
justifyContent: "center"
|
|
1007
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: { fontSize: "1.875rem" }, children: "🤝" }) }) });
|
|
1008
|
+
const baseClasses = `card transition-all duration-700 ease-out ${visible ? "opacity-100 scale-100" : "opacity-0 scale-75"}`;
|
|
1009
|
+
const dynamicStyles = {
|
|
1010
|
+
transitionDelay: `${idx * 150}ms`,
|
|
1011
|
+
textDecoration: "none",
|
|
1012
|
+
overflow: "hidden",
|
|
1013
|
+
minHeight: "280px",
|
|
1014
|
+
padding: "1.5rem",
|
|
1015
|
+
display: "flex",
|
|
1016
|
+
flexDirection: "column"
|
|
1017
|
+
};
|
|
1018
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1019
|
+
"a",
|
|
1020
|
+
{
|
|
1021
|
+
ref: itemRef,
|
|
1022
|
+
href: partner.websiteUrl || "#",
|
|
1023
|
+
target: partner.websiteUrl ? "_blank" : "_self",
|
|
1024
|
+
rel: partner.websiteUrl ? "noopener noreferrer" : "",
|
|
1025
|
+
className: baseClasses,
|
|
1026
|
+
style: dynamicStyles,
|
|
1027
|
+
onMouseEnter: () => setIsHovered(true),
|
|
1028
|
+
onMouseLeave: () => setIsHovered(false),
|
|
1029
|
+
children: cardContent
|
|
1030
|
+
}
|
|
1031
|
+
);
|
|
1032
|
+
};
|
|
1033
|
+
function useWindowSize$2() {
|
|
1034
|
+
const [width, setWidth] = require$$0.useState(
|
|
1035
|
+
typeof window !== "undefined" ? window.innerWidth : 1200
|
|
1036
|
+
);
|
|
1037
|
+
require$$0.useEffect(() => {
|
|
1038
|
+
if (typeof window === "undefined") return;
|
|
1039
|
+
const handleResize = () => setWidth(window.innerWidth);
|
|
1040
|
+
window.addEventListener("resize", handleResize);
|
|
1041
|
+
return () => window.removeEventListener("resize", handleResize);
|
|
1042
|
+
}, []);
|
|
1043
|
+
return width;
|
|
1044
|
+
}
|
|
1045
|
+
const PartnersSection = ({ data, t, imageBaseUrl = "", section }) => {
|
|
1046
|
+
var _a, _b, _c;
|
|
1047
|
+
const partnersData = ((_c = (_b = (_a = data == null ? void 0 : data.sectionDataBindingItems) == null ? void 0 : _a.filter((item) => item == null ? void 0 : item.data)) == null ? void 0 : _b.sort((a, b) => (a.sortOrder || 0) - (b.sortOrder || 0))) == null ? void 0 : _c.map((item) => item.data)) || [];
|
|
1048
|
+
const [currentPartnerSlide, setCurrentPartnerSlide] = require$$0.useState(0);
|
|
1049
|
+
const [partnersVisible, setPartnersVisible] = require$$0.useState(false);
|
|
1050
|
+
const partnersRef = require$$0.useRef(null);
|
|
1051
|
+
const windowWidth = useWindowSize$2();
|
|
1052
|
+
const sectionTitle = (section == null ? void 0 : section.title) || t("partners.sectionTitle") || "Đối tác";
|
|
1053
|
+
const getLogoUrl = (logoUrl) => {
|
|
1054
|
+
if (!logoUrl) return null;
|
|
1055
|
+
if (logoUrl.startsWith("http")) return logoUrl;
|
|
1056
|
+
return `${imageBaseUrl}${logoUrl}`;
|
|
1057
|
+
};
|
|
1058
|
+
const partners = require$$0.useMemo(() => {
|
|
1059
|
+
const getPerSlide = () => {
|
|
1060
|
+
if (windowWidth < 640) return 2;
|
|
1061
|
+
if (windowWidth < 1024) return 3;
|
|
1062
|
+
return 4;
|
|
1063
|
+
};
|
|
1064
|
+
const grouped = [];
|
|
1065
|
+
const perSlide = getPerSlide();
|
|
1066
|
+
for (let i = 0; i < partnersData.length; i += perSlide) {
|
|
1067
|
+
grouped.push(partnersData.slice(i, i + perSlide));
|
|
1068
|
+
}
|
|
1069
|
+
return grouped;
|
|
1070
|
+
}, [partnersData, windowWidth]);
|
|
1071
|
+
require$$0.useEffect(() => {
|
|
1072
|
+
if (partners.length > 1) {
|
|
1073
|
+
const interval = setInterval(() => {
|
|
1074
|
+
setCurrentPartnerSlide((prev) => (prev + 1) % partners.length);
|
|
1075
|
+
}, 5e3);
|
|
1076
|
+
return () => clearInterval(interval);
|
|
1077
|
+
}
|
|
1078
|
+
}, [partners.length]);
|
|
1079
|
+
require$$0.useEffect(() => {
|
|
1080
|
+
const observer = new IntersectionObserver(
|
|
1081
|
+
(entries) => {
|
|
1082
|
+
entries.forEach((entry) => {
|
|
1083
|
+
if (entry.isIntersecting) {
|
|
1084
|
+
setPartnersVisible(true);
|
|
1085
|
+
observer.unobserve(entry.target);
|
|
1086
|
+
}
|
|
1087
|
+
});
|
|
1088
|
+
},
|
|
1089
|
+
{ threshold: 0.1 }
|
|
1090
|
+
);
|
|
1091
|
+
if (partnersRef.current) observer.observe(partnersRef.current);
|
|
1092
|
+
return () => partnersRef.current && observer.unobserve(partnersRef.current);
|
|
1093
|
+
}, []);
|
|
1094
|
+
if (!partnersData.length) return null;
|
|
1095
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
|
|
1096
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-block px-4 py-2 rounded-full border border-[var(--border-color)] bg-surface text-subtitle font-semibold text-brand-primary shadow-sm", children: [
|
|
1097
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-partner", folder: "PartnersSection", className: "w-4 h-4 icon-gradient" }),
|
|
1098
|
+
" ",
|
|
1099
|
+
sectionTitle
|
|
1100
|
+
] }) }),
|
|
1101
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1102
|
+
"div",
|
|
1103
|
+
{
|
|
1104
|
+
className: `transition-all duration-1000 ease-out ${partnersVisible ? "opacity-100 scale-100" : "opacity-0 scale-95"}`,
|
|
1105
|
+
children: [
|
|
1106
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative h-56 md:h-64 lg:h-72 xl:h-80 mb-8", children: partners.map((group, slideIndex) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1107
|
+
"div",
|
|
1108
|
+
{
|
|
1109
|
+
className: `absolute inset-0 transition-all duration-1000 ease-in-out ${slideIndex === currentPartnerSlide ? "opacity-100 translate-x-0" : slideIndex < currentPartnerSlide ? "opacity-0 -translate-x-full" : "opacity-0 translate-x-full"}`,
|
|
1110
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-6 h-full px-2", children: group.map((partner, idx) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1111
|
+
PartnerCard_2,
|
|
1112
|
+
{
|
|
1113
|
+
partner,
|
|
1114
|
+
idx,
|
|
1115
|
+
t,
|
|
1116
|
+
getLogoUrl
|
|
1117
|
+
},
|
|
1118
|
+
partner.id || idx
|
|
1119
|
+
)) })
|
|
1120
|
+
},
|
|
1121
|
+
slideIndex
|
|
1122
|
+
)) }),
|
|
1123
|
+
partners.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center space-x-2", children: partners.map((_, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1124
|
+
"button",
|
|
1125
|
+
{
|
|
1126
|
+
onClick: () => setCurrentPartnerSlide(index2),
|
|
1127
|
+
className: `w-3 h-3 rounded-full transition-all duration-300 ${index2 === currentPartnerSlide ? "bg-brand-primary scale-125 shadow-lg" : "bg-surface hover:bg-brand-primary/70"}`,
|
|
1128
|
+
"aria-label": `Slide ${index2 + 1}`
|
|
1129
|
+
},
|
|
1130
|
+
index2
|
|
1131
|
+
)) })
|
|
1132
|
+
]
|
|
1133
|
+
}
|
|
1134
|
+
) })
|
|
1135
|
+
] }) });
|
|
1136
|
+
};
|
|
954
1137
|
const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }) => {
|
|
955
1138
|
const [milestones, setMilestones] = require$$0.useState([]);
|
|
956
1139
|
const [loading, setLoading] = require$$0.useState(true);
|
|
@@ -1124,7 +1307,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1124
1307
|
] })
|
|
1125
1308
|
] }) });
|
|
1126
1309
|
};
|
|
1127
|
-
const PartnerListCard = ({ partner, idx, t, isDarkMode, getLogoUrl }) => {
|
|
1310
|
+
const PartnerListCard$1 = ({ partner, idx, t, isDarkMode, getLogoUrl }) => {
|
|
1128
1311
|
const logoUrl = getLogoUrl(partner.logoUrl);
|
|
1129
1312
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1130
1313
|
"a",
|
|
@@ -1204,7 +1387,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1204
1387
|
}
|
|
1205
1388
|
);
|
|
1206
1389
|
};
|
|
1207
|
-
function useWindowSize() {
|
|
1390
|
+
function useWindowSize$1() {
|
|
1208
1391
|
const [width, setWidth] = require$$0.useState(
|
|
1209
1392
|
typeof window !== "undefined" ? window.innerWidth : 1200
|
|
1210
1393
|
);
|
|
@@ -1216,6 +1399,230 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1216
1399
|
return width;
|
|
1217
1400
|
}
|
|
1218
1401
|
const PartnerListSection = ({ t, getPartnerList, imageBaseUrl = "", section }) => {
|
|
1402
|
+
const [partnersData, setPartnersData] = require$$0.useState([]);
|
|
1403
|
+
const [error, setError] = require$$0.useState(null);
|
|
1404
|
+
const [loading, setLoading] = require$$0.useState(true);
|
|
1405
|
+
const [currentPartnerSlide, setCurrentPartnerSlide] = require$$0.useState(0);
|
|
1406
|
+
const [partnersVisible, setPartnersVisible] = require$$0.useState(false);
|
|
1407
|
+
const partnersRef = require$$0.useRef(null);
|
|
1408
|
+
const windowWidth = useWindowSize$1();
|
|
1409
|
+
const sectionTitle = (section == null ? void 0 : section.title) || t("partners.sectionTitle");
|
|
1410
|
+
const getLogoUrl = (logoUrl) => {
|
|
1411
|
+
if (!logoUrl) return null;
|
|
1412
|
+
if (logoUrl.startsWith("http")) return logoUrl;
|
|
1413
|
+
return `${imageBaseUrl}${logoUrl}`;
|
|
1414
|
+
};
|
|
1415
|
+
require$$0.useEffect(() => {
|
|
1416
|
+
const fetchData = () => __async(null, null, function* () {
|
|
1417
|
+
try {
|
|
1418
|
+
const res = yield getPartnerList();
|
|
1419
|
+
if (res.success) {
|
|
1420
|
+
setPartnersData(res.data || []);
|
|
1421
|
+
} else {
|
|
1422
|
+
setError(res.error || "Error fetching partners");
|
|
1423
|
+
}
|
|
1424
|
+
} catch (err) {
|
|
1425
|
+
setError(err.message);
|
|
1426
|
+
} finally {
|
|
1427
|
+
setLoading(false);
|
|
1428
|
+
}
|
|
1429
|
+
});
|
|
1430
|
+
fetchData();
|
|
1431
|
+
}, []);
|
|
1432
|
+
const partners = require$$0.useMemo(() => {
|
|
1433
|
+
const getPerSlide = () => {
|
|
1434
|
+
if (windowWidth < 640) return 2;
|
|
1435
|
+
if (windowWidth < 1024) return 3;
|
|
1436
|
+
return 4;
|
|
1437
|
+
};
|
|
1438
|
+
const grouped = [];
|
|
1439
|
+
const perSlide = getPerSlide();
|
|
1440
|
+
for (let i = 0; i < partnersData.length; i += perSlide) {
|
|
1441
|
+
grouped.push(partnersData.slice(i, i + perSlide));
|
|
1442
|
+
}
|
|
1443
|
+
return grouped;
|
|
1444
|
+
}, [partnersData, windowWidth]);
|
|
1445
|
+
require$$0.useEffect(() => {
|
|
1446
|
+
if (partners.length > 1) {
|
|
1447
|
+
const interval = setInterval(() => {
|
|
1448
|
+
setCurrentPartnerSlide((prev) => (prev + 1) % partners.length);
|
|
1449
|
+
}, 5e3);
|
|
1450
|
+
return () => clearInterval(interval);
|
|
1451
|
+
}
|
|
1452
|
+
}, [partners.length]);
|
|
1453
|
+
require$$0.useEffect(() => {
|
|
1454
|
+
const fallbackTimer = setTimeout(() => setPartnersVisible(true), 500);
|
|
1455
|
+
const observer = new IntersectionObserver(
|
|
1456
|
+
(entries) => {
|
|
1457
|
+
entries.forEach((entry) => {
|
|
1458
|
+
if (entry.isIntersecting) {
|
|
1459
|
+
clearTimeout(fallbackTimer);
|
|
1460
|
+
setPartnersVisible(true);
|
|
1461
|
+
observer.unobserve(entry.target);
|
|
1462
|
+
}
|
|
1463
|
+
});
|
|
1464
|
+
},
|
|
1465
|
+
{ threshold: 0.1, rootMargin: "50px" }
|
|
1466
|
+
);
|
|
1467
|
+
if (partnersRef.current) observer.observe(partnersRef.current);
|
|
1468
|
+
else {
|
|
1469
|
+
clearTimeout(fallbackTimer);
|
|
1470
|
+
setPartnersVisible(true);
|
|
1471
|
+
}
|
|
1472
|
+
return () => {
|
|
1473
|
+
clearTimeout(fallbackTimer);
|
|
1474
|
+
if (partnersRef.current) observer.unobserve(partnersRef.current);
|
|
1475
|
+
};
|
|
1476
|
+
}, []);
|
|
1477
|
+
if (loading) {
|
|
1478
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center bg-body", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-muted", children: t("partners.loading") || "Đang tải danh sách đối tác..." }) });
|
|
1479
|
+
}
|
|
1480
|
+
if (error) {
|
|
1481
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center bg-body", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-brand-secondary", children: t("partners.error") || error }) });
|
|
1482
|
+
}
|
|
1483
|
+
if (!partnersData.length) return null;
|
|
1484
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
|
|
1485
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-block px-4 py-2 rounded-full border border-[var(--border-color)] bg-surface text-subtitle font-semibold text-brand-primary shadow-sm", children: [
|
|
1486
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-partner", folder: "PartnersSection", className: "w-4 h-4 icon-gradient" }),
|
|
1487
|
+
" ",
|
|
1488
|
+
sectionTitle
|
|
1489
|
+
] }) }),
|
|
1490
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1491
|
+
"div",
|
|
1492
|
+
{
|
|
1493
|
+
className: `transition-all duration-1000 ease-out ${partnersVisible ? "opacity-100 scale-100" : "opacity-0 scale-95"}`,
|
|
1494
|
+
children: [
|
|
1495
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative overflow-hidden mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { minHeight: "320px" }, children: partners.map((group, slideIndex) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1496
|
+
"div",
|
|
1497
|
+
{
|
|
1498
|
+
className: `absolute inset-0 w-full transition-all duration-1000 ease-in-out ${slideIndex === currentPartnerSlide ? "opacity-100 translate-x-0" : slideIndex < currentPartnerSlide ? "opacity-0 -translate-x-full" : "opacity-0 translate-x-full"}`,
|
|
1499
|
+
style: {
|
|
1500
|
+
zIndex: slideIndex === currentPartnerSlide ? 10 : 1
|
|
1501
|
+
},
|
|
1502
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-8 px-2", children: group.map((partner, idx) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1503
|
+
PartnerListCard$1,
|
|
1504
|
+
{
|
|
1505
|
+
partner,
|
|
1506
|
+
idx,
|
|
1507
|
+
t,
|
|
1508
|
+
getLogoUrl
|
|
1509
|
+
},
|
|
1510
|
+
partner.id || `${slideIndex}-${idx}`
|
|
1511
|
+
)) })
|
|
1512
|
+
},
|
|
1513
|
+
slideIndex
|
|
1514
|
+
)) }) }),
|
|
1515
|
+
partners.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center space-x-3", style: {
|
|
1516
|
+
position: "relative",
|
|
1517
|
+
zIndex: 100,
|
|
1518
|
+
paddingTop: "1rem"
|
|
1519
|
+
}, children: partners.map((_, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1520
|
+
"button",
|
|
1521
|
+
{
|
|
1522
|
+
onClick: () => setCurrentPartnerSlide(index2),
|
|
1523
|
+
style: {
|
|
1524
|
+
width: "12px",
|
|
1525
|
+
height: "12px",
|
|
1526
|
+
borderRadius: "50%",
|
|
1527
|
+
border: "none",
|
|
1528
|
+
cursor: "pointer",
|
|
1529
|
+
transition: "all 0.3s ease",
|
|
1530
|
+
backgroundColor: index2 === currentPartnerSlide ? "var(--brand-primary)" : "rgba(151, 151, 151, 0.8)",
|
|
1531
|
+
transform: index2 === currentPartnerSlide ? "scale(1.3)" : "scale(1)"
|
|
1532
|
+
},
|
|
1533
|
+
onMouseEnter: (e) => {
|
|
1534
|
+
if (index2 !== currentPartnerSlide) {
|
|
1535
|
+
e.currentTarget.style.backgroundColor = "rgba(151, 151, 151, 0.8)";
|
|
1536
|
+
}
|
|
1537
|
+
},
|
|
1538
|
+
onMouseLeave: (e) => {
|
|
1539
|
+
if (index2 !== currentPartnerSlide) {
|
|
1540
|
+
e.currentTarget.style.backgroundColor = "rgba(151, 151, 151, 0.8)";
|
|
1541
|
+
}
|
|
1542
|
+
},
|
|
1543
|
+
"aria-label": `Slide ${index2 + 1}`
|
|
1544
|
+
},
|
|
1545
|
+
index2
|
|
1546
|
+
)) })
|
|
1547
|
+
]
|
|
1548
|
+
}
|
|
1549
|
+
) })
|
|
1550
|
+
] }) });
|
|
1551
|
+
};
|
|
1552
|
+
const PartnerListCard = ({ partner, idx, t, isDarkMode, getLogoUrl }) => {
|
|
1553
|
+
const logoUrl = getLogoUrl(partner.logoUrl);
|
|
1554
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1555
|
+
"a",
|
|
1556
|
+
{
|
|
1557
|
+
href: partner.websiteUrl || "#",
|
|
1558
|
+
target: partner.websiteUrl ? "_blank" : "_self",
|
|
1559
|
+
rel: partner.websiteUrl ? "noopener noreferrer" : "",
|
|
1560
|
+
className: "card",
|
|
1561
|
+
style: {
|
|
1562
|
+
animationDelay: `${idx * 0.1}s`,
|
|
1563
|
+
textDecoration: "none",
|
|
1564
|
+
overflow: "hidden",
|
|
1565
|
+
minHeight: "280px",
|
|
1566
|
+
padding: "1.5rem",
|
|
1567
|
+
display: "flex",
|
|
1568
|
+
flexDirection: "column"
|
|
1569
|
+
},
|
|
1570
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
1571
|
+
display: "flex",
|
|
1572
|
+
flexDirection: "column",
|
|
1573
|
+
alignItems: "center",
|
|
1574
|
+
justifyContent: "center",
|
|
1575
|
+
flex: 1
|
|
1576
|
+
}, children: logoUrl ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
1577
|
+
width: "100%",
|
|
1578
|
+
height: "100px",
|
|
1579
|
+
display: "flex",
|
|
1580
|
+
alignItems: "center",
|
|
1581
|
+
justifyContent: "center",
|
|
1582
|
+
marginBottom: "1rem"
|
|
1583
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1584
|
+
"img",
|
|
1585
|
+
{
|
|
1586
|
+
src: logoUrl,
|
|
1587
|
+
alt: partner.name || t("partners.logoAlt") || "Partner logo",
|
|
1588
|
+
style: {
|
|
1589
|
+
maxWidth: "100%",
|
|
1590
|
+
maxHeight: "100%",
|
|
1591
|
+
objectFit: "contain",
|
|
1592
|
+
transition: "transform 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
1593
|
+
},
|
|
1594
|
+
onMouseEnter: (e) => {
|
|
1595
|
+
e.currentTarget.style.transform = "scale(1.05)";
|
|
1596
|
+
},
|
|
1597
|
+
onMouseLeave: (e) => {
|
|
1598
|
+
e.currentTarget.style.transform = "scale(1)";
|
|
1599
|
+
},
|
|
1600
|
+
loading: "lazy"
|
|
1601
|
+
}
|
|
1602
|
+
) }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-surface", style: {
|
|
1603
|
+
width: "5rem",
|
|
1604
|
+
height: "5rem",
|
|
1605
|
+
borderRadius: "9999px",
|
|
1606
|
+
display: "flex",
|
|
1607
|
+
alignItems: "center",
|
|
1608
|
+
justifyContent: "center",
|
|
1609
|
+
marginBottom: "1rem"
|
|
1610
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: { fontSize: "1.875rem" }, children: "🤝" }) }) })
|
|
1611
|
+
}
|
|
1612
|
+
);
|
|
1613
|
+
};
|
|
1614
|
+
function useWindowSize() {
|
|
1615
|
+
const [width, setWidth] = require$$0.useState(
|
|
1616
|
+
typeof window !== "undefined" ? window.innerWidth : 1200
|
|
1617
|
+
);
|
|
1618
|
+
require$$0.useEffect(() => {
|
|
1619
|
+
const handleResize = () => setWidth(window.innerWidth);
|
|
1620
|
+
window.addEventListener("resize", handleResize);
|
|
1621
|
+
return () => window.removeEventListener("resize", handleResize);
|
|
1622
|
+
}, []);
|
|
1623
|
+
return width;
|
|
1624
|
+
}
|
|
1625
|
+
const PartnerListSection_2 = ({ t, getPartnerList, imageBaseUrl = "", section }) => {
|
|
1219
1626
|
const [partnersData, setPartnersData] = require$$0.useState([]);
|
|
1220
1627
|
const [error, setError] = require$$0.useState(null);
|
|
1221
1628
|
const [loading, setLoading] = require$$0.useState(true);
|
|
@@ -4944,10 +5351,12 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4944
5351
|
CompanyValues,
|
|
4945
5352
|
TimelineSection,
|
|
4946
5353
|
PartnerCard,
|
|
4947
|
-
PartnersSection,
|
|
5354
|
+
PartnersSection: PartnersSection$1,
|
|
5355
|
+
PartnersSection_2: PartnersSection,
|
|
4948
5356
|
MilestoneSection,
|
|
4949
5357
|
TestimonialsSection,
|
|
4950
|
-
PartnerListCard,
|
|
5358
|
+
PartnerListCard: PartnerListCard$1,
|
|
5359
|
+
PartnerListSection_2,
|
|
4951
5360
|
PartnerListSection,
|
|
4952
5361
|
ContactFormSection,
|
|
4953
5362
|
ContactInfoSection,
|
|
@@ -4981,9 +5390,11 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4981
5390
|
exports2.PageChildrenSelectSection2 = PageChildrenSelectSection2;
|
|
4982
5391
|
exports2.PageHighlightSection = PageHighlightSection;
|
|
4983
5392
|
exports2.PartnerCard = PartnerCard;
|
|
4984
|
-
exports2.PartnerListCard = PartnerListCard;
|
|
5393
|
+
exports2.PartnerListCard = PartnerListCard$1;
|
|
4985
5394
|
exports2.PartnerListSection = PartnerListSection;
|
|
4986
|
-
exports2.
|
|
5395
|
+
exports2.PartnerListSection_2 = PartnerListSection_2;
|
|
5396
|
+
exports2.PartnersSection = PartnersSection$1;
|
|
5397
|
+
exports2.PartnersSection_2 = PartnersSection;
|
|
4987
5398
|
exports2.ProductListSection = ProductListSection;
|
|
4988
5399
|
exports2.TestimonialsSection = TestimonialsSection;
|
|
4989
5400
|
exports2.TextSection = TextSection;
|