nvis-fe-cms-libs 1.1.42 → 2.0.1
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 +1381 -1480
- package/dist/nvis-fe-cms-libs.es.js.map +1 -1
- package/dist/nvis-fe-cms-libs.umd.js +1381 -1480
- 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,41 +391,28 @@ const CompanyValues = ({ companyData, t, isDarkMode }) => {
|
|
|
392
391
|
const items = [
|
|
393
392
|
{
|
|
394
393
|
icon: "💡",
|
|
395
|
-
gradient: "bg-gradient-blue-soft",
|
|
396
|
-
textGradient: "text-gradient-blue-soft",
|
|
397
|
-
iconBg: isDarkMode ? "bg-blue-900/40" : "bg-blue-100",
|
|
398
|
-
iconColor: isDarkMode ? "text-blue-300" : "text-blue-600",
|
|
399
394
|
title: t("about.companyValues.vision") || "Tầm nhìn",
|
|
400
|
-
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"
|
|
401
397
|
},
|
|
402
398
|
{
|
|
403
399
|
icon: "🚀",
|
|
404
|
-
gradient: "bg-gradient-emerald-teal",
|
|
405
|
-
textGradient: "text-gradient-emerald-teal",
|
|
406
|
-
iconBg: isDarkMode ? "bg-emerald-900/40" : "bg-emerald-100",
|
|
407
|
-
iconColor: isDarkMode ? "text-emerald-300" : "text-emerald-600",
|
|
408
400
|
title: t("about.companyValues.mission") || "Sứ mệnh",
|
|
409
|
-
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"
|
|
410
403
|
},
|
|
411
404
|
{
|
|
412
405
|
icon: "💎",
|
|
413
|
-
gradient: "bg-gradient-purple-soft",
|
|
414
|
-
textGradient: "text-gradient-purple-soft",
|
|
415
|
-
iconBg: isDarkMode ? "bg-purple-900/40" : "bg-purple-100",
|
|
416
|
-
iconColor: isDarkMode ? "text-purple-300" : "text-purple-600",
|
|
417
406
|
title: t("about.companyValues.coreValues") || "Giá trị cốt lõi",
|
|
418
|
-
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"
|
|
419
409
|
}
|
|
420
410
|
];
|
|
421
|
-
const validItems = items.filter((item) => {
|
|
422
|
-
const originalText = item === items[0] ? safeCompanyData.vision : item === items[1] ? safeCompanyData.mission : safeCompanyData.coreValues;
|
|
423
|
-
return originalText || true;
|
|
424
|
-
});
|
|
425
411
|
const refs = useRef([]);
|
|
426
412
|
const [visible, setVisible] = useState([]);
|
|
427
413
|
useEffect(() => {
|
|
428
|
-
setVisible(new Array(
|
|
429
|
-
if (
|
|
414
|
+
setVisible(new Array(items.length).fill(false));
|
|
415
|
+
if (items.length === 0) return;
|
|
430
416
|
const observer = new IntersectionObserver(
|
|
431
417
|
(entries) => {
|
|
432
418
|
entries.forEach((entry) => {
|
|
@@ -446,152 +432,43 @@ const CompanyValues = ({ companyData, t, isDarkMode }) => {
|
|
|
446
432
|
{ threshold: 0.2 }
|
|
447
433
|
);
|
|
448
434
|
refs.current.forEach((el) => el && observer.observe(el));
|
|
449
|
-
return () =>
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
"
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
style: { color: isDarkMode ? "var(--text-tertiary)" : "var(--text-tertiary)" },
|
|
475
|
-
fill: "none",
|
|
476
|
-
stroke: "currentColor",
|
|
477
|
-
viewBox: "0 0 24 24",
|
|
478
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" })
|
|
479
|
-
}
|
|
480
|
-
)
|
|
481
|
-
}
|
|
482
|
-
),
|
|
483
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
484
|
-
"h3",
|
|
485
|
-
{
|
|
486
|
-
className: "text-lg font-semibold mb-2",
|
|
487
|
-
style: { color: isDarkMode ? "var(--text-primary)" : "var(--text-primary)" },
|
|
488
|
-
children: "Thông tin công ty"
|
|
489
|
-
}
|
|
490
|
-
),
|
|
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." })
|
|
442
|
+
] });
|
|
443
|
+
}
|
|
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 }),
|
|
491
460
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
492
461
|
"p",
|
|
493
462
|
{
|
|
494
|
-
className:
|
|
495
|
-
|
|
496
|
-
children: "Tầm nhìn, sứ mệnh và giá trị cốt lõi sẽ được cập nhật sớm."
|
|
463
|
+
className: `card-text leading-relaxed ${item.text.includes("sẽ được cập nhật") ? "italic opacity-75" : ""}`,
|
|
464
|
+
children: item.text
|
|
497
465
|
}
|
|
498
466
|
)
|
|
499
|
-
]
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
try {
|
|
505
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
506
|
-
"div",
|
|
507
|
-
{
|
|
508
|
-
ref: (el) => refs.current[index2] = el,
|
|
509
|
-
className: `
|
|
510
|
-
flex items-start space-x-4 rounded-2xl p-6
|
|
511
|
-
transform transition-all duration-700 ease-out
|
|
512
|
-
border backdrop-blur-sm
|
|
513
|
-
${visible[index2] ? "opacity-100 scale-100" : "opacity-0 scale-75"}
|
|
514
|
-
`,
|
|
515
|
-
style: __spreadValues({
|
|
516
|
-
transitionDelay: `${index2 * 200}ms`,
|
|
517
|
-
borderColor: isDarkMode ? "var(--border-primary)" : "var(--border-primary)",
|
|
518
|
-
backgroundColor: isDarkMode ? "var(--bg-secondary)" : "transparent"
|
|
519
|
-
}, isDarkMode && {
|
|
520
|
-
backgroundImage: `linear-gradient(to bottom right,
|
|
521
|
-
${index2 === 0 ? "var(--gradient-blue-soft-start)" : index2 === 1 ? "var(--gradient-emerald-start)" : "var(--gradient-purple-soft-start)"}15,
|
|
522
|
-
${index2 === 0 ? "var(--gradient-blue-soft-end)" : index2 === 1 ? "var(--gradient-emerald-end)" : "var(--gradient-purple-soft-end)"}10)`
|
|
523
|
-
}),
|
|
524
|
-
children: [
|
|
525
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
526
|
-
"div",
|
|
527
|
-
{
|
|
528
|
-
className: `w-10 h-10 rounded-lg flex items-center justify-center flex-shrink-0 ${item.iconBg} ${item.iconColor}`,
|
|
529
|
-
children: item.icon
|
|
530
|
-
}
|
|
531
|
-
),
|
|
532
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
533
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
534
|
-
"h3",
|
|
535
|
-
{
|
|
536
|
-
className: `text-lg font-bold mb-1 ${item.textGradient}`,
|
|
537
|
-
children: item.title
|
|
538
|
-
}
|
|
539
|
-
),
|
|
540
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
541
|
-
"p",
|
|
542
|
-
{
|
|
543
|
-
className: `leading-relaxed ${// Style khác nhau cho placeholder vs real content
|
|
544
|
-
item.text.includes("sẽ được cập nhật") ? "italic opacity-75" : ""}`,
|
|
545
|
-
style: {
|
|
546
|
-
color: isDarkMode ? "var(--text-secondary)" : "var(--text-secondary)"
|
|
547
|
-
},
|
|
548
|
-
children: item.text
|
|
549
|
-
}
|
|
550
|
-
)
|
|
551
|
-
] })
|
|
552
|
-
]
|
|
553
|
-
},
|
|
554
|
-
index2
|
|
555
|
-
);
|
|
556
|
-
} catch (error) {
|
|
557
|
-
console.error("Error rendering company value item:", item, error);
|
|
558
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
559
|
-
"div",
|
|
560
|
-
{
|
|
561
|
-
className: "flex items-start space-x-4 rounded-lg p-4 border opacity-50",
|
|
562
|
-
style: {
|
|
563
|
-
backgroundColor: isDarkMode ? "var(--bg-secondary)" : "var(--bg-secondary)",
|
|
564
|
-
borderColor: isDarkMode ? "var(--border-primary)" : "var(--border-primary)"
|
|
565
|
-
},
|
|
566
|
-
children: [
|
|
567
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
568
|
-
"div",
|
|
569
|
-
{
|
|
570
|
-
className: "w-10 h-10 rounded-lg flex items-center justify-center",
|
|
571
|
-
style: {
|
|
572
|
-
backgroundColor: isDarkMode ? "#7f1d1d40" : "#fee2e2",
|
|
573
|
-
color: isDarkMode ? "#fca5a5" : "#dc2626"
|
|
574
|
-
},
|
|
575
|
-
children: "❌"
|
|
576
|
-
}
|
|
577
|
-
),
|
|
578
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
579
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
580
|
-
"h3",
|
|
581
|
-
{
|
|
582
|
-
className: "text-lg font-bold mb-1",
|
|
583
|
-
style: { color: isDarkMode ? "var(--text-primary)" : "var(--text-primary)" },
|
|
584
|
-
children: "Lỗi hiển thị"
|
|
585
|
-
}
|
|
586
|
-
),
|
|
587
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: { color: isDarkMode ? "var(--text-secondary)" : "var(--text-secondary)" }, children: "Không thể hiển thị mục này do vấn đề dữ liệu." })
|
|
588
|
-
] })
|
|
589
|
-
]
|
|
590
|
-
},
|
|
591
|
-
`error-${index2}`
|
|
592
|
-
);
|
|
593
|
-
}
|
|
594
|
-
}) });
|
|
467
|
+
] })
|
|
468
|
+
] })
|
|
469
|
+
},
|
|
470
|
+
index2
|
|
471
|
+
)) });
|
|
595
472
|
};
|
|
596
473
|
const SectionWrapper = ({
|
|
597
474
|
variant = "softLight",
|
|
@@ -630,153 +507,110 @@ const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
|
630
507
|
};
|
|
631
508
|
const logoUrl = getLogoUrl(logo);
|
|
632
509
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
633
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
634
|
-
"
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
style: { left: "20%", bottom: "30%" }
|
|
660
|
-
}
|
|
661
|
-
)
|
|
662
|
-
] }),
|
|
663
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
664
|
-
"div",
|
|
665
|
-
{
|
|
666
|
-
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'
|
|
667
|
-
}
|
|
668
|
-
)
|
|
669
|
-
] }),
|
|
670
|
-
/* @__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: [
|
|
671
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
|
|
672
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-20 h-20 mx-auto rounded-full bg-gradient-to-r from-blue-500 to-purple-600 p-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
673
|
-
"div",
|
|
674
|
-
{
|
|
675
|
-
className: `w-full h-full rounded-full flex items-center justify-center overflow-hidden ${isDarkMode ? "bg-gray-900" : "bg-white"}`,
|
|
676
|
-
children: logoUrl ? /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
677
|
-
"img",
|
|
678
|
-
{
|
|
679
|
-
src: logoUrl,
|
|
680
|
-
alt: name || shortName,
|
|
681
|
-
className: "w-full h-full object-cover rounded-full",
|
|
682
|
-
onError: (e) => {
|
|
683
|
-
e.target.style.display = "none";
|
|
684
|
-
const fallbackDiv = document.createElement("div");
|
|
685
|
-
fallbackDiv.className = "text-2xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent";
|
|
686
|
-
fallbackDiv.textContent = shortName;
|
|
687
|
-
e.target.parentElement.appendChild(fallbackDiv);
|
|
688
|
-
}
|
|
689
|
-
}
|
|
690
|
-
) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-2xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent", children: shortName })
|
|
691
|
-
}
|
|
692
|
-
) }),
|
|
693
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
694
|
-
"h1",
|
|
695
|
-
{
|
|
696
|
-
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)]"}`,
|
|
697
|
-
children: name
|
|
698
|
-
}
|
|
699
|
-
)
|
|
700
|
-
] }),
|
|
701
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-4xl mx-auto", children: [
|
|
702
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
703
|
-
"div",
|
|
704
|
-
{
|
|
705
|
-
dangerouslySetInnerHTML: { __html: shortDescription },
|
|
706
|
-
className: `prose max-w-none mb-8 leading-relaxed transition-colors ${isDarkMode ? "prose-invert text-gray-200" : "text-gray-100"} text-lg sm:text-xl md:text-2xl font-light tracking-wide`
|
|
707
|
-
}
|
|
708
|
-
),
|
|
709
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
710
|
-
"div",
|
|
711
|
-
{
|
|
712
|
-
className: `inline-flex items-center px-4 py-2 rounded-full border text-sm font-medium ${isDarkMode ? "bg-gray-800/70 border-gray-600 text-gray-300" : "bg-white/20 border-white/40 text-white"}`,
|
|
713
|
-
children: [
|
|
714
|
-
"🚀 ",
|
|
715
|
-
safeT("aboutCompany.hero.establishedYear", { year: establishedYear }),
|
|
716
|
-
" - ",
|
|
717
|
-
safeT("aboutCompany.hero.experience", { years: experienceYears })
|
|
718
|
-
]
|
|
719
|
-
}
|
|
720
|
-
)
|
|
721
|
-
] })
|
|
722
|
-
] }) })
|
|
723
|
-
]
|
|
724
|
-
}
|
|
725
|
-
),
|
|
726
|
-
/* @__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: [
|
|
727
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
728
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
510
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: "relative min-h-[80vh] flex items-center justify-center overflow-hidden pt-8 bg-gradient-brand", children: [
|
|
511
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute inset-0", children: [
|
|
512
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute inset-0", children: [
|
|
513
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
514
|
+
"div",
|
|
515
|
+
{
|
|
516
|
+
className: "shape shape-1 absolute w-12 h-12 bg-white/5 rounded-full -top-6 -left-6",
|
|
517
|
+
style: { left: "10%", top: "20%" }
|
|
518
|
+
}
|
|
519
|
+
),
|
|
520
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
521
|
+
"div",
|
|
522
|
+
{
|
|
523
|
+
className: "shape shape-3 absolute w-10 h-10 bg-white/5 rounded-full -bottom-4 -right-4",
|
|
524
|
+
style: { right: "30%", bottom: "10%" }
|
|
525
|
+
}
|
|
526
|
+
),
|
|
527
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
528
|
+
"div",
|
|
529
|
+
{
|
|
530
|
+
className: "shape shape-4 absolute w-14 h-14 bg-white/5 rounded-md -bottom-6 -left-6",
|
|
531
|
+
style: { left: "20%", bottom: "30%" }
|
|
532
|
+
}
|
|
533
|
+
)
|
|
534
|
+
] }),
|
|
535
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
729
536
|
"div",
|
|
730
537
|
{
|
|
731
|
-
className:
|
|
732
|
-
children: [
|
|
733
|
-
"📖 ",
|
|
734
|
-
safeT("aboutCompany.story.badge")
|
|
735
|
-
]
|
|
736
|
-
}
|
|
737
|
-
),
|
|
738
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
739
|
-
"h2",
|
|
740
|
-
{
|
|
741
|
-
className: `text-3xl lg:text-4xl font-bold mb-6 ${isDarkMode ? "text-white" : "text-gray-800"}`,
|
|
742
|
-
children: [
|
|
743
|
-
safeT("aboutCompany.story.title"),
|
|
744
|
-
" ",
|
|
745
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent", children: shortName })
|
|
746
|
-
]
|
|
538
|
+
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'
|
|
747
539
|
}
|
|
748
|
-
)
|
|
540
|
+
)
|
|
541
|
+
] }),
|
|
542
|
+
/* @__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: [
|
|
543
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
|
|
544
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-20 h-20 mx-auto rounded-full bg-gradient-accent p-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-full h-full rounded-full flex items-center justify-center overflow-hidden bg-body", children: logoUrl ? /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
545
|
+
"img",
|
|
546
|
+
{
|
|
547
|
+
src: logoUrl,
|
|
548
|
+
alt: name || shortName,
|
|
549
|
+
className: "w-full h-full object-cover rounded-full",
|
|
550
|
+
onError: (e) => {
|
|
551
|
+
e.target.style.display = "none";
|
|
552
|
+
const fallbackDiv = document.createElement("div");
|
|
553
|
+
fallbackDiv.className = "text-2xl font-bold text-gradient-brand";
|
|
554
|
+
fallbackDiv.textContent = shortName;
|
|
555
|
+
e.target.parentElement.appendChild(fallbackDiv);
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-2xl font-bold text-gradient-brand", children: shortName }) }) }),
|
|
559
|
+
/* @__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 })
|
|
560
|
+
] }),
|
|
561
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-4xl mx-auto", children: [
|
|
562
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
563
|
+
"div",
|
|
564
|
+
{
|
|
565
|
+
dangerouslySetInnerHTML: { __html: shortDescription },
|
|
566
|
+
className: "prose max-w-none mb-8 leading-relaxed text-inverse text-lg sm:text-xl md:text-2xl font-light tracking-wide"
|
|
567
|
+
}
|
|
568
|
+
),
|
|
569
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-flex items-center px-4 py-2 rounded-full border bg-white/20 border-white/40 text-inverse text-small font-medium", children: [
|
|
570
|
+
"🚀 ",
|
|
571
|
+
safeT("aboutCompany.hero.establishedYear", { year: establishedYear }),
|
|
572
|
+
" - ",
|
|
573
|
+
safeT("aboutCompany.hero.experience", { years: experienceYears })
|
|
574
|
+
] })
|
|
575
|
+
] })
|
|
576
|
+
] }) })
|
|
577
|
+
] }),
|
|
578
|
+
/* @__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: [
|
|
579
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
580
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-block px-4 py-2 rounded-full text-small font-semibold mb-4 bg-surface text-brand-primary border f-border", children: [
|
|
581
|
+
"📖 ",
|
|
582
|
+
safeT("aboutCompany.story.badge")
|
|
583
|
+
] }),
|
|
584
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("h2", { className: "text-3xl lg:text-4xl font-bold mb-6 text-main", children: [
|
|
585
|
+
safeT("aboutCompany.story.title"),
|
|
586
|
+
" ",
|
|
587
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-gradient-brand", children: shortName })
|
|
588
|
+
] }),
|
|
749
589
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
750
590
|
"div",
|
|
751
591
|
{
|
|
752
592
|
dangerouslySetInnerHTML: { __html: description },
|
|
753
|
-
className:
|
|
593
|
+
className: "prose max-w-none text-muted"
|
|
754
594
|
}
|
|
755
595
|
)
|
|
756
596
|
] }),
|
|
757
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
758
|
-
|
|
597
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-muted", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
598
|
+
CompanyValues,
|
|
759
599
|
{
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
{
|
|
764
|
-
companyData,
|
|
765
|
-
t: safeT,
|
|
766
|
-
isDarkMode
|
|
767
|
-
}
|
|
768
|
-
)
|
|
600
|
+
companyData,
|
|
601
|
+
t: safeT,
|
|
602
|
+
isDarkMode
|
|
769
603
|
}
|
|
770
|
-
)
|
|
604
|
+
) })
|
|
771
605
|
] }) }) })
|
|
772
606
|
] });
|
|
773
607
|
};
|
|
774
|
-
const TimelineSection = ({ data, t,
|
|
775
|
-
var _a;
|
|
776
|
-
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)) || [];
|
|
608
|
+
const TimelineSection = ({ data, t, section }) => {
|
|
609
|
+
var _a, _b;
|
|
610
|
+
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)) || [];
|
|
777
611
|
const [timelineVisible, setTimelineVisible] = useState([]);
|
|
778
612
|
const timelineRefs = useRef([]);
|
|
779
|
-
const sectionTitle = (section == null ? void 0 : section.title) || "
|
|
613
|
+
const sectionTitle = (section == null ? void 0 : section.title) || "Timeline";
|
|
780
614
|
useEffect(() => {
|
|
781
615
|
setTimelineVisible(new Array(timelineData.length).fill(false));
|
|
782
616
|
}, [timelineData.length]);
|
|
@@ -785,138 +619,51 @@ const TimelineSection = ({ data, t, isDarkMode, section }) => {
|
|
|
785
619
|
(entries) => {
|
|
786
620
|
entries.forEach((entry) => {
|
|
787
621
|
if (entry.isIntersecting) {
|
|
788
|
-
const index2 = timelineRefs.current.findIndex(
|
|
622
|
+
const index2 = timelineRefs.current.findIndex(
|
|
623
|
+
(el) => el === entry.target
|
|
624
|
+
);
|
|
789
625
|
if (index2 !== -1) {
|
|
790
626
|
setTimelineVisible((prev) => {
|
|
791
|
-
const
|
|
792
|
-
|
|
793
|
-
return
|
|
627
|
+
const updated = [...prev];
|
|
628
|
+
updated[index2] = true;
|
|
629
|
+
return updated;
|
|
794
630
|
});
|
|
631
|
+
observer.unobserve(entry.target);
|
|
795
632
|
}
|
|
796
|
-
observer.unobserve(entry.target);
|
|
797
633
|
}
|
|
798
634
|
});
|
|
799
635
|
},
|
|
800
636
|
{ threshold: 0.1 }
|
|
801
637
|
);
|
|
802
638
|
timelineRefs.current.forEach((el) => el && observer.observe(el));
|
|
803
|
-
return () =>
|
|
804
|
-
timelineRefs.current.forEach((el) => el && observer.unobserve(el));
|
|
805
|
-
};
|
|
639
|
+
return () => timelineRefs.current.forEach((el) => el && observer.unobserve(el));
|
|
806
640
|
}, [timelineData.length]);
|
|
807
641
|
if (!timelineData.length) {
|
|
808
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className:
|
|
809
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className:
|
|
810
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
642
|
+
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: [
|
|
643
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-subtitle font-semibold mb-2 text-main", children: t("timeline.noData.title") || "Chưa có dữ liệu" }),
|
|
644
|
+
/* @__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." })
|
|
811
645
|
] }) });
|
|
812
646
|
}
|
|
813
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, {
|
|
814
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
815
|
-
"
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
children: [
|
|
819
|
-
"📈 ",
|
|
820
|
-
sectionTitle,
|
|
821
|
-
isDarkMode && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
822
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
823
|
-
"div",
|
|
824
|
-
{
|
|
825
|
-
className: "absolute w-12 h-12 bg-white/5 rounded-full",
|
|
826
|
-
style: { left: "10%", top: "20%" }
|
|
827
|
-
}
|
|
828
|
-
),
|
|
829
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
830
|
-
"div",
|
|
831
|
-
{
|
|
832
|
-
className: "absolute w-10 h-10 bg-white/5 rounded-full",
|
|
833
|
-
style: { right: "30%", bottom: "10%" }
|
|
834
|
-
}
|
|
835
|
-
),
|
|
836
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
837
|
-
"div",
|
|
838
|
-
{
|
|
839
|
-
className: "absolute w-14 h-14 bg-white/5 rounded-md",
|
|
840
|
-
style: { left: "20%", bottom: "30%" }
|
|
841
|
-
}
|
|
842
|
-
),
|
|
843
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
844
|
-
"div",
|
|
845
|
-
{
|
|
846
|
-
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'
|
|
847
|
-
}
|
|
848
|
-
)
|
|
849
|
-
] })
|
|
850
|
-
]
|
|
851
|
-
}
|
|
852
|
-
) }),
|
|
647
|
+
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: [
|
|
648
|
+
/* @__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: [
|
|
649
|
+
"📈 ",
|
|
650
|
+
sectionTitle
|
|
651
|
+
] }) }),
|
|
853
652
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
854
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-
|
|
653
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-brand rounded-full" }),
|
|
855
654
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-8", children: timelineData.map((milestone, index2) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
856
655
|
"div",
|
|
857
656
|
{
|
|
858
657
|
ref: (el) => timelineRefs.current[index2] = el,
|
|
859
658
|
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"}`,
|
|
860
|
-
style: { transitionDelay: `${index2 * 200}ms` },
|
|
861
|
-
children: [
|
|
862
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
863
|
-
"div",
|
|
864
|
-
{
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
869
|
-
"div",
|
|
870
|
-
{
|
|
871
|
-
className: "absolute w-12 h-12 bg-white/5 rounded-full",
|
|
872
|
-
style: { left: "10%", top: "20%" }
|
|
873
|
-
}
|
|
874
|
-
),
|
|
875
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
876
|
-
"div",
|
|
877
|
-
{
|
|
878
|
-
className: "absolute w-10 h-10 bg-white/5 rounded-full",
|
|
879
|
-
style: { right: "30%", bottom: "10%" }
|
|
880
|
-
}
|
|
881
|
-
),
|
|
882
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
883
|
-
"div",
|
|
884
|
-
{
|
|
885
|
-
className: "absolute w-14 h-14 bg-white/5 rounded-md",
|
|
886
|
-
style: { left: "20%", bottom: "30%" }
|
|
887
|
-
}
|
|
888
|
-
),
|
|
889
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
890
|
-
"div",
|
|
891
|
-
{
|
|
892
|
-
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'
|
|
893
|
-
}
|
|
894
|
-
)
|
|
895
|
-
] }),
|
|
896
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-blue-600 font-bold text-xl mb-2", children: milestone.time }),
|
|
897
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
898
|
-
"h3",
|
|
899
|
-
{
|
|
900
|
-
className: `text-lg font-bold mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`,
|
|
901
|
-
children: milestone.title
|
|
902
|
-
}
|
|
903
|
-
),
|
|
904
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
905
|
-
"p",
|
|
906
|
-
{
|
|
907
|
-
className: `${isDarkMode ? "text-gray-300" : "text-gray-600"}`,
|
|
908
|
-
children: milestone.description
|
|
909
|
-
}
|
|
910
|
-
)
|
|
911
|
-
]
|
|
912
|
-
}
|
|
913
|
-
) }),
|
|
914
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
915
|
-
"div",
|
|
916
|
-
{
|
|
917
|
-
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`
|
|
918
|
-
}
|
|
919
|
-
),
|
|
659
|
+
style: { transitionDelay: `${index2 * 200}ms` },
|
|
660
|
+
children: [
|
|
661
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", children: [
|
|
662
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-title text-brand-primary", children: milestone.time }),
|
|
663
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-main mb-1", children: milestone.title }),
|
|
664
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text", children: milestone.description })
|
|
665
|
+
] }) }),
|
|
666
|
+
/* @__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" }),
|
|
920
667
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1" })
|
|
921
668
|
]
|
|
922
669
|
},
|
|
@@ -928,6 +675,7 @@ const TimelineSection = ({ data, t, isDarkMode, section }) => {
|
|
|
928
675
|
const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
|
|
929
676
|
const itemRef = useRef(null);
|
|
930
677
|
const [visible, setVisible] = useState(false);
|
|
678
|
+
const [isHovered, setIsHovered] = useState(false);
|
|
931
679
|
useEffect(() => {
|
|
932
680
|
const observer = new IntersectionObserver(
|
|
933
681
|
(entries) => {
|
|
@@ -949,93 +697,82 @@ const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
|
|
|
949
697
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
950
698
|
"div",
|
|
951
699
|
{
|
|
952
|
-
className: "absolute w-12 h-12
|
|
953
|
-
style: { left: "10%", top: "20%" }
|
|
700
|
+
className: "absolute w-12 h-12 rounded-full",
|
|
701
|
+
style: { left: "10%", top: "20%", background: "rgba(255,255,255,0.05)" }
|
|
954
702
|
}
|
|
955
703
|
),
|
|
956
704
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
957
705
|
"div",
|
|
958
706
|
{
|
|
959
|
-
className: "absolute w-10 h-10
|
|
960
|
-
style: { right: "30%", bottom: "10%" }
|
|
707
|
+
className: "absolute w-10 h-10 rounded-full",
|
|
708
|
+
style: { right: "30%", bottom: "10%", background: "rgba(255,255,255,0.05)" }
|
|
961
709
|
}
|
|
962
710
|
),
|
|
963
711
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
964
712
|
"div",
|
|
965
713
|
{
|
|
966
|
-
className: "absolute w-14 h-14
|
|
967
|
-
style: { left: "20%", bottom: "30%" }
|
|
714
|
+
className: "absolute w-14 h-14 rounded-md",
|
|
715
|
+
style: { left: "20%", bottom: "30%", background: "rgba(255,255,255,0.05)" }
|
|
968
716
|
}
|
|
969
717
|
),
|
|
970
718
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
971
719
|
"div",
|
|
972
720
|
{
|
|
973
|
-
className:
|
|
721
|
+
className: "absolute inset-0 opacity-20",
|
|
722
|
+
style: {
|
|
723
|
+
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")'
|
|
724
|
+
}
|
|
974
725
|
}
|
|
975
726
|
)
|
|
976
727
|
] }),
|
|
977
|
-
/* @__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(
|
|
978
|
-
"img",
|
|
979
|
-
{
|
|
980
|
-
src: logoSrc,
|
|
981
|
-
alt: partner.name,
|
|
982
|
-
className: "logo-image max-w-full max-h-full object-contain"
|
|
983
|
-
}
|
|
984
|
-
) : /* @__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 }) }) }),
|
|
985
728
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
986
|
-
"
|
|
729
|
+
"div",
|
|
987
730
|
{
|
|
988
|
-
className:
|
|
989
|
-
|
|
731
|
+
className: "w-20 h-14 flex items-center justify-center mb-4 rounded-lg overflow-hidden bg-surface",
|
|
732
|
+
style: {
|
|
733
|
+
borderWidth: "1px",
|
|
734
|
+
borderStyle: "solid",
|
|
735
|
+
borderColor: isHovered ? "var(--brand-primary)" : "var(--border-color)",
|
|
736
|
+
backgroundColor: isHovered ? "var(--bg-body)" : "var(--bg-surface)",
|
|
737
|
+
transition: "all 0.3s ease"
|
|
738
|
+
},
|
|
739
|
+
children: logoSrc ? /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
740
|
+
"img",
|
|
741
|
+
{
|
|
742
|
+
src: logoSrc,
|
|
743
|
+
alt: partner.name,
|
|
744
|
+
className: "max-w-full max-h-full object-contain",
|
|
745
|
+
style: {
|
|
746
|
+
filter: isHovered ? "grayscale(0) opacity(1)" : isDarkMode ? "grayscale(0.3) opacity(0.8)" : "grayscale(0.2) opacity(0.9)",
|
|
747
|
+
transform: isHovered ? "scale(1.05)" : "scale(1)",
|
|
748
|
+
transition: "all 0.3s ease"
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
) : /* @__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 }) })
|
|
990
752
|
}
|
|
991
753
|
),
|
|
992
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
993
|
-
|
|
754
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "card-title text-center mb-2", children: partner.name }),
|
|
755
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text text-center mb-2", children: partner.description }),
|
|
756
|
+
partner.websiteUrl && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
757
|
+
"div",
|
|
994
758
|
{
|
|
995
|
-
className:
|
|
996
|
-
|
|
759
|
+
className: "card-link justify-center",
|
|
760
|
+
style: {
|
|
761
|
+
opacity: isHovered ? 1 : 0,
|
|
762
|
+
transform: isHovered ? "translateY(0)" : "translateY(4px)",
|
|
763
|
+
transition: "all 0.3s ease"
|
|
764
|
+
},
|
|
765
|
+
children: [
|
|
766
|
+
t("partners.viewDetails") || "Xem chi tiết",
|
|
767
|
+
" →"
|
|
768
|
+
]
|
|
997
769
|
}
|
|
998
|
-
)
|
|
999
|
-
partner.websiteUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "website-hint", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-sm text-blue-600 font-medium", children: [
|
|
1000
|
-
t("partners.viewDetails") || "Xem chi tiết",
|
|
1001
|
-
" →"
|
|
1002
|
-
] }) }),
|
|
1003
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("style", { jsx: true, children: `
|
|
1004
|
-
.partner-card {
|
|
1005
|
-
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
1006
|
-
}
|
|
1007
|
-
.partner-card:hover {
|
|
1008
|
-
transform: translateY(-3px);
|
|
1009
|
-
box-shadow: 0 8px 20px ${isDarkMode ? "rgba(255,255,255,0.1)" : "rgba(0,0,0,0.1)"};
|
|
1010
|
-
}
|
|
1011
|
-
.logo-container {
|
|
1012
|
-
background: ${isDarkMode ? "linear-gradient(135deg, #374151 0%, #1f2937 100%)" : "linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%)"};
|
|
1013
|
-
border: 1px solid ${isDarkMode ? "#4b5563" : "#e2e8f0"};
|
|
1014
|
-
transition: all 0.3s ease;
|
|
1015
|
-
}
|
|
1016
|
-
.partner-card:hover .logo-container {
|
|
1017
|
-
border-color: #3b82f6;
|
|
1018
|
-
background: ${isDarkMode ? "linear-gradient(135deg, #4b5563 0%, #374151 100%)" : "linear-gradient(135deg, #ffffff 0%, #f8fafc 100%)"};
|
|
1019
|
-
}
|
|
1020
|
-
.logo-image {
|
|
1021
|
-
filter: ${isDarkMode ? "grayscale(0.3) opacity(0.8)" : "grayscale(0.2) opacity(0.9)"};
|
|
1022
|
-
transition: all 0.3s ease;
|
|
1023
|
-
}
|
|
1024
|
-
.partner-card:hover .logo-image {
|
|
1025
|
-
filter: grayscale(0) opacity(1);
|
|
1026
|
-
transform: scale(1.05);
|
|
1027
|
-
}
|
|
1028
|
-
.website-hint {
|
|
1029
|
-
opacity: 0;
|
|
1030
|
-
transform: translateY(4px);
|
|
1031
|
-
transition: all 0.3s ease;
|
|
1032
|
-
}
|
|
1033
|
-
.partner-card:hover .website-hint {
|
|
1034
|
-
opacity: 1;
|
|
1035
|
-
transform: translateY(0);
|
|
1036
|
-
}
|
|
1037
|
-
` })
|
|
770
|
+
)
|
|
1038
771
|
] });
|
|
772
|
+
const baseClasses = `card items-center justify-center transition-all duration-700 ease-out overflow-hidden ${visible ? "opacity-100 scale-100" : "opacity-0 scale-75"}`;
|
|
773
|
+
const dynamicStyles = {
|
|
774
|
+
transitionDelay: `${idx * 150}ms`
|
|
775
|
+
};
|
|
1039
776
|
if (partner.websiteUrl) {
|
|
1040
777
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1041
778
|
"a",
|
|
@@ -1044,10 +781,12 @@ const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
|
|
|
1044
781
|
href: partner.websiteUrl,
|
|
1045
782
|
target: "_blank",
|
|
1046
783
|
rel: "noopener noreferrer",
|
|
1047
|
-
className:
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
784
|
+
className: `${baseClasses} cursor-pointer`,
|
|
785
|
+
style: __spreadProps(__spreadValues({}, dynamicStyles), {
|
|
786
|
+
textDecoration: "none"
|
|
787
|
+
}),
|
|
788
|
+
onMouseEnter: () => setIsHovered(true),
|
|
789
|
+
onMouseLeave: () => setIsHovered(false),
|
|
1051
790
|
children: cardContent
|
|
1052
791
|
}
|
|
1053
792
|
);
|
|
@@ -1056,10 +795,10 @@ const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
|
|
|
1056
795
|
"div",
|
|
1057
796
|
{
|
|
1058
797
|
ref: itemRef,
|
|
1059
|
-
className:
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
798
|
+
className: baseClasses,
|
|
799
|
+
style: dynamicStyles,
|
|
800
|
+
onMouseEnter: () => setIsHovered(true),
|
|
801
|
+
onMouseLeave: () => setIsHovered(false),
|
|
1063
802
|
children: cardContent
|
|
1064
803
|
}
|
|
1065
804
|
);
|
|
@@ -1076,14 +815,14 @@ function useWindowSize$1() {
|
|
|
1076
815
|
}, []);
|
|
1077
816
|
return width;
|
|
1078
817
|
}
|
|
1079
|
-
const PartnersSection = ({ data, t,
|
|
818
|
+
const PartnersSection = ({ data, t, imageBaseUrl = "", section }) => {
|
|
1080
819
|
var _a, _b;
|
|
1081
820
|
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)) || [];
|
|
1082
821
|
const [currentPartnerSlide, setCurrentPartnerSlide] = useState(0);
|
|
1083
822
|
const [partnersVisible, setPartnersVisible] = useState(false);
|
|
1084
823
|
const partnersRef = useRef(null);
|
|
1085
824
|
const windowWidth = useWindowSize$1();
|
|
1086
|
-
const sectionTitle = (section == null ? void 0 : section.title) || "
|
|
825
|
+
const sectionTitle = (section == null ? void 0 : section.title) || t("partners.sectionTitle") || "Đối tác";
|
|
1087
826
|
const getLogoUrl = (logoUrl) => {
|
|
1088
827
|
if (!logoUrl) return null;
|
|
1089
828
|
if (logoUrl.startsWith("http")) return logoUrl;
|
|
@@ -1126,17 +865,11 @@ const PartnersSection = ({ data, t, isDarkMode, imageBaseUrl = "", section }) =>
|
|
|
1126
865
|
return () => partnersRef.current && observer.unobserve(partnersRef.current);
|
|
1127
866
|
}, []);
|
|
1128
867
|
if (!partnersData.length) return null;
|
|
1129
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, {
|
|
1130
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1131
|
-
"
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
children: [
|
|
1135
|
-
"🤝 ",
|
|
1136
|
-
sectionTitle
|
|
1137
|
-
]
|
|
1138
|
-
}
|
|
1139
|
-
) }),
|
|
868
|
+
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: [
|
|
869
|
+
/* @__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: [
|
|
870
|
+
"🤝 ",
|
|
871
|
+
sectionTitle
|
|
872
|
+
] }) }),
|
|
1140
873
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1141
874
|
"div",
|
|
1142
875
|
{
|
|
@@ -1152,8 +885,7 @@ const PartnersSection = ({ data, t, isDarkMode, imageBaseUrl = "", section }) =>
|
|
|
1152
885
|
partner,
|
|
1153
886
|
idx,
|
|
1154
887
|
t,
|
|
1155
|
-
getLogoUrl
|
|
1156
|
-
isDarkMode
|
|
888
|
+
getLogoUrl
|
|
1157
889
|
},
|
|
1158
890
|
partner.id || idx
|
|
1159
891
|
)) })
|
|
@@ -1164,7 +896,8 @@ const PartnersSection = ({ data, t, isDarkMode, imageBaseUrl = "", section }) =>
|
|
|
1164
896
|
"button",
|
|
1165
897
|
{
|
|
1166
898
|
onClick: () => setCurrentPartnerSlide(index2),
|
|
1167
|
-
className: `w-3 h-3 rounded-full transition-all ${index2 === currentPartnerSlide ? "bg-
|
|
899
|
+
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"}`,
|
|
900
|
+
"aria-label": `Slide ${index2 + 1}`
|
|
1168
901
|
},
|
|
1169
902
|
index2
|
|
1170
903
|
)) })
|
|
@@ -1186,12 +919,9 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
|
|
|
1186
919
|
try {
|
|
1187
920
|
setLoading(true);
|
|
1188
921
|
const res = yield getMilestoneTimeline();
|
|
1189
|
-
if (res.success)
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
setMilestones([]);
|
|
1193
|
-
}
|
|
1194
|
-
} catch (error) {
|
|
922
|
+
if (res.success) setMilestones(res.data || []);
|
|
923
|
+
else setMilestones([]);
|
|
924
|
+
} catch (e) {
|
|
1195
925
|
setMilestones([]);
|
|
1196
926
|
} finally {
|
|
1197
927
|
setLoading(false);
|
|
@@ -1212,67 +942,39 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
|
|
|
1212
942
|
(entries) => {
|
|
1213
943
|
entries.forEach((entry) => {
|
|
1214
944
|
if (entry.isIntersecting) {
|
|
1215
|
-
const index2 = timelineRefs.current.findIndex(
|
|
1216
|
-
(el) => el === entry.target
|
|
1217
|
-
);
|
|
945
|
+
const index2 = timelineRefs.current.findIndex((el) => el === entry.target);
|
|
1218
946
|
if (index2 !== -1) {
|
|
1219
947
|
setTimelineVisible((prev) => {
|
|
1220
|
-
const
|
|
1221
|
-
|
|
1222
|
-
return
|
|
948
|
+
const updated = [...prev];
|
|
949
|
+
updated[index2] = true;
|
|
950
|
+
return updated;
|
|
1223
951
|
});
|
|
952
|
+
observer.unobserve(entry.target);
|
|
1224
953
|
}
|
|
1225
|
-
observer.unobserve(entry.target);
|
|
1226
954
|
}
|
|
1227
955
|
});
|
|
1228
956
|
},
|
|
1229
957
|
{ threshold: 0.1 }
|
|
1230
958
|
);
|
|
1231
959
|
timelineRefs.current.forEach((el) => el && observer.observe(el));
|
|
1232
|
-
return () =>
|
|
1233
|
-
timelineRefs.current.forEach((el) => el && observer.unobserve(el));
|
|
1234
|
-
};
|
|
960
|
+
return () => timelineRefs.current.forEach((el) => el && observer.unobserve(el));
|
|
1235
961
|
}, [milestones.length]);
|
|
1236
962
|
if (loading) {
|
|
1237
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
963
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-main", children: t("milestone.status.loadingData") }) });
|
|
1238
964
|
}
|
|
1239
965
|
if (!milestones.length) {
|
|
1240
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1241
|
-
"
|
|
1242
|
-
{
|
|
1243
|
-
|
|
1244
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 text-center", children: [
|
|
1245
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1246
|
-
"h3",
|
|
1247
|
-
{
|
|
1248
|
-
className: `text-lg font-semibold mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`,
|
|
1249
|
-
children: t("milestone.status.noData")
|
|
1250
|
-
}
|
|
1251
|
-
),
|
|
1252
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1253
|
-
"p",
|
|
1254
|
-
{
|
|
1255
|
-
className: `${isDarkMode ? "text-gray-300" : "text-gray-600"}`,
|
|
1256
|
-
children: t("milestone.noDataDescription")
|
|
1257
|
-
}
|
|
1258
|
-
)
|
|
1259
|
-
] })
|
|
1260
|
-
}
|
|
1261
|
-
);
|
|
966
|
+
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: [
|
|
967
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-semibold mb-2 text-main", children: t("milestone.status.noData") }),
|
|
968
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted", children: t("milestone.noDataDescription") })
|
|
969
|
+
] }) });
|
|
1262
970
|
}
|
|
1263
971
|
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: [
|
|
1264
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1265
|
-
"
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
children: [
|
|
1269
|
-
"📈 ",
|
|
1270
|
-
sectionTitle
|
|
1271
|
-
]
|
|
1272
|
-
}
|
|
1273
|
-
) }),
|
|
972
|
+
/* @__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: [
|
|
973
|
+
"📈 ",
|
|
974
|
+
sectionTitle
|
|
975
|
+
] }) }),
|
|
1274
976
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
1275
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-
|
|
977
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-brand rounded-full" }),
|
|
1276
978
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-8", children: milestones.map((milestone, index2) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1277
979
|
"div",
|
|
1278
980
|
{
|
|
@@ -1280,35 +982,12 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
|
|
|
1280
982
|
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"}`,
|
|
1281
983
|
style: { transitionDelay: `${index2 * 200}ms` },
|
|
1282
984
|
children: [
|
|
1283
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1284
|
-
"div",
|
|
1285
|
-
{
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1290
|
-
"h3",
|
|
1291
|
-
{
|
|
1292
|
-
className: `text-lg font-bold mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`,
|
|
1293
|
-
children: milestone.title
|
|
1294
|
-
}
|
|
1295
|
-
),
|
|
1296
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1297
|
-
"p",
|
|
1298
|
-
{
|
|
1299
|
-
className: `${isDarkMode ? "text-gray-300" : "text-gray-600"}`,
|
|
1300
|
-
children: milestone.description
|
|
1301
|
-
}
|
|
1302
|
-
)
|
|
1303
|
-
]
|
|
1304
|
-
}
|
|
1305
|
-
) }),
|
|
1306
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1307
|
-
"div",
|
|
1308
|
-
{
|
|
1309
|
-
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`
|
|
1310
|
-
}
|
|
1311
|
-
),
|
|
985
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", children: [
|
|
986
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-brand-primary font-bold text-xl mb-2", children: milestone.time }),
|
|
987
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title", children: milestone.title }),
|
|
988
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text", children: milestone.description })
|
|
989
|
+
] }) }),
|
|
990
|
+
/* @__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" }),
|
|
1312
991
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1" })
|
|
1313
992
|
]
|
|
1314
993
|
},
|
|
@@ -1317,105 +996,81 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
|
|
|
1317
996
|
] })
|
|
1318
997
|
] }) });
|
|
1319
998
|
};
|
|
1320
|
-
const TestimonialsSection = ({ data, t,
|
|
1321
|
-
var _a;
|
|
999
|
+
const TestimonialsSection = ({ data, t, section }) => {
|
|
1000
|
+
var _a, _b;
|
|
1322
1001
|
const [currentIndex, setCurrentIndex] = useState(0);
|
|
1323
|
-
const
|
|
1324
|
-
const
|
|
1325
|
-
|
|
1002
|
+
const [isTransitioning, setIsTransitioning] = useState(false);
|
|
1003
|
+
const sectionTitle = (section == null ? void 0 : section.title) || t("testimonials.sectionTitle") || "Cảm nhận khách hàng";
|
|
1004
|
+
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) => {
|
|
1005
|
+
var _a2, _b2, _c, _d;
|
|
1326
1006
|
return {
|
|
1327
1007
|
quote: ((_a2 = item.data) == null ? void 0 : _a2.content) || "",
|
|
1328
|
-
author: ((
|
|
1329
|
-
position: ((_c = item.data) == null ? void 0 : _c.customerTitle) ||
|
|
1008
|
+
author: ((_b2 = item.data) == null ? void 0 : _b2.customerName) || "",
|
|
1009
|
+
position: ((_c = item.data) == null ? void 0 : _c.customerTitle) || "",
|
|
1330
1010
|
company: ((_d = item.data) == null ? void 0 : _d.customerCompany) || ""
|
|
1331
1011
|
};
|
|
1332
1012
|
})) || [];
|
|
1333
|
-
const fallbackTestimonials = [
|
|
1334
|
-
{
|
|
1335
|
-
quote: t("testimonials.fallback.testimonial1.quote"),
|
|
1336
|
-
author: t("testimonials.fallback.testimonial1.author"),
|
|
1337
|
-
position: t("testimonials.fallback.testimonial1.position"),
|
|
1338
|
-
company: t("testimonials.fallback.testimonial1.company")
|
|
1339
|
-
},
|
|
1340
|
-
{
|
|
1341
|
-
quote: t("testimonials.fallback.testimonial2.quote"),
|
|
1342
|
-
author: t("testimonials.fallback.testimonial2.author"),
|
|
1343
|
-
position: t("testimonials.fallback.testimonial2.position"),
|
|
1344
|
-
company: t("testimonials.fallback.testimonial2.company")
|
|
1345
|
-
},
|
|
1346
|
-
{
|
|
1347
|
-
quote: t("testimonials.fallback.testimonial3.quote"),
|
|
1348
|
-
author: t("testimonials.fallback.testimonial3.author"),
|
|
1349
|
-
position: t("testimonials.fallback.testimonial3.position"),
|
|
1350
|
-
company: t("testimonials.fallback.testimonial3.company")
|
|
1351
|
-
}
|
|
1352
|
-
];
|
|
1353
|
-
const displayTestimonials = testimonials.length > 0 ? testimonials : fallbackTestimonials;
|
|
1354
1013
|
useEffect(() => {
|
|
1355
|
-
if (
|
|
1014
|
+
if (testimonials.length > 1) {
|
|
1356
1015
|
const interval = setInterval(() => {
|
|
1357
|
-
|
|
1016
|
+
setIsTransitioning(true);
|
|
1017
|
+
setTimeout(() => {
|
|
1018
|
+
setCurrentIndex((prev) => (prev + 1) % testimonials.length);
|
|
1019
|
+
setIsTransitioning(false);
|
|
1020
|
+
}, 300);
|
|
1358
1021
|
}, 5e3);
|
|
1359
1022
|
return () => clearInterval(interval);
|
|
1360
1023
|
}
|
|
1361
|
-
}, [
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
{
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1024
|
+
}, [testimonials.length]);
|
|
1025
|
+
const handleIndicatorClick = (index2) => {
|
|
1026
|
+
if (index2 !== currentIndex) {
|
|
1027
|
+
setIsTransitioning(true);
|
|
1028
|
+
setTimeout(() => {
|
|
1029
|
+
setCurrentIndex(index2);
|
|
1030
|
+
setIsTransitioning(false);
|
|
1031
|
+
}, 300);
|
|
1032
|
+
}
|
|
1033
|
+
};
|
|
1034
|
+
if (testimonials.length === 0) {
|
|
1035
|
+
return null;
|
|
1036
|
+
}
|
|
1037
|
+
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: [
|
|
1038
|
+
/* @__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: [
|
|
1039
|
+
"💬 ",
|
|
1040
|
+
sectionTitle
|
|
1041
|
+
] }),
|
|
1373
1042
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
1374
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1043
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1375
1044
|
"div",
|
|
1376
1045
|
{
|
|
1377
|
-
|
|
1046
|
+
style: {
|
|
1047
|
+
opacity: isTransitioning ? 0 : 1,
|
|
1048
|
+
transform: isTransitioning ? "translateY(10px)" : "translateY(0)",
|
|
1049
|
+
transition: "opacity 0.3s ease-in-out, transform 0.3s ease-in-out"
|
|
1050
|
+
},
|
|
1378
1051
|
children: [
|
|
1379
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1380
|
-
"
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
displayTestimonials[currentIndex].quote,
|
|
1386
|
-
'"'
|
|
1387
|
-
]
|
|
1388
|
-
}
|
|
1389
|
-
),
|
|
1390
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4 animate-fadeIn", children: [
|
|
1052
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("blockquote", { className: "card-text text-body italic mb-6", children: [
|
|
1053
|
+
'"',
|
|
1054
|
+
testimonials[currentIndex].quote,
|
|
1055
|
+
'"'
|
|
1056
|
+
] }),
|
|
1057
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4", children: [
|
|
1391
1058
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-3xl", children: "👤" }),
|
|
1392
1059
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
1393
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
className: `font-bold text-base transition-colors duration-200 ${isDarkMode ? "text-white" : "text-gray-900"}`,
|
|
1397
|
-
children: displayTestimonials[currentIndex].author
|
|
1398
|
-
}
|
|
1399
|
-
),
|
|
1400
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-blue-600 font-medium text-sm", children: displayTestimonials[currentIndex].position }),
|
|
1401
|
-
displayTestimonials[currentIndex].company && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1402
|
-
"div",
|
|
1403
|
-
{
|
|
1404
|
-
className: `text-xs transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-gray-600"}`,
|
|
1405
|
-
children: displayTestimonials[currentIndex].company
|
|
1406
|
-
}
|
|
1407
|
-
)
|
|
1060
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-title", children: testimonials[currentIndex].author }),
|
|
1061
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-text", children: testimonials[currentIndex].position }),
|
|
1062
|
+
testimonials[currentIndex].company && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-link", children: testimonials[currentIndex].company })
|
|
1408
1063
|
] })
|
|
1409
1064
|
] })
|
|
1410
1065
|
]
|
|
1411
|
-
}
|
|
1412
|
-
|
|
1413
|
-
)
|
|
1414
|
-
displayTestimonials.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center space-x-2 mt-4", children: displayTestimonials.map((_, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1066
|
+
}
|
|
1067
|
+
) }),
|
|
1068
|
+
testimonials.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center space-x-2 mt-4", children: testimonials.map((_, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1415
1069
|
"button",
|
|
1416
1070
|
{
|
|
1417
|
-
onClick: () =>
|
|
1418
|
-
className: `w-2.5 h-2.5 rounded-full transition-all duration-300 ${index2 === currentIndex ? "bg-
|
|
1071
|
+
onClick: () => handleIndicatorClick(index2),
|
|
1072
|
+
className: `w-2.5 h-2.5 rounded-full transition-all duration-300 ${index2 === currentIndex ? "bg-brand-secondary" : "bg-surface hover:bg-brand-primary"}`,
|
|
1073
|
+
"aria-label": `Slide ${index2 + 1}`
|
|
1419
1074
|
},
|
|
1420
1075
|
index2
|
|
1421
1076
|
)) })
|
|
@@ -1423,54 +1078,82 @@ const TestimonialsSection = ({ data, t, isDarkMode, section }) => {
|
|
|
1423
1078
|
] }) });
|
|
1424
1079
|
};
|
|
1425
1080
|
const PartnerListCard = ({ partner, idx, t, isDarkMode, getLogoUrl }) => {
|
|
1426
|
-
const logoUrl = getLogoUrl(partner.
|
|
1427
|
-
return /* @__PURE__ */ jsxRuntimeExports.
|
|
1081
|
+
const logoUrl = getLogoUrl(partner.logoUrl);
|
|
1082
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1428
1083
|
"a",
|
|
1429
1084
|
{
|
|
1430
|
-
href: partner.
|
|
1431
|
-
target: partner.
|
|
1432
|
-
rel: partner.
|
|
1433
|
-
className:
|
|
1085
|
+
href: partner.websiteUrl || "#",
|
|
1086
|
+
target: partner.websiteUrl ? "_blank" : "_self",
|
|
1087
|
+
rel: partner.websiteUrl ? "noopener noreferrer" : "",
|
|
1088
|
+
className: "card",
|
|
1434
1089
|
style: {
|
|
1435
1090
|
animationDelay: `${idx * 0.1}s`,
|
|
1436
|
-
textDecoration: "none"
|
|
1091
|
+
textDecoration: "none",
|
|
1092
|
+
overflow: "hidden",
|
|
1093
|
+
minHeight: "280px",
|
|
1094
|
+
padding: "1.5rem",
|
|
1095
|
+
display: "flex",
|
|
1096
|
+
flexDirection: "column"
|
|
1437
1097
|
},
|
|
1438
|
-
children:
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
}
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "
|
|
1472
|
-
|
|
1473
|
-
|
|
1098
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
|
|
1099
|
+
display: "flex",
|
|
1100
|
+
flexDirection: "column",
|
|
1101
|
+
alignItems: "center",
|
|
1102
|
+
justifyContent: "center",
|
|
1103
|
+
flex: 1
|
|
1104
|
+
}, children: [
|
|
1105
|
+
logoUrl ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
1106
|
+
width: "100%",
|
|
1107
|
+
height: "100px",
|
|
1108
|
+
display: "flex",
|
|
1109
|
+
alignItems: "center",
|
|
1110
|
+
justifyContent: "center",
|
|
1111
|
+
marginBottom: "1rem"
|
|
1112
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1113
|
+
"img",
|
|
1114
|
+
{
|
|
1115
|
+
src: logoUrl,
|
|
1116
|
+
alt: partner.name || t("partners.logoAlt") || "Partner logo",
|
|
1117
|
+
style: {
|
|
1118
|
+
maxWidth: "100%",
|
|
1119
|
+
maxHeight: "100%",
|
|
1120
|
+
objectFit: "contain",
|
|
1121
|
+
transition: "transform 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
1122
|
+
},
|
|
1123
|
+
onMouseEnter: (e) => {
|
|
1124
|
+
e.currentTarget.style.transform = "scale(1.05)";
|
|
1125
|
+
},
|
|
1126
|
+
onMouseLeave: (e) => {
|
|
1127
|
+
e.currentTarget.style.transform = "scale(1)";
|
|
1128
|
+
},
|
|
1129
|
+
loading: "lazy"
|
|
1130
|
+
}
|
|
1131
|
+
) }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-surface", style: {
|
|
1132
|
+
width: "5rem",
|
|
1133
|
+
height: "5rem",
|
|
1134
|
+
borderRadius: "9999px",
|
|
1135
|
+
display: "flex",
|
|
1136
|
+
alignItems: "center",
|
|
1137
|
+
justifyContent: "center",
|
|
1138
|
+
marginBottom: "1rem"
|
|
1139
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: { fontSize: "1.875rem" }, children: "🤝" }) }),
|
|
1140
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-main", style: {
|
|
1141
|
+
fontSize: "1rem",
|
|
1142
|
+
textAlign: "center",
|
|
1143
|
+
marginBottom: "0.5rem",
|
|
1144
|
+
lineHeight: "1.4"
|
|
1145
|
+
}, children: partner.name || t("partners.unnamed") || "Partner" }),
|
|
1146
|
+
partner.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text", style: {
|
|
1147
|
+
textAlign: "center",
|
|
1148
|
+
marginTop: "0.5rem",
|
|
1149
|
+
fontSize: "0.875rem",
|
|
1150
|
+
lineHeight: "1.5",
|
|
1151
|
+
display: "-webkit-box",
|
|
1152
|
+
WebkitLineClamp: 3,
|
|
1153
|
+
WebkitBoxOrient: "vertical",
|
|
1154
|
+
overflow: "hidden"
|
|
1155
|
+
}, children: partner.description })
|
|
1156
|
+
] })
|
|
1474
1157
|
}
|
|
1475
1158
|
);
|
|
1476
1159
|
};
|
|
@@ -1485,7 +1168,7 @@ function useWindowSize() {
|
|
|
1485
1168
|
}, []);
|
|
1486
1169
|
return width;
|
|
1487
1170
|
}
|
|
1488
|
-
const PartnerListSection = ({ t,
|
|
1171
|
+
const PartnerListSection = ({ t, getPartnerList, imageBaseUrl = "", section }) => {
|
|
1489
1172
|
const [partnersData, setPartnersData] = useState([]);
|
|
1490
1173
|
const [error, setError] = useState(null);
|
|
1491
1174
|
const [loading, setLoading] = useState(true);
|
|
@@ -1493,7 +1176,7 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "",
|
|
|
1493
1176
|
const [partnersVisible, setPartnersVisible] = useState(false);
|
|
1494
1177
|
const partnersRef = useRef(null);
|
|
1495
1178
|
const windowWidth = useWindowSize();
|
|
1496
|
-
const sectionTitle = (section == null ? void 0 : section.title) || "
|
|
1179
|
+
const sectionTitle = (section == null ? void 0 : section.title) || t("partners.sectionTitle");
|
|
1497
1180
|
const getLogoUrl = (logoUrl) => {
|
|
1498
1181
|
if (!logoUrl) return null;
|
|
1499
1182
|
if (logoUrl.startsWith("http")) return logoUrl;
|
|
@@ -1538,9 +1221,7 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "",
|
|
|
1538
1221
|
}
|
|
1539
1222
|
}, [partners.length]);
|
|
1540
1223
|
useEffect(() => {
|
|
1541
|
-
const fallbackTimer = setTimeout(() =>
|
|
1542
|
-
setPartnersVisible(true);
|
|
1543
|
-
}, 500);
|
|
1224
|
+
const fallbackTimer = setTimeout(() => setPartnersVisible(true), 500);
|
|
1544
1225
|
const observer = new IntersectionObserver(
|
|
1545
1226
|
(entries) => {
|
|
1546
1227
|
entries.forEach((entry) => {
|
|
@@ -1553,54 +1234,46 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "",
|
|
|
1553
1234
|
},
|
|
1554
1235
|
{ threshold: 0.1, rootMargin: "50px" }
|
|
1555
1236
|
);
|
|
1556
|
-
if (partnersRef.current)
|
|
1557
|
-
|
|
1558
|
-
} else {
|
|
1237
|
+
if (partnersRef.current) observer.observe(partnersRef.current);
|
|
1238
|
+
else {
|
|
1559
1239
|
clearTimeout(fallbackTimer);
|
|
1560
1240
|
setPartnersVisible(true);
|
|
1561
1241
|
}
|
|
1562
1242
|
return () => {
|
|
1563
1243
|
clearTimeout(fallbackTimer);
|
|
1564
|
-
if (partnersRef.current)
|
|
1565
|
-
observer.unobserve(partnersRef.current);
|
|
1566
|
-
}
|
|
1244
|
+
if (partnersRef.current) observer.unobserve(partnersRef.current);
|
|
1567
1245
|
};
|
|
1568
1246
|
}, []);
|
|
1569
1247
|
if (loading) {
|
|
1570
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
1248
|
+
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..." }) });
|
|
1571
1249
|
}
|
|
1572
1250
|
if (error) {
|
|
1573
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-
|
|
1251
|
+
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 }) });
|
|
1574
1252
|
}
|
|
1575
1253
|
if (!partnersData.length) return null;
|
|
1576
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, {
|
|
1577
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1578
|
-
"
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
children: [
|
|
1582
|
-
"🤝 ",
|
|
1583
|
-
sectionTitle
|
|
1584
|
-
]
|
|
1585
|
-
}
|
|
1586
|
-
) }),
|
|
1254
|
+
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: [
|
|
1255
|
+
/* @__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: [
|
|
1256
|
+
"🤝 ",
|
|
1257
|
+
sectionTitle
|
|
1258
|
+
] }) }),
|
|
1587
1259
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1588
1260
|
"div",
|
|
1589
1261
|
{
|
|
1590
1262
|
className: `transition-all duration-1000 ease-out ${partnersVisible ? "opacity-100 scale-100" : "opacity-0 scale-95"}`,
|
|
1591
1263
|
children: [
|
|
1592
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative overflow-hidden mb-
|
|
1264
|
+
/* @__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(
|
|
1593
1265
|
"div",
|
|
1594
1266
|
{
|
|
1595
1267
|
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"}`,
|
|
1596
|
-
style: {
|
|
1597
|
-
|
|
1268
|
+
style: {
|
|
1269
|
+
zIndex: slideIndex === currentPartnerSlide ? 10 : 1
|
|
1270
|
+
},
|
|
1271
|
+
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(
|
|
1598
1272
|
PartnerListCard,
|
|
1599
1273
|
{
|
|
1600
1274
|
partner,
|
|
1601
1275
|
idx,
|
|
1602
1276
|
t,
|
|
1603
|
-
isDarkMode,
|
|
1604
1277
|
getLogoUrl
|
|
1605
1278
|
},
|
|
1606
1279
|
partner.id || `${slideIndex}-${idx}`
|
|
@@ -1608,11 +1281,34 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "",
|
|
|
1608
1281
|
},
|
|
1609
1282
|
slideIndex
|
|
1610
1283
|
)) }) }),
|
|
1611
|
-
partners.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center space-x-
|
|
1284
|
+
partners.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center space-x-3", style: {
|
|
1285
|
+
position: "relative",
|
|
1286
|
+
zIndex: 100,
|
|
1287
|
+
paddingTop: "1rem"
|
|
1288
|
+
}, children: partners.map((_, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1612
1289
|
"button",
|
|
1613
1290
|
{
|
|
1614
1291
|
onClick: () => setCurrentPartnerSlide(index2),
|
|
1615
|
-
|
|
1292
|
+
style: {
|
|
1293
|
+
width: "12px",
|
|
1294
|
+
height: "12px",
|
|
1295
|
+
borderRadius: "50%",
|
|
1296
|
+
border: "none",
|
|
1297
|
+
cursor: "pointer",
|
|
1298
|
+
transition: "all 0.3s ease",
|
|
1299
|
+
backgroundColor: index2 === currentPartnerSlide ? "var(--brand-primary)" : "rgba(255, 255, 255, 0.3)",
|
|
1300
|
+
transform: index2 === currentPartnerSlide ? "scale(1.3)" : "scale(1)"
|
|
1301
|
+
},
|
|
1302
|
+
onMouseEnter: (e) => {
|
|
1303
|
+
if (index2 !== currentPartnerSlide) {
|
|
1304
|
+
e.currentTarget.style.backgroundColor = "rgba(255, 255, 255, 0.5)";
|
|
1305
|
+
}
|
|
1306
|
+
},
|
|
1307
|
+
onMouseLeave: (e) => {
|
|
1308
|
+
if (index2 !== currentPartnerSlide) {
|
|
1309
|
+
e.currentTarget.style.backgroundColor = "rgba(255, 255, 255, 0.3)";
|
|
1310
|
+
}
|
|
1311
|
+
},
|
|
1616
1312
|
"aria-label": `Slide ${index2 + 1}`
|
|
1617
1313
|
},
|
|
1618
1314
|
index2
|
|
@@ -2369,24 +2065,30 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2369
2065
|
setIsSubmitting(false);
|
|
2370
2066
|
}
|
|
2371
2067
|
});
|
|
2372
|
-
const inputBaseClasses = `
|
|
2373
|
-
|
|
2374
|
-
|
|
2068
|
+
const inputBaseClasses = `
|
|
2069
|
+
w-full px-4 py-3 rounded-xl border
|
|
2070
|
+
transition-all duration-200
|
|
2071
|
+
focus:ring-2 focus:outline-none
|
|
2072
|
+
bg-surface
|
|
2073
|
+
text-main
|
|
2074
|
+
placeholder-text-muted
|
|
2075
|
+
`;
|
|
2076
|
+
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: [
|
|
2375
2077
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center mb-6", children: [
|
|
2376
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-10 h-10 rounded-lg bg-gradient-
|
|
2078
|
+
/* @__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" }) }),
|
|
2377
2079
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2378
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className:
|
|
2379
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
2080
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-subtitle font-bold text-main", children: t("form.title") || "Gửi yêu cầu tư vấn" }),
|
|
2081
|
+
/* @__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" })
|
|
2380
2082
|
] })
|
|
2381
2083
|
] }),
|
|
2382
|
-
submitStatus && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `mb-6 p-4 rounded-xl border transition-colors duration-200 ${submitStatus === "success" ?
|
|
2084
|
+
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: [
|
|
2383
2085
|
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" }),
|
|
2384
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-
|
|
2086
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small font-medium", children: submitMessage })
|
|
2385
2087
|
] }) }),
|
|
2386
2088
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleSubmit, className: "space-y-6", children: [
|
|
2387
2089
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
|
|
2388
2090
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2389
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className:
|
|
2091
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
|
|
2390
2092
|
t("form.fields.fullName") || "Họ và tên",
|
|
2391
2093
|
" *"
|
|
2392
2094
|
] }),
|
|
@@ -2398,18 +2100,19 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2398
2100
|
value: formData.fullName || "",
|
|
2399
2101
|
onChange: handleInputChange,
|
|
2400
2102
|
onBlur: handleBlur,
|
|
2401
|
-
className:
|
|
2103
|
+
className: inputBaseClasses,
|
|
2104
|
+
style: { borderColor: formErrors.fullName ? "#ef4444" : "var(--border-color)" },
|
|
2402
2105
|
placeholder: t("contact.form.namePlaceholder"),
|
|
2403
2106
|
required: true
|
|
2404
2107
|
}
|
|
2405
2108
|
),
|
|
2406
|
-
formErrors.fullName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2109
|
+
formErrors.fullName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2407
2110
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2408
2111
|
formErrors.fullName
|
|
2409
2112
|
] })
|
|
2410
2113
|
] }),
|
|
2411
2114
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2412
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className:
|
|
2115
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
|
|
2413
2116
|
t("form.fields.workEmail") || "Email",
|
|
2414
2117
|
" *"
|
|
2415
2118
|
] }),
|
|
@@ -2421,12 +2124,13 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2421
2124
|
value: formData.workEmail || "",
|
|
2422
2125
|
onChange: handleInputChange,
|
|
2423
2126
|
onBlur: handleBlur,
|
|
2424
|
-
className:
|
|
2127
|
+
className: inputBaseClasses,
|
|
2128
|
+
style: { borderColor: formErrors.workEmail ? "#ef4444" : "var(--border-color)" },
|
|
2425
2129
|
placeholder: "email@company.com",
|
|
2426
2130
|
required: true
|
|
2427
2131
|
}
|
|
2428
2132
|
),
|
|
2429
|
-
formErrors.workEmail && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2133
|
+
formErrors.workEmail && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2430
2134
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2431
2135
|
formErrors.workEmail
|
|
2432
2136
|
] })
|
|
@@ -2434,7 +2138,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2434
2138
|
] }),
|
|
2435
2139
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
|
|
2436
2140
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2437
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2141
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.phoneNumber") || "Số điện thoại" }),
|
|
2438
2142
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2439
2143
|
"input",
|
|
2440
2144
|
{
|
|
@@ -2443,17 +2147,18 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2443
2147
|
value: formData.phoneNumber || "",
|
|
2444
2148
|
onChange: handleInputChange,
|
|
2445
2149
|
onBlur: handleBlur,
|
|
2446
|
-
className:
|
|
2150
|
+
className: inputBaseClasses,
|
|
2151
|
+
style: { borderColor: formErrors.phoneNumber ? "#ef4444" : "var(--border-color)" },
|
|
2447
2152
|
placeholder: "0901 234 567"
|
|
2448
2153
|
}
|
|
2449
2154
|
),
|
|
2450
|
-
formErrors.phoneNumber && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2155
|
+
formErrors.phoneNumber && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2451
2156
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2452
2157
|
formErrors.phoneNumber
|
|
2453
2158
|
] })
|
|
2454
2159
|
] }),
|
|
2455
2160
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2456
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2161
|
+
/* @__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" }),
|
|
2457
2162
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2458
2163
|
"input",
|
|
2459
2164
|
{
|
|
@@ -2462,11 +2167,12 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2462
2167
|
value: formData.companyName || "",
|
|
2463
2168
|
onChange: handleInputChange,
|
|
2464
2169
|
onBlur: handleBlur,
|
|
2465
|
-
className:
|
|
2170
|
+
className: inputBaseClasses,
|
|
2171
|
+
style: { borderColor: formErrors.companyName ? "#ef4444" : "var(--border-color)" },
|
|
2466
2172
|
placeholder: t("contact.form.fields.company")
|
|
2467
2173
|
}
|
|
2468
2174
|
),
|
|
2469
|
-
formErrors.companyName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2175
|
+
formErrors.companyName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2470
2176
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2471
2177
|
formErrors.companyName
|
|
2472
2178
|
] })
|
|
@@ -2474,7 +2180,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2474
2180
|
] }),
|
|
2475
2181
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
|
|
2476
2182
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2477
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2183
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.jobTitle") || "Chức vụ" }),
|
|
2478
2184
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2479
2185
|
"input",
|
|
2480
2186
|
{
|
|
@@ -2483,17 +2189,18 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2483
2189
|
value: formData.jobTitle || "",
|
|
2484
2190
|
onChange: handleInputChange,
|
|
2485
2191
|
onBlur: handleBlur,
|
|
2486
|
-
className:
|
|
2192
|
+
className: inputBaseClasses,
|
|
2193
|
+
style: { borderColor: formErrors.jobTitle ? "#ef4444" : "var(--border-color)" },
|
|
2487
2194
|
placeholder: t("contact.form.positionPlaceholder")
|
|
2488
2195
|
}
|
|
2489
2196
|
),
|
|
2490
|
-
formErrors.jobTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2197
|
+
formErrors.jobTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2491
2198
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2492
2199
|
formErrors.jobTitle
|
|
2493
2200
|
] })
|
|
2494
2201
|
] }),
|
|
2495
2202
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2496
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2203
|
+
/* @__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" }),
|
|
2497
2204
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2498
2205
|
"input",
|
|
2499
2206
|
{
|
|
@@ -2502,6 +2209,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2502
2209
|
value: formData.businessType || "",
|
|
2503
2210
|
onChange: handleInputChange,
|
|
2504
2211
|
className: inputBaseClasses,
|
|
2212
|
+
style: { borderColor: "var(--border-color)" },
|
|
2505
2213
|
placeholder: t("form.fields.businessType")
|
|
2506
2214
|
}
|
|
2507
2215
|
)
|
|
@@ -2509,7 +2217,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2509
2217
|
] }),
|
|
2510
2218
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
|
|
2511
2219
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2512
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2220
|
+
/* @__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" }),
|
|
2513
2221
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2514
2222
|
"input",
|
|
2515
2223
|
{
|
|
@@ -2518,12 +2226,13 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2518
2226
|
value: formData.expectedBudget || "",
|
|
2519
2227
|
onChange: handleInputChange,
|
|
2520
2228
|
className: inputBaseClasses,
|
|
2229
|
+
style: { borderColor: "var(--border-color)" },
|
|
2521
2230
|
placeholder: t("form.fields.expectedBudget")
|
|
2522
2231
|
}
|
|
2523
2232
|
)
|
|
2524
2233
|
] }),
|
|
2525
2234
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2526
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2235
|
+
/* @__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" }),
|
|
2527
2236
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2528
2237
|
"input",
|
|
2529
2238
|
{
|
|
@@ -2532,13 +2241,14 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2532
2241
|
value: formData.expectedTimeline || "",
|
|
2533
2242
|
onChange: handleInputChange,
|
|
2534
2243
|
className: inputBaseClasses,
|
|
2244
|
+
style: { borderColor: "var(--border-color)" },
|
|
2535
2245
|
placeholder: t("form.fields.expectedTimeline")
|
|
2536
2246
|
}
|
|
2537
2247
|
)
|
|
2538
2248
|
] })
|
|
2539
2249
|
] }),
|
|
2540
2250
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2541
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className:
|
|
2251
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
|
|
2542
2252
|
t("form.fields.requestTitle") || "Tiêu đề yêu cầu",
|
|
2543
2253
|
" *"
|
|
2544
2254
|
] }),
|
|
@@ -2550,18 +2260,19 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2550
2260
|
value: formData.requestTitle || "",
|
|
2551
2261
|
onChange: handleInputChange,
|
|
2552
2262
|
onBlur: handleBlur,
|
|
2553
|
-
className:
|
|
2263
|
+
className: inputBaseClasses,
|
|
2264
|
+
style: { borderColor: formErrors.requestTitle ? "#ef4444" : "var(--border-color)" },
|
|
2554
2265
|
placeholder: t("contact.form.placeholders.subject"),
|
|
2555
2266
|
required: true
|
|
2556
2267
|
}
|
|
2557
2268
|
),
|
|
2558
|
-
formErrors.requestTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2269
|
+
formErrors.requestTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2559
2270
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2560
2271
|
formErrors.requestTitle
|
|
2561
2272
|
] })
|
|
2562
2273
|
] }),
|
|
2563
2274
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2564
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className:
|
|
2275
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
|
|
2565
2276
|
t("form.fields.requestDescription") || "Mô tả yêu cầu",
|
|
2566
2277
|
" *"
|
|
2567
2278
|
] }),
|
|
@@ -2573,48 +2284,32 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2573
2284
|
onChange: handleInputChange,
|
|
2574
2285
|
onBlur: handleBlur,
|
|
2575
2286
|
rows: "5",
|
|
2576
|
-
className: `${inputBaseClasses} resize-none
|
|
2287
|
+
className: `${inputBaseClasses} resize-none`,
|
|
2288
|
+
style: { borderColor: formErrors.requestDescription ? "#ef4444" : "var(--border-color)" },
|
|
2577
2289
|
placeholder: t("contact.form.placeholders.message"),
|
|
2578
2290
|
required: true
|
|
2579
2291
|
}
|
|
2580
2292
|
),
|
|
2581
|
-
formErrors.requestDescription && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2293
|
+
formErrors.requestDescription && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2582
2294
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2583
2295
|
formErrors.requestDescription
|
|
2584
2296
|
] })
|
|
2585
2297
|
] }),
|
|
2586
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
),
|
|
2602
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2603
|
-
"button",
|
|
2604
|
-
{
|
|
2605
|
-
type: "button",
|
|
2606
|
-
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"}`,
|
|
2607
|
-
children: [
|
|
2608
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Phone, { size: 20, className: "inline mr-2" }),
|
|
2609
|
-
t("form.callNow") || "Gọi ngay"
|
|
2610
|
-
]
|
|
2611
|
-
}
|
|
2612
|
-
)
|
|
2613
|
-
] }),
|
|
2614
|
-
/* @__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: [
|
|
2615
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { size: 16, className: "text-emerald-500" }),
|
|
2616
|
-
/* @__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ờ" })
|
|
2617
|
-
] })
|
|
2298
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center space-x-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2299
|
+
"button",
|
|
2300
|
+
{
|
|
2301
|
+
type: "submit",
|
|
2302
|
+
disabled: isSubmitting,
|
|
2303
|
+
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",
|
|
2304
|
+
children: isSubmitting ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
2305
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "animate-spin h-5 w-5 mr-2" }),
|
|
2306
|
+
t("form.submitting") || "Đang gửi..."
|
|
2307
|
+
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
2308
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Send, { size: 20, className: "mr-2" }),
|
|
2309
|
+
t("form.submit") || "Gửi yêu cầu"
|
|
2310
|
+
] })
|
|
2311
|
+
}
|
|
2312
|
+
) })
|
|
2618
2313
|
] })
|
|
2619
2314
|
] }) }) }) }) });
|
|
2620
2315
|
};
|
|
@@ -2624,65 +2319,110 @@ const ContactInfoSection = ({ data, t, isDarkMode, section }) => {
|
|
|
2624
2319
|
const sectionTitle = (section == null ? void 0 : section.title) || "...";
|
|
2625
2320
|
if (!contactData.length) return null;
|
|
2626
2321
|
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: [
|
|
2627
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2628
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 22, className: "mr-2" }),
|
|
2629
|
-
sectionTitle
|
|
2322
|
+
/* @__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: [
|
|
2323
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 22, className: "mr-2 text-brand-primary" }),
|
|
2324
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-main", children: sectionTitle })
|
|
2630
2325
|
] }) }),
|
|
2631
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid md:grid-cols-2 lg:grid-cols-3 gap-8", children: contactData.map((contact, index2) => {
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
)
|
|
2658
|
-
|
|
2659
|
-
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
}
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2675
|
-
|
|
2676
|
-
|
|
2677
|
-
|
|
2326
|
+
/* @__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: [
|
|
2327
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-6", children: [
|
|
2328
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
|
|
2329
|
+
width: "5rem",
|
|
2330
|
+
height: "5rem",
|
|
2331
|
+
borderRadius: "9999px",
|
|
2332
|
+
margin: "0 auto 1rem",
|
|
2333
|
+
display: "flex",
|
|
2334
|
+
alignItems: "center",
|
|
2335
|
+
justifyContent: "center"
|
|
2336
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 32, style: { color: "white" } }) }),
|
|
2337
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-subtitle mb-2", children: contact.name }),
|
|
2338
|
+
/* @__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 })
|
|
2339
|
+
] }),
|
|
2340
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "1rem" }, children: [
|
|
2341
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2342
|
+
"a",
|
|
2343
|
+
{
|
|
2344
|
+
href: `tel:${contact.phone}`,
|
|
2345
|
+
className: "card-link",
|
|
2346
|
+
style: {
|
|
2347
|
+
padding: "0.75rem",
|
|
2348
|
+
borderRadius: "0.75rem",
|
|
2349
|
+
backgroundColor: "var(--bg-body)",
|
|
2350
|
+
borderWidth: "1px",
|
|
2351
|
+
borderColor: "var(--border-color)",
|
|
2352
|
+
transition: "all 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
2353
|
+
},
|
|
2354
|
+
children: [
|
|
2355
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
|
|
2356
|
+
width: "2.5rem",
|
|
2357
|
+
height: "2.5rem",
|
|
2358
|
+
borderRadius: "0.5rem",
|
|
2359
|
+
display: "flex",
|
|
2360
|
+
alignItems: "center",
|
|
2361
|
+
justifyContent: "center",
|
|
2362
|
+
marginRight: "0.75rem"
|
|
2363
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Phone, { size: 18, style: { color: "white" } }) }),
|
|
2364
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2365
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contact.info.phone") || "Điện thoại" }),
|
|
2366
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.phone })
|
|
2367
|
+
] })
|
|
2368
|
+
]
|
|
2369
|
+
}
|
|
2370
|
+
),
|
|
2371
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2372
|
+
"a",
|
|
2373
|
+
{
|
|
2374
|
+
href: `mailto:${contact.email}`,
|
|
2375
|
+
className: "card-link",
|
|
2376
|
+
style: {
|
|
2377
|
+
padding: "0.75rem",
|
|
2378
|
+
borderRadius: "0.75rem",
|
|
2379
|
+
backgroundColor: "var(--bg-body)",
|
|
2380
|
+
borderWidth: "1px",
|
|
2381
|
+
borderColor: "var(--border-color)",
|
|
2382
|
+
transition: "all 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
2383
|
+
},
|
|
2384
|
+
children: [
|
|
2385
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-accent", style: {
|
|
2386
|
+
width: "2.5rem",
|
|
2387
|
+
height: "2.5rem",
|
|
2388
|
+
borderRadius: "0.5rem",
|
|
2389
|
+
display: "flex",
|
|
2390
|
+
alignItems: "center",
|
|
2391
|
+
justifyContent: "center",
|
|
2392
|
+
marginRight: "0.75rem"
|
|
2393
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Mail, { size: 18, style: { color: "white" } }) }),
|
|
2394
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2395
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: "Email" }),
|
|
2396
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.email })
|
|
2678
2397
|
] })
|
|
2679
|
-
]
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2398
|
+
]
|
|
2399
|
+
}
|
|
2400
|
+
),
|
|
2401
|
+
contact.workingHours && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
|
|
2402
|
+
display: "flex",
|
|
2403
|
+
alignItems: "center",
|
|
2404
|
+
padding: "0.75rem",
|
|
2405
|
+
borderRadius: "0.75rem",
|
|
2406
|
+
backgroundColor: "var(--bg-body)",
|
|
2407
|
+
borderWidth: "1px",
|
|
2408
|
+
borderColor: "var(--border-color)"
|
|
2409
|
+
}, children: [
|
|
2410
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", 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(Clock, { 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: t("contact.info.workingHours") || "Giờ làm việc" }),
|
|
2421
|
+
/* @__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" })
|
|
2422
|
+
] })
|
|
2423
|
+
] })
|
|
2424
|
+
] })
|
|
2425
|
+
] }, contact.id || index2)) })
|
|
2686
2426
|
] }) });
|
|
2687
2427
|
};
|
|
2688
2428
|
const ContactListAutoSection = ({ data, t, isDarkMode, getContactList, section }) => {
|
|
@@ -2710,89 +2450,136 @@ const ContactListAutoSection = ({ data, t, isDarkMode, getContactList, section }
|
|
|
2710
2450
|
}
|
|
2711
2451
|
});
|
|
2712
2452
|
if (loading) {
|
|
2713
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2714
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className:
|
|
2715
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
2453
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "py-16 px-5 text-center bg-body", children: [
|
|
2454
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "inline-block w-10 h-10 border-4 border-color rounded-full animate-spin", style: { borderTopColor: "var(--brand-primary)" } }),
|
|
2455
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-4 text-muted", children: t("contactList.status.loading") || "Đang tải danh sách liên hệ..." })
|
|
2716
2456
|
] });
|
|
2717
2457
|
}
|
|
2718
2458
|
if (error) {
|
|
2719
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2720
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2459
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "py-16 px-5 text-center bg-body", children: [
|
|
2460
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-base mb-2", style: { color: "#ef4444" }, children: [
|
|
2721
2461
|
"⚠️ ",
|
|
2722
2462
|
t("contactList.error.title") || "Lỗi tải dữ liệu"
|
|
2723
2463
|
] }),
|
|
2724
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
2464
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted", children: error })
|
|
2725
2465
|
] });
|
|
2726
2466
|
}
|
|
2727
2467
|
if (!contacts || contacts.length === 0) {
|
|
2728
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2468
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "py-16 px-5 text-center bg-body", children: [
|
|
2729
2469
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-5xl mb-5", children: "📞" }),
|
|
2730
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className:
|
|
2731
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
2470
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-muted mb-2", children: t("contactList.status.noData.title") || "Chưa có thông tin liên hệ" }),
|
|
2471
|
+
/* @__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" })
|
|
2732
2472
|
] });
|
|
2733
2473
|
}
|
|
2734
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-
|
|
2735
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-
|
|
2736
|
-
|
|
2474
|
+
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: [
|
|
2475
|
+
/* @__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: [
|
|
2476
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 22, className: "mr-2 text-brand-primary" }),
|
|
2477
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-main", children: sectionTitle })
|
|
2478
|
+
] }) }),
|
|
2479
|
+
/* @__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)) })
|
|
2737
2480
|
] }) });
|
|
2738
2481
|
};
|
|
2739
2482
|
const ContactCard = ({ contact, t, isDarkMode }) => {
|
|
2740
|
-
|
|
2741
|
-
|
|
2742
|
-
|
|
2743
|
-
|
|
2744
|
-
|
|
2745
|
-
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
|
|
2749
|
-
|
|
2750
|
-
|
|
2751
|
-
children:
|
|
2752
|
-
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
|
|
2758
|
-
|
|
2759
|
-
|
|
2760
|
-
|
|
2761
|
-
|
|
2762
|
-
|
|
2763
|
-
|
|
2764
|
-
|
|
2765
|
-
|
|
2766
|
-
|
|
2767
|
-
|
|
2768
|
-
|
|
2769
|
-
|
|
2770
|
-
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
|
|
2777
|
-
|
|
2483
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", children: [
|
|
2484
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-6", children: [
|
|
2485
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
|
|
2486
|
+
width: "5rem",
|
|
2487
|
+
height: "5rem",
|
|
2488
|
+
borderRadius: "9999px",
|
|
2489
|
+
margin: "0 auto 1rem",
|
|
2490
|
+
display: "flex",
|
|
2491
|
+
alignItems: "center",
|
|
2492
|
+
justifyContent: "center"
|
|
2493
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 32, style: { color: "white" } }) }),
|
|
2494
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-subtitle mb-2", children: contact.name || t("contactList.card.noName") || "Không có tên" }),
|
|
2495
|
+
/* @__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ụ" })
|
|
2496
|
+
] }),
|
|
2497
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "1rem" }, children: [
|
|
2498
|
+
contact.phone && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2499
|
+
"a",
|
|
2500
|
+
{
|
|
2501
|
+
href: `tel:${contact.phone}`,
|
|
2502
|
+
className: "card-link",
|
|
2503
|
+
style: {
|
|
2504
|
+
padding: "0.75rem",
|
|
2505
|
+
borderRadius: "0.75rem",
|
|
2506
|
+
backgroundColor: "var(--bg-body)",
|
|
2507
|
+
borderWidth: "1px",
|
|
2508
|
+
borderColor: "var(--border-color)",
|
|
2509
|
+
transition: "all 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
2510
|
+
},
|
|
2511
|
+
children: [
|
|
2512
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
|
|
2513
|
+
width: "2.5rem",
|
|
2514
|
+
height: "2.5rem",
|
|
2515
|
+
borderRadius: "0.5rem",
|
|
2516
|
+
display: "flex",
|
|
2517
|
+
alignItems: "center",
|
|
2518
|
+
justifyContent: "center",
|
|
2519
|
+
marginRight: "0.75rem"
|
|
2520
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Phone, { size: 18, style: { color: "white" } }) }),
|
|
2521
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2522
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contactList.card.phone") || "Điện thoại" }),
|
|
2523
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.phone })
|
|
2524
|
+
] })
|
|
2525
|
+
]
|
|
2526
|
+
}
|
|
2527
|
+
),
|
|
2528
|
+
contact.email && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2529
|
+
"a",
|
|
2530
|
+
{
|
|
2531
|
+
href: `mailto:${contact.email}`,
|
|
2532
|
+
className: "card-link",
|
|
2533
|
+
style: {
|
|
2534
|
+
padding: "0.75rem",
|
|
2535
|
+
borderRadius: "0.75rem",
|
|
2536
|
+
backgroundColor: "var(--bg-body)",
|
|
2537
|
+
borderWidth: "1px",
|
|
2538
|
+
borderColor: "var(--border-color)",
|
|
2539
|
+
transition: "all 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
2540
|
+
},
|
|
2541
|
+
children: [
|
|
2542
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-accent", style: {
|
|
2543
|
+
width: "2.5rem",
|
|
2544
|
+
height: "2.5rem",
|
|
2545
|
+
borderRadius: "0.5rem",
|
|
2546
|
+
display: "flex",
|
|
2547
|
+
alignItems: "center",
|
|
2548
|
+
justifyContent: "center",
|
|
2549
|
+
marginRight: "0.75rem"
|
|
2550
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Mail, { size: 18, style: { color: "white" } }) }),
|
|
2551
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2552
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: "Email" }),
|
|
2553
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.email })
|
|
2554
|
+
] })
|
|
2555
|
+
]
|
|
2556
|
+
}
|
|
2557
|
+
),
|
|
2558
|
+
contact.workingHours && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
|
|
2559
|
+
display: "flex",
|
|
2560
|
+
alignItems: "center",
|
|
2561
|
+
padding: "0.75rem",
|
|
2562
|
+
borderRadius: "0.75rem",
|
|
2563
|
+
backgroundColor: "var(--bg-body)",
|
|
2564
|
+
borderWidth: "1px",
|
|
2565
|
+
borderColor: "var(--border-color)"
|
|
2566
|
+
}, children: [
|
|
2567
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", 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(Clock, { 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: t("contactList.card.workingHours") || "Giờ làm việc" }),
|
|
2578
|
+
/* @__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" })
|
|
2778
2579
|
] })
|
|
2779
|
-
]
|
|
2780
|
-
}
|
|
2781
|
-
);
|
|
2782
|
-
};
|
|
2783
|
-
const ContactInfo = ({ icon, label, value, href, isDarkMode }) => {
|
|
2784
|
-
if (!value) return null;
|
|
2785
|
-
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: [
|
|
2786
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-lg mr-3 w-6 text-center", children: icon }),
|
|
2787
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1", children: [
|
|
2788
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `text-sm ${isDarkMode ? "text-gray-400" : "text-gray-600"} mb-0.5`, children: label }),
|
|
2789
|
-
/* @__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 })
|
|
2580
|
+
] })
|
|
2790
2581
|
] })
|
|
2791
2582
|
] });
|
|
2792
|
-
if (href) {
|
|
2793
|
-
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 });
|
|
2794
|
-
}
|
|
2795
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "-mx-2 px-2", children: content });
|
|
2796
2583
|
};
|
|
2797
2584
|
const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback, section }) => {
|
|
2798
2585
|
const [feedbacks, setFeedbacks] = useState([]);
|
|
@@ -2876,7 +2663,7 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
|
|
|
2876
2663
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2877
2664
|
"div",
|
|
2878
2665
|
{
|
|
2879
|
-
className:
|
|
2666
|
+
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 ",
|
|
2880
2667
|
children: [
|
|
2881
2668
|
"💬 ",
|
|
2882
2669
|
sectionTitle
|
|
@@ -2887,37 +2674,19 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
|
|
|
2887
2674
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2888
2675
|
"div",
|
|
2889
2676
|
{
|
|
2890
|
-
className:
|
|
2677
|
+
className: "card",
|
|
2891
2678
|
children: [
|
|
2892
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2893
|
-
"
|
|
2894
|
-
|
|
2895
|
-
|
|
2896
|
-
|
|
2897
|
-
|
|
2898
|
-
currentFeedback.content,
|
|
2899
|
-
'"'
|
|
2900
|
-
]
|
|
2901
|
-
}
|
|
2902
|
-
),
|
|
2903
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4 animate-fadeIn", children: [
|
|
2679
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("blockquote", { className: "card-text text-lg lg:text-xl italic mb-6 leading-relaxed", children: [
|
|
2680
|
+
'"',
|
|
2681
|
+
currentFeedback.content,
|
|
2682
|
+
'"'
|
|
2683
|
+
] }),
|
|
2684
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4", children: [
|
|
2904
2685
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-3xl", children: "👤" }),
|
|
2905
2686
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
2906
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2907
|
-
|
|
2908
|
-
|
|
2909
|
-
className: `font-bold text-base transition-colors duration-200 ${isDarkMode ? "text-white" : "text-gray-900"}`,
|
|
2910
|
-
children: currentFeedback.customerName
|
|
2911
|
-
}
|
|
2912
|
-
),
|
|
2913
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-blue-600 font-medium text-sm", children: currentFeedback.customerTitle }),
|
|
2914
|
-
currentFeedback.customerCompany && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2915
|
-
"div",
|
|
2916
|
-
{
|
|
2917
|
-
className: `text-xs transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-gray-600"}`,
|
|
2918
|
-
children: currentFeedback.customerCompany
|
|
2919
|
-
}
|
|
2920
|
-
)
|
|
2687
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-title text-base mb-1", children: currentFeedback.customerName }),
|
|
2688
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-link text-sm", children: currentFeedback.customerTitle }),
|
|
2689
|
+
currentFeedback.customerCompany && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-text text-xs mt-1", children: currentFeedback.customerCompany })
|
|
2921
2690
|
] })
|
|
2922
2691
|
] })
|
|
2923
2692
|
]
|
|
@@ -2928,8 +2697,11 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
|
|
|
2928
2697
|
"button",
|
|
2929
2698
|
{
|
|
2930
2699
|
onClick: () => setCurrentIndex(index2),
|
|
2931
|
-
|
|
2932
|
-
|
|
2700
|
+
"aria-label": t("customerFeedback.switchToFeedback", { number: index2 + 1 }) || `Chuyển đến phản hồi ${index2 + 1}`,
|
|
2701
|
+
className: `
|
|
2702
|
+
w-2.5 h-2.5 rounded-full transition-all duration-300
|
|
2703
|
+
${index2 === currentIndex ? "bg-brand-secondary" : "bg-surface hover:bg-brand-primary"}
|
|
2704
|
+
`
|
|
2933
2705
|
},
|
|
2934
2706
|
index2
|
|
2935
2707
|
)) })
|
|
@@ -3183,28 +2955,12 @@ const TextWithTitleSection = ({ section, data, isDarkMode }) => {
|
|
|
3183
2955
|
const textItems = (data == null ? void 0 : data.sectionDataBindingItems) || [];
|
|
3184
2956
|
const title = ((_a = textItems[0]) == null ? void 0 : _a.value) || "";
|
|
3185
2957
|
const descriptions = textItems.slice(1);
|
|
3186
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
|
|
3187
|
-
title && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", {
|
|
3188
|
-
fontSize: "36px",
|
|
3189
|
-
fontWeight: "700",
|
|
3190
|
-
color: isDarkMode ? "#ffffff" : "#000000",
|
|
3191
|
-
marginBottom: "16px",
|
|
3192
|
-
lineHeight: "1.2",
|
|
3193
|
-
textAlign: "left",
|
|
3194
|
-
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'
|
|
3195
|
-
}, children: title }),
|
|
2958
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-6xl mx-auto", children: [
|
|
2959
|
+
title && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title font-black mb-4 leading-tight text-left text-main", children: title }),
|
|
3196
2960
|
descriptions.map((item, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3197
2961
|
"div",
|
|
3198
2962
|
{
|
|
3199
|
-
|
|
3200
|
-
fontSize: "16px",
|
|
3201
|
-
lineHeight: "1.6",
|
|
3202
|
-
color: isDarkMode ? "#9ca3af" : "#6b7280",
|
|
3203
|
-
textAlign: "left",
|
|
3204
|
-
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
|
|
3205
|
-
fontWeight: "400",
|
|
3206
|
-
marginBottom: index2 < descriptions.length - 1 ? "16px" : "0"
|
|
3207
|
-
},
|
|
2963
|
+
className: `text-body leading-relaxed text-left font-normal text-muted ${index2 < descriptions.length - 1 ? "mb-4" : ""}`,
|
|
3208
2964
|
children: item.value
|
|
3209
2965
|
},
|
|
3210
2966
|
item.id || index2
|
|
@@ -3213,19 +2969,10 @@ const TextWithTitleSection = ({ section, data, isDarkMode }) => {
|
|
|
3213
2969
|
};
|
|
3214
2970
|
const TextSection = ({ data, isDarkMode }) => {
|
|
3215
2971
|
const textItems = (data == null ? void 0 : data.sectionDataBindingItems) || [];
|
|
3216
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", {
|
|
2972
|
+
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(
|
|
3217
2973
|
"div",
|
|
3218
2974
|
{
|
|
3219
|
-
|
|
3220
|
-
padding: "0",
|
|
3221
|
-
marginBottom: "20px",
|
|
3222
|
-
fontSize: "28px",
|
|
3223
|
-
fontWeight: "700",
|
|
3224
|
-
lineHeight: "1.3",
|
|
3225
|
-
color: isDarkMode ? "#f9fafb" : "#111827",
|
|
3226
|
-
textAlign: "left",
|
|
3227
|
-
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'
|
|
3228
|
-
},
|
|
2975
|
+
className: "mb-5 text-subtitle font-black leading-snug text-left text-main",
|
|
3229
2976
|
children: item.value
|
|
3230
2977
|
},
|
|
3231
2978
|
item.id || index2
|
|
@@ -3272,25 +3019,23 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3272
3019
|
};
|
|
3273
3020
|
return icons[iconName] || Settings;
|
|
3274
3021
|
};
|
|
3275
|
-
const
|
|
3022
|
+
const getColorStyles = (index2) => {
|
|
3276
3023
|
const isCyan = index2 % 2 === 0;
|
|
3277
3024
|
if (isCyan) {
|
|
3278
3025
|
return {
|
|
3279
|
-
|
|
3280
|
-
|
|
3281
|
-
|
|
3282
|
-
|
|
3283
|
-
|
|
3284
|
-
iconBg: "bg-cyan-500/20"
|
|
3026
|
+
gradient: "linear-gradient(to right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
|
|
3027
|
+
border: "var(--gradient-brand-soft-start)",
|
|
3028
|
+
line: "var(--gradient-brand-soft-start)",
|
|
3029
|
+
iconBg: "var(--gradient-brand-soft-start)",
|
|
3030
|
+
shadow: "rgba(59, 130, 246, 0.2)"
|
|
3285
3031
|
};
|
|
3286
3032
|
}
|
|
3287
3033
|
return {
|
|
3288
|
-
|
|
3289
|
-
|
|
3290
|
-
|
|
3291
|
-
|
|
3292
|
-
|
|
3293
|
-
iconBg: "bg-purple-500/20"
|
|
3034
|
+
gradient: "linear-gradient(to right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
|
|
3035
|
+
border: "var(--gradient-accent-soft-start)",
|
|
3036
|
+
line: "var(--gradient-accent-soft-start)",
|
|
3037
|
+
iconBg: "var(--gradient-accent-soft-start)",
|
|
3038
|
+
shadow: "rgba(139, 92, 246, 0.2)"
|
|
3294
3039
|
};
|
|
3295
3040
|
};
|
|
3296
3041
|
const calculateAngles = (count) => {
|
|
@@ -3300,12 +3045,13 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3300
3045
|
};
|
|
3301
3046
|
const angles = calculateAngles(modules.length);
|
|
3302
3047
|
if (isMobile) {
|
|
3303
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
3048
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "w-full p-4 relative overflow-hidden bg-section-soft", children: [
|
|
3304
3049
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 overflow-hidden pointer-events-none opacity-20", children: [...Array(50)].map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3305
3050
|
"div",
|
|
3306
3051
|
{
|
|
3307
|
-
className:
|
|
3052
|
+
className: "absolute rounded-full bg-brand-primary",
|
|
3308
3053
|
style: {
|
|
3054
|
+
opacity: 0.2,
|
|
3309
3055
|
width: Math.random() * 3 + 1 + "px",
|
|
3310
3056
|
height: Math.random() * 3 + 1 + "px",
|
|
3311
3057
|
top: Math.random() * 100 + "%",
|
|
@@ -3326,26 +3072,38 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3326
3072
|
to { opacity: 1; transform: translateY(0); }
|
|
3327
3073
|
}
|
|
3328
3074
|
` }),
|
|
3329
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
3330
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-
|
|
3331
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-
|
|
3075
|
+
/* @__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: [
|
|
3076
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-inverse mb-1 tracking-wide", children: diagramName }),
|
|
3077
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-inverse", children: diagramDescription })
|
|
3332
3078
|
] }),
|
|
3333
3079
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-3", children: modules.map((module, index2) => {
|
|
3334
3080
|
const Icon2 = getIconComponent(module.icon);
|
|
3335
|
-
const colors =
|
|
3081
|
+
const colors = getColorStyles(index2);
|
|
3336
3082
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3337
3083
|
"a",
|
|
3338
3084
|
{
|
|
3339
3085
|
href: module.url || "#",
|
|
3340
|
-
className:
|
|
3086
|
+
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",
|
|
3341
3087
|
style: {
|
|
3088
|
+
background: colors.gradient,
|
|
3089
|
+
borderColor: colors.border,
|
|
3342
3090
|
animation: `slideUp 0.5s ease-out ${index2 * 0.1}s both`
|
|
3343
3091
|
},
|
|
3344
3092
|
children: [
|
|
3345
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3093
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3094
|
+
"div",
|
|
3095
|
+
{
|
|
3096
|
+
className: "flex-shrink-0 p-3 rounded-xl border",
|
|
3097
|
+
style: {
|
|
3098
|
+
backgroundColor: `${colors.iconBg}33`,
|
|
3099
|
+
borderColor: colors.border
|
|
3100
|
+
},
|
|
3101
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "w-6 h-6 text-inverse", strokeWidth: 2 })
|
|
3102
|
+
}
|
|
3103
|
+
),
|
|
3346
3104
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1", children: [
|
|
3347
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-
|
|
3348
|
-
module.description && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-
|
|
3105
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-inverse text-small tracking-wide mb-1", children: module.name }),
|
|
3106
|
+
module.description && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-inverse text-caption", children: module.description })
|
|
3349
3107
|
] })
|
|
3350
3108
|
]
|
|
3351
3109
|
},
|
|
@@ -3354,12 +3112,13 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3354
3112
|
}) })
|
|
3355
3113
|
] });
|
|
3356
3114
|
}
|
|
3357
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
3115
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "section-wrapper w-full py-24 px-4 sm:px-8 relative overflow-visible bg-section-soft", children: [
|
|
3358
3116
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 overflow-hidden pointer-events-none", children: [...Array(100)].map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3359
3117
|
"div",
|
|
3360
3118
|
{
|
|
3361
|
-
className:
|
|
3119
|
+
className: "absolute rounded-full bg-brand-primary",
|
|
3362
3120
|
style: {
|
|
3121
|
+
opacity: isDarkMode ? 0.2 : 0.1,
|
|
3363
3122
|
width: Math.random() * 4 + 1 + "px",
|
|
3364
3123
|
height: Math.random() * 4 + 1 + "px",
|
|
3365
3124
|
top: Math.random() * 100 + "%",
|
|
@@ -3370,11 +3129,26 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3370
3129
|
},
|
|
3371
3130
|
i
|
|
3372
3131
|
)) }),
|
|
3373
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
|
|
3377
|
-
|
|
3132
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3133
|
+
"div",
|
|
3134
|
+
{
|
|
3135
|
+
className: "absolute inset-0",
|
|
3136
|
+
style: { opacity: isDarkMode ? 0.1 : 0.05 },
|
|
3137
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: "100%", height: "100%", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
3138
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("defs", { children: /* @__PURE__ */ jsxRuntimeExports.jsx("pattern", { id: "grid", width: "40", height: "40", patternUnits: "userSpaceOnUse", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3139
|
+
"path",
|
|
3140
|
+
{
|
|
3141
|
+
d: "M 40 0 L 0 0 0 40",
|
|
3142
|
+
fill: "none",
|
|
3143
|
+
stroke: "var(--brand-primary)",
|
|
3144
|
+
strokeWidth: "0.5"
|
|
3145
|
+
}
|
|
3146
|
+
) }) }),
|
|
3147
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("rect", { width: "100%", height: "100%", fill: "url(#grid)" })
|
|
3148
|
+
] })
|
|
3149
|
+
}
|
|
3150
|
+
),
|
|
3151
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "absolute inset-0 w-full h-full pointer-events-none", style: { opacity: isDarkMode ? 0.3 : 0.2 }, children: [
|
|
3378
3152
|
/* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "0", y1: "20%", x2: "100%", y2: "20%", stroke: "url(#grad1)", strokeWidth: "1", strokeDasharray: "10 5", className: "animate-pulse" }),
|
|
3379
3153
|
/* @__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" } }),
|
|
3380
3154
|
/* @__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" } }),
|
|
@@ -3383,20 +3157,20 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3383
3157
|
/* @__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" } }),
|
|
3384
3158
|
/* @__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" } }),
|
|
3385
3159
|
/* @__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" } }),
|
|
3386
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "15%", cy: "20%", r: "3", fill: "
|
|
3387
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "35%", cy: "40%", r: "3", fill: "
|
|
3388
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "65%", cy: "60%", r: "3", fill: "
|
|
3389
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "85%", cy: "80%", r: "3", fill: "
|
|
3160
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "15%", cy: "20%", r: "3", fill: "var(--gradient-brand-soft-start)", opacity: "0.6", className: "animate-pulse" }),
|
|
3161
|
+
/* @__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" } }),
|
|
3162
|
+
/* @__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" } }),
|
|
3163
|
+
/* @__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" } }),
|
|
3390
3164
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("defs", { children: [
|
|
3391
3165
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "grad1", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
|
|
3392
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "
|
|
3393
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "
|
|
3394
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "
|
|
3166
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--gradient-brand-soft-start)", stopOpacity: 0 } }),
|
|
3167
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-brand-soft-start)", stopOpacity: 1 } }),
|
|
3168
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-brand-soft-start)", stopOpacity: 0 } })
|
|
3395
3169
|
] }),
|
|
3396
3170
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "grad2", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
|
|
3397
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "
|
|
3398
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "
|
|
3399
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "
|
|
3171
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--gradient-accent-soft-start)", stopOpacity: 0 } }),
|
|
3172
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-accent-soft-start)", stopOpacity: 1 } }),
|
|
3173
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-accent-soft-start)", stopOpacity: 0 } })
|
|
3400
3174
|
] })
|
|
3401
3175
|
] })
|
|
3402
3176
|
] }),
|
|
@@ -3457,41 +3231,77 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3457
3231
|
}
|
|
3458
3232
|
}
|
|
3459
3233
|
` }),
|
|
3460
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "diagram-container relative w-full max-w-5xl mx-auto h-[
|
|
3234
|
+
/* @__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: [
|
|
3461
3235
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2", children: [
|
|
3462
3236
|
/* @__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: [
|
|
3463
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3464
|
-
|
|
3237
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3238
|
+
"div",
|
|
3239
|
+
{
|
|
3240
|
+
className: "absolute inset-0 rounded-full border-2 animate-pulse-ring",
|
|
3241
|
+
style: { borderColor: "var(--brand-primary)", opacity: 0.3 }
|
|
3242
|
+
}
|
|
3243
|
+
),
|
|
3244
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3245
|
+
"div",
|
|
3246
|
+
{
|
|
3247
|
+
className: "absolute inset-4 rounded-full border-2 animate-pulse-ring",
|
|
3248
|
+
style: {
|
|
3249
|
+
borderColor: "var(--brand-secondary)",
|
|
3250
|
+
opacity: 0.3,
|
|
3251
|
+
animationDelay: "0.5s"
|
|
3252
|
+
}
|
|
3253
|
+
}
|
|
3254
|
+
)
|
|
3465
3255
|
] }),
|
|
3466
3256
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative animate-float", children: [
|
|
3467
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3468
|
-
|
|
3469
|
-
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
top: "50%",
|
|
3474
|
-
left: "50%",
|
|
3475
|
-
transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-125px)`
|
|
3476
|
-
}
|
|
3257
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3258
|
+
"div",
|
|
3259
|
+
{
|
|
3260
|
+
className: "w-64 h-64 rounded-full border-8 flex items-center justify-center backdrop-blur-sm shadow-2xl bg-surface",
|
|
3261
|
+
style: {
|
|
3262
|
+
borderColor: "var(--border-color)"
|
|
3477
3263
|
},
|
|
3478
|
-
|
|
3479
|
-
|
|
3480
|
-
|
|
3481
|
-
|
|
3482
|
-
|
|
3483
|
-
|
|
3484
|
-
|
|
3485
|
-
|
|
3486
|
-
|
|
3487
|
-
|
|
3264
|
+
children: [
|
|
3265
|
+
/* @__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(
|
|
3266
|
+
"div",
|
|
3267
|
+
{
|
|
3268
|
+
className: "absolute w-3 h-3 rounded-full shadow-lg bg-brand-primary",
|
|
3269
|
+
style: {
|
|
3270
|
+
boxShadow: "0 0 10px var(--brand-primary)",
|
|
3271
|
+
top: "50%",
|
|
3272
|
+
left: "50%",
|
|
3273
|
+
transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-125px)`
|
|
3274
|
+
}
|
|
3275
|
+
},
|
|
3276
|
+
angle
|
|
3277
|
+
)) }),
|
|
3278
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3279
|
+
"div",
|
|
3280
|
+
{
|
|
3281
|
+
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",
|
|
3282
|
+
style: {
|
|
3283
|
+
borderColor: isDarkMode ? "var(--gradient-brand-soft-start)" : "rgba(255, 255, 255, 0.4)"
|
|
3284
|
+
},
|
|
3285
|
+
children: [
|
|
3286
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-gradient-to-br from-white/10 to-transparent" }),
|
|
3287
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center relative z-10 px-4", children: [
|
|
3288
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-inverse mb-2 tracking-wide", children: diagramName }),
|
|
3289
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-inverse", children: diagramDescription })
|
|
3290
|
+
] })
|
|
3291
|
+
]
|
|
3292
|
+
}
|
|
3293
|
+
)
|
|
3294
|
+
]
|
|
3295
|
+
}
|
|
3296
|
+
),
|
|
3488
3297
|
modules.map((module, i) => {
|
|
3489
3298
|
const angle = angles[i];
|
|
3490
3299
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3491
3300
|
"div",
|
|
3492
3301
|
{
|
|
3493
|
-
className:
|
|
3302
|
+
className: "absolute w-4 h-4 rounded-full border-2 shadow-lg animate-pulse bg-muted",
|
|
3494
3303
|
style: {
|
|
3304
|
+
borderColor: "var(--border-color)",
|
|
3495
3305
|
top: "50%",
|
|
3496
3306
|
left: "50%",
|
|
3497
3307
|
transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-132px)`,
|
|
@@ -3504,7 +3314,7 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3504
3314
|
] })
|
|
3505
3315
|
] }),
|
|
3506
3316
|
/* @__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) => {
|
|
3507
|
-
const colors =
|
|
3317
|
+
const colors = getColorStyles(index2);
|
|
3508
3318
|
const angle = angles[index2] * Math.PI / 180;
|
|
3509
3319
|
const circleRadius = 132;
|
|
3510
3320
|
const moduleRadius = 360;
|
|
@@ -3545,7 +3355,7 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3545
3355
|
}) }),
|
|
3546
3356
|
modules.map((module, index2) => {
|
|
3547
3357
|
const Icon2 = getIconComponent(module.icon);
|
|
3548
|
-
const colors =
|
|
3358
|
+
const colors = getColorStyles(index2);
|
|
3549
3359
|
const angle = angles[index2] * Math.PI / 180;
|
|
3550
3360
|
const radius = 360;
|
|
3551
3361
|
const x = Math.cos(angle) * radius;
|
|
@@ -3567,19 +3377,11 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3567
3377
|
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3568
3378
|
"div",
|
|
3569
3379
|
{
|
|
3570
|
-
className: `
|
|
3571
|
-
${colors.bg} backdrop-blur-md rounded-full
|
|
3572
|
-
border-2 ${colors.border} ${colors.glow}
|
|
3573
|
-
px-5 py-3 flex items-center gap-3
|
|
3574
|
-
shadow-xl ${colors.hoverGlow}
|
|
3575
|
-
transition-all duration-300
|
|
3576
|
-
group-hover:scale-110 group-hover:-translate-y-3 group-hover:shadow-2xl
|
|
3577
|
-
cursor-pointer
|
|
3578
|
-
relative
|
|
3579
|
-
${isRightSide ? "flex-row-reverse" : "flex-row"}
|
|
3580
|
-
`,
|
|
3380
|
+
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"}`,
|
|
3581
3381
|
style: {
|
|
3582
|
-
|
|
3382
|
+
background: colors.gradient,
|
|
3383
|
+
borderColor: colors.border,
|
|
3384
|
+
boxShadow: `0 10px 40px ${colors.shadow}`,
|
|
3583
3385
|
width: "240px",
|
|
3584
3386
|
height: "56px",
|
|
3585
3387
|
minWidth: "240px",
|
|
@@ -3587,14 +3389,49 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3587
3389
|
},
|
|
3588
3390
|
children: [
|
|
3589
3391
|
/* @__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" }),
|
|
3590
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3591
|
-
|
|
3592
|
-
|
|
3593
|
-
|
|
3594
|
-
|
|
3595
|
-
|
|
3596
|
-
|
|
3597
|
-
|
|
3392
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3393
|
+
"div",
|
|
3394
|
+
{
|
|
3395
|
+
className: "absolute inset-0 rounded-full border-2 opacity-0 group-hover:opacity-100 transition-all duration-300 scale-110 blur-sm",
|
|
3396
|
+
style: { borderColor: colors.border }
|
|
3397
|
+
}
|
|
3398
|
+
),
|
|
3399
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3400
|
+
"div",
|
|
3401
|
+
{
|
|
3402
|
+
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",
|
|
3403
|
+
style: {
|
|
3404
|
+
backgroundColor: `${colors.iconBg}33`,
|
|
3405
|
+
borderColor: colors.border
|
|
3406
|
+
},
|
|
3407
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "w-5 h-5 text-inverse", strokeWidth: 2 })
|
|
3408
|
+
}
|
|
3409
|
+
),
|
|
3410
|
+
/* @__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 }),
|
|
3411
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3412
|
+
"div",
|
|
3413
|
+
{
|
|
3414
|
+
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"}`,
|
|
3415
|
+
style: {
|
|
3416
|
+
borderColor: "var(--border-color)",
|
|
3417
|
+
maxHeight: "120px",
|
|
3418
|
+
overflowY: "auto"
|
|
3419
|
+
},
|
|
3420
|
+
children: [
|
|
3421
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-small text-main", children: module.name }),
|
|
3422
|
+
module.description && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-caption text-muted mt-1", children: module.description }),
|
|
3423
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3424
|
+
"div",
|
|
3425
|
+
{
|
|
3426
|
+
className: "absolute top-full left-1/2 -translate-x-1/2 -mt-px border-4 border-transparent",
|
|
3427
|
+
style: {
|
|
3428
|
+
borderTopColor: isDarkMode ? "var(--bg-surface)" : "var(--bg-body)"
|
|
3429
|
+
}
|
|
3430
|
+
}
|
|
3431
|
+
)
|
|
3432
|
+
]
|
|
3433
|
+
}
|
|
3434
|
+
)
|
|
3598
3435
|
]
|
|
3599
3436
|
}
|
|
3600
3437
|
)
|
|
@@ -3602,24 +3439,82 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3602
3439
|
module.id
|
|
3603
3440
|
);
|
|
3604
3441
|
}),
|
|
3605
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3606
|
-
|
|
3607
|
-
|
|
3442
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3443
|
+
"div",
|
|
3444
|
+
{
|
|
3445
|
+
className: "absolute bottom-12 right-12 sm:bottom-16 sm:right-20 opacity-40 text-brand-secondary",
|
|
3446
|
+
style: { animation: "rotate 10s linear infinite" },
|
|
3447
|
+
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" }) })
|
|
3448
|
+
}
|
|
3449
|
+
),
|
|
3450
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3451
|
+
"div",
|
|
3452
|
+
{
|
|
3453
|
+
className: "absolute top-12 left-12 w-16 h-16 border-2 rounded-lg animate-pulse border-brand-primary",
|
|
3454
|
+
style: {
|
|
3455
|
+
opacity: 0.3,
|
|
3456
|
+
animation: "rotate 8s linear infinite reverse"
|
|
3457
|
+
}
|
|
3458
|
+
}
|
|
3459
|
+
),
|
|
3460
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3461
|
+
"div",
|
|
3462
|
+
{
|
|
3463
|
+
className: "absolute top-20 right-16 w-12 h-12 border-2 rounded-full animate-pulse border-brand-secondary",
|
|
3464
|
+
style: {
|
|
3465
|
+
opacity: 0.3
|
|
3466
|
+
}
|
|
3467
|
+
}
|
|
3468
|
+
)
|
|
3608
3469
|
] })
|
|
3609
3470
|
] });
|
|
3610
3471
|
};
|
|
3611
|
-
const MindMapNode = ({ id, icon: Icon2, text, color, position, delay = 0, onDragStart, isDragging, onClick, description }) => {
|
|
3472
|
+
const MindMapNode = ({ id, icon: Icon2, text, color, position, delay = 0, onDragStart, isDragging, onClick, description, isDarkMode }) => {
|
|
3612
3473
|
const [isHovered, setIsHovered] = useState(false);
|
|
3613
3474
|
const [dragStartPos, setDragStartPos] = useState(null);
|
|
3614
3475
|
const [hasMoved, setHasMoved] = useState(false);
|
|
3615
|
-
const
|
|
3616
|
-
|
|
3617
|
-
|
|
3618
|
-
|
|
3619
|
-
|
|
3620
|
-
|
|
3621
|
-
|
|
3476
|
+
const getColorStyles = (colorName) => {
|
|
3477
|
+
const styles = {
|
|
3478
|
+
blue: {
|
|
3479
|
+
gradient: "linear-gradient(to bottom right, var(--brand-primary), var(--brand-primary))",
|
|
3480
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
|
|
3481
|
+
border: "var(--brand-primary)",
|
|
3482
|
+
shadowColor: "var(--brand-primary)"
|
|
3483
|
+
},
|
|
3484
|
+
teal: {
|
|
3485
|
+
gradient: "linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
|
|
3486
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-brand-strong-start), var(--gradient-brand-strong-end))",
|
|
3487
|
+
border: "var(--gradient-brand-soft-start)",
|
|
3488
|
+
shadowColor: "var(--gradient-brand-soft-start)"
|
|
3489
|
+
},
|
|
3490
|
+
purple: {
|
|
3491
|
+
gradient: "linear-gradient(to bottom right, var(--brand-secondary), var(--gradient-accent-soft-start))",
|
|
3492
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
|
|
3493
|
+
border: "var(--brand-secondary)",
|
|
3494
|
+
shadowColor: "var(--brand-secondary)"
|
|
3495
|
+
},
|
|
3496
|
+
orange: {
|
|
3497
|
+
gradient: "linear-gradient(to bottom right, var(--gradient-accent-strong-start), var(--gradient-accent-strong-end))",
|
|
3498
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
|
|
3499
|
+
border: "var(--gradient-accent-strong-start)",
|
|
3500
|
+
shadowColor: "var(--gradient-accent-strong-start)"
|
|
3501
|
+
},
|
|
3502
|
+
cyan: {
|
|
3503
|
+
gradient: "linear-gradient(to bottom right, var(--gradient-brand-strong-start), var(--gradient-brand-strong-end))",
|
|
3504
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
|
|
3505
|
+
border: "var(--gradient-brand-strong-start)",
|
|
3506
|
+
shadowColor: "var(--gradient-brand-strong-start)"
|
|
3507
|
+
},
|
|
3508
|
+
indigo: {
|
|
3509
|
+
gradient: "linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
|
|
3510
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-accent-strong-start), var(--gradient-accent-strong-end))",
|
|
3511
|
+
border: "var(--gradient-accent-soft-start)",
|
|
3512
|
+
shadowColor: "var(--gradient-accent-soft-start)"
|
|
3513
|
+
}
|
|
3514
|
+
};
|
|
3515
|
+
return styles[colorName] || styles.blue;
|
|
3622
3516
|
};
|
|
3517
|
+
const colorStyle = getColorStyles(color);
|
|
3623
3518
|
const handleMouseDown = (e) => {
|
|
3624
3519
|
setDragStartPos({ x: e.clientX, y: e.clientY });
|
|
3625
3520
|
setHasMoved(false);
|
|
@@ -3702,12 +3597,45 @@ const MindMapNode = ({ id, icon: Icon2, text, color, position, delay = 0, onDrag
|
|
|
3702
3597
|
onTouchMove: handleTouchMove,
|
|
3703
3598
|
onTouchEnd: handleTouchEnd,
|
|
3704
3599
|
children: [
|
|
3705
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3706
|
-
|
|
3707
|
-
|
|
3708
|
-
|
|
3709
|
-
|
|
3710
|
-
|
|
3600
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3601
|
+
"div",
|
|
3602
|
+
{
|
|
3603
|
+
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",
|
|
3604
|
+
style: {
|
|
3605
|
+
background: isHovered || isDragging ? colorStyle.gradientHover : colorStyle.gradient,
|
|
3606
|
+
borderColor: colorStyle.border + "80",
|
|
3607
|
+
boxShadow: `0 10px 40px ${colorStyle.shadowColor}4D`,
|
|
3608
|
+
transform: isHovered || isDragging ? "scale(1.1)" : "scale(1)",
|
|
3609
|
+
filter: isHovered || isDragging ? "brightness(1.1)" : "brightness(1)",
|
|
3610
|
+
rotate: isDragging ? "2deg" : "0deg"
|
|
3611
|
+
},
|
|
3612
|
+
children: [
|
|
3613
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "w-4 h-4 flex-shrink-0 text-inverse" }),
|
|
3614
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-inverse text-small whitespace-nowrap", children: text })
|
|
3615
|
+
]
|
|
3616
|
+
}
|
|
3617
|
+
),
|
|
3618
|
+
isDragging && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3619
|
+
"div",
|
|
3620
|
+
{
|
|
3621
|
+
className: "absolute inset-0 rounded-2xl blur-xl animate-pulse",
|
|
3622
|
+
style: {
|
|
3623
|
+
background: "rgba(255, 255, 255, 0.1)",
|
|
3624
|
+
transform: "scale(1.5)"
|
|
3625
|
+
}
|
|
3626
|
+
}
|
|
3627
|
+
),
|
|
3628
|
+
(isHovered || isDragging) && description && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3629
|
+
"div",
|
|
3630
|
+
{
|
|
3631
|
+
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"}`,
|
|
3632
|
+
style: {
|
|
3633
|
+
borderColor: "var(--border-color)",
|
|
3634
|
+
opacity: 0.95
|
|
3635
|
+
},
|
|
3636
|
+
children: description
|
|
3637
|
+
}
|
|
3638
|
+
)
|
|
3711
3639
|
]
|
|
3712
3640
|
}
|
|
3713
3641
|
);
|
|
@@ -3928,49 +3856,108 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
|
|
|
3928
3856
|
"div",
|
|
3929
3857
|
{
|
|
3930
3858
|
ref: containerRef,
|
|
3931
|
-
className:
|
|
3932
|
-
style: {
|
|
3859
|
+
className: "mind-map-container relative w-full h-screen overflow-hidden bg-section-soft",
|
|
3860
|
+
style: {
|
|
3861
|
+
touchAction: "none"
|
|
3862
|
+
},
|
|
3933
3863
|
children: [
|
|
3934
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3935
|
-
|
|
3936
|
-
|
|
3937
|
-
|
|
3938
|
-
|
|
3939
|
-
|
|
3864
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3865
|
+
"div",
|
|
3866
|
+
{
|
|
3867
|
+
className: "absolute inset-0",
|
|
3868
|
+
style: { opacity: isDarkMode ? 0.3 : 0.2 },
|
|
3869
|
+
children: [
|
|
3870
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3871
|
+
"div",
|
|
3872
|
+
{
|
|
3873
|
+
className: "absolute inset-0 bg-gradient-brand",
|
|
3874
|
+
style: {
|
|
3875
|
+
opacity: 0.2
|
|
3876
|
+
}
|
|
3877
|
+
}
|
|
3878
|
+
),
|
|
3879
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3880
|
+
"div",
|
|
3881
|
+
{
|
|
3882
|
+
className: "absolute inset-0 bg-gradient-accent",
|
|
3883
|
+
style: {
|
|
3884
|
+
opacity: 0.1
|
|
3885
|
+
}
|
|
3886
|
+
}
|
|
3887
|
+
)
|
|
3888
|
+
]
|
|
3889
|
+
}
|
|
3890
|
+
),
|
|
3891
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3892
|
+
"div",
|
|
3893
|
+
{
|
|
3894
|
+
className: "absolute inset-0 pointer-events-none",
|
|
3895
|
+
style: { opacity: isDarkMode ? 0.6 : 0.4 },
|
|
3896
|
+
children: [...Array(150)].map((_, i) => {
|
|
3897
|
+
const colors = ["bg-brand-primary", "bg-brand-secondary"];
|
|
3898
|
+
const randomColor = colors[Math.floor(Math.random() * colors.length)];
|
|
3899
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3900
|
+
"div",
|
|
3901
|
+
{
|
|
3902
|
+
className: `absolute rounded-full ${randomColor}`,
|
|
3903
|
+
style: {
|
|
3904
|
+
left: `${Math.random() * 100}%`,
|
|
3905
|
+
top: `${Math.random() * 100}%`,
|
|
3906
|
+
width: `${Math.random() * 3 + 1}px`,
|
|
3907
|
+
height: `${Math.random() * 3 + 1}px`,
|
|
3908
|
+
animationName: "twinkle",
|
|
3909
|
+
animationDelay: `${Math.random() * 5}s`,
|
|
3910
|
+
animationDuration: `${4 + Math.random() * 6}s`,
|
|
3911
|
+
animationIterationCount: "infinite",
|
|
3912
|
+
animationTimingFunction: "ease-in-out"
|
|
3913
|
+
}
|
|
3914
|
+
},
|
|
3915
|
+
i
|
|
3916
|
+
);
|
|
3917
|
+
})
|
|
3918
|
+
}
|
|
3919
|
+
),
|
|
3920
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3940
3921
|
"div",
|
|
3941
3922
|
{
|
|
3942
|
-
className: "absolute
|
|
3943
|
-
style: {
|
|
3944
|
-
|
|
3945
|
-
|
|
3946
|
-
|
|
3947
|
-
|
|
3948
|
-
|
|
3949
|
-
|
|
3950
|
-
|
|
3951
|
-
|
|
3952
|
-
|
|
3953
|
-
|
|
3954
|
-
|
|
3955
|
-
|
|
3956
|
-
|
|
3957
|
-
backgroundSize: "40px 40px"
|
|
3958
|
-
} }) }),
|
|
3923
|
+
className: "absolute inset-0 pointer-events-none",
|
|
3924
|
+
style: { opacity: isDarkMode ? 0.1 : 0.05 },
|
|
3925
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3926
|
+
"div",
|
|
3927
|
+
{
|
|
3928
|
+
className: "absolute inset-0",
|
|
3929
|
+
style: {
|
|
3930
|
+
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)",
|
|
3931
|
+
backgroundSize: "40px 40px",
|
|
3932
|
+
opacity: 0.15
|
|
3933
|
+
}
|
|
3934
|
+
}
|
|
3935
|
+
)
|
|
3936
|
+
}
|
|
3937
|
+
),
|
|
3959
3938
|
/* @__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: [
|
|
3960
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3939
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3940
|
+
"div",
|
|
3941
|
+
{
|
|
3942
|
+
className: "absolute inset-0 blur-3xl w-20 h-20 sm:w-32 sm:h-32 bg-gradient-brand",
|
|
3943
|
+
style: {
|
|
3944
|
+
opacity: 0.2
|
|
3945
|
+
}
|
|
3946
|
+
}
|
|
3947
|
+
),
|
|
3961
3948
|
/* @__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" }) })
|
|
3962
3949
|
] }) }),
|
|
3963
3950
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "absolute inset-0 w-full h-full pointer-events-none", style: { zIndex: 1 }, children: [
|
|
3964
3951
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("defs", { children: [
|
|
3965
3952
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "circuit-gradient", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
|
|
3966
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", stopColor: "
|
|
3967
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", stopColor: "
|
|
3968
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", stopColor: "
|
|
3953
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--brand-primary)", stopOpacity: 0.6 } }),
|
|
3954
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-brand-soft-start)", stopOpacity: 0.9 } }),
|
|
3955
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-brand-soft-end)", stopOpacity: 0.6 } })
|
|
3969
3956
|
] }),
|
|
3970
3957
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "sparkle-gradient", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
|
|
3971
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", stopColor: "
|
|
3972
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", stopColor: "
|
|
3973
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", stopColor: "
|
|
3958
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--brand-primary)" } }),
|
|
3959
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-brand-soft-start)" } }),
|
|
3960
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-brand-soft-end)" } })
|
|
3974
3961
|
] }),
|
|
3975
3962
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("filter", { id: "glow", children: [
|
|
3976
3963
|
/* @__PURE__ */ jsxRuntimeExports.jsx("feGaussianBlur", { stdDeviation: "4", result: "coloredBlur" }),
|
|
@@ -3985,11 +3972,11 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
|
|
|
3985
3972
|
"path",
|
|
3986
3973
|
{
|
|
3987
3974
|
d: line.path,
|
|
3988
|
-
stroke: "
|
|
3975
|
+
stroke: "var(--gradient-brand-soft-start)",
|
|
3989
3976
|
strokeWidth: "6",
|
|
3990
3977
|
fill: "none",
|
|
3991
3978
|
className: "transition-all duration-200",
|
|
3992
|
-
style: { filter: "blur(8px)" }
|
|
3979
|
+
style: { filter: "blur(8px)", opacity: 0.2 }
|
|
3993
3980
|
}
|
|
3994
3981
|
),
|
|
3995
3982
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -4021,7 +4008,8 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
|
|
|
4021
4008
|
delay: node.delay,
|
|
4022
4009
|
onDragStart: handleNodeDragStart,
|
|
4023
4010
|
isDragging: draggingNodeId === node.id,
|
|
4024
|
-
onClick: handleNodeClick
|
|
4011
|
+
onClick: handleNodeClick,
|
|
4012
|
+
isDarkMode
|
|
4025
4013
|
},
|
|
4026
4014
|
node.id
|
|
4027
4015
|
)) }),
|
|
@@ -4055,15 +4043,52 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
|
|
|
4055
4043
|
},
|
|
4056
4044
|
onTouchEnd: () => setIsDragging(false),
|
|
4057
4045
|
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
4058
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4059
|
-
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
|
|
4063
|
-
|
|
4064
|
-
|
|
4065
|
-
|
|
4066
|
-
|
|
4046
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4047
|
+
"div",
|
|
4048
|
+
{
|
|
4049
|
+
className: "absolute inset-0 rounded-full blur-2xl bg-brand-primary",
|
|
4050
|
+
style: {
|
|
4051
|
+
opacity: 0.3,
|
|
4052
|
+
transform: "scale(1.5)"
|
|
4053
|
+
}
|
|
4054
|
+
}
|
|
4055
|
+
),
|
|
4056
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4057
|
+
"div",
|
|
4058
|
+
{
|
|
4059
|
+
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",
|
|
4060
|
+
style: {
|
|
4061
|
+
borderColor: "var(--brand-primary)",
|
|
4062
|
+
borderOpacity: 0.5,
|
|
4063
|
+
transform: isDragging ? "scale(1.1)" : "scale(1)",
|
|
4064
|
+
transition: "transform 0.3s ease"
|
|
4065
|
+
},
|
|
4066
|
+
children: [
|
|
4067
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4068
|
+
"div",
|
|
4069
|
+
{
|
|
4070
|
+
className: "p-2 sm:p-3 rounded-xl backdrop-blur-sm",
|
|
4071
|
+
style: { backgroundColor: "rgba(255, 255, 255, 0.25)" },
|
|
4072
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(Briefcase, { className: "w-5 h-5 sm:w-7 sm:h-7 text-inverse" })
|
|
4073
|
+
}
|
|
4074
|
+
),
|
|
4075
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center", children: [
|
|
4076
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-inverse text-body sm:text-subtitle", children: diagramName }),
|
|
4077
|
+
diagramDescription && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-inverse text-caption sm:text-small opacity-90", children: diagramDescription })
|
|
4078
|
+
] })
|
|
4079
|
+
]
|
|
4080
|
+
}
|
|
4081
|
+
),
|
|
4082
|
+
!isDragging && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4083
|
+
"div",
|
|
4084
|
+
{
|
|
4085
|
+
className: `absolute -bottom-8 left-1/2 transform -translate-x-1/2 text-caption whitespace-nowrap ${isDarkMode ? "text-brand-primary" : "text-brand-secondary"}`,
|
|
4086
|
+
style: {
|
|
4087
|
+
opacity: 0.6
|
|
4088
|
+
},
|
|
4089
|
+
children: safeT("diagram.dragToMove")
|
|
4090
|
+
}
|
|
4091
|
+
)
|
|
4067
4092
|
] })
|
|
4068
4093
|
}
|
|
4069
4094
|
),
|
|
@@ -4083,13 +4108,12 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
|
|
|
4083
4108
|
animation: fadeIn 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
|
4084
4109
|
opacity: 0;
|
|
4085
4110
|
}
|
|
4086
|
-
.animate-twinkle { animation: twinkle 5s ease-in-out infinite; }
|
|
4087
4111
|
` })
|
|
4088
4112
|
]
|
|
4089
4113
|
}
|
|
4090
4114
|
);
|
|
4091
4115
|
};
|
|
4092
|
-
const FaqItem = ({ faq, index: index2, isActive, onToggle,
|
|
4116
|
+
const FaqItem = ({ faq, index: index2, isActive, onToggle, t }) => {
|
|
4093
4117
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4094
4118
|
"div",
|
|
4095
4119
|
{
|
|
@@ -4098,79 +4122,69 @@ const FaqItem = ({ faq, index: index2, isActive, onToggle, isDarkMode, t }) => {
|
|
|
4098
4122
|
animationFillMode: "both"
|
|
4099
4123
|
},
|
|
4100
4124
|
className: "animate-slide-up",
|
|
4101
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4102
|
-
|
|
4103
|
-
|
|
4104
|
-
|
|
4105
|
-
|
|
4106
|
-
|
|
4107
|
-
|
|
4108
|
-
|
|
4109
|
-
|
|
4110
|
-
children: [
|
|
4111
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4112
|
-
"button",
|
|
4113
|
-
{
|
|
4114
|
-
onClick: onToggle,
|
|
4115
|
-
className: `
|
|
4116
|
-
w-full px-6 py-5 text-left flex items-start justify-between gap-4
|
|
4117
|
-
transition-all duration-300
|
|
4118
|
-
${isDarkMode ? "hover:bg-gray-700/30" : "hover:bg-gray-50/50"}
|
|
4119
|
-
rounded-xl
|
|
4120
|
-
group
|
|
4121
|
-
`,
|
|
4122
|
-
children: [
|
|
4123
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `
|
|
4124
|
-
text-lg font-semibold flex-1 transition-colors duration-300
|
|
4125
|
-
${isActive ? isDarkMode ? "text-blue-400" : "text-blue-600" : isDarkMode ? "text-white group-hover:text-blue-300" : "text-gray-900 group-hover:text-blue-600"}
|
|
4126
|
-
`, children: faq.question }),
|
|
4127
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `
|
|
4125
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", style: { padding: 0 }, children: [
|
|
4126
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4127
|
+
"button",
|
|
4128
|
+
{
|
|
4129
|
+
onClick: onToggle,
|
|
4130
|
+
className: "w-full px-6 py-5 text-left flex items-start justify-between gap-4 rounded-xl group",
|
|
4131
|
+
children: [
|
|
4132
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "card-title flex-1", children: faq.question }),
|
|
4133
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `
|
|
4128
4134
|
flex-shrink-0 w-10 h-10 rounded-full flex items-center justify-center
|
|
4129
4135
|
transition-all duration-500 transform
|
|
4130
|
-
${isActive ?
|
|
4136
|
+
${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"}
|
|
4131
4137
|
`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: `w-5 h-5 transition-transform duration-500 ${isActive ? "rotate-180" : ""}` }) })
|
|
4132
|
-
|
|
4133
|
-
|
|
4134
|
-
|
|
4135
|
-
|
|
4138
|
+
]
|
|
4139
|
+
}
|
|
4140
|
+
),
|
|
4141
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4142
|
+
"div",
|
|
4143
|
+
{
|
|
4144
|
+
style: {
|
|
4145
|
+
maxHeight: isActive ? "500px" : "0",
|
|
4146
|
+
opacity: isActive ? "1" : "0",
|
|
4147
|
+
overflow: "hidden",
|
|
4148
|
+
transition: "all 500ms ease-in-out"
|
|
4149
|
+
},
|
|
4150
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4136
4151
|
"div",
|
|
4137
4152
|
{
|
|
4138
|
-
className:
|
|
4139
|
-
|
|
4140
|
-
|
|
4141
|
-
|
|
4142
|
-
|
|
4143
|
-
|
|
4144
|
-
|
|
4145
|
-
|
|
4146
|
-
|
|
4147
|
-
|
|
4148
|
-
|
|
4149
|
-
|
|
4153
|
+
className: "px-6 pb-6 pt-2",
|
|
4154
|
+
style: {
|
|
4155
|
+
transform: isActive ? "translateY(0)" : "translateY(-10px)",
|
|
4156
|
+
transition: "transform 500ms ease-in-out"
|
|
4157
|
+
},
|
|
4158
|
+
children: [
|
|
4159
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4160
|
+
"div",
|
|
4161
|
+
{
|
|
4162
|
+
className: "h-px w-full mb-4",
|
|
4163
|
+
style: {
|
|
4164
|
+
background: "linear-gradient(to right, transparent, var(--border-color), transparent)"
|
|
4165
|
+
}
|
|
4166
|
+
}
|
|
4167
|
+
),
|
|
4168
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-text leading-relaxed", children: faq.answer }),
|
|
4150
4169
|
faq.url && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4151
4170
|
"a",
|
|
4152
4171
|
{
|
|
4153
4172
|
href: faq.url,
|
|
4154
4173
|
target: "_blank",
|
|
4155
4174
|
rel: "noopener noreferrer",
|
|
4156
|
-
className:
|
|
4157
|
-
inline-flex items-center gap-2 mt-5 px-4 py-2 rounded-lg text-sm font-medium
|
|
4158
|
-
transition-all duration-300 transform hover:scale-105
|
|
4159
|
-
${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"}
|
|
4160
|
-
group/link
|
|
4161
|
-
`,
|
|
4175
|
+
className: "card-link mt-4",
|
|
4162
4176
|
children: [
|
|
4163
4177
|
(t == null ? void 0 : t("faq.learn_more")) || "Learn more",
|
|
4164
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-4 h-4
|
|
4178
|
+
/* @__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" }) })
|
|
4165
4179
|
]
|
|
4166
4180
|
}
|
|
4167
4181
|
)
|
|
4168
|
-
]
|
|
4182
|
+
]
|
|
4169
4183
|
}
|
|
4170
4184
|
)
|
|
4171
|
-
|
|
4172
|
-
|
|
4173
|
-
)
|
|
4185
|
+
}
|
|
4186
|
+
)
|
|
4187
|
+
] })
|
|
4174
4188
|
}
|
|
4175
4189
|
);
|
|
4176
4190
|
};
|
|
@@ -4188,22 +4202,39 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
|
|
|
4188
4202
|
const sectionTitle = (section == null ? void 0 : section.title) || "...";
|
|
4189
4203
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(SectionWrapper, { isDarkMode, children: [
|
|
4190
4204
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-4xl mx-auto", children: [
|
|
4191
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center mb-6 animate-fade-in", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4192
|
-
|
|
4193
|
-
${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"}
|
|
4194
|
-
transform hover:scale-110 transition-all duration-300
|
|
4195
|
-
`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4196
|
-
"svg",
|
|
4205
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center mb-6 animate-fade-in", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4206
|
+
"div",
|
|
4197
4207
|
{
|
|
4198
|
-
className: "w-
|
|
4199
|
-
|
|
4200
|
-
|
|
4201
|
-
|
|
4208
|
+
className: "w-10 h-10 rounded-lg flex items-center justify-center",
|
|
4209
|
+
style: {
|
|
4210
|
+
background: "linear-gradient(to bottom right, var(--brand-primary), var(--brand-secondary))",
|
|
4211
|
+
boxShadow: "0 10px 15px -3px var(--card-shadow)",
|
|
4212
|
+
transition: "transform 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
4213
|
+
},
|
|
4214
|
+
onMouseEnter: (e) => e.currentTarget.style.transform = "scale(1.1)",
|
|
4215
|
+
onMouseLeave: (e) => e.currentTarget.style.transform = "scale(1)",
|
|
4216
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4217
|
+
"svg",
|
|
4218
|
+
{
|
|
4219
|
+
className: "w-6 h-6 text-white",
|
|
4220
|
+
fill: "currentColor",
|
|
4221
|
+
viewBox: "0 0 24 24",
|
|
4222
|
+
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" })
|
|
4223
|
+
}
|
|
4224
|
+
)
|
|
4202
4225
|
}
|
|
4203
|
-
) })
|
|
4226
|
+
) }),
|
|
4204
4227
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-12 animate-fade-in", children: [
|
|
4205
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className:
|
|
4206
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4228
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-main mb-3", children: sectionTitle }),
|
|
4229
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4230
|
+
"div",
|
|
4231
|
+
{
|
|
4232
|
+
className: "h-1 w-20 mx-auto rounded-full",
|
|
4233
|
+
style: {
|
|
4234
|
+
background: "linear-gradient(to right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))"
|
|
4235
|
+
}
|
|
4236
|
+
}
|
|
4237
|
+
)
|
|
4207
4238
|
] }),
|
|
4208
4239
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-4", children: faqs.map((faq, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4209
4240
|
FaqItem,
|
|
@@ -4212,7 +4243,6 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
|
|
|
4212
4243
|
index: index2,
|
|
4213
4244
|
isActive: activeIndex === index2,
|
|
4214
4245
|
onToggle: () => toggleFaq(index2),
|
|
4215
|
-
isDarkMode,
|
|
4216
4246
|
t
|
|
4217
4247
|
},
|
|
4218
4248
|
faq.id || index2
|
|
@@ -4229,7 +4259,6 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
|
|
|
4229
4259
|
transform: translateY(0);
|
|
4230
4260
|
}
|
|
4231
4261
|
}
|
|
4232
|
-
|
|
4233
4262
|
@keyframes slide-up {
|
|
4234
4263
|
from {
|
|
4235
4264
|
opacity: 0;
|
|
@@ -4240,11 +4269,9 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
|
|
|
4240
4269
|
transform: translateY(0);
|
|
4241
4270
|
}
|
|
4242
4271
|
}
|
|
4243
|
-
|
|
4244
4272
|
.animate-fade-in {
|
|
4245
4273
|
animation: fade-in 0.8s ease-out;
|
|
4246
4274
|
}
|
|
4247
|
-
|
|
4248
4275
|
.animate-slide-up {
|
|
4249
4276
|
animation: slide-up 0.6s ease-out;
|
|
4250
4277
|
}
|
|
@@ -4285,141 +4312,147 @@ const PageHighlightSection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
|
4285
4312
|
return () => clearInterval(interval);
|
|
4286
4313
|
}, [highlightData.length]);
|
|
4287
4314
|
const gradientClasses = [
|
|
4288
|
-
"
|
|
4289
|
-
"from-purple-600 to-pink-600",
|
|
4290
|
-
"from-blue-500 to-purple-500",
|
|
4291
|
-
"from-purple-500 to-pink-500",
|
|
4292
|
-
"from-emerald-600 to-teal-600",
|
|
4293
|
-
"from-orange-500 to-red-500"
|
|
4315
|
+
"btn-primary"
|
|
4294
4316
|
];
|
|
4295
4317
|
const defaultImage = "https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=1200&h=800&fit=crop&q=80";
|
|
4296
4318
|
if (!highlightData.length) {
|
|
4297
4319
|
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: [
|
|
4298
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: `text-lg font-semibold mb-2
|
|
4299
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
4320
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: `text-lg font-semibold mb-2 text-main`, children: t("highlight.noData.title") || "Chưa có dữ liệu" }),
|
|
4321
|
+
/* @__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." })
|
|
4300
4322
|
] }) });
|
|
4301
4323
|
}
|
|
4302
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4303
|
-
|
|
4304
|
-
|
|
4305
|
-
|
|
4306
|
-
|
|
4307
|
-
|
|
4308
|
-
|
|
4309
|
-
|
|
4310
|
-
|
|
4311
|
-
|
|
4312
|
-
|
|
4313
|
-
|
|
4314
|
-
|
|
4315
|
-
|
|
4316
|
-
|
|
4317
|
-
|
|
4318
|
-
|
|
4319
|
-
|
|
4320
|
-
|
|
4321
|
-
|
|
4322
|
-
|
|
4323
|
-
|
|
4324
|
-
|
|
4325
|
-
|
|
4326
|
-
|
|
4327
|
-
|
|
4328
|
-
|
|
4329
|
-
|
|
4330
|
-
|
|
4331
|
-
|
|
4332
|
-
|
|
4333
|
-
|
|
4334
|
-
|
|
4335
|
-
|
|
4336
|
-
|
|
4337
|
-
|
|
4338
|
-
|
|
4339
|
-
|
|
4340
|
-
|
|
4341
|
-
|
|
4342
|
-
|
|
4343
|
-
|
|
4344
|
-
|
|
4345
|
-
|
|
4346
|
-
|
|
4347
|
-
|
|
4348
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4349
|
-
"
|
|
4350
|
-
|
|
4351
|
-
|
|
4352
|
-
|
|
4353
|
-
|
|
4354
|
-
|
|
4355
|
-
|
|
4356
|
-
|
|
4357
|
-
|
|
4358
|
-
|
|
4359
|
-
] }, idx)) }),
|
|
4360
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4361
|
-
"a",
|
|
4362
|
-
{
|
|
4363
|
-
href: item.slug,
|
|
4364
|
-
rel: "noopener noreferrer",
|
|
4365
|
-
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`,
|
|
4366
|
-
onClick: (e) => {
|
|
4367
|
-
if (!e.ctrlKey && !e.metaKey && e.button !== 1) {
|
|
4368
|
-
e.preventDefault();
|
|
4369
|
-
window.location.href = item.slug;
|
|
4324
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4325
|
+
"section",
|
|
4326
|
+
{
|
|
4327
|
+
className: "relative overflow-hidden",
|
|
4328
|
+
style: {
|
|
4329
|
+
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)"
|
|
4330
|
+
},
|
|
4331
|
+
children: [
|
|
4332
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute inset-0 overflow-hidden pointer-events-none", children: [
|
|
4333
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4334
|
+
"div",
|
|
4335
|
+
{
|
|
4336
|
+
className: "absolute top-20 right-10 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob",
|
|
4337
|
+
style: {
|
|
4338
|
+
backgroundColor: isDarkMode ? "var(--gradient-brand-soft-start)" : "var(--gradient-brand-soft-start)"
|
|
4339
|
+
}
|
|
4340
|
+
}
|
|
4341
|
+
),
|
|
4342
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4343
|
+
"div",
|
|
4344
|
+
{
|
|
4345
|
+
className: "absolute top-40 -left-20 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob animation-delay-2000",
|
|
4346
|
+
style: {
|
|
4347
|
+
backgroundColor: isDarkMode ? "var(--gradient-accent-soft-start)" : "var(--gradient-accent-soft-start)",
|
|
4348
|
+
animationDelay: "2s"
|
|
4349
|
+
}
|
|
4350
|
+
}
|
|
4351
|
+
),
|
|
4352
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4353
|
+
"div",
|
|
4354
|
+
{
|
|
4355
|
+
className: "absolute -bottom-20 right-40 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob animation-delay-4000",
|
|
4356
|
+
style: {
|
|
4357
|
+
backgroundColor: isDarkMode ? "var(--gradient-accent-soft-end)" : "var(--gradient-accent-soft-end)",
|
|
4358
|
+
animationDelay: "4s"
|
|
4359
|
+
}
|
|
4360
|
+
}
|
|
4361
|
+
)
|
|
4362
|
+
] }),
|
|
4363
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative w-full px-4 sm:px-6 lg:px-8 py-16 sm:py-24", children: [
|
|
4364
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative w-full", children: highlightData.map((item, index2) => {
|
|
4365
|
+
const color = gradientClasses[index2 % gradientClasses.length];
|
|
4366
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4367
|
+
"div",
|
|
4368
|
+
{
|
|
4369
|
+
className: `transition-opacity duration-700 ${activeTab === index2 ? "opacity-100" : "opacity-0 absolute inset-0 pointer-events-none"}`,
|
|
4370
|
+
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: [
|
|
4371
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative h-[280px] lg:h-full overflow-hidden group", children: [
|
|
4372
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4373
|
+
"img",
|
|
4374
|
+
{
|
|
4375
|
+
src: item.image || defaultImage,
|
|
4376
|
+
alt: item.title,
|
|
4377
|
+
className: "w-full h-full object-cover transition-transform duration-700 group-hover:scale-110",
|
|
4378
|
+
onError: (e) => {
|
|
4379
|
+
e.target.src = defaultImage;
|
|
4380
|
+
}
|
|
4370
4381
|
}
|
|
4371
|
-
|
|
4372
|
-
|
|
4373
|
-
|
|
4374
|
-
|
|
4375
|
-
|
|
4376
|
-
|
|
4377
|
-
|
|
4378
|
-
|
|
4379
|
-
|
|
4380
|
-
|
|
4381
|
-
|
|
4382
|
-
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
|
|
4382
|
+
),
|
|
4383
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 bg-gradient-to-br ${color} opacity-20` }),
|
|
4384
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent" })
|
|
4385
|
+
] }),
|
|
4386
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-5 lg:p-8 flex flex-col justify-center", children: [
|
|
4387
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-3xl lg:text-4xl font-black mb-3 text-gradient-brand", children: item.title }),
|
|
4388
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mb-6 text-muted", children: item.description }),
|
|
4389
|
+
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: [
|
|
4390
|
+
/* @__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" }) }) }),
|
|
4391
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-muted group-hover:text-main font-medium text-xs transition-colors", children: feature })
|
|
4392
|
+
] }, idx)) }),
|
|
4393
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4394
|
+
"a",
|
|
4395
|
+
{
|
|
4396
|
+
href: item.slug,
|
|
4397
|
+
rel: "noopener noreferrer",
|
|
4398
|
+
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`,
|
|
4399
|
+
onClick: (e) => {
|
|
4400
|
+
if (!e.ctrlKey && !e.metaKey && e.button !== 1) {
|
|
4401
|
+
e.preventDefault();
|
|
4402
|
+
window.location.href = item.slug;
|
|
4403
|
+
}
|
|
4404
|
+
},
|
|
4405
|
+
children: [
|
|
4406
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "relative z-10 flex items-center justify-center gap-2", children: [
|
|
4407
|
+
t("highlight.cta") || "Khám phá",
|
|
4408
|
+
" ",
|
|
4409
|
+
item.title,
|
|
4410
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4411
|
+
"svg",
|
|
4386
4412
|
{
|
|
4387
|
-
|
|
4388
|
-
|
|
4389
|
-
|
|
4390
|
-
|
|
4413
|
+
className: "w-5 h-5 group-hover:translate-x-1 transition-transform",
|
|
4414
|
+
fill: "none",
|
|
4415
|
+
viewBox: "0 0 24 24",
|
|
4416
|
+
stroke: "currentColor",
|
|
4417
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4418
|
+
"path",
|
|
4419
|
+
{
|
|
4420
|
+
strokeLinecap: "round",
|
|
4421
|
+
strokeLinejoin: "round",
|
|
4422
|
+
strokeWidth: 2,
|
|
4423
|
+
d: "M17 8l4 4m0 0l-4 4m4-4H3"
|
|
4424
|
+
}
|
|
4425
|
+
)
|
|
4391
4426
|
}
|
|
4392
4427
|
)
|
|
4393
|
-
}
|
|
4394
|
-
|
|
4395
|
-
|
|
4396
|
-
|
|
4397
|
-
|
|
4398
|
-
}
|
|
4399
|
-
)
|
|
4400
|
-
|
|
4401
|
-
|
|
4402
|
-
|
|
4403
|
-
|
|
4404
|
-
|
|
4405
|
-
|
|
4406
|
-
|
|
4407
|
-
|
|
4408
|
-
|
|
4409
|
-
|
|
4410
|
-
|
|
4411
|
-
|
|
4412
|
-
|
|
4413
|
-
|
|
4414
|
-
|
|
4415
|
-
|
|
4416
|
-
|
|
4417
|
-
|
|
4418
|
-
|
|
4419
|
-
)
|
|
4420
|
-
|
|
4421
|
-
] }),
|
|
4422
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("style", { jsx: true, children: `
|
|
4428
|
+
] }),
|
|
4429
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-white/20 transform scale-x-0 group-hover:scale-x-100 transition-transform origin-left" })
|
|
4430
|
+
]
|
|
4431
|
+
}
|
|
4432
|
+
)
|
|
4433
|
+
] })
|
|
4434
|
+
] }) })
|
|
4435
|
+
},
|
|
4436
|
+
index2
|
|
4437
|
+
);
|
|
4438
|
+
}) }),
|
|
4439
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-wrap justify-center gap-4 mt-12", children: highlightData.map((item, index2) => {
|
|
4440
|
+
const color = gradientClasses[index2 % gradientClasses.length];
|
|
4441
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4442
|
+
"button",
|
|
4443
|
+
{
|
|
4444
|
+
onClick: () => setActiveTab(index2),
|
|
4445
|
+
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"}`,
|
|
4446
|
+
children: [
|
|
4447
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "relative z-10", children: item.title }),
|
|
4448
|
+
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` })
|
|
4449
|
+
]
|
|
4450
|
+
},
|
|
4451
|
+
index2
|
|
4452
|
+
);
|
|
4453
|
+
}) })
|
|
4454
|
+
] }),
|
|
4455
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("style", { jsx: true, children: `
|
|
4423
4456
|
@keyframes blob {
|
|
4424
4457
|
0%, 100% {
|
|
4425
4458
|
transform: translate(0px, 0px) scale(1);
|
|
@@ -4456,7 +4489,9 @@ const PageHighlightSection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
|
4456
4489
|
background-size: 50px 50px;
|
|
4457
4490
|
}
|
|
4458
4491
|
` })
|
|
4459
|
-
|
|
4492
|
+
]
|
|
4493
|
+
}
|
|
4494
|
+
);
|
|
4460
4495
|
};
|
|
4461
4496
|
const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl = "" }) => {
|
|
4462
4497
|
var _a;
|
|
@@ -4481,23 +4516,9 @@ const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4481
4516
|
maxWidth: "1400px",
|
|
4482
4517
|
margin: "0 auto"
|
|
4483
4518
|
}, children: [
|
|
4484
|
-
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
|
|
4485
|
-
|
|
4486
|
-
|
|
4487
|
-
}, children: [
|
|
4488
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { style: {
|
|
4489
|
-
fontSize: "36px",
|
|
4490
|
-
fontWeight: "700",
|
|
4491
|
-
marginBottom: "16px",
|
|
4492
|
-
color: isDarkMode ? "#f9fafb" : "#4b5563"
|
|
4493
|
-
}, children: sectionTitle }),
|
|
4494
|
-
sectionDescription && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: {
|
|
4495
|
-
fontSize: "16px",
|
|
4496
|
-
lineHeight: "1.6",
|
|
4497
|
-
color: isDarkMode ? "#d1d5db" : "#6b7280",
|
|
4498
|
-
maxWidth: "900px",
|
|
4499
|
-
margin: "0 auto"
|
|
4500
|
-
}, children: sectionDescription })
|
|
4519
|
+
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-12", children: [
|
|
4520
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-main mb-4", children: sectionTitle }),
|
|
4521
|
+
sectionDescription && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-muted max-w-3xl mx-auto", children: sectionDescription })
|
|
4501
4522
|
] }),
|
|
4502
4523
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4503
4524
|
display: "grid",
|
|
@@ -4510,30 +4531,13 @@ const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4510
4531
|
"a",
|
|
4511
4532
|
{
|
|
4512
4533
|
href: page.slug,
|
|
4534
|
+
className: "card",
|
|
4513
4535
|
style: {
|
|
4514
|
-
backgroundColor: isDarkMode ? "#1f2937" : "#ffffff",
|
|
4515
|
-
borderRadius: "12px",
|
|
4516
|
-
padding: "32px 20px",
|
|
4517
|
-
cursor: "pointer",
|
|
4518
|
-
transition: "all 0.3s",
|
|
4519
|
-
border: `1px solid ${isDarkMode ? "#374151" : "#e5e7eb"}`,
|
|
4520
|
-
boxShadow: isDarkMode ? "0 4px 6px -1px rgba(0, 0, 0, 0.3)" : "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
|
|
4521
|
-
display: "flex",
|
|
4522
|
-
flexDirection: "column",
|
|
4523
4536
|
alignItems: "center",
|
|
4524
4537
|
textAlign: "center",
|
|
4525
4538
|
gap: "16px",
|
|
4526
|
-
textDecoration: "none"
|
|
4527
|
-
|
|
4528
|
-
onMouseEnter: (e) => {
|
|
4529
|
-
e.currentTarget.style.transform = "translateY(-8px)";
|
|
4530
|
-
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)";
|
|
4531
|
-
e.currentTarget.style.borderColor = "#361985ff";
|
|
4532
|
-
},
|
|
4533
|
-
onMouseLeave: (e) => {
|
|
4534
|
-
e.currentTarget.style.transform = "translateY(0)";
|
|
4535
|
-
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)";
|
|
4536
|
-
e.currentTarget.style.borderColor = isDarkMode ? "#374151" : "#e5e7eb";
|
|
4539
|
+
textDecoration: "none",
|
|
4540
|
+
padding: "32px 20px"
|
|
4537
4541
|
},
|
|
4538
4542
|
children: [
|
|
4539
4543
|
iconUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
@@ -4554,13 +4558,7 @@ const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4554
4558
|
}
|
|
4555
4559
|
}
|
|
4556
4560
|
) }),
|
|
4557
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { style: {
|
|
4558
|
-
fontSize: "16px",
|
|
4559
|
-
fontWeight: "600",
|
|
4560
|
-
color: isDarkMode ? "#f9fafb" : "#4b5563",
|
|
4561
|
-
margin: 0,
|
|
4562
|
-
lineHeight: "1.4"
|
|
4563
|
-
}, children: page.title })
|
|
4561
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-body", style: { margin: 0 }, children: page.title })
|
|
4564
4562
|
]
|
|
4565
4563
|
},
|
|
4566
4564
|
page.id
|
|
@@ -4624,44 +4622,25 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4624
4622
|
maxWidth: "1280px",
|
|
4625
4623
|
margin: "0 auto"
|
|
4626
4624
|
}, children: [
|
|
4627
|
-
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", {
|
|
4628
|
-
fontSize: "28px",
|
|
4629
|
-
fontWeight: "700",
|
|
4630
|
-
marginBottom: "40px",
|
|
4631
|
-
color: isDarkMode ? "#f9fafb" : "#1e40af",
|
|
4632
|
-
textTransform: "uppercase",
|
|
4633
|
-
letterSpacing: "0.5px"
|
|
4634
|
-
}, children: sectionTitle }),
|
|
4625
|
+
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-main mb-10 uppercase tracking-wide", children: sectionTitle }),
|
|
4635
4626
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4636
4627
|
display: "flex",
|
|
4637
4628
|
flexDirection: "column",
|
|
4638
4629
|
gap: "24px"
|
|
4639
4630
|
}, children: visiblePages.map((page) => {
|
|
4640
|
-
var _a2, _b;
|
|
4631
|
+
var _a2, _b, _c;
|
|
4641
4632
|
const mainImage = ((_b = (_a2 = page.pageImages) == null ? void 0 : _a2.find((img) => img.isMain)) == null ? void 0 : _b.url) || page.icon;
|
|
4642
4633
|
const imageUrl = getImageUrl(mainImage);
|
|
4643
4634
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4644
4635
|
"a",
|
|
4645
4636
|
{
|
|
4646
4637
|
href: page.slug,
|
|
4638
|
+
className: "card",
|
|
4647
4639
|
style: {
|
|
4648
|
-
|
|
4640
|
+
flexDirection: "row",
|
|
4649
4641
|
gap: "20px",
|
|
4650
|
-
backgroundColor: isDarkMode ? "#1f2937" : "#ffffff",
|
|
4651
|
-
borderRadius: "8px",
|
|
4652
|
-
overflow: "hidden",
|
|
4653
|
-
cursor: "pointer",
|
|
4654
|
-
transition: "all 0.2s",
|
|
4655
|
-
border: `1px solid ${isDarkMode ? "#374151" : "#e5e7eb"}`,
|
|
4656
|
-
padding: "16px",
|
|
4657
4642
|
textDecoration: "none"
|
|
4658
4643
|
},
|
|
4659
|
-
onMouseEnter: (e) => {
|
|
4660
|
-
e.currentTarget.style.backgroundColor = isDarkMode ? "#374151" : "#f9fafb";
|
|
4661
|
-
},
|
|
4662
|
-
onMouseLeave: (e) => {
|
|
4663
|
-
e.currentTarget.style.backgroundColor = isDarkMode ? "#1f2937" : "#ffffff";
|
|
4664
|
-
},
|
|
4665
4644
|
children: [
|
|
4666
4645
|
imageUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4667
4646
|
width: "200px",
|
|
@@ -4681,33 +4660,10 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4681
4660
|
}
|
|
4682
4661
|
}
|
|
4683
4662
|
) }),
|
|
4684
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
|
|
4685
|
-
|
|
4686
|
-
|
|
4687
|
-
|
|
4688
|
-
justifyContent: "center"
|
|
4689
|
-
}, children: [
|
|
4690
|
-
page.tagKeys && page.tagKeys.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4691
|
-
fontSize: "12px",
|
|
4692
|
-
fontWeight: "600",
|
|
4693
|
-
color: isDarkMode ? "#60a5fa" : "#2563eb",
|
|
4694
|
-
marginBottom: "8px",
|
|
4695
|
-
textTransform: "uppercase",
|
|
4696
|
-
letterSpacing: "0.5px"
|
|
4697
|
-
}, children: page.tagKeys[0].key }),
|
|
4698
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { style: {
|
|
4699
|
-
fontSize: "18px",
|
|
4700
|
-
fontWeight: "700",
|
|
4701
|
-
marginBottom: "8px",
|
|
4702
|
-
color: isDarkMode ? "#f9fafb" : "#1f2937",
|
|
4703
|
-
lineHeight: "1.4"
|
|
4704
|
-
}, children: page.title }),
|
|
4705
|
-
page.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: {
|
|
4706
|
-
fontSize: "14px",
|
|
4707
|
-
lineHeight: "1.6",
|
|
4708
|
-
color: isDarkMode ? "#d1d5db" : "#6b7280",
|
|
4709
|
-
margin: 0
|
|
4710
|
-
}, children: page.description })
|
|
4663
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col justify-center flex-1", children: [
|
|
4664
|
+
((_c = page.tagKeys) == null ? void 0 : _c.length) > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-link ", children: page.tagKeys[0].key }),
|
|
4665
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title mb-2 leading-snug", children: page.title }),
|
|
4666
|
+
page.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text m-0", children: page.description })
|
|
4711
4667
|
] }),
|
|
4712
4668
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4713
4669
|
display: "flex",
|
|
@@ -4717,10 +4673,7 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4717
4673
|
ChevronRight,
|
|
4718
4674
|
{
|
|
4719
4675
|
size: 20,
|
|
4720
|
-
|
|
4721
|
-
color: isDarkMode ? "#9ca3af" : "#d1d5db",
|
|
4722
|
-
transition: "color 0.2s"
|
|
4723
|
-
}
|
|
4676
|
+
className: "card-text"
|
|
4724
4677
|
}
|
|
4725
4678
|
) })
|
|
4726
4679
|
]
|
|
@@ -4732,6 +4685,7 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4732
4685
|
"button",
|
|
4733
4686
|
{
|
|
4734
4687
|
onClick: handleLoadMore,
|
|
4688
|
+
className: "btn-primary",
|
|
4735
4689
|
style: {
|
|
4736
4690
|
display: "inline-flex",
|
|
4737
4691
|
alignItems: "center",
|
|
@@ -4740,20 +4694,9 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4740
4694
|
fontSize: "16px",
|
|
4741
4695
|
fontWeight: "600",
|
|
4742
4696
|
color: "#fff",
|
|
4743
|
-
backgroundColor: "#361985ff",
|
|
4744
4697
|
border: "none",
|
|
4745
4698
|
borderRadius: "9999px",
|
|
4746
|
-
cursor: "pointer"
|
|
4747
|
-
transition: "all 0.3s",
|
|
4748
|
-
boxShadow: "0 4px 6px -1px rgba(37, 99, 235, 0.3)"
|
|
4749
|
-
},
|
|
4750
|
-
onMouseEnter: (e) => {
|
|
4751
|
-
e.currentTarget.style.backgroundColor = "#361985ff";
|
|
4752
|
-
e.currentTarget.style.transform = "translateY(-2px)";
|
|
4753
|
-
},
|
|
4754
|
-
onMouseLeave: (e) => {
|
|
4755
|
-
e.currentTarget.style.backgroundColor = "#361985ff";
|
|
4756
|
-
e.currentTarget.style.transform = "translateY(0)";
|
|
4699
|
+
cursor: "pointer"
|
|
4757
4700
|
},
|
|
4758
4701
|
children: [
|
|
4759
4702
|
t("pageChildrenSelect.moreInsights"),
|
|
@@ -4785,12 +4728,7 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4785
4728
|
maxWidth: "1400px",
|
|
4786
4729
|
margin: "0 auto"
|
|
4787
4730
|
}, children: [
|
|
4788
|
-
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", {
|
|
4789
|
-
fontSize: "36px",
|
|
4790
|
-
fontWeight: "700",
|
|
4791
|
-
marginBottom: "50px",
|
|
4792
|
-
color: isDarkMode ? "#f1f5f9" : "#1e293b"
|
|
4793
|
-
}, children: sectionTitle }),
|
|
4731
|
+
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title mb-12 text-main", children: sectionTitle }),
|
|
4794
4732
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4795
4733
|
display: "grid",
|
|
4796
4734
|
gridTemplateColumns: "repeat(auto-fit, minmax(350px, 1fr))",
|
|
@@ -4804,24 +4742,12 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4804
4742
|
"a",
|
|
4805
4743
|
{
|
|
4806
4744
|
href: page.slug,
|
|
4745
|
+
className: "card",
|
|
4807
4746
|
style: {
|
|
4808
|
-
backgroundColor: isDarkMode ? "#1e293b" : "#ffffff",
|
|
4809
|
-
borderRadius: "16px",
|
|
4810
|
-
overflow: "hidden",
|
|
4811
|
-
cursor: "pointer",
|
|
4812
|
-
transition: "all 0.3s",
|
|
4813
|
-
boxShadow: isDarkMode ? "0 4px 6px -1px rgba(0, 0, 0, 0.5)" : "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
|
|
4814
|
-
border: `1px solid ${isDarkMode ? "#334155" : "#e2e8f0"}`,
|
|
4815
4747
|
textDecoration: "none",
|
|
4816
|
-
display: "block"
|
|
4817
|
-
|
|
4818
|
-
|
|
4819
|
-
e.currentTarget.style.transform = "translateY(-8px)";
|
|
4820
|
-
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)";
|
|
4821
|
-
},
|
|
4822
|
-
onMouseLeave: (e) => {
|
|
4823
|
-
e.currentTarget.style.transform = "translateY(0)";
|
|
4824
|
-
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)";
|
|
4748
|
+
display: "block",
|
|
4749
|
+
padding: "0",
|
|
4750
|
+
overflow: "hidden"
|
|
4825
4751
|
},
|
|
4826
4752
|
children: [
|
|
4827
4753
|
imageUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
@@ -4848,26 +4774,13 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4848
4774
|
}
|
|
4849
4775
|
}
|
|
4850
4776
|
) }),
|
|
4851
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
|
|
4852
|
-
|
|
4853
|
-
|
|
4854
|
-
|
|
4855
|
-
fontSize: "20px",
|
|
4856
|
-
fontWeight: "700",
|
|
4857
|
-
marginBottom: "12px",
|
|
4858
|
-
color: isDarkMode ? "#f1f5f9" : "#1e293b",
|
|
4859
|
-
lineHeight: "1.4",
|
|
4860
|
-
minHeight: "56px"
|
|
4777
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { padding: "1.5rem" }, children: [
|
|
4778
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-subtitle", style: {
|
|
4779
|
+
minHeight: "56px",
|
|
4780
|
+
marginBottom: "0.75rem"
|
|
4861
4781
|
}, children: page.title }),
|
|
4862
|
-
page.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: {
|
|
4863
|
-
|
|
4864
|
-
lineHeight: "1.6",
|
|
4865
|
-
color: isDarkMode ? "#cbd5e1" : "#64748b",
|
|
4866
|
-
marginBottom: "16px",
|
|
4867
|
-
display: "-webkit-box",
|
|
4868
|
-
WebkitLineClamp: 2,
|
|
4869
|
-
WebkitBoxOrient: "vertical",
|
|
4870
|
-
overflow: "hidden"
|
|
4782
|
+
page.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text line-clamp-2", style: {
|
|
4783
|
+
marginBottom: "1rem"
|
|
4871
4784
|
}, children: page.description })
|
|
4872
4785
|
] })
|
|
4873
4786
|
]
|
|
@@ -4882,6 +4795,7 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4882
4795
|
"button",
|
|
4883
4796
|
{
|
|
4884
4797
|
onClick: handleLoadMore,
|
|
4798
|
+
className: "btn-primary",
|
|
4885
4799
|
style: {
|
|
4886
4800
|
display: "inline-flex",
|
|
4887
4801
|
alignItems: "center",
|
|
@@ -4890,22 +4804,9 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4890
4804
|
fontSize: "16px",
|
|
4891
4805
|
fontWeight: "600",
|
|
4892
4806
|
color: "#ffffff",
|
|
4893
|
-
backgroundColor: "#361985ff",
|
|
4894
4807
|
border: "none",
|
|
4895
4808
|
borderRadius: "50px",
|
|
4896
|
-
cursor: "pointer"
|
|
4897
|
-
transition: "all 0.3s",
|
|
4898
|
-
boxShadow: "0 4px 6px -1px rgba(239, 68, 68, 0.3)"
|
|
4899
|
-
},
|
|
4900
|
-
onMouseEnter: (e) => {
|
|
4901
|
-
e.currentTarget.style.backgroundColor = "#361985ff";
|
|
4902
|
-
e.currentTarget.style.transform = "translateY(-2px)";
|
|
4903
|
-
e.currentTarget.style.boxShadow = "0 10px 15px -3px rgba(239, 68, 68, 0.4)";
|
|
4904
|
-
},
|
|
4905
|
-
onMouseLeave: (e) => {
|
|
4906
|
-
e.currentTarget.style.backgroundColor = "#361985ff";
|
|
4907
|
-
e.currentTarget.style.transform = "translateY(0)";
|
|
4908
|
-
e.currentTarget.style.boxShadow = "0 4px 6px -1px rgba(239, 68, 68, 0.3)";
|
|
4809
|
+
cursor: "pointer"
|
|
4909
4810
|
},
|
|
4910
4811
|
children: [
|
|
4911
4812
|
t("pageChildrenSelect.moreInsights"),
|