nvis-fe-cms-libs 1.1.41 → 2.0.0
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/nvis-fe-cms-libs.es.js +1323 -1368
- package/dist/nvis-fe-cms-libs.es.js.map +1 -1
- package/dist/nvis-fe-cms-libs.umd.js +1323 -1368
- package/dist/nvis-fe-cms-libs.umd.js.map +1 -1
- package/package.json +1 -1
|
@@ -379,8 +379,7 @@ const CompanyValues = ({ companyData, t, isDarkMode }) => {
|
|
|
379
379
|
tempDiv.innerHTML = html;
|
|
380
380
|
let cleanText = tempDiv.textContent || tempDiv.innerText || "";
|
|
381
381
|
return cleanText.replace(/ /g, " ").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, '"').replace(/'/g, "'").replace(/\s+/g, " ").trim();
|
|
382
|
-
} catch (
|
|
383
|
-
console.error("Error cleaning HTML content:", error);
|
|
382
|
+
} catch (e) {
|
|
384
383
|
return String(html || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim();
|
|
385
384
|
}
|
|
386
385
|
};
|
|
@@ -392,35 +391,28 @@ const CompanyValues = ({ companyData, t, isDarkMode }) => {
|
|
|
392
391
|
const items = [
|
|
393
392
|
{
|
|
394
393
|
icon: "💡",
|
|
395
|
-
bgLight: "bg-blue-100 text-blue-600",
|
|
396
|
-
bgDark: "bg-blue-900/40 text-blue-300",
|
|
397
394
|
title: t("about.companyValues.vision") || "Tầm nhìn",
|
|
398
|
-
text: cleanHtmlContent(safeCompanyData.vision) || "Tầm nhìn của chúng tôi sẽ được cập nhật trong thời gian tới."
|
|
395
|
+
text: cleanHtmlContent(safeCompanyData.vision) || "Tầm nhìn của chúng tôi sẽ được cập nhật trong thời gian tới.",
|
|
396
|
+
bgClass: "bg-gradient-brand"
|
|
399
397
|
},
|
|
400
398
|
{
|
|
401
399
|
icon: "🚀",
|
|
402
|
-
bgLight: "bg-emerald-100 text-emerald-600",
|
|
403
|
-
bgDark: "bg-emerald-900/40 text-emerald-300",
|
|
404
400
|
title: t("about.companyValues.mission") || "Sứ mệnh",
|
|
405
|
-
text: cleanHtmlContent(safeCompanyData.mission) || "Sứ mệnh của chúng tôi sẽ được cập nhật trong thời gian tới."
|
|
401
|
+
text: cleanHtmlContent(safeCompanyData.mission) || "Sứ mệnh của chúng tôi sẽ được cập nhật trong thời gian tới.",
|
|
402
|
+
bgClass: "bg-gradient-accent"
|
|
406
403
|
},
|
|
407
404
|
{
|
|
408
405
|
icon: "💎",
|
|
409
|
-
bgLight: "bg-purple-100 text-purple-600",
|
|
410
|
-
bgDark: "bg-purple-900/40 text-purple-300",
|
|
411
406
|
title: t("about.companyValues.coreValues") || "Giá trị cốt lõi",
|
|
412
|
-
text: cleanHtmlContent(safeCompanyData.coreValues) || "Giá trị cốt lõi của chúng tôi sẽ được cập nhật trong thời gian tới."
|
|
407
|
+
text: cleanHtmlContent(safeCompanyData.coreValues) || "Giá trị cốt lõi của chúng tôi sẽ được cập nhật trong thời gian tới.",
|
|
408
|
+
bgClass: "bg-gradient-brand"
|
|
413
409
|
}
|
|
414
410
|
];
|
|
415
|
-
const validItems = items.filter((item) => {
|
|
416
|
-
const originalText = item === items[0] ? safeCompanyData.vision : item === items[1] ? safeCompanyData.mission : safeCompanyData.coreValues;
|
|
417
|
-
return originalText || true;
|
|
418
|
-
});
|
|
419
411
|
const refs = useRef([]);
|
|
420
412
|
const [visible, setVisible] = useState([]);
|
|
421
413
|
useEffect(() => {
|
|
422
|
-
setVisible(new Array(
|
|
423
|
-
if (
|
|
414
|
+
setVisible(new Array(items.length).fill(false));
|
|
415
|
+
if (items.length === 0) return;
|
|
424
416
|
const observer = new IntersectionObserver(
|
|
425
417
|
(entries) => {
|
|
426
418
|
entries.forEach((entry) => {
|
|
@@ -440,142 +432,56 @@ const CompanyValues = ({ companyData, t, isDarkMode }) => {
|
|
|
440
432
|
{ threshold: 0.2 }
|
|
441
433
|
);
|
|
442
434
|
refs.current.forEach((el) => el && observer.observe(el));
|
|
443
|
-
return () =>
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("
|
|
450
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: `text-lg font-semibold mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`, children: "Thông tin công ty" }),
|
|
451
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-sm ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: "Tầm nhìn, sứ mệnh và giá trị cốt lõi sẽ được cập nhật sớm." })
|
|
435
|
+
return () => refs.current.forEach((el) => el && observer.unobserve(el));
|
|
436
|
+
}, [items.length]);
|
|
437
|
+
if (!companyData) {
|
|
438
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card text-center", children: [
|
|
439
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-12 h-12 mx-auto mb-4 flex items-center justify-center rounded-full bg-gradient-brand text-white text-2xl", children: "🏢" }),
|
|
440
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-lg mb-2", children: "Thông tin công ty" }),
|
|
441
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text", children: "Tầm nhìn, sứ mệnh và giá trị cốt lõi sẽ được cập nhật sớm." })
|
|
452
442
|
] });
|
|
453
443
|
}
|
|
454
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-6", children:
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
item.text.includes("sẽ được cập nhật") ? "italic opacity-75" : ""}`,
|
|
483
|
-
children: item.text
|
|
484
|
-
}
|
|
485
|
-
)
|
|
486
|
-
] })
|
|
487
|
-
]
|
|
488
|
-
},
|
|
489
|
-
index2
|
|
490
|
-
);
|
|
491
|
-
} catch (error) {
|
|
492
|
-
console.error("Error rendering company value item:", item, error);
|
|
493
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
494
|
-
"div",
|
|
495
|
-
{
|
|
496
|
-
className: `flex items-start space-x-4 rounded-lg p-4 border opacity-50 ${isDarkMode ? "border-gray-700 bg-gray-800" : "border-gray-300 bg-gray-100"}`,
|
|
497
|
-
children: [
|
|
498
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `w-10 h-10 rounded-lg flex items-center justify-center ${isDarkMode ? "bg-red-900/40 text-red-300" : "bg-red-100 text-red-600"}`, children: "❌" }),
|
|
499
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
500
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: `text-lg font-bold mb-1 ${isDarkMode ? "text-white" : "text-gray-900"}`, children: "Lỗi hiển thị" }),
|
|
501
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: "Không thể hiển thị mục này do vấn đề dữ liệu." })
|
|
502
|
-
] })
|
|
503
|
-
]
|
|
504
|
-
},
|
|
505
|
-
`error-${index2}`
|
|
506
|
-
);
|
|
507
|
-
}
|
|
508
|
-
}) });
|
|
444
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-6", children: items.map((item, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
445
|
+
"div",
|
|
446
|
+
{
|
|
447
|
+
ref: (el) => refs.current[index2] = el,
|
|
448
|
+
className: `card transition-all duration-700 ease-out transform ${visible[index2] ? "opacity-100 scale-100" : "opacity-0 scale-75"}`,
|
|
449
|
+
style: { transitionDelay: `${index2 * 200}ms` },
|
|
450
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start space-x-4", children: [
|
|
451
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
452
|
+
"div",
|
|
453
|
+
{
|
|
454
|
+
className: `w-10 h-10 rounded-lg flex items-center justify-center text-white text-xl flex-shrink-0 ${item.bgClass}`,
|
|
455
|
+
children: item.icon
|
|
456
|
+
}
|
|
457
|
+
),
|
|
458
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
459
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-lg mb-1", children: item.title }),
|
|
460
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
461
|
+
"p",
|
|
462
|
+
{
|
|
463
|
+
className: `card-text leading-relaxed ${item.text.includes("sẽ được cập nhật") ? "italic opacity-75" : ""}`,
|
|
464
|
+
children: item.text
|
|
465
|
+
}
|
|
466
|
+
)
|
|
467
|
+
] })
|
|
468
|
+
] })
|
|
469
|
+
},
|
|
470
|
+
index2
|
|
471
|
+
)) });
|
|
509
472
|
};
|
|
510
473
|
const SectionWrapper = ({
|
|
511
|
-
variant,
|
|
512
|
-
isDarkMode,
|
|
474
|
+
variant = "softLight",
|
|
513
475
|
className = "",
|
|
514
476
|
children
|
|
515
477
|
}) => {
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
dark: "bg-gradient-to-b from-gray-950 via-blue-900 to-gray-950",
|
|
522
|
-
lightDecor1: "bg-blue-200/30",
|
|
523
|
-
lightDecor2: "bg-blue-300/30",
|
|
524
|
-
darkDecor1: "bg-blue-500/10",
|
|
525
|
-
darkDecor2: "bg-blue-600/10"
|
|
526
|
-
},
|
|
527
|
-
purple: {
|
|
528
|
-
light: "bg-gradient-to-b from-white via-purple-100 to-white",
|
|
529
|
-
dark: "bg-gradient-to-b from-gray-950 via-purple-900 to-gray-950",
|
|
530
|
-
lightDecor1: "bg-purple-200/30",
|
|
531
|
-
lightDecor2: "bg-pink-200/30",
|
|
532
|
-
darkDecor1: "bg-purple-500/10",
|
|
533
|
-
darkDecor2: "bg-pink-500/10"
|
|
534
|
-
},
|
|
535
|
-
green: {
|
|
536
|
-
light: "bg-gradient-to-b from-white via-emerald-100 to-white",
|
|
537
|
-
dark: "bg-gradient-to-b from-gray-950 via-emerald-900 to-gray-950",
|
|
538
|
-
lightDecor1: "bg-emerald-200/30",
|
|
539
|
-
lightDecor2: "bg-teal-200/30",
|
|
540
|
-
darkDecor1: "bg-emerald-500/10",
|
|
541
|
-
darkDecor2: "bg-teal-500/10"
|
|
542
|
-
},
|
|
543
|
-
neutral: {
|
|
544
|
-
light: "bg-gradient-to-b from-white via-gray-100 to-white",
|
|
545
|
-
dark: "bg-gradient-to-b from-gray-950 via-gray-800 to-gray-950",
|
|
546
|
-
lightDecor1: "bg-gray-200/30",
|
|
547
|
-
lightDecor2: "bg-gray-300/30",
|
|
548
|
-
darkDecor1: "bg-gray-600/10",
|
|
549
|
-
darkDecor2: "bg-gray-700/10"
|
|
550
|
-
},
|
|
551
|
-
softLight: {
|
|
552
|
-
light: "bg-gradient-to-b from-white via-blue-50 to-white",
|
|
553
|
-
dark: "bg-gradient-to-b from-gray-950 via-blue-950 to-gray-950",
|
|
554
|
-
lightDecor1: "bg-blue-100/25",
|
|
555
|
-
lightDecor2: "bg-purple-100/25",
|
|
556
|
-
darkDecor1: "bg-blue-500/10",
|
|
557
|
-
darkDecor2: "bg-purple-500/10"
|
|
478
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
479
|
+
"section",
|
|
480
|
+
{
|
|
481
|
+
className: `section-wrapper section-wrapper--${variant} ${className}`,
|
|
482
|
+
children
|
|
558
483
|
}
|
|
559
|
-
|
|
560
|
-
const current = variants[currentVariant] || variants[defaultVariant];
|
|
561
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: `relative py-32 ${isDarkMode ? current.dark : current.light} ${className}`, children: [
|
|
562
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute inset-0 overflow-hidden pointer-events-none", children: [
|
|
563
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
564
|
-
"div",
|
|
565
|
-
{
|
|
566
|
-
className: `absolute top-10 left-1/4 w-72 h-72 ${isDarkMode ? current.darkDecor1 : current.lightDecor1} rounded-full blur-3xl animate-pulse`
|
|
567
|
-
}
|
|
568
|
-
),
|
|
569
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
570
|
-
"div",
|
|
571
|
-
{
|
|
572
|
-
className: `absolute bottom-10 right-1/4 w-80 h-80 ${isDarkMode ? current.darkDecor2 : current.lightDecor2} rounded-full blur-3xl animate-pulse`,
|
|
573
|
-
style: { animationDelay: "2s" }
|
|
574
|
-
}
|
|
575
|
-
)
|
|
576
|
-
] }),
|
|
577
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative z-10", children })
|
|
578
|
-
] });
|
|
484
|
+
);
|
|
579
485
|
};
|
|
580
486
|
const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
581
487
|
var _a, _b;
|
|
@@ -640,7 +546,7 @@ const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
|
640
546
|
] }),
|
|
641
547
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative z-10 max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6", children: [
|
|
642
548
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
|
|
643
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-20 h-20 mx-auto rounded-full bg-gradient-
|
|
549
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-20 h-20 mx-auto rounded-full bg-gradient-brand p-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
644
550
|
"div",
|
|
645
551
|
{
|
|
646
552
|
className: `w-full h-full rounded-full flex items-center justify-center overflow-hidden ${isDarkMode ? "bg-gray-900" : "bg-white"}`,
|
|
@@ -658,16 +564,10 @@ const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
|
658
564
|
e.target.parentElement.appendChild(fallbackDiv);
|
|
659
565
|
}
|
|
660
566
|
}
|
|
661
|
-
) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-2xl font-bold
|
|
567
|
+
) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-2xl font-bold text-gradient-brand", children: shortName })
|
|
662
568
|
}
|
|
663
569
|
) }),
|
|
664
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
665
|
-
"h1",
|
|
666
|
-
{
|
|
667
|
-
className: `text-5xl lg:text-6xl font-extrabold tracking-tight mb-4 ${isDarkMode ? "text-transparent bg-clip-text bg-gradient-to-r from-blue-400 via-indigo-300 to-purple-400 drop-shadow-[0_2px_8px_rgba(0,0,0,0.6)]" : "text-transparent bg-clip-text bg-gradient-to-r from-blue-100 via-indigo-50 to-purple-100 drop-shadow-[0_2px_6px_rgba(0,0,0,0.4)]"}`,
|
|
668
|
-
children: name
|
|
669
|
-
}
|
|
670
|
-
)
|
|
570
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-5xl lg:text-6xl font-extrabold tracking-tight mb-4 text-gradient-brand drop-shadow-[0_2px_6px_rgba(0,0,0,0.4)]", children: name })
|
|
671
571
|
] }),
|
|
672
572
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-4xl mx-auto", children: [
|
|
673
573
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -696,32 +596,20 @@ const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
|
696
596
|
),
|
|
697
597
|
/* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid lg:grid-cols-2 gap-12 items-center", children: [
|
|
698
598
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
699
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
700
|
-
"
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
),
|
|
709
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
710
|
-
"h2",
|
|
711
|
-
{
|
|
712
|
-
className: `text-3xl lg:text-4xl font-bold mb-6 ${isDarkMode ? "text-white" : "text-gray-800"}`,
|
|
713
|
-
children: [
|
|
714
|
-
safeT("aboutCompany.story.title"),
|
|
715
|
-
" ",
|
|
716
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent", children: shortName })
|
|
717
|
-
]
|
|
718
|
-
}
|
|
719
|
-
),
|
|
599
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-block px-4 py-2 rounded-full text-sm font-semibold mb-4 bg-surface text-brand-primary border border-[var(--border-color)]", children: [
|
|
600
|
+
"📖 ",
|
|
601
|
+
safeT("aboutCompany.story.badge")
|
|
602
|
+
] }),
|
|
603
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("h2", { className: "text-3xl lg:text-4xl font-bold mb-6 text-main", children: [
|
|
604
|
+
safeT("aboutCompany.story.title"),
|
|
605
|
+
" ",
|
|
606
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-gradient-brand", children: shortName })
|
|
607
|
+
] }),
|
|
720
608
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
721
609
|
"div",
|
|
722
610
|
{
|
|
723
611
|
dangerouslySetInnerHTML: { __html: description },
|
|
724
|
-
className:
|
|
612
|
+
className: "prose max-w-none transition-colors text-muted"
|
|
725
613
|
}
|
|
726
614
|
)
|
|
727
615
|
] }),
|
|
@@ -742,12 +630,12 @@ const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
|
742
630
|
] }) }) })
|
|
743
631
|
] });
|
|
744
632
|
};
|
|
745
|
-
const TimelineSection = ({ data, t,
|
|
746
|
-
var _a;
|
|
747
|
-
const timelineData = ((_a = data == null ? void 0 : data.sectionDataBindingItems) == null ? void 0 : _a.filter((item) => item == null ? void 0 : item.data).map((item) => item.data)) || [];
|
|
633
|
+
const TimelineSection = ({ data, t, section }) => {
|
|
634
|
+
var _a, _b;
|
|
635
|
+
const timelineData = ((_b = (_a = data == null ? void 0 : data.sectionDataBindingItems) == null ? void 0 : _a.filter((item) => item == null ? void 0 : item.data)) == null ? void 0 : _b.map((item) => item.data)) || [];
|
|
748
636
|
const [timelineVisible, setTimelineVisible] = useState([]);
|
|
749
637
|
const timelineRefs = useRef([]);
|
|
750
|
-
const sectionTitle = (section == null ? void 0 : section.title) || "
|
|
638
|
+
const sectionTitle = (section == null ? void 0 : section.title) || "Timeline";
|
|
751
639
|
useEffect(() => {
|
|
752
640
|
setTimelineVisible(new Array(timelineData.length).fill(false));
|
|
753
641
|
}, [timelineData.length]);
|
|
@@ -756,73 +644,38 @@ const TimelineSection = ({ data, t, isDarkMode, section }) => {
|
|
|
756
644
|
(entries) => {
|
|
757
645
|
entries.forEach((entry) => {
|
|
758
646
|
if (entry.isIntersecting) {
|
|
759
|
-
const index2 = timelineRefs.current.findIndex(
|
|
647
|
+
const index2 = timelineRefs.current.findIndex(
|
|
648
|
+
(el) => el === entry.target
|
|
649
|
+
);
|
|
760
650
|
if (index2 !== -1) {
|
|
761
651
|
setTimelineVisible((prev) => {
|
|
762
|
-
const
|
|
763
|
-
|
|
764
|
-
return
|
|
652
|
+
const updated = [...prev];
|
|
653
|
+
updated[index2] = true;
|
|
654
|
+
return updated;
|
|
765
655
|
});
|
|
656
|
+
observer.unobserve(entry.target);
|
|
766
657
|
}
|
|
767
|
-
observer.unobserve(entry.target);
|
|
768
658
|
}
|
|
769
659
|
});
|
|
770
660
|
},
|
|
771
661
|
{ threshold: 0.1 }
|
|
772
662
|
);
|
|
773
663
|
timelineRefs.current.forEach((el) => el && observer.observe(el));
|
|
774
|
-
return () =>
|
|
775
|
-
timelineRefs.current.forEach((el) => el && observer.unobserve(el));
|
|
776
|
-
};
|
|
664
|
+
return () => timelineRefs.current.forEach((el) => el && observer.unobserve(el));
|
|
777
665
|
}, [timelineData.length]);
|
|
778
666
|
if (!timelineData.length) {
|
|
779
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className:
|
|
780
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className:
|
|
781
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
667
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 bg-body", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 text-center", children: [
|
|
668
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-subtitle font-semibold mb-2 text-main", children: t("timeline.noData.title") || "Chưa có dữ liệu" }),
|
|
669
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-muted", children: t("timeline.noData.description") || "Hiện tại chưa có milestone nào được thiết lập." })
|
|
782
670
|
] }) });
|
|
783
671
|
}
|
|
784
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, {
|
|
785
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
786
|
-
"
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
children: [
|
|
790
|
-
"📈 ",
|
|
791
|
-
sectionTitle,
|
|
792
|
-
isDarkMode && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
793
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
794
|
-
"div",
|
|
795
|
-
{
|
|
796
|
-
className: "absolute w-12 h-12 bg-white/5 rounded-full",
|
|
797
|
-
style: { left: "10%", top: "20%" }
|
|
798
|
-
}
|
|
799
|
-
),
|
|
800
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
801
|
-
"div",
|
|
802
|
-
{
|
|
803
|
-
className: "absolute w-10 h-10 bg-white/5 rounded-full",
|
|
804
|
-
style: { right: "30%", bottom: "10%" }
|
|
805
|
-
}
|
|
806
|
-
),
|
|
807
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
808
|
-
"div",
|
|
809
|
-
{
|
|
810
|
-
className: "absolute w-14 h-14 bg-white/5 rounded-md",
|
|
811
|
-
style: { left: "20%", bottom: "30%" }
|
|
812
|
-
}
|
|
813
|
-
),
|
|
814
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
815
|
-
"div",
|
|
816
|
-
{
|
|
817
|
-
className: 'absolute inset-0 bg-[url("data:image/svg+xml,%3Csvg width=\\\\\\"60\\\\\\" height=\\\\\\"60\\\\\\" viewBox=\\\\\\"0 0 60 60\\\\\\" xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"%3E%3Cg fill=\\\\\\"none\\\\\\" fill-rule=\\\\\\"evenodd\\\\\\"%3E%3Cg fill=\\\\\\"%23ffffff\\\\\\" fill-opacity=\\\\\\"0.05\\\\\\"%3E%3Ccircle cx=\\\\\\"30\\\\\\" cy=\\\\\\"30\\\\\\" r=\\\\\\"2\\\\\\"/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")] opacity-20'
|
|
818
|
-
}
|
|
819
|
-
)
|
|
820
|
-
] })
|
|
821
|
-
]
|
|
822
|
-
}
|
|
823
|
-
) }),
|
|
672
|
+
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: [
|
|
673
|
+
/* @__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 hover:shadow-md transition-all duration-300", children: [
|
|
674
|
+
"📈 ",
|
|
675
|
+
sectionTitle
|
|
676
|
+
] }) }),
|
|
824
677
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
825
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-
|
|
678
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-brand rounded-full" }),
|
|
826
679
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-8", children: timelineData.map((milestone, index2) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
827
680
|
"div",
|
|
828
681
|
{
|
|
@@ -830,64 +683,12 @@ const TimelineSection = ({ data, t, isDarkMode, section }) => {
|
|
|
830
683
|
className: `flex items-center transition-all duration-700 ease-out ${index2 % 2 === 0 ? "flex-row" : "flex-row-reverse"} ${timelineVisible[index2] ? "opacity-100 scale-100" : "opacity-0 scale-75"}`,
|
|
831
684
|
style: { transitionDelay: `${index2 * 200}ms` },
|
|
832
685
|
children: [
|
|
833
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
834
|
-
"div",
|
|
835
|
-
{
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
840
|
-
"div",
|
|
841
|
-
{
|
|
842
|
-
className: "absolute w-12 h-12 bg-white/5 rounded-full",
|
|
843
|
-
style: { left: "10%", top: "20%" }
|
|
844
|
-
}
|
|
845
|
-
),
|
|
846
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
847
|
-
"div",
|
|
848
|
-
{
|
|
849
|
-
className: "absolute w-10 h-10 bg-white/5 rounded-full",
|
|
850
|
-
style: { right: "30%", bottom: "10%" }
|
|
851
|
-
}
|
|
852
|
-
),
|
|
853
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
854
|
-
"div",
|
|
855
|
-
{
|
|
856
|
-
className: "absolute w-14 h-14 bg-white/5 rounded-md",
|
|
857
|
-
style: { left: "20%", bottom: "30%" }
|
|
858
|
-
}
|
|
859
|
-
),
|
|
860
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
861
|
-
"div",
|
|
862
|
-
{
|
|
863
|
-
className: 'absolute inset-0 bg-[url("data:image/svg+xml,%3Csvg width=\\\\\\"60\\\\\\" height=\\\\\\"60\\\\\\" viewBox=\\\\\\"0 0 60 60\\\\\\" xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"%3E%3Cg fill=\\\\\\"none\\\\\\" fill-rule=\\\\\\"evenodd\\\\\\"%3E%3Cg fill=\\\\\\"%23ffffff\\\\\\" fill-opacity=\\\\\\"0.05\\\\\\"%3E%3Ccircle cx=\\\\\\"30\\\\\\" cy=\\\\\\"30\\\\\\" r=\\\\\\"2\\\\\\"/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")] opacity-20'
|
|
864
|
-
}
|
|
865
|
-
)
|
|
866
|
-
] }),
|
|
867
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-blue-600 font-bold text-xl mb-2", children: milestone.time }),
|
|
868
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
869
|
-
"h3",
|
|
870
|
-
{
|
|
871
|
-
className: `text-lg font-bold mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`,
|
|
872
|
-
children: milestone.title
|
|
873
|
-
}
|
|
874
|
-
),
|
|
875
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
876
|
-
"p",
|
|
877
|
-
{
|
|
878
|
-
className: `${isDarkMode ? "text-gray-300" : "text-gray-600"}`,
|
|
879
|
-
children: milestone.description
|
|
880
|
-
}
|
|
881
|
-
)
|
|
882
|
-
]
|
|
883
|
-
}
|
|
884
|
-
) }),
|
|
885
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
886
|
-
"div",
|
|
887
|
-
{
|
|
888
|
-
className: `w-6 h-6 bg-gradient-to-r from-blue-500 to-purple-600 rounded-full border-4 ${isDarkMode ? "border-gray-800" : "border-white"} shadow-[0_0_10px_5px_rgba(59,130,246,0.5)] flex-shrink-0 z-10 animate-pulse`
|
|
889
|
-
}
|
|
890
|
-
),
|
|
686
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", children: [
|
|
687
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-title text-brand-primary", children: milestone.time }),
|
|
688
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-main mb-1", children: milestone.title }),
|
|
689
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text", children: milestone.description })
|
|
690
|
+
] }) }),
|
|
691
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-6 h-6 bg-gradient-brand rounded-full border-4 border-[var(--bg-body)] shadow-[0_0_10px_5px_rgba(37,99,235,0.4)] flex-shrink-0 z-10 animate-pulse" }),
|
|
891
692
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1" })
|
|
892
693
|
]
|
|
893
694
|
},
|
|
@@ -899,6 +700,7 @@ const TimelineSection = ({ data, t, isDarkMode, section }) => {
|
|
|
899
700
|
const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
|
|
900
701
|
const itemRef = useRef(null);
|
|
901
702
|
const [visible, setVisible] = useState(false);
|
|
703
|
+
const [isHovered, setIsHovered] = useState(false);
|
|
902
704
|
useEffect(() => {
|
|
903
705
|
const observer = new IntersectionObserver(
|
|
904
706
|
(entries) => {
|
|
@@ -920,93 +722,82 @@ const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
|
|
|
920
722
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
921
723
|
"div",
|
|
922
724
|
{
|
|
923
|
-
className: "absolute w-12 h-12
|
|
924
|
-
style: { left: "10%", top: "20%" }
|
|
725
|
+
className: "absolute w-12 h-12 rounded-full",
|
|
726
|
+
style: { left: "10%", top: "20%", background: "rgba(255,255,255,0.05)" }
|
|
925
727
|
}
|
|
926
728
|
),
|
|
927
729
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
928
730
|
"div",
|
|
929
731
|
{
|
|
930
|
-
className: "absolute w-10 h-10
|
|
931
|
-
style: { right: "30%", bottom: "10%" }
|
|
732
|
+
className: "absolute w-10 h-10 rounded-full",
|
|
733
|
+
style: { right: "30%", bottom: "10%", background: "rgba(255,255,255,0.05)" }
|
|
932
734
|
}
|
|
933
735
|
),
|
|
934
736
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
935
737
|
"div",
|
|
936
738
|
{
|
|
937
|
-
className: "absolute w-14 h-14
|
|
938
|
-
style: { left: "20%", bottom: "30%" }
|
|
739
|
+
className: "absolute w-14 h-14 rounded-md",
|
|
740
|
+
style: { left: "20%", bottom: "30%", background: "rgba(255,255,255,0.05)" }
|
|
939
741
|
}
|
|
940
742
|
),
|
|
941
743
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
942
744
|
"div",
|
|
943
745
|
{
|
|
944
|
-
className:
|
|
746
|
+
className: "absolute inset-0 opacity-20",
|
|
747
|
+
style: {
|
|
748
|
+
backgroundImage: 'url("data:image/svg+xml,%3Csvg width=\\"60\\" height=\\"60\\" viewBox=\\"0 0 60 60\\" xmlns=\\"http://www.w3.org/2000/svg\\"%3E%3Cg fill=\\"none\\" fill-rule=\\"evenodd\\"%3E%3Cg fill=\\"%23ffffff\\" fill-opacity=\\"0.05\\"%3E%3Ccircle cx=\\"30\\" cy=\\"30\\" r=\\"2\\"/\\%3E%3C/g\\%3E%3C/g\\%3E%3C/svg\\%3E")'
|
|
749
|
+
}
|
|
945
750
|
}
|
|
946
751
|
)
|
|
947
752
|
] }),
|
|
948
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "logo-container w-20 h-14 flex items-center justify-center mb-4 rounded-lg overflow-hidden", children: logoSrc ? /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
949
|
-
"img",
|
|
950
|
-
{
|
|
951
|
-
src: logoSrc,
|
|
952
|
-
alt: partner.name,
|
|
953
|
-
className: "logo-image max-w-full max-h-full object-contain"
|
|
954
|
-
}
|
|
955
|
-
) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-full h-full bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-white font-bold text-center text-sm px-1", children: partner.name }) }) }),
|
|
956
753
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
957
|
-
"
|
|
754
|
+
"div",
|
|
958
755
|
{
|
|
959
|
-
className:
|
|
960
|
-
|
|
756
|
+
className: "w-20 h-14 flex items-center justify-center mb-4 rounded-lg overflow-hidden bg-surface",
|
|
757
|
+
style: {
|
|
758
|
+
borderWidth: "1px",
|
|
759
|
+
borderStyle: "solid",
|
|
760
|
+
borderColor: isHovered ? "var(--brand-primary)" : "var(--border-color)",
|
|
761
|
+
backgroundColor: isHovered ? "var(--bg-body)" : "var(--bg-surface)",
|
|
762
|
+
transition: "all 0.3s ease"
|
|
763
|
+
},
|
|
764
|
+
children: logoSrc ? /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
765
|
+
"img",
|
|
766
|
+
{
|
|
767
|
+
src: logoSrc,
|
|
768
|
+
alt: partner.name,
|
|
769
|
+
className: "max-w-full max-h-full object-contain",
|
|
770
|
+
style: {
|
|
771
|
+
filter: isHovered ? "grayscale(0) opacity(1)" : isDarkMode ? "grayscale(0.3) opacity(0.8)" : "grayscale(0.2) opacity(0.9)",
|
|
772
|
+
transform: isHovered ? "scale(1.05)" : "scale(1)",
|
|
773
|
+
transition: "all 0.3s ease"
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-full h-full bg-gradient-brand flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-white font-bold text-center text-small px-1", children: partner.name }) })
|
|
961
777
|
}
|
|
962
778
|
),
|
|
963
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
964
|
-
|
|
779
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "card-title text-center mb-2", children: partner.name }),
|
|
780
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text text-center mb-2", children: partner.description }),
|
|
781
|
+
partner.websiteUrl && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
782
|
+
"div",
|
|
965
783
|
{
|
|
966
|
-
className:
|
|
967
|
-
|
|
784
|
+
className: "card-link justify-center",
|
|
785
|
+
style: {
|
|
786
|
+
opacity: isHovered ? 1 : 0,
|
|
787
|
+
transform: isHovered ? "translateY(0)" : "translateY(4px)",
|
|
788
|
+
transition: "all 0.3s ease"
|
|
789
|
+
},
|
|
790
|
+
children: [
|
|
791
|
+
t("partners.viewDetails") || "Xem chi tiết",
|
|
792
|
+
" →"
|
|
793
|
+
]
|
|
968
794
|
}
|
|
969
|
-
)
|
|
970
|
-
partner.websiteUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "website-hint", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-sm text-blue-600 font-medium", children: [
|
|
971
|
-
t("partners.viewDetails") || "Xem chi tiết",
|
|
972
|
-
" →"
|
|
973
|
-
] }) }),
|
|
974
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("style", { jsx: true, children: `
|
|
975
|
-
.partner-card {
|
|
976
|
-
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
977
|
-
}
|
|
978
|
-
.partner-card:hover {
|
|
979
|
-
transform: translateY(-3px);
|
|
980
|
-
box-shadow: 0 8px 20px ${isDarkMode ? "rgba(255,255,255,0.1)" : "rgba(0,0,0,0.1)"};
|
|
981
|
-
}
|
|
982
|
-
.logo-container {
|
|
983
|
-
background: ${isDarkMode ? "linear-gradient(135deg, #374151 0%, #1f2937 100%)" : "linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%)"};
|
|
984
|
-
border: 1px solid ${isDarkMode ? "#4b5563" : "#e2e8f0"};
|
|
985
|
-
transition: all 0.3s ease;
|
|
986
|
-
}
|
|
987
|
-
.partner-card:hover .logo-container {
|
|
988
|
-
border-color: #3b82f6;
|
|
989
|
-
background: ${isDarkMode ? "linear-gradient(135deg, #4b5563 0%, #374151 100%)" : "linear-gradient(135deg, #ffffff 0%, #f8fafc 100%)"};
|
|
990
|
-
}
|
|
991
|
-
.logo-image {
|
|
992
|
-
filter: ${isDarkMode ? "grayscale(0.3) opacity(0.8)" : "grayscale(0.2) opacity(0.9)"};
|
|
993
|
-
transition: all 0.3s ease;
|
|
994
|
-
}
|
|
995
|
-
.partner-card:hover .logo-image {
|
|
996
|
-
filter: grayscale(0) opacity(1);
|
|
997
|
-
transform: scale(1.05);
|
|
998
|
-
}
|
|
999
|
-
.website-hint {
|
|
1000
|
-
opacity: 0;
|
|
1001
|
-
transform: translateY(4px);
|
|
1002
|
-
transition: all 0.3s ease;
|
|
1003
|
-
}
|
|
1004
|
-
.partner-card:hover .website-hint {
|
|
1005
|
-
opacity: 1;
|
|
1006
|
-
transform: translateY(0);
|
|
1007
|
-
}
|
|
1008
|
-
` })
|
|
795
|
+
)
|
|
1009
796
|
] });
|
|
797
|
+
const baseClasses = `card items-center justify-center transition-all duration-700 ease-out overflow-hidden ${visible ? "opacity-100 scale-100" : "opacity-0 scale-75"}`;
|
|
798
|
+
const dynamicStyles = {
|
|
799
|
+
transitionDelay: `${idx * 150}ms`
|
|
800
|
+
};
|
|
1010
801
|
if (partner.websiteUrl) {
|
|
1011
802
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1012
803
|
"a",
|
|
@@ -1015,10 +806,12 @@ const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
|
|
|
1015
806
|
href: partner.websiteUrl,
|
|
1016
807
|
target: "_blank",
|
|
1017
808
|
rel: "noopener noreferrer",
|
|
1018
|
-
className:
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
809
|
+
className: `${baseClasses} cursor-pointer`,
|
|
810
|
+
style: __spreadProps(__spreadValues({}, dynamicStyles), {
|
|
811
|
+
textDecoration: "none"
|
|
812
|
+
}),
|
|
813
|
+
onMouseEnter: () => setIsHovered(true),
|
|
814
|
+
onMouseLeave: () => setIsHovered(false),
|
|
1022
815
|
children: cardContent
|
|
1023
816
|
}
|
|
1024
817
|
);
|
|
@@ -1027,10 +820,10 @@ const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
|
|
|
1027
820
|
"div",
|
|
1028
821
|
{
|
|
1029
822
|
ref: itemRef,
|
|
1030
|
-
className:
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
823
|
+
className: baseClasses,
|
|
824
|
+
style: dynamicStyles,
|
|
825
|
+
onMouseEnter: () => setIsHovered(true),
|
|
826
|
+
onMouseLeave: () => setIsHovered(false),
|
|
1034
827
|
children: cardContent
|
|
1035
828
|
}
|
|
1036
829
|
);
|
|
@@ -1047,14 +840,14 @@ function useWindowSize$1() {
|
|
|
1047
840
|
}, []);
|
|
1048
841
|
return width;
|
|
1049
842
|
}
|
|
1050
|
-
const PartnersSection = ({ data, t,
|
|
843
|
+
const PartnersSection = ({ data, t, imageBaseUrl = "", section }) => {
|
|
1051
844
|
var _a, _b;
|
|
1052
845
|
const partnersData = ((_b = (_a = data == null ? void 0 : data.sectionDataBindingItems) == null ? void 0 : _a.filter((item) => item == null ? void 0 : item.data)) == null ? void 0 : _b.map((item) => item.data)) || [];
|
|
1053
846
|
const [currentPartnerSlide, setCurrentPartnerSlide] = useState(0);
|
|
1054
847
|
const [partnersVisible, setPartnersVisible] = useState(false);
|
|
1055
848
|
const partnersRef = useRef(null);
|
|
1056
849
|
const windowWidth = useWindowSize$1();
|
|
1057
|
-
const sectionTitle = (section == null ? void 0 : section.title) || "
|
|
850
|
+
const sectionTitle = (section == null ? void 0 : section.title) || t("partners.sectionTitle") || "Đối tác";
|
|
1058
851
|
const getLogoUrl = (logoUrl) => {
|
|
1059
852
|
if (!logoUrl) return null;
|
|
1060
853
|
if (logoUrl.startsWith("http")) return logoUrl;
|
|
@@ -1097,17 +890,11 @@ const PartnersSection = ({ data, t, isDarkMode, imageBaseUrl = "", section }) =>
|
|
|
1097
890
|
return () => partnersRef.current && observer.unobserve(partnersRef.current);
|
|
1098
891
|
}, []);
|
|
1099
892
|
if (!partnersData.length) return null;
|
|
1100
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, {
|
|
1101
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1102
|
-
"
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
children: [
|
|
1106
|
-
"🤝 ",
|
|
1107
|
-
sectionTitle
|
|
1108
|
-
]
|
|
1109
|
-
}
|
|
1110
|
-
) }),
|
|
893
|
+
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: [
|
|
894
|
+
/* @__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: [
|
|
895
|
+
"🤝 ",
|
|
896
|
+
sectionTitle
|
|
897
|
+
] }) }),
|
|
1111
898
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1112
899
|
"div",
|
|
1113
900
|
{
|
|
@@ -1123,8 +910,7 @@ const PartnersSection = ({ data, t, isDarkMode, imageBaseUrl = "", section }) =>
|
|
|
1123
910
|
partner,
|
|
1124
911
|
idx,
|
|
1125
912
|
t,
|
|
1126
|
-
getLogoUrl
|
|
1127
|
-
isDarkMode
|
|
913
|
+
getLogoUrl
|
|
1128
914
|
},
|
|
1129
915
|
partner.id || idx
|
|
1130
916
|
)) })
|
|
@@ -1135,7 +921,8 @@ const PartnersSection = ({ data, t, isDarkMode, imageBaseUrl = "", section }) =>
|
|
|
1135
921
|
"button",
|
|
1136
922
|
{
|
|
1137
923
|
onClick: () => setCurrentPartnerSlide(index2),
|
|
1138
|
-
className: `w-3 h-3 rounded-full transition-all ${index2 === currentPartnerSlide ? "bg-
|
|
924
|
+
className: `w-3 h-3 rounded-full transition-all duration-300 ${index2 === currentPartnerSlide ? "bg-brand-primary scale-125 shadow-lg" : "bg-muted hover:bg-brand-primary/70"}`,
|
|
925
|
+
"aria-label": `Slide ${index2 + 1}`
|
|
1139
926
|
},
|
|
1140
927
|
index2
|
|
1141
928
|
)) })
|
|
@@ -1157,12 +944,9 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
|
|
|
1157
944
|
try {
|
|
1158
945
|
setLoading(true);
|
|
1159
946
|
const res = yield getMilestoneTimeline();
|
|
1160
|
-
if (res.success)
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
setMilestones([]);
|
|
1164
|
-
}
|
|
1165
|
-
} catch (error) {
|
|
947
|
+
if (res.success) setMilestones(res.data || []);
|
|
948
|
+
else setMilestones([]);
|
|
949
|
+
} catch (e) {
|
|
1166
950
|
setMilestones([]);
|
|
1167
951
|
} finally {
|
|
1168
952
|
setLoading(false);
|
|
@@ -1183,67 +967,39 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
|
|
|
1183
967
|
(entries) => {
|
|
1184
968
|
entries.forEach((entry) => {
|
|
1185
969
|
if (entry.isIntersecting) {
|
|
1186
|
-
const index2 = timelineRefs.current.findIndex(
|
|
1187
|
-
(el) => el === entry.target
|
|
1188
|
-
);
|
|
970
|
+
const index2 = timelineRefs.current.findIndex((el) => el === entry.target);
|
|
1189
971
|
if (index2 !== -1) {
|
|
1190
972
|
setTimelineVisible((prev) => {
|
|
1191
|
-
const
|
|
1192
|
-
|
|
1193
|
-
return
|
|
973
|
+
const updated = [...prev];
|
|
974
|
+
updated[index2] = true;
|
|
975
|
+
return updated;
|
|
1194
976
|
});
|
|
977
|
+
observer.unobserve(entry.target);
|
|
1195
978
|
}
|
|
1196
|
-
observer.unobserve(entry.target);
|
|
1197
979
|
}
|
|
1198
980
|
});
|
|
1199
981
|
},
|
|
1200
982
|
{ threshold: 0.1 }
|
|
1201
983
|
);
|
|
1202
984
|
timelineRefs.current.forEach((el) => el && observer.observe(el));
|
|
1203
|
-
return () =>
|
|
1204
|
-
timelineRefs.current.forEach((el) => el && observer.unobserve(el));
|
|
1205
|
-
};
|
|
985
|
+
return () => timelineRefs.current.forEach((el) => el && observer.unobserve(el));
|
|
1206
986
|
}, [milestones.length]);
|
|
1207
987
|
if (loading) {
|
|
1208
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
988
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-main", children: t("milestone.status.loadingData") }) });
|
|
1209
989
|
}
|
|
1210
990
|
if (!milestones.length) {
|
|
1211
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1212
|
-
"
|
|
1213
|
-
{
|
|
1214
|
-
|
|
1215
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 text-center", children: [
|
|
1216
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1217
|
-
"h3",
|
|
1218
|
-
{
|
|
1219
|
-
className: `text-lg font-semibold mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`,
|
|
1220
|
-
children: t("milestone.status.noData")
|
|
1221
|
-
}
|
|
1222
|
-
),
|
|
1223
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1224
|
-
"p",
|
|
1225
|
-
{
|
|
1226
|
-
className: `${isDarkMode ? "text-gray-300" : "text-gray-600"}`,
|
|
1227
|
-
children: t("milestone.noDataDescription")
|
|
1228
|
-
}
|
|
1229
|
-
)
|
|
1230
|
-
] })
|
|
1231
|
-
}
|
|
1232
|
-
);
|
|
991
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 bg-body", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 text-center", children: [
|
|
992
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-semibold mb-2 text-main", children: t("milestone.status.noData") }),
|
|
993
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted", children: t("milestone.noDataDescription") })
|
|
994
|
+
] }) });
|
|
1233
995
|
}
|
|
1234
996
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
|
|
1235
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1236
|
-
"
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
children: [
|
|
1240
|
-
"📈 ",
|
|
1241
|
-
sectionTitle
|
|
1242
|
-
]
|
|
1243
|
-
}
|
|
1244
|
-
) }),
|
|
997
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 border border-[var(--border-color)] bg-surface text-main shadow-sm hover:shadow-md transition-all duration-300", children: [
|
|
998
|
+
"📈 ",
|
|
999
|
+
sectionTitle
|
|
1000
|
+
] }) }),
|
|
1245
1001
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
1246
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-
|
|
1002
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-brand rounded-full" }),
|
|
1247
1003
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-8", children: milestones.map((milestone, index2) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1248
1004
|
"div",
|
|
1249
1005
|
{
|
|
@@ -1251,35 +1007,12 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
|
|
|
1251
1007
|
className: `flex items-center transition-all duration-700 ease-out ${index2 % 2 === 0 ? "flex-row" : "flex-row-reverse"} ${timelineVisible[index2] ? "opacity-100 scale-100" : "opacity-0 scale-75"}`,
|
|
1252
1008
|
style: { transitionDelay: `${index2 * 200}ms` },
|
|
1253
1009
|
children: [
|
|
1254
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1255
|
-
"div",
|
|
1256
|
-
{
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1261
|
-
"h3",
|
|
1262
|
-
{
|
|
1263
|
-
className: `text-lg font-bold mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`,
|
|
1264
|
-
children: milestone.title
|
|
1265
|
-
}
|
|
1266
|
-
),
|
|
1267
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1268
|
-
"p",
|
|
1269
|
-
{
|
|
1270
|
-
className: `${isDarkMode ? "text-gray-300" : "text-gray-600"}`,
|
|
1271
|
-
children: milestone.description
|
|
1272
|
-
}
|
|
1273
|
-
)
|
|
1274
|
-
]
|
|
1275
|
-
}
|
|
1276
|
-
) }),
|
|
1277
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1278
|
-
"div",
|
|
1279
|
-
{
|
|
1280
|
-
className: `w-6 h-6 bg-gradient-to-r from-blue-500 to-purple-600 rounded-full border-4 ${isDarkMode ? "border-gray-800" : "border-white"} shadow-[0_0_10px_5px_rgba(59,130,246,0.5)] flex-shrink-0 z-10 animate-pulse`
|
|
1281
|
-
}
|
|
1282
|
-
),
|
|
1010
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", children: [
|
|
1011
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-brand-primary font-bold text-xl mb-2", children: milestone.time }),
|
|
1012
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title", children: milestone.title }),
|
|
1013
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text", children: milestone.description })
|
|
1014
|
+
] }) }),
|
|
1015
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-6 h-6 bg-gradient-brand rounded-full border-4 border-[var(--bg-body)] shadow-[0_0_10px_5px_rgba(37,99,235,0.4)] flex-shrink-0 z-10 animate-pulse" }),
|
|
1283
1016
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1" })
|
|
1284
1017
|
]
|
|
1285
1018
|
},
|
|
@@ -1288,105 +1021,81 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
|
|
|
1288
1021
|
] })
|
|
1289
1022
|
] }) });
|
|
1290
1023
|
};
|
|
1291
|
-
const TestimonialsSection = ({ data, t,
|
|
1292
|
-
var _a;
|
|
1024
|
+
const TestimonialsSection = ({ data, t, section }) => {
|
|
1025
|
+
var _a, _b;
|
|
1293
1026
|
const [currentIndex, setCurrentIndex] = useState(0);
|
|
1294
|
-
const
|
|
1295
|
-
const
|
|
1296
|
-
|
|
1027
|
+
const [isTransitioning, setIsTransitioning] = useState(false);
|
|
1028
|
+
const sectionTitle = (section == null ? void 0 : section.title) || t("testimonials.sectionTitle") || "Cảm nhận khách hàng";
|
|
1029
|
+
const testimonials = ((_b = (_a = data == null ? void 0 : data.sectionDataBindingItems) == null ? void 0 : _a.filter((item) => item == null ? void 0 : item.data)) == null ? void 0 : _b.map((item) => {
|
|
1030
|
+
var _a2, _b2, _c, _d;
|
|
1297
1031
|
return {
|
|
1298
1032
|
quote: ((_a2 = item.data) == null ? void 0 : _a2.content) || "",
|
|
1299
|
-
author: ((
|
|
1300
|
-
position: ((_c = item.data) == null ? void 0 : _c.customerTitle) ||
|
|
1033
|
+
author: ((_b2 = item.data) == null ? void 0 : _b2.customerName) || "",
|
|
1034
|
+
position: ((_c = item.data) == null ? void 0 : _c.customerTitle) || "",
|
|
1301
1035
|
company: ((_d = item.data) == null ? void 0 : _d.customerCompany) || ""
|
|
1302
1036
|
};
|
|
1303
1037
|
})) || [];
|
|
1304
|
-
const fallbackTestimonials = [
|
|
1305
|
-
{
|
|
1306
|
-
quote: t("testimonials.fallback.testimonial1.quote"),
|
|
1307
|
-
author: t("testimonials.fallback.testimonial1.author"),
|
|
1308
|
-
position: t("testimonials.fallback.testimonial1.position"),
|
|
1309
|
-
company: t("testimonials.fallback.testimonial1.company")
|
|
1310
|
-
},
|
|
1311
|
-
{
|
|
1312
|
-
quote: t("testimonials.fallback.testimonial2.quote"),
|
|
1313
|
-
author: t("testimonials.fallback.testimonial2.author"),
|
|
1314
|
-
position: t("testimonials.fallback.testimonial2.position"),
|
|
1315
|
-
company: t("testimonials.fallback.testimonial2.company")
|
|
1316
|
-
},
|
|
1317
|
-
{
|
|
1318
|
-
quote: t("testimonials.fallback.testimonial3.quote"),
|
|
1319
|
-
author: t("testimonials.fallback.testimonial3.author"),
|
|
1320
|
-
position: t("testimonials.fallback.testimonial3.position"),
|
|
1321
|
-
company: t("testimonials.fallback.testimonial3.company")
|
|
1322
|
-
}
|
|
1323
|
-
];
|
|
1324
|
-
const displayTestimonials = testimonials.length > 0 ? testimonials : fallbackTestimonials;
|
|
1325
1038
|
useEffect(() => {
|
|
1326
|
-
if (
|
|
1039
|
+
if (testimonials.length > 1) {
|
|
1327
1040
|
const interval = setInterval(() => {
|
|
1328
|
-
|
|
1041
|
+
setIsTransitioning(true);
|
|
1042
|
+
setTimeout(() => {
|
|
1043
|
+
setCurrentIndex((prev) => (prev + 1) % testimonials.length);
|
|
1044
|
+
setIsTransitioning(false);
|
|
1045
|
+
}, 300);
|
|
1329
1046
|
}, 5e3);
|
|
1330
1047
|
return () => clearInterval(interval);
|
|
1331
1048
|
}
|
|
1332
|
-
}, [
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
{
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1049
|
+
}, [testimonials.length]);
|
|
1050
|
+
const handleIndicatorClick = (index2) => {
|
|
1051
|
+
if (index2 !== currentIndex) {
|
|
1052
|
+
setIsTransitioning(true);
|
|
1053
|
+
setTimeout(() => {
|
|
1054
|
+
setCurrentIndex(index2);
|
|
1055
|
+
setIsTransitioning(false);
|
|
1056
|
+
}, 300);
|
|
1057
|
+
}
|
|
1058
|
+
};
|
|
1059
|
+
if (testimonials.length === 0) {
|
|
1060
|
+
return null;
|
|
1061
|
+
}
|
|
1062
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center", children: [
|
|
1063
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-block px-4 py-2 rounded-full border border-[var(--border-color)] bg-surface text-subtitle font-semibold mb-8 text-brand-primary shadow-sm", children: [
|
|
1064
|
+
"💬 ",
|
|
1065
|
+
sectionTitle
|
|
1066
|
+
] }),
|
|
1344
1067
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
1345
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1068
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1346
1069
|
"div",
|
|
1347
1070
|
{
|
|
1348
|
-
|
|
1071
|
+
style: {
|
|
1072
|
+
opacity: isTransitioning ? 0 : 1,
|
|
1073
|
+
transform: isTransitioning ? "translateY(10px)" : "translateY(0)",
|
|
1074
|
+
transition: "opacity 0.3s ease-in-out, transform 0.3s ease-in-out"
|
|
1075
|
+
},
|
|
1349
1076
|
children: [
|
|
1350
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1351
|
-
"
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
displayTestimonials[currentIndex].quote,
|
|
1357
|
-
'"'
|
|
1358
|
-
]
|
|
1359
|
-
}
|
|
1360
|
-
),
|
|
1361
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4 animate-fadeIn", children: [
|
|
1077
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("blockquote", { className: "card-text text-body italic mb-6", children: [
|
|
1078
|
+
'"',
|
|
1079
|
+
testimonials[currentIndex].quote,
|
|
1080
|
+
'"'
|
|
1081
|
+
] }),
|
|
1082
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4", children: [
|
|
1362
1083
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-3xl", children: "👤" }),
|
|
1363
1084
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
1364
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
className: `font-bold text-base transition-colors duration-200 ${isDarkMode ? "text-white" : "text-gray-900"}`,
|
|
1368
|
-
children: displayTestimonials[currentIndex].author
|
|
1369
|
-
}
|
|
1370
|
-
),
|
|
1371
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-blue-600 font-medium text-sm", children: displayTestimonials[currentIndex].position }),
|
|
1372
|
-
displayTestimonials[currentIndex].company && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1373
|
-
"div",
|
|
1374
|
-
{
|
|
1375
|
-
className: `text-xs transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-gray-600"}`,
|
|
1376
|
-
children: displayTestimonials[currentIndex].company
|
|
1377
|
-
}
|
|
1378
|
-
)
|
|
1085
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-title", children: testimonials[currentIndex].author }),
|
|
1086
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-text", children: testimonials[currentIndex].position }),
|
|
1087
|
+
testimonials[currentIndex].company && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-link", children: testimonials[currentIndex].company })
|
|
1379
1088
|
] })
|
|
1380
1089
|
] })
|
|
1381
1090
|
]
|
|
1382
|
-
}
|
|
1383
|
-
|
|
1384
|
-
)
|
|
1385
|
-
displayTestimonials.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center space-x-2 mt-4", children: displayTestimonials.map((_, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1091
|
+
}
|
|
1092
|
+
) }),
|
|
1093
|
+
testimonials.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center space-x-2 mt-4", children: testimonials.map((_, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1386
1094
|
"button",
|
|
1387
1095
|
{
|
|
1388
|
-
onClick: () =>
|
|
1389
|
-
className: `w-2.5 h-2.5 rounded-full transition-all duration-300 ${index2 === currentIndex ? "bg-
|
|
1096
|
+
onClick: () => handleIndicatorClick(index2),
|
|
1097
|
+
className: `w-2.5 h-2.5 rounded-full transition-all duration-300 ${index2 === currentIndex ? "bg-brand-secondary" : "bg-surface hover:bg-brand-primary"}`,
|
|
1098
|
+
"aria-label": `Slide ${index2 + 1}`
|
|
1390
1099
|
},
|
|
1391
1100
|
index2
|
|
1392
1101
|
)) })
|
|
@@ -1394,54 +1103,82 @@ const TestimonialsSection = ({ data, t, isDarkMode, section }) => {
|
|
|
1394
1103
|
] }) });
|
|
1395
1104
|
};
|
|
1396
1105
|
const PartnerListCard = ({ partner, idx, t, isDarkMode, getLogoUrl }) => {
|
|
1397
|
-
const logoUrl = getLogoUrl(partner.
|
|
1398
|
-
return /* @__PURE__ */ jsxRuntimeExports.
|
|
1106
|
+
const logoUrl = getLogoUrl(partner.logoUrl);
|
|
1107
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1399
1108
|
"a",
|
|
1400
1109
|
{
|
|
1401
|
-
href: partner.
|
|
1402
|
-
target: partner.
|
|
1403
|
-
rel: partner.
|
|
1404
|
-
className:
|
|
1110
|
+
href: partner.websiteUrl || "#",
|
|
1111
|
+
target: partner.websiteUrl ? "_blank" : "_self",
|
|
1112
|
+
rel: partner.websiteUrl ? "noopener noreferrer" : "",
|
|
1113
|
+
className: "card",
|
|
1405
1114
|
style: {
|
|
1406
1115
|
animationDelay: `${idx * 0.1}s`,
|
|
1407
|
-
textDecoration: "none"
|
|
1116
|
+
textDecoration: "none",
|
|
1117
|
+
overflow: "hidden",
|
|
1118
|
+
minHeight: "280px",
|
|
1119
|
+
padding: "1.5rem",
|
|
1120
|
+
display: "flex",
|
|
1121
|
+
flexDirection: "column"
|
|
1408
1122
|
},
|
|
1409
|
-
children:
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
}
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "
|
|
1443
|
-
|
|
1444
|
-
|
|
1123
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
|
|
1124
|
+
display: "flex",
|
|
1125
|
+
flexDirection: "column",
|
|
1126
|
+
alignItems: "center",
|
|
1127
|
+
justifyContent: "center",
|
|
1128
|
+
flex: 1
|
|
1129
|
+
}, children: [
|
|
1130
|
+
logoUrl ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
1131
|
+
width: "100%",
|
|
1132
|
+
height: "100px",
|
|
1133
|
+
display: "flex",
|
|
1134
|
+
alignItems: "center",
|
|
1135
|
+
justifyContent: "center",
|
|
1136
|
+
marginBottom: "1rem"
|
|
1137
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1138
|
+
"img",
|
|
1139
|
+
{
|
|
1140
|
+
src: logoUrl,
|
|
1141
|
+
alt: partner.name || t("partners.logoAlt") || "Partner logo",
|
|
1142
|
+
style: {
|
|
1143
|
+
maxWidth: "100%",
|
|
1144
|
+
maxHeight: "100%",
|
|
1145
|
+
objectFit: "contain",
|
|
1146
|
+
transition: "transform 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
1147
|
+
},
|
|
1148
|
+
onMouseEnter: (e) => {
|
|
1149
|
+
e.currentTarget.style.transform = "scale(1.05)";
|
|
1150
|
+
},
|
|
1151
|
+
onMouseLeave: (e) => {
|
|
1152
|
+
e.currentTarget.style.transform = "scale(1)";
|
|
1153
|
+
},
|
|
1154
|
+
loading: "lazy"
|
|
1155
|
+
}
|
|
1156
|
+
) }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-surface", style: {
|
|
1157
|
+
width: "5rem",
|
|
1158
|
+
height: "5rem",
|
|
1159
|
+
borderRadius: "9999px",
|
|
1160
|
+
display: "flex",
|
|
1161
|
+
alignItems: "center",
|
|
1162
|
+
justifyContent: "center",
|
|
1163
|
+
marginBottom: "1rem"
|
|
1164
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: { fontSize: "1.875rem" }, children: "🤝" }) }),
|
|
1165
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-main", style: {
|
|
1166
|
+
fontSize: "1rem",
|
|
1167
|
+
textAlign: "center",
|
|
1168
|
+
marginBottom: "0.5rem",
|
|
1169
|
+
lineHeight: "1.4"
|
|
1170
|
+
}, children: partner.name || t("partners.unnamed") || "Partner" }),
|
|
1171
|
+
partner.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text", style: {
|
|
1172
|
+
textAlign: "center",
|
|
1173
|
+
marginTop: "0.5rem",
|
|
1174
|
+
fontSize: "0.875rem",
|
|
1175
|
+
lineHeight: "1.5",
|
|
1176
|
+
display: "-webkit-box",
|
|
1177
|
+
WebkitLineClamp: 3,
|
|
1178
|
+
WebkitBoxOrient: "vertical",
|
|
1179
|
+
overflow: "hidden"
|
|
1180
|
+
}, children: partner.description })
|
|
1181
|
+
] })
|
|
1445
1182
|
}
|
|
1446
1183
|
);
|
|
1447
1184
|
};
|
|
@@ -1456,7 +1193,7 @@ function useWindowSize() {
|
|
|
1456
1193
|
}, []);
|
|
1457
1194
|
return width;
|
|
1458
1195
|
}
|
|
1459
|
-
const PartnerListSection = ({ t,
|
|
1196
|
+
const PartnerListSection = ({ t, getPartnerList, imageBaseUrl = "", section }) => {
|
|
1460
1197
|
const [partnersData, setPartnersData] = useState([]);
|
|
1461
1198
|
const [error, setError] = useState(null);
|
|
1462
1199
|
const [loading, setLoading] = useState(true);
|
|
@@ -1464,7 +1201,7 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "",
|
|
|
1464
1201
|
const [partnersVisible, setPartnersVisible] = useState(false);
|
|
1465
1202
|
const partnersRef = useRef(null);
|
|
1466
1203
|
const windowWidth = useWindowSize();
|
|
1467
|
-
const sectionTitle = (section == null ? void 0 : section.title) || "
|
|
1204
|
+
const sectionTitle = (section == null ? void 0 : section.title) || t("partners.sectionTitle");
|
|
1468
1205
|
const getLogoUrl = (logoUrl) => {
|
|
1469
1206
|
if (!logoUrl) return null;
|
|
1470
1207
|
if (logoUrl.startsWith("http")) return logoUrl;
|
|
@@ -1509,9 +1246,7 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "",
|
|
|
1509
1246
|
}
|
|
1510
1247
|
}, [partners.length]);
|
|
1511
1248
|
useEffect(() => {
|
|
1512
|
-
const fallbackTimer = setTimeout(() =>
|
|
1513
|
-
setPartnersVisible(true);
|
|
1514
|
-
}, 500);
|
|
1249
|
+
const fallbackTimer = setTimeout(() => setPartnersVisible(true), 500);
|
|
1515
1250
|
const observer = new IntersectionObserver(
|
|
1516
1251
|
(entries) => {
|
|
1517
1252
|
entries.forEach((entry) => {
|
|
@@ -1524,54 +1259,46 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "",
|
|
|
1524
1259
|
},
|
|
1525
1260
|
{ threshold: 0.1, rootMargin: "50px" }
|
|
1526
1261
|
);
|
|
1527
|
-
if (partnersRef.current)
|
|
1528
|
-
|
|
1529
|
-
} else {
|
|
1262
|
+
if (partnersRef.current) observer.observe(partnersRef.current);
|
|
1263
|
+
else {
|
|
1530
1264
|
clearTimeout(fallbackTimer);
|
|
1531
1265
|
setPartnersVisible(true);
|
|
1532
1266
|
}
|
|
1533
1267
|
return () => {
|
|
1534
1268
|
clearTimeout(fallbackTimer);
|
|
1535
|
-
if (partnersRef.current)
|
|
1536
|
-
observer.unobserve(partnersRef.current);
|
|
1537
|
-
}
|
|
1269
|
+
if (partnersRef.current) observer.unobserve(partnersRef.current);
|
|
1538
1270
|
};
|
|
1539
1271
|
}, []);
|
|
1540
1272
|
if (loading) {
|
|
1541
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
1273
|
+
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..." }) });
|
|
1542
1274
|
}
|
|
1543
1275
|
if (error) {
|
|
1544
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-
|
|
1276
|
+
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 }) });
|
|
1545
1277
|
}
|
|
1546
1278
|
if (!partnersData.length) return null;
|
|
1547
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, {
|
|
1548
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1549
|
-
"
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
children: [
|
|
1553
|
-
"🤝 ",
|
|
1554
|
-
sectionTitle
|
|
1555
|
-
]
|
|
1556
|
-
}
|
|
1557
|
-
) }),
|
|
1279
|
+
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: [
|
|
1280
|
+
/* @__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: [
|
|
1281
|
+
"🤝 ",
|
|
1282
|
+
sectionTitle
|
|
1283
|
+
] }) }),
|
|
1558
1284
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1559
1285
|
"div",
|
|
1560
1286
|
{
|
|
1561
1287
|
className: `transition-all duration-1000 ease-out ${partnersVisible ? "opacity-100 scale-100" : "opacity-0 scale-95"}`,
|
|
1562
1288
|
children: [
|
|
1563
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative overflow-hidden mb-
|
|
1289
|
+
/* @__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(
|
|
1564
1290
|
"div",
|
|
1565
1291
|
{
|
|
1566
1292
|
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"}`,
|
|
1567
|
-
style: {
|
|
1568
|
-
|
|
1293
|
+
style: {
|
|
1294
|
+
zIndex: slideIndex === currentPartnerSlide ? 10 : 1
|
|
1295
|
+
},
|
|
1296
|
+
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(
|
|
1569
1297
|
PartnerListCard,
|
|
1570
1298
|
{
|
|
1571
1299
|
partner,
|
|
1572
1300
|
idx,
|
|
1573
1301
|
t,
|
|
1574
|
-
isDarkMode,
|
|
1575
1302
|
getLogoUrl
|
|
1576
1303
|
},
|
|
1577
1304
|
partner.id || `${slideIndex}-${idx}`
|
|
@@ -1579,11 +1306,34 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "",
|
|
|
1579
1306
|
},
|
|
1580
1307
|
slideIndex
|
|
1581
1308
|
)) }) }),
|
|
1582
|
-
partners.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center space-x-
|
|
1309
|
+
partners.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center space-x-3", style: {
|
|
1310
|
+
position: "relative",
|
|
1311
|
+
zIndex: 100,
|
|
1312
|
+
paddingTop: "1rem"
|
|
1313
|
+
}, children: partners.map((_, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1583
1314
|
"button",
|
|
1584
1315
|
{
|
|
1585
1316
|
onClick: () => setCurrentPartnerSlide(index2),
|
|
1586
|
-
|
|
1317
|
+
style: {
|
|
1318
|
+
width: "12px",
|
|
1319
|
+
height: "12px",
|
|
1320
|
+
borderRadius: "50%",
|
|
1321
|
+
border: "none",
|
|
1322
|
+
cursor: "pointer",
|
|
1323
|
+
transition: "all 0.3s ease",
|
|
1324
|
+
backgroundColor: index2 === currentPartnerSlide ? "var(--brand-primary)" : "rgba(255, 255, 255, 0.3)",
|
|
1325
|
+
transform: index2 === currentPartnerSlide ? "scale(1.3)" : "scale(1)"
|
|
1326
|
+
},
|
|
1327
|
+
onMouseEnter: (e) => {
|
|
1328
|
+
if (index2 !== currentPartnerSlide) {
|
|
1329
|
+
e.currentTarget.style.backgroundColor = "rgba(255, 255, 255, 0.5)";
|
|
1330
|
+
}
|
|
1331
|
+
},
|
|
1332
|
+
onMouseLeave: (e) => {
|
|
1333
|
+
if (index2 !== currentPartnerSlide) {
|
|
1334
|
+
e.currentTarget.style.backgroundColor = "rgba(255, 255, 255, 0.3)";
|
|
1335
|
+
}
|
|
1336
|
+
},
|
|
1587
1337
|
"aria-label": `Slide ${index2 + 1}`
|
|
1588
1338
|
},
|
|
1589
1339
|
index2
|
|
@@ -2340,24 +2090,30 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2340
2090
|
setIsSubmitting(false);
|
|
2341
2091
|
}
|
|
2342
2092
|
});
|
|
2343
|
-
const inputBaseClasses = `
|
|
2344
|
-
|
|
2345
|
-
|
|
2093
|
+
const inputBaseClasses = `
|
|
2094
|
+
w-full px-4 py-3 rounded-xl border
|
|
2095
|
+
transition-all duration-200
|
|
2096
|
+
focus:ring-2 focus:outline-none
|
|
2097
|
+
bg-surface
|
|
2098
|
+
text-main
|
|
2099
|
+
placeholder-text-muted
|
|
2100
|
+
`;
|
|
2101
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid lg:grid-cols-3 gap-12", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lg:col-span-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface rounded-2xl p-8 shadow-lg border transition-colors duration-200", style: { borderColor: "var(--border-color)" }, children: [
|
|
2346
2102
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center mb-6", children: [
|
|
2347
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-10 h-10 rounded-lg bg-gradient-
|
|
2103
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-10 h-10 rounded-lg bg-gradient-brand flex items-center justify-center mr-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Send, { size: 20, className: "text-white" }) }),
|
|
2348
2104
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2349
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className:
|
|
2350
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
2105
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-subtitle font-bold text-main", children: t("form.title") || "Gửi yêu cầu tư vấn" }),
|
|
2106
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", children: t("form.subtitle") || "Điền thông tin để nhận tư vấn miễn phí từ chuyên gia" })
|
|
2351
2107
|
] })
|
|
2352
2108
|
] }),
|
|
2353
|
-
submitStatus && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `mb-6 p-4 rounded-xl border transition-colors duration-200 ${submitStatus === "success" ?
|
|
2109
|
+
submitStatus && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `mb-6 p-4 rounded-xl border transition-colors duration-200 ${submitStatus === "success" ? "bg-emerald-50 dark:bg-emerald-900/30 text-emerald-800 dark:text-emerald-300" : "bg-red-50 dark:bg-red-900/30 text-red-800 dark:text-red-300"}`, style: { borderColor: submitStatus === "success" ? "#10b981" : "#ef4444" }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center", children: [
|
|
2354
2110
|
submitStatus === "success" ? /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { size: 20, className: "mr-2 flex-shrink-0" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 20, className: "mr-2 flex-shrink-0" }),
|
|
2355
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-
|
|
2111
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small font-medium", children: submitMessage })
|
|
2356
2112
|
] }) }),
|
|
2357
2113
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleSubmit, className: "space-y-6", children: [
|
|
2358
2114
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
|
|
2359
2115
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2360
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className:
|
|
2116
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
|
|
2361
2117
|
t("form.fields.fullName") || "Họ và tên",
|
|
2362
2118
|
" *"
|
|
2363
2119
|
] }),
|
|
@@ -2369,18 +2125,19 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2369
2125
|
value: formData.fullName || "",
|
|
2370
2126
|
onChange: handleInputChange,
|
|
2371
2127
|
onBlur: handleBlur,
|
|
2372
|
-
className:
|
|
2128
|
+
className: inputBaseClasses,
|
|
2129
|
+
style: { borderColor: formErrors.fullName ? "#ef4444" : "var(--border-color)" },
|
|
2373
2130
|
placeholder: t("contact.form.namePlaceholder"),
|
|
2374
2131
|
required: true
|
|
2375
2132
|
}
|
|
2376
2133
|
),
|
|
2377
|
-
formErrors.fullName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2134
|
+
formErrors.fullName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2378
2135
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2379
2136
|
formErrors.fullName
|
|
2380
2137
|
] })
|
|
2381
2138
|
] }),
|
|
2382
2139
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2383
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className:
|
|
2140
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
|
|
2384
2141
|
t("form.fields.workEmail") || "Email",
|
|
2385
2142
|
" *"
|
|
2386
2143
|
] }),
|
|
@@ -2392,12 +2149,13 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2392
2149
|
value: formData.workEmail || "",
|
|
2393
2150
|
onChange: handleInputChange,
|
|
2394
2151
|
onBlur: handleBlur,
|
|
2395
|
-
className:
|
|
2152
|
+
className: inputBaseClasses,
|
|
2153
|
+
style: { borderColor: formErrors.workEmail ? "#ef4444" : "var(--border-color)" },
|
|
2396
2154
|
placeholder: "email@company.com",
|
|
2397
2155
|
required: true
|
|
2398
2156
|
}
|
|
2399
2157
|
),
|
|
2400
|
-
formErrors.workEmail && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2158
|
+
formErrors.workEmail && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2401
2159
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2402
2160
|
formErrors.workEmail
|
|
2403
2161
|
] })
|
|
@@ -2405,7 +2163,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2405
2163
|
] }),
|
|
2406
2164
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
|
|
2407
2165
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2408
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2166
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.phoneNumber") || "Số điện thoại" }),
|
|
2409
2167
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2410
2168
|
"input",
|
|
2411
2169
|
{
|
|
@@ -2414,17 +2172,18 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2414
2172
|
value: formData.phoneNumber || "",
|
|
2415
2173
|
onChange: handleInputChange,
|
|
2416
2174
|
onBlur: handleBlur,
|
|
2417
|
-
className:
|
|
2175
|
+
className: inputBaseClasses,
|
|
2176
|
+
style: { borderColor: formErrors.phoneNumber ? "#ef4444" : "var(--border-color)" },
|
|
2418
2177
|
placeholder: "0901 234 567"
|
|
2419
2178
|
}
|
|
2420
2179
|
),
|
|
2421
|
-
formErrors.phoneNumber && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2180
|
+
formErrors.phoneNumber && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2422
2181
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2423
2182
|
formErrors.phoneNumber
|
|
2424
2183
|
] })
|
|
2425
2184
|
] }),
|
|
2426
2185
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2427
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2186
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.companyName") || "Công ty/Tổ chức" }),
|
|
2428
2187
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2429
2188
|
"input",
|
|
2430
2189
|
{
|
|
@@ -2433,11 +2192,12 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2433
2192
|
value: formData.companyName || "",
|
|
2434
2193
|
onChange: handleInputChange,
|
|
2435
2194
|
onBlur: handleBlur,
|
|
2436
|
-
className:
|
|
2195
|
+
className: inputBaseClasses,
|
|
2196
|
+
style: { borderColor: formErrors.companyName ? "#ef4444" : "var(--border-color)" },
|
|
2437
2197
|
placeholder: t("contact.form.fields.company")
|
|
2438
2198
|
}
|
|
2439
2199
|
),
|
|
2440
|
-
formErrors.companyName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2200
|
+
formErrors.companyName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2441
2201
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2442
2202
|
formErrors.companyName
|
|
2443
2203
|
] })
|
|
@@ -2445,7 +2205,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2445
2205
|
] }),
|
|
2446
2206
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
|
|
2447
2207
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2448
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2208
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.jobTitle") || "Chức vụ" }),
|
|
2449
2209
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2450
2210
|
"input",
|
|
2451
2211
|
{
|
|
@@ -2454,17 +2214,18 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2454
2214
|
value: formData.jobTitle || "",
|
|
2455
2215
|
onChange: handleInputChange,
|
|
2456
2216
|
onBlur: handleBlur,
|
|
2457
|
-
className:
|
|
2217
|
+
className: inputBaseClasses,
|
|
2218
|
+
style: { borderColor: formErrors.jobTitle ? "#ef4444" : "var(--border-color)" },
|
|
2458
2219
|
placeholder: t("contact.form.positionPlaceholder")
|
|
2459
2220
|
}
|
|
2460
2221
|
),
|
|
2461
|
-
formErrors.jobTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2222
|
+
formErrors.jobTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2462
2223
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2463
2224
|
formErrors.jobTitle
|
|
2464
2225
|
] })
|
|
2465
2226
|
] }),
|
|
2466
2227
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2467
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2228
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.businessType") || "Loại hình kinh doanh" }),
|
|
2468
2229
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2469
2230
|
"input",
|
|
2470
2231
|
{
|
|
@@ -2473,6 +2234,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2473
2234
|
value: formData.businessType || "",
|
|
2474
2235
|
onChange: handleInputChange,
|
|
2475
2236
|
className: inputBaseClasses,
|
|
2237
|
+
style: { borderColor: "var(--border-color)" },
|
|
2476
2238
|
placeholder: t("form.fields.businessType")
|
|
2477
2239
|
}
|
|
2478
2240
|
)
|
|
@@ -2480,7 +2242,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2480
2242
|
] }),
|
|
2481
2243
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
|
|
2482
2244
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2483
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2245
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.expectedBudget") || "Ngân sách dự kiến" }),
|
|
2484
2246
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2485
2247
|
"input",
|
|
2486
2248
|
{
|
|
@@ -2489,12 +2251,13 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2489
2251
|
value: formData.expectedBudget || "",
|
|
2490
2252
|
onChange: handleInputChange,
|
|
2491
2253
|
className: inputBaseClasses,
|
|
2254
|
+
style: { borderColor: "var(--border-color)" },
|
|
2492
2255
|
placeholder: t("form.fields.expectedBudget")
|
|
2493
2256
|
}
|
|
2494
2257
|
)
|
|
2495
2258
|
] }),
|
|
2496
2259
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2497
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2260
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.expectedTimeline") || "Thời gian dự kiến" }),
|
|
2498
2261
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2499
2262
|
"input",
|
|
2500
2263
|
{
|
|
@@ -2503,13 +2266,14 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2503
2266
|
value: formData.expectedTimeline || "",
|
|
2504
2267
|
onChange: handleInputChange,
|
|
2505
2268
|
className: inputBaseClasses,
|
|
2269
|
+
style: { borderColor: "var(--border-color)" },
|
|
2506
2270
|
placeholder: t("form.fields.expectedTimeline")
|
|
2507
2271
|
}
|
|
2508
2272
|
)
|
|
2509
2273
|
] })
|
|
2510
2274
|
] }),
|
|
2511
2275
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2512
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className:
|
|
2276
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
|
|
2513
2277
|
t("form.fields.requestTitle") || "Tiêu đề yêu cầu",
|
|
2514
2278
|
" *"
|
|
2515
2279
|
] }),
|
|
@@ -2521,18 +2285,19 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2521
2285
|
value: formData.requestTitle || "",
|
|
2522
2286
|
onChange: handleInputChange,
|
|
2523
2287
|
onBlur: handleBlur,
|
|
2524
|
-
className:
|
|
2288
|
+
className: inputBaseClasses,
|
|
2289
|
+
style: { borderColor: formErrors.requestTitle ? "#ef4444" : "var(--border-color)" },
|
|
2525
2290
|
placeholder: t("contact.form.placeholders.subject"),
|
|
2526
2291
|
required: true
|
|
2527
2292
|
}
|
|
2528
2293
|
),
|
|
2529
|
-
formErrors.requestTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2294
|
+
formErrors.requestTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2530
2295
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2531
2296
|
formErrors.requestTitle
|
|
2532
2297
|
] })
|
|
2533
2298
|
] }),
|
|
2534
2299
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2535
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className:
|
|
2300
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
|
|
2536
2301
|
t("form.fields.requestDescription") || "Mô tả yêu cầu",
|
|
2537
2302
|
" *"
|
|
2538
2303
|
] }),
|
|
@@ -2544,116 +2309,145 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2544
2309
|
onChange: handleInputChange,
|
|
2545
2310
|
onBlur: handleBlur,
|
|
2546
2311
|
rows: "5",
|
|
2547
|
-
className: `${inputBaseClasses} resize-none
|
|
2312
|
+
className: `${inputBaseClasses} resize-none`,
|
|
2313
|
+
style: { borderColor: formErrors.requestDescription ? "#ef4444" : "var(--border-color)" },
|
|
2548
2314
|
placeholder: t("contact.form.placeholders.message"),
|
|
2549
2315
|
required: true
|
|
2550
2316
|
}
|
|
2551
2317
|
),
|
|
2552
|
-
formErrors.requestDescription && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2318
|
+
formErrors.requestDescription && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2553
2319
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2554
2320
|
formErrors.requestDescription
|
|
2555
2321
|
] })
|
|
2556
2322
|
] }),
|
|
2557
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
),
|
|
2573
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2574
|
-
"button",
|
|
2575
|
-
{
|
|
2576
|
-
type: "button",
|
|
2577
|
-
className: `px-6 py-4 rounded-xl border-2 font-semibold transition-all hover:scale-105 ${isDarkMode ? "border-gray-600 text-gray-300 hover:bg-gray-700" : "border-slate-300 text-slate-700 hover:bg-slate-50"}`,
|
|
2578
|
-
children: [
|
|
2579
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Phone, { size: 20, className: "inline mr-2" }),
|
|
2580
|
-
t("form.callNow") || "Gọi ngay"
|
|
2581
|
-
]
|
|
2582
|
-
}
|
|
2583
|
-
)
|
|
2584
|
-
] }),
|
|
2585
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `flex items-center space-x-2 text-sm transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-slate-600"}`, children: [
|
|
2586
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { size: 16, className: "text-emerald-500" }),
|
|
2587
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: t("form.privacy") || "Cam kết bảo mật thông tin và phản hồi trong 24 giờ" })
|
|
2588
|
-
] })
|
|
2323
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center space-x-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2324
|
+
"button",
|
|
2325
|
+
{
|
|
2326
|
+
type: "submit",
|
|
2327
|
+
disabled: isSubmitting,
|
|
2328
|
+
className: "flex-1 btn-primary text-white py-4 px-6 rounded-xl transition-all disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center font-semibold",
|
|
2329
|
+
children: isSubmitting ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
2330
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "animate-spin h-5 w-5 mr-2" }),
|
|
2331
|
+
t("form.submitting") || "Đang gửi..."
|
|
2332
|
+
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
2333
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Send, { size: 20, className: "mr-2" }),
|
|
2334
|
+
t("form.submit") || "Gửi yêu cầu"
|
|
2335
|
+
] })
|
|
2336
|
+
}
|
|
2337
|
+
) })
|
|
2589
2338
|
] })
|
|
2590
2339
|
] }) }) }) }) });
|
|
2591
2340
|
};
|
|
2592
2341
|
const ContactInfoSection = ({ data, t, isDarkMode, section }) => {
|
|
2593
2342
|
var _a, _b;
|
|
2594
2343
|
const contactData = ((_b = (_a = data == null ? void 0 : data.sectionDataBindingItems) == null ? void 0 : _a.filter((item) => item == null ? void 0 : item.data)) == null ? void 0 : _b.map((item) => item.data)) || [];
|
|
2595
|
-
const sectionTitle = (section == null ? void 0 : section.title) || "...";
|
|
2596
|
-
if (!contactData.length) return null;
|
|
2597
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
|
|
2598
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2599
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 22, className: "mr-2" }),
|
|
2600
|
-
sectionTitle
|
|
2601
|
-
] }) }),
|
|
2602
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid md:grid-cols-2 lg:grid-cols-3 gap-8", children: contactData.map((contact, index2) => {
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
)
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
}
|
|
2642
|
-
|
|
2643
|
-
contact.workingHours && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `flex items-center p-3 rounded-xl ${isDarkMode ? "bg-gray-700" : "bg-slate-50"}`, children: [
|
|
2644
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `w-10 h-10 rounded-lg flex items-center justify-center mr-3 ${isDarkMode ? "bg-purple-900/50 text-purple-400" : "bg-purple-50 text-purple-600"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { size: 18 }) }),
|
|
2645
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1", children: [
|
|
2646
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-sm font-medium ${isDarkMode ? "text-gray-400" : "text-slate-500"}`, children: t("contact.info.workingHours") || "Giờ làm việc" }),
|
|
2647
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `font-semibold ${isDarkMode ? "text-white" : "text-slate-800"}`, children: contact.workingHours || t("contact.info.defaultWorkingHours") || "T2-T6: 8:00-18:00" })
|
|
2648
|
-
] })
|
|
2344
|
+
const sectionTitle = (section == null ? void 0 : section.title) || "...";
|
|
2345
|
+
if (!contactData.length) return null;
|
|
2346
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
|
|
2347
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-flex items-center px-4 py-2 rounded-full text-lg font-semibold mb-4 bg-surface", style: { borderWidth: "1px", borderColor: "var(--border-color)" }, children: [
|
|
2348
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 22, className: "mr-2 text-brand-primary" }),
|
|
2349
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-main", children: sectionTitle })
|
|
2350
|
+
] }) }),
|
|
2351
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid md:grid-cols-2 lg:grid-cols-3 gap-8", children: contactData.map((contact, index2) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", children: [
|
|
2352
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-6", children: [
|
|
2353
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
|
|
2354
|
+
width: "5rem",
|
|
2355
|
+
height: "5rem",
|
|
2356
|
+
borderRadius: "9999px",
|
|
2357
|
+
margin: "0 auto 1rem",
|
|
2358
|
+
display: "flex",
|
|
2359
|
+
alignItems: "center",
|
|
2360
|
+
justifyContent: "center"
|
|
2361
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 32, style: { color: "white" } }) }),
|
|
2362
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-subtitle mb-2", children: contact.name }),
|
|
2363
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "inline-block px-3 py-1 rounded-full text-small font-semibold bg-surface text-brand-primary", style: { borderWidth: "1px", borderColor: "var(--border-color)" }, children: contact.position })
|
|
2364
|
+
] }),
|
|
2365
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "1rem" }, children: [
|
|
2366
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2367
|
+
"a",
|
|
2368
|
+
{
|
|
2369
|
+
href: `tel:${contact.phone}`,
|
|
2370
|
+
className: "card-link",
|
|
2371
|
+
style: {
|
|
2372
|
+
padding: "0.75rem",
|
|
2373
|
+
borderRadius: "0.75rem",
|
|
2374
|
+
backgroundColor: "var(--bg-body)",
|
|
2375
|
+
borderWidth: "1px",
|
|
2376
|
+
borderColor: "var(--border-color)",
|
|
2377
|
+
transition: "all 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
2378
|
+
},
|
|
2379
|
+
children: [
|
|
2380
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
|
|
2381
|
+
width: "2.5rem",
|
|
2382
|
+
height: "2.5rem",
|
|
2383
|
+
borderRadius: "0.5rem",
|
|
2384
|
+
display: "flex",
|
|
2385
|
+
alignItems: "center",
|
|
2386
|
+
justifyContent: "center",
|
|
2387
|
+
marginRight: "0.75rem"
|
|
2388
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Phone, { size: 18, style: { color: "white" } }) }),
|
|
2389
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2390
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contact.info.phone") || "Điện thoại" }),
|
|
2391
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.phone })
|
|
2649
2392
|
] })
|
|
2650
|
-
]
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2393
|
+
]
|
|
2394
|
+
}
|
|
2395
|
+
),
|
|
2396
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2397
|
+
"a",
|
|
2398
|
+
{
|
|
2399
|
+
href: `mailto:${contact.email}`,
|
|
2400
|
+
className: "card-link",
|
|
2401
|
+
style: {
|
|
2402
|
+
padding: "0.75rem",
|
|
2403
|
+
borderRadius: "0.75rem",
|
|
2404
|
+
backgroundColor: "var(--bg-body)",
|
|
2405
|
+
borderWidth: "1px",
|
|
2406
|
+
borderColor: "var(--border-color)",
|
|
2407
|
+
transition: "all 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
2408
|
+
},
|
|
2409
|
+
children: [
|
|
2410
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-accent", style: {
|
|
2411
|
+
width: "2.5rem",
|
|
2412
|
+
height: "2.5rem",
|
|
2413
|
+
borderRadius: "0.5rem",
|
|
2414
|
+
display: "flex",
|
|
2415
|
+
alignItems: "center",
|
|
2416
|
+
justifyContent: "center",
|
|
2417
|
+
marginRight: "0.75rem"
|
|
2418
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Mail, { size: 18, style: { color: "white" } }) }),
|
|
2419
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2420
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: "Email" }),
|
|
2421
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.email })
|
|
2422
|
+
] })
|
|
2423
|
+
]
|
|
2424
|
+
}
|
|
2425
|
+
),
|
|
2426
|
+
contact.workingHours && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
|
|
2427
|
+
display: "flex",
|
|
2428
|
+
alignItems: "center",
|
|
2429
|
+
padding: "0.75rem",
|
|
2430
|
+
borderRadius: "0.75rem",
|
|
2431
|
+
backgroundColor: "var(--bg-body)",
|
|
2432
|
+
borderWidth: "1px",
|
|
2433
|
+
borderColor: "var(--border-color)"
|
|
2434
|
+
}, children: [
|
|
2435
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
|
|
2436
|
+
width: "2.5rem",
|
|
2437
|
+
height: "2.5rem",
|
|
2438
|
+
borderRadius: "0.5rem",
|
|
2439
|
+
display: "flex",
|
|
2440
|
+
alignItems: "center",
|
|
2441
|
+
justifyContent: "center",
|
|
2442
|
+
marginRight: "0.75rem"
|
|
2443
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { size: 18, style: { color: "white" } }) }),
|
|
2444
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2445
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contact.info.workingHours") || "Giờ làm việc" }),
|
|
2446
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.workingHours || t("contact.info.defaultWorkingHours") || "T2-T6: 8:00-18:00" })
|
|
2447
|
+
] })
|
|
2448
|
+
] })
|
|
2449
|
+
] })
|
|
2450
|
+
] }, contact.id || index2)) })
|
|
2657
2451
|
] }) });
|
|
2658
2452
|
};
|
|
2659
2453
|
const ContactListAutoSection = ({ data, t, isDarkMode, getContactList, section }) => {
|
|
@@ -2681,89 +2475,136 @@ const ContactListAutoSection = ({ data, t, isDarkMode, getContactList, section }
|
|
|
2681
2475
|
}
|
|
2682
2476
|
});
|
|
2683
2477
|
if (loading) {
|
|
2684
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2685
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className:
|
|
2686
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
2478
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "py-16 px-5 text-center bg-body", children: [
|
|
2479
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "inline-block w-10 h-10 border-4 border-color rounded-full animate-spin", style: { borderTopColor: "var(--brand-primary)" } }),
|
|
2480
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-4 text-muted", children: t("contactList.status.loading") || "Đang tải danh sách liên hệ..." })
|
|
2687
2481
|
] });
|
|
2688
2482
|
}
|
|
2689
2483
|
if (error) {
|
|
2690
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2691
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2484
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "py-16 px-5 text-center bg-body", children: [
|
|
2485
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-base mb-2", style: { color: "#ef4444" }, children: [
|
|
2692
2486
|
"⚠️ ",
|
|
2693
2487
|
t("contactList.error.title") || "Lỗi tải dữ liệu"
|
|
2694
2488
|
] }),
|
|
2695
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
2489
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted", children: error })
|
|
2696
2490
|
] });
|
|
2697
2491
|
}
|
|
2698
2492
|
if (!contacts || contacts.length === 0) {
|
|
2699
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2493
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "py-16 px-5 text-center bg-body", children: [
|
|
2700
2494
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-5xl mb-5", children: "📞" }),
|
|
2701
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className:
|
|
2702
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
2495
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-muted mb-2", children: t("contactList.status.noData.title") || "Chưa có thông tin liên hệ" }),
|
|
2496
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted opacity-75", children: t("contactList.status.noData.description") || "Danh sách liên hệ sẽ hiển thị tại đây" })
|
|
2703
2497
|
] });
|
|
2704
2498
|
}
|
|
2705
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-
|
|
2706
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-
|
|
2707
|
-
|
|
2499
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
|
|
2500
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-flex items-center px-4 py-2 rounded-full text-lg font-semibold mb-4 bg-surface", style: { borderWidth: "1px", borderColor: "var(--border-color)" }, children: [
|
|
2501
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 22, className: "mr-2 text-brand-primary" }),
|
|
2502
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-main", children: sectionTitle })
|
|
2503
|
+
] }) }),
|
|
2504
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid md:grid-cols-2 lg:grid-cols-3 gap-8", children: contacts.map((contact, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(ContactCard, { contact, t, isDarkMode }, contact.id || index2)) })
|
|
2708
2505
|
] }) });
|
|
2709
2506
|
};
|
|
2710
2507
|
const ContactCard = ({ contact, t, isDarkMode }) => {
|
|
2711
|
-
|
|
2712
|
-
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
2716
|
-
|
|
2717
|
-
|
|
2718
|
-
|
|
2719
|
-
|
|
2720
|
-
|
|
2721
|
-
|
|
2722
|
-
children:
|
|
2723
|
-
|
|
2724
|
-
|
|
2725
|
-
|
|
2726
|
-
|
|
2727
|
-
|
|
2728
|
-
|
|
2729
|
-
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
|
|
2734
|
-
|
|
2735
|
-
|
|
2736
|
-
|
|
2737
|
-
|
|
2738
|
-
|
|
2739
|
-
|
|
2740
|
-
|
|
2741
|
-
|
|
2742
|
-
|
|
2743
|
-
|
|
2744
|
-
|
|
2745
|
-
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
|
|
2508
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", children: [
|
|
2509
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-6", children: [
|
|
2510
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
|
|
2511
|
+
width: "5rem",
|
|
2512
|
+
height: "5rem",
|
|
2513
|
+
borderRadius: "9999px",
|
|
2514
|
+
margin: "0 auto 1rem",
|
|
2515
|
+
display: "flex",
|
|
2516
|
+
alignItems: "center",
|
|
2517
|
+
justifyContent: "center"
|
|
2518
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 32, style: { color: "white" } }) }),
|
|
2519
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-subtitle mb-2", children: contact.name || t("contactList.card.noName") || "Không có tên" }),
|
|
2520
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "inline-block px-3 py-1 rounded-full text-small font-semibold bg-surface text-brand-primary", style: { borderWidth: "1px", borderColor: "var(--border-color)" }, children: contact.position || t("contactList.card.noPosition") || "Chưa có chức vụ" })
|
|
2521
|
+
] }),
|
|
2522
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "1rem" }, children: [
|
|
2523
|
+
contact.phone && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2524
|
+
"a",
|
|
2525
|
+
{
|
|
2526
|
+
href: `tel:${contact.phone}`,
|
|
2527
|
+
className: "card-link",
|
|
2528
|
+
style: {
|
|
2529
|
+
padding: "0.75rem",
|
|
2530
|
+
borderRadius: "0.75rem",
|
|
2531
|
+
backgroundColor: "var(--bg-body)",
|
|
2532
|
+
borderWidth: "1px",
|
|
2533
|
+
borderColor: "var(--border-color)",
|
|
2534
|
+
transition: "all 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
2535
|
+
},
|
|
2536
|
+
children: [
|
|
2537
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
|
|
2538
|
+
width: "2.5rem",
|
|
2539
|
+
height: "2.5rem",
|
|
2540
|
+
borderRadius: "0.5rem",
|
|
2541
|
+
display: "flex",
|
|
2542
|
+
alignItems: "center",
|
|
2543
|
+
justifyContent: "center",
|
|
2544
|
+
marginRight: "0.75rem"
|
|
2545
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Phone, { size: 18, style: { color: "white" } }) }),
|
|
2546
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2547
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contactList.card.phone") || "Điện thoại" }),
|
|
2548
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.phone })
|
|
2549
|
+
] })
|
|
2550
|
+
]
|
|
2551
|
+
}
|
|
2552
|
+
),
|
|
2553
|
+
contact.email && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2554
|
+
"a",
|
|
2555
|
+
{
|
|
2556
|
+
href: `mailto:${contact.email}`,
|
|
2557
|
+
className: "card-link",
|
|
2558
|
+
style: {
|
|
2559
|
+
padding: "0.75rem",
|
|
2560
|
+
borderRadius: "0.75rem",
|
|
2561
|
+
backgroundColor: "var(--bg-body)",
|
|
2562
|
+
borderWidth: "1px",
|
|
2563
|
+
borderColor: "var(--border-color)",
|
|
2564
|
+
transition: "all 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
2565
|
+
},
|
|
2566
|
+
children: [
|
|
2567
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-accent", style: {
|
|
2568
|
+
width: "2.5rem",
|
|
2569
|
+
height: "2.5rem",
|
|
2570
|
+
borderRadius: "0.5rem",
|
|
2571
|
+
display: "flex",
|
|
2572
|
+
alignItems: "center",
|
|
2573
|
+
justifyContent: "center",
|
|
2574
|
+
marginRight: "0.75rem"
|
|
2575
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Mail, { size: 18, style: { color: "white" } }) }),
|
|
2576
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2577
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: "Email" }),
|
|
2578
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.email })
|
|
2579
|
+
] })
|
|
2580
|
+
]
|
|
2581
|
+
}
|
|
2582
|
+
),
|
|
2583
|
+
contact.workingHours && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
|
|
2584
|
+
display: "flex",
|
|
2585
|
+
alignItems: "center",
|
|
2586
|
+
padding: "0.75rem",
|
|
2587
|
+
borderRadius: "0.75rem",
|
|
2588
|
+
backgroundColor: "var(--bg-body)",
|
|
2589
|
+
borderWidth: "1px",
|
|
2590
|
+
borderColor: "var(--border-color)"
|
|
2591
|
+
}, children: [
|
|
2592
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
|
|
2593
|
+
width: "2.5rem",
|
|
2594
|
+
height: "2.5rem",
|
|
2595
|
+
borderRadius: "0.5rem",
|
|
2596
|
+
display: "flex",
|
|
2597
|
+
alignItems: "center",
|
|
2598
|
+
justifyContent: "center",
|
|
2599
|
+
marginRight: "0.75rem"
|
|
2600
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { size: 18, style: { color: "white" } }) }),
|
|
2601
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2602
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contactList.card.workingHours") || "Giờ làm việc" }),
|
|
2603
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.workingHours || t("contactList.card.defaultWorkingHours") || "T2-T6: 8:00-18:00" })
|
|
2749
2604
|
] })
|
|
2750
|
-
]
|
|
2751
|
-
}
|
|
2752
|
-
);
|
|
2753
|
-
};
|
|
2754
|
-
const ContactInfo = ({ icon, label, value, href, isDarkMode }) => {
|
|
2755
|
-
if (!value) return null;
|
|
2756
|
-
const content = /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `flex items-center py-3 border-b ${isDarkMode ? "border-gray-600" : "border-gray-100"} last:border-b-0`, children: [
|
|
2757
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-lg mr-3 w-6 text-center", children: icon }),
|
|
2758
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1", children: [
|
|
2759
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `text-sm ${isDarkMode ? "text-gray-400" : "text-gray-600"} mb-0.5`, children: label }),
|
|
2760
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `text-base font-medium ${href ? `${isDarkMode ? "text-blue-400 hover:text-blue-300" : "text-blue-500 hover:text-blue-600"}` : `${isDarkMode ? "text-white" : "text-gray-900"}`} transition-colors duration-200`, children: value })
|
|
2605
|
+
] })
|
|
2761
2606
|
] })
|
|
2762
2607
|
] });
|
|
2763
|
-
if (href) {
|
|
2764
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href, className: `no-underline text-inherit block ${isDarkMode ? "hover:bg-gray-700/50" : "hover:bg-gray-50"} rounded-lg -mx-2 px-2 transition-colors duration-200`, children: content });
|
|
2765
|
-
}
|
|
2766
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "-mx-2 px-2", children: content });
|
|
2767
2608
|
};
|
|
2768
2609
|
const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback, section }) => {
|
|
2769
2610
|
const [feedbacks, setFeedbacks] = useState([]);
|
|
@@ -2847,7 +2688,7 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
|
|
|
2847
2688
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2848
2689
|
"div",
|
|
2849
2690
|
{
|
|
2850
|
-
className:
|
|
2691
|
+
className: "\r\n inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 \r\n border shadow-sm \r\n section-badge\r\n ",
|
|
2851
2692
|
children: [
|
|
2852
2693
|
"💬 ",
|
|
2853
2694
|
sectionTitle
|
|
@@ -2858,37 +2699,19 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
|
|
|
2858
2699
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2859
2700
|
"div",
|
|
2860
2701
|
{
|
|
2861
|
-
className:
|
|
2702
|
+
className: "card",
|
|
2862
2703
|
children: [
|
|
2863
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2864
|
-
"
|
|
2865
|
-
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
|
|
2869
|
-
currentFeedback.content,
|
|
2870
|
-
'"'
|
|
2871
|
-
]
|
|
2872
|
-
}
|
|
2873
|
-
),
|
|
2874
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4 animate-fadeIn", children: [
|
|
2704
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("blockquote", { className: "card-text text-lg lg:text-xl italic mb-6 leading-relaxed", children: [
|
|
2705
|
+
'"',
|
|
2706
|
+
currentFeedback.content,
|
|
2707
|
+
'"'
|
|
2708
|
+
] }),
|
|
2709
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4", children: [
|
|
2875
2710
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-3xl", children: "👤" }),
|
|
2876
2711
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
2877
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2878
|
-
|
|
2879
|
-
|
|
2880
|
-
className: `font-bold text-base transition-colors duration-200 ${isDarkMode ? "text-white" : "text-gray-900"}`,
|
|
2881
|
-
children: currentFeedback.customerName
|
|
2882
|
-
}
|
|
2883
|
-
),
|
|
2884
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-blue-600 font-medium text-sm", children: currentFeedback.customerTitle }),
|
|
2885
|
-
currentFeedback.customerCompany && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2886
|
-
"div",
|
|
2887
|
-
{
|
|
2888
|
-
className: `text-xs transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-gray-600"}`,
|
|
2889
|
-
children: currentFeedback.customerCompany
|
|
2890
|
-
}
|
|
2891
|
-
)
|
|
2712
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-title text-base mb-1", children: currentFeedback.customerName }),
|
|
2713
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-link text-sm", children: currentFeedback.customerTitle }),
|
|
2714
|
+
currentFeedback.customerCompany && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-text text-xs mt-1", children: currentFeedback.customerCompany })
|
|
2892
2715
|
] })
|
|
2893
2716
|
] })
|
|
2894
2717
|
]
|
|
@@ -2899,8 +2722,11 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
|
|
|
2899
2722
|
"button",
|
|
2900
2723
|
{
|
|
2901
2724
|
onClick: () => setCurrentIndex(index2),
|
|
2902
|
-
|
|
2903
|
-
|
|
2725
|
+
"aria-label": t("customerFeedback.switchToFeedback", { number: index2 + 1 }) || `Chuyển đến phản hồi ${index2 + 1}`,
|
|
2726
|
+
className: `
|
|
2727
|
+
w-2.5 h-2.5 rounded-full transition-all duration-300
|
|
2728
|
+
${index2 === currentIndex ? "bg-brand-secondary" : "bg-surface hover:bg-brand-primary"}
|
|
2729
|
+
`
|
|
2904
2730
|
},
|
|
2905
2731
|
index2
|
|
2906
2732
|
)) })
|
|
@@ -3154,28 +2980,12 @@ const TextWithTitleSection = ({ section, data, isDarkMode }) => {
|
|
|
3154
2980
|
const textItems = (data == null ? void 0 : data.sectionDataBindingItems) || [];
|
|
3155
2981
|
const title = ((_a = textItems[0]) == null ? void 0 : _a.value) || "";
|
|
3156
2982
|
const descriptions = textItems.slice(1);
|
|
3157
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
|
|
3158
|
-
title && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", {
|
|
3159
|
-
fontSize: "36px",
|
|
3160
|
-
fontWeight: "700",
|
|
3161
|
-
color: isDarkMode ? "#ffffff" : "#000000",
|
|
3162
|
-
marginBottom: "16px",
|
|
3163
|
-
lineHeight: "1.2",
|
|
3164
|
-
textAlign: "left",
|
|
3165
|
-
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'
|
|
3166
|
-
}, children: title }),
|
|
2983
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-6xl mx-auto", children: [
|
|
2984
|
+
title && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title font-black mb-4 leading-tight text-left text-main", children: title }),
|
|
3167
2985
|
descriptions.map((item, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3168
2986
|
"div",
|
|
3169
2987
|
{
|
|
3170
|
-
|
|
3171
|
-
fontSize: "16px",
|
|
3172
|
-
lineHeight: "1.6",
|
|
3173
|
-
color: isDarkMode ? "#9ca3af" : "#6b7280",
|
|
3174
|
-
textAlign: "left",
|
|
3175
|
-
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
|
|
3176
|
-
fontWeight: "400",
|
|
3177
|
-
marginBottom: index2 < descriptions.length - 1 ? "16px" : "0"
|
|
3178
|
-
},
|
|
2988
|
+
className: `text-body leading-relaxed text-left font-normal text-muted ${index2 < descriptions.length - 1 ? "mb-4" : ""}`,
|
|
3179
2989
|
children: item.value
|
|
3180
2990
|
},
|
|
3181
2991
|
item.id || index2
|
|
@@ -3184,19 +2994,10 @@ const TextWithTitleSection = ({ section, data, isDarkMode }) => {
|
|
|
3184
2994
|
};
|
|
3185
2995
|
const TextSection = ({ data, isDarkMode }) => {
|
|
3186
2996
|
const textItems = (data == null ? void 0 : data.sectionDataBindingItems) || [];
|
|
3187
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", {
|
|
2997
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-3xl mx-auto", children: textItems.map((item, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3188
2998
|
"div",
|
|
3189
2999
|
{
|
|
3190
|
-
|
|
3191
|
-
padding: "0",
|
|
3192
|
-
marginBottom: "20px",
|
|
3193
|
-
fontSize: "28px",
|
|
3194
|
-
fontWeight: "700",
|
|
3195
|
-
lineHeight: "1.3",
|
|
3196
|
-
color: isDarkMode ? "#f9fafb" : "#111827",
|
|
3197
|
-
textAlign: "left",
|
|
3198
|
-
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'
|
|
3199
|
-
},
|
|
3000
|
+
className: "mb-5 text-subtitle font-black leading-snug text-left text-main",
|
|
3200
3001
|
children: item.value
|
|
3201
3002
|
},
|
|
3202
3003
|
item.id || index2
|
|
@@ -3243,25 +3044,23 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3243
3044
|
};
|
|
3244
3045
|
return icons[iconName] || Settings;
|
|
3245
3046
|
};
|
|
3246
|
-
const
|
|
3047
|
+
const getColorStyles = (index2) => {
|
|
3247
3048
|
const isCyan = index2 % 2 === 0;
|
|
3248
3049
|
if (isCyan) {
|
|
3249
3050
|
return {
|
|
3250
|
-
|
|
3251
|
-
|
|
3252
|
-
|
|
3253
|
-
|
|
3254
|
-
|
|
3255
|
-
iconBg: "bg-cyan-500/20"
|
|
3051
|
+
gradient: "linear-gradient(to right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
|
|
3052
|
+
border: "var(--gradient-brand-soft-start)",
|
|
3053
|
+
line: "var(--gradient-brand-soft-start)",
|
|
3054
|
+
iconBg: "var(--gradient-brand-soft-start)",
|
|
3055
|
+
shadow: "rgba(59, 130, 246, 0.2)"
|
|
3256
3056
|
};
|
|
3257
3057
|
}
|
|
3258
3058
|
return {
|
|
3259
|
-
|
|
3260
|
-
|
|
3261
|
-
|
|
3262
|
-
|
|
3263
|
-
|
|
3264
|
-
iconBg: "bg-purple-500/20"
|
|
3059
|
+
gradient: "linear-gradient(to right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
|
|
3060
|
+
border: "var(--gradient-accent-soft-start)",
|
|
3061
|
+
line: "var(--gradient-accent-soft-start)",
|
|
3062
|
+
iconBg: "var(--gradient-accent-soft-start)",
|
|
3063
|
+
shadow: "rgba(139, 92, 246, 0.2)"
|
|
3265
3064
|
};
|
|
3266
3065
|
};
|
|
3267
3066
|
const calculateAngles = (count) => {
|
|
@@ -3271,12 +3070,13 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3271
3070
|
};
|
|
3272
3071
|
const angles = calculateAngles(modules.length);
|
|
3273
3072
|
if (isMobile) {
|
|
3274
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
3073
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "w-full p-4 relative overflow-hidden bg-section-soft", children: [
|
|
3275
3074
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 overflow-hidden pointer-events-none opacity-20", children: [...Array(50)].map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3276
3075
|
"div",
|
|
3277
3076
|
{
|
|
3278
|
-
className:
|
|
3077
|
+
className: "absolute rounded-full bg-brand-primary",
|
|
3279
3078
|
style: {
|
|
3079
|
+
opacity: 0.2,
|
|
3280
3080
|
width: Math.random() * 3 + 1 + "px",
|
|
3281
3081
|
height: Math.random() * 3 + 1 + "px",
|
|
3282
3082
|
top: Math.random() * 100 + "%",
|
|
@@ -3297,26 +3097,38 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3297
3097
|
to { opacity: 1; transform: translateY(0); }
|
|
3298
3098
|
}
|
|
3299
3099
|
` }),
|
|
3300
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
3301
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-
|
|
3302
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-
|
|
3100
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-6 backdrop-blur-md rounded-2xl border-2 p-6 shadow-2xl text-center bg-gradient-brand border-brand-primary", children: [
|
|
3101
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-inverse mb-1 tracking-wide", children: diagramName }),
|
|
3102
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-inverse", children: diagramDescription })
|
|
3303
3103
|
] }),
|
|
3304
3104
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-3", children: modules.map((module, index2) => {
|
|
3305
3105
|
const Icon2 = getIconComponent(module.icon);
|
|
3306
|
-
const colors =
|
|
3106
|
+
const colors = getColorStyles(index2);
|
|
3307
3107
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3308
3108
|
"a",
|
|
3309
3109
|
{
|
|
3310
3110
|
href: module.url || "#",
|
|
3311
|
-
className:
|
|
3111
|
+
className: "block backdrop-blur-md rounded-2xl border-2 p-4 flex items-center gap-3 shadow-lg active:scale-95 transition-all duration-200",
|
|
3312
3112
|
style: {
|
|
3113
|
+
background: colors.gradient,
|
|
3114
|
+
borderColor: colors.border,
|
|
3313
3115
|
animation: `slideUp 0.5s ease-out ${index2 * 0.1}s both`
|
|
3314
3116
|
},
|
|
3315
3117
|
children: [
|
|
3316
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3118
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3119
|
+
"div",
|
|
3120
|
+
{
|
|
3121
|
+
className: "flex-shrink-0 p-3 rounded-xl border",
|
|
3122
|
+
style: {
|
|
3123
|
+
backgroundColor: `${colors.iconBg}33`,
|
|
3124
|
+
borderColor: colors.border
|
|
3125
|
+
},
|
|
3126
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "w-6 h-6 text-inverse", strokeWidth: 2 })
|
|
3127
|
+
}
|
|
3128
|
+
),
|
|
3317
3129
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1", children: [
|
|
3318
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-
|
|
3319
|
-
module.description && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-
|
|
3130
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-inverse text-small tracking-wide mb-1", children: module.name }),
|
|
3131
|
+
module.description && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-inverse text-caption", children: module.description })
|
|
3320
3132
|
] })
|
|
3321
3133
|
]
|
|
3322
3134
|
},
|
|
@@ -3325,12 +3137,13 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3325
3137
|
}) })
|
|
3326
3138
|
] });
|
|
3327
3139
|
}
|
|
3328
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
3140
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "section-wrapper w-full py-24 px-4 sm:px-8 relative overflow-visible bg-section-soft", children: [
|
|
3329
3141
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 overflow-hidden pointer-events-none", children: [...Array(100)].map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3330
3142
|
"div",
|
|
3331
3143
|
{
|
|
3332
|
-
className:
|
|
3144
|
+
className: "absolute rounded-full bg-brand-primary",
|
|
3333
3145
|
style: {
|
|
3146
|
+
opacity: isDarkMode ? 0.2 : 0.1,
|
|
3334
3147
|
width: Math.random() * 4 + 1 + "px",
|
|
3335
3148
|
height: Math.random() * 4 + 1 + "px",
|
|
3336
3149
|
top: Math.random() * 100 + "%",
|
|
@@ -3341,11 +3154,26 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3341
3154
|
},
|
|
3342
3155
|
i
|
|
3343
3156
|
)) }),
|
|
3344
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3345
|
-
|
|
3346
|
-
|
|
3347
|
-
|
|
3348
|
-
|
|
3157
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3158
|
+
"div",
|
|
3159
|
+
{
|
|
3160
|
+
className: "absolute inset-0",
|
|
3161
|
+
style: { opacity: isDarkMode ? 0.1 : 0.05 },
|
|
3162
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: "100%", height: "100%", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
3163
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("defs", { children: /* @__PURE__ */ jsxRuntimeExports.jsx("pattern", { id: "grid", width: "40", height: "40", patternUnits: "userSpaceOnUse", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3164
|
+
"path",
|
|
3165
|
+
{
|
|
3166
|
+
d: "M 40 0 L 0 0 0 40",
|
|
3167
|
+
fill: "none",
|
|
3168
|
+
stroke: "var(--brand-primary)",
|
|
3169
|
+
strokeWidth: "0.5"
|
|
3170
|
+
}
|
|
3171
|
+
) }) }),
|
|
3172
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("rect", { width: "100%", height: "100%", fill: "url(#grid)" })
|
|
3173
|
+
] })
|
|
3174
|
+
}
|
|
3175
|
+
),
|
|
3176
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "absolute inset-0 w-full h-full pointer-events-none", style: { opacity: isDarkMode ? 0.3 : 0.2 }, children: [
|
|
3349
3177
|
/* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "0", y1: "20%", x2: "100%", y2: "20%", stroke: "url(#grad1)", strokeWidth: "1", strokeDasharray: "10 5", className: "animate-pulse" }),
|
|
3350
3178
|
/* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "0", y1: "40%", x2: "100%", y2: "40%", stroke: "url(#grad2)", strokeWidth: "1", strokeDasharray: "15 8", className: "animate-pulse", style: { animationDelay: "0.5s" } }),
|
|
3351
3179
|
/* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "0", y1: "60%", x2: "100%", y2: "60%", stroke: "url(#grad1)", strokeWidth: "1", strokeDasharray: "12 6", className: "animate-pulse", style: { animationDelay: "1s" } }),
|
|
@@ -3354,20 +3182,20 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3354
3182
|
/* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "35%", y1: "0", x2: "35%", y2: "100%", stroke: "url(#grad2)", strokeWidth: "1", strokeDasharray: "15 8", className: "animate-pulse", style: { animationDelay: "0.8s" } }),
|
|
3355
3183
|
/* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "65%", y1: "0", x2: "65%", y2: "100%", stroke: "url(#grad1)", strokeWidth: "1", strokeDasharray: "12 6", className: "animate-pulse", style: { animationDelay: "1.3s" } }),
|
|
3356
3184
|
/* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "85%", y1: "0", x2: "85%", y2: "100%", stroke: "url(#grad2)", strokeWidth: "1", strokeDasharray: "8 4", className: "animate-pulse", style: { animationDelay: "1.8s" } }),
|
|
3357
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "15%", cy: "20%", r: "3", fill: "
|
|
3358
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "35%", cy: "40%", r: "3", fill: "
|
|
3359
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "65%", cy: "60%", r: "3", fill: "
|
|
3360
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "85%", cy: "80%", r: "3", fill: "
|
|
3185
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "15%", cy: "20%", r: "3", fill: "var(--gradient-brand-soft-start)", opacity: "0.6", className: "animate-pulse" }),
|
|
3186
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "35%", cy: "40%", r: "3", fill: "var(--gradient-accent-soft-start)", opacity: "0.6", className: "animate-pulse", style: { animationDelay: "0.5s" } }),
|
|
3187
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "65%", cy: "60%", r: "3", fill: "var(--gradient-brand-soft-start)", opacity: "0.6", className: "animate-pulse", style: { animationDelay: "1s" } }),
|
|
3188
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "85%", cy: "80%", r: "3", fill: "var(--gradient-accent-soft-start)", opacity: "0.6", className: "animate-pulse", style: { animationDelay: "1.5s" } }),
|
|
3361
3189
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("defs", { children: [
|
|
3362
3190
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "grad1", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
|
|
3363
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "
|
|
3364
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "
|
|
3365
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "
|
|
3191
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--gradient-brand-soft-start)", stopOpacity: 0 } }),
|
|
3192
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-brand-soft-start)", stopOpacity: 1 } }),
|
|
3193
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-brand-soft-start)", stopOpacity: 0 } })
|
|
3366
3194
|
] }),
|
|
3367
3195
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "grad2", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
|
|
3368
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "
|
|
3369
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "
|
|
3370
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "
|
|
3196
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--gradient-accent-soft-start)", stopOpacity: 0 } }),
|
|
3197
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-accent-soft-start)", stopOpacity: 1 } }),
|
|
3198
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-accent-soft-start)", stopOpacity: 0 } })
|
|
3371
3199
|
] })
|
|
3372
3200
|
] })
|
|
3373
3201
|
] }),
|
|
@@ -3428,41 +3256,77 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3428
3256
|
}
|
|
3429
3257
|
}
|
|
3430
3258
|
` }),
|
|
3431
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "diagram-container relative w-full max-w-5xl mx-auto h-[
|
|
3259
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "diagram-container relative w-full max-w-5xl mx-auto h-[800px] flex items-center justify-center transition-transform duration-300", style: { paddingTop: "80px", paddingBottom: "80px" }, children: [
|
|
3432
3260
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2", children: [
|
|
3433
3261
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute inset-0 w-[320px] h-[320px] -translate-x-1/2 -translate-y-1/2 top-1/2 left-1/2", children: [
|
|
3434
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3435
|
-
|
|
3262
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3263
|
+
"div",
|
|
3264
|
+
{
|
|
3265
|
+
className: "absolute inset-0 rounded-full border-2 animate-pulse-ring",
|
|
3266
|
+
style: { borderColor: "var(--brand-primary)", opacity: 0.3 }
|
|
3267
|
+
}
|
|
3268
|
+
),
|
|
3269
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3270
|
+
"div",
|
|
3271
|
+
{
|
|
3272
|
+
className: "absolute inset-4 rounded-full border-2 animate-pulse-ring",
|
|
3273
|
+
style: {
|
|
3274
|
+
borderColor: "var(--brand-secondary)",
|
|
3275
|
+
opacity: 0.3,
|
|
3276
|
+
animationDelay: "0.5s"
|
|
3277
|
+
}
|
|
3278
|
+
}
|
|
3279
|
+
)
|
|
3436
3280
|
] }),
|
|
3437
3281
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative animate-float", children: [
|
|
3438
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3439
|
-
|
|
3440
|
-
|
|
3441
|
-
|
|
3442
|
-
|
|
3443
|
-
|
|
3444
|
-
top: "50%",
|
|
3445
|
-
left: "50%",
|
|
3446
|
-
transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-125px)`
|
|
3447
|
-
}
|
|
3282
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3283
|
+
"div",
|
|
3284
|
+
{
|
|
3285
|
+
className: "w-64 h-64 rounded-full border-8 flex items-center justify-center backdrop-blur-sm shadow-2xl bg-surface",
|
|
3286
|
+
style: {
|
|
3287
|
+
borderColor: "var(--border-color)"
|
|
3448
3288
|
},
|
|
3449
|
-
|
|
3450
|
-
|
|
3451
|
-
|
|
3452
|
-
|
|
3453
|
-
|
|
3454
|
-
|
|
3455
|
-
|
|
3456
|
-
|
|
3457
|
-
|
|
3458
|
-
|
|
3289
|
+
children: [
|
|
3290
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 rounded-full", style: { animation: "rotate 20s linear infinite" }, children: [0, 90, 180, 270].map((angle) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3291
|
+
"div",
|
|
3292
|
+
{
|
|
3293
|
+
className: "absolute w-3 h-3 rounded-full shadow-lg bg-brand-primary",
|
|
3294
|
+
style: {
|
|
3295
|
+
boxShadow: "0 0 10px var(--brand-primary)",
|
|
3296
|
+
top: "50%",
|
|
3297
|
+
left: "50%",
|
|
3298
|
+
transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-125px)`
|
|
3299
|
+
}
|
|
3300
|
+
},
|
|
3301
|
+
angle
|
|
3302
|
+
)) }),
|
|
3303
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3304
|
+
"div",
|
|
3305
|
+
{
|
|
3306
|
+
className: "w-52 h-52 rounded-full flex items-center justify-center shadow-2xl relative overflow-hidden border-2 backdrop-blur-md bg-gradient-brand",
|
|
3307
|
+
style: {
|
|
3308
|
+
borderColor: isDarkMode ? "var(--gradient-brand-soft-start)" : "rgba(255, 255, 255, 0.4)"
|
|
3309
|
+
},
|
|
3310
|
+
children: [
|
|
3311
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-gradient-to-br from-white/10 to-transparent" }),
|
|
3312
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center relative z-10 px-4", children: [
|
|
3313
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-inverse mb-2 tracking-wide", children: diagramName }),
|
|
3314
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-inverse", children: diagramDescription })
|
|
3315
|
+
] })
|
|
3316
|
+
]
|
|
3317
|
+
}
|
|
3318
|
+
)
|
|
3319
|
+
]
|
|
3320
|
+
}
|
|
3321
|
+
),
|
|
3459
3322
|
modules.map((module, i) => {
|
|
3460
3323
|
const angle = angles[i];
|
|
3461
3324
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3462
3325
|
"div",
|
|
3463
3326
|
{
|
|
3464
|
-
className:
|
|
3327
|
+
className: "absolute w-4 h-4 rounded-full border-2 shadow-lg animate-pulse bg-muted",
|
|
3465
3328
|
style: {
|
|
3329
|
+
borderColor: "var(--border-color)",
|
|
3466
3330
|
top: "50%",
|
|
3467
3331
|
left: "50%",
|
|
3468
3332
|
transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-132px)`,
|
|
@@ -3475,7 +3339,7 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3475
3339
|
] })
|
|
3476
3340
|
] }),
|
|
3477
3341
|
/* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 pointer-events-none", width: "1000", height: "900", style: { overflow: "visible" }, children: modules.map((module, index2) => {
|
|
3478
|
-
const colors =
|
|
3342
|
+
const colors = getColorStyles(index2);
|
|
3479
3343
|
const angle = angles[index2] * Math.PI / 180;
|
|
3480
3344
|
const circleRadius = 132;
|
|
3481
3345
|
const moduleRadius = 360;
|
|
@@ -3516,7 +3380,7 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3516
3380
|
}) }),
|
|
3517
3381
|
modules.map((module, index2) => {
|
|
3518
3382
|
const Icon2 = getIconComponent(module.icon);
|
|
3519
|
-
const colors =
|
|
3383
|
+
const colors = getColorStyles(index2);
|
|
3520
3384
|
const angle = angles[index2] * Math.PI / 180;
|
|
3521
3385
|
const radius = 360;
|
|
3522
3386
|
const x = Math.cos(angle) * radius;
|
|
@@ -3538,19 +3402,11 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3538
3402
|
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3539
3403
|
"div",
|
|
3540
3404
|
{
|
|
3541
|
-
className: `
|
|
3542
|
-
${colors.bg} backdrop-blur-md rounded-full
|
|
3543
|
-
border-2 ${colors.border} ${colors.glow}
|
|
3544
|
-
px-5 py-3 flex items-center gap-3
|
|
3545
|
-
shadow-xl ${colors.hoverGlow}
|
|
3546
|
-
transition-all duration-300
|
|
3547
|
-
group-hover:scale-110 group-hover:-translate-y-3 group-hover:shadow-2xl
|
|
3548
|
-
cursor-pointer
|
|
3549
|
-
relative
|
|
3550
|
-
${isRightSide ? "flex-row-reverse" : "flex-row"}
|
|
3551
|
-
`,
|
|
3405
|
+
className: `backdrop-blur-md rounded-full border-2 px-5 py-3 flex items-center gap-3 shadow-xl transition-all duration-300 group-hover:scale-110 group-hover:-translate-y-3 group-hover:shadow-2xl cursor-pointer relative ${isRightSide ? "flex-row-reverse" : "flex-row"}`,
|
|
3552
3406
|
style: {
|
|
3553
|
-
|
|
3407
|
+
background: colors.gradient,
|
|
3408
|
+
borderColor: colors.border,
|
|
3409
|
+
boxShadow: `0 10px 40px ${colors.shadow}`,
|
|
3554
3410
|
width: "240px",
|
|
3555
3411
|
height: "56px",
|
|
3556
3412
|
minWidth: "240px",
|
|
@@ -3558,14 +3414,49 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3558
3414
|
},
|
|
3559
3415
|
children: [
|
|
3560
3416
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 rounded-full bg-gradient-to-r from-transparent via-white/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300" }),
|
|
3561
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3562
|
-
|
|
3563
|
-
|
|
3564
|
-
|
|
3565
|
-
|
|
3566
|
-
|
|
3567
|
-
|
|
3568
|
-
|
|
3417
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3418
|
+
"div",
|
|
3419
|
+
{
|
|
3420
|
+
className: "absolute inset-0 rounded-full border-2 opacity-0 group-hover:opacity-100 transition-all duration-300 scale-110 blur-sm",
|
|
3421
|
+
style: { borderColor: colors.border }
|
|
3422
|
+
}
|
|
3423
|
+
),
|
|
3424
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3425
|
+
"div",
|
|
3426
|
+
{
|
|
3427
|
+
className: "flex-shrink-0 p-2.5 rounded-lg border transition-all duration-300 group-hover:rotate-12 group-hover:scale-125 relative z-10",
|
|
3428
|
+
style: {
|
|
3429
|
+
backgroundColor: `${colors.iconBg}33`,
|
|
3430
|
+
borderColor: colors.border
|
|
3431
|
+
},
|
|
3432
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "w-5 h-5 text-inverse", strokeWidth: 2 })
|
|
3433
|
+
}
|
|
3434
|
+
),
|
|
3435
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `flex-1 text-inverse text-small tracking-wide overflow-hidden text-ellipsis whitespace-nowrap ${isRightSide ? "text-right" : "text-left"} relative z-10 min-w-0`, children: module.name }),
|
|
3436
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3437
|
+
"div",
|
|
3438
|
+
{
|
|
3439
|
+
className: `absolute bottom-full left-1/2 -translate-x-1/2 mb-3 px-4 py-2 rounded-lg shadow-xl opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none whitespace-nowrap z-50 border max-w-xs ${isDarkMode ? "bg-surface" : "bg-body"}`,
|
|
3440
|
+
style: {
|
|
3441
|
+
borderColor: "var(--border-color)",
|
|
3442
|
+
maxHeight: "120px",
|
|
3443
|
+
overflowY: "auto"
|
|
3444
|
+
},
|
|
3445
|
+
children: [
|
|
3446
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-small text-main", children: module.name }),
|
|
3447
|
+
module.description && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-caption text-muted mt-1", children: module.description }),
|
|
3448
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3449
|
+
"div",
|
|
3450
|
+
{
|
|
3451
|
+
className: "absolute top-full left-1/2 -translate-x-1/2 -mt-px border-4 border-transparent",
|
|
3452
|
+
style: {
|
|
3453
|
+
borderTopColor: isDarkMode ? "var(--bg-surface)" : "var(--bg-body)"
|
|
3454
|
+
}
|
|
3455
|
+
}
|
|
3456
|
+
)
|
|
3457
|
+
]
|
|
3458
|
+
}
|
|
3459
|
+
)
|
|
3569
3460
|
]
|
|
3570
3461
|
}
|
|
3571
3462
|
)
|
|
@@ -3573,24 +3464,82 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3573
3464
|
module.id
|
|
3574
3465
|
);
|
|
3575
3466
|
}),
|
|
3576
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3577
|
-
|
|
3578
|
-
|
|
3467
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3468
|
+
"div",
|
|
3469
|
+
{
|
|
3470
|
+
className: "absolute bottom-12 right-12 sm:bottom-16 sm:right-20 opacity-40 text-brand-secondary",
|
|
3471
|
+
style: { animation: "rotate 10s linear infinite" },
|
|
3472
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: "80", height: "80", viewBox: "0 0 60 60", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M30 0 L35 25 L60 30 L35 35 L30 60 L25 35 L0 30 L25 25 Z", fill: "currentColor" }) })
|
|
3473
|
+
}
|
|
3474
|
+
),
|
|
3475
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3476
|
+
"div",
|
|
3477
|
+
{
|
|
3478
|
+
className: "absolute top-12 left-12 w-16 h-16 border-2 rounded-lg animate-pulse border-brand-primary",
|
|
3479
|
+
style: {
|
|
3480
|
+
opacity: 0.3,
|
|
3481
|
+
animation: "rotate 8s linear infinite reverse"
|
|
3482
|
+
}
|
|
3483
|
+
}
|
|
3484
|
+
),
|
|
3485
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3486
|
+
"div",
|
|
3487
|
+
{
|
|
3488
|
+
className: "absolute top-20 right-16 w-12 h-12 border-2 rounded-full animate-pulse border-brand-secondary",
|
|
3489
|
+
style: {
|
|
3490
|
+
opacity: 0.3
|
|
3491
|
+
}
|
|
3492
|
+
}
|
|
3493
|
+
)
|
|
3579
3494
|
] })
|
|
3580
3495
|
] });
|
|
3581
3496
|
};
|
|
3582
|
-
const MindMapNode = ({ id, icon: Icon2, text, color, position, delay = 0, onDragStart, isDragging, onClick, description }) => {
|
|
3497
|
+
const MindMapNode = ({ id, icon: Icon2, text, color, position, delay = 0, onDragStart, isDragging, onClick, description, isDarkMode }) => {
|
|
3583
3498
|
const [isHovered, setIsHovered] = useState(false);
|
|
3584
3499
|
const [dragStartPos, setDragStartPos] = useState(null);
|
|
3585
3500
|
const [hasMoved, setHasMoved] = useState(false);
|
|
3586
|
-
const
|
|
3587
|
-
|
|
3588
|
-
|
|
3589
|
-
|
|
3590
|
-
|
|
3591
|
-
|
|
3592
|
-
|
|
3501
|
+
const getColorStyles = (colorName) => {
|
|
3502
|
+
const styles = {
|
|
3503
|
+
blue: {
|
|
3504
|
+
gradient: "linear-gradient(to bottom right, var(--brand-primary), var(--brand-primary))",
|
|
3505
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
|
|
3506
|
+
border: "var(--brand-primary)",
|
|
3507
|
+
shadowColor: "var(--brand-primary)"
|
|
3508
|
+
},
|
|
3509
|
+
teal: {
|
|
3510
|
+
gradient: "linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
|
|
3511
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-brand-strong-start), var(--gradient-brand-strong-end))",
|
|
3512
|
+
border: "var(--gradient-brand-soft-start)",
|
|
3513
|
+
shadowColor: "var(--gradient-brand-soft-start)"
|
|
3514
|
+
},
|
|
3515
|
+
purple: {
|
|
3516
|
+
gradient: "linear-gradient(to bottom right, var(--brand-secondary), var(--gradient-accent-soft-start))",
|
|
3517
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
|
|
3518
|
+
border: "var(--brand-secondary)",
|
|
3519
|
+
shadowColor: "var(--brand-secondary)"
|
|
3520
|
+
},
|
|
3521
|
+
orange: {
|
|
3522
|
+
gradient: "linear-gradient(to bottom right, var(--gradient-accent-strong-start), var(--gradient-accent-strong-end))",
|
|
3523
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
|
|
3524
|
+
border: "var(--gradient-accent-strong-start)",
|
|
3525
|
+
shadowColor: "var(--gradient-accent-strong-start)"
|
|
3526
|
+
},
|
|
3527
|
+
cyan: {
|
|
3528
|
+
gradient: "linear-gradient(to bottom right, var(--gradient-brand-strong-start), var(--gradient-brand-strong-end))",
|
|
3529
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
|
|
3530
|
+
border: "var(--gradient-brand-strong-start)",
|
|
3531
|
+
shadowColor: "var(--gradient-brand-strong-start)"
|
|
3532
|
+
},
|
|
3533
|
+
indigo: {
|
|
3534
|
+
gradient: "linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
|
|
3535
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-accent-strong-start), var(--gradient-accent-strong-end))",
|
|
3536
|
+
border: "var(--gradient-accent-soft-start)",
|
|
3537
|
+
shadowColor: "var(--gradient-accent-soft-start)"
|
|
3538
|
+
}
|
|
3539
|
+
};
|
|
3540
|
+
return styles[colorName] || styles.blue;
|
|
3593
3541
|
};
|
|
3542
|
+
const colorStyle = getColorStyles(color);
|
|
3594
3543
|
const handleMouseDown = (e) => {
|
|
3595
3544
|
setDragStartPos({ x: e.clientX, y: e.clientY });
|
|
3596
3545
|
setHasMoved(false);
|
|
@@ -3673,12 +3622,45 @@ const MindMapNode = ({ id, icon: Icon2, text, color, position, delay = 0, onDrag
|
|
|
3673
3622
|
onTouchMove: handleTouchMove,
|
|
3674
3623
|
onTouchEnd: handleTouchEnd,
|
|
3675
3624
|
children: [
|
|
3676
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3677
|
-
|
|
3678
|
-
|
|
3679
|
-
|
|
3680
|
-
|
|
3681
|
-
|
|
3625
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3626
|
+
"div",
|
|
3627
|
+
{
|
|
3628
|
+
className: "backdrop-blur-md px-4 py-2.5 rounded-2xl shadow-2xl border-2 flex items-center gap-2.5 cursor-pointer transform transition-all duration-300",
|
|
3629
|
+
style: {
|
|
3630
|
+
background: isHovered || isDragging ? colorStyle.gradientHover : colorStyle.gradient,
|
|
3631
|
+
borderColor: colorStyle.border + "80",
|
|
3632
|
+
boxShadow: `0 10px 40px ${colorStyle.shadowColor}4D`,
|
|
3633
|
+
transform: isHovered || isDragging ? "scale(1.1)" : "scale(1)",
|
|
3634
|
+
filter: isHovered || isDragging ? "brightness(1.1)" : "brightness(1)",
|
|
3635
|
+
rotate: isDragging ? "2deg" : "0deg"
|
|
3636
|
+
},
|
|
3637
|
+
children: [
|
|
3638
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "w-4 h-4 flex-shrink-0 text-inverse" }),
|
|
3639
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-inverse text-small whitespace-nowrap", children: text })
|
|
3640
|
+
]
|
|
3641
|
+
}
|
|
3642
|
+
),
|
|
3643
|
+
isDragging && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3644
|
+
"div",
|
|
3645
|
+
{
|
|
3646
|
+
className: "absolute inset-0 rounded-2xl blur-xl animate-pulse",
|
|
3647
|
+
style: {
|
|
3648
|
+
background: "rgba(255, 255, 255, 0.1)",
|
|
3649
|
+
transform: "scale(1.5)"
|
|
3650
|
+
}
|
|
3651
|
+
}
|
|
3652
|
+
),
|
|
3653
|
+
(isHovered || isDragging) && description && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3654
|
+
"div",
|
|
3655
|
+
{
|
|
3656
|
+
className: `absolute top-full left-1/2 -translate-x-1/2 mt-2 px-3 py-2 text-caption rounded-lg shadow-xl border whitespace-nowrap z-50 max-w-xs ${isDarkMode ? "bg-surface text-inverse" : "bg-body text-main"}`,
|
|
3657
|
+
style: {
|
|
3658
|
+
borderColor: "var(--border-color)",
|
|
3659
|
+
opacity: 0.95
|
|
3660
|
+
},
|
|
3661
|
+
children: description
|
|
3662
|
+
}
|
|
3663
|
+
)
|
|
3682
3664
|
]
|
|
3683
3665
|
}
|
|
3684
3666
|
);
|
|
@@ -3899,49 +3881,108 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
|
|
|
3899
3881
|
"div",
|
|
3900
3882
|
{
|
|
3901
3883
|
ref: containerRef,
|
|
3902
|
-
className:
|
|
3903
|
-
style: {
|
|
3884
|
+
className: "mind-map-container relative w-full h-screen overflow-hidden bg-section-soft",
|
|
3885
|
+
style: {
|
|
3886
|
+
touchAction: "none"
|
|
3887
|
+
},
|
|
3904
3888
|
children: [
|
|
3905
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3906
|
-
|
|
3907
|
-
|
|
3908
|
-
|
|
3909
|
-
|
|
3910
|
-
|
|
3889
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3890
|
+
"div",
|
|
3891
|
+
{
|
|
3892
|
+
className: "absolute inset-0",
|
|
3893
|
+
style: { opacity: isDarkMode ? 0.3 : 0.2 },
|
|
3894
|
+
children: [
|
|
3895
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3896
|
+
"div",
|
|
3897
|
+
{
|
|
3898
|
+
className: "absolute inset-0 bg-gradient-brand",
|
|
3899
|
+
style: {
|
|
3900
|
+
opacity: 0.2
|
|
3901
|
+
}
|
|
3902
|
+
}
|
|
3903
|
+
),
|
|
3904
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3905
|
+
"div",
|
|
3906
|
+
{
|
|
3907
|
+
className: "absolute inset-0 bg-gradient-accent",
|
|
3908
|
+
style: {
|
|
3909
|
+
opacity: 0.1
|
|
3910
|
+
}
|
|
3911
|
+
}
|
|
3912
|
+
)
|
|
3913
|
+
]
|
|
3914
|
+
}
|
|
3915
|
+
),
|
|
3916
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3911
3917
|
"div",
|
|
3912
3918
|
{
|
|
3913
|
-
className: "absolute
|
|
3914
|
-
style: {
|
|
3915
|
-
|
|
3916
|
-
|
|
3917
|
-
|
|
3918
|
-
|
|
3919
|
-
|
|
3920
|
-
|
|
3921
|
-
|
|
3922
|
-
|
|
3923
|
-
|
|
3924
|
-
|
|
3925
|
-
|
|
3926
|
-
|
|
3927
|
-
|
|
3928
|
-
|
|
3929
|
-
|
|
3919
|
+
className: "absolute inset-0 pointer-events-none",
|
|
3920
|
+
style: { opacity: isDarkMode ? 0.6 : 0.4 },
|
|
3921
|
+
children: [...Array(150)].map((_, i) => {
|
|
3922
|
+
const colors = ["bg-brand-primary", "bg-brand-secondary"];
|
|
3923
|
+
const randomColor = colors[Math.floor(Math.random() * colors.length)];
|
|
3924
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3925
|
+
"div",
|
|
3926
|
+
{
|
|
3927
|
+
className: `absolute rounded-full ${randomColor}`,
|
|
3928
|
+
style: {
|
|
3929
|
+
left: `${Math.random() * 100}%`,
|
|
3930
|
+
top: `${Math.random() * 100}%`,
|
|
3931
|
+
width: `${Math.random() * 3 + 1}px`,
|
|
3932
|
+
height: `${Math.random() * 3 + 1}px`,
|
|
3933
|
+
animationName: "twinkle",
|
|
3934
|
+
animationDelay: `${Math.random() * 5}s`,
|
|
3935
|
+
animationDuration: `${4 + Math.random() * 6}s`,
|
|
3936
|
+
animationIterationCount: "infinite",
|
|
3937
|
+
animationTimingFunction: "ease-in-out"
|
|
3938
|
+
}
|
|
3939
|
+
},
|
|
3940
|
+
i
|
|
3941
|
+
);
|
|
3942
|
+
})
|
|
3943
|
+
}
|
|
3944
|
+
),
|
|
3945
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3946
|
+
"div",
|
|
3947
|
+
{
|
|
3948
|
+
className: "absolute inset-0 pointer-events-none",
|
|
3949
|
+
style: { opacity: isDarkMode ? 0.1 : 0.05 },
|
|
3950
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3951
|
+
"div",
|
|
3952
|
+
{
|
|
3953
|
+
className: "absolute inset-0",
|
|
3954
|
+
style: {
|
|
3955
|
+
backgroundImage: isDarkMode ? "radial-gradient(circle at 1px 1px, var(--text-inverse) 1px, transparent 0)" : "radial-gradient(circle at 1px 1px, var(--text-main) 1px, transparent 0)",
|
|
3956
|
+
backgroundSize: "40px 40px",
|
|
3957
|
+
opacity: 0.15
|
|
3958
|
+
}
|
|
3959
|
+
}
|
|
3960
|
+
)
|
|
3961
|
+
}
|
|
3962
|
+
),
|
|
3930
3963
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute right-4 sm:right-16 bottom-4 sm:bottom-16 z-0 pointer-events-none", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
3931
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3964
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3965
|
+
"div",
|
|
3966
|
+
{
|
|
3967
|
+
className: "absolute inset-0 blur-3xl w-20 h-20 sm:w-32 sm:h-32 bg-gradient-brand",
|
|
3968
|
+
style: {
|
|
3969
|
+
opacity: 0.2
|
|
3970
|
+
}
|
|
3971
|
+
}
|
|
3972
|
+
),
|
|
3932
3973
|
/* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: "60", height: "60", viewBox: "0 0 80 80", className: "relative sm:w-24 sm:h-24", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M40 0 L45 35 L80 40 L45 45 L40 80 L35 45 L0 40 L35 35 Z", fill: "url(#sparkle-gradient)", opacity: "0.4" }) })
|
|
3933
3974
|
] }) }),
|
|
3934
3975
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "absolute inset-0 w-full h-full pointer-events-none", style: { zIndex: 1 }, children: [
|
|
3935
3976
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("defs", { children: [
|
|
3936
3977
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "circuit-gradient", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
|
|
3937
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", stopColor: "
|
|
3938
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", stopColor: "
|
|
3939
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", stopColor: "
|
|
3978
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--brand-primary)", stopOpacity: 0.6 } }),
|
|
3979
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-brand-soft-start)", stopOpacity: 0.9 } }),
|
|
3980
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-brand-soft-end)", stopOpacity: 0.6 } })
|
|
3940
3981
|
] }),
|
|
3941
3982
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "sparkle-gradient", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
|
|
3942
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", stopColor: "
|
|
3943
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", stopColor: "
|
|
3944
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", stopColor: "
|
|
3983
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--brand-primary)" } }),
|
|
3984
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-brand-soft-start)" } }),
|
|
3985
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-brand-soft-end)" } })
|
|
3945
3986
|
] }),
|
|
3946
3987
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("filter", { id: "glow", children: [
|
|
3947
3988
|
/* @__PURE__ */ jsxRuntimeExports.jsx("feGaussianBlur", { stdDeviation: "4", result: "coloredBlur" }),
|
|
@@ -3956,11 +3997,11 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
|
|
|
3956
3997
|
"path",
|
|
3957
3998
|
{
|
|
3958
3999
|
d: line.path,
|
|
3959
|
-
stroke: "
|
|
4000
|
+
stroke: "var(--gradient-brand-soft-start)",
|
|
3960
4001
|
strokeWidth: "6",
|
|
3961
4002
|
fill: "none",
|
|
3962
4003
|
className: "transition-all duration-200",
|
|
3963
|
-
style: { filter: "blur(8px)" }
|
|
4004
|
+
style: { filter: "blur(8px)", opacity: 0.2 }
|
|
3964
4005
|
}
|
|
3965
4006
|
),
|
|
3966
4007
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -3992,7 +4033,8 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
|
|
|
3992
4033
|
delay: node.delay,
|
|
3993
4034
|
onDragStart: handleNodeDragStart,
|
|
3994
4035
|
isDragging: draggingNodeId === node.id,
|
|
3995
|
-
onClick: handleNodeClick
|
|
4036
|
+
onClick: handleNodeClick,
|
|
4037
|
+
isDarkMode
|
|
3996
4038
|
},
|
|
3997
4039
|
node.id
|
|
3998
4040
|
)) }),
|
|
@@ -4026,15 +4068,52 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
|
|
|
4026
4068
|
},
|
|
4027
4069
|
onTouchEnd: () => setIsDragging(false),
|
|
4028
4070
|
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
4029
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4030
|
-
|
|
4031
|
-
|
|
4032
|
-
|
|
4033
|
-
|
|
4034
|
-
|
|
4035
|
-
|
|
4036
|
-
|
|
4037
|
-
|
|
4071
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4072
|
+
"div",
|
|
4073
|
+
{
|
|
4074
|
+
className: "absolute inset-0 rounded-full blur-2xl bg-brand-primary",
|
|
4075
|
+
style: {
|
|
4076
|
+
opacity: 0.3,
|
|
4077
|
+
transform: "scale(1.5)"
|
|
4078
|
+
}
|
|
4079
|
+
}
|
|
4080
|
+
),
|
|
4081
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4082
|
+
"div",
|
|
4083
|
+
{
|
|
4084
|
+
className: "relative px-6 sm:px-10 py-3 sm:py-5 rounded-3xl shadow-2xl border-4 flex items-center gap-3 sm:gap-4 backdrop-blur-md bg-gradient-brand",
|
|
4085
|
+
style: {
|
|
4086
|
+
borderColor: "var(--brand-primary)",
|
|
4087
|
+
borderOpacity: 0.5,
|
|
4088
|
+
transform: isDragging ? "scale(1.1)" : "scale(1)",
|
|
4089
|
+
transition: "transform 0.3s ease"
|
|
4090
|
+
},
|
|
4091
|
+
children: [
|
|
4092
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4093
|
+
"div",
|
|
4094
|
+
{
|
|
4095
|
+
className: "p-2 sm:p-3 rounded-xl backdrop-blur-sm",
|
|
4096
|
+
style: { backgroundColor: "rgba(255, 255, 255, 0.25)" },
|
|
4097
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(Briefcase, { className: "w-5 h-5 sm:w-7 sm:h-7 text-inverse" })
|
|
4098
|
+
}
|
|
4099
|
+
),
|
|
4100
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center", children: [
|
|
4101
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-inverse text-body sm:text-subtitle", children: diagramName }),
|
|
4102
|
+
diagramDescription && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-inverse text-caption sm:text-small opacity-90", children: diagramDescription })
|
|
4103
|
+
] })
|
|
4104
|
+
]
|
|
4105
|
+
}
|
|
4106
|
+
),
|
|
4107
|
+
!isDragging && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4108
|
+
"div",
|
|
4109
|
+
{
|
|
4110
|
+
className: `absolute -bottom-8 left-1/2 transform -translate-x-1/2 text-caption whitespace-nowrap ${isDarkMode ? "text-brand-primary" : "text-brand-secondary"}`,
|
|
4111
|
+
style: {
|
|
4112
|
+
opacity: 0.6
|
|
4113
|
+
},
|
|
4114
|
+
children: safeT("diagram.dragToMove")
|
|
4115
|
+
}
|
|
4116
|
+
)
|
|
4038
4117
|
] })
|
|
4039
4118
|
}
|
|
4040
4119
|
),
|
|
@@ -4054,13 +4133,12 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
|
|
|
4054
4133
|
animation: fadeIn 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
|
4055
4134
|
opacity: 0;
|
|
4056
4135
|
}
|
|
4057
|
-
.animate-twinkle { animation: twinkle 5s ease-in-out infinite; }
|
|
4058
4136
|
` })
|
|
4059
4137
|
]
|
|
4060
4138
|
}
|
|
4061
4139
|
);
|
|
4062
4140
|
};
|
|
4063
|
-
const FaqItem = ({ faq, index: index2, isActive, onToggle,
|
|
4141
|
+
const FaqItem = ({ faq, index: index2, isActive, onToggle, t }) => {
|
|
4064
4142
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4065
4143
|
"div",
|
|
4066
4144
|
{
|
|
@@ -4069,79 +4147,69 @@ const FaqItem = ({ faq, index: index2, isActive, onToggle, isDarkMode, t }) => {
|
|
|
4069
4147
|
animationFillMode: "both"
|
|
4070
4148
|
},
|
|
4071
4149
|
className: "animate-slide-up",
|
|
4072
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4073
|
-
|
|
4074
|
-
|
|
4075
|
-
|
|
4076
|
-
|
|
4077
|
-
|
|
4078
|
-
|
|
4079
|
-
|
|
4080
|
-
|
|
4081
|
-
children: [
|
|
4082
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4083
|
-
"button",
|
|
4084
|
-
{
|
|
4085
|
-
onClick: onToggle,
|
|
4086
|
-
className: `
|
|
4087
|
-
w-full px-6 py-5 text-left flex items-start justify-between gap-4
|
|
4088
|
-
transition-all duration-300
|
|
4089
|
-
${isDarkMode ? "hover:bg-gray-700/30" : "hover:bg-gray-50/50"}
|
|
4090
|
-
rounded-xl
|
|
4091
|
-
group
|
|
4092
|
-
`,
|
|
4093
|
-
children: [
|
|
4094
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `
|
|
4095
|
-
text-lg font-semibold flex-1 transition-colors duration-300
|
|
4096
|
-
${isActive ? isDarkMode ? "text-blue-400" : "text-blue-600" : isDarkMode ? "text-white group-hover:text-blue-300" : "text-gray-900 group-hover:text-blue-600"}
|
|
4097
|
-
`, children: faq.question }),
|
|
4098
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `
|
|
4150
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", style: { padding: 0 }, children: [
|
|
4151
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4152
|
+
"button",
|
|
4153
|
+
{
|
|
4154
|
+
onClick: onToggle,
|
|
4155
|
+
className: "w-full px-6 py-5 text-left flex items-start justify-between gap-4 rounded-xl group",
|
|
4156
|
+
children: [
|
|
4157
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "card-title flex-1", children: faq.question }),
|
|
4158
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `
|
|
4099
4159
|
flex-shrink-0 w-10 h-10 rounded-full flex items-center justify-center
|
|
4100
4160
|
transition-all duration-500 transform
|
|
4101
|
-
${isActive ?
|
|
4161
|
+
${isActive ? "bg-gradient-to-br from-blue-500 to-purple-600 text-white shadow-lg shadow-blue-500/50 rotate-180 scale-110" : "bg-gray-700/50 text-gray-400 group-hover:bg-gray-600 group-hover:scale-110"}
|
|
4102
4162
|
`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: `w-5 h-5 transition-transform duration-500 ${isActive ? "rotate-180" : ""}` }) })
|
|
4103
|
-
|
|
4104
|
-
|
|
4105
|
-
|
|
4106
|
-
|
|
4163
|
+
]
|
|
4164
|
+
}
|
|
4165
|
+
),
|
|
4166
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4167
|
+
"div",
|
|
4168
|
+
{
|
|
4169
|
+
style: {
|
|
4170
|
+
maxHeight: isActive ? "500px" : "0",
|
|
4171
|
+
opacity: isActive ? "1" : "0",
|
|
4172
|
+
overflow: "hidden",
|
|
4173
|
+
transition: "all 500ms ease-in-out"
|
|
4174
|
+
},
|
|
4175
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4107
4176
|
"div",
|
|
4108
4177
|
{
|
|
4109
|
-
className:
|
|
4110
|
-
|
|
4111
|
-
|
|
4112
|
-
|
|
4113
|
-
|
|
4114
|
-
|
|
4115
|
-
|
|
4116
|
-
|
|
4117
|
-
|
|
4118
|
-
|
|
4119
|
-
|
|
4120
|
-
|
|
4178
|
+
className: "px-6 pb-6 pt-2",
|
|
4179
|
+
style: {
|
|
4180
|
+
transform: isActive ? "translateY(0)" : "translateY(-10px)",
|
|
4181
|
+
transition: "transform 500ms ease-in-out"
|
|
4182
|
+
},
|
|
4183
|
+
children: [
|
|
4184
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4185
|
+
"div",
|
|
4186
|
+
{
|
|
4187
|
+
className: "h-px w-full mb-4",
|
|
4188
|
+
style: {
|
|
4189
|
+
background: "linear-gradient(to right, transparent, var(--border-color), transparent)"
|
|
4190
|
+
}
|
|
4191
|
+
}
|
|
4192
|
+
),
|
|
4193
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-text leading-relaxed", children: faq.answer }),
|
|
4121
4194
|
faq.url && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4122
4195
|
"a",
|
|
4123
4196
|
{
|
|
4124
4197
|
href: faq.url,
|
|
4125
4198
|
target: "_blank",
|
|
4126
4199
|
rel: "noopener noreferrer",
|
|
4127
|
-
className:
|
|
4128
|
-
inline-flex items-center gap-2 mt-5 px-4 py-2 rounded-lg text-sm font-medium
|
|
4129
|
-
transition-all duration-300 transform hover:scale-105
|
|
4130
|
-
${isDarkMode ? "text-blue-400 hover:text-blue-300 bg-blue-500/10 hover:bg-blue-500/20" : "text-blue-600 hover:text-blue-700 bg-blue-50 hover:bg-blue-100"}
|
|
4131
|
-
group/link
|
|
4132
|
-
`,
|
|
4200
|
+
className: "card-link mt-4",
|
|
4133
4201
|
children: [
|
|
4134
4202
|
(t == null ? void 0 : t("faq.learn_more")) || "Learn more",
|
|
4135
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-4 h-4
|
|
4203
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
|
|
4136
4204
|
]
|
|
4137
4205
|
}
|
|
4138
4206
|
)
|
|
4139
|
-
]
|
|
4207
|
+
]
|
|
4140
4208
|
}
|
|
4141
4209
|
)
|
|
4142
|
-
|
|
4143
|
-
|
|
4144
|
-
)
|
|
4210
|
+
}
|
|
4211
|
+
)
|
|
4212
|
+
] })
|
|
4145
4213
|
}
|
|
4146
4214
|
);
|
|
4147
4215
|
};
|
|
@@ -4159,22 +4227,39 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
|
|
|
4159
4227
|
const sectionTitle = (section == null ? void 0 : section.title) || "...";
|
|
4160
4228
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(SectionWrapper, { isDarkMode, children: [
|
|
4161
4229
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-4xl mx-auto", children: [
|
|
4162
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center mb-6 animate-fade-in", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4163
|
-
|
|
4164
|
-
${isDarkMode ? "bg-gradient-to-br from-blue-500 to-purple-600 shadow-lg shadow-blue-500/20" : "bg-gradient-to-br from-blue-600 to-indigo-600 shadow-lg shadow-blue-200"}
|
|
4165
|
-
transform hover:scale-110 transition-all duration-300
|
|
4166
|
-
`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4167
|
-
"svg",
|
|
4230
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center mb-6 animate-fade-in", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4231
|
+
"div",
|
|
4168
4232
|
{
|
|
4169
|
-
className: "w-
|
|
4170
|
-
|
|
4171
|
-
|
|
4172
|
-
|
|
4233
|
+
className: "w-10 h-10 rounded-lg flex items-center justify-center",
|
|
4234
|
+
style: {
|
|
4235
|
+
background: "linear-gradient(to bottom right, var(--brand-primary), var(--brand-secondary))",
|
|
4236
|
+
boxShadow: "0 10px 15px -3px var(--card-shadow)",
|
|
4237
|
+
transition: "transform 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
4238
|
+
},
|
|
4239
|
+
onMouseEnter: (e) => e.currentTarget.style.transform = "scale(1.1)",
|
|
4240
|
+
onMouseLeave: (e) => e.currentTarget.style.transform = "scale(1)",
|
|
4241
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4242
|
+
"svg",
|
|
4243
|
+
{
|
|
4244
|
+
className: "w-6 h-6 text-white",
|
|
4245
|
+
fill: "currentColor",
|
|
4246
|
+
viewBox: "0 0 24 24",
|
|
4247
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z" })
|
|
4248
|
+
}
|
|
4249
|
+
)
|
|
4173
4250
|
}
|
|
4174
|
-
) })
|
|
4251
|
+
) }),
|
|
4175
4252
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-12 animate-fade-in", children: [
|
|
4176
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className:
|
|
4177
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4253
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-main mb-3", children: sectionTitle }),
|
|
4254
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4255
|
+
"div",
|
|
4256
|
+
{
|
|
4257
|
+
className: "h-1 w-20 mx-auto rounded-full",
|
|
4258
|
+
style: {
|
|
4259
|
+
background: "linear-gradient(to right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))"
|
|
4260
|
+
}
|
|
4261
|
+
}
|
|
4262
|
+
)
|
|
4178
4263
|
] }),
|
|
4179
4264
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-4", children: faqs.map((faq, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4180
4265
|
FaqItem,
|
|
@@ -4183,7 +4268,6 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
|
|
|
4183
4268
|
index: index2,
|
|
4184
4269
|
isActive: activeIndex === index2,
|
|
4185
4270
|
onToggle: () => toggleFaq(index2),
|
|
4186
|
-
isDarkMode,
|
|
4187
4271
|
t
|
|
4188
4272
|
},
|
|
4189
4273
|
faq.id || index2
|
|
@@ -4200,7 +4284,6 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
|
|
|
4200
4284
|
transform: translateY(0);
|
|
4201
4285
|
}
|
|
4202
4286
|
}
|
|
4203
|
-
|
|
4204
4287
|
@keyframes slide-up {
|
|
4205
4288
|
from {
|
|
4206
4289
|
opacity: 0;
|
|
@@ -4211,11 +4294,9 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
|
|
|
4211
4294
|
transform: translateY(0);
|
|
4212
4295
|
}
|
|
4213
4296
|
}
|
|
4214
|
-
|
|
4215
4297
|
.animate-fade-in {
|
|
4216
4298
|
animation: fade-in 0.8s ease-out;
|
|
4217
4299
|
}
|
|
4218
|
-
|
|
4219
4300
|
.animate-slide-up {
|
|
4220
4301
|
animation: slide-up 0.6s ease-out;
|
|
4221
4302
|
}
|
|
@@ -4256,141 +4337,147 @@ const PageHighlightSection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
|
4256
4337
|
return () => clearInterval(interval);
|
|
4257
4338
|
}, [highlightData.length]);
|
|
4258
4339
|
const gradientClasses = [
|
|
4259
|
-
"
|
|
4260
|
-
"from-purple-600 to-pink-600",
|
|
4261
|
-
"from-blue-500 to-purple-500",
|
|
4262
|
-
"from-purple-500 to-pink-500",
|
|
4263
|
-
"from-emerald-600 to-teal-600",
|
|
4264
|
-
"from-orange-500 to-red-500"
|
|
4340
|
+
"btn-primary"
|
|
4265
4341
|
];
|
|
4266
4342
|
const defaultImage = "https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=1200&h=800&fit=crop&q=80";
|
|
4267
4343
|
if (!highlightData.length) {
|
|
4268
4344
|
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: `py-20 ${isDarkMode ? "bg-slate-950" : "bg-white"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 text-center", children: [
|
|
4269
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: `text-lg font-semibold mb-2
|
|
4270
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
4345
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: `text-lg font-semibold mb-2 text-main`, children: t("highlight.noData.title") || "Chưa có dữ liệu" }),
|
|
4346
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted", children: t("highlight.noData.description") || "Hiện tại chưa có sản phẩm nào được thiết lập." })
|
|
4271
4347
|
] }) });
|
|
4272
4348
|
}
|
|
4273
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4274
|
-
|
|
4275
|
-
|
|
4276
|
-
|
|
4277
|
-
|
|
4278
|
-
|
|
4279
|
-
|
|
4280
|
-
|
|
4281
|
-
|
|
4282
|
-
|
|
4283
|
-
|
|
4284
|
-
|
|
4285
|
-
|
|
4286
|
-
|
|
4287
|
-
|
|
4288
|
-
|
|
4289
|
-
|
|
4290
|
-
|
|
4291
|
-
|
|
4292
|
-
|
|
4293
|
-
|
|
4294
|
-
|
|
4295
|
-
|
|
4296
|
-
|
|
4297
|
-
|
|
4298
|
-
|
|
4299
|
-
|
|
4300
|
-
|
|
4301
|
-
|
|
4302
|
-
|
|
4303
|
-
|
|
4304
|
-
|
|
4305
|
-
|
|
4306
|
-
|
|
4307
|
-
|
|
4308
|
-
|
|
4309
|
-
|
|
4310
|
-
|
|
4311
|
-
|
|
4312
|
-
|
|
4313
|
-
|
|
4314
|
-
|
|
4315
|
-
|
|
4316
|
-
|
|
4317
|
-
|
|
4318
|
-
|
|
4319
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4320
|
-
"
|
|
4321
|
-
|
|
4322
|
-
|
|
4323
|
-
|
|
4324
|
-
|
|
4325
|
-
|
|
4326
|
-
|
|
4327
|
-
|
|
4328
|
-
|
|
4329
|
-
|
|
4330
|
-
] }, idx)) }),
|
|
4331
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4332
|
-
"a",
|
|
4333
|
-
{
|
|
4334
|
-
href: item.slug,
|
|
4335
|
-
rel: "noopener noreferrer",
|
|
4336
|
-
className: `group relative px-6 py-3 rounded-xl font-bold text-sm transition-all duration-300 transform hover:scale-105 hover:shadow-2xl overflow-hidden bg-gradient-to-r ${color} text-white shadow-xl w-full text-center`,
|
|
4337
|
-
onClick: (e) => {
|
|
4338
|
-
if (!e.ctrlKey && !e.metaKey && e.button !== 1) {
|
|
4339
|
-
e.preventDefault();
|
|
4340
|
-
window.location.href = item.slug;
|
|
4349
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4350
|
+
"section",
|
|
4351
|
+
{
|
|
4352
|
+
className: "relative overflow-hidden",
|
|
4353
|
+
style: {
|
|
4354
|
+
background: isDarkMode ? "linear-gradient(to bottom right, var(--color-gray-950), var(--color-gray-900), var(--color-gray-950))" : "linear-gradient(to bottom right, var(--bg-primary), #eff6ff50, #f3e8ff50)"
|
|
4355
|
+
},
|
|
4356
|
+
children: [
|
|
4357
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute inset-0 overflow-hidden pointer-events-none", children: [
|
|
4358
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4359
|
+
"div",
|
|
4360
|
+
{
|
|
4361
|
+
className: "absolute top-20 right-10 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob",
|
|
4362
|
+
style: {
|
|
4363
|
+
backgroundColor: isDarkMode ? "var(--gradient-brand-soft-start)" : "var(--gradient-brand-soft-start)"
|
|
4364
|
+
}
|
|
4365
|
+
}
|
|
4366
|
+
),
|
|
4367
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4368
|
+
"div",
|
|
4369
|
+
{
|
|
4370
|
+
className: "absolute top-40 -left-20 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob animation-delay-2000",
|
|
4371
|
+
style: {
|
|
4372
|
+
backgroundColor: isDarkMode ? "var(--gradient-accent-soft-start)" : "var(--gradient-accent-soft-start)",
|
|
4373
|
+
animationDelay: "2s"
|
|
4374
|
+
}
|
|
4375
|
+
}
|
|
4376
|
+
),
|
|
4377
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4378
|
+
"div",
|
|
4379
|
+
{
|
|
4380
|
+
className: "absolute -bottom-20 right-40 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob animation-delay-4000",
|
|
4381
|
+
style: {
|
|
4382
|
+
backgroundColor: isDarkMode ? "var(--gradient-accent-soft-end)" : "var(--gradient-accent-soft-end)",
|
|
4383
|
+
animationDelay: "4s"
|
|
4384
|
+
}
|
|
4385
|
+
}
|
|
4386
|
+
)
|
|
4387
|
+
] }),
|
|
4388
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative w-full px-4 sm:px-6 lg:px-8 py-16 sm:py-24", children: [
|
|
4389
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative w-full", children: highlightData.map((item, index2) => {
|
|
4390
|
+
const color = gradientClasses[index2 % gradientClasses.length];
|
|
4391
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4392
|
+
"div",
|
|
4393
|
+
{
|
|
4394
|
+
className: `transition-opacity duration-700 ${activeTab === index2 ? "opacity-100" : "opacity-0 absolute inset-0 pointer-events-none"}`,
|
|
4395
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `${isDarkMode ? "bg-gradient-to-br from-slate-900/30 to-slate-950/30 border-slate-700/20" : "bg-white/40 border-white/30"} backdrop-blur-md rounded-3xl shadow-lg overflow-hidden border transition-colors duration-500`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-0 min-h-[420px] lg:h-auto", children: [
|
|
4396
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative h-[280px] lg:h-full overflow-hidden group", children: [
|
|
4397
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4398
|
+
"img",
|
|
4399
|
+
{
|
|
4400
|
+
src: item.image || defaultImage,
|
|
4401
|
+
alt: item.title,
|
|
4402
|
+
className: "w-full h-full object-cover transition-transform duration-700 group-hover:scale-110",
|
|
4403
|
+
onError: (e) => {
|
|
4404
|
+
e.target.src = defaultImage;
|
|
4405
|
+
}
|
|
4341
4406
|
}
|
|
4342
|
-
|
|
4343
|
-
|
|
4344
|
-
|
|
4345
|
-
|
|
4346
|
-
|
|
4347
|
-
|
|
4348
|
-
|
|
4349
|
-
|
|
4350
|
-
|
|
4351
|
-
|
|
4352
|
-
|
|
4353
|
-
|
|
4354
|
-
|
|
4355
|
-
|
|
4356
|
-
|
|
4407
|
+
),
|
|
4408
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 bg-gradient-to-br ${color} opacity-20` }),
|
|
4409
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent" })
|
|
4410
|
+
] }),
|
|
4411
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-5 lg:p-8 flex flex-col justify-center", children: [
|
|
4412
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-3xl lg:text-4xl font-black mb-3 text-gradient-brand", children: item.title }),
|
|
4413
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mb-6 text-muted", children: item.description }),
|
|
4414
|
+
item.features && item.features.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-2 mb-6", children: item.features.map((feature, idx) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start gap-2 group", children: [
|
|
4415
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-0.5 w-4 h-4 rounded-full bg-gradient-accent flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-2.5 h-2.5 text-inverse", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 3, d: "M5 13l4 4L19 7" }) }) }),
|
|
4416
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-muted group-hover:text-main font-medium text-xs transition-colors", children: feature })
|
|
4417
|
+
] }, idx)) }),
|
|
4418
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4419
|
+
"a",
|
|
4420
|
+
{
|
|
4421
|
+
href: item.slug,
|
|
4422
|
+
rel: "noopener noreferrer",
|
|
4423
|
+
className: `group relative px-6 py-3 rounded-xl font-bold text-sm transition-all duration-300 transform hover:scale-105 hover:shadow-2xl overflow-hidden bg-gradient-to-r ${color} text-white shadow-xl w-full text-center`,
|
|
4424
|
+
onClick: (e) => {
|
|
4425
|
+
if (!e.ctrlKey && !e.metaKey && e.button !== 1) {
|
|
4426
|
+
e.preventDefault();
|
|
4427
|
+
window.location.href = item.slug;
|
|
4428
|
+
}
|
|
4429
|
+
},
|
|
4430
|
+
children: [
|
|
4431
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "relative z-10 flex items-center justify-center gap-2", children: [
|
|
4432
|
+
t("highlight.cta") || "Khám phá",
|
|
4433
|
+
" ",
|
|
4434
|
+
item.title,
|
|
4435
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4436
|
+
"svg",
|
|
4357
4437
|
{
|
|
4358
|
-
|
|
4359
|
-
|
|
4360
|
-
|
|
4361
|
-
|
|
4438
|
+
className: "w-5 h-5 group-hover:translate-x-1 transition-transform",
|
|
4439
|
+
fill: "none",
|
|
4440
|
+
viewBox: "0 0 24 24",
|
|
4441
|
+
stroke: "currentColor",
|
|
4442
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4443
|
+
"path",
|
|
4444
|
+
{
|
|
4445
|
+
strokeLinecap: "round",
|
|
4446
|
+
strokeLinejoin: "round",
|
|
4447
|
+
strokeWidth: 2,
|
|
4448
|
+
d: "M17 8l4 4m0 0l-4 4m4-4H3"
|
|
4449
|
+
}
|
|
4450
|
+
)
|
|
4362
4451
|
}
|
|
4363
4452
|
)
|
|
4364
|
-
}
|
|
4365
|
-
|
|
4366
|
-
|
|
4367
|
-
|
|
4368
|
-
|
|
4369
|
-
}
|
|
4370
|
-
)
|
|
4371
|
-
|
|
4372
|
-
|
|
4373
|
-
|
|
4374
|
-
|
|
4375
|
-
|
|
4376
|
-
|
|
4377
|
-
|
|
4378
|
-
|
|
4379
|
-
|
|
4380
|
-
|
|
4381
|
-
|
|
4382
|
-
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
4389
|
-
|
|
4390
|
-
)
|
|
4391
|
-
|
|
4392
|
-
] }),
|
|
4393
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("style", { jsx: true, children: `
|
|
4453
|
+
] }),
|
|
4454
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-white/20 transform scale-x-0 group-hover:scale-x-100 transition-transform origin-left" })
|
|
4455
|
+
]
|
|
4456
|
+
}
|
|
4457
|
+
)
|
|
4458
|
+
] })
|
|
4459
|
+
] }) })
|
|
4460
|
+
},
|
|
4461
|
+
index2
|
|
4462
|
+
);
|
|
4463
|
+
}) }),
|
|
4464
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-wrap justify-center gap-4 mt-12", children: highlightData.map((item, index2) => {
|
|
4465
|
+
const color = gradientClasses[index2 % gradientClasses.length];
|
|
4466
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4467
|
+
"button",
|
|
4468
|
+
{
|
|
4469
|
+
onClick: () => setActiveTab(index2),
|
|
4470
|
+
className: `group relative px-8 py-4 rounded-xl font-bold text-lg transition-all duration-300 transform hover:scale-105 overflow-hidden ${activeTab === index2 ? `bg-gradient-to-r ${color} text-white shadow-xl` : isDarkMode ? "bg-gray-800/50 text-gray-300 hover:shadow-xl shadow-lg border border-gray-700/50 backdrop-blur-sm" : "bg-white text-gray-700 hover:shadow-xl shadow-lg"}`,
|
|
4471
|
+
children: [
|
|
4472
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "relative z-10", children: item.title }),
|
|
4473
|
+
activeTab !== index2 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 bg-gradient-to-r ${color} opacity-0 group-hover:opacity-100 transition-opacity duration-300` })
|
|
4474
|
+
]
|
|
4475
|
+
},
|
|
4476
|
+
index2
|
|
4477
|
+
);
|
|
4478
|
+
}) })
|
|
4479
|
+
] }),
|
|
4480
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("style", { jsx: true, children: `
|
|
4394
4481
|
@keyframes blob {
|
|
4395
4482
|
0%, 100% {
|
|
4396
4483
|
transform: translate(0px, 0px) scale(1);
|
|
@@ -4427,7 +4514,9 @@ const PageHighlightSection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
|
4427
4514
|
background-size: 50px 50px;
|
|
4428
4515
|
}
|
|
4429
4516
|
` })
|
|
4430
|
-
|
|
4517
|
+
]
|
|
4518
|
+
}
|
|
4519
|
+
);
|
|
4431
4520
|
};
|
|
4432
4521
|
const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl = "" }) => {
|
|
4433
4522
|
var _a;
|
|
@@ -4452,23 +4541,9 @@ const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4452
4541
|
maxWidth: "1400px",
|
|
4453
4542
|
margin: "0 auto"
|
|
4454
4543
|
}, children: [
|
|
4455
|
-
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
|
|
4456
|
-
|
|
4457
|
-
|
|
4458
|
-
}, children: [
|
|
4459
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { style: {
|
|
4460
|
-
fontSize: "36px",
|
|
4461
|
-
fontWeight: "700",
|
|
4462
|
-
marginBottom: "16px",
|
|
4463
|
-
color: isDarkMode ? "#f9fafb" : "#4b5563"
|
|
4464
|
-
}, children: sectionTitle }),
|
|
4465
|
-
sectionDescription && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: {
|
|
4466
|
-
fontSize: "16px",
|
|
4467
|
-
lineHeight: "1.6",
|
|
4468
|
-
color: isDarkMode ? "#d1d5db" : "#6b7280",
|
|
4469
|
-
maxWidth: "900px",
|
|
4470
|
-
margin: "0 auto"
|
|
4471
|
-
}, children: sectionDescription })
|
|
4544
|
+
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-12", children: [
|
|
4545
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-main mb-4", children: sectionTitle }),
|
|
4546
|
+
sectionDescription && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-muted max-w-3xl mx-auto", children: sectionDescription })
|
|
4472
4547
|
] }),
|
|
4473
4548
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4474
4549
|
display: "grid",
|
|
@@ -4481,30 +4556,13 @@ const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4481
4556
|
"a",
|
|
4482
4557
|
{
|
|
4483
4558
|
href: page.slug,
|
|
4559
|
+
className: "card",
|
|
4484
4560
|
style: {
|
|
4485
|
-
backgroundColor: isDarkMode ? "#1f2937" : "#ffffff",
|
|
4486
|
-
borderRadius: "12px",
|
|
4487
|
-
padding: "32px 20px",
|
|
4488
|
-
cursor: "pointer",
|
|
4489
|
-
transition: "all 0.3s",
|
|
4490
|
-
border: `1px solid ${isDarkMode ? "#374151" : "#e5e7eb"}`,
|
|
4491
|
-
boxShadow: isDarkMode ? "0 4px 6px -1px rgba(0, 0, 0, 0.3)" : "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
|
|
4492
|
-
display: "flex",
|
|
4493
|
-
flexDirection: "column",
|
|
4494
4561
|
alignItems: "center",
|
|
4495
4562
|
textAlign: "center",
|
|
4496
4563
|
gap: "16px",
|
|
4497
|
-
textDecoration: "none"
|
|
4498
|
-
|
|
4499
|
-
onMouseEnter: (e) => {
|
|
4500
|
-
e.currentTarget.style.transform = "translateY(-8px)";
|
|
4501
|
-
e.currentTarget.style.boxShadow = isDarkMode ? "0 20px 25px -5px rgba(0, 0, 0, 0.5)" : "0 20px 25px -5px rgba(0, 0, 0, 0.15)";
|
|
4502
|
-
e.currentTarget.style.borderColor = "#361985ff";
|
|
4503
|
-
},
|
|
4504
|
-
onMouseLeave: (e) => {
|
|
4505
|
-
e.currentTarget.style.transform = "translateY(0)";
|
|
4506
|
-
e.currentTarget.style.boxShadow = isDarkMode ? "0 4px 6px -1px rgba(0, 0, 0, 0.3)" : "0 4px 6px -1px rgba(0, 0, 0, 0.1)";
|
|
4507
|
-
e.currentTarget.style.borderColor = isDarkMode ? "#374151" : "#e5e7eb";
|
|
4564
|
+
textDecoration: "none",
|
|
4565
|
+
padding: "32px 20px"
|
|
4508
4566
|
},
|
|
4509
4567
|
children: [
|
|
4510
4568
|
iconUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
@@ -4525,13 +4583,7 @@ const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4525
4583
|
}
|
|
4526
4584
|
}
|
|
4527
4585
|
) }),
|
|
4528
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { style: {
|
|
4529
|
-
fontSize: "16px",
|
|
4530
|
-
fontWeight: "600",
|
|
4531
|
-
color: isDarkMode ? "#f9fafb" : "#4b5563",
|
|
4532
|
-
margin: 0,
|
|
4533
|
-
lineHeight: "1.4"
|
|
4534
|
-
}, children: page.title })
|
|
4586
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-body", style: { margin: 0 }, children: page.title })
|
|
4535
4587
|
]
|
|
4536
4588
|
},
|
|
4537
4589
|
page.id
|
|
@@ -4595,44 +4647,25 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4595
4647
|
maxWidth: "1280px",
|
|
4596
4648
|
margin: "0 auto"
|
|
4597
4649
|
}, children: [
|
|
4598
|
-
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", {
|
|
4599
|
-
fontSize: "28px",
|
|
4600
|
-
fontWeight: "700",
|
|
4601
|
-
marginBottom: "40px",
|
|
4602
|
-
color: isDarkMode ? "#f9fafb" : "#1e40af",
|
|
4603
|
-
textTransform: "uppercase",
|
|
4604
|
-
letterSpacing: "0.5px"
|
|
4605
|
-
}, children: sectionTitle }),
|
|
4650
|
+
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-main mb-10 uppercase tracking-wide", children: sectionTitle }),
|
|
4606
4651
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4607
4652
|
display: "flex",
|
|
4608
4653
|
flexDirection: "column",
|
|
4609
4654
|
gap: "24px"
|
|
4610
4655
|
}, children: visiblePages.map((page) => {
|
|
4611
|
-
var _a2, _b;
|
|
4656
|
+
var _a2, _b, _c;
|
|
4612
4657
|
const mainImage = ((_b = (_a2 = page.pageImages) == null ? void 0 : _a2.find((img) => img.isMain)) == null ? void 0 : _b.url) || page.icon;
|
|
4613
4658
|
const imageUrl = getImageUrl(mainImage);
|
|
4614
4659
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4615
4660
|
"a",
|
|
4616
4661
|
{
|
|
4617
4662
|
href: page.slug,
|
|
4663
|
+
className: "card",
|
|
4618
4664
|
style: {
|
|
4619
|
-
|
|
4665
|
+
flexDirection: "row",
|
|
4620
4666
|
gap: "20px",
|
|
4621
|
-
backgroundColor: isDarkMode ? "#1f2937" : "#ffffff",
|
|
4622
|
-
borderRadius: "8px",
|
|
4623
|
-
overflow: "hidden",
|
|
4624
|
-
cursor: "pointer",
|
|
4625
|
-
transition: "all 0.2s",
|
|
4626
|
-
border: `1px solid ${isDarkMode ? "#374151" : "#e5e7eb"}`,
|
|
4627
|
-
padding: "16px",
|
|
4628
4667
|
textDecoration: "none"
|
|
4629
4668
|
},
|
|
4630
|
-
onMouseEnter: (e) => {
|
|
4631
|
-
e.currentTarget.style.backgroundColor = isDarkMode ? "#374151" : "#f9fafb";
|
|
4632
|
-
},
|
|
4633
|
-
onMouseLeave: (e) => {
|
|
4634
|
-
e.currentTarget.style.backgroundColor = isDarkMode ? "#1f2937" : "#ffffff";
|
|
4635
|
-
},
|
|
4636
4669
|
children: [
|
|
4637
4670
|
imageUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4638
4671
|
width: "200px",
|
|
@@ -4652,33 +4685,10 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4652
4685
|
}
|
|
4653
4686
|
}
|
|
4654
4687
|
) }),
|
|
4655
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
|
|
4656
|
-
|
|
4657
|
-
|
|
4658
|
-
|
|
4659
|
-
justifyContent: "center"
|
|
4660
|
-
}, children: [
|
|
4661
|
-
page.tagKeys && page.tagKeys.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4662
|
-
fontSize: "12px",
|
|
4663
|
-
fontWeight: "600",
|
|
4664
|
-
color: isDarkMode ? "#60a5fa" : "#2563eb",
|
|
4665
|
-
marginBottom: "8px",
|
|
4666
|
-
textTransform: "uppercase",
|
|
4667
|
-
letterSpacing: "0.5px"
|
|
4668
|
-
}, children: page.tagKeys[0].key }),
|
|
4669
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { style: {
|
|
4670
|
-
fontSize: "18px",
|
|
4671
|
-
fontWeight: "700",
|
|
4672
|
-
marginBottom: "8px",
|
|
4673
|
-
color: isDarkMode ? "#f9fafb" : "#1f2937",
|
|
4674
|
-
lineHeight: "1.4"
|
|
4675
|
-
}, children: page.title }),
|
|
4676
|
-
page.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: {
|
|
4677
|
-
fontSize: "14px",
|
|
4678
|
-
lineHeight: "1.6",
|
|
4679
|
-
color: isDarkMode ? "#d1d5db" : "#6b7280",
|
|
4680
|
-
margin: 0
|
|
4681
|
-
}, children: page.description })
|
|
4688
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col justify-center flex-1", children: [
|
|
4689
|
+
((_c = page.tagKeys) == null ? void 0 : _c.length) > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-link ", children: page.tagKeys[0].key }),
|
|
4690
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title mb-2 leading-snug", children: page.title }),
|
|
4691
|
+
page.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text m-0", children: page.description })
|
|
4682
4692
|
] }),
|
|
4683
4693
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4684
4694
|
display: "flex",
|
|
@@ -4688,10 +4698,7 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4688
4698
|
ChevronRight,
|
|
4689
4699
|
{
|
|
4690
4700
|
size: 20,
|
|
4691
|
-
|
|
4692
|
-
color: isDarkMode ? "#9ca3af" : "#d1d5db",
|
|
4693
|
-
transition: "color 0.2s"
|
|
4694
|
-
}
|
|
4701
|
+
className: "card-text"
|
|
4695
4702
|
}
|
|
4696
4703
|
) })
|
|
4697
4704
|
]
|
|
@@ -4703,6 +4710,7 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4703
4710
|
"button",
|
|
4704
4711
|
{
|
|
4705
4712
|
onClick: handleLoadMore,
|
|
4713
|
+
className: "btn-primary",
|
|
4706
4714
|
style: {
|
|
4707
4715
|
display: "inline-flex",
|
|
4708
4716
|
alignItems: "center",
|
|
@@ -4711,20 +4719,9 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4711
4719
|
fontSize: "16px",
|
|
4712
4720
|
fontWeight: "600",
|
|
4713
4721
|
color: "#fff",
|
|
4714
|
-
backgroundColor: "#361985ff",
|
|
4715
4722
|
border: "none",
|
|
4716
4723
|
borderRadius: "9999px",
|
|
4717
|
-
cursor: "pointer"
|
|
4718
|
-
transition: "all 0.3s",
|
|
4719
|
-
boxShadow: "0 4px 6px -1px rgba(37, 99, 235, 0.3)"
|
|
4720
|
-
},
|
|
4721
|
-
onMouseEnter: (e) => {
|
|
4722
|
-
e.currentTarget.style.backgroundColor = "#361985ff";
|
|
4723
|
-
e.currentTarget.style.transform = "translateY(-2px)";
|
|
4724
|
-
},
|
|
4725
|
-
onMouseLeave: (e) => {
|
|
4726
|
-
e.currentTarget.style.backgroundColor = "#361985ff";
|
|
4727
|
-
e.currentTarget.style.transform = "translateY(0)";
|
|
4724
|
+
cursor: "pointer"
|
|
4728
4725
|
},
|
|
4729
4726
|
children: [
|
|
4730
4727
|
t("pageChildrenSelect.moreInsights"),
|
|
@@ -4756,12 +4753,7 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4756
4753
|
maxWidth: "1400px",
|
|
4757
4754
|
margin: "0 auto"
|
|
4758
4755
|
}, children: [
|
|
4759
|
-
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", {
|
|
4760
|
-
fontSize: "36px",
|
|
4761
|
-
fontWeight: "700",
|
|
4762
|
-
marginBottom: "50px",
|
|
4763
|
-
color: isDarkMode ? "#f1f5f9" : "#1e293b"
|
|
4764
|
-
}, children: sectionTitle }),
|
|
4756
|
+
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title mb-12 text-main", children: sectionTitle }),
|
|
4765
4757
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4766
4758
|
display: "grid",
|
|
4767
4759
|
gridTemplateColumns: "repeat(auto-fit, minmax(350px, 1fr))",
|
|
@@ -4775,24 +4767,12 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4775
4767
|
"a",
|
|
4776
4768
|
{
|
|
4777
4769
|
href: page.slug,
|
|
4770
|
+
className: "card",
|
|
4778
4771
|
style: {
|
|
4779
|
-
backgroundColor: isDarkMode ? "#1e293b" : "#ffffff",
|
|
4780
|
-
borderRadius: "16px",
|
|
4781
|
-
overflow: "hidden",
|
|
4782
|
-
cursor: "pointer",
|
|
4783
|
-
transition: "all 0.3s",
|
|
4784
|
-
boxShadow: isDarkMode ? "0 4px 6px -1px rgba(0, 0, 0, 0.5)" : "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
|
|
4785
|
-
border: `1px solid ${isDarkMode ? "#334155" : "#e2e8f0"}`,
|
|
4786
4772
|
textDecoration: "none",
|
|
4787
|
-
display: "block"
|
|
4788
|
-
|
|
4789
|
-
|
|
4790
|
-
e.currentTarget.style.transform = "translateY(-8px)";
|
|
4791
|
-
e.currentTarget.style.boxShadow = isDarkMode ? "0 20px 25px -5px rgba(0, 0, 0, 0.6)" : "0 20px 25px -5px rgba(0, 0, 0, 0.15)";
|
|
4792
|
-
},
|
|
4793
|
-
onMouseLeave: (e) => {
|
|
4794
|
-
e.currentTarget.style.transform = "translateY(0)";
|
|
4795
|
-
e.currentTarget.style.boxShadow = isDarkMode ? "0 4px 6px -1px rgba(0, 0, 0, 0.5)" : "0 4px 6px -1px rgba(0, 0, 0, 0.1)";
|
|
4773
|
+
display: "block",
|
|
4774
|
+
padding: "0",
|
|
4775
|
+
overflow: "hidden"
|
|
4796
4776
|
},
|
|
4797
4777
|
children: [
|
|
4798
4778
|
imageUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
@@ -4819,26 +4799,13 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4819
4799
|
}
|
|
4820
4800
|
}
|
|
4821
4801
|
) }),
|
|
4822
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
|
|
4823
|
-
|
|
4824
|
-
|
|
4825
|
-
|
|
4826
|
-
fontSize: "20px",
|
|
4827
|
-
fontWeight: "700",
|
|
4828
|
-
marginBottom: "12px",
|
|
4829
|
-
color: isDarkMode ? "#f1f5f9" : "#1e293b",
|
|
4830
|
-
lineHeight: "1.4",
|
|
4831
|
-
minHeight: "56px"
|
|
4802
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { padding: "1.5rem" }, children: [
|
|
4803
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-subtitle", style: {
|
|
4804
|
+
minHeight: "56px",
|
|
4805
|
+
marginBottom: "0.75rem"
|
|
4832
4806
|
}, children: page.title }),
|
|
4833
|
-
page.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: {
|
|
4834
|
-
|
|
4835
|
-
lineHeight: "1.6",
|
|
4836
|
-
color: isDarkMode ? "#cbd5e1" : "#64748b",
|
|
4837
|
-
marginBottom: "16px",
|
|
4838
|
-
display: "-webkit-box",
|
|
4839
|
-
WebkitLineClamp: 2,
|
|
4840
|
-
WebkitBoxOrient: "vertical",
|
|
4841
|
-
overflow: "hidden"
|
|
4807
|
+
page.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text line-clamp-2", style: {
|
|
4808
|
+
marginBottom: "1rem"
|
|
4842
4809
|
}, children: page.description })
|
|
4843
4810
|
] })
|
|
4844
4811
|
]
|
|
@@ -4853,6 +4820,7 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4853
4820
|
"button",
|
|
4854
4821
|
{
|
|
4855
4822
|
onClick: handleLoadMore,
|
|
4823
|
+
className: "btn-primary",
|
|
4856
4824
|
style: {
|
|
4857
4825
|
display: "inline-flex",
|
|
4858
4826
|
alignItems: "center",
|
|
@@ -4861,22 +4829,9 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4861
4829
|
fontSize: "16px",
|
|
4862
4830
|
fontWeight: "600",
|
|
4863
4831
|
color: "#ffffff",
|
|
4864
|
-
backgroundColor: "#361985ff",
|
|
4865
4832
|
border: "none",
|
|
4866
4833
|
borderRadius: "50px",
|
|
4867
|
-
cursor: "pointer"
|
|
4868
|
-
transition: "all 0.3s",
|
|
4869
|
-
boxShadow: "0 4px 6px -1px rgba(239, 68, 68, 0.3)"
|
|
4870
|
-
},
|
|
4871
|
-
onMouseEnter: (e) => {
|
|
4872
|
-
e.currentTarget.style.backgroundColor = "#361985ff";
|
|
4873
|
-
e.currentTarget.style.transform = "translateY(-2px)";
|
|
4874
|
-
e.currentTarget.style.boxShadow = "0 10px 15px -3px rgba(239, 68, 68, 0.4)";
|
|
4875
|
-
},
|
|
4876
|
-
onMouseLeave: (e) => {
|
|
4877
|
-
e.currentTarget.style.backgroundColor = "#361985ff";
|
|
4878
|
-
e.currentTarget.style.transform = "translateY(0)";
|
|
4879
|
-
e.currentTarget.style.boxShadow = "0 4px 6px -1px rgba(239, 68, 68, 0.3)";
|
|
4834
|
+
cursor: "pointer"
|
|
4880
4835
|
},
|
|
4881
4836
|
children: [
|
|
4882
4837
|
t("pageChildrenSelect.moreInsights"),
|