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