nvis-fe-cms-libs 2.0.8 → 2.0.9
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nvis-fe-cms-libs.es.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/contexts/ThemeIcon.jsx","../src/sections/aboutCompany/CompanyValues.jsx","../src/contexts/SectionWrapper.jsx","../src/sections/aboutCompany/AboutCompanySection.jsx","../src/sections/aboutCompany/TimelineSection.jsx","../src/sections/aboutCompany/PartnerCard.jsx","../src/sections/aboutCompany/PartnersSection.jsx","../src/sections/aboutCompany/MilestoneSection.jsx","../src/sections/aboutCompany/TestimonialsSection.jsx","../src/sections/aboutCompany/PartnerListCard.jsx","../src/sections/aboutCompany/PartnerListSection.jsx","../src/sections/contactCompany/ContactFormSection.jsx","../src/sections/contactCompany/ContactInfoSection.jsx","../src/sections/contactCompany/ContactListAutoSection.jsx","../src/sections/customerFeedback/CustomerFeedbackAutoSection.jsx","../src/sections/product/ProductListSection.jsx","../src/sections/simple/TextWithTitleSection.jsx","../src/sections/simple/TextSection.jsx","../node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/lucide-react/dist/esm/Icon.js","../node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/lucide-react/dist/esm/icons/bed.js","../node_modules/lucide-react/dist/esm/icons/briefcase.js","../node_modules/lucide-react/dist/esm/icons/building-2.js","../node_modules/lucide-react/dist/esm/icons/building.js","../node_modules/lucide-react/dist/esm/icons/calculator.js","../node_modules/lucide-react/dist/esm/icons/cloud.js","../node_modules/lucide-react/dist/esm/icons/database.js","../node_modules/lucide-react/dist/esm/icons/factory.js","../node_modules/lucide-react/dist/esm/icons/file-text.js","../node_modules/lucide-react/dist/esm/icons/globe.js","../node_modules/lucide-react/dist/esm/icons/graduation-cap.js","../node_modules/lucide-react/dist/esm/icons/heart.js","../node_modules/lucide-react/dist/esm/icons/house.js","../node_modules/lucide-react/dist/esm/icons/megaphone.js","../node_modules/lucide-react/dist/esm/icons/package.js","../node_modules/lucide-react/dist/esm/icons/plane.js","../node_modules/lucide-react/dist/esm/icons/settings.js","../node_modules/lucide-react/dist/esm/icons/shield.js","../node_modules/lucide-react/dist/esm/icons/shopping-cart.js","../node_modules/lucide-react/dist/esm/icons/smartphone.js","../node_modules/lucide-react/dist/esm/icons/trending-up.js","../node_modules/lucide-react/dist/esm/icons/truck.js","../node_modules/lucide-react/dist/esm/icons/users.js","../node_modules/lucide-react/dist/esm/icons/wrench.js","../node_modules/lucide-react/dist/esm/icons/zap.js","../src/sections/diagramCompany/DiagramSection.jsx","../src/sections/diagramCompany/DiagramSection2.jsx","../src/sections/faq/FaqSection.jsx","../src/sections/page/PageHighlightSection.jsx","../src/sections/pageChildren/PageChildrenSelectSection.jsx","../src/sections/pageChildren/PageChildrenSelectSection1.jsx","../src/sections/pageChildren/PageChildrenSelectSection2.jsx","../src/index.js"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n self,\n source,\n getOwner(),\n maybeKey,\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import React from \"react\";\r\n\r\nexport default function ThemeIcon({ \r\n name, \r\n className = \"\", \r\n color,\r\n folder = \"common\", // ← Thêm prop folder, mặc định là \"common\"\r\n useOriginalColor = false \r\n}) {\r\n if (!name) return null;\r\n \r\n // Tạo đường dẫn động dựa trên folder\r\n const iconUrl = `/icons/${folder}/${name}.svg`;\r\n\r\n // Nếu muốn giữ màu gốc → dùng <img>\r\n if (useOriginalColor) {\r\n return (\r\n <img\r\n src={iconUrl}\r\n alt={name}\r\n className={`icon ${className}`}\r\n onError={(e) => {\r\n e.target.style.display = \"none\";\r\n console.warn(`Icon not found: ${iconUrl}`);\r\n }}\r\n />\r\n );\r\n }\r\n\r\n // Nếu muốn đổi màu theo theme → dùng mask\r\n return (\r\n <span\r\n className={`icon ${className}`}\r\n style={{\r\n maskImage: `url(${iconUrl})`,\r\n WebkitMaskImage: `url(${iconUrl})`,\r\n backgroundColor: color || 'currentColor',\r\n }}\r\n onError={(e) => {\r\n e.target.style.display = \"none\";\r\n console.warn(`Icon not found: ${iconUrl}`);\r\n }}\r\n />\r\n );\r\n}","import React, { useEffect, useRef, useState } from \"react\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst CompanyValues = ({ companyData, t, isDarkMode }) => {\r\n // Làm sạch HTML\r\n const cleanHtmlContent = (html) => {\r\n if (!html) return \"\";\r\n try {\r\n const tempDiv = document.createElement(\"div\");\r\n tempDiv.innerHTML = html;\r\n let cleanText = tempDiv.textContent || tempDiv.innerText || \"\";\r\n return cleanText\r\n .replace(/ /g, \" \")\r\n .replace(/&/g, \"&\")\r\n .replace(/</g, \"<\")\r\n .replace(/>/g, \">\")\r\n .replace(/"/g, '\"')\r\n .replace(/'/g, \"'\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n } catch {\r\n return String(html || \"\")\r\n .replace(/<[^>]*>/g, \"\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n }\r\n };\r\n\r\n const safeCompanyData = {\r\n vision: companyData?.vision || \"\",\r\n mission: companyData?.mission || \"\",\r\n coreValues: companyData?.coreValues || \"\",\r\n };\r\n\r\n const items = [\r\n {\r\n icon: \"icon-companyValueLightBulb\",\r\n title: t(\"about.companyValues.vision\") || \"Tầm nhìn\",\r\n text:\r\n cleanHtmlContent(safeCompanyData.vision) ||\r\n \"Tầm nhìn của chúng tôi sẽ được cập nhật trong thời gian tới.\",\r\n bgClass: \"bg-gradient-brand\",\r\n },\r\n {\r\n icon: \"icon-companyValueRocket\",\r\n title: t(\"about.companyValues.mission\") || \"Sứ mệnh\",\r\n text:\r\n cleanHtmlContent(safeCompanyData.mission) ||\r\n \"Sứ mệnh của chúng tôi sẽ được cập nhật trong thời gian tới.\",\r\n bgClass: \"bg-gradient-accent\",\r\n },\r\n {\r\n icon: \"icon-companyValueDiamond\",\r\n title: t(\"about.companyValues.coreValues\") || \"Giá trị cốt lõi\",\r\n text:\r\n cleanHtmlContent(safeCompanyData.coreValues) ||\r\n \"Giá trị cốt lõi của chúng tôi sẽ được cập nhật trong thời gian tới.\",\r\n bgClass: \"bg-gradient-brand\",\r\n },\r\n ];\r\n\r\n const refs = useRef([]);\r\n const [visible, setVisible] = useState([]);\r\n\r\n useEffect(() => {\r\n setVisible(new Array(items.length).fill(false));\r\n if (items.length === 0) return;\r\n\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n const idx = refs.current.findIndex((el) => el === entry.target);\r\n if (idx !== -1) {\r\n setVisible((prev) => {\r\n const newVisible = [...prev];\r\n newVisible[idx] = true;\r\n return newVisible;\r\n });\r\n observer.unobserve(entry.target);\r\n }\r\n }\r\n });\r\n },\r\n { threshold: 0.2 }\r\n );\r\n\r\n refs.current.forEach((el) => el && observer.observe(el));\r\n return () => refs.current.forEach((el) => el && observer.unobserve(el));\r\n }, [items.length]);\r\n\r\n if (!companyData) {\r\n return (\r\n <div className=\"card text-center\">\r\n <div className=\"w-12 h-12 mx-auto mb-4 flex items-center justify-center rounded-full bg-gradient-brand text-white text-2xl\">\r\n 🏢\r\n </div>\r\n <h3 className=\"card-title text-lg mb-2\">\r\n Thông tin công ty\r\n </h3>\r\n <p className=\"card-text\">\r\n Tầm nhìn, sứ mệnh và giá trị cốt lõi sẽ được cập nhật sớm.\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n {items.map((item, index) => (\r\n <div\r\n key={index}\r\n ref={(el) => (refs.current[index] = el)}\r\n className={`card transition-all duration-700 ease-out transform ${\r\n visible[index] ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\"\r\n }`}\r\n style={{ transitionDelay: `${index * 200}ms` }}\r\n >\r\n <div className=\"flex items-start space-x-4\">\r\n {/* Icon */}\r\n <div\r\n className={`w-10 h-10 rounded-lg flex items-center justify-center text-white text-xl flex-shrink-0 ${item.bgClass}`}\r\n >\r\n <ThemeIcon name={item.icon} folder=\"AboutCompanySection\" className=\"w-6 h-6\" useOriginalColor={true}/>\r\n </div>\r\n\r\n {/* Nội dung */}\r\n <div className=\"flex-1 min-w-0\">\r\n <h3 className=\"card-title text-lg mb-1\">{item.title}</h3>\r\n <p\r\n className={`card-text leading-relaxed ${\r\n item.text.includes(\"sẽ được cập nhật\")\r\n ? \"italic opacity-75\"\r\n : \"\"\r\n }`}\r\n >\r\n {item.text}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n};\r\n\r\nexport default CompanyValues;","import React from \"react\";\r\n\r\n/**\r\n * SectionWrapper - Simple Gradient Version\r\n * ------------------\r\n * Chỉ có gradient nền, không có hiệu ứng tròn\r\n * Màu sắc được quản lý qua CSS Variables trong theme.css\r\n * \r\n * Props:\r\n * - variant: chọn kiểu nền (\"blue\", \"purple\", \"green\", \"neutral\", \"softLight\")\r\n * - className: thêm class bổ sung\r\n * - children: nội dung của section\r\n */\r\nconst SectionWrapper = ({ \r\n variant = \"softLight\",\r\n className = \"\", \r\n children\r\n}) => {\r\n return (\r\n <section \r\n className={`section-wrapper section-wrapper--${variant} ${className}`}\r\n >\r\n {children}\r\n </section>\r\n );\r\n};\r\n\r\nexport default SectionWrapper;","import React from \"react\";\r\nimport CompanyValues from \"./CompanyValues\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = \"\" }) => {\r\n // Kiểm tra t function\r\n const safeT = typeof t === 'function' ? t : (key, options) => {\r\n console.warn(`Translation function not provided for key: ${key}`);\r\n return key;\r\n };\r\n\r\n const companyData = data?.sectionDataBindingItems?.[0]?.data;\r\n\r\n if (!companyData) {\r\n return null;\r\n }\r\n\r\n const name = companyData.name || safeT('aboutCompany.defaults.companyName');\r\n const shortName = companyData.shortName || safeT('aboutCompany.defaults.shortName');\r\n const shortDescription = companyData.shortDescription || safeT('aboutCompany.defaults.shortDescription');\r\n const establishedYear = companyData.establishedYear || \"----\";\r\n const experienceYears = companyData.experienceYears || \"0\";\r\n const description = companyData.description || \"\";\r\n const logo = companyData.logo || null;\r\n \r\n const getLogoUrl = (logoUrl) => {\r\n if (!logoUrl) return null;\r\n if (logoUrl.startsWith(\"http\")) return logoUrl;\r\n return `${imageBaseUrl}${logoUrl}`;\r\n };\r\n \r\n const logoUrl = getLogoUrl(logo);\r\n \r\n return (\r\n <>\r\n {/* Hero Section */}\r\n <section className=\"relative min-h-[80vh] flex items-center justify-center overflow-hidden pt-8 bg-gradient-brand\">\r\n <div className=\"absolute inset-0\">\r\n {/* Decorative shapes */}\r\n <div className=\"absolute inset-0\">\r\n <div\r\n className=\"shape shape-1 absolute w-12 h-12 bg-white/5 rounded-full -top-6 -left-6\"\r\n style={{ left: \"10%\", top: \"20%\" }}\r\n ></div>\r\n <div\r\n className=\"shape shape-3 absolute w-10 h-10 bg-white/5 rounded-full -bottom-4 -right-4\"\r\n style={{ right: \"30%\", bottom: \"10%\" }}\r\n ></div>\r\n <div\r\n className=\"shape shape-4 absolute w-14 h-14 bg-white/5 rounded-md -bottom-6 -left-6\"\r\n style={{ left: \"20%\", bottom: \"30%\" }}\r\n ></div>\r\n </div>\r\n \r\n {/* Pattern overlay */}\r\n <div\r\n className='absolute inset-0 bg-[url(\"data:image/svg+xml,%3Csvg width=\\\\\\\"60\\\\\\\" height=\\\\\\\"60\\\\\\\" viewBox=\\\\\\\"0 0 60 60\\\\\\\" xmlns=\\\\\\\"http://www.w3.org/2000/svg\\\\\\\"%3E%3Cg fill=\\\\\\\"none\\\\\\\" fill-rule=\\\\\\\"evenodd\\\\\\\"%3E%3Cg fill=\\\\\\\"%23ffffff\\\\\\\" fill-opacity=\\\\\\\"0.05\\\\\\\"%3E%3Ccircle cx=\\\\\\\"30\\\\\\\" cy=\\\\\\\"30\\\\\\\" r=\\\\\\\"2\\\\\\\"/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\")] opacity-20'\r\n ></div>\r\n </div>\r\n \r\n <div className=\"relative z-10 max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 text-center\">\r\n <div className=\"space-y-6\">\r\n {/* Logo + Tên */}\r\n <div className=\"space-y-2\">\r\n <div className=\"w-20 h-20 mx-auto rounded-full bg-gradient-accent p-1\">\r\n <div className=\"w-full h-full rounded-full flex items-center justify-center overflow-hidden bg-body\">\r\n {logoUrl ? (\r\n <img\r\n src={logoUrl}\r\n alt={name || shortName}\r\n className=\"w-full h-full object-cover rounded-full\"\r\n onError={(e) => {\r\n e.target.style.display = 'none';\r\n const fallbackDiv = document.createElement('div');\r\n fallbackDiv.className = 'text-2xl font-bold text-gradient-brand';\r\n fallbackDiv.textContent = shortName;\r\n e.target.parentElement.appendChild(fallbackDiv);\r\n }}\r\n />\r\n ) : (\r\n <div className=\"text-2xl font-bold text-gradient-brand\">\r\n {shortName}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n <h1 className=\"text-5xl lg:text-6xl font-extrabold tracking-tight mb-4 text-gradient-brand drop-shadow-[0_2px_6px_rgba(0,0,0,0.4)]\">\r\n {name}\r\n </h1>\r\n </div>\r\n\r\n {/* Slogan */}\r\n <div className=\"max-w-4xl mx-auto\">\r\n <div\r\n dangerouslySetInnerHTML={{ __html: shortDescription }}\r\n className=\"prose max-w-none mb-8 leading-relaxed text-inverse text-lg sm:text-xl md:text-2xl font-light tracking-wide\"\r\n />\r\n \r\n <div className=\"inline-flex items-center px-4 py-2 rounded-full border bg-white/20 border-white/40 text-inverse text-small font-medium\">\r\n {safeT('aboutCompany.hero.establishedYear', { year: establishedYear })} - {safeT('aboutCompany.hero.experience', { years: experienceYears })}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n {/* About Us Section */}\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n <div className=\"grid lg:grid-cols-2 gap-12 items-center\">\r\n {/* Câu chuyện */}\r\n <div>\r\n <div className=\"inline-block px-4 py-2 rounded-full text-small font-semibold mb-4 bg-surface text-brand-primary border f-border\">\r\n <ThemeIcon name=\"icon-aboutCompanyBook\" folder=\"AboutCompanySection\" className=\"w-6 h-6\" useOriginalColor={true}/> {safeT('aboutCompany.story.badge')}\r\n </div>\r\n \r\n <h2 className=\"text-3xl lg:text-4xl font-bold mb-6 text-main\">\r\n {safeT('aboutCompany.story.title')}{\" \"}\r\n <span className=\"block text-gradient-brand\">{shortName}</span>\r\n </h2>\r\n\r\n <div\r\n dangerouslySetInnerHTML={{ __html: description }}\r\n className=\"prose max-w-none text-muted\"\r\n />\r\n </div>\r\n\r\n {/* Vision - Mission - Core Values */}\r\n <div className=\"text-muted\">\r\n <CompanyValues\r\n companyData={companyData}\r\n t={safeT}\r\n isDarkMode={isDarkMode}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n </>\r\n );\r\n};\r\n\r\nexport default AboutCompanySection;","import React, { useEffect, useRef, useState } from \"react\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst TimelineSection = ({ data, t, section }) => {\r\n const timelineData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data)\r\n ?.map((item) => item.data) || [];\r\n\r\n const [timelineVisible, setTimelineVisible] = useState([]);\r\n const timelineRefs = useRef([]);\r\n const sectionTitle = section?.title || \"Timeline\";\r\n\r\n useEffect(() => {\r\n setTimelineVisible(new Array(timelineData.length).fill(false));\r\n }, [timelineData.length]);\r\n\r\n useEffect(() => {\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n const index = timelineRefs.current.findIndex(\r\n (el) => el === entry.target\r\n );\r\n if (index !== -1) {\r\n setTimelineVisible((prev) => {\r\n const updated = [...prev];\r\n updated[index] = true;\r\n return updated;\r\n });\r\n observer.unobserve(entry.target);\r\n }\r\n }\r\n });\r\n },\r\n { threshold: 0.1 }\r\n );\r\n\r\n timelineRefs.current.forEach((el) => el && observer.observe(el));\r\n return () =>\r\n timelineRefs.current.forEach((el) => el && observer.unobserve(el));\r\n }, [timelineData.length]);\r\n\r\n if (!timelineData.length) {\r\n return (\r\n <section className=\"py-20 bg-body\">\r\n <div className=\"max-w-7xl mx-auto px-4 text-center\">\r\n <h3 className=\"text-subtitle font-semibold mb-2 text-main\">\r\n {t(\"timeline.noData.title\") || \"Chưa có dữ liệu\"}\r\n </h3>\r\n <p className=\"text-body text-muted\">\r\n {t(\"timeline.noData.description\") ||\r\n \"Hiện tại chưa có milestone nào được thiết lập.\"}\r\n </p>\r\n </div>\r\n </section>\r\n );\r\n }\r\n\r\n return (\r\n <SectionWrapper>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Tiêu đề */}\r\n <div className=\"text-center mb-12\">\r\n <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\">\r\n <ThemeIcon name=\"icon-timeLineChart\" folder=\"TimlineSection\" className=\"w-5 h-5 icon-gradient\" /> {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n {/* Timeline */}\r\n <div className=\"relative\">\r\n {/* Đường trục chính */}\r\n <div className=\"absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-brand rounded-full\"></div>\r\n\r\n <div className=\"space-y-8\">\r\n {timelineData.map((milestone, index) => (\r\n <div\r\n key={index}\r\n ref={(el) => (timelineRefs.current[index] = el)}\r\n className={`flex items-center transition-all duration-700 ease-out ${\r\n index % 2 === 0 ? \"flex-row\" : \"flex-row-reverse\"\r\n } ${\r\n timelineVisible[index]\r\n ? \"opacity-100 scale-100\"\r\n : \"opacity-0 scale-75\"\r\n }`}\r\n style={{ transitionDelay: `${index * 200}ms` }}\r\n >\r\n {/* Nội dung timeline */}\r\n <div className=\"flex-1 px-8\">\r\n <div className=\"card\">\r\n <div className=\"card-title text-brand-primary\">\r\n {milestone.time}\r\n </div>\r\n <h3 className=\"card-title text-main mb-1\">\r\n {milestone.title}\r\n </h3>\r\n <p className=\"card-text\">\r\n {milestone.description}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n {/* Dấu chấm */}\r\n <div className=\"w-6 h-6 bg-gradient-brand rounded-full border-4 border-[var(--bg-body)] shadow-[0_0_10px_5px_rgba(37,99,235,0.4)] flex-shrink-0 z-10 animate-pulse\"></div>\r\n\r\n <div className=\"flex-1\"></div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default TimelineSection;","import React, { useEffect, useRef, useState } from \"react\";\r\n\r\nconst PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {\r\n const itemRef = useRef(null);\r\n const [visible, setVisible] = useState(false);\r\n const [isHovered, setIsHovered] = useState(false);\r\n\r\n useEffect(() => {\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n setVisible(true);\r\n observer.unobserve(entry.target);\r\n }\r\n });\r\n },\r\n { threshold: 0.2 }\r\n );\r\n if (itemRef.current) observer.observe(itemRef.current);\r\n return () => itemRef.current && observer.unobserve(itemRef.current);\r\n }, []);\r\n\r\n const logoSrc = getLogoUrl(partner.logoUrl);\r\n\r\n const cardContent = (\r\n <>\r\n {/* Decorative background elements for dark mode */}\r\n {isDarkMode && (\r\n <>\r\n <div\r\n className=\"absolute w-12 h-12 rounded-full\"\r\n style={{ left: \"10%\", top: \"20%\", background: \"rgba(255,255,255,0.05)\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-10 h-10 rounded-full\"\r\n style={{ right: \"30%\", bottom: \"10%\", background: \"rgba(255,255,255,0.05)\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-14 h-14 rounded-md\"\r\n style={{ left: \"20%\", bottom: \"30%\", background: \"rgba(255,255,255,0.05)\" }}\r\n ></div>\r\n <div\r\n className=\"absolute inset-0 opacity-20\"\r\n style={{\r\n backgroundImage: 'url(\"data:image/svg+xml,%3Csvg width=\\\\\"60\\\\\" height=\\\\\"60\\\\\" viewBox=\\\\\"0 0 60 60\\\\\" xmlns=\\\\\"http://www.w3.org/2000/svg\\\\\"%3E%3Cg fill=\\\\\"none\\\\\" fill-rule=\\\\\"evenodd\\\\\"%3E%3Cg fill=\\\\\"%23ffffff\\\\\" fill-opacity=\\\\\"0.05\\\\\"%3E%3Ccircle cx=\\\\\"30\\\\\" cy=\\\\\"30\\\\\" r=\\\\\"2\\\\\"/\\\\%3E%3C/g\\\\%3E%3C/g\\\\%3E%3C/svg\\\\%3E\")'\r\n }}\r\n ></div>\r\n </>\r\n )}\r\n\r\n {/* Logo container */}\r\n <div \r\n className=\"w-20 h-14 flex items-center justify-center mb-4 rounded-lg overflow-hidden bg-surface\" \r\n style={{ \r\n borderWidth: '1px', \r\n borderStyle: 'solid', \r\n borderColor: isHovered ? 'var(--brand-primary)' : 'var(--border-color)',\r\n backgroundColor: isHovered ? 'var(--bg-body)' : 'var(--bg-surface)',\r\n transition: 'all 0.3s ease'\r\n }}\r\n >\r\n {logoSrc ? (\r\n <img\r\n src={logoSrc}\r\n alt={partner.name}\r\n className=\"max-w-full max-h-full object-contain\"\r\n style={{\r\n filter: isHovered \r\n ? 'grayscale(0) opacity(1)' \r\n : (isDarkMode ? 'grayscale(0.3) opacity(0.8)' : 'grayscale(0.2) opacity(0.9)'),\r\n transform: isHovered ? 'scale(1.05)' : 'scale(1)',\r\n transition: 'all 0.3s ease'\r\n }}\r\n />\r\n ) : (\r\n <div className=\"w-full h-full bg-gradient-brand flex items-center justify-center\">\r\n <span className=\"text-white font-bold text-center text-small px-1\">\r\n {partner.name}\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Partner name - using .card-title */}\r\n <h4 className=\"card-title text-center mb-2\">\r\n {partner.name}\r\n </h4>\r\n\r\n {/* Partner description - using .card-text */}\r\n <p className=\"card-text text-center mb-2\">\r\n {partner.description}\r\n </p>\r\n\r\n {/* Website hint - using .card-link */}\r\n {partner.websiteUrl && (\r\n <div \r\n className=\"card-link justify-center\"\r\n style={{ \r\n opacity: isHovered ? 1 : 0,\r\n transform: isHovered ? 'translateY(0)' : 'translateY(4px)',\r\n transition: 'all 0.3s ease'\r\n }}\r\n >\r\n {t('partners.viewDetails') || 'Xem chi tiết'} →\r\n </div>\r\n )}\r\n </>\r\n );\r\n\r\n // Using existing .card class with animation styles\r\n const baseClasses = `card items-center justify-center transition-all duration-700 ease-out overflow-hidden ${\r\n visible ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\"\r\n }`;\r\n\r\n // Inline styles for dynamic animation delay\r\n const dynamicStyles = { \r\n transitionDelay: `${idx * 150}ms`\r\n };\r\n\r\n // Conditional rendering based on websiteUrl\r\n if (partner.websiteUrl) {\r\n return (\r\n <a\r\n ref={itemRef}\r\n href={partner.websiteUrl}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className={`${baseClasses} cursor-pointer`}\r\n style={{ \r\n ...dynamicStyles,\r\n textDecoration: 'none'\r\n }}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n >\r\n {cardContent}\r\n </a>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n ref={itemRef}\r\n className={baseClasses}\r\n style={dynamicStyles}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n >\r\n {cardContent}\r\n </div>\r\n );\r\n};\r\n\r\nexport default PartnerCard;","import React, { useState, useEffect, useRef, useMemo } from \"react\";\r\nimport PartnerCard from \"./PartnerCard\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\n// Hook lấy kích thước cửa sổ\r\nfunction useWindowSize() {\r\n const [width, setWidth] = useState(\r\n typeof window !== \"undefined\" ? window.innerWidth : 1200\r\n );\r\n\r\n useEffect(() => {\r\n if (typeof window === \"undefined\") return;\r\n const handleResize = () => setWidth(window.innerWidth);\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, []);\r\n\r\n return width;\r\n}\r\n\r\nconst PartnersSection = ({ data, t, imageBaseUrl = \"\", section }) => {\r\n const partnersData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data)\r\n ?.map((item) => item.data) || [];\r\n\r\n const [currentPartnerSlide, setCurrentPartnerSlide] = useState(0);\r\n const [partnersVisible, setPartnersVisible] = useState(false);\r\n const partnersRef = useRef(null);\r\n const windowWidth = useWindowSize();\r\n\r\n const sectionTitle = section?.title || t(\"partners.sectionTitle\") || \"Đối tác\";\r\n\r\n const getLogoUrl = (logoUrl) => {\r\n if (!logoUrl) return null;\r\n if (logoUrl.startsWith(\"http\")) return logoUrl;\r\n return `${imageBaseUrl}${logoUrl}`;\r\n };\r\n\r\n // Gom nhóm partners thành từng slide\r\n const partners = useMemo(() => {\r\n const getPerSlide = () => {\r\n if (windowWidth < 640) return 2;\r\n if (windowWidth < 1024) return 3;\r\n return 4;\r\n };\r\n const grouped = [];\r\n const perSlide = getPerSlide();\r\n for (let i = 0; i < partnersData.length; i += perSlide) {\r\n grouped.push(partnersData.slice(i, i + perSlide));\r\n }\r\n return grouped;\r\n }, [partnersData, windowWidth]);\r\n\r\n // Tự động đổi slide\r\n useEffect(() => {\r\n if (partners.length > 1) {\r\n const interval = setInterval(() => {\r\n setCurrentPartnerSlide((prev) => (prev + 1) % partners.length);\r\n }, 5000);\r\n return () => clearInterval(interval);\r\n }\r\n }, [partners.length]);\r\n\r\n // Quan sát khi hiển thị trong viewport\r\n useEffect(() => {\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n setPartnersVisible(true);\r\n observer.unobserve(entry.target);\r\n }\r\n });\r\n },\r\n { threshold: 0.1 }\r\n );\r\n\r\n if (partnersRef.current) observer.observe(partnersRef.current);\r\n return () => partnersRef.current && observer.unobserve(partnersRef.current);\r\n }, []);\r\n\r\n if (!partnersData.length) return null;\r\n\r\n return (\r\n <SectionWrapper>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Header */}\r\n <div className=\"text-center mb-12\">\r\n <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\">\r\n <ThemeIcon name=\"icon-partner\" folder=\"PartnersSection\" className=\"w-4 h-4 icon-gradient\"/> {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n {/* Danh sách đối tác */}\r\n <div ref={partnersRef} className=\"relative overflow-hidden\">\r\n <div\r\n className={`transition-all duration-1000 ease-out ${\r\n partnersVisible ? \"opacity-100 scale-100\" : \"opacity-0 scale-95\"\r\n }`}\r\n >\r\n <div className=\"relative h-56 md:h-64 lg:h-72 xl:h-80 mb-8\">\r\n {partners.map((group, slideIndex) => (\r\n <div\r\n key={slideIndex}\r\n className={`absolute inset-0 transition-all duration-1000 ease-in-out ${\r\n slideIndex === currentPartnerSlide\r\n ? \"opacity-100 translate-x-0\"\r\n : slideIndex < currentPartnerSlide\r\n ? \"opacity-0 -translate-x-full\"\r\n : \"opacity-0 translate-x-full\"\r\n }`}\r\n >\r\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-6 h-full px-2\">\r\n {group.map((partner, idx) => (\r\n <PartnerCard\r\n key={partner.id || idx}\r\n partner={partner}\r\n idx={idx}\r\n t={t}\r\n getLogoUrl={getLogoUrl}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Indicator */}\r\n {partners.length > 1 && (\r\n <div className=\"flex justify-center space-x-2\">\r\n {partners.map((_, index) => (\r\n <button\r\n key={index}\r\n onClick={() => setCurrentPartnerSlide(index)}\r\n className={`w-3 h-3 rounded-full transition-all duration-300 ${\r\n index === currentPartnerSlide\r\n ? \"bg-brand-primary scale-125 shadow-lg\"\r\n : \"bg-muted hover:bg-brand-primary/70\"\r\n }`}\r\n aria-label={`Slide ${index + 1}`}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default PartnersSection;\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }) => {\r\n const [milestones, setMilestones] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [timelineVisible, setTimelineVisible] = useState([]);\r\n const timelineRefs = useRef([]);\r\n const sectionTitle = section?.title || \"...\";\r\n\r\n useEffect(() => {\r\n const fetchMilestones = async () => {\r\n if (getMilestoneTimeline) {\r\n try {\r\n setLoading(true);\r\n const res = await getMilestoneTimeline();\r\n if (res.success) setMilestones(res.data || []);\r\n else setMilestones([]);\r\n } catch {\r\n setMilestones([]);\r\n } finally {\r\n setLoading(false);\r\n }\r\n } else {\r\n const milestonesData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data)\r\n ?.map((item) => item.data) || [];\r\n setMilestones(milestonesData);\r\n setLoading(false);\r\n }\r\n };\r\n fetchMilestones();\r\n }, []);\r\n\r\n useEffect(() => {\r\n setTimelineVisible(new Array(milestones.length).fill(false));\r\n }, [milestones.length]);\r\n\r\n useEffect(() => {\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n const index = timelineRefs.current.findIndex((el) => el === entry.target);\r\n if (index !== -1) {\r\n setTimelineVisible((prev) => {\r\n const updated = [...prev];\r\n updated[index] = true;\r\n return updated;\r\n });\r\n observer.unobserve(entry.target);\r\n }\r\n }\r\n });\r\n },\r\n { threshold: 0.1 }\r\n );\r\n\r\n timelineRefs.current.forEach((el) => el && observer.observe(el));\r\n return () => timelineRefs.current.forEach((el) => el && observer.unobserve(el));\r\n }, [milestones.length]);\r\n\r\n if (loading) {\r\n return (\r\n <section className=\"py-20 text-center\">\r\n <p className=\"text-main\">{t(\"milestone.status.loadingData\")}</p>\r\n </section>\r\n );\r\n }\r\n\r\n if (!milestones.length) {\r\n return (\r\n <section className=\"py-20 bg-body\">\r\n <div className=\"max-w-7xl mx-auto px-4 text-center\">\r\n <h3 className=\"text-lg font-semibold mb-2 text-main\">\r\n {t(\"milestone.status.noData\")}\r\n </h3>\r\n <p className=\"text-muted\">{t(\"milestone.noDataDescription\")}</p>\r\n </div>\r\n </section>\r\n );\r\n }\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Tiêu đề */}\r\n <div className=\"text-center mb-12\">\r\n <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\">\r\n <ThemeIcon name=\"icon-timeLineChart\" folder=\"TimlineSection\" className=\"w-5 h-5 icon-gradient\" /> {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n {/* Timeline */}\r\n <div className=\"relative\">\r\n <div className=\"absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-brand rounded-full\"></div>\r\n\r\n <div className=\"space-y-8\">\r\n {milestones.map((milestone, index) => (\r\n <div\r\n key={milestone.id}\r\n ref={(el) => (timelineRefs.current[index] = el)}\r\n className={`flex items-center transition-all duration-700 ease-out ${\r\n index % 2 === 0 ? \"flex-row\" : \"flex-row-reverse\"\r\n } ${timelineVisible[index] ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\"}`}\r\n style={{ transitionDelay: `${index * 200}ms` }}\r\n >\r\n <div className=\"flex-1 px-8\">\r\n <div className=\"card\">\r\n <div className=\"text-brand-primary font-bold text-xl mb-2\">\r\n {milestone.time}\r\n </div>\r\n <h3 className=\"card-title\">\r\n {milestone.title}\r\n </h3>\r\n <p className=\"card-text\">{milestone.description}</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"w-6 h-6 bg-gradient-brand rounded-full border-4 border-[var(--bg-body)] shadow-[0_0_10px_5px_rgba(37,99,235,0.4)] flex-shrink-0 z-10 animate-pulse\"></div>\r\n\r\n <div className=\"flex-1\"></div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default MilestoneSection;","import React, { useState, useEffect } from \"react\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst TestimonialsSection = ({ data, t, section }) => {\r\n const [currentIndex, setCurrentIndex] = useState(0);\r\n const [isTransitioning, setIsTransitioning] = useState(false);\r\n const sectionTitle = section?.title || t(\"testimonials.sectionTitle\") || \"Cảm nhận khách hàng\";\r\n\r\n const testimonials =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data)\r\n ?.map((item) => ({\r\n quote: item.data?.content || \"\",\r\n author: item.data?.customerName || \"\",\r\n position: item.data?.customerTitle || \"\",\r\n company: item.data?.customerCompany || \"\",\r\n })) || [];\r\n\r\n // Tự động đổi testimonial với hiệu ứng fade\r\n useEffect(() => {\r\n if (testimonials.length > 1) {\r\n const interval = setInterval(() => {\r\n setIsTransitioning(true);\r\n setTimeout(() => {\r\n setCurrentIndex((prev) => (prev + 1) % testimonials.length);\r\n setIsTransitioning(false);\r\n }, 300);\r\n }, 5000);\r\n return () => clearInterval(interval);\r\n }\r\n }, [testimonials.length]);\r\n\r\n const handleIndicatorClick = (index) => {\r\n if (index !== currentIndex) {\r\n setIsTransitioning(true);\r\n setTimeout(() => {\r\n setCurrentIndex(index);\r\n setIsTransitioning(false);\r\n }, 300);\r\n }\r\n };\r\n\r\n // Nếu không có testimonials, không render gì\r\n if (testimonials.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <SectionWrapper>\r\n <div className=\"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center\">\r\n {/* Header */}\r\n <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\">\r\n <ThemeIcon name=\"icon-testimonials\" folder=\"TestimonialsSection\" className=\"w-4 h-4 icon-gradient\"/> {sectionTitle}\r\n </div>\r\n\r\n {/* Nội dung */}\r\n <div className=\"relative\">\r\n <div className=\"card\">\r\n <div\r\n style={{\r\n opacity: isTransitioning ? 0 : 1,\r\n transform: isTransitioning ? 'translateY(10px)' : 'translateY(0)',\r\n transition: 'opacity 0.3s ease-in-out, transform 0.3s ease-in-out'\r\n }}\r\n >\r\n <blockquote className=\"card-text text-body italic mb-6\">\r\n \"{testimonials[currentIndex].quote}\"\r\n </blockquote>\r\n\r\n <div className=\"flex items-center justify-center space-x-4\">\r\n <div className=\"text-3xl\"><ThemeIcon name=\"icon-testimonialsUser\" folder=\"TestimonialsSection\" className=\"w-4 h-4 icon-gradient\"/></div>\r\n <div className=\"text-left\">\r\n <div className=\"card-title\">\r\n {testimonials[currentIndex].author}\r\n </div>\r\n <div className=\"card-text\">\r\n {testimonials[currentIndex].position}\r\n </div>\r\n {testimonials[currentIndex].company && (\r\n <div className=\"card-link\">\r\n {testimonials[currentIndex].company}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Indicators */}\r\n {testimonials.length > 1 && (\r\n <div className=\"flex justify-center space-x-2 mt-4\">\r\n {testimonials.map((_, index) => (\r\n <button \r\n key={index}\r\n onClick={() => handleIndicatorClick(index)}\r\n className={`w-2.5 h-2.5 rounded-full transition-all duration-300 ${\r\n index === currentIndex\r\n ? \"bg-brand-secondary\"\r\n : \"bg-surface hover:bg-brand-primary\"\r\n }`}\r\n aria-label={`Slide ${index + 1}`}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default TestimonialsSection;","import React from \"react\";\r\n\r\nconst PartnerListCard = ({ partner, idx, t, isDarkMode, getLogoUrl }) => {\r\n const logoUrl = getLogoUrl(partner.logoUrl);\r\n \r\n return (\r\n \r\n <a href={partner.websiteUrl || '#'}\r\n target={partner.websiteUrl ? '_blank' : '_self'}\r\n rel={partner.websiteUrl ? 'noopener noreferrer' : ''}\r\n className=\"card\"\r\n style={{\r\n animationDelay: `${idx * 0.1}s`,\r\n textDecoration: 'none',\r\n overflow: 'hidden',\r\n minHeight: '280px',\r\n padding: '1.5rem',\r\n display: 'flex',\r\n flexDirection: 'column'\r\n }}\r\n >\r\n <div style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flex: 1\r\n }}>\r\n {logoUrl ? (\r\n <div style={{\r\n width: '100%',\r\n height: '100px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginBottom: '1rem'\r\n }}>\r\n <img\r\n src={logoUrl}\r\n alt={partner.name || t(\"partners.logoAlt\") || \"Partner logo\"}\r\n style={{\r\n maxWidth: '100%',\r\n maxHeight: '100%',\r\n objectFit: 'contain',\r\n transition: 'transform 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = 'scale(1.05)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = 'scale(1)';\r\n }}\r\n loading=\"lazy\"\r\n />\r\n </div>\r\n ) : (\r\n <div className=\"bg-surface\" style={{\r\n width: '5rem',\r\n height: '5rem',\r\n borderRadius: '9999px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginBottom: '1rem'\r\n }}>\r\n <span style={{ fontSize: '1.875rem' }}>🤝</span>\r\n </div>\r\n )}\r\n \r\n <h3 className=\"card-title text-main\" style={{\r\n fontSize: '1rem',\r\n textAlign: 'center',\r\n marginBottom: '0.5rem',\r\n lineHeight: '1.4'\r\n }}>\r\n {partner.name || t('partners.unnamed') || 'Partner'}\r\n </h3>\r\n \r\n {partner.description && (\r\n <p className=\"card-text\" style={{\r\n textAlign: 'center',\r\n marginTop: '0.5rem',\r\n fontSize: '0.875rem',\r\n lineHeight: '1.5',\r\n display: '-webkit-box',\r\n WebkitLineClamp: 3,\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden'\r\n }}>\r\n {partner.description}\r\n </p>\r\n )}\r\n </div>\r\n </a>\r\n );\r\n};\r\n\r\nexport default PartnerListCard;","import React, { useEffect, useState, useRef, useMemo } from \"react\";\r\nimport PartnerListCard from \"./PartnerListCard\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\n// Hook theo dõi kích thước màn hình\r\nfunction useWindowSize() {\r\n const [width, setWidth] = useState(\r\n typeof window !== \"undefined\" ? window.innerWidth : 1200\r\n );\r\n\r\n useEffect(() => {\r\n const handleResize = () => setWidth(window.innerWidth);\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, []);\r\n\r\n return width;\r\n}\r\n\r\nconst PartnerListSection = ({ t, getPartnerList, imageBaseUrl = \"\", section }) => {\r\n const [partnersData, setPartnersData] = useState([]);\r\n const [error, setError] = useState(null);\r\n const [loading, setLoading] = useState(true);\r\n const [currentPartnerSlide, setCurrentPartnerSlide] = useState(0);\r\n const [partnersVisible, setPartnersVisible] = useState(false);\r\n const partnersRef = useRef(null);\r\n const windowWidth = useWindowSize();\r\n\r\n const sectionTitle = section?.title || t(\"partners.sectionTitle\");\r\n\r\n const getLogoUrl = (logoUrl) => {\r\n if (!logoUrl) return null;\r\n if (logoUrl.startsWith(\"http\")) return logoUrl;\r\n return `${imageBaseUrl}${logoUrl}`;\r\n };\r\n\r\n // Gọi API lấy partner\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n try {\r\n const res = await getPartnerList();\r\n if (res.success) {\r\n setPartnersData(res.data || []);\r\n } else {\r\n setError(res.error || \"Error fetching partners\");\r\n }\r\n } catch (err) {\r\n setError(err.message);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n fetchData();\r\n }, []);\r\n\r\n // Group partners thành slides\r\n const partners = useMemo(() => {\r\n const getPerSlide = () => {\r\n if (windowWidth < 640) return 2;\r\n if (windowWidth < 1024) return 3;\r\n return 4;\r\n };\r\n const grouped = [];\r\n const perSlide = getPerSlide();\r\n for (let i = 0; i < partnersData.length; i += perSlide) {\r\n grouped.push(partnersData.slice(i, i + perSlide));\r\n }\r\n return grouped;\r\n }, [partnersData, windowWidth]);\r\n\r\n // Auto-rotate slides\r\n useEffect(() => {\r\n if (partners.length > 1) {\r\n const interval = setInterval(() => {\r\n setCurrentPartnerSlide((prev) => (prev + 1) % partners.length);\r\n }, 5000);\r\n return () => clearInterval(interval);\r\n }\r\n }, [partners.length]);\r\n\r\n // Hiệu ứng xuất hiện\r\n useEffect(() => {\r\n const fallbackTimer = setTimeout(() => setPartnersVisible(true), 500);\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n clearTimeout(fallbackTimer);\r\n setPartnersVisible(true);\r\n observer.unobserve(entry.target);\r\n }\r\n });\r\n },\r\n { threshold: 0.1, rootMargin: \"50px\" }\r\n );\r\n if (partnersRef.current) observer.observe(partnersRef.current);\r\n else {\r\n clearTimeout(fallbackTimer);\r\n setPartnersVisible(true);\r\n }\r\n return () => {\r\n clearTimeout(fallbackTimer);\r\n if (partnersRef.current) observer.unobserve(partnersRef.current);\r\n };\r\n }, []);\r\n\r\n // Loading & Error\r\n if (loading) {\r\n return (\r\n <section className=\"py-20 text-center bg-body\">\r\n <p className=\"text-body text-muted\">\r\n {t(\"partners.loading\") || \"Đang tải danh sách đối tác...\"}\r\n </p>\r\n </section>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <section className=\"py-20 text-center bg-body\">\r\n <p className=\"text-body text-brand-secondary\">\r\n {t(\"partners.error\") || error}\r\n </p>\r\n </section>\r\n );\r\n }\r\n\r\n if (!partnersData.length) return null;\r\n\r\n return (\r\n <SectionWrapper>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Header */}\r\n <div className=\"text-center mb-12\">\r\n <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\">\r\n <ThemeIcon name=\"icon-partner\" folder=\"PartnersSection\" className=\"w-4 h-4 icon-gradient\"/> {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n {/* Slider Container */}\r\n <div ref={partnersRef} className=\"relative\">\r\n <div\r\n className={`transition-all duration-1000 ease-out ${\r\n partnersVisible ? \"opacity-100 scale-100\" : \"opacity-0 scale-95\"\r\n }`}\r\n >\r\n {/* Slides */}\r\n <div className=\"relative overflow-hidden mb-12\">\r\n <div style={{ minHeight: '320px' }}>\r\n {partners.map((group, slideIndex) => (\r\n <div\r\n key={slideIndex}\r\n className={`absolute inset-0 w-full transition-all duration-1000 ease-in-out ${\r\n slideIndex === currentPartnerSlide\r\n ? \"opacity-100 translate-x-0\"\r\n : slideIndex < currentPartnerSlide\r\n ? \"opacity-0 -translate-x-full\"\r\n : \"opacity-0 translate-x-full\"\r\n }`}\r\n style={{\r\n zIndex: slideIndex === currentPartnerSlide ? 10 : 1,\r\n }}\r\n >\r\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-8 px-2\">\r\n {group.map((partner, idx) => (\r\n <PartnerListCard\r\n key={partner.id || `${slideIndex}-${idx}`}\r\n partner={partner}\r\n idx={idx}\r\n t={t}\r\n getLogoUrl={getLogoUrl}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Indicators */}\r\n {partners.length > 1 && (\r\n <div className=\"flex justify-center space-x-3\" style={{ \r\n position: 'relative',\r\n zIndex: 100,\r\n paddingTop: '1rem'\r\n }}>\r\n {partners.map((_, index) => (\r\n <button\r\n key={index}\r\n onClick={() => setCurrentPartnerSlide(index)}\r\n style={{\r\n width: '12px',\r\n height: '12px',\r\n borderRadius: '50%',\r\n border: 'none',\r\n cursor: 'pointer',\r\n transition: 'all 0.3s ease',\r\n backgroundColor: index === currentPartnerSlide \r\n ? 'var(--brand-primary)' \r\n : 'rgba(255, 255, 255, 0.3)',\r\n transform: index === currentPartnerSlide ? 'scale(1.3)' : 'scale(1)'\r\n }}\r\n onMouseEnter={(e) => {\r\n if (index !== currentPartnerSlide) {\r\n e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 0.5)';\r\n }\r\n }}\r\n onMouseLeave={(e) => {\r\n if (index !== currentPartnerSlide) {\r\n e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 0.3)';\r\n }\r\n }}\r\n aria-label={`Slide ${index + 1}`}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default PartnerListSection;","import React, { useState } from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from '../../contexts/ThemeIcon';\r\nconst ContactFormSection = ({ data, t, isDarkMode, consultationRequestService }) => {\r\n const [formData, setFormData] = useState({\r\n fullName: '',\r\n workEmail: '',\r\n phoneNumber: '',\r\n companyName: '',\r\n jobTitle: '',\r\n businessType: '',\r\n expectedBudget: '',\r\n expectedTimeline: '',\r\n requestTitle: '',\r\n requestDescription: '',\r\n });\r\n\r\n const [formErrors, setFormErrors] = useState({});\r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n const [submitStatus, setSubmitStatus] = useState(null);\r\n const [submitMessage, setSubmitMessage] = useState('');\r\n\r\n // Enhanced validation function with proper field names\r\n const validateField = (name, value) => {\r\n const errors = {};\r\n\r\n switch (name) {\r\n case 'fullName':\r\n if (!value?.trim()) errors.fullName = 'Họ và tên là bắt buộc';\r\n else if (value.trim().length < 2) errors.fullName = 'Tên phải có ít nhất 2 ký tự';\r\n break;\r\n\r\n case 'workEmail':\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n if (!value?.trim()) errors.workEmail = 'Email là bắt buộc';\r\n else if (!emailRegex.test(value.trim())) errors.workEmail = 'Email không hợp lệ';\r\n break;\r\n\r\n case 'phoneNumber':\r\n const phoneRegex = /^[0-9\\s\\-\\+\\(\\)]{10,15}$/;\r\n if (value && !phoneRegex.test(value.trim())) errors.phoneNumber = 'Số điện thoại không hợp lệ';\r\n break;\r\n\r\n case 'requestTitle':\r\n if (!value?.trim()) errors.requestTitle = 'Tiêu đề yêu cầu là bắt buộc';\r\n else if (value.trim().length < 5) errors.requestTitle = 'Tiêu đề phải có ít nhất 5 ký tự';\r\n break;\r\n\r\n case 'requestDescription':\r\n if (!value?.trim()) errors.requestDescription = 'Mô tả yêu cầu là bắt buộc';\r\n else if (value.trim().length < 10) errors.requestDescription = 'Mô tả phải có ít nhất 10 ký tự';\r\n break;\r\n\r\n case 'companyName':\r\n if (value && value.trim().length > 0 && value.trim().length < 2) {\r\n errors.companyName = 'Tên công ty phải có ít nhất 2 ký tự';\r\n }\r\n break;\r\n\r\n case 'jobTitle':\r\n if (value && value.trim().length > 0 && value.trim().length < 2) {\r\n errors.jobTitle = 'Chức vụ phải có ít nhất 2 ký tự';\r\n }\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n\r\n return errors;\r\n };\r\n\r\n const handleInputChange = (e) => {\r\n const { name, value } = e.target;\r\n\r\n setFormData(prev => ({\r\n ...prev,\r\n [name]: value || ''\r\n }));\r\n\r\n if (formErrors[name]) {\r\n setFormErrors(prev => {\r\n const newErrors = { ...prev };\r\n delete newErrors[name];\r\n return newErrors;\r\n });\r\n }\r\n };\r\n\r\n const handleBlur = (e) => {\r\n const { name, value } = e.target;\r\n const fieldErrors = validateField(name, value);\r\n setFormErrors(prev => ({\r\n ...prev,\r\n ...fieldErrors\r\n }));\r\n };\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n setIsSubmitting(true);\r\n setSubmitStatus(null);\r\n setSubmitMessage('');\r\n\r\n try {\r\n const allErrors = {};\r\n Object.keys(formData).forEach(key => {\r\n const fieldErrors = validateField(key, formData[key]);\r\n Object.assign(allErrors, fieldErrors);\r\n });\r\n\r\n if (Object.keys(allErrors).length > 0) {\r\n setFormErrors(allErrors);\r\n setIsSubmitting(false);\r\n return;\r\n }\r\n\r\n const cleanFormData = Object.keys(formData).reduce((acc, key) => {\r\n acc[key] = typeof formData[key] === 'string' ? formData[key].trim() : formData[key];\r\n return acc;\r\n }, {});\r\n\r\n let result;\r\n if (consultationRequestService?.create) {\r\n result = await consultationRequestService.create(cleanFormData);\r\n } else {\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n result = { success: true, message: 'Đã gửi thông tin thành công!' };\r\n }\r\n\r\n if (result?.success) {\r\n setSubmitStatus('success');\r\n setSubmitMessage(result.message || 'Cảm ơn bạn đã gửi thông tin! Chúng tôi sẽ liên hệ lại trong vòng 24 giờ.');\r\n\r\n setFormData({\r\n fullName: '',\r\n workEmail: '',\r\n phoneNumber: '',\r\n companyName: '',\r\n jobTitle: '',\r\n businessType: '',\r\n expectedBudget: '',\r\n expectedTimeline: '',\r\n requestTitle: '',\r\n requestDescription: '',\r\n });\r\n setFormErrors({});\r\n } else {\r\n setSubmitStatus('error');\r\n setSubmitMessage(result?.message || 'Có lỗi xảy ra khi gửi thông tin.');\r\n }\r\n } catch (error) {\r\n setSubmitStatus('error');\r\n setSubmitMessage(error?.message || 'Có lỗi xảy ra khi gửi thông tin. Vui lòng thử lại sau.');\r\n } finally {\r\n setIsSubmitting(false);\r\n }\r\n };\r\n\r\n const inputBaseClasses = `\r\n w-full px-4 py-3 rounded-xl border \r\n transition-all duration-200 \r\n focus:ring-2 focus:outline-none\r\n bg-surface\r\n text-main\r\n placeholder-text-muted\r\n `;\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n <div className=\"grid lg:grid-cols-3 gap-12\">\r\n {/* Form Section */}\r\n <div className=\"lg:col-span-4\">\r\n <div className=\"bg-surface rounded-2xl p-8 shadow-lg border transition-colors duration-200\" style={{ borderColor: 'var(--border-color)' }}>\r\n <div className=\"flex items-center mb-6\">\r\n <div className=\"w-10 h-10 rounded-lg bg-gradient-brand flex items-center justify-center mr-4\">\r\n <ThemeIcon name=\"icon-contactFormSend\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n </div>\r\n\r\n <div>\r\n <h2 className=\"text-subtitle font-bold text-main\">\r\n {t('form.title') || 'Gửi yêu cầu tư vấn'}\r\n </h2>\r\n <p className=\"text-small text-muted\">\r\n {t('form.subtitle') || 'Điền thông tin để nhận tư vấn miễn phí từ chuyên gia'}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n {/* Success/Error Message */}\r\n {submitStatus && (\r\n <div className={`mb-6 p-4 rounded-xl border transition-colors duration-200 ${\r\n submitStatus === 'success'\r\n ? 'bg-emerald-50 dark:bg-emerald-900/30 text-emerald-800 dark:text-emerald-300'\r\n : 'bg-red-50 dark:bg-red-900/30 text-red-800 dark:text-red-300'\r\n }`} style={{ borderColor: submitStatus === 'success' ? '#10b981' : '#ef4444' }}>\r\n <div className=\"flex items-center\">\r\n {submitStatus === 'success' ? (\r\n <ThemeIcon name=\"icon-contactFormCheck\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n ) : (\r\n <ThemeIcon name=\"icon-ContactFormAlertCircle\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n )}\r\n <p className=\"text-small font-medium\">{submitMessage}</p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n <form onSubmit={handleSubmit} className=\"space-y-6\">\r\n {/* Name and Email */}\r\n <div className=\"grid md:grid-cols-2 gap-6\">\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.fullName') || 'Họ và tên'} *\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"fullName\"\r\n value={formData.fullName || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.fullName ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder={t('contact.form.namePlaceholder')}\r\n required\r\n />\r\n {formErrors.fullName && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <ThemeIcon name=\"icon-ContactFormAlertCircle\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n {formErrors.fullName}\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.workEmail') || 'Email'} *\r\n </label>\r\n <input\r\n type=\"email\"\r\n name=\"workEmail\"\r\n value={formData.workEmail || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.workEmail ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder=\"email@company.com\"\r\n required\r\n />\r\n {formErrors.workEmail && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <ThemeIcon name=\"icon-ContactFormAlertCircle\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n {formErrors.workEmail}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Phone and Company */}\r\n <div className=\"grid md:grid-cols-2 gap-6\">\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.phoneNumber') || 'Số điện thoại'}\r\n </label>\r\n <input\r\n type=\"tel\"\r\n name=\"phoneNumber\"\r\n value={formData.phoneNumber || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.phoneNumber ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder=\"0901 234 567\"\r\n />\r\n {formErrors.phoneNumber && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <ThemeIcon name=\"icon-ContactFormAlertCircle\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n {formErrors.phoneNumber}\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.companyName') || 'Công ty/Tổ chức'}\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"companyName\"\r\n value={formData.companyName || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.companyName ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder={t('contact.form.fields.company')}\r\n />\r\n {formErrors.companyName && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <ThemeIcon name=\"icon-ContactFormAlertCircle\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n {formErrors.companyName}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Job Title and Business Type */}\r\n <div className=\"grid md:grid-cols-2 gap-6\">\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.jobTitle') || 'Chức vụ'}\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"jobTitle\"\r\n value={formData.jobTitle || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.jobTitle ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder={t('contact.form.positionPlaceholder')}\r\n />\r\n {formErrors.jobTitle && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <ThemeIcon name=\"icon-ContactFormAlertCircle\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n {formErrors.jobTitle}\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.businessType') || 'Loại hình kinh doanh'}\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"businessType\"\r\n value={formData.businessType || ''}\r\n onChange={handleInputChange}\r\n className={inputBaseClasses}\r\n style={{ borderColor: 'var(--border-color)' }}\r\n placeholder={t('form.fields.businessType')}\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Expected Budget and Timeline */}\r\n <div className=\"grid md:grid-cols-2 gap-6\">\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.expectedBudget') || 'Ngân sách dự kiến'}\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"expectedBudget\"\r\n value={formData.expectedBudget || ''}\r\n onChange={handleInputChange}\r\n className={inputBaseClasses}\r\n style={{ borderColor: 'var(--border-color)' }}\r\n placeholder={t('form.fields.expectedBudget')}\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.expectedTimeline') || 'Thời gian dự kiến'}\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"expectedTimeline\"\r\n value={formData.expectedTimeline || ''}\r\n onChange={handleInputChange}\r\n className={inputBaseClasses}\r\n style={{ borderColor: 'var(--border-color)' }}\r\n placeholder={t('form.fields.expectedTimeline')}\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Request Title */}\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.requestTitle') || 'Tiêu đề yêu cầu'} *\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"requestTitle\"\r\n value={formData.requestTitle || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.requestTitle ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder={t('contact.form.placeholders.subject')}\r\n required\r\n />\r\n {formErrors.requestTitle && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <ThemeIcon name=\"icon-ContactFormAlertCircle\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n {formErrors.requestTitle}\r\n </p>\r\n )}\r\n </div>\r\n\r\n {/* Request Description */}\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.requestDescription') || 'Mô tả yêu cầu'} *\r\n </label>\r\n <textarea\r\n name=\"requestDescription\"\r\n value={formData.requestDescription || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n rows=\"5\"\r\n className={`${inputBaseClasses} resize-none`}\r\n style={{ borderColor: formErrors.requestDescription ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder={t('contact.form.placeholders.message')}\r\n required\r\n />\r\n {formErrors.requestDescription && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <ThemeIcon name=\"icon-ContactFormAlertCircle\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n {formErrors.requestDescription}\r\n </p>\r\n )}\r\n </div>\r\n\r\n {/* Submit Buttons */}\r\n <div className=\"flex items-center space-x-4\">\r\n <button\r\n type=\"submit\"\r\n disabled={isSubmitting}\r\n 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\"\r\n >\r\n {isSubmitting ? (\r\n <>\r\n <ThemeIcon name=\"icon-ContactFormLoader2\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-muted\"/>\r\n {t('form.submitting') || 'Đang gửi...'}\r\n </>\r\n ) : (\r\n <>\r\n <ThemeIcon name=\"icon-contactFormSend\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n {t('form.submit') || 'Gửi yêu cầu'}\r\n </>\r\n )}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default ContactFormSection;","import React from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from '../../contexts/ThemeIcon';\r\nconst ContactInfoSection = ({ data, t, isDarkMode, section }) => {\r\n const contactData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data)\r\n ?.map((item) => item.data)\r\n || [];\r\n\r\n const sectionTitle = section?.title || '...';\r\n\r\n if (!contactData.length) return null;\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Section Title */}\r\n <div className=\"text-center mb-12\">\r\n <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)' }}>\r\n <ThemeIcon name=\"icon-contactInfoUser\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n <span className=\"text-main\">{sectionTitle}</span>\r\n </div>\r\n </div>\r\n\r\n {/* Contact Cards Grid */}\r\n <div className=\"grid md:grid-cols-2 lg:grid-cols-3 gap-8\">\r\n {contactData.map((contact, index) => (\r\n <div key={contact.id || index} className=\"card\">\r\n {/* Avatar & Name */}\r\n <div className=\"text-center mb-6\">\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '5rem',\r\n height: '5rem',\r\n borderRadius: '9999px',\r\n margin: '0 auto 1rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }}>\r\n <ThemeIcon name=\"icon-contactInfoUser\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n </div>\r\n \r\n <h3 className=\"card-title text-subtitle mb-2\">\r\n {contact.name}\r\n </h3>\r\n \r\n <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)' }}>\r\n {contact.position}\r\n </span>\r\n </div>\r\n\r\n {/* Contact Information */}\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\r\n {/* Phone */}\r\n <a\r\n href={`tel:${contact.phone}`}\r\n className=\"card-link\"\r\n style={{\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)',\r\n transition: 'all 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n >\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <ThemeIcon name=\"icon-contactInfoPhone\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n {t('contact.info.phone') || 'Điện thoại'}\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.phone}\r\n </p>\r\n </div>\r\n </a>\r\n\r\n {/* Email */}\r\n <a\r\n href={`mailto:${contact.email}`}\r\n className=\"card-link\"\r\n style={{\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)',\r\n transition: 'all 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n >\r\n <div className=\"bg-gradient-accent\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <ThemeIcon name=\"icon-contactInfoEmail\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n Email\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.email}\r\n </p>\r\n </div>\r\n </a>\r\n\r\n {/* Working Hours */}\r\n {contact.workingHours && (\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)'\r\n }}>\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <ThemeIcon name=\"icon-contactInfoClock\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-muted\"/>\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n {t('contact.info.workingHours') || 'Giờ làm việc'}\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.workingHours || t('contact.info.defaultWorkingHours') || 'T2-T6: 8:00-18:00'}\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default ContactInfoSection;","import React, { useState, useEffect } from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from '../../contexts/ThemeIcon';\r\nconst ContactListAutoSection = ({ data, t, isDarkMode, getContactList, section }) => {\r\n const [contacts, setContacts] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState(null);\r\n const sectionTitle = section?.title || '...';\r\n\r\n useEffect(() => {\r\n loadContacts();\r\n }, []);\r\n\r\n const loadContacts = async () => {\r\n try {\r\n setLoading(true);\r\n const result = await getContactList();\r\n if (result.success) {\r\n setContacts(result.data || []);\r\n } else {\r\n setError(result.error);\r\n }\r\n } catch (err) {\r\n console.error('Error loading contacts:', err);\r\n setError(t('contactList.error.loadData') || 'Có lỗi xảy ra khi tải danh sách liên hệ');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n // Loading State\r\n if (loading) {\r\n return (\r\n <div className=\"py-16 px-5 text-center bg-body\">\r\n <div className=\"inline-block w-10 h-10 border-4 border-color rounded-full animate-spin\" style={{ borderTopColor: 'var(--brand-primary)' }}></div>\r\n <p className=\"mt-4 text-muted\">\r\n {t('contactList.status.loading') || 'Đang tải danh sách liên hệ...'}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n // Error State\r\n if (error) {\r\n return (\r\n <div className=\"py-16 px-5 text-center bg-body\">\r\n <div className=\"text-base mb-2\" style={{ color: '#ef4444' }}>\r\n ⚠️ {t('contactList.error.title') || 'Lỗi tải dữ liệu'}\r\n </div>\r\n <p className=\"text-muted\">{error}</p>\r\n </div>\r\n );\r\n }\r\n\r\n // Empty State\r\n if (!contacts || contacts.length === 0) {\r\n return (\r\n <div className=\"py-16 px-5 text-center bg-body\">\r\n <div className=\"text-5xl mb-5\">📞</div>\r\n <h3 className=\"text-muted mb-2\">\r\n {t('contactList.status.noData.title') || 'Chưa có thông tin liên hệ'}\r\n </h3>\r\n <p className=\"text-muted opacity-75\">\r\n {t('contactList.status.noData.description') || 'Danh sách liên hệ sẽ hiển thị tại đây'}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n // Main Content\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Section Title */}\r\n <div className=\"text-center mb-12\">\r\n <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)' }}>\r\n <ThemeIcon name=\"icon-contactInfoUser\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n <span className=\"text-main\">{sectionTitle}</span>\r\n </div>\r\n </div>\r\n\r\n {/* Contact Cards Grid */}\r\n <div className=\"grid md:grid-cols-2 lg:grid-cols-3 gap-8\">\r\n {contacts.map((contact, index) => (\r\n <ContactCard key={contact.id || index} contact={contact} t={t} isDarkMode={isDarkMode} />\r\n ))}\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nconst ContactCard = ({ contact, t, isDarkMode }) => {\r\n return (\r\n <div className=\"card\">\r\n {/* Avatar & Name */}\r\n <div className=\"text-center mb-6\">\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '5rem',\r\n height: '5rem',\r\n borderRadius: '9999px',\r\n margin: '0 auto 1rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }}>\r\n <ThemeIcon name=\"icon-contactInfoUser\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n </div>\r\n \r\n <h3 className=\"card-title text-subtitle mb-2\">\r\n {contact.name || t('contactList.card.noName') || 'Không có tên'}\r\n </h3>\r\n \r\n <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)' }}>\r\n {contact.position || t('contactList.card.noPosition') || 'Chưa có chức vụ'}\r\n </span>\r\n </div>\r\n\r\n {/* Contact Information */}\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\r\n {/* Phone */}\r\n {contact.phone && (\r\n <a\r\n href={`tel:${contact.phone}`}\r\n className=\"card-link\"\r\n style={{\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)',\r\n transition: 'all 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n >\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <ThemeIcon name=\"icon-contactInfoPhone\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n {t('contactList.card.phone') || 'Điện thoại'}\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.phone}\r\n </p>\r\n </div>\r\n </a>\r\n )}\r\n\r\n {/* Email */}\r\n {contact.email && (\r\n <a\r\n href={`mailto:${contact.email}`}\r\n className=\"card-link\"\r\n style={{\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)',\r\n transition: 'all 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n >\r\n <div className=\"bg-gradient-accent\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <ThemeIcon name=\"icon-contactInfoEmail\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n Email\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.email}\r\n </p>\r\n </div>\r\n </a>\r\n )}\r\n\r\n {/* Working Hours */}\r\n {contact.workingHours && (\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)'\r\n }}>\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <ThemeIcon name=\"icon-contactInfoClock\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-muted\"/>\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n {t('contactList.card.workingHours') || 'Giờ làm việc'}\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.workingHours || t('contactList.card.defaultWorkingHours') || 'T2-T6: 8:00-18:00'}\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ContactListAutoSection;","import React, { useState, useEffect } from \"react\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback, section }) => {\r\n const [feedbacks, setFeedbacks] = useState([]);\r\n const [currentIndex, setCurrentIndex] = useState(0);\r\n const sectionTitle = section?.title || '...';\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n const res = await loadCustomerFeedback();\r\n if (res.success) {\r\n setFeedbacks(Array.isArray(res.data) ? res.data : []);\r\n } else {\r\n setFeedbacks([]);\r\n }\r\n };\r\n fetchData();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (feedbacks.length > 1) {\r\n const interval = setInterval(() => {\r\n setCurrentIndex((prev) => (prev + 1) % feedbacks.length);\r\n }, 5000);\r\n return () => clearInterval(interval);\r\n }\r\n }, [feedbacks.length]);\r\n\r\n useEffect(() => {\r\n if (currentIndex >= feedbacks.length) {\r\n setCurrentIndex(0);\r\n }\r\n }, [feedbacks.length, currentIndex]);\r\n\r\n if (!feedbacks.length) {\r\n return (\r\n <section\r\n className={`py-20 transition-colors duration-200 ${isDarkMode ? \"bg-gray-700\" : \"bg-gray-50\"\r\n }`}\r\n >\r\n <div className=\"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center\">\r\n <div\r\n className={`w-24 h-24 mx-auto mb-6 rounded-full flex items-center justify-center ${isDarkMode ? \"bg-gray-800\" : \"bg-gray-200\"\r\n }`}\r\n >\r\n <svg\r\n className={`w-12 h-12 ${isDarkMode ? \"text-gray-600\" : \"text-gray-400\"\r\n }`}\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\"\r\n />\r\n </svg>\r\n </div>\r\n <h3\r\n className={`text-xl font-semibold mb-4 ${isDarkMode ? \"text-white\" : \"text-gray-900\"\r\n }`}\r\n >\r\n {t(\"customerFeedback.emptyTitle\") || \"Chưa có phản hồi từ khách hàng\"}\r\n </h3>\r\n <p\r\n className={`text-lg ${isDarkMode ? \"text-gray-300\" : \"text-gray-600\"\r\n }`}\r\n >\r\n {t(\"customerFeedback.emptyDescription\") ||\r\n \"Các phản hồi từ khách hàng sẽ được hiển thị tại đây.\"}\r\n </p>\r\n </div>\r\n </section>\r\n );\r\n }\r\n\r\n const currentFeedback = feedbacks[currentIndex];\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center\">\r\n <div\r\n 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 \"\r\n >\r\n <ThemeIcon name=\"icon-testimonials\" folder=\"TestimonialsSection\" className=\"w-4 h-4 icon-gradient\"/> {sectionTitle}\r\n </div>\r\n\r\n\r\n <div className=\"relative\">\r\n <div\r\n key={currentIndex}\r\n className=\"card\"\r\n >\r\n <blockquote className=\"card-text text-lg lg:text-xl italic mb-6 leading-relaxed\">\r\n \"{currentFeedback.content}\"\r\n </blockquote>\r\n\r\n <div className=\"flex items-center justify-center space-x-4\">\r\n <div className=\"text-3xl\"><ThemeIcon name=\"icon-testimonialsUser\" folder=\"TestimonialsSection\" className=\"w-4 h-4 icon-gradient\"/></div>\r\n <div className=\"text-left\">\r\n <div className=\"card-title text-base mb-1\">\r\n {currentFeedback.customerName}\r\n </div>\r\n\r\n <div className=\"card-link text-sm\">\r\n {currentFeedback.customerTitle}\r\n </div>\r\n\r\n {currentFeedback.customerCompany && (\r\n <div className=\"card-text text-xs mt-1\">\r\n {currentFeedback.customerCompany}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {feedbacks.length > 1 && (\r\n <div className=\"flex justify-center space-x-2 mt-4\">\r\n {feedbacks.map((_, index) => (\r\n <button\r\n key={index}\r\n onClick={() => setCurrentIndex(index)}\r\n aria-label={\r\n t(\"customerFeedback.switchToFeedback\", { number: index + 1 }) ||\r\n `Chuyển đến phản hồi ${index + 1}`\r\n }\r\n className={`\r\n w-2.5 h-2.5 rounded-full transition-all duration-300\r\n ${index === currentIndex\r\n ? \"bg-brand-secondary\"\r\n : \"bg-surface hover:bg-brand-primary\"\r\n }\r\n `}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n</div>\r\n\r\n </div>\r\n\r\n <style jsx>{`\r\n .animate-fadeIn {\r\n animation: fadeIn 0.5s ease-in-out;\r\n }\r\n @keyframes fadeIn {\r\n from {\r\n opacity: 0;\r\n transform: translateY(10px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n }\r\n `}</style>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default CustomerFeedbackAutoSection;","import React, { useState, useEffect } from 'react';\r\n\r\nconst ProductListSection = ({ data, t, isDarkMode, getProductList }) => {\r\n const [products, setProducts] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState(null);\r\n\r\n useEffect(() => {\r\n const fetchProducts = async () => {\r\n try {\r\n setLoading(true);\r\n const result = await getProductList();\r\n\r\n if (result.success) {\r\n setProducts(result.data || []);\r\n } else {\r\n setError(result.error || t('productList.errors.loadFailed'));\r\n }\r\n } catch (err) {\r\n console.error('Error fetching products:', err);\r\n setError(t('productList.errors.loadError'));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n fetchProducts();\r\n }, [t]);\r\n\r\n if (loading) {\r\n return (\r\n <div className={`py-16 px-5 text-center ${isDarkMode ? 'bg-gray-900' : 'bg-gray-50'}`}>\r\n <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`}></div>\r\n <p className={`mt-2.5 text-base ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n {t('productList.loading')}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <div className={`py-16 px-5 text-center ${isDarkMode ? 'bg-gray-900' : 'bg-gray-50'}`}>\r\n <div className=\"text-red-500 text-5xl mb-4\">\r\n ⚠️\r\n </div>\r\n <p className=\"text-red-500 text-base m-0\">\r\n {error}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n if (!products || products.length === 0) {\r\n return (\r\n <div className={`py-16 px-5 text-center ${isDarkMode ? 'bg-gray-900' : 'bg-gray-50'}`}>\r\n <div className={`text-5xl mb-4 ${isDarkMode ? 'text-gray-400' : 'text-gray-500'}`}>\r\n 📦\r\n </div>\r\n <p className={`text-base m-0 ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n {t('productList.noProducts')}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={`py-16 px-5 transition-colors duration-300 ${isDarkMode ? 'bg-gray-900' : 'bg-gray-50'}`}>\r\n <div className=\"max-w-6xl mx-auto\">\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-8 items-start\">\r\n {products.map((product, index) => (\r\n <ProductCard key={product.id || index} product={product} t={t} isDarkMode={isDarkMode} />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst ProductCard = ({ product, t, isDarkMode }) => {\r\n const [activeTab, setActiveTab] = useState('overview');\r\n const [isHovered, setIsHovered] = useState(false);\r\n\r\n const mainImage = product.images?.find(img => img.isMain)?.imageUrl ||\r\n product.images?.[0]?.imageUrl ||\r\n '/placeholder-product.png';\r\n\r\n const tabs = [\r\n { id: 'overview', label: t('productCard.tabs.overview'), count: null },\r\n { id: 'features', label: t('productCard.tabs.features'), count: product.features?.length || 0 },\r\n { id: 'contacts', label: t('productCard.tabs.contacts'), count: product.contacts?.length || 0 },\r\n { id: 'downloads', label: t('productCard.tabs.downloads'), count: product.productDownloads?.length || 0 }\r\n ];\r\n\r\n const renderOverview = () => (\r\n <div className=\"p-5\">\r\n <div\r\n className={`text-sm leading-relaxed ${isDarkMode ? 'text-gray-300' : 'text-gray-700'}`}\r\n dangerouslySetInnerHTML={{\r\n __html: product.overviewContent || product.description || t('productCard.noOverview')\r\n }}\r\n />\r\n </div>\r\n );\r\n\r\n const renderFeatures = () => {\r\n const features = product.features || [];\r\n\r\n if (features.length === 0) {\r\n return (\r\n <div className={`p-5 text-center ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n <p className=\"m-0\">{t('productCard.noFeatures')}</p>\r\n </div>\r\n );\r\n }\r\n\r\n const sortedFeatures = [...features].sort((a, b) => (a.order || 0) - (b.order || 0));\r\n\r\n return (\r\n <div className=\"p-5\">\r\n <div className=\"flex flex-col gap-4\">\r\n {sortedFeatures.map((feature, index) => (\r\n <div\r\n key={index}\r\n className={`p-4 rounded-lg border-l-4 border-blue-500 ${isDarkMode ? 'bg-gray-700' : 'bg-gray-100'}`}\r\n >\r\n <h4 className={`m-0 mb-2 text-sm font-bold ${isDarkMode ? 'text-white' : 'text-gray-900'}`}>\r\n {feature.title}\r\n </h4>\r\n <p className={`m-0 text-xs leading-relaxed ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n {feature.description}\r\n </p>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderContacts = () => {\r\n const contacts = product.contacts || [];\r\n\r\n if (contacts.length === 0) {\r\n return (\r\n <div className={`p-5 text-center ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n <p className=\"m-0\">{t('productCard.noContacts')}</p>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"p-5\">\r\n <div className=\"flex flex-col gap-4\">\r\n {contacts.map((contact, index) => (\r\n <div\r\n key={contact.id || index}\r\n className={`p-4 rounded-lg border ${isDarkMode ? 'bg-gray-700 border-gray-600' : 'bg-gray-100 border-gray-200'}`}\r\n >\r\n <div className=\"flex items-center mb-2\">\r\n <div className={`w-10 h-10 rounded-full flex items-center justify-center mr-3 ${isDarkMode ? 'bg-blue-600' : 'bg-blue-500'}`}>\r\n <span className=\"text-white font-bold text-base\">\r\n {contact.name?.charAt(0)?.toUpperCase() || '?'}\r\n </span>\r\n </div>\r\n <div>\r\n <h4 className={`m-0 mb-0.5 text-sm font-bold ${isDarkMode ? 'text-white' : 'text-gray-900'}`}>\r\n {contact.name}\r\n </h4>\r\n <p className={`m-0 text-xs ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n {contact.position}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex flex-col gap-1\">\r\n {contact.phone && (\r\n <div className=\"flex items-center gap-2\">\r\n <span className={`text-sm ${isDarkMode ? 'text-blue-400' : 'text-blue-500'}`}>📞</span>\r\n <a\r\n href={`tel:${contact.phone}`}\r\n className={`text-xs no-underline hover:underline ${isDarkMode ? 'text-blue-400' : 'text-blue-500'}`}\r\n >\r\n {contact.phone}\r\n </a>\r\n </div>\r\n )}\r\n {contact.email && (\r\n <div className=\"flex items-center gap-2\">\r\n <span className={`text-sm ${isDarkMode ? 'text-blue-400' : 'text-blue-500'}`}>✉️</span>\r\n <a\r\n href={`mailto:${contact.email}`}\r\n className={`text-xs no-underline hover:underline ${isDarkMode ? 'text-blue-400' : 'text-blue-500'}`}\r\n >\r\n {contact.email}\r\n </a>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderDownloads = () => {\r\n const downloads = product.productDownloads || [];\r\n\r\n if (downloads.length === 0) {\r\n return (\r\n <div className={`p-5 text-center ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n <p className=\"m-0\">{t('productCard.noDownloads')}</p>\r\n </div>\r\n );\r\n }\r\n\r\n const handleDownload = (fileUrl, title) => {\r\n try {\r\n const link = document.createElement('a');\r\n link.href = fileUrl;\r\n link.download = title || 'download';\r\n link.target = '_blank';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n } catch (error) {\r\n console.error('Download error:', error);\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"p-5\">\r\n <div className=\"flex flex-col gap-3\">\r\n {downloads.map((download, index) => (\r\n <div\r\n key={index}\r\n onClick={() => handleDownload(download.fileUrl, download.title)}\r\n className={`p-4 rounded-lg border cursor-pointer flex items-center gap-3 transition-all duration-200 hover:translate-x-1 ${isDarkMode\r\n ? 'bg-gray-700 border-gray-600 hover:bg-gray-600'\r\n : 'bg-gray-100 border-gray-200 hover:bg-gray-200'\r\n }`}\r\n >\r\n <div className={`w-10 h-10 rounded-lg flex items-center justify-center flex-shrink-0 ${isDarkMode ? 'bg-blue-600' : 'bg-blue-500'}`}>\r\n <span className=\"text-white text-lg\">📄</span>\r\n </div>\r\n\r\n <div className=\"flex-1 min-w-0\">\r\n <h4 className={`m-0 mb-1 text-sm font-bold overflow-hidden text-ellipsis whitespace-nowrap ${isDarkMode ? 'text-white' : 'text-gray-900'}`}>\r\n {download.title}\r\n </h4>\r\n <p className={`m-0 text-xs ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n {t('productCard.downloadClick')}\r\n </p>\r\n </div>\r\n\r\n <div className={`flex-shrink-0 text-base ${isDarkMode ? 'text-blue-400' : 'text-blue-500'}`}>\r\n ⬇️\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderTabContent = () => {\r\n switch (activeTab) {\r\n case 'overview':\r\n return renderOverview();\r\n case 'features':\r\n return renderFeatures();\r\n case 'contacts':\r\n return renderContacts();\r\n case 'downloads':\r\n return renderDownloads();\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n className={`\r\n rounded-xl overflow-hidden cursor-pointer transition-all duration-300 border\r\n ${isDarkMode\r\n ? 'bg-gray-800 border-gray-700'\r\n : 'bg-white border-gray-200'\r\n }\r\n ${isHovered\r\n ? `shadow-xl -translate-y-2 ${isDarkMode ? 'shadow-gray-900/40' : 'shadow-gray-500/20'}`\r\n : `shadow-lg ${isDarkMode ? 'shadow-gray-900/20' : 'shadow-gray-500/10'}`\r\n }\r\n `}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n >\r\n <div\r\n className={`relative h-48 bg-cover bg-center ${isDarkMode ? 'bg-gray-700' : 'bg-gray-200'}`}\r\n style={{\r\n backgroundImage: `url(${mainImage})`,\r\n }}\r\n >\r\n <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\">\r\n <h3 className=\"m-0 mb-2 text-lg font-bold\">\r\n {product.name}\r\n </h3>\r\n <p className=\"m-0 text-sm opacity-90\">\r\n {product.description}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className={`border-b ${isDarkMode ? 'border-gray-600' : 'border-gray-200'}`}>\r\n <div className=\"flex overflow-x-auto\">\r\n {tabs.map(tab => (\r\n <button\r\n key={tab.id}\r\n onClick={() => setActiveTab(tab.id)}\r\n className={`\r\n 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\r\n ${activeTab === tab.id\r\n ? `${isDarkMode ? 'bg-blue-600' : 'bg-blue-500'} text-white font-bold`\r\n : `bg-transparent ${isDarkMode ? 'text-gray-400 hover:bg-gray-700' : 'text-gray-600 hover:bg-gray-100'}`\r\n }\r\n `}\r\n >\r\n <span>{tab.label}</span>\r\n {tab.count !== null && (\r\n <span className={`\r\n text-xs py-0.5 px-1.5 rounded-full min-w-[18px] text-center\r\n ${activeTab === tab.id\r\n ? 'bg-white/20 text-white'\r\n : `${isDarkMode ? 'bg-gray-600 text-gray-400' : 'bg-gray-200 text-gray-600'}`\r\n }\r\n `}>\r\n {tab.count}\r\n </span>\r\n )}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <div className=\"min-h-[200px] max-h-[300px] overflow-y-auto\">\r\n {renderTabContent()}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ProductListSection;","import React from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\r\nconst TextWithTitleSection = ({ section, data, isDarkMode }) => {\r\n\r\n const textItems = data?.sectionDataBindingItems || [];\r\n\r\n // Item đầu tiên là title, các item còn lại là description\r\n const title = textItems[0]?.value || '';\r\n const descriptions = textItems.slice(1);\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-6xl mx-auto\">\r\n {title && (\r\n <h2 className=\"text-title font-black mb-4 leading-tight text-left text-main\">\r\n {title}\r\n </h2>\r\n )}\r\n\r\n {descriptions.map((item, index) => (\r\n <div\r\n key={item.id || index}\r\n className={`text-body leading-relaxed text-left font-normal text-muted ${\r\n index < descriptions.length - 1 ? 'mb-4' : ''\r\n }`}\r\n >\r\n {item.value}\r\n </div>\r\n ))}\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default TextWithTitleSection;","import React from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\r\nconst TextSection = ({ data, isDarkMode }) => {\r\n const textItems = data?.sectionDataBindingItems || [];\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-3xl mx-auto\">\r\n {textItems.map((item, index) => (\r\n <div\r\n key={item.id || index}\r\n className=\"mb-5 text-subtitle font-black leading-snug text-left text-main\"\r\n >\r\n {item.value}\r\n </div>\r\n ))}\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default TextSection;","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M2 4v16\", key: \"vw9hq8\" }],\n [\"path\", { d: \"M2 8h18a2 2 0 0 1 2 2v10\", key: \"1dgv2r\" }],\n [\"path\", { d: \"M2 17h20\", key: \"18nfp3\" }],\n [\"path\", { d: \"M6 8v9\", key: \"1yriud\" }]\n];\nconst Bed = createLucideIcon(\"bed\", __iconNode);\n\nexport { __iconNode, Bed as default };\n//# sourceMappingURL=bed.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\", key: \"jecpp\" }],\n [\"rect\", { width: \"20\", height: \"14\", x: \"2\", y: \"6\", rx: \"2\", key: \"i6l2r4\" }]\n];\nconst Briefcase = createLucideIcon(\"briefcase\", __iconNode);\n\nexport { __iconNode, Briefcase as default };\n//# sourceMappingURL=briefcase.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z\", key: \"1b4qmf\" }],\n [\"path\", { d: \"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2\", key: \"i71pzd\" }],\n [\"path\", { d: \"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2\", key: \"10jefs\" }],\n [\"path\", { d: \"M10 6h4\", key: \"1itunk\" }],\n [\"path\", { d: \"M10 10h4\", key: \"tcdvrf\" }],\n [\"path\", { d: \"M10 14h4\", key: \"kelpxr\" }],\n [\"path\", { d: \"M10 18h4\", key: \"1ulq68\" }]\n];\nconst Building2 = createLucideIcon(\"building-2\", __iconNode);\n\nexport { __iconNode, Building2 as default };\n//# sourceMappingURL=building-2.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"16\", height: \"20\", x: \"4\", y: \"2\", rx: \"2\", ry: \"2\", key: \"76otgf\" }],\n [\"path\", { d: \"M9 22v-4h6v4\", key: \"r93iot\" }],\n [\"path\", { d: \"M8 6h.01\", key: \"1dz90k\" }],\n [\"path\", { d: \"M16 6h.01\", key: \"1x0f13\" }],\n [\"path\", { d: \"M12 6h.01\", key: \"1vi96p\" }],\n [\"path\", { d: \"M12 10h.01\", key: \"1nrarc\" }],\n [\"path\", { d: \"M12 14h.01\", key: \"1etili\" }],\n [\"path\", { d: \"M16 10h.01\", key: \"1m94wz\" }],\n [\"path\", { d: \"M16 14h.01\", key: \"1gbofw\" }],\n [\"path\", { d: \"M8 10h.01\", key: \"19clt8\" }],\n [\"path\", { d: \"M8 14h.01\", key: \"6423bh\" }]\n];\nconst Building = createLucideIcon(\"building\", __iconNode);\n\nexport { __iconNode, Building as default };\n//# sourceMappingURL=building.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"16\", height: \"20\", x: \"4\", y: \"2\", rx: \"2\", key: \"1nb95v\" }],\n [\"line\", { x1: \"8\", x2: \"16\", y1: \"6\", y2: \"6\", key: \"x4nwl0\" }],\n [\"line\", { x1: \"16\", x2: \"16\", y1: \"14\", y2: \"18\", key: \"wjye3r\" }],\n [\"path\", { d: \"M16 10h.01\", key: \"1m94wz\" }],\n [\"path\", { d: \"M12 10h.01\", key: \"1nrarc\" }],\n [\"path\", { d: \"M8 10h.01\", key: \"19clt8\" }],\n [\"path\", { d: \"M12 14h.01\", key: \"1etili\" }],\n [\"path\", { d: \"M8 14h.01\", key: \"6423bh\" }],\n [\"path\", { d: \"M12 18h.01\", key: \"mhygvu\" }],\n [\"path\", { d: \"M8 18h.01\", key: \"lrp35t\" }]\n];\nconst Calculator = createLucideIcon(\"calculator\", __iconNode);\n\nexport { __iconNode, Calculator as default };\n//# sourceMappingURL=calculator.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z\", key: \"p7xjir\" }]\n];\nconst Cloud = createLucideIcon(\"cloud\", __iconNode);\n\nexport { __iconNode, Cloud as default };\n//# sourceMappingURL=cloud.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"ellipse\", { cx: \"12\", cy: \"5\", rx: \"9\", ry: \"3\", key: \"msslwz\" }],\n [\"path\", { d: \"M3 5V19A9 3 0 0 0 21 19V5\", key: \"1wlel7\" }],\n [\"path\", { d: \"M3 12A9 3 0 0 0 21 12\", key: \"mv7ke4\" }]\n];\nconst Database = createLucideIcon(\"database\", __iconNode);\n\nexport { __iconNode, Database as default };\n//# sourceMappingURL=database.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 16h.01\", key: \"1drbdi\" }],\n [\"path\", { d: \"M16 16h.01\", key: \"1f9h7w\" }],\n [\n \"path\",\n {\n 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\",\n key: \"1iv0i2\"\n }\n ],\n [\"path\", { d: \"M8 16h.01\", key: \"18s6g9\" }]\n];\nconst Factory = createLucideIcon(\"factory\", __iconNode);\n\nexport { __iconNode, Factory as default };\n//# sourceMappingURL=factory.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n];\nconst FileText = createLucideIcon(\"file-text\", __iconNode);\n\nexport { __iconNode, FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\", key: \"13o1zl\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }]\n];\nconst Globe = createLucideIcon(\"globe\", __iconNode);\n\nexport { __iconNode, Globe as default };\n//# sourceMappingURL=globe.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"j76jl0\"\n }\n ],\n [\"path\", { d: \"M22 10v6\", key: \"1lu8f3\" }],\n [\"path\", { d: \"M6 12.5V16a6 3 0 0 0 12 0v-3.5\", key: \"1r8lef\" }]\n];\nconst GraduationCap = createLucideIcon(\"graduation-cap\", __iconNode);\n\nexport { __iconNode, GraduationCap as default };\n//# sourceMappingURL=graduation-cap.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"mvr1a0\"\n }\n ]\n];\nconst Heart = createLucideIcon(\"heart\", __iconNode);\n\nexport { __iconNode, Heart as default };\n//# sourceMappingURL=heart.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\", key: \"5wwlr5\" }],\n [\n \"path\",\n {\n 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\",\n key: \"1d0kgt\"\n }\n ]\n];\nconst House = createLucideIcon(\"house\", __iconNode);\n\nexport { __iconNode, House as default };\n//# sourceMappingURL=house.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"q8bfy3\"\n }\n ],\n [\"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\" }],\n [\"path\", { d: \"M8 6v8\", key: \"15ugcq\" }]\n];\nconst Megaphone = createLucideIcon(\"megaphone\", __iconNode);\n\nexport { __iconNode, Megaphone as default };\n//# sourceMappingURL=megaphone.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"1a0edw\"\n }\n ],\n [\"path\", { d: \"M12 22V12\", key: \"d0xqtd\" }],\n [\"polyline\", { points: \"3.29 7 12 12 20.71 7\", key: \"ousv84\" }],\n [\"path\", { d: \"m7.5 4.27 9 5.15\", key: \"1c824w\" }]\n];\nconst Package = createLucideIcon(\"package\", __iconNode);\n\nexport { __iconNode, Package as default };\n//# sourceMappingURL=package.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"1v9wt8\"\n }\n ]\n];\nconst Plane = createLucideIcon(\"plane\", __iconNode);\n\nexport { __iconNode, Plane as default };\n//# sourceMappingURL=plane.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"1i5ecw\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Settings = createLucideIcon(\"settings\", __iconNode);\n\nexport { __iconNode, Settings as default };\n//# sourceMappingURL=settings.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"oel41y\"\n }\n ]\n];\nconst Shield = createLucideIcon(\"shield\", __iconNode);\n\nexport { __iconNode, Shield as default };\n//# sourceMappingURL=shield.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"8\", cy: \"21\", r: \"1\", key: \"jimo8o\" }],\n [\"circle\", { cx: \"19\", cy: \"21\", r: \"1\", key: \"13723u\" }],\n [\n \"path\",\n {\n 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\",\n key: \"9zh506\"\n }\n ]\n];\nconst ShoppingCart = createLucideIcon(\"shopping-cart\", __iconNode);\n\nexport { __iconNode, ShoppingCart as default };\n//# sourceMappingURL=shopping-cart.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"14\", height: \"20\", x: \"5\", y: \"2\", rx: \"2\", ry: \"2\", key: \"1yt0o3\" }],\n [\"path\", { d: \"M12 18h.01\", key: \"mhygvu\" }]\n];\nconst Smartphone = createLucideIcon(\"smartphone\", __iconNode);\n\nexport { __iconNode, Smartphone as default };\n//# sourceMappingURL=smartphone.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M16 7h6v6\", key: \"box55l\" }],\n [\"path\", { d: \"m22 7-8.5 8.5-5-5L2 17\", key: \"1t1m79\" }]\n];\nconst TrendingUp = createLucideIcon(\"trending-up\", __iconNode);\n\nexport { __iconNode, TrendingUp as default };\n//# sourceMappingURL=trending-up.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M14 18V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v11a1 1 0 0 0 1 1h2\", key: \"wrbu53\" }],\n [\"path\", { d: \"M15 18H9\", key: \"1lyqi6\" }],\n [\n \"path\",\n {\n 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\",\n key: \"lysw3i\"\n }\n ],\n [\"circle\", { cx: \"17\", cy: \"18\", r: \"2\", key: \"332jqn\" }],\n [\"circle\", { cx: \"7\", cy: \"18\", r: \"2\", key: \"19iecd\" }]\n];\nconst Truck = createLucideIcon(\"truck\", __iconNode);\n\nexport { __iconNode, Truck as default };\n//# sourceMappingURL=truck.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\", key: \"1yyitq\" }],\n [\"path\", { d: \"M16 3.128a4 4 0 0 1 0 7.744\", key: \"16gr8j\" }],\n [\"path\", { d: \"M22 21v-2a4 4 0 0 0-3-3.87\", key: \"kshegd\" }],\n [\"circle\", { cx: \"9\", cy: \"7\", r: \"4\", key: \"nufk8\" }]\n];\nconst Users = createLucideIcon(\"users\", __iconNode);\n\nexport { __iconNode, Users as default };\n//# sourceMappingURL=users.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"1ngwbx\"\n }\n ]\n];\nconst Wrench = createLucideIcon(\"wrench\", __iconNode);\n\nexport { __iconNode, Wrench as default };\n//# sourceMappingURL=wrench.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"1xq2db\"\n }\n ]\n];\nconst Zap = createLucideIcon(\"zap\", __iconNode);\n\nexport { __iconNode, Zap as default };\n//# sourceMappingURL=zap.js.map\n","import React, { useState, useEffect } from 'react';\r\nimport { Calculator, TrendingUp, FileText, Cloud, ShoppingCart, Truck, Bed, Users, Package, Database, Settings, Globe } from 'lucide-react';\r\n\r\nconst DiagramSection = ({ data, t, isDarkMode }) => {\r\n const [mounted, setMounted] = useState(false);\r\n const [isMobile, setIsMobile] = useState(false);\r\n\r\n const safeT = typeof t === 'function' ? t : (key, options) => {\r\n console.warn(`Translation function not provided for key: ${key}`);\r\n return key;\r\n };\r\n\r\n useEffect(() => {\r\n setMounted(true);\r\n \r\n const checkMobile = () => {\r\n setIsMobile(window.innerWidth < 768);\r\n };\r\n \r\n checkMobile();\r\n window.addEventListener('resize', checkMobile);\r\n return () => window.removeEventListener('resize', checkMobile);\r\n }, []);\r\n\r\n const diagramData = data?.sectionDataBindingItems?.[0]?.data;\r\n\r\n if (!diagramData) {\r\n return null;\r\n }\r\n\r\n const diagramName = diagramData.name || safeT('diagram.defaults.name');\r\n const diagramDescription = diagramData.description || safeT('diagram.defaults.description');\r\n const modules = diagramData.diagramChildrenDTOs || [];\r\n\r\n const getIconComponent = (iconName) => {\r\n const icons = {\r\n Calculator, TrendingUp, FileText, Cloud, ShoppingCart, \r\n Truck, Bed, Users, Package, Database, Settings, Globe\r\n };\r\n return icons[iconName] || Settings;\r\n };\r\n\r\n const getColorStyles = (index) => {\r\n const isCyan = index % 2 === 0;\r\n if (isCyan) {\r\n return {\r\n gradient: 'linear-gradient(to right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))',\r\n border: 'var(--gradient-brand-soft-start)',\r\n line: 'var(--gradient-brand-soft-start)',\r\n iconBg: 'var(--gradient-brand-soft-start)',\r\n shadow: 'rgba(59, 130, 246, 0.2)'\r\n };\r\n }\r\n return {\r\n gradient: 'linear-gradient(to right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))',\r\n border: 'var(--gradient-accent-soft-start)',\r\n line: 'var(--gradient-accent-soft-start)',\r\n iconBg: 'var(--gradient-accent-soft-start)',\r\n shadow: 'rgba(139, 92, 246, 0.2)'\r\n };\r\n };\r\n\r\n const calculateAngles = (count) => {\r\n return modules.map((_, index) => {\r\n return (360 / count) * index - 90;\r\n });\r\n };\r\n\r\n const angles = calculateAngles(modules.length);\r\n\r\n // Mobile view - List layout\r\n if (isMobile) {\r\n return (\r\n <div className=\"w-full p-4 relative overflow-hidden bg-section-soft\">\r\n {/* Background effects */}\r\n <div className=\"absolute inset-0 overflow-hidden pointer-events-none opacity-20\">\r\n {[...Array(50)].map((_, i) => (\r\n <div\r\n key={i}\r\n className=\"absolute rounded-full bg-brand-primary\"\r\n style={{\r\n opacity: 0.2,\r\n width: Math.random() * 3 + 1 + 'px',\r\n height: Math.random() * 3 + 1 + 'px',\r\n top: Math.random() * 100 + '%',\r\n left: Math.random() * 100 + '%',\r\n animation: `twinkle ${Math.random() * 3 + 2}s ease-in-out infinite`,\r\n animationDelay: Math.random() * 3 + 's'\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n <style>{`\r\n @keyframes twinkle {\r\n 0%, 100% { opacity: 0.1; transform: scale(1); }\r\n 50% { opacity: 0.3; transform: scale(1.5); }\r\n }\r\n @keyframes slideUp {\r\n from { opacity: 0; transform: translateY(20px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `}</style>\r\n\r\n {/* Header Card */}\r\n <div className=\"mb-6 backdrop-blur-md rounded-2xl border-2 p-6 shadow-2xl text-center bg-gradient-brand border-brand-primary\">\r\n <h2 className=\"text-title text-inverse mb-1 tracking-wide\">{diagramName}</h2>\r\n <p className=\"text-body text-inverse\">{diagramDescription}</p>\r\n </div>\r\n\r\n {/* Modules List */}\r\n <div className=\"space-y-3\">\r\n {modules.map((module, index) => {\r\n const Icon = getIconComponent(module.icon);\r\n const colors = getColorStyles(index);\r\n \r\n return (\r\n <a\r\n key={module.id}\r\n href={module.url || '#'}\r\n className=\"block backdrop-blur-md rounded-2xl border-2 p-4 flex items-center gap-3 shadow-lg active:scale-95 transition-all duration-200\"\r\n style={{\r\n background: colors.gradient,\r\n borderColor: colors.border,\r\n animation: `slideUp 0.5s ease-out ${index * 0.1}s both`\r\n }}\r\n >\r\n <div \r\n className=\"flex-shrink-0 p-3 rounded-xl border\"\r\n style={{ \r\n backgroundColor: `${colors.iconBg}33`,\r\n borderColor: colors.border\r\n }}\r\n >\r\n <Icon className=\"w-6 h-6 text-inverse\" strokeWidth={2} />\r\n </div>\r\n <div className=\"flex-1\">\r\n <span className=\"block text-inverse text-small tracking-wide mb-1\">\r\n {module.name}\r\n </span>\r\n {module.description && (\r\n <span className=\"block text-inverse text-caption\">\r\n {module.description}\r\n </span>\r\n )}\r\n </div>\r\n </a>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Desktop view - Circular layout\r\n return (\r\n <div className=\"section-wrapper w-full py-24 px-4 sm:px-8 relative overflow-visible bg-section-soft\">\r\n {/* Animated background particles */}\r\n <div className=\"absolute inset-0 overflow-hidden pointer-events-none\">\r\n {[...Array(100)].map((_, i) => (\r\n <div\r\n key={i}\r\n className=\"absolute rounded-full bg-brand-primary\"\r\n style={{\r\n opacity: isDarkMode ? 0.2 : 0.1,\r\n width: Math.random() * 4 + 1 + 'px',\r\n height: Math.random() * 4 + 1 + 'px',\r\n top: Math.random() * 100 + '%',\r\n left: Math.random() * 100 + '%',\r\n animation: `twinkle ${Math.random() * 3 + 2}s ease-in-out infinite`,\r\n animationDelay: Math.random() * 3 + 's'\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Animated grid lines */}\r\n <div \r\n className=\"absolute inset-0\"\r\n style={{ opacity: isDarkMode ? 0.1 : 0.05 }}\r\n >\r\n <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <defs>\r\n <pattern id=\"grid\" width=\"40\" height=\"40\" patternUnits=\"userSpaceOnUse\">\r\n <path \r\n d=\"M 40 0 L 0 0 0 40\" \r\n fill=\"none\" \r\n stroke=\"var(--brand-primary)\" \r\n strokeWidth=\"0.5\"\r\n />\r\n </pattern>\r\n </defs>\r\n <rect width=\"100%\" height=\"100%\" fill=\"url(#grid)\" />\r\n </svg>\r\n </div>\r\n\r\n {/* Circuit lines */}\r\n <svg className=\"absolute inset-0 w-full h-full pointer-events-none\" style={{ opacity: isDarkMode ? 0.3 : 0.2 }}>\r\n <line x1=\"0\" y1=\"20%\" x2=\"100%\" y2=\"20%\" stroke=\"url(#grad1)\" strokeWidth=\"1\" strokeDasharray=\"10 5\" className=\"animate-pulse\" />\r\n <line x1=\"0\" y1=\"40%\" x2=\"100%\" y2=\"40%\" stroke=\"url(#grad2)\" strokeWidth=\"1\" strokeDasharray=\"15 8\" className=\"animate-pulse\" style={{ animationDelay: '0.5s' }} />\r\n <line x1=\"0\" y1=\"60%\" x2=\"100%\" y2=\"60%\" stroke=\"url(#grad1)\" strokeWidth=\"1\" strokeDasharray=\"12 6\" className=\"animate-pulse\" style={{ animationDelay: '1s' }} />\r\n <line x1=\"0\" y1=\"80%\" x2=\"100%\" y2=\"80%\" stroke=\"url(#grad2)\" strokeWidth=\"1\" strokeDasharray=\"8 4\" className=\"animate-pulse\" style={{ animationDelay: '1.5s' }} />\r\n \r\n <line x1=\"15%\" y1=\"0\" x2=\"15%\" y2=\"100%\" stroke=\"url(#grad1)\" strokeWidth=\"1\" strokeDasharray=\"10 5\" className=\"animate-pulse\" style={{ animationDelay: '0.3s' }} />\r\n <line x1=\"35%\" y1=\"0\" x2=\"35%\" y2=\"100%\" stroke=\"url(#grad2)\" strokeWidth=\"1\" strokeDasharray=\"15 8\" className=\"animate-pulse\" style={{ animationDelay: '0.8s' }} />\r\n <line x1=\"65%\" y1=\"0\" x2=\"65%\" y2=\"100%\" stroke=\"url(#grad1)\" strokeWidth=\"1\" strokeDasharray=\"12 6\" className=\"animate-pulse\" style={{ animationDelay: '1.3s' }} />\r\n <line x1=\"85%\" y1=\"0\" x2=\"85%\" y2=\"100%\" stroke=\"url(#grad2)\" strokeWidth=\"1\" strokeDasharray=\"8 4\" className=\"animate-pulse\" style={{ animationDelay: '1.8s' }} />\r\n \r\n <circle cx=\"15%\" cy=\"20%\" r=\"3\" fill=\"var(--gradient-brand-soft-start)\" opacity=\"0.6\" className=\"animate-pulse\" />\r\n <circle cx=\"35%\" cy=\"40%\" r=\"3\" fill=\"var(--gradient-accent-soft-start)\" opacity=\"0.6\" className=\"animate-pulse\" style={{ animationDelay: '0.5s' }} />\r\n <circle cx=\"65%\" cy=\"60%\" r=\"3\" fill=\"var(--gradient-brand-soft-start)\" opacity=\"0.6\" className=\"animate-pulse\" style={{ animationDelay: '1s' }} />\r\n <circle cx=\"85%\" cy=\"80%\" r=\"3\" fill=\"var(--gradient-accent-soft-start)\" opacity=\"0.6\" className=\"animate-pulse\" style={{ animationDelay: '1.5s' }} />\r\n \r\n <defs>\r\n <linearGradient id=\"grad1\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\r\n <stop offset=\"0%\" style={{ stopColor: 'var(--gradient-brand-soft-start)', stopOpacity: 0 }} />\r\n <stop offset=\"50%\" style={{ stopColor: 'var(--gradient-brand-soft-start)', stopOpacity: 1 }} />\r\n <stop offset=\"100%\" style={{ stopColor: 'var(--gradient-brand-soft-start)', stopOpacity: 0 }} />\r\n </linearGradient>\r\n <linearGradient id=\"grad2\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\r\n <stop offset=\"0%\" style={{ stopColor: 'var(--gradient-accent-soft-start)', stopOpacity: 0 }} />\r\n <stop offset=\"50%\" style={{ stopColor: 'var(--gradient-accent-soft-start)', stopOpacity: 1 }} />\r\n <stop offset=\"100%\" style={{ stopColor: 'var(--gradient-accent-soft-start)', stopOpacity: 0 }} />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n\r\n <style>{`\r\n @keyframes twinkle {\r\n 0%, 100% { opacity: 0.1; transform: scale(1); }\r\n 50% { opacity: 0.3; transform: scale(1.5); }\r\n }\r\n \r\n @keyframes float {\r\n 0%, 100% { transform: translateY(0px); }\r\n 50% { transform: translateY(-10px); }\r\n }\r\n \r\n @keyframes rotate {\r\n from { transform: rotate(0deg); }\r\n to { transform: rotate(360deg); }\r\n }\r\n \r\n @keyframes pulse-ring {\r\n 0% { transform: scale(0.95); opacity: 1; }\r\n 50% { transform: scale(1); opacity: 0.8; }\r\n 100% { transform: scale(0.95); opacity: 1; }\r\n }\r\n \r\n @keyframes slideIn {\r\n from { \r\n opacity: 0;\r\n transform: translate(-50%, -50%) scale(0.5);\r\n }\r\n to { \r\n opacity: 1;\r\n transform: translate(-50%, -50%) scale(1);\r\n }\r\n }\r\n \r\n .animate-float {\r\n animation: float 3s ease-in-out infinite;\r\n }\r\n \r\n .animate-pulse-ring {\r\n animation: pulse-ring 2s ease-in-out infinite;\r\n }\r\n \r\n .module-card {\r\n animation: slideIn 0.8s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\r\n }\r\n\r\n @media (max-width: 1200px) {\r\n .diagram-container {\r\n transform: scale(0.75);\r\n }\r\n }\r\n\r\n @media (max-width: 900px) {\r\n .diagram-container {\r\n transform: scale(0.6);\r\n }\r\n }\r\n `}</style>\r\n\r\n <div className=\"diagram-container relative w-full max-w-5xl mx-auto h-[800px] flex items-center justify-center transition-transform duration-300\" style={{ paddingTop: '80px', paddingBottom: '80px' }}>\r\n {/* Central Circle */}\r\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\">\r\n <div className=\"absolute inset-0 w-[320px] h-[320px] -translate-x-1/2 -translate-y-1/2 top-1/2 left-1/2\">\r\n <div \r\n className=\"absolute inset-0 rounded-full border-2 animate-pulse-ring\"\r\n style={{ borderColor: 'var(--brand-primary)', opacity: 0.3 }}\r\n ></div>\r\n <div \r\n className=\"absolute inset-4 rounded-full border-2 animate-pulse-ring\" \r\n style={{ \r\n borderColor: 'var(--brand-secondary)',\r\n opacity: 0.3,\r\n animationDelay: '0.5s' \r\n }}\r\n ></div>\r\n </div>\r\n\r\n <div className=\"relative animate-float\">\r\n <div \r\n className=\"w-64 h-64 rounded-full border-8 flex items-center justify-center backdrop-blur-sm shadow-2xl bg-surface\"\r\n style={{\r\n borderColor: 'var(--border-color)'\r\n }}\r\n >\r\n <div className=\"absolute inset-0 rounded-full\" style={{ animation: 'rotate 20s linear infinite' }}>\r\n {[0, 90, 180, 270].map((angle) => (\r\n <div\r\n key={angle}\r\n className=\"absolute w-3 h-3 rounded-full shadow-lg bg-brand-primary\"\r\n style={{\r\n boxShadow: '0 0 10px var(--brand-primary)',\r\n top: '50%',\r\n left: '50%',\r\n transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-125px)`\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n <div \r\n className=\"w-52 h-52 rounded-full flex items-center justify-center shadow-2xl relative overflow-hidden border-2 backdrop-blur-md bg-gradient-brand\"\r\n style={{\r\n borderColor: isDarkMode ? 'var(--gradient-brand-soft-start)' : 'rgba(255, 255, 255, 0.4)'\r\n }}\r\n >\r\n <div className=\"absolute inset-0 bg-gradient-to-br from-white/10 to-transparent\"></div>\r\n <div className=\"text-center relative z-10 px-4\">\r\n <h2 className=\"text-title text-inverse mb-2 tracking-wide\">{diagramName}</h2>\r\n <p className=\"text-small text-inverse\">{diagramDescription}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {modules.map((module, i) => {\r\n const angle = angles[i];\r\n return (\r\n <div\r\n key={`dot-${module.id}`}\r\n className=\"absolute w-4 h-4 rounded-full border-2 shadow-lg animate-pulse bg-muted\"\r\n style={{\r\n borderColor: 'var(--border-color)',\r\n top: '50%',\r\n left: '50%',\r\n transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-132px)`,\r\n animationDelay: `${i * 0.1}s`\r\n }}\r\n />\r\n );\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* Connection lines */}\r\n <svg className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 pointer-events-none\" width=\"1000\" height=\"900\" style={{ overflow: 'visible' }}>\r\n {modules.map((module, index) => {\r\n const colors = getColorStyles(index);\r\n const angle = (angles[index] * Math.PI) / 180;\r\n const circleRadius = 132;\r\n const moduleRadius = 360;\r\n \r\n const startX = Math.cos(angle) * circleRadius;\r\n const startY = Math.sin(angle) * circleRadius;\r\n \r\n const endX = Math.cos(angle) * moduleRadius;\r\n const endY = Math.sin(angle) * moduleRadius;\r\n \r\n return (\r\n <g key={`line-${module.id}`}>\r\n <line\r\n x1={500 + startX}\r\n y1={450 + startY}\r\n x2={500 + endX}\r\n y2={450 + endY}\r\n stroke={colors.line}\r\n strokeWidth=\"2\"\r\n strokeDasharray=\"8 4\"\r\n opacity=\"0.5\"\r\n className=\"animate-pulse\"\r\n style={{ animationDelay: `${index * 0.1}s` }}\r\n />\r\n <line\r\n x1={500 + startX}\r\n y1={450 + startY}\r\n x2={500 + endX}\r\n y2={450 + endY}\r\n stroke={colors.line}\r\n strokeWidth=\"1\"\r\n opacity=\"0.8\"\r\n filter=\"blur(2px)\"\r\n />\r\n </g>\r\n );\r\n })}\r\n </svg>\r\n\r\n {/* Module Cards */}\r\n {modules.map((module, index) => {\r\n const Icon = getIconComponent(module.icon);\r\n const colors = getColorStyles(index);\r\n const angle = (angles[index] * Math.PI) / 180;\r\n const radius = 360;\r\n const x = Math.cos(angle) * radius;\r\n const y = Math.sin(angle) * radius;\r\n \r\n const normalizedAngle = ((angles[index] % 360) + 360) % 360;\r\n const isRightSide = normalizedAngle > 270 || normalizedAngle < 90;\r\n \r\n return (\r\n <a\r\n key={module.id}\r\n href={module.url || '#'}\r\n className={`absolute module-card group ${mounted ? 'opacity-100' : 'opacity-0'}`}\r\n style={{\r\n left: `calc(50% + ${x}px)`,\r\n top: `calc(50% + ${y}px)`,\r\n transform: 'translate(-50%, -50%)',\r\n animationDelay: `${index * 0.1}s`,\r\n animationFillMode: 'both'\r\n }}\r\n >\r\n <div \r\n className={`backdrop-blur-md rounded-full border-2 px-5 py-3 flex items-center gap-3 shadow-xl transition-all duration-300 group-hover:scale-110 group-hover:-translate-y-3 group-hover:shadow-2xl cursor-pointer relative ${isRightSide ? 'flex-row-reverse' : 'flex-row'}`}\r\n style={{\r\n background: colors.gradient,\r\n borderColor: colors.border,\r\n boxShadow: `0 10px 40px ${colors.shadow}`,\r\n width: '240px',\r\n height: '56px',\r\n minWidth: '240px',\r\n maxWidth: '240px',\r\n }}\r\n >\r\n <div className=\"absolute inset-0 rounded-full bg-gradient-to-r from-transparent via-white/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300\"></div>\r\n <div \r\n className=\"absolute inset-0 rounded-full border-2 opacity-0 group-hover:opacity-100 transition-all duration-300 scale-110 blur-sm\"\r\n style={{ borderColor: colors.border }}\r\n ></div>\r\n \r\n <div \r\n className=\"flex-shrink-0 p-2.5 rounded-lg border transition-all duration-300 group-hover:rotate-12 group-hover:scale-125 relative z-10\"\r\n style={{ \r\n backgroundColor: `${colors.iconBg}33`,\r\n borderColor: colors.border\r\n }}\r\n >\r\n <Icon className=\"w-5 h-5 text-inverse\" strokeWidth={2} />\r\n </div>\r\n \r\n <span className={`flex-1 text-inverse text-small tracking-wide overflow-hidden text-ellipsis whitespace-nowrap ${isRightSide ? 'text-right' : 'text-left'} relative z-10 min-w-0`}>\r\n {module.name}\r\n </span>\r\n \r\n <div \r\n className={`absolute bottom-full left-1/2 -translate-x-1/2 mb-3 px-4 py-2 rounded-lg shadow-xl opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none whitespace-nowrap z-50 border max-w-xs ${isDarkMode ? 'bg-surface' : 'bg-body'}`}\r\n style={{\r\n borderColor: 'var(--border-color)',\r\n maxHeight: '120px',\r\n overflowY: 'auto'\r\n }}\r\n >\r\n <div className=\"text-small text-main\">{module.name}</div>\r\n {module.description && (\r\n <div className=\"text-caption text-muted mt-1\">\r\n {module.description}\r\n </div>\r\n )}\r\n <div \r\n className=\"absolute top-full left-1/2 -translate-x-1/2 -mt-px border-4 border-transparent\"\r\n style={{ \r\n borderTopColor: isDarkMode ? 'var(--bg-surface)' : 'var(--bg-body)'\r\n }}\r\n ></div>\r\n </div>\r\n </div>\r\n </a>\r\n );\r\n })}\r\n\r\n {/* Decorative elements */}\r\n <div \r\n className=\"absolute bottom-12 right-12 sm:bottom-16 sm:right-20 opacity-40 text-brand-secondary\" \r\n style={{ animation: 'rotate 10s linear infinite' }}\r\n >\r\n <svg width=\"80\" height=\"80\" viewBox=\"0 0 60 60\">\r\n <path d=\"M30 0 L35 25 L60 30 L35 35 L30 60 L25 35 L0 30 L25 25 Z\" fill=\"currentColor\" />\r\n </svg>\r\n </div>\r\n\r\n <div \r\n className=\"absolute top-12 left-12 w-16 h-16 border-2 rounded-lg animate-pulse border-brand-primary\" \r\n style={{ \r\n opacity: 0.3, \r\n animation: 'rotate 8s linear infinite reverse' \r\n }}\r\n ></div>\r\n <div \r\n className=\"absolute top-20 right-16 w-12 h-12 border-2 rounded-full animate-pulse border-brand-secondary\" \r\n style={{ \r\n opacity: 0.3 \r\n }}\r\n ></div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default DiagramSection;","import React, { useState, useRef, useEffect } from 'react';\r\nimport { Calculator, Shield, Wrench, Factory, Smartphone, Building2, Megaphone, ShoppingCart, Briefcase, Users, Building, GraduationCap, Heart, Zap, Plane, Package, Bed, Home, TrendingUp, FileText, Cloud, Truck, Database, Settings, Globe } from 'lucide-react';\r\n\r\nconst MindMapNode = ({ id, icon: Icon, text, color, position, delay = 0, onDragStart, isDragging, onClick, description, isDarkMode }) => {\r\n const [isHovered, setIsHovered] = useState(false);\r\n const [dragStartPos, setDragStartPos] = useState(null);\r\n const [hasMoved, setHasMoved] = useState(false);\r\n\r\n const getColorStyles = (colorName) => {\r\n const styles = {\r\n blue: {\r\n gradient: 'linear-gradient(to bottom right, var(--brand-primary), var(--brand-primary))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))',\r\n border: 'var(--brand-primary)',\r\n shadowColor: 'var(--brand-primary)'\r\n },\r\n teal: {\r\n gradient: 'linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-brand-strong-start), var(--gradient-brand-strong-end))',\r\n border: 'var(--gradient-brand-soft-start)',\r\n shadowColor: 'var(--gradient-brand-soft-start)'\r\n },\r\n purple: {\r\n gradient: 'linear-gradient(to bottom right, var(--brand-secondary), var(--gradient-accent-soft-start))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))',\r\n border: 'var(--brand-secondary)',\r\n shadowColor: 'var(--brand-secondary)'\r\n },\r\n orange: {\r\n gradient: 'linear-gradient(to bottom right, var(--gradient-accent-strong-start), var(--gradient-accent-strong-end))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))',\r\n border: 'var(--gradient-accent-strong-start)',\r\n shadowColor: 'var(--gradient-accent-strong-start)'\r\n },\r\n cyan: {\r\n gradient: 'linear-gradient(to bottom right, var(--gradient-brand-strong-start), var(--gradient-brand-strong-end))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))',\r\n border: 'var(--gradient-brand-strong-start)',\r\n shadowColor: 'var(--gradient-brand-strong-start)'\r\n },\r\n indigo: {\r\n gradient: 'linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-accent-strong-start), var(--gradient-accent-strong-end))',\r\n border: 'var(--gradient-accent-soft-start)',\r\n shadowColor: 'var(--gradient-accent-soft-start)'\r\n }\r\n };\r\n return styles[colorName] || styles.blue;\r\n };\r\n\r\n const colorStyle = getColorStyles(color);\r\n\r\n const handleMouseDown = (e) => {\r\n setDragStartPos({ x: e.clientX, y: e.clientY });\r\n setHasMoved(false);\r\n onDragStart(id);\r\n e.stopPropagation();\r\n };\r\n\r\n const handleMouseMove = (e) => {\r\n if (dragStartPos) {\r\n const distance = Math.sqrt(\r\n Math.pow(e.clientX - dragStartPos.x, 2) +\r\n Math.pow(e.clientY - dragStartPos.y, 2)\r\n );\r\n if (distance > 5) {\r\n setHasMoved(true);\r\n }\r\n }\r\n };\r\n\r\n const handleMouseUp = (e) => {\r\n if (dragStartPos && !hasMoved) {\r\n if (onClick) {\r\n onClick(id, text);\r\n }\r\n }\r\n setDragStartPos(null);\r\n setHasMoved(false);\r\n };\r\n\r\n const handleTouchStart = (e) => {\r\n const touch = e.touches[0];\r\n setDragStartPos({ x: touch.clientX, y: touch.clientY });\r\n setHasMoved(false);\r\n onDragStart(id);\r\n e.stopPropagation();\r\n };\r\n\r\n const handleTouchMove = (e) => {\r\n if (dragStartPos) {\r\n const touch = e.touches[0];\r\n const distance = Math.sqrt(\r\n Math.pow(touch.clientX - dragStartPos.x, 2) +\r\n Math.pow(touch.clientY - dragStartPos.y, 2)\r\n );\r\n if (distance > 5) {\r\n setHasMoved(true);\r\n }\r\n }\r\n };\r\n\r\n const handleTouchEnd = (e) => {\r\n if (dragStartPos && !hasMoved) {\r\n if (onClick) {\r\n onClick(id, text);\r\n }\r\n }\r\n setDragStartPos(null);\r\n setHasMoved(false);\r\n };\r\n\r\n useEffect(() => {\r\n if (dragStartPos) {\r\n window.addEventListener('mousemove', handleMouseMove);\r\n window.addEventListener('mouseup', handleMouseUp);\r\n return () => {\r\n window.removeEventListener('mousemove', handleMouseMove);\r\n window.removeEventListener('mouseup', handleMouseUp);\r\n };\r\n }\r\n }, [dragStartPos, hasMoved]);\r\n\r\n return (\r\n <div\r\n id={`node-${id}`}\r\n className=\"absolute animate-fadeIn node-element\"\r\n style={{\r\n left: `${position.x}%`,\r\n top: `${position.y}%`,\r\n animationDelay: `${delay}ms`,\r\n zIndex: isDragging ? 50 : 10,\r\n transform: 'translate(-50%, -50%)',\r\n transition: isDragging ? 'none' : 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n onMouseDown={handleMouseDown}\r\n onTouchStart={handleTouchStart}\r\n onTouchMove={handleTouchMove}\r\n onTouchEnd={handleTouchEnd}\r\n >\r\n <div\r\n className=\"backdrop-blur-md px-4 py-2.5 rounded-2xl shadow-2xl border-2 flex items-center gap-2.5 cursor-pointer transform transition-all duration-300\"\r\n style={{\r\n background: (isHovered || isDragging) ? colorStyle.gradientHover : colorStyle.gradient,\r\n borderColor: colorStyle.border,\r\n boxShadow: `0 10px 40px ${colorStyle.shadowColor}`,\r\n transform: (isHovered || isDragging) ? 'scale(1.1)' : 'scale(1)',\r\n filter: (isHovered || isDragging) ? 'brightness(1.1)' : 'brightness(1)',\r\n rotate: isDragging ? '2deg' : '0deg'\r\n }}\r\n >\r\n <Icon className=\"w-4 h-4 flex-shrink-0 text-inverse\" />\r\n <span className=\"text-inverse text-small whitespace-nowrap\">\r\n {text}\r\n </span>\r\n </div>\r\n {isDragging && (\r\n <div\r\n className=\"absolute inset-0 rounded-2xl blur-xl animate-pulse\"\r\n style={{\r\n background: 'rgba(255, 255, 255, 0.1)',\r\n transform: 'scale(1.5)'\r\n }}\r\n />\r\n )}\r\n {(isHovered || isDragging) && description && (\r\n <div\r\n className={`absolute top-full left-1/2 -translate-x-1/2 mt-2 px-3 py-2 text-caption rounded-lg shadow-xl border whitespace-nowrap z-50 max-w-xs ${isDarkMode ? 'bg-surface text-inverse' : 'bg-body text-main'}`}\r\n style={{\r\n borderColor: 'var(--border-color)',\r\n opacity: 0.95\r\n }}\r\n >\r\n {description}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nconst DiagramSection2 = ({ data, t, isDarkMode }) => {\r\n const [centerPosition, setCenterPosition] = useState({ x: 50, y: 50 });\r\n const [isDragging, setIsDragging] = useState(false);\r\n const [draggingNodeId, setDraggingNodeId] = useState(null);\r\n const [lines, setLines] = useState([]);\r\n const [nodes, setNodes] = useState([]);\r\n const containerRef = useRef(null);\r\n const centerRef = useRef(null);\r\n const rafRef = useRef(null);\r\n const nodePositionsCache = useRef({});\r\n\r\n const safeT = typeof t === 'function' ? t : (key, options) => {\r\n console.warn(`Translation function not provided for key: ${key}`);\r\n return key;\r\n };\r\n\r\n const diagramData = data?.sectionDataBindingItems?.[0]?.data;\r\n\r\n const getIconComponent = (iconName) => {\r\n const icons = {\r\n Calculator, Shield, Wrench, Factory, Smartphone, Building2, Megaphone,\r\n ShoppingCart, Briefcase, Users, Building, GraduationCap, Heart, Zap,\r\n Plane, Package, Bed, Home, TrendingUp, FileText, Cloud, Truck, Database,\r\n Settings, Globe\r\n };\r\n return icons[iconName] || Settings;\r\n };\r\n\r\n const getColor = (index) => {\r\n const colors = ['blue', 'teal', 'purple', 'orange', 'cyan', 'indigo'];\r\n return colors[index % colors.length];\r\n };\r\n\r\n useEffect(() => {\r\n if (!diagramData?.diagramChildrenDTOs) return;\r\n\r\n const children = diagramData.diagramChildrenDTOs;\r\n const totalNodes = children.length;\r\n\r\n const generatedNodes = children.map((child, index) => {\r\n const angle = (360 / totalNodes) * index;\r\n const radiusVariation = 30 + (Math.random() * 20);\r\n const angleRad = (angle * Math.PI) / 180;\r\n\r\n let x = 50 + Math.cos(angleRad) * radiusVariation;\r\n let y = 50 + Math.sin(angleRad) * radiusVariation;\r\n\r\n x += (Math.random() - 0.5) * 10;\r\n y += (Math.random() - 0.5) * 10;\r\n\r\n x = Math.max(10, Math.min(90, x));\r\n y = Math.max(10, Math.min(90, y));\r\n\r\n return {\r\n id: child.id,\r\n x,\r\n y,\r\n icon: getIconComponent(child.icon),\r\n text: child.name,\r\n description: child.description,\r\n url: child.url,\r\n color: getColor(index),\r\n delay: index * 100\r\n };\r\n });\r\n\r\n setNodes(generatedNodes);\r\n }, [diagramData]);\r\n\r\n const calculatePositions = () => {\r\n if (!containerRef.current || !centerRef.current) return;\r\n\r\n const container = containerRef.current;\r\n const containerRect = container.getBoundingClientRect();\r\n const centerElement = centerRef.current;\r\n const centerRect = centerElement.getBoundingClientRect();\r\n\r\n const centerX = centerRect.left + centerRect.width / 2 - containerRect.left;\r\n const centerY = centerRect.top + centerRect.height / 2 - containerRect.top;\r\n\r\n const newLines = [];\r\n\r\n nodes.forEach(node => {\r\n const nodeElement = document.getElementById(`node-${node.id}`);\r\n if (!nodeElement) return;\r\n\r\n const nodeRect = nodeElement.getBoundingClientRect();\r\n const nodeX = nodeRect.left + nodeRect.width / 2 - containerRect.left;\r\n const nodeY = nodeRect.top + nodeRect.height / 2 - containerRect.top;\r\n\r\n const cachedPos = nodePositionsCache.current[node.id] || { x: nodeX, y: nodeY };\r\n const smoothX = cachedPos.x + (nodeX - cachedPos.x) * 0.15;\r\n const smoothY = cachedPos.y + (nodeY - cachedPos.y) * 0.15;\r\n\r\n nodePositionsCache.current[node.id] = { x: smoothX, y: smoothY };\r\n\r\n const dx = centerX - smoothX;\r\n const dy = centerY - smoothY;\r\n\r\n const controlX1 = smoothX + dx * 0.4;\r\n const controlY1 = smoothY;\r\n const controlX2 = smoothX + dx * 0.6;\r\n const controlY2 = centerY;\r\n\r\n const path = `M ${smoothX} ${smoothY} C ${controlX1} ${controlY1}, ${controlX2} ${controlY2}, ${centerX} ${centerY}`;\r\n\r\n newLines.push({ id: node.id, path });\r\n });\r\n\r\n setLines(newLines);\r\n };\r\n\r\n useEffect(() => {\r\n let isRunning = true;\r\n\r\n const updateLoop = () => {\r\n if (isRunning) {\r\n calculatePositions();\r\n rafRef.current = requestAnimationFrame(updateLoop);\r\n }\r\n };\r\n\r\n updateLoop();\r\n\r\n return () => {\r\n isRunning = false;\r\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\r\n };\r\n }, [nodes, centerPosition, isDragging, draggingNodeId]);\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n nodePositionsCache.current = {};\r\n calculatePositions();\r\n };\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, [nodes]);\r\n\r\n const handleNodeClick = (nodeId, nodeName) => {\r\n const node = nodes.find(n => n.id === nodeId);\r\n if (node?.url) {\r\n window.location.href = node.url;\r\n }\r\n };\r\n\r\n const handleNodeDragStart = (nodeId) => setDraggingNodeId(nodeId);\r\n const handleNodeDragEnd = () => setDraggingNodeId(null);\r\n\r\n const handleNodeDrag = (nodeId, newX, newY) => {\r\n setNodes(prevNodes =>\r\n prevNodes.map(node =>\r\n node.id === nodeId ? { ...node, x: newX, y: newY } : node\r\n )\r\n );\r\n };\r\n\r\n const handleMouseDown = (e) => {\r\n setIsDragging(true);\r\n e.preventDefault();\r\n };\r\n\r\n const handleMouseMove = (e) => {\r\n if (!isDragging || !containerRef.current) return;\r\n\r\n const containerRect = containerRef.current.getBoundingClientRect();\r\n const x = ((e.clientX - containerRect.left) / containerRect.width) * 100;\r\n const y = ((e.clientY - containerRect.top) / containerRect.height) * 100;\r\n\r\n setCenterPosition({\r\n x: Math.max(20, Math.min(80, x)),\r\n y: Math.max(20, Math.min(80, y))\r\n });\r\n };\r\n\r\n const handleMouseUp = () => setIsDragging(false);\r\n\r\n useEffect(() => {\r\n if (isDragging) {\r\n document.body.style.cursor = 'grabbing';\r\n window.addEventListener('mousemove', handleMouseMove);\r\n window.addEventListener('mouseup', handleMouseUp);\r\n return () => {\r\n document.body.style.cursor = '';\r\n window.removeEventListener('mousemove', handleMouseMove);\r\n window.removeEventListener('mouseup', handleMouseUp);\r\n };\r\n }\r\n }, [isDragging]);\r\n\r\n useEffect(() => {\r\n if (draggingNodeId === null) return;\r\n\r\n const handleNodeMouseMove = (e) => {\r\n if (!containerRef.current) return;\r\n const containerRect = containerRef.current.getBoundingClientRect();\r\n const x = ((e.clientX - containerRect.left) / containerRect.width) * 100;\r\n const y = ((e.clientY - containerRect.top) / containerRect.height) * 100;\r\n\r\n handleNodeDrag(draggingNodeId,\r\n Math.max(5, Math.min(95, x)),\r\n Math.max(5, Math.min(95, y))\r\n );\r\n };\r\n\r\n const handleNodeTouchMove = (e) => {\r\n if (!containerRef.current) return;\r\n const touch = e.touches[0];\r\n const containerRect = containerRef.current.getBoundingClientRect();\r\n const x = ((touch.clientX - containerRect.left) / containerRect.width) * 100;\r\n const y = ((touch.clientY - containerRect.top) / containerRect.height) * 100;\r\n\r\n handleNodeDrag(draggingNodeId,\r\n Math.max(5, Math.min(95, x)),\r\n Math.max(5, Math.min(95, y))\r\n );\r\n };\r\n\r\n window.addEventListener('mousemove', handleNodeMouseMove);\r\n window.addEventListener('mouseup', handleNodeDragEnd);\r\n window.addEventListener('touchmove', handleNodeTouchMove);\r\n window.addEventListener('touchend', handleNodeDragEnd);\r\n\r\n return () => {\r\n window.removeEventListener('mousemove', handleNodeMouseMove);\r\n window.removeEventListener('mouseup', handleNodeDragEnd);\r\n window.removeEventListener('touchmove', handleNodeTouchMove);\r\n window.removeEventListener('touchend', handleNodeDragEnd);\r\n };\r\n }, [draggingNodeId]);\r\n\r\n if (!diagramData) {\r\n return null;\r\n }\r\n\r\n const diagramName = diagramData.name || safeT('diagram.defaults.name');\r\n const diagramDescription = diagramData.description || safeT('diagram.defaults.description');\r\n\r\n return (\r\n <div \r\n ref={containerRef}\r\n className=\"mind-map-container relative w-full h-screen overflow-hidden bg-section-soft\"\r\n style={{\r\n touchAction: 'none'\r\n }}\r\n >\r\n {/* Background overlay effects */}\r\n <div\r\n className=\"absolute inset-0\"\r\n style={{ opacity: isDarkMode ? 0.3 : 0.2 }}\r\n >\r\n <div\r\n className=\"absolute inset-0 bg-gradient-brand\"\r\n style={{\r\n opacity: 0.2\r\n }}\r\n />\r\n <div\r\n className=\"absolute inset-0 bg-gradient-accent\"\r\n style={{\r\n opacity: 0.1\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Animated particles */}\r\n <div\r\n className=\"absolute inset-0 pointer-events-none\"\r\n style={{ opacity: isDarkMode ? 0.6 : 0.4 }}\r\n >\r\n {[...Array(150)].map((_, i) => {\r\n const colors = ['bg-brand-primary', 'bg-brand-secondary'];\r\n const randomColor = colors[Math.floor(Math.random() * colors.length)];\r\n\r\n return (\r\n <div\r\n key={i}\r\n className={`absolute rounded-full ${randomColor}`}\r\n style={{\r\n left: `${Math.random() * 100}%`,\r\n top: `${Math.random() * 100}%`,\r\n width: `${Math.random() * 3 + 1}px`,\r\n height: `${Math.random() * 3 + 1}px`,\r\n animationName: 'twinkle',\r\n animationDelay: `${Math.random() * 5}s`,\r\n animationDuration: `${4 + Math.random() * 6}s`,\r\n animationIterationCount: 'infinite',\r\n animationTimingFunction: 'ease-in-out'\r\n }}\r\n />\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Grid pattern */}\r\n <div\r\n className=\"absolute inset-0 pointer-events-none\"\r\n style={{ opacity: isDarkMode ? 0.1 : 0.05 }}\r\n >\r\n <div\r\n className=\"absolute inset-0\"\r\n style={{\r\n backgroundImage: isDarkMode\r\n ? 'radial-gradient(circle at 1px 1px, var(--text-inverse) 1px, transparent 0)'\r\n : 'radial-gradient(circle at 1px 1px, var(--text-main) 1px, transparent 0)',\r\n backgroundSize: '40px 40px',\r\n opacity: 0.15\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Decorative sparkle */}\r\n <div className=\"absolute right-4 sm:right-16 bottom-4 sm:bottom-16 z-0 pointer-events-none\">\r\n <div className=\"relative\">\r\n <div\r\n className=\"absolute inset-0 blur-3xl w-20 h-20 sm:w-32 sm:h-32 bg-gradient-brand\"\r\n style={{\r\n opacity: 0.2\r\n }}\r\n />\r\n <svg width=\"60\" height=\"60\" viewBox=\"0 0 80 80\" className=\"relative sm:w-24 sm:h-24\">\r\n <path d=\"M40 0 L45 35 L80 40 L45 45 L40 80 L35 45 L0 40 L35 35 Z\" fill=\"url(#sparkle-gradient)\" opacity=\"0.4\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n {/* SVG connections and gradients */}\r\n <svg className=\"absolute inset-0 w-full h-full pointer-events-none\" style={{ zIndex: 1 }}>\r\n <defs>\r\n <linearGradient id=\"circuit-gradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\r\n <stop offset=\"0%\" style={{ stopColor: 'var(--brand-primary)', stopOpacity: 0.6 }} />\r\n <stop offset=\"50%\" style={{ stopColor: 'var(--gradient-brand-soft-start)', stopOpacity: 0.9 }} />\r\n <stop offset=\"100%\" style={{ stopColor: 'var(--gradient-brand-soft-end)', stopOpacity: 0.6 }} />\r\n </linearGradient>\r\n\r\n <linearGradient id=\"sparkle-gradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\r\n <stop offset=\"0%\" style={{ stopColor: 'var(--brand-primary)' }} />\r\n <stop offset=\"50%\" style={{ stopColor: 'var(--gradient-brand-soft-start)' }} />\r\n <stop offset=\"100%\" style={{ stopColor: 'var(--gradient-brand-soft-end)' }} />\r\n </linearGradient>\r\n\r\n <filter id=\"glow\">\r\n <feGaussianBlur stdDeviation=\"4\" result=\"coloredBlur\" />\r\n <feMerge>\r\n <feMergeNode in=\"coloredBlur\" />\r\n <feMergeNode in=\"SourceGraphic\" />\r\n </feMerge>\r\n </filter>\r\n </defs>\r\n\r\n {lines.map((line) => (\r\n <g key={line.id}>\r\n <path\r\n d={line.path}\r\n stroke=\"var(--gradient-brand-soft-start)\"\r\n strokeWidth=\"6\"\r\n fill=\"none\"\r\n className=\"transition-all duration-200\"\r\n style={{ filter: 'blur(8px)', opacity: 0.2 }}\r\n />\r\n <path\r\n d={line.path}\r\n stroke=\"url(#circuit-gradient)\"\r\n strokeWidth=\"2.5\"\r\n fill=\"none\"\r\n filter=\"url(#glow)\"\r\n className=\"transition-all duration-200\"\r\n style={{\r\n strokeDasharray: draggingNodeId === line.id ? '10 5' : 'none',\r\n animation: draggingNodeId === line.id ? 'dash-flow 1s linear infinite' : 'none'\r\n }}\r\n />\r\n </g>\r\n ))}\r\n </svg>\r\n\r\n {/* Nodes */}\r\n <div className=\"relative w-full h-full\" style={{ zIndex: 10 }}>\r\n {nodes.map((node) => (\r\n <MindMapNode\r\n key={node.id}\r\n id={node.id}\r\n icon={node.icon}\r\n text={node.text}\r\n description={node.description}\r\n color={node.color}\r\n position={{ x: node.x, y: node.y }}\r\n delay={node.delay}\r\n onDragStart={handleNodeDragStart}\r\n isDragging={draggingNodeId === node.id}\r\n onClick={handleNodeClick}\r\n isDarkMode={isDarkMode}\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Central hub */}\r\n <div\r\n ref={centerRef}\r\n className=\"absolute cursor-grab active:cursor-grabbing\"\r\n style={{\r\n left: `${centerPosition.x}%`,\r\n top: `${centerPosition.y}%`,\r\n zIndex: 30,\r\n transform: 'translate(-50%, -50%)',\r\n transition: isDragging ? 'none' : 'all 0.3s ease-out'\r\n }}\r\n onMouseDown={handleMouseDown}\r\n onTouchStart={(e) => {\r\n setIsDragging(true);\r\n e.preventDefault();\r\n }}\r\n onTouchMove={(e) => {\r\n if (!isDragging || !containerRef.current) return;\r\n const touch = e.touches[0];\r\n const containerRect = containerRef.current.getBoundingClientRect();\r\n const x = ((touch.clientX - containerRect.left) / containerRect.width) * 100;\r\n const y = ((touch.clientY - containerRect.top) / containerRect.height) * 100;\r\n\r\n setCenterPosition({\r\n x: Math.max(20, Math.min(80, x)),\r\n y: Math.max(20, Math.min(80, y))\r\n });\r\n }}\r\n onTouchEnd={() => setIsDragging(false)}\r\n >\r\n <div className=\"relative\">\r\n <div\r\n className=\"absolute inset-0 rounded-full blur-2xl bg-brand-primary\"\r\n style={{\r\n opacity: 0.3,\r\n transform: 'scale(1.5)'\r\n }}\r\n />\r\n\r\n <div\r\n 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\"\r\n style={{\r\n borderColor: 'var(--brand-primary)',\r\n borderOpacity: 0.5,\r\n transform: isDragging ? 'scale(1.1)' : 'scale(1)',\r\n transition: 'transform 0.3s ease'\r\n }}\r\n >\r\n <div\r\n className=\"p-2 sm:p-3 rounded-xl backdrop-blur-sm\"\r\n style={{ backgroundColor: 'rgba(255, 255, 255, 0.25)' }}\r\n >\r\n <Briefcase className=\"w-5 h-5 sm:w-7 sm:h-7 text-inverse\" />\r\n </div>\r\n <div className=\"text-center\">\r\n <h1 className=\"text-inverse text-body sm:text-subtitle\">\r\n {diagramName}\r\n </h1>\r\n {diagramDescription && (\r\n <h2 className=\"text-inverse text-caption sm:text-small opacity-90\">\r\n {diagramDescription}\r\n </h2>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {!isDragging && (\r\n <div\r\n className={`absolute -bottom-8 left-1/2 transform -translate-x-1/2 text-caption whitespace-nowrap ${isDarkMode ? 'text-brand-primary' : 'text-brand-secondary'}`}\r\n style={{\r\n opacity: 0.6\r\n }}\r\n >\r\n {safeT('diagram.dragToMove')}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <style jsx>{`\r\n @keyframes fadeIn {\r\n from { opacity: 0; transform: scale(0.9) translateY(10px); }\r\n to { opacity: 1; transform: scale(1) translateY(0); }\r\n }\r\n @keyframes twinkle {\r\n 0%, 100% { opacity: 0.2; transform: scale(1); }\r\n 50% { opacity: 0.5; transform: scale(1); }\r\n }\r\n @keyframes dash-flow {\r\n to { stroke-dashoffset: -30; }\r\n }\r\n .animate-fadeIn {\r\n animation: fadeIn 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards;\r\n opacity: 0;\r\n }\r\n `}</style>\r\n </div>\r\n );\r\n};\r\n\r\nexport default DiagramSection2;","import React, { useState, useMemo } from 'react';\r\nimport { ChevronDown } from 'lucide-react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst FaqItem = ({ faq, index, isActive, onToggle, t }) => {\r\n return (\r\n <div\r\n style={{\r\n animationDelay: `${index * 100}ms`,\r\n animationFillMode: 'both'\r\n }}\r\n className=\"animate-slide-up\"\r\n >\r\n <div className=\"card\" style={{ padding: 0 }}>\r\n {/* Question Button */}\r\n <button\r\n onClick={onToggle}\r\n className=\"w-full px-6 py-5 text-left flex items-start justify-between gap-4 rounded-xl group\"\r\n >\r\n <span className=\"card-title flex-1\">\r\n {faq.question}\r\n </span>\r\n <span className={`\r\n flex-shrink-0 w-10 h-10 rounded-full flex items-center justify-center\r\n transition-all duration-500 transform\r\n ${isActive\r\n ? 'bg-gradient-to-br from-blue-500 to-purple-600 text-white shadow-lg shadow-blue-500/50 rotate-180 scale-110'\r\n : 'bg-gray-700/50 text-gray-400 group-hover:bg-gray-600 group-hover:scale-110'\r\n }\r\n `}>\r\n <ThemeIcon\r\n name=\"icon-faqChevronDown\"\r\n folder=\"FaqSection\"\r\n className={`w-5 h-5 icon-muted transition-transform duration-500 ${isActive ? 'rotate-180' : ''}`}\r\n />\r\n </span>\r\n </button>\r\n\r\n {/* Answer - Collapsible */}\r\n <div\r\n style={{\r\n maxHeight: isActive ? '500px' : '0',\r\n opacity: isActive ? '1' : '0',\r\n overflow: 'hidden',\r\n transition: 'all 500ms ease-in-out'\r\n }}\r\n >\r\n <div\r\n className=\"px-6 pb-6 pt-2\"\r\n style={{\r\n transform: isActive ? 'translateY(0)' : 'translateY(-10px)',\r\n transition: 'transform 500ms ease-in-out'\r\n }}\r\n >\r\n {/* Decorative Line */}\r\n <div\r\n className=\"h-px w-full mb-4\"\r\n style={{\r\n background: 'linear-gradient(to right, transparent, var(--border-color), transparent)'\r\n }}\r\n ></div>\r\n\r\n <div className=\"card-text leading-relaxed\">\r\n {faq.answer}\r\n </div>\r\n\r\n {/* Optional URL Link */}\r\n {faq.url && (\r\n <a\r\n href={faq.url}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"card-link mt-4\"\r\n >\r\n {t?.('faq.learn_more') || 'Learn more'}\r\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\r\n </svg>\r\n </a>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst FaqSection = ({ data, t, isDarkMode, section }) => {\r\n const [activeIndex, setActiveIndex] = useState(-1);\r\n\r\n const faqs = useMemo(() => {\r\n if (data?.sectionDataBindingItems && Array.isArray(data.sectionDataBindingItems)) {\r\n return data.sectionDataBindingItems.map(item => item.data).filter(Boolean);\r\n }\r\n return [];\r\n }, [data]);\r\n\r\n const toggleFaq = (index) => {\r\n setActiveIndex(activeIndex === index ? -1 : index);\r\n };\r\n\r\n const sectionTitle = section?.title || '...';\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-4xl mx-auto\">\r\n {/* Icon Section */}\r\n <div className=\"flex justify-center mb-6 animate-fade-in\">\r\n <div\r\n className=\"w-10 h-10 rounded-lg flex items-center justify-center\"\r\n style={{\r\n background: 'linear-gradient(to bottom right, var(--brand-primary), var(--brand-secondary))',\r\n boxShadow: '0 10px 15px -3px var(--card-shadow)',\r\n transition: 'transform 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n onMouseEnter={(e) => e.currentTarget.style.transform = 'scale(1.1)'}\r\n onMouseLeave={(e) => e.currentTarget.style.transform = 'scale(1)'}\r\n >\r\n <ThemeIcon name=\"icon-faqQuestion\" folder=\"FaqSection\" className=\"w-4 h-4 icon-gradient\" />\r\n </div>\r\n </div>\r\n\r\n {/* Header */}\r\n <div className=\"text-center mb-12 animate-fade-in\">\r\n <h2 className=\"text-title text-main mb-3\">\r\n {sectionTitle}\r\n </h2>\r\n <div\r\n className=\"h-1 w-20 mx-auto rounded-full\"\r\n style={{\r\n background: 'linear-gradient(to right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))'\r\n }}\r\n ></div>\r\n </div>\r\n\r\n {/* FAQ Items */}\r\n <div className=\"space-y-4\">\r\n {faqs.map((faq, index) => (\r\n <FaqItem\r\n key={faq.id || index}\r\n faq={faq}\r\n index={index}\r\n isActive={activeIndex === index}\r\n onToggle={() => toggleFaq(index)}\r\n t={t}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <style jsx>{`\r\n @keyframes fade-in {\r\n from {\r\n opacity: 0;\r\n transform: translateY(-20px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n }\r\n @keyframes slide-up {\r\n from {\r\n opacity: 0;\r\n transform: translateY(30px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n }\r\n .animate-fade-in {\r\n animation: fade-in 0.8s ease-out;\r\n }\r\n .animate-slide-up {\r\n animation: slide-up 0.6s ease-out;\r\n }\r\n `}</style>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default FaqSection;","import React, { useState, useEffect } from 'react';\r\n\r\nconst PageHighlightSection = ({ data, t, isDarkMode, imageBaseUrl = \"\" }) => {\r\n const [activeTab, setActiveTab] = useState(0);\r\n\r\n // Xử lý data giống TimelineSection\r\n const rawData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data) // lọc bỏ item null hoặc data null\r\n .map((item) => item.data) || [];\r\n\r\n // Helper function để lấy URL ảnh đầy đủ\r\n const getImageUrl = (imagePath) => {\r\n if (imagePath) {\r\n return `${imageBaseUrl}${imagePath}`;\r\n }\r\n return null;\r\n };\r\n\r\n // Transform data để lấy đầy đủ thông tin\r\n const highlightData = rawData.map((item) => {\r\n // Lấy image chính từ pageImages\r\n const mainImagePath = item.pageImages?.find(img => img.isMain)?.url ||\r\n item.pageImages?.[0]?.url ||\r\n null;\r\n\r\n const mainImage = getImageUrl(mainImagePath);\r\n\r\n // Lấy tag đầu tiên làm tag hiển thị\r\n const primaryTag = item.tagKeys?.[0]?.key || item.title;\r\n\r\n return {\r\n title: item.title,\r\n slug: item.slug,\r\n description: item.description,\r\n image: mainImage,\r\n tag: primaryTag,\r\n tagKeys: item.tagKeys || [],\r\n features: item.features || [] // Nếu có features trong data\r\n };\r\n });\r\n\r\n // Auto scroll every 5 seconds\r\n useEffect(() => {\r\n if (highlightData.length === 0) return;\r\n\r\n const interval = setInterval(() => {\r\n setActiveTab((prev) => (prev + 1) % highlightData.length);\r\n }, 5000);\r\n\r\n return () => clearInterval(interval);\r\n }, [highlightData.length]);\r\n\r\n const handleNavigate = (slug) => {\r\n if (slug) {\r\n window.location.href = slug;\r\n }\r\n };\r\n\r\n // Các màu gradient để sử dụng\r\n const gradientClasses = [\r\n 'btn-primary',\r\n ];\r\n\r\n // Default image nếu không có\r\n const defaultImage = 'https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=1200&h=800&fit=crop&q=80';\r\n\r\n // Nếu không có data\r\n if (!highlightData.length) {\r\n return (\r\n <section className={`py-20 ${isDarkMode ? \"bg-slate-950\" : \"bg-white\"}`}>\r\n <div className=\"max-w-7xl mx-auto px-4 text-center\">\r\n <h3 className={`text-lg font-semibold mb-2 text-main`}>\r\n {t('highlight.noData.title') || 'Chưa có dữ liệu'}\r\n </h3>\r\n <p className=\"text-muted\">\r\n {t('highlight.noData.description') || 'Hiện tại chưa có sản phẩm nào được thiết lập.'}\r\n </p>\r\n </div>\r\n </section>\r\n );\r\n }\r\n\r\n return (\r\n <section\r\n className=\"relative overflow-hidden\"\r\n style={{\r\n background: isDarkMode\r\n ? 'linear-gradient(to bottom right, var(--color-gray-950), var(--color-gray-900), var(--color-gray-950))'\r\n : 'linear-gradient(to bottom right, var(--bg-primary), #eff6ff50, #f3e8ff50)'\r\n }}\r\n >\r\n {/* Floating gradient orbs */}\r\n <div className=\"absolute inset-0 overflow-hidden pointer-events-none\">\r\n <div\r\n className=\"absolute top-20 right-10 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob\"\r\n style={{\r\n backgroundColor: isDarkMode\r\n ? 'var(--gradient-brand-soft-start)'\r\n : 'var(--gradient-brand-soft-start)'\r\n }}\r\n ></div>\r\n <div\r\n className=\"absolute top-40 -left-20 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob animation-delay-2000\"\r\n style={{\r\n backgroundColor: isDarkMode\r\n ? 'var(--gradient-accent-soft-start)'\r\n : 'var(--gradient-accent-soft-start)',\r\n animationDelay: '2s'\r\n }}\r\n ></div>\r\n <div\r\n className=\"absolute -bottom-20 right-40 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob animation-delay-4000\"\r\n style={{\r\n backgroundColor: isDarkMode\r\n ? 'var(--gradient-accent-soft-end)'\r\n : 'var(--gradient-accent-soft-end)',\r\n animationDelay: '4s'\r\n }}\r\n ></div>\r\n </div>\r\n\r\n {/* Main Content */}\r\n <div className=\"relative w-full px-4 sm:px-6 lg:px-8 py-16 sm:py-24\">\r\n {/* Main Content */}\r\n <div className=\"relative w-full\">\r\n {highlightData.map((item, index) => {\r\n const color = gradientClasses[index % gradientClasses.length];\r\n return (\r\n <div\r\n key={index}\r\n className={`transition-opacity duration-700 ${activeTab === index ? 'opacity-100' : 'opacity-0 absolute inset-0 pointer-events-none'\r\n }`}\r\n >\r\n <div className={`${isDarkMode\r\n ? 'bg-gradient-to-br from-slate-900/30 to-slate-950/30 border-slate-700/20'\r\n : 'bg-white/40 border-white/30'\r\n } backdrop-blur-md rounded-3xl shadow-lg overflow-hidden border transition-colors duration-500`}>\r\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-0\">\r\n {/* Image Column - Fixed height */}\r\n <div className=\"relative h-[280px] lg:h-[500px] overflow-hidden group\">\r\n <img\r\n src={item.image || defaultImage}\r\n alt={item.title}\r\n className=\"absolute inset-0 w-full h-full object-cover transition-transform duration-700 group-hover:scale-110\"\r\n onError={(e) => {\r\n e.target.src = defaultImage;\r\n }}\r\n />\r\n <div className={`absolute inset-0 bg-gradient-to-br ${color} opacity-20`} />\r\n <div className=\"absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent\" />\r\n </div>\r\n\r\n {/* Content Column - Fixed height matching image */}\r\n <div className=\"p-5 lg:p-8 flex flex-col justify-center h-[280px] lg:h-[500px]\">\r\n <h1 className=\"text-3xl lg:text-4xl font-black mb-3 text-gradient-brand\">\r\n {item.title}\r\n </h1>\r\n\r\n <p className=\"mb-6 text-muted line-clamp-3 lg:line-clamp-4\">\r\n {item.description}\r\n </p>\r\n\r\n {/* Features List - nếu có */}\r\n {item.features && item.features.length > 0 && (\r\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-2 mb-6 overflow-y-auto max-h-32 lg:max-h-48\">\r\n {item.features.map((feature, idx) => (\r\n <div key={idx} className=\"flex items-start gap-2 group\">\r\n <div className=\"mt-0.5 w-4 h-4 rounded-full bg-gradient-accent flex items-center justify-center flex-shrink-0\">\r\n <svg className=\"w-2.5 h-2.5 text-inverse\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={3} d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n </div>\r\n <span className=\"text-muted group-hover:text-main font-medium text-xs transition-colors\">\r\n {feature}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* CTA Button */}\r\n <a\r\n href={item.slug}\r\n rel=\"noopener noreferrer\"\r\n className={`group relative px-6 py-3 rounded-xl font-bold text-sm transition-all duration-300 transform hover:scale-105 hover:shadow-2xl overflow-hidden bg-gradient-to-r ${color} text-white shadow-xl w-full text-center mt-auto`}\r\n onClick={(e) => {\r\n // Nếu người dùng không giữ Ctrl/Meta/chuột giữa → điều hướng trong tab hiện tại\r\n if (\r\n !e.ctrlKey &&\r\n !e.metaKey &&\r\n e.button !== 1\r\n ) {\r\n e.preventDefault();\r\n window.location.href = item.slug;\r\n }\r\n }}\r\n >\r\n <span className=\"relative z-10 flex items-center justify-center gap-2\">\r\n {t('highlight.cta') || 'Khám phá'} {item.title}\r\n <svg\r\n className=\"w-5 h-5 group-hover:translate-x-1 transition-transform\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M17 8l4 4m0 0l-4 4m4-4H3\"\r\n />\r\n </svg>\r\n </span>\r\n <div className=\"absolute inset-0 bg-white/20 transform scale-x-0 group-hover:scale-x-100 transition-transform origin-left\" />\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Navigation Tabs */}\r\n <div className=\"flex flex-wrap justify-center gap-4 mt-12\">\r\n {highlightData.map((item, index) => {\r\n const color = gradientClasses[index % gradientClasses.length];\r\n\r\n return (\r\n <button\r\n key={index}\r\n onClick={() => setActiveTab(index)}\r\n className={`group relative px-8 py-4 rounded-xl font-bold text-lg transition-all duration-300 transform hover:scale-105 overflow-hidden ${activeTab === index\r\n ? `bg-gradient-to-r ${color} text-white shadow-xl`\r\n : isDarkMode\r\n ? 'bg-gray-800/50 text-gray-300 hover:shadow-xl shadow-lg border border-gray-700/50 backdrop-blur-sm'\r\n : 'bg-white text-gray-700 hover:shadow-xl shadow-lg'\r\n }`}\r\n >\r\n <span className=\"relative z-10\">{item.title}</span>\r\n {activeTab !== index && (\r\n <div className={`absolute inset-0 bg-gradient-to-r ${color} opacity-0 group-hover:opacity-100 transition-opacity duration-300`} />\r\n )}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* CSS Animations */}\r\n <style jsx>{`\r\n @keyframes blob {\r\n 0%, 100% {\r\n transform: translate(0px, 0px) scale(1);\r\n }\r\n 33% {\r\n transform: translate(30px, -50px) scale(1.1);\r\n }\r\n 66% {\r\n transform: translate(-20px, 20px) scale(0.9);\r\n }\r\n }\r\n\r\n .animate-blob {\r\n animation: blob 7s ease-in-out infinite;\r\n }\r\n\r\n .animation-delay-2000 {\r\n animation-delay: 2s;\r\n }\r\n\r\n .animation-delay-4000 {\r\n animation-delay: 4s;\r\n }\r\n\r\n .bg-grid-white {\r\n background-image: linear-gradient(rgba(255, 255, 255, 0.05) 1px, transparent 1px),\r\n linear-gradient(90deg, rgba(255, 255, 255, 0.05) 1px, transparent 1px);\r\n background-size: 50px 50px;\r\n }\r\n\r\n .bg-grid-slate {\r\n background-image: linear-gradient(rgba(0, 0, 0, 0.03) 1px, transparent 1px),\r\n linear-gradient(90deg, rgba(0, 0, 0, 0.03) 1px, transparent 1px);\r\n background-size: 50px 50px;\r\n }\r\n\r\n .line-clamp-3 {\r\n display: -webkit-box;\r\n -webkit-line-clamp: 3;\r\n -webkit-box-orient: vertical;\r\n overflow: hidden;\r\n }\r\n\r\n .line-clamp-4 {\r\n display: -webkit-box;\r\n -webkit-line-clamp: 4;\r\n -webkit-box-orient: vertical;\r\n overflow: hidden;\r\n }\r\n `}</style>\r\n </section>\r\n );\r\n};\r\n\r\nexport default PageHighlightSection;","import React, { useState } from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl = \"\" }) => {\r\n const pages = data?.sectionDataBindingItems?.map(item => item.data).filter(Boolean) || [];\r\n const sectionTitle = section?.title || '';\r\n const sectionDescription = section?.description || '';\r\n const [visibleCount, setVisibleCount] = useState(8);\r\n const visiblePages = pages.slice(0, visibleCount);\r\n const hasMore = visibleCount < pages.length;\r\n\r\n if (!pages || pages.length === 0) {\r\n return null;\r\n }\r\n\r\n const handleLoadMore = () => {\r\n setVisibleCount(prev => prev + 8);\r\n };\r\n\r\n const getImageUrl = (url) => {\r\n if (!url) return '';\r\n if (url.startsWith('http://') || url.startsWith('https://')) return url;\r\n return `${imageBaseUrl}${url}`;\r\n };\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div style={{\r\n maxWidth: '1400px',\r\n margin: '0 auto'\r\n }}>\r\n {sectionTitle && (\r\n <div className=\"text-center mb-12\">\r\n <h2 className=\"text-title text-main mb-4\">\r\n {sectionTitle}\r\n </h2>\r\n {sectionDescription && (\r\n <p className=\"text-body text-muted max-w-3xl mx-auto\">\r\n {sectionDescription}\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n\r\n <div style={{\r\n display: 'grid',\r\n gridTemplateColumns: 'repeat(auto-fit, minmax(220px, 1fr))',\r\n gap: '24px',\r\n marginBottom: hasMore ? '40px' : '0'\r\n }}>\r\n {visiblePages.map((page) => {\r\n const iconUrl = getImageUrl(page.icon);\r\n return (\r\n <a\r\n key={page.id}\r\n href={page.slug}\r\n className=\"card\"\r\n style={{\r\n alignItems: 'center',\r\n textAlign: 'center',\r\n gap: '16px',\r\n textDecoration: 'none',\r\n padding: '32px 20px'\r\n }}\r\n >\r\n {iconUrl && (\r\n <div style={{\r\n width: '80px',\r\n height: '80px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }}>\r\n <img\r\n src={iconUrl}\r\n alt={page.title}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'contain'\r\n }}\r\n />\r\n </div>\r\n )}\r\n <h3 className=\"card-title text-body\" style={{ margin: 0 }}>\r\n {page.title}\r\n </h3>\r\n </a>\r\n );\r\n })}\r\n </div>\r\n\r\n {hasMore && (\r\n <div style={{ display: 'flex', justifyContent: 'center' }}>\r\n <button\r\n onClick={handleLoadMore}\r\n style={{\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '8px',\r\n padding: '14px 32px',\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n color: '#fff',\r\n backgroundColor: '#361985ff',\r\n border: 'none',\r\n borderRadius: '9999px',\r\n cursor: 'pointer',\r\n transition: 'all 0.3s',\r\n boxShadow: '0 4px 6px -1px rgba(249, 115, 22, 0.3)'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = '#361985ff';\r\n e.currentTarget.style.transform = 'translateY(-2px)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = '#361985ff';\r\n e.currentTarget.style.transform = 'translateY(0)';\r\n }}\r\n >\r\n {t('pageChildrenSelect.moreInsights')}\r\n <ThemeIcon name=\"icon-pageChildrenSelectArrowRight\" folder=\"PageChildrenSelectSection\" className=\"w-4 h-4 icon-muted\"/>\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default PageChildrenSelectSection;","import React, { useState } from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl = \"\" }) => {\r\n const pages = data?.sectionDataBindingItems?.map(item => item.data).filter(Boolean) || [];\r\n const sectionTitle = section?.title || '';\r\n const [visibleCount, setVisibleCount] = useState(5);\r\n const visiblePages = pages.slice(0, visibleCount);\r\n const hasMore = visibleCount < pages.length;\r\n\r\n if (!pages || pages.length === 0) {\r\n return null;\r\n }\r\n\r\n const handleLoadMore = () => {\r\n setVisibleCount(prev => prev + 5);\r\n };\r\n\r\n const getImageUrl = (url) => {\r\n if (!url) return '';\r\n if (url.startsWith('http://') || url.startsWith('https://')) return url;\r\n return `${imageBaseUrl}${url}`;\r\n };\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div style={{\r\n maxWidth: '1280px',\r\n margin: '0 auto'\r\n }}>\r\n {sectionTitle && (\r\n <h2 className=\"text-title text-main mb-10 uppercase tracking-wide\">\r\n {sectionTitle}\r\n </h2>\r\n )}\r\n \r\n <div style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '24px'\r\n }}>\r\n {visiblePages.map((page) => {\r\n const mainImage = page.pageImages?.find(img => img.isMain)?.url || page.icon;\r\n const imageUrl = getImageUrl(mainImage);\r\n\r\n return (\r\n <a\r\n key={page.id}\r\n href={page.slug}\r\n className=\"card\"\r\n style={{\r\n flexDirection: 'row',\r\n gap: '20px',\r\n textDecoration: 'none'\r\n }}\r\n >\r\n {imageUrl && (\r\n <div style={{\r\n width: '200px',\r\n height: '140px',\r\n flexShrink: 0,\r\n overflow: 'hidden',\r\n borderRadius: '6px'\r\n }}>\r\n <img\r\n src={imageUrl}\r\n alt={page.title}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover'\r\n }}\r\n />\r\n </div>\r\n )}\r\n\r\n <div className=\"flex flex-col justify-center flex-1\">\r\n {page.tagKeys?.length > 0 && (\r\n <div className=\"card-link \">\r\n {page.tagKeys[0].key}\r\n </div>\r\n )}\r\n \r\n <h3 className=\"card-title mb-2 leading-snug\">\r\n {page.title}\r\n </h3>\r\n \r\n {page.description && (\r\n <p className=\"card-text m-0\">\r\n {page.description}\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n paddingLeft: '16px'\r\n }}>\r\n <ThemeIcon name=\"icon-pageChildrenSelectChevronRight\" folder=\"PageChildrenSelectSection\" className=\"w-4 h-4 card-text\"/>\r\n </div>\r\n </a>\r\n );\r\n })}\r\n </div>\r\n\r\n {hasMore && (\r\n <div style={{ display: 'flex', justifyContent: 'center', marginTop: '40px' }}>\r\n <button\r\n onClick={handleLoadMore}\r\n className=\"btn-primary\"\r\n style={{\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n padding: '12px 28px',\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n color: '#fff',\r\n border: 'none',\r\n borderRadius: '9999px',\r\n cursor: 'pointer'\r\n }}\r\n >\r\n {t('pageChildrenSelect.moreInsights')}\r\n <ThemeIcon name=\"icon-pageChildrenSelectArrowRight\" folder=\"PageChildrenSelectSection\" className=\"w-4 h-4 icon-muted\"/>\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default PageChildrenSelectSection1;","import React, { useState } from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl = \"\" }) => {\r\n const pages = data?.sectionDataBindingItems?.map(item => item.data).filter(Boolean) || [];\r\n const sectionTitle = section?.title || '';\r\n\r\n const [visibleCount, setVisibleCount] = useState(6);\r\n\r\n if (!pages || pages.length === 0) {\r\n return null;\r\n }\r\n\r\n const getImageUrl = (url) => {\r\n if (!url) return '';\r\n if (url.startsWith('http://') || url.startsWith('https://')) return url;\r\n return `${imageBaseUrl}${url}`;\r\n };\r\n\r\n const handleLoadMore = () => {\r\n setVisibleCount(prev => prev + 6);\r\n };\r\n\r\n const visiblePages = pages.slice(0, visibleCount);\r\n const hasMore = visibleCount < pages.length;\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div style={{\r\n maxWidth: '1400px',\r\n margin: '0 auto'\r\n }}>\r\n {sectionTitle && (\r\n <h2 className=\"text-title mb-12 text-main\">\r\n {sectionTitle}\r\n </h2>\r\n )}\r\n <div style={{\r\n display: 'grid',\r\n gridTemplateColumns: 'repeat(auto-fit, minmax(350px, 1fr))',\r\n gap: '30px',\r\n marginBottom: '50px'\r\n }}>\r\n {visiblePages.map((page) => {\r\n const mainImage = page.pageImages?.find(img => img.isMain)?.url || page.icon;\r\n const imageUrl = getImageUrl(mainImage);\r\n\r\n return (\r\n <a\r\n key={page.id}\r\n href={page.slug}\r\n className=\"card\"\r\n style={{\r\n textDecoration: 'none',\r\n display: 'block',\r\n padding: '0',\r\n overflow: 'hidden'\r\n }}\r\n >\r\n {imageUrl && (\r\n <div style={{\r\n width: '100%',\r\n height: '240px',\r\n overflow: 'hidden',\r\n position: 'relative'\r\n }}>\r\n <img\r\n src={imageUrl}\r\n alt={page.title}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n transition: 'transform 0.3s'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = 'scale(1.05)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = 'scale(1)';\r\n }}\r\n />\r\n </div>\r\n )}\r\n\r\n <div style={{ padding: '1.5rem' }}>\r\n <h3 className=\"card-title text-subtitle\" style={{\r\n minHeight: '56px',\r\n marginBottom: '0.75rem'\r\n }}>\r\n {page.title}\r\n </h3>\r\n\r\n {page.description && (\r\n <p className=\"card-text line-clamp-2\" style={{\r\n marginBottom: '1rem'\r\n }}>\r\n {page.description}\r\n </p>\r\n )}\r\n </div>\r\n\r\n </a>\r\n );\r\n })}\r\n </div>\r\n\r\n {hasMore && (\r\n <div style={{\r\n display: 'flex',\r\n justifyContent: 'center'\r\n }}>\r\n <button\r\n onClick={handleLoadMore}\r\n className=\"btn-primary\"\r\n style={{\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n padding: '14px 32px',\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n color: '#ffffff',\r\n border: 'none',\r\n borderRadius: '50px',\r\n cursor: 'pointer'\r\n }}\r\n >\r\n {t('pageChildrenSelect.moreInsights')}\r\n <ThemeIcon name=\"icon-pageChildrenSelectArrowRight\" folder=\"PageChildrenSelectSection\" className=\"w-4 h-4 icon-muted\"/>\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default PageChildrenSelectSection2;","// src/index.js \r\nimport AboutCompanySection from './sections/aboutCompany/AboutCompanySection';\r\nimport CompanyValues from './sections/aboutCompany/CompanyValues';\r\nimport TimelineSection from './sections/aboutCompany/TimelineSection';\r\nimport PartnerCard from './sections/aboutCompany/PartnerCard';\r\nimport PartnersSection from './sections/aboutCompany/PartnersSection';\r\nimport MilestoneSection from './sections/aboutCompany/MilestoneSection';\r\nimport TestimonialsSection from './sections/aboutCompany/TestimonialsSection';\r\nimport PartnerListCard from './sections/aboutCompany/PartnerListCard';\r\nimport PartnerListSection from './sections/aboutCompany/PartnerListSection';\r\nimport ContactFormSection from './sections/contactCompany/ContactFormSection';\r\nimport ContactInfoSection from './sections/contactCompany/ContactInfoSection';\r\nimport ContactListAutoSection from './sections/contactCompany/ContactListAutoSection';\r\nimport CustomerFeedbackAutoSection from './sections/customerFeedback/CustomerFeedbackAutoSection';\r\nimport ProductListSection from './sections/product/ProductListSection';\r\nimport TextWithTitleSection from './sections/simple/TextWithTitleSection';\r\nimport TextSection from './sections/simple/TextSection';\r\nimport DiagramSection from './sections/diagramCompany/DiagramSection';\r\nimport DiagramSection2 from './sections/diagramCompany/DiagramSection2';\r\nimport FaqSection from './sections/faq/FaqSection';\r\nimport PageHighlightSection from './sections/page/PageHighlightSection';\r\nimport PageChildrenSelectSection from './sections/pageChildren/PageChildrenSelectSection';\r\nimport PageChildrenSelectSection1 from './sections/pageChildren/PageChildrenSelectSection1';\r\nimport PageChildrenSelectSection2 from './sections/pageChildren/PageChildrenSelectSection2';\r\n// Export các components\r\nexport {\r\n AboutCompanySection,\r\n CompanyValues,\r\n TimelineSection,\r\n PartnerCard,\r\n PartnersSection,\r\n MilestoneSection,\r\n TestimonialsSection,\r\n PartnerListCard,\r\n PartnerListSection,\r\n ContactFormSection,\r\n ContactInfoSection,\r\n ContactListAutoSection,\r\n CustomerFeedbackAutoSection,\r\n ProductListSection,\r\n TextWithTitleSection,\r\n TextSection,\r\n DiagramSection,\r\n DiagramSection2,\r\n FaqSection,\r\n PageHighlightSection,\r\n PageChildrenSelectSection,\r\n PageChildrenSelectSection1,\r\n PageChildrenSelectSection2\r\n};\r\n\r\n// Default export (tuỳ chọn)\r\nexport default {\r\n AboutCompanySection,\r\n CompanyValues,\r\n TimelineSection,\r\n PartnerCard,\r\n PartnersSection,\r\n MilestoneSection,\r\n TestimonialsSection,\r\n PartnerListCard,\r\n PartnerListSection,\r\n ContactFormSection,\r\n ContactInfoSection,\r\n ContactListAutoSection,\r\n CustomerFeedbackAutoSection,\r\n ProductListSection,\r\n TextWithTitleSection,\r\n TextSection,\r\n DiagramSection,\r\n DiagramSection2,\r\n FaqSection,\r\n PageHighlightSection,\r\n PageChildrenSelectSection,\r\n PageChildrenSelectSection1,\r\n PageChildrenSelectSection2\r\n};"],"names":["jsxRuntimeModule","require$$0","require$$1","jsx","jsxs","index","logoUrl","Fragment","useWindowSize","_a","_b","__iconNode","Icon","Home"],"mappings":"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","x_google_ignoreList":[0,1,2,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49]}
|
|
1
|
+
{"version":3,"file":"nvis-fe-cms-libs.es.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/contexts/ThemeIcon.jsx","../src/sections/aboutCompany/CompanyValues.jsx","../src/contexts/SectionWrapper.jsx","../src/sections/aboutCompany/AboutCompanySection.jsx","../src/sections/aboutCompany/TimelineSection.jsx","../src/sections/aboutCompany/PartnerCard.jsx","../src/sections/aboutCompany/PartnersSection.jsx","../src/sections/aboutCompany/MilestoneSection.jsx","../src/sections/aboutCompany/TestimonialsSection.jsx","../src/sections/aboutCompany/PartnerListCard.jsx","../src/sections/aboutCompany/PartnerListSection.jsx","../src/sections/contactCompany/ContactFormSection.jsx","../src/sections/contactCompany/ContactInfoSection.jsx","../src/sections/contactCompany/ContactListAutoSection.jsx","../src/sections/customerFeedback/CustomerFeedbackAutoSection.jsx","../src/sections/product/ProductListSection.jsx","../src/sections/simple/TextWithTitleSection.jsx","../src/sections/simple/TextSection.jsx","../node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/lucide-react/dist/esm/Icon.js","../node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/lucide-react/dist/esm/icons/bed.js","../node_modules/lucide-react/dist/esm/icons/briefcase.js","../node_modules/lucide-react/dist/esm/icons/building-2.js","../node_modules/lucide-react/dist/esm/icons/building.js","../node_modules/lucide-react/dist/esm/icons/calculator.js","../node_modules/lucide-react/dist/esm/icons/cloud.js","../node_modules/lucide-react/dist/esm/icons/database.js","../node_modules/lucide-react/dist/esm/icons/factory.js","../node_modules/lucide-react/dist/esm/icons/file-text.js","../node_modules/lucide-react/dist/esm/icons/globe.js","../node_modules/lucide-react/dist/esm/icons/graduation-cap.js","../node_modules/lucide-react/dist/esm/icons/heart.js","../node_modules/lucide-react/dist/esm/icons/house.js","../node_modules/lucide-react/dist/esm/icons/megaphone.js","../node_modules/lucide-react/dist/esm/icons/package.js","../node_modules/lucide-react/dist/esm/icons/plane.js","../node_modules/lucide-react/dist/esm/icons/settings.js","../node_modules/lucide-react/dist/esm/icons/shield.js","../node_modules/lucide-react/dist/esm/icons/shopping-cart.js","../node_modules/lucide-react/dist/esm/icons/smartphone.js","../node_modules/lucide-react/dist/esm/icons/trending-up.js","../node_modules/lucide-react/dist/esm/icons/truck.js","../node_modules/lucide-react/dist/esm/icons/users.js","../node_modules/lucide-react/dist/esm/icons/wrench.js","../node_modules/lucide-react/dist/esm/icons/zap.js","../src/sections/diagramCompany/DiagramSection.jsx","../src/sections/diagramCompany/DiagramSection2.jsx","../src/sections/faq/FaqSection.jsx","../src/sections/page/PageHighlightSection.jsx","../src/sections/pageChildren/PageChildrenSelectSection.jsx","../src/sections/pageChildren/PageChildrenSelectSection1.jsx","../src/sections/pageChildren/PageChildrenSelectSection2.jsx","../src/index.js"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n self,\n source,\n getOwner(),\n maybeKey,\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import React from \"react\";\r\n\r\nexport default function ThemeIcon({ \r\n name, \r\n className = \"\", \r\n color,\r\n folder = \"common\", // ← Thêm prop folder, mặc định là \"common\"\r\n useOriginalColor = false \r\n}) {\r\n if (!name) return null;\r\n \r\n // Tạo đường dẫn động dựa trên folder\r\n const iconUrl = `/icons/${folder}/${name}.svg`;\r\n\r\n // Nếu muốn giữ màu gốc → dùng <img>\r\n if (useOriginalColor) {\r\n return (\r\n <img\r\n src={iconUrl}\r\n alt={name}\r\n className={`icon ${className}`}\r\n onError={(e) => {\r\n e.target.style.display = \"none\";\r\n console.warn(`Icon not found: ${iconUrl}`);\r\n }}\r\n />\r\n );\r\n }\r\n\r\n // Nếu muốn đổi màu theo theme → dùng mask\r\n return (\r\n <span\r\n className={`icon ${className}`}\r\n style={{\r\n maskImage: `url(${iconUrl})`,\r\n WebkitMaskImage: `url(${iconUrl})`,\r\n backgroundColor: color || 'currentColor',\r\n }}\r\n onError={(e) => {\r\n e.target.style.display = \"none\";\r\n console.warn(`Icon not found: ${iconUrl}`);\r\n }}\r\n />\r\n );\r\n}","import React, { useEffect, useRef, useState } from \"react\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst CompanyValues = ({ companyData, t, isDarkMode }) => {\r\n // Làm sạch HTML\r\n const cleanHtmlContent = (html) => {\r\n if (!html) return \"\";\r\n try {\r\n const tempDiv = document.createElement(\"div\");\r\n tempDiv.innerHTML = html;\r\n let cleanText = tempDiv.textContent || tempDiv.innerText || \"\";\r\n return cleanText\r\n .replace(/ /g, \" \")\r\n .replace(/&/g, \"&\")\r\n .replace(/</g, \"<\")\r\n .replace(/>/g, \">\")\r\n .replace(/"/g, '\"')\r\n .replace(/'/g, \"'\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n } catch {\r\n return String(html || \"\")\r\n .replace(/<[^>]*>/g, \"\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n }\r\n };\r\n\r\n const safeCompanyData = {\r\n vision: companyData?.vision || \"\",\r\n mission: companyData?.mission || \"\",\r\n coreValues: companyData?.coreValues || \"\",\r\n };\r\n\r\n const items = [\r\n {\r\n icon: \"icon-companyValueLightBulb\",\r\n title: t(\"about.companyValues.vision\") || \"Tầm nhìn\",\r\n text:\r\n cleanHtmlContent(safeCompanyData.vision) ||\r\n \"Tầm nhìn của chúng tôi sẽ được cập nhật trong thời gian tới.\",\r\n bgClass: \"bg-gradient-brand\",\r\n },\r\n {\r\n icon: \"icon-companyValueRocket\",\r\n title: t(\"about.companyValues.mission\") || \"Sứ mệnh\",\r\n text:\r\n cleanHtmlContent(safeCompanyData.mission) ||\r\n \"Sứ mệnh của chúng tôi sẽ được cập nhật trong thời gian tới.\",\r\n bgClass: \"bg-gradient-accent\",\r\n },\r\n {\r\n icon: \"icon-companyValueDiamond\",\r\n title: t(\"about.companyValues.coreValues\") || \"Giá trị cốt lõi\",\r\n text:\r\n cleanHtmlContent(safeCompanyData.coreValues) ||\r\n \"Giá trị cốt lõi của chúng tôi sẽ được cập nhật trong thời gian tới.\",\r\n bgClass: \"bg-gradient-brand\",\r\n },\r\n ];\r\n\r\n const refs = useRef([]);\r\n const [visible, setVisible] = useState([]);\r\n\r\n useEffect(() => {\r\n setVisible(new Array(items.length).fill(false));\r\n if (items.length === 0) return;\r\n\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n const idx = refs.current.findIndex((el) => el === entry.target);\r\n if (idx !== -1) {\r\n setVisible((prev) => {\r\n const newVisible = [...prev];\r\n newVisible[idx] = true;\r\n return newVisible;\r\n });\r\n observer.unobserve(entry.target);\r\n }\r\n }\r\n });\r\n },\r\n { threshold: 0.2 }\r\n );\r\n\r\n refs.current.forEach((el) => el && observer.observe(el));\r\n return () => refs.current.forEach((el) => el && observer.unobserve(el));\r\n }, [items.length]);\r\n\r\n if (!companyData) {\r\n return (\r\n <div className=\"card text-center\">\r\n <div className=\"w-12 h-12 mx-auto mb-4 flex items-center justify-center rounded-full bg-gradient-brand text-white text-2xl\">\r\n 🏢\r\n </div>\r\n <h3 className=\"card-title text-lg mb-2\">\r\n Thông tin công ty\r\n </h3>\r\n <p className=\"card-text\">\r\n Tầm nhìn, sứ mệnh và giá trị cốt lõi sẽ được cập nhật sớm.\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n {items.map((item, index) => (\r\n <div\r\n key={index}\r\n ref={(el) => (refs.current[index] = el)}\r\n className={`card transition-all duration-700 ease-out transform ${\r\n visible[index] ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\"\r\n }`}\r\n style={{ transitionDelay: `${index * 200}ms` }}\r\n >\r\n <div className=\"flex items-start space-x-4\">\r\n {/* Icon */}\r\n <div\r\n className={`w-10 h-10 rounded-lg flex items-center justify-center text-white text-xl flex-shrink-0 ${item.bgClass}`}\r\n >\r\n <ThemeIcon name={item.icon} folder=\"AboutCompanySection\" className=\"w-6 h-6\" useOriginalColor={true}/>\r\n </div>\r\n\r\n {/* Nội dung */}\r\n <div className=\"flex-1 min-w-0\">\r\n <h3 className=\"card-title text-lg mb-1\">{item.title}</h3>\r\n <p\r\n className={`card-text leading-relaxed ${\r\n item.text.includes(\"sẽ được cập nhật\")\r\n ? \"italic opacity-75\"\r\n : \"\"\r\n }`}\r\n >\r\n {item.text}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n};\r\n\r\nexport default CompanyValues;","import React from \"react\";\r\n\r\n/**\r\n * SectionWrapper - Simple Gradient Version\r\n * ------------------\r\n * Chỉ có gradient nền, không có hiệu ứng tròn\r\n * Màu sắc được quản lý qua CSS Variables trong theme.css\r\n * \r\n * Props:\r\n * - variant: chọn kiểu nền (\"blue\", \"purple\", \"green\", \"neutral\", \"softLight\")\r\n * - className: thêm class bổ sung\r\n * - children: nội dung của section\r\n */\r\nconst SectionWrapper = ({ \r\n variant = \"softLight\",\r\n className = \"\", \r\n children\r\n}) => {\r\n return (\r\n <section \r\n className={`section-wrapper section-wrapper--${variant} ${className}`}\r\n >\r\n {children}\r\n </section>\r\n );\r\n};\r\n\r\nexport default SectionWrapper;","import React from \"react\";\r\nimport CompanyValues from \"./CompanyValues\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = \"\" }) => {\r\n // Kiểm tra t function\r\n const safeT = typeof t === 'function' ? t : (key, options) => {\r\n console.warn(`Translation function not provided for key: ${key}`);\r\n return key;\r\n };\r\n\r\n const companyData = data?.sectionDataBindingItems?.[0]?.data;\r\n\r\n if (!companyData) {\r\n return null;\r\n }\r\n\r\n const name = companyData.name || safeT('aboutCompany.defaults.companyName');\r\n const shortName = companyData.shortName || safeT('aboutCompany.defaults.shortName');\r\n const shortDescription = companyData.shortDescription || safeT('aboutCompany.defaults.shortDescription');\r\n const establishedYear = companyData.establishedYear || \"----\";\r\n const experienceYears = companyData.experienceYears || \"0\";\r\n const description = companyData.description || \"\";\r\n const logo = companyData.logo || null;\r\n \r\n const getLogoUrl = (logoUrl) => {\r\n if (!logoUrl) return null;\r\n if (logoUrl.startsWith(\"http\")) return logoUrl;\r\n return `${imageBaseUrl}${logoUrl}`;\r\n };\r\n \r\n const logoUrl = getLogoUrl(logo);\r\n \r\n return (\r\n <>\r\n {/* Hero Section */}\r\n <section className=\"relative min-h-[80vh] flex items-center justify-center overflow-hidden pt-8 bg-gradient-brand\">\r\n <div className=\"absolute inset-0\">\r\n {/* Decorative shapes */}\r\n <div className=\"absolute inset-0\">\r\n <div\r\n className=\"shape shape-1 absolute w-12 h-12 bg-white/5 rounded-full -top-6 -left-6\"\r\n style={{ left: \"10%\", top: \"20%\" }}\r\n ></div>\r\n <div\r\n className=\"shape shape-3 absolute w-10 h-10 bg-white/5 rounded-full -bottom-4 -right-4\"\r\n style={{ right: \"30%\", bottom: \"10%\" }}\r\n ></div>\r\n <div\r\n className=\"shape shape-4 absolute w-14 h-14 bg-white/5 rounded-md -bottom-6 -left-6\"\r\n style={{ left: \"20%\", bottom: \"30%\" }}\r\n ></div>\r\n </div>\r\n \r\n {/* Pattern overlay */}\r\n <div\r\n className='absolute inset-0 bg-[url(\"data:image/svg+xml,%3Csvg width=\\\\\\\"60\\\\\\\" height=\\\\\\\"60\\\\\\\" viewBox=\\\\\\\"0 0 60 60\\\\\\\" xmlns=\\\\\\\"http://www.w3.org/2000/svg\\\\\\\"%3E%3Cg fill=\\\\\\\"none\\\\\\\" fill-rule=\\\\\\\"evenodd\\\\\\\"%3E%3Cg fill=\\\\\\\"%23ffffff\\\\\\\" fill-opacity=\\\\\\\"0.05\\\\\\\"%3E%3Ccircle cx=\\\\\\\"30\\\\\\\" cy=\\\\\\\"30\\\\\\\" r=\\\\\\\"2\\\\\\\"/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\")] opacity-20'\r\n ></div>\r\n </div>\r\n \r\n <div className=\"relative z-10 max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 text-center\">\r\n <div className=\"space-y-6\">\r\n {/* Logo + Tên */}\r\n <div className=\"space-y-2\">\r\n <div className=\"w-20 h-20 mx-auto rounded-full bg-gradient-accent p-1\">\r\n <div className=\"w-full h-full rounded-full flex items-center justify-center overflow-hidden bg-body\">\r\n {logoUrl ? (\r\n <img\r\n src={logoUrl}\r\n alt={name || shortName}\r\n className=\"w-full h-full object-cover rounded-full\"\r\n onError={(e) => {\r\n e.target.style.display = 'none';\r\n const fallbackDiv = document.createElement('div');\r\n fallbackDiv.className = 'text-2xl font-bold text-gradient-brand';\r\n fallbackDiv.textContent = shortName;\r\n e.target.parentElement.appendChild(fallbackDiv);\r\n }}\r\n />\r\n ) : (\r\n <div className=\"text-2xl font-bold text-gradient-brand\">\r\n {shortName}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n <h1 className=\"text-5xl lg:text-6xl font-extrabold tracking-tight mb-4 text-gradient-brand drop-shadow-[0_2px_6px_rgba(0,0,0,0.4)]\">\r\n {name}\r\n </h1>\r\n </div>\r\n\r\n {/* Slogan */}\r\n <div className=\"max-w-4xl mx-auto\">\r\n <div\r\n dangerouslySetInnerHTML={{ __html: shortDescription }}\r\n className=\"prose max-w-none mb-8 leading-relaxed text-inverse text-lg sm:text-xl md:text-2xl font-light tracking-wide\"\r\n />\r\n \r\n <div className=\"inline-flex items-center px-4 py-2 rounded-full border bg-white/20 border-white/40 text-inverse text-small font-medium\">\r\n {safeT('aboutCompany.hero.establishedYear', { year: establishedYear })} - {safeT('aboutCompany.hero.experience', { years: experienceYears })}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n {/* About Us Section */}\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n <div className=\"grid lg:grid-cols-2 gap-12 items-center\">\r\n {/* Câu chuyện */}\r\n <div>\r\n <div className=\"inline-block px-4 py-2 rounded-full text-small font-semibold mb-4 bg-surface text-brand-primary border f-border\">\r\n <ThemeIcon name=\"icon-aboutCompanyBook\" folder=\"AboutCompanySection\" className=\"w-6 h-6\" useOriginalColor={true}/> {safeT('aboutCompany.story.badge')}\r\n </div>\r\n \r\n <h2 className=\"text-3xl lg:text-4xl font-bold mb-6 text-main\">\r\n {safeT('aboutCompany.story.title')}{\" \"}\r\n <span className=\"block text-gradient-brand\">{shortName}</span>\r\n </h2>\r\n\r\n <div\r\n dangerouslySetInnerHTML={{ __html: description }}\r\n className=\"prose max-w-none text-muted\"\r\n />\r\n </div>\r\n\r\n {/* Vision - Mission - Core Values */}\r\n <div className=\"text-muted\">\r\n <CompanyValues\r\n companyData={companyData}\r\n t={safeT}\r\n isDarkMode={isDarkMode}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n </>\r\n );\r\n};\r\n\r\nexport default AboutCompanySection;","import React, { useEffect, useRef, useState } from \"react\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst TimelineSection = ({ data, t, section }) => {\r\n const timelineData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data)\r\n ?.map((item) => item.data) || [];\r\n\r\n const [timelineVisible, setTimelineVisible] = useState([]);\r\n const timelineRefs = useRef([]);\r\n const sectionTitle = section?.title || \"Timeline\";\r\n\r\n useEffect(() => {\r\n setTimelineVisible(new Array(timelineData.length).fill(false));\r\n }, [timelineData.length]);\r\n\r\n useEffect(() => {\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n const index = timelineRefs.current.findIndex(\r\n (el) => el === entry.target\r\n );\r\n if (index !== -1) {\r\n setTimelineVisible((prev) => {\r\n const updated = [...prev];\r\n updated[index] = true;\r\n return updated;\r\n });\r\n observer.unobserve(entry.target);\r\n }\r\n }\r\n });\r\n },\r\n { threshold: 0.1 }\r\n );\r\n\r\n timelineRefs.current.forEach((el) => el && observer.observe(el));\r\n return () =>\r\n timelineRefs.current.forEach((el) => el && observer.unobserve(el));\r\n }, [timelineData.length]);\r\n\r\n if (!timelineData.length) {\r\n return (\r\n <section className=\"py-20 bg-body\">\r\n <div className=\"max-w-7xl mx-auto px-4 text-center\">\r\n <h3 className=\"text-subtitle font-semibold mb-2 text-main\">\r\n {t(\"timeline.noData.title\") || \"Chưa có dữ liệu\"}\r\n </h3>\r\n <p className=\"text-body text-muted\">\r\n {t(\"timeline.noData.description\") ||\r\n \"Hiện tại chưa có milestone nào được thiết lập.\"}\r\n </p>\r\n </div>\r\n </section>\r\n );\r\n }\r\n\r\n return (\r\n <SectionWrapper>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Tiêu đề */}\r\n <div className=\"text-center mb-12\">\r\n <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\">\r\n <ThemeIcon name=\"icon-timeLineChart\" folder=\"TimlineSection\" className=\"w-5 h-5 icon-gradient\" /> {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n {/* Timeline */}\r\n <div className=\"relative\">\r\n {/* Đường trục chính */}\r\n <div className=\"absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-brand rounded-full\"></div>\r\n\r\n <div className=\"space-y-8\">\r\n {timelineData.map((milestone, index) => (\r\n <div\r\n key={index}\r\n ref={(el) => (timelineRefs.current[index] = el)}\r\n className={`flex items-center transition-all duration-700 ease-out ${\r\n index % 2 === 0 ? \"flex-row\" : \"flex-row-reverse\"\r\n } ${\r\n timelineVisible[index]\r\n ? \"opacity-100 scale-100\"\r\n : \"opacity-0 scale-75\"\r\n }`}\r\n style={{ transitionDelay: `${index * 200}ms` }}\r\n >\r\n {/* Nội dung timeline */}\r\n <div className=\"flex-1 px-8\">\r\n <div className=\"card\">\r\n <div className=\"card-title text-brand-primary\">\r\n {milestone.time}\r\n </div>\r\n <h3 className=\"card-title text-main mb-1\">\r\n {milestone.title}\r\n </h3>\r\n <p className=\"card-text\">\r\n {milestone.description}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n {/* Dấu chấm */}\r\n <div className=\"w-6 h-6 bg-gradient-brand rounded-full border-4 border-[var(--bg-body)] shadow-[0_0_10px_5px_rgba(37,99,235,0.4)] flex-shrink-0 z-10 animate-pulse\"></div>\r\n\r\n <div className=\"flex-1\"></div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default TimelineSection;","import React, { useEffect, useRef, useState } from \"react\";\r\n\r\nconst PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {\r\n const itemRef = useRef(null);\r\n const [visible, setVisible] = useState(false);\r\n const [isHovered, setIsHovered] = useState(false);\r\n\r\n useEffect(() => {\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n setVisible(true);\r\n observer.unobserve(entry.target);\r\n }\r\n });\r\n },\r\n { threshold: 0.2 }\r\n );\r\n if (itemRef.current) observer.observe(itemRef.current);\r\n return () => itemRef.current && observer.unobserve(itemRef.current);\r\n }, []);\r\n\r\n const logoSrc = getLogoUrl(partner.logoUrl);\r\n\r\n const cardContent = (\r\n <>\r\n {/* Decorative background elements for dark mode */}\r\n {isDarkMode && (\r\n <>\r\n <div\r\n className=\"absolute w-12 h-12 rounded-full\"\r\n style={{ left: \"10%\", top: \"20%\", background: \"rgba(255,255,255,0.05)\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-10 h-10 rounded-full\"\r\n style={{ right: \"30%\", bottom: \"10%\", background: \"rgba(255,255,255,0.05)\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-14 h-14 rounded-md\"\r\n style={{ left: \"20%\", bottom: \"30%\", background: \"rgba(255,255,255,0.05)\" }}\r\n ></div>\r\n <div\r\n className=\"absolute inset-0 opacity-20\"\r\n style={{\r\n backgroundImage: 'url(\"data:image/svg+xml,%3Csvg width=\\\\\"60\\\\\" height=\\\\\"60\\\\\" viewBox=\\\\\"0 0 60 60\\\\\" xmlns=\\\\\"http://www.w3.org/2000/svg\\\\\"%3E%3Cg fill=\\\\\"none\\\\\" fill-rule=\\\\\"evenodd\\\\\"%3E%3Cg fill=\\\\\"%23ffffff\\\\\" fill-opacity=\\\\\"0.05\\\\\"%3E%3Ccircle cx=\\\\\"30\\\\\" cy=\\\\\"30\\\\\" r=\\\\\"2\\\\\"/\\\\%3E%3C/g\\\\%3E%3C/g\\\\%3E%3C/svg\\\\%3E\")'\r\n }}\r\n ></div>\r\n </>\r\n )}\r\n\r\n {/* Logo container */}\r\n <div \r\n className=\"w-20 h-14 flex items-center justify-center mb-4 rounded-lg overflow-hidden bg-surface\" \r\n style={{ \r\n borderWidth: '1px', \r\n borderStyle: 'solid', \r\n borderColor: isHovered ? 'var(--brand-primary)' : 'var(--border-color)',\r\n backgroundColor: isHovered ? 'var(--bg-body)' : 'var(--bg-surface)',\r\n transition: 'all 0.3s ease'\r\n }}\r\n >\r\n {logoSrc ? (\r\n <img\r\n src={logoSrc}\r\n alt={partner.name}\r\n className=\"max-w-full max-h-full object-contain\"\r\n style={{\r\n filter: isHovered \r\n ? 'grayscale(0) opacity(1)' \r\n : (isDarkMode ? 'grayscale(0.3) opacity(0.8)' : 'grayscale(0.2) opacity(0.9)'),\r\n transform: isHovered ? 'scale(1.05)' : 'scale(1)',\r\n transition: 'all 0.3s ease'\r\n }}\r\n />\r\n ) : (\r\n <div className=\"w-full h-full bg-gradient-brand flex items-center justify-center\">\r\n <span className=\"text-white font-bold text-center text-small px-1\">\r\n {partner.name}\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Partner name - using .card-title */}\r\n <h4 className=\"card-title text-center mb-2\">\r\n {partner.name}\r\n </h4>\r\n\r\n {/* Partner description - using .card-text */}\r\n <p className=\"card-text text-center mb-2\">\r\n {partner.description}\r\n </p>\r\n\r\n {/* Website hint - using .card-link */}\r\n {partner.websiteUrl && (\r\n <div \r\n className=\"card-link justify-center\"\r\n style={{ \r\n opacity: isHovered ? 1 : 0,\r\n transform: isHovered ? 'translateY(0)' : 'translateY(4px)',\r\n transition: 'all 0.3s ease'\r\n }}\r\n >\r\n {t('partners.viewDetails') || 'Xem chi tiết'} →\r\n </div>\r\n )}\r\n </>\r\n );\r\n\r\n // Using existing .card class with animation styles\r\n const baseClasses = `card items-center justify-center transition-all duration-700 ease-out overflow-hidden ${\r\n visible ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\"\r\n }`;\r\n\r\n // Inline styles for dynamic animation delay\r\n const dynamicStyles = { \r\n transitionDelay: `${idx * 150}ms`\r\n };\r\n\r\n // Conditional rendering based on websiteUrl\r\n if (partner.websiteUrl) {\r\n return (\r\n <a\r\n ref={itemRef}\r\n href={partner.websiteUrl}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className={`${baseClasses} cursor-pointer`}\r\n style={{ \r\n ...dynamicStyles,\r\n textDecoration: 'none'\r\n }}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n >\r\n {cardContent}\r\n </a>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n ref={itemRef}\r\n className={baseClasses}\r\n style={dynamicStyles}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n >\r\n {cardContent}\r\n </div>\r\n );\r\n};\r\n\r\nexport default PartnerCard;","import React, { useState, useEffect, useRef, useMemo } from \"react\";\r\nimport PartnerCard from \"./PartnerCard\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\n// Hook lấy kích thước cửa sổ\r\nfunction useWindowSize() {\r\n const [width, setWidth] = useState(\r\n typeof window !== \"undefined\" ? window.innerWidth : 1200\r\n );\r\n\r\n useEffect(() => {\r\n if (typeof window === \"undefined\") return;\r\n const handleResize = () => setWidth(window.innerWidth);\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, []);\r\n\r\n return width;\r\n}\r\n\r\nconst PartnersSection = ({ data, t, imageBaseUrl = \"\", section }) => {\r\n const partnersData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data)\r\n ?.map((item) => item.data) || [];\r\n\r\n const [currentPartnerSlide, setCurrentPartnerSlide] = useState(0);\r\n const [partnersVisible, setPartnersVisible] = useState(false);\r\n const partnersRef = useRef(null);\r\n const windowWidth = useWindowSize();\r\n\r\n const sectionTitle = section?.title || t(\"partners.sectionTitle\") || \"Đối tác\";\r\n\r\n const getLogoUrl = (logoUrl) => {\r\n if (!logoUrl) return null;\r\n if (logoUrl.startsWith(\"http\")) return logoUrl;\r\n return `${imageBaseUrl}${logoUrl}`;\r\n };\r\n\r\n // Gom nhóm partners thành từng slide\r\n const partners = useMemo(() => {\r\n const getPerSlide = () => {\r\n if (windowWidth < 640) return 2;\r\n if (windowWidth < 1024) return 3;\r\n return 4;\r\n };\r\n const grouped = [];\r\n const perSlide = getPerSlide();\r\n for (let i = 0; i < partnersData.length; i += perSlide) {\r\n grouped.push(partnersData.slice(i, i + perSlide));\r\n }\r\n return grouped;\r\n }, [partnersData, windowWidth]);\r\n\r\n // Tự động đổi slide\r\n useEffect(() => {\r\n if (partners.length > 1) {\r\n const interval = setInterval(() => {\r\n setCurrentPartnerSlide((prev) => (prev + 1) % partners.length);\r\n }, 5000);\r\n return () => clearInterval(interval);\r\n }\r\n }, [partners.length]);\r\n\r\n // Quan sát khi hiển thị trong viewport\r\n useEffect(() => {\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n setPartnersVisible(true);\r\n observer.unobserve(entry.target);\r\n }\r\n });\r\n },\r\n { threshold: 0.1 }\r\n );\r\n\r\n if (partnersRef.current) observer.observe(partnersRef.current);\r\n return () => partnersRef.current && observer.unobserve(partnersRef.current);\r\n }, []);\r\n\r\n if (!partnersData.length) return null;\r\n\r\n return (\r\n <SectionWrapper>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Header */}\r\n <div className=\"text-center mb-12\">\r\n <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\">\r\n <ThemeIcon name=\"icon-partner\" folder=\"PartnersSection\" className=\"w-4 h-4 icon-gradient\"/> {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n {/* Danh sách đối tác */}\r\n <div ref={partnersRef} className=\"relative overflow-hidden\">\r\n <div\r\n className={`transition-all duration-1000 ease-out ${\r\n partnersVisible ? \"opacity-100 scale-100\" : \"opacity-0 scale-95\"\r\n }`}\r\n >\r\n <div className=\"relative h-56 md:h-64 lg:h-72 xl:h-80 mb-8\">\r\n {partners.map((group, slideIndex) => (\r\n <div\r\n key={slideIndex}\r\n className={`absolute inset-0 transition-all duration-1000 ease-in-out ${\r\n slideIndex === currentPartnerSlide\r\n ? \"opacity-100 translate-x-0\"\r\n : slideIndex < currentPartnerSlide\r\n ? \"opacity-0 -translate-x-full\"\r\n : \"opacity-0 translate-x-full\"\r\n }`}\r\n >\r\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-6 h-full px-2\">\r\n {group.map((partner, idx) => (\r\n <PartnerCard\r\n key={partner.id || idx}\r\n partner={partner}\r\n idx={idx}\r\n t={t}\r\n getLogoUrl={getLogoUrl}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Indicator */}\r\n {partners.length > 1 && (\r\n <div className=\"flex justify-center space-x-2\">\r\n {partners.map((_, index) => (\r\n <button\r\n key={index}\r\n onClick={() => setCurrentPartnerSlide(index)}\r\n className={`w-3 h-3 rounded-full transition-all duration-300 ${\r\n index === currentPartnerSlide\r\n ? \"bg-brand-primary scale-125 shadow-lg\"\r\n : \"bg-surface hover:bg-brand-primary/70\"\r\n }`}\r\n aria-label={`Slide ${index + 1}`}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default PartnersSection;\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }) => {\r\n const [milestones, setMilestones] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [timelineVisible, setTimelineVisible] = useState([]);\r\n const timelineRefs = useRef([]);\r\n const sectionTitle = section?.title || \"...\";\r\n\r\n useEffect(() => {\r\n const fetchMilestones = async () => {\r\n if (getMilestoneTimeline) {\r\n try {\r\n setLoading(true);\r\n const res = await getMilestoneTimeline();\r\n if (res.success) setMilestones(res.data || []);\r\n else setMilestones([]);\r\n } catch {\r\n setMilestones([]);\r\n } finally {\r\n setLoading(false);\r\n }\r\n } else {\r\n const milestonesData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data)\r\n ?.map((item) => item.data) || [];\r\n setMilestones(milestonesData);\r\n setLoading(false);\r\n }\r\n };\r\n fetchMilestones();\r\n }, []);\r\n\r\n useEffect(() => {\r\n setTimelineVisible(new Array(milestones.length).fill(false));\r\n }, [milestones.length]);\r\n\r\n useEffect(() => {\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n const index = timelineRefs.current.findIndex((el) => el === entry.target);\r\n if (index !== -1) {\r\n setTimelineVisible((prev) => {\r\n const updated = [...prev];\r\n updated[index] = true;\r\n return updated;\r\n });\r\n observer.unobserve(entry.target);\r\n }\r\n }\r\n });\r\n },\r\n { threshold: 0.1 }\r\n );\r\n\r\n timelineRefs.current.forEach((el) => el && observer.observe(el));\r\n return () => timelineRefs.current.forEach((el) => el && observer.unobserve(el));\r\n }, [milestones.length]);\r\n\r\n if (loading) {\r\n return (\r\n <section className=\"py-20 text-center\">\r\n <p className=\"text-main\">{t(\"milestone.status.loadingData\")}</p>\r\n </section>\r\n );\r\n }\r\n\r\n if (!milestones.length) {\r\n return (\r\n <section className=\"py-20 bg-body\">\r\n <div className=\"max-w-7xl mx-auto px-4 text-center\">\r\n <h3 className=\"text-lg font-semibold mb-2 text-main\">\r\n {t(\"milestone.status.noData\")}\r\n </h3>\r\n <p className=\"text-muted\">{t(\"milestone.noDataDescription\")}</p>\r\n </div>\r\n </section>\r\n );\r\n }\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Tiêu đề */}\r\n <div className=\"text-center mb-12\">\r\n <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\">\r\n <ThemeIcon name=\"icon-timeLineChart\" folder=\"TimlineSection\" className=\"w-5 h-5 icon-gradient\" /> {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n {/* Timeline */}\r\n <div className=\"relative\">\r\n <div className=\"absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-brand rounded-full\"></div>\r\n\r\n <div className=\"space-y-8\">\r\n {milestones.map((milestone, index) => (\r\n <div\r\n key={milestone.id}\r\n ref={(el) => (timelineRefs.current[index] = el)}\r\n className={`flex items-center transition-all duration-700 ease-out ${\r\n index % 2 === 0 ? \"flex-row\" : \"flex-row-reverse\"\r\n } ${timelineVisible[index] ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\"}`}\r\n style={{ transitionDelay: `${index * 200}ms` }}\r\n >\r\n <div className=\"flex-1 px-8\">\r\n <div className=\"card\">\r\n <div className=\"text-brand-primary font-bold text-xl mb-2\">\r\n {milestone.time}\r\n </div>\r\n <h3 className=\"card-title\">\r\n {milestone.title}\r\n </h3>\r\n <p className=\"card-text\">{milestone.description}</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"w-6 h-6 bg-gradient-brand rounded-full border-4 border-[var(--bg-body)] shadow-[0_0_10px_5px_rgba(37,99,235,0.4)] flex-shrink-0 z-10 animate-pulse\"></div>\r\n\r\n <div className=\"flex-1\"></div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default MilestoneSection;","import React, { useState, useEffect } from \"react\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst TestimonialsSection = ({ data, t, section }) => {\r\n const [currentIndex, setCurrentIndex] = useState(0);\r\n const [isTransitioning, setIsTransitioning] = useState(false);\r\n const sectionTitle = section?.title || t(\"testimonials.sectionTitle\") || \"Cảm nhận khách hàng\";\r\n\r\n const testimonials =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data)\r\n ?.map((item) => ({\r\n quote: item.data?.content || \"\",\r\n author: item.data?.customerName || \"\",\r\n position: item.data?.customerTitle || \"\",\r\n company: item.data?.customerCompany || \"\",\r\n })) || [];\r\n\r\n // Tự động đổi testimonial với hiệu ứng fade\r\n useEffect(() => {\r\n if (testimonials.length > 1) {\r\n const interval = setInterval(() => {\r\n setIsTransitioning(true);\r\n setTimeout(() => {\r\n setCurrentIndex((prev) => (prev + 1) % testimonials.length);\r\n setIsTransitioning(false);\r\n }, 300);\r\n }, 5000);\r\n return () => clearInterval(interval);\r\n }\r\n }, [testimonials.length]);\r\n\r\n const handleIndicatorClick = (index) => {\r\n if (index !== currentIndex) {\r\n setIsTransitioning(true);\r\n setTimeout(() => {\r\n setCurrentIndex(index);\r\n setIsTransitioning(false);\r\n }, 300);\r\n }\r\n };\r\n\r\n // Nếu không có testimonials, không render gì\r\n if (testimonials.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <SectionWrapper>\r\n <div className=\"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center\">\r\n {/* Header */}\r\n <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\">\r\n <ThemeIcon name=\"icon-testimonials\" folder=\"TestimonialsSection\" className=\"w-4 h-4 icon-gradient\"/> {sectionTitle}\r\n </div>\r\n\r\n {/* Nội dung */}\r\n <div className=\"relative\">\r\n <div className=\"card\">\r\n <div\r\n style={{\r\n opacity: isTransitioning ? 0 : 1,\r\n transform: isTransitioning ? 'translateY(10px)' : 'translateY(0)',\r\n transition: 'opacity 0.3s ease-in-out, transform 0.3s ease-in-out'\r\n }}\r\n >\r\n <blockquote className=\"card-text text-body italic mb-6\">\r\n \"{testimonials[currentIndex].quote}\"\r\n </blockquote>\r\n\r\n <div className=\"flex items-center justify-center space-x-4\">\r\n <div className=\"text-3xl\"><ThemeIcon name=\"icon-testimonialsUser\" folder=\"TestimonialsSection\" className=\"w-4 h-4 icon-gradient\"/></div>\r\n <div className=\"text-left\">\r\n <div className=\"card-title\">\r\n {testimonials[currentIndex].author}\r\n </div>\r\n <div className=\"card-text\">\r\n {testimonials[currentIndex].position}\r\n </div>\r\n {testimonials[currentIndex].company && (\r\n <div className=\"card-link\">\r\n {testimonials[currentIndex].company}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Indicators */}\r\n {testimonials.length > 1 && (\r\n <div className=\"flex justify-center space-x-2 mt-4\">\r\n {testimonials.map((_, index) => (\r\n <button \r\n key={index}\r\n onClick={() => handleIndicatorClick(index)}\r\n className={`w-2.5 h-2.5 rounded-full transition-all duration-300 ${\r\n index === currentIndex\r\n ? \"bg-brand-secondary\"\r\n : \"bg-surface hover:bg-brand-primary\"\r\n }`}\r\n aria-label={`Slide ${index + 1}`}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default TestimonialsSection;","import React from \"react\";\r\n\r\nconst PartnerListCard = ({ partner, idx, t, isDarkMode, getLogoUrl }) => {\r\n const logoUrl = getLogoUrl(partner.logoUrl);\r\n \r\n return (\r\n \r\n <a href={partner.websiteUrl || '#'}\r\n target={partner.websiteUrl ? '_blank' : '_self'}\r\n rel={partner.websiteUrl ? 'noopener noreferrer' : ''}\r\n className=\"card\"\r\n style={{\r\n animationDelay: `${idx * 0.1}s`,\r\n textDecoration: 'none',\r\n overflow: 'hidden',\r\n minHeight: '280px',\r\n padding: '1.5rem',\r\n display: 'flex',\r\n flexDirection: 'column'\r\n }}\r\n >\r\n <div style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flex: 1\r\n }}>\r\n {logoUrl ? (\r\n <div style={{\r\n width: '100%',\r\n height: '100px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginBottom: '1rem'\r\n }}>\r\n <img\r\n src={logoUrl}\r\n alt={partner.name || t(\"partners.logoAlt\") || \"Partner logo\"}\r\n style={{\r\n maxWidth: '100%',\r\n maxHeight: '100%',\r\n objectFit: 'contain',\r\n transition: 'transform 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = 'scale(1.05)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = 'scale(1)';\r\n }}\r\n loading=\"lazy\"\r\n />\r\n </div>\r\n ) : (\r\n <div className=\"bg-surface\" style={{\r\n width: '5rem',\r\n height: '5rem',\r\n borderRadius: '9999px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginBottom: '1rem'\r\n }}>\r\n <span style={{ fontSize: '1.875rem' }}>🤝</span>\r\n </div>\r\n )}\r\n \r\n <h3 className=\"card-title text-main\" style={{\r\n fontSize: '1rem',\r\n textAlign: 'center',\r\n marginBottom: '0.5rem',\r\n lineHeight: '1.4'\r\n }}>\r\n {partner.name || t('partners.unnamed') || 'Partner'}\r\n </h3>\r\n \r\n {partner.description && (\r\n <p className=\"card-text\" style={{\r\n textAlign: 'center',\r\n marginTop: '0.5rem',\r\n fontSize: '0.875rem',\r\n lineHeight: '1.5',\r\n display: '-webkit-box',\r\n WebkitLineClamp: 3,\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden'\r\n }}>\r\n {partner.description}\r\n </p>\r\n )}\r\n </div>\r\n </a>\r\n );\r\n};\r\n\r\nexport default PartnerListCard;","import React, { useEffect, useState, useRef, useMemo } from \"react\";\r\nimport PartnerListCard from \"./PartnerListCard\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\n// Hook theo dõi kích thước màn hình\r\nfunction useWindowSize() {\r\n const [width, setWidth] = useState(\r\n typeof window !== \"undefined\" ? window.innerWidth : 1200\r\n );\r\n\r\n useEffect(() => {\r\n const handleResize = () => setWidth(window.innerWidth);\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, []);\r\n\r\n return width;\r\n}\r\n\r\nconst PartnerListSection = ({ t, getPartnerList, imageBaseUrl = \"\", section }) => {\r\n const [partnersData, setPartnersData] = useState([]);\r\n const [error, setError] = useState(null);\r\n const [loading, setLoading] = useState(true);\r\n const [currentPartnerSlide, setCurrentPartnerSlide] = useState(0);\r\n const [partnersVisible, setPartnersVisible] = useState(false);\r\n const partnersRef = useRef(null);\r\n const windowWidth = useWindowSize();\r\n\r\n const sectionTitle = section?.title || t(\"partners.sectionTitle\");\r\n\r\n const getLogoUrl = (logoUrl) => {\r\n if (!logoUrl) return null;\r\n if (logoUrl.startsWith(\"http\")) return logoUrl;\r\n return `${imageBaseUrl}${logoUrl}`;\r\n };\r\n\r\n // Gọi API lấy partner\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n try {\r\n const res = await getPartnerList();\r\n if (res.success) {\r\n setPartnersData(res.data || []);\r\n } else {\r\n setError(res.error || \"Error fetching partners\");\r\n }\r\n } catch (err) {\r\n setError(err.message);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n fetchData();\r\n }, []);\r\n\r\n // Group partners thành slides\r\n const partners = useMemo(() => {\r\n const getPerSlide = () => {\r\n if (windowWidth < 640) return 2;\r\n if (windowWidth < 1024) return 3;\r\n return 4;\r\n };\r\n const grouped = [];\r\n const perSlide = getPerSlide();\r\n for (let i = 0; i < partnersData.length; i += perSlide) {\r\n grouped.push(partnersData.slice(i, i + perSlide));\r\n }\r\n return grouped;\r\n }, [partnersData, windowWidth]);\r\n\r\n // Auto-rotate slides\r\n useEffect(() => {\r\n if (partners.length > 1) {\r\n const interval = setInterval(() => {\r\n setCurrentPartnerSlide((prev) => (prev + 1) % partners.length);\r\n }, 5000);\r\n return () => clearInterval(interval);\r\n }\r\n }, [partners.length]);\r\n\r\n // Hiệu ứng xuất hiện\r\n useEffect(() => {\r\n const fallbackTimer = setTimeout(() => setPartnersVisible(true), 500);\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n clearTimeout(fallbackTimer);\r\n setPartnersVisible(true);\r\n observer.unobserve(entry.target);\r\n }\r\n });\r\n },\r\n { threshold: 0.1, rootMargin: \"50px\" }\r\n );\r\n if (partnersRef.current) observer.observe(partnersRef.current);\r\n else {\r\n clearTimeout(fallbackTimer);\r\n setPartnersVisible(true);\r\n }\r\n return () => {\r\n clearTimeout(fallbackTimer);\r\n if (partnersRef.current) observer.unobserve(partnersRef.current);\r\n };\r\n }, []);\r\n\r\n // Loading & Error\r\n if (loading) {\r\n return (\r\n <section className=\"py-20 text-center bg-body\">\r\n <p className=\"text-body text-muted\">\r\n {t(\"partners.loading\") || \"Đang tải danh sách đối tác...\"}\r\n </p>\r\n </section>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <section className=\"py-20 text-center bg-body\">\r\n <p className=\"text-body text-brand-secondary\">\r\n {t(\"partners.error\") || error}\r\n </p>\r\n </section>\r\n );\r\n }\r\n\r\n if (!partnersData.length) return null;\r\n\r\n return (\r\n <SectionWrapper>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Header */}\r\n <div className=\"text-center mb-12\">\r\n <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\">\r\n <ThemeIcon name=\"icon-partner\" folder=\"PartnersSection\" className=\"w-4 h-4 icon-gradient\"/> {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n {/* Slider Container */}\r\n <div ref={partnersRef} className=\"relative\">\r\n <div\r\n className={`transition-all duration-1000 ease-out ${\r\n partnersVisible ? \"opacity-100 scale-100\" : \"opacity-0 scale-95\"\r\n }`}\r\n >\r\n {/* Slides */}\r\n <div className=\"relative overflow-hidden mb-12\">\r\n <div style={{ minHeight: '320px' }}>\r\n {partners.map((group, slideIndex) => (\r\n <div\r\n key={slideIndex}\r\n className={`absolute inset-0 w-full transition-all duration-1000 ease-in-out ${\r\n slideIndex === currentPartnerSlide\r\n ? \"opacity-100 translate-x-0\"\r\n : slideIndex < currentPartnerSlide\r\n ? \"opacity-0 -translate-x-full\"\r\n : \"opacity-0 translate-x-full\"\r\n }`}\r\n style={{\r\n zIndex: slideIndex === currentPartnerSlide ? 10 : 1,\r\n }}\r\n >\r\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-8 px-2\">\r\n {group.map((partner, idx) => (\r\n <PartnerListCard\r\n key={partner.id || `${slideIndex}-${idx}`}\r\n partner={partner}\r\n idx={idx}\r\n t={t}\r\n getLogoUrl={getLogoUrl}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Indicators */}\r\n {partners.length > 1 && (\r\n <div className=\"flex justify-center space-x-3\" style={{ \r\n position: 'relative',\r\n zIndex: 100,\r\n paddingTop: '1rem'\r\n }}>\r\n {partners.map((_, index) => (\r\n <button\r\n key={index}\r\n onClick={() => setCurrentPartnerSlide(index)}\r\n style={{\r\n width: '12px',\r\n height: '12px',\r\n borderRadius: '50%',\r\n border: 'none',\r\n cursor: 'pointer',\r\n transition: 'all 0.3s ease',\r\n backgroundColor: index === currentPartnerSlide \r\n ? 'var(--brand-primary)' \r\n : 'rgba(151, 151, 151, 0.8)',\r\n transform: index === currentPartnerSlide ? 'scale(1.3)' : 'scale(1)'\r\n }}\r\n onMouseEnter={(e) => {\r\n if (index !== currentPartnerSlide) {\r\n e.currentTarget.style.backgroundColor = 'rgba(151, 151, 151, 0.8)';\r\n }\r\n }}\r\n onMouseLeave={(e) => {\r\n if (index !== currentPartnerSlide) {\r\n e.currentTarget.style.backgroundColor = 'rgba(151, 151, 151, 0.8)';\r\n }\r\n }}\r\n aria-label={`Slide ${index + 1}`}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default PartnerListSection;","import React, { useState } from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from '../../contexts/ThemeIcon';\r\nconst ContactFormSection = ({ data, t, isDarkMode, consultationRequestService }) => {\r\n const [formData, setFormData] = useState({\r\n fullName: '',\r\n workEmail: '',\r\n phoneNumber: '',\r\n companyName: '',\r\n jobTitle: '',\r\n businessType: '',\r\n expectedBudget: '',\r\n expectedTimeline: '',\r\n requestTitle: '',\r\n requestDescription: '',\r\n });\r\n\r\n const [formErrors, setFormErrors] = useState({});\r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n const [submitStatus, setSubmitStatus] = useState(null);\r\n const [submitMessage, setSubmitMessage] = useState('');\r\n\r\n // Enhanced validation function with proper field names\r\n const validateField = (name, value) => {\r\n const errors = {};\r\n\r\n switch (name) {\r\n case 'fullName':\r\n if (!value?.trim()) errors.fullName = 'Họ và tên là bắt buộc';\r\n else if (value.trim().length < 2) errors.fullName = 'Tên phải có ít nhất 2 ký tự';\r\n break;\r\n\r\n case 'workEmail':\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n if (!value?.trim()) errors.workEmail = 'Email là bắt buộc';\r\n else if (!emailRegex.test(value.trim())) errors.workEmail = 'Email không hợp lệ';\r\n break;\r\n\r\n case 'phoneNumber':\r\n const phoneRegex = /^[0-9\\s\\-\\+\\(\\)]{10,15}$/;\r\n if (value && !phoneRegex.test(value.trim())) errors.phoneNumber = 'Số điện thoại không hợp lệ';\r\n break;\r\n\r\n case 'requestTitle':\r\n if (!value?.trim()) errors.requestTitle = 'Tiêu đề yêu cầu là bắt buộc';\r\n else if (value.trim().length < 5) errors.requestTitle = 'Tiêu đề phải có ít nhất 5 ký tự';\r\n break;\r\n\r\n case 'requestDescription':\r\n if (!value?.trim()) errors.requestDescription = 'Mô tả yêu cầu là bắt buộc';\r\n else if (value.trim().length < 10) errors.requestDescription = 'Mô tả phải có ít nhất 10 ký tự';\r\n break;\r\n\r\n case 'companyName':\r\n if (value && value.trim().length > 0 && value.trim().length < 2) {\r\n errors.companyName = 'Tên công ty phải có ít nhất 2 ký tự';\r\n }\r\n break;\r\n\r\n case 'jobTitle':\r\n if (value && value.trim().length > 0 && value.trim().length < 2) {\r\n errors.jobTitle = 'Chức vụ phải có ít nhất 2 ký tự';\r\n }\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n\r\n return errors;\r\n };\r\n\r\n const handleInputChange = (e) => {\r\n const { name, value } = e.target;\r\n\r\n setFormData(prev => ({\r\n ...prev,\r\n [name]: value || ''\r\n }));\r\n\r\n if (formErrors[name]) {\r\n setFormErrors(prev => {\r\n const newErrors = { ...prev };\r\n delete newErrors[name];\r\n return newErrors;\r\n });\r\n }\r\n };\r\n\r\n const handleBlur = (e) => {\r\n const { name, value } = e.target;\r\n const fieldErrors = validateField(name, value);\r\n setFormErrors(prev => ({\r\n ...prev,\r\n ...fieldErrors\r\n }));\r\n };\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n setIsSubmitting(true);\r\n setSubmitStatus(null);\r\n setSubmitMessage('');\r\n\r\n try {\r\n const allErrors = {};\r\n Object.keys(formData).forEach(key => {\r\n const fieldErrors = validateField(key, formData[key]);\r\n Object.assign(allErrors, fieldErrors);\r\n });\r\n\r\n if (Object.keys(allErrors).length > 0) {\r\n setFormErrors(allErrors);\r\n setIsSubmitting(false);\r\n return;\r\n }\r\n\r\n const cleanFormData = Object.keys(formData).reduce((acc, key) => {\r\n acc[key] = typeof formData[key] === 'string' ? formData[key].trim() : formData[key];\r\n return acc;\r\n }, {});\r\n\r\n let result;\r\n if (consultationRequestService?.create) {\r\n result = await consultationRequestService.create(cleanFormData);\r\n } else {\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n result = { success: true, message: 'Đã gửi thông tin thành công!' };\r\n }\r\n\r\n if (result?.success) {\r\n setSubmitStatus('success');\r\n setSubmitMessage(result.message || 'Cảm ơn bạn đã gửi thông tin! Chúng tôi sẽ liên hệ lại trong vòng 24 giờ.');\r\n\r\n setFormData({\r\n fullName: '',\r\n workEmail: '',\r\n phoneNumber: '',\r\n companyName: '',\r\n jobTitle: '',\r\n businessType: '',\r\n expectedBudget: '',\r\n expectedTimeline: '',\r\n requestTitle: '',\r\n requestDescription: '',\r\n });\r\n setFormErrors({});\r\n } else {\r\n setSubmitStatus('error');\r\n setSubmitMessage(result?.message || 'Có lỗi xảy ra khi gửi thông tin.');\r\n }\r\n } catch (error) {\r\n setSubmitStatus('error');\r\n setSubmitMessage(error?.message || 'Có lỗi xảy ra khi gửi thông tin. Vui lòng thử lại sau.');\r\n } finally {\r\n setIsSubmitting(false);\r\n }\r\n };\r\n\r\n const inputBaseClasses = `\r\n w-full px-4 py-3 rounded-xl border \r\n transition-all duration-200 \r\n focus:ring-2 focus:outline-none\r\n bg-surface\r\n text-main\r\n placeholder-text-muted\r\n `;\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n <div className=\"grid lg:grid-cols-3 gap-12\">\r\n {/* Form Section */}\r\n <div className=\"lg:col-span-4\">\r\n <div className=\"bg-surface rounded-2xl p-8 shadow-lg border transition-colors duration-200\" style={{ borderColor: 'var(--border-color)' }}>\r\n <div className=\"flex items-center mb-6\">\r\n <div className=\"w-10 h-10 rounded-lg bg-gradient-brand flex items-center justify-center mr-4\">\r\n <ThemeIcon name=\"icon-contactFormSend\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n </div>\r\n\r\n <div>\r\n <h2 className=\"text-subtitle font-bold text-main\">\r\n {t('form.title') || 'Gửi yêu cầu tư vấn'}\r\n </h2>\r\n <p className=\"text-small text-muted\">\r\n {t('form.subtitle') || 'Điền thông tin để nhận tư vấn miễn phí từ chuyên gia'}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n {/* Success/Error Message */}\r\n {submitStatus && (\r\n <div className={`mb-6 p-4 rounded-xl border transition-colors duration-200 ${\r\n submitStatus === 'success'\r\n ? 'bg-emerald-50 dark:bg-emerald-900/30 text-emerald-800 dark:text-emerald-300'\r\n : 'bg-red-50 dark:bg-red-900/30 text-red-800 dark:text-red-300'\r\n }`} style={{ borderColor: submitStatus === 'success' ? '#10b981' : '#ef4444' }}>\r\n <div className=\"flex items-center\">\r\n {submitStatus === 'success' ? (\r\n <ThemeIcon name=\"icon-contactFormCheck\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n ) : (\r\n <ThemeIcon name=\"icon-ContactFormAlertCircle\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n )}\r\n <p className=\"text-small font-medium\">{submitMessage}</p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n <form onSubmit={handleSubmit} className=\"space-y-6\">\r\n {/* Name and Email */}\r\n <div className=\"grid md:grid-cols-2 gap-6\">\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.fullName') || 'Họ và tên'} *\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"fullName\"\r\n value={formData.fullName || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.fullName ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder={t('contact.form.namePlaceholder')}\r\n required\r\n />\r\n {formErrors.fullName && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <ThemeIcon name=\"icon-ContactFormAlertCircle\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n {formErrors.fullName}\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.workEmail') || 'Email'} *\r\n </label>\r\n <input\r\n type=\"email\"\r\n name=\"workEmail\"\r\n value={formData.workEmail || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.workEmail ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder=\"email@company.com\"\r\n required\r\n />\r\n {formErrors.workEmail && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <ThemeIcon name=\"icon-ContactFormAlertCircle\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n {formErrors.workEmail}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Phone and Company */}\r\n <div className=\"grid md:grid-cols-2 gap-6\">\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.phoneNumber') || 'Số điện thoại'}\r\n </label>\r\n <input\r\n type=\"tel\"\r\n name=\"phoneNumber\"\r\n value={formData.phoneNumber || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.phoneNumber ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder=\"0901 234 567\"\r\n />\r\n {formErrors.phoneNumber && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <ThemeIcon name=\"icon-ContactFormAlertCircle\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n {formErrors.phoneNumber}\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.companyName') || 'Công ty/Tổ chức'}\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"companyName\"\r\n value={formData.companyName || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.companyName ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder={t('contact.form.fields.company')}\r\n />\r\n {formErrors.companyName && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <ThemeIcon name=\"icon-ContactFormAlertCircle\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n {formErrors.companyName}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Job Title and Business Type */}\r\n <div className=\"grid md:grid-cols-2 gap-6\">\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.jobTitle') || 'Chức vụ'}\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"jobTitle\"\r\n value={formData.jobTitle || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.jobTitle ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder={t('contact.form.positionPlaceholder')}\r\n />\r\n {formErrors.jobTitle && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <ThemeIcon name=\"icon-ContactFormAlertCircle\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n {formErrors.jobTitle}\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.businessType') || 'Loại hình kinh doanh'}\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"businessType\"\r\n value={formData.businessType || ''}\r\n onChange={handleInputChange}\r\n className={inputBaseClasses}\r\n style={{ borderColor: 'var(--border-color)' }}\r\n placeholder={t('form.fields.businessType')}\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Expected Budget and Timeline */}\r\n <div className=\"grid md:grid-cols-2 gap-6\">\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.expectedBudget') || 'Ngân sách dự kiến'}\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"expectedBudget\"\r\n value={formData.expectedBudget || ''}\r\n onChange={handleInputChange}\r\n className={inputBaseClasses}\r\n style={{ borderColor: 'var(--border-color)' }}\r\n placeholder={t('form.fields.expectedBudget')}\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.expectedTimeline') || 'Thời gian dự kiến'}\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"expectedTimeline\"\r\n value={formData.expectedTimeline || ''}\r\n onChange={handleInputChange}\r\n className={inputBaseClasses}\r\n style={{ borderColor: 'var(--border-color)' }}\r\n placeholder={t('form.fields.expectedTimeline')}\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Request Title */}\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.requestTitle') || 'Tiêu đề yêu cầu'} *\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"requestTitle\"\r\n value={formData.requestTitle || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.requestTitle ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder={t('contact.form.placeholders.subject')}\r\n required\r\n />\r\n {formErrors.requestTitle && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <ThemeIcon name=\"icon-ContactFormAlertCircle\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n {formErrors.requestTitle}\r\n </p>\r\n )}\r\n </div>\r\n\r\n {/* Request Description */}\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.requestDescription') || 'Mô tả yêu cầu'} *\r\n </label>\r\n <textarea\r\n name=\"requestDescription\"\r\n value={formData.requestDescription || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n rows=\"5\"\r\n className={`${inputBaseClasses} resize-none`}\r\n style={{ borderColor: formErrors.requestDescription ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder={t('contact.form.placeholders.message')}\r\n required\r\n />\r\n {formErrors.requestDescription && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <ThemeIcon name=\"icon-ContactFormAlertCircle\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n {formErrors.requestDescription}\r\n </p>\r\n )}\r\n </div>\r\n\r\n {/* Submit Buttons */}\r\n <div className=\"flex items-center space-x-4\">\r\n <button\r\n type=\"submit\"\r\n disabled={isSubmitting}\r\n 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\"\r\n >\r\n {isSubmitting ? (\r\n <>\r\n <ThemeIcon name=\"icon-ContactFormLoader2\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-muted\"/>\r\n {t('form.submitting') || 'Đang gửi...'}\r\n </>\r\n ) : (\r\n <>\r\n <ThemeIcon name=\"icon-contactFormSend\" folder=\"ContactFormSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n {t('form.submit') || 'Gửi yêu cầu'}\r\n </>\r\n )}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default ContactFormSection;","import React from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from '../../contexts/ThemeIcon';\r\nconst ContactInfoSection = ({ data, t, isDarkMode, section }) => {\r\n const contactData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data)\r\n ?.map((item) => item.data)\r\n || [];\r\n\r\n const sectionTitle = section?.title || '...';\r\n\r\n if (!contactData.length) return null;\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Section Title */}\r\n <div className=\"text-center mb-12\">\r\n <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)' }}>\r\n <ThemeIcon name=\"icon-contactInfoUser\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n <span className=\"text-main\">{sectionTitle}</span>\r\n </div>\r\n </div>\r\n\r\n {/* Contact Cards Grid */}\r\n <div className=\"grid md:grid-cols-2 lg:grid-cols-3 gap-8\">\r\n {contactData.map((contact, index) => (\r\n <div key={contact.id || index} className=\"card\">\r\n {/* Avatar & Name */}\r\n <div className=\"text-center mb-6\">\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '5rem',\r\n height: '5rem',\r\n borderRadius: '9999px',\r\n margin: '0 auto 1rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }}>\r\n <ThemeIcon name=\"icon-contactInfoUser\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n </div>\r\n \r\n <h3 className=\"card-title text-subtitle mb-2\">\r\n {contact.name}\r\n </h3>\r\n \r\n <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)' }}>\r\n {contact.position}\r\n </span>\r\n </div>\r\n\r\n {/* Contact Information */}\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\r\n {/* Phone */}\r\n <a\r\n href={`tel:${contact.phone}`}\r\n className=\"card-link\"\r\n style={{\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)',\r\n transition: 'all 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n >\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <ThemeIcon name=\"icon-contactInfoPhone\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n {t('contact.info.phone') || 'Điện thoại'}\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.phone}\r\n </p>\r\n </div>\r\n </a>\r\n\r\n {/* Email */}\r\n <a\r\n href={`mailto:${contact.email}`}\r\n className=\"card-link\"\r\n style={{\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)',\r\n transition: 'all 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n >\r\n <div className=\"bg-gradient-accent\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <ThemeIcon name=\"icon-contactInfoEmail\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n Email\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.email}\r\n </p>\r\n </div>\r\n </a>\r\n\r\n {/* Working Hours */}\r\n {contact.workingHours && (\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)'\r\n }}>\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <ThemeIcon name=\"icon-contactInfoClock\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-muted\"/>\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n {t('contact.info.workingHours') || 'Giờ làm việc'}\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.workingHours || t('contact.info.defaultWorkingHours') || 'T2-T6: 8:00-18:00'}\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default ContactInfoSection;","import React, { useState, useEffect } from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from '../../contexts/ThemeIcon';\r\nconst ContactListAutoSection = ({ data, t, isDarkMode, getContactList, section }) => {\r\n const [contacts, setContacts] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState(null);\r\n const sectionTitle = section?.title || '...';\r\n\r\n useEffect(() => {\r\n loadContacts();\r\n }, []);\r\n\r\n const loadContacts = async () => {\r\n try {\r\n setLoading(true);\r\n const result = await getContactList();\r\n if (result.success) {\r\n setContacts(result.data || []);\r\n } else {\r\n setError(result.error);\r\n }\r\n } catch (err) {\r\n console.error('Error loading contacts:', err);\r\n setError(t('contactList.error.loadData') || 'Có lỗi xảy ra khi tải danh sách liên hệ');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n // Loading State\r\n if (loading) {\r\n return (\r\n <div className=\"py-16 px-5 text-center bg-body\">\r\n <div className=\"inline-block w-10 h-10 border-4 border-color rounded-full animate-spin\" style={{ borderTopColor: 'var(--brand-primary)' }}></div>\r\n <p className=\"mt-4 text-muted\">\r\n {t('contactList.status.loading') || 'Đang tải danh sách liên hệ...'}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n // Error State\r\n if (error) {\r\n return (\r\n <div className=\"py-16 px-5 text-center bg-body\">\r\n <div className=\"text-base mb-2\" style={{ color: '#ef4444' }}>\r\n ⚠️ {t('contactList.error.title') || 'Lỗi tải dữ liệu'}\r\n </div>\r\n <p className=\"text-muted\">{error}</p>\r\n </div>\r\n );\r\n }\r\n\r\n // Empty State\r\n if (!contacts || contacts.length === 0) {\r\n return (\r\n <div className=\"py-16 px-5 text-center bg-body\">\r\n <div className=\"text-5xl mb-5\">📞</div>\r\n <h3 className=\"text-muted mb-2\">\r\n {t('contactList.status.noData.title') || 'Chưa có thông tin liên hệ'}\r\n </h3>\r\n <p className=\"text-muted opacity-75\">\r\n {t('contactList.status.noData.description') || 'Danh sách liên hệ sẽ hiển thị tại đây'}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n // Main Content\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Section Title */}\r\n <div className=\"text-center mb-12\">\r\n <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)' }}>\r\n <ThemeIcon name=\"icon-contactInfoUser\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n <span className=\"text-main\">{sectionTitle}</span>\r\n </div>\r\n </div>\r\n\r\n {/* Contact Cards Grid */}\r\n <div className=\"grid md:grid-cols-2 lg:grid-cols-3 gap-8\">\r\n {contacts.map((contact, index) => (\r\n <ContactCard key={contact.id || index} contact={contact} t={t} isDarkMode={isDarkMode} />\r\n ))}\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nconst ContactCard = ({ contact, t, isDarkMode }) => {\r\n return (\r\n <div className=\"card\">\r\n {/* Avatar & Name */}\r\n <div className=\"text-center mb-6\">\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '5rem',\r\n height: '5rem',\r\n borderRadius: '9999px',\r\n margin: '0 auto 1rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }}>\r\n <ThemeIcon name=\"icon-contactInfoUser\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n </div>\r\n \r\n <h3 className=\"card-title text-subtitle mb-2\">\r\n {contact.name || t('contactList.card.noName') || 'Không có tên'}\r\n </h3>\r\n \r\n <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)' }}>\r\n {contact.position || t('contactList.card.noPosition') || 'Chưa có chức vụ'}\r\n </span>\r\n </div>\r\n\r\n {/* Contact Information */}\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\r\n {/* Phone */}\r\n {contact.phone && (\r\n <a\r\n href={`tel:${contact.phone}`}\r\n className=\"card-link\"\r\n style={{\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)',\r\n transition: 'all 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n >\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <ThemeIcon name=\"icon-contactInfoPhone\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n {t('contactList.card.phone') || 'Điện thoại'}\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.phone}\r\n </p>\r\n </div>\r\n </a>\r\n )}\r\n\r\n {/* Email */}\r\n {contact.email && (\r\n <a\r\n href={`mailto:${contact.email}`}\r\n className=\"card-link\"\r\n style={{\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)',\r\n transition: 'all 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n >\r\n <div className=\"bg-gradient-accent\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <ThemeIcon name=\"icon-contactInfoEmail\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-gradient\"/>\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n Email\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.email}\r\n </p>\r\n </div>\r\n </a>\r\n )}\r\n\r\n {/* Working Hours */}\r\n {contact.workingHours && (\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)'\r\n }}>\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <ThemeIcon name=\"icon-contactInfoClock\" folder=\"ContactInfoSection\" className=\"w-4 h-4 icon-muted\"/>\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n {t('contactList.card.workingHours') || 'Giờ làm việc'}\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.workingHours || t('contactList.card.defaultWorkingHours') || 'T2-T6: 8:00-18:00'}\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ContactListAutoSection;","import React, { useState, useEffect } from \"react\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback, section }) => {\r\n const [feedbacks, setFeedbacks] = useState([]);\r\n const [currentIndex, setCurrentIndex] = useState(0);\r\n const sectionTitle = section?.title || '...';\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n const res = await loadCustomerFeedback();\r\n if (res.success) {\r\n setFeedbacks(Array.isArray(res.data) ? res.data : []);\r\n } else {\r\n setFeedbacks([]);\r\n }\r\n };\r\n fetchData();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (feedbacks.length > 1) {\r\n const interval = setInterval(() => {\r\n setCurrentIndex((prev) => (prev + 1) % feedbacks.length);\r\n }, 5000);\r\n return () => clearInterval(interval);\r\n }\r\n }, [feedbacks.length]);\r\n\r\n useEffect(() => {\r\n if (currentIndex >= feedbacks.length) {\r\n setCurrentIndex(0);\r\n }\r\n }, [feedbacks.length, currentIndex]);\r\n\r\n if (!feedbacks.length) {\r\n return (\r\n <section\r\n className={`py-20 transition-colors duration-200 ${isDarkMode ? \"bg-gray-700\" : \"bg-gray-50\"\r\n }`}\r\n >\r\n <div className=\"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center\">\r\n <div\r\n className={`w-24 h-24 mx-auto mb-6 rounded-full flex items-center justify-center ${isDarkMode ? \"bg-gray-800\" : \"bg-gray-200\"\r\n }`}\r\n >\r\n <svg\r\n className={`w-12 h-12 ${isDarkMode ? \"text-gray-600\" : \"text-gray-400\"\r\n }`}\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\"\r\n />\r\n </svg>\r\n </div>\r\n <h3\r\n className={`text-xl font-semibold mb-4 ${isDarkMode ? \"text-white\" : \"text-gray-900\"\r\n }`}\r\n >\r\n {t(\"customerFeedback.emptyTitle\") || \"Chưa có phản hồi từ khách hàng\"}\r\n </h3>\r\n <p\r\n className={`text-lg ${isDarkMode ? \"text-gray-300\" : \"text-gray-600\"\r\n }`}\r\n >\r\n {t(\"customerFeedback.emptyDescription\") ||\r\n \"Các phản hồi từ khách hàng sẽ được hiển thị tại đây.\"}\r\n </p>\r\n </div>\r\n </section>\r\n );\r\n }\r\n\r\n const currentFeedback = feedbacks[currentIndex];\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center\">\r\n <div\r\n 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 \"\r\n >\r\n <ThemeIcon name=\"icon-testimonials\" folder=\"TestimonialsSection\" className=\"w-4 h-4 icon-gradient\"/> {sectionTitle}\r\n </div>\r\n\r\n\r\n <div className=\"relative\">\r\n <div\r\n key={currentIndex}\r\n className=\"card\"\r\n >\r\n <blockquote className=\"card-text text-lg lg:text-xl italic mb-6 leading-relaxed\">\r\n \"{currentFeedback.content}\"\r\n </blockquote>\r\n\r\n <div className=\"flex items-center justify-center space-x-4\">\r\n <div className=\"text-3xl\"><ThemeIcon name=\"icon-testimonialsUser\" folder=\"TestimonialsSection\" className=\"w-4 h-4 icon-gradient\"/></div>\r\n <div className=\"text-left\">\r\n <div className=\"card-title text-base mb-1\">\r\n {currentFeedback.customerName}\r\n </div>\r\n\r\n <div className=\"card-link text-sm\">\r\n {currentFeedback.customerTitle}\r\n </div>\r\n\r\n {currentFeedback.customerCompany && (\r\n <div className=\"card-text text-xs mt-1\">\r\n {currentFeedback.customerCompany}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {feedbacks.length > 1 && (\r\n <div className=\"flex justify-center space-x-2 mt-4\">\r\n {feedbacks.map((_, index) => (\r\n <button\r\n key={index}\r\n onClick={() => setCurrentIndex(index)}\r\n aria-label={\r\n t(\"customerFeedback.switchToFeedback\", { number: index + 1 }) ||\r\n `Chuyển đến phản hồi ${index + 1}`\r\n }\r\n className={`\r\n w-2.5 h-2.5 rounded-full transition-all duration-300\r\n ${index === currentIndex\r\n ? \"bg-brand-secondary\"\r\n : \"bg-surface hover:bg-brand-primary\"\r\n }\r\n `}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n</div>\r\n\r\n </div>\r\n\r\n <style jsx>{`\r\n .animate-fadeIn {\r\n animation: fadeIn 0.5s ease-in-out;\r\n }\r\n @keyframes fadeIn {\r\n from {\r\n opacity: 0;\r\n transform: translateY(10px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n }\r\n `}</style>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default CustomerFeedbackAutoSection;","import React, { useState, useEffect } from 'react';\r\n\r\nconst ProductListSection = ({ data, t, isDarkMode, getProductList }) => {\r\n const [products, setProducts] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState(null);\r\n\r\n useEffect(() => {\r\n const fetchProducts = async () => {\r\n try {\r\n setLoading(true);\r\n const result = await getProductList();\r\n\r\n if (result.success) {\r\n setProducts(result.data || []);\r\n } else {\r\n setError(result.error || t('productList.errors.loadFailed'));\r\n }\r\n } catch (err) {\r\n console.error('Error fetching products:', err);\r\n setError(t('productList.errors.loadError'));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n fetchProducts();\r\n }, [t]);\r\n\r\n if (loading) {\r\n return (\r\n <div className={`py-16 px-5 text-center ${isDarkMode ? 'bg-gray-900' : 'bg-gray-50'}`}>\r\n <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`}></div>\r\n <p className={`mt-2.5 text-base ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n {t('productList.loading')}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <div className={`py-16 px-5 text-center ${isDarkMode ? 'bg-gray-900' : 'bg-gray-50'}`}>\r\n <div className=\"text-red-500 text-5xl mb-4\">\r\n ⚠️\r\n </div>\r\n <p className=\"text-red-500 text-base m-0\">\r\n {error}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n if (!products || products.length === 0) {\r\n return (\r\n <div className={`py-16 px-5 text-center ${isDarkMode ? 'bg-gray-900' : 'bg-gray-50'}`}>\r\n <div className={`text-5xl mb-4 ${isDarkMode ? 'text-gray-400' : 'text-gray-500'}`}>\r\n 📦\r\n </div>\r\n <p className={`text-base m-0 ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n {t('productList.noProducts')}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={`py-16 px-5 transition-colors duration-300 ${isDarkMode ? 'bg-gray-900' : 'bg-gray-50'}`}>\r\n <div className=\"max-w-6xl mx-auto\">\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-8 items-start\">\r\n {products.map((product, index) => (\r\n <ProductCard key={product.id || index} product={product} t={t} isDarkMode={isDarkMode} />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst ProductCard = ({ product, t, isDarkMode }) => {\r\n const [activeTab, setActiveTab] = useState('overview');\r\n const [isHovered, setIsHovered] = useState(false);\r\n\r\n const mainImage = product.images?.find(img => img.isMain)?.imageUrl ||\r\n product.images?.[0]?.imageUrl ||\r\n '/placeholder-product.png';\r\n\r\n const tabs = [\r\n { id: 'overview', label: t('productCard.tabs.overview'), count: null },\r\n { id: 'features', label: t('productCard.tabs.features'), count: product.features?.length || 0 },\r\n { id: 'contacts', label: t('productCard.tabs.contacts'), count: product.contacts?.length || 0 },\r\n { id: 'downloads', label: t('productCard.tabs.downloads'), count: product.productDownloads?.length || 0 }\r\n ];\r\n\r\n const renderOverview = () => (\r\n <div className=\"p-5\">\r\n <div\r\n className={`text-sm leading-relaxed ${isDarkMode ? 'text-gray-300' : 'text-gray-700'}`}\r\n dangerouslySetInnerHTML={{\r\n __html: product.overviewContent || product.description || t('productCard.noOverview')\r\n }}\r\n />\r\n </div>\r\n );\r\n\r\n const renderFeatures = () => {\r\n const features = product.features || [];\r\n\r\n if (features.length === 0) {\r\n return (\r\n <div className={`p-5 text-center ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n <p className=\"m-0\">{t('productCard.noFeatures')}</p>\r\n </div>\r\n );\r\n }\r\n\r\n const sortedFeatures = [...features].sort((a, b) => (a.order || 0) - (b.order || 0));\r\n\r\n return (\r\n <div className=\"p-5\">\r\n <div className=\"flex flex-col gap-4\">\r\n {sortedFeatures.map((feature, index) => (\r\n <div\r\n key={index}\r\n className={`p-4 rounded-lg border-l-4 border-blue-500 ${isDarkMode ? 'bg-gray-700' : 'bg-gray-100'}`}\r\n >\r\n <h4 className={`m-0 mb-2 text-sm font-bold ${isDarkMode ? 'text-white' : 'text-gray-900'}`}>\r\n {feature.title}\r\n </h4>\r\n <p className={`m-0 text-xs leading-relaxed ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n {feature.description}\r\n </p>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderContacts = () => {\r\n const contacts = product.contacts || [];\r\n\r\n if (contacts.length === 0) {\r\n return (\r\n <div className={`p-5 text-center ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n <p className=\"m-0\">{t('productCard.noContacts')}</p>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"p-5\">\r\n <div className=\"flex flex-col gap-4\">\r\n {contacts.map((contact, index) => (\r\n <div\r\n key={contact.id || index}\r\n className={`p-4 rounded-lg border ${isDarkMode ? 'bg-gray-700 border-gray-600' : 'bg-gray-100 border-gray-200'}`}\r\n >\r\n <div className=\"flex items-center mb-2\">\r\n <div className={`w-10 h-10 rounded-full flex items-center justify-center mr-3 ${isDarkMode ? 'bg-blue-600' : 'bg-blue-500'}`}>\r\n <span className=\"text-white font-bold text-base\">\r\n {contact.name?.charAt(0)?.toUpperCase() || '?'}\r\n </span>\r\n </div>\r\n <div>\r\n <h4 className={`m-0 mb-0.5 text-sm font-bold ${isDarkMode ? 'text-white' : 'text-gray-900'}`}>\r\n {contact.name}\r\n </h4>\r\n <p className={`m-0 text-xs ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n {contact.position}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex flex-col gap-1\">\r\n {contact.phone && (\r\n <div className=\"flex items-center gap-2\">\r\n <span className={`text-sm ${isDarkMode ? 'text-blue-400' : 'text-blue-500'}`}>📞</span>\r\n <a\r\n href={`tel:${contact.phone}`}\r\n className={`text-xs no-underline hover:underline ${isDarkMode ? 'text-blue-400' : 'text-blue-500'}`}\r\n >\r\n {contact.phone}\r\n </a>\r\n </div>\r\n )}\r\n {contact.email && (\r\n <div className=\"flex items-center gap-2\">\r\n <span className={`text-sm ${isDarkMode ? 'text-blue-400' : 'text-blue-500'}`}>✉️</span>\r\n <a\r\n href={`mailto:${contact.email}`}\r\n className={`text-xs no-underline hover:underline ${isDarkMode ? 'text-blue-400' : 'text-blue-500'}`}\r\n >\r\n {contact.email}\r\n </a>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderDownloads = () => {\r\n const downloads = product.productDownloads || [];\r\n\r\n if (downloads.length === 0) {\r\n return (\r\n <div className={`p-5 text-center ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n <p className=\"m-0\">{t('productCard.noDownloads')}</p>\r\n </div>\r\n );\r\n }\r\n\r\n const handleDownload = (fileUrl, title) => {\r\n try {\r\n const link = document.createElement('a');\r\n link.href = fileUrl;\r\n link.download = title || 'download';\r\n link.target = '_blank';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n } catch (error) {\r\n console.error('Download error:', error);\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"p-5\">\r\n <div className=\"flex flex-col gap-3\">\r\n {downloads.map((download, index) => (\r\n <div\r\n key={index}\r\n onClick={() => handleDownload(download.fileUrl, download.title)}\r\n className={`p-4 rounded-lg border cursor-pointer flex items-center gap-3 transition-all duration-200 hover:translate-x-1 ${isDarkMode\r\n ? 'bg-gray-700 border-gray-600 hover:bg-gray-600'\r\n : 'bg-gray-100 border-gray-200 hover:bg-gray-200'\r\n }`}\r\n >\r\n <div className={`w-10 h-10 rounded-lg flex items-center justify-center flex-shrink-0 ${isDarkMode ? 'bg-blue-600' : 'bg-blue-500'}`}>\r\n <span className=\"text-white text-lg\">📄</span>\r\n </div>\r\n\r\n <div className=\"flex-1 min-w-0\">\r\n <h4 className={`m-0 mb-1 text-sm font-bold overflow-hidden text-ellipsis whitespace-nowrap ${isDarkMode ? 'text-white' : 'text-gray-900'}`}>\r\n {download.title}\r\n </h4>\r\n <p className={`m-0 text-xs ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n {t('productCard.downloadClick')}\r\n </p>\r\n </div>\r\n\r\n <div className={`flex-shrink-0 text-base ${isDarkMode ? 'text-blue-400' : 'text-blue-500'}`}>\r\n ⬇️\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderTabContent = () => {\r\n switch (activeTab) {\r\n case 'overview':\r\n return renderOverview();\r\n case 'features':\r\n return renderFeatures();\r\n case 'contacts':\r\n return renderContacts();\r\n case 'downloads':\r\n return renderDownloads();\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n className={`\r\n rounded-xl overflow-hidden cursor-pointer transition-all duration-300 border\r\n ${isDarkMode\r\n ? 'bg-gray-800 border-gray-700'\r\n : 'bg-white border-gray-200'\r\n }\r\n ${isHovered\r\n ? `shadow-xl -translate-y-2 ${isDarkMode ? 'shadow-gray-900/40' : 'shadow-gray-500/20'}`\r\n : `shadow-lg ${isDarkMode ? 'shadow-gray-900/20' : 'shadow-gray-500/10'}`\r\n }\r\n `}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n >\r\n <div\r\n className={`relative h-48 bg-cover bg-center ${isDarkMode ? 'bg-gray-700' : 'bg-gray-200'}`}\r\n style={{\r\n backgroundImage: `url(${mainImage})`,\r\n }}\r\n >\r\n <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\">\r\n <h3 className=\"m-0 mb-2 text-lg font-bold\">\r\n {product.name}\r\n </h3>\r\n <p className=\"m-0 text-sm opacity-90\">\r\n {product.description}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className={`border-b ${isDarkMode ? 'border-gray-600' : 'border-gray-200'}`}>\r\n <div className=\"flex overflow-x-auto\">\r\n {tabs.map(tab => (\r\n <button\r\n key={tab.id}\r\n onClick={() => setActiveTab(tab.id)}\r\n className={`\r\n 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\r\n ${activeTab === tab.id\r\n ? `${isDarkMode ? 'bg-blue-600' : 'bg-blue-500'} text-white font-bold`\r\n : `bg-transparent ${isDarkMode ? 'text-gray-400 hover:bg-gray-700' : 'text-gray-600 hover:bg-gray-100'}`\r\n }\r\n `}\r\n >\r\n <span>{tab.label}</span>\r\n {tab.count !== null && (\r\n <span className={`\r\n text-xs py-0.5 px-1.5 rounded-full min-w-[18px] text-center\r\n ${activeTab === tab.id\r\n ? 'bg-white/20 text-white'\r\n : `${isDarkMode ? 'bg-gray-600 text-gray-400' : 'bg-gray-200 text-gray-600'}`\r\n }\r\n `}>\r\n {tab.count}\r\n </span>\r\n )}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <div className=\"min-h-[200px] max-h-[300px] overflow-y-auto\">\r\n {renderTabContent()}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ProductListSection;","import React from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\r\nconst TextWithTitleSection = ({ section, data, isDarkMode }) => {\r\n\r\n const textItems = data?.sectionDataBindingItems || [];\r\n\r\n // Item đầu tiên là title, các item còn lại là description\r\n const title = textItems[0]?.value || '';\r\n const descriptions = textItems.slice(1);\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-6xl mx-auto\">\r\n {title && (\r\n <h2 className=\"text-title font-black mb-4 leading-tight text-left text-main\">\r\n {title}\r\n </h2>\r\n )}\r\n\r\n {descriptions.map((item, index) => (\r\n <div\r\n key={item.id || index}\r\n className={`text-body leading-relaxed text-left font-normal text-muted ${\r\n index < descriptions.length - 1 ? 'mb-4' : ''\r\n }`}\r\n >\r\n {item.value}\r\n </div>\r\n ))}\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default TextWithTitleSection;","import React from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\r\nconst TextSection = ({ data, isDarkMode }) => {\r\n const textItems = data?.sectionDataBindingItems || [];\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-3xl mx-auto\">\r\n {textItems.map((item, index) => (\r\n <div\r\n key={item.id || index}\r\n className=\"mb-5 text-subtitle font-black leading-snug text-left text-main\"\r\n >\r\n {item.value}\r\n </div>\r\n ))}\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default TextSection;","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M2 4v16\", key: \"vw9hq8\" }],\n [\"path\", { d: \"M2 8h18a2 2 0 0 1 2 2v10\", key: \"1dgv2r\" }],\n [\"path\", { d: \"M2 17h20\", key: \"18nfp3\" }],\n [\"path\", { d: \"M6 8v9\", key: \"1yriud\" }]\n];\nconst Bed = createLucideIcon(\"bed\", __iconNode);\n\nexport { __iconNode, Bed as default };\n//# sourceMappingURL=bed.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\", key: \"jecpp\" }],\n [\"rect\", { width: \"20\", height: \"14\", x: \"2\", y: \"6\", rx: \"2\", key: \"i6l2r4\" }]\n];\nconst Briefcase = createLucideIcon(\"briefcase\", __iconNode);\n\nexport { __iconNode, Briefcase as default };\n//# sourceMappingURL=briefcase.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z\", key: \"1b4qmf\" }],\n [\"path\", { d: \"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2\", key: \"i71pzd\" }],\n [\"path\", { d: \"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2\", key: \"10jefs\" }],\n [\"path\", { d: \"M10 6h4\", key: \"1itunk\" }],\n [\"path\", { d: \"M10 10h4\", key: \"tcdvrf\" }],\n [\"path\", { d: \"M10 14h4\", key: \"kelpxr\" }],\n [\"path\", { d: \"M10 18h4\", key: \"1ulq68\" }]\n];\nconst Building2 = createLucideIcon(\"building-2\", __iconNode);\n\nexport { __iconNode, Building2 as default };\n//# sourceMappingURL=building-2.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"16\", height: \"20\", x: \"4\", y: \"2\", rx: \"2\", ry: \"2\", key: \"76otgf\" }],\n [\"path\", { d: \"M9 22v-4h6v4\", key: \"r93iot\" }],\n [\"path\", { d: \"M8 6h.01\", key: \"1dz90k\" }],\n [\"path\", { d: \"M16 6h.01\", key: \"1x0f13\" }],\n [\"path\", { d: \"M12 6h.01\", key: \"1vi96p\" }],\n [\"path\", { d: \"M12 10h.01\", key: \"1nrarc\" }],\n [\"path\", { d: \"M12 14h.01\", key: \"1etili\" }],\n [\"path\", { d: \"M16 10h.01\", key: \"1m94wz\" }],\n [\"path\", { d: \"M16 14h.01\", key: \"1gbofw\" }],\n [\"path\", { d: \"M8 10h.01\", key: \"19clt8\" }],\n [\"path\", { d: \"M8 14h.01\", key: \"6423bh\" }]\n];\nconst Building = createLucideIcon(\"building\", __iconNode);\n\nexport { __iconNode, Building as default };\n//# sourceMappingURL=building.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"16\", height: \"20\", x: \"4\", y: \"2\", rx: \"2\", key: \"1nb95v\" }],\n [\"line\", { x1: \"8\", x2: \"16\", y1: \"6\", y2: \"6\", key: \"x4nwl0\" }],\n [\"line\", { x1: \"16\", x2: \"16\", y1: \"14\", y2: \"18\", key: \"wjye3r\" }],\n [\"path\", { d: \"M16 10h.01\", key: \"1m94wz\" }],\n [\"path\", { d: \"M12 10h.01\", key: \"1nrarc\" }],\n [\"path\", { d: \"M8 10h.01\", key: \"19clt8\" }],\n [\"path\", { d: \"M12 14h.01\", key: \"1etili\" }],\n [\"path\", { d: \"M8 14h.01\", key: \"6423bh\" }],\n [\"path\", { d: \"M12 18h.01\", key: \"mhygvu\" }],\n [\"path\", { d: \"M8 18h.01\", key: \"lrp35t\" }]\n];\nconst Calculator = createLucideIcon(\"calculator\", __iconNode);\n\nexport { __iconNode, Calculator as default };\n//# sourceMappingURL=calculator.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z\", key: \"p7xjir\" }]\n];\nconst Cloud = createLucideIcon(\"cloud\", __iconNode);\n\nexport { __iconNode, Cloud as default };\n//# sourceMappingURL=cloud.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"ellipse\", { cx: \"12\", cy: \"5\", rx: \"9\", ry: \"3\", key: \"msslwz\" }],\n [\"path\", { d: \"M3 5V19A9 3 0 0 0 21 19V5\", key: \"1wlel7\" }],\n [\"path\", { d: \"M3 12A9 3 0 0 0 21 12\", key: \"mv7ke4\" }]\n];\nconst Database = createLucideIcon(\"database\", __iconNode);\n\nexport { __iconNode, Database as default };\n//# sourceMappingURL=database.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 16h.01\", key: \"1drbdi\" }],\n [\"path\", { d: \"M16 16h.01\", key: \"1f9h7w\" }],\n [\n \"path\",\n {\n 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\",\n key: \"1iv0i2\"\n }\n ],\n [\"path\", { d: \"M8 16h.01\", key: \"18s6g9\" }]\n];\nconst Factory = createLucideIcon(\"factory\", __iconNode);\n\nexport { __iconNode, Factory as default };\n//# sourceMappingURL=factory.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n];\nconst FileText = createLucideIcon(\"file-text\", __iconNode);\n\nexport { __iconNode, FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\", key: \"13o1zl\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }]\n];\nconst Globe = createLucideIcon(\"globe\", __iconNode);\n\nexport { __iconNode, Globe as default };\n//# sourceMappingURL=globe.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"j76jl0\"\n }\n ],\n [\"path\", { d: \"M22 10v6\", key: \"1lu8f3\" }],\n [\"path\", { d: \"M6 12.5V16a6 3 0 0 0 12 0v-3.5\", key: \"1r8lef\" }]\n];\nconst GraduationCap = createLucideIcon(\"graduation-cap\", __iconNode);\n\nexport { __iconNode, GraduationCap as default };\n//# sourceMappingURL=graduation-cap.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"mvr1a0\"\n }\n ]\n];\nconst Heart = createLucideIcon(\"heart\", __iconNode);\n\nexport { __iconNode, Heart as default };\n//# sourceMappingURL=heart.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\", key: \"5wwlr5\" }],\n [\n \"path\",\n {\n 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\",\n key: \"1d0kgt\"\n }\n ]\n];\nconst House = createLucideIcon(\"house\", __iconNode);\n\nexport { __iconNode, House as default };\n//# sourceMappingURL=house.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"q8bfy3\"\n }\n ],\n [\"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\" }],\n [\"path\", { d: \"M8 6v8\", key: \"15ugcq\" }]\n];\nconst Megaphone = createLucideIcon(\"megaphone\", __iconNode);\n\nexport { __iconNode, Megaphone as default };\n//# sourceMappingURL=megaphone.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"1a0edw\"\n }\n ],\n [\"path\", { d: \"M12 22V12\", key: \"d0xqtd\" }],\n [\"polyline\", { points: \"3.29 7 12 12 20.71 7\", key: \"ousv84\" }],\n [\"path\", { d: \"m7.5 4.27 9 5.15\", key: \"1c824w\" }]\n];\nconst Package = createLucideIcon(\"package\", __iconNode);\n\nexport { __iconNode, Package as default };\n//# sourceMappingURL=package.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"1v9wt8\"\n }\n ]\n];\nconst Plane = createLucideIcon(\"plane\", __iconNode);\n\nexport { __iconNode, Plane as default };\n//# sourceMappingURL=plane.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"1i5ecw\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Settings = createLucideIcon(\"settings\", __iconNode);\n\nexport { __iconNode, Settings as default };\n//# sourceMappingURL=settings.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"oel41y\"\n }\n ]\n];\nconst Shield = createLucideIcon(\"shield\", __iconNode);\n\nexport { __iconNode, Shield as default };\n//# sourceMappingURL=shield.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"8\", cy: \"21\", r: \"1\", key: \"jimo8o\" }],\n [\"circle\", { cx: \"19\", cy: \"21\", r: \"1\", key: \"13723u\" }],\n [\n \"path\",\n {\n 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\",\n key: \"9zh506\"\n }\n ]\n];\nconst ShoppingCart = createLucideIcon(\"shopping-cart\", __iconNode);\n\nexport { __iconNode, ShoppingCart as default };\n//# sourceMappingURL=shopping-cart.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"14\", height: \"20\", x: \"5\", y: \"2\", rx: \"2\", ry: \"2\", key: \"1yt0o3\" }],\n [\"path\", { d: \"M12 18h.01\", key: \"mhygvu\" }]\n];\nconst Smartphone = createLucideIcon(\"smartphone\", __iconNode);\n\nexport { __iconNode, Smartphone as default };\n//# sourceMappingURL=smartphone.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M16 7h6v6\", key: \"box55l\" }],\n [\"path\", { d: \"m22 7-8.5 8.5-5-5L2 17\", key: \"1t1m79\" }]\n];\nconst TrendingUp = createLucideIcon(\"trending-up\", __iconNode);\n\nexport { __iconNode, TrendingUp as default };\n//# sourceMappingURL=trending-up.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M14 18V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v11a1 1 0 0 0 1 1h2\", key: \"wrbu53\" }],\n [\"path\", { d: \"M15 18H9\", key: \"1lyqi6\" }],\n [\n \"path\",\n {\n 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\",\n key: \"lysw3i\"\n }\n ],\n [\"circle\", { cx: \"17\", cy: \"18\", r: \"2\", key: \"332jqn\" }],\n [\"circle\", { cx: \"7\", cy: \"18\", r: \"2\", key: \"19iecd\" }]\n];\nconst Truck = createLucideIcon(\"truck\", __iconNode);\n\nexport { __iconNode, Truck as default };\n//# sourceMappingURL=truck.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\", key: \"1yyitq\" }],\n [\"path\", { d: \"M16 3.128a4 4 0 0 1 0 7.744\", key: \"16gr8j\" }],\n [\"path\", { d: \"M22 21v-2a4 4 0 0 0-3-3.87\", key: \"kshegd\" }],\n [\"circle\", { cx: \"9\", cy: \"7\", r: \"4\", key: \"nufk8\" }]\n];\nconst Users = createLucideIcon(\"users\", __iconNode);\n\nexport { __iconNode, Users as default };\n//# sourceMappingURL=users.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"1ngwbx\"\n }\n ]\n];\nconst Wrench = createLucideIcon(\"wrench\", __iconNode);\n\nexport { __iconNode, Wrench as default };\n//# sourceMappingURL=wrench.js.map\n","/**\n * @license lucide-react v0.536.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n 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\",\n key: \"1xq2db\"\n }\n ]\n];\nconst Zap = createLucideIcon(\"zap\", __iconNode);\n\nexport { __iconNode, Zap as default };\n//# sourceMappingURL=zap.js.map\n","import React, { useState, useEffect } from 'react';\r\nimport { Calculator, TrendingUp, FileText, Cloud, ShoppingCart, Truck, Bed, Users, Package, Database, Settings, Globe } from 'lucide-react';\r\n\r\nconst DiagramSection = ({ data, t, isDarkMode }) => {\r\n const [mounted, setMounted] = useState(false);\r\n const [isMobile, setIsMobile] = useState(false);\r\n\r\n const safeT = typeof t === 'function' ? t : (key, options) => {\r\n console.warn(`Translation function not provided for key: ${key}`);\r\n return key;\r\n };\r\n\r\n useEffect(() => {\r\n setMounted(true);\r\n \r\n const checkMobile = () => {\r\n setIsMobile(window.innerWidth < 768);\r\n };\r\n \r\n checkMobile();\r\n window.addEventListener('resize', checkMobile);\r\n return () => window.removeEventListener('resize', checkMobile);\r\n }, []);\r\n\r\n const diagramData = data?.sectionDataBindingItems?.[0]?.data;\r\n\r\n if (!diagramData) {\r\n return null;\r\n }\r\n\r\n const diagramName = diagramData.name || safeT('diagram.defaults.name');\r\n const diagramDescription = diagramData.description || safeT('diagram.defaults.description');\r\n const modules = diagramData.diagramChildrenDTOs || [];\r\n\r\n const getIconComponent = (iconName) => {\r\n const icons = {\r\n Calculator, TrendingUp, FileText, Cloud, ShoppingCart, \r\n Truck, Bed, Users, Package, Database, Settings, Globe\r\n };\r\n return icons[iconName] || Settings;\r\n };\r\n\r\n const getColorStyles = (index) => {\r\n const isCyan = index % 2 === 0;\r\n if (isCyan) {\r\n return {\r\n gradient: 'linear-gradient(to right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))',\r\n border: 'var(--gradient-brand-soft-start)',\r\n line: 'var(--gradient-brand-soft-start)',\r\n iconBg: 'var(--gradient-brand-soft-start)',\r\n shadow: 'rgba(59, 130, 246, 0.2)'\r\n };\r\n }\r\n return {\r\n gradient: 'linear-gradient(to right, var(--gradient-brand-strong-start), var(--gradient-brand-strong-end))',\r\n border: 'var(--gradient-brand-strong-start)',\r\n line: 'var(--gradient-brand-strong-start)',\r\n iconBg: 'var(--gradient-brand-strong-start)',\r\n shadow: 'rgba(139, 92, 246, 0.2)'\r\n };\r\n };\r\n\r\n const calculateAngles = (count) => {\r\n return modules.map((_, index) => {\r\n return (360 / count) * index - 90;\r\n });\r\n };\r\n\r\n const angles = calculateAngles(modules.length);\r\n\r\n // Mobile view - List layout\r\n if (isMobile) {\r\n return (\r\n <div className=\"w-full p-4 relative overflow-hidden bg-section-soft\">\r\n {/* Background effects */}\r\n <div className=\"absolute inset-0 overflow-hidden pointer-events-none opacity-20\">\r\n {[...Array(50)].map((_, i) => (\r\n <div\r\n key={i}\r\n className=\"absolute rounded-full bg-brand-primary\"\r\n style={{\r\n opacity: 0.2,\r\n width: Math.random() * 3 + 1 + 'px',\r\n height: Math.random() * 3 + 1 + 'px',\r\n top: Math.random() * 100 + '%',\r\n left: Math.random() * 100 + '%',\r\n animation: `twinkle ${Math.random() * 3 + 2}s ease-in-out infinite`,\r\n animationDelay: Math.random() * 3 + 's'\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n <style>{`\r\n @keyframes twinkle {\r\n 0%, 100% { opacity: 0.1; transform: scale(1); }\r\n 50% { opacity: 0.3; transform: scale(1.5); }\r\n }\r\n @keyframes slideUp {\r\n from { opacity: 0; transform: translateY(20px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `}</style>\r\n\r\n {/* Header Card */}\r\n <div className=\"mb-6 backdrop-blur-md rounded-2xl border-2 p-6 shadow-2xl text-center bg-gradient-brand border-brand-primary\">\r\n <h2 className=\"text-title text-inverse mb-1 tracking-wide\">{diagramName}</h2>\r\n <p className=\"text-body text-inverse\">{diagramDescription}</p>\r\n </div>\r\n\r\n {/* Modules List */}\r\n <div className=\"space-y-3\">\r\n {modules.map((module, index) => {\r\n const Icon = getIconComponent(module.icon);\r\n const colors = getColorStyles(index);\r\n \r\n return (\r\n <a\r\n key={module.id}\r\n href={module.url || '#'}\r\n className=\"block backdrop-blur-md rounded-2xl border-2 p-4 flex items-center gap-3 shadow-lg active:scale-95 transition-all duration-200\"\r\n style={{\r\n background: colors.gradient,\r\n borderColor: colors.border,\r\n animation: `slideUp 0.5s ease-out ${index * 0.1}s both`\r\n }}\r\n >\r\n <div \r\n className=\"flex-shrink-0 p-3 rounded-xl border\"\r\n style={{ \r\n backgroundColor: `${colors.iconBg}33`,\r\n borderColor: colors.border\r\n }}\r\n >\r\n <Icon className=\"w-6 h-6 text-inverse\" strokeWidth={2} />\r\n </div>\r\n <div className=\"flex-1\">\r\n <span className=\"block text-inverse text-small tracking-wide mb-1\">\r\n {module.name}\r\n </span>\r\n {module.description && (\r\n <span className=\"block text-inverse text-caption\">\r\n {module.description}\r\n </span>\r\n )}\r\n </div>\r\n </a>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Desktop view - Circular layout\r\n return (\r\n <div className=\"section-wrapper w-full py-24 px-4 sm:px-8 relative overflow-visible bg-section-soft\">\r\n {/* Animated background particles */}\r\n <div className=\"absolute inset-0 overflow-hidden pointer-events-none\">\r\n {[...Array(100)].map((_, i) => (\r\n <div\r\n key={i}\r\n className=\"absolute rounded-full bg-brand-primary\"\r\n style={{\r\n opacity: isDarkMode ? 0.2 : 0.1,\r\n width: Math.random() * 4 + 1 + 'px',\r\n height: Math.random() * 4 + 1 + 'px',\r\n top: Math.random() * 100 + '%',\r\n left: Math.random() * 100 + '%',\r\n animation: `twinkle ${Math.random() * 3 + 2}s ease-in-out infinite`,\r\n animationDelay: Math.random() * 3 + 's'\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Animated grid lines */}\r\n <div \r\n className=\"absolute inset-0\"\r\n style={{ opacity: isDarkMode ? 0.1 : 0.05 }}\r\n >\r\n <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <defs>\r\n <pattern id=\"grid\" width=\"40\" height=\"40\" patternUnits=\"userSpaceOnUse\">\r\n <path \r\n d=\"M 40 0 L 0 0 0 40\" \r\n fill=\"none\" \r\n stroke=\"var(--brand-primary)\" \r\n strokeWidth=\"0.5\"\r\n />\r\n </pattern>\r\n </defs>\r\n <rect width=\"100%\" height=\"100%\" fill=\"url(#grid)\" />\r\n </svg>\r\n </div>\r\n\r\n {/* Circuit lines */}\r\n <svg className=\"absolute inset-0 w-full h-full pointer-events-none\" style={{ opacity: isDarkMode ? 0.3 : 0.2 }}>\r\n <line x1=\"0\" y1=\"20%\" x2=\"100%\" y2=\"20%\" stroke=\"url(#grad1)\" strokeWidth=\"1\" strokeDasharray=\"10 5\" className=\"animate-pulse\" />\r\n <line x1=\"0\" y1=\"40%\" x2=\"100%\" y2=\"40%\" stroke=\"url(#grad2)\" strokeWidth=\"1\" strokeDasharray=\"15 8\" className=\"animate-pulse\" style={{ animationDelay: '0.5s' }} />\r\n <line x1=\"0\" y1=\"60%\" x2=\"100%\" y2=\"60%\" stroke=\"url(#grad1)\" strokeWidth=\"1\" strokeDasharray=\"12 6\" className=\"animate-pulse\" style={{ animationDelay: '1s' }} />\r\n <line x1=\"0\" y1=\"80%\" x2=\"100%\" y2=\"80%\" stroke=\"url(#grad2)\" strokeWidth=\"1\" strokeDasharray=\"8 4\" className=\"animate-pulse\" style={{ animationDelay: '1.5s' }} />\r\n \r\n <line x1=\"15%\" y1=\"0\" x2=\"15%\" y2=\"100%\" stroke=\"url(#grad1)\" strokeWidth=\"1\" strokeDasharray=\"10 5\" className=\"animate-pulse\" style={{ animationDelay: '0.3s' }} />\r\n <line x1=\"35%\" y1=\"0\" x2=\"35%\" y2=\"100%\" stroke=\"url(#grad2)\" strokeWidth=\"1\" strokeDasharray=\"15 8\" className=\"animate-pulse\" style={{ animationDelay: '0.8s' }} />\r\n <line x1=\"65%\" y1=\"0\" x2=\"65%\" y2=\"100%\" stroke=\"url(#grad1)\" strokeWidth=\"1\" strokeDasharray=\"12 6\" className=\"animate-pulse\" style={{ animationDelay: '1.3s' }} />\r\n <line x1=\"85%\" y1=\"0\" x2=\"85%\" y2=\"100%\" stroke=\"url(#grad2)\" strokeWidth=\"1\" strokeDasharray=\"8 4\" className=\"animate-pulse\" style={{ animationDelay: '1.8s' }} />\r\n \r\n <circle cx=\"15%\" cy=\"20%\" r=\"3\" fill=\"var(--gradient-brand-soft-start)\" opacity=\"0.6\" className=\"animate-pulse\" />\r\n <circle cx=\"35%\" cy=\"40%\" r=\"3\" fill=\"var(--gradient-accent-soft-start)\" opacity=\"0.6\" className=\"animate-pulse\" style={{ animationDelay: '0.5s' }} />\r\n <circle cx=\"65%\" cy=\"60%\" r=\"3\" fill=\"var(--gradient-brand-soft-start)\" opacity=\"0.6\" className=\"animate-pulse\" style={{ animationDelay: '1s' }} />\r\n <circle cx=\"85%\" cy=\"80%\" r=\"3\" fill=\"var(--gradient-accent-soft-start)\" opacity=\"0.6\" className=\"animate-pulse\" style={{ animationDelay: '1.5s' }} />\r\n \r\n <defs>\r\n <linearGradient id=\"grad1\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\r\n <stop offset=\"0%\" style={{ stopColor: 'var(--gradient-brand-soft-start)', stopOpacity: 0 }} />\r\n <stop offset=\"50%\" style={{ stopColor: 'var(--gradient-brand-soft-start)', stopOpacity: 1 }} />\r\n <stop offset=\"100%\" style={{ stopColor: 'var(--gradient-brand-soft-start)', stopOpacity: 0 }} />\r\n </linearGradient>\r\n <linearGradient id=\"grad2\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\r\n <stop offset=\"0%\" style={{ stopColor: 'var(--gradient-accent-soft-start)', stopOpacity: 0 }} />\r\n <stop offset=\"50%\" style={{ stopColor: 'var(--gradient-accent-soft-start)', stopOpacity: 1 }} />\r\n <stop offset=\"100%\" style={{ stopColor: 'var(--gradient-accent-soft-start)', stopOpacity: 0 }} />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n\r\n <style>{`\r\n @keyframes twinkle {\r\n 0%, 100% { opacity: 0.1; transform: scale(1); }\r\n 50% { opacity: 0.3; transform: scale(1.5); }\r\n }\r\n \r\n @keyframes float {\r\n 0%, 100% { transform: translateY(0px); }\r\n 50% { transform: translateY(-10px); }\r\n }\r\n \r\n @keyframes rotate {\r\n from { transform: rotate(0deg); }\r\n to { transform: rotate(360deg); }\r\n }\r\n \r\n @keyframes pulse-ring {\r\n 0% { transform: scale(0.95); opacity: 1; }\r\n 50% { transform: scale(1); opacity: 0.8; }\r\n 100% { transform: scale(0.95); opacity: 1; }\r\n }\r\n \r\n @keyframes slideIn {\r\n from { \r\n opacity: 0;\r\n transform: translate(-50%, -50%) scale(0.5);\r\n }\r\n to { \r\n opacity: 1;\r\n transform: translate(-50%, -50%) scale(1);\r\n }\r\n }\r\n \r\n .animate-float {\r\n animation: float 3s ease-in-out infinite;\r\n }\r\n \r\n .animate-pulse-ring {\r\n animation: pulse-ring 2s ease-in-out infinite;\r\n }\r\n \r\n .module-card {\r\n animation: slideIn 0.8s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\r\n }\r\n\r\n @media (max-width: 1200px) {\r\n .diagram-container {\r\n transform: scale(0.75);\r\n }\r\n }\r\n\r\n @media (max-width: 900px) {\r\n .diagram-container {\r\n transform: scale(0.6);\r\n }\r\n }\r\n `}</style>\r\n\r\n <div className=\"diagram-container relative w-full max-w-5xl mx-auto h-[800px] flex items-center justify-center transition-transform duration-300\" style={{ paddingTop: '80px', paddingBottom: '80px' }}>\r\n {/* Central Circle */}\r\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\">\r\n <div className=\"absolute inset-0 w-[320px] h-[320px] -translate-x-1/2 -translate-y-1/2 top-1/2 left-1/2\">\r\n <div \r\n className=\"absolute inset-0 rounded-full border-2 animate-pulse-ring\"\r\n style={{ borderColor: 'var(--brand-primary)', opacity: 0.3 }}\r\n ></div>\r\n <div \r\n className=\"absolute inset-4 rounded-full border-2 animate-pulse-ring\" \r\n style={{ \r\n borderColor: 'var(--brand-secondary)',\r\n opacity: 0.3,\r\n animationDelay: '0.5s' \r\n }}\r\n ></div>\r\n </div>\r\n\r\n <div className=\"relative animate-float\">\r\n <div \r\n className=\"w-64 h-64 rounded-full border-8 flex items-center justify-center backdrop-blur-sm shadow-2xl bg-surface\"\r\n style={{\r\n borderColor: 'var(--border-color)'\r\n }}\r\n >\r\n <div className=\"absolute inset-0 rounded-full\" style={{ animation: 'rotate 20s linear infinite' }}>\r\n {[0, 90, 180, 270].map((angle) => (\r\n <div\r\n key={angle}\r\n className=\"absolute w-3 h-3 rounded-full shadow-lg bg-brand-primary\"\r\n style={{\r\n boxShadow: '0 0 10px var(--brand-primary)',\r\n top: '50%',\r\n left: '50%',\r\n transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-125px)`\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n <div \r\n className=\"w-52 h-52 rounded-full flex items-center justify-center shadow-2xl relative overflow-hidden border-2 backdrop-blur-md bg-gradient-brand\"\r\n style={{\r\n borderColor: isDarkMode ? 'var(--gradient-brand-soft-start)' : 'rgba(255, 255, 255, 0.4)'\r\n }}\r\n >\r\n <div className=\"absolute inset-0 bg-gradient-to-br from-white/10 to-transparent\"></div>\r\n <div className=\"text-center relative z-10 px-4\">\r\n <h2 className=\"text-title text-inverse mb-2 tracking-wide\">{diagramName}</h2>\r\n <p className=\"text-small text-inverse\">{diagramDescription}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {modules.map((module, i) => {\r\n const angle = angles[i];\r\n return (\r\n <div\r\n key={`dot-${module.id}`}\r\n className=\"absolute w-4 h-4 rounded-full border-2 shadow-lg animate-pulse bg-muted\"\r\n style={{\r\n borderColor: 'var(--border-color)',\r\n top: '50%',\r\n left: '50%',\r\n transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-132px)`,\r\n animationDelay: `${i * 0.1}s`\r\n }}\r\n />\r\n );\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* Connection lines */}\r\n <svg className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 pointer-events-none\" width=\"1000\" height=\"900\" style={{ overflow: 'visible' }}>\r\n {modules.map((module, index) => {\r\n const colors = getColorStyles(index);\r\n const angle = (angles[index] * Math.PI) / 180;\r\n const circleRadius = 132;\r\n const moduleRadius = 360;\r\n \r\n const startX = Math.cos(angle) * circleRadius;\r\n const startY = Math.sin(angle) * circleRadius;\r\n \r\n const endX = Math.cos(angle) * moduleRadius;\r\n const endY = Math.sin(angle) * moduleRadius;\r\n \r\n return (\r\n <g key={`line-${module.id}`}>\r\n <line\r\n x1={500 + startX}\r\n y1={450 + startY}\r\n x2={500 + endX}\r\n y2={450 + endY}\r\n stroke={colors.line}\r\n strokeWidth=\"2\"\r\n strokeDasharray=\"8 4\"\r\n opacity=\"0.5\"\r\n className=\"animate-pulse\"\r\n style={{ animationDelay: `${index * 0.1}s` }}\r\n />\r\n <line\r\n x1={500 + startX}\r\n y1={450 + startY}\r\n x2={500 + endX}\r\n y2={450 + endY}\r\n stroke={colors.line}\r\n strokeWidth=\"1\"\r\n opacity=\"0.8\"\r\n filter=\"blur(2px)\"\r\n />\r\n </g>\r\n );\r\n })}\r\n </svg>\r\n\r\n {/* Module Cards */}\r\n {modules.map((module, index) => {\r\n const Icon = getIconComponent(module.icon);\r\n const colors = getColorStyles(index);\r\n const angle = (angles[index] * Math.PI) / 180;\r\n const radius = 360;\r\n const x = Math.cos(angle) * radius;\r\n const y = Math.sin(angle) * radius;\r\n \r\n const normalizedAngle = ((angles[index] % 360) + 360) % 360;\r\n const isRightSide = normalizedAngle > 270 || normalizedAngle < 90;\r\n \r\n return (\r\n <a\r\n key={module.id}\r\n href={module.url || '#'}\r\n className={`absolute module-card group ${mounted ? 'opacity-100' : 'opacity-0'}`}\r\n style={{\r\n left: `calc(50% + ${x}px)`,\r\n top: `calc(50% + ${y}px)`,\r\n transform: 'translate(-50%, -50%)',\r\n animationDelay: `${index * 0.1}s`,\r\n animationFillMode: 'both'\r\n }}\r\n >\r\n <div \r\n className={`backdrop-blur-md rounded-full border-2 px-5 py-3 flex items-center gap-3 shadow-xl transition-all duration-300 group-hover:scale-110 group-hover:-translate-y-3 group-hover:shadow-2xl cursor-pointer relative ${isRightSide ? 'flex-row-reverse' : 'flex-row'}`}\r\n style={{\r\n background: colors.gradient,\r\n borderColor: colors.border,\r\n boxShadow: `0 10px 40px ${colors.shadow}`,\r\n width: '240px',\r\n height: '56px',\r\n minWidth: '240px',\r\n maxWidth: '240px',\r\n }}\r\n >\r\n <div className=\"absolute inset-0 rounded-full bg-gradient-to-r from-transparent via-white/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300\"></div>\r\n <div \r\n className=\"absolute inset-0 rounded-full border-2 opacity-0 group-hover:opacity-100 transition-all duration-300 scale-110 blur-sm\"\r\n style={{ borderColor: colors.border }}\r\n ></div>\r\n \r\n <div \r\n className=\"flex-shrink-0 p-2.5 rounded-lg border transition-all duration-300 group-hover:rotate-12 group-hover:scale-125 relative z-10\"\r\n style={{ \r\n backgroundColor: `${colors.iconBg}33`,\r\n borderColor: colors.border\r\n }}\r\n >\r\n <Icon className=\"w-5 h-5 text-inverse\" strokeWidth={2} />\r\n </div>\r\n \r\n <span className={`flex-1 text-inverse text-small tracking-wide overflow-hidden text-ellipsis whitespace-nowrap ${isRightSide ? 'text-right' : 'text-left'} relative z-10 min-w-0`}>\r\n {module.name}\r\n </span>\r\n \r\n <div \r\n className={`absolute bottom-full left-1/2 -translate-x-1/2 mb-3 px-4 py-2 rounded-lg shadow-xl opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none whitespace-nowrap z-50 border max-w-xs ${isDarkMode ? 'bg-surface' : 'bg-body'}`}\r\n style={{\r\n borderColor: 'var(--border-color)',\r\n maxHeight: '120px',\r\n overflowY: 'auto'\r\n }}\r\n >\r\n <div className=\"text-small text-main\">{module.name}</div>\r\n {module.description && (\r\n <div className=\"text-caption text-muted mt-1\">\r\n {module.description}\r\n </div>\r\n )}\r\n <div \r\n className=\"absolute top-full left-1/2 -translate-x-1/2 -mt-px border-4 border-transparent\"\r\n style={{ \r\n borderTopColor: isDarkMode ? 'var(--bg-surface)' : 'var(--bg-body)'\r\n }}\r\n ></div>\r\n </div>\r\n </div>\r\n </a>\r\n );\r\n })}\r\n\r\n {/* Decorative elements */}\r\n <div \r\n className=\"absolute bottom-12 right-12 sm:bottom-16 sm:right-20 opacity-40 text-brand-secondary\" \r\n style={{ animation: 'rotate 10s linear infinite' }}\r\n >\r\n <svg width=\"80\" height=\"80\" viewBox=\"0 0 60 60\">\r\n <path d=\"M30 0 L35 25 L60 30 L35 35 L30 60 L25 35 L0 30 L25 25 Z\" fill=\"currentColor\" />\r\n </svg>\r\n </div>\r\n\r\n <div \r\n className=\"absolute top-12 left-12 w-16 h-16 border-2 rounded-lg animate-pulse border-brand-primary\" \r\n style={{ \r\n opacity: 0.3, \r\n animation: 'rotate 8s linear infinite reverse' \r\n }}\r\n ></div>\r\n <div \r\n className=\"absolute top-20 right-16 w-12 h-12 border-2 rounded-full animate-pulse border-brand-secondary\" \r\n style={{ \r\n opacity: 0.3 \r\n }}\r\n ></div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default DiagramSection;","import React, { useState, useRef, useEffect } from 'react';\r\nimport { Calculator, Shield, Wrench, Factory, Smartphone, Building2, Megaphone, ShoppingCart, Briefcase, Users, Building, GraduationCap, Heart, Zap, Plane, Package, Bed, Home, TrendingUp, FileText, Cloud, Truck, Database, Settings, Globe } from 'lucide-react';\r\n\r\nconst MindMapNode = ({ id, icon: Icon, text, color, position, delay = 0, onDragStart, isDragging, onClick, description, isDarkMode }) => {\r\n const [isHovered, setIsHovered] = useState(false);\r\n const [dragStartPos, setDragStartPos] = useState(null);\r\n const [hasMoved, setHasMoved] = useState(false);\r\n\r\n const getColorStyles = (colorName) => {\r\n const styles = {\r\n blue: {\r\n gradient: 'linear-gradient(to bottom right, var(--brand-primary), var(--brand-primary))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))',\r\n border: 'var(--brand-primary)',\r\n shadowColor: 'var(--brand-primary)'\r\n },\r\n teal: {\r\n gradient: 'linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-brand-strong-start), var(--gradient-brand-strong-end))',\r\n border: 'var(--gradient-brand-soft-start)',\r\n shadowColor: 'var(--gradient-brand-soft-start)'\r\n },\r\n purple: {\r\n gradient: 'linear-gradient(to bottom right, var(--brand-secondary), var(--gradient-accent-soft-start))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))',\r\n border: 'var(--brand-secondary)',\r\n shadowColor: 'var(--brand-secondary)'\r\n },\r\n orange: {\r\n gradient: 'linear-gradient(to bottom right, var(--gradient-accent-strong-start), var(--gradient-accent-strong-end))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))',\r\n border: 'var(--gradient-accent-strong-start)',\r\n shadowColor: 'var(--gradient-accent-strong-start)'\r\n },\r\n cyan: {\r\n gradient: 'linear-gradient(to bottom right, var(--gradient-brand-strong-start), var(--gradient-brand-strong-end))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))',\r\n border: 'var(--gradient-brand-strong-start)',\r\n shadowColor: 'var(--gradient-brand-strong-start)'\r\n },\r\n indigo: {\r\n gradient: 'linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-accent-strong-start), var(--gradient-accent-strong-end))',\r\n border: 'var(--gradient-accent-soft-start)',\r\n shadowColor: 'var(--gradient-accent-soft-start)'\r\n }\r\n };\r\n return styles[colorName] || styles.blue;\r\n };\r\n\r\n const colorStyle = getColorStyles(color);\r\n\r\n const handleMouseDown = (e) => {\r\n setDragStartPos({ x: e.clientX, y: e.clientY });\r\n setHasMoved(false);\r\n onDragStart(id);\r\n e.stopPropagation();\r\n };\r\n\r\n const handleMouseMove = (e) => {\r\n if (dragStartPos) {\r\n const distance = Math.sqrt(\r\n Math.pow(e.clientX - dragStartPos.x, 2) +\r\n Math.pow(e.clientY - dragStartPos.y, 2)\r\n );\r\n if (distance > 5) {\r\n setHasMoved(true);\r\n }\r\n }\r\n };\r\n\r\n const handleMouseUp = (e) => {\r\n if (dragStartPos && !hasMoved) {\r\n if (onClick) {\r\n onClick(id, text);\r\n }\r\n }\r\n setDragStartPos(null);\r\n setHasMoved(false);\r\n };\r\n\r\n const handleTouchStart = (e) => {\r\n const touch = e.touches[0];\r\n setDragStartPos({ x: touch.clientX, y: touch.clientY });\r\n setHasMoved(false);\r\n onDragStart(id);\r\n e.stopPropagation();\r\n };\r\n\r\n const handleTouchMove = (e) => {\r\n if (dragStartPos) {\r\n const touch = e.touches[0];\r\n const distance = Math.sqrt(\r\n Math.pow(touch.clientX - dragStartPos.x, 2) +\r\n Math.pow(touch.clientY - dragStartPos.y, 2)\r\n );\r\n if (distance > 5) {\r\n setHasMoved(true);\r\n }\r\n }\r\n };\r\n\r\n const handleTouchEnd = (e) => {\r\n if (dragStartPos && !hasMoved) {\r\n if (onClick) {\r\n onClick(id, text);\r\n }\r\n }\r\n setDragStartPos(null);\r\n setHasMoved(false);\r\n };\r\n\r\n useEffect(() => {\r\n if (dragStartPos) {\r\n window.addEventListener('mousemove', handleMouseMove);\r\n window.addEventListener('mouseup', handleMouseUp);\r\n return () => {\r\n window.removeEventListener('mousemove', handleMouseMove);\r\n window.removeEventListener('mouseup', handleMouseUp);\r\n };\r\n }\r\n }, [dragStartPos, hasMoved]);\r\n\r\n return (\r\n <div\r\n id={`node-${id}`}\r\n className=\"absolute animate-fadeIn node-element\"\r\n style={{\r\n left: `${position.x}%`,\r\n top: `${position.y}%`,\r\n animationDelay: `${delay}ms`,\r\n zIndex: isDragging ? 50 : 10,\r\n transform: 'translate(-50%, -50%)',\r\n transition: isDragging ? 'none' : 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n onMouseDown={handleMouseDown}\r\n onTouchStart={handleTouchStart}\r\n onTouchMove={handleTouchMove}\r\n onTouchEnd={handleTouchEnd}\r\n >\r\n <div\r\n className=\"backdrop-blur-md px-4 py-2.5 rounded-2xl shadow-2xl border-2 flex items-center gap-2.5 cursor-pointer transform transition-all duration-300\"\r\n style={{\r\n background: (isHovered || isDragging) ? colorStyle.gradientHover : colorStyle.gradient,\r\n borderColor: colorStyle.border,\r\n boxShadow: `0 10px 40px ${colorStyle.shadowColor}`,\r\n transform: (isHovered || isDragging) ? 'scale(1.1)' : 'scale(1)',\r\n filter: (isHovered || isDragging) ? 'brightness(1.1)' : 'brightness(1)',\r\n rotate: isDragging ? '2deg' : '0deg'\r\n }}\r\n >\r\n <Icon className=\"w-4 h-4 flex-shrink-0 text-inverse\" />\r\n <span className=\"text-inverse text-small whitespace-nowrap\">\r\n {text}\r\n </span>\r\n </div>\r\n {isDragging && (\r\n <div\r\n className=\"absolute inset-0 rounded-2xl blur-xl animate-pulse\"\r\n style={{\r\n background: 'rgba(255, 255, 255, 0.1)',\r\n transform: 'scale(1.5)'\r\n }}\r\n />\r\n )}\r\n {(isHovered || isDragging) && description && (\r\n <div\r\n className={`absolute top-full left-1/2 -translate-x-1/2 mt-2 px-3 py-2 text-caption rounded-lg shadow-xl border whitespace-nowrap z-50 max-w-xs ${isDarkMode ? 'bg-surface text-inverse' : 'bg-body text-main'}`}\r\n style={{\r\n borderColor: 'var(--border-color)',\r\n opacity: 0.95\r\n }}\r\n >\r\n {description}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nconst DiagramSection2 = ({ data, t, isDarkMode }) => {\r\n const [centerPosition, setCenterPosition] = useState({ x: 50, y: 50 });\r\n const [isDragging, setIsDragging] = useState(false);\r\n const [draggingNodeId, setDraggingNodeId] = useState(null);\r\n const [lines, setLines] = useState([]);\r\n const [nodes, setNodes] = useState([]);\r\n const containerRef = useRef(null);\r\n const centerRef = useRef(null);\r\n const rafRef = useRef(null);\r\n const nodePositionsCache = useRef({});\r\n\r\n const safeT = typeof t === 'function' ? t : (key, options) => {\r\n console.warn(`Translation function not provided for key: ${key}`);\r\n return key;\r\n };\r\n\r\n const diagramData = data?.sectionDataBindingItems?.[0]?.data;\r\n\r\n const getIconComponent = (iconName) => {\r\n const icons = {\r\n Calculator, Shield, Wrench, Factory, Smartphone, Building2, Megaphone,\r\n ShoppingCart, Briefcase, Users, Building, GraduationCap, Heart, Zap,\r\n Plane, Package, Bed, Home, TrendingUp, FileText, Cloud, Truck, Database,\r\n Settings, Globe\r\n };\r\n return icons[iconName] || Settings;\r\n };\r\n\r\n const getColor = (index) => {\r\n const colors = ['blue', 'teal', 'purple', 'orange', 'cyan', 'indigo'];\r\n return colors[index % colors.length];\r\n };\r\n\r\n useEffect(() => {\r\n if (!diagramData?.diagramChildrenDTOs) return;\r\n\r\n const children = diagramData.diagramChildrenDTOs;\r\n const totalNodes = children.length;\r\n\r\n const generatedNodes = children.map((child, index) => {\r\n const angle = (360 / totalNodes) * index;\r\n const radiusVariation = 30 + (Math.random() * 20);\r\n const angleRad = (angle * Math.PI) / 180;\r\n\r\n let x = 50 + Math.cos(angleRad) * radiusVariation;\r\n let y = 50 + Math.sin(angleRad) * radiusVariation;\r\n\r\n x += (Math.random() - 0.5) * 10;\r\n y += (Math.random() - 0.5) * 10;\r\n\r\n x = Math.max(10, Math.min(90, x));\r\n y = Math.max(10, Math.min(90, y));\r\n\r\n return {\r\n id: child.id,\r\n x,\r\n y,\r\n icon: getIconComponent(child.icon),\r\n text: child.name,\r\n description: child.description,\r\n url: child.url,\r\n color: getColor(index),\r\n delay: index * 100\r\n };\r\n });\r\n\r\n setNodes(generatedNodes);\r\n }, [diagramData]);\r\n\r\n const calculatePositions = () => {\r\n if (!containerRef.current || !centerRef.current) return;\r\n\r\n const container = containerRef.current;\r\n const containerRect = container.getBoundingClientRect();\r\n const centerElement = centerRef.current;\r\n const centerRect = centerElement.getBoundingClientRect();\r\n\r\n const centerX = centerRect.left + centerRect.width / 2 - containerRect.left;\r\n const centerY = centerRect.top + centerRect.height / 2 - containerRect.top;\r\n\r\n const newLines = [];\r\n\r\n nodes.forEach(node => {\r\n const nodeElement = document.getElementById(`node-${node.id}`);\r\n if (!nodeElement) return;\r\n\r\n const nodeRect = nodeElement.getBoundingClientRect();\r\n const nodeX = nodeRect.left + nodeRect.width / 2 - containerRect.left;\r\n const nodeY = nodeRect.top + nodeRect.height / 2 - containerRect.top;\r\n\r\n const cachedPos = nodePositionsCache.current[node.id] || { x: nodeX, y: nodeY };\r\n const smoothX = cachedPos.x + (nodeX - cachedPos.x) * 0.15;\r\n const smoothY = cachedPos.y + (nodeY - cachedPos.y) * 0.15;\r\n\r\n nodePositionsCache.current[node.id] = { x: smoothX, y: smoothY };\r\n\r\n const dx = centerX - smoothX;\r\n const dy = centerY - smoothY;\r\n\r\n const controlX1 = smoothX + dx * 0.4;\r\n const controlY1 = smoothY;\r\n const controlX2 = smoothX + dx * 0.6;\r\n const controlY2 = centerY;\r\n\r\n const path = `M ${smoothX} ${smoothY} C ${controlX1} ${controlY1}, ${controlX2} ${controlY2}, ${centerX} ${centerY}`;\r\n\r\n newLines.push({ id: node.id, path });\r\n });\r\n\r\n setLines(newLines);\r\n };\r\n\r\n useEffect(() => {\r\n let isRunning = true;\r\n\r\n const updateLoop = () => {\r\n if (isRunning) {\r\n calculatePositions();\r\n rafRef.current = requestAnimationFrame(updateLoop);\r\n }\r\n };\r\n\r\n updateLoop();\r\n\r\n return () => {\r\n isRunning = false;\r\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\r\n };\r\n }, [nodes, centerPosition, isDragging, draggingNodeId]);\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n nodePositionsCache.current = {};\r\n calculatePositions();\r\n };\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, [nodes]);\r\n\r\n const handleNodeClick = (nodeId, nodeName) => {\r\n const node = nodes.find(n => n.id === nodeId);\r\n if (node?.url) {\r\n window.location.href = node.url;\r\n }\r\n };\r\n\r\n const handleNodeDragStart = (nodeId) => setDraggingNodeId(nodeId);\r\n const handleNodeDragEnd = () => setDraggingNodeId(null);\r\n\r\n const handleNodeDrag = (nodeId, newX, newY) => {\r\n setNodes(prevNodes =>\r\n prevNodes.map(node =>\r\n node.id === nodeId ? { ...node, x: newX, y: newY } : node\r\n )\r\n );\r\n };\r\n\r\n const handleMouseDown = (e) => {\r\n setIsDragging(true);\r\n e.preventDefault();\r\n };\r\n\r\n const handleMouseMove = (e) => {\r\n if (!isDragging || !containerRef.current) return;\r\n\r\n const containerRect = containerRef.current.getBoundingClientRect();\r\n const x = ((e.clientX - containerRect.left) / containerRect.width) * 100;\r\n const y = ((e.clientY - containerRect.top) / containerRect.height) * 100;\r\n\r\n setCenterPosition({\r\n x: Math.max(20, Math.min(80, x)),\r\n y: Math.max(20, Math.min(80, y))\r\n });\r\n };\r\n\r\n const handleMouseUp = () => setIsDragging(false);\r\n\r\n useEffect(() => {\r\n if (isDragging) {\r\n document.body.style.cursor = 'grabbing';\r\n window.addEventListener('mousemove', handleMouseMove);\r\n window.addEventListener('mouseup', handleMouseUp);\r\n return () => {\r\n document.body.style.cursor = '';\r\n window.removeEventListener('mousemove', handleMouseMove);\r\n window.removeEventListener('mouseup', handleMouseUp);\r\n };\r\n }\r\n }, [isDragging]);\r\n\r\n useEffect(() => {\r\n if (draggingNodeId === null) return;\r\n\r\n const handleNodeMouseMove = (e) => {\r\n if (!containerRef.current) return;\r\n const containerRect = containerRef.current.getBoundingClientRect();\r\n const x = ((e.clientX - containerRect.left) / containerRect.width) * 100;\r\n const y = ((e.clientY - containerRect.top) / containerRect.height) * 100;\r\n\r\n handleNodeDrag(draggingNodeId,\r\n Math.max(5, Math.min(95, x)),\r\n Math.max(5, Math.min(95, y))\r\n );\r\n };\r\n\r\n const handleNodeTouchMove = (e) => {\r\n if (!containerRef.current) return;\r\n const touch = e.touches[0];\r\n const containerRect = containerRef.current.getBoundingClientRect();\r\n const x = ((touch.clientX - containerRect.left) / containerRect.width) * 100;\r\n const y = ((touch.clientY - containerRect.top) / containerRect.height) * 100;\r\n\r\n handleNodeDrag(draggingNodeId,\r\n Math.max(5, Math.min(95, x)),\r\n Math.max(5, Math.min(95, y))\r\n );\r\n };\r\n\r\n window.addEventListener('mousemove', handleNodeMouseMove);\r\n window.addEventListener('mouseup', handleNodeDragEnd);\r\n window.addEventListener('touchmove', handleNodeTouchMove);\r\n window.addEventListener('touchend', handleNodeDragEnd);\r\n\r\n return () => {\r\n window.removeEventListener('mousemove', handleNodeMouseMove);\r\n window.removeEventListener('mouseup', handleNodeDragEnd);\r\n window.removeEventListener('touchmove', handleNodeTouchMove);\r\n window.removeEventListener('touchend', handleNodeDragEnd);\r\n };\r\n }, [draggingNodeId]);\r\n\r\n if (!diagramData) {\r\n return null;\r\n }\r\n\r\n const diagramName = diagramData.name || safeT('diagram.defaults.name');\r\n const diagramDescription = diagramData.description || safeT('diagram.defaults.description');\r\n\r\n return (\r\n <div \r\n ref={containerRef}\r\n className=\"mind-map-container relative w-full h-screen overflow-hidden bg-section-soft\"\r\n style={{\r\n touchAction: 'none'\r\n }}\r\n >\r\n {/* Background overlay effects */}\r\n <div\r\n className=\"absolute inset-0\"\r\n style={{ opacity: isDarkMode ? 0.3 : 0.2 }}\r\n >\r\n <div\r\n className=\"absolute inset-0 bg-gradient-brand\"\r\n style={{\r\n opacity: 0.2\r\n }}\r\n />\r\n <div\r\n className=\"absolute inset-0 bg-gradient-accent\"\r\n style={{\r\n opacity: 0.1\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Animated particles */}\r\n <div\r\n className=\"absolute inset-0 pointer-events-none\"\r\n style={{ opacity: isDarkMode ? 0.6 : 0.4 }}\r\n >\r\n {[...Array(150)].map((_, i) => {\r\n const colors = ['bg-brand-primary', 'bg-brand-secondary'];\r\n const randomColor = colors[Math.floor(Math.random() * colors.length)];\r\n\r\n return (\r\n <div\r\n key={i}\r\n className={`absolute rounded-full ${randomColor}`}\r\n style={{\r\n left: `${Math.random() * 100}%`,\r\n top: `${Math.random() * 100}%`,\r\n width: `${Math.random() * 3 + 1}px`,\r\n height: `${Math.random() * 3 + 1}px`,\r\n animationName: 'twinkle',\r\n animationDelay: `${Math.random() * 5}s`,\r\n animationDuration: `${4 + Math.random() * 6}s`,\r\n animationIterationCount: 'infinite',\r\n animationTimingFunction: 'ease-in-out'\r\n }}\r\n />\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Grid pattern */}\r\n <div\r\n className=\"absolute inset-0 pointer-events-none\"\r\n style={{ opacity: isDarkMode ? 0.1 : 0.05 }}\r\n >\r\n <div\r\n className=\"absolute inset-0\"\r\n style={{\r\n backgroundImage: isDarkMode\r\n ? 'radial-gradient(circle at 1px 1px, var(--text-inverse) 1px, transparent 0)'\r\n : 'radial-gradient(circle at 1px 1px, var(--text-main) 1px, transparent 0)',\r\n backgroundSize: '40px 40px',\r\n opacity: 0.15\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Decorative sparkle */}\r\n <div className=\"absolute right-4 sm:right-16 bottom-4 sm:bottom-16 z-0 pointer-events-none\">\r\n <div className=\"relative\">\r\n <div\r\n className=\"absolute inset-0 blur-3xl w-20 h-20 sm:w-32 sm:h-32 bg-gradient-brand\"\r\n style={{\r\n opacity: 0.2\r\n }}\r\n />\r\n <svg width=\"60\" height=\"60\" viewBox=\"0 0 80 80\" className=\"relative sm:w-24 sm:h-24\">\r\n <path d=\"M40 0 L45 35 L80 40 L45 45 L40 80 L35 45 L0 40 L35 35 Z\" fill=\"url(#sparkle-gradient)\" opacity=\"0.4\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n {/* SVG connections and gradients */}\r\n <svg className=\"absolute inset-0 w-full h-full pointer-events-none\" style={{ zIndex: 1 }}>\r\n <defs>\r\n <linearGradient id=\"circuit-gradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\r\n <stop offset=\"0%\" style={{ stopColor: 'var(--brand-primary)', stopOpacity: 0.6 }} />\r\n <stop offset=\"50%\" style={{ stopColor: 'var(--gradient-brand-soft-start)', stopOpacity: 0.9 }} />\r\n <stop offset=\"100%\" style={{ stopColor: 'var(--gradient-brand-soft-end)', stopOpacity: 0.6 }} />\r\n </linearGradient>\r\n\r\n <linearGradient id=\"sparkle-gradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\r\n <stop offset=\"0%\" style={{ stopColor: 'var(--brand-primary)' }} />\r\n <stop offset=\"50%\" style={{ stopColor: 'var(--gradient-brand-soft-start)' }} />\r\n <stop offset=\"100%\" style={{ stopColor: 'var(--gradient-brand-soft-end)' }} />\r\n </linearGradient>\r\n\r\n <filter id=\"glow\">\r\n <feGaussianBlur stdDeviation=\"4\" result=\"coloredBlur\" />\r\n <feMerge>\r\n <feMergeNode in=\"coloredBlur\" />\r\n <feMergeNode in=\"SourceGraphic\" />\r\n </feMerge>\r\n </filter>\r\n </defs>\r\n\r\n {lines.map((line) => (\r\n <g key={line.id}>\r\n <path\r\n d={line.path}\r\n stroke=\"var(--gradient-brand-soft-start)\"\r\n strokeWidth=\"6\"\r\n fill=\"none\"\r\n className=\"transition-all duration-200\"\r\n style={{ filter: 'blur(8px)', opacity: 0.2 }}\r\n />\r\n <path\r\n d={line.path}\r\n stroke=\"url(#circuit-gradient)\"\r\n strokeWidth=\"2.5\"\r\n fill=\"none\"\r\n filter=\"url(#glow)\"\r\n className=\"transition-all duration-200\"\r\n style={{\r\n strokeDasharray: draggingNodeId === line.id ? '10 5' : 'none',\r\n animation: draggingNodeId === line.id ? 'dash-flow 1s linear infinite' : 'none'\r\n }}\r\n />\r\n </g>\r\n ))}\r\n </svg>\r\n\r\n {/* Nodes */}\r\n <div className=\"relative w-full h-full\" style={{ zIndex: 10 }}>\r\n {nodes.map((node) => (\r\n <MindMapNode\r\n key={node.id}\r\n id={node.id}\r\n icon={node.icon}\r\n text={node.text}\r\n description={node.description}\r\n color={node.color}\r\n position={{ x: node.x, y: node.y }}\r\n delay={node.delay}\r\n onDragStart={handleNodeDragStart}\r\n isDragging={draggingNodeId === node.id}\r\n onClick={handleNodeClick}\r\n isDarkMode={isDarkMode}\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Central hub */}\r\n <div\r\n ref={centerRef}\r\n className=\"absolute cursor-grab active:cursor-grabbing\"\r\n style={{\r\n left: `${centerPosition.x}%`,\r\n top: `${centerPosition.y}%`,\r\n zIndex: 30,\r\n transform: 'translate(-50%, -50%)',\r\n transition: isDragging ? 'none' : 'all 0.3s ease-out'\r\n }}\r\n onMouseDown={handleMouseDown}\r\n onTouchStart={(e) => {\r\n setIsDragging(true);\r\n e.preventDefault();\r\n }}\r\n onTouchMove={(e) => {\r\n if (!isDragging || !containerRef.current) return;\r\n const touch = e.touches[0];\r\n const containerRect = containerRef.current.getBoundingClientRect();\r\n const x = ((touch.clientX - containerRect.left) / containerRect.width) * 100;\r\n const y = ((touch.clientY - containerRect.top) / containerRect.height) * 100;\r\n\r\n setCenterPosition({\r\n x: Math.max(20, Math.min(80, x)),\r\n y: Math.max(20, Math.min(80, y))\r\n });\r\n }}\r\n onTouchEnd={() => setIsDragging(false)}\r\n >\r\n <div className=\"relative\">\r\n <div\r\n className=\"absolute inset-0 rounded-full blur-2xl bg-brand-primary\"\r\n style={{\r\n opacity: 0.3,\r\n transform: 'scale(1.5)'\r\n }}\r\n />\r\n\r\n <div\r\n 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\"\r\n style={{\r\n borderColor: 'var(--brand-primary)',\r\n borderOpacity: 0.5,\r\n transform: isDragging ? 'scale(1.1)' : 'scale(1)',\r\n transition: 'transform 0.3s ease'\r\n }}\r\n >\r\n <div\r\n className=\"p-2 sm:p-3 rounded-xl backdrop-blur-sm\"\r\n style={{ backgroundColor: 'rgba(255, 255, 255, 0.25)' }}\r\n >\r\n <Briefcase className=\"w-5 h-5 sm:w-7 sm:h-7 text-inverse\" />\r\n </div>\r\n <div className=\"text-center\">\r\n <h1 className=\"text-inverse text-body sm:text-subtitle\">\r\n {diagramName}\r\n </h1>\r\n {diagramDescription && (\r\n <h2 className=\"text-inverse text-caption sm:text-small opacity-90\">\r\n {diagramDescription}\r\n </h2>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {!isDragging && (\r\n <div\r\n className={`absolute -bottom-8 left-1/2 transform -translate-x-1/2 text-caption whitespace-nowrap ${isDarkMode ? 'text-brand-primary' : 'text-brand-secondary'}`}\r\n style={{\r\n opacity: 0.6\r\n }}\r\n >\r\n {safeT('diagram.dragToMove')}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <style jsx>{`\r\n @keyframes fadeIn {\r\n from { opacity: 0; transform: scale(0.9) translateY(10px); }\r\n to { opacity: 1; transform: scale(1) translateY(0); }\r\n }\r\n @keyframes twinkle {\r\n 0%, 100% { opacity: 0.2; transform: scale(1); }\r\n 50% { opacity: 0.5; transform: scale(1); }\r\n }\r\n @keyframes dash-flow {\r\n to { stroke-dashoffset: -30; }\r\n }\r\n .animate-fadeIn {\r\n animation: fadeIn 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards;\r\n opacity: 0;\r\n }\r\n `}</style>\r\n </div>\r\n );\r\n};\r\n\r\nexport default DiagramSection2;","import React, { useState, useMemo } from 'react';\r\nimport { ChevronDown } from 'lucide-react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst FaqItem = ({ faq, index, isActive, onToggle, t }) => {\r\n return (\r\n <div\r\n style={{\r\n animationDelay: `${index * 100}ms`,\r\n animationFillMode: 'both'\r\n }}\r\n className=\"animate-slide-up\"\r\n >\r\n <div className=\"card\" style={{ padding: 0 }}>\r\n {/* Question Button */}\r\n <button\r\n onClick={onToggle}\r\n className=\"w-full px-6 py-5 text-left flex items-start justify-between gap-4 rounded-xl group\"\r\n >\r\n <span className=\"card-title flex-1\">\r\n {faq.question}\r\n </span>\r\n <span className={`\r\n flex-shrink-0 w-10 h-10 rounded-full flex items-center justify-center\r\n transition-all duration-500 transform\r\n ${isActive\r\n ? 'bg-gradient-to-br from-blue-500 to-purple-600 text-white shadow-lg shadow-blue-500/50 rotate-180 scale-110'\r\n : 'bg-gray-700/50 text-gray-400 group-hover:bg-gray-600 group-hover:scale-110'\r\n }\r\n `}>\r\n <ThemeIcon\r\n name=\"icon-faqChevronDown\"\r\n folder=\"FaqSection\"\r\n className={`w-5 h-5 icon-muted transition-transform duration-500 ${isActive ? 'rotate-180' : ''}`}\r\n />\r\n </span>\r\n </button>\r\n\r\n {/* Answer - Collapsible */}\r\n <div\r\n style={{\r\n maxHeight: isActive ? '500px' : '0',\r\n opacity: isActive ? '1' : '0',\r\n overflow: 'hidden',\r\n transition: 'all 500ms ease-in-out'\r\n }}\r\n >\r\n <div\r\n className=\"px-6 pb-6 pt-2\"\r\n style={{\r\n transform: isActive ? 'translateY(0)' : 'translateY(-10px)',\r\n transition: 'transform 500ms ease-in-out'\r\n }}\r\n >\r\n {/* Decorative Line */}\r\n <div\r\n className=\"h-px w-full mb-4\"\r\n style={{\r\n background: 'linear-gradient(to right, transparent, var(--border-color), transparent)'\r\n }}\r\n ></div>\r\n\r\n <div className=\"card-text leading-relaxed\">\r\n {faq.answer}\r\n </div>\r\n\r\n {/* Optional URL Link */}\r\n {faq.url && (\r\n <a\r\n href={faq.url}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"card-link mt-4\"\r\n >\r\n {t?.('faq.learn_more') || 'Learn more'}\r\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\r\n </svg>\r\n </a>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst FaqSection = ({ data, t, isDarkMode, section }) => {\r\n const [activeIndex, setActiveIndex] = useState(-1);\r\n\r\n const faqs = useMemo(() => {\r\n if (data?.sectionDataBindingItems && Array.isArray(data.sectionDataBindingItems)) {\r\n return data.sectionDataBindingItems.map(item => item.data).filter(Boolean);\r\n }\r\n return [];\r\n }, [data]);\r\n\r\n const toggleFaq = (index) => {\r\n setActiveIndex(activeIndex === index ? -1 : index);\r\n };\r\n\r\n const sectionTitle = section?.title || '...';\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-4xl mx-auto\">\r\n {/* Icon Section */}\r\n <div className=\"flex justify-center mb-6 animate-fade-in\">\r\n <div\r\n className=\"w-10 h-10 rounded-lg flex items-center justify-center\"\r\n style={{\r\n background: 'linear-gradient(to bottom right, var(--brand-primary), var(--brand-secondary))',\r\n boxShadow: '0 10px 15px -3px var(--card-shadow)',\r\n transition: 'transform 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n onMouseEnter={(e) => e.currentTarget.style.transform = 'scale(1.1)'}\r\n onMouseLeave={(e) => e.currentTarget.style.transform = 'scale(1)'}\r\n >\r\n <ThemeIcon name=\"icon-faqQuestion\" folder=\"FaqSection\" className=\"w-4 h-4 icon-gradient\" />\r\n </div>\r\n </div>\r\n\r\n {/* Header */}\r\n <div className=\"text-center mb-12 animate-fade-in\">\r\n <h2 className=\"text-title text-main mb-3\">\r\n {sectionTitle}\r\n </h2>\r\n <div\r\n className=\"h-1 w-20 mx-auto rounded-full\"\r\n style={{\r\n background: 'linear-gradient(to right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))'\r\n }}\r\n ></div>\r\n </div>\r\n\r\n {/* FAQ Items */}\r\n <div className=\"space-y-4\">\r\n {faqs.map((faq, index) => (\r\n <FaqItem\r\n key={faq.id || index}\r\n faq={faq}\r\n index={index}\r\n isActive={activeIndex === index}\r\n onToggle={() => toggleFaq(index)}\r\n t={t}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <style jsx>{`\r\n @keyframes fade-in {\r\n from {\r\n opacity: 0;\r\n transform: translateY(-20px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n }\r\n @keyframes slide-up {\r\n from {\r\n opacity: 0;\r\n transform: translateY(30px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n }\r\n .animate-fade-in {\r\n animation: fade-in 0.8s ease-out;\r\n }\r\n .animate-slide-up {\r\n animation: slide-up 0.6s ease-out;\r\n }\r\n `}</style>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default FaqSection;","import React, { useState, useEffect } from 'react';\r\n\r\nconst PageHighlightSection = ({ data, t, isDarkMode, imageBaseUrl = \"\" }) => {\r\n const [activeTab, setActiveTab] = useState(0);\r\n\r\n // Xử lý data giống TimelineSection\r\n const rawData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data) // lọc bỏ item null hoặc data null\r\n .map((item) => item.data) || [];\r\n\r\n // Helper function để lấy URL ảnh đầy đủ\r\n const getImageUrl = (imagePath) => {\r\n if (imagePath) {\r\n return `${imageBaseUrl}${imagePath}`;\r\n }\r\n return null;\r\n };\r\n\r\n // Transform data để lấy đầy đủ thông tin\r\n const highlightData = rawData.map((item) => {\r\n // Lấy image chính từ pageImages\r\n const mainImagePath = item.pageImages?.find(img => img.isMain)?.url ||\r\n item.pageImages?.[0]?.url ||\r\n null;\r\n\r\n const mainImage = getImageUrl(mainImagePath);\r\n\r\n // Lấy tag đầu tiên làm tag hiển thị\r\n const primaryTag = item.tagKeys?.[0]?.key || item.title;\r\n\r\n return {\r\n title: item.title,\r\n slug: item.slug,\r\n description: item.description,\r\n image: mainImage,\r\n tag: primaryTag,\r\n tagKeys: item.tagKeys || [],\r\n features: item.features || [] // Nếu có features trong data\r\n };\r\n });\r\n\r\n // Auto scroll every 5 seconds\r\n useEffect(() => {\r\n if (highlightData.length === 0) return;\r\n\r\n const interval = setInterval(() => {\r\n setActiveTab((prev) => (prev + 1) % highlightData.length);\r\n }, 5000);\r\n\r\n return () => clearInterval(interval);\r\n }, [highlightData.length]);\r\n\r\n const handleNavigate = (slug) => {\r\n if (slug) {\r\n window.location.href = slug;\r\n }\r\n };\r\n\r\n // Các màu gradient để sử dụng\r\n const gradientClasses = [\r\n 'btn-primary',\r\n ];\r\n\r\n // Default image nếu không có\r\n const defaultImage = 'https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=1200&h=800&fit=crop&q=80';\r\n\r\n // Nếu không có data\r\n if (!highlightData.length) {\r\n return (\r\n <section className={`py-20 ${isDarkMode ? \"bg-slate-950\" : \"bg-white\"}`}>\r\n <div className=\"max-w-7xl mx-auto px-4 text-center\">\r\n <h3 className={`text-lg font-semibold mb-2 text-main`}>\r\n {t('highlight.noData.title') || 'Chưa có dữ liệu'}\r\n </h3>\r\n <p className=\"text-muted\">\r\n {t('highlight.noData.description') || 'Hiện tại chưa có sản phẩm nào được thiết lập.'}\r\n </p>\r\n </div>\r\n </section>\r\n );\r\n }\r\n\r\n return (\r\n <section\r\n className=\"relative overflow-hidden\"\r\n style={{\r\n background: isDarkMode\r\n ? 'linear-gradient(to bottom right, var(--color-gray-950), var(--color-gray-900), var(--color-gray-950))'\r\n : 'linear-gradient(to bottom right, var(--bg-primary), #eff6ff50, #f3e8ff50)'\r\n }}\r\n >\r\n {/* Floating gradient orbs */}\r\n <div className=\"absolute inset-0 overflow-hidden pointer-events-none\">\r\n <div\r\n className=\"absolute top-20 right-10 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob\"\r\n style={{\r\n backgroundColor: isDarkMode\r\n ? 'var(--gradient-brand-soft-start)'\r\n : 'var(--gradient-brand-soft-start)'\r\n }}\r\n ></div>\r\n <div\r\n className=\"absolute top-40 -left-20 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob animation-delay-2000\"\r\n style={{\r\n backgroundColor: isDarkMode\r\n ? 'var(--gradient-accent-soft-start)'\r\n : 'var(--gradient-accent-soft-start)',\r\n animationDelay: '2s'\r\n }}\r\n ></div>\r\n <div\r\n className=\"absolute -bottom-20 right-40 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob animation-delay-4000\"\r\n style={{\r\n backgroundColor: isDarkMode\r\n ? 'var(--gradient-accent-soft-end)'\r\n : 'var(--gradient-accent-soft-end)',\r\n animationDelay: '4s'\r\n }}\r\n ></div>\r\n </div>\r\n\r\n {/* Main Content */}\r\n <div className=\"relative w-full px-4 sm:px-6 lg:px-8 py-16 sm:py-24\">\r\n {/* Main Content */}\r\n <div className=\"relative w-full\">\r\n {highlightData.map((item, index) => {\r\n const color = gradientClasses[index % gradientClasses.length];\r\n return (\r\n <div\r\n key={index}\r\n className={`transition-opacity duration-700 ${activeTab === index ? 'opacity-100' : 'opacity-0 absolute inset-0 pointer-events-none'\r\n }`}\r\n >\r\n <div className={`${isDarkMode\r\n ? 'bg-gradient-to-br from-slate-900/30 to-slate-950/30 border-slate-700/20'\r\n : 'bg-white/40 border-white/30'\r\n } backdrop-blur-md rounded-3xl shadow-lg overflow-hidden border transition-colors duration-500`}>\r\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-0\">\r\n {/* Image Column - Fixed height */}\r\n <div className=\"relative h-[280px] lg:h-[500px] overflow-hidden group\">\r\n <img\r\n src={item.image || defaultImage}\r\n alt={item.title}\r\n className=\"absolute inset-0 w-full h-full object-cover transition-transform duration-700 group-hover:scale-110\"\r\n onError={(e) => {\r\n e.target.src = defaultImage;\r\n }}\r\n />\r\n <div className={`absolute inset-0 bg-gradient-to-br ${color} opacity-20`} />\r\n <div className=\"absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent\" />\r\n </div>\r\n\r\n {/* Content Column - Fixed height matching image */}\r\n <div className=\"p-5 lg:p-8 flex flex-col justify-center h-[280px] lg:h-[500px]\">\r\n <h1 className=\"text-3xl lg:text-4xl font-black mb-3 text-gradient-brand\">\r\n {item.title}\r\n </h1>\r\n\r\n <p className=\"mb-6 text-muted line-clamp-3 lg:line-clamp-4\">\r\n {item.description}\r\n </p>\r\n\r\n {/* Features List - nếu có */}\r\n {item.features && item.features.length > 0 && (\r\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-2 mb-6 overflow-y-auto max-h-32 lg:max-h-48\">\r\n {item.features.map((feature, idx) => (\r\n <div key={idx} className=\"flex items-start gap-2 group\">\r\n <div className=\"mt-0.5 w-4 h-4 rounded-full bg-gradient-accent flex items-center justify-center flex-shrink-0\">\r\n <svg className=\"w-2.5 h-2.5 text-inverse\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={3} d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n </div>\r\n <span className=\"text-muted group-hover:text-main font-medium text-xs transition-colors\">\r\n {feature}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* CTA Button */}\r\n <a\r\n href={item.slug}\r\n rel=\"noopener noreferrer\"\r\n className={`group relative px-6 py-3 rounded-xl font-bold text-sm transition-all duration-300 transform hover:scale-105 hover:shadow-2xl overflow-hidden bg-gradient-to-r ${color} text-white shadow-xl w-full text-center mt-auto`}\r\n onClick={(e) => {\r\n // Nếu người dùng không giữ Ctrl/Meta/chuột giữa → điều hướng trong tab hiện tại\r\n if (\r\n !e.ctrlKey &&\r\n !e.metaKey &&\r\n e.button !== 1\r\n ) {\r\n e.preventDefault();\r\n window.location.href = item.slug;\r\n }\r\n }}\r\n >\r\n <span className=\"relative z-10 flex items-center justify-center gap-2\">\r\n {t('highlight.cta') || 'Khám phá'} {item.title}\r\n <svg\r\n className=\"w-5 h-5 group-hover:translate-x-1 transition-transform\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M17 8l4 4m0 0l-4 4m4-4H3\"\r\n />\r\n </svg>\r\n </span>\r\n <div className=\"absolute inset-0 bg-white/20 transform scale-x-0 group-hover:scale-x-100 transition-transform origin-left\" />\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Navigation Tabs */}\r\n <div className=\"flex flex-wrap justify-center gap-4 mt-12\">\r\n {highlightData.map((item, index) => {\r\n const color = gradientClasses[index % gradientClasses.length];\r\n\r\n return (\r\n <button\r\n key={index}\r\n onClick={() => setActiveTab(index)}\r\n className={`group relative px-8 py-4 rounded-xl font-bold text-lg transition-all duration-300 transform hover:scale-105 overflow-hidden ${activeTab === index\r\n ? `bg-gradient-to-r ${color} text-white shadow-xl`\r\n : isDarkMode\r\n ? 'bg-gray-800/50 text-gray-300 hover:shadow-xl shadow-lg border border-gray-700/50 backdrop-blur-sm'\r\n : 'bg-white text-gray-700 hover:shadow-xl shadow-lg'\r\n }`}\r\n >\r\n <span className=\"relative z-10\">{item.title}</span>\r\n {activeTab !== index && (\r\n <div className={`absolute inset-0 bg-gradient-to-r ${color} opacity-0 group-hover:opacity-100 transition-opacity duration-300`} />\r\n )}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* CSS Animations */}\r\n <style jsx>{`\r\n @keyframes blob {\r\n 0%, 100% {\r\n transform: translate(0px, 0px) scale(1);\r\n }\r\n 33% {\r\n transform: translate(30px, -50px) scale(1.1);\r\n }\r\n 66% {\r\n transform: translate(-20px, 20px) scale(0.9);\r\n }\r\n }\r\n\r\n .animate-blob {\r\n animation: blob 7s ease-in-out infinite;\r\n }\r\n\r\n .animation-delay-2000 {\r\n animation-delay: 2s;\r\n }\r\n\r\n .animation-delay-4000 {\r\n animation-delay: 4s;\r\n }\r\n\r\n .bg-grid-white {\r\n background-image: linear-gradient(rgba(255, 255, 255, 0.05) 1px, transparent 1px),\r\n linear-gradient(90deg, rgba(255, 255, 255, 0.05) 1px, transparent 1px);\r\n background-size: 50px 50px;\r\n }\r\n\r\n .bg-grid-slate {\r\n background-image: linear-gradient(rgba(0, 0, 0, 0.03) 1px, transparent 1px),\r\n linear-gradient(90deg, rgba(0, 0, 0, 0.03) 1px, transparent 1px);\r\n background-size: 50px 50px;\r\n }\r\n\r\n .line-clamp-3 {\r\n display: -webkit-box;\r\n -webkit-line-clamp: 3;\r\n -webkit-box-orient: vertical;\r\n overflow: hidden;\r\n }\r\n\r\n .line-clamp-4 {\r\n display: -webkit-box;\r\n -webkit-line-clamp: 4;\r\n -webkit-box-orient: vertical;\r\n overflow: hidden;\r\n }\r\n `}</style>\r\n </section>\r\n );\r\n};\r\n\r\nexport default PageHighlightSection;","import React, { useState } from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl = \"\" }) => {\r\n const pages = data?.sectionDataBindingItems?.map(item => item.data).filter(Boolean) || [];\r\n const sectionTitle = section?.title || '';\r\n const sectionDescription = section?.description || '';\r\n const [visibleCount, setVisibleCount] = useState(8);\r\n const visiblePages = pages.slice(0, visibleCount);\r\n const hasMore = visibleCount < pages.length;\r\n\r\n if (!pages || pages.length === 0) {\r\n return null;\r\n }\r\n\r\n const handleLoadMore = () => {\r\n setVisibleCount(prev => prev + 8);\r\n };\r\n\r\n const getImageUrl = (url) => {\r\n if (!url) return '';\r\n if (url.startsWith('http://') || url.startsWith('https://')) return url;\r\n return `${imageBaseUrl}${url}`;\r\n };\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div style={{\r\n maxWidth: '1400px',\r\n margin: '0 auto'\r\n }}>\r\n {sectionTitle && (\r\n <div className=\"text-center mb-12\">\r\n <h2 className=\"text-title text-main mb-4\">\r\n {sectionTitle}\r\n </h2>\r\n {sectionDescription && (\r\n <p className=\"text-body text-muted max-w-3xl mx-auto\">\r\n {sectionDescription}\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n\r\n <div style={{\r\n display: 'grid',\r\n gridTemplateColumns: 'repeat(auto-fit, minmax(220px, 1fr))',\r\n gap: '24px',\r\n marginBottom: hasMore ? '40px' : '0'\r\n }}>\r\n {visiblePages.map((page) => {\r\n const iconUrl = getImageUrl(page.icon);\r\n return (\r\n <a\r\n key={page.id}\r\n href={page.slug}\r\n className=\"card\"\r\n style={{\r\n alignItems: 'center',\r\n textAlign: 'center',\r\n gap: '16px',\r\n textDecoration: 'none',\r\n padding: '32px 20px'\r\n }}\r\n >\r\n {iconUrl && (\r\n <div style={{\r\n width: '80px',\r\n height: '80px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }}>\r\n <img\r\n src={iconUrl}\r\n alt={page.title}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'contain'\r\n }}\r\n />\r\n </div>\r\n )}\r\n <h3 className=\"card-title text-body\" style={{ margin: 0 }}>\r\n {page.title}\r\n </h3>\r\n </a>\r\n );\r\n })}\r\n </div>\r\n\r\n {hasMore && (\r\n <div style={{ display: 'flex', justifyContent: 'center' }}>\r\n <button\r\n onClick={handleLoadMore}\r\n style={{\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '8px',\r\n padding: '14px 32px',\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n color: '#fff',\r\n backgroundColor: '#361985ff',\r\n border: 'none',\r\n borderRadius: '9999px',\r\n cursor: 'pointer',\r\n transition: 'all 0.3s',\r\n boxShadow: '0 4px 6px -1px rgba(249, 115, 22, 0.3)'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = '#361985ff';\r\n e.currentTarget.style.transform = 'translateY(-2px)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = '#361985ff';\r\n e.currentTarget.style.transform = 'translateY(0)';\r\n }}\r\n >\r\n {t('pageChildrenSelect.moreInsights')}\r\n <ThemeIcon name=\"icon-pageChildrenSelectArrowRight\" folder=\"PageChildrenSelectSection\" className=\"w-4 h-4 icon-muted\"/>\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default PageChildrenSelectSection;","import React, { useState } from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl = \"\" }) => {\r\n const pages = data?.sectionDataBindingItems?.map(item => item.data).filter(Boolean) || [];\r\n const sectionTitle = section?.title || '';\r\n const [visibleCount, setVisibleCount] = useState(5);\r\n const visiblePages = pages.slice(0, visibleCount);\r\n const hasMore = visibleCount < pages.length;\r\n\r\n if (!pages || pages.length === 0) {\r\n return null;\r\n }\r\n\r\n const handleLoadMore = () => {\r\n setVisibleCount(prev => prev + 5);\r\n };\r\n\r\n const getImageUrl = (url) => {\r\n if (!url) return '';\r\n if (url.startsWith('http://') || url.startsWith('https://')) return url;\r\n return `${imageBaseUrl}${url}`;\r\n };\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div style={{\r\n maxWidth: '1280px',\r\n margin: '0 auto'\r\n }}>\r\n {sectionTitle && (\r\n <h2 className=\"text-title text-main mb-10 uppercase tracking-wide\">\r\n {sectionTitle}\r\n </h2>\r\n )}\r\n \r\n <div style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '24px'\r\n }}>\r\n {visiblePages.map((page) => {\r\n const mainImage = page.pageImages?.find(img => img.isMain)?.url || page.icon;\r\n const imageUrl = getImageUrl(mainImage);\r\n\r\n return (\r\n <a\r\n key={page.id}\r\n href={page.slug}\r\n className=\"card\"\r\n style={{\r\n flexDirection: 'row',\r\n gap: '20px',\r\n textDecoration: 'none'\r\n }}\r\n >\r\n {imageUrl && (\r\n <div style={{\r\n width: '200px',\r\n height: '140px',\r\n flexShrink: 0,\r\n overflow: 'hidden',\r\n borderRadius: '6px'\r\n }}>\r\n <img\r\n src={imageUrl}\r\n alt={page.title}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover'\r\n }}\r\n />\r\n </div>\r\n )}\r\n\r\n <div className=\"flex flex-col justify-center flex-1\">\r\n {page.tagKeys?.length > 0 && (\r\n <div className=\"card-link \">\r\n {page.tagKeys[0].key}\r\n </div>\r\n )}\r\n \r\n <h3 className=\"card-title mb-2 leading-snug\">\r\n {page.title}\r\n </h3>\r\n \r\n {page.description && (\r\n <p className=\"card-text m-0\">\r\n {page.description}\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n paddingLeft: '16px'\r\n }}>\r\n <ThemeIcon name=\"icon-pageChildrenSelectChevronRight\" folder=\"PageChildrenSelectSection\" className=\"w-4 h-4 card-text\"/>\r\n </div>\r\n </a>\r\n );\r\n })}\r\n </div>\r\n\r\n {hasMore && (\r\n <div style={{ display: 'flex', justifyContent: 'center', marginTop: '40px' }}>\r\n <button\r\n onClick={handleLoadMore}\r\n className=\"btn-primary\"\r\n style={{\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n padding: '12px 28px',\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n color: '#fff',\r\n border: 'none',\r\n borderRadius: '9999px',\r\n cursor: 'pointer'\r\n }}\r\n >\r\n {t('pageChildrenSelect.moreInsights')}\r\n <ThemeIcon name=\"icon-pageChildrenSelectArrowRight\" folder=\"PageChildrenSelectSection\" className=\"w-4 h-4 icon-muted\"/>\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default PageChildrenSelectSection1;","import React, { useState } from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nimport ThemeIcon from \"../../contexts/ThemeIcon\";\r\nconst PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl = \"\" }) => {\r\n const pages = data?.sectionDataBindingItems?.map(item => item.data).filter(Boolean) || [];\r\n const sectionTitle = section?.title || '';\r\n\r\n const [visibleCount, setVisibleCount] = useState(6);\r\n\r\n if (!pages || pages.length === 0) {\r\n return null;\r\n }\r\n\r\n const getImageUrl = (url) => {\r\n if (!url) return '';\r\n if (url.startsWith('http://') || url.startsWith('https://')) return url;\r\n return `${imageBaseUrl}${url}`;\r\n };\r\n\r\n const handleLoadMore = () => {\r\n setVisibleCount(prev => prev + 6);\r\n };\r\n\r\n const visiblePages = pages.slice(0, visibleCount);\r\n const hasMore = visibleCount < pages.length;\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div style={{\r\n maxWidth: '1400px',\r\n margin: '0 auto'\r\n }}>\r\n {sectionTitle && (\r\n <h2 className=\"text-title mb-12 text-main\">\r\n {sectionTitle}\r\n </h2>\r\n )}\r\n <div style={{\r\n display: 'grid',\r\n gridTemplateColumns: 'repeat(auto-fit, minmax(350px, 1fr))',\r\n gap: '30px',\r\n marginBottom: '50px'\r\n }}>\r\n {visiblePages.map((page) => {\r\n const mainImage = page.pageImages?.find(img => img.isMain)?.url || page.icon;\r\n const imageUrl = getImageUrl(mainImage);\r\n\r\n return (\r\n <a\r\n key={page.id}\r\n href={page.slug}\r\n className=\"card\"\r\n style={{\r\n textDecoration: 'none',\r\n display: 'block',\r\n padding: '0',\r\n overflow: 'hidden'\r\n }}\r\n >\r\n {imageUrl && (\r\n <div style={{\r\n width: '100%',\r\n height: '240px',\r\n overflow: 'hidden',\r\n position: 'relative'\r\n }}>\r\n <img\r\n src={imageUrl}\r\n alt={page.title}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n transition: 'transform 0.3s'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = 'scale(1.05)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = 'scale(1)';\r\n }}\r\n />\r\n </div>\r\n )}\r\n\r\n <div style={{ padding: '1.5rem' }}>\r\n <h3 className=\"card-title text-subtitle\" style={{\r\n minHeight: '56px',\r\n marginBottom: '0.75rem'\r\n }}>\r\n {page.title}\r\n </h3>\r\n\r\n {page.description && (\r\n <p className=\"card-text line-clamp-2\" style={{\r\n marginBottom: '1rem'\r\n }}>\r\n {page.description}\r\n </p>\r\n )}\r\n </div>\r\n\r\n </a>\r\n );\r\n })}\r\n </div>\r\n\r\n {hasMore && (\r\n <div style={{\r\n display: 'flex',\r\n justifyContent: 'center'\r\n }}>\r\n <button\r\n onClick={handleLoadMore}\r\n className=\"btn-primary\"\r\n style={{\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n padding: '14px 32px',\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n color: '#ffffff',\r\n border: 'none',\r\n borderRadius: '50px',\r\n cursor: 'pointer'\r\n }}\r\n >\r\n {t('pageChildrenSelect.moreInsights')}\r\n <ThemeIcon name=\"icon-pageChildrenSelectArrowRight\" folder=\"PageChildrenSelectSection\" className=\"w-4 h-4 icon-muted\"/>\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default PageChildrenSelectSection2;","// src/index.js \r\nimport AboutCompanySection from './sections/aboutCompany/AboutCompanySection';\r\nimport CompanyValues from './sections/aboutCompany/CompanyValues';\r\nimport TimelineSection from './sections/aboutCompany/TimelineSection';\r\nimport PartnerCard from './sections/aboutCompany/PartnerCard';\r\nimport PartnersSection from './sections/aboutCompany/PartnersSection';\r\nimport MilestoneSection from './sections/aboutCompany/MilestoneSection';\r\nimport TestimonialsSection from './sections/aboutCompany/TestimonialsSection';\r\nimport PartnerListCard from './sections/aboutCompany/PartnerListCard';\r\nimport PartnerListSection from './sections/aboutCompany/PartnerListSection';\r\nimport ContactFormSection from './sections/contactCompany/ContactFormSection';\r\nimport ContactInfoSection from './sections/contactCompany/ContactInfoSection';\r\nimport ContactListAutoSection from './sections/contactCompany/ContactListAutoSection';\r\nimport CustomerFeedbackAutoSection from './sections/customerFeedback/CustomerFeedbackAutoSection';\r\nimport ProductListSection from './sections/product/ProductListSection';\r\nimport TextWithTitleSection from './sections/simple/TextWithTitleSection';\r\nimport TextSection from './sections/simple/TextSection';\r\nimport DiagramSection from './sections/diagramCompany/DiagramSection';\r\nimport DiagramSection2 from './sections/diagramCompany/DiagramSection2';\r\nimport FaqSection from './sections/faq/FaqSection';\r\nimport PageHighlightSection from './sections/page/PageHighlightSection';\r\nimport PageChildrenSelectSection from './sections/pageChildren/PageChildrenSelectSection';\r\nimport PageChildrenSelectSection1 from './sections/pageChildren/PageChildrenSelectSection1';\r\nimport PageChildrenSelectSection2 from './sections/pageChildren/PageChildrenSelectSection2';\r\n// Export các components\r\nexport {\r\n AboutCompanySection,\r\n CompanyValues,\r\n TimelineSection,\r\n PartnerCard,\r\n PartnersSection,\r\n MilestoneSection,\r\n TestimonialsSection,\r\n PartnerListCard,\r\n PartnerListSection,\r\n ContactFormSection,\r\n ContactInfoSection,\r\n ContactListAutoSection,\r\n CustomerFeedbackAutoSection,\r\n ProductListSection,\r\n TextWithTitleSection,\r\n TextSection,\r\n DiagramSection,\r\n DiagramSection2,\r\n FaqSection,\r\n PageHighlightSection,\r\n PageChildrenSelectSection,\r\n PageChildrenSelectSection1,\r\n PageChildrenSelectSection2\r\n};\r\n\r\n// Default export (tuỳ chọn)\r\nexport default {\r\n AboutCompanySection,\r\n CompanyValues,\r\n TimelineSection,\r\n PartnerCard,\r\n PartnersSection,\r\n MilestoneSection,\r\n TestimonialsSection,\r\n PartnerListCard,\r\n PartnerListSection,\r\n ContactFormSection,\r\n ContactInfoSection,\r\n ContactListAutoSection,\r\n CustomerFeedbackAutoSection,\r\n ProductListSection,\r\n TextWithTitleSection,\r\n TextSection,\r\n DiagramSection,\r\n DiagramSection2,\r\n FaqSection,\r\n PageHighlightSection,\r\n PageChildrenSelectSection,\r\n PageChildrenSelectSection1,\r\n PageChildrenSelectSection2\r\n};"],"names":["jsxRuntimeModule","require$$0","require$$1","jsx","jsxs","index","logoUrl","Fragment","useWindowSize","_a","_b","__iconNode","Icon","Home"],"mappings":"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","x_google_ignoreList":[0,1,2,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49]}
|