nvis-fe-cms-libs 1.1.42 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/nvis-fe-cms-libs.es.js +1309 -1383
- package/dist/nvis-fe-cms-libs.es.js.map +1 -1
- package/dist/nvis-fe-cms-libs.umd.js +1309 -1383
- 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",
|
|
@@ -669,7 +546,7 @@ const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
|
669
546
|
] }),
|
|
670
547
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative z-10 max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6", children: [
|
|
671
548
|
/* @__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-
|
|
549
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-20 h-20 mx-auto rounded-full bg-gradient-brand p-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
673
550
|
"div",
|
|
674
551
|
{
|
|
675
552
|
className: `w-full h-full rounded-full flex items-center justify-center overflow-hidden ${isDarkMode ? "bg-gray-900" : "bg-white"}`,
|
|
@@ -687,16 +564,10 @@ const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
|
687
564
|
e.target.parentElement.appendChild(fallbackDiv);
|
|
688
565
|
}
|
|
689
566
|
}
|
|
690
|
-
) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-2xl font-bold
|
|
567
|
+
) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-2xl font-bold text-gradient-brand", children: shortName })
|
|
691
568
|
}
|
|
692
569
|
) }),
|
|
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
|
-
)
|
|
570
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-5xl lg:text-6xl font-extrabold tracking-tight mb-4 text-gradient-brand drop-shadow-[0_2px_6px_rgba(0,0,0,0.4)]", children: name })
|
|
700
571
|
] }),
|
|
701
572
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-4xl mx-auto", children: [
|
|
702
573
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -725,32 +596,20 @@ const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
|
725
596
|
),
|
|
726
597
|
/* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid lg:grid-cols-2 gap-12 items-center", children: [
|
|
727
598
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
728
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
729
|
-
"
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
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
|
-
]
|
|
747
|
-
}
|
|
748
|
-
),
|
|
599
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-block px-4 py-2 rounded-full text-sm font-semibold mb-4 bg-surface text-brand-primary border border-[var(--border-color)]", children: [
|
|
600
|
+
"📖 ",
|
|
601
|
+
safeT("aboutCompany.story.badge")
|
|
602
|
+
] }),
|
|
603
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("h2", { className: "text-3xl lg:text-4xl font-bold mb-6 text-main", children: [
|
|
604
|
+
safeT("aboutCompany.story.title"),
|
|
605
|
+
" ",
|
|
606
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-gradient-brand", children: shortName })
|
|
607
|
+
] }),
|
|
749
608
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
750
609
|
"div",
|
|
751
610
|
{
|
|
752
611
|
dangerouslySetInnerHTML: { __html: description },
|
|
753
|
-
className:
|
|
612
|
+
className: "prose max-w-none transition-colors text-muted"
|
|
754
613
|
}
|
|
755
614
|
)
|
|
756
615
|
] }),
|
|
@@ -771,12 +630,12 @@ const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
|
771
630
|
] }) }) })
|
|
772
631
|
] });
|
|
773
632
|
};
|
|
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)) || [];
|
|
633
|
+
const TimelineSection = ({ data, t, section }) => {
|
|
634
|
+
var _a, _b;
|
|
635
|
+
const timelineData = ((_b = (_a = data == null ? void 0 : data.sectionDataBindingItems) == null ? void 0 : _a.filter((item) => item == null ? void 0 : item.data)) == null ? void 0 : _b.map((item) => item.data)) || [];
|
|
777
636
|
const [timelineVisible, setTimelineVisible] = useState([]);
|
|
778
637
|
const timelineRefs = useRef([]);
|
|
779
|
-
const sectionTitle = (section == null ? void 0 : section.title) || "
|
|
638
|
+
const sectionTitle = (section == null ? void 0 : section.title) || "Timeline";
|
|
780
639
|
useEffect(() => {
|
|
781
640
|
setTimelineVisible(new Array(timelineData.length).fill(false));
|
|
782
641
|
}, [timelineData.length]);
|
|
@@ -785,73 +644,38 @@ const TimelineSection = ({ data, t, isDarkMode, section }) => {
|
|
|
785
644
|
(entries) => {
|
|
786
645
|
entries.forEach((entry) => {
|
|
787
646
|
if (entry.isIntersecting) {
|
|
788
|
-
const index2 = timelineRefs.current.findIndex(
|
|
647
|
+
const index2 = timelineRefs.current.findIndex(
|
|
648
|
+
(el) => el === entry.target
|
|
649
|
+
);
|
|
789
650
|
if (index2 !== -1) {
|
|
790
651
|
setTimelineVisible((prev) => {
|
|
791
|
-
const
|
|
792
|
-
|
|
793
|
-
return
|
|
652
|
+
const updated = [...prev];
|
|
653
|
+
updated[index2] = true;
|
|
654
|
+
return updated;
|
|
794
655
|
});
|
|
656
|
+
observer.unobserve(entry.target);
|
|
795
657
|
}
|
|
796
|
-
observer.unobserve(entry.target);
|
|
797
658
|
}
|
|
798
659
|
});
|
|
799
660
|
},
|
|
800
661
|
{ threshold: 0.1 }
|
|
801
662
|
);
|
|
802
663
|
timelineRefs.current.forEach((el) => el && observer.observe(el));
|
|
803
|
-
return () =>
|
|
804
|
-
timelineRefs.current.forEach((el) => el && observer.unobserve(el));
|
|
805
|
-
};
|
|
664
|
+
return () => timelineRefs.current.forEach((el) => el && observer.unobserve(el));
|
|
806
665
|
}, [timelineData.length]);
|
|
807
666
|
if (!timelineData.length) {
|
|
808
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className:
|
|
809
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className:
|
|
810
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
667
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 bg-body", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 text-center", children: [
|
|
668
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-subtitle font-semibold mb-2 text-main", children: t("timeline.noData.title") || "Chưa có dữ liệu" }),
|
|
669
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-muted", children: t("timeline.noData.description") || "Hiện tại chưa có milestone nào được thiết lập." })
|
|
811
670
|
] }) });
|
|
812
671
|
}
|
|
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
|
-
) }),
|
|
672
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
|
|
673
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-block px-4 py-2 rounded-full border border-[var(--border-color)] bg-surface text-subtitle font-semibold text-brand-primary shadow-sm hover:shadow-md transition-all duration-300", children: [
|
|
674
|
+
"📈 ",
|
|
675
|
+
sectionTitle
|
|
676
|
+
] }) }),
|
|
853
677
|
/* @__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-
|
|
678
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-brand rounded-full" }),
|
|
855
679
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-8", children: timelineData.map((milestone, index2) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
856
680
|
"div",
|
|
857
681
|
{
|
|
@@ -859,64 +683,12 @@ const TimelineSection = ({ data, t, isDarkMode, section }) => {
|
|
|
859
683
|
className: `flex items-center transition-all duration-700 ease-out ${index2 % 2 === 0 ? "flex-row" : "flex-row-reverse"} ${timelineVisible[index2] ? "opacity-100 scale-100" : "opacity-0 scale-75"}`,
|
|
860
684
|
style: { transitionDelay: `${index2 * 200}ms` },
|
|
861
685
|
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
|
-
),
|
|
686
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", children: [
|
|
687
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-title text-brand-primary", children: milestone.time }),
|
|
688
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-main mb-1", children: milestone.title }),
|
|
689
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text", children: milestone.description })
|
|
690
|
+
] }) }),
|
|
691
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-6 h-6 bg-gradient-brand rounded-full border-4 border-[var(--bg-body)] shadow-[0_0_10px_5px_rgba(37,99,235,0.4)] flex-shrink-0 z-10 animate-pulse" }),
|
|
920
692
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1" })
|
|
921
693
|
]
|
|
922
694
|
},
|
|
@@ -928,6 +700,7 @@ const TimelineSection = ({ data, t, isDarkMode, section }) => {
|
|
|
928
700
|
const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
|
|
929
701
|
const itemRef = useRef(null);
|
|
930
702
|
const [visible, setVisible] = useState(false);
|
|
703
|
+
const [isHovered, setIsHovered] = useState(false);
|
|
931
704
|
useEffect(() => {
|
|
932
705
|
const observer = new IntersectionObserver(
|
|
933
706
|
(entries) => {
|
|
@@ -949,93 +722,82 @@ const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
|
|
|
949
722
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
950
723
|
"div",
|
|
951
724
|
{
|
|
952
|
-
className: "absolute w-12 h-12
|
|
953
|
-
style: { left: "10%", top: "20%" }
|
|
725
|
+
className: "absolute w-12 h-12 rounded-full",
|
|
726
|
+
style: { left: "10%", top: "20%", background: "rgba(255,255,255,0.05)" }
|
|
954
727
|
}
|
|
955
728
|
),
|
|
956
729
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
957
730
|
"div",
|
|
958
731
|
{
|
|
959
|
-
className: "absolute w-10 h-10
|
|
960
|
-
style: { right: "30%", bottom: "10%" }
|
|
732
|
+
className: "absolute w-10 h-10 rounded-full",
|
|
733
|
+
style: { right: "30%", bottom: "10%", background: "rgba(255,255,255,0.05)" }
|
|
961
734
|
}
|
|
962
735
|
),
|
|
963
736
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
964
737
|
"div",
|
|
965
738
|
{
|
|
966
|
-
className: "absolute w-14 h-14
|
|
967
|
-
style: { left: "20%", bottom: "30%" }
|
|
739
|
+
className: "absolute w-14 h-14 rounded-md",
|
|
740
|
+
style: { left: "20%", bottom: "30%", background: "rgba(255,255,255,0.05)" }
|
|
968
741
|
}
|
|
969
742
|
),
|
|
970
743
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
971
744
|
"div",
|
|
972
745
|
{
|
|
973
|
-
className:
|
|
746
|
+
className: "absolute inset-0 opacity-20",
|
|
747
|
+
style: {
|
|
748
|
+
backgroundImage: 'url("data:image/svg+xml,%3Csvg width=\\"60\\" height=\\"60\\" viewBox=\\"0 0 60 60\\" xmlns=\\"http://www.w3.org/2000/svg\\"%3E%3Cg fill=\\"none\\" fill-rule=\\"evenodd\\"%3E%3Cg fill=\\"%23ffffff\\" fill-opacity=\\"0.05\\"%3E%3Ccircle cx=\\"30\\" cy=\\"30\\" r=\\"2\\"/\\%3E%3C/g\\%3E%3C/g\\%3E%3C/svg\\%3E")'
|
|
749
|
+
}
|
|
974
750
|
}
|
|
975
751
|
)
|
|
976
752
|
] }),
|
|
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
753
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
986
|
-
"
|
|
754
|
+
"div",
|
|
987
755
|
{
|
|
988
|
-
className:
|
|
989
|
-
|
|
756
|
+
className: "w-20 h-14 flex items-center justify-center mb-4 rounded-lg overflow-hidden bg-surface",
|
|
757
|
+
style: {
|
|
758
|
+
borderWidth: "1px",
|
|
759
|
+
borderStyle: "solid",
|
|
760
|
+
borderColor: isHovered ? "var(--brand-primary)" : "var(--border-color)",
|
|
761
|
+
backgroundColor: isHovered ? "var(--bg-body)" : "var(--bg-surface)",
|
|
762
|
+
transition: "all 0.3s ease"
|
|
763
|
+
},
|
|
764
|
+
children: logoSrc ? /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
765
|
+
"img",
|
|
766
|
+
{
|
|
767
|
+
src: logoSrc,
|
|
768
|
+
alt: partner.name,
|
|
769
|
+
className: "max-w-full max-h-full object-contain",
|
|
770
|
+
style: {
|
|
771
|
+
filter: isHovered ? "grayscale(0) opacity(1)" : isDarkMode ? "grayscale(0.3) opacity(0.8)" : "grayscale(0.2) opacity(0.9)",
|
|
772
|
+
transform: isHovered ? "scale(1.05)" : "scale(1)",
|
|
773
|
+
transition: "all 0.3s ease"
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-full h-full bg-gradient-brand flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-white font-bold text-center text-small px-1", children: partner.name }) })
|
|
990
777
|
}
|
|
991
778
|
),
|
|
992
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
993
|
-
|
|
779
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "card-title text-center mb-2", children: partner.name }),
|
|
780
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text text-center mb-2", children: partner.description }),
|
|
781
|
+
partner.websiteUrl && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
782
|
+
"div",
|
|
994
783
|
{
|
|
995
|
-
className:
|
|
996
|
-
|
|
784
|
+
className: "card-link justify-center",
|
|
785
|
+
style: {
|
|
786
|
+
opacity: isHovered ? 1 : 0,
|
|
787
|
+
transform: isHovered ? "translateY(0)" : "translateY(4px)",
|
|
788
|
+
transition: "all 0.3s ease"
|
|
789
|
+
},
|
|
790
|
+
children: [
|
|
791
|
+
t("partners.viewDetails") || "Xem chi tiết",
|
|
792
|
+
" →"
|
|
793
|
+
]
|
|
997
794
|
}
|
|
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
|
-
` })
|
|
795
|
+
)
|
|
1038
796
|
] });
|
|
797
|
+
const baseClasses = `card items-center justify-center transition-all duration-700 ease-out overflow-hidden ${visible ? "opacity-100 scale-100" : "opacity-0 scale-75"}`;
|
|
798
|
+
const dynamicStyles = {
|
|
799
|
+
transitionDelay: `${idx * 150}ms`
|
|
800
|
+
};
|
|
1039
801
|
if (partner.websiteUrl) {
|
|
1040
802
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1041
803
|
"a",
|
|
@@ -1044,10 +806,12 @@ const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
|
|
|
1044
806
|
href: partner.websiteUrl,
|
|
1045
807
|
target: "_blank",
|
|
1046
808
|
rel: "noopener noreferrer",
|
|
1047
|
-
className:
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
809
|
+
className: `${baseClasses} cursor-pointer`,
|
|
810
|
+
style: __spreadProps(__spreadValues({}, dynamicStyles), {
|
|
811
|
+
textDecoration: "none"
|
|
812
|
+
}),
|
|
813
|
+
onMouseEnter: () => setIsHovered(true),
|
|
814
|
+
onMouseLeave: () => setIsHovered(false),
|
|
1051
815
|
children: cardContent
|
|
1052
816
|
}
|
|
1053
817
|
);
|
|
@@ -1056,10 +820,10 @@ const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
|
|
|
1056
820
|
"div",
|
|
1057
821
|
{
|
|
1058
822
|
ref: itemRef,
|
|
1059
|
-
className:
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
823
|
+
className: baseClasses,
|
|
824
|
+
style: dynamicStyles,
|
|
825
|
+
onMouseEnter: () => setIsHovered(true),
|
|
826
|
+
onMouseLeave: () => setIsHovered(false),
|
|
1063
827
|
children: cardContent
|
|
1064
828
|
}
|
|
1065
829
|
);
|
|
@@ -1076,14 +840,14 @@ function useWindowSize$1() {
|
|
|
1076
840
|
}, []);
|
|
1077
841
|
return width;
|
|
1078
842
|
}
|
|
1079
|
-
const PartnersSection = ({ data, t,
|
|
843
|
+
const PartnersSection = ({ data, t, imageBaseUrl = "", section }) => {
|
|
1080
844
|
var _a, _b;
|
|
1081
845
|
const partnersData = ((_b = (_a = data == null ? void 0 : data.sectionDataBindingItems) == null ? void 0 : _a.filter((item) => item == null ? void 0 : item.data)) == null ? void 0 : _b.map((item) => item.data)) || [];
|
|
1082
846
|
const [currentPartnerSlide, setCurrentPartnerSlide] = useState(0);
|
|
1083
847
|
const [partnersVisible, setPartnersVisible] = useState(false);
|
|
1084
848
|
const partnersRef = useRef(null);
|
|
1085
849
|
const windowWidth = useWindowSize$1();
|
|
1086
|
-
const sectionTitle = (section == null ? void 0 : section.title) || "
|
|
850
|
+
const sectionTitle = (section == null ? void 0 : section.title) || t("partners.sectionTitle") || "Đối tác";
|
|
1087
851
|
const getLogoUrl = (logoUrl) => {
|
|
1088
852
|
if (!logoUrl) return null;
|
|
1089
853
|
if (logoUrl.startsWith("http")) return logoUrl;
|
|
@@ -1126,17 +890,11 @@ const PartnersSection = ({ data, t, isDarkMode, imageBaseUrl = "", section }) =>
|
|
|
1126
890
|
return () => partnersRef.current && observer.unobserve(partnersRef.current);
|
|
1127
891
|
}, []);
|
|
1128
892
|
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
|
-
) }),
|
|
893
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
|
|
894
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-block px-4 py-2 rounded-full border border-[var(--border-color)] bg-surface text-subtitle font-semibold text-brand-primary shadow-sm", children: [
|
|
895
|
+
"🤝 ",
|
|
896
|
+
sectionTitle
|
|
897
|
+
] }) }),
|
|
1140
898
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1141
899
|
"div",
|
|
1142
900
|
{
|
|
@@ -1152,8 +910,7 @@ const PartnersSection = ({ data, t, isDarkMode, imageBaseUrl = "", section }) =>
|
|
|
1152
910
|
partner,
|
|
1153
911
|
idx,
|
|
1154
912
|
t,
|
|
1155
|
-
getLogoUrl
|
|
1156
|
-
isDarkMode
|
|
913
|
+
getLogoUrl
|
|
1157
914
|
},
|
|
1158
915
|
partner.id || idx
|
|
1159
916
|
)) })
|
|
@@ -1164,7 +921,8 @@ const PartnersSection = ({ data, t, isDarkMode, imageBaseUrl = "", section }) =>
|
|
|
1164
921
|
"button",
|
|
1165
922
|
{
|
|
1166
923
|
onClick: () => setCurrentPartnerSlide(index2),
|
|
1167
|
-
className: `w-3 h-3 rounded-full transition-all ${index2 === currentPartnerSlide ? "bg-
|
|
924
|
+
className: `w-3 h-3 rounded-full transition-all duration-300 ${index2 === currentPartnerSlide ? "bg-brand-primary scale-125 shadow-lg" : "bg-muted hover:bg-brand-primary/70"}`,
|
|
925
|
+
"aria-label": `Slide ${index2 + 1}`
|
|
1168
926
|
},
|
|
1169
927
|
index2
|
|
1170
928
|
)) })
|
|
@@ -1186,12 +944,9 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
|
|
|
1186
944
|
try {
|
|
1187
945
|
setLoading(true);
|
|
1188
946
|
const res = yield getMilestoneTimeline();
|
|
1189
|
-
if (res.success)
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
setMilestones([]);
|
|
1193
|
-
}
|
|
1194
|
-
} catch (error) {
|
|
947
|
+
if (res.success) setMilestones(res.data || []);
|
|
948
|
+
else setMilestones([]);
|
|
949
|
+
} catch (e) {
|
|
1195
950
|
setMilestones([]);
|
|
1196
951
|
} finally {
|
|
1197
952
|
setLoading(false);
|
|
@@ -1212,67 +967,39 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
|
|
|
1212
967
|
(entries) => {
|
|
1213
968
|
entries.forEach((entry) => {
|
|
1214
969
|
if (entry.isIntersecting) {
|
|
1215
|
-
const index2 = timelineRefs.current.findIndex(
|
|
1216
|
-
(el) => el === entry.target
|
|
1217
|
-
);
|
|
970
|
+
const index2 = timelineRefs.current.findIndex((el) => el === entry.target);
|
|
1218
971
|
if (index2 !== -1) {
|
|
1219
972
|
setTimelineVisible((prev) => {
|
|
1220
|
-
const
|
|
1221
|
-
|
|
1222
|
-
return
|
|
973
|
+
const updated = [...prev];
|
|
974
|
+
updated[index2] = true;
|
|
975
|
+
return updated;
|
|
1223
976
|
});
|
|
977
|
+
observer.unobserve(entry.target);
|
|
1224
978
|
}
|
|
1225
|
-
observer.unobserve(entry.target);
|
|
1226
979
|
}
|
|
1227
980
|
});
|
|
1228
981
|
},
|
|
1229
982
|
{ threshold: 0.1 }
|
|
1230
983
|
);
|
|
1231
984
|
timelineRefs.current.forEach((el) => el && observer.observe(el));
|
|
1232
|
-
return () =>
|
|
1233
|
-
timelineRefs.current.forEach((el) => el && observer.unobserve(el));
|
|
1234
|
-
};
|
|
985
|
+
return () => timelineRefs.current.forEach((el) => el && observer.unobserve(el));
|
|
1235
986
|
}, [milestones.length]);
|
|
1236
987
|
if (loading) {
|
|
1237
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
988
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-main", children: t("milestone.status.loadingData") }) });
|
|
1238
989
|
}
|
|
1239
990
|
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
|
-
);
|
|
991
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 bg-body", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 text-center", children: [
|
|
992
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-semibold mb-2 text-main", children: t("milestone.status.noData") }),
|
|
993
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted", children: t("milestone.noDataDescription") })
|
|
994
|
+
] }) });
|
|
1262
995
|
}
|
|
1263
996
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
|
|
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
|
-
) }),
|
|
997
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 border border-[var(--border-color)] bg-surface text-main shadow-sm hover:shadow-md transition-all duration-300", children: [
|
|
998
|
+
"📈 ",
|
|
999
|
+
sectionTitle
|
|
1000
|
+
] }) }),
|
|
1274
1001
|
/* @__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-
|
|
1002
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-brand rounded-full" }),
|
|
1276
1003
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-8", children: milestones.map((milestone, index2) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1277
1004
|
"div",
|
|
1278
1005
|
{
|
|
@@ -1280,35 +1007,12 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
|
|
|
1280
1007
|
className: `flex items-center transition-all duration-700 ease-out ${index2 % 2 === 0 ? "flex-row" : "flex-row-reverse"} ${timelineVisible[index2] ? "opacity-100 scale-100" : "opacity-0 scale-75"}`,
|
|
1281
1008
|
style: { transitionDelay: `${index2 * 200}ms` },
|
|
1282
1009
|
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
|
-
),
|
|
1010
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", children: [
|
|
1011
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-brand-primary font-bold text-xl mb-2", children: milestone.time }),
|
|
1012
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title", children: milestone.title }),
|
|
1013
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text", children: milestone.description })
|
|
1014
|
+
] }) }),
|
|
1015
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-6 h-6 bg-gradient-brand rounded-full border-4 border-[var(--bg-body)] shadow-[0_0_10px_5px_rgba(37,99,235,0.4)] flex-shrink-0 z-10 animate-pulse" }),
|
|
1312
1016
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1" })
|
|
1313
1017
|
]
|
|
1314
1018
|
},
|
|
@@ -1317,105 +1021,81 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
|
|
|
1317
1021
|
] })
|
|
1318
1022
|
] }) });
|
|
1319
1023
|
};
|
|
1320
|
-
const TestimonialsSection = ({ data, t,
|
|
1321
|
-
var _a;
|
|
1024
|
+
const TestimonialsSection = ({ data, t, section }) => {
|
|
1025
|
+
var _a, _b;
|
|
1322
1026
|
const [currentIndex, setCurrentIndex] = useState(0);
|
|
1323
|
-
const
|
|
1324
|
-
const
|
|
1325
|
-
|
|
1027
|
+
const [isTransitioning, setIsTransitioning] = useState(false);
|
|
1028
|
+
const sectionTitle = (section == null ? void 0 : section.title) || t("testimonials.sectionTitle") || "Cảm nhận khách hàng";
|
|
1029
|
+
const testimonials = ((_b = (_a = data == null ? void 0 : data.sectionDataBindingItems) == null ? void 0 : _a.filter((item) => item == null ? void 0 : item.data)) == null ? void 0 : _b.map((item) => {
|
|
1030
|
+
var _a2, _b2, _c, _d;
|
|
1326
1031
|
return {
|
|
1327
1032
|
quote: ((_a2 = item.data) == null ? void 0 : _a2.content) || "",
|
|
1328
|
-
author: ((
|
|
1329
|
-
position: ((_c = item.data) == null ? void 0 : _c.customerTitle) ||
|
|
1033
|
+
author: ((_b2 = item.data) == null ? void 0 : _b2.customerName) || "",
|
|
1034
|
+
position: ((_c = item.data) == null ? void 0 : _c.customerTitle) || "",
|
|
1330
1035
|
company: ((_d = item.data) == null ? void 0 : _d.customerCompany) || ""
|
|
1331
1036
|
};
|
|
1332
1037
|
})) || [];
|
|
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
1038
|
useEffect(() => {
|
|
1355
|
-
if (
|
|
1039
|
+
if (testimonials.length > 1) {
|
|
1356
1040
|
const interval = setInterval(() => {
|
|
1357
|
-
|
|
1041
|
+
setIsTransitioning(true);
|
|
1042
|
+
setTimeout(() => {
|
|
1043
|
+
setCurrentIndex((prev) => (prev + 1) % testimonials.length);
|
|
1044
|
+
setIsTransitioning(false);
|
|
1045
|
+
}, 300);
|
|
1358
1046
|
}, 5e3);
|
|
1359
1047
|
return () => clearInterval(interval);
|
|
1360
1048
|
}
|
|
1361
|
-
}, [
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
{
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1049
|
+
}, [testimonials.length]);
|
|
1050
|
+
const handleIndicatorClick = (index2) => {
|
|
1051
|
+
if (index2 !== currentIndex) {
|
|
1052
|
+
setIsTransitioning(true);
|
|
1053
|
+
setTimeout(() => {
|
|
1054
|
+
setCurrentIndex(index2);
|
|
1055
|
+
setIsTransitioning(false);
|
|
1056
|
+
}, 300);
|
|
1057
|
+
}
|
|
1058
|
+
};
|
|
1059
|
+
if (testimonials.length === 0) {
|
|
1060
|
+
return null;
|
|
1061
|
+
}
|
|
1062
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center", children: [
|
|
1063
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-block px-4 py-2 rounded-full border border-[var(--border-color)] bg-surface text-subtitle font-semibold mb-8 text-brand-primary shadow-sm", children: [
|
|
1064
|
+
"💬 ",
|
|
1065
|
+
sectionTitle
|
|
1066
|
+
] }),
|
|
1373
1067
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
1374
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1068
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1375
1069
|
"div",
|
|
1376
1070
|
{
|
|
1377
|
-
|
|
1071
|
+
style: {
|
|
1072
|
+
opacity: isTransitioning ? 0 : 1,
|
|
1073
|
+
transform: isTransitioning ? "translateY(10px)" : "translateY(0)",
|
|
1074
|
+
transition: "opacity 0.3s ease-in-out, transform 0.3s ease-in-out"
|
|
1075
|
+
},
|
|
1378
1076
|
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: [
|
|
1077
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("blockquote", { className: "card-text text-body italic mb-6", children: [
|
|
1078
|
+
'"',
|
|
1079
|
+
testimonials[currentIndex].quote,
|
|
1080
|
+
'"'
|
|
1081
|
+
] }),
|
|
1082
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4", children: [
|
|
1391
1083
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-3xl", children: "👤" }),
|
|
1392
1084
|
/* @__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
|
-
)
|
|
1085
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-title", children: testimonials[currentIndex].author }),
|
|
1086
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-text", children: testimonials[currentIndex].position }),
|
|
1087
|
+
testimonials[currentIndex].company && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-link", children: testimonials[currentIndex].company })
|
|
1408
1088
|
] })
|
|
1409
1089
|
] })
|
|
1410
1090
|
]
|
|
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(
|
|
1091
|
+
}
|
|
1092
|
+
) }),
|
|
1093
|
+
testimonials.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center space-x-2 mt-4", children: testimonials.map((_, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1415
1094
|
"button",
|
|
1416
1095
|
{
|
|
1417
|
-
onClick: () =>
|
|
1418
|
-
className: `w-2.5 h-2.5 rounded-full transition-all duration-300 ${index2 === currentIndex ? "bg-
|
|
1096
|
+
onClick: () => handleIndicatorClick(index2),
|
|
1097
|
+
className: `w-2.5 h-2.5 rounded-full transition-all duration-300 ${index2 === currentIndex ? "bg-brand-secondary" : "bg-surface hover:bg-brand-primary"}`,
|
|
1098
|
+
"aria-label": `Slide ${index2 + 1}`
|
|
1419
1099
|
},
|
|
1420
1100
|
index2
|
|
1421
1101
|
)) })
|
|
@@ -1423,54 +1103,82 @@ const TestimonialsSection = ({ data, t, isDarkMode, section }) => {
|
|
|
1423
1103
|
] }) });
|
|
1424
1104
|
};
|
|
1425
1105
|
const PartnerListCard = ({ partner, idx, t, isDarkMode, getLogoUrl }) => {
|
|
1426
|
-
const logoUrl = getLogoUrl(partner.
|
|
1427
|
-
return /* @__PURE__ */ jsxRuntimeExports.
|
|
1106
|
+
const logoUrl = getLogoUrl(partner.logoUrl);
|
|
1107
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1428
1108
|
"a",
|
|
1429
1109
|
{
|
|
1430
|
-
href: partner.
|
|
1431
|
-
target: partner.
|
|
1432
|
-
rel: partner.
|
|
1433
|
-
className:
|
|
1110
|
+
href: partner.websiteUrl || "#",
|
|
1111
|
+
target: partner.websiteUrl ? "_blank" : "_self",
|
|
1112
|
+
rel: partner.websiteUrl ? "noopener noreferrer" : "",
|
|
1113
|
+
className: "card",
|
|
1434
1114
|
style: {
|
|
1435
1115
|
animationDelay: `${idx * 0.1}s`,
|
|
1436
|
-
textDecoration: "none"
|
|
1116
|
+
textDecoration: "none",
|
|
1117
|
+
overflow: "hidden",
|
|
1118
|
+
minHeight: "280px",
|
|
1119
|
+
padding: "1.5rem",
|
|
1120
|
+
display: "flex",
|
|
1121
|
+
flexDirection: "column"
|
|
1437
1122
|
},
|
|
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
|
-
|
|
1123
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
|
|
1124
|
+
display: "flex",
|
|
1125
|
+
flexDirection: "column",
|
|
1126
|
+
alignItems: "center",
|
|
1127
|
+
justifyContent: "center",
|
|
1128
|
+
flex: 1
|
|
1129
|
+
}, children: [
|
|
1130
|
+
logoUrl ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
1131
|
+
width: "100%",
|
|
1132
|
+
height: "100px",
|
|
1133
|
+
display: "flex",
|
|
1134
|
+
alignItems: "center",
|
|
1135
|
+
justifyContent: "center",
|
|
1136
|
+
marginBottom: "1rem"
|
|
1137
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1138
|
+
"img",
|
|
1139
|
+
{
|
|
1140
|
+
src: logoUrl,
|
|
1141
|
+
alt: partner.name || t("partners.logoAlt") || "Partner logo",
|
|
1142
|
+
style: {
|
|
1143
|
+
maxWidth: "100%",
|
|
1144
|
+
maxHeight: "100%",
|
|
1145
|
+
objectFit: "contain",
|
|
1146
|
+
transition: "transform 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
1147
|
+
},
|
|
1148
|
+
onMouseEnter: (e) => {
|
|
1149
|
+
e.currentTarget.style.transform = "scale(1.05)";
|
|
1150
|
+
},
|
|
1151
|
+
onMouseLeave: (e) => {
|
|
1152
|
+
e.currentTarget.style.transform = "scale(1)";
|
|
1153
|
+
},
|
|
1154
|
+
loading: "lazy"
|
|
1155
|
+
}
|
|
1156
|
+
) }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-surface", style: {
|
|
1157
|
+
width: "5rem",
|
|
1158
|
+
height: "5rem",
|
|
1159
|
+
borderRadius: "9999px",
|
|
1160
|
+
display: "flex",
|
|
1161
|
+
alignItems: "center",
|
|
1162
|
+
justifyContent: "center",
|
|
1163
|
+
marginBottom: "1rem"
|
|
1164
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: { fontSize: "1.875rem" }, children: "🤝" }) }),
|
|
1165
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-main", style: {
|
|
1166
|
+
fontSize: "1rem",
|
|
1167
|
+
textAlign: "center",
|
|
1168
|
+
marginBottom: "0.5rem",
|
|
1169
|
+
lineHeight: "1.4"
|
|
1170
|
+
}, children: partner.name || t("partners.unnamed") || "Partner" }),
|
|
1171
|
+
partner.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text", style: {
|
|
1172
|
+
textAlign: "center",
|
|
1173
|
+
marginTop: "0.5rem",
|
|
1174
|
+
fontSize: "0.875rem",
|
|
1175
|
+
lineHeight: "1.5",
|
|
1176
|
+
display: "-webkit-box",
|
|
1177
|
+
WebkitLineClamp: 3,
|
|
1178
|
+
WebkitBoxOrient: "vertical",
|
|
1179
|
+
overflow: "hidden"
|
|
1180
|
+
}, children: partner.description })
|
|
1181
|
+
] })
|
|
1474
1182
|
}
|
|
1475
1183
|
);
|
|
1476
1184
|
};
|
|
@@ -1485,7 +1193,7 @@ function useWindowSize() {
|
|
|
1485
1193
|
}, []);
|
|
1486
1194
|
return width;
|
|
1487
1195
|
}
|
|
1488
|
-
const PartnerListSection = ({ t,
|
|
1196
|
+
const PartnerListSection = ({ t, getPartnerList, imageBaseUrl = "", section }) => {
|
|
1489
1197
|
const [partnersData, setPartnersData] = useState([]);
|
|
1490
1198
|
const [error, setError] = useState(null);
|
|
1491
1199
|
const [loading, setLoading] = useState(true);
|
|
@@ -1493,7 +1201,7 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "",
|
|
|
1493
1201
|
const [partnersVisible, setPartnersVisible] = useState(false);
|
|
1494
1202
|
const partnersRef = useRef(null);
|
|
1495
1203
|
const windowWidth = useWindowSize();
|
|
1496
|
-
const sectionTitle = (section == null ? void 0 : section.title) || "
|
|
1204
|
+
const sectionTitle = (section == null ? void 0 : section.title) || t("partners.sectionTitle");
|
|
1497
1205
|
const getLogoUrl = (logoUrl) => {
|
|
1498
1206
|
if (!logoUrl) return null;
|
|
1499
1207
|
if (logoUrl.startsWith("http")) return logoUrl;
|
|
@@ -1538,9 +1246,7 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "",
|
|
|
1538
1246
|
}
|
|
1539
1247
|
}, [partners.length]);
|
|
1540
1248
|
useEffect(() => {
|
|
1541
|
-
const fallbackTimer = setTimeout(() =>
|
|
1542
|
-
setPartnersVisible(true);
|
|
1543
|
-
}, 500);
|
|
1249
|
+
const fallbackTimer = setTimeout(() => setPartnersVisible(true), 500);
|
|
1544
1250
|
const observer = new IntersectionObserver(
|
|
1545
1251
|
(entries) => {
|
|
1546
1252
|
entries.forEach((entry) => {
|
|
@@ -1553,54 +1259,46 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "",
|
|
|
1553
1259
|
},
|
|
1554
1260
|
{ threshold: 0.1, rootMargin: "50px" }
|
|
1555
1261
|
);
|
|
1556
|
-
if (partnersRef.current)
|
|
1557
|
-
|
|
1558
|
-
} else {
|
|
1262
|
+
if (partnersRef.current) observer.observe(partnersRef.current);
|
|
1263
|
+
else {
|
|
1559
1264
|
clearTimeout(fallbackTimer);
|
|
1560
1265
|
setPartnersVisible(true);
|
|
1561
1266
|
}
|
|
1562
1267
|
return () => {
|
|
1563
1268
|
clearTimeout(fallbackTimer);
|
|
1564
|
-
if (partnersRef.current)
|
|
1565
|
-
observer.unobserve(partnersRef.current);
|
|
1566
|
-
}
|
|
1269
|
+
if (partnersRef.current) observer.unobserve(partnersRef.current);
|
|
1567
1270
|
};
|
|
1568
1271
|
}, []);
|
|
1569
1272
|
if (loading) {
|
|
1570
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
1273
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center bg-body", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-muted", children: t("partners.loading") || "Đang tải danh sách đối tác..." }) });
|
|
1571
1274
|
}
|
|
1572
1275
|
if (error) {
|
|
1573
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-
|
|
1276
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center bg-body", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-brand-secondary", children: t("partners.error") || error }) });
|
|
1574
1277
|
}
|
|
1575
1278
|
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
|
-
) }),
|
|
1279
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
|
|
1280
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-block px-4 py-2 rounded-full border border-[var(--border-color)] bg-surface text-subtitle font-semibold text-brand-primary shadow-sm", children: [
|
|
1281
|
+
"🤝 ",
|
|
1282
|
+
sectionTitle
|
|
1283
|
+
] }) }),
|
|
1587
1284
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1588
1285
|
"div",
|
|
1589
1286
|
{
|
|
1590
1287
|
className: `transition-all duration-1000 ease-out ${partnersVisible ? "opacity-100 scale-100" : "opacity-0 scale-95"}`,
|
|
1591
1288
|
children: [
|
|
1592
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative overflow-hidden mb-
|
|
1289
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative overflow-hidden mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { minHeight: "320px" }, children: partners.map((group, slideIndex) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1593
1290
|
"div",
|
|
1594
1291
|
{
|
|
1595
1292
|
className: `absolute inset-0 w-full transition-all duration-1000 ease-in-out ${slideIndex === currentPartnerSlide ? "opacity-100 translate-x-0" : slideIndex < currentPartnerSlide ? "opacity-0 -translate-x-full" : "opacity-0 translate-x-full"}`,
|
|
1596
|
-
style: {
|
|
1597
|
-
|
|
1293
|
+
style: {
|
|
1294
|
+
zIndex: slideIndex === currentPartnerSlide ? 10 : 1
|
|
1295
|
+
},
|
|
1296
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-8 px-2", children: group.map((partner, idx) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1598
1297
|
PartnerListCard,
|
|
1599
1298
|
{
|
|
1600
1299
|
partner,
|
|
1601
1300
|
idx,
|
|
1602
1301
|
t,
|
|
1603
|
-
isDarkMode,
|
|
1604
1302
|
getLogoUrl
|
|
1605
1303
|
},
|
|
1606
1304
|
partner.id || `${slideIndex}-${idx}`
|
|
@@ -1608,11 +1306,34 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "",
|
|
|
1608
1306
|
},
|
|
1609
1307
|
slideIndex
|
|
1610
1308
|
)) }) }),
|
|
1611
|
-
partners.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center space-x-
|
|
1309
|
+
partners.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center space-x-3", style: {
|
|
1310
|
+
position: "relative",
|
|
1311
|
+
zIndex: 100,
|
|
1312
|
+
paddingTop: "1rem"
|
|
1313
|
+
}, children: partners.map((_, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1612
1314
|
"button",
|
|
1613
1315
|
{
|
|
1614
1316
|
onClick: () => setCurrentPartnerSlide(index2),
|
|
1615
|
-
|
|
1317
|
+
style: {
|
|
1318
|
+
width: "12px",
|
|
1319
|
+
height: "12px",
|
|
1320
|
+
borderRadius: "50%",
|
|
1321
|
+
border: "none",
|
|
1322
|
+
cursor: "pointer",
|
|
1323
|
+
transition: "all 0.3s ease",
|
|
1324
|
+
backgroundColor: index2 === currentPartnerSlide ? "var(--brand-primary)" : "rgba(255, 255, 255, 0.3)",
|
|
1325
|
+
transform: index2 === currentPartnerSlide ? "scale(1.3)" : "scale(1)"
|
|
1326
|
+
},
|
|
1327
|
+
onMouseEnter: (e) => {
|
|
1328
|
+
if (index2 !== currentPartnerSlide) {
|
|
1329
|
+
e.currentTarget.style.backgroundColor = "rgba(255, 255, 255, 0.5)";
|
|
1330
|
+
}
|
|
1331
|
+
},
|
|
1332
|
+
onMouseLeave: (e) => {
|
|
1333
|
+
if (index2 !== currentPartnerSlide) {
|
|
1334
|
+
e.currentTarget.style.backgroundColor = "rgba(255, 255, 255, 0.3)";
|
|
1335
|
+
}
|
|
1336
|
+
},
|
|
1616
1337
|
"aria-label": `Slide ${index2 + 1}`
|
|
1617
1338
|
},
|
|
1618
1339
|
index2
|
|
@@ -2369,24 +2090,30 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2369
2090
|
setIsSubmitting(false);
|
|
2370
2091
|
}
|
|
2371
2092
|
});
|
|
2372
|
-
const inputBaseClasses = `
|
|
2373
|
-
|
|
2374
|
-
|
|
2093
|
+
const inputBaseClasses = `
|
|
2094
|
+
w-full px-4 py-3 rounded-xl border
|
|
2095
|
+
transition-all duration-200
|
|
2096
|
+
focus:ring-2 focus:outline-none
|
|
2097
|
+
bg-surface
|
|
2098
|
+
text-main
|
|
2099
|
+
placeholder-text-muted
|
|
2100
|
+
`;
|
|
2101
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid lg:grid-cols-3 gap-12", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lg:col-span-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface rounded-2xl p-8 shadow-lg border transition-colors duration-200", style: { borderColor: "var(--border-color)" }, children: [
|
|
2375
2102
|
/* @__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-
|
|
2103
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-10 h-10 rounded-lg bg-gradient-brand flex items-center justify-center mr-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Send, { size: 20, className: "text-white" }) }),
|
|
2377
2104
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2378
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className:
|
|
2379
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
2105
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-subtitle font-bold text-main", children: t("form.title") || "Gửi yêu cầu tư vấn" }),
|
|
2106
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", children: t("form.subtitle") || "Điền thông tin để nhận tư vấn miễn phí từ chuyên gia" })
|
|
2380
2107
|
] })
|
|
2381
2108
|
] }),
|
|
2382
|
-
submitStatus && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `mb-6 p-4 rounded-xl border transition-colors duration-200 ${submitStatus === "success" ?
|
|
2109
|
+
submitStatus && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `mb-6 p-4 rounded-xl border transition-colors duration-200 ${submitStatus === "success" ? "bg-emerald-50 dark:bg-emerald-900/30 text-emerald-800 dark:text-emerald-300" : "bg-red-50 dark:bg-red-900/30 text-red-800 dark:text-red-300"}`, style: { borderColor: submitStatus === "success" ? "#10b981" : "#ef4444" }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center", children: [
|
|
2383
2110
|
submitStatus === "success" ? /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { size: 20, className: "mr-2 flex-shrink-0" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 20, className: "mr-2 flex-shrink-0" }),
|
|
2384
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-
|
|
2111
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small font-medium", children: submitMessage })
|
|
2385
2112
|
] }) }),
|
|
2386
2113
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleSubmit, className: "space-y-6", children: [
|
|
2387
2114
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
|
|
2388
2115
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2389
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className:
|
|
2116
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
|
|
2390
2117
|
t("form.fields.fullName") || "Họ và tên",
|
|
2391
2118
|
" *"
|
|
2392
2119
|
] }),
|
|
@@ -2398,18 +2125,19 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2398
2125
|
value: formData.fullName || "",
|
|
2399
2126
|
onChange: handleInputChange,
|
|
2400
2127
|
onBlur: handleBlur,
|
|
2401
|
-
className:
|
|
2128
|
+
className: inputBaseClasses,
|
|
2129
|
+
style: { borderColor: formErrors.fullName ? "#ef4444" : "var(--border-color)" },
|
|
2402
2130
|
placeholder: t("contact.form.namePlaceholder"),
|
|
2403
2131
|
required: true
|
|
2404
2132
|
}
|
|
2405
2133
|
),
|
|
2406
|
-
formErrors.fullName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2134
|
+
formErrors.fullName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2407
2135
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2408
2136
|
formErrors.fullName
|
|
2409
2137
|
] })
|
|
2410
2138
|
] }),
|
|
2411
2139
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2412
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className:
|
|
2140
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
|
|
2413
2141
|
t("form.fields.workEmail") || "Email",
|
|
2414
2142
|
" *"
|
|
2415
2143
|
] }),
|
|
@@ -2421,12 +2149,13 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2421
2149
|
value: formData.workEmail || "",
|
|
2422
2150
|
onChange: handleInputChange,
|
|
2423
2151
|
onBlur: handleBlur,
|
|
2424
|
-
className:
|
|
2152
|
+
className: inputBaseClasses,
|
|
2153
|
+
style: { borderColor: formErrors.workEmail ? "#ef4444" : "var(--border-color)" },
|
|
2425
2154
|
placeholder: "email@company.com",
|
|
2426
2155
|
required: true
|
|
2427
2156
|
}
|
|
2428
2157
|
),
|
|
2429
|
-
formErrors.workEmail && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2158
|
+
formErrors.workEmail && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2430
2159
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2431
2160
|
formErrors.workEmail
|
|
2432
2161
|
] })
|
|
@@ -2434,7 +2163,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2434
2163
|
] }),
|
|
2435
2164
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
|
|
2436
2165
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2437
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2166
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.phoneNumber") || "Số điện thoại" }),
|
|
2438
2167
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2439
2168
|
"input",
|
|
2440
2169
|
{
|
|
@@ -2443,17 +2172,18 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2443
2172
|
value: formData.phoneNumber || "",
|
|
2444
2173
|
onChange: handleInputChange,
|
|
2445
2174
|
onBlur: handleBlur,
|
|
2446
|
-
className:
|
|
2175
|
+
className: inputBaseClasses,
|
|
2176
|
+
style: { borderColor: formErrors.phoneNumber ? "#ef4444" : "var(--border-color)" },
|
|
2447
2177
|
placeholder: "0901 234 567"
|
|
2448
2178
|
}
|
|
2449
2179
|
),
|
|
2450
|
-
formErrors.phoneNumber && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2180
|
+
formErrors.phoneNumber && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2451
2181
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2452
2182
|
formErrors.phoneNumber
|
|
2453
2183
|
] })
|
|
2454
2184
|
] }),
|
|
2455
2185
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2456
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2186
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.companyName") || "Công ty/Tổ chức" }),
|
|
2457
2187
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2458
2188
|
"input",
|
|
2459
2189
|
{
|
|
@@ -2462,11 +2192,12 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2462
2192
|
value: formData.companyName || "",
|
|
2463
2193
|
onChange: handleInputChange,
|
|
2464
2194
|
onBlur: handleBlur,
|
|
2465
|
-
className:
|
|
2195
|
+
className: inputBaseClasses,
|
|
2196
|
+
style: { borderColor: formErrors.companyName ? "#ef4444" : "var(--border-color)" },
|
|
2466
2197
|
placeholder: t("contact.form.fields.company")
|
|
2467
2198
|
}
|
|
2468
2199
|
),
|
|
2469
|
-
formErrors.companyName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2200
|
+
formErrors.companyName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2470
2201
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2471
2202
|
formErrors.companyName
|
|
2472
2203
|
] })
|
|
@@ -2474,7 +2205,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2474
2205
|
] }),
|
|
2475
2206
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
|
|
2476
2207
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2477
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2208
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.jobTitle") || "Chức vụ" }),
|
|
2478
2209
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2479
2210
|
"input",
|
|
2480
2211
|
{
|
|
@@ -2483,17 +2214,18 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2483
2214
|
value: formData.jobTitle || "",
|
|
2484
2215
|
onChange: handleInputChange,
|
|
2485
2216
|
onBlur: handleBlur,
|
|
2486
|
-
className:
|
|
2217
|
+
className: inputBaseClasses,
|
|
2218
|
+
style: { borderColor: formErrors.jobTitle ? "#ef4444" : "var(--border-color)" },
|
|
2487
2219
|
placeholder: t("contact.form.positionPlaceholder")
|
|
2488
2220
|
}
|
|
2489
2221
|
),
|
|
2490
|
-
formErrors.jobTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2222
|
+
formErrors.jobTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2491
2223
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2492
2224
|
formErrors.jobTitle
|
|
2493
2225
|
] })
|
|
2494
2226
|
] }),
|
|
2495
2227
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2496
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2228
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.businessType") || "Loại hình kinh doanh" }),
|
|
2497
2229
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2498
2230
|
"input",
|
|
2499
2231
|
{
|
|
@@ -2502,6 +2234,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2502
2234
|
value: formData.businessType || "",
|
|
2503
2235
|
onChange: handleInputChange,
|
|
2504
2236
|
className: inputBaseClasses,
|
|
2237
|
+
style: { borderColor: "var(--border-color)" },
|
|
2505
2238
|
placeholder: t("form.fields.businessType")
|
|
2506
2239
|
}
|
|
2507
2240
|
)
|
|
@@ -2509,7 +2242,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2509
2242
|
] }),
|
|
2510
2243
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
|
|
2511
2244
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2512
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2245
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.expectedBudget") || "Ngân sách dự kiến" }),
|
|
2513
2246
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2514
2247
|
"input",
|
|
2515
2248
|
{
|
|
@@ -2518,12 +2251,13 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2518
2251
|
value: formData.expectedBudget || "",
|
|
2519
2252
|
onChange: handleInputChange,
|
|
2520
2253
|
className: inputBaseClasses,
|
|
2254
|
+
style: { borderColor: "var(--border-color)" },
|
|
2521
2255
|
placeholder: t("form.fields.expectedBudget")
|
|
2522
2256
|
}
|
|
2523
2257
|
)
|
|
2524
2258
|
] }),
|
|
2525
2259
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2526
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className:
|
|
2260
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.expectedTimeline") || "Thời gian dự kiến" }),
|
|
2527
2261
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2528
2262
|
"input",
|
|
2529
2263
|
{
|
|
@@ -2532,13 +2266,14 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2532
2266
|
value: formData.expectedTimeline || "",
|
|
2533
2267
|
onChange: handleInputChange,
|
|
2534
2268
|
className: inputBaseClasses,
|
|
2269
|
+
style: { borderColor: "var(--border-color)" },
|
|
2535
2270
|
placeholder: t("form.fields.expectedTimeline")
|
|
2536
2271
|
}
|
|
2537
2272
|
)
|
|
2538
2273
|
] })
|
|
2539
2274
|
] }),
|
|
2540
2275
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2541
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className:
|
|
2276
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
|
|
2542
2277
|
t("form.fields.requestTitle") || "Tiêu đề yêu cầu",
|
|
2543
2278
|
" *"
|
|
2544
2279
|
] }),
|
|
@@ -2550,18 +2285,19 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2550
2285
|
value: formData.requestTitle || "",
|
|
2551
2286
|
onChange: handleInputChange,
|
|
2552
2287
|
onBlur: handleBlur,
|
|
2553
|
-
className:
|
|
2288
|
+
className: inputBaseClasses,
|
|
2289
|
+
style: { borderColor: formErrors.requestTitle ? "#ef4444" : "var(--border-color)" },
|
|
2554
2290
|
placeholder: t("contact.form.placeholders.subject"),
|
|
2555
2291
|
required: true
|
|
2556
2292
|
}
|
|
2557
2293
|
),
|
|
2558
|
-
formErrors.requestTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2294
|
+
formErrors.requestTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2559
2295
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2560
2296
|
formErrors.requestTitle
|
|
2561
2297
|
] })
|
|
2562
2298
|
] }),
|
|
2563
2299
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2564
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className:
|
|
2300
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
|
|
2565
2301
|
t("form.fields.requestDescription") || "Mô tả yêu cầu",
|
|
2566
2302
|
" *"
|
|
2567
2303
|
] }),
|
|
@@ -2573,48 +2309,32 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2573
2309
|
onChange: handleInputChange,
|
|
2574
2310
|
onBlur: handleBlur,
|
|
2575
2311
|
rows: "5",
|
|
2576
|
-
className: `${inputBaseClasses} resize-none
|
|
2312
|
+
className: `${inputBaseClasses} resize-none`,
|
|
2313
|
+
style: { borderColor: formErrors.requestDescription ? "#ef4444" : "var(--border-color)" },
|
|
2577
2314
|
placeholder: t("contact.form.placeholders.message"),
|
|
2578
2315
|
required: true
|
|
2579
2316
|
}
|
|
2580
2317
|
),
|
|
2581
|
-
formErrors.requestDescription && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-
|
|
2318
|
+
formErrors.requestDescription && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2582
2319
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2583
2320
|
formErrors.requestDescription
|
|
2584
2321
|
] })
|
|
2585
2322
|
] }),
|
|
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
|
-
] })
|
|
2323
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center space-x-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2324
|
+
"button",
|
|
2325
|
+
{
|
|
2326
|
+
type: "submit",
|
|
2327
|
+
disabled: isSubmitting,
|
|
2328
|
+
className: "flex-1 btn-primary text-white py-4 px-6 rounded-xl transition-all disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center font-semibold",
|
|
2329
|
+
children: isSubmitting ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
2330
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "animate-spin h-5 w-5 mr-2" }),
|
|
2331
|
+
t("form.submitting") || "Đang gửi..."
|
|
2332
|
+
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
2333
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Send, { size: 20, className: "mr-2" }),
|
|
2334
|
+
t("form.submit") || "Gửi yêu cầu"
|
|
2335
|
+
] })
|
|
2336
|
+
}
|
|
2337
|
+
) })
|
|
2618
2338
|
] })
|
|
2619
2339
|
] }) }) }) }) });
|
|
2620
2340
|
};
|
|
@@ -2624,65 +2344,110 @@ const ContactInfoSection = ({ data, t, isDarkMode, section }) => {
|
|
|
2624
2344
|
const sectionTitle = (section == null ? void 0 : section.title) || "...";
|
|
2625
2345
|
if (!contactData.length) return null;
|
|
2626
2346
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
|
|
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
|
|
2347
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-flex items-center px-4 py-2 rounded-full text-lg font-semibold mb-4 bg-surface", style: { borderWidth: "1px", borderColor: "var(--border-color)" }, children: [
|
|
2348
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 22, className: "mr-2 text-brand-primary" }),
|
|
2349
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-main", children: sectionTitle })
|
|
2630
2350
|
] }) }),
|
|
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
|
-
|
|
2351
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid md:grid-cols-2 lg:grid-cols-3 gap-8", children: contactData.map((contact, index2) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", children: [
|
|
2352
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-6", children: [
|
|
2353
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
|
|
2354
|
+
width: "5rem",
|
|
2355
|
+
height: "5rem",
|
|
2356
|
+
borderRadius: "9999px",
|
|
2357
|
+
margin: "0 auto 1rem",
|
|
2358
|
+
display: "flex",
|
|
2359
|
+
alignItems: "center",
|
|
2360
|
+
justifyContent: "center"
|
|
2361
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 32, style: { color: "white" } }) }),
|
|
2362
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-subtitle mb-2", children: contact.name }),
|
|
2363
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "inline-block px-3 py-1 rounded-full text-small font-semibold bg-surface text-brand-primary", style: { borderWidth: "1px", borderColor: "var(--border-color)" }, children: contact.position })
|
|
2364
|
+
] }),
|
|
2365
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "1rem" }, children: [
|
|
2366
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2367
|
+
"a",
|
|
2368
|
+
{
|
|
2369
|
+
href: `tel:${contact.phone}`,
|
|
2370
|
+
className: "card-link",
|
|
2371
|
+
style: {
|
|
2372
|
+
padding: "0.75rem",
|
|
2373
|
+
borderRadius: "0.75rem",
|
|
2374
|
+
backgroundColor: "var(--bg-body)",
|
|
2375
|
+
borderWidth: "1px",
|
|
2376
|
+
borderColor: "var(--border-color)",
|
|
2377
|
+
transition: "all 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
2378
|
+
},
|
|
2379
|
+
children: [
|
|
2380
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
|
|
2381
|
+
width: "2.5rem",
|
|
2382
|
+
height: "2.5rem",
|
|
2383
|
+
borderRadius: "0.5rem",
|
|
2384
|
+
display: "flex",
|
|
2385
|
+
alignItems: "center",
|
|
2386
|
+
justifyContent: "center",
|
|
2387
|
+
marginRight: "0.75rem"
|
|
2388
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Phone, { size: 18, style: { color: "white" } }) }),
|
|
2389
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2390
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contact.info.phone") || "Điện thoại" }),
|
|
2391
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.phone })
|
|
2392
|
+
] })
|
|
2393
|
+
]
|
|
2394
|
+
}
|
|
2395
|
+
),
|
|
2396
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2397
|
+
"a",
|
|
2398
|
+
{
|
|
2399
|
+
href: `mailto:${contact.email}`,
|
|
2400
|
+
className: "card-link",
|
|
2401
|
+
style: {
|
|
2402
|
+
padding: "0.75rem",
|
|
2403
|
+
borderRadius: "0.75rem",
|
|
2404
|
+
backgroundColor: "var(--bg-body)",
|
|
2405
|
+
borderWidth: "1px",
|
|
2406
|
+
borderColor: "var(--border-color)",
|
|
2407
|
+
transition: "all 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
2408
|
+
},
|
|
2409
|
+
children: [
|
|
2410
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-accent", style: {
|
|
2411
|
+
width: "2.5rem",
|
|
2412
|
+
height: "2.5rem",
|
|
2413
|
+
borderRadius: "0.5rem",
|
|
2414
|
+
display: "flex",
|
|
2415
|
+
alignItems: "center",
|
|
2416
|
+
justifyContent: "center",
|
|
2417
|
+
marginRight: "0.75rem"
|
|
2418
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Mail, { size: 18, style: { color: "white" } }) }),
|
|
2419
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2420
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: "Email" }),
|
|
2421
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.email })
|
|
2678
2422
|
] })
|
|
2679
|
-
]
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2423
|
+
]
|
|
2424
|
+
}
|
|
2425
|
+
),
|
|
2426
|
+
contact.workingHours && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
|
|
2427
|
+
display: "flex",
|
|
2428
|
+
alignItems: "center",
|
|
2429
|
+
padding: "0.75rem",
|
|
2430
|
+
borderRadius: "0.75rem",
|
|
2431
|
+
backgroundColor: "var(--bg-body)",
|
|
2432
|
+
borderWidth: "1px",
|
|
2433
|
+
borderColor: "var(--border-color)"
|
|
2434
|
+
}, children: [
|
|
2435
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
|
|
2436
|
+
width: "2.5rem",
|
|
2437
|
+
height: "2.5rem",
|
|
2438
|
+
borderRadius: "0.5rem",
|
|
2439
|
+
display: "flex",
|
|
2440
|
+
alignItems: "center",
|
|
2441
|
+
justifyContent: "center",
|
|
2442
|
+
marginRight: "0.75rem"
|
|
2443
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { size: 18, style: { color: "white" } }) }),
|
|
2444
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2445
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contact.info.workingHours") || "Giờ làm việc" }),
|
|
2446
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.workingHours || t("contact.info.defaultWorkingHours") || "T2-T6: 8:00-18:00" })
|
|
2447
|
+
] })
|
|
2448
|
+
] })
|
|
2449
|
+
] })
|
|
2450
|
+
] }, contact.id || index2)) })
|
|
2686
2451
|
] }) });
|
|
2687
2452
|
};
|
|
2688
2453
|
const ContactListAutoSection = ({ data, t, isDarkMode, getContactList, section }) => {
|
|
@@ -2710,89 +2475,136 @@ const ContactListAutoSection = ({ data, t, isDarkMode, getContactList, section }
|
|
|
2710
2475
|
}
|
|
2711
2476
|
});
|
|
2712
2477
|
if (loading) {
|
|
2713
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2714
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className:
|
|
2715
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
2478
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "py-16 px-5 text-center bg-body", children: [
|
|
2479
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "inline-block w-10 h-10 border-4 border-color rounded-full animate-spin", style: { borderTopColor: "var(--brand-primary)" } }),
|
|
2480
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-4 text-muted", children: t("contactList.status.loading") || "Đang tải danh sách liên hệ..." })
|
|
2716
2481
|
] });
|
|
2717
2482
|
}
|
|
2718
2483
|
if (error) {
|
|
2719
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2720
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2484
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "py-16 px-5 text-center bg-body", children: [
|
|
2485
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-base mb-2", style: { color: "#ef4444" }, children: [
|
|
2721
2486
|
"⚠️ ",
|
|
2722
2487
|
t("contactList.error.title") || "Lỗi tải dữ liệu"
|
|
2723
2488
|
] }),
|
|
2724
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
2489
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted", children: error })
|
|
2725
2490
|
] });
|
|
2726
2491
|
}
|
|
2727
2492
|
if (!contacts || contacts.length === 0) {
|
|
2728
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2493
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "py-16 px-5 text-center bg-body", children: [
|
|
2729
2494
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-5xl mb-5", children: "📞" }),
|
|
2730
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className:
|
|
2731
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
2495
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-muted mb-2", children: t("contactList.status.noData.title") || "Chưa có thông tin liên hệ" }),
|
|
2496
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted opacity-75", children: t("contactList.status.noData.description") || "Danh sách liên hệ sẽ hiển thị tại đây" })
|
|
2732
2497
|
] });
|
|
2733
2498
|
}
|
|
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
|
-
|
|
2499
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
|
|
2500
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-flex items-center px-4 py-2 rounded-full text-lg font-semibold mb-4 bg-surface", style: { borderWidth: "1px", borderColor: "var(--border-color)" }, children: [
|
|
2501
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 22, className: "mr-2 text-brand-primary" }),
|
|
2502
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-main", children: sectionTitle })
|
|
2503
|
+
] }) }),
|
|
2504
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid md:grid-cols-2 lg:grid-cols-3 gap-8", children: contacts.map((contact, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(ContactCard, { contact, t, isDarkMode }, contact.id || index2)) })
|
|
2737
2505
|
] }) });
|
|
2738
2506
|
};
|
|
2739
2507
|
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
|
-
|
|
2508
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", children: [
|
|
2509
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-6", children: [
|
|
2510
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
|
|
2511
|
+
width: "5rem",
|
|
2512
|
+
height: "5rem",
|
|
2513
|
+
borderRadius: "9999px",
|
|
2514
|
+
margin: "0 auto 1rem",
|
|
2515
|
+
display: "flex",
|
|
2516
|
+
alignItems: "center",
|
|
2517
|
+
justifyContent: "center"
|
|
2518
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 32, style: { color: "white" } }) }),
|
|
2519
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-subtitle mb-2", children: contact.name || t("contactList.card.noName") || "Không có tên" }),
|
|
2520
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "inline-block px-3 py-1 rounded-full text-small font-semibold bg-surface text-brand-primary", style: { borderWidth: "1px", borderColor: "var(--border-color)" }, children: contact.position || t("contactList.card.noPosition") || "Chưa có chức vụ" })
|
|
2521
|
+
] }),
|
|
2522
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "1rem" }, children: [
|
|
2523
|
+
contact.phone && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2524
|
+
"a",
|
|
2525
|
+
{
|
|
2526
|
+
href: `tel:${contact.phone}`,
|
|
2527
|
+
className: "card-link",
|
|
2528
|
+
style: {
|
|
2529
|
+
padding: "0.75rem",
|
|
2530
|
+
borderRadius: "0.75rem",
|
|
2531
|
+
backgroundColor: "var(--bg-body)",
|
|
2532
|
+
borderWidth: "1px",
|
|
2533
|
+
borderColor: "var(--border-color)",
|
|
2534
|
+
transition: "all 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
2535
|
+
},
|
|
2536
|
+
children: [
|
|
2537
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
|
|
2538
|
+
width: "2.5rem",
|
|
2539
|
+
height: "2.5rem",
|
|
2540
|
+
borderRadius: "0.5rem",
|
|
2541
|
+
display: "flex",
|
|
2542
|
+
alignItems: "center",
|
|
2543
|
+
justifyContent: "center",
|
|
2544
|
+
marginRight: "0.75rem"
|
|
2545
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Phone, { size: 18, style: { color: "white" } }) }),
|
|
2546
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2547
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contactList.card.phone") || "Điện thoại" }),
|
|
2548
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.phone })
|
|
2549
|
+
] })
|
|
2550
|
+
]
|
|
2551
|
+
}
|
|
2552
|
+
),
|
|
2553
|
+
contact.email && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2554
|
+
"a",
|
|
2555
|
+
{
|
|
2556
|
+
href: `mailto:${contact.email}`,
|
|
2557
|
+
className: "card-link",
|
|
2558
|
+
style: {
|
|
2559
|
+
padding: "0.75rem",
|
|
2560
|
+
borderRadius: "0.75rem",
|
|
2561
|
+
backgroundColor: "var(--bg-body)",
|
|
2562
|
+
borderWidth: "1px",
|
|
2563
|
+
borderColor: "var(--border-color)",
|
|
2564
|
+
transition: "all 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
2565
|
+
},
|
|
2566
|
+
children: [
|
|
2567
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-accent", style: {
|
|
2568
|
+
width: "2.5rem",
|
|
2569
|
+
height: "2.5rem",
|
|
2570
|
+
borderRadius: "0.5rem",
|
|
2571
|
+
display: "flex",
|
|
2572
|
+
alignItems: "center",
|
|
2573
|
+
justifyContent: "center",
|
|
2574
|
+
marginRight: "0.75rem"
|
|
2575
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Mail, { size: 18, style: { color: "white" } }) }),
|
|
2576
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2577
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: "Email" }),
|
|
2578
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.email })
|
|
2579
|
+
] })
|
|
2580
|
+
]
|
|
2581
|
+
}
|
|
2582
|
+
),
|
|
2583
|
+
contact.workingHours && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
|
|
2584
|
+
display: "flex",
|
|
2585
|
+
alignItems: "center",
|
|
2586
|
+
padding: "0.75rem",
|
|
2587
|
+
borderRadius: "0.75rem",
|
|
2588
|
+
backgroundColor: "var(--bg-body)",
|
|
2589
|
+
borderWidth: "1px",
|
|
2590
|
+
borderColor: "var(--border-color)"
|
|
2591
|
+
}, children: [
|
|
2592
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
|
|
2593
|
+
width: "2.5rem",
|
|
2594
|
+
height: "2.5rem",
|
|
2595
|
+
borderRadius: "0.5rem",
|
|
2596
|
+
display: "flex",
|
|
2597
|
+
alignItems: "center",
|
|
2598
|
+
justifyContent: "center",
|
|
2599
|
+
marginRight: "0.75rem"
|
|
2600
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { size: 18, style: { color: "white" } }) }),
|
|
2601
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2602
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contactList.card.workingHours") || "Giờ làm việc" }),
|
|
2603
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.workingHours || t("contactList.card.defaultWorkingHours") || "T2-T6: 8:00-18:00" })
|
|
2778
2604
|
] })
|
|
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 })
|
|
2605
|
+
] })
|
|
2790
2606
|
] })
|
|
2791
2607
|
] });
|
|
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
2608
|
};
|
|
2797
2609
|
const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback, section }) => {
|
|
2798
2610
|
const [feedbacks, setFeedbacks] = useState([]);
|
|
@@ -2876,7 +2688,7 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
|
|
|
2876
2688
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2877
2689
|
"div",
|
|
2878
2690
|
{
|
|
2879
|
-
className:
|
|
2691
|
+
className: "\r\n inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 \r\n border shadow-sm \r\n section-badge\r\n ",
|
|
2880
2692
|
children: [
|
|
2881
2693
|
"💬 ",
|
|
2882
2694
|
sectionTitle
|
|
@@ -2887,37 +2699,19 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
|
|
|
2887
2699
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2888
2700
|
"div",
|
|
2889
2701
|
{
|
|
2890
|
-
className:
|
|
2702
|
+
className: "card",
|
|
2891
2703
|
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: [
|
|
2704
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("blockquote", { className: "card-text text-lg lg:text-xl italic mb-6 leading-relaxed", children: [
|
|
2705
|
+
'"',
|
|
2706
|
+
currentFeedback.content,
|
|
2707
|
+
'"'
|
|
2708
|
+
] }),
|
|
2709
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4", children: [
|
|
2904
2710
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-3xl", children: "👤" }),
|
|
2905
2711
|
/* @__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
|
-
)
|
|
2712
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-title text-base mb-1", children: currentFeedback.customerName }),
|
|
2713
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-link text-sm", children: currentFeedback.customerTitle }),
|
|
2714
|
+
currentFeedback.customerCompany && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-text text-xs mt-1", children: currentFeedback.customerCompany })
|
|
2921
2715
|
] })
|
|
2922
2716
|
] })
|
|
2923
2717
|
]
|
|
@@ -2928,8 +2722,11 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
|
|
|
2928
2722
|
"button",
|
|
2929
2723
|
{
|
|
2930
2724
|
onClick: () => setCurrentIndex(index2),
|
|
2931
|
-
|
|
2932
|
-
|
|
2725
|
+
"aria-label": t("customerFeedback.switchToFeedback", { number: index2 + 1 }) || `Chuyển đến phản hồi ${index2 + 1}`,
|
|
2726
|
+
className: `
|
|
2727
|
+
w-2.5 h-2.5 rounded-full transition-all duration-300
|
|
2728
|
+
${index2 === currentIndex ? "bg-brand-secondary" : "bg-surface hover:bg-brand-primary"}
|
|
2729
|
+
`
|
|
2933
2730
|
},
|
|
2934
2731
|
index2
|
|
2935
2732
|
)) })
|
|
@@ -3183,28 +2980,12 @@ const TextWithTitleSection = ({ section, data, isDarkMode }) => {
|
|
|
3183
2980
|
const textItems = (data == null ? void 0 : data.sectionDataBindingItems) || [];
|
|
3184
2981
|
const title = ((_a = textItems[0]) == null ? void 0 : _a.value) || "";
|
|
3185
2982
|
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 }),
|
|
2983
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-6xl mx-auto", children: [
|
|
2984
|
+
title && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title font-black mb-4 leading-tight text-left text-main", children: title }),
|
|
3196
2985
|
descriptions.map((item, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3197
2986
|
"div",
|
|
3198
2987
|
{
|
|
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
|
-
},
|
|
2988
|
+
className: `text-body leading-relaxed text-left font-normal text-muted ${index2 < descriptions.length - 1 ? "mb-4" : ""}`,
|
|
3208
2989
|
children: item.value
|
|
3209
2990
|
},
|
|
3210
2991
|
item.id || index2
|
|
@@ -3213,19 +2994,10 @@ const TextWithTitleSection = ({ section, data, isDarkMode }) => {
|
|
|
3213
2994
|
};
|
|
3214
2995
|
const TextSection = ({ data, isDarkMode }) => {
|
|
3215
2996
|
const textItems = (data == null ? void 0 : data.sectionDataBindingItems) || [];
|
|
3216
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", {
|
|
2997
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-3xl mx-auto", children: textItems.map((item, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3217
2998
|
"div",
|
|
3218
2999
|
{
|
|
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
|
-
},
|
|
3000
|
+
className: "mb-5 text-subtitle font-black leading-snug text-left text-main",
|
|
3229
3001
|
children: item.value
|
|
3230
3002
|
},
|
|
3231
3003
|
item.id || index2
|
|
@@ -3272,25 +3044,23 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3272
3044
|
};
|
|
3273
3045
|
return icons[iconName] || Settings;
|
|
3274
3046
|
};
|
|
3275
|
-
const
|
|
3047
|
+
const getColorStyles = (index2) => {
|
|
3276
3048
|
const isCyan = index2 % 2 === 0;
|
|
3277
3049
|
if (isCyan) {
|
|
3278
3050
|
return {
|
|
3279
|
-
|
|
3280
|
-
|
|
3281
|
-
|
|
3282
|
-
|
|
3283
|
-
|
|
3284
|
-
iconBg: "bg-cyan-500/20"
|
|
3051
|
+
gradient: "linear-gradient(to right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
|
|
3052
|
+
border: "var(--gradient-brand-soft-start)",
|
|
3053
|
+
line: "var(--gradient-brand-soft-start)",
|
|
3054
|
+
iconBg: "var(--gradient-brand-soft-start)",
|
|
3055
|
+
shadow: "rgba(59, 130, 246, 0.2)"
|
|
3285
3056
|
};
|
|
3286
3057
|
}
|
|
3287
3058
|
return {
|
|
3288
|
-
|
|
3289
|
-
|
|
3290
|
-
|
|
3291
|
-
|
|
3292
|
-
|
|
3293
|
-
iconBg: "bg-purple-500/20"
|
|
3059
|
+
gradient: "linear-gradient(to right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
|
|
3060
|
+
border: "var(--gradient-accent-soft-start)",
|
|
3061
|
+
line: "var(--gradient-accent-soft-start)",
|
|
3062
|
+
iconBg: "var(--gradient-accent-soft-start)",
|
|
3063
|
+
shadow: "rgba(139, 92, 246, 0.2)"
|
|
3294
3064
|
};
|
|
3295
3065
|
};
|
|
3296
3066
|
const calculateAngles = (count) => {
|
|
@@ -3300,12 +3070,13 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3300
3070
|
};
|
|
3301
3071
|
const angles = calculateAngles(modules.length);
|
|
3302
3072
|
if (isMobile) {
|
|
3303
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
3073
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "w-full p-4 relative overflow-hidden bg-section-soft", children: [
|
|
3304
3074
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 overflow-hidden pointer-events-none opacity-20", children: [...Array(50)].map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3305
3075
|
"div",
|
|
3306
3076
|
{
|
|
3307
|
-
className:
|
|
3077
|
+
className: "absolute rounded-full bg-brand-primary",
|
|
3308
3078
|
style: {
|
|
3079
|
+
opacity: 0.2,
|
|
3309
3080
|
width: Math.random() * 3 + 1 + "px",
|
|
3310
3081
|
height: Math.random() * 3 + 1 + "px",
|
|
3311
3082
|
top: Math.random() * 100 + "%",
|
|
@@ -3326,26 +3097,38 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3326
3097
|
to { opacity: 1; transform: translateY(0); }
|
|
3327
3098
|
}
|
|
3328
3099
|
` }),
|
|
3329
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
3330
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-
|
|
3331
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-
|
|
3100
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-6 backdrop-blur-md rounded-2xl border-2 p-6 shadow-2xl text-center bg-gradient-brand border-brand-primary", children: [
|
|
3101
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-inverse mb-1 tracking-wide", children: diagramName }),
|
|
3102
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-inverse", children: diagramDescription })
|
|
3332
3103
|
] }),
|
|
3333
3104
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-3", children: modules.map((module, index2) => {
|
|
3334
3105
|
const Icon2 = getIconComponent(module.icon);
|
|
3335
|
-
const colors =
|
|
3106
|
+
const colors = getColorStyles(index2);
|
|
3336
3107
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3337
3108
|
"a",
|
|
3338
3109
|
{
|
|
3339
3110
|
href: module.url || "#",
|
|
3340
|
-
className:
|
|
3111
|
+
className: "block backdrop-blur-md rounded-2xl border-2 p-4 flex items-center gap-3 shadow-lg active:scale-95 transition-all duration-200",
|
|
3341
3112
|
style: {
|
|
3113
|
+
background: colors.gradient,
|
|
3114
|
+
borderColor: colors.border,
|
|
3342
3115
|
animation: `slideUp 0.5s ease-out ${index2 * 0.1}s both`
|
|
3343
3116
|
},
|
|
3344
3117
|
children: [
|
|
3345
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3118
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3119
|
+
"div",
|
|
3120
|
+
{
|
|
3121
|
+
className: "flex-shrink-0 p-3 rounded-xl border",
|
|
3122
|
+
style: {
|
|
3123
|
+
backgroundColor: `${colors.iconBg}33`,
|
|
3124
|
+
borderColor: colors.border
|
|
3125
|
+
},
|
|
3126
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "w-6 h-6 text-inverse", strokeWidth: 2 })
|
|
3127
|
+
}
|
|
3128
|
+
),
|
|
3346
3129
|
/* @__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-
|
|
3130
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-inverse text-small tracking-wide mb-1", children: module.name }),
|
|
3131
|
+
module.description && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-inverse text-caption", children: module.description })
|
|
3349
3132
|
] })
|
|
3350
3133
|
]
|
|
3351
3134
|
},
|
|
@@ -3354,12 +3137,13 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3354
3137
|
}) })
|
|
3355
3138
|
] });
|
|
3356
3139
|
}
|
|
3357
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
3140
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "section-wrapper w-full py-24 px-4 sm:px-8 relative overflow-visible bg-section-soft", children: [
|
|
3358
3141
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 overflow-hidden pointer-events-none", children: [...Array(100)].map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3359
3142
|
"div",
|
|
3360
3143
|
{
|
|
3361
|
-
className:
|
|
3144
|
+
className: "absolute rounded-full bg-brand-primary",
|
|
3362
3145
|
style: {
|
|
3146
|
+
opacity: isDarkMode ? 0.2 : 0.1,
|
|
3363
3147
|
width: Math.random() * 4 + 1 + "px",
|
|
3364
3148
|
height: Math.random() * 4 + 1 + "px",
|
|
3365
3149
|
top: Math.random() * 100 + "%",
|
|
@@ -3370,11 +3154,26 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3370
3154
|
},
|
|
3371
3155
|
i
|
|
3372
3156
|
)) }),
|
|
3373
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
|
|
3377
|
-
|
|
3157
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3158
|
+
"div",
|
|
3159
|
+
{
|
|
3160
|
+
className: "absolute inset-0",
|
|
3161
|
+
style: { opacity: isDarkMode ? 0.1 : 0.05 },
|
|
3162
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: "100%", height: "100%", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
3163
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("defs", { children: /* @__PURE__ */ jsxRuntimeExports.jsx("pattern", { id: "grid", width: "40", height: "40", patternUnits: "userSpaceOnUse", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3164
|
+
"path",
|
|
3165
|
+
{
|
|
3166
|
+
d: "M 40 0 L 0 0 0 40",
|
|
3167
|
+
fill: "none",
|
|
3168
|
+
stroke: "var(--brand-primary)",
|
|
3169
|
+
strokeWidth: "0.5"
|
|
3170
|
+
}
|
|
3171
|
+
) }) }),
|
|
3172
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("rect", { width: "100%", height: "100%", fill: "url(#grid)" })
|
|
3173
|
+
] })
|
|
3174
|
+
}
|
|
3175
|
+
),
|
|
3176
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "absolute inset-0 w-full h-full pointer-events-none", style: { opacity: isDarkMode ? 0.3 : 0.2 }, children: [
|
|
3378
3177
|
/* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "0", y1: "20%", x2: "100%", y2: "20%", stroke: "url(#grad1)", strokeWidth: "1", strokeDasharray: "10 5", className: "animate-pulse" }),
|
|
3379
3178
|
/* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "0", y1: "40%", x2: "100%", y2: "40%", stroke: "url(#grad2)", strokeWidth: "1", strokeDasharray: "15 8", className: "animate-pulse", style: { animationDelay: "0.5s" } }),
|
|
3380
3179
|
/* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "0", y1: "60%", x2: "100%", y2: "60%", stroke: "url(#grad1)", strokeWidth: "1", strokeDasharray: "12 6", className: "animate-pulse", style: { animationDelay: "1s" } }),
|
|
@@ -3383,20 +3182,20 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3383
3182
|
/* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "35%", y1: "0", x2: "35%", y2: "100%", stroke: "url(#grad2)", strokeWidth: "1", strokeDasharray: "15 8", className: "animate-pulse", style: { animationDelay: "0.8s" } }),
|
|
3384
3183
|
/* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "65%", y1: "0", x2: "65%", y2: "100%", stroke: "url(#grad1)", strokeWidth: "1", strokeDasharray: "12 6", className: "animate-pulse", style: { animationDelay: "1.3s" } }),
|
|
3385
3184
|
/* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "85%", y1: "0", x2: "85%", y2: "100%", stroke: "url(#grad2)", strokeWidth: "1", strokeDasharray: "8 4", className: "animate-pulse", style: { animationDelay: "1.8s" } }),
|
|
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: "
|
|
3185
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "15%", cy: "20%", r: "3", fill: "var(--gradient-brand-soft-start)", opacity: "0.6", className: "animate-pulse" }),
|
|
3186
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "35%", cy: "40%", r: "3", fill: "var(--gradient-accent-soft-start)", opacity: "0.6", className: "animate-pulse", style: { animationDelay: "0.5s" } }),
|
|
3187
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "65%", cy: "60%", r: "3", fill: "var(--gradient-brand-soft-start)", opacity: "0.6", className: "animate-pulse", style: { animationDelay: "1s" } }),
|
|
3188
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "85%", cy: "80%", r: "3", fill: "var(--gradient-accent-soft-start)", opacity: "0.6", className: "animate-pulse", style: { animationDelay: "1.5s" } }),
|
|
3390
3189
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("defs", { children: [
|
|
3391
3190
|
/* @__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: "
|
|
3191
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--gradient-brand-soft-start)", stopOpacity: 0 } }),
|
|
3192
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-brand-soft-start)", stopOpacity: 1 } }),
|
|
3193
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-brand-soft-start)", stopOpacity: 0 } })
|
|
3395
3194
|
] }),
|
|
3396
3195
|
/* @__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: "
|
|
3196
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--gradient-accent-soft-start)", stopOpacity: 0 } }),
|
|
3197
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-accent-soft-start)", stopOpacity: 1 } }),
|
|
3198
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-accent-soft-start)", stopOpacity: 0 } })
|
|
3400
3199
|
] })
|
|
3401
3200
|
] })
|
|
3402
3201
|
] }),
|
|
@@ -3457,41 +3256,77 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3457
3256
|
}
|
|
3458
3257
|
}
|
|
3459
3258
|
` }),
|
|
3460
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "diagram-container relative w-full max-w-5xl mx-auto h-[
|
|
3259
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "diagram-container relative w-full max-w-5xl mx-auto h-[800px] flex items-center justify-center transition-transform duration-300", style: { paddingTop: "80px", paddingBottom: "80px" }, children: [
|
|
3461
3260
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2", children: [
|
|
3462
3261
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute inset-0 w-[320px] h-[320px] -translate-x-1/2 -translate-y-1/2 top-1/2 left-1/2", children: [
|
|
3463
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3464
|
-
|
|
3262
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3263
|
+
"div",
|
|
3264
|
+
{
|
|
3265
|
+
className: "absolute inset-0 rounded-full border-2 animate-pulse-ring",
|
|
3266
|
+
style: { borderColor: "var(--brand-primary)", opacity: 0.3 }
|
|
3267
|
+
}
|
|
3268
|
+
),
|
|
3269
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3270
|
+
"div",
|
|
3271
|
+
{
|
|
3272
|
+
className: "absolute inset-4 rounded-full border-2 animate-pulse-ring",
|
|
3273
|
+
style: {
|
|
3274
|
+
borderColor: "var(--brand-secondary)",
|
|
3275
|
+
opacity: 0.3,
|
|
3276
|
+
animationDelay: "0.5s"
|
|
3277
|
+
}
|
|
3278
|
+
}
|
|
3279
|
+
)
|
|
3465
3280
|
] }),
|
|
3466
3281
|
/* @__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
|
-
}
|
|
3282
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3283
|
+
"div",
|
|
3284
|
+
{
|
|
3285
|
+
className: "w-64 h-64 rounded-full border-8 flex items-center justify-center backdrop-blur-sm shadow-2xl bg-surface",
|
|
3286
|
+
style: {
|
|
3287
|
+
borderColor: "var(--border-color)"
|
|
3477
3288
|
},
|
|
3478
|
-
|
|
3479
|
-
|
|
3480
|
-
|
|
3481
|
-
|
|
3482
|
-
|
|
3483
|
-
|
|
3484
|
-
|
|
3485
|
-
|
|
3486
|
-
|
|
3487
|
-
|
|
3289
|
+
children: [
|
|
3290
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 rounded-full", style: { animation: "rotate 20s linear infinite" }, children: [0, 90, 180, 270].map((angle) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3291
|
+
"div",
|
|
3292
|
+
{
|
|
3293
|
+
className: "absolute w-3 h-3 rounded-full shadow-lg bg-brand-primary",
|
|
3294
|
+
style: {
|
|
3295
|
+
boxShadow: "0 0 10px var(--brand-primary)",
|
|
3296
|
+
top: "50%",
|
|
3297
|
+
left: "50%",
|
|
3298
|
+
transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-125px)`
|
|
3299
|
+
}
|
|
3300
|
+
},
|
|
3301
|
+
angle
|
|
3302
|
+
)) }),
|
|
3303
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3304
|
+
"div",
|
|
3305
|
+
{
|
|
3306
|
+
className: "w-52 h-52 rounded-full flex items-center justify-center shadow-2xl relative overflow-hidden border-2 backdrop-blur-md bg-gradient-brand",
|
|
3307
|
+
style: {
|
|
3308
|
+
borderColor: isDarkMode ? "var(--gradient-brand-soft-start)" : "rgba(255, 255, 255, 0.4)"
|
|
3309
|
+
},
|
|
3310
|
+
children: [
|
|
3311
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-gradient-to-br from-white/10 to-transparent" }),
|
|
3312
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center relative z-10 px-4", children: [
|
|
3313
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-inverse mb-2 tracking-wide", children: diagramName }),
|
|
3314
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-inverse", children: diagramDescription })
|
|
3315
|
+
] })
|
|
3316
|
+
]
|
|
3317
|
+
}
|
|
3318
|
+
)
|
|
3319
|
+
]
|
|
3320
|
+
}
|
|
3321
|
+
),
|
|
3488
3322
|
modules.map((module, i) => {
|
|
3489
3323
|
const angle = angles[i];
|
|
3490
3324
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3491
3325
|
"div",
|
|
3492
3326
|
{
|
|
3493
|
-
className:
|
|
3327
|
+
className: "absolute w-4 h-4 rounded-full border-2 shadow-lg animate-pulse bg-muted",
|
|
3494
3328
|
style: {
|
|
3329
|
+
borderColor: "var(--border-color)",
|
|
3495
3330
|
top: "50%",
|
|
3496
3331
|
left: "50%",
|
|
3497
3332
|
transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-132px)`,
|
|
@@ -3504,7 +3339,7 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3504
3339
|
] })
|
|
3505
3340
|
] }),
|
|
3506
3341
|
/* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 pointer-events-none", width: "1000", height: "900", style: { overflow: "visible" }, children: modules.map((module, index2) => {
|
|
3507
|
-
const colors =
|
|
3342
|
+
const colors = getColorStyles(index2);
|
|
3508
3343
|
const angle = angles[index2] * Math.PI / 180;
|
|
3509
3344
|
const circleRadius = 132;
|
|
3510
3345
|
const moduleRadius = 360;
|
|
@@ -3545,7 +3380,7 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3545
3380
|
}) }),
|
|
3546
3381
|
modules.map((module, index2) => {
|
|
3547
3382
|
const Icon2 = getIconComponent(module.icon);
|
|
3548
|
-
const colors =
|
|
3383
|
+
const colors = getColorStyles(index2);
|
|
3549
3384
|
const angle = angles[index2] * Math.PI / 180;
|
|
3550
3385
|
const radius = 360;
|
|
3551
3386
|
const x = Math.cos(angle) * radius;
|
|
@@ -3567,19 +3402,11 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3567
3402
|
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3568
3403
|
"div",
|
|
3569
3404
|
{
|
|
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
|
-
`,
|
|
3405
|
+
className: `backdrop-blur-md rounded-full border-2 px-5 py-3 flex items-center gap-3 shadow-xl transition-all duration-300 group-hover:scale-110 group-hover:-translate-y-3 group-hover:shadow-2xl cursor-pointer relative ${isRightSide ? "flex-row-reverse" : "flex-row"}`,
|
|
3581
3406
|
style: {
|
|
3582
|
-
|
|
3407
|
+
background: colors.gradient,
|
|
3408
|
+
borderColor: colors.border,
|
|
3409
|
+
boxShadow: `0 10px 40px ${colors.shadow}`,
|
|
3583
3410
|
width: "240px",
|
|
3584
3411
|
height: "56px",
|
|
3585
3412
|
minWidth: "240px",
|
|
@@ -3587,14 +3414,49 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3587
3414
|
},
|
|
3588
3415
|
children: [
|
|
3589
3416
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 rounded-full bg-gradient-to-r from-transparent via-white/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300" }),
|
|
3590
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3591
|
-
|
|
3592
|
-
|
|
3593
|
-
|
|
3594
|
-
|
|
3595
|
-
|
|
3596
|
-
|
|
3597
|
-
|
|
3417
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3418
|
+
"div",
|
|
3419
|
+
{
|
|
3420
|
+
className: "absolute inset-0 rounded-full border-2 opacity-0 group-hover:opacity-100 transition-all duration-300 scale-110 blur-sm",
|
|
3421
|
+
style: { borderColor: colors.border }
|
|
3422
|
+
}
|
|
3423
|
+
),
|
|
3424
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3425
|
+
"div",
|
|
3426
|
+
{
|
|
3427
|
+
className: "flex-shrink-0 p-2.5 rounded-lg border transition-all duration-300 group-hover:rotate-12 group-hover:scale-125 relative z-10",
|
|
3428
|
+
style: {
|
|
3429
|
+
backgroundColor: `${colors.iconBg}33`,
|
|
3430
|
+
borderColor: colors.border
|
|
3431
|
+
},
|
|
3432
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "w-5 h-5 text-inverse", strokeWidth: 2 })
|
|
3433
|
+
}
|
|
3434
|
+
),
|
|
3435
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `flex-1 text-inverse text-small tracking-wide overflow-hidden text-ellipsis whitespace-nowrap ${isRightSide ? "text-right" : "text-left"} relative z-10 min-w-0`, children: module.name }),
|
|
3436
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3437
|
+
"div",
|
|
3438
|
+
{
|
|
3439
|
+
className: `absolute bottom-full left-1/2 -translate-x-1/2 mb-3 px-4 py-2 rounded-lg shadow-xl opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none whitespace-nowrap z-50 border max-w-xs ${isDarkMode ? "bg-surface" : "bg-body"}`,
|
|
3440
|
+
style: {
|
|
3441
|
+
borderColor: "var(--border-color)",
|
|
3442
|
+
maxHeight: "120px",
|
|
3443
|
+
overflowY: "auto"
|
|
3444
|
+
},
|
|
3445
|
+
children: [
|
|
3446
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-small text-main", children: module.name }),
|
|
3447
|
+
module.description && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-caption text-muted mt-1", children: module.description }),
|
|
3448
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3449
|
+
"div",
|
|
3450
|
+
{
|
|
3451
|
+
className: "absolute top-full left-1/2 -translate-x-1/2 -mt-px border-4 border-transparent",
|
|
3452
|
+
style: {
|
|
3453
|
+
borderTopColor: isDarkMode ? "var(--bg-surface)" : "var(--bg-body)"
|
|
3454
|
+
}
|
|
3455
|
+
}
|
|
3456
|
+
)
|
|
3457
|
+
]
|
|
3458
|
+
}
|
|
3459
|
+
)
|
|
3598
3460
|
]
|
|
3599
3461
|
}
|
|
3600
3462
|
)
|
|
@@ -3602,24 +3464,82 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
|
3602
3464
|
module.id
|
|
3603
3465
|
);
|
|
3604
3466
|
}),
|
|
3605
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3606
|
-
|
|
3607
|
-
|
|
3467
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3468
|
+
"div",
|
|
3469
|
+
{
|
|
3470
|
+
className: "absolute bottom-12 right-12 sm:bottom-16 sm:right-20 opacity-40 text-brand-secondary",
|
|
3471
|
+
style: { animation: "rotate 10s linear infinite" },
|
|
3472
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: "80", height: "80", viewBox: "0 0 60 60", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M30 0 L35 25 L60 30 L35 35 L30 60 L25 35 L0 30 L25 25 Z", fill: "currentColor" }) })
|
|
3473
|
+
}
|
|
3474
|
+
),
|
|
3475
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3476
|
+
"div",
|
|
3477
|
+
{
|
|
3478
|
+
className: "absolute top-12 left-12 w-16 h-16 border-2 rounded-lg animate-pulse border-brand-primary",
|
|
3479
|
+
style: {
|
|
3480
|
+
opacity: 0.3,
|
|
3481
|
+
animation: "rotate 8s linear infinite reverse"
|
|
3482
|
+
}
|
|
3483
|
+
}
|
|
3484
|
+
),
|
|
3485
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3486
|
+
"div",
|
|
3487
|
+
{
|
|
3488
|
+
className: "absolute top-20 right-16 w-12 h-12 border-2 rounded-full animate-pulse border-brand-secondary",
|
|
3489
|
+
style: {
|
|
3490
|
+
opacity: 0.3
|
|
3491
|
+
}
|
|
3492
|
+
}
|
|
3493
|
+
)
|
|
3608
3494
|
] })
|
|
3609
3495
|
] });
|
|
3610
3496
|
};
|
|
3611
|
-
const MindMapNode = ({ id, icon: Icon2, text, color, position, delay = 0, onDragStart, isDragging, onClick, description }) => {
|
|
3497
|
+
const MindMapNode = ({ id, icon: Icon2, text, color, position, delay = 0, onDragStart, isDragging, onClick, description, isDarkMode }) => {
|
|
3612
3498
|
const [isHovered, setIsHovered] = useState(false);
|
|
3613
3499
|
const [dragStartPos, setDragStartPos] = useState(null);
|
|
3614
3500
|
const [hasMoved, setHasMoved] = useState(false);
|
|
3615
|
-
const
|
|
3616
|
-
|
|
3617
|
-
|
|
3618
|
-
|
|
3619
|
-
|
|
3620
|
-
|
|
3621
|
-
|
|
3501
|
+
const getColorStyles = (colorName) => {
|
|
3502
|
+
const styles = {
|
|
3503
|
+
blue: {
|
|
3504
|
+
gradient: "linear-gradient(to bottom right, var(--brand-primary), var(--brand-primary))",
|
|
3505
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
|
|
3506
|
+
border: "var(--brand-primary)",
|
|
3507
|
+
shadowColor: "var(--brand-primary)"
|
|
3508
|
+
},
|
|
3509
|
+
teal: {
|
|
3510
|
+
gradient: "linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
|
|
3511
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-brand-strong-start), var(--gradient-brand-strong-end))",
|
|
3512
|
+
border: "var(--gradient-brand-soft-start)",
|
|
3513
|
+
shadowColor: "var(--gradient-brand-soft-start)"
|
|
3514
|
+
},
|
|
3515
|
+
purple: {
|
|
3516
|
+
gradient: "linear-gradient(to bottom right, var(--brand-secondary), var(--gradient-accent-soft-start))",
|
|
3517
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
|
|
3518
|
+
border: "var(--brand-secondary)",
|
|
3519
|
+
shadowColor: "var(--brand-secondary)"
|
|
3520
|
+
},
|
|
3521
|
+
orange: {
|
|
3522
|
+
gradient: "linear-gradient(to bottom right, var(--gradient-accent-strong-start), var(--gradient-accent-strong-end))",
|
|
3523
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
|
|
3524
|
+
border: "var(--gradient-accent-strong-start)",
|
|
3525
|
+
shadowColor: "var(--gradient-accent-strong-start)"
|
|
3526
|
+
},
|
|
3527
|
+
cyan: {
|
|
3528
|
+
gradient: "linear-gradient(to bottom right, var(--gradient-brand-strong-start), var(--gradient-brand-strong-end))",
|
|
3529
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
|
|
3530
|
+
border: "var(--gradient-brand-strong-start)",
|
|
3531
|
+
shadowColor: "var(--gradient-brand-strong-start)"
|
|
3532
|
+
},
|
|
3533
|
+
indigo: {
|
|
3534
|
+
gradient: "linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
|
|
3535
|
+
gradientHover: "linear-gradient(to bottom right, var(--gradient-accent-strong-start), var(--gradient-accent-strong-end))",
|
|
3536
|
+
border: "var(--gradient-accent-soft-start)",
|
|
3537
|
+
shadowColor: "var(--gradient-accent-soft-start)"
|
|
3538
|
+
}
|
|
3539
|
+
};
|
|
3540
|
+
return styles[colorName] || styles.blue;
|
|
3622
3541
|
};
|
|
3542
|
+
const colorStyle = getColorStyles(color);
|
|
3623
3543
|
const handleMouseDown = (e) => {
|
|
3624
3544
|
setDragStartPos({ x: e.clientX, y: e.clientY });
|
|
3625
3545
|
setHasMoved(false);
|
|
@@ -3702,12 +3622,45 @@ const MindMapNode = ({ id, icon: Icon2, text, color, position, delay = 0, onDrag
|
|
|
3702
3622
|
onTouchMove: handleTouchMove,
|
|
3703
3623
|
onTouchEnd: handleTouchEnd,
|
|
3704
3624
|
children: [
|
|
3705
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3706
|
-
|
|
3707
|
-
|
|
3708
|
-
|
|
3709
|
-
|
|
3710
|
-
|
|
3625
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3626
|
+
"div",
|
|
3627
|
+
{
|
|
3628
|
+
className: "backdrop-blur-md px-4 py-2.5 rounded-2xl shadow-2xl border-2 flex items-center gap-2.5 cursor-pointer transform transition-all duration-300",
|
|
3629
|
+
style: {
|
|
3630
|
+
background: isHovered || isDragging ? colorStyle.gradientHover : colorStyle.gradient,
|
|
3631
|
+
borderColor: colorStyle.border + "80",
|
|
3632
|
+
boxShadow: `0 10px 40px ${colorStyle.shadowColor}4D`,
|
|
3633
|
+
transform: isHovered || isDragging ? "scale(1.1)" : "scale(1)",
|
|
3634
|
+
filter: isHovered || isDragging ? "brightness(1.1)" : "brightness(1)",
|
|
3635
|
+
rotate: isDragging ? "2deg" : "0deg"
|
|
3636
|
+
},
|
|
3637
|
+
children: [
|
|
3638
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "w-4 h-4 flex-shrink-0 text-inverse" }),
|
|
3639
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-inverse text-small whitespace-nowrap", children: text })
|
|
3640
|
+
]
|
|
3641
|
+
}
|
|
3642
|
+
),
|
|
3643
|
+
isDragging && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3644
|
+
"div",
|
|
3645
|
+
{
|
|
3646
|
+
className: "absolute inset-0 rounded-2xl blur-xl animate-pulse",
|
|
3647
|
+
style: {
|
|
3648
|
+
background: "rgba(255, 255, 255, 0.1)",
|
|
3649
|
+
transform: "scale(1.5)"
|
|
3650
|
+
}
|
|
3651
|
+
}
|
|
3652
|
+
),
|
|
3653
|
+
(isHovered || isDragging) && description && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3654
|
+
"div",
|
|
3655
|
+
{
|
|
3656
|
+
className: `absolute top-full left-1/2 -translate-x-1/2 mt-2 px-3 py-2 text-caption rounded-lg shadow-xl border whitespace-nowrap z-50 max-w-xs ${isDarkMode ? "bg-surface text-inverse" : "bg-body text-main"}`,
|
|
3657
|
+
style: {
|
|
3658
|
+
borderColor: "var(--border-color)",
|
|
3659
|
+
opacity: 0.95
|
|
3660
|
+
},
|
|
3661
|
+
children: description
|
|
3662
|
+
}
|
|
3663
|
+
)
|
|
3711
3664
|
]
|
|
3712
3665
|
}
|
|
3713
3666
|
);
|
|
@@ -3928,49 +3881,108 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
|
|
|
3928
3881
|
"div",
|
|
3929
3882
|
{
|
|
3930
3883
|
ref: containerRef,
|
|
3931
|
-
className:
|
|
3932
|
-
style: {
|
|
3884
|
+
className: "mind-map-container relative w-full h-screen overflow-hidden bg-section-soft",
|
|
3885
|
+
style: {
|
|
3886
|
+
touchAction: "none"
|
|
3887
|
+
},
|
|
3933
3888
|
children: [
|
|
3934
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3935
|
-
|
|
3936
|
-
|
|
3937
|
-
|
|
3938
|
-
|
|
3939
|
-
|
|
3889
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3890
|
+
"div",
|
|
3891
|
+
{
|
|
3892
|
+
className: "absolute inset-0",
|
|
3893
|
+
style: { opacity: isDarkMode ? 0.3 : 0.2 },
|
|
3894
|
+
children: [
|
|
3895
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3896
|
+
"div",
|
|
3897
|
+
{
|
|
3898
|
+
className: "absolute inset-0 bg-gradient-brand",
|
|
3899
|
+
style: {
|
|
3900
|
+
opacity: 0.2
|
|
3901
|
+
}
|
|
3902
|
+
}
|
|
3903
|
+
),
|
|
3904
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3905
|
+
"div",
|
|
3906
|
+
{
|
|
3907
|
+
className: "absolute inset-0 bg-gradient-accent",
|
|
3908
|
+
style: {
|
|
3909
|
+
opacity: 0.1
|
|
3910
|
+
}
|
|
3911
|
+
}
|
|
3912
|
+
)
|
|
3913
|
+
]
|
|
3914
|
+
}
|
|
3915
|
+
),
|
|
3916
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3917
|
+
"div",
|
|
3918
|
+
{
|
|
3919
|
+
className: "absolute inset-0 pointer-events-none",
|
|
3920
|
+
style: { opacity: isDarkMode ? 0.6 : 0.4 },
|
|
3921
|
+
children: [...Array(150)].map((_, i) => {
|
|
3922
|
+
const colors = ["bg-brand-primary", "bg-brand-secondary"];
|
|
3923
|
+
const randomColor = colors[Math.floor(Math.random() * colors.length)];
|
|
3924
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3925
|
+
"div",
|
|
3926
|
+
{
|
|
3927
|
+
className: `absolute rounded-full ${randomColor}`,
|
|
3928
|
+
style: {
|
|
3929
|
+
left: `${Math.random() * 100}%`,
|
|
3930
|
+
top: `${Math.random() * 100}%`,
|
|
3931
|
+
width: `${Math.random() * 3 + 1}px`,
|
|
3932
|
+
height: `${Math.random() * 3 + 1}px`,
|
|
3933
|
+
animationName: "twinkle",
|
|
3934
|
+
animationDelay: `${Math.random() * 5}s`,
|
|
3935
|
+
animationDuration: `${4 + Math.random() * 6}s`,
|
|
3936
|
+
animationIterationCount: "infinite",
|
|
3937
|
+
animationTimingFunction: "ease-in-out"
|
|
3938
|
+
}
|
|
3939
|
+
},
|
|
3940
|
+
i
|
|
3941
|
+
);
|
|
3942
|
+
})
|
|
3943
|
+
}
|
|
3944
|
+
),
|
|
3945
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3940
3946
|
"div",
|
|
3941
3947
|
{
|
|
3942
|
-
className: "absolute
|
|
3943
|
-
style: {
|
|
3944
|
-
|
|
3945
|
-
|
|
3946
|
-
|
|
3947
|
-
|
|
3948
|
-
|
|
3949
|
-
|
|
3950
|
-
|
|
3951
|
-
|
|
3952
|
-
|
|
3953
|
-
|
|
3954
|
-
|
|
3955
|
-
|
|
3956
|
-
|
|
3957
|
-
backgroundSize: "40px 40px"
|
|
3958
|
-
} }) }),
|
|
3948
|
+
className: "absolute inset-0 pointer-events-none",
|
|
3949
|
+
style: { opacity: isDarkMode ? 0.1 : 0.05 },
|
|
3950
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3951
|
+
"div",
|
|
3952
|
+
{
|
|
3953
|
+
className: "absolute inset-0",
|
|
3954
|
+
style: {
|
|
3955
|
+
backgroundImage: isDarkMode ? "radial-gradient(circle at 1px 1px, var(--text-inverse) 1px, transparent 0)" : "radial-gradient(circle at 1px 1px, var(--text-main) 1px, transparent 0)",
|
|
3956
|
+
backgroundSize: "40px 40px",
|
|
3957
|
+
opacity: 0.15
|
|
3958
|
+
}
|
|
3959
|
+
}
|
|
3960
|
+
)
|
|
3961
|
+
}
|
|
3962
|
+
),
|
|
3959
3963
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute right-4 sm:right-16 bottom-4 sm:bottom-16 z-0 pointer-events-none", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
3960
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3964
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3965
|
+
"div",
|
|
3966
|
+
{
|
|
3967
|
+
className: "absolute inset-0 blur-3xl w-20 h-20 sm:w-32 sm:h-32 bg-gradient-brand",
|
|
3968
|
+
style: {
|
|
3969
|
+
opacity: 0.2
|
|
3970
|
+
}
|
|
3971
|
+
}
|
|
3972
|
+
),
|
|
3961
3973
|
/* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: "60", height: "60", viewBox: "0 0 80 80", className: "relative sm:w-24 sm:h-24", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M40 0 L45 35 L80 40 L45 45 L40 80 L35 45 L0 40 L35 35 Z", fill: "url(#sparkle-gradient)", opacity: "0.4" }) })
|
|
3962
3974
|
] }) }),
|
|
3963
3975
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "absolute inset-0 w-full h-full pointer-events-none", style: { zIndex: 1 }, children: [
|
|
3964
3976
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("defs", { children: [
|
|
3965
3977
|
/* @__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: "
|
|
3978
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--brand-primary)", stopOpacity: 0.6 } }),
|
|
3979
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-brand-soft-start)", stopOpacity: 0.9 } }),
|
|
3980
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-brand-soft-end)", stopOpacity: 0.6 } })
|
|
3969
3981
|
] }),
|
|
3970
3982
|
/* @__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: "
|
|
3983
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--brand-primary)" } }),
|
|
3984
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-brand-soft-start)" } }),
|
|
3985
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-brand-soft-end)" } })
|
|
3974
3986
|
] }),
|
|
3975
3987
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("filter", { id: "glow", children: [
|
|
3976
3988
|
/* @__PURE__ */ jsxRuntimeExports.jsx("feGaussianBlur", { stdDeviation: "4", result: "coloredBlur" }),
|
|
@@ -3985,11 +3997,11 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
|
|
|
3985
3997
|
"path",
|
|
3986
3998
|
{
|
|
3987
3999
|
d: line.path,
|
|
3988
|
-
stroke: "
|
|
4000
|
+
stroke: "var(--gradient-brand-soft-start)",
|
|
3989
4001
|
strokeWidth: "6",
|
|
3990
4002
|
fill: "none",
|
|
3991
4003
|
className: "transition-all duration-200",
|
|
3992
|
-
style: { filter: "blur(8px)" }
|
|
4004
|
+
style: { filter: "blur(8px)", opacity: 0.2 }
|
|
3993
4005
|
}
|
|
3994
4006
|
),
|
|
3995
4007
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -4021,7 +4033,8 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
|
|
|
4021
4033
|
delay: node.delay,
|
|
4022
4034
|
onDragStart: handleNodeDragStart,
|
|
4023
4035
|
isDragging: draggingNodeId === node.id,
|
|
4024
|
-
onClick: handleNodeClick
|
|
4036
|
+
onClick: handleNodeClick,
|
|
4037
|
+
isDarkMode
|
|
4025
4038
|
},
|
|
4026
4039
|
node.id
|
|
4027
4040
|
)) }),
|
|
@@ -4055,15 +4068,52 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
|
|
|
4055
4068
|
},
|
|
4056
4069
|
onTouchEnd: () => setIsDragging(false),
|
|
4057
4070
|
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
4058
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4059
|
-
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
|
|
4063
|
-
|
|
4064
|
-
|
|
4065
|
-
|
|
4066
|
-
|
|
4071
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4072
|
+
"div",
|
|
4073
|
+
{
|
|
4074
|
+
className: "absolute inset-0 rounded-full blur-2xl bg-brand-primary",
|
|
4075
|
+
style: {
|
|
4076
|
+
opacity: 0.3,
|
|
4077
|
+
transform: "scale(1.5)"
|
|
4078
|
+
}
|
|
4079
|
+
}
|
|
4080
|
+
),
|
|
4081
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4082
|
+
"div",
|
|
4083
|
+
{
|
|
4084
|
+
className: "relative px-6 sm:px-10 py-3 sm:py-5 rounded-3xl shadow-2xl border-4 flex items-center gap-3 sm:gap-4 backdrop-blur-md bg-gradient-brand",
|
|
4085
|
+
style: {
|
|
4086
|
+
borderColor: "var(--brand-primary)",
|
|
4087
|
+
borderOpacity: 0.5,
|
|
4088
|
+
transform: isDragging ? "scale(1.1)" : "scale(1)",
|
|
4089
|
+
transition: "transform 0.3s ease"
|
|
4090
|
+
},
|
|
4091
|
+
children: [
|
|
4092
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4093
|
+
"div",
|
|
4094
|
+
{
|
|
4095
|
+
className: "p-2 sm:p-3 rounded-xl backdrop-blur-sm",
|
|
4096
|
+
style: { backgroundColor: "rgba(255, 255, 255, 0.25)" },
|
|
4097
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(Briefcase, { className: "w-5 h-5 sm:w-7 sm:h-7 text-inverse" })
|
|
4098
|
+
}
|
|
4099
|
+
),
|
|
4100
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center", children: [
|
|
4101
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-inverse text-body sm:text-subtitle", children: diagramName }),
|
|
4102
|
+
diagramDescription && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-inverse text-caption sm:text-small opacity-90", children: diagramDescription })
|
|
4103
|
+
] })
|
|
4104
|
+
]
|
|
4105
|
+
}
|
|
4106
|
+
),
|
|
4107
|
+
!isDragging && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4108
|
+
"div",
|
|
4109
|
+
{
|
|
4110
|
+
className: `absolute -bottom-8 left-1/2 transform -translate-x-1/2 text-caption whitespace-nowrap ${isDarkMode ? "text-brand-primary" : "text-brand-secondary"}`,
|
|
4111
|
+
style: {
|
|
4112
|
+
opacity: 0.6
|
|
4113
|
+
},
|
|
4114
|
+
children: safeT("diagram.dragToMove")
|
|
4115
|
+
}
|
|
4116
|
+
)
|
|
4067
4117
|
] })
|
|
4068
4118
|
}
|
|
4069
4119
|
),
|
|
@@ -4083,13 +4133,12 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
|
|
|
4083
4133
|
animation: fadeIn 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
|
4084
4134
|
opacity: 0;
|
|
4085
4135
|
}
|
|
4086
|
-
.animate-twinkle { animation: twinkle 5s ease-in-out infinite; }
|
|
4087
4136
|
` })
|
|
4088
4137
|
]
|
|
4089
4138
|
}
|
|
4090
4139
|
);
|
|
4091
4140
|
};
|
|
4092
|
-
const FaqItem = ({ faq, index: index2, isActive, onToggle,
|
|
4141
|
+
const FaqItem = ({ faq, index: index2, isActive, onToggle, t }) => {
|
|
4093
4142
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4094
4143
|
"div",
|
|
4095
4144
|
{
|
|
@@ -4098,79 +4147,69 @@ const FaqItem = ({ faq, index: index2, isActive, onToggle, isDarkMode, t }) => {
|
|
|
4098
4147
|
animationFillMode: "both"
|
|
4099
4148
|
},
|
|
4100
4149
|
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: `
|
|
4150
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", style: { padding: 0 }, children: [
|
|
4151
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4152
|
+
"button",
|
|
4153
|
+
{
|
|
4154
|
+
onClick: onToggle,
|
|
4155
|
+
className: "w-full px-6 py-5 text-left flex items-start justify-between gap-4 rounded-xl group",
|
|
4156
|
+
children: [
|
|
4157
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "card-title flex-1", children: faq.question }),
|
|
4158
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `
|
|
4128
4159
|
flex-shrink-0 w-10 h-10 rounded-full flex items-center justify-center
|
|
4129
4160
|
transition-all duration-500 transform
|
|
4130
|
-
${isActive ?
|
|
4161
|
+
${isActive ? "bg-gradient-to-br from-blue-500 to-purple-600 text-white shadow-lg shadow-blue-500/50 rotate-180 scale-110" : "bg-gray-700/50 text-gray-400 group-hover:bg-gray-600 group-hover:scale-110"}
|
|
4131
4162
|
`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: `w-5 h-5 transition-transform duration-500 ${isActive ? "rotate-180" : ""}` }) })
|
|
4132
|
-
|
|
4133
|
-
|
|
4134
|
-
|
|
4135
|
-
|
|
4163
|
+
]
|
|
4164
|
+
}
|
|
4165
|
+
),
|
|
4166
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4167
|
+
"div",
|
|
4168
|
+
{
|
|
4169
|
+
style: {
|
|
4170
|
+
maxHeight: isActive ? "500px" : "0",
|
|
4171
|
+
opacity: isActive ? "1" : "0",
|
|
4172
|
+
overflow: "hidden",
|
|
4173
|
+
transition: "all 500ms ease-in-out"
|
|
4174
|
+
},
|
|
4175
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4136
4176
|
"div",
|
|
4137
4177
|
{
|
|
4138
|
-
className:
|
|
4139
|
-
|
|
4140
|
-
|
|
4141
|
-
|
|
4142
|
-
|
|
4143
|
-
|
|
4144
|
-
|
|
4145
|
-
|
|
4146
|
-
|
|
4147
|
-
|
|
4148
|
-
|
|
4149
|
-
|
|
4178
|
+
className: "px-6 pb-6 pt-2",
|
|
4179
|
+
style: {
|
|
4180
|
+
transform: isActive ? "translateY(0)" : "translateY(-10px)",
|
|
4181
|
+
transition: "transform 500ms ease-in-out"
|
|
4182
|
+
},
|
|
4183
|
+
children: [
|
|
4184
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4185
|
+
"div",
|
|
4186
|
+
{
|
|
4187
|
+
className: "h-px w-full mb-4",
|
|
4188
|
+
style: {
|
|
4189
|
+
background: "linear-gradient(to right, transparent, var(--border-color), transparent)"
|
|
4190
|
+
}
|
|
4191
|
+
}
|
|
4192
|
+
),
|
|
4193
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-text leading-relaxed", children: faq.answer }),
|
|
4150
4194
|
faq.url && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4151
4195
|
"a",
|
|
4152
4196
|
{
|
|
4153
4197
|
href: faq.url,
|
|
4154
4198
|
target: "_blank",
|
|
4155
4199
|
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
|
-
`,
|
|
4200
|
+
className: "card-link mt-4",
|
|
4162
4201
|
children: [
|
|
4163
4202
|
(t == null ? void 0 : t("faq.learn_more")) || "Learn more",
|
|
4164
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-4 h-4
|
|
4203
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
|
|
4165
4204
|
]
|
|
4166
4205
|
}
|
|
4167
4206
|
)
|
|
4168
|
-
]
|
|
4207
|
+
]
|
|
4169
4208
|
}
|
|
4170
4209
|
)
|
|
4171
|
-
|
|
4172
|
-
|
|
4173
|
-
)
|
|
4210
|
+
}
|
|
4211
|
+
)
|
|
4212
|
+
] })
|
|
4174
4213
|
}
|
|
4175
4214
|
);
|
|
4176
4215
|
};
|
|
@@ -4188,22 +4227,39 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
|
|
|
4188
4227
|
const sectionTitle = (section == null ? void 0 : section.title) || "...";
|
|
4189
4228
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(SectionWrapper, { isDarkMode, children: [
|
|
4190
4229
|
/* @__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",
|
|
4230
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center mb-6 animate-fade-in", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4231
|
+
"div",
|
|
4197
4232
|
{
|
|
4198
|
-
className: "w-
|
|
4199
|
-
|
|
4200
|
-
|
|
4201
|
-
|
|
4233
|
+
className: "w-10 h-10 rounded-lg flex items-center justify-center",
|
|
4234
|
+
style: {
|
|
4235
|
+
background: "linear-gradient(to bottom right, var(--brand-primary), var(--brand-secondary))",
|
|
4236
|
+
boxShadow: "0 10px 15px -3px var(--card-shadow)",
|
|
4237
|
+
transition: "transform 300ms cubic-bezier(0.4, 0, 0.2, 1)"
|
|
4238
|
+
},
|
|
4239
|
+
onMouseEnter: (e) => e.currentTarget.style.transform = "scale(1.1)",
|
|
4240
|
+
onMouseLeave: (e) => e.currentTarget.style.transform = "scale(1)",
|
|
4241
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4242
|
+
"svg",
|
|
4243
|
+
{
|
|
4244
|
+
className: "w-6 h-6 text-white",
|
|
4245
|
+
fill: "currentColor",
|
|
4246
|
+
viewBox: "0 0 24 24",
|
|
4247
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z" })
|
|
4248
|
+
}
|
|
4249
|
+
)
|
|
4202
4250
|
}
|
|
4203
|
-
) })
|
|
4251
|
+
) }),
|
|
4204
4252
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-12 animate-fade-in", children: [
|
|
4205
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className:
|
|
4206
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4253
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-main mb-3", children: sectionTitle }),
|
|
4254
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4255
|
+
"div",
|
|
4256
|
+
{
|
|
4257
|
+
className: "h-1 w-20 mx-auto rounded-full",
|
|
4258
|
+
style: {
|
|
4259
|
+
background: "linear-gradient(to right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))"
|
|
4260
|
+
}
|
|
4261
|
+
}
|
|
4262
|
+
)
|
|
4207
4263
|
] }),
|
|
4208
4264
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-4", children: faqs.map((faq, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4209
4265
|
FaqItem,
|
|
@@ -4212,7 +4268,6 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
|
|
|
4212
4268
|
index: index2,
|
|
4213
4269
|
isActive: activeIndex === index2,
|
|
4214
4270
|
onToggle: () => toggleFaq(index2),
|
|
4215
|
-
isDarkMode,
|
|
4216
4271
|
t
|
|
4217
4272
|
},
|
|
4218
4273
|
faq.id || index2
|
|
@@ -4229,7 +4284,6 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
|
|
|
4229
4284
|
transform: translateY(0);
|
|
4230
4285
|
}
|
|
4231
4286
|
}
|
|
4232
|
-
|
|
4233
4287
|
@keyframes slide-up {
|
|
4234
4288
|
from {
|
|
4235
4289
|
opacity: 0;
|
|
@@ -4240,11 +4294,9 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
|
|
|
4240
4294
|
transform: translateY(0);
|
|
4241
4295
|
}
|
|
4242
4296
|
}
|
|
4243
|
-
|
|
4244
4297
|
.animate-fade-in {
|
|
4245
4298
|
animation: fade-in 0.8s ease-out;
|
|
4246
4299
|
}
|
|
4247
|
-
|
|
4248
4300
|
.animate-slide-up {
|
|
4249
4301
|
animation: slide-up 0.6s ease-out;
|
|
4250
4302
|
}
|
|
@@ -4285,141 +4337,147 @@ const PageHighlightSection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
|
4285
4337
|
return () => clearInterval(interval);
|
|
4286
4338
|
}, [highlightData.length]);
|
|
4287
4339
|
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"
|
|
4340
|
+
"btn-primary"
|
|
4294
4341
|
];
|
|
4295
4342
|
const defaultImage = "https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=1200&h=800&fit=crop&q=80";
|
|
4296
4343
|
if (!highlightData.length) {
|
|
4297
4344
|
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: `py-20 ${isDarkMode ? "bg-slate-950" : "bg-white"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 text-center", children: [
|
|
4298
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: `text-lg font-semibold mb-2
|
|
4299
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
4345
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: `text-lg font-semibold mb-2 text-main`, children: t("highlight.noData.title") || "Chưa có dữ liệu" }),
|
|
4346
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted", children: t("highlight.noData.description") || "Hiện tại chưa có sản phẩm nào được thiết lập." })
|
|
4300
4347
|
] }) });
|
|
4301
4348
|
}
|
|
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;
|
|
4349
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4350
|
+
"section",
|
|
4351
|
+
{
|
|
4352
|
+
className: "relative overflow-hidden",
|
|
4353
|
+
style: {
|
|
4354
|
+
background: isDarkMode ? "linear-gradient(to bottom right, var(--color-gray-950), var(--color-gray-900), var(--color-gray-950))" : "linear-gradient(to bottom right, var(--bg-primary), #eff6ff50, #f3e8ff50)"
|
|
4355
|
+
},
|
|
4356
|
+
children: [
|
|
4357
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute inset-0 overflow-hidden pointer-events-none", children: [
|
|
4358
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4359
|
+
"div",
|
|
4360
|
+
{
|
|
4361
|
+
className: "absolute top-20 right-10 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob",
|
|
4362
|
+
style: {
|
|
4363
|
+
backgroundColor: isDarkMode ? "var(--gradient-brand-soft-start)" : "var(--gradient-brand-soft-start)"
|
|
4364
|
+
}
|
|
4365
|
+
}
|
|
4366
|
+
),
|
|
4367
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4368
|
+
"div",
|
|
4369
|
+
{
|
|
4370
|
+
className: "absolute top-40 -left-20 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob animation-delay-2000",
|
|
4371
|
+
style: {
|
|
4372
|
+
backgroundColor: isDarkMode ? "var(--gradient-accent-soft-start)" : "var(--gradient-accent-soft-start)",
|
|
4373
|
+
animationDelay: "2s"
|
|
4374
|
+
}
|
|
4375
|
+
}
|
|
4376
|
+
),
|
|
4377
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4378
|
+
"div",
|
|
4379
|
+
{
|
|
4380
|
+
className: "absolute -bottom-20 right-40 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob animation-delay-4000",
|
|
4381
|
+
style: {
|
|
4382
|
+
backgroundColor: isDarkMode ? "var(--gradient-accent-soft-end)" : "var(--gradient-accent-soft-end)",
|
|
4383
|
+
animationDelay: "4s"
|
|
4384
|
+
}
|
|
4385
|
+
}
|
|
4386
|
+
)
|
|
4387
|
+
] }),
|
|
4388
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative w-full px-4 sm:px-6 lg:px-8 py-16 sm:py-24", children: [
|
|
4389
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative w-full", children: highlightData.map((item, index2) => {
|
|
4390
|
+
const color = gradientClasses[index2 % gradientClasses.length];
|
|
4391
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4392
|
+
"div",
|
|
4393
|
+
{
|
|
4394
|
+
className: `transition-opacity duration-700 ${activeTab === index2 ? "opacity-100" : "opacity-0 absolute inset-0 pointer-events-none"}`,
|
|
4395
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `${isDarkMode ? "bg-gradient-to-br from-slate-900/30 to-slate-950/30 border-slate-700/20" : "bg-white/40 border-white/30"} backdrop-blur-md rounded-3xl shadow-lg overflow-hidden border transition-colors duration-500`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-0 min-h-[420px] lg:h-auto", children: [
|
|
4396
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative h-[280px] lg:h-full overflow-hidden group", children: [
|
|
4397
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4398
|
+
"img",
|
|
4399
|
+
{
|
|
4400
|
+
src: item.image || defaultImage,
|
|
4401
|
+
alt: item.title,
|
|
4402
|
+
className: "w-full h-full object-cover transition-transform duration-700 group-hover:scale-110",
|
|
4403
|
+
onError: (e) => {
|
|
4404
|
+
e.target.src = defaultImage;
|
|
4405
|
+
}
|
|
4370
4406
|
}
|
|
4371
|
-
|
|
4372
|
-
|
|
4373
|
-
|
|
4374
|
-
|
|
4375
|
-
|
|
4376
|
-
|
|
4377
|
-
|
|
4378
|
-
|
|
4379
|
-
|
|
4380
|
-
|
|
4381
|
-
|
|
4382
|
-
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
|
|
4407
|
+
),
|
|
4408
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 bg-gradient-to-br ${color} opacity-20` }),
|
|
4409
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent" })
|
|
4410
|
+
] }),
|
|
4411
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-5 lg:p-8 flex flex-col justify-center", children: [
|
|
4412
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-3xl lg:text-4xl font-black mb-3 text-gradient-brand", children: item.title }),
|
|
4413
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mb-6 text-muted", children: item.description }),
|
|
4414
|
+
item.features && item.features.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-2 mb-6", children: item.features.map((feature, idx) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start gap-2 group", children: [
|
|
4415
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-0.5 w-4 h-4 rounded-full bg-gradient-accent flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-2.5 h-2.5 text-inverse", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 3, d: "M5 13l4 4L19 7" }) }) }),
|
|
4416
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-muted group-hover:text-main font-medium text-xs transition-colors", children: feature })
|
|
4417
|
+
] }, idx)) }),
|
|
4418
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4419
|
+
"a",
|
|
4420
|
+
{
|
|
4421
|
+
href: item.slug,
|
|
4422
|
+
rel: "noopener noreferrer",
|
|
4423
|
+
className: `group relative px-6 py-3 rounded-xl font-bold text-sm transition-all duration-300 transform hover:scale-105 hover:shadow-2xl overflow-hidden bg-gradient-to-r ${color} text-white shadow-xl w-full text-center`,
|
|
4424
|
+
onClick: (e) => {
|
|
4425
|
+
if (!e.ctrlKey && !e.metaKey && e.button !== 1) {
|
|
4426
|
+
e.preventDefault();
|
|
4427
|
+
window.location.href = item.slug;
|
|
4428
|
+
}
|
|
4429
|
+
},
|
|
4430
|
+
children: [
|
|
4431
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "relative z-10 flex items-center justify-center gap-2", children: [
|
|
4432
|
+
t("highlight.cta") || "Khám phá",
|
|
4433
|
+
" ",
|
|
4434
|
+
item.title,
|
|
4435
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4436
|
+
"svg",
|
|
4386
4437
|
{
|
|
4387
|
-
|
|
4388
|
-
|
|
4389
|
-
|
|
4390
|
-
|
|
4438
|
+
className: "w-5 h-5 group-hover:translate-x-1 transition-transform",
|
|
4439
|
+
fill: "none",
|
|
4440
|
+
viewBox: "0 0 24 24",
|
|
4441
|
+
stroke: "currentColor",
|
|
4442
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4443
|
+
"path",
|
|
4444
|
+
{
|
|
4445
|
+
strokeLinecap: "round",
|
|
4446
|
+
strokeLinejoin: "round",
|
|
4447
|
+
strokeWidth: 2,
|
|
4448
|
+
d: "M17 8l4 4m0 0l-4 4m4-4H3"
|
|
4449
|
+
}
|
|
4450
|
+
)
|
|
4391
4451
|
}
|
|
4392
4452
|
)
|
|
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: `
|
|
4453
|
+
] }),
|
|
4454
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-white/20 transform scale-x-0 group-hover:scale-x-100 transition-transform origin-left" })
|
|
4455
|
+
]
|
|
4456
|
+
}
|
|
4457
|
+
)
|
|
4458
|
+
] })
|
|
4459
|
+
] }) })
|
|
4460
|
+
},
|
|
4461
|
+
index2
|
|
4462
|
+
);
|
|
4463
|
+
}) }),
|
|
4464
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-wrap justify-center gap-4 mt-12", children: highlightData.map((item, index2) => {
|
|
4465
|
+
const color = gradientClasses[index2 % gradientClasses.length];
|
|
4466
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4467
|
+
"button",
|
|
4468
|
+
{
|
|
4469
|
+
onClick: () => setActiveTab(index2),
|
|
4470
|
+
className: `group relative px-8 py-4 rounded-xl font-bold text-lg transition-all duration-300 transform hover:scale-105 overflow-hidden ${activeTab === index2 ? `bg-gradient-to-r ${color} text-white shadow-xl` : isDarkMode ? "bg-gray-800/50 text-gray-300 hover:shadow-xl shadow-lg border border-gray-700/50 backdrop-blur-sm" : "bg-white text-gray-700 hover:shadow-xl shadow-lg"}`,
|
|
4471
|
+
children: [
|
|
4472
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "relative z-10", children: item.title }),
|
|
4473
|
+
activeTab !== index2 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 bg-gradient-to-r ${color} opacity-0 group-hover:opacity-100 transition-opacity duration-300` })
|
|
4474
|
+
]
|
|
4475
|
+
},
|
|
4476
|
+
index2
|
|
4477
|
+
);
|
|
4478
|
+
}) })
|
|
4479
|
+
] }),
|
|
4480
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("style", { jsx: true, children: `
|
|
4423
4481
|
@keyframes blob {
|
|
4424
4482
|
0%, 100% {
|
|
4425
4483
|
transform: translate(0px, 0px) scale(1);
|
|
@@ -4456,7 +4514,9 @@ const PageHighlightSection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
|
4456
4514
|
background-size: 50px 50px;
|
|
4457
4515
|
}
|
|
4458
4516
|
` })
|
|
4459
|
-
|
|
4517
|
+
]
|
|
4518
|
+
}
|
|
4519
|
+
);
|
|
4460
4520
|
};
|
|
4461
4521
|
const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl = "" }) => {
|
|
4462
4522
|
var _a;
|
|
@@ -4481,23 +4541,9 @@ const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4481
4541
|
maxWidth: "1400px",
|
|
4482
4542
|
margin: "0 auto"
|
|
4483
4543
|
}, 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 })
|
|
4544
|
+
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-12", children: [
|
|
4545
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-main mb-4", children: sectionTitle }),
|
|
4546
|
+
sectionDescription && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-muted max-w-3xl mx-auto", children: sectionDescription })
|
|
4501
4547
|
] }),
|
|
4502
4548
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4503
4549
|
display: "grid",
|
|
@@ -4510,30 +4556,13 @@ const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4510
4556
|
"a",
|
|
4511
4557
|
{
|
|
4512
4558
|
href: page.slug,
|
|
4559
|
+
className: "card",
|
|
4513
4560
|
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
4561
|
alignItems: "center",
|
|
4524
4562
|
textAlign: "center",
|
|
4525
4563
|
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";
|
|
4564
|
+
textDecoration: "none",
|
|
4565
|
+
padding: "32px 20px"
|
|
4537
4566
|
},
|
|
4538
4567
|
children: [
|
|
4539
4568
|
iconUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
@@ -4554,13 +4583,7 @@ const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4554
4583
|
}
|
|
4555
4584
|
}
|
|
4556
4585
|
) }),
|
|
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 })
|
|
4586
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-body", style: { margin: 0 }, children: page.title })
|
|
4564
4587
|
]
|
|
4565
4588
|
},
|
|
4566
4589
|
page.id
|
|
@@ -4624,44 +4647,25 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4624
4647
|
maxWidth: "1280px",
|
|
4625
4648
|
margin: "0 auto"
|
|
4626
4649
|
}, 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 }),
|
|
4650
|
+
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-main mb-10 uppercase tracking-wide", children: sectionTitle }),
|
|
4635
4651
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4636
4652
|
display: "flex",
|
|
4637
4653
|
flexDirection: "column",
|
|
4638
4654
|
gap: "24px"
|
|
4639
4655
|
}, children: visiblePages.map((page) => {
|
|
4640
|
-
var _a2, _b;
|
|
4656
|
+
var _a2, _b, _c;
|
|
4641
4657
|
const mainImage = ((_b = (_a2 = page.pageImages) == null ? void 0 : _a2.find((img) => img.isMain)) == null ? void 0 : _b.url) || page.icon;
|
|
4642
4658
|
const imageUrl = getImageUrl(mainImage);
|
|
4643
4659
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4644
4660
|
"a",
|
|
4645
4661
|
{
|
|
4646
4662
|
href: page.slug,
|
|
4663
|
+
className: "card",
|
|
4647
4664
|
style: {
|
|
4648
|
-
|
|
4665
|
+
flexDirection: "row",
|
|
4649
4666
|
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
4667
|
textDecoration: "none"
|
|
4658
4668
|
},
|
|
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
4669
|
children: [
|
|
4666
4670
|
imageUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4667
4671
|
width: "200px",
|
|
@@ -4681,33 +4685,10 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4681
4685
|
}
|
|
4682
4686
|
}
|
|
4683
4687
|
) }),
|
|
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 })
|
|
4688
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col justify-center flex-1", children: [
|
|
4689
|
+
((_c = page.tagKeys) == null ? void 0 : _c.length) > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-link ", children: page.tagKeys[0].key }),
|
|
4690
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title mb-2 leading-snug", children: page.title }),
|
|
4691
|
+
page.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text m-0", children: page.description })
|
|
4711
4692
|
] }),
|
|
4712
4693
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4713
4694
|
display: "flex",
|
|
@@ -4717,10 +4698,7 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4717
4698
|
ChevronRight,
|
|
4718
4699
|
{
|
|
4719
4700
|
size: 20,
|
|
4720
|
-
|
|
4721
|
-
color: isDarkMode ? "#9ca3af" : "#d1d5db",
|
|
4722
|
-
transition: "color 0.2s"
|
|
4723
|
-
}
|
|
4701
|
+
className: "card-text"
|
|
4724
4702
|
}
|
|
4725
4703
|
) })
|
|
4726
4704
|
]
|
|
@@ -4732,6 +4710,7 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4732
4710
|
"button",
|
|
4733
4711
|
{
|
|
4734
4712
|
onClick: handleLoadMore,
|
|
4713
|
+
className: "btn-primary",
|
|
4735
4714
|
style: {
|
|
4736
4715
|
display: "inline-flex",
|
|
4737
4716
|
alignItems: "center",
|
|
@@ -4740,20 +4719,9 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4740
4719
|
fontSize: "16px",
|
|
4741
4720
|
fontWeight: "600",
|
|
4742
4721
|
color: "#fff",
|
|
4743
|
-
backgroundColor: "#361985ff",
|
|
4744
4722
|
border: "none",
|
|
4745
4723
|
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)";
|
|
4724
|
+
cursor: "pointer"
|
|
4757
4725
|
},
|
|
4758
4726
|
children: [
|
|
4759
4727
|
t("pageChildrenSelect.moreInsights"),
|
|
@@ -4785,12 +4753,7 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4785
4753
|
maxWidth: "1400px",
|
|
4786
4754
|
margin: "0 auto"
|
|
4787
4755
|
}, children: [
|
|
4788
|
-
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", {
|
|
4789
|
-
fontSize: "36px",
|
|
4790
|
-
fontWeight: "700",
|
|
4791
|
-
marginBottom: "50px",
|
|
4792
|
-
color: isDarkMode ? "#f1f5f9" : "#1e293b"
|
|
4793
|
-
}, children: sectionTitle }),
|
|
4756
|
+
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title mb-12 text-main", children: sectionTitle }),
|
|
4794
4757
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4795
4758
|
display: "grid",
|
|
4796
4759
|
gridTemplateColumns: "repeat(auto-fit, minmax(350px, 1fr))",
|
|
@@ -4804,24 +4767,12 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4804
4767
|
"a",
|
|
4805
4768
|
{
|
|
4806
4769
|
href: page.slug,
|
|
4770
|
+
className: "card",
|
|
4807
4771
|
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
4772
|
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)";
|
|
4773
|
+
display: "block",
|
|
4774
|
+
padding: "0",
|
|
4775
|
+
overflow: "hidden"
|
|
4825
4776
|
},
|
|
4826
4777
|
children: [
|
|
4827
4778
|
imageUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
@@ -4848,26 +4799,13 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4848
4799
|
}
|
|
4849
4800
|
}
|
|
4850
4801
|
) }),
|
|
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"
|
|
4802
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { padding: "1.5rem" }, children: [
|
|
4803
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-subtitle", style: {
|
|
4804
|
+
minHeight: "56px",
|
|
4805
|
+
marginBottom: "0.75rem"
|
|
4861
4806
|
}, 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"
|
|
4807
|
+
page.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text line-clamp-2", style: {
|
|
4808
|
+
marginBottom: "1rem"
|
|
4871
4809
|
}, children: page.description })
|
|
4872
4810
|
] })
|
|
4873
4811
|
]
|
|
@@ -4882,6 +4820,7 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4882
4820
|
"button",
|
|
4883
4821
|
{
|
|
4884
4822
|
onClick: handleLoadMore,
|
|
4823
|
+
className: "btn-primary",
|
|
4885
4824
|
style: {
|
|
4886
4825
|
display: "inline-flex",
|
|
4887
4826
|
alignItems: "center",
|
|
@@ -4890,22 +4829,9 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4890
4829
|
fontSize: "16px",
|
|
4891
4830
|
fontWeight: "600",
|
|
4892
4831
|
color: "#ffffff",
|
|
4893
|
-
backgroundColor: "#361985ff",
|
|
4894
4832
|
border: "none",
|
|
4895
4833
|
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)";
|
|
4834
|
+
cursor: "pointer"
|
|
4909
4835
|
},
|
|
4910
4836
|
children: [
|
|
4911
4837
|
t("pageChildrenSelect.moreInsights"),
|