nvis-fe-cms-libs 2.0.3 → 2.0.4
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 +888 -991
- package/dist/nvis-fe-cms-libs.es.js.map +1 -1
- package/dist/nvis-fe-cms-libs.umd.js +905 -1008
- package/dist/nvis-fe-cms-libs.umd.js.map +1 -1
- package/package.json +1 -1
|
@@ -371,15 +371,37 @@ function requireJsxRuntime() {
|
|
|
371
371
|
return jsxRuntime.exports;
|
|
372
372
|
}
|
|
373
373
|
var jsxRuntimeExports = requireJsxRuntime();
|
|
374
|
-
function ThemeIcon({
|
|
374
|
+
function ThemeIcon({
|
|
375
|
+
name,
|
|
376
|
+
className = "",
|
|
377
|
+
color,
|
|
378
|
+
useOriginalColor = false
|
|
379
|
+
// ← Prop mới để chọn chế độ
|
|
380
|
+
}) {
|
|
375
381
|
if (!name) return null;
|
|
376
382
|
const iconUrl = `/icons/${name}.svg`;
|
|
383
|
+
if (useOriginalColor) {
|
|
384
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
385
|
+
"img",
|
|
386
|
+
{
|
|
387
|
+
src: iconUrl,
|
|
388
|
+
alt: name,
|
|
389
|
+
className: `icon ${className}`,
|
|
390
|
+
onError: (e) => {
|
|
391
|
+
e.target.style.display = "none";
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
);
|
|
395
|
+
}
|
|
377
396
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
378
|
-
"
|
|
397
|
+
"span",
|
|
379
398
|
{
|
|
380
|
-
src: iconUrl,
|
|
381
|
-
alt: name,
|
|
382
399
|
className: `icon ${className}`,
|
|
400
|
+
style: {
|
|
401
|
+
maskImage: `url(${iconUrl})`,
|
|
402
|
+
WebkitMaskImage: `url(${iconUrl})`,
|
|
403
|
+
backgroundColor: color || "currentColor"
|
|
404
|
+
},
|
|
383
405
|
onError: (e) => {
|
|
384
406
|
e.target.style.display = "none";
|
|
385
407
|
}
|
|
@@ -405,19 +427,19 @@ const CompanyValues = ({ companyData, t, isDarkMode }) => {
|
|
|
405
427
|
};
|
|
406
428
|
const items = [
|
|
407
429
|
{
|
|
408
|
-
icon: "
|
|
430
|
+
icon: "icon-companyValueLightBulb",
|
|
409
431
|
title: t("about.companyValues.vision") || "Tầm nhìn",
|
|
410
432
|
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.",
|
|
411
433
|
bgClass: "bg-gradient-brand"
|
|
412
434
|
},
|
|
413
435
|
{
|
|
414
|
-
icon: "
|
|
436
|
+
icon: "icon-companyValueRocket",
|
|
415
437
|
title: t("about.companyValues.mission") || "Sứ mệnh",
|
|
416
438
|
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.",
|
|
417
439
|
bgClass: "bg-gradient-accent"
|
|
418
440
|
},
|
|
419
441
|
{
|
|
420
|
-
icon: "
|
|
442
|
+
icon: "icon-companyValueDiamond",
|
|
421
443
|
title: t("about.companyValues.coreValues") || "Giá trị cốt lõi",
|
|
422
444
|
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.",
|
|
423
445
|
bgClass: "bg-gradient-brand"
|
|
@@ -467,7 +489,7 @@ const CompanyValues = ({ companyData, t, isDarkMode }) => {
|
|
|
467
489
|
"div",
|
|
468
490
|
{
|
|
469
491
|
className: `w-10 h-10 rounded-lg flex items-center justify-center text-white text-xl flex-shrink-0 ${item.bgClass}`,
|
|
470
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: item.icon, className: "w-6 h-6" })
|
|
492
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: item.icon, folder: "AboutCompanySection", className: "w-6 h-6", useOriginalColor: true })
|
|
471
493
|
}
|
|
472
494
|
),
|
|
473
495
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
@@ -592,7 +614,8 @@ const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
|
592
614
|
/* @__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: [
|
|
593
615
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
594
616
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-block px-4 py-2 rounded-full text-small font-semibold mb-4 bg-surface text-brand-primary border f-border", children: [
|
|
595
|
-
"
|
|
617
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-aboutCompanyBook", folder: "AboutCompanySection", className: "w-6 h-6", useOriginalColor: true }),
|
|
618
|
+
" ",
|
|
596
619
|
safeT("aboutCompany.story.badge")
|
|
597
620
|
] }),
|
|
598
621
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("h2", { className: "text-3xl lg:text-4xl font-bold mb-6 text-main", children: [
|
|
@@ -660,7 +683,8 @@ const TimelineSection = ({ data, t, section }) => {
|
|
|
660
683
|
}
|
|
661
684
|
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: [
|
|
662
685
|
/* @__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: [
|
|
663
|
-
"
|
|
686
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-timeLineChart", folder: "TimlineSection", className: "w-5 h-5 icon-gradient" }),
|
|
687
|
+
" ",
|
|
664
688
|
sectionTitle
|
|
665
689
|
] }) }),
|
|
666
690
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
@@ -881,7 +905,8 @@ const PartnersSection = ({ data, t, imageBaseUrl = "", section }) => {
|
|
|
881
905
|
if (!partnersData.length) return null;
|
|
882
906
|
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: [
|
|
883
907
|
/* @__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: [
|
|
884
|
-
"
|
|
908
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-partner", folder: "PartnersSection", className: "w-4 h-4 icon-gradient" }),
|
|
909
|
+
" ",
|
|
885
910
|
sectionTitle
|
|
886
911
|
] }) }),
|
|
887
912
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
@@ -984,7 +1009,8 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
|
|
|
984
1009
|
}
|
|
985
1010
|
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: [
|
|
986
1011
|
/* @__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: [
|
|
987
|
-
"
|
|
1012
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-timeLineChart", folder: "TimlineSection", className: "w-5 h-5 icon-gradient" }),
|
|
1013
|
+
" ",
|
|
988
1014
|
sectionTitle
|
|
989
1015
|
] }) }),
|
|
990
1016
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
@@ -1050,7 +1076,8 @@ const TestimonialsSection = ({ data, t, section }) => {
|
|
|
1050
1076
|
}
|
|
1051
1077
|
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: [
|
|
1052
1078
|
/* @__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: [
|
|
1053
|
-
"
|
|
1079
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-testimonials", folder: "TestimonialsSection", className: "w-4 h-4 icon-gradient" }),
|
|
1080
|
+
" ",
|
|
1054
1081
|
sectionTitle
|
|
1055
1082
|
] }),
|
|
1056
1083
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
@@ -1069,7 +1096,7 @@ const TestimonialsSection = ({ data, t, section }) => {
|
|
|
1069
1096
|
'"'
|
|
1070
1097
|
] }),
|
|
1071
1098
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4", children: [
|
|
1072
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-3xl", children: "
|
|
1099
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-3xl", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-testimonialsUser", folder: "TestimonialsSection", className: "w-4 h-4 icon-gradient" }) }),
|
|
1073
1100
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
1074
1101
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-title", children: testimonials[currentIndex].author }),
|
|
1075
1102
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-text", children: testimonials[currentIndex].position }),
|
|
@@ -1267,7 +1294,8 @@ const PartnerListSection = ({ t, getPartnerList, imageBaseUrl = "", section }) =
|
|
|
1267
1294
|
if (!partnersData.length) return null;
|
|
1268
1295
|
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: [
|
|
1269
1296
|
/* @__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: [
|
|
1270
|
-
"
|
|
1297
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-partner", folder: "PartnersSection", className: "w-4 h-4 icon-gradient" }),
|
|
1298
|
+
" ",
|
|
1271
1299
|
sectionTitle
|
|
1272
1300
|
] }) }),
|
|
1273
1301
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
@@ -1332,692 +1360,71 @@ const PartnerListSection = ({ t, getPartnerList, imageBaseUrl = "", section }) =
|
|
|
1332
1360
|
) })
|
|
1333
1361
|
] }) });
|
|
1334
1362
|
};
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
const
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
const
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1363
|
+
const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService }) => {
|
|
1364
|
+
const [formData, setFormData] = useState({
|
|
1365
|
+
fullName: "",
|
|
1366
|
+
workEmail: "",
|
|
1367
|
+
phoneNumber: "",
|
|
1368
|
+
companyName: "",
|
|
1369
|
+
jobTitle: "",
|
|
1370
|
+
businessType: "",
|
|
1371
|
+
expectedBudget: "",
|
|
1372
|
+
expectedTimeline: "",
|
|
1373
|
+
requestTitle: "",
|
|
1374
|
+
requestDescription: ""
|
|
1375
|
+
});
|
|
1376
|
+
const [formErrors, setFormErrors] = useState({});
|
|
1377
|
+
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
1378
|
+
const [submitStatus, setSubmitStatus] = useState(null);
|
|
1379
|
+
const [submitMessage, setSubmitMessage] = useState("");
|
|
1380
|
+
const validateField = (name, value) => {
|
|
1381
|
+
const errors = {};
|
|
1382
|
+
switch (name) {
|
|
1383
|
+
case "fullName":
|
|
1384
|
+
if (!(value == null ? void 0 : value.trim())) errors.fullName = "Họ và tên là bắt buộc";
|
|
1385
|
+
else if (value.trim().length < 2) errors.fullName = "Tên phải có ít nhất 2 ký tự";
|
|
1386
|
+
break;
|
|
1387
|
+
case "workEmail":
|
|
1388
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
1389
|
+
if (!(value == null ? void 0 : value.trim())) errors.workEmail = "Email là bắt buộc";
|
|
1390
|
+
else if (!emailRegex.test(value.trim())) errors.workEmail = "Email không hợp lệ";
|
|
1391
|
+
break;
|
|
1392
|
+
case "phoneNumber":
|
|
1393
|
+
const phoneRegex = /^[0-9\s\-\+\(\)]{10,15}$/;
|
|
1394
|
+
if (value && !phoneRegex.test(value.trim())) errors.phoneNumber = "Số điện thoại không hợp lệ";
|
|
1395
|
+
break;
|
|
1396
|
+
case "requestTitle":
|
|
1397
|
+
if (!(value == null ? void 0 : value.trim())) errors.requestTitle = "Tiêu đề yêu cầu là bắt buộc";
|
|
1398
|
+
else if (value.trim().length < 5) errors.requestTitle = "Tiêu đề phải có ít nhất 5 ký tự";
|
|
1399
|
+
break;
|
|
1400
|
+
case "requestDescription":
|
|
1401
|
+
if (!(value == null ? void 0 : value.trim())) errors.requestDescription = "Mô tả yêu cầu là bắt buộc";
|
|
1402
|
+
else if (value.trim().length < 10) errors.requestDescription = "Mô tả phải có ít nhất 10 ký tự";
|
|
1403
|
+
break;
|
|
1404
|
+
case "companyName":
|
|
1405
|
+
if (value && value.trim().length > 0 && value.trim().length < 2) {
|
|
1406
|
+
errors.companyName = "Tên công ty phải có ít nhất 2 ký tự";
|
|
1407
|
+
}
|
|
1408
|
+
break;
|
|
1409
|
+
case "jobTitle":
|
|
1410
|
+
if (value && value.trim().length > 0 && value.trim().length < 2) {
|
|
1411
|
+
errors.jobTitle = "Chức vụ phải có ít nhất 2 ký tự";
|
|
1412
|
+
}
|
|
1413
|
+
break;
|
|
1357
1414
|
}
|
|
1358
|
-
|
|
1359
|
-
};
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
fill: "none",
|
|
1372
|
-
stroke: "currentColor",
|
|
1373
|
-
strokeWidth: 2,
|
|
1374
|
-
strokeLinecap: "round",
|
|
1375
|
-
strokeLinejoin: "round"
|
|
1376
|
-
};
|
|
1377
|
-
/**
|
|
1378
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1379
|
-
*
|
|
1380
|
-
* This source code is licensed under the ISC license.
|
|
1381
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1382
|
-
*/
|
|
1383
|
-
const Icon = forwardRef(
|
|
1384
|
-
(_a, ref) => {
|
|
1385
|
-
var _b = _a, {
|
|
1386
|
-
color = "currentColor",
|
|
1387
|
-
size = 24,
|
|
1388
|
-
strokeWidth = 2,
|
|
1389
|
-
absoluteStrokeWidth,
|
|
1390
|
-
className = "",
|
|
1391
|
-
children,
|
|
1392
|
-
iconNode
|
|
1393
|
-
} = _b, rest = __objRest(_b, [
|
|
1394
|
-
"color",
|
|
1395
|
-
"size",
|
|
1396
|
-
"strokeWidth",
|
|
1397
|
-
"absoluteStrokeWidth",
|
|
1398
|
-
"className",
|
|
1399
|
-
"children",
|
|
1400
|
-
"iconNode"
|
|
1401
|
-
]);
|
|
1402
|
-
return createElement(
|
|
1403
|
-
"svg",
|
|
1404
|
-
__spreadValues(__spreadValues(__spreadProps(__spreadValues({
|
|
1405
|
-
ref
|
|
1406
|
-
}, defaultAttributes), {
|
|
1407
|
-
width: size,
|
|
1408
|
-
height: size,
|
|
1409
|
-
stroke: color,
|
|
1410
|
-
strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,
|
|
1411
|
-
className: mergeClasses("lucide", className)
|
|
1412
|
-
}), !children && !hasA11yProp(rest) && { "aria-hidden": "true" }), rest),
|
|
1413
|
-
[
|
|
1414
|
-
...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),
|
|
1415
|
-
...Array.isArray(children) ? children : [children]
|
|
1416
|
-
]
|
|
1417
|
-
);
|
|
1418
|
-
}
|
|
1419
|
-
);
|
|
1420
|
-
/**
|
|
1421
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1422
|
-
*
|
|
1423
|
-
* This source code is licensed under the ISC license.
|
|
1424
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1425
|
-
*/
|
|
1426
|
-
const createLucideIcon = (iconName, iconNode) => {
|
|
1427
|
-
const Component = forwardRef(
|
|
1428
|
-
(_a, ref) => {
|
|
1429
|
-
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
1430
|
-
return createElement(Icon, __spreadValues({
|
|
1431
|
-
ref,
|
|
1432
|
-
iconNode,
|
|
1433
|
-
className: mergeClasses(
|
|
1434
|
-
`lucide-${toKebabCase(toPascalCase(iconName))}`,
|
|
1435
|
-
`lucide-${iconName}`,
|
|
1436
|
-
className
|
|
1437
|
-
)
|
|
1438
|
-
}, props));
|
|
1439
|
-
}
|
|
1440
|
-
);
|
|
1441
|
-
Component.displayName = toPascalCase(iconName);
|
|
1442
|
-
return Component;
|
|
1443
|
-
};
|
|
1444
|
-
/**
|
|
1445
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1446
|
-
*
|
|
1447
|
-
* This source code is licensed under the ISC license.
|
|
1448
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1449
|
-
*/
|
|
1450
|
-
const __iconNode$z = [
|
|
1451
|
-
["path", { d: "M5 12h14", key: "1ays0h" }],
|
|
1452
|
-
["path", { d: "m12 5 7 7-7 7", key: "xquz4c" }]
|
|
1453
|
-
];
|
|
1454
|
-
const ArrowRight = createLucideIcon("arrow-right", __iconNode$z);
|
|
1455
|
-
/**
|
|
1456
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1457
|
-
*
|
|
1458
|
-
* This source code is licensed under the ISC license.
|
|
1459
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1460
|
-
*/
|
|
1461
|
-
const __iconNode$y = [
|
|
1462
|
-
["path", { d: "M2 4v16", key: "vw9hq8" }],
|
|
1463
|
-
["path", { d: "M2 8h18a2 2 0 0 1 2 2v10", key: "1dgv2r" }],
|
|
1464
|
-
["path", { d: "M2 17h20", key: "18nfp3" }],
|
|
1465
|
-
["path", { d: "M6 8v9", key: "1yriud" }]
|
|
1466
|
-
];
|
|
1467
|
-
const Bed = createLucideIcon("bed", __iconNode$y);
|
|
1468
|
-
/**
|
|
1469
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1470
|
-
*
|
|
1471
|
-
* This source code is licensed under the ISC license.
|
|
1472
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1473
|
-
*/
|
|
1474
|
-
const __iconNode$x = [
|
|
1475
|
-
["path", { d: "M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16", key: "jecpp" }],
|
|
1476
|
-
["rect", { width: "20", height: "14", x: "2", y: "6", rx: "2", key: "i6l2r4" }]
|
|
1477
|
-
];
|
|
1478
|
-
const Briefcase = createLucideIcon("briefcase", __iconNode$x);
|
|
1479
|
-
/**
|
|
1480
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1481
|
-
*
|
|
1482
|
-
* This source code is licensed under the ISC license.
|
|
1483
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1484
|
-
*/
|
|
1485
|
-
const __iconNode$w = [
|
|
1486
|
-
["path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z", key: "1b4qmf" }],
|
|
1487
|
-
["path", { d: "M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2", key: "i71pzd" }],
|
|
1488
|
-
["path", { d: "M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2", key: "10jefs" }],
|
|
1489
|
-
["path", { d: "M10 6h4", key: "1itunk" }],
|
|
1490
|
-
["path", { d: "M10 10h4", key: "tcdvrf" }],
|
|
1491
|
-
["path", { d: "M10 14h4", key: "kelpxr" }],
|
|
1492
|
-
["path", { d: "M10 18h4", key: "1ulq68" }]
|
|
1493
|
-
];
|
|
1494
|
-
const Building2 = createLucideIcon("building-2", __iconNode$w);
|
|
1495
|
-
/**
|
|
1496
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1497
|
-
*
|
|
1498
|
-
* This source code is licensed under the ISC license.
|
|
1499
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1500
|
-
*/
|
|
1501
|
-
const __iconNode$v = [
|
|
1502
|
-
["rect", { width: "16", height: "20", x: "4", y: "2", rx: "2", ry: "2", key: "76otgf" }],
|
|
1503
|
-
["path", { d: "M9 22v-4h6v4", key: "r93iot" }],
|
|
1504
|
-
["path", { d: "M8 6h.01", key: "1dz90k" }],
|
|
1505
|
-
["path", { d: "M16 6h.01", key: "1x0f13" }],
|
|
1506
|
-
["path", { d: "M12 6h.01", key: "1vi96p" }],
|
|
1507
|
-
["path", { d: "M12 10h.01", key: "1nrarc" }],
|
|
1508
|
-
["path", { d: "M12 14h.01", key: "1etili" }],
|
|
1509
|
-
["path", { d: "M16 10h.01", key: "1m94wz" }],
|
|
1510
|
-
["path", { d: "M16 14h.01", key: "1gbofw" }],
|
|
1511
|
-
["path", { d: "M8 10h.01", key: "19clt8" }],
|
|
1512
|
-
["path", { d: "M8 14h.01", key: "6423bh" }]
|
|
1513
|
-
];
|
|
1514
|
-
const Building = createLucideIcon("building", __iconNode$v);
|
|
1515
|
-
/**
|
|
1516
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1517
|
-
*
|
|
1518
|
-
* This source code is licensed under the ISC license.
|
|
1519
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1520
|
-
*/
|
|
1521
|
-
const __iconNode$u = [
|
|
1522
|
-
["rect", { width: "16", height: "20", x: "4", y: "2", rx: "2", key: "1nb95v" }],
|
|
1523
|
-
["line", { x1: "8", x2: "16", y1: "6", y2: "6", key: "x4nwl0" }],
|
|
1524
|
-
["line", { x1: "16", x2: "16", y1: "14", y2: "18", key: "wjye3r" }],
|
|
1525
|
-
["path", { d: "M16 10h.01", key: "1m94wz" }],
|
|
1526
|
-
["path", { d: "M12 10h.01", key: "1nrarc" }],
|
|
1527
|
-
["path", { d: "M8 10h.01", key: "19clt8" }],
|
|
1528
|
-
["path", { d: "M12 14h.01", key: "1etili" }],
|
|
1529
|
-
["path", { d: "M8 14h.01", key: "6423bh" }],
|
|
1530
|
-
["path", { d: "M12 18h.01", key: "mhygvu" }],
|
|
1531
|
-
["path", { d: "M8 18h.01", key: "lrp35t" }]
|
|
1532
|
-
];
|
|
1533
|
-
const Calculator = createLucideIcon("calculator", __iconNode$u);
|
|
1534
|
-
/**
|
|
1535
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1536
|
-
*
|
|
1537
|
-
* This source code is licensed under the ISC license.
|
|
1538
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1539
|
-
*/
|
|
1540
|
-
const __iconNode$t = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
|
|
1541
|
-
const ChevronDown = createLucideIcon("chevron-down", __iconNode$t);
|
|
1542
|
-
/**
|
|
1543
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1544
|
-
*
|
|
1545
|
-
* This source code is licensed under the ISC license.
|
|
1546
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1547
|
-
*/
|
|
1548
|
-
const __iconNode$s = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
|
|
1549
|
-
const ChevronRight = createLucideIcon("chevron-right", __iconNode$s);
|
|
1550
|
-
/**
|
|
1551
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1552
|
-
*
|
|
1553
|
-
* This source code is licensed under the ISC license.
|
|
1554
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1555
|
-
*/
|
|
1556
|
-
const __iconNode$r = [
|
|
1557
|
-
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
1558
|
-
["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
|
|
1559
|
-
["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
|
|
1560
|
-
];
|
|
1561
|
-
const CircleAlert = createLucideIcon("circle-alert", __iconNode$r);
|
|
1562
|
-
/**
|
|
1563
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1564
|
-
*
|
|
1565
|
-
* This source code is licensed under the ISC license.
|
|
1566
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1567
|
-
*/
|
|
1568
|
-
const __iconNode$q = [
|
|
1569
|
-
["path", { d: "M21.801 10A10 10 0 1 1 17 3.335", key: "yps3ct" }],
|
|
1570
|
-
["path", { d: "m9 11 3 3L22 4", key: "1pflzl" }]
|
|
1571
|
-
];
|
|
1572
|
-
const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$q);
|
|
1573
|
-
/**
|
|
1574
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1575
|
-
*
|
|
1576
|
-
* This source code is licensed under the ISC license.
|
|
1577
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1578
|
-
*/
|
|
1579
|
-
const __iconNode$p = [
|
|
1580
|
-
["path", { d: "M12 6v6l4 2", key: "mmk7yg" }],
|
|
1581
|
-
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]
|
|
1582
|
-
];
|
|
1583
|
-
const Clock = createLucideIcon("clock", __iconNode$p);
|
|
1584
|
-
/**
|
|
1585
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1586
|
-
*
|
|
1587
|
-
* This source code is licensed under the ISC license.
|
|
1588
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1589
|
-
*/
|
|
1590
|
-
const __iconNode$o = [
|
|
1591
|
-
["path", { d: "M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z", key: "p7xjir" }]
|
|
1592
|
-
];
|
|
1593
|
-
const Cloud = createLucideIcon("cloud", __iconNode$o);
|
|
1594
|
-
/**
|
|
1595
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1596
|
-
*
|
|
1597
|
-
* This source code is licensed under the ISC license.
|
|
1598
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1599
|
-
*/
|
|
1600
|
-
const __iconNode$n = [
|
|
1601
|
-
["ellipse", { cx: "12", cy: "5", rx: "9", ry: "3", key: "msslwz" }],
|
|
1602
|
-
["path", { d: "M3 5V19A9 3 0 0 0 21 19V5", key: "1wlel7" }],
|
|
1603
|
-
["path", { d: "M3 12A9 3 0 0 0 21 12", key: "mv7ke4" }]
|
|
1604
|
-
];
|
|
1605
|
-
const Database = createLucideIcon("database", __iconNode$n);
|
|
1606
|
-
/**
|
|
1607
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1608
|
-
*
|
|
1609
|
-
* This source code is licensed under the ISC license.
|
|
1610
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1611
|
-
*/
|
|
1612
|
-
const __iconNode$m = [
|
|
1613
|
-
["path", { d: "M12 16h.01", key: "1drbdi" }],
|
|
1614
|
-
["path", { d: "M16 16h.01", key: "1f9h7w" }],
|
|
1615
|
-
[
|
|
1616
|
-
"path",
|
|
1617
|
-
{
|
|
1618
|
-
d: "M3 19a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V8.5a.5.5 0 0 0-.769-.422l-4.462 2.844A.5.5 0 0 1 15 10.5v-2a.5.5 0 0 0-.769-.422L9.77 10.922A.5.5 0 0 1 9 10.5V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2z",
|
|
1619
|
-
key: "1iv0i2"
|
|
1620
|
-
}
|
|
1621
|
-
],
|
|
1622
|
-
["path", { d: "M8 16h.01", key: "18s6g9" }]
|
|
1623
|
-
];
|
|
1624
|
-
const Factory = createLucideIcon("factory", __iconNode$m);
|
|
1625
|
-
/**
|
|
1626
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1627
|
-
*
|
|
1628
|
-
* This source code is licensed under the ISC license.
|
|
1629
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1630
|
-
*/
|
|
1631
|
-
const __iconNode$l = [
|
|
1632
|
-
["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
|
|
1633
|
-
["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
|
|
1634
|
-
["path", { d: "M10 9H8", key: "b1mrlr" }],
|
|
1635
|
-
["path", { d: "M16 13H8", key: "t4e002" }],
|
|
1636
|
-
["path", { d: "M16 17H8", key: "z1uh3a" }]
|
|
1637
|
-
];
|
|
1638
|
-
const FileText = createLucideIcon("file-text", __iconNode$l);
|
|
1639
|
-
/**
|
|
1640
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1641
|
-
*
|
|
1642
|
-
* This source code is licensed under the ISC license.
|
|
1643
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1644
|
-
*/
|
|
1645
|
-
const __iconNode$k = [
|
|
1646
|
-
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
1647
|
-
["path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20", key: "13o1zl" }],
|
|
1648
|
-
["path", { d: "M2 12h20", key: "9i4pu4" }]
|
|
1649
|
-
];
|
|
1650
|
-
const Globe = createLucideIcon("globe", __iconNode$k);
|
|
1651
|
-
/**
|
|
1652
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1653
|
-
*
|
|
1654
|
-
* This source code is licensed under the ISC license.
|
|
1655
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1656
|
-
*/
|
|
1657
|
-
const __iconNode$j = [
|
|
1658
|
-
[
|
|
1659
|
-
"path",
|
|
1660
|
-
{
|
|
1661
|
-
d: "M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z",
|
|
1662
|
-
key: "j76jl0"
|
|
1663
|
-
}
|
|
1664
|
-
],
|
|
1665
|
-
["path", { d: "M22 10v6", key: "1lu8f3" }],
|
|
1666
|
-
["path", { d: "M6 12.5V16a6 3 0 0 0 12 0v-3.5", key: "1r8lef" }]
|
|
1667
|
-
];
|
|
1668
|
-
const GraduationCap = createLucideIcon("graduation-cap", __iconNode$j);
|
|
1669
|
-
/**
|
|
1670
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1671
|
-
*
|
|
1672
|
-
* This source code is licensed under the ISC license.
|
|
1673
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1674
|
-
*/
|
|
1675
|
-
const __iconNode$i = [
|
|
1676
|
-
[
|
|
1677
|
-
"path",
|
|
1678
|
-
{
|
|
1679
|
-
d: "M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5",
|
|
1680
|
-
key: "mvr1a0"
|
|
1681
|
-
}
|
|
1682
|
-
]
|
|
1683
|
-
];
|
|
1684
|
-
const Heart = createLucideIcon("heart", __iconNode$i);
|
|
1685
|
-
/**
|
|
1686
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1687
|
-
*
|
|
1688
|
-
* This source code is licensed under the ISC license.
|
|
1689
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1690
|
-
*/
|
|
1691
|
-
const __iconNode$h = [
|
|
1692
|
-
["path", { d: "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8", key: "5wwlr5" }],
|
|
1693
|
-
[
|
|
1694
|
-
"path",
|
|
1695
|
-
{
|
|
1696
|
-
d: "M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",
|
|
1697
|
-
key: "1d0kgt"
|
|
1698
|
-
}
|
|
1699
|
-
]
|
|
1700
|
-
];
|
|
1701
|
-
const House = createLucideIcon("house", __iconNode$h);
|
|
1702
|
-
/**
|
|
1703
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1704
|
-
*
|
|
1705
|
-
* This source code is licensed under the ISC license.
|
|
1706
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1707
|
-
*/
|
|
1708
|
-
const __iconNode$g = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
|
|
1709
|
-
const LoaderCircle = createLucideIcon("loader-circle", __iconNode$g);
|
|
1710
|
-
/**
|
|
1711
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1712
|
-
*
|
|
1713
|
-
* This source code is licensed under the ISC license.
|
|
1714
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1715
|
-
*/
|
|
1716
|
-
const __iconNode$f = [
|
|
1717
|
-
["path", { d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7", key: "132q7q" }],
|
|
1718
|
-
["rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", key: "izxlao" }]
|
|
1719
|
-
];
|
|
1720
|
-
const Mail = createLucideIcon("mail", __iconNode$f);
|
|
1721
|
-
/**
|
|
1722
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1723
|
-
*
|
|
1724
|
-
* This source code is licensed under the ISC license.
|
|
1725
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1726
|
-
*/
|
|
1727
|
-
const __iconNode$e = [
|
|
1728
|
-
[
|
|
1729
|
-
"path",
|
|
1730
|
-
{
|
|
1731
|
-
d: "M11 6a13 13 0 0 0 8.4-2.8A1 1 0 0 1 21 4v12a1 1 0 0 1-1.6.8A13 13 0 0 0 11 14H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2z",
|
|
1732
|
-
key: "q8bfy3"
|
|
1733
|
-
}
|
|
1734
|
-
],
|
|
1735
|
-
["path", { d: "M6 14a12 12 0 0 0 2.4 7.2 2 2 0 0 0 3.2-2.4A8 8 0 0 1 10 14", key: "1853fq" }],
|
|
1736
|
-
["path", { d: "M8 6v8", key: "15ugcq" }]
|
|
1737
|
-
];
|
|
1738
|
-
const Megaphone = createLucideIcon("megaphone", __iconNode$e);
|
|
1739
|
-
/**
|
|
1740
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1741
|
-
*
|
|
1742
|
-
* This source code is licensed under the ISC license.
|
|
1743
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1744
|
-
*/
|
|
1745
|
-
const __iconNode$d = [
|
|
1746
|
-
[
|
|
1747
|
-
"path",
|
|
1748
|
-
{
|
|
1749
|
-
d: "M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",
|
|
1750
|
-
key: "1a0edw"
|
|
1751
|
-
}
|
|
1752
|
-
],
|
|
1753
|
-
["path", { d: "M12 22V12", key: "d0xqtd" }],
|
|
1754
|
-
["polyline", { points: "3.29 7 12 12 20.71 7", key: "ousv84" }],
|
|
1755
|
-
["path", { d: "m7.5 4.27 9 5.15", key: "1c824w" }]
|
|
1756
|
-
];
|
|
1757
|
-
const Package = createLucideIcon("package", __iconNode$d);
|
|
1758
|
-
/**
|
|
1759
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1760
|
-
*
|
|
1761
|
-
* This source code is licensed under the ISC license.
|
|
1762
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1763
|
-
*/
|
|
1764
|
-
const __iconNode$c = [
|
|
1765
|
-
[
|
|
1766
|
-
"path",
|
|
1767
|
-
{
|
|
1768
|
-
d: "M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384",
|
|
1769
|
-
key: "9njp5v"
|
|
1770
|
-
}
|
|
1771
|
-
]
|
|
1772
|
-
];
|
|
1773
|
-
const Phone = createLucideIcon("phone", __iconNode$c);
|
|
1774
|
-
/**
|
|
1775
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1776
|
-
*
|
|
1777
|
-
* This source code is licensed under the ISC license.
|
|
1778
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1779
|
-
*/
|
|
1780
|
-
const __iconNode$b = [
|
|
1781
|
-
[
|
|
1782
|
-
"path",
|
|
1783
|
-
{
|
|
1784
|
-
d: "M17.8 19.2 16 11l3.5-3.5C21 6 21.5 4 21 3c-1-.5-3 0-4.5 1.5L13 8 4.8 6.2c-.5-.1-.9.1-1.1.5l-.3.5c-.2.5-.1 1 .3 1.3L9 12l-2 3H4l-1 1 3 2 2 3 1-1v-3l3-2 3.5 5.3c.3.4.8.5 1.3.3l.5-.2c.4-.3.6-.7.5-1.2z",
|
|
1785
|
-
key: "1v9wt8"
|
|
1786
|
-
}
|
|
1787
|
-
]
|
|
1788
|
-
];
|
|
1789
|
-
const Plane = createLucideIcon("plane", __iconNode$b);
|
|
1790
|
-
/**
|
|
1791
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1792
|
-
*
|
|
1793
|
-
* This source code is licensed under the ISC license.
|
|
1794
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1795
|
-
*/
|
|
1796
|
-
const __iconNode$a = [
|
|
1797
|
-
[
|
|
1798
|
-
"path",
|
|
1799
|
-
{
|
|
1800
|
-
d: "M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",
|
|
1801
|
-
key: "1ffxy3"
|
|
1802
|
-
}
|
|
1803
|
-
],
|
|
1804
|
-
["path", { d: "m21.854 2.147-10.94 10.939", key: "12cjpa" }]
|
|
1805
|
-
];
|
|
1806
|
-
const Send = createLucideIcon("send", __iconNode$a);
|
|
1807
|
-
/**
|
|
1808
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1809
|
-
*
|
|
1810
|
-
* This source code is licensed under the ISC license.
|
|
1811
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1812
|
-
*/
|
|
1813
|
-
const __iconNode$9 = [
|
|
1814
|
-
[
|
|
1815
|
-
"path",
|
|
1816
|
-
{
|
|
1817
|
-
d: "M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",
|
|
1818
|
-
key: "1i5ecw"
|
|
1819
|
-
}
|
|
1820
|
-
],
|
|
1821
|
-
["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
|
|
1822
|
-
];
|
|
1823
|
-
const Settings = createLucideIcon("settings", __iconNode$9);
|
|
1824
|
-
/**
|
|
1825
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1826
|
-
*
|
|
1827
|
-
* This source code is licensed under the ISC license.
|
|
1828
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1829
|
-
*/
|
|
1830
|
-
const __iconNode$8 = [
|
|
1831
|
-
[
|
|
1832
|
-
"path",
|
|
1833
|
-
{
|
|
1834
|
-
d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",
|
|
1835
|
-
key: "oel41y"
|
|
1836
|
-
}
|
|
1837
|
-
]
|
|
1838
|
-
];
|
|
1839
|
-
const Shield = createLucideIcon("shield", __iconNode$8);
|
|
1840
|
-
/**
|
|
1841
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1842
|
-
*
|
|
1843
|
-
* This source code is licensed under the ISC license.
|
|
1844
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1845
|
-
*/
|
|
1846
|
-
const __iconNode$7 = [
|
|
1847
|
-
["circle", { cx: "8", cy: "21", r: "1", key: "jimo8o" }],
|
|
1848
|
-
["circle", { cx: "19", cy: "21", r: "1", key: "13723u" }],
|
|
1849
|
-
[
|
|
1850
|
-
"path",
|
|
1851
|
-
{
|
|
1852
|
-
d: "M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12",
|
|
1853
|
-
key: "9zh506"
|
|
1854
|
-
}
|
|
1855
|
-
]
|
|
1856
|
-
];
|
|
1857
|
-
const ShoppingCart = createLucideIcon("shopping-cart", __iconNode$7);
|
|
1858
|
-
/**
|
|
1859
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1860
|
-
*
|
|
1861
|
-
* This source code is licensed under the ISC license.
|
|
1862
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1863
|
-
*/
|
|
1864
|
-
const __iconNode$6 = [
|
|
1865
|
-
["rect", { width: "14", height: "20", x: "5", y: "2", rx: "2", ry: "2", key: "1yt0o3" }],
|
|
1866
|
-
["path", { d: "M12 18h.01", key: "mhygvu" }]
|
|
1867
|
-
];
|
|
1868
|
-
const Smartphone = createLucideIcon("smartphone", __iconNode$6);
|
|
1869
|
-
/**
|
|
1870
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1871
|
-
*
|
|
1872
|
-
* This source code is licensed under the ISC license.
|
|
1873
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1874
|
-
*/
|
|
1875
|
-
const __iconNode$5 = [
|
|
1876
|
-
["path", { d: "M16 7h6v6", key: "box55l" }],
|
|
1877
|
-
["path", { d: "m22 7-8.5 8.5-5-5L2 17", key: "1t1m79" }]
|
|
1878
|
-
];
|
|
1879
|
-
const TrendingUp = createLucideIcon("trending-up", __iconNode$5);
|
|
1880
|
-
/**
|
|
1881
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1882
|
-
*
|
|
1883
|
-
* This source code is licensed under the ISC license.
|
|
1884
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1885
|
-
*/
|
|
1886
|
-
const __iconNode$4 = [
|
|
1887
|
-
["path", { d: "M14 18V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v11a1 1 0 0 0 1 1h2", key: "wrbu53" }],
|
|
1888
|
-
["path", { d: "M15 18H9", key: "1lyqi6" }],
|
|
1889
|
-
[
|
|
1890
|
-
"path",
|
|
1891
|
-
{
|
|
1892
|
-
d: "M19 18h2a1 1 0 0 0 1-1v-3.65a1 1 0 0 0-.22-.624l-3.48-4.35A1 1 0 0 0 17.52 8H14",
|
|
1893
|
-
key: "lysw3i"
|
|
1894
|
-
}
|
|
1895
|
-
],
|
|
1896
|
-
["circle", { cx: "17", cy: "18", r: "2", key: "332jqn" }],
|
|
1897
|
-
["circle", { cx: "7", cy: "18", r: "2", key: "19iecd" }]
|
|
1898
|
-
];
|
|
1899
|
-
const Truck = createLucideIcon("truck", __iconNode$4);
|
|
1900
|
-
/**
|
|
1901
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1902
|
-
*
|
|
1903
|
-
* This source code is licensed under the ISC license.
|
|
1904
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1905
|
-
*/
|
|
1906
|
-
const __iconNode$3 = [
|
|
1907
|
-
["path", { d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2", key: "975kel" }],
|
|
1908
|
-
["circle", { cx: "12", cy: "7", r: "4", key: "17ys0d" }]
|
|
1909
|
-
];
|
|
1910
|
-
const User = createLucideIcon("user", __iconNode$3);
|
|
1911
|
-
/**
|
|
1912
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1913
|
-
*
|
|
1914
|
-
* This source code is licensed under the ISC license.
|
|
1915
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1916
|
-
*/
|
|
1917
|
-
const __iconNode$2 = [
|
|
1918
|
-
["path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2", key: "1yyitq" }],
|
|
1919
|
-
["path", { d: "M16 3.128a4 4 0 0 1 0 7.744", key: "16gr8j" }],
|
|
1920
|
-
["path", { d: "M22 21v-2a4 4 0 0 0-3-3.87", key: "kshegd" }],
|
|
1921
|
-
["circle", { cx: "9", cy: "7", r: "4", key: "nufk8" }]
|
|
1922
|
-
];
|
|
1923
|
-
const Users = createLucideIcon("users", __iconNode$2);
|
|
1924
|
-
/**
|
|
1925
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1926
|
-
*
|
|
1927
|
-
* This source code is licensed under the ISC license.
|
|
1928
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1929
|
-
*/
|
|
1930
|
-
const __iconNode$1 = [
|
|
1931
|
-
[
|
|
1932
|
-
"path",
|
|
1933
|
-
{
|
|
1934
|
-
d: "M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",
|
|
1935
|
-
key: "1ngwbx"
|
|
1936
|
-
}
|
|
1937
|
-
]
|
|
1938
|
-
];
|
|
1939
|
-
const Wrench = createLucideIcon("wrench", __iconNode$1);
|
|
1940
|
-
/**
|
|
1941
|
-
* @license lucide-react v0.536.0 - ISC
|
|
1942
|
-
*
|
|
1943
|
-
* This source code is licensed under the ISC license.
|
|
1944
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
1945
|
-
*/
|
|
1946
|
-
const __iconNode = [
|
|
1947
|
-
[
|
|
1948
|
-
"path",
|
|
1949
|
-
{
|
|
1950
|
-
d: "M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",
|
|
1951
|
-
key: "1xq2db"
|
|
1952
|
-
}
|
|
1953
|
-
]
|
|
1954
|
-
];
|
|
1955
|
-
const Zap = createLucideIcon("zap", __iconNode);
|
|
1956
|
-
const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService }) => {
|
|
1957
|
-
const [formData, setFormData] = useState({
|
|
1958
|
-
fullName: "",
|
|
1959
|
-
workEmail: "",
|
|
1960
|
-
phoneNumber: "",
|
|
1961
|
-
companyName: "",
|
|
1962
|
-
jobTitle: "",
|
|
1963
|
-
businessType: "",
|
|
1964
|
-
expectedBudget: "",
|
|
1965
|
-
expectedTimeline: "",
|
|
1966
|
-
requestTitle: "",
|
|
1967
|
-
requestDescription: ""
|
|
1968
|
-
});
|
|
1969
|
-
const [formErrors, setFormErrors] = useState({});
|
|
1970
|
-
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
1971
|
-
const [submitStatus, setSubmitStatus] = useState(null);
|
|
1972
|
-
const [submitMessage, setSubmitMessage] = useState("");
|
|
1973
|
-
const validateField = (name, value) => {
|
|
1974
|
-
const errors = {};
|
|
1975
|
-
switch (name) {
|
|
1976
|
-
case "fullName":
|
|
1977
|
-
if (!(value == null ? void 0 : value.trim())) errors.fullName = "Họ và tên là bắt buộc";
|
|
1978
|
-
else if (value.trim().length < 2) errors.fullName = "Tên phải có ít nhất 2 ký tự";
|
|
1979
|
-
break;
|
|
1980
|
-
case "workEmail":
|
|
1981
|
-
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
1982
|
-
if (!(value == null ? void 0 : value.trim())) errors.workEmail = "Email là bắt buộc";
|
|
1983
|
-
else if (!emailRegex.test(value.trim())) errors.workEmail = "Email không hợp lệ";
|
|
1984
|
-
break;
|
|
1985
|
-
case "phoneNumber":
|
|
1986
|
-
const phoneRegex = /^[0-9\s\-\+\(\)]{10,15}$/;
|
|
1987
|
-
if (value && !phoneRegex.test(value.trim())) errors.phoneNumber = "Số điện thoại không hợp lệ";
|
|
1988
|
-
break;
|
|
1989
|
-
case "requestTitle":
|
|
1990
|
-
if (!(value == null ? void 0 : value.trim())) errors.requestTitle = "Tiêu đề yêu cầu là bắt buộc";
|
|
1991
|
-
else if (value.trim().length < 5) errors.requestTitle = "Tiêu đề phải có ít nhất 5 ký tự";
|
|
1992
|
-
break;
|
|
1993
|
-
case "requestDescription":
|
|
1994
|
-
if (!(value == null ? void 0 : value.trim())) errors.requestDescription = "Mô tả yêu cầu là bắt buộc";
|
|
1995
|
-
else if (value.trim().length < 10) errors.requestDescription = "Mô tả phải có ít nhất 10 ký tự";
|
|
1996
|
-
break;
|
|
1997
|
-
case "companyName":
|
|
1998
|
-
if (value && value.trim().length > 0 && value.trim().length < 2) {
|
|
1999
|
-
errors.companyName = "Tên công ty phải có ít nhất 2 ký tự";
|
|
2000
|
-
}
|
|
2001
|
-
break;
|
|
2002
|
-
case "jobTitle":
|
|
2003
|
-
if (value && value.trim().length > 0 && value.trim().length < 2) {
|
|
2004
|
-
errors.jobTitle = "Chức vụ phải có ít nhất 2 ký tự";
|
|
2005
|
-
}
|
|
2006
|
-
break;
|
|
2007
|
-
}
|
|
2008
|
-
return errors;
|
|
2009
|
-
};
|
|
2010
|
-
const handleInputChange = (e) => {
|
|
2011
|
-
const { name, value } = e.target;
|
|
2012
|
-
setFormData((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
2013
|
-
[name]: value || ""
|
|
2014
|
-
}));
|
|
2015
|
-
if (formErrors[name]) {
|
|
2016
|
-
setFormErrors((prev) => {
|
|
2017
|
-
const newErrors = __spreadValues({}, prev);
|
|
2018
|
-
delete newErrors[name];
|
|
2019
|
-
return newErrors;
|
|
2020
|
-
});
|
|
1415
|
+
return errors;
|
|
1416
|
+
};
|
|
1417
|
+
const handleInputChange = (e) => {
|
|
1418
|
+
const { name, value } = e.target;
|
|
1419
|
+
setFormData((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
1420
|
+
[name]: value || ""
|
|
1421
|
+
}));
|
|
1422
|
+
if (formErrors[name]) {
|
|
1423
|
+
setFormErrors((prev) => {
|
|
1424
|
+
const newErrors = __spreadValues({}, prev);
|
|
1425
|
+
delete newErrors[name];
|
|
1426
|
+
return newErrors;
|
|
1427
|
+
});
|
|
2021
1428
|
}
|
|
2022
1429
|
};
|
|
2023
1430
|
const handleBlur = (e) => {
|
|
@@ -2089,14 +1496,14 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2089
1496
|
`;
|
|
2090
1497
|
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: [
|
|
2091
1498
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center mb-6", children: [
|
|
2092
|
-
/* @__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(
|
|
1499
|
+
/* @__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(ThemeIcon, { name: "icon-contactFormSend", className: "w-4 h-4 icon-gradient" }) }),
|
|
2093
1500
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2094
1501
|
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-subtitle font-bold text-main", children: t("form.title") || "Gửi yêu cầu tư vấn" }),
|
|
2095
1502
|
/* @__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" })
|
|
2096
1503
|
] })
|
|
2097
1504
|
] }),
|
|
2098
1505
|
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: [
|
|
2099
|
-
submitStatus === "success" ? /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1506
|
+
submitStatus === "success" ? /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactFormCheck", className: "w-4 h-4 icon-gradient" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-ContactFormAlertCircle", className: "w-4 h-4 icon-gradient" }),
|
|
2100
1507
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small font-medium", children: submitMessage })
|
|
2101
1508
|
] }) }),
|
|
2102
1509
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleSubmit, className: "space-y-6", children: [
|
|
@@ -2121,7 +1528,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2121
1528
|
}
|
|
2122
1529
|
),
|
|
2123
1530
|
formErrors.fullName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2124
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1531
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-ContactFormAlertCircle", className: "w-4 h-4 icon-gradient" }),
|
|
2125
1532
|
formErrors.fullName
|
|
2126
1533
|
] })
|
|
2127
1534
|
] }),
|
|
@@ -2145,7 +1552,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2145
1552
|
}
|
|
2146
1553
|
),
|
|
2147
1554
|
formErrors.workEmail && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2148
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1555
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-ContactFormAlertCircle", className: "w-4 h-4 icon-gradient" }),
|
|
2149
1556
|
formErrors.workEmail
|
|
2150
1557
|
] })
|
|
2151
1558
|
] })
|
|
@@ -2167,7 +1574,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2167
1574
|
}
|
|
2168
1575
|
),
|
|
2169
1576
|
formErrors.phoneNumber && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2170
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1577
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-ContactFormAlertCircle", className: "w-4 h-4 icon-gradient" }),
|
|
2171
1578
|
formErrors.phoneNumber
|
|
2172
1579
|
] })
|
|
2173
1580
|
] }),
|
|
@@ -2187,7 +1594,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2187
1594
|
}
|
|
2188
1595
|
),
|
|
2189
1596
|
formErrors.companyName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2190
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1597
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-ContactFormAlertCircle", className: "w-4 h-4 icon-gradient" }),
|
|
2191
1598
|
formErrors.companyName
|
|
2192
1599
|
] })
|
|
2193
1600
|
] })
|
|
@@ -2209,7 +1616,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2209
1616
|
}
|
|
2210
1617
|
),
|
|
2211
1618
|
formErrors.jobTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2212
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1619
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-ContactFormAlertCircle", className: "w-4 h-4 icon-gradient" }),
|
|
2213
1620
|
formErrors.jobTitle
|
|
2214
1621
|
] })
|
|
2215
1622
|
] }),
|
|
@@ -2281,7 +1688,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2281
1688
|
}
|
|
2282
1689
|
),
|
|
2283
1690
|
formErrors.requestTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2284
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1691
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-ContactFormAlertCircle", className: "w-4 h-4 icon-gradient" }),
|
|
2285
1692
|
formErrors.requestTitle
|
|
2286
1693
|
] })
|
|
2287
1694
|
] }),
|
|
@@ -2305,7 +1712,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2305
1712
|
}
|
|
2306
1713
|
),
|
|
2307
1714
|
formErrors.requestDescription && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2308
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1715
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-ContactFormAlertCircle", className: "w-4 h-4 icon-gradient" }),
|
|
2309
1716
|
formErrors.requestDescription
|
|
2310
1717
|
] })
|
|
2311
1718
|
] }),
|
|
@@ -2316,10 +1723,10 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2316
1723
|
disabled: isSubmitting,
|
|
2317
1724
|
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",
|
|
2318
1725
|
children: isSubmitting ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
2319
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1726
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-ContactFormLoader2", className: "w-4 h-4 icon-muted" }),
|
|
2320
1727
|
t("form.submitting") || "Đang gửi..."
|
|
2321
1728
|
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
2322
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1729
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactFormSend", className: "w-4 h-4 icon-gradient" }),
|
|
2323
1730
|
t("form.submit") || "Gửi yêu cầu"
|
|
2324
1731
|
] })
|
|
2325
1732
|
}
|
|
@@ -2334,7 +1741,7 @@ const ContactInfoSection = ({ data, t, isDarkMode, section }) => {
|
|
|
2334
1741
|
if (!contactData.length) return null;
|
|
2335
1742
|
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: [
|
|
2336
1743
|
/* @__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: [
|
|
2337
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1744
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoUser", className: "w-4 h-4 icon-gradient" }),
|
|
2338
1745
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-main", children: sectionTitle })
|
|
2339
1746
|
] }) }),
|
|
2340
1747
|
/* @__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: [
|
|
@@ -2347,7 +1754,7 @@ const ContactInfoSection = ({ data, t, isDarkMode, section }) => {
|
|
|
2347
1754
|
display: "flex",
|
|
2348
1755
|
alignItems: "center",
|
|
2349
1756
|
justifyContent: "center"
|
|
2350
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1757
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoUser", className: "w-4 h-4 icon-gradient" }) }),
|
|
2351
1758
|
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-subtitle mb-2", children: contact.name }),
|
|
2352
1759
|
/* @__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 })
|
|
2353
1760
|
] }),
|
|
@@ -2374,7 +1781,7 @@ const ContactInfoSection = ({ data, t, isDarkMode, section }) => {
|
|
|
2374
1781
|
alignItems: "center",
|
|
2375
1782
|
justifyContent: "center",
|
|
2376
1783
|
marginRight: "0.75rem"
|
|
2377
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1784
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoPhone", className: "w-4 h-4 icon-gradient" }) }),
|
|
2378
1785
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2379
1786
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contact.info.phone") || "Điện thoại" }),
|
|
2380
1787
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.phone })
|
|
@@ -2404,7 +1811,7 @@ const ContactInfoSection = ({ data, t, isDarkMode, section }) => {
|
|
|
2404
1811
|
alignItems: "center",
|
|
2405
1812
|
justifyContent: "center",
|
|
2406
1813
|
marginRight: "0.75rem"
|
|
2407
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1814
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoEmail", className: "w-4 h-4 icon-gradient" }) }),
|
|
2408
1815
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2409
1816
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: "Email" }),
|
|
2410
1817
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.email })
|
|
@@ -2429,7 +1836,7 @@ const ContactInfoSection = ({ data, t, isDarkMode, section }) => {
|
|
|
2429
1836
|
alignItems: "center",
|
|
2430
1837
|
justifyContent: "center",
|
|
2431
1838
|
marginRight: "0.75rem"
|
|
2432
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1839
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoClock", className: "w-4 h-4 icon-muted" }) }),
|
|
2433
1840
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2434
1841
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contact.info.workingHours") || "Giờ làm việc" }),
|
|
2435
1842
|
/* @__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" })
|
|
@@ -2487,7 +1894,7 @@ const ContactListAutoSection = ({ data, t, isDarkMode, getContactList, section }
|
|
|
2487
1894
|
}
|
|
2488
1895
|
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: [
|
|
2489
1896
|
/* @__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: [
|
|
2490
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1897
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoUser", className: "w-4 h-4 icon-gradient" }),
|
|
2491
1898
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-main", children: sectionTitle })
|
|
2492
1899
|
] }) }),
|
|
2493
1900
|
/* @__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)) })
|
|
@@ -2504,7 +1911,7 @@ const ContactCard = ({ contact, t, isDarkMode }) => {
|
|
|
2504
1911
|
display: "flex",
|
|
2505
1912
|
alignItems: "center",
|
|
2506
1913
|
justifyContent: "center"
|
|
2507
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1914
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoUser", className: "w-4 h-4 icon-gradient" }) }),
|
|
2508
1915
|
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-subtitle mb-2", children: contact.name || t("contactList.card.noName") || "Không có tên" }),
|
|
2509
1916
|
/* @__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ụ" })
|
|
2510
1917
|
] }),
|
|
@@ -2531,7 +1938,7 @@ const ContactCard = ({ contact, t, isDarkMode }) => {
|
|
|
2531
1938
|
alignItems: "center",
|
|
2532
1939
|
justifyContent: "center",
|
|
2533
1940
|
marginRight: "0.75rem"
|
|
2534
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1941
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoPhone", className: "w-4 h-4 icon-gradient" }) }),
|
|
2535
1942
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2536
1943
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contactList.card.phone") || "Điện thoại" }),
|
|
2537
1944
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.phone })
|
|
@@ -2561,7 +1968,7 @@ const ContactCard = ({ contact, t, isDarkMode }) => {
|
|
|
2561
1968
|
alignItems: "center",
|
|
2562
1969
|
justifyContent: "center",
|
|
2563
1970
|
marginRight: "0.75rem"
|
|
2564
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1971
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoEmail", className: "w-4 h-4 icon-gradient" }) }),
|
|
2565
1972
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2566
1973
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: "Email" }),
|
|
2567
1974
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.email })
|
|
@@ -2586,7 +1993,7 @@ const ContactCard = ({ contact, t, isDarkMode }) => {
|
|
|
2586
1993
|
alignItems: "center",
|
|
2587
1994
|
justifyContent: "center",
|
|
2588
1995
|
marginRight: "0.75rem"
|
|
2589
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1996
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoClock", className: "w-4 h-4 icon-muted" }) }),
|
|
2590
1997
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2591
1998
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contactList.card.workingHours") || "Giờ làm việc" }),
|
|
2592
1999
|
/* @__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" })
|
|
@@ -2679,7 +2086,8 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
|
|
|
2679
2086
|
{
|
|
2680
2087
|
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 ",
|
|
2681
2088
|
children: [
|
|
2682
|
-
"
|
|
2089
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-testimonials", folder: "TestimonialsSection", className: "w-4 h-4 icon-gradient" }),
|
|
2090
|
+
" ",
|
|
2683
2091
|
sectionTitle
|
|
2684
2092
|
]
|
|
2685
2093
|
}
|
|
@@ -2696,7 +2104,7 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
|
|
|
2696
2104
|
'"'
|
|
2697
2105
|
] }),
|
|
2698
2106
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4", children: [
|
|
2699
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-3xl", children: "
|
|
2107
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-3xl", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-testimonialsUser", folder: "TestimonialsSection", className: "w-4 h-4 icon-gradient" }) }),
|
|
2700
2108
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
2701
2109
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-title text-base mb-1", children: currentFeedback.customerName }),
|
|
2702
2110
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-link text-sm", children: currentFeedback.customerTitle }),
|
|
@@ -2734,264 +2142,761 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
|
|
|
2734
2142
|
opacity: 1;
|
|
2735
2143
|
transform: translateY(0);
|
|
2736
2144
|
}
|
|
2737
|
-
}
|
|
2738
|
-
` })
|
|
2739
|
-
] });
|
|
2145
|
+
}
|
|
2146
|
+
` })
|
|
2147
|
+
] });
|
|
2148
|
+
};
|
|
2149
|
+
const ProductListSection = ({ data, t, isDarkMode, getProductList }) => {
|
|
2150
|
+
const [products, setProducts] = useState([]);
|
|
2151
|
+
const [loading, setLoading] = useState(true);
|
|
2152
|
+
const [error, setError] = useState(null);
|
|
2153
|
+
useEffect(() => {
|
|
2154
|
+
const fetchProducts = () => __async(null, null, function* () {
|
|
2155
|
+
try {
|
|
2156
|
+
setLoading(true);
|
|
2157
|
+
const result = yield getProductList();
|
|
2158
|
+
if (result.success) {
|
|
2159
|
+
setProducts(result.data || []);
|
|
2160
|
+
} else {
|
|
2161
|
+
setError(result.error || t("productList.errors.loadFailed"));
|
|
2162
|
+
}
|
|
2163
|
+
} catch (err) {
|
|
2164
|
+
console.error("Error fetching products:", err);
|
|
2165
|
+
setError(t("productList.errors.loadError"));
|
|
2166
|
+
} finally {
|
|
2167
|
+
setLoading(false);
|
|
2168
|
+
}
|
|
2169
|
+
});
|
|
2170
|
+
fetchProducts();
|
|
2171
|
+
}, [t]);
|
|
2172
|
+
if (loading) {
|
|
2173
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `py-16 px-5 text-center ${isDarkMode ? "bg-gray-900" : "bg-gray-50"}`, children: [
|
|
2174
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `inline-block w-10 h-10 border-4 ${isDarkMode ? "border-gray-600 border-t-blue-400" : "border-gray-300 border-t-blue-500"} rounded-full animate-spin` }),
|
|
2175
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `mt-2.5 text-base ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: t("productList.loading") })
|
|
2176
|
+
] });
|
|
2177
|
+
}
|
|
2178
|
+
if (error) {
|
|
2179
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `py-16 px-5 text-center ${isDarkMode ? "bg-gray-900" : "bg-gray-50"}`, children: [
|
|
2180
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-red-500 text-5xl mb-4", children: "⚠️" }),
|
|
2181
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-red-500 text-base m-0", children: error })
|
|
2182
|
+
] });
|
|
2183
|
+
}
|
|
2184
|
+
if (!products || products.length === 0) {
|
|
2185
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `py-16 px-5 text-center ${isDarkMode ? "bg-gray-900" : "bg-gray-50"}`, children: [
|
|
2186
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `text-5xl mb-4 ${isDarkMode ? "text-gray-400" : "text-gray-500"}`, children: "📦" }),
|
|
2187
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-base m-0 ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: t("productList.noProducts") })
|
|
2188
|
+
] });
|
|
2189
|
+
}
|
|
2190
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `py-16 px-5 transition-colors duration-300 ${isDarkMode ? "bg-gray-900" : "bg-gray-50"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-6xl mx-auto", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-8 items-start", children: products.map((product, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(ProductCard, { product, t, isDarkMode }, product.id || index2)) }) }) });
|
|
2191
|
+
};
|
|
2192
|
+
const ProductCard = ({ product, t, isDarkMode }) => {
|
|
2193
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
2194
|
+
const [activeTab, setActiveTab] = useState("overview");
|
|
2195
|
+
const [isHovered, setIsHovered] = useState(false);
|
|
2196
|
+
const mainImage = ((_b = (_a = product.images) == null ? void 0 : _a.find((img) => img.isMain)) == null ? void 0 : _b.imageUrl) || ((_d = (_c = product.images) == null ? void 0 : _c[0]) == null ? void 0 : _d.imageUrl) || "/placeholder-product.png";
|
|
2197
|
+
const tabs = [
|
|
2198
|
+
{ id: "overview", label: t("productCard.tabs.overview"), count: null },
|
|
2199
|
+
{ id: "features", label: t("productCard.tabs.features"), count: ((_e = product.features) == null ? void 0 : _e.length) || 0 },
|
|
2200
|
+
{ id: "contacts", label: t("productCard.tabs.contacts"), count: ((_f = product.contacts) == null ? void 0 : _f.length) || 0 },
|
|
2201
|
+
{ id: "downloads", label: t("productCard.tabs.downloads"), count: ((_g = product.productDownloads) == null ? void 0 : _g.length) || 0 }
|
|
2202
|
+
];
|
|
2203
|
+
const renderOverview = () => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-5", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2204
|
+
"div",
|
|
2205
|
+
{
|
|
2206
|
+
className: `text-sm leading-relaxed ${isDarkMode ? "text-gray-300" : "text-gray-700"}`,
|
|
2207
|
+
dangerouslySetInnerHTML: {
|
|
2208
|
+
__html: product.overviewContent || product.description || t("productCard.noOverview")
|
|
2209
|
+
}
|
|
2210
|
+
}
|
|
2211
|
+
) });
|
|
2212
|
+
const renderFeatures = () => {
|
|
2213
|
+
const features = product.features || [];
|
|
2214
|
+
if (features.length === 0) {
|
|
2215
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `p-5 text-center ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "m-0", children: t("productCard.noFeatures") }) });
|
|
2216
|
+
}
|
|
2217
|
+
const sortedFeatures = [...features].sort((a, b) => (a.order || 0) - (b.order || 0));
|
|
2218
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-5", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-4", children: sortedFeatures.map((feature, index2) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2219
|
+
"div",
|
|
2220
|
+
{
|
|
2221
|
+
className: `p-4 rounded-lg border-l-4 border-blue-500 ${isDarkMode ? "bg-gray-700" : "bg-gray-100"}`,
|
|
2222
|
+
children: [
|
|
2223
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: `m-0 mb-2 text-sm font-bold ${isDarkMode ? "text-white" : "text-gray-900"}`, children: feature.title }),
|
|
2224
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `m-0 text-xs leading-relaxed ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: feature.description })
|
|
2225
|
+
]
|
|
2226
|
+
},
|
|
2227
|
+
index2
|
|
2228
|
+
)) }) });
|
|
2229
|
+
};
|
|
2230
|
+
const renderContacts = () => {
|
|
2231
|
+
const contacts = product.contacts || [];
|
|
2232
|
+
if (contacts.length === 0) {
|
|
2233
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `p-5 text-center ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "m-0", children: t("productCard.noContacts") }) });
|
|
2234
|
+
}
|
|
2235
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-5", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-4", children: contacts.map((contact, index2) => {
|
|
2236
|
+
var _a2, _b2;
|
|
2237
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2238
|
+
"div",
|
|
2239
|
+
{
|
|
2240
|
+
className: `p-4 rounded-lg border ${isDarkMode ? "bg-gray-700 border-gray-600" : "bg-gray-100 border-gray-200"}`,
|
|
2241
|
+
children: [
|
|
2242
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center mb-2", children: [
|
|
2243
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `w-10 h-10 rounded-full flex items-center justify-center mr-3 ${isDarkMode ? "bg-blue-600" : "bg-blue-500"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-white font-bold text-base", children: ((_b2 = (_a2 = contact.name) == null ? void 0 : _a2.charAt(0)) == null ? void 0 : _b2.toUpperCase()) || "?" }) }),
|
|
2244
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2245
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: `m-0 mb-0.5 text-sm font-bold ${isDarkMode ? "text-white" : "text-gray-900"}`, children: contact.name }),
|
|
2246
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `m-0 text-xs ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: contact.position })
|
|
2247
|
+
] })
|
|
2248
|
+
] }),
|
|
2249
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
|
|
2250
|
+
contact.phone && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
2251
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `text-sm ${isDarkMode ? "text-blue-400" : "text-blue-500"}`, children: "📞" }),
|
|
2252
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2253
|
+
"a",
|
|
2254
|
+
{
|
|
2255
|
+
href: `tel:${contact.phone}`,
|
|
2256
|
+
className: `text-xs no-underline hover:underline ${isDarkMode ? "text-blue-400" : "text-blue-500"}`,
|
|
2257
|
+
children: contact.phone
|
|
2258
|
+
}
|
|
2259
|
+
)
|
|
2260
|
+
] }),
|
|
2261
|
+
contact.email && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
2262
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `text-sm ${isDarkMode ? "text-blue-400" : "text-blue-500"}`, children: "✉️" }),
|
|
2263
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2264
|
+
"a",
|
|
2265
|
+
{
|
|
2266
|
+
href: `mailto:${contact.email}`,
|
|
2267
|
+
className: `text-xs no-underline hover:underline ${isDarkMode ? "text-blue-400" : "text-blue-500"}`,
|
|
2268
|
+
children: contact.email
|
|
2269
|
+
}
|
|
2270
|
+
)
|
|
2271
|
+
] })
|
|
2272
|
+
] })
|
|
2273
|
+
]
|
|
2274
|
+
},
|
|
2275
|
+
contact.id || index2
|
|
2276
|
+
);
|
|
2277
|
+
}) }) });
|
|
2278
|
+
};
|
|
2279
|
+
const renderDownloads = () => {
|
|
2280
|
+
const downloads = product.productDownloads || [];
|
|
2281
|
+
if (downloads.length === 0) {
|
|
2282
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `p-5 text-center ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "m-0", children: t("productCard.noDownloads") }) });
|
|
2283
|
+
}
|
|
2284
|
+
const handleDownload = (fileUrl, title) => {
|
|
2285
|
+
try {
|
|
2286
|
+
const link = document.createElement("a");
|
|
2287
|
+
link.href = fileUrl;
|
|
2288
|
+
link.download = title || "download";
|
|
2289
|
+
link.target = "_blank";
|
|
2290
|
+
document.body.appendChild(link);
|
|
2291
|
+
link.click();
|
|
2292
|
+
document.body.removeChild(link);
|
|
2293
|
+
} catch (error) {
|
|
2294
|
+
console.error("Download error:", error);
|
|
2295
|
+
}
|
|
2296
|
+
};
|
|
2297
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-5", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-3", children: downloads.map((download, index2) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2298
|
+
"div",
|
|
2299
|
+
{
|
|
2300
|
+
onClick: () => handleDownload(download.fileUrl, download.title),
|
|
2301
|
+
className: `p-4 rounded-lg border cursor-pointer flex items-center gap-3 transition-all duration-200 hover:translate-x-1 ${isDarkMode ? "bg-gray-700 border-gray-600 hover:bg-gray-600" : "bg-gray-100 border-gray-200 hover:bg-gray-200"}`,
|
|
2302
|
+
children: [
|
|
2303
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `w-10 h-10 rounded-lg flex items-center justify-center flex-shrink-0 ${isDarkMode ? "bg-blue-600" : "bg-blue-500"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-white text-lg", children: "📄" }) }),
|
|
2304
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
2305
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: `m-0 mb-1 text-sm font-bold overflow-hidden text-ellipsis whitespace-nowrap ${isDarkMode ? "text-white" : "text-gray-900"}`, children: download.title }),
|
|
2306
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `m-0 text-xs ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: t("productCard.downloadClick") })
|
|
2307
|
+
] }),
|
|
2308
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `flex-shrink-0 text-base ${isDarkMode ? "text-blue-400" : "text-blue-500"}`, children: "⬇️" })
|
|
2309
|
+
]
|
|
2310
|
+
},
|
|
2311
|
+
index2
|
|
2312
|
+
)) }) });
|
|
2313
|
+
};
|
|
2314
|
+
const renderTabContent = () => {
|
|
2315
|
+
switch (activeTab) {
|
|
2316
|
+
case "overview":
|
|
2317
|
+
return renderOverview();
|
|
2318
|
+
case "features":
|
|
2319
|
+
return renderFeatures();
|
|
2320
|
+
case "contacts":
|
|
2321
|
+
return renderContacts();
|
|
2322
|
+
case "downloads":
|
|
2323
|
+
return renderDownloads();
|
|
2324
|
+
default:
|
|
2325
|
+
return null;
|
|
2326
|
+
}
|
|
2327
|
+
};
|
|
2328
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2329
|
+
"div",
|
|
2330
|
+
{
|
|
2331
|
+
className: `
|
|
2332
|
+
rounded-xl overflow-hidden cursor-pointer transition-all duration-300 border
|
|
2333
|
+
${isDarkMode ? "bg-gray-800 border-gray-700" : "bg-white border-gray-200"}
|
|
2334
|
+
${isHovered ? `shadow-xl -translate-y-2 ${isDarkMode ? "shadow-gray-900/40" : "shadow-gray-500/20"}` : `shadow-lg ${isDarkMode ? "shadow-gray-900/20" : "shadow-gray-500/10"}`}
|
|
2335
|
+
`,
|
|
2336
|
+
onMouseEnter: () => setIsHovered(true),
|
|
2337
|
+
onMouseLeave: () => setIsHovered(false),
|
|
2338
|
+
children: [
|
|
2339
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2340
|
+
"div",
|
|
2341
|
+
{
|
|
2342
|
+
className: `relative h-48 bg-cover bg-center ${isDarkMode ? "bg-gray-700" : "bg-gray-200"}`,
|
|
2343
|
+
style: {
|
|
2344
|
+
backgroundImage: `url(${mainImage})`
|
|
2345
|
+
},
|
|
2346
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/70 via-black/30 to-transparent p-5 text-white", children: [
|
|
2347
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "m-0 mb-2 text-lg font-bold", children: product.name }),
|
|
2348
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "m-0 text-sm opacity-90", children: product.description })
|
|
2349
|
+
] })
|
|
2350
|
+
}
|
|
2351
|
+
),
|
|
2352
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `border-b ${isDarkMode ? "border-gray-600" : "border-gray-200"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex overflow-x-auto", children: tabs.map((tab) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2353
|
+
"button",
|
|
2354
|
+
{
|
|
2355
|
+
onClick: () => setActiveTab(tab.id),
|
|
2356
|
+
className: `
|
|
2357
|
+
flex-1 min-w-[100px] py-4 px-2 border-none text-xs font-medium cursor-pointer transition-all duration-300 flex items-center justify-center gap-1
|
|
2358
|
+
${activeTab === tab.id ? `${isDarkMode ? "bg-blue-600" : "bg-blue-500"} text-white font-bold` : `bg-transparent ${isDarkMode ? "text-gray-400 hover:bg-gray-700" : "text-gray-600 hover:bg-gray-100"}`}
|
|
2359
|
+
`,
|
|
2360
|
+
children: [
|
|
2361
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: tab.label }),
|
|
2362
|
+
tab.count !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `
|
|
2363
|
+
text-xs py-0.5 px-1.5 rounded-full min-w-[18px] text-center
|
|
2364
|
+
${activeTab === tab.id ? "bg-white/20 text-white" : `${isDarkMode ? "bg-gray-600 text-gray-400" : "bg-gray-200 text-gray-600"}`}
|
|
2365
|
+
`, children: tab.count })
|
|
2366
|
+
]
|
|
2367
|
+
},
|
|
2368
|
+
tab.id
|
|
2369
|
+
)) }) }),
|
|
2370
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-[200px] max-h-[300px] overflow-y-auto", children: renderTabContent() })
|
|
2371
|
+
]
|
|
2372
|
+
}
|
|
2373
|
+
);
|
|
2740
2374
|
};
|
|
2741
|
-
const
|
|
2742
|
-
|
|
2743
|
-
const
|
|
2744
|
-
const
|
|
2745
|
-
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
|
|
2749
|
-
|
|
2750
|
-
|
|
2751
|
-
|
|
2752
|
-
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
|
|
2758
|
-
|
|
2759
|
-
|
|
2760
|
-
|
|
2761
|
-
|
|
2762
|
-
|
|
2763
|
-
|
|
2764
|
-
|
|
2765
|
-
|
|
2766
|
-
|
|
2767
|
-
|
|
2768
|
-
|
|
2769
|
-
|
|
2770
|
-
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
|
|
2774
|
-
|
|
2375
|
+
const TextWithTitleSection = ({ section, data, isDarkMode }) => {
|
|
2376
|
+
var _a;
|
|
2377
|
+
const textItems = (data == null ? void 0 : data.sectionDataBindingItems) || [];
|
|
2378
|
+
const title = ((_a = textItems[0]) == null ? void 0 : _a.value) || "";
|
|
2379
|
+
const descriptions = textItems.slice(1);
|
|
2380
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-6xl mx-auto", children: [
|
|
2381
|
+
title && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title font-black mb-4 leading-tight text-left text-main", children: title }),
|
|
2382
|
+
descriptions.map((item, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2383
|
+
"div",
|
|
2384
|
+
{
|
|
2385
|
+
className: `text-body leading-relaxed text-left font-normal text-muted ${index2 < descriptions.length - 1 ? "mb-4" : ""}`,
|
|
2386
|
+
children: item.value
|
|
2387
|
+
},
|
|
2388
|
+
item.id || index2
|
|
2389
|
+
))
|
|
2390
|
+
] }) });
|
|
2391
|
+
};
|
|
2392
|
+
const TextSection = ({ data, isDarkMode }) => {
|
|
2393
|
+
const textItems = (data == null ? void 0 : data.sectionDataBindingItems) || [];
|
|
2394
|
+
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(
|
|
2395
|
+
"div",
|
|
2396
|
+
{
|
|
2397
|
+
className: "mb-5 text-subtitle font-black leading-snug text-left text-main",
|
|
2398
|
+
children: item.value
|
|
2399
|
+
},
|
|
2400
|
+
item.id || index2
|
|
2401
|
+
)) }) });
|
|
2402
|
+
};
|
|
2403
|
+
/**
|
|
2404
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2405
|
+
*
|
|
2406
|
+
* This source code is licensed under the ISC license.
|
|
2407
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2408
|
+
*/
|
|
2409
|
+
const toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
2410
|
+
const toCamelCase = (string) => string.replace(
|
|
2411
|
+
/^([A-Z])|[\s-_]+(\w)/g,
|
|
2412
|
+
(match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()
|
|
2413
|
+
);
|
|
2414
|
+
const toPascalCase = (string) => {
|
|
2415
|
+
const camelCase = toCamelCase(string);
|
|
2416
|
+
return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);
|
|
2417
|
+
};
|
|
2418
|
+
const mergeClasses = (...classes) => classes.filter((className, index2, array) => {
|
|
2419
|
+
return Boolean(className) && className.trim() !== "" && array.indexOf(className) === index2;
|
|
2420
|
+
}).join(" ").trim();
|
|
2421
|
+
const hasA11yProp = (props) => {
|
|
2422
|
+
for (const prop in props) {
|
|
2423
|
+
if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
|
|
2424
|
+
return true;
|
|
2425
|
+
}
|
|
2775
2426
|
}
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
|
|
2427
|
+
};
|
|
2428
|
+
/**
|
|
2429
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2430
|
+
*
|
|
2431
|
+
* This source code is licensed under the ISC license.
|
|
2432
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2433
|
+
*/
|
|
2434
|
+
var defaultAttributes = {
|
|
2435
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
2436
|
+
width: 24,
|
|
2437
|
+
height: 24,
|
|
2438
|
+
viewBox: "0 0 24 24",
|
|
2439
|
+
fill: "none",
|
|
2440
|
+
stroke: "currentColor",
|
|
2441
|
+
strokeWidth: 2,
|
|
2442
|
+
strokeLinecap: "round",
|
|
2443
|
+
strokeLinejoin: "round"
|
|
2444
|
+
};
|
|
2445
|
+
/**
|
|
2446
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2447
|
+
*
|
|
2448
|
+
* This source code is licensed under the ISC license.
|
|
2449
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2450
|
+
*/
|
|
2451
|
+
const Icon = forwardRef(
|
|
2452
|
+
(_a, ref) => {
|
|
2453
|
+
var _b = _a, {
|
|
2454
|
+
color = "currentColor",
|
|
2455
|
+
size = 24,
|
|
2456
|
+
strokeWidth = 2,
|
|
2457
|
+
absoluteStrokeWidth,
|
|
2458
|
+
className = "",
|
|
2459
|
+
children,
|
|
2460
|
+
iconNode
|
|
2461
|
+
} = _b, rest = __objRest(_b, [
|
|
2462
|
+
"color",
|
|
2463
|
+
"size",
|
|
2464
|
+
"strokeWidth",
|
|
2465
|
+
"absoluteStrokeWidth",
|
|
2466
|
+
"className",
|
|
2467
|
+
"children",
|
|
2468
|
+
"iconNode"
|
|
2469
|
+
]);
|
|
2470
|
+
return createElement(
|
|
2471
|
+
"svg",
|
|
2472
|
+
__spreadValues(__spreadValues(__spreadProps(__spreadValues({
|
|
2473
|
+
ref
|
|
2474
|
+
}, defaultAttributes), {
|
|
2475
|
+
width: size,
|
|
2476
|
+
height: size,
|
|
2477
|
+
stroke: color,
|
|
2478
|
+
strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,
|
|
2479
|
+
className: mergeClasses("lucide", className)
|
|
2480
|
+
}), !children && !hasA11yProp(rest) && { "aria-hidden": "true" }), rest),
|
|
2481
|
+
[
|
|
2482
|
+
...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),
|
|
2483
|
+
...Array.isArray(children) ? children : [children]
|
|
2484
|
+
]
|
|
2485
|
+
);
|
|
2781
2486
|
}
|
|
2782
|
-
|
|
2487
|
+
);
|
|
2488
|
+
/**
|
|
2489
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2490
|
+
*
|
|
2491
|
+
* This source code is licensed under the ISC license.
|
|
2492
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2493
|
+
*/
|
|
2494
|
+
const createLucideIcon = (iconName, iconNode) => {
|
|
2495
|
+
const Component = forwardRef(
|
|
2496
|
+
(_a, ref) => {
|
|
2497
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
2498
|
+
return createElement(Icon, __spreadValues({
|
|
2499
|
+
ref,
|
|
2500
|
+
iconNode,
|
|
2501
|
+
className: mergeClasses(
|
|
2502
|
+
`lucide-${toKebabCase(toPascalCase(iconName))}`,
|
|
2503
|
+
`lucide-${iconName}`,
|
|
2504
|
+
className
|
|
2505
|
+
)
|
|
2506
|
+
}, props));
|
|
2507
|
+
}
|
|
2508
|
+
);
|
|
2509
|
+
Component.displayName = toPascalCase(iconName);
|
|
2510
|
+
return Component;
|
|
2783
2511
|
};
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
|
-
|
|
2792
|
-
|
|
2793
|
-
|
|
2794
|
-
]
|
|
2795
|
-
|
|
2796
|
-
|
|
2512
|
+
/**
|
|
2513
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2514
|
+
*
|
|
2515
|
+
* This source code is licensed under the ISC license.
|
|
2516
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2517
|
+
*/
|
|
2518
|
+
const __iconNode$o = [
|
|
2519
|
+
["path", { d: "M2 4v16", key: "vw9hq8" }],
|
|
2520
|
+
["path", { d: "M2 8h18a2 2 0 0 1 2 2v10", key: "1dgv2r" }],
|
|
2521
|
+
["path", { d: "M2 17h20", key: "18nfp3" }],
|
|
2522
|
+
["path", { d: "M6 8v9", key: "1yriud" }]
|
|
2523
|
+
];
|
|
2524
|
+
const Bed = createLucideIcon("bed", __iconNode$o);
|
|
2525
|
+
/**
|
|
2526
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2527
|
+
*
|
|
2528
|
+
* This source code is licensed under the ISC license.
|
|
2529
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2530
|
+
*/
|
|
2531
|
+
const __iconNode$n = [
|
|
2532
|
+
["path", { d: "M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16", key: "jecpp" }],
|
|
2533
|
+
["rect", { width: "20", height: "14", x: "2", y: "6", rx: "2", key: "i6l2r4" }]
|
|
2534
|
+
];
|
|
2535
|
+
const Briefcase = createLucideIcon("briefcase", __iconNode$n);
|
|
2536
|
+
/**
|
|
2537
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2538
|
+
*
|
|
2539
|
+
* This source code is licensed under the ISC license.
|
|
2540
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2541
|
+
*/
|
|
2542
|
+
const __iconNode$m = [
|
|
2543
|
+
["path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z", key: "1b4qmf" }],
|
|
2544
|
+
["path", { d: "M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2", key: "i71pzd" }],
|
|
2545
|
+
["path", { d: "M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2", key: "10jefs" }],
|
|
2546
|
+
["path", { d: "M10 6h4", key: "1itunk" }],
|
|
2547
|
+
["path", { d: "M10 10h4", key: "tcdvrf" }],
|
|
2548
|
+
["path", { d: "M10 14h4", key: "kelpxr" }],
|
|
2549
|
+
["path", { d: "M10 18h4", key: "1ulq68" }]
|
|
2550
|
+
];
|
|
2551
|
+
const Building2 = createLucideIcon("building-2", __iconNode$m);
|
|
2552
|
+
/**
|
|
2553
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2554
|
+
*
|
|
2555
|
+
* This source code is licensed under the ISC license.
|
|
2556
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2557
|
+
*/
|
|
2558
|
+
const __iconNode$l = [
|
|
2559
|
+
["rect", { width: "16", height: "20", x: "4", y: "2", rx: "2", ry: "2", key: "76otgf" }],
|
|
2560
|
+
["path", { d: "M9 22v-4h6v4", key: "r93iot" }],
|
|
2561
|
+
["path", { d: "M8 6h.01", key: "1dz90k" }],
|
|
2562
|
+
["path", { d: "M16 6h.01", key: "1x0f13" }],
|
|
2563
|
+
["path", { d: "M12 6h.01", key: "1vi96p" }],
|
|
2564
|
+
["path", { d: "M12 10h.01", key: "1nrarc" }],
|
|
2565
|
+
["path", { d: "M12 14h.01", key: "1etili" }],
|
|
2566
|
+
["path", { d: "M16 10h.01", key: "1m94wz" }],
|
|
2567
|
+
["path", { d: "M16 14h.01", key: "1gbofw" }],
|
|
2568
|
+
["path", { d: "M8 10h.01", key: "19clt8" }],
|
|
2569
|
+
["path", { d: "M8 14h.01", key: "6423bh" }]
|
|
2570
|
+
];
|
|
2571
|
+
const Building = createLucideIcon("building", __iconNode$l);
|
|
2572
|
+
/**
|
|
2573
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2574
|
+
*
|
|
2575
|
+
* This source code is licensed under the ISC license.
|
|
2576
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2577
|
+
*/
|
|
2578
|
+
const __iconNode$k = [
|
|
2579
|
+
["rect", { width: "16", height: "20", x: "4", y: "2", rx: "2", key: "1nb95v" }],
|
|
2580
|
+
["line", { x1: "8", x2: "16", y1: "6", y2: "6", key: "x4nwl0" }],
|
|
2581
|
+
["line", { x1: "16", x2: "16", y1: "14", y2: "18", key: "wjye3r" }],
|
|
2582
|
+
["path", { d: "M16 10h.01", key: "1m94wz" }],
|
|
2583
|
+
["path", { d: "M12 10h.01", key: "1nrarc" }],
|
|
2584
|
+
["path", { d: "M8 10h.01", key: "19clt8" }],
|
|
2585
|
+
["path", { d: "M12 14h.01", key: "1etili" }],
|
|
2586
|
+
["path", { d: "M8 14h.01", key: "6423bh" }],
|
|
2587
|
+
["path", { d: "M12 18h.01", key: "mhygvu" }],
|
|
2588
|
+
["path", { d: "M8 18h.01", key: "lrp35t" }]
|
|
2589
|
+
];
|
|
2590
|
+
const Calculator = createLucideIcon("calculator", __iconNode$k);
|
|
2591
|
+
/**
|
|
2592
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2593
|
+
*
|
|
2594
|
+
* This source code is licensed under the ISC license.
|
|
2595
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2596
|
+
*/
|
|
2597
|
+
const __iconNode$j = [
|
|
2598
|
+
["path", { d: "M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z", key: "p7xjir" }]
|
|
2599
|
+
];
|
|
2600
|
+
const Cloud = createLucideIcon("cloud", __iconNode$j);
|
|
2601
|
+
/**
|
|
2602
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2603
|
+
*
|
|
2604
|
+
* This source code is licensed under the ISC license.
|
|
2605
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2606
|
+
*/
|
|
2607
|
+
const __iconNode$i = [
|
|
2608
|
+
["ellipse", { cx: "12", cy: "5", rx: "9", ry: "3", key: "msslwz" }],
|
|
2609
|
+
["path", { d: "M3 5V19A9 3 0 0 0 21 19V5", key: "1wlel7" }],
|
|
2610
|
+
["path", { d: "M3 12A9 3 0 0 0 21 12", key: "mv7ke4" }]
|
|
2611
|
+
];
|
|
2612
|
+
const Database = createLucideIcon("database", __iconNode$i);
|
|
2613
|
+
/**
|
|
2614
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2615
|
+
*
|
|
2616
|
+
* This source code is licensed under the ISC license.
|
|
2617
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2618
|
+
*/
|
|
2619
|
+
const __iconNode$h = [
|
|
2620
|
+
["path", { d: "M12 16h.01", key: "1drbdi" }],
|
|
2621
|
+
["path", { d: "M16 16h.01", key: "1f9h7w" }],
|
|
2622
|
+
[
|
|
2623
|
+
"path",
|
|
2797
2624
|
{
|
|
2798
|
-
|
|
2799
|
-
|
|
2800
|
-
__html: product.overviewContent || product.description || t("productCard.noOverview")
|
|
2801
|
-
}
|
|
2625
|
+
d: "M3 19a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V8.5a.5.5 0 0 0-.769-.422l-4.462 2.844A.5.5 0 0 1 15 10.5v-2a.5.5 0 0 0-.769-.422L9.77 10.922A.5.5 0 0 1 9 10.5V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2z",
|
|
2626
|
+
key: "1iv0i2"
|
|
2802
2627
|
}
|
|
2803
|
-
|
|
2804
|
-
|
|
2805
|
-
|
|
2806
|
-
|
|
2807
|
-
|
|
2628
|
+
],
|
|
2629
|
+
["path", { d: "M8 16h.01", key: "18s6g9" }]
|
|
2630
|
+
];
|
|
2631
|
+
const Factory = createLucideIcon("factory", __iconNode$h);
|
|
2632
|
+
/**
|
|
2633
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2634
|
+
*
|
|
2635
|
+
* This source code is licensed under the ISC license.
|
|
2636
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2637
|
+
*/
|
|
2638
|
+
const __iconNode$g = [
|
|
2639
|
+
["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
|
|
2640
|
+
["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
|
|
2641
|
+
["path", { d: "M10 9H8", key: "b1mrlr" }],
|
|
2642
|
+
["path", { d: "M16 13H8", key: "t4e002" }],
|
|
2643
|
+
["path", { d: "M16 17H8", key: "z1uh3a" }]
|
|
2644
|
+
];
|
|
2645
|
+
const FileText = createLucideIcon("file-text", __iconNode$g);
|
|
2646
|
+
/**
|
|
2647
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2648
|
+
*
|
|
2649
|
+
* This source code is licensed under the ISC license.
|
|
2650
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2651
|
+
*/
|
|
2652
|
+
const __iconNode$f = [
|
|
2653
|
+
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
2654
|
+
["path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20", key: "13o1zl" }],
|
|
2655
|
+
["path", { d: "M2 12h20", key: "9i4pu4" }]
|
|
2656
|
+
];
|
|
2657
|
+
const Globe = createLucideIcon("globe", __iconNode$f);
|
|
2658
|
+
/**
|
|
2659
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2660
|
+
*
|
|
2661
|
+
* This source code is licensed under the ISC license.
|
|
2662
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2663
|
+
*/
|
|
2664
|
+
const __iconNode$e = [
|
|
2665
|
+
[
|
|
2666
|
+
"path",
|
|
2667
|
+
{
|
|
2668
|
+
d: "M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z",
|
|
2669
|
+
key: "j76jl0"
|
|
2808
2670
|
}
|
|
2809
|
-
|
|
2810
|
-
|
|
2811
|
-
|
|
2812
|
-
|
|
2813
|
-
|
|
2814
|
-
|
|
2815
|
-
|
|
2816
|
-
|
|
2817
|
-
|
|
2818
|
-
|
|
2819
|
-
|
|
2820
|
-
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
2825
|
-
|
|
2671
|
+
],
|
|
2672
|
+
["path", { d: "M22 10v6", key: "1lu8f3" }],
|
|
2673
|
+
["path", { d: "M6 12.5V16a6 3 0 0 0 12 0v-3.5", key: "1r8lef" }]
|
|
2674
|
+
];
|
|
2675
|
+
const GraduationCap = createLucideIcon("graduation-cap", __iconNode$e);
|
|
2676
|
+
/**
|
|
2677
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2678
|
+
*
|
|
2679
|
+
* This source code is licensed under the ISC license.
|
|
2680
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2681
|
+
*/
|
|
2682
|
+
const __iconNode$d = [
|
|
2683
|
+
[
|
|
2684
|
+
"path",
|
|
2685
|
+
{
|
|
2686
|
+
d: "M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5",
|
|
2687
|
+
key: "mvr1a0"
|
|
2826
2688
|
}
|
|
2827
|
-
|
|
2828
|
-
|
|
2829
|
-
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
|
|
2835
|
-
|
|
2836
|
-
|
|
2837
|
-
|
|
2838
|
-
|
|
2839
|
-
|
|
2840
|
-
|
|
2841
|
-
|
|
2842
|
-
|
|
2843
|
-
|
|
2844
|
-
|
|
2845
|
-
|
|
2846
|
-
|
|
2847
|
-
|
|
2848
|
-
|
|
2849
|
-
|
|
2850
|
-
|
|
2851
|
-
|
|
2852
|
-
|
|
2853
|
-
|
|
2854
|
-
|
|
2855
|
-
|
|
2856
|
-
|
|
2857
|
-
|
|
2858
|
-
|
|
2859
|
-
|
|
2860
|
-
|
|
2861
|
-
|
|
2862
|
-
|
|
2863
|
-
|
|
2864
|
-
|
|
2865
|
-
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
|
|
2869
|
-
|
|
2870
|
-
|
|
2871
|
-
|
|
2872
|
-
|
|
2873
|
-
|
|
2874
|
-
|
|
2689
|
+
]
|
|
2690
|
+
];
|
|
2691
|
+
const Heart = createLucideIcon("heart", __iconNode$d);
|
|
2692
|
+
/**
|
|
2693
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2694
|
+
*
|
|
2695
|
+
* This source code is licensed under the ISC license.
|
|
2696
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2697
|
+
*/
|
|
2698
|
+
const __iconNode$c = [
|
|
2699
|
+
["path", { d: "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8", key: "5wwlr5" }],
|
|
2700
|
+
[
|
|
2701
|
+
"path",
|
|
2702
|
+
{
|
|
2703
|
+
d: "M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",
|
|
2704
|
+
key: "1d0kgt"
|
|
2705
|
+
}
|
|
2706
|
+
]
|
|
2707
|
+
];
|
|
2708
|
+
const House = createLucideIcon("house", __iconNode$c);
|
|
2709
|
+
/**
|
|
2710
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2711
|
+
*
|
|
2712
|
+
* This source code is licensed under the ISC license.
|
|
2713
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2714
|
+
*/
|
|
2715
|
+
const __iconNode$b = [
|
|
2716
|
+
[
|
|
2717
|
+
"path",
|
|
2718
|
+
{
|
|
2719
|
+
d: "M11 6a13 13 0 0 0 8.4-2.8A1 1 0 0 1 21 4v12a1 1 0 0 1-1.6.8A13 13 0 0 0 11 14H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2z",
|
|
2720
|
+
key: "q8bfy3"
|
|
2721
|
+
}
|
|
2722
|
+
],
|
|
2723
|
+
["path", { d: "M6 14a12 12 0 0 0 2.4 7.2 2 2 0 0 0 3.2-2.4A8 8 0 0 1 10 14", key: "1853fq" }],
|
|
2724
|
+
["path", { d: "M8 6v8", key: "15ugcq" }]
|
|
2725
|
+
];
|
|
2726
|
+
const Megaphone = createLucideIcon("megaphone", __iconNode$b);
|
|
2727
|
+
/**
|
|
2728
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2729
|
+
*
|
|
2730
|
+
* This source code is licensed under the ISC license.
|
|
2731
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2732
|
+
*/
|
|
2733
|
+
const __iconNode$a = [
|
|
2734
|
+
[
|
|
2735
|
+
"path",
|
|
2736
|
+
{
|
|
2737
|
+
d: "M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",
|
|
2738
|
+
key: "1a0edw"
|
|
2739
|
+
}
|
|
2740
|
+
],
|
|
2741
|
+
["path", { d: "M12 22V12", key: "d0xqtd" }],
|
|
2742
|
+
["polyline", { points: "3.29 7 12 12 20.71 7", key: "ousv84" }],
|
|
2743
|
+
["path", { d: "m7.5 4.27 9 5.15", key: "1c824w" }]
|
|
2744
|
+
];
|
|
2745
|
+
const Package = createLucideIcon("package", __iconNode$a);
|
|
2746
|
+
/**
|
|
2747
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2748
|
+
*
|
|
2749
|
+
* This source code is licensed under the ISC license.
|
|
2750
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2751
|
+
*/
|
|
2752
|
+
const __iconNode$9 = [
|
|
2753
|
+
[
|
|
2754
|
+
"path",
|
|
2755
|
+
{
|
|
2756
|
+
d: "M17.8 19.2 16 11l3.5-3.5C21 6 21.5 4 21 3c-1-.5-3 0-4.5 1.5L13 8 4.8 6.2c-.5-.1-.9.1-1.1.5l-.3.5c-.2.5-.1 1 .3 1.3L9 12l-2 3H4l-1 1 3 2 2 3 1-1v-3l3-2 3.5 5.3c.3.4.8.5 1.3.3l.5-.2c.4-.3.6-.7.5-1.2z",
|
|
2757
|
+
key: "1v9wt8"
|
|
2875
2758
|
}
|
|
2876
|
-
|
|
2877
|
-
|
|
2878
|
-
|
|
2879
|
-
|
|
2880
|
-
|
|
2881
|
-
|
|
2882
|
-
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
|
|
2886
|
-
|
|
2887
|
-
|
|
2888
|
-
|
|
2889
|
-
|
|
2890
|
-
"
|
|
2891
|
-
{
|
|
2892
|
-
onClick: () => handleDownload(download.fileUrl, download.title),
|
|
2893
|
-
className: `p-4 rounded-lg border cursor-pointer flex items-center gap-3 transition-all duration-200 hover:translate-x-1 ${isDarkMode ? "bg-gray-700 border-gray-600 hover:bg-gray-600" : "bg-gray-100 border-gray-200 hover:bg-gray-200"}`,
|
|
2894
|
-
children: [
|
|
2895
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `w-10 h-10 rounded-lg flex items-center justify-center flex-shrink-0 ${isDarkMode ? "bg-blue-600" : "bg-blue-500"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-white text-lg", children: "📄" }) }),
|
|
2896
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
2897
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: `m-0 mb-1 text-sm font-bold overflow-hidden text-ellipsis whitespace-nowrap ${isDarkMode ? "text-white" : "text-gray-900"}`, children: download.title }),
|
|
2898
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `m-0 text-xs ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: t("productCard.downloadClick") })
|
|
2899
|
-
] }),
|
|
2900
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `flex-shrink-0 text-base ${isDarkMode ? "text-blue-400" : "text-blue-500"}`, children: "⬇️" })
|
|
2901
|
-
]
|
|
2902
|
-
},
|
|
2903
|
-
index2
|
|
2904
|
-
)) }) });
|
|
2905
|
-
};
|
|
2906
|
-
const renderTabContent = () => {
|
|
2907
|
-
switch (activeTab) {
|
|
2908
|
-
case "overview":
|
|
2909
|
-
return renderOverview();
|
|
2910
|
-
case "features":
|
|
2911
|
-
return renderFeatures();
|
|
2912
|
-
case "contacts":
|
|
2913
|
-
return renderContacts();
|
|
2914
|
-
case "downloads":
|
|
2915
|
-
return renderDownloads();
|
|
2916
|
-
default:
|
|
2917
|
-
return null;
|
|
2759
|
+
]
|
|
2760
|
+
];
|
|
2761
|
+
const Plane = createLucideIcon("plane", __iconNode$9);
|
|
2762
|
+
/**
|
|
2763
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2764
|
+
*
|
|
2765
|
+
* This source code is licensed under the ISC license.
|
|
2766
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2767
|
+
*/
|
|
2768
|
+
const __iconNode$8 = [
|
|
2769
|
+
[
|
|
2770
|
+
"path",
|
|
2771
|
+
{
|
|
2772
|
+
d: "M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",
|
|
2773
|
+
key: "1i5ecw"
|
|
2918
2774
|
}
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
|
|
2775
|
+
],
|
|
2776
|
+
["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
|
|
2777
|
+
];
|
|
2778
|
+
const Settings = createLucideIcon("settings", __iconNode$8);
|
|
2779
|
+
/**
|
|
2780
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2781
|
+
*
|
|
2782
|
+
* This source code is licensed under the ISC license.
|
|
2783
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2784
|
+
*/
|
|
2785
|
+
const __iconNode$7 = [
|
|
2786
|
+
[
|
|
2787
|
+
"path",
|
|
2922
2788
|
{
|
|
2923
|
-
|
|
2924
|
-
|
|
2925
|
-
${isDarkMode ? "bg-gray-800 border-gray-700" : "bg-white border-gray-200"}
|
|
2926
|
-
${isHovered ? `shadow-xl -translate-y-2 ${isDarkMode ? "shadow-gray-900/40" : "shadow-gray-500/20"}` : `shadow-lg ${isDarkMode ? "shadow-gray-900/20" : "shadow-gray-500/10"}`}
|
|
2927
|
-
`,
|
|
2928
|
-
onMouseEnter: () => setIsHovered(true),
|
|
2929
|
-
onMouseLeave: () => setIsHovered(false),
|
|
2930
|
-
children: [
|
|
2931
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2932
|
-
"div",
|
|
2933
|
-
{
|
|
2934
|
-
className: `relative h-48 bg-cover bg-center ${isDarkMode ? "bg-gray-700" : "bg-gray-200"}`,
|
|
2935
|
-
style: {
|
|
2936
|
-
backgroundImage: `url(${mainImage})`
|
|
2937
|
-
},
|
|
2938
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/70 via-black/30 to-transparent p-5 text-white", children: [
|
|
2939
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "m-0 mb-2 text-lg font-bold", children: product.name }),
|
|
2940
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "m-0 text-sm opacity-90", children: product.description })
|
|
2941
|
-
] })
|
|
2942
|
-
}
|
|
2943
|
-
),
|
|
2944
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `border-b ${isDarkMode ? "border-gray-600" : "border-gray-200"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex overflow-x-auto", children: tabs.map((tab) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2945
|
-
"button",
|
|
2946
|
-
{
|
|
2947
|
-
onClick: () => setActiveTab(tab.id),
|
|
2948
|
-
className: `
|
|
2949
|
-
flex-1 min-w-[100px] py-4 px-2 border-none text-xs font-medium cursor-pointer transition-all duration-300 flex items-center justify-center gap-1
|
|
2950
|
-
${activeTab === tab.id ? `${isDarkMode ? "bg-blue-600" : "bg-blue-500"} text-white font-bold` : `bg-transparent ${isDarkMode ? "text-gray-400 hover:bg-gray-700" : "text-gray-600 hover:bg-gray-100"}`}
|
|
2951
|
-
`,
|
|
2952
|
-
children: [
|
|
2953
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: tab.label }),
|
|
2954
|
-
tab.count !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `
|
|
2955
|
-
text-xs py-0.5 px-1.5 rounded-full min-w-[18px] text-center
|
|
2956
|
-
${activeTab === tab.id ? "bg-white/20 text-white" : `${isDarkMode ? "bg-gray-600 text-gray-400" : "bg-gray-200 text-gray-600"}`}
|
|
2957
|
-
`, children: tab.count })
|
|
2958
|
-
]
|
|
2959
|
-
},
|
|
2960
|
-
tab.id
|
|
2961
|
-
)) }) }),
|
|
2962
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-[200px] max-h-[300px] overflow-y-auto", children: renderTabContent() })
|
|
2963
|
-
]
|
|
2789
|
+
d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",
|
|
2790
|
+
key: "oel41y"
|
|
2964
2791
|
}
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
const
|
|
2968
|
-
|
|
2969
|
-
|
|
2970
|
-
|
|
2971
|
-
|
|
2972
|
-
|
|
2973
|
-
|
|
2974
|
-
|
|
2975
|
-
|
|
2976
|
-
|
|
2977
|
-
|
|
2978
|
-
|
|
2979
|
-
},
|
|
2980
|
-
item.id || index2
|
|
2981
|
-
))
|
|
2982
|
-
] }) });
|
|
2983
|
-
};
|
|
2984
|
-
const TextSection = ({ data, isDarkMode }) => {
|
|
2985
|
-
const textItems = (data == null ? void 0 : data.sectionDataBindingItems) || [];
|
|
2986
|
-
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(
|
|
2987
|
-
"div",
|
|
2792
|
+
]
|
|
2793
|
+
];
|
|
2794
|
+
const Shield = createLucideIcon("shield", __iconNode$7);
|
|
2795
|
+
/**
|
|
2796
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2797
|
+
*
|
|
2798
|
+
* This source code is licensed under the ISC license.
|
|
2799
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2800
|
+
*/
|
|
2801
|
+
const __iconNode$6 = [
|
|
2802
|
+
["circle", { cx: "8", cy: "21", r: "1", key: "jimo8o" }],
|
|
2803
|
+
["circle", { cx: "19", cy: "21", r: "1", key: "13723u" }],
|
|
2804
|
+
[
|
|
2805
|
+
"path",
|
|
2988
2806
|
{
|
|
2989
|
-
|
|
2990
|
-
|
|
2991
|
-
}
|
|
2992
|
-
|
|
2993
|
-
|
|
2994
|
-
|
|
2807
|
+
d: "M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12",
|
|
2808
|
+
key: "9zh506"
|
|
2809
|
+
}
|
|
2810
|
+
]
|
|
2811
|
+
];
|
|
2812
|
+
const ShoppingCart = createLucideIcon("shopping-cart", __iconNode$6);
|
|
2813
|
+
/**
|
|
2814
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2815
|
+
*
|
|
2816
|
+
* This source code is licensed under the ISC license.
|
|
2817
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2818
|
+
*/
|
|
2819
|
+
const __iconNode$5 = [
|
|
2820
|
+
["rect", { width: "14", height: "20", x: "5", y: "2", rx: "2", ry: "2", key: "1yt0o3" }],
|
|
2821
|
+
["path", { d: "M12 18h.01", key: "mhygvu" }]
|
|
2822
|
+
];
|
|
2823
|
+
const Smartphone = createLucideIcon("smartphone", __iconNode$5);
|
|
2824
|
+
/**
|
|
2825
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2826
|
+
*
|
|
2827
|
+
* This source code is licensed under the ISC license.
|
|
2828
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2829
|
+
*/
|
|
2830
|
+
const __iconNode$4 = [
|
|
2831
|
+
["path", { d: "M16 7h6v6", key: "box55l" }],
|
|
2832
|
+
["path", { d: "m22 7-8.5 8.5-5-5L2 17", key: "1t1m79" }]
|
|
2833
|
+
];
|
|
2834
|
+
const TrendingUp = createLucideIcon("trending-up", __iconNode$4);
|
|
2835
|
+
/**
|
|
2836
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2837
|
+
*
|
|
2838
|
+
* This source code is licensed under the ISC license.
|
|
2839
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2840
|
+
*/
|
|
2841
|
+
const __iconNode$3 = [
|
|
2842
|
+
["path", { d: "M14 18V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v11a1 1 0 0 0 1 1h2", key: "wrbu53" }],
|
|
2843
|
+
["path", { d: "M15 18H9", key: "1lyqi6" }],
|
|
2844
|
+
[
|
|
2845
|
+
"path",
|
|
2846
|
+
{
|
|
2847
|
+
d: "M19 18h2a1 1 0 0 0 1-1v-3.65a1 1 0 0 0-.22-.624l-3.48-4.35A1 1 0 0 0 17.52 8H14",
|
|
2848
|
+
key: "lysw3i"
|
|
2849
|
+
}
|
|
2850
|
+
],
|
|
2851
|
+
["circle", { cx: "17", cy: "18", r: "2", key: "332jqn" }],
|
|
2852
|
+
["circle", { cx: "7", cy: "18", r: "2", key: "19iecd" }]
|
|
2853
|
+
];
|
|
2854
|
+
const Truck = createLucideIcon("truck", __iconNode$3);
|
|
2855
|
+
/**
|
|
2856
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2857
|
+
*
|
|
2858
|
+
* This source code is licensed under the ISC license.
|
|
2859
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2860
|
+
*/
|
|
2861
|
+
const __iconNode$2 = [
|
|
2862
|
+
["path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2", key: "1yyitq" }],
|
|
2863
|
+
["path", { d: "M16 3.128a4 4 0 0 1 0 7.744", key: "16gr8j" }],
|
|
2864
|
+
["path", { d: "M22 21v-2a4 4 0 0 0-3-3.87", key: "kshegd" }],
|
|
2865
|
+
["circle", { cx: "9", cy: "7", r: "4", key: "nufk8" }]
|
|
2866
|
+
];
|
|
2867
|
+
const Users = createLucideIcon("users", __iconNode$2);
|
|
2868
|
+
/**
|
|
2869
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2870
|
+
*
|
|
2871
|
+
* This source code is licensed under the ISC license.
|
|
2872
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2873
|
+
*/
|
|
2874
|
+
const __iconNode$1 = [
|
|
2875
|
+
[
|
|
2876
|
+
"path",
|
|
2877
|
+
{
|
|
2878
|
+
d: "M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",
|
|
2879
|
+
key: "1ngwbx"
|
|
2880
|
+
}
|
|
2881
|
+
]
|
|
2882
|
+
];
|
|
2883
|
+
const Wrench = createLucideIcon("wrench", __iconNode$1);
|
|
2884
|
+
/**
|
|
2885
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2886
|
+
*
|
|
2887
|
+
* This source code is licensed under the ISC license.
|
|
2888
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2889
|
+
*/
|
|
2890
|
+
const __iconNode = [
|
|
2891
|
+
[
|
|
2892
|
+
"path",
|
|
2893
|
+
{
|
|
2894
|
+
d: "M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",
|
|
2895
|
+
key: "1xq2db"
|
|
2896
|
+
}
|
|
2897
|
+
]
|
|
2898
|
+
];
|
|
2899
|
+
const Zap = createLucideIcon("zap", __iconNode);
|
|
2995
2900
|
const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
2996
2901
|
var _a, _b;
|
|
2997
2902
|
const [mounted, setMounted] = useState(false);
|
|
@@ -3618,7 +3523,7 @@ const MindMapNode = ({ id, icon: Icon2, text, color, position, delay = 0, onDrag
|
|
|
3618
3523
|
style: {
|
|
3619
3524
|
background: isHovered || isDragging ? colorStyle.gradientHover : colorStyle.gradient,
|
|
3620
3525
|
borderColor: colorStyle.border + "80",
|
|
3621
|
-
boxShadow: `0 10px 40px
|
|
3526
|
+
boxShadow: `0 10px 40px rgba(var(--brand-primary), 0.3)`,
|
|
3622
3527
|
transform: isHovered || isDragging ? "scale(1.1)" : "scale(1)",
|
|
3623
3528
|
filter: isHovered || isDragging ? "brightness(1.1)" : "brightness(1)",
|
|
3624
3529
|
rotate: isDragging ? "2deg" : "0deg"
|
|
@@ -4072,8 +3977,7 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
|
|
|
4072
3977
|
{
|
|
4073
3978
|
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",
|
|
4074
3979
|
style: {
|
|
4075
|
-
borderColor: "var(--brand-primary)",
|
|
4076
|
-
borderOpacity: 0.5,
|
|
3980
|
+
borderColor: "rgba(var(--brand-primary-rgb), 0.5)",
|
|
4077
3981
|
transform: isDragging ? "scale(1.1)" : "scale(1)",
|
|
4078
3982
|
transition: "transform 0.3s ease"
|
|
4079
3983
|
},
|
|
@@ -4148,7 +4052,14 @@ const FaqItem = ({ faq, index: index2, isActive, onToggle, t }) => {
|
|
|
4148
4052
|
flex-shrink-0 w-10 h-10 rounded-full flex items-center justify-center
|
|
4149
4053
|
transition-all duration-500 transform
|
|
4150
4054
|
${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"}
|
|
4151
|
-
`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4055
|
+
`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4056
|
+
ThemeIcon,
|
|
4057
|
+
{
|
|
4058
|
+
name: "icon-faqChevronDown",
|
|
4059
|
+
folder: "common",
|
|
4060
|
+
className: `w-5 h-5 icon-muted transition-transform duration-500 ${isActive ? "rotate-180" : ""}`
|
|
4061
|
+
}
|
|
4062
|
+
) })
|
|
4152
4063
|
]
|
|
4153
4064
|
}
|
|
4154
4065
|
),
|
|
@@ -4227,15 +4138,7 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
|
|
|
4227
4138
|
},
|
|
4228
4139
|
onMouseEnter: (e) => e.currentTarget.style.transform = "scale(1.1)",
|
|
4229
4140
|
onMouseLeave: (e) => e.currentTarget.style.transform = "scale(1)",
|
|
4230
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4231
|
-
"svg",
|
|
4232
|
-
{
|
|
4233
|
-
className: "w-6 h-6 text-white",
|
|
4234
|
-
fill: "currentColor",
|
|
4235
|
-
viewBox: "0 0 24 24",
|
|
4236
|
-
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" })
|
|
4237
|
-
}
|
|
4238
|
-
)
|
|
4141
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-faqQuestion", className: "w-4 h-4 icon-gradient" })
|
|
4239
4142
|
}
|
|
4240
4143
|
) }),
|
|
4241
4144
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-12 animate-fade-in", children: [
|
|
@@ -4608,7 +4511,7 @@ const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4608
4511
|
},
|
|
4609
4512
|
children: [
|
|
4610
4513
|
t("pageChildrenSelect.moreInsights"),
|
|
4611
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4514
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-pageChildrenSelectArrowRight", folder: "PageChildrenSelectSection", className: "w-4 h-4 icon-muted" })
|
|
4612
4515
|
]
|
|
4613
4516
|
}
|
|
4614
4517
|
) })
|
|
@@ -4683,13 +4586,7 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4683
4586
|
display: "flex",
|
|
4684
4587
|
alignItems: "center",
|
|
4685
4588
|
paddingLeft: "16px"
|
|
4686
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4687
|
-
ChevronRight,
|
|
4688
|
-
{
|
|
4689
|
-
size: 20,
|
|
4690
|
-
className: "card-text"
|
|
4691
|
-
}
|
|
4692
|
-
) })
|
|
4589
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-pageChildrenSelectChevronRight", folder: "PageChildrenSelectSection", className: "w-4 h-4 card-text" }) })
|
|
4693
4590
|
]
|
|
4694
4591
|
},
|
|
4695
4592
|
page.id
|
|
@@ -4714,7 +4611,7 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4714
4611
|
},
|
|
4715
4612
|
children: [
|
|
4716
4613
|
t("pageChildrenSelect.moreInsights"),
|
|
4717
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4614
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-pageChildrenSelectArrowRight", folder: "PageChildrenSelectSection", className: "w-4 h-4 icon-muted" })
|
|
4718
4615
|
]
|
|
4719
4616
|
}
|
|
4720
4617
|
) })
|
|
@@ -4824,7 +4721,7 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4824
4721
|
},
|
|
4825
4722
|
children: [
|
|
4826
4723
|
t("pageChildrenSelect.moreInsights"),
|
|
4827
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4724
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-pageChildrenSelectArrowRight", folder: "PageChildrenSelectSection", className: "w-4 h-4 icon-muted" })
|
|
4828
4725
|
]
|
|
4829
4726
|
}
|
|
4830
4727
|
) })
|