nvis-fe-cms-libs 1.1.42 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/nvis-fe-cms-libs.es.js +1309 -1383
- package/dist/nvis-fe-cms-libs.es.js.map +1 -1
- package/dist/nvis-fe-cms-libs.umd.js +1309 -1383
- package/dist/nvis-fe-cms-libs.umd.js.map +1 -1
- package/package.json +1 -1
|
@@ -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,41 +394,28 @@ var __async = (__this, __arguments, generator) => {
|
|
|
395
394
|
const items = [
|
|
396
395
|
{
|
|
397
396
|
icon: "💡",
|
|
398
|
-
gradient: "bg-gradient-blue-soft",
|
|
399
|
-
textGradient: "text-gradient-blue-soft",
|
|
400
|
-
iconBg: isDarkMode ? "bg-blue-900/40" : "bg-blue-100",
|
|
401
|
-
iconColor: isDarkMode ? "text-blue-300" : "text-blue-600",
|
|
402
397
|
title: t("about.companyValues.vision") || "Tầm nhìn",
|
|
403
|
-
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"
|
|
404
400
|
},
|
|
405
401
|
{
|
|
406
402
|
icon: "🚀",
|
|
407
|
-
gradient: "bg-gradient-emerald-teal",
|
|
408
|
-
textGradient: "text-gradient-emerald-teal",
|
|
409
|
-
iconBg: isDarkMode ? "bg-emerald-900/40" : "bg-emerald-100",
|
|
410
|
-
iconColor: isDarkMode ? "text-emerald-300" : "text-emerald-600",
|
|
411
403
|
title: t("about.companyValues.mission") || "Sứ mệnh",
|
|
412
|
-
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"
|
|
413
406
|
},
|
|
414
407
|
{
|
|
415
408
|
icon: "💎",
|
|
416
|
-
gradient: "bg-gradient-purple-soft",
|
|
417
|
-
textGradient: "text-gradient-purple-soft",
|
|
418
|
-
iconBg: isDarkMode ? "bg-purple-900/40" : "bg-purple-100",
|
|
419
|
-
iconColor: isDarkMode ? "text-purple-300" : "text-purple-600",
|
|
420
409
|
title: t("about.companyValues.coreValues") || "Giá trị cốt lõi",
|
|
421
|
-
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"
|
|
422
412
|
}
|
|
423
413
|
];
|
|
424
|
-
const validItems = items.filter((item) => {
|
|
425
|
-
const originalText = item === items[0] ? safeCompanyData.vision : item === items[1] ? safeCompanyData.mission : safeCompanyData.coreValues;
|
|
426
|
-
return originalText || true;
|
|
427
|
-
});
|
|
428
414
|
const refs = require$$0.useRef([]);
|
|
429
415
|
const [visible, setVisible] = require$$0.useState([]);
|
|
430
416
|
require$$0.useEffect(() => {
|
|
431
|
-
setVisible(new Array(
|
|
432
|
-
if (
|
|
417
|
+
setVisible(new Array(items.length).fill(false));
|
|
418
|
+
if (items.length === 0) return;
|
|
433
419
|
const observer = new IntersectionObserver(
|
|
434
420
|
(entries) => {
|
|
435
421
|
entries.forEach((entry) => {
|
|
@@ -449,152 +435,43 @@ var __async = (__this, __arguments, generator) => {
|
|
|
449
435
|
{ threshold: 0.2 }
|
|
450
436
|
);
|
|
451
437
|
refs.current.forEach((el) => el && observer.observe(el));
|
|
452
|
-
return () =>
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
"
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
style: { color: isDarkMode ? "var(--text-tertiary)" : "var(--text-tertiary)" },
|
|
478
|
-
fill: "none",
|
|
479
|
-
stroke: "currentColor",
|
|
480
|
-
viewBox: "0 0 24 24",
|
|
481
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" })
|
|
482
|
-
}
|
|
483
|
-
)
|
|
484
|
-
}
|
|
485
|
-
),
|
|
486
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
487
|
-
"h3",
|
|
488
|
-
{
|
|
489
|
-
className: "text-lg font-semibold mb-2",
|
|
490
|
-
style: { color: isDarkMode ? "var(--text-primary)" : "var(--text-primary)" },
|
|
491
|
-
children: "Thông tin công ty"
|
|
492
|
-
}
|
|
493
|
-
),
|
|
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." })
|
|
445
|
+
] });
|
|
446
|
+
}
|
|
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 }),
|
|
494
463
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
495
464
|
"p",
|
|
496
465
|
{
|
|
497
|
-
className:
|
|
498
|
-
|
|
499
|
-
children: "Tầm nhìn, sứ mệnh và giá trị cốt lõi sẽ được cập nhật sớm."
|
|
466
|
+
className: `card-text leading-relaxed ${item.text.includes("sẽ được cập nhật") ? "italic opacity-75" : ""}`,
|
|
467
|
+
children: item.text
|
|
500
468
|
}
|
|
501
469
|
)
|
|
502
|
-
]
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
try {
|
|
508
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
509
|
-
"div",
|
|
510
|
-
{
|
|
511
|
-
ref: (el) => refs.current[index2] = el,
|
|
512
|
-
className: `
|
|
513
|
-
flex items-start space-x-4 rounded-2xl p-6
|
|
514
|
-
transform transition-all duration-700 ease-out
|
|
515
|
-
border backdrop-blur-sm
|
|
516
|
-
${visible[index2] ? "opacity-100 scale-100" : "opacity-0 scale-75"}
|
|
517
|
-
`,
|
|
518
|
-
style: __spreadValues({
|
|
519
|
-
transitionDelay: `${index2 * 200}ms`,
|
|
520
|
-
borderColor: isDarkMode ? "var(--border-primary)" : "var(--border-primary)",
|
|
521
|
-
backgroundColor: isDarkMode ? "var(--bg-secondary)" : "transparent"
|
|
522
|
-
}, isDarkMode && {
|
|
523
|
-
backgroundImage: `linear-gradient(to bottom right,
|
|
524
|
-
${index2 === 0 ? "var(--gradient-blue-soft-start)" : index2 === 1 ? "var(--gradient-emerald-start)" : "var(--gradient-purple-soft-start)"}15,
|
|
525
|
-
${index2 === 0 ? "var(--gradient-blue-soft-end)" : index2 === 1 ? "var(--gradient-emerald-end)" : "var(--gradient-purple-soft-end)"}10)`
|
|
526
|
-
}),
|
|
527
|
-
children: [
|
|
528
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
529
|
-
"div",
|
|
530
|
-
{
|
|
531
|
-
className: `w-10 h-10 rounded-lg flex items-center justify-center flex-shrink-0 ${item.iconBg} ${item.iconColor}`,
|
|
532
|
-
children: item.icon
|
|
533
|
-
}
|
|
534
|
-
),
|
|
535
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
536
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
537
|
-
"h3",
|
|
538
|
-
{
|
|
539
|
-
className: `text-lg font-bold mb-1 ${item.textGradient}`,
|
|
540
|
-
children: item.title
|
|
541
|
-
}
|
|
542
|
-
),
|
|
543
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
544
|
-
"p",
|
|
545
|
-
{
|
|
546
|
-
className: `leading-relaxed ${// Style khác nhau cho placeholder vs real content
|
|
547
|
-
item.text.includes("sẽ được cập nhật") ? "italic opacity-75" : ""}`,
|
|
548
|
-
style: {
|
|
549
|
-
color: isDarkMode ? "var(--text-secondary)" : "var(--text-secondary)"
|
|
550
|
-
},
|
|
551
|
-
children: item.text
|
|
552
|
-
}
|
|
553
|
-
)
|
|
554
|
-
] })
|
|
555
|
-
]
|
|
556
|
-
},
|
|
557
|
-
index2
|
|
558
|
-
);
|
|
559
|
-
} catch (error) {
|
|
560
|
-
console.error("Error rendering company value item:", item, error);
|
|
561
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
562
|
-
"div",
|
|
563
|
-
{
|
|
564
|
-
className: "flex items-start space-x-4 rounded-lg p-4 border opacity-50",
|
|
565
|
-
style: {
|
|
566
|
-
backgroundColor: isDarkMode ? "var(--bg-secondary)" : "var(--bg-secondary)",
|
|
567
|
-
borderColor: isDarkMode ? "var(--border-primary)" : "var(--border-primary)"
|
|
568
|
-
},
|
|
569
|
-
children: [
|
|
570
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
571
|
-
"div",
|
|
572
|
-
{
|
|
573
|
-
className: "w-10 h-10 rounded-lg flex items-center justify-center",
|
|
574
|
-
style: {
|
|
575
|
-
backgroundColor: isDarkMode ? "#7f1d1d40" : "#fee2e2",
|
|
576
|
-
color: isDarkMode ? "#fca5a5" : "#dc2626"
|
|
577
|
-
},
|
|
578
|
-
children: "❌"
|
|
579
|
-
}
|
|
580
|
-
),
|
|
581
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
582
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
583
|
-
"h3",
|
|
584
|
-
{
|
|
585
|
-
className: "text-lg font-bold mb-1",
|
|
586
|
-
style: { color: isDarkMode ? "var(--text-primary)" : "var(--text-primary)" },
|
|
587
|
-
children: "Lỗi hiển thị"
|
|
588
|
-
}
|
|
589
|
-
),
|
|
590
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: { color: isDarkMode ? "var(--text-secondary)" : "var(--text-secondary)" }, children: "Không thể hiển thị mục này do vấn đề dữ liệu." })
|
|
591
|
-
] })
|
|
592
|
-
]
|
|
593
|
-
},
|
|
594
|
-
`error-${index2}`
|
|
595
|
-
);
|
|
596
|
-
}
|
|
597
|
-
}) });
|
|
470
|
+
] })
|
|
471
|
+
] })
|
|
472
|
+
},
|
|
473
|
+
index2
|
|
474
|
+
)) });
|
|
598
475
|
};
|
|
599
476
|
const SectionWrapper = ({
|
|
600
477
|
variant = "softLight",
|
|
@@ -672,7 +549,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
672
549
|
] }),
|
|
673
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: [
|
|
674
551
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
|
|
675
|
-
/* @__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(
|
|
676
553
|
"div",
|
|
677
554
|
{
|
|
678
555
|
className: `w-full h-full rounded-full flex items-center justify-center overflow-hidden ${isDarkMode ? "bg-gray-900" : "bg-white"}`,
|
|
@@ -690,16 +567,10 @@ var __async = (__this, __arguments, generator) => {
|
|
|
690
567
|
e.target.parentElement.appendChild(fallbackDiv);
|
|
691
568
|
}
|
|
692
569
|
}
|
|
693
|
-
) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-2xl font-bold
|
|
570
|
+
) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-2xl font-bold text-gradient-brand", children: shortName })
|
|
694
571
|
}
|
|
695
572
|
) }),
|
|
696
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
697
|
-
"h1",
|
|
698
|
-
{
|
|
699
|
-
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)]"}`,
|
|
700
|
-
children: name
|
|
701
|
-
}
|
|
702
|
-
)
|
|
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 })
|
|
703
574
|
] }),
|
|
704
575
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-4xl mx-auto", children: [
|
|
705
576
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -728,32 +599,20 @@ var __async = (__this, __arguments, generator) => {
|
|
|
728
599
|
),
|
|
729
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: [
|
|
730
601
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
731
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
732
|
-
"
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
),
|
|
741
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
742
|
-
"h2",
|
|
743
|
-
{
|
|
744
|
-
className: `text-3xl lg:text-4xl font-bold mb-6 ${isDarkMode ? "text-white" : "text-gray-800"}`,
|
|
745
|
-
children: [
|
|
746
|
-
safeT("aboutCompany.story.title"),
|
|
747
|
-
" ",
|
|
748
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent", children: shortName })
|
|
749
|
-
]
|
|
750
|
-
}
|
|
751
|
-
),
|
|
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
|
+
] }),
|
|
752
611
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
753
612
|
"div",
|
|
754
613
|
{
|
|
755
614
|
dangerouslySetInnerHTML: { __html: description },
|
|
756
|
-
className:
|
|
615
|
+
className: "prose max-w-none transition-colors text-muted"
|
|
757
616
|
}
|
|
758
617
|
)
|
|
759
618
|
] }),
|
|
@@ -774,12 +633,12 @@ var __async = (__this, __arguments, generator) => {
|
|
|
774
633
|
] }) }) })
|
|
775
634
|
] });
|
|
776
635
|
};
|
|
777
|
-
const TimelineSection = ({ data, t,
|
|
778
|
-
var _a;
|
|
779
|
-
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)) || [];
|
|
780
639
|
const [timelineVisible, setTimelineVisible] = require$$0.useState([]);
|
|
781
640
|
const timelineRefs = require$$0.useRef([]);
|
|
782
|
-
const sectionTitle = (section == null ? void 0 : section.title) || "
|
|
641
|
+
const sectionTitle = (section == null ? void 0 : section.title) || "Timeline";
|
|
783
642
|
require$$0.useEffect(() => {
|
|
784
643
|
setTimelineVisible(new Array(timelineData.length).fill(false));
|
|
785
644
|
}, [timelineData.length]);
|
|
@@ -788,73 +647,38 @@ var __async = (__this, __arguments, generator) => {
|
|
|
788
647
|
(entries) => {
|
|
789
648
|
entries.forEach((entry) => {
|
|
790
649
|
if (entry.isIntersecting) {
|
|
791
|
-
const index2 = timelineRefs.current.findIndex(
|
|
650
|
+
const index2 = timelineRefs.current.findIndex(
|
|
651
|
+
(el) => el === entry.target
|
|
652
|
+
);
|
|
792
653
|
if (index2 !== -1) {
|
|
793
654
|
setTimelineVisible((prev) => {
|
|
794
|
-
const
|
|
795
|
-
|
|
796
|
-
return
|
|
655
|
+
const updated = [...prev];
|
|
656
|
+
updated[index2] = true;
|
|
657
|
+
return updated;
|
|
797
658
|
});
|
|
659
|
+
observer.unobserve(entry.target);
|
|
798
660
|
}
|
|
799
|
-
observer.unobserve(entry.target);
|
|
800
661
|
}
|
|
801
662
|
});
|
|
802
663
|
},
|
|
803
664
|
{ threshold: 0.1 }
|
|
804
665
|
);
|
|
805
666
|
timelineRefs.current.forEach((el) => el && observer.observe(el));
|
|
806
|
-
return () =>
|
|
807
|
-
timelineRefs.current.forEach((el) => el && observer.unobserve(el));
|
|
808
|
-
};
|
|
667
|
+
return () => timelineRefs.current.forEach((el) => el && observer.unobserve(el));
|
|
809
668
|
}, [timelineData.length]);
|
|
810
669
|
if (!timelineData.length) {
|
|
811
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className:
|
|
812
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className:
|
|
813
|
-
/* @__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." })
|
|
814
673
|
] }) });
|
|
815
674
|
}
|
|
816
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, {
|
|
817
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
818
|
-
"
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
children: [
|
|
822
|
-
"📈 ",
|
|
823
|
-
sectionTitle,
|
|
824
|
-
isDarkMode && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
825
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
826
|
-
"div",
|
|
827
|
-
{
|
|
828
|
-
className: "absolute w-12 h-12 bg-white/5 rounded-full",
|
|
829
|
-
style: { left: "10%", top: "20%" }
|
|
830
|
-
}
|
|
831
|
-
),
|
|
832
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
833
|
-
"div",
|
|
834
|
-
{
|
|
835
|
-
className: "absolute w-10 h-10 bg-white/5 rounded-full",
|
|
836
|
-
style: { right: "30%", bottom: "10%" }
|
|
837
|
-
}
|
|
838
|
-
),
|
|
839
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
840
|
-
"div",
|
|
841
|
-
{
|
|
842
|
-
className: "absolute w-14 h-14 bg-white/5 rounded-md",
|
|
843
|
-
style: { left: "20%", bottom: "30%" }
|
|
844
|
-
}
|
|
845
|
-
),
|
|
846
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
847
|
-
"div",
|
|
848
|
-
{
|
|
849
|
-
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'
|
|
850
|
-
}
|
|
851
|
-
)
|
|
852
|
-
] })
|
|
853
|
-
]
|
|
854
|
-
}
|
|
855
|
-
) }),
|
|
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
|
+
] }) }),
|
|
856
680
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
857
|
-
/* @__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" }),
|
|
858
682
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-8", children: timelineData.map((milestone, index2) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
859
683
|
"div",
|
|
860
684
|
{
|
|
@@ -862,64 +686,12 @@ var __async = (__this, __arguments, generator) => {
|
|
|
862
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"}`,
|
|
863
687
|
style: { transitionDelay: `${index2 * 200}ms` },
|
|
864
688
|
children: [
|
|
865
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
866
|
-
"div",
|
|
867
|
-
{
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
872
|
-
"div",
|
|
873
|
-
{
|
|
874
|
-
className: "absolute w-12 h-12 bg-white/5 rounded-full",
|
|
875
|
-
style: { left: "10%", top: "20%" }
|
|
876
|
-
}
|
|
877
|
-
),
|
|
878
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
879
|
-
"div",
|
|
880
|
-
{
|
|
881
|
-
className: "absolute w-10 h-10 bg-white/5 rounded-full",
|
|
882
|
-
style: { right: "30%", bottom: "10%" }
|
|
883
|
-
}
|
|
884
|
-
),
|
|
885
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
886
|
-
"div",
|
|
887
|
-
{
|
|
888
|
-
className: "absolute w-14 h-14 bg-white/5 rounded-md",
|
|
889
|
-
style: { left: "20%", bottom: "30%" }
|
|
890
|
-
}
|
|
891
|
-
),
|
|
892
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
893
|
-
"div",
|
|
894
|
-
{
|
|
895
|
-
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'
|
|
896
|
-
}
|
|
897
|
-
)
|
|
898
|
-
] }),
|
|
899
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-blue-600 font-bold text-xl mb-2", children: milestone.time }),
|
|
900
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
901
|
-
"h3",
|
|
902
|
-
{
|
|
903
|
-
className: `text-lg font-bold mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`,
|
|
904
|
-
children: milestone.title
|
|
905
|
-
}
|
|
906
|
-
),
|
|
907
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
908
|
-
"p",
|
|
909
|
-
{
|
|
910
|
-
className: `${isDarkMode ? "text-gray-300" : "text-gray-600"}`,
|
|
911
|
-
children: milestone.description
|
|
912
|
-
}
|
|
913
|
-
)
|
|
914
|
-
]
|
|
915
|
-
}
|
|
916
|
-
) }),
|
|
917
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
918
|
-
"div",
|
|
919
|
-
{
|
|
920
|
-
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`
|
|
921
|
-
}
|
|
922
|
-
),
|
|
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" }),
|
|
923
695
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1" })
|
|
924
696
|
]
|
|
925
697
|
},
|
|
@@ -931,6 +703,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
931
703
|
const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
|
|
932
704
|
const itemRef = require$$0.useRef(null);
|
|
933
705
|
const [visible, setVisible] = require$$0.useState(false);
|
|
706
|
+
const [isHovered, setIsHovered] = require$$0.useState(false);
|
|
934
707
|
require$$0.useEffect(() => {
|
|
935
708
|
const observer = new IntersectionObserver(
|
|
936
709
|
(entries) => {
|
|
@@ -952,93 +725,82 @@ var __async = (__this, __arguments, generator) => {
|
|
|
952
725
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
953
726
|
"div",
|
|
954
727
|
{
|
|
955
|
-
className: "absolute w-12 h-12
|
|
956
|
-
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)" }
|
|
957
730
|
}
|
|
958
731
|
),
|
|
959
732
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
960
733
|
"div",
|
|
961
734
|
{
|
|
962
|
-
className: "absolute w-10 h-10
|
|
963
|
-
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)" }
|
|
964
737
|
}
|
|
965
738
|
),
|
|
966
739
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
967
740
|
"div",
|
|
968
741
|
{
|
|
969
|
-
className: "absolute w-14 h-14
|
|
970
|
-
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)" }
|
|
971
744
|
}
|
|
972
745
|
),
|
|
973
746
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
974
747
|
"div",
|
|
975
748
|
{
|
|
976
|
-
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
|
+
}
|
|
977
753
|
}
|
|
978
754
|
)
|
|
979
755
|
] }),
|
|
980
|
-
/* @__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(
|
|
981
|
-
"img",
|
|
982
|
-
{
|
|
983
|
-
src: logoSrc,
|
|
984
|
-
alt: partner.name,
|
|
985
|
-
className: "logo-image max-w-full max-h-full object-contain"
|
|
986
|
-
}
|
|
987
|
-
) : /* @__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 }) }) }),
|
|
988
756
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
989
|
-
"
|
|
757
|
+
"div",
|
|
990
758
|
{
|
|
991
|
-
className:
|
|
992
|
-
|
|
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 }) })
|
|
993
780
|
}
|
|
994
781
|
),
|
|
995
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
996
|
-
|
|
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",
|
|
997
786
|
{
|
|
998
|
-
className:
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
1009
|
-
}
|
|
1010
|
-
.partner-card:hover {
|
|
1011
|
-
transform: translateY(-3px);
|
|
1012
|
-
box-shadow: 0 8px 20px ${isDarkMode ? "rgba(255,255,255,0.1)" : "rgba(0,0,0,0.1)"};
|
|
1013
|
-
}
|
|
1014
|
-
.logo-container {
|
|
1015
|
-
background: ${isDarkMode ? "linear-gradient(135deg, #374151 0%, #1f2937 100%)" : "linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%)"};
|
|
1016
|
-
border: 1px solid ${isDarkMode ? "#4b5563" : "#e2e8f0"};
|
|
1017
|
-
transition: all 0.3s ease;
|
|
1018
|
-
}
|
|
1019
|
-
.partner-card:hover .logo-container {
|
|
1020
|
-
border-color: #3b82f6;
|
|
1021
|
-
background: ${isDarkMode ? "linear-gradient(135deg, #4b5563 0%, #374151 100%)" : "linear-gradient(135deg, #ffffff 0%, #f8fafc 100%)"};
|
|
1022
|
-
}
|
|
1023
|
-
.logo-image {
|
|
1024
|
-
filter: ${isDarkMode ? "grayscale(0.3) opacity(0.8)" : "grayscale(0.2) opacity(0.9)"};
|
|
1025
|
-
transition: all 0.3s ease;
|
|
1026
|
-
}
|
|
1027
|
-
.partner-card:hover .logo-image {
|
|
1028
|
-
filter: grayscale(0) opacity(1);
|
|
1029
|
-
transform: scale(1.05);
|
|
1030
|
-
}
|
|
1031
|
-
.website-hint {
|
|
1032
|
-
opacity: 0;
|
|
1033
|
-
transform: translateY(4px);
|
|
1034
|
-
transition: all 0.3s ease;
|
|
1035
|
-
}
|
|
1036
|
-
.partner-card:hover .website-hint {
|
|
1037
|
-
opacity: 1;
|
|
1038
|
-
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
|
+
]
|
|
1039
797
|
}
|
|
1040
|
-
|
|
798
|
+
)
|
|
1041
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
|
+
};
|
|
1042
804
|
if (partner.websiteUrl) {
|
|
1043
805
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1044
806
|
"a",
|
|
@@ -1047,10 +809,12 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1047
809
|
href: partner.websiteUrl,
|
|
1048
810
|
target: "_blank",
|
|
1049
811
|
rel: "noopener noreferrer",
|
|
1050
|
-
className:
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
812
|
+
className: `${baseClasses} cursor-pointer`,
|
|
813
|
+
style: __spreadProps(__spreadValues({}, dynamicStyles), {
|
|
814
|
+
textDecoration: "none"
|
|
815
|
+
}),
|
|
816
|
+
onMouseEnter: () => setIsHovered(true),
|
|
817
|
+
onMouseLeave: () => setIsHovered(false),
|
|
1054
818
|
children: cardContent
|
|
1055
819
|
}
|
|
1056
820
|
);
|
|
@@ -1059,10 +823,10 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1059
823
|
"div",
|
|
1060
824
|
{
|
|
1061
825
|
ref: itemRef,
|
|
1062
|
-
className:
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
826
|
+
className: baseClasses,
|
|
827
|
+
style: dynamicStyles,
|
|
828
|
+
onMouseEnter: () => setIsHovered(true),
|
|
829
|
+
onMouseLeave: () => setIsHovered(false),
|
|
1066
830
|
children: cardContent
|
|
1067
831
|
}
|
|
1068
832
|
);
|
|
@@ -1079,14 +843,14 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1079
843
|
}, []);
|
|
1080
844
|
return width;
|
|
1081
845
|
}
|
|
1082
|
-
const PartnersSection = ({ data, t,
|
|
846
|
+
const PartnersSection = ({ data, t, imageBaseUrl = "", section }) => {
|
|
1083
847
|
var _a, _b;
|
|
1084
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)) || [];
|
|
1085
849
|
const [currentPartnerSlide, setCurrentPartnerSlide] = require$$0.useState(0);
|
|
1086
850
|
const [partnersVisible, setPartnersVisible] = require$$0.useState(false);
|
|
1087
851
|
const partnersRef = require$$0.useRef(null);
|
|
1088
852
|
const windowWidth = useWindowSize$1();
|
|
1089
|
-
const sectionTitle = (section == null ? void 0 : section.title) || "
|
|
853
|
+
const sectionTitle = (section == null ? void 0 : section.title) || t("partners.sectionTitle") || "Đối tác";
|
|
1090
854
|
const getLogoUrl = (logoUrl) => {
|
|
1091
855
|
if (!logoUrl) return null;
|
|
1092
856
|
if (logoUrl.startsWith("http")) return logoUrl;
|
|
@@ -1129,17 +893,11 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1129
893
|
return () => partnersRef.current && observer.unobserve(partnersRef.current);
|
|
1130
894
|
}, []);
|
|
1131
895
|
if (!partnersData.length) return null;
|
|
1132
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, {
|
|
1133
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1134
|
-
"
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
children: [
|
|
1138
|
-
"🤝 ",
|
|
1139
|
-
sectionTitle
|
|
1140
|
-
]
|
|
1141
|
-
}
|
|
1142
|
-
) }),
|
|
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
|
+
] }) }),
|
|
1143
901
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1144
902
|
"div",
|
|
1145
903
|
{
|
|
@@ -1155,8 +913,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1155
913
|
partner,
|
|
1156
914
|
idx,
|
|
1157
915
|
t,
|
|
1158
|
-
getLogoUrl
|
|
1159
|
-
isDarkMode
|
|
916
|
+
getLogoUrl
|
|
1160
917
|
},
|
|
1161
918
|
partner.id || idx
|
|
1162
919
|
)) })
|
|
@@ -1167,7 +924,8 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1167
924
|
"button",
|
|
1168
925
|
{
|
|
1169
926
|
onClick: () => setCurrentPartnerSlide(index2),
|
|
1170
|
-
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}`
|
|
1171
929
|
},
|
|
1172
930
|
index2
|
|
1173
931
|
)) })
|
|
@@ -1189,12 +947,9 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1189
947
|
try {
|
|
1190
948
|
setLoading(true);
|
|
1191
949
|
const res = yield getMilestoneTimeline();
|
|
1192
|
-
if (res.success)
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
setMilestones([]);
|
|
1196
|
-
}
|
|
1197
|
-
} catch (error) {
|
|
950
|
+
if (res.success) setMilestones(res.data || []);
|
|
951
|
+
else setMilestones([]);
|
|
952
|
+
} catch (e) {
|
|
1198
953
|
setMilestones([]);
|
|
1199
954
|
} finally {
|
|
1200
955
|
setLoading(false);
|
|
@@ -1215,67 +970,39 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1215
970
|
(entries) => {
|
|
1216
971
|
entries.forEach((entry) => {
|
|
1217
972
|
if (entry.isIntersecting) {
|
|
1218
|
-
const index2 = timelineRefs.current.findIndex(
|
|
1219
|
-
(el) => el === entry.target
|
|
1220
|
-
);
|
|
973
|
+
const index2 = timelineRefs.current.findIndex((el) => el === entry.target);
|
|
1221
974
|
if (index2 !== -1) {
|
|
1222
975
|
setTimelineVisible((prev) => {
|
|
1223
|
-
const
|
|
1224
|
-
|
|
1225
|
-
return
|
|
976
|
+
const updated = [...prev];
|
|
977
|
+
updated[index2] = true;
|
|
978
|
+
return updated;
|
|
1226
979
|
});
|
|
980
|
+
observer.unobserve(entry.target);
|
|
1227
981
|
}
|
|
1228
|
-
observer.unobserve(entry.target);
|
|
1229
982
|
}
|
|
1230
983
|
});
|
|
1231
984
|
},
|
|
1232
985
|
{ threshold: 0.1 }
|
|
1233
986
|
);
|
|
1234
987
|
timelineRefs.current.forEach((el) => el && observer.observe(el));
|
|
1235
|
-
return () =>
|
|
1236
|
-
timelineRefs.current.forEach((el) => el && observer.unobserve(el));
|
|
1237
|
-
};
|
|
988
|
+
return () => timelineRefs.current.forEach((el) => el && observer.unobserve(el));
|
|
1238
989
|
}, [milestones.length]);
|
|
1239
990
|
if (loading) {
|
|
1240
|
-
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") }) });
|
|
1241
992
|
}
|
|
1242
993
|
if (!milestones.length) {
|
|
1243
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1244
|
-
"
|
|
1245
|
-
{
|
|
1246
|
-
|
|
1247
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 text-center", children: [
|
|
1248
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1249
|
-
"h3",
|
|
1250
|
-
{
|
|
1251
|
-
className: `text-lg font-semibold mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`,
|
|
1252
|
-
children: t("milestone.status.noData")
|
|
1253
|
-
}
|
|
1254
|
-
),
|
|
1255
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1256
|
-
"p",
|
|
1257
|
-
{
|
|
1258
|
-
className: `${isDarkMode ? "text-gray-300" : "text-gray-600"}`,
|
|
1259
|
-
children: t("milestone.noDataDescription")
|
|
1260
|
-
}
|
|
1261
|
-
)
|
|
1262
|
-
] })
|
|
1263
|
-
}
|
|
1264
|
-
);
|
|
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
|
+
] }) });
|
|
1265
998
|
}
|
|
1266
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: [
|
|
1267
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1268
|
-
"
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
children: [
|
|
1272
|
-
"📈 ",
|
|
1273
|
-
sectionTitle
|
|
1274
|
-
]
|
|
1275
|
-
}
|
|
1276
|
-
) }),
|
|
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
|
+
] }) }),
|
|
1277
1004
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
1278
|
-
/* @__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" }),
|
|
1279
1006
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-8", children: milestones.map((milestone, index2) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1280
1007
|
"div",
|
|
1281
1008
|
{
|
|
@@ -1283,35 +1010,12 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1283
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"}`,
|
|
1284
1011
|
style: { transitionDelay: `${index2 * 200}ms` },
|
|
1285
1012
|
children: [
|
|
1286
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1287
|
-
"div",
|
|
1288
|
-
{
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1293
|
-
"h3",
|
|
1294
|
-
{
|
|
1295
|
-
className: `text-lg font-bold mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`,
|
|
1296
|
-
children: milestone.title
|
|
1297
|
-
}
|
|
1298
|
-
),
|
|
1299
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1300
|
-
"p",
|
|
1301
|
-
{
|
|
1302
|
-
className: `${isDarkMode ? "text-gray-300" : "text-gray-600"}`,
|
|
1303
|
-
children: milestone.description
|
|
1304
|
-
}
|
|
1305
|
-
)
|
|
1306
|
-
]
|
|
1307
|
-
}
|
|
1308
|
-
) }),
|
|
1309
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1310
|
-
"div",
|
|
1311
|
-
{
|
|
1312
|
-
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`
|
|
1313
|
-
}
|
|
1314
|
-
),
|
|
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" }),
|
|
1315
1019
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1" })
|
|
1316
1020
|
]
|
|
1317
1021
|
},
|
|
@@ -1320,105 +1024,81 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1320
1024
|
] })
|
|
1321
1025
|
] }) });
|
|
1322
1026
|
};
|
|
1323
|
-
const TestimonialsSection = ({ data, t,
|
|
1324
|
-
var _a;
|
|
1027
|
+
const TestimonialsSection = ({ data, t, section }) => {
|
|
1028
|
+
var _a, _b;
|
|
1325
1029
|
const [currentIndex, setCurrentIndex] = require$$0.useState(0);
|
|
1326
|
-
const
|
|
1327
|
-
const
|
|
1328
|
-
|
|
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;
|
|
1329
1034
|
return {
|
|
1330
1035
|
quote: ((_a2 = item.data) == null ? void 0 : _a2.content) || "",
|
|
1331
|
-
author: ((
|
|
1332
|
-
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) || "",
|
|
1333
1038
|
company: ((_d = item.data) == null ? void 0 : _d.customerCompany) || ""
|
|
1334
1039
|
};
|
|
1335
1040
|
})) || [];
|
|
1336
|
-
const fallbackTestimonials = [
|
|
1337
|
-
{
|
|
1338
|
-
quote: t("testimonials.fallback.testimonial1.quote"),
|
|
1339
|
-
author: t("testimonials.fallback.testimonial1.author"),
|
|
1340
|
-
position: t("testimonials.fallback.testimonial1.position"),
|
|
1341
|
-
company: t("testimonials.fallback.testimonial1.company")
|
|
1342
|
-
},
|
|
1343
|
-
{
|
|
1344
|
-
quote: t("testimonials.fallback.testimonial2.quote"),
|
|
1345
|
-
author: t("testimonials.fallback.testimonial2.author"),
|
|
1346
|
-
position: t("testimonials.fallback.testimonial2.position"),
|
|
1347
|
-
company: t("testimonials.fallback.testimonial2.company")
|
|
1348
|
-
},
|
|
1349
|
-
{
|
|
1350
|
-
quote: t("testimonials.fallback.testimonial3.quote"),
|
|
1351
|
-
author: t("testimonials.fallback.testimonial3.author"),
|
|
1352
|
-
position: t("testimonials.fallback.testimonial3.position"),
|
|
1353
|
-
company: t("testimonials.fallback.testimonial3.company")
|
|
1354
|
-
}
|
|
1355
|
-
];
|
|
1356
|
-
const displayTestimonials = testimonials.length > 0 ? testimonials : fallbackTestimonials;
|
|
1357
1041
|
require$$0.useEffect(() => {
|
|
1358
|
-
if (
|
|
1042
|
+
if (testimonials.length > 1) {
|
|
1359
1043
|
const interval = setInterval(() => {
|
|
1360
|
-
|
|
1044
|
+
setIsTransitioning(true);
|
|
1045
|
+
setTimeout(() => {
|
|
1046
|
+
setCurrentIndex((prev) => (prev + 1) % testimonials.length);
|
|
1047
|
+
setIsTransitioning(false);
|
|
1048
|
+
}, 300);
|
|
1361
1049
|
}, 5e3);
|
|
1362
1050
|
return () => clearInterval(interval);
|
|
1363
1051
|
}
|
|
1364
|
-
}, [
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
{
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
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
|
+
] }),
|
|
1376
1070
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
1377
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1071
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1378
1072
|
"div",
|
|
1379
1073
|
{
|
|
1380
|
-
|
|
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
|
+
},
|
|
1381
1079
|
children: [
|
|
1382
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1383
|
-
"
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
displayTestimonials[currentIndex].quote,
|
|
1389
|
-
'"'
|
|
1390
|
-
]
|
|
1391
|
-
}
|
|
1392
|
-
),
|
|
1393
|
-
/* @__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: [
|
|
1394
1086
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-3xl", children: "👤" }),
|
|
1395
1087
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
1396
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
className: `font-bold text-base transition-colors duration-200 ${isDarkMode ? "text-white" : "text-gray-900"}`,
|
|
1400
|
-
children: displayTestimonials[currentIndex].author
|
|
1401
|
-
}
|
|
1402
|
-
),
|
|
1403
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-blue-600 font-medium text-sm", children: displayTestimonials[currentIndex].position }),
|
|
1404
|
-
displayTestimonials[currentIndex].company && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1405
|
-
"div",
|
|
1406
|
-
{
|
|
1407
|
-
className: `text-xs transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-gray-600"}`,
|
|
1408
|
-
children: displayTestimonials[currentIndex].company
|
|
1409
|
-
}
|
|
1410
|
-
)
|
|
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 })
|
|
1411
1091
|
] })
|
|
1412
1092
|
] })
|
|
1413
1093
|
]
|
|
1414
|
-
}
|
|
1415
|
-
|
|
1416
|
-
)
|
|
1417
|
-
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(
|
|
1418
1097
|
"button",
|
|
1419
1098
|
{
|
|
1420
|
-
onClick: () =>
|
|
1421
|
-
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}`
|
|
1422
1102
|
},
|
|
1423
1103
|
index2
|
|
1424
1104
|
)) })
|
|
@@ -1426,54 +1106,82 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1426
1106
|
] }) });
|
|
1427
1107
|
};
|
|
1428
1108
|
const PartnerListCard = ({ partner, idx, t, isDarkMode, getLogoUrl }) => {
|
|
1429
|
-
const logoUrl = getLogoUrl(partner.
|
|
1430
|
-
return /* @__PURE__ */ jsxRuntimeExports.
|
|
1109
|
+
const logoUrl = getLogoUrl(partner.logoUrl);
|
|
1110
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1431
1111
|
"a",
|
|
1432
1112
|
{
|
|
1433
|
-
href: partner.
|
|
1434
|
-
target: partner.
|
|
1435
|
-
rel: partner.
|
|
1436
|
-
className:
|
|
1113
|
+
href: partner.websiteUrl || "#",
|
|
1114
|
+
target: partner.websiteUrl ? "_blank" : "_self",
|
|
1115
|
+
rel: partner.websiteUrl ? "noopener noreferrer" : "",
|
|
1116
|
+
className: "card",
|
|
1437
1117
|
style: {
|
|
1438
1118
|
animationDelay: `${idx * 0.1}s`,
|
|
1439
|
-
textDecoration: "none"
|
|
1119
|
+
textDecoration: "none",
|
|
1120
|
+
overflow: "hidden",
|
|
1121
|
+
minHeight: "280px",
|
|
1122
|
+
padding: "1.5rem",
|
|
1123
|
+
display: "flex",
|
|
1124
|
+
flexDirection: "column"
|
|
1440
1125
|
},
|
|
1441
|
-
children:
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
}
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "
|
|
1475
|
-
|
|
1476
|
-
|
|
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
|
+
] })
|
|
1477
1185
|
}
|
|
1478
1186
|
);
|
|
1479
1187
|
};
|
|
@@ -1488,7 +1196,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1488
1196
|
}, []);
|
|
1489
1197
|
return width;
|
|
1490
1198
|
}
|
|
1491
|
-
const PartnerListSection = ({ t,
|
|
1199
|
+
const PartnerListSection = ({ t, getPartnerList, imageBaseUrl = "", section }) => {
|
|
1492
1200
|
const [partnersData, setPartnersData] = require$$0.useState([]);
|
|
1493
1201
|
const [error, setError] = require$$0.useState(null);
|
|
1494
1202
|
const [loading, setLoading] = require$$0.useState(true);
|
|
@@ -1496,7 +1204,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1496
1204
|
const [partnersVisible, setPartnersVisible] = require$$0.useState(false);
|
|
1497
1205
|
const partnersRef = require$$0.useRef(null);
|
|
1498
1206
|
const windowWidth = useWindowSize();
|
|
1499
|
-
const sectionTitle = (section == null ? void 0 : section.title) || "
|
|
1207
|
+
const sectionTitle = (section == null ? void 0 : section.title) || t("partners.sectionTitle");
|
|
1500
1208
|
const getLogoUrl = (logoUrl) => {
|
|
1501
1209
|
if (!logoUrl) return null;
|
|
1502
1210
|
if (logoUrl.startsWith("http")) return logoUrl;
|
|
@@ -1541,9 +1249,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1541
1249
|
}
|
|
1542
1250
|
}, [partners.length]);
|
|
1543
1251
|
require$$0.useEffect(() => {
|
|
1544
|
-
const fallbackTimer = setTimeout(() =>
|
|
1545
|
-
setPartnersVisible(true);
|
|
1546
|
-
}, 500);
|
|
1252
|
+
const fallbackTimer = setTimeout(() => setPartnersVisible(true), 500);
|
|
1547
1253
|
const observer = new IntersectionObserver(
|
|
1548
1254
|
(entries) => {
|
|
1549
1255
|
entries.forEach((entry) => {
|
|
@@ -1556,54 +1262,46 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1556
1262
|
},
|
|
1557
1263
|
{ threshold: 0.1, rootMargin: "50px" }
|
|
1558
1264
|
);
|
|
1559
|
-
if (partnersRef.current)
|
|
1560
|
-
|
|
1561
|
-
} else {
|
|
1265
|
+
if (partnersRef.current) observer.observe(partnersRef.current);
|
|
1266
|
+
else {
|
|
1562
1267
|
clearTimeout(fallbackTimer);
|
|
1563
1268
|
setPartnersVisible(true);
|
|
1564
1269
|
}
|
|
1565
1270
|
return () => {
|
|
1566
1271
|
clearTimeout(fallbackTimer);
|
|
1567
|
-
if (partnersRef.current)
|
|
1568
|
-
observer.unobserve(partnersRef.current);
|
|
1569
|
-
}
|
|
1272
|
+
if (partnersRef.current) observer.unobserve(partnersRef.current);
|
|
1570
1273
|
};
|
|
1571
1274
|
}, []);
|
|
1572
1275
|
if (loading) {
|
|
1573
|
-
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..." }) });
|
|
1574
1277
|
}
|
|
1575
1278
|
if (error) {
|
|
1576
|
-
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 }) });
|
|
1577
1280
|
}
|
|
1578
1281
|
if (!partnersData.length) return null;
|
|
1579
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, {
|
|
1580
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1581
|
-
"
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
children: [
|
|
1585
|
-
"🤝 ",
|
|
1586
|
-
sectionTitle
|
|
1587
|
-
]
|
|
1588
|
-
}
|
|
1589
|
-
) }),
|
|
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
|
+
] }) }),
|
|
1590
1287
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1591
1288
|
"div",
|
|
1592
1289
|
{
|
|
1593
1290
|
className: `transition-all duration-1000 ease-out ${partnersVisible ? "opacity-100 scale-100" : "opacity-0 scale-95"}`,
|
|
1594
1291
|
children: [
|
|
1595
|
-
/* @__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(
|
|
1596
1293
|
"div",
|
|
1597
1294
|
{
|
|
1598
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"}`,
|
|
1599
|
-
style: {
|
|
1600
|
-
|
|
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(
|
|
1601
1300
|
PartnerListCard,
|
|
1602
1301
|
{
|
|
1603
1302
|
partner,
|
|
1604
1303
|
idx,
|
|
1605
1304
|
t,
|
|
1606
|
-
isDarkMode,
|
|
1607
1305
|
getLogoUrl
|
|
1608
1306
|
},
|
|
1609
1307
|
partner.id || `${slideIndex}-${idx}`
|
|
@@ -1611,11 +1309,34 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1611
1309
|
},
|
|
1612
1310
|
slideIndex
|
|
1613
1311
|
)) }) }),
|
|
1614
|
-
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(
|
|
1615
1317
|
"button",
|
|
1616
1318
|
{
|
|
1617
1319
|
onClick: () => setCurrentPartnerSlide(index2),
|
|
1618
|
-
|
|
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
|
+
},
|
|
1619
1340
|
"aria-label": `Slide ${index2 + 1}`
|
|
1620
1341
|
},
|
|
1621
1342
|
index2
|
|
@@ -2372,24 +2093,30 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2372
2093
|
setIsSubmitting(false);
|
|
2373
2094
|
}
|
|
2374
2095
|
});
|
|
2375
|
-
const inputBaseClasses = `
|
|
2376
|
-
|
|
2377
|
-
|
|
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: [
|
|
2378
2105
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center mb-6", children: [
|
|
2379
|
-
/* @__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" }) }),
|
|
2380
2107
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2381
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className:
|
|
2382
|
-
/* @__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" })
|
|
2383
2110
|
] })
|
|
2384
2111
|
] }),
|
|
2385
|
-
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: [
|
|
2386
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" }),
|
|
2387
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-
|
|
2114
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small font-medium", children: submitMessage })
|
|
2388
2115
|
] }) }),
|
|
2389
2116
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleSubmit, className: "space-y-6", children: [
|
|
2390
2117
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
|
|
2391
2118
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2392
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className:
|
|
2119
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
|
|
2393
2120
|
t("form.fields.fullName") || "Họ và tên",
|
|
2394
2121
|
" *"
|
|
2395
2122
|
] }),
|
|
@@ -2401,18 +2128,19 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2401
2128
|
value: formData.fullName || "",
|
|
2402
2129
|
onChange: handleInputChange,
|
|
2403
2130
|
onBlur: handleBlur,
|
|
2404
|
-
className:
|
|
2131
|
+
className: inputBaseClasses,
|
|
2132
|
+
style: { borderColor: formErrors.fullName ? "#ef4444" : "var(--border-color)" },
|
|
2405
2133
|
placeholder: t("contact.form.namePlaceholder"),
|
|
2406
2134
|
required: true
|
|
2407
2135
|
}
|
|
2408
2136
|
),
|
|
2409
|
-
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: [
|
|
2410
2138
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2411
2139
|
formErrors.fullName
|
|
2412
2140
|
] })
|
|
2413
2141
|
] }),
|
|
2414
2142
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2415
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className:
|
|
2143
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
|
|
2416
2144
|
t("form.fields.workEmail") || "Email",
|
|
2417
2145
|
" *"
|
|
2418
2146
|
] }),
|
|
@@ -2424,12 +2152,13 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2424
2152
|
value: formData.workEmail || "",
|
|
2425
2153
|
onChange: handleInputChange,
|
|
2426
2154
|
onBlur: handleBlur,
|
|
2427
|
-
className:
|
|
2155
|
+
className: inputBaseClasses,
|
|
2156
|
+
style: { borderColor: formErrors.workEmail ? "#ef4444" : "var(--border-color)" },
|
|
2428
2157
|
placeholder: "email@company.com",
|
|
2429
2158
|
required: true
|
|
2430
2159
|
}
|
|
2431
2160
|
),
|
|
2432
|
-
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: [
|
|
2433
2162
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2434
2163
|
formErrors.workEmail
|
|
2435
2164
|
] })
|
|
@@ -2437,7 +2166,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2437
2166
|
] }),
|
|
2438
2167
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
|
|
2439
2168
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2440
|
-
/* @__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" }),
|
|
2441
2170
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2442
2171
|
"input",
|
|
2443
2172
|
{
|
|
@@ -2446,17 +2175,18 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2446
2175
|
value: formData.phoneNumber || "",
|
|
2447
2176
|
onChange: handleInputChange,
|
|
2448
2177
|
onBlur: handleBlur,
|
|
2449
|
-
className:
|
|
2178
|
+
className: inputBaseClasses,
|
|
2179
|
+
style: { borderColor: formErrors.phoneNumber ? "#ef4444" : "var(--border-color)" },
|
|
2450
2180
|
placeholder: "0901 234 567"
|
|
2451
2181
|
}
|
|
2452
2182
|
),
|
|
2453
|
-
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: [
|
|
2454
2184
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2455
2185
|
formErrors.phoneNumber
|
|
2456
2186
|
] })
|
|
2457
2187
|
] }),
|
|
2458
2188
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2459
|
-
/* @__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" }),
|
|
2460
2190
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2461
2191
|
"input",
|
|
2462
2192
|
{
|
|
@@ -2465,11 +2195,12 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2465
2195
|
value: formData.companyName || "",
|
|
2466
2196
|
onChange: handleInputChange,
|
|
2467
2197
|
onBlur: handleBlur,
|
|
2468
|
-
className:
|
|
2198
|
+
className: inputBaseClasses,
|
|
2199
|
+
style: { borderColor: formErrors.companyName ? "#ef4444" : "var(--border-color)" },
|
|
2469
2200
|
placeholder: t("contact.form.fields.company")
|
|
2470
2201
|
}
|
|
2471
2202
|
),
|
|
2472
|
-
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: [
|
|
2473
2204
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2474
2205
|
formErrors.companyName
|
|
2475
2206
|
] })
|
|
@@ -2477,7 +2208,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2477
2208
|
] }),
|
|
2478
2209
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
|
|
2479
2210
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2480
|
-
/* @__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ụ" }),
|
|
2481
2212
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2482
2213
|
"input",
|
|
2483
2214
|
{
|
|
@@ -2486,17 +2217,18 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2486
2217
|
value: formData.jobTitle || "",
|
|
2487
2218
|
onChange: handleInputChange,
|
|
2488
2219
|
onBlur: handleBlur,
|
|
2489
|
-
className:
|
|
2220
|
+
className: inputBaseClasses,
|
|
2221
|
+
style: { borderColor: formErrors.jobTitle ? "#ef4444" : "var(--border-color)" },
|
|
2490
2222
|
placeholder: t("contact.form.positionPlaceholder")
|
|
2491
2223
|
}
|
|
2492
2224
|
),
|
|
2493
|
-
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: [
|
|
2494
2226
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2495
2227
|
formErrors.jobTitle
|
|
2496
2228
|
] })
|
|
2497
2229
|
] }),
|
|
2498
2230
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2499
|
-
/* @__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" }),
|
|
2500
2232
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2501
2233
|
"input",
|
|
2502
2234
|
{
|
|
@@ -2505,6 +2237,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2505
2237
|
value: formData.businessType || "",
|
|
2506
2238
|
onChange: handleInputChange,
|
|
2507
2239
|
className: inputBaseClasses,
|
|
2240
|
+
style: { borderColor: "var(--border-color)" },
|
|
2508
2241
|
placeholder: t("form.fields.businessType")
|
|
2509
2242
|
}
|
|
2510
2243
|
)
|
|
@@ -2512,7 +2245,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2512
2245
|
] }),
|
|
2513
2246
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
|
|
2514
2247
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2515
|
-
/* @__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" }),
|
|
2516
2249
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2517
2250
|
"input",
|
|
2518
2251
|
{
|
|
@@ -2521,12 +2254,13 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2521
2254
|
value: formData.expectedBudget || "",
|
|
2522
2255
|
onChange: handleInputChange,
|
|
2523
2256
|
className: inputBaseClasses,
|
|
2257
|
+
style: { borderColor: "var(--border-color)" },
|
|
2524
2258
|
placeholder: t("form.fields.expectedBudget")
|
|
2525
2259
|
}
|
|
2526
2260
|
)
|
|
2527
2261
|
] }),
|
|
2528
2262
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2529
|
-
/* @__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" }),
|
|
2530
2264
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2531
2265
|
"input",
|
|
2532
2266
|
{
|
|
@@ -2535,13 +2269,14 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2535
2269
|
value: formData.expectedTimeline || "",
|
|
2536
2270
|
onChange: handleInputChange,
|
|
2537
2271
|
className: inputBaseClasses,
|
|
2272
|
+
style: { borderColor: "var(--border-color)" },
|
|
2538
2273
|
placeholder: t("form.fields.expectedTimeline")
|
|
2539
2274
|
}
|
|
2540
2275
|
)
|
|
2541
2276
|
] })
|
|
2542
2277
|
] }),
|
|
2543
2278
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2544
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className:
|
|
2279
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
|
|
2545
2280
|
t("form.fields.requestTitle") || "Tiêu đề yêu cầu",
|
|
2546
2281
|
" *"
|
|
2547
2282
|
] }),
|
|
@@ -2553,18 +2288,19 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2553
2288
|
value: formData.requestTitle || "",
|
|
2554
2289
|
onChange: handleInputChange,
|
|
2555
2290
|
onBlur: handleBlur,
|
|
2556
|
-
className:
|
|
2291
|
+
className: inputBaseClasses,
|
|
2292
|
+
style: { borderColor: formErrors.requestTitle ? "#ef4444" : "var(--border-color)" },
|
|
2557
2293
|
placeholder: t("contact.form.placeholders.subject"),
|
|
2558
2294
|
required: true
|
|
2559
2295
|
}
|
|
2560
2296
|
),
|
|
2561
|
-
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: [
|
|
2562
2298
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2563
2299
|
formErrors.requestTitle
|
|
2564
2300
|
] })
|
|
2565
2301
|
] }),
|
|
2566
2302
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2567
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className:
|
|
2303
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
|
|
2568
2304
|
t("form.fields.requestDescription") || "Mô tả yêu cầu",
|
|
2569
2305
|
" *"
|
|
2570
2306
|
] }),
|
|
@@ -2576,48 +2312,32 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2576
2312
|
onChange: handleInputChange,
|
|
2577
2313
|
onBlur: handleBlur,
|
|
2578
2314
|
rows: "5",
|
|
2579
|
-
className: `${inputBaseClasses} resize-none
|
|
2315
|
+
className: `${inputBaseClasses} resize-none`,
|
|
2316
|
+
style: { borderColor: formErrors.requestDescription ? "#ef4444" : "var(--border-color)" },
|
|
2580
2317
|
placeholder: t("contact.form.placeholders.message"),
|
|
2581
2318
|
required: true
|
|
2582
2319
|
}
|
|
2583
2320
|
),
|
|
2584
|
-
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: [
|
|
2585
2322
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
|
|
2586
2323
|
formErrors.requestDescription
|
|
2587
2324
|
] })
|
|
2588
2325
|
] }),
|
|
2589
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
),
|
|
2605
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2606
|
-
"button",
|
|
2607
|
-
{
|
|
2608
|
-
type: "button",
|
|
2609
|
-
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"}`,
|
|
2610
|
-
children: [
|
|
2611
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Phone, { size: 20, className: "inline mr-2" }),
|
|
2612
|
-
t("form.callNow") || "Gọi ngay"
|
|
2613
|
-
]
|
|
2614
|
-
}
|
|
2615
|
-
)
|
|
2616
|
-
] }),
|
|
2617
|
-
/* @__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: [
|
|
2618
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { size: 16, className: "text-emerald-500" }),
|
|
2619
|
-
/* @__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ờ" })
|
|
2620
|
-
] })
|
|
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
|
+
) })
|
|
2621
2341
|
] })
|
|
2622
2342
|
] }) }) }) }) });
|
|
2623
2343
|
};
|
|
@@ -2627,65 +2347,110 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2627
2347
|
const sectionTitle = (section == null ? void 0 : section.title) || "...";
|
|
2628
2348
|
if (!contactData.length) return null;
|
|
2629
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: [
|
|
2630
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2631
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 22, className: "mr-2" }),
|
|
2632
|
-
sectionTitle
|
|
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 })
|
|
2633
2353
|
] }) }),
|
|
2634
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid md:grid-cols-2 lg:grid-cols-3 gap-8", children: contactData.map((contact, index2) => {
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
|
|
2658
|
-
|
|
2659
|
-
|
|
2660
|
-
)
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
}
|
|
2674
|
-
|
|
2675
|
-
|
|
2676
|
-
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
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 })
|
|
2395
|
+
] })
|
|
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 })
|
|
2681
2425
|
] })
|
|
2682
|
-
]
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2687
|
-
|
|
2688
|
-
|
|
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)) })
|
|
2689
2454
|
] }) });
|
|
2690
2455
|
};
|
|
2691
2456
|
const ContactListAutoSection = ({ data, t, isDarkMode, getContactList, section }) => {
|
|
@@ -2713,89 +2478,136 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2713
2478
|
}
|
|
2714
2479
|
});
|
|
2715
2480
|
if (loading) {
|
|
2716
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2717
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className:
|
|
2718
|
-
/* @__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ệ..." })
|
|
2719
2484
|
] });
|
|
2720
2485
|
}
|
|
2721
2486
|
if (error) {
|
|
2722
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2723
|
-
/* @__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: [
|
|
2724
2489
|
"⚠️ ",
|
|
2725
2490
|
t("contactList.error.title") || "Lỗi tải dữ liệu"
|
|
2726
2491
|
] }),
|
|
2727
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className:
|
|
2492
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted", children: error })
|
|
2728
2493
|
] });
|
|
2729
2494
|
}
|
|
2730
2495
|
if (!contacts || contacts.length === 0) {
|
|
2731
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
2496
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "py-16 px-5 text-center bg-body", children: [
|
|
2732
2497
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-5xl mb-5", children: "📞" }),
|
|
2733
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className:
|
|
2734
|
-
/* @__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" })
|
|
2735
2500
|
] });
|
|
2736
2501
|
}
|
|
2737
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-
|
|
2738
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-
|
|
2739
|
-
|
|
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)) })
|
|
2740
2508
|
] }) });
|
|
2741
2509
|
};
|
|
2742
2510
|
const ContactCard = ({ contact, t, isDarkMode }) => {
|
|
2743
|
-
|
|
2744
|
-
|
|
2745
|
-
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
|
|
2749
|
-
|
|
2750
|
-
|
|
2751
|
-
|
|
2752
|
-
|
|
2753
|
-
|
|
2754
|
-
children:
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
|
|
2758
|
-
|
|
2759
|
-
|
|
2760
|
-
|
|
2761
|
-
|
|
2762
|
-
|
|
2763
|
-
|
|
2764
|
-
|
|
2765
|
-
|
|
2766
|
-
|
|
2767
|
-
|
|
2768
|
-
|
|
2769
|
-
|
|
2770
|
-
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
|
|
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" })
|
|
2781
2607
|
] })
|
|
2782
|
-
]
|
|
2783
|
-
}
|
|
2784
|
-
);
|
|
2785
|
-
};
|
|
2786
|
-
const ContactInfo = ({ icon, label, value, href, isDarkMode }) => {
|
|
2787
|
-
if (!value) return null;
|
|
2788
|
-
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: [
|
|
2789
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-lg mr-3 w-6 text-center", children: icon }),
|
|
2790
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1", children: [
|
|
2791
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `text-sm ${isDarkMode ? "text-gray-400" : "text-gray-600"} mb-0.5`, children: label }),
|
|
2792
|
-
/* @__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
|
+
] })
|
|
2793
2609
|
] })
|
|
2794
2610
|
] });
|
|
2795
|
-
if (href) {
|
|
2796
|
-
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 });
|
|
2797
|
-
}
|
|
2798
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "-mx-2 px-2", children: content });
|
|
2799
2611
|
};
|
|
2800
2612
|
const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback, section }) => {
|
|
2801
2613
|
const [feedbacks, setFeedbacks] = require$$0.useState([]);
|
|
@@ -2879,7 +2691,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2879
2691
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2880
2692
|
"div",
|
|
2881
2693
|
{
|
|
2882
|
-
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 ",
|
|
2883
2695
|
children: [
|
|
2884
2696
|
"💬 ",
|
|
2885
2697
|
sectionTitle
|
|
@@ -2890,37 +2702,19 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2890
2702
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2891
2703
|
"div",
|
|
2892
2704
|
{
|
|
2893
|
-
className:
|
|
2705
|
+
className: "card",
|
|
2894
2706
|
children: [
|
|
2895
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2896
|
-
"
|
|
2897
|
-
|
|
2898
|
-
|
|
2899
|
-
|
|
2900
|
-
|
|
2901
|
-
currentFeedback.content,
|
|
2902
|
-
'"'
|
|
2903
|
-
]
|
|
2904
|
-
}
|
|
2905
|
-
),
|
|
2906
|
-
/* @__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: [
|
|
2907
2713
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-3xl", children: "👤" }),
|
|
2908
2714
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
2909
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2910
|
-
|
|
2911
|
-
|
|
2912
|
-
className: `font-bold text-base transition-colors duration-200 ${isDarkMode ? "text-white" : "text-gray-900"}`,
|
|
2913
|
-
children: currentFeedback.customerName
|
|
2914
|
-
}
|
|
2915
|
-
),
|
|
2916
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-blue-600 font-medium text-sm", children: currentFeedback.customerTitle }),
|
|
2917
|
-
currentFeedback.customerCompany && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2918
|
-
"div",
|
|
2919
|
-
{
|
|
2920
|
-
className: `text-xs transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-gray-600"}`,
|
|
2921
|
-
children: currentFeedback.customerCompany
|
|
2922
|
-
}
|
|
2923
|
-
)
|
|
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 })
|
|
2924
2718
|
] })
|
|
2925
2719
|
] })
|
|
2926
2720
|
]
|
|
@@ -2931,8 +2725,11 @@ var __async = (__this, __arguments, generator) => {
|
|
|
2931
2725
|
"button",
|
|
2932
2726
|
{
|
|
2933
2727
|
onClick: () => setCurrentIndex(index2),
|
|
2934
|
-
|
|
2935
|
-
|
|
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
|
+
`
|
|
2936
2733
|
},
|
|
2937
2734
|
index2
|
|
2938
2735
|
)) })
|
|
@@ -3186,28 +2983,12 @@ var __async = (__this, __arguments, generator) => {
|
|
|
3186
2983
|
const textItems = (data == null ? void 0 : data.sectionDataBindingItems) || [];
|
|
3187
2984
|
const title = ((_a = textItems[0]) == null ? void 0 : _a.value) || "";
|
|
3188
2985
|
const descriptions = textItems.slice(1);
|
|
3189
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
|
|
3190
|
-
title && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", {
|
|
3191
|
-
fontSize: "36px",
|
|
3192
|
-
fontWeight: "700",
|
|
3193
|
-
color: isDarkMode ? "#ffffff" : "#000000",
|
|
3194
|
-
marginBottom: "16px",
|
|
3195
|
-
lineHeight: "1.2",
|
|
3196
|
-
textAlign: "left",
|
|
3197
|
-
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'
|
|
3198
|
-
}, 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 }),
|
|
3199
2988
|
descriptions.map((item, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3200
2989
|
"div",
|
|
3201
2990
|
{
|
|
3202
|
-
|
|
3203
|
-
fontSize: "16px",
|
|
3204
|
-
lineHeight: "1.6",
|
|
3205
|
-
color: isDarkMode ? "#9ca3af" : "#6b7280",
|
|
3206
|
-
textAlign: "left",
|
|
3207
|
-
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
|
|
3208
|
-
fontWeight: "400",
|
|
3209
|
-
marginBottom: index2 < descriptions.length - 1 ? "16px" : "0"
|
|
3210
|
-
},
|
|
2991
|
+
className: `text-body leading-relaxed text-left font-normal text-muted ${index2 < descriptions.length - 1 ? "mb-4" : ""}`,
|
|
3211
2992
|
children: item.value
|
|
3212
2993
|
},
|
|
3213
2994
|
item.id || index2
|
|
@@ -3216,19 +2997,10 @@ var __async = (__this, __arguments, generator) => {
|
|
|
3216
2997
|
};
|
|
3217
2998
|
const TextSection = ({ data, isDarkMode }) => {
|
|
3218
2999
|
const textItems = (data == null ? void 0 : data.sectionDataBindingItems) || [];
|
|
3219
|
-
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(
|
|
3220
3001
|
"div",
|
|
3221
3002
|
{
|
|
3222
|
-
|
|
3223
|
-
padding: "0",
|
|
3224
|
-
marginBottom: "20px",
|
|
3225
|
-
fontSize: "28px",
|
|
3226
|
-
fontWeight: "700",
|
|
3227
|
-
lineHeight: "1.3",
|
|
3228
|
-
color: isDarkMode ? "#f9fafb" : "#111827",
|
|
3229
|
-
textAlign: "left",
|
|
3230
|
-
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'
|
|
3231
|
-
},
|
|
3003
|
+
className: "mb-5 text-subtitle font-black leading-snug text-left text-main",
|
|
3232
3004
|
children: item.value
|
|
3233
3005
|
},
|
|
3234
3006
|
item.id || index2
|
|
@@ -3275,25 +3047,23 @@ var __async = (__this, __arguments, generator) => {
|
|
|
3275
3047
|
};
|
|
3276
3048
|
return icons[iconName] || Settings;
|
|
3277
3049
|
};
|
|
3278
|
-
const
|
|
3050
|
+
const getColorStyles = (index2) => {
|
|
3279
3051
|
const isCyan = index2 % 2 === 0;
|
|
3280
3052
|
if (isCyan) {
|
|
3281
3053
|
return {
|
|
3282
|
-
|
|
3283
|
-
|
|
3284
|
-
|
|
3285
|
-
|
|
3286
|
-
|
|
3287
|
-
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)"
|
|
3288
3059
|
};
|
|
3289
3060
|
}
|
|
3290
3061
|
return {
|
|
3291
|
-
|
|
3292
|
-
|
|
3293
|
-
|
|
3294
|
-
|
|
3295
|
-
|
|
3296
|
-
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)"
|
|
3297
3067
|
};
|
|
3298
3068
|
};
|
|
3299
3069
|
const calculateAngles = (count) => {
|
|
@@ -3303,12 +3073,13 @@ var __async = (__this, __arguments, generator) => {
|
|
|
3303
3073
|
};
|
|
3304
3074
|
const angles = calculateAngles(modules.length);
|
|
3305
3075
|
if (isMobile) {
|
|
3306
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
3076
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "w-full p-4 relative overflow-hidden bg-section-soft", children: [
|
|
3307
3077
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 overflow-hidden pointer-events-none opacity-20", children: [...Array(50)].map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3308
3078
|
"div",
|
|
3309
3079
|
{
|
|
3310
|
-
className:
|
|
3080
|
+
className: "absolute rounded-full bg-brand-primary",
|
|
3311
3081
|
style: {
|
|
3082
|
+
opacity: 0.2,
|
|
3312
3083
|
width: Math.random() * 3 + 1 + "px",
|
|
3313
3084
|
height: Math.random() * 3 + 1 + "px",
|
|
3314
3085
|
top: Math.random() * 100 + "%",
|
|
@@ -3329,26 +3100,38 @@ var __async = (__this, __arguments, generator) => {
|
|
|
3329
3100
|
to { opacity: 1; transform: translateY(0); }
|
|
3330
3101
|
}
|
|
3331
3102
|
` }),
|
|
3332
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className:
|
|
3333
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-
|
|
3334
|
-
/* @__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 })
|
|
3335
3106
|
] }),
|
|
3336
3107
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-3", children: modules.map((module2, index2) => {
|
|
3337
3108
|
const Icon2 = getIconComponent(module2.icon);
|
|
3338
|
-
const colors =
|
|
3109
|
+
const colors = getColorStyles(index2);
|
|
3339
3110
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3340
3111
|
"a",
|
|
3341
3112
|
{
|
|
3342
3113
|
href: module2.url || "#",
|
|
3343
|
-
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",
|
|
3344
3115
|
style: {
|
|
3116
|
+
background: colors.gradient,
|
|
3117
|
+
borderColor: colors.border,
|
|
3345
3118
|
animation: `slideUp 0.5s ease-out ${index2 * 0.1}s both`
|
|
3346
3119
|
},
|
|
3347
3120
|
children: [
|
|
3348
|
-
/* @__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
|
+
),
|
|
3349
3132
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1", children: [
|
|
3350
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-
|
|
3351
|
-
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 })
|
|
3352
3135
|
] })
|
|
3353
3136
|
]
|
|
3354
3137
|
},
|
|
@@ -3357,12 +3140,13 @@ var __async = (__this, __arguments, generator) => {
|
|
|
3357
3140
|
}) })
|
|
3358
3141
|
] });
|
|
3359
3142
|
}
|
|
3360
|
-
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: [
|
|
3361
3144
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 overflow-hidden pointer-events-none", children: [...Array(100)].map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3362
3145
|
"div",
|
|
3363
3146
|
{
|
|
3364
|
-
className:
|
|
3147
|
+
className: "absolute rounded-full bg-brand-primary",
|
|
3365
3148
|
style: {
|
|
3149
|
+
opacity: isDarkMode ? 0.2 : 0.1,
|
|
3366
3150
|
width: Math.random() * 4 + 1 + "px",
|
|
3367
3151
|
height: Math.random() * 4 + 1 + "px",
|
|
3368
3152
|
top: Math.random() * 100 + "%",
|
|
@@ -3373,11 +3157,26 @@ var __async = (__this, __arguments, generator) => {
|
|
|
3373
3157
|
},
|
|
3374
3158
|
i
|
|
3375
3159
|
)) }),
|
|
3376
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3377
|
-
|
|
3378
|
-
|
|
3379
|
-
|
|
3380
|
-
|
|
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: [
|
|
3381
3180
|
/* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "0", y1: "20%", x2: "100%", y2: "20%", stroke: "url(#grad1)", strokeWidth: "1", strokeDasharray: "10 5", className: "animate-pulse" }),
|
|
3382
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" } }),
|
|
3383
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" } }),
|
|
@@ -3386,20 +3185,20 @@ var __async = (__this, __arguments, generator) => {
|
|
|
3386
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" } }),
|
|
3387
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" } }),
|
|
3388
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" } }),
|
|
3389
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "15%", cy: "20%", r: "3", fill: "
|
|
3390
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "35%", cy: "40%", r: "3", fill: "
|
|
3391
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "65%", cy: "60%", r: "3", fill: "
|
|
3392
|
-
/* @__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" } }),
|
|
3393
3192
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("defs", { children: [
|
|
3394
3193
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "grad1", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
|
|
3395
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "
|
|
3396
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "
|
|
3397
|
-
/* @__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 } })
|
|
3398
3197
|
] }),
|
|
3399
3198
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "grad2", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
|
|
3400
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "
|
|
3401
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "
|
|
3402
|
-
/* @__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 } })
|
|
3403
3202
|
] })
|
|
3404
3203
|
] })
|
|
3405
3204
|
] }),
|
|
@@ -3460,41 +3259,77 @@ var __async = (__this, __arguments, generator) => {
|
|
|
3460
3259
|
}
|
|
3461
3260
|
}
|
|
3462
3261
|
` }),
|
|
3463
|
-
/* @__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: [
|
|
3464
3263
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2", children: [
|
|
3465
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: [
|
|
3466
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3467
|
-
|
|
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
|
+
)
|
|
3468
3283
|
] }),
|
|
3469
3284
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative animate-float", children: [
|
|
3470
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
|
|
3474
|
-
|
|
3475
|
-
|
|
3476
|
-
top: "50%",
|
|
3477
|
-
left: "50%",
|
|
3478
|
-
transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-125px)`
|
|
3479
|
-
}
|
|
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)"
|
|
3480
3291
|
},
|
|
3481
|
-
|
|
3482
|
-
|
|
3483
|
-
|
|
3484
|
-
|
|
3485
|
-
|
|
3486
|
-
|
|
3487
|
-
|
|
3488
|
-
|
|
3489
|
-
|
|
3490
|
-
|
|
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
|
+
),
|
|
3491
3325
|
modules.map((module2, i) => {
|
|
3492
3326
|
const angle = angles[i];
|
|
3493
3327
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3494
3328
|
"div",
|
|
3495
3329
|
{
|
|
3496
|
-
className:
|
|
3330
|
+
className: "absolute w-4 h-4 rounded-full border-2 shadow-lg animate-pulse bg-muted",
|
|
3497
3331
|
style: {
|
|
3332
|
+
borderColor: "var(--border-color)",
|
|
3498
3333
|
top: "50%",
|
|
3499
3334
|
left: "50%",
|
|
3500
3335
|
transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-132px)`,
|
|
@@ -3507,7 +3342,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
3507
3342
|
] })
|
|
3508
3343
|
] }),
|
|
3509
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) => {
|
|
3510
|
-
const colors =
|
|
3345
|
+
const colors = getColorStyles(index2);
|
|
3511
3346
|
const angle = angles[index2] * Math.PI / 180;
|
|
3512
3347
|
const circleRadius = 132;
|
|
3513
3348
|
const moduleRadius = 360;
|
|
@@ -3548,7 +3383,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
3548
3383
|
}) }),
|
|
3549
3384
|
modules.map((module2, index2) => {
|
|
3550
3385
|
const Icon2 = getIconComponent(module2.icon);
|
|
3551
|
-
const colors =
|
|
3386
|
+
const colors = getColorStyles(index2);
|
|
3552
3387
|
const angle = angles[index2] * Math.PI / 180;
|
|
3553
3388
|
const radius = 360;
|
|
3554
3389
|
const x = Math.cos(angle) * radius;
|
|
@@ -3570,19 +3405,11 @@ var __async = (__this, __arguments, generator) => {
|
|
|
3570
3405
|
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3571
3406
|
"div",
|
|
3572
3407
|
{
|
|
3573
|
-
className: `
|
|
3574
|
-
${colors.bg} backdrop-blur-md rounded-full
|
|
3575
|
-
border-2 ${colors.border} ${colors.glow}
|
|
3576
|
-
px-5 py-3 flex items-center gap-3
|
|
3577
|
-
shadow-xl ${colors.hoverGlow}
|
|
3578
|
-
transition-all duration-300
|
|
3579
|
-
group-hover:scale-110 group-hover:-translate-y-3 group-hover:shadow-2xl
|
|
3580
|
-
cursor-pointer
|
|
3581
|
-
relative
|
|
3582
|
-
${isRightSide ? "flex-row-reverse" : "flex-row"}
|
|
3583
|
-
`,
|
|
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"}`,
|
|
3584
3409
|
style: {
|
|
3585
|
-
|
|
3410
|
+
background: colors.gradient,
|
|
3411
|
+
borderColor: colors.border,
|
|
3412
|
+
boxShadow: `0 10px 40px ${colors.shadow}`,
|
|
3586
3413
|
width: "240px",
|
|
3587
3414
|
height: "56px",
|
|
3588
3415
|
minWidth: "240px",
|
|
@@ -3590,14 +3417,49 @@ var __async = (__this, __arguments, generator) => {
|
|
|
3590
3417
|
},
|
|
3591
3418
|
children: [
|
|
3592
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" }),
|
|
3593
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3594
|
-
|
|
3595
|
-
|
|
3596
|
-
|
|
3597
|
-
|
|
3598
|
-
|
|
3599
|
-
|
|
3600
|
-
|
|
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
|
+
)
|
|
3601
3463
|
]
|
|
3602
3464
|
}
|
|
3603
3465
|
)
|
|
@@ -3605,24 +3467,82 @@ var __async = (__this, __arguments, generator) => {
|
|
|
3605
3467
|
module2.id
|
|
3606
3468
|
);
|
|
3607
3469
|
}),
|
|
3608
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3609
|
-
|
|
3610
|
-
|
|
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
|
+
)
|
|
3611
3497
|
] })
|
|
3612
3498
|
] });
|
|
3613
3499
|
};
|
|
3614
|
-
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 }) => {
|
|
3615
3501
|
const [isHovered, setIsHovered] = require$$0.useState(false);
|
|
3616
3502
|
const [dragStartPos, setDragStartPos] = require$$0.useState(null);
|
|
3617
3503
|
const [hasMoved, setHasMoved] = require$$0.useState(false);
|
|
3618
|
-
const
|
|
3619
|
-
|
|
3620
|
-
|
|
3621
|
-
|
|
3622
|
-
|
|
3623
|
-
|
|
3624
|
-
|
|
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;
|
|
3625
3544
|
};
|
|
3545
|
+
const colorStyle = getColorStyles(color);
|
|
3626
3546
|
const handleMouseDown = (e) => {
|
|
3627
3547
|
setDragStartPos({ x: e.clientX, y: e.clientY });
|
|
3628
3548
|
setHasMoved(false);
|
|
@@ -3705,12 +3625,45 @@ var __async = (__this, __arguments, generator) => {
|
|
|
3705
3625
|
onTouchMove: handleTouchMove,
|
|
3706
3626
|
onTouchEnd: handleTouchEnd,
|
|
3707
3627
|
children: [
|
|
3708
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3713
|
-
|
|
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
|
+
)
|
|
3714
3667
|
]
|
|
3715
3668
|
}
|
|
3716
3669
|
);
|
|
@@ -3931,49 +3884,108 @@ var __async = (__this, __arguments, generator) => {
|
|
|
3931
3884
|
"div",
|
|
3932
3885
|
{
|
|
3933
3886
|
ref: containerRef,
|
|
3934
|
-
className:
|
|
3935
|
-
style: {
|
|
3887
|
+
className: "mind-map-container relative w-full h-screen overflow-hidden bg-section-soft",
|
|
3888
|
+
style: {
|
|
3889
|
+
touchAction: "none"
|
|
3890
|
+
},
|
|
3936
3891
|
children: [
|
|
3937
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3938
|
-
|
|
3939
|
-
|
|
3940
|
-
|
|
3941
|
-
|
|
3942
|
-
|
|
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(
|
|
3920
|
+
"div",
|
|
3921
|
+
{
|
|
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(
|
|
3943
3949
|
"div",
|
|
3944
3950
|
{
|
|
3945
|
-
className: "absolute
|
|
3946
|
-
style: {
|
|
3947
|
-
|
|
3948
|
-
|
|
3949
|
-
|
|
3950
|
-
|
|
3951
|
-
|
|
3952
|
-
|
|
3953
|
-
|
|
3954
|
-
|
|
3955
|
-
|
|
3956
|
-
|
|
3957
|
-
|
|
3958
|
-
|
|
3959
|
-
|
|
3960
|
-
backgroundSize: "40px 40px"
|
|
3961
|
-
} }) }),
|
|
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
|
+
),
|
|
3962
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: [
|
|
3963
|
-
/* @__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
|
+
),
|
|
3964
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" }) })
|
|
3965
3977
|
] }) }),
|
|
3966
3978
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "absolute inset-0 w-full h-full pointer-events-none", style: { zIndex: 1 }, children: [
|
|
3967
3979
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("defs", { children: [
|
|
3968
3980
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "circuit-gradient", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
|
|
3969
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", stopColor: "
|
|
3970
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", stopColor: "
|
|
3971
|
-
/* @__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 } })
|
|
3972
3984
|
] }),
|
|
3973
3985
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "sparkle-gradient", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
|
|
3974
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", stopColor: "
|
|
3975
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", stopColor: "
|
|
3976
|
-
/* @__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)" } })
|
|
3977
3989
|
] }),
|
|
3978
3990
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("filter", { id: "glow", children: [
|
|
3979
3991
|
/* @__PURE__ */ jsxRuntimeExports.jsx("feGaussianBlur", { stdDeviation: "4", result: "coloredBlur" }),
|
|
@@ -3988,11 +4000,11 @@ var __async = (__this, __arguments, generator) => {
|
|
|
3988
4000
|
"path",
|
|
3989
4001
|
{
|
|
3990
4002
|
d: line.path,
|
|
3991
|
-
stroke: "
|
|
4003
|
+
stroke: "var(--gradient-brand-soft-start)",
|
|
3992
4004
|
strokeWidth: "6",
|
|
3993
4005
|
fill: "none",
|
|
3994
4006
|
className: "transition-all duration-200",
|
|
3995
|
-
style: { filter: "blur(8px)" }
|
|
4007
|
+
style: { filter: "blur(8px)", opacity: 0.2 }
|
|
3996
4008
|
}
|
|
3997
4009
|
),
|
|
3998
4010
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -4024,7 +4036,8 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4024
4036
|
delay: node.delay,
|
|
4025
4037
|
onDragStart: handleNodeDragStart,
|
|
4026
4038
|
isDragging: draggingNodeId === node.id,
|
|
4027
|
-
onClick: handleNodeClick
|
|
4039
|
+
onClick: handleNodeClick,
|
|
4040
|
+
isDarkMode
|
|
4028
4041
|
},
|
|
4029
4042
|
node.id
|
|
4030
4043
|
)) }),
|
|
@@ -4058,15 +4071,52 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4058
4071
|
},
|
|
4059
4072
|
onTouchEnd: () => setIsDragging(false),
|
|
4060
4073
|
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
4061
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4062
|
-
|
|
4063
|
-
|
|
4064
|
-
|
|
4065
|
-
|
|
4066
|
-
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
|
|
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
|
+
)
|
|
4070
4120
|
] })
|
|
4071
4121
|
}
|
|
4072
4122
|
),
|
|
@@ -4086,13 +4136,12 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4086
4136
|
animation: fadeIn 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
|
4087
4137
|
opacity: 0;
|
|
4088
4138
|
}
|
|
4089
|
-
.animate-twinkle { animation: twinkle 5s ease-in-out infinite; }
|
|
4090
4139
|
` })
|
|
4091
4140
|
]
|
|
4092
4141
|
}
|
|
4093
4142
|
);
|
|
4094
4143
|
};
|
|
4095
|
-
const FaqItem = ({ faq, index: index2, isActive, onToggle,
|
|
4144
|
+
const FaqItem = ({ faq, index: index2, isActive, onToggle, t }) => {
|
|
4096
4145
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4097
4146
|
"div",
|
|
4098
4147
|
{
|
|
@@ -4101,79 +4150,69 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4101
4150
|
animationFillMode: "both"
|
|
4102
4151
|
},
|
|
4103
4152
|
className: "animate-slide-up",
|
|
4104
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4105
|
-
|
|
4106
|
-
|
|
4107
|
-
|
|
4108
|
-
|
|
4109
|
-
|
|
4110
|
-
|
|
4111
|
-
|
|
4112
|
-
|
|
4113
|
-
children: [
|
|
4114
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4115
|
-
"button",
|
|
4116
|
-
{
|
|
4117
|
-
onClick: onToggle,
|
|
4118
|
-
className: `
|
|
4119
|
-
w-full px-6 py-5 text-left flex items-start justify-between gap-4
|
|
4120
|
-
transition-all duration-300
|
|
4121
|
-
${isDarkMode ? "hover:bg-gray-700/30" : "hover:bg-gray-50/50"}
|
|
4122
|
-
rounded-xl
|
|
4123
|
-
group
|
|
4124
|
-
`,
|
|
4125
|
-
children: [
|
|
4126
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `
|
|
4127
|
-
text-lg font-semibold flex-1 transition-colors duration-300
|
|
4128
|
-
${isActive ? isDarkMode ? "text-blue-400" : "text-blue-600" : isDarkMode ? "text-white group-hover:text-blue-300" : "text-gray-900 group-hover:text-blue-600"}
|
|
4129
|
-
`, children: faq.question }),
|
|
4130
|
-
/* @__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: `
|
|
4131
4162
|
flex-shrink-0 w-10 h-10 rounded-full flex items-center justify-center
|
|
4132
4163
|
transition-all duration-500 transform
|
|
4133
|
-
${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"}
|
|
4134
4165
|
`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: `w-5 h-5 transition-transform duration-500 ${isActive ? "rotate-180" : ""}` }) })
|
|
4135
|
-
|
|
4136
|
-
|
|
4137
|
-
|
|
4138
|
-
|
|
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(
|
|
4139
4179
|
"div",
|
|
4140
4180
|
{
|
|
4141
|
-
className:
|
|
4142
|
-
|
|
4143
|
-
|
|
4144
|
-
|
|
4145
|
-
|
|
4146
|
-
|
|
4147
|
-
|
|
4148
|
-
|
|
4149
|
-
|
|
4150
|
-
|
|
4151
|
-
|
|
4152
|
-
|
|
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 }),
|
|
4153
4197
|
faq.url && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4154
4198
|
"a",
|
|
4155
4199
|
{
|
|
4156
4200
|
href: faq.url,
|
|
4157
4201
|
target: "_blank",
|
|
4158
4202
|
rel: "noopener noreferrer",
|
|
4159
|
-
className:
|
|
4160
|
-
inline-flex items-center gap-2 mt-5 px-4 py-2 rounded-lg text-sm font-medium
|
|
4161
|
-
transition-all duration-300 transform hover:scale-105
|
|
4162
|
-
${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"}
|
|
4163
|
-
group/link
|
|
4164
|
-
`,
|
|
4203
|
+
className: "card-link mt-4",
|
|
4165
4204
|
children: [
|
|
4166
4205
|
(t == null ? void 0 : t("faq.learn_more")) || "Learn more",
|
|
4167
|
-
/* @__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" }) })
|
|
4168
4207
|
]
|
|
4169
4208
|
}
|
|
4170
4209
|
)
|
|
4171
|
-
]
|
|
4210
|
+
]
|
|
4172
4211
|
}
|
|
4173
4212
|
)
|
|
4174
|
-
|
|
4175
|
-
|
|
4176
|
-
)
|
|
4213
|
+
}
|
|
4214
|
+
)
|
|
4215
|
+
] })
|
|
4177
4216
|
}
|
|
4178
4217
|
);
|
|
4179
4218
|
};
|
|
@@ -4191,22 +4230,39 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4191
4230
|
const sectionTitle = (section == null ? void 0 : section.title) || "...";
|
|
4192
4231
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(SectionWrapper, { isDarkMode, children: [
|
|
4193
4232
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-4xl mx-auto", children: [
|
|
4194
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center mb-6 animate-fade-in", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4195
|
-
|
|
4196
|
-
${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"}
|
|
4197
|
-
transform hover:scale-110 transition-all duration-300
|
|
4198
|
-
`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4199
|
-
"svg",
|
|
4233
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center mb-6 animate-fade-in", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4234
|
+
"div",
|
|
4200
4235
|
{
|
|
4201
|
-
className: "w-
|
|
4202
|
-
|
|
4203
|
-
|
|
4204
|
-
|
|
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
|
+
)
|
|
4205
4253
|
}
|
|
4206
|
-
) })
|
|
4254
|
+
) }),
|
|
4207
4255
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-12 animate-fade-in", children: [
|
|
4208
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className:
|
|
4209
|
-
/* @__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
|
+
)
|
|
4210
4266
|
] }),
|
|
4211
4267
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-4", children: faqs.map((faq, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4212
4268
|
FaqItem,
|
|
@@ -4215,7 +4271,6 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4215
4271
|
index: index2,
|
|
4216
4272
|
isActive: activeIndex === index2,
|
|
4217
4273
|
onToggle: () => toggleFaq(index2),
|
|
4218
|
-
isDarkMode,
|
|
4219
4274
|
t
|
|
4220
4275
|
},
|
|
4221
4276
|
faq.id || index2
|
|
@@ -4232,7 +4287,6 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4232
4287
|
transform: translateY(0);
|
|
4233
4288
|
}
|
|
4234
4289
|
}
|
|
4235
|
-
|
|
4236
4290
|
@keyframes slide-up {
|
|
4237
4291
|
from {
|
|
4238
4292
|
opacity: 0;
|
|
@@ -4243,11 +4297,9 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4243
4297
|
transform: translateY(0);
|
|
4244
4298
|
}
|
|
4245
4299
|
}
|
|
4246
|
-
|
|
4247
4300
|
.animate-fade-in {
|
|
4248
4301
|
animation: fade-in 0.8s ease-out;
|
|
4249
4302
|
}
|
|
4250
|
-
|
|
4251
4303
|
.animate-slide-up {
|
|
4252
4304
|
animation: slide-up 0.6s ease-out;
|
|
4253
4305
|
}
|
|
@@ -4288,141 +4340,147 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4288
4340
|
return () => clearInterval(interval);
|
|
4289
4341
|
}, [highlightData.length]);
|
|
4290
4342
|
const gradientClasses = [
|
|
4291
|
-
"
|
|
4292
|
-
"from-purple-600 to-pink-600",
|
|
4293
|
-
"from-blue-500 to-purple-500",
|
|
4294
|
-
"from-purple-500 to-pink-500",
|
|
4295
|
-
"from-emerald-600 to-teal-600",
|
|
4296
|
-
"from-orange-500 to-red-500"
|
|
4343
|
+
"btn-primary"
|
|
4297
4344
|
];
|
|
4298
4345
|
const defaultImage = "https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=1200&h=800&fit=crop&q=80";
|
|
4299
4346
|
if (!highlightData.length) {
|
|
4300
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: [
|
|
4301
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: `text-lg font-semibold mb-2
|
|
4302
|
-
/* @__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." })
|
|
4303
4350
|
] }) });
|
|
4304
4351
|
}
|
|
4305
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4306
|
-
|
|
4307
|
-
|
|
4308
|
-
|
|
4309
|
-
|
|
4310
|
-
|
|
4311
|
-
|
|
4312
|
-
|
|
4313
|
-
|
|
4314
|
-
|
|
4315
|
-
|
|
4316
|
-
|
|
4317
|
-
|
|
4318
|
-
|
|
4319
|
-
|
|
4320
|
-
|
|
4321
|
-
|
|
4322
|
-
|
|
4323
|
-
|
|
4324
|
-
|
|
4325
|
-
|
|
4326
|
-
|
|
4327
|
-
|
|
4328
|
-
|
|
4329
|
-
|
|
4330
|
-
|
|
4331
|
-
|
|
4332
|
-
|
|
4333
|
-
|
|
4334
|
-
|
|
4335
|
-
|
|
4336
|
-
|
|
4337
|
-
|
|
4338
|
-
|
|
4339
|
-
|
|
4340
|
-
|
|
4341
|
-
|
|
4342
|
-
|
|
4343
|
-
|
|
4344
|
-
|
|
4345
|
-
|
|
4346
|
-
|
|
4347
|
-
|
|
4348
|
-
|
|
4349
|
-
|
|
4350
|
-
|
|
4351
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4352
|
-
"
|
|
4353
|
-
|
|
4354
|
-
|
|
4355
|
-
|
|
4356
|
-
|
|
4357
|
-
|
|
4358
|
-
|
|
4359
|
-
|
|
4360
|
-
|
|
4361
|
-
|
|
4362
|
-
] }, idx)) }),
|
|
4363
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4364
|
-
"a",
|
|
4365
|
-
{
|
|
4366
|
-
href: item.slug,
|
|
4367
|
-
rel: "noopener noreferrer",
|
|
4368
|
-
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`,
|
|
4369
|
-
onClick: (e) => {
|
|
4370
|
-
if (!e.ctrlKey && !e.metaKey && e.button !== 1) {
|
|
4371
|
-
e.preventDefault();
|
|
4372
|
-
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
|
+
}
|
|
4373
4409
|
}
|
|
4374
|
-
|
|
4375
|
-
|
|
4376
|
-
|
|
4377
|
-
|
|
4378
|
-
|
|
4379
|
-
|
|
4380
|
-
|
|
4381
|
-
|
|
4382
|
-
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
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",
|
|
4389
4440
|
{
|
|
4390
|
-
|
|
4391
|
-
|
|
4392
|
-
|
|
4393
|
-
|
|
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
|
+
)
|
|
4394
4454
|
}
|
|
4395
4455
|
)
|
|
4396
|
-
}
|
|
4397
|
-
|
|
4398
|
-
|
|
4399
|
-
|
|
4400
|
-
|
|
4401
|
-
}
|
|
4402
|
-
)
|
|
4403
|
-
|
|
4404
|
-
|
|
4405
|
-
|
|
4406
|
-
|
|
4407
|
-
|
|
4408
|
-
|
|
4409
|
-
|
|
4410
|
-
|
|
4411
|
-
|
|
4412
|
-
|
|
4413
|
-
|
|
4414
|
-
|
|
4415
|
-
|
|
4416
|
-
|
|
4417
|
-
|
|
4418
|
-
|
|
4419
|
-
|
|
4420
|
-
|
|
4421
|
-
|
|
4422
|
-
)
|
|
4423
|
-
|
|
4424
|
-
] }),
|
|
4425
|
-
/* @__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: `
|
|
4426
4484
|
@keyframes blob {
|
|
4427
4485
|
0%, 100% {
|
|
4428
4486
|
transform: translate(0px, 0px) scale(1);
|
|
@@ -4459,7 +4517,9 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4459
4517
|
background-size: 50px 50px;
|
|
4460
4518
|
}
|
|
4461
4519
|
` })
|
|
4462
|
-
|
|
4520
|
+
]
|
|
4521
|
+
}
|
|
4522
|
+
);
|
|
4463
4523
|
};
|
|
4464
4524
|
const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl = "" }) => {
|
|
4465
4525
|
var _a;
|
|
@@ -4484,23 +4544,9 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4484
4544
|
maxWidth: "1400px",
|
|
4485
4545
|
margin: "0 auto"
|
|
4486
4546
|
}, children: [
|
|
4487
|
-
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
|
|
4488
|
-
|
|
4489
|
-
|
|
4490
|
-
}, children: [
|
|
4491
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { style: {
|
|
4492
|
-
fontSize: "36px",
|
|
4493
|
-
fontWeight: "700",
|
|
4494
|
-
marginBottom: "16px",
|
|
4495
|
-
color: isDarkMode ? "#f9fafb" : "#4b5563"
|
|
4496
|
-
}, children: sectionTitle }),
|
|
4497
|
-
sectionDescription && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: {
|
|
4498
|
-
fontSize: "16px",
|
|
4499
|
-
lineHeight: "1.6",
|
|
4500
|
-
color: isDarkMode ? "#d1d5db" : "#6b7280",
|
|
4501
|
-
maxWidth: "900px",
|
|
4502
|
-
margin: "0 auto"
|
|
4503
|
-
}, 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 })
|
|
4504
4550
|
] }),
|
|
4505
4551
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4506
4552
|
display: "grid",
|
|
@@ -4513,30 +4559,13 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4513
4559
|
"a",
|
|
4514
4560
|
{
|
|
4515
4561
|
href: page.slug,
|
|
4562
|
+
className: "card",
|
|
4516
4563
|
style: {
|
|
4517
|
-
backgroundColor: isDarkMode ? "#1f2937" : "#ffffff",
|
|
4518
|
-
borderRadius: "12px",
|
|
4519
|
-
padding: "32px 20px",
|
|
4520
|
-
cursor: "pointer",
|
|
4521
|
-
transition: "all 0.3s",
|
|
4522
|
-
border: `1px solid ${isDarkMode ? "#374151" : "#e5e7eb"}`,
|
|
4523
|
-
boxShadow: isDarkMode ? "0 4px 6px -1px rgba(0, 0, 0, 0.3)" : "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
|
|
4524
|
-
display: "flex",
|
|
4525
|
-
flexDirection: "column",
|
|
4526
4564
|
alignItems: "center",
|
|
4527
4565
|
textAlign: "center",
|
|
4528
4566
|
gap: "16px",
|
|
4529
|
-
textDecoration: "none"
|
|
4530
|
-
|
|
4531
|
-
onMouseEnter: (e) => {
|
|
4532
|
-
e.currentTarget.style.transform = "translateY(-8px)";
|
|
4533
|
-
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)";
|
|
4534
|
-
e.currentTarget.style.borderColor = "#361985ff";
|
|
4535
|
-
},
|
|
4536
|
-
onMouseLeave: (e) => {
|
|
4537
|
-
e.currentTarget.style.transform = "translateY(0)";
|
|
4538
|
-
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)";
|
|
4539
|
-
e.currentTarget.style.borderColor = isDarkMode ? "#374151" : "#e5e7eb";
|
|
4567
|
+
textDecoration: "none",
|
|
4568
|
+
padding: "32px 20px"
|
|
4540
4569
|
},
|
|
4541
4570
|
children: [
|
|
4542
4571
|
iconUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
@@ -4557,13 +4586,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4557
4586
|
}
|
|
4558
4587
|
}
|
|
4559
4588
|
) }),
|
|
4560
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { style: {
|
|
4561
|
-
fontSize: "16px",
|
|
4562
|
-
fontWeight: "600",
|
|
4563
|
-
color: isDarkMode ? "#f9fafb" : "#4b5563",
|
|
4564
|
-
margin: 0,
|
|
4565
|
-
lineHeight: "1.4"
|
|
4566
|
-
}, children: page.title })
|
|
4589
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-body", style: { margin: 0 }, children: page.title })
|
|
4567
4590
|
]
|
|
4568
4591
|
},
|
|
4569
4592
|
page.id
|
|
@@ -4627,44 +4650,25 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4627
4650
|
maxWidth: "1280px",
|
|
4628
4651
|
margin: "0 auto"
|
|
4629
4652
|
}, children: [
|
|
4630
|
-
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", {
|
|
4631
|
-
fontSize: "28px",
|
|
4632
|
-
fontWeight: "700",
|
|
4633
|
-
marginBottom: "40px",
|
|
4634
|
-
color: isDarkMode ? "#f9fafb" : "#1e40af",
|
|
4635
|
-
textTransform: "uppercase",
|
|
4636
|
-
letterSpacing: "0.5px"
|
|
4637
|
-
}, children: sectionTitle }),
|
|
4653
|
+
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-main mb-10 uppercase tracking-wide", children: sectionTitle }),
|
|
4638
4654
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4639
4655
|
display: "flex",
|
|
4640
4656
|
flexDirection: "column",
|
|
4641
4657
|
gap: "24px"
|
|
4642
4658
|
}, children: visiblePages.map((page) => {
|
|
4643
|
-
var _a2, _b;
|
|
4659
|
+
var _a2, _b, _c;
|
|
4644
4660
|
const mainImage = ((_b = (_a2 = page.pageImages) == null ? void 0 : _a2.find((img) => img.isMain)) == null ? void 0 : _b.url) || page.icon;
|
|
4645
4661
|
const imageUrl = getImageUrl(mainImage);
|
|
4646
4662
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4647
4663
|
"a",
|
|
4648
4664
|
{
|
|
4649
4665
|
href: page.slug,
|
|
4666
|
+
className: "card",
|
|
4650
4667
|
style: {
|
|
4651
|
-
|
|
4668
|
+
flexDirection: "row",
|
|
4652
4669
|
gap: "20px",
|
|
4653
|
-
backgroundColor: isDarkMode ? "#1f2937" : "#ffffff",
|
|
4654
|
-
borderRadius: "8px",
|
|
4655
|
-
overflow: "hidden",
|
|
4656
|
-
cursor: "pointer",
|
|
4657
|
-
transition: "all 0.2s",
|
|
4658
|
-
border: `1px solid ${isDarkMode ? "#374151" : "#e5e7eb"}`,
|
|
4659
|
-
padding: "16px",
|
|
4660
4670
|
textDecoration: "none"
|
|
4661
4671
|
},
|
|
4662
|
-
onMouseEnter: (e) => {
|
|
4663
|
-
e.currentTarget.style.backgroundColor = isDarkMode ? "#374151" : "#f9fafb";
|
|
4664
|
-
},
|
|
4665
|
-
onMouseLeave: (e) => {
|
|
4666
|
-
e.currentTarget.style.backgroundColor = isDarkMode ? "#1f2937" : "#ffffff";
|
|
4667
|
-
},
|
|
4668
4672
|
children: [
|
|
4669
4673
|
imageUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4670
4674
|
width: "200px",
|
|
@@ -4684,33 +4688,10 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4684
4688
|
}
|
|
4685
4689
|
}
|
|
4686
4690
|
) }),
|
|
4687
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
|
|
4688
|
-
|
|
4689
|
-
|
|
4690
|
-
|
|
4691
|
-
justifyContent: "center"
|
|
4692
|
-
}, children: [
|
|
4693
|
-
page.tagKeys && page.tagKeys.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4694
|
-
fontSize: "12px",
|
|
4695
|
-
fontWeight: "600",
|
|
4696
|
-
color: isDarkMode ? "#60a5fa" : "#2563eb",
|
|
4697
|
-
marginBottom: "8px",
|
|
4698
|
-
textTransform: "uppercase",
|
|
4699
|
-
letterSpacing: "0.5px"
|
|
4700
|
-
}, children: page.tagKeys[0].key }),
|
|
4701
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { style: {
|
|
4702
|
-
fontSize: "18px",
|
|
4703
|
-
fontWeight: "700",
|
|
4704
|
-
marginBottom: "8px",
|
|
4705
|
-
color: isDarkMode ? "#f9fafb" : "#1f2937",
|
|
4706
|
-
lineHeight: "1.4"
|
|
4707
|
-
}, children: page.title }),
|
|
4708
|
-
page.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: {
|
|
4709
|
-
fontSize: "14px",
|
|
4710
|
-
lineHeight: "1.6",
|
|
4711
|
-
color: isDarkMode ? "#d1d5db" : "#6b7280",
|
|
4712
|
-
margin: 0
|
|
4713
|
-
}, 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 })
|
|
4714
4695
|
] }),
|
|
4715
4696
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4716
4697
|
display: "flex",
|
|
@@ -4720,10 +4701,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4720
4701
|
ChevronRight,
|
|
4721
4702
|
{
|
|
4722
4703
|
size: 20,
|
|
4723
|
-
|
|
4724
|
-
color: isDarkMode ? "#9ca3af" : "#d1d5db",
|
|
4725
|
-
transition: "color 0.2s"
|
|
4726
|
-
}
|
|
4704
|
+
className: "card-text"
|
|
4727
4705
|
}
|
|
4728
4706
|
) })
|
|
4729
4707
|
]
|
|
@@ -4735,6 +4713,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4735
4713
|
"button",
|
|
4736
4714
|
{
|
|
4737
4715
|
onClick: handleLoadMore,
|
|
4716
|
+
className: "btn-primary",
|
|
4738
4717
|
style: {
|
|
4739
4718
|
display: "inline-flex",
|
|
4740
4719
|
alignItems: "center",
|
|
@@ -4743,20 +4722,9 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4743
4722
|
fontSize: "16px",
|
|
4744
4723
|
fontWeight: "600",
|
|
4745
4724
|
color: "#fff",
|
|
4746
|
-
backgroundColor: "#361985ff",
|
|
4747
4725
|
border: "none",
|
|
4748
4726
|
borderRadius: "9999px",
|
|
4749
|
-
cursor: "pointer"
|
|
4750
|
-
transition: "all 0.3s",
|
|
4751
|
-
boxShadow: "0 4px 6px -1px rgba(37, 99, 235, 0.3)"
|
|
4752
|
-
},
|
|
4753
|
-
onMouseEnter: (e) => {
|
|
4754
|
-
e.currentTarget.style.backgroundColor = "#361985ff";
|
|
4755
|
-
e.currentTarget.style.transform = "translateY(-2px)";
|
|
4756
|
-
},
|
|
4757
|
-
onMouseLeave: (e) => {
|
|
4758
|
-
e.currentTarget.style.backgroundColor = "#361985ff";
|
|
4759
|
-
e.currentTarget.style.transform = "translateY(0)";
|
|
4727
|
+
cursor: "pointer"
|
|
4760
4728
|
},
|
|
4761
4729
|
children: [
|
|
4762
4730
|
t("pageChildrenSelect.moreInsights"),
|
|
@@ -4788,12 +4756,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4788
4756
|
maxWidth: "1400px",
|
|
4789
4757
|
margin: "0 auto"
|
|
4790
4758
|
}, children: [
|
|
4791
|
-
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", {
|
|
4792
|
-
fontSize: "36px",
|
|
4793
|
-
fontWeight: "700",
|
|
4794
|
-
marginBottom: "50px",
|
|
4795
|
-
color: isDarkMode ? "#f1f5f9" : "#1e293b"
|
|
4796
|
-
}, children: sectionTitle }),
|
|
4759
|
+
sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title mb-12 text-main", children: sectionTitle }),
|
|
4797
4760
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
4798
4761
|
display: "grid",
|
|
4799
4762
|
gridTemplateColumns: "repeat(auto-fit, minmax(350px, 1fr))",
|
|
@@ -4807,24 +4770,12 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4807
4770
|
"a",
|
|
4808
4771
|
{
|
|
4809
4772
|
href: page.slug,
|
|
4773
|
+
className: "card",
|
|
4810
4774
|
style: {
|
|
4811
|
-
backgroundColor: isDarkMode ? "#1e293b" : "#ffffff",
|
|
4812
|
-
borderRadius: "16px",
|
|
4813
|
-
overflow: "hidden",
|
|
4814
|
-
cursor: "pointer",
|
|
4815
|
-
transition: "all 0.3s",
|
|
4816
|
-
boxShadow: isDarkMode ? "0 4px 6px -1px rgba(0, 0, 0, 0.5)" : "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
|
|
4817
|
-
border: `1px solid ${isDarkMode ? "#334155" : "#e2e8f0"}`,
|
|
4818
4775
|
textDecoration: "none",
|
|
4819
|
-
display: "block"
|
|
4820
|
-
|
|
4821
|
-
|
|
4822
|
-
e.currentTarget.style.transform = "translateY(-8px)";
|
|
4823
|
-
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)";
|
|
4824
|
-
},
|
|
4825
|
-
onMouseLeave: (e) => {
|
|
4826
|
-
e.currentTarget.style.transform = "translateY(0)";
|
|
4827
|
-
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"
|
|
4828
4779
|
},
|
|
4829
4780
|
children: [
|
|
4830
4781
|
imageUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
|
|
@@ -4851,26 +4802,13 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4851
4802
|
}
|
|
4852
4803
|
}
|
|
4853
4804
|
) }),
|
|
4854
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
|
|
4855
|
-
|
|
4856
|
-
|
|
4857
|
-
|
|
4858
|
-
fontSize: "20px",
|
|
4859
|
-
fontWeight: "700",
|
|
4860
|
-
marginBottom: "12px",
|
|
4861
|
-
color: isDarkMode ? "#f1f5f9" : "#1e293b",
|
|
4862
|
-
lineHeight: "1.4",
|
|
4863
|
-
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"
|
|
4864
4809
|
}, children: page.title }),
|
|
4865
|
-
page.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: {
|
|
4866
|
-
|
|
4867
|
-
lineHeight: "1.6",
|
|
4868
|
-
color: isDarkMode ? "#cbd5e1" : "#64748b",
|
|
4869
|
-
marginBottom: "16px",
|
|
4870
|
-
display: "-webkit-box",
|
|
4871
|
-
WebkitLineClamp: 2,
|
|
4872
|
-
WebkitBoxOrient: "vertical",
|
|
4873
|
-
overflow: "hidden"
|
|
4810
|
+
page.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text line-clamp-2", style: {
|
|
4811
|
+
marginBottom: "1rem"
|
|
4874
4812
|
}, children: page.description })
|
|
4875
4813
|
] })
|
|
4876
4814
|
]
|
|
@@ -4885,6 +4823,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4885
4823
|
"button",
|
|
4886
4824
|
{
|
|
4887
4825
|
onClick: handleLoadMore,
|
|
4826
|
+
className: "btn-primary",
|
|
4888
4827
|
style: {
|
|
4889
4828
|
display: "inline-flex",
|
|
4890
4829
|
alignItems: "center",
|
|
@@ -4893,22 +4832,9 @@ var __async = (__this, __arguments, generator) => {
|
|
|
4893
4832
|
fontSize: "16px",
|
|
4894
4833
|
fontWeight: "600",
|
|
4895
4834
|
color: "#ffffff",
|
|
4896
|
-
backgroundColor: "#361985ff",
|
|
4897
4835
|
border: "none",
|
|
4898
4836
|
borderRadius: "50px",
|
|
4899
|
-
cursor: "pointer"
|
|
4900
|
-
transition: "all 0.3s",
|
|
4901
|
-
boxShadow: "0 4px 6px -1px rgba(239, 68, 68, 0.3)"
|
|
4902
|
-
},
|
|
4903
|
-
onMouseEnter: (e) => {
|
|
4904
|
-
e.currentTarget.style.backgroundColor = "#361985ff";
|
|
4905
|
-
e.currentTarget.style.transform = "translateY(-2px)";
|
|
4906
|
-
e.currentTarget.style.boxShadow = "0 10px 15px -3px rgba(239, 68, 68, 0.4)";
|
|
4907
|
-
},
|
|
4908
|
-
onMouseLeave: (e) => {
|
|
4909
|
-
e.currentTarget.style.backgroundColor = "#361985ff";
|
|
4910
|
-
e.currentTarget.style.transform = "translateY(0)";
|
|
4911
|
-
e.currentTarget.style.boxShadow = "0 4px 6px -1px rgba(239, 68, 68, 0.3)";
|
|
4837
|
+
cursor: "pointer"
|
|
4912
4838
|
},
|
|
4913
4839
|
children: [
|
|
4914
4840
|
t("pageChildrenSelect.moreInsights"),
|