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