nvis-fe-cms-libs 2.0.3 → 2.0.5
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 +892 -992
- package/dist/nvis-fe-cms-libs.es.js.map +1 -1
- package/dist/nvis-fe-cms-libs.umd.js +909 -1009
- package/dist/nvis-fe-cms-libs.umd.js.map +1 -1
- package/package.json +1 -1
|
@@ -371,17 +371,42 @@ 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
|
+
folder = "common",
|
|
379
|
+
// ← Thêm prop folder, mặc định là "common"
|
|
380
|
+
useOriginalColor = false
|
|
381
|
+
}) {
|
|
375
382
|
if (!name) return null;
|
|
376
|
-
const iconUrl = `/icons/${name}.svg`;
|
|
383
|
+
const iconUrl = `/icons/${folder}/${name}.svg`;
|
|
384
|
+
if (useOriginalColor) {
|
|
385
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
386
|
+
"img",
|
|
387
|
+
{
|
|
388
|
+
src: iconUrl,
|
|
389
|
+
alt: name,
|
|
390
|
+
className: `icon ${className}`,
|
|
391
|
+
onError: (e) => {
|
|
392
|
+
e.target.style.display = "none";
|
|
393
|
+
console.warn(`Icon not found: ${iconUrl}`);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
);
|
|
397
|
+
}
|
|
377
398
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
378
|
-
"
|
|
399
|
+
"span",
|
|
379
400
|
{
|
|
380
|
-
src: iconUrl,
|
|
381
|
-
alt: name,
|
|
382
401
|
className: `icon ${className}`,
|
|
402
|
+
style: {
|
|
403
|
+
maskImage: `url(${iconUrl})`,
|
|
404
|
+
WebkitMaskImage: `url(${iconUrl})`,
|
|
405
|
+
backgroundColor: color || "currentColor"
|
|
406
|
+
},
|
|
383
407
|
onError: (e) => {
|
|
384
408
|
e.target.style.display = "none";
|
|
409
|
+
console.warn(`Icon not found: ${iconUrl}`);
|
|
385
410
|
}
|
|
386
411
|
}
|
|
387
412
|
);
|
|
@@ -405,19 +430,19 @@ const CompanyValues = ({ companyData, t, isDarkMode }) => {
|
|
|
405
430
|
};
|
|
406
431
|
const items = [
|
|
407
432
|
{
|
|
408
|
-
icon: "
|
|
433
|
+
icon: "icon-companyValueLightBulb",
|
|
409
434
|
title: t("about.companyValues.vision") || "Tầm nhìn",
|
|
410
435
|
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
436
|
bgClass: "bg-gradient-brand"
|
|
412
437
|
},
|
|
413
438
|
{
|
|
414
|
-
icon: "
|
|
439
|
+
icon: "icon-companyValueRocket",
|
|
415
440
|
title: t("about.companyValues.mission") || "Sứ mệnh",
|
|
416
441
|
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
442
|
bgClass: "bg-gradient-accent"
|
|
418
443
|
},
|
|
419
444
|
{
|
|
420
|
-
icon: "
|
|
445
|
+
icon: "icon-companyValueDiamond",
|
|
421
446
|
title: t("about.companyValues.coreValues") || "Giá trị cốt lõi",
|
|
422
447
|
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
448
|
bgClass: "bg-gradient-brand"
|
|
@@ -467,7 +492,7 @@ const CompanyValues = ({ companyData, t, isDarkMode }) => {
|
|
|
467
492
|
"div",
|
|
468
493
|
{
|
|
469
494
|
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" })
|
|
495
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: item.icon, folder: "AboutCompanySection", className: "w-6 h-6", useOriginalColor: true })
|
|
471
496
|
}
|
|
472
497
|
),
|
|
473
498
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
@@ -592,7 +617,8 @@ const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
|
|
|
592
617
|
/* @__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
618
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
594
619
|
/* @__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
|
-
"
|
|
620
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-aboutCompanyBook", folder: "AboutCompanySection", className: "w-6 h-6", useOriginalColor: true }),
|
|
621
|
+
" ",
|
|
596
622
|
safeT("aboutCompany.story.badge")
|
|
597
623
|
] }),
|
|
598
624
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("h2", { className: "text-3xl lg:text-4xl font-bold mb-6 text-main", children: [
|
|
@@ -660,7 +686,8 @@ const TimelineSection = ({ data, t, section }) => {
|
|
|
660
686
|
}
|
|
661
687
|
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
688
|
/* @__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
|
-
"
|
|
689
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-timeLineChart", folder: "TimlineSection", className: "w-5 h-5 icon-gradient" }),
|
|
690
|
+
" ",
|
|
664
691
|
sectionTitle
|
|
665
692
|
] }) }),
|
|
666
693
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
@@ -881,7 +908,8 @@ const PartnersSection = ({ data, t, imageBaseUrl = "", section }) => {
|
|
|
881
908
|
if (!partnersData.length) return null;
|
|
882
909
|
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
910
|
/* @__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
|
-
"
|
|
911
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-partner", folder: "PartnersSection", className: "w-4 h-4 icon-gradient" }),
|
|
912
|
+
" ",
|
|
885
913
|
sectionTitle
|
|
886
914
|
] }) }),
|
|
887
915
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
@@ -984,7 +1012,8 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
|
|
|
984
1012
|
}
|
|
985
1013
|
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
1014
|
/* @__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
|
-
"
|
|
1015
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-timeLineChart", folder: "TimlineSection", className: "w-5 h-5 icon-gradient" }),
|
|
1016
|
+
" ",
|
|
988
1017
|
sectionTitle
|
|
989
1018
|
] }) }),
|
|
990
1019
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
@@ -1050,7 +1079,8 @@ const TestimonialsSection = ({ data, t, section }) => {
|
|
|
1050
1079
|
}
|
|
1051
1080
|
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
1081
|
/* @__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
|
-
"
|
|
1082
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-testimonials", folder: "TestimonialsSection", className: "w-4 h-4 icon-gradient" }),
|
|
1083
|
+
" ",
|
|
1054
1084
|
sectionTitle
|
|
1055
1085
|
] }),
|
|
1056
1086
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
|
|
@@ -1069,7 +1099,7 @@ const TestimonialsSection = ({ data, t, section }) => {
|
|
|
1069
1099
|
'"'
|
|
1070
1100
|
] }),
|
|
1071
1101
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4", children: [
|
|
1072
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-3xl", children: "
|
|
1102
|
+
/* @__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
1103
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
1074
1104
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-title", children: testimonials[currentIndex].author }),
|
|
1075
1105
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-text", children: testimonials[currentIndex].position }),
|
|
@@ -1267,7 +1297,8 @@ const PartnerListSection = ({ t, getPartnerList, imageBaseUrl = "", section }) =
|
|
|
1267
1297
|
if (!partnersData.length) return null;
|
|
1268
1298
|
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
1299
|
/* @__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
|
-
"
|
|
1300
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-partner", folder: "PartnersSection", className: "w-4 h-4 icon-gradient" }),
|
|
1301
|
+
" ",
|
|
1271
1302
|
sectionTitle
|
|
1272
1303
|
] }) }),
|
|
1273
1304
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
@@ -1332,692 +1363,71 @@ const PartnerListSection = ({ t, getPartnerList, imageBaseUrl = "", section }) =
|
|
|
1332
1363
|
) })
|
|
1333
1364
|
] }) });
|
|
1334
1365
|
};
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
const
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
const
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1366
|
+
const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService }) => {
|
|
1367
|
+
const [formData, setFormData] = useState({
|
|
1368
|
+
fullName: "",
|
|
1369
|
+
workEmail: "",
|
|
1370
|
+
phoneNumber: "",
|
|
1371
|
+
companyName: "",
|
|
1372
|
+
jobTitle: "",
|
|
1373
|
+
businessType: "",
|
|
1374
|
+
expectedBudget: "",
|
|
1375
|
+
expectedTimeline: "",
|
|
1376
|
+
requestTitle: "",
|
|
1377
|
+
requestDescription: ""
|
|
1378
|
+
});
|
|
1379
|
+
const [formErrors, setFormErrors] = useState({});
|
|
1380
|
+
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
1381
|
+
const [submitStatus, setSubmitStatus] = useState(null);
|
|
1382
|
+
const [submitMessage, setSubmitMessage] = useState("");
|
|
1383
|
+
const validateField = (name, value) => {
|
|
1384
|
+
const errors = {};
|
|
1385
|
+
switch (name) {
|
|
1386
|
+
case "fullName":
|
|
1387
|
+
if (!(value == null ? void 0 : value.trim())) errors.fullName = "Họ và tên là bắt buộc";
|
|
1388
|
+
else if (value.trim().length < 2) errors.fullName = "Tên phải có ít nhất 2 ký tự";
|
|
1389
|
+
break;
|
|
1390
|
+
case "workEmail":
|
|
1391
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
1392
|
+
if (!(value == null ? void 0 : value.trim())) errors.workEmail = "Email là bắt buộc";
|
|
1393
|
+
else if (!emailRegex.test(value.trim())) errors.workEmail = "Email không hợp lệ";
|
|
1394
|
+
break;
|
|
1395
|
+
case "phoneNumber":
|
|
1396
|
+
const phoneRegex = /^[0-9\s\-\+\(\)]{10,15}$/;
|
|
1397
|
+
if (value && !phoneRegex.test(value.trim())) errors.phoneNumber = "Số điện thoại không hợp lệ";
|
|
1398
|
+
break;
|
|
1399
|
+
case "requestTitle":
|
|
1400
|
+
if (!(value == null ? void 0 : value.trim())) errors.requestTitle = "Tiêu đề yêu cầu là bắt buộc";
|
|
1401
|
+
else if (value.trim().length < 5) errors.requestTitle = "Tiêu đề phải có ít nhất 5 ký tự";
|
|
1402
|
+
break;
|
|
1403
|
+
case "requestDescription":
|
|
1404
|
+
if (!(value == null ? void 0 : value.trim())) errors.requestDescription = "Mô tả yêu cầu là bắt buộc";
|
|
1405
|
+
else if (value.trim().length < 10) errors.requestDescription = "Mô tả phải có ít nhất 10 ký tự";
|
|
1406
|
+
break;
|
|
1407
|
+
case "companyName":
|
|
1408
|
+
if (value && value.trim().length > 0 && value.trim().length < 2) {
|
|
1409
|
+
errors.companyName = "Tên công ty phải có ít nhất 2 ký tự";
|
|
1410
|
+
}
|
|
1411
|
+
break;
|
|
1412
|
+
case "jobTitle":
|
|
1413
|
+
if (value && value.trim().length > 0 && value.trim().length < 2) {
|
|
1414
|
+
errors.jobTitle = "Chức vụ phải có ít nhất 2 ký tự";
|
|
1415
|
+
}
|
|
1416
|
+
break;
|
|
1357
1417
|
}
|
|
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
|
-
});
|
|
1418
|
+
return errors;
|
|
1419
|
+
};
|
|
1420
|
+
const handleInputChange = (e) => {
|
|
1421
|
+
const { name, value } = e.target;
|
|
1422
|
+
setFormData((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
1423
|
+
[name]: value || ""
|
|
1424
|
+
}));
|
|
1425
|
+
if (formErrors[name]) {
|
|
1426
|
+
setFormErrors((prev) => {
|
|
1427
|
+
const newErrors = __spreadValues({}, prev);
|
|
1428
|
+
delete newErrors[name];
|
|
1429
|
+
return newErrors;
|
|
1430
|
+
});
|
|
2021
1431
|
}
|
|
2022
1432
|
};
|
|
2023
1433
|
const handleBlur = (e) => {
|
|
@@ -2089,14 +1499,14 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2089
1499
|
`;
|
|
2090
1500
|
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
1501
|
/* @__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(
|
|
1502
|
+
/* @__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
1503
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2094
1504
|
/* @__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
1505
|
/* @__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
1506
|
] })
|
|
2097
1507
|
] }),
|
|
2098
1508
|
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(
|
|
1509
|
+
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
1510
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small font-medium", children: submitMessage })
|
|
2101
1511
|
] }) }),
|
|
2102
1512
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleSubmit, className: "space-y-6", children: [
|
|
@@ -2121,7 +1531,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2121
1531
|
}
|
|
2122
1532
|
),
|
|
2123
1533
|
formErrors.fullName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2124
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1534
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-ContactFormAlertCircle", className: "w-4 h-4 icon-gradient" }),
|
|
2125
1535
|
formErrors.fullName
|
|
2126
1536
|
] })
|
|
2127
1537
|
] }),
|
|
@@ -2145,7 +1555,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2145
1555
|
}
|
|
2146
1556
|
),
|
|
2147
1557
|
formErrors.workEmail && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2148
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1558
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-ContactFormAlertCircle", className: "w-4 h-4 icon-gradient" }),
|
|
2149
1559
|
formErrors.workEmail
|
|
2150
1560
|
] })
|
|
2151
1561
|
] })
|
|
@@ -2167,7 +1577,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2167
1577
|
}
|
|
2168
1578
|
),
|
|
2169
1579
|
formErrors.phoneNumber && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2170
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1580
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-ContactFormAlertCircle", className: "w-4 h-4 icon-gradient" }),
|
|
2171
1581
|
formErrors.phoneNumber
|
|
2172
1582
|
] })
|
|
2173
1583
|
] }),
|
|
@@ -2187,7 +1597,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2187
1597
|
}
|
|
2188
1598
|
),
|
|
2189
1599
|
formErrors.companyName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2190
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1600
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-ContactFormAlertCircle", className: "w-4 h-4 icon-gradient" }),
|
|
2191
1601
|
formErrors.companyName
|
|
2192
1602
|
] })
|
|
2193
1603
|
] })
|
|
@@ -2209,7 +1619,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2209
1619
|
}
|
|
2210
1620
|
),
|
|
2211
1621
|
formErrors.jobTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2212
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1622
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-ContactFormAlertCircle", className: "w-4 h-4 icon-gradient" }),
|
|
2213
1623
|
formErrors.jobTitle
|
|
2214
1624
|
] })
|
|
2215
1625
|
] }),
|
|
@@ -2281,7 +1691,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2281
1691
|
}
|
|
2282
1692
|
),
|
|
2283
1693
|
formErrors.requestTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2284
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1694
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-ContactFormAlertCircle", className: "w-4 h-4 icon-gradient" }),
|
|
2285
1695
|
formErrors.requestTitle
|
|
2286
1696
|
] })
|
|
2287
1697
|
] }),
|
|
@@ -2305,7 +1715,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2305
1715
|
}
|
|
2306
1716
|
),
|
|
2307
1717
|
formErrors.requestDescription && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
|
|
2308
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1718
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-ContactFormAlertCircle", className: "w-4 h-4 icon-gradient" }),
|
|
2309
1719
|
formErrors.requestDescription
|
|
2310
1720
|
] })
|
|
2311
1721
|
] }),
|
|
@@ -2316,10 +1726,10 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
|
|
|
2316
1726
|
disabled: isSubmitting,
|
|
2317
1727
|
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
1728
|
children: isSubmitting ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
2319
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1729
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-ContactFormLoader2", className: "w-4 h-4 icon-muted" }),
|
|
2320
1730
|
t("form.submitting") || "Đang gửi..."
|
|
2321
1731
|
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
2322
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1732
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactFormSend", className: "w-4 h-4 icon-gradient" }),
|
|
2323
1733
|
t("form.submit") || "Gửi yêu cầu"
|
|
2324
1734
|
] })
|
|
2325
1735
|
}
|
|
@@ -2334,7 +1744,7 @@ const ContactInfoSection = ({ data, t, isDarkMode, section }) => {
|
|
|
2334
1744
|
if (!contactData.length) return null;
|
|
2335
1745
|
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
1746
|
/* @__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(
|
|
1747
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoUser", className: "w-4 h-4 icon-gradient" }),
|
|
2338
1748
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-main", children: sectionTitle })
|
|
2339
1749
|
] }) }),
|
|
2340
1750
|
/* @__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 +1757,7 @@ const ContactInfoSection = ({ data, t, isDarkMode, section }) => {
|
|
|
2347
1757
|
display: "flex",
|
|
2348
1758
|
alignItems: "center",
|
|
2349
1759
|
justifyContent: "center"
|
|
2350
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1760
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoUser", className: "w-4 h-4 icon-gradient" }) }),
|
|
2351
1761
|
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-subtitle mb-2", children: contact.name }),
|
|
2352
1762
|
/* @__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
1763
|
] }),
|
|
@@ -2374,7 +1784,7 @@ const ContactInfoSection = ({ data, t, isDarkMode, section }) => {
|
|
|
2374
1784
|
alignItems: "center",
|
|
2375
1785
|
justifyContent: "center",
|
|
2376
1786
|
marginRight: "0.75rem"
|
|
2377
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1787
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoPhone", className: "w-4 h-4 icon-gradient" }) }),
|
|
2378
1788
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2379
1789
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contact.info.phone") || "Điện thoại" }),
|
|
2380
1790
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.phone })
|
|
@@ -2404,7 +1814,7 @@ const ContactInfoSection = ({ data, t, isDarkMode, section }) => {
|
|
|
2404
1814
|
alignItems: "center",
|
|
2405
1815
|
justifyContent: "center",
|
|
2406
1816
|
marginRight: "0.75rem"
|
|
2407
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1817
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoEmail", className: "w-4 h-4 icon-gradient" }) }),
|
|
2408
1818
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2409
1819
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: "Email" }),
|
|
2410
1820
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.email })
|
|
@@ -2429,7 +1839,7 @@ const ContactInfoSection = ({ data, t, isDarkMode, section }) => {
|
|
|
2429
1839
|
alignItems: "center",
|
|
2430
1840
|
justifyContent: "center",
|
|
2431
1841
|
marginRight: "0.75rem"
|
|
2432
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1842
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoClock", className: "w-4 h-4 icon-muted" }) }),
|
|
2433
1843
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2434
1844
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contact.info.workingHours") || "Giờ làm việc" }),
|
|
2435
1845
|
/* @__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 +1897,7 @@ const ContactListAutoSection = ({ data, t, isDarkMode, getContactList, section }
|
|
|
2487
1897
|
}
|
|
2488
1898
|
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
1899
|
/* @__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(
|
|
1900
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoUser", className: "w-4 h-4 icon-gradient" }),
|
|
2491
1901
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-main", children: sectionTitle })
|
|
2492
1902
|
] }) }),
|
|
2493
1903
|
/* @__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 +1914,7 @@ const ContactCard = ({ contact, t, isDarkMode }) => {
|
|
|
2504
1914
|
display: "flex",
|
|
2505
1915
|
alignItems: "center",
|
|
2506
1916
|
justifyContent: "center"
|
|
2507
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1917
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoUser", className: "w-4 h-4 icon-gradient" }) }),
|
|
2508
1918
|
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-subtitle mb-2", children: contact.name || t("contactList.card.noName") || "Không có tên" }),
|
|
2509
1919
|
/* @__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
1920
|
] }),
|
|
@@ -2531,7 +1941,7 @@ const ContactCard = ({ contact, t, isDarkMode }) => {
|
|
|
2531
1941
|
alignItems: "center",
|
|
2532
1942
|
justifyContent: "center",
|
|
2533
1943
|
marginRight: "0.75rem"
|
|
2534
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1944
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoPhone", className: "w-4 h-4 icon-gradient" }) }),
|
|
2535
1945
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2536
1946
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contactList.card.phone") || "Điện thoại" }),
|
|
2537
1947
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.phone })
|
|
@@ -2561,7 +1971,7 @@ const ContactCard = ({ contact, t, isDarkMode }) => {
|
|
|
2561
1971
|
alignItems: "center",
|
|
2562
1972
|
justifyContent: "center",
|
|
2563
1973
|
marginRight: "0.75rem"
|
|
2564
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1974
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoEmail", className: "w-4 h-4 icon-gradient" }) }),
|
|
2565
1975
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2566
1976
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: "Email" }),
|
|
2567
1977
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.email })
|
|
@@ -2586,7 +1996,7 @@ const ContactCard = ({ contact, t, isDarkMode }) => {
|
|
|
2586
1996
|
alignItems: "center",
|
|
2587
1997
|
justifyContent: "center",
|
|
2588
1998
|
marginRight: "0.75rem"
|
|
2589
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1999
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-contactInfoClock", className: "w-4 h-4 icon-muted" }) }),
|
|
2590
2000
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
|
|
2591
2001
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contactList.card.workingHours") || "Giờ làm việc" }),
|
|
2592
2002
|
/* @__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 +2089,8 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
|
|
|
2679
2089
|
{
|
|
2680
2090
|
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
2091
|
children: [
|
|
2682
|
-
"
|
|
2092
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-testimonials", folder: "TestimonialsSection", className: "w-4 h-4 icon-gradient" }),
|
|
2093
|
+
" ",
|
|
2683
2094
|
sectionTitle
|
|
2684
2095
|
]
|
|
2685
2096
|
}
|
|
@@ -2696,7 +2107,7 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
|
|
|
2696
2107
|
'"'
|
|
2697
2108
|
] }),
|
|
2698
2109
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4", children: [
|
|
2699
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-3xl", children: "
|
|
2110
|
+
/* @__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
2111
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
2701
2112
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-title text-base mb-1", children: currentFeedback.customerName }),
|
|
2702
2113
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-link text-sm", children: currentFeedback.customerTitle }),
|
|
@@ -2734,264 +2145,761 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
|
|
|
2734
2145
|
opacity: 1;
|
|
2735
2146
|
transform: translateY(0);
|
|
2736
2147
|
}
|
|
2737
|
-
}
|
|
2738
|
-
` })
|
|
2739
|
-
] });
|
|
2148
|
+
}
|
|
2149
|
+
` })
|
|
2150
|
+
] });
|
|
2151
|
+
};
|
|
2152
|
+
const ProductListSection = ({ data, t, isDarkMode, getProductList }) => {
|
|
2153
|
+
const [products, setProducts] = useState([]);
|
|
2154
|
+
const [loading, setLoading] = useState(true);
|
|
2155
|
+
const [error, setError] = useState(null);
|
|
2156
|
+
useEffect(() => {
|
|
2157
|
+
const fetchProducts = () => __async(null, null, function* () {
|
|
2158
|
+
try {
|
|
2159
|
+
setLoading(true);
|
|
2160
|
+
const result = yield getProductList();
|
|
2161
|
+
if (result.success) {
|
|
2162
|
+
setProducts(result.data || []);
|
|
2163
|
+
} else {
|
|
2164
|
+
setError(result.error || t("productList.errors.loadFailed"));
|
|
2165
|
+
}
|
|
2166
|
+
} catch (err) {
|
|
2167
|
+
console.error("Error fetching products:", err);
|
|
2168
|
+
setError(t("productList.errors.loadError"));
|
|
2169
|
+
} finally {
|
|
2170
|
+
setLoading(false);
|
|
2171
|
+
}
|
|
2172
|
+
});
|
|
2173
|
+
fetchProducts();
|
|
2174
|
+
}, [t]);
|
|
2175
|
+
if (loading) {
|
|
2176
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `py-16 px-5 text-center ${isDarkMode ? "bg-gray-900" : "bg-gray-50"}`, children: [
|
|
2177
|
+
/* @__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` }),
|
|
2178
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `mt-2.5 text-base ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: t("productList.loading") })
|
|
2179
|
+
] });
|
|
2180
|
+
}
|
|
2181
|
+
if (error) {
|
|
2182
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `py-16 px-5 text-center ${isDarkMode ? "bg-gray-900" : "bg-gray-50"}`, children: [
|
|
2183
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-red-500 text-5xl mb-4", children: "⚠️" }),
|
|
2184
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-red-500 text-base m-0", children: error })
|
|
2185
|
+
] });
|
|
2186
|
+
}
|
|
2187
|
+
if (!products || products.length === 0) {
|
|
2188
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `py-16 px-5 text-center ${isDarkMode ? "bg-gray-900" : "bg-gray-50"}`, children: [
|
|
2189
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `text-5xl mb-4 ${isDarkMode ? "text-gray-400" : "text-gray-500"}`, children: "📦" }),
|
|
2190
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-base m-0 ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: t("productList.noProducts") })
|
|
2191
|
+
] });
|
|
2192
|
+
}
|
|
2193
|
+
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)) }) }) });
|
|
2194
|
+
};
|
|
2195
|
+
const ProductCard = ({ product, t, isDarkMode }) => {
|
|
2196
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
2197
|
+
const [activeTab, setActiveTab] = useState("overview");
|
|
2198
|
+
const [isHovered, setIsHovered] = useState(false);
|
|
2199
|
+
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";
|
|
2200
|
+
const tabs = [
|
|
2201
|
+
{ id: "overview", label: t("productCard.tabs.overview"), count: null },
|
|
2202
|
+
{ id: "features", label: t("productCard.tabs.features"), count: ((_e = product.features) == null ? void 0 : _e.length) || 0 },
|
|
2203
|
+
{ id: "contacts", label: t("productCard.tabs.contacts"), count: ((_f = product.contacts) == null ? void 0 : _f.length) || 0 },
|
|
2204
|
+
{ id: "downloads", label: t("productCard.tabs.downloads"), count: ((_g = product.productDownloads) == null ? void 0 : _g.length) || 0 }
|
|
2205
|
+
];
|
|
2206
|
+
const renderOverview = () => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-5", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2207
|
+
"div",
|
|
2208
|
+
{
|
|
2209
|
+
className: `text-sm leading-relaxed ${isDarkMode ? "text-gray-300" : "text-gray-700"}`,
|
|
2210
|
+
dangerouslySetInnerHTML: {
|
|
2211
|
+
__html: product.overviewContent || product.description || t("productCard.noOverview")
|
|
2212
|
+
}
|
|
2213
|
+
}
|
|
2214
|
+
) });
|
|
2215
|
+
const renderFeatures = () => {
|
|
2216
|
+
const features = product.features || [];
|
|
2217
|
+
if (features.length === 0) {
|
|
2218
|
+
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") }) });
|
|
2219
|
+
}
|
|
2220
|
+
const sortedFeatures = [...features].sort((a, b) => (a.order || 0) - (b.order || 0));
|
|
2221
|
+
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(
|
|
2222
|
+
"div",
|
|
2223
|
+
{
|
|
2224
|
+
className: `p-4 rounded-lg border-l-4 border-blue-500 ${isDarkMode ? "bg-gray-700" : "bg-gray-100"}`,
|
|
2225
|
+
children: [
|
|
2226
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: `m-0 mb-2 text-sm font-bold ${isDarkMode ? "text-white" : "text-gray-900"}`, children: feature.title }),
|
|
2227
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `m-0 text-xs leading-relaxed ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: feature.description })
|
|
2228
|
+
]
|
|
2229
|
+
},
|
|
2230
|
+
index2
|
|
2231
|
+
)) }) });
|
|
2232
|
+
};
|
|
2233
|
+
const renderContacts = () => {
|
|
2234
|
+
const contacts = product.contacts || [];
|
|
2235
|
+
if (contacts.length === 0) {
|
|
2236
|
+
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") }) });
|
|
2237
|
+
}
|
|
2238
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-5", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-4", children: contacts.map((contact, index2) => {
|
|
2239
|
+
var _a2, _b2;
|
|
2240
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2241
|
+
"div",
|
|
2242
|
+
{
|
|
2243
|
+
className: `p-4 rounded-lg border ${isDarkMode ? "bg-gray-700 border-gray-600" : "bg-gray-100 border-gray-200"}`,
|
|
2244
|
+
children: [
|
|
2245
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center mb-2", children: [
|
|
2246
|
+
/* @__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()) || "?" }) }),
|
|
2247
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
2248
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: `m-0 mb-0.5 text-sm font-bold ${isDarkMode ? "text-white" : "text-gray-900"}`, children: contact.name }),
|
|
2249
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `m-0 text-xs ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: contact.position })
|
|
2250
|
+
] })
|
|
2251
|
+
] }),
|
|
2252
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
|
|
2253
|
+
contact.phone && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
2254
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `text-sm ${isDarkMode ? "text-blue-400" : "text-blue-500"}`, children: "📞" }),
|
|
2255
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2256
|
+
"a",
|
|
2257
|
+
{
|
|
2258
|
+
href: `tel:${contact.phone}`,
|
|
2259
|
+
className: `text-xs no-underline hover:underline ${isDarkMode ? "text-blue-400" : "text-blue-500"}`,
|
|
2260
|
+
children: contact.phone
|
|
2261
|
+
}
|
|
2262
|
+
)
|
|
2263
|
+
] }),
|
|
2264
|
+
contact.email && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
2265
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `text-sm ${isDarkMode ? "text-blue-400" : "text-blue-500"}`, children: "✉️" }),
|
|
2266
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2267
|
+
"a",
|
|
2268
|
+
{
|
|
2269
|
+
href: `mailto:${contact.email}`,
|
|
2270
|
+
className: `text-xs no-underline hover:underline ${isDarkMode ? "text-blue-400" : "text-blue-500"}`,
|
|
2271
|
+
children: contact.email
|
|
2272
|
+
}
|
|
2273
|
+
)
|
|
2274
|
+
] })
|
|
2275
|
+
] })
|
|
2276
|
+
]
|
|
2277
|
+
},
|
|
2278
|
+
contact.id || index2
|
|
2279
|
+
);
|
|
2280
|
+
}) }) });
|
|
2281
|
+
};
|
|
2282
|
+
const renderDownloads = () => {
|
|
2283
|
+
const downloads = product.productDownloads || [];
|
|
2284
|
+
if (downloads.length === 0) {
|
|
2285
|
+
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") }) });
|
|
2286
|
+
}
|
|
2287
|
+
const handleDownload = (fileUrl, title) => {
|
|
2288
|
+
try {
|
|
2289
|
+
const link = document.createElement("a");
|
|
2290
|
+
link.href = fileUrl;
|
|
2291
|
+
link.download = title || "download";
|
|
2292
|
+
link.target = "_blank";
|
|
2293
|
+
document.body.appendChild(link);
|
|
2294
|
+
link.click();
|
|
2295
|
+
document.body.removeChild(link);
|
|
2296
|
+
} catch (error) {
|
|
2297
|
+
console.error("Download error:", error);
|
|
2298
|
+
}
|
|
2299
|
+
};
|
|
2300
|
+
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(
|
|
2301
|
+
"div",
|
|
2302
|
+
{
|
|
2303
|
+
onClick: () => handleDownload(download.fileUrl, download.title),
|
|
2304
|
+
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"}`,
|
|
2305
|
+
children: [
|
|
2306
|
+
/* @__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: "📄" }) }),
|
|
2307
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
2308
|
+
/* @__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 }),
|
|
2309
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `m-0 text-xs ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: t("productCard.downloadClick") })
|
|
2310
|
+
] }),
|
|
2311
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `flex-shrink-0 text-base ${isDarkMode ? "text-blue-400" : "text-blue-500"}`, children: "⬇️" })
|
|
2312
|
+
]
|
|
2313
|
+
},
|
|
2314
|
+
index2
|
|
2315
|
+
)) }) });
|
|
2316
|
+
};
|
|
2317
|
+
const renderTabContent = () => {
|
|
2318
|
+
switch (activeTab) {
|
|
2319
|
+
case "overview":
|
|
2320
|
+
return renderOverview();
|
|
2321
|
+
case "features":
|
|
2322
|
+
return renderFeatures();
|
|
2323
|
+
case "contacts":
|
|
2324
|
+
return renderContacts();
|
|
2325
|
+
case "downloads":
|
|
2326
|
+
return renderDownloads();
|
|
2327
|
+
default:
|
|
2328
|
+
return null;
|
|
2329
|
+
}
|
|
2330
|
+
};
|
|
2331
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2332
|
+
"div",
|
|
2333
|
+
{
|
|
2334
|
+
className: `
|
|
2335
|
+
rounded-xl overflow-hidden cursor-pointer transition-all duration-300 border
|
|
2336
|
+
${isDarkMode ? "bg-gray-800 border-gray-700" : "bg-white border-gray-200"}
|
|
2337
|
+
${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"}`}
|
|
2338
|
+
`,
|
|
2339
|
+
onMouseEnter: () => setIsHovered(true),
|
|
2340
|
+
onMouseLeave: () => setIsHovered(false),
|
|
2341
|
+
children: [
|
|
2342
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2343
|
+
"div",
|
|
2344
|
+
{
|
|
2345
|
+
className: `relative h-48 bg-cover bg-center ${isDarkMode ? "bg-gray-700" : "bg-gray-200"}`,
|
|
2346
|
+
style: {
|
|
2347
|
+
backgroundImage: `url(${mainImage})`
|
|
2348
|
+
},
|
|
2349
|
+
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: [
|
|
2350
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "m-0 mb-2 text-lg font-bold", children: product.name }),
|
|
2351
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "m-0 text-sm opacity-90", children: product.description })
|
|
2352
|
+
] })
|
|
2353
|
+
}
|
|
2354
|
+
),
|
|
2355
|
+
/* @__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(
|
|
2356
|
+
"button",
|
|
2357
|
+
{
|
|
2358
|
+
onClick: () => setActiveTab(tab.id),
|
|
2359
|
+
className: `
|
|
2360
|
+
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
|
|
2361
|
+
${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"}`}
|
|
2362
|
+
`,
|
|
2363
|
+
children: [
|
|
2364
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: tab.label }),
|
|
2365
|
+
tab.count !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `
|
|
2366
|
+
text-xs py-0.5 px-1.5 rounded-full min-w-[18px] text-center
|
|
2367
|
+
${activeTab === tab.id ? "bg-white/20 text-white" : `${isDarkMode ? "bg-gray-600 text-gray-400" : "bg-gray-200 text-gray-600"}`}
|
|
2368
|
+
`, children: tab.count })
|
|
2369
|
+
]
|
|
2370
|
+
},
|
|
2371
|
+
tab.id
|
|
2372
|
+
)) }) }),
|
|
2373
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-[200px] max-h-[300px] overflow-y-auto", children: renderTabContent() })
|
|
2374
|
+
]
|
|
2375
|
+
}
|
|
2376
|
+
);
|
|
2740
2377
|
};
|
|
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
|
-
|
|
2378
|
+
const TextWithTitleSection = ({ section, data, isDarkMode }) => {
|
|
2379
|
+
var _a;
|
|
2380
|
+
const textItems = (data == null ? void 0 : data.sectionDataBindingItems) || [];
|
|
2381
|
+
const title = ((_a = textItems[0]) == null ? void 0 : _a.value) || "";
|
|
2382
|
+
const descriptions = textItems.slice(1);
|
|
2383
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-6xl mx-auto", children: [
|
|
2384
|
+
title && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title font-black mb-4 leading-tight text-left text-main", children: title }),
|
|
2385
|
+
descriptions.map((item, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2386
|
+
"div",
|
|
2387
|
+
{
|
|
2388
|
+
className: `text-body leading-relaxed text-left font-normal text-muted ${index2 < descriptions.length - 1 ? "mb-4" : ""}`,
|
|
2389
|
+
children: item.value
|
|
2390
|
+
},
|
|
2391
|
+
item.id || index2
|
|
2392
|
+
))
|
|
2393
|
+
] }) });
|
|
2394
|
+
};
|
|
2395
|
+
const TextSection = ({ data, isDarkMode }) => {
|
|
2396
|
+
const textItems = (data == null ? void 0 : data.sectionDataBindingItems) || [];
|
|
2397
|
+
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(
|
|
2398
|
+
"div",
|
|
2399
|
+
{
|
|
2400
|
+
className: "mb-5 text-subtitle font-black leading-snug text-left text-main",
|
|
2401
|
+
children: item.value
|
|
2402
|
+
},
|
|
2403
|
+
item.id || index2
|
|
2404
|
+
)) }) });
|
|
2405
|
+
};
|
|
2406
|
+
/**
|
|
2407
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2408
|
+
*
|
|
2409
|
+
* This source code is licensed under the ISC license.
|
|
2410
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2411
|
+
*/
|
|
2412
|
+
const toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
2413
|
+
const toCamelCase = (string) => string.replace(
|
|
2414
|
+
/^([A-Z])|[\s-_]+(\w)/g,
|
|
2415
|
+
(match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()
|
|
2416
|
+
);
|
|
2417
|
+
const toPascalCase = (string) => {
|
|
2418
|
+
const camelCase = toCamelCase(string);
|
|
2419
|
+
return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);
|
|
2420
|
+
};
|
|
2421
|
+
const mergeClasses = (...classes) => classes.filter((className, index2, array) => {
|
|
2422
|
+
return Boolean(className) && className.trim() !== "" && array.indexOf(className) === index2;
|
|
2423
|
+
}).join(" ").trim();
|
|
2424
|
+
const hasA11yProp = (props) => {
|
|
2425
|
+
for (const prop in props) {
|
|
2426
|
+
if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
|
|
2427
|
+
return true;
|
|
2428
|
+
}
|
|
2775
2429
|
}
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
|
|
2430
|
+
};
|
|
2431
|
+
/**
|
|
2432
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2433
|
+
*
|
|
2434
|
+
* This source code is licensed under the ISC license.
|
|
2435
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2436
|
+
*/
|
|
2437
|
+
var defaultAttributes = {
|
|
2438
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
2439
|
+
width: 24,
|
|
2440
|
+
height: 24,
|
|
2441
|
+
viewBox: "0 0 24 24",
|
|
2442
|
+
fill: "none",
|
|
2443
|
+
stroke: "currentColor",
|
|
2444
|
+
strokeWidth: 2,
|
|
2445
|
+
strokeLinecap: "round",
|
|
2446
|
+
strokeLinejoin: "round"
|
|
2447
|
+
};
|
|
2448
|
+
/**
|
|
2449
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2450
|
+
*
|
|
2451
|
+
* This source code is licensed under the ISC license.
|
|
2452
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2453
|
+
*/
|
|
2454
|
+
const Icon = forwardRef(
|
|
2455
|
+
(_a, ref) => {
|
|
2456
|
+
var _b = _a, {
|
|
2457
|
+
color = "currentColor",
|
|
2458
|
+
size = 24,
|
|
2459
|
+
strokeWidth = 2,
|
|
2460
|
+
absoluteStrokeWidth,
|
|
2461
|
+
className = "",
|
|
2462
|
+
children,
|
|
2463
|
+
iconNode
|
|
2464
|
+
} = _b, rest = __objRest(_b, [
|
|
2465
|
+
"color",
|
|
2466
|
+
"size",
|
|
2467
|
+
"strokeWidth",
|
|
2468
|
+
"absoluteStrokeWidth",
|
|
2469
|
+
"className",
|
|
2470
|
+
"children",
|
|
2471
|
+
"iconNode"
|
|
2472
|
+
]);
|
|
2473
|
+
return createElement(
|
|
2474
|
+
"svg",
|
|
2475
|
+
__spreadValues(__spreadValues(__spreadProps(__spreadValues({
|
|
2476
|
+
ref
|
|
2477
|
+
}, defaultAttributes), {
|
|
2478
|
+
width: size,
|
|
2479
|
+
height: size,
|
|
2480
|
+
stroke: color,
|
|
2481
|
+
strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,
|
|
2482
|
+
className: mergeClasses("lucide", className)
|
|
2483
|
+
}), !children && !hasA11yProp(rest) && { "aria-hidden": "true" }), rest),
|
|
2484
|
+
[
|
|
2485
|
+
...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),
|
|
2486
|
+
...Array.isArray(children) ? children : [children]
|
|
2487
|
+
]
|
|
2488
|
+
);
|
|
2781
2489
|
}
|
|
2782
|
-
|
|
2490
|
+
);
|
|
2491
|
+
/**
|
|
2492
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2493
|
+
*
|
|
2494
|
+
* This source code is licensed under the ISC license.
|
|
2495
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2496
|
+
*/
|
|
2497
|
+
const createLucideIcon = (iconName, iconNode) => {
|
|
2498
|
+
const Component = forwardRef(
|
|
2499
|
+
(_a, ref) => {
|
|
2500
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
2501
|
+
return createElement(Icon, __spreadValues({
|
|
2502
|
+
ref,
|
|
2503
|
+
iconNode,
|
|
2504
|
+
className: mergeClasses(
|
|
2505
|
+
`lucide-${toKebabCase(toPascalCase(iconName))}`,
|
|
2506
|
+
`lucide-${iconName}`,
|
|
2507
|
+
className
|
|
2508
|
+
)
|
|
2509
|
+
}, props));
|
|
2510
|
+
}
|
|
2511
|
+
);
|
|
2512
|
+
Component.displayName = toPascalCase(iconName);
|
|
2513
|
+
return Component;
|
|
2783
2514
|
};
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
|
-
|
|
2792
|
-
|
|
2793
|
-
|
|
2794
|
-
]
|
|
2795
|
-
|
|
2796
|
-
|
|
2515
|
+
/**
|
|
2516
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2517
|
+
*
|
|
2518
|
+
* This source code is licensed under the ISC license.
|
|
2519
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2520
|
+
*/
|
|
2521
|
+
const __iconNode$o = [
|
|
2522
|
+
["path", { d: "M2 4v16", key: "vw9hq8" }],
|
|
2523
|
+
["path", { d: "M2 8h18a2 2 0 0 1 2 2v10", key: "1dgv2r" }],
|
|
2524
|
+
["path", { d: "M2 17h20", key: "18nfp3" }],
|
|
2525
|
+
["path", { d: "M6 8v9", key: "1yriud" }]
|
|
2526
|
+
];
|
|
2527
|
+
const Bed = createLucideIcon("bed", __iconNode$o);
|
|
2528
|
+
/**
|
|
2529
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2530
|
+
*
|
|
2531
|
+
* This source code is licensed under the ISC license.
|
|
2532
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2533
|
+
*/
|
|
2534
|
+
const __iconNode$n = [
|
|
2535
|
+
["path", { d: "M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16", key: "jecpp" }],
|
|
2536
|
+
["rect", { width: "20", height: "14", x: "2", y: "6", rx: "2", key: "i6l2r4" }]
|
|
2537
|
+
];
|
|
2538
|
+
const Briefcase = createLucideIcon("briefcase", __iconNode$n);
|
|
2539
|
+
/**
|
|
2540
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2541
|
+
*
|
|
2542
|
+
* This source code is licensed under the ISC license.
|
|
2543
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2544
|
+
*/
|
|
2545
|
+
const __iconNode$m = [
|
|
2546
|
+
["path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z", key: "1b4qmf" }],
|
|
2547
|
+
["path", { d: "M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2", key: "i71pzd" }],
|
|
2548
|
+
["path", { d: "M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2", key: "10jefs" }],
|
|
2549
|
+
["path", { d: "M10 6h4", key: "1itunk" }],
|
|
2550
|
+
["path", { d: "M10 10h4", key: "tcdvrf" }],
|
|
2551
|
+
["path", { d: "M10 14h4", key: "kelpxr" }],
|
|
2552
|
+
["path", { d: "M10 18h4", key: "1ulq68" }]
|
|
2553
|
+
];
|
|
2554
|
+
const Building2 = createLucideIcon("building-2", __iconNode$m);
|
|
2555
|
+
/**
|
|
2556
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2557
|
+
*
|
|
2558
|
+
* This source code is licensed under the ISC license.
|
|
2559
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2560
|
+
*/
|
|
2561
|
+
const __iconNode$l = [
|
|
2562
|
+
["rect", { width: "16", height: "20", x: "4", y: "2", rx: "2", ry: "2", key: "76otgf" }],
|
|
2563
|
+
["path", { d: "M9 22v-4h6v4", key: "r93iot" }],
|
|
2564
|
+
["path", { d: "M8 6h.01", key: "1dz90k" }],
|
|
2565
|
+
["path", { d: "M16 6h.01", key: "1x0f13" }],
|
|
2566
|
+
["path", { d: "M12 6h.01", key: "1vi96p" }],
|
|
2567
|
+
["path", { d: "M12 10h.01", key: "1nrarc" }],
|
|
2568
|
+
["path", { d: "M12 14h.01", key: "1etili" }],
|
|
2569
|
+
["path", { d: "M16 10h.01", key: "1m94wz" }],
|
|
2570
|
+
["path", { d: "M16 14h.01", key: "1gbofw" }],
|
|
2571
|
+
["path", { d: "M8 10h.01", key: "19clt8" }],
|
|
2572
|
+
["path", { d: "M8 14h.01", key: "6423bh" }]
|
|
2573
|
+
];
|
|
2574
|
+
const Building = createLucideIcon("building", __iconNode$l);
|
|
2575
|
+
/**
|
|
2576
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2577
|
+
*
|
|
2578
|
+
* This source code is licensed under the ISC license.
|
|
2579
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2580
|
+
*/
|
|
2581
|
+
const __iconNode$k = [
|
|
2582
|
+
["rect", { width: "16", height: "20", x: "4", y: "2", rx: "2", key: "1nb95v" }],
|
|
2583
|
+
["line", { x1: "8", x2: "16", y1: "6", y2: "6", key: "x4nwl0" }],
|
|
2584
|
+
["line", { x1: "16", x2: "16", y1: "14", y2: "18", key: "wjye3r" }],
|
|
2585
|
+
["path", { d: "M16 10h.01", key: "1m94wz" }],
|
|
2586
|
+
["path", { d: "M12 10h.01", key: "1nrarc" }],
|
|
2587
|
+
["path", { d: "M8 10h.01", key: "19clt8" }],
|
|
2588
|
+
["path", { d: "M12 14h.01", key: "1etili" }],
|
|
2589
|
+
["path", { d: "M8 14h.01", key: "6423bh" }],
|
|
2590
|
+
["path", { d: "M12 18h.01", key: "mhygvu" }],
|
|
2591
|
+
["path", { d: "M8 18h.01", key: "lrp35t" }]
|
|
2592
|
+
];
|
|
2593
|
+
const Calculator = createLucideIcon("calculator", __iconNode$k);
|
|
2594
|
+
/**
|
|
2595
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2596
|
+
*
|
|
2597
|
+
* This source code is licensed under the ISC license.
|
|
2598
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2599
|
+
*/
|
|
2600
|
+
const __iconNode$j = [
|
|
2601
|
+
["path", { d: "M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z", key: "p7xjir" }]
|
|
2602
|
+
];
|
|
2603
|
+
const Cloud = createLucideIcon("cloud", __iconNode$j);
|
|
2604
|
+
/**
|
|
2605
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2606
|
+
*
|
|
2607
|
+
* This source code is licensed under the ISC license.
|
|
2608
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2609
|
+
*/
|
|
2610
|
+
const __iconNode$i = [
|
|
2611
|
+
["ellipse", { cx: "12", cy: "5", rx: "9", ry: "3", key: "msslwz" }],
|
|
2612
|
+
["path", { d: "M3 5V19A9 3 0 0 0 21 19V5", key: "1wlel7" }],
|
|
2613
|
+
["path", { d: "M3 12A9 3 0 0 0 21 12", key: "mv7ke4" }]
|
|
2614
|
+
];
|
|
2615
|
+
const Database = createLucideIcon("database", __iconNode$i);
|
|
2616
|
+
/**
|
|
2617
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2618
|
+
*
|
|
2619
|
+
* This source code is licensed under the ISC license.
|
|
2620
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2621
|
+
*/
|
|
2622
|
+
const __iconNode$h = [
|
|
2623
|
+
["path", { d: "M12 16h.01", key: "1drbdi" }],
|
|
2624
|
+
["path", { d: "M16 16h.01", key: "1f9h7w" }],
|
|
2625
|
+
[
|
|
2626
|
+
"path",
|
|
2797
2627
|
{
|
|
2798
|
-
|
|
2799
|
-
|
|
2800
|
-
__html: product.overviewContent || product.description || t("productCard.noOverview")
|
|
2801
|
-
}
|
|
2628
|
+
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",
|
|
2629
|
+
key: "1iv0i2"
|
|
2802
2630
|
}
|
|
2803
|
-
|
|
2804
|
-
|
|
2805
|
-
|
|
2806
|
-
|
|
2807
|
-
|
|
2631
|
+
],
|
|
2632
|
+
["path", { d: "M8 16h.01", key: "18s6g9" }]
|
|
2633
|
+
];
|
|
2634
|
+
const Factory = createLucideIcon("factory", __iconNode$h);
|
|
2635
|
+
/**
|
|
2636
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2637
|
+
*
|
|
2638
|
+
* This source code is licensed under the ISC license.
|
|
2639
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2640
|
+
*/
|
|
2641
|
+
const __iconNode$g = [
|
|
2642
|
+
["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
|
|
2643
|
+
["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
|
|
2644
|
+
["path", { d: "M10 9H8", key: "b1mrlr" }],
|
|
2645
|
+
["path", { d: "M16 13H8", key: "t4e002" }],
|
|
2646
|
+
["path", { d: "M16 17H8", key: "z1uh3a" }]
|
|
2647
|
+
];
|
|
2648
|
+
const FileText = createLucideIcon("file-text", __iconNode$g);
|
|
2649
|
+
/**
|
|
2650
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2651
|
+
*
|
|
2652
|
+
* This source code is licensed under the ISC license.
|
|
2653
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2654
|
+
*/
|
|
2655
|
+
const __iconNode$f = [
|
|
2656
|
+
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
2657
|
+
["path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20", key: "13o1zl" }],
|
|
2658
|
+
["path", { d: "M2 12h20", key: "9i4pu4" }]
|
|
2659
|
+
];
|
|
2660
|
+
const Globe = createLucideIcon("globe", __iconNode$f);
|
|
2661
|
+
/**
|
|
2662
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2663
|
+
*
|
|
2664
|
+
* This source code is licensed under the ISC license.
|
|
2665
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2666
|
+
*/
|
|
2667
|
+
const __iconNode$e = [
|
|
2668
|
+
[
|
|
2669
|
+
"path",
|
|
2670
|
+
{
|
|
2671
|
+
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",
|
|
2672
|
+
key: "j76jl0"
|
|
2808
2673
|
}
|
|
2809
|
-
|
|
2810
|
-
|
|
2811
|
-
|
|
2812
|
-
|
|
2813
|
-
|
|
2814
|
-
|
|
2815
|
-
|
|
2816
|
-
|
|
2817
|
-
|
|
2818
|
-
|
|
2819
|
-
|
|
2820
|
-
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
2825
|
-
|
|
2674
|
+
],
|
|
2675
|
+
["path", { d: "M22 10v6", key: "1lu8f3" }],
|
|
2676
|
+
["path", { d: "M6 12.5V16a6 3 0 0 0 12 0v-3.5", key: "1r8lef" }]
|
|
2677
|
+
];
|
|
2678
|
+
const GraduationCap = createLucideIcon("graduation-cap", __iconNode$e);
|
|
2679
|
+
/**
|
|
2680
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2681
|
+
*
|
|
2682
|
+
* This source code is licensed under the ISC license.
|
|
2683
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2684
|
+
*/
|
|
2685
|
+
const __iconNode$d = [
|
|
2686
|
+
[
|
|
2687
|
+
"path",
|
|
2688
|
+
{
|
|
2689
|
+
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",
|
|
2690
|
+
key: "mvr1a0"
|
|
2826
2691
|
}
|
|
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
|
-
|
|
2692
|
+
]
|
|
2693
|
+
];
|
|
2694
|
+
const Heart = createLucideIcon("heart", __iconNode$d);
|
|
2695
|
+
/**
|
|
2696
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2697
|
+
*
|
|
2698
|
+
* This source code is licensed under the ISC license.
|
|
2699
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2700
|
+
*/
|
|
2701
|
+
const __iconNode$c = [
|
|
2702
|
+
["path", { d: "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8", key: "5wwlr5" }],
|
|
2703
|
+
[
|
|
2704
|
+
"path",
|
|
2705
|
+
{
|
|
2706
|
+
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",
|
|
2707
|
+
key: "1d0kgt"
|
|
2708
|
+
}
|
|
2709
|
+
]
|
|
2710
|
+
];
|
|
2711
|
+
const House = createLucideIcon("house", __iconNode$c);
|
|
2712
|
+
/**
|
|
2713
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2714
|
+
*
|
|
2715
|
+
* This source code is licensed under the ISC license.
|
|
2716
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2717
|
+
*/
|
|
2718
|
+
const __iconNode$b = [
|
|
2719
|
+
[
|
|
2720
|
+
"path",
|
|
2721
|
+
{
|
|
2722
|
+
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",
|
|
2723
|
+
key: "q8bfy3"
|
|
2724
|
+
}
|
|
2725
|
+
],
|
|
2726
|
+
["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" }],
|
|
2727
|
+
["path", { d: "M8 6v8", key: "15ugcq" }]
|
|
2728
|
+
];
|
|
2729
|
+
const Megaphone = createLucideIcon("megaphone", __iconNode$b);
|
|
2730
|
+
/**
|
|
2731
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2732
|
+
*
|
|
2733
|
+
* This source code is licensed under the ISC license.
|
|
2734
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2735
|
+
*/
|
|
2736
|
+
const __iconNode$a = [
|
|
2737
|
+
[
|
|
2738
|
+
"path",
|
|
2739
|
+
{
|
|
2740
|
+
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",
|
|
2741
|
+
key: "1a0edw"
|
|
2742
|
+
}
|
|
2743
|
+
],
|
|
2744
|
+
["path", { d: "M12 22V12", key: "d0xqtd" }],
|
|
2745
|
+
["polyline", { points: "3.29 7 12 12 20.71 7", key: "ousv84" }],
|
|
2746
|
+
["path", { d: "m7.5 4.27 9 5.15", key: "1c824w" }]
|
|
2747
|
+
];
|
|
2748
|
+
const Package = createLucideIcon("package", __iconNode$a);
|
|
2749
|
+
/**
|
|
2750
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2751
|
+
*
|
|
2752
|
+
* This source code is licensed under the ISC license.
|
|
2753
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2754
|
+
*/
|
|
2755
|
+
const __iconNode$9 = [
|
|
2756
|
+
[
|
|
2757
|
+
"path",
|
|
2758
|
+
{
|
|
2759
|
+
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",
|
|
2760
|
+
key: "1v9wt8"
|
|
2875
2761
|
}
|
|
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;
|
|
2762
|
+
]
|
|
2763
|
+
];
|
|
2764
|
+
const Plane = createLucideIcon("plane", __iconNode$9);
|
|
2765
|
+
/**
|
|
2766
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2767
|
+
*
|
|
2768
|
+
* This source code is licensed under the ISC license.
|
|
2769
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2770
|
+
*/
|
|
2771
|
+
const __iconNode$8 = [
|
|
2772
|
+
[
|
|
2773
|
+
"path",
|
|
2774
|
+
{
|
|
2775
|
+
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",
|
|
2776
|
+
key: "1i5ecw"
|
|
2918
2777
|
}
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
|
|
2778
|
+
],
|
|
2779
|
+
["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
|
|
2780
|
+
];
|
|
2781
|
+
const Settings = createLucideIcon("settings", __iconNode$8);
|
|
2782
|
+
/**
|
|
2783
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2784
|
+
*
|
|
2785
|
+
* This source code is licensed under the ISC license.
|
|
2786
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2787
|
+
*/
|
|
2788
|
+
const __iconNode$7 = [
|
|
2789
|
+
[
|
|
2790
|
+
"path",
|
|
2922
2791
|
{
|
|
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
|
-
]
|
|
2792
|
+
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",
|
|
2793
|
+
key: "oel41y"
|
|
2964
2794
|
}
|
|
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",
|
|
2795
|
+
]
|
|
2796
|
+
];
|
|
2797
|
+
const Shield = createLucideIcon("shield", __iconNode$7);
|
|
2798
|
+
/**
|
|
2799
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2800
|
+
*
|
|
2801
|
+
* This source code is licensed under the ISC license.
|
|
2802
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2803
|
+
*/
|
|
2804
|
+
const __iconNode$6 = [
|
|
2805
|
+
["circle", { cx: "8", cy: "21", r: "1", key: "jimo8o" }],
|
|
2806
|
+
["circle", { cx: "19", cy: "21", r: "1", key: "13723u" }],
|
|
2807
|
+
[
|
|
2808
|
+
"path",
|
|
2988
2809
|
{
|
|
2989
|
-
|
|
2990
|
-
|
|
2991
|
-
}
|
|
2992
|
-
|
|
2993
|
-
|
|
2994
|
-
|
|
2810
|
+
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",
|
|
2811
|
+
key: "9zh506"
|
|
2812
|
+
}
|
|
2813
|
+
]
|
|
2814
|
+
];
|
|
2815
|
+
const ShoppingCart = createLucideIcon("shopping-cart", __iconNode$6);
|
|
2816
|
+
/**
|
|
2817
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2818
|
+
*
|
|
2819
|
+
* This source code is licensed under the ISC license.
|
|
2820
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2821
|
+
*/
|
|
2822
|
+
const __iconNode$5 = [
|
|
2823
|
+
["rect", { width: "14", height: "20", x: "5", y: "2", rx: "2", ry: "2", key: "1yt0o3" }],
|
|
2824
|
+
["path", { d: "M12 18h.01", key: "mhygvu" }]
|
|
2825
|
+
];
|
|
2826
|
+
const Smartphone = createLucideIcon("smartphone", __iconNode$5);
|
|
2827
|
+
/**
|
|
2828
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2829
|
+
*
|
|
2830
|
+
* This source code is licensed under the ISC license.
|
|
2831
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2832
|
+
*/
|
|
2833
|
+
const __iconNode$4 = [
|
|
2834
|
+
["path", { d: "M16 7h6v6", key: "box55l" }],
|
|
2835
|
+
["path", { d: "m22 7-8.5 8.5-5-5L2 17", key: "1t1m79" }]
|
|
2836
|
+
];
|
|
2837
|
+
const TrendingUp = createLucideIcon("trending-up", __iconNode$4);
|
|
2838
|
+
/**
|
|
2839
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2840
|
+
*
|
|
2841
|
+
* This source code is licensed under the ISC license.
|
|
2842
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2843
|
+
*/
|
|
2844
|
+
const __iconNode$3 = [
|
|
2845
|
+
["path", { d: "M14 18V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v11a1 1 0 0 0 1 1h2", key: "wrbu53" }],
|
|
2846
|
+
["path", { d: "M15 18H9", key: "1lyqi6" }],
|
|
2847
|
+
[
|
|
2848
|
+
"path",
|
|
2849
|
+
{
|
|
2850
|
+
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",
|
|
2851
|
+
key: "lysw3i"
|
|
2852
|
+
}
|
|
2853
|
+
],
|
|
2854
|
+
["circle", { cx: "17", cy: "18", r: "2", key: "332jqn" }],
|
|
2855
|
+
["circle", { cx: "7", cy: "18", r: "2", key: "19iecd" }]
|
|
2856
|
+
];
|
|
2857
|
+
const Truck = createLucideIcon("truck", __iconNode$3);
|
|
2858
|
+
/**
|
|
2859
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2860
|
+
*
|
|
2861
|
+
* This source code is licensed under the ISC license.
|
|
2862
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2863
|
+
*/
|
|
2864
|
+
const __iconNode$2 = [
|
|
2865
|
+
["path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2", key: "1yyitq" }],
|
|
2866
|
+
["path", { d: "M16 3.128a4 4 0 0 1 0 7.744", key: "16gr8j" }],
|
|
2867
|
+
["path", { d: "M22 21v-2a4 4 0 0 0-3-3.87", key: "kshegd" }],
|
|
2868
|
+
["circle", { cx: "9", cy: "7", r: "4", key: "nufk8" }]
|
|
2869
|
+
];
|
|
2870
|
+
const Users = createLucideIcon("users", __iconNode$2);
|
|
2871
|
+
/**
|
|
2872
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2873
|
+
*
|
|
2874
|
+
* This source code is licensed under the ISC license.
|
|
2875
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2876
|
+
*/
|
|
2877
|
+
const __iconNode$1 = [
|
|
2878
|
+
[
|
|
2879
|
+
"path",
|
|
2880
|
+
{
|
|
2881
|
+
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",
|
|
2882
|
+
key: "1ngwbx"
|
|
2883
|
+
}
|
|
2884
|
+
]
|
|
2885
|
+
];
|
|
2886
|
+
const Wrench = createLucideIcon("wrench", __iconNode$1);
|
|
2887
|
+
/**
|
|
2888
|
+
* @license lucide-react v0.536.0 - ISC
|
|
2889
|
+
*
|
|
2890
|
+
* This source code is licensed under the ISC license.
|
|
2891
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2892
|
+
*/
|
|
2893
|
+
const __iconNode = [
|
|
2894
|
+
[
|
|
2895
|
+
"path",
|
|
2896
|
+
{
|
|
2897
|
+
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",
|
|
2898
|
+
key: "1xq2db"
|
|
2899
|
+
}
|
|
2900
|
+
]
|
|
2901
|
+
];
|
|
2902
|
+
const Zap = createLucideIcon("zap", __iconNode);
|
|
2995
2903
|
const DiagramSection = ({ data, t, isDarkMode }) => {
|
|
2996
2904
|
var _a, _b;
|
|
2997
2905
|
const [mounted, setMounted] = useState(false);
|
|
@@ -3618,7 +3526,7 @@ const MindMapNode = ({ id, icon: Icon2, text, color, position, delay = 0, onDrag
|
|
|
3618
3526
|
style: {
|
|
3619
3527
|
background: isHovered || isDragging ? colorStyle.gradientHover : colorStyle.gradient,
|
|
3620
3528
|
borderColor: colorStyle.border + "80",
|
|
3621
|
-
boxShadow: `0 10px 40px
|
|
3529
|
+
boxShadow: `0 10px 40px rgba(var(--brand-primary), 0.3)`,
|
|
3622
3530
|
transform: isHovered || isDragging ? "scale(1.1)" : "scale(1)",
|
|
3623
3531
|
filter: isHovered || isDragging ? "brightness(1.1)" : "brightness(1)",
|
|
3624
3532
|
rotate: isDragging ? "2deg" : "0deg"
|
|
@@ -4072,8 +3980,7 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
|
|
|
4072
3980
|
{
|
|
4073
3981
|
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
3982
|
style: {
|
|
4075
|
-
borderColor: "var(--brand-primary)",
|
|
4076
|
-
borderOpacity: 0.5,
|
|
3983
|
+
borderColor: "rgba(var(--brand-primary-rgb), 0.5)",
|
|
4077
3984
|
transform: isDragging ? "scale(1.1)" : "scale(1)",
|
|
4078
3985
|
transition: "transform 0.3s ease"
|
|
4079
3986
|
},
|
|
@@ -4148,7 +4055,14 @@ const FaqItem = ({ faq, index: index2, isActive, onToggle, t }) => {
|
|
|
4148
4055
|
flex-shrink-0 w-10 h-10 rounded-full flex items-center justify-center
|
|
4149
4056
|
transition-all duration-500 transform
|
|
4150
4057
|
${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(
|
|
4058
|
+
`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4059
|
+
ThemeIcon,
|
|
4060
|
+
{
|
|
4061
|
+
name: "icon-faqChevronDown",
|
|
4062
|
+
folder: "common",
|
|
4063
|
+
className: `w-5 h-5 icon-muted transition-transform duration-500 ${isActive ? "rotate-180" : ""}`
|
|
4064
|
+
}
|
|
4065
|
+
) })
|
|
4152
4066
|
]
|
|
4153
4067
|
}
|
|
4154
4068
|
),
|
|
@@ -4227,15 +4141,7 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
|
|
|
4227
4141
|
},
|
|
4228
4142
|
onMouseEnter: (e) => e.currentTarget.style.transform = "scale(1.1)",
|
|
4229
4143
|
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
|
-
)
|
|
4144
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-faqQuestion", className: "w-4 h-4 icon-gradient" })
|
|
4239
4145
|
}
|
|
4240
4146
|
) }),
|
|
4241
4147
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-12 animate-fade-in", children: [
|
|
@@ -4608,7 +4514,7 @@ const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4608
4514
|
},
|
|
4609
4515
|
children: [
|
|
4610
4516
|
t("pageChildrenSelect.moreInsights"),
|
|
4611
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4517
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-pageChildrenSelectArrowRight", folder: "PageChildrenSelectSection", className: "w-4 h-4 icon-muted" })
|
|
4612
4518
|
]
|
|
4613
4519
|
}
|
|
4614
4520
|
) })
|
|
@@ -4683,13 +4589,7 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4683
4589
|
display: "flex",
|
|
4684
4590
|
alignItems: "center",
|
|
4685
4591
|
paddingLeft: "16px"
|
|
4686
|
-
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4687
|
-
ChevronRight,
|
|
4688
|
-
{
|
|
4689
|
-
size: 20,
|
|
4690
|
-
className: "card-text"
|
|
4691
|
-
}
|
|
4692
|
-
) })
|
|
4592
|
+
}, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-pageChildrenSelectChevronRight", folder: "PageChildrenSelectSection", className: "w-4 h-4 card-text" }) })
|
|
4693
4593
|
]
|
|
4694
4594
|
},
|
|
4695
4595
|
page.id
|
|
@@ -4714,7 +4614,7 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4714
4614
|
},
|
|
4715
4615
|
children: [
|
|
4716
4616
|
t("pageChildrenSelect.moreInsights"),
|
|
4717
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4617
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-pageChildrenSelectArrowRight", folder: "PageChildrenSelectSection", className: "w-4 h-4 icon-muted" })
|
|
4718
4618
|
]
|
|
4719
4619
|
}
|
|
4720
4620
|
) })
|
|
@@ -4824,7 +4724,7 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
|
|
|
4824
4724
|
},
|
|
4825
4725
|
children: [
|
|
4826
4726
|
t("pageChildrenSelect.moreInsights"),
|
|
4827
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4727
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ThemeIcon, { name: "icon-pageChildrenSelectArrowRight", folder: "PageChildrenSelectSection", className: "w-4 h-4 icon-muted" })
|
|
4828
4728
|
]
|
|
4829
4729
|
}
|
|
4830
4730
|
) })
|