nvis-fe-cms-libs 1.1.41 → 1.1.42
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.umd.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/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","../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/arrow-right.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/chevron-down.js","../node_modules/lucide-react/dist/esm/icons/chevron-right.js","../node_modules/lucide-react/dist/esm/icons/circle-alert.js","../node_modules/lucide-react/dist/esm/icons/circle-check-big.js","../node_modules/lucide-react/dist/esm/icons/clock.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/loader-circle.js","../node_modules/lucide-react/dist/esm/icons/mail.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/phone.js","../node_modules/lucide-react/dist/esm/icons/plane.js","../node_modules/lucide-react/dist/esm/icons/send.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/user.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/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","../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, { useEffect, useRef, useState } from \"react\";\r\n\r\nconst CompanyValues = ({ companyData, t, isDarkMode }) => {\r\n // Clean HTML content với null safety\r\n const cleanHtmlContent = (html) => {\r\n if (!html) return '';\r\n\r\n try {\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = html;\r\n\r\n let cleanText = tempDiv.textContent || tempDiv.innerText || '';\r\n\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 (error) {\r\n console.error('Error cleaning HTML content:', error);\r\n return String(html || '').replace(/<[^>]*>/g, '').replace(/\\s+/g, ' ').trim();\r\n }\r\n };\r\n\r\n // Validate companyData với null safety\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: \"💡\",\r\n bgLight: \"bg-blue-100 text-blue-600\",\r\n bgDark: \"bg-blue-900/40 text-blue-300\",\r\n title: t('about.companyValues.vision') || 'Tầm nhìn',\r\n text: cleanHtmlContent(safeCompanyData.vision) || 'Tầm nhìn của chúng tôi sẽ được cập nhật trong thời gian tới.',\r\n },\r\n {\r\n icon: \"🚀\",\r\n bgLight: \"bg-emerald-100 text-emerald-600\",\r\n bgDark: \"bg-emerald-900/40 text-emerald-300\",\r\n title: t('about.companyValues.mission') || 'Sứ mệnh',\r\n text: cleanHtmlContent(safeCompanyData.mission) || 'Sứ mệnh của chúng tôi sẽ được cập nhật trong thời gian tới.',\r\n },\r\n {\r\n icon: \"💎\",\r\n bgLight: \"bg-purple-100 text-purple-600\",\r\n bgDark: \"bg-purple-900/40 text-purple-300\",\r\n title: t('about.companyValues.coreValues') || 'Giá trị cốt lõi',\r\n text: cleanHtmlContent(safeCompanyData.coreValues) || 'Giá trị cốt lõi của chúng tôi sẽ được cập nhật trong thời gian tới.',\r\n },\r\n ];\r\n\r\n // Filter out items với empty text nếu không muốn hiển thị placeholder\r\n const validItems = items.filter(item => {\r\n const originalText = item === items[0] ? safeCompanyData.vision\r\n : item === items[1] ? safeCompanyData.mission\r\n : safeCompanyData.coreValues;\r\n\r\n // Chỉ hiển thị item nếu có data thật hoặc muốn hiển thị placeholder\r\n return originalText || true; // Set to false nếu không muốn hiển thị placeholder\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(validItems.length).fill(false));\r\n\r\n if (validItems.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 () => {\r\n refs.current.forEach((el) => el && observer.unobserve(el));\r\n };\r\n }, [validItems.length]);\r\n\r\n // Return empty state nếu không có data và không muốn hiển thị placeholder\r\n if (!companyData || validItems.length === 0) {\r\n return (\r\n <div className={`text-center py-8 px-4 rounded-lg border ${isDarkMode ? \"border-gray-700 bg-gray-800/50\" : \"border-gray-300 bg-gray-50\"\r\n }`}>\r\n <div className={`w-16 h-16 mx-auto mb-4 rounded-full flex items-center justify-center ${isDarkMode ? 'bg-gray-700' : 'bg-gray-200'\r\n }`}>\r\n <svg className={`w-8 h-8 ${isDarkMode ? 'text-gray-500' : 'text-gray-400'}`} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\r\n </svg>\r\n </div>\r\n <h3 className={`text-lg font-semibold mb-2 ${isDarkMode ? \"text-white\" : \"text-gray-900\"}`}>\r\n Thông tin công ty\r\n </h3>\r\n <p className={`text-sm ${isDarkMode ? \"text-gray-400\" : \"text-gray-600\"}`}>\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 {validItems.map((item, index) => {\r\n try {\r\n return (\r\n <div\r\n key={index}\r\n ref={(el) => (refs.current[index] = el)}\r\n className={`flex items-start space-x-4 rounded-2xl p-6 transform transition-all duration-700 ease-out border backdrop-blur-sm ${isDarkMode\r\n ? \"border-blue-800/40 bg-gradient-to-br from-blue-900/30 via-indigo-900/20 to-purple-900/30 hover:from-blue-800/40 hover:to-purple-800/40\"\r\n : \"border-gray-200 bg-transparent hover:border-gray-300\"\r\n } ${visible[index] ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\"}`}\r\n style={{ transitionDelay: `${index * 200}ms` }}\r\n >\r\n {/* Icon */}\r\n <div\r\n className={`w-10 h-10 rounded-lg flex items-center justify-center flex-shrink-0 ${isDarkMode ? item.bgDark : item.bgLight\r\n }`}\r\n >\r\n {item.icon}\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"flex-1 min-w-0\">\r\n <h3\r\n className={`text-lg font-bold mb-1 ${isDarkMode ? \"text-white\" : \"text-gray-900\"\r\n }`}\r\n >\r\n {item.title}\r\n </h3>\r\n <p\r\n className={`leading-relaxed ${isDarkMode ? \"text-gray-300\" : \"text-gray-600\"\r\n } ${\r\n // Style khác nhau cho placeholder vs real content\r\n (item.text.includes('sẽ được cập nhật') ? 'italic opacity-75' : '')\r\n }`}\r\n >\r\n {item.text}\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n } catch (error) {\r\n console.error('Error rendering company value item:', item, error);\r\n // Fallback item nếu có lỗi\r\n return (\r\n <div\r\n key={`error-${index}`}\r\n className={`flex items-start space-x-4 rounded-lg p-4 border opacity-50 ${isDarkMode ? \"border-gray-700 bg-gray-800\" : \"border-gray-300 bg-gray-100\"\r\n }`}\r\n >\r\n <div className={`w-10 h-10 rounded-lg flex items-center justify-center ${isDarkMode ? \"bg-red-900/40 text-red-300\" : \"bg-red-100 text-red-600\"\r\n }`}>\r\n ❌\r\n </div>\r\n <div>\r\n <h3 className={`text-lg font-bold mb-1 ${isDarkMode ? \"text-white\" : \"text-gray-900\"}`}>\r\n Lỗi hiển thị\r\n </h3>\r\n <p className={`${isDarkMode ? \"text-gray-400\" : \"text-gray-600\"}`}>\r\n Không thể hiển thị mục này do vấn đề dữ liệu.\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n }\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 với gradient 3 dải tự kết nối\r\n * ------------------\r\n * Mỗi section dùng pattern: Neutral -> Color -> Neutral\r\n * Khi ghép liền nhau tự động khớp màu mượt mà\r\n * \r\n * Props:\r\n * - variant: chọn kiểu nền (\"blue\", \"purple\", \"green\", \"neutral\", \"softLight\")\r\n * - isDarkMode: boolean — điều khiển nền sáng/tối\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,\r\n isDarkMode, \r\n className = \"\", \r\n children\r\n}) => {\r\n // ⭐ THAY ĐỔI MÀU MẶC ĐỊNH Ở ĐÂY\r\n const defaultVariant = \"softLight\";\r\n const currentVariant = variant || defaultVariant;\r\n\r\n // Pattern: Neutral (trắng/đen) -> Color (màu chính) -> Neutral (trắng/đen)\r\n const variants = {\r\n blue: {\r\n light: \"bg-gradient-to-b from-white via-blue-100 to-white\",\r\n dark: \"bg-gradient-to-b from-gray-950 via-blue-900 to-gray-950\",\r\n lightDecor1: \"bg-blue-200/30\",\r\n lightDecor2: \"bg-blue-300/30\",\r\n darkDecor1: \"bg-blue-500/10\",\r\n darkDecor2: \"bg-blue-600/10\",\r\n },\r\n purple: {\r\n light: \"bg-gradient-to-b from-white via-purple-100 to-white\",\r\n dark: \"bg-gradient-to-b from-gray-950 via-purple-900 to-gray-950\",\r\n lightDecor1: \"bg-purple-200/30\",\r\n lightDecor2: \"bg-pink-200/30\",\r\n darkDecor1: \"bg-purple-500/10\",\r\n darkDecor2: \"bg-pink-500/10\",\r\n },\r\n green: {\r\n light: \"bg-gradient-to-b from-white via-emerald-100 to-white\",\r\n dark: \"bg-gradient-to-b from-gray-950 via-emerald-900 to-gray-950\",\r\n lightDecor1: \"bg-emerald-200/30\",\r\n lightDecor2: \"bg-teal-200/30\",\r\n darkDecor1: \"bg-emerald-500/10\",\r\n darkDecor2: \"bg-teal-500/10\",\r\n },\r\n neutral: {\r\n light: \"bg-gradient-to-b from-white via-gray-100 to-white\",\r\n dark: \"bg-gradient-to-b from-gray-950 via-gray-800 to-gray-950\",\r\n lightDecor1: \"bg-gray-200/30\",\r\n lightDecor2: \"bg-gray-300/30\",\r\n darkDecor1: \"bg-gray-600/10\",\r\n darkDecor2: \"bg-gray-700/10\",\r\n },\r\n softLight: {\r\n light: \"bg-gradient-to-b from-white via-blue-50 to-white\",\r\n dark: \"bg-gradient-to-b from-gray-950 via-blue-950 to-gray-950\",\r\n lightDecor1: \"bg-blue-100/25\",\r\n lightDecor2: \"bg-purple-100/25\",\r\n darkDecor1: \"bg-blue-500/10\",\r\n darkDecor2: \"bg-purple-500/10\",\r\n },\r\n };\r\n\r\n const current = variants[currentVariant] || variants[defaultVariant];\r\n\r\n return (\r\n <section className={`relative py-32 ${isDarkMode ? current.dark : current.light} ${className}`}>\r\n {/* Hiệu ứng nền động */}\r\n <div className=\"absolute inset-0 overflow-hidden pointer-events-none\">\r\n <div\r\n className={`absolute top-10 left-1/4 w-72 h-72 ${\r\n isDarkMode ? current.darkDecor1 : current.lightDecor1\r\n } rounded-full blur-3xl animate-pulse`}\r\n />\r\n <div\r\n className={`absolute bottom-10 right-1/4 w-80 h-80 ${\r\n isDarkMode ? current.darkDecor2 : current.lightDecor2\r\n } rounded-full blur-3xl animate-pulse`}\r\n style={{ animationDelay: \"2s\" }}\r\n />\r\n </div>\r\n\r\n {/* Nội dung chính */}\r\n <div className=\"relative z-10\">{children}</div>\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\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 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 const logoUrl = getLogoUrl(logo);\r\n return (\r\n <>\r\n {/* Hero Section */}\r\n <section\r\n className={`relative min-h-[80vh] flex items-center justify-center overflow-hidden pt-8 transition-colors duration-300`}\r\n >\r\n <div className=\"absolute inset-0\">\r\n <div className={`absolute inset-0 ${isDarkMode\r\n ? \"bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900\"\r\n : \"bg-gradient-to-br from-blue-600 via-indigo-600 to-purple-600\"\r\n }`}></div>\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 <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 <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-to-r from-blue-500 to-purple-600 p-1\">\r\n <div\r\n className={`w-full h-full rounded-full flex items-center justify-center overflow-hidden ${isDarkMode ? \"bg-gray-900\" : \"bg-white\"\r\n }`}\r\n >\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 // Fallback khi ảnh lỗi - hiển thị shortName\r\n e.target.style.display = 'none';\r\n const fallbackDiv = document.createElement('div');\r\n fallbackDiv.className = 'text-2xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent';\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 bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent\">\r\n {shortName}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n <h1\r\n className={`text-5xl lg:text-6xl font-extrabold tracking-tight mb-4 ${isDarkMode\r\n ? \"text-transparent bg-clip-text bg-gradient-to-r from-blue-400 via-indigo-300 to-purple-400 drop-shadow-[0_2px_8px_rgba(0,0,0,0.6)]\"\r\n : \"text-transparent bg-clip-text bg-gradient-to-r from-blue-100 via-indigo-50 to-purple-100 drop-shadow-[0_2px_6px_rgba(0,0,0,0.4)]\"\r\n }`}\r\n >\r\n {name}\r\n </h1>\r\n\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 transition-colors ${isDarkMode\r\n ? \"prose-invert text-gray-200\"\r\n : \"text-gray-100\"\r\n } text-lg sm:text-xl md:text-2xl font-light tracking-wide`}\r\n >\r\n </div>\r\n <div\r\n className={`inline-flex items-center px-4 py-2 rounded-full border text-sm font-medium ${isDarkMode\r\n ? \"bg-gray-800/70 border-gray-600 text-gray-300\"\r\n : \"bg-white/20 border-white/40 text-white\"\r\n }`}\r\n >\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\r\n className={`inline-block px-4 py-2 rounded-full text-sm font-semibold mb-4 ${isDarkMode\r\n ? \"bg-blue-900/40 text-blue-300 border border-blue-700\"\r\n : \"bg-blue-100 text-blue-800\"\r\n }`}\r\n >\r\n 📖 {safeT('aboutCompany.story.badge')}\r\n </div>\r\n <h2\r\n className={`text-3xl lg:text-4xl font-bold mb-6 ${isDarkMode ? \"text-white\" : \"text-gray-800\"\r\n }`}\r\n >\r\n {safeT('aboutCompany.story.title')}{\" \"}\r\n <span className=\"block bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent\">\r\n {shortName}\r\n </span>\r\n </h2>\r\n <div\r\n dangerouslySetInnerHTML={{ __html: description }}\r\n className={`prose max-w-none transition-colors ${isDarkMode\r\n ? \"prose-invert text-gray-300\"\r\n : \"text-gray-600\"\r\n }`}\r\n />\r\n </div>\r\n\r\n {/* Vision - Mission - Core Values */}\r\n <div\r\n className={`transition-colors ${isDarkMode ? \"text-gray-300\" : \"text-gray-700\"\r\n }`}\r\n >\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\nconst TimelineSection = ({ data, t, isDarkMode, section }) => {\r\n const timelineData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data) // loại bỏ item null hoặc data null\r\n .map((item) => item.data) || [];\r\n\r\n // Animation state\r\n const [timelineVisible, setTimelineVisible] = useState([]);\r\n const timelineRefs = useRef([]);\r\n const sectionTitle = section?.title || '...';\r\n useEffect(() => {\r\n setTimelineVisible(new Array(timelineData.length).fill(false));\r\n }, [timelineData.length]);\r\n\r\n // Intersection observer để hiện dần item khi scroll\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 newVisible = [...prev];\r\n newVisible[index] = true;\r\n return newVisible;\r\n });\r\n }\r\n observer.unobserve(entry.target);\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 };\r\n }, [timelineData.length]);\r\n\r\n if (!timelineData.length) {\r\n return (\r\n <section className={`py-20 ${isDarkMode ? \"bg-gray-900/50\" : \"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 ${isDarkMode ? \"text-white\" : \"text-gray-900\"}`}>\r\n {t('timeline.noData.title') || 'Chưa có dữ liệu'}\r\n </h3>\r\n <p className={`${isDarkMode ? \"text-gray-300\" : \"text-gray-600\"}`}>\r\n {t('timeline.noData.description') || '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 isDarkMode={isDarkMode}>\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\r\n className={`relative inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 border transition-all duration-300 transform hover:scale-105 shadow-md hover:shadow-lg overflow-hidden ${isDarkMode\r\n ? \"bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 text-emerald-300 border-blue-800\"\r\n : \"bg-white text-emerald-800 border-gray-200\"\r\n }`}\r\n >\r\n 📈 {sectionTitle}\r\n {/* Hiệu ứng shape trong dark mode */}\r\n {isDarkMode && (\r\n <>\r\n <div\r\n className=\"absolute w-12 h-12 bg-white/5 rounded-full\"\r\n style={{ left: \"10%\", top: \"20%\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-10 h-10 bg-white/5 rounded-full\"\r\n style={{ right: \"30%\", bottom: \"10%\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-14 h-14 bg-white/5 rounded-md\"\r\n style={{ left: \"20%\", bottom: \"30%\" }}\r\n ></div>\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 </>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Timeline */}\r\n <div className=\"relative\">\r\n {/* Line ở giữa */}\r\n <div className=\"absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-to-b from-blue-500 to-purple-600 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 ${index % 2 === 0 ? \"flex-row\" : \"flex-row-reverse\"\r\n } ${timelineVisible[index] ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\"\r\n }`}\r\n style={{ transitionDelay: `${index * 200}ms` }}\r\n >\r\n {/* Card */}\r\n <div className=\"flex-1 px-8\">\r\n <div\r\n className={`relative p-5 rounded-xl shadow-lg transition-all duration-300 hover:shadow-xl overflow-hidden ${isDarkMode\r\n ? \"bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 border border-blue-800 hover:border-blue-600\"\r\n : \"bg-gray-50 hover:shadow-2xl\"\r\n }`}\r\n >\r\n {/* Hiệu ứng shape trong Dark Mode */}\r\n {isDarkMode && (\r\n <>\r\n <div\r\n className=\"absolute w-12 h-12 bg-white/5 rounded-full\"\r\n style={{ left: \"10%\", top: \"20%\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-10 h-10 bg-white/5 rounded-full\"\r\n style={{ right: \"30%\", bottom: \"10%\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-14 h-14 bg-white/5 rounded-md\"\r\n style={{ left: \"20%\", bottom: \"30%\" }}\r\n ></div>\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 </>\r\n )}\r\n <div className=\"text-blue-600 font-bold text-xl mb-2\">\r\n {milestone.time}\r\n </div>\r\n <h3\r\n className={`text-lg font-bold mb-2 ${isDarkMode ? \"text-white\" : \"text-gray-900\"\r\n }`}\r\n >\r\n {milestone.title}\r\n </h3>\r\n <p\r\n className={`${isDarkMode ? \"text-gray-300\" : \"text-gray-600\"\r\n }`}\r\n >\r\n {milestone.description}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n {/* Dot */}\r\n <div\r\n className={`w-6 h-6 bg-gradient-to-r from-blue-500 to-purple-600 rounded-full border-4 ${isDarkMode ? \"border-gray-800\" : \"border-white\"\r\n } shadow-[0_0_10px_5px_rgba(59,130,246,0.5)] flex-shrink-0 z-10 animate-pulse`}\r\n ></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\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\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 {isDarkMode && (\r\n <>\r\n <div\r\n className=\"absolute w-12 h-12 bg-white/5 rounded-full\"\r\n style={{ left: \"10%\", top: \"20%\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-10 h-10 bg-white/5 rounded-full\"\r\n style={{ right: \"30%\", bottom: \"10%\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-14 h-14 bg-white/5 rounded-md\"\r\n style={{ left: \"20%\", bottom: \"30%\" }}\r\n ></div>\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 </>\r\n )}\r\n\r\n <div className=\"logo-container w-20 h-14 flex items-center justify-center mb-4 rounded-lg overflow-hidden\">\r\n {logoSrc ? (\r\n <img\r\n src={logoSrc}\r\n alt={partner.name}\r\n className=\"logo-image max-w-full max-h-full object-contain\"\r\n />\r\n ) : (\r\n <div className=\"w-full h-full bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center\">\r\n <span className=\"text-white font-bold text-center text-sm px-1\">\r\n {partner.name}\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n\r\n <h4\r\n className={`font-bold text-center mb-2 ${isDarkMode ? \"text-white\" : \"text-gray-900\"\r\n }`}\r\n >\r\n {partner.name}\r\n </h4>\r\n <p\r\n className={`text-sm text-center mb-2 ${isDarkMode ? \"text-gray-300\" : \"text-gray-600\"\r\n }`}\r\n >\r\n {partner.description}\r\n </p>\r\n\r\n {partner.websiteUrl && (\r\n <div className=\"website-hint\">\r\n <span className=\"text-sm text-blue-600 font-medium\">\r\n {t('partners.viewDetails') || 'Xem chi tiết'} →\r\n </span>\r\n </div>\r\n )}\r\n\r\n <style jsx>{`\r\n .partner-card {\r\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\r\n }\r\n .partner-card:hover {\r\n transform: translateY(-3px);\r\n box-shadow: 0 8px 20px ${isDarkMode ? \"rgba(255,255,255,0.1)\" : \"rgba(0,0,0,0.1)\"};\r\n }\r\n .logo-container {\r\n background: ${isDarkMode\r\n ? \"linear-gradient(135deg, #374151 0%, #1f2937 100%)\"\r\n : \"linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%)\"};\r\n border: 1px solid ${isDarkMode ? \"#4b5563\" : \"#e2e8f0\"};\r\n transition: all 0.3s ease;\r\n }\r\n .partner-card:hover .logo-container {\r\n border-color: #3b82f6;\r\n background: ${isDarkMode\r\n ? \"linear-gradient(135deg, #4b5563 0%, #374151 100%)\"\r\n : \"linear-gradient(135deg, #ffffff 0%, #f8fafc 100%)\"};\r\n }\r\n .logo-image {\r\n filter: ${isDarkMode ? \"grayscale(0.3) opacity(0.8)\" : \"grayscale(0.2) opacity(0.9)\"};\r\n transition: all 0.3s ease;\r\n }\r\n .partner-card:hover .logo-image {\r\n filter: grayscale(0) opacity(1);\r\n transform: scale(1.05);\r\n }\r\n .website-hint {\r\n opacity: 0;\r\n transform: translateY(4px);\r\n transition: all 0.3s ease;\r\n }\r\n .partner-card:hover .website-hint {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n `}</style>\r\n </>\r\n );\r\n\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={`partner-card relative flex flex-col items-center justify-center p-4 rounded-xl shadow-sm transition-all duration-700 ease-out cursor-pointer overflow-hidden\r\n ${isDarkMode\r\n ? \"bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 border border-blue-800 hover:border-blue-500\"\r\n : \"bg-white border border-gray-200 hover:border-blue-300\"\r\n }\r\n ${visible ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\"}`}\r\n style={{ transitionDelay: `${idx * 150}ms`, textDecoration: 'none' }}\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={`partner-card relative flex flex-col items-center justify-center p-4 rounded-xl shadow-sm transition-all duration-700 ease-out overflow-hidden\r\n ${isDarkMode\r\n ? \"bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 border border-blue-800\"\r\n : \"bg-white border border-gray-200\"\r\n }\r\n ${visible ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\"}`}\r\n style={{ transitionDelay: `${idx * 150}ms` }}\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\n// Custom hook for window size\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\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, isDarkMode, imageBaseUrl = \"\",section }) => {\r\n const partnersData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data) // loại bỏ item null hoặc data null\r\n ?.map((item) => item.data) // lấy data hợp lệ\r\n || [];\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 const sectionTitle = section?.title || '...';\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 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\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 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 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 isDarkMode={isDarkMode}>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n <div className=\"text-center mb-12\">\r\n <div\r\n className={`inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 border shadow-sm ${isDarkMode\r\n ? \"bg-blue-900/30 text-blue-300 border-blue-800\"\r\n : \"bg-blue-100 text-blue-800 border-blue-200\"\r\n }`}\r\n >\r\n 🤝 {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n <div ref={partnersRef} className=\"relative overflow-hidden\">\r\n <div\r\n className={`transition-all duration-1000 ease-out ${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 ${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 isDarkMode={isDarkMode}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n\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 ${index === currentPartnerSlide\r\n ? \"bg-blue-500 scale-125\"\r\n : isDarkMode\r\n ? \"bg-gray-600 hover:bg-blue-400\"\r\n : \"bg-gray-300 hover:bg-blue-500\"\r\n }`}\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;","import React, { useEffect, useRef, useState } from \"react\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\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 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) {\r\n setMilestones(res.data || []);\r\n } else {\r\n setMilestones([]);\r\n }\r\n } catch (error) {\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) // bỏ item null hoặc item.data null\r\n ?.map((item) => item.data) // lấy data hợp lệ\r\n || [];\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(\r\n (el) => el === entry.target\r\n );\r\n if (index !== -1) {\r\n setTimelineVisible((prev) => {\r\n const newVisible = [...prev];\r\n newVisible[index] = true;\r\n return newVisible;\r\n });\r\n }\r\n observer.unobserve(entry.target);\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 };\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={isDarkMode ? \"text-white\" : \"text-gray-800\"}>\r\n {t('milestone.status.loadingData')}\r\n </p>\r\n </section>\r\n );\r\n }\r\n\r\n if (!milestones.length) {\r\n return (\r\n <section\r\n className={`py-20 ${isDarkMode ? \"bg-gray-900/50\" : \"bg-white\"}`}\r\n >\r\n <div className=\"max-w-7xl mx-auto px-4 text-center\">\r\n <h3\r\n className={`text-lg font-semibold mb-2 ${isDarkMode ? \"text-white\" : \"text-gray-900\"}`}\r\n >\r\n {t('milestone.status.noData')}\r\n </h3>\r\n <p\r\n className={`${isDarkMode ? \"text-gray-300\" : \"text-gray-600\"}`}\r\n >\r\n {t('milestone.noDataDescription')}\r\n </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 <div className=\"text-center mb-12\">\r\n <div\r\n className={`relative inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 border transition-all duration-300 transform hover:scale-105 shadow-md hover:shadow-lg overflow-hidden ${isDarkMode\r\n ? \"bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 text-emerald-300 border-blue-800\"\r\n : \"bg-white text-emerald-800 border-gray-200\"\r\n }`}\r\n >\r\n 📈 {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n <div className=\"relative\">\r\n <div className=\"absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-to-b from-blue-500 to-purple-600 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 ${index % 2 === 0 ? \"flex-row\" : \"flex-row-reverse\"\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 <div className=\"flex-1 px-8\">\r\n <div\r\n className={`relative p-5 rounded-xl shadow-lg transition-all duration-300 hover:shadow-xl overflow-hidden ${isDarkMode\r\n ? \"bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 border border-blue-800 hover:border-blue-600\"\r\n : \"bg-gray-50 hover:shadow-2xl\"\r\n }`}\r\n >\r\n <div className=\"text-blue-600 font-bold text-xl mb-2\">\r\n {milestone.time}\r\n </div>\r\n <h3\r\n className={`text-lg font-bold mb-2 ${isDarkMode ? \"text-white\" : \"text-gray-900\"}`}\r\n >\r\n {milestone.title}\r\n </h3>\r\n <p\r\n className={`${isDarkMode ? \"text-gray-300\" : \"text-gray-600\"}`}\r\n >\r\n {milestone.description}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div\r\n className={`w-6 h-6 bg-gradient-to-r from-blue-500 to-purple-600 rounded-full border-4 ${isDarkMode ? \"border-gray-800\" : \"border-white\"\r\n } shadow-[0_0_10px_5px_rgba(59,130,246,0.5)] flex-shrink-0 z-10 animate-pulse`}\r\n ></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\nconst TestimonialsSection = ({ data, t, isDarkMode, section }) => {\r\n const [currentIndex, setCurrentIndex] = useState(0);\r\n const sectionTitle = section?.title || '...';\r\n const testimonials =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data) // loại bỏ item null\r\n .map((item) => ({\r\n quote: item.data?.content || \"\",\r\n author: item.data?.customerName || \"\",\r\n position: item.data?.customerTitle || t('testimonials.fallback.defaultPosition'),\r\n company: item.data?.customerCompany || \"\",\r\n })) || [];\r\n\r\n const fallbackTestimonials = [\r\n {\r\n quote: t('testimonials.fallback.testimonial1.quote'),\r\n author: t('testimonials.fallback.testimonial1.author'),\r\n position: t('testimonials.fallback.testimonial1.position'),\r\n company: t('testimonials.fallback.testimonial1.company'),\r\n },\r\n {\r\n quote: t('testimonials.fallback.testimonial2.quote'),\r\n author: t('testimonials.fallback.testimonial2.author'),\r\n position: t('testimonials.fallback.testimonial2.position'),\r\n company: t('testimonials.fallback.testimonial2.company'),\r\n },\r\n {\r\n quote: t('testimonials.fallback.testimonial3.quote'),\r\n author: t('testimonials.fallback.testimonial3.author'),\r\n position: t('testimonials.fallback.testimonial3.position'),\r\n company: t('testimonials.fallback.testimonial3.company'),\r\n },\r\n ];\r\n\r\n const displayTestimonials =\r\n testimonials.length > 0 ? testimonials : fallbackTestimonials;\r\n\r\n useEffect(() => {\r\n if (displayTestimonials.length > 1) {\r\n const interval = setInterval(() => {\r\n setCurrentIndex((prev) => (prev + 1) % displayTestimonials.length);\r\n }, 5000);\r\n return () => clearInterval(interval);\r\n }\r\n }, [displayTestimonials.length]);\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={`inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 ${isDarkMode\r\n ? \"bg-indigo-900/50 text-indigo-300 border border-indigo-800\"\r\n : \"bg-indigo-100 text-indigo-800\"\r\n }`}\r\n >\r\n 💬 {sectionTitle}\r\n </div>\r\n\r\n <div className=\"relative\">\r\n <div\r\n key={currentIndex}\r\n className={`p-6 rounded-2xl transition-all duration-500 transform ${isDarkMode\r\n ? \"bg-gray-800/80 backdrop-blur-sm border border-gray-700\"\r\n : \"bg-white\"\r\n }`}\r\n >\r\n <blockquote\r\n className={`text-lg lg:text-xl italic mb-6 animate-fadeIn transition-colors duration-200 ${isDarkMode ? \"text-gray-300\" : \"text-gray-700\"\r\n }`}\r\n >\r\n \"{displayTestimonials[currentIndex].quote}\"\r\n </blockquote>\r\n\r\n <div className=\"flex items-center justify-center space-x-4 animate-fadeIn\">\r\n <div className=\"text-3xl\">👤</div>\r\n <div className=\"text-left\">\r\n <div\r\n className={`font-bold text-base transition-colors duration-200 ${isDarkMode ? \"text-white\" : \"text-gray-900\"\r\n }`}\r\n >\r\n {displayTestimonials[currentIndex].author}\r\n </div>\r\n <div className=\"text-blue-600 font-medium text-sm\">\r\n {displayTestimonials[currentIndex].position}\r\n </div>\r\n {displayTestimonials[currentIndex].company && (\r\n <div\r\n className={`text-xs transition-colors duration-200 ${isDarkMode ? \"text-gray-400\" : \"text-gray-600\"\r\n }`}\r\n >\r\n {displayTestimonials[currentIndex].company}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {displayTestimonials.length > 1 && (\r\n <div className=\"flex justify-center space-x-2 mt-4\">\r\n {displayTestimonials.map((_, index) => (\r\n <button\r\n key={index}\r\n onClick={() => setCurrentIndex(index)}\r\n className={`w-2.5 h-2.5 rounded-full transition-all duration-300 ${index === currentIndex\r\n ? \"bg-blue-600\"\r\n : isDarkMode\r\n ? \"bg-gray-600 hover:bg-gray-500\"\r\n : \"bg-gray-300 hover:bg-gray-400\"\r\n }`}\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.logo);\r\n\r\n return (\r\n <a\r\n href={partner.website || partner.url || '#'}\r\n target={partner.website || partner.url ? '_blank' : '_self'}\r\n rel={partner.website || partner.url ? 'noopener noreferrer' : ''}\r\n className={`group relative overflow-hidden rounded-2xl transition-all duration-500 hover:-translate-y-2 hover:scale-105 ${\r\n isDarkMode\r\n ? \"bg-gradient-to-br from-gray-800 to-gray-900 border border-gray-700 hover:border-blue-500/50\"\r\n : \"bg-gradient-to-br from-white to-gray-50 border border-gray-200 hover:border-blue-400/50\"\r\n } shadow-lg hover:shadow-2xl`}\r\n style={{\r\n animationDelay: `${idx * 0.1}s`,\r\n textDecoration: 'none'\r\n }}\r\n >\r\n <div className=\"absolute inset-0 bg-gradient-to-br from-blue-500/0 via-purple-500/0 to-pink-500/0 group-hover:from-blue-500/10 group-hover:via-purple-500/10 group-hover:to-pink-500/10 transition-all duration-700\"></div>\r\n\r\n <div className=\"relative p-6 flex flex-col items-center justify-center min-h-[180px]\">\r\n {logoUrl ? (\r\n <div className=\"w-full h-24 flex items-center justify-center mb-4\">\r\n <img\r\n src={logoUrl}\r\n alt={partner.name || t(\"partners.logoAlt\") || \"Partner logo\"}\r\n className=\"max-w-full max-h-full object-contain filter grayscale group-hover:grayscale-0 transition-all duration-500 group-hover:scale-110\"\r\n loading=\"lazy\"\r\n />\r\n </div>\r\n ) : (\r\n <div\r\n className={`w-20 h-20 rounded-full flex items-center justify-center mb-4 ${\r\n isDarkMode ? \"bg-gray-700\" : \"bg-gray-200\"\r\n }`}\r\n >\r\n <span className=\"text-3xl\">🤝</span>\r\n </div>\r\n )}\r\n\r\n <h3\r\n className={`text-base font-bold text-center line-clamp-2 ${\r\n isDarkMode ? \"text-white\" : \"text-gray-800\"\r\n } group-hover:text-transparent group-hover:bg-gradient-to-r group-hover:from-blue-500 group-hover:to-purple-500 group-hover:bg-clip-text transition-all duration-300`}\r\n >\r\n {partner.name || t(\"partners.unnamed\") || \"Partner\"}\r\n </h3>\r\n\r\n {partner.description && (\r\n <p\r\n className={`text-xs text-center mt-2 line-clamp-2 ${\r\n isDarkMode ? \"text-gray-400\" : \"text-gray-600\"\r\n }`}\r\n >\r\n {partner.description}\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div className=\"absolute top-0 right-0 w-20 h-20 bg-gradient-to-br from-blue-500/20 to-purple-500/20 rounded-bl-full opacity-0 group-hover:opacity-100 transition-opacity duration-500\"></div>\r\n <div className=\"absolute bottom-0 left-0 w-20 h-20 bg-gradient-to-tr from-purple-500/20 to-pink-500/20 rounded-tr-full opacity-0 group-hover:opacity-100 transition-opacity duration-500\"></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\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, isDarkMode, 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 const sectionTitle = section?.title || '...';\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\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 // Intersection observer (fade-in effect)\r\n useEffect(() => {\r\n const fallbackTimer = setTimeout(() => {\r\n setPartnersVisible(true);\r\n }, 500);\r\n\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\r\n if (partnersRef.current) {\r\n observer.observe(partnersRef.current);\r\n } else {\r\n clearTimeout(fallbackTimer);\r\n setPartnersVisible(true);\r\n }\r\n\r\n return () => {\r\n clearTimeout(fallbackTimer);\r\n if (partnersRef.current) {\r\n observer.unobserve(partnersRef.current);\r\n }\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\">\r\n <p className={isDarkMode ? \"text-white\" : \"text-gray-800\"}>\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\">\r\n <p className=\"text-red-500\">{t(\"partners.error\") || error}</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 isDarkMode={isDarkMode}>\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\r\n className={`inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 border shadow-sm ${\r\n isDarkMode\r\n ? \"bg-blue-900/30 text-blue-300 border-blue-800\"\r\n : \"bg-blue-100 text-blue-800 border-blue-200\"\r\n }`}\r\n >\r\n 🤝 {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-8\">\r\n <div className=\"min-h-[220px]\">\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={{ zIndex: slideIndex === currentPartnerSlide ? 10 : 1 }}\r\n >\r\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-6 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 isDarkMode={isDarkMode}\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-2\" style={{ zIndex: 50 }}>\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-blue-500 scale-125 shadow-lg\"\r\n : isDarkMode\r\n ? \"bg-gray-600 hover:bg-blue-400\"\r\n : \"bg-gray-300 hover:bg-blue-500\"\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;\r\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\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: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.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 = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.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 = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.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 [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.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: \"M21.801 10A10 10 0 1 1 17 3.335\", key: \"yps3ct\" }],\n [\"path\", { d: \"m9 11 3 3L22 4\", key: \"1pflzl\" }]\n];\nconst CircleCheckBig = createLucideIcon(\"circle-check-big\", __iconNode);\n\nexport { __iconNode, CircleCheckBig as default };\n//# sourceMappingURL=circle-check-big.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 6v6l4 2\", key: \"mmk7yg\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }]\n];\nconst Clock = createLucideIcon(\"clock\", __iconNode);\n\nexport { __iconNode, Clock as default };\n//# sourceMappingURL=clock.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 = [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]];\nconst LoaderCircle = createLucideIcon(\"loader-circle\", __iconNode);\n\nexport { __iconNode, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.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: \"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\", key: \"132q7q\" }],\n [\"rect\", { x: \"2\", y: \"4\", width: \"20\", height: \"16\", rx: \"2\", key: \"izxlao\" }]\n];\nconst Mail = createLucideIcon(\"mail\", __iconNode);\n\nexport { __iconNode, Mail as default };\n//# sourceMappingURL=mail.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: \"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384\",\n key: \"9njp5v\"\n }\n ]\n];\nconst Phone = createLucideIcon(\"phone\", __iconNode);\n\nexport { __iconNode, Phone as default };\n//# sourceMappingURL=phone.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: \"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\",\n key: \"1ffxy3\"\n }\n ],\n [\"path\", { d: \"m21.854 2.147-10.94 10.939\", key: \"12cjpa\" }]\n];\nconst Send = createLucideIcon(\"send\", __iconNode);\n\nexport { __iconNode, Send as default };\n//# sourceMappingURL=send.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: \"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\", key: \"975kel\" }],\n [\"circle\", { cx: \"12\", cy: \"7\", r: \"4\", key: \"17ys0d\" }]\n];\nconst User = createLucideIcon(\"user\", __iconNode);\n\nexport { __iconNode, User as default };\n//# sourceMappingURL=user.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 } from 'react';\r\nimport { Send, Phone, Mail, MessageSquare, CheckCircle, AlertCircle, Loader2, User, Building, MessageCircle } from 'lucide-react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\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 // Safe state update\r\n setFormData(prev => ({\r\n ...prev,\r\n [name]: value || ''\r\n }));\r\n\r\n // Clear error when user starts typing\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 // Validate all required fields\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 // Clean and prepare data for API\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 // Call API safely\r\n let result;\r\n if (consultationRequestService?.create) {\r\n result = await consultationRequestService.create(cleanFormData);\r\n } else {\r\n // Fallback if service not available\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 // Reset form\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 = `w-full px-4 py-3 rounded-xl border transition-all duration-200 focus:ring-2 focus:ring-indigo-500/20 focus:outline-none ${\r\n isDarkMode\r\n ? 'bg-gray-700 border-gray-600 text-white placeholder-gray-400 focus:border-indigo-500'\r\n : 'bg-white border-slate-300 text-slate-900 placeholder-slate-500 focus:border-indigo-500'\r\n }`;\r\n\r\n const labelClasses = `block text-sm font-semibold mb-2 ${isDarkMode ? 'text-gray-300' : 'text-slate-700'}`;\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={`rounded-2xl p-8 shadow-lg border transition-colors duration-200 ${\r\n isDarkMode ? 'bg-gray-800 border-gray-700' : 'bg-white border-slate-200'\r\n }`}>\r\n <div className=\"flex items-center mb-6\">\r\n <div className=\"w-10 h-10 rounded-lg bg-gradient-to-r from-indigo-500 to-purple-600 flex items-center justify-center mr-4\">\r\n <Send size={20} className=\"text-white\" />\r\n </div>\r\n <div>\r\n <h2 className={`text-2xl font-bold transition-colors duration-200 ${isDarkMode ? 'text-white' : 'text-slate-800'}`}>\r\n {t('form.title') || 'Gửi yêu cầu tư vấn'}\r\n </h2>\r\n <p className={`text-sm transition-colors duration-200 ${isDarkMode ? 'text-gray-400' : 'text-slate-600'}`}>\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 ? isDarkMode\r\n ? 'bg-emerald-900/50 border-emerald-700 text-emerald-300'\r\n : 'bg-emerald-50 border-emerald-200 text-emerald-800'\r\n : isDarkMode\r\n ? 'bg-red-900/50 border-red-700 text-red-300'\r\n : 'bg-red-50 border-red-200 text-red-800'\r\n }`}>\r\n <div className=\"flex items-center\">\r\n {submitStatus === 'success' ? (\r\n <CheckCircle size={20} className=\"mr-2 flex-shrink-0\" />\r\n ) : (\r\n <AlertCircle size={20} className=\"mr-2 flex-shrink-0\" />\r\n )}\r\n <p className=\"text-sm 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={labelClasses}>\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} ${formErrors.fullName ? 'border-red-500' : ''}`}\r\n placeholder={t('contact.form.namePlaceholder')}\r\n required\r\n />\r\n {formErrors.fullName && (\r\n <p className=\"mt-1 text-sm text-red-500 flex items-center\">\r\n <AlertCircle size={14} className=\"mr-1\" />\r\n {formErrors.fullName}\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div>\r\n <label className={labelClasses}>\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} ${formErrors.workEmail ? 'border-red-500' : ''}`}\r\n placeholder=\"email@company.com\"\r\n required\r\n />\r\n {formErrors.workEmail && (\r\n <p className=\"mt-1 text-sm text-red-500 flex items-center\">\r\n <AlertCircle size={14} className=\"mr-1\" />\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={labelClasses}>\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} ${formErrors.phoneNumber ? 'border-red-500' : ''}`}\r\n placeholder=\"0901 234 567\"\r\n />\r\n {formErrors.phoneNumber && (\r\n <p className=\"mt-1 text-sm text-red-500 flex items-center\">\r\n <AlertCircle size={14} className=\"mr-1\" />\r\n {formErrors.phoneNumber}\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div>\r\n <label className={labelClasses}>\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} ${formErrors.companyName ? 'border-red-500' : ''}`}\r\n placeholder={t('contact.form.fields.company')}\r\n />\r\n {formErrors.companyName && (\r\n <p className=\"mt-1 text-sm text-red-500 flex items-center\">\r\n <AlertCircle size={14} className=\"mr-1\" />\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={labelClasses}>\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} ${formErrors.jobTitle ? 'border-red-500' : ''}`}\r\n placeholder={t('contact.form.positionPlaceholder')}\r\n />\r\n {formErrors.jobTitle && (\r\n <p className=\"mt-1 text-sm text-red-500 flex items-center\">\r\n <AlertCircle size={14} className=\"mr-1\" />\r\n {formErrors.jobTitle}\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div>\r\n <label className={labelClasses}>\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 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={labelClasses}>\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 placeholder={t('form.fields.expectedBudget')}\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className={labelClasses}>\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 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={labelClasses}>\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} ${formErrors.requestTitle ? 'border-red-500' : ''}`}\r\n placeholder={t('contact.form.placeholders.subject')}\r\n required\r\n />\r\n {formErrors.requestTitle && (\r\n <p className=\"mt-1 text-sm text-red-500 flex items-center\">\r\n <AlertCircle size={14} className=\"mr-1\" />\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={labelClasses}>\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 ${formErrors.requestDescription ? 'border-red-500' : ''}`}\r\n placeholder={t('contact.form.placeholders.message')}\r\n required\r\n />\r\n {formErrors.requestDescription && (\r\n <p className=\"mt-1 text-sm text-red-500 flex items-center\">\r\n <AlertCircle size={14} className=\"mr-1\" />\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 bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-4 px-6 rounded-xl hover:from-indigo-700 hover:to-purple-700 transition-all transform hover:scale-105 disabled:opacity-50 disabled:cursor-not-allowed disabled:transform-none flex items-center justify-center font-semibold shadow-lg\"\r\n >\r\n {isSubmitting ? (\r\n <>\r\n <Loader2 className=\"animate-spin h-5 w-5 mr-2\" />\r\n {t('form.submitting') || 'Đang gửi...'}\r\n </>\r\n ) : (\r\n <>\r\n <Send size={20} className=\"mr-2\" />\r\n {t('form.submit') || 'Gửi yêu cầu'}\r\n </>\r\n )}\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`px-6 py-4 rounded-xl border-2 font-semibold transition-all hover:scale-105 ${\r\n isDarkMode\r\n ? 'border-gray-600 text-gray-300 hover:bg-gray-700'\r\n : 'border-slate-300 text-slate-700 hover:bg-slate-50'\r\n }`}\r\n >\r\n <Phone size={20} className=\"inline mr-2\" />\r\n {t('form.callNow') || 'Gọi ngay'}\r\n </button>\r\n </div>\r\n\r\n {/* Privacy Notice */}\r\n <div className={`flex items-center space-x-2 text-sm transition-colors duration-200 ${isDarkMode ? 'text-gray-400' : 'text-slate-600'}`}>\r\n <CheckCircle size={16} className=\"text-emerald-500\" />\r\n <span>{t('form.privacy') || 'Cam kết bảo mật thông tin và phản hồi trong 24 giờ'}</span>\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 { Phone, Mail, MapPin, Clock, User, Send, MessageSquare, CheckCircle, AlertCircle, Loader2, Building, MessageCircle } from 'lucide-react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n// Enhanced ContactInfoSection Component\r\nconst ContactInfoSection = ({ data, t, isDarkMode, section }) => {\r\n const contactData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data) // loại bỏ item null hoặc data null\r\n ?.map((item) => item.data) // chỉ lấy data hợp lệ\r\n || [];\r\n const sectionTitle = section?.title || '...';\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 <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 ${isDarkMode ? 'bg-indigo-900/50 text-indigo-300' : 'bg-indigo-50 text-indigo-700'\r\n }`}>\r\n <User size={22} className=\"mr-2\" />\r\n {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n <div className=\"grid md:grid-cols-2 lg:grid-cols-3 gap-8\">\r\n {contactData.map((contact, index) => (\r\n <div\r\n key={contact.id || index}\r\n className={`rounded-2xl p-8 shadow-lg transition-all duration-300 hover:shadow-xl hover:-translate-y-1 border ${isDarkMode ? 'bg-gray-800 border-gray-700' : 'bg-white border-slate-200'\r\n }`}\r\n >\r\n <div className=\"text-center mb-6\">\r\n <div className=\"w-20 h-20 rounded-full mx-auto mb-4 flex items-center justify-center text-2xl font-bold text-white bg-gradient-to-br from-indigo-500 to-purple-600\">\r\n {contact.name?.charAt(0) || 'A'}\r\n </div>\r\n\r\n <h3 className={`text-xl font-bold mb-2 ${isDarkMode ? 'text-white' : 'text-slate-800'}`}>\r\n {contact.name}\r\n </h3>\r\n\r\n <span className={`inline-block px-3 py-1 rounded-full text-sm font-semibold ${isDarkMode ? 'bg-indigo-900/50 text-indigo-300' : 'bg-indigo-50 text-indigo-700'\r\n }`}>\r\n {contact.position}\r\n </span>\r\n </div>\r\n\r\n <div className=\"space-y-4\">\r\n <a\r\n href={`tel:${contact.phone}`}\r\n className={`flex items-center p-3 rounded-xl transition-all hover:scale-105 ${isDarkMode ? 'bg-gray-700 hover:bg-gray-600' : 'bg-slate-50 hover:bg-slate-100'\r\n } group`}\r\n >\r\n <div className={`w-10 h-10 rounded-lg flex items-center justify-center mr-3 group-hover:scale-110 transition-transform ${isDarkMode ? 'bg-green-900/50 text-green-400' : 'bg-green-50 text-green-600'\r\n }`}>\r\n <Phone size={18} />\r\n </div>\r\n <div className=\"flex-1\">\r\n <p className={`text-sm font-medium ${isDarkMode ? 'text-gray-400' : 'text-slate-500'}`}>\r\n {t('contact.info.phone') || 'Điện thoại'}\r\n </p>\r\n <p className={`font-semibold ${isDarkMode ? 'text-white' : 'text-slate-800'}`}>\r\n {contact.phone}\r\n </p>\r\n </div>\r\n </a>\r\n\r\n <a\r\n href={`mailto:${contact.email}`}\r\n className={`flex items-center p-3 rounded-xl transition-all hover:scale-105 ${isDarkMode ? 'bg-gray-700 hover:bg-gray-600' : 'bg-slate-50 hover:bg-slate-100'\r\n } group`}\r\n >\r\n <div className={`w-10 h-10 rounded-lg flex items-center justify-center mr-3 group-hover:scale-110 transition-transform ${isDarkMode ? 'bg-indigo-900/50 text-indigo-400' : 'bg-indigo-50 text-indigo-600'\r\n }`}>\r\n <Mail size={18} />\r\n </div>\r\n <div className=\"flex-1\">\r\n <p className={`text-sm font-medium ${isDarkMode ? 'text-gray-400' : 'text-slate-500'}`}>\r\n Email\r\n </p>\r\n <p className={`font-semibold ${isDarkMode ? 'text-white' : 'text-slate-800'}`}>\r\n {contact.email}\r\n </p>\r\n </div>\r\n </a>\r\n\r\n {contact.workingHours && (\r\n <div className={`flex items-center p-3 rounded-xl ${isDarkMode ? 'bg-gray-700' : 'bg-slate-50'\r\n }`}>\r\n <div className={`w-10 h-10 rounded-lg flex items-center justify-center mr-3 ${isDarkMode ? 'bg-purple-900/50 text-purple-400' : 'bg-purple-50 text-purple-600'\r\n }`}>\r\n <Clock size={18} />\r\n </div>\r\n <div className=\"flex-1\">\r\n <p className={`text-sm font-medium ${isDarkMode ? 'text-gray-400' : 'text-slate-500'}`}>\r\n {t('contact.info.workingHours') || 'Giờ làm việc'}\r\n </p>\r\n <p className={`font-semibold ${isDarkMode ? 'text-white' : 'text-slate-800'}`}>\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\r\n <div className=\"mt-6\">\r\n <button className=\"w-full py-3 px-4 rounded-xl font-semibold transition-all transform hover:scale-105 bg-gradient-to-r from-indigo-600 to-purple-600 hover:from-indigo-700 hover:to-purple-700 text-white shadow-lg\">\r\n {t('contact.buttons.contactNow') || 'Liên hệ ngay'}\r\n </button>\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\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 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\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 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-500' : 'border-gray-300 border-t-blue-500'} rounded-full animate-spin`}></div>\r\n <p className={`mt-4 ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\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 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={`${isDarkMode ? 'text-red-400' : 'text-red-500'} text-base mb-2`}>\r\n ⚠️ {t('contactList.error.title') || 'Lỗi tải dữ liệu'}\r\n </div>\r\n <p className={`${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>{error}</p>\r\n </div>\r\n );\r\n }\r\n\r\n if (!contacts || contacts.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-5\">📞</div>\r\n <h3 className={`${isDarkMode ? 'text-gray-400' : 'text-gray-600'} 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={`${isDarkMode ? 'text-gray-500' : 'text-gray-500'}`}>\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 return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-6xl mx-auto px-5\">\r\n <div className=\"text-center mb-16\">\r\n <h2 className={`text-4xl font-bold ${isDarkMode ? 'text-white' : 'text-gray-900'} mb-4`}>\r\n {sectionTitle}\r\n </h2>\r\n </div>\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8 mt-10\">\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 const [isHovered, setIsHovered] = useState(false);\r\n\r\n return (\r\n <div\r\n className={`\r\n ${isDarkMode ? 'bg-gray-800 border-gray-700' : 'bg-white border-gray-200'} rounded-2xl p-8 border cursor-pointer transition-all duration-300\r\n ${isHovered\r\n ? `shadow-xl ${isDarkMode ? 'shadow-gray-900/40' : 'shadow-gray-500/20'} -translate-y-2`\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 className=\"flex items-center mb-6\">\r\n <div className={`w-15 h-15 rounded-full ${isDarkMode ? 'bg-blue-600' : 'bg-blue-500'} flex items-center justify-center text-white text-2xl font-bold mr-4`}>\r\n {contact.name?.charAt(0)?.toUpperCase() || '?'}\r\n </div>\r\n <div>\r\n <h3 className={`text-xl font-semibold ${isDarkMode ? 'text-white' : 'text-gray-900'} mb-1`}>\r\n {contact.name || t('contactList.card.noName') || 'Không có tên'}\r\n </h3>\r\n <p className={`text-base ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n {contact.position || t('contactList.card.noPosition') || 'Chưa có chức vụ'}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <ContactInfo\r\n icon=\"📧\"\r\n label={t('contactList.card.email') || 'Email'}\r\n value={contact.email}\r\n href={`mailto:${contact.email}`}\r\n />\r\n <ContactInfo\r\n icon=\"📱\"\r\n label={t('contactList.card.phone') || 'Điện thoại'}\r\n value={contact.phone}\r\n href={`tel:${contact.phone}`}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst ContactInfo = ({ icon, label, value, href,isDarkMode }) => {\r\n\r\n if (!value) return null;\r\n\r\n const content = (\r\n <div className={`flex items-center py-3 border-b ${isDarkMode ? 'border-gray-600' : 'border-gray-100'} last:border-b-0`}>\r\n <span className=\"text-lg mr-3 w-6 text-center\">\r\n {icon}\r\n </span>\r\n <div className=\"flex-1\">\r\n <div className={`text-sm ${isDarkMode ? 'text-gray-400' : 'text-gray-600'} mb-0.5`}>\r\n {label}\r\n </div>\r\n <div className={`text-base font-medium ${href\r\n ? `${isDarkMode ? 'text-blue-400 hover:text-blue-300' : 'text-blue-500 hover:text-blue-600'}`\r\n : `${isDarkMode ? 'text-white' : 'text-gray-900'}`\r\n } transition-colors duration-200`}>\r\n {value}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n\r\n if (href) {\r\n return (\r\n <a href={href} className={`no-underline text-inherit block ${isDarkMode ? 'hover:bg-gray-700/50' : 'hover:bg-gray-50'} rounded-lg -mx-2 px-2 transition-colors duration-200`}>\r\n {content}\r\n </a>\r\n );\r\n }\r\n\r\n return <div className=\"-mx-2 px-2\">{content}</div>;\r\n};\r\n\r\nexport default ContactListAutoSection;","import React, { useState, useEffect } from \"react\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\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={`inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 ${isDarkMode\r\n ? \"bg-indigo-900/50 text-indigo-300 border border-indigo-800\"\r\n : \"bg-indigo-100 text-indigo-800\"\r\n }`}\r\n >\r\n 💬 {sectionTitle}\r\n </div>\r\n\r\n <div className=\"relative\">\r\n <div\r\n key={currentIndex}\r\n className={`p-6 rounded-2xl transition-all duration-500 transform ${isDarkMode\r\n ? \"bg-gray-800/80 backdrop-blur-sm border border-gray-700\"\r\n : \"bg-white shadow-lg\"\r\n }`}\r\n >\r\n <blockquote\r\n className={`text-lg lg:text-xl italic mb-6 animate-fadeIn transition-colors duration-200 leading-relaxed ${isDarkMode ? \"text-gray-300\" : \"text-gray-700\"\r\n }`}\r\n >\r\n \"{currentFeedback.content}\"\r\n </blockquote>\r\n\r\n <div className=\"flex items-center justify-center space-x-4 animate-fadeIn\">\r\n <div className=\"text-3xl\">👤</div>\r\n <div className=\"text-left\">\r\n <div\r\n className={`font-bold text-base transition-colors duration-200 ${isDarkMode ? \"text-white\" : \"text-gray-900\"\r\n }`}\r\n >\r\n {currentFeedback.customerName}\r\n </div>\r\n <div className=\"text-blue-600 font-medium text-sm\">\r\n {currentFeedback.customerTitle}\r\n </div>\r\n {currentFeedback.customerCompany && (\r\n <div\r\n className={`text-xs transition-colors duration-200 ${isDarkMode ? \"text-gray-400\" : \"text-gray-600\"\r\n }`}\r\n >\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 className={`w-2.5 h-2.5 rounded-full transition-all duration-300 ${index === currentIndex\r\n ? \"bg-blue-600\"\r\n : isDarkMode\r\n ? \"bg-gray-600 hover:bg-gray-500\"\r\n : \"bg-gray-300 hover:bg-gray-400\"\r\n }`}\r\n aria-label={t(\"customerFeedback.switchToFeedback\", { number: index + 1 }) || `Chuyển đến phản hồi ${index + 1}`}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\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\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 style={{ maxWidth: '1200px', margin: '0 auto' }}>\r\n {title && (\r\n <h2 style={{\r\n fontSize: '36px',\r\n fontWeight: '700',\r\n color: isDarkMode ? '#ffffff' : '#000000',\r\n marginBottom: '16px',\r\n lineHeight: '1.2',\r\n textAlign: 'left',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\r\n }}>\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 style={{\r\n fontSize: '16px',\r\n lineHeight: '1.6',\r\n color: isDarkMode ? '#9ca3af' : '#6b7280',\r\n textAlign: 'left',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\r\n fontWeight: '400',\r\n marginBottom: index < descriptions.length - 1 ? '16px' : '0',\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\nconst TextSection = ({ data, isDarkMode }) => {\r\n const textItems = data?.sectionDataBindingItems || [];\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div style={{ maxWidth: '800px', margin: '0 auto' }}>\r\n {textItems.map((item, index) => (\r\n <div\r\n key={item.id || index}\r\n style={{\r\n padding: '0',\r\n marginBottom: '20px',\r\n fontSize: '28px',\r\n fontWeight: '700',\r\n lineHeight: '1.3',\r\n color: isDarkMode ? '#f9fafb' : '#111827',\r\n textAlign: 'left',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\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 TextSection;","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 // 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 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 getColorClasses = (index) => {\r\n const isCyan = index % 2 === 0;\r\n if (isCyan) {\r\n return {\r\n border: 'border-cyan-400/40',\r\n bg: 'bg-gradient-to-r from-blue-900/90 to-cyan-900/90',\r\n glow: 'shadow-cyan-500/20',\r\n hoverGlow: 'hover:shadow-cyan-400/50',\r\n line: '#22d3ee',\r\n iconBg: 'bg-cyan-500/20'\r\n };\r\n }\r\n return {\r\n border: 'border-purple-400/40',\r\n bg: 'bg-gradient-to-r from-purple-900/90 to-pink-900/90',\r\n glow: 'shadow-purple-500/20',\r\n hoverGlow: 'hover:shadow-purple-400/50',\r\n line: '#c084fc',\r\n iconBg: 'bg-purple-500/20'\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 ${isDarkMode ? 'bg-gradient-to-br from-slate-900 via-blue-950 to-purple-950' : 'bg-gradient-to-br from-blue-50 via-indigo-50 to-purple-50'} p-4 relative overflow-hidden`}>\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 ${isDarkMode ? 'bg-blue-400' : 'bg-blue-600'} rounded-full opacity-20`}\r\n style={{\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 ${isDarkMode ? 'bg-gradient-to-br from-blue-900/90 via-blue-700/90 to-cyan-600/90' : 'bg-gradient-to-br from-blue-600 via-indigo-600 to-cyan-500'} backdrop-blur-md rounded-2xl border-2 ${isDarkMode ? 'border-cyan-400/40' : 'border-white/40'} p-6 shadow-2xl text-center`}>\r\n <h2 className=\"text-2xl font-bold text-white mb-1 tracking-wide\">{diagramName}</h2>\r\n <p className=\"text-lg text-white/90\">{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 = getColorClasses(index);\r\n \r\n return (\r\n <a\r\n key={module.id}\r\n href={module.url || '#'}\r\n className={`block ${colors.bg} backdrop-blur-md rounded-2xl border-2 ${colors.border} p-4 flex items-center gap-3 shadow-lg active:scale-95 transition-all duration-200`}\r\n style={{\r\n animation: `slideUp 0.5s ease-out ${index * 0.1}s both`\r\n }}\r\n >\r\n <div className={`flex-shrink-0 ${colors.iconBg} p-3 rounded-xl ${colors.border} border`}>\r\n <Icon className=\"w-6 h-6 text-white\" strokeWidth={2} />\r\n </div>\r\n <div className=\"flex-1\">\r\n <span className=\"block text-white font-semibold text-sm tracking-wide mb-1\">\r\n {module.name}\r\n </span>\r\n {module.description && (\r\n <span className=\"block text-white/70 text-xs\">\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={`w-full ${isDarkMode ? 'bg-gradient-to-br from-slate-900 via-blue-950 to-purple-950' : 'bg-gradient-to-br from-blue-50 via-indigo-50 to-purple-50'} py-12 px-4 sm:px-8 relative overflow-hidden transition-colors duration-300`}>\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 ${isDarkMode ? 'bg-blue-400' : 'bg-blue-600'} rounded-full ${isDarkMode ? 'opacity-20' : 'opacity-10'}`}\r\n style={{\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 className={`absolute inset-0 ${isDarkMode ? 'opacity-10' : 'opacity-5'}`}>\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 d=\"M 40 0 L 0 0 0 40\" fill=\"none\" stroke={isDarkMode ? \"cyan\" : \"blue\"} strokeWidth=\"0.5\"/>\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 ${isDarkMode ? 'opacity-30' : 'opacity-20'}`}>\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=\"#22d3ee\" opacity=\"0.6\" className=\"animate-pulse\" />\r\n <circle cx=\"35%\" cy=\"40%\" r=\"3\" fill=\"#c084fc\" opacity=\"0.6\" className=\"animate-pulse\" style={{ animationDelay: '0.5s' }} />\r\n <circle cx=\"65%\" cy=\"60%\" r=\"3\" fill=\"#22d3ee\" opacity=\"0.6\" className=\"animate-pulse\" style={{ animationDelay: '1s' }} />\r\n <circle cx=\"85%\" cy=\"80%\" r=\"3\" fill=\"#c084fc\" 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: '#22d3ee', stopOpacity: 0 }} />\r\n <stop offset=\"50%\" style={{ stopColor: '#22d3ee', stopOpacity: 1 }} />\r\n <stop offset=\"100%\" style={{ stopColor: '#22d3ee', 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: '#c084fc', stopOpacity: 0 }} />\r\n <stop offset=\"50%\" style={{ stopColor: '#c084fc', stopOpacity: 1 }} />\r\n <stop offset=\"100%\" style={{ stopColor: '#c084fc', 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-[700px] flex items-center justify-center transition-transform duration-300\">\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 className=\"absolute inset-0 rounded-full border-2 border-cyan-500/30 animate-pulse-ring\"></div>\r\n <div className=\"absolute inset-4 rounded-full border-2 border-purple-500/30 animate-pulse-ring\" style={{ animationDelay: '0.5s' }}></div>\r\n </div>\r\n\r\n <div className=\"relative animate-float\">\r\n <div className={`w-64 h-64 rounded-full border-8 ${isDarkMode ? 'border-slate-600/50 bg-gradient-to-br from-slate-800/50 to-slate-900/50' : 'border-gray-300/50 bg-gradient-to-br from-white/50 to-gray-100/50'} flex items-center justify-center backdrop-blur-sm shadow-2xl`}>\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 bg-cyan-400 rounded-full shadow-lg shadow-cyan-400/50\"\r\n style={{\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 className={`w-52 h-52 rounded-full ${isDarkMode ? 'bg-gradient-to-br from-blue-900/90 via-blue-700/90 to-cyan-600/90 border-cyan-400/40' : 'bg-gradient-to-br from-blue-600 via-indigo-600 to-cyan-500 border-white/40'} flex items-center justify-center shadow-2xl relative overflow-hidden border-2 backdrop-blur-md`}>\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-2xl font-bold text-white mb-2 tracking-wide\">{diagramName}</h2>\r\n <p className=\"text-sm text-white/90\">{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 ${isDarkMode ? 'bg-slate-400 border-slate-600' : 'bg-gray-400 border-gray-600'} rounded-full border-2 shadow-lg animate-pulse`}\r\n style={{\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 = getColorClasses(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 = getColorClasses(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 className={`\r\n ${colors.bg} backdrop-blur-md rounded-full \r\n border-2 ${colors.border} ${colors.glow}\r\n px-5 py-3 flex items-center gap-3\r\n shadow-xl ${colors.hoverGlow}\r\n transition-all duration-300\r\n group-hover:scale-110 group-hover:-translate-y-3 group-hover:shadow-2xl\r\n cursor-pointer\r\n relative\r\n ${isRightSide ? 'flex-row-reverse' : 'flex-row'}\r\n `}\r\n style={{\r\n boxShadow: '0 10px 40px rgba(0, 0, 0, 0.3)',\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 className={`absolute inset-0 rounded-full border-2 ${colors.border} opacity-0 group-hover:opacity-100 transition-all duration-300 scale-110 blur-sm`}></div>\r\n \r\n <div className={`flex-shrink-0 ${colors.iconBg} p-2.5 rounded-lg ${colors.border} border transition-all duration-300 group-hover:rotate-12 group-hover:scale-125 relative z-10`}>\r\n <Icon className=\"w-5 h-5 text-white\" strokeWidth={2} />\r\n </div>\r\n \r\n <span className={`flex-1 text-white font-semibold text-sm 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 className={`absolute bottom-full left-1/2 -translate-x-1/2 mb-3 px-4 py-2 ${isDarkMode ? 'bg-slate-800 border-slate-600' : 'bg-white border-gray-300'} ${isDarkMode ? 'text-white' : 'text-gray-800'} text-sm 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`}>\r\n <div className=\"font-semibold\">{module.name}</div>\r\n {module.description && (\r\n <div className={`text-xs mt-1 ${isDarkMode ? 'text-gray-300' : 'text-gray-600'}`}>{module.description}</div>\r\n )}\r\n <div className={`absolute top-full left-1/2 -translate-x-1/2 -mt-px border-4 border-transparent ${isDarkMode ? 'border-t-slate-800' : 'border-t-white'}`}></div>\r\n </div>\r\n </div>\r\n </a>\r\n );\r\n })}\r\n\r\n {/* Decorative elements */}\r\n <div className=\"absolute bottom-12 right-12 sm:bottom-16 sm:right-20\" style={{ animation: 'rotate 10s linear infinite' }}>\r\n <svg width=\"80\" height=\"80\" viewBox=\"0 0 60 60\" className={`${isDarkMode ? 'text-purple-300' : 'text-purple-400'} opacity-40`}>\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 className=\"absolute top-12 left-12 w-16 h-16 border-2 border-cyan-400/30 rounded-lg animate-pulse\" style={{ animation: 'rotate 8s linear infinite reverse' }}></div>\r\n <div className=\"absolute top-20 right-16 w-12 h-12 border-2 border-purple-400/30 rounded-full animate-pulse\"></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 }) => {\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 colorClasses = {\r\n blue: 'bg-gradient-to-br from-blue-600 to-blue-700 hover:from-blue-500 hover:to-blue-600 border-blue-400/50 shadow-blue-500/30',\r\n teal: 'bg-gradient-to-br from-teal-600 to-teal-700 hover:from-teal-500 hover:to-teal-600 border-teal-400/50 shadow-teal-500/30',\r\n purple: 'bg-gradient-to-br from-purple-600 to-purple-700 hover:from-purple-500 hover:to-purple-600 border-purple-400/50 shadow-purple-500/30',\r\n orange: 'bg-gradient-to-br from-orange-500 to-orange-600 hover:from-orange-400 hover:to-orange-500 border-orange-300/50 shadow-orange-500/30',\r\n cyan: 'bg-gradient-to-br from-cyan-600 to-cyan-700 hover:from-cyan-500 hover:to-cyan-600 border-cyan-400/50 shadow-cyan-500/30',\r\n indigo: 'bg-gradient-to-br from-indigo-600 to-indigo-700 hover:from-indigo-500 hover:to-indigo-600 border-indigo-400/50 shadow-indigo-500/30'\r\n };\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 className={`${colorClasses[color]} 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 ${isHovered || isDragging ? 'scale-110 shadow-2xl brightness-110' : ''} ${isDragging ? 'rotate-2' : ''}`}>\r\n <Icon className=\"w-4 h-4 text-white flex-shrink-0\" />\r\n <span className=\"text-white font-medium whitespace-nowrap text-xs sm:text-sm\">{text}</span>\r\n </div>\r\n {isDragging && (\r\n <div className=\"absolute inset-0 bg-white/10 rounded-2xl blur-xl animate-pulse\" style={{ transform: 'scale(1.5)' }} />\r\n )}\r\n {(isHovered || isDragging) && description && (\r\n <div className=\"absolute top-full left-1/2 -translate-x-1/2 mt-2 px-3 py-2 bg-slate-900/95 text-white text-xs rounded-lg shadow-xl border border-slate-700 whitespace-nowrap z-50 max-w-xs\">\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 // 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 diagramData = data?.sectionDataBindingItems?.[0]?.data;\r\n\r\n // Icon mapping\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 // Color mapping based on index\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 // Initialize nodes from API data\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 // Calculate positions in a more organic layout\r\n const generatedNodes = children.map((child, index) => {\r\n // Distribute nodes in clusters around the center\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 // Add some randomness for organic feel\r\n x += (Math.random() - 0.5) * 10;\r\n y += (Math.random() - 0.5) * 10;\r\n \r\n // Keep within bounds\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 ${isDarkMode ? 'bg-gradient-to-br from-slate-950 via-indigo-950 to-purple-950' : 'bg-gradient-to-br from-blue-50 via-indigo-50 to-purple-50'} overflow-hidden transition-colors duration-300`}\r\n style={{ touchAction: 'none' }}\r\n >\r\n <div className={`absolute inset-0 ${isDarkMode ? 'opacity-30' : 'opacity-20'}`}>\r\n <div className={`absolute inset-0 ${isDarkMode ? 'bg-gradient-to-tr from-blue-600/20 via-purple-600/20 to-pink-600/20' : 'bg-gradient-to-tr from-blue-400/20 via-purple-400/20 to-pink-400/20'}`} />\r\n <div className=\"absolute inset-0 bg-[radial-gradient(ellipse_at_top_right,_var(--tw-gradient-stops))] from-cyan-500/10 via-transparent to-transparent\" />\r\n <div className=\"absolute inset-0 bg-[radial-gradient(ellipse_at_bottom_left,_var(--tw-gradient-stops))] from-purple-500/10 via-transparent to-transparent\" />\r\n </div>\r\n\r\n <div className={`absolute inset-0 pointer-events-none ${isDarkMode ? 'opacity-60' : 'opacity-40'}`}>\r\n {[...Array(150)].map((_, i) => (\r\n <div\r\n key={i}\r\n className=\"absolute rounded-full animate-twinkle\"\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 background: isDarkMode ? ['#60a5fa', '#818cf8', '#a78bfa', '#c084fc', '#e879f9'][Math.floor(Math.random() * 5)] : ['#3b82f6', '#6366f1', '#8b5cf6', '#a855f7', '#d946ef'][Math.floor(Math.random() * 5)],\r\n animationDelay: `${Math.random() * 5}s`,\r\n animationDuration: `${4 + Math.random() * 6}s`\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n <div className={`absolute inset-0 ${isDarkMode ? 'opacity-10' : 'opacity-5'} pointer-events-none`}>\r\n <div className=\"absolute inset-0\" style={{\r\n backgroundImage: `radial-gradient(circle at 1px 1px, ${isDarkMode ? 'rgba(255,255,255,0.15)' : 'rgba(0,0,0,0.1)'} 1px, transparent 0)`,\r\n backgroundSize: '40px 40px'\r\n }} />\r\n </div>\r\n\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 className=\"absolute inset-0 bg-gradient-to-r from-blue-500/20 to-purple-500/20 blur-3xl w-20 h-20 sm:w-32 sm:h-32\" />\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 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%\" stopColor=\"#60a5fa\" stopOpacity=\"0.6\" />\r\n <stop offset=\"50%\" stopColor=\"#a78bfa\" stopOpacity=\"0.9\" />\r\n <stop offset=\"100%\" stopColor=\"#c084fc\" 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%\" stopColor=\"#60a5fa\" />\r\n <stop offset=\"50%\" stopColor=\"#a78bfa\" />\r\n <stop offset=\"100%\" stopColor=\"#c084fc\" />\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=\"rgba(167, 139, 250, 0.2)\"\r\n strokeWidth=\"6\"\r\n fill=\"none\"\r\n className=\"transition-all duration-200\"\r\n style={{ filter: 'blur(8px)' }}\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 <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 />\r\n ))}\r\n </div>\r\n\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 className=\"absolute inset-0 bg-indigo-400/30 rounded-full blur-2xl\" style={{ transform: 'scale(1.5)' }} />\r\n \r\n <div className={`relative bg-gradient-to-br from-indigo-500 via-blue-500 to-cyan-500 px-6 sm:px-10 py-3 sm:py-5 rounded-3xl shadow-2xl border-4 border-indigo-300/50 flex items-center gap-3 sm:gap-4 transition-transform backdrop-blur-md ${isDragging ? 'scale-110' : ''}`}>\r\n <div className=\"bg-white/25 p-2 sm:p-3 rounded-xl backdrop-blur-sm\">\r\n <Briefcase className=\"w-5 h-5 sm:w-7 sm:h-7 text-white\" />\r\n </div>\r\n <div className=\"text-center\">\r\n <h1 className=\"text-white font-bold text-sm sm:text-xl leading-tight tracking-wide\">{diagramName}</h1>\r\n {diagramDescription && (\r\n <h2 className=\"text-white/90 font-medium text-xs sm:text-base leading-tight\">{diagramDescription}</h2>\r\n )}\r\n </div>\r\n </div>\r\n \r\n {!isDragging && (\r\n <div className={`absolute -bottom-8 left-1/2 transform -translate-x-1/2 ${isDarkMode ? 'text-indigo-300/60' : 'text-indigo-600/60'} text-xs whitespace-nowrap`}>\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 .animate-twinkle { animation: twinkle 5s ease-in-out infinite; }\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\nconst FaqItem = ({ faq, index, isActive, onToggle, isDarkMode, 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\r\n className={`\r\n rounded-xl border transition-all duration-500 ease-out transform\r\n ${isDarkMode \r\n ? 'bg-gradient-to-br from-gray-800 to-gray-800/50 border-gray-700/50' \r\n : 'bg-white border-gray-200'\r\n }\r\n ${isActive \r\n ? `scale-[1.02] ${isDarkMode \r\n ? 'shadow-2xl shadow-blue-500/20 border-blue-500/30' \r\n : 'shadow-xl shadow-blue-100 border-blue-200'\r\n }`\r\n : 'shadow-md hover:shadow-lg'\r\n }\r\n hover:scale-[1.01]\r\n `}\r\n >\r\n {/* Question Button */}\r\n <button\r\n onClick={onToggle}\r\n className={`\r\n w-full px-6 py-5 text-left flex items-start justify-between gap-4\r\n transition-all duration-300\r\n ${isDarkMode \r\n ? 'hover:bg-gray-700/30' \r\n : 'hover:bg-gray-50/50'\r\n }\r\n rounded-xl\r\n group\r\n `}\r\n >\r\n <span className={`\r\n text-lg font-semibold flex-1 transition-colors duration-300\r\n ${isActive \r\n ? isDarkMode ? 'text-blue-400' : 'text-blue-600'\r\n : isDarkMode ? 'text-white group-hover:text-blue-300' : 'text-gray-900 group-hover:text-blue-600'\r\n }\r\n `}>\r\n {faq.question}\r\n </span>\r\n \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 ${isDarkMode ? 'shadow-blue-500/50' : 'shadow-blue-300'} rotate-180 scale-110` \r\n : `${isDarkMode \r\n ? 'bg-gray-700/50 text-gray-400 group-hover:bg-gray-600' \r\n : 'bg-gray-100 text-gray-500 group-hover:bg-gray-200'\r\n } group-hover:scale-110`\r\n }\r\n `}>\r\n <ChevronDown className={`w-5 h-5 transition-transform duration-500 ${isActive ? 'rotate-180' : ''}`} />\r\n </span>\r\n </button>\r\n\r\n {/* Answer - Collapsible with Smooth Animation */}\r\n <div\r\n className={`\r\n overflow-hidden transition-all duration-500 ease-in-out\r\n ${isActive ? 'max-h-[500px] opacity-100' : 'max-h-0 opacity-0'}\r\n `}\r\n >\r\n <div className={`\r\n px-6 pb-6 pt-2\r\n ${isDarkMode ? 'text-gray-300' : 'text-gray-600'}\r\n transition-all duration-500\r\n ${isActive ? 'translate-y-0' : '-translate-y-4'}\r\n `}>\r\n {/* Decorative Line */}\r\n <div className={`h-px w-full mb-4 ${isDarkMode ? 'bg-gradient-to-r from-transparent via-gray-700 to-transparent' : 'bg-gradient-to-r from-transparent via-gray-200 to-transparent'}`}></div>\r\n \r\n <div className={`prose prose-sm max-w-none leading-relaxed ${isDarkMode ? 'prose-invert' : ''}`}>\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={`\r\n inline-flex items-center gap-2 mt-5 px-4 py-2 rounded-lg text-sm font-medium\r\n transition-all duration-300 transform hover:scale-105\r\n ${isDarkMode \r\n ? 'text-blue-400 hover:text-blue-300 bg-blue-500/10 hover:bg-blue-500/20' \r\n : 'text-blue-600 hover:text-blue-700 bg-blue-50 hover:bg-blue-100'\r\n }\r\n group/link\r\n `}\r\n >\r\n {t?.('faq.learn_more') || 'Learn more'}\r\n <svg className=\"w-4 h-4 transition-transform duration-300 group-hover/link:translate-x-1\" 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 const sectionTitle = section?.title || '...';\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 className={`\r\n w-10 h-10 rounded-lg flex items-center justify-center\r\n ${isDarkMode \r\n ? 'bg-gradient-to-br from-blue-500 to-purple-600 shadow-lg shadow-blue-500/20' \r\n : 'bg-gradient-to-br from-blue-600 to-indigo-600 shadow-lg shadow-blue-200'\r\n }\r\n transform hover:scale-110 transition-all duration-300\r\n `}>\r\n <svg \r\n className=\"w-6 h-6 text-white\" \r\n fill=\"currentColor\" \r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n {/* Header with Animation */}\r\n <div className=\"text-center mb-12 animate-fade-in\">\r\n <h2 className={`text-4xl font-bold mb-3 ${isDarkMode ? 'text-white' : 'text-gray-900'}`}>\r\n {sectionTitle}\r\n </h2>\r\n <div className={`h-1 w-20 mx-auto rounded-full ${isDarkMode ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-600 to-indigo-600'}`}></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 isDarkMode={isDarkMode}\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\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\r\n .animate-fade-in {\r\n animation: fade-in 0.8s ease-out;\r\n }\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 'from-blue-600 to-purple-600',\r\n 'from-purple-600 to-pink-600',\r\n 'from-blue-500 to-purple-500',\r\n 'from-purple-500 to-pink-500',\r\n 'from-emerald-600 to-teal-600',\r\n 'from-orange-500 to-red-500'\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 ${isDarkMode ? \"text-white\" : \"text-gray-900\"}`}>\r\n {t('highlight.noData.title') || 'Chưa có dữ liệu'}\r\n </h3>\r\n <p className={`${isDarkMode ? \"text-gray-300\" : \"text-gray-600\"}`}>\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 className={`relative overflow-hidden ${isDarkMode ? 'bg-gradient-to-br from-slate-950 via-slate-900 to-slate-950' : 'bg-gradient-to-br from-white via-blue-50/30 to-purple-50/30'}`}>\r\n {/* Animated mesh background */}\r\n <div className=\"absolute inset-0 overflow-hidden pointer-events-none opacity-30\">\r\n <div className={`absolute top-0 left-0 w-full h-full ${isDarkMode ? 'bg-grid-white' : 'bg-grid-slate'}`}></div>\r\n </div>\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 ${isDarkMode ? 'bg-blue-500' : 'bg-blue-400'\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 ${isDarkMode ? 'bg-purple-500' : 'bg-purple-400'\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 ${isDarkMode ? 'bg-pink-500' : 'bg-pink-400'\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 min-h-[420px] lg:h-auto\">\r\n {/* Image Column */}\r\n <div className=\"relative h-[280px] lg:h-full overflow-hidden group\">\r\n <img\r\n src={item.image || defaultImage}\r\n alt={item.title}\r\n className=\"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 */}\r\n <div className=\"p-5 lg:p-8 flex flex-col justify-center\">\r\n <h1\r\n className={`text-3xl lg:text-4xl font-black mb-3 bg-gradient-to-r ${color} bg-clip-text text-transparent`}\r\n >\r\n {item.title}\r\n </h1>\r\n\r\n <p className=\"text-description mb-6\">\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\">\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-to-r ${color} flex items-center justify-center flex-shrink-0`}>\r\n <svg className=\"w-2.5 h-2.5 text-white\" 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={`${isDarkMode ? 'text-gray-300 group-hover:text-white' : 'text-gray-700 group-hover:text-gray-900'} 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`}\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 `}</style>\r\n </section>\r\n );\r\n};\r\n\r\nexport default PageHighlightSection;","import React, { useState } from 'react';\r\nimport { ArrowRight } from 'lucide-react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\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\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 style={{\r\n marginBottom: '50px',\r\n textAlign: 'center'\r\n }}>\r\n <h2 style={{\r\n fontSize: '36px',\r\n fontWeight: '700',\r\n marginBottom: '16px',\r\n color: isDarkMode ? '#f9fafb' : '#4b5563'\r\n }}>\r\n {sectionTitle}\r\n </h2>\r\n {sectionDescription && (\r\n <p style={{\r\n fontSize: '16px',\r\n lineHeight: '1.6',\r\n color: isDarkMode ? '#d1d5db' : '#6b7280',\r\n maxWidth: '900px',\r\n margin: '0 auto'\r\n }}>\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\r\n return (\r\n <a\r\n key={page.id}\r\n href={page.slug}\r\n style={{\r\n backgroundColor: isDarkMode ? '#1f2937' : '#ffffff',\r\n borderRadius: '12px',\r\n padding: '32px 20px',\r\n cursor: 'pointer',\r\n transition: 'all 0.3s',\r\n border: `1px solid ${isDarkMode ? '#374151' : '#e5e7eb'}`,\r\n boxShadow: isDarkMode \r\n ? '0 4px 6px -1px rgba(0, 0, 0, 0.3)' \r\n : '0 4px 6px -1px rgba(0, 0, 0, 0.1)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n textAlign: 'center',\r\n gap: '16px',\r\n textDecoration: 'none'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = 'translateY(-8px)';\r\n e.currentTarget.style.boxShadow = isDarkMode\r\n ? '0 20px 25px -5px rgba(0, 0, 0, 0.5)'\r\n : '0 20px 25px -5px rgba(0, 0, 0, 0.15)';\r\n e.currentTarget.style.borderColor = '#361985ff';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = 'translateY(0)';\r\n e.currentTarget.style.boxShadow = isDarkMode\r\n ? '0 4px 6px -1px rgba(0, 0, 0, 0.3)'\r\n : '0 4px 6px -1px rgba(0, 0, 0, 0.1)';\r\n e.currentTarget.style.borderColor = isDarkMode ? '#374151' : '#e5e7eb';\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\r\n <h3 style={{\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n color: isDarkMode ? '#f9fafb' : '#4b5563',\r\n margin: 0,\r\n lineHeight: '1.4'\r\n }}>\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 <ArrowRight size={18} />\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 { ChevronRight, ArrowRight } from 'lucide-react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\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\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 style={{\r\n fontSize: '28px',\r\n fontWeight: '700',\r\n marginBottom: '40px',\r\n color: isDarkMode ? '#f9fafb' : '#1e40af',\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.5px'\r\n }}>\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 style={{\r\n display: 'flex',\r\n gap: '20px',\r\n backgroundColor: isDarkMode ? '#1f2937' : '#ffffff',\r\n borderRadius: '8px',\r\n overflow: 'hidden',\r\n cursor: 'pointer',\r\n transition: 'all 0.2s',\r\n border: `1px solid ${isDarkMode ? '#374151' : '#e5e7eb'}`,\r\n padding: '16px',\r\n textDecoration: 'none'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = isDarkMode ? '#374151' : '#f9fafb';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = isDarkMode ? '#1f2937' : '#ffffff';\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 style={{\r\n flex: 1,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center'\r\n }}>\r\n {page.tagKeys && page.tagKeys.length > 0 && (\r\n <div style={{\r\n fontSize: '12px',\r\n fontWeight: '600',\r\n color: isDarkMode ? '#60a5fa' : '#2563eb',\r\n marginBottom: '8px',\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.5px'\r\n }}>\r\n {page.tagKeys[0].key}\r\n </div>\r\n )}\r\n\r\n <h3 style={{\r\n fontSize: '18px',\r\n fontWeight: '700',\r\n marginBottom: '8px',\r\n color: isDarkMode ? '#f9fafb' : '#1f2937',\r\n lineHeight: '1.4'\r\n }}>\r\n {page.title}\r\n </h3>\r\n\r\n {page.description && (\r\n <p style={{\r\n fontSize: '14px',\r\n lineHeight: '1.6',\r\n color: isDarkMode ? '#d1d5db' : '#6b7280',\r\n margin: 0\r\n }}>\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 <ChevronRight\r\n size={20}\r\n style={{\r\n color: isDarkMode ? '#9ca3af' : '#d1d5db',\r\n transition: 'color 0.2s'\r\n }}\r\n />\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 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 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(37, 99, 235, 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 <ArrowRight size={18} />\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 { ArrowRight } from 'lucide-react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\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 style={{\r\n fontSize: '36px',\r\n fontWeight: '700',\r\n marginBottom: '50px',\r\n color: isDarkMode ? '#f1f5f9' : '#1e293b'\r\n }}>\r\n {sectionTitle}\r\n </h2>\r\n )}\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 style={{\r\n backgroundColor: isDarkMode ? '#1e293b' : '#ffffff',\r\n borderRadius: '16px',\r\n overflow: 'hidden',\r\n cursor: 'pointer',\r\n transition: 'all 0.3s',\r\n boxShadow: isDarkMode \r\n ? '0 4px 6px -1px rgba(0, 0, 0, 0.5)' \r\n : '0 4px 6px -1px rgba(0, 0, 0, 0.1)',\r\n border: `1px solid ${isDarkMode ? '#334155' : '#e2e8f0'}`,\r\n textDecoration: 'none',\r\n display: 'block'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = 'translateY(-8px)';\r\n e.currentTarget.style.boxShadow = isDarkMode\r\n ? '0 20px 25px -5px rgba(0, 0, 0, 0.6)'\r\n : '0 20px 25px -5px rgba(0, 0, 0, 0.15)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = 'translateY(0)';\r\n e.currentTarget.style.boxShadow = isDarkMode\r\n ? '0 4px 6px -1px rgba(0, 0, 0, 0.5)'\r\n : '0 4px 6px -1px rgba(0, 0, 0, 0.1)';\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={{\r\n padding: '24px'\r\n }}>\r\n <h3 style={{\r\n fontSize: '20px',\r\n fontWeight: '700',\r\n marginBottom: '12px',\r\n color: isDarkMode ? '#f1f5f9' : '#1e293b',\r\n lineHeight: '1.4',\r\n minHeight: '56px'\r\n }}>\r\n {page.title}\r\n </h3>\r\n\r\n {page.description && (\r\n <p style={{\r\n fontSize: '14px',\r\n lineHeight: '1.6',\r\n color: isDarkMode ? '#cbd5e1' : '#64748b',\r\n marginBottom: '16px',\r\n display: '-webkit-box',\r\n WebkitLineClamp: 2,\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden'\r\n }}>\r\n {page.description}\r\n </p>\r\n )}\r\n </div>\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 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 backgroundColor: '#361985ff',\r\n border: 'none',\r\n borderRadius: '50px',\r\n cursor: 'pointer',\r\n transition: 'all 0.3s',\r\n boxShadow: '0 4px 6px -1px rgba(239, 68, 68, 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 e.currentTarget.style.boxShadow = '0 10px 15px -3px rgba(239, 68, 68, 0.4)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = '#361985ff';\r\n e.currentTarget.style.transform = 'translateY(0)';\r\n e.currentTarget.style.boxShadow = '0 4px 6px -1px rgba(239, 68, 68, 0.3)';\r\n }}\r\n >\r\n {t('pageChildrenSelect.moreInsights')}\r\n <ArrowRight size={18} />\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":["self","jsxRuntimeModule","require$$0","require$$1","useRef","useState","useEffect","jsx","index","jsxs","logoUrl","Fragment","useWindowSize","useMemo","_a","forwardRef","createElement","__iconNode","CheckCircle","AlertCircle","Loader2","_b","module","Icon","Home"],"mappings":"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","x_google_ignoreList":[0,1,2,13,14,15,16,17,18,19,20,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,50,51,52]}
|
|
1
|
+
{"version":3,"file":"nvis-fe-cms-libs.umd.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/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","../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/arrow-right.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/chevron-down.js","../node_modules/lucide-react/dist/esm/icons/chevron-right.js","../node_modules/lucide-react/dist/esm/icons/circle-alert.js","../node_modules/lucide-react/dist/esm/icons/circle-check-big.js","../node_modules/lucide-react/dist/esm/icons/clock.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/loader-circle.js","../node_modules/lucide-react/dist/esm/icons/mail.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/phone.js","../node_modules/lucide-react/dist/esm/icons/plane.js","../node_modules/lucide-react/dist/esm/icons/send.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/user.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/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","../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, { useEffect, useRef, useState } from \"react\";\r\n\r\nconst CompanyValues = ({ companyData, t, isDarkMode }) => {\r\n // Clean HTML content với null safety\r\n const cleanHtmlContent = (html) => {\r\n if (!html) return '';\r\n\r\n try {\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = html;\r\n\r\n let cleanText = tempDiv.textContent || tempDiv.innerText || '';\r\n\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 (error) {\r\n console.error('Error cleaning HTML content:', error);\r\n return String(html || '').replace(/<[^>]*>/g, '').replace(/\\s+/g, ' ').trim();\r\n }\r\n };\r\n\r\n // Validate companyData với null safety\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: \"💡\",\r\n gradient: \"bg-gradient-blue-soft\",\r\n textGradient: \"text-gradient-blue-soft\",\r\n iconBg: isDarkMode ? \"bg-blue-900/40\" : \"bg-blue-100\",\r\n iconColor: isDarkMode ? \"text-blue-300\" : \"text-blue-600\",\r\n title: t('about.companyValues.vision') || 'Tầm nhìn',\r\n text: cleanHtmlContent(safeCompanyData.vision) || 'Tầm nhìn của chúng tôi sẽ được cập nhật trong thời gian tới.',\r\n },\r\n {\r\n icon: \"🚀\",\r\n gradient: \"bg-gradient-emerald-teal\",\r\n textGradient: \"text-gradient-emerald-teal\",\r\n iconBg: isDarkMode ? \"bg-emerald-900/40\" : \"bg-emerald-100\",\r\n iconColor: isDarkMode ? \"text-emerald-300\" : \"text-emerald-600\",\r\n title: t('about.companyValues.mission') || 'Sứ mệnh',\r\n text: cleanHtmlContent(safeCompanyData.mission) || 'Sứ mệnh của chúng tôi sẽ được cập nhật trong thời gian tới.',\r\n },\r\n {\r\n icon: \"💎\",\r\n gradient: \"bg-gradient-purple-soft\",\r\n textGradient: \"text-gradient-purple-soft\",\r\n iconBg: isDarkMode ? \"bg-purple-900/40\" : \"bg-purple-100\",\r\n iconColor: isDarkMode ? \"text-purple-300\" : \"text-purple-600\",\r\n title: t('about.companyValues.coreValues') || 'Giá trị cốt lõi',\r\n text: cleanHtmlContent(safeCompanyData.coreValues) || 'Giá trị cốt lõi của chúng tôi sẽ được cập nhật trong thời gian tới.',\r\n },\r\n ];\r\n\r\n // Filter out items với empty text nếu không muốn hiển thị placeholder\r\n const validItems = items.filter(item => {\r\n const originalText = item === items[0] ? safeCompanyData.vision\r\n : item === items[1] ? safeCompanyData.mission\r\n : safeCompanyData.coreValues;\r\n\r\n // Chỉ hiển thị item nếu có data thật hoặc muốn hiển thị placeholder\r\n return originalText || true; // Set to false nếu không muốn hiển thị placeholder\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(validItems.length).fill(false));\r\n\r\n if (validItems.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 () => {\r\n refs.current.forEach((el) => el && observer.unobserve(el));\r\n };\r\n }, [validItems.length]);\r\n\r\n // Return empty state nếu không có data và không muốn hiển thị placeholder\r\n if (!companyData || validItems.length === 0) {\r\n return (\r\n <div \r\n className=\"text-center py-8 px-4 rounded-lg border\"\r\n style={{\r\n backgroundColor: isDarkMode ? 'var(--bg-secondary)' : 'var(--bg-secondary)',\r\n borderColor: isDarkMode ? 'var(--border-primary)' : 'var(--border-primary)'\r\n }}\r\n >\r\n <div \r\n className=\"w-16 h-16 mx-auto mb-4 rounded-full flex items-center justify-center\"\r\n style={{\r\n backgroundColor: isDarkMode ? 'var(--bg-tertiary)' : 'var(--bg-tertiary)'\r\n }}\r\n >\r\n <svg \r\n className=\"w-8 h-8\" \r\n style={{ color: isDarkMode ? 'var(--text-tertiary)' : 'var(--text-tertiary)' }}\r\n fill=\"none\" \r\n stroke=\"currentColor\" \r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\r\n </svg>\r\n </div>\r\n <h3 \r\n className=\"text-lg font-semibold mb-2\"\r\n style={{ color: isDarkMode ? 'var(--text-primary)' : 'var(--text-primary)' }}\r\n >\r\n Thông tin công ty\r\n </h3>\r\n <p \r\n className=\"text-sm\"\r\n style={{ color: isDarkMode ? 'var(--text-secondary)' : 'var(--text-secondary)' }}\r\n >\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 {validItems.map((item, index) => {\r\n try {\r\n return (\r\n <div\r\n key={index}\r\n ref={(el) => (refs.current[index] = el)}\r\n className={`\r\n flex items-start space-x-4 rounded-2xl p-6 \r\n transform transition-all duration-700 ease-out \r\n border backdrop-blur-sm\r\n ${visible[index] ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\"}\r\n `}\r\n style={{\r\n transitionDelay: `${index * 200}ms`,\r\n borderColor: isDarkMode ? 'var(--border-primary)' : 'var(--border-primary)',\r\n backgroundColor: isDarkMode \r\n ? 'var(--bg-secondary)' \r\n : 'transparent',\r\n ...(isDarkMode && {\r\n backgroundImage: `linear-gradient(to bottom right, \r\n ${index === 0 ? 'var(--gradient-blue-soft-start)' : \r\n index === 1 ? 'var(--gradient-emerald-start)' : \r\n 'var(--gradient-purple-soft-start)'}15, \r\n ${index === 0 ? 'var(--gradient-blue-soft-end)' : \r\n index === 1 ? 'var(--gradient-emerald-end)' : \r\n 'var(--gradient-purple-soft-end)'}10)`\r\n })\r\n }}\r\n >\r\n {/* Icon */}\r\n <div\r\n className={`w-10 h-10 rounded-lg flex items-center justify-center flex-shrink-0 ${item.iconBg} ${item.iconColor}`}\r\n >\r\n {item.icon}\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"flex-1 min-w-0\">\r\n <h3\r\n className={`text-lg font-bold mb-1 ${item.textGradient}`}\r\n >\r\n {item.title}\r\n </h3>\r\n <p\r\n className={`leading-relaxed ${\r\n // Style khác nhau cho placeholder vs real content\r\n (item.text.includes('sẽ được cập nhật') ? 'italic opacity-75' : '')\r\n }`}\r\n style={{\r\n color: isDarkMode ? 'var(--text-secondary)' : 'var(--text-secondary)'\r\n }}\r\n >\r\n {item.text}\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n } catch (error) {\r\n console.error('Error rendering company value item:', item, error);\r\n // Fallback item nếu có lỗi\r\n return (\r\n <div\r\n key={`error-${index}`}\r\n className=\"flex items-start space-x-4 rounded-lg p-4 border opacity-50\"\r\n style={{\r\n backgroundColor: isDarkMode ? 'var(--bg-secondary)' : 'var(--bg-secondary)',\r\n borderColor: isDarkMode ? 'var(--border-primary)' : 'var(--border-primary)'\r\n }}\r\n >\r\n <div \r\n className=\"w-10 h-10 rounded-lg flex items-center justify-center\"\r\n style={{\r\n backgroundColor: isDarkMode ? '#7f1d1d40' : '#fee2e2',\r\n color: isDarkMode ? '#fca5a5' : '#dc2626'\r\n }}\r\n >\r\n ❌\r\n </div>\r\n <div>\r\n <h3 \r\n className=\"text-lg font-bold mb-1\"\r\n style={{ color: isDarkMode ? 'var(--text-primary)' : 'var(--text-primary)' }}\r\n >\r\n Lỗi hiển thị\r\n </h3>\r\n <p style={{ color: isDarkMode ? 'var(--text-secondary)' : 'var(--text-secondary)' }}>\r\n Không thể hiển thị mục này do vấn đề dữ liệu.\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n }\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\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 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 const logoUrl = getLogoUrl(logo);\r\n return (\r\n <>\r\n {/* Hero Section */}\r\n <section\r\n className={`relative min-h-[80vh] flex items-center justify-center overflow-hidden pt-8 transition-colors duration-300`}\r\n >\r\n <div className=\"absolute inset-0\">\r\n <div className={`absolute inset-0 ${isDarkMode\r\n ? \"bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900\"\r\n : \"bg-gradient-to-br from-blue-600 via-indigo-600 to-purple-600\"\r\n }`}></div>\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 <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 <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-to-r from-blue-500 to-purple-600 p-1\">\r\n <div\r\n className={`w-full h-full rounded-full flex items-center justify-center overflow-hidden ${isDarkMode ? \"bg-gray-900\" : \"bg-white\"\r\n }`}\r\n >\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 // Fallback khi ảnh lỗi - hiển thị shortName\r\n e.target.style.display = 'none';\r\n const fallbackDiv = document.createElement('div');\r\n fallbackDiv.className = 'text-2xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent';\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 bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent\">\r\n {shortName}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n <h1\r\n className={`text-5xl lg:text-6xl font-extrabold tracking-tight mb-4 ${isDarkMode\r\n ? \"text-transparent bg-clip-text bg-gradient-to-r from-blue-400 via-indigo-300 to-purple-400 drop-shadow-[0_2px_8px_rgba(0,0,0,0.6)]\"\r\n : \"text-transparent bg-clip-text bg-gradient-to-r from-blue-100 via-indigo-50 to-purple-100 drop-shadow-[0_2px_6px_rgba(0,0,0,0.4)]\"\r\n }`}\r\n >\r\n {name}\r\n </h1>\r\n\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 transition-colors ${isDarkMode\r\n ? \"prose-invert text-gray-200\"\r\n : \"text-gray-100\"\r\n } text-lg sm:text-xl md:text-2xl font-light tracking-wide`}\r\n >\r\n </div>\r\n <div\r\n className={`inline-flex items-center px-4 py-2 rounded-full border text-sm font-medium ${isDarkMode\r\n ? \"bg-gray-800/70 border-gray-600 text-gray-300\"\r\n : \"bg-white/20 border-white/40 text-white\"\r\n }`}\r\n >\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\r\n className={`inline-block px-4 py-2 rounded-full text-sm font-semibold mb-4 ${isDarkMode\r\n ? \"bg-blue-900/40 text-blue-300 border border-blue-700\"\r\n : \"bg-blue-100 text-blue-800\"\r\n }`}\r\n >\r\n 📖 {safeT('aboutCompany.story.badge')}\r\n </div>\r\n <h2\r\n className={`text-3xl lg:text-4xl font-bold mb-6 ${isDarkMode ? \"text-white\" : \"text-gray-800\"\r\n }`}\r\n >\r\n {safeT('aboutCompany.story.title')}{\" \"}\r\n <span className=\"block bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent\">\r\n {shortName}\r\n </span>\r\n </h2>\r\n <div\r\n dangerouslySetInnerHTML={{ __html: description }}\r\n className={`prose max-w-none transition-colors ${isDarkMode\r\n ? \"prose-invert text-gray-300\"\r\n : \"text-gray-600\"\r\n }`}\r\n />\r\n </div>\r\n\r\n {/* Vision - Mission - Core Values */}\r\n <div\r\n className={`transition-colors ${isDarkMode ? \"text-gray-300\" : \"text-gray-700\"\r\n }`}\r\n >\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\nconst TimelineSection = ({ data, t, isDarkMode, section }) => {\r\n const timelineData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data) // loại bỏ item null hoặc data null\r\n .map((item) => item.data) || [];\r\n\r\n // Animation state\r\n const [timelineVisible, setTimelineVisible] = useState([]);\r\n const timelineRefs = useRef([]);\r\n const sectionTitle = section?.title || '...';\r\n useEffect(() => {\r\n setTimelineVisible(new Array(timelineData.length).fill(false));\r\n }, [timelineData.length]);\r\n\r\n // Intersection observer để hiện dần item khi scroll\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 newVisible = [...prev];\r\n newVisible[index] = true;\r\n return newVisible;\r\n });\r\n }\r\n observer.unobserve(entry.target);\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 };\r\n }, [timelineData.length]);\r\n\r\n if (!timelineData.length) {\r\n return (\r\n <section className={`py-20 ${isDarkMode ? \"bg-gray-900/50\" : \"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 ${isDarkMode ? \"text-white\" : \"text-gray-900\"}`}>\r\n {t('timeline.noData.title') || 'Chưa có dữ liệu'}\r\n </h3>\r\n <p className={`${isDarkMode ? \"text-gray-300\" : \"text-gray-600\"}`}>\r\n {t('timeline.noData.description') || '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 isDarkMode={isDarkMode}>\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\r\n className={`relative inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 border transition-all duration-300 transform hover:scale-105 shadow-md hover:shadow-lg overflow-hidden ${isDarkMode\r\n ? \"bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 text-emerald-300 border-blue-800\"\r\n : \"bg-white text-emerald-800 border-gray-200\"\r\n }`}\r\n >\r\n 📈 {sectionTitle}\r\n {/* Hiệu ứng shape trong dark mode */}\r\n {isDarkMode && (\r\n <>\r\n <div\r\n className=\"absolute w-12 h-12 bg-white/5 rounded-full\"\r\n style={{ left: \"10%\", top: \"20%\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-10 h-10 bg-white/5 rounded-full\"\r\n style={{ right: \"30%\", bottom: \"10%\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-14 h-14 bg-white/5 rounded-md\"\r\n style={{ left: \"20%\", bottom: \"30%\" }}\r\n ></div>\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 </>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Timeline */}\r\n <div className=\"relative\">\r\n {/* Line ở giữa */}\r\n <div className=\"absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-to-b from-blue-500 to-purple-600 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 ${index % 2 === 0 ? \"flex-row\" : \"flex-row-reverse\"\r\n } ${timelineVisible[index] ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\"\r\n }`}\r\n style={{ transitionDelay: `${index * 200}ms` }}\r\n >\r\n {/* Card */}\r\n <div className=\"flex-1 px-8\">\r\n <div\r\n className={`relative p-5 rounded-xl shadow-lg transition-all duration-300 hover:shadow-xl overflow-hidden ${isDarkMode\r\n ? \"bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 border border-blue-800 hover:border-blue-600\"\r\n : \"bg-gray-50 hover:shadow-2xl\"\r\n }`}\r\n >\r\n {/* Hiệu ứng shape trong Dark Mode */}\r\n {isDarkMode && (\r\n <>\r\n <div\r\n className=\"absolute w-12 h-12 bg-white/5 rounded-full\"\r\n style={{ left: \"10%\", top: \"20%\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-10 h-10 bg-white/5 rounded-full\"\r\n style={{ right: \"30%\", bottom: \"10%\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-14 h-14 bg-white/5 rounded-md\"\r\n style={{ left: \"20%\", bottom: \"30%\" }}\r\n ></div>\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 </>\r\n )}\r\n <div className=\"text-blue-600 font-bold text-xl mb-2\">\r\n {milestone.time}\r\n </div>\r\n <h3\r\n className={`text-lg font-bold mb-2 ${isDarkMode ? \"text-white\" : \"text-gray-900\"\r\n }`}\r\n >\r\n {milestone.title}\r\n </h3>\r\n <p\r\n className={`${isDarkMode ? \"text-gray-300\" : \"text-gray-600\"\r\n }`}\r\n >\r\n {milestone.description}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n {/* Dot */}\r\n <div\r\n className={`w-6 h-6 bg-gradient-to-r from-blue-500 to-purple-600 rounded-full border-4 ${isDarkMode ? \"border-gray-800\" : \"border-white\"\r\n } shadow-[0_0_10px_5px_rgba(59,130,246,0.5)] flex-shrink-0 z-10 animate-pulse`}\r\n ></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\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\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 {isDarkMode && (\r\n <>\r\n <div\r\n className=\"absolute w-12 h-12 bg-white/5 rounded-full\"\r\n style={{ left: \"10%\", top: \"20%\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-10 h-10 bg-white/5 rounded-full\"\r\n style={{ right: \"30%\", bottom: \"10%\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-14 h-14 bg-white/5 rounded-md\"\r\n style={{ left: \"20%\", bottom: \"30%\" }}\r\n ></div>\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 </>\r\n )}\r\n\r\n <div className=\"logo-container w-20 h-14 flex items-center justify-center mb-4 rounded-lg overflow-hidden\">\r\n {logoSrc ? (\r\n <img\r\n src={logoSrc}\r\n alt={partner.name}\r\n className=\"logo-image max-w-full max-h-full object-contain\"\r\n />\r\n ) : (\r\n <div className=\"w-full h-full bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center\">\r\n <span className=\"text-white font-bold text-center text-sm px-1\">\r\n {partner.name}\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n\r\n <h4\r\n className={`font-bold text-center mb-2 ${isDarkMode ? \"text-white\" : \"text-gray-900\"\r\n }`}\r\n >\r\n {partner.name}\r\n </h4>\r\n <p\r\n className={`text-sm text-center mb-2 ${isDarkMode ? \"text-gray-300\" : \"text-gray-600\"\r\n }`}\r\n >\r\n {partner.description}\r\n </p>\r\n\r\n {partner.websiteUrl && (\r\n <div className=\"website-hint\">\r\n <span className=\"text-sm text-blue-600 font-medium\">\r\n {t('partners.viewDetails') || 'Xem chi tiết'} →\r\n </span>\r\n </div>\r\n )}\r\n\r\n <style jsx>{`\r\n .partner-card {\r\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\r\n }\r\n .partner-card:hover {\r\n transform: translateY(-3px);\r\n box-shadow: 0 8px 20px ${isDarkMode ? \"rgba(255,255,255,0.1)\" : \"rgba(0,0,0,0.1)\"};\r\n }\r\n .logo-container {\r\n background: ${isDarkMode\r\n ? \"linear-gradient(135deg, #374151 0%, #1f2937 100%)\"\r\n : \"linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%)\"};\r\n border: 1px solid ${isDarkMode ? \"#4b5563\" : \"#e2e8f0\"};\r\n transition: all 0.3s ease;\r\n }\r\n .partner-card:hover .logo-container {\r\n border-color: #3b82f6;\r\n background: ${isDarkMode\r\n ? \"linear-gradient(135deg, #4b5563 0%, #374151 100%)\"\r\n : \"linear-gradient(135deg, #ffffff 0%, #f8fafc 100%)\"};\r\n }\r\n .logo-image {\r\n filter: ${isDarkMode ? \"grayscale(0.3) opacity(0.8)\" : \"grayscale(0.2) opacity(0.9)\"};\r\n transition: all 0.3s ease;\r\n }\r\n .partner-card:hover .logo-image {\r\n filter: grayscale(0) opacity(1);\r\n transform: scale(1.05);\r\n }\r\n .website-hint {\r\n opacity: 0;\r\n transform: translateY(4px);\r\n transition: all 0.3s ease;\r\n }\r\n .partner-card:hover .website-hint {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n `}</style>\r\n </>\r\n );\r\n\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={`partner-card relative flex flex-col items-center justify-center p-4 rounded-xl shadow-sm transition-all duration-700 ease-out cursor-pointer overflow-hidden\r\n ${isDarkMode\r\n ? \"bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 border border-blue-800 hover:border-blue-500\"\r\n : \"bg-white border border-gray-200 hover:border-blue-300\"\r\n }\r\n ${visible ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\"}`}\r\n style={{ transitionDelay: `${idx * 150}ms`, textDecoration: 'none' }}\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={`partner-card relative flex flex-col items-center justify-center p-4 rounded-xl shadow-sm transition-all duration-700 ease-out overflow-hidden\r\n ${isDarkMode\r\n ? \"bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 border border-blue-800\"\r\n : \"bg-white border border-gray-200\"\r\n }\r\n ${visible ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\"}`}\r\n style={{ transitionDelay: `${idx * 150}ms` }}\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\n// Custom hook for window size\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\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, isDarkMode, imageBaseUrl = \"\",section }) => {\r\n const partnersData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data) // loại bỏ item null hoặc data null\r\n ?.map((item) => item.data) // lấy data hợp lệ\r\n || [];\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 const sectionTitle = section?.title || '...';\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 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\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 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 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 isDarkMode={isDarkMode}>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n <div className=\"text-center mb-12\">\r\n <div\r\n className={`inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 border shadow-sm ${isDarkMode\r\n ? \"bg-blue-900/30 text-blue-300 border-blue-800\"\r\n : \"bg-blue-100 text-blue-800 border-blue-200\"\r\n }`}\r\n >\r\n 🤝 {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n <div ref={partnersRef} className=\"relative overflow-hidden\">\r\n <div\r\n className={`transition-all duration-1000 ease-out ${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 ${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 isDarkMode={isDarkMode}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n\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 ${index === currentPartnerSlide\r\n ? \"bg-blue-500 scale-125\"\r\n : isDarkMode\r\n ? \"bg-gray-600 hover:bg-blue-400\"\r\n : \"bg-gray-300 hover:bg-blue-500\"\r\n }`}\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;","import React, { useEffect, useRef, useState } from \"react\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\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 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) {\r\n setMilestones(res.data || []);\r\n } else {\r\n setMilestones([]);\r\n }\r\n } catch (error) {\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) // bỏ item null hoặc item.data null\r\n ?.map((item) => item.data) // lấy data hợp lệ\r\n || [];\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(\r\n (el) => el === entry.target\r\n );\r\n if (index !== -1) {\r\n setTimelineVisible((prev) => {\r\n const newVisible = [...prev];\r\n newVisible[index] = true;\r\n return newVisible;\r\n });\r\n }\r\n observer.unobserve(entry.target);\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 };\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={isDarkMode ? \"text-white\" : \"text-gray-800\"}>\r\n {t('milestone.status.loadingData')}\r\n </p>\r\n </section>\r\n );\r\n }\r\n\r\n if (!milestones.length) {\r\n return (\r\n <section\r\n className={`py-20 ${isDarkMode ? \"bg-gray-900/50\" : \"bg-white\"}`}\r\n >\r\n <div className=\"max-w-7xl mx-auto px-4 text-center\">\r\n <h3\r\n className={`text-lg font-semibold mb-2 ${isDarkMode ? \"text-white\" : \"text-gray-900\"}`}\r\n >\r\n {t('milestone.status.noData')}\r\n </h3>\r\n <p\r\n className={`${isDarkMode ? \"text-gray-300\" : \"text-gray-600\"}`}\r\n >\r\n {t('milestone.noDataDescription')}\r\n </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 <div className=\"text-center mb-12\">\r\n <div\r\n className={`relative inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 border transition-all duration-300 transform hover:scale-105 shadow-md hover:shadow-lg overflow-hidden ${isDarkMode\r\n ? \"bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 text-emerald-300 border-blue-800\"\r\n : \"bg-white text-emerald-800 border-gray-200\"\r\n }`}\r\n >\r\n 📈 {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n <div className=\"relative\">\r\n <div className=\"absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-to-b from-blue-500 to-purple-600 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 ${index % 2 === 0 ? \"flex-row\" : \"flex-row-reverse\"\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 <div className=\"flex-1 px-8\">\r\n <div\r\n className={`relative p-5 rounded-xl shadow-lg transition-all duration-300 hover:shadow-xl overflow-hidden ${isDarkMode\r\n ? \"bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 border border-blue-800 hover:border-blue-600\"\r\n : \"bg-gray-50 hover:shadow-2xl\"\r\n }`}\r\n >\r\n <div className=\"text-blue-600 font-bold text-xl mb-2\">\r\n {milestone.time}\r\n </div>\r\n <h3\r\n className={`text-lg font-bold mb-2 ${isDarkMode ? \"text-white\" : \"text-gray-900\"}`}\r\n >\r\n {milestone.title}\r\n </h3>\r\n <p\r\n className={`${isDarkMode ? \"text-gray-300\" : \"text-gray-600\"}`}\r\n >\r\n {milestone.description}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div\r\n className={`w-6 h-6 bg-gradient-to-r from-blue-500 to-purple-600 rounded-full border-4 ${isDarkMode ? \"border-gray-800\" : \"border-white\"\r\n } shadow-[0_0_10px_5px_rgba(59,130,246,0.5)] flex-shrink-0 z-10 animate-pulse`}\r\n ></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\nconst TestimonialsSection = ({ data, t, isDarkMode, section }) => {\r\n const [currentIndex, setCurrentIndex] = useState(0);\r\n const sectionTitle = section?.title || '...';\r\n const testimonials =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data) // loại bỏ item null\r\n .map((item) => ({\r\n quote: item.data?.content || \"\",\r\n author: item.data?.customerName || \"\",\r\n position: item.data?.customerTitle || t('testimonials.fallback.defaultPosition'),\r\n company: item.data?.customerCompany || \"\",\r\n })) || [];\r\n\r\n const fallbackTestimonials = [\r\n {\r\n quote: t('testimonials.fallback.testimonial1.quote'),\r\n author: t('testimonials.fallback.testimonial1.author'),\r\n position: t('testimonials.fallback.testimonial1.position'),\r\n company: t('testimonials.fallback.testimonial1.company'),\r\n },\r\n {\r\n quote: t('testimonials.fallback.testimonial2.quote'),\r\n author: t('testimonials.fallback.testimonial2.author'),\r\n position: t('testimonials.fallback.testimonial2.position'),\r\n company: t('testimonials.fallback.testimonial2.company'),\r\n },\r\n {\r\n quote: t('testimonials.fallback.testimonial3.quote'),\r\n author: t('testimonials.fallback.testimonial3.author'),\r\n position: t('testimonials.fallback.testimonial3.position'),\r\n company: t('testimonials.fallback.testimonial3.company'),\r\n },\r\n ];\r\n\r\n const displayTestimonials =\r\n testimonials.length > 0 ? testimonials : fallbackTestimonials;\r\n\r\n useEffect(() => {\r\n if (displayTestimonials.length > 1) {\r\n const interval = setInterval(() => {\r\n setCurrentIndex((prev) => (prev + 1) % displayTestimonials.length);\r\n }, 5000);\r\n return () => clearInterval(interval);\r\n }\r\n }, [displayTestimonials.length]);\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={`inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 ${isDarkMode\r\n ? \"bg-indigo-900/50 text-indigo-300 border border-indigo-800\"\r\n : \"bg-indigo-100 text-indigo-800\"\r\n }`}\r\n >\r\n 💬 {sectionTitle}\r\n </div>\r\n\r\n <div className=\"relative\">\r\n <div\r\n key={currentIndex}\r\n className={`p-6 rounded-2xl transition-all duration-500 transform ${isDarkMode\r\n ? \"bg-gray-800/80 backdrop-blur-sm border border-gray-700\"\r\n : \"bg-white\"\r\n }`}\r\n >\r\n <blockquote\r\n className={`text-lg lg:text-xl italic mb-6 animate-fadeIn transition-colors duration-200 ${isDarkMode ? \"text-gray-300\" : \"text-gray-700\"\r\n }`}\r\n >\r\n \"{displayTestimonials[currentIndex].quote}\"\r\n </blockquote>\r\n\r\n <div className=\"flex items-center justify-center space-x-4 animate-fadeIn\">\r\n <div className=\"text-3xl\">👤</div>\r\n <div className=\"text-left\">\r\n <div\r\n className={`font-bold text-base transition-colors duration-200 ${isDarkMode ? \"text-white\" : \"text-gray-900\"\r\n }`}\r\n >\r\n {displayTestimonials[currentIndex].author}\r\n </div>\r\n <div className=\"text-blue-600 font-medium text-sm\">\r\n {displayTestimonials[currentIndex].position}\r\n </div>\r\n {displayTestimonials[currentIndex].company && (\r\n <div\r\n className={`text-xs transition-colors duration-200 ${isDarkMode ? \"text-gray-400\" : \"text-gray-600\"\r\n }`}\r\n >\r\n {displayTestimonials[currentIndex].company}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {displayTestimonials.length > 1 && (\r\n <div className=\"flex justify-center space-x-2 mt-4\">\r\n {displayTestimonials.map((_, index) => (\r\n <button\r\n key={index}\r\n onClick={() => setCurrentIndex(index)}\r\n className={`w-2.5 h-2.5 rounded-full transition-all duration-300 ${index === currentIndex\r\n ? \"bg-blue-600\"\r\n : isDarkMode\r\n ? \"bg-gray-600 hover:bg-gray-500\"\r\n : \"bg-gray-300 hover:bg-gray-400\"\r\n }`}\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.logo);\r\n\r\n return (\r\n <a\r\n href={partner.website || partner.url || '#'}\r\n target={partner.website || partner.url ? '_blank' : '_self'}\r\n rel={partner.website || partner.url ? 'noopener noreferrer' : ''}\r\n className={`group relative overflow-hidden rounded-2xl transition-all duration-500 hover:-translate-y-2 hover:scale-105 ${\r\n isDarkMode\r\n ? \"bg-gradient-to-br from-gray-800 to-gray-900 border border-gray-700 hover:border-blue-500/50\"\r\n : \"bg-gradient-to-br from-white to-gray-50 border border-gray-200 hover:border-blue-400/50\"\r\n } shadow-lg hover:shadow-2xl`}\r\n style={{\r\n animationDelay: `${idx * 0.1}s`,\r\n textDecoration: 'none'\r\n }}\r\n >\r\n <div className=\"absolute inset-0 bg-gradient-to-br from-blue-500/0 via-purple-500/0 to-pink-500/0 group-hover:from-blue-500/10 group-hover:via-purple-500/10 group-hover:to-pink-500/10 transition-all duration-700\"></div>\r\n\r\n <div className=\"relative p-6 flex flex-col items-center justify-center min-h-[180px]\">\r\n {logoUrl ? (\r\n <div className=\"w-full h-24 flex items-center justify-center mb-4\">\r\n <img\r\n src={logoUrl}\r\n alt={partner.name || t(\"partners.logoAlt\") || \"Partner logo\"}\r\n className=\"max-w-full max-h-full object-contain filter grayscale group-hover:grayscale-0 transition-all duration-500 group-hover:scale-110\"\r\n loading=\"lazy\"\r\n />\r\n </div>\r\n ) : (\r\n <div\r\n className={`w-20 h-20 rounded-full flex items-center justify-center mb-4 ${\r\n isDarkMode ? \"bg-gray-700\" : \"bg-gray-200\"\r\n }`}\r\n >\r\n <span className=\"text-3xl\">🤝</span>\r\n </div>\r\n )}\r\n\r\n <h3\r\n className={`text-base font-bold text-center line-clamp-2 ${\r\n isDarkMode ? \"text-white\" : \"text-gray-800\"\r\n } group-hover:text-transparent group-hover:bg-gradient-to-r group-hover:from-blue-500 group-hover:to-purple-500 group-hover:bg-clip-text transition-all duration-300`}\r\n >\r\n {partner.name || t(\"partners.unnamed\") || \"Partner\"}\r\n </h3>\r\n\r\n {partner.description && (\r\n <p\r\n className={`text-xs text-center mt-2 line-clamp-2 ${\r\n isDarkMode ? \"text-gray-400\" : \"text-gray-600\"\r\n }`}\r\n >\r\n {partner.description}\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div className=\"absolute top-0 right-0 w-20 h-20 bg-gradient-to-br from-blue-500/20 to-purple-500/20 rounded-bl-full opacity-0 group-hover:opacity-100 transition-opacity duration-500\"></div>\r\n <div className=\"absolute bottom-0 left-0 w-20 h-20 bg-gradient-to-tr from-purple-500/20 to-pink-500/20 rounded-tr-full opacity-0 group-hover:opacity-100 transition-opacity duration-500\"></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\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, isDarkMode, 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 const sectionTitle = section?.title || '...';\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\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 // Intersection observer (fade-in effect)\r\n useEffect(() => {\r\n const fallbackTimer = setTimeout(() => {\r\n setPartnersVisible(true);\r\n }, 500);\r\n\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\r\n if (partnersRef.current) {\r\n observer.observe(partnersRef.current);\r\n } else {\r\n clearTimeout(fallbackTimer);\r\n setPartnersVisible(true);\r\n }\r\n\r\n return () => {\r\n clearTimeout(fallbackTimer);\r\n if (partnersRef.current) {\r\n observer.unobserve(partnersRef.current);\r\n }\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\">\r\n <p className={isDarkMode ? \"text-white\" : \"text-gray-800\"}>\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\">\r\n <p className=\"text-red-500\">{t(\"partners.error\") || error}</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 isDarkMode={isDarkMode}>\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\r\n className={`inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 border shadow-sm ${\r\n isDarkMode\r\n ? \"bg-blue-900/30 text-blue-300 border-blue-800\"\r\n : \"bg-blue-100 text-blue-800 border-blue-200\"\r\n }`}\r\n >\r\n 🤝 {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-8\">\r\n <div className=\"min-h-[220px]\">\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={{ zIndex: slideIndex === currentPartnerSlide ? 10 : 1 }}\r\n >\r\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-6 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 isDarkMode={isDarkMode}\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-2\" style={{ zIndex: 50 }}>\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-blue-500 scale-125 shadow-lg\"\r\n : isDarkMode\r\n ? \"bg-gray-600 hover:bg-blue-400\"\r\n : \"bg-gray-300 hover:bg-blue-500\"\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;\r\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\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: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.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 = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.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 = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.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 [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.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: \"M21.801 10A10 10 0 1 1 17 3.335\", key: \"yps3ct\" }],\n [\"path\", { d: \"m9 11 3 3L22 4\", key: \"1pflzl\" }]\n];\nconst CircleCheckBig = createLucideIcon(\"circle-check-big\", __iconNode);\n\nexport { __iconNode, CircleCheckBig as default };\n//# sourceMappingURL=circle-check-big.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 6v6l4 2\", key: \"mmk7yg\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }]\n];\nconst Clock = createLucideIcon(\"clock\", __iconNode);\n\nexport { __iconNode, Clock as default };\n//# sourceMappingURL=clock.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 = [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]];\nconst LoaderCircle = createLucideIcon(\"loader-circle\", __iconNode);\n\nexport { __iconNode, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.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: \"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\", key: \"132q7q\" }],\n [\"rect\", { x: \"2\", y: \"4\", width: \"20\", height: \"16\", rx: \"2\", key: \"izxlao\" }]\n];\nconst Mail = createLucideIcon(\"mail\", __iconNode);\n\nexport { __iconNode, Mail as default };\n//# sourceMappingURL=mail.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: \"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384\",\n key: \"9njp5v\"\n }\n ]\n];\nconst Phone = createLucideIcon(\"phone\", __iconNode);\n\nexport { __iconNode, Phone as default };\n//# sourceMappingURL=phone.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: \"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\",\n key: \"1ffxy3\"\n }\n ],\n [\"path\", { d: \"m21.854 2.147-10.94 10.939\", key: \"12cjpa\" }]\n];\nconst Send = createLucideIcon(\"send\", __iconNode);\n\nexport { __iconNode, Send as default };\n//# sourceMappingURL=send.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: \"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\", key: \"975kel\" }],\n [\"circle\", { cx: \"12\", cy: \"7\", r: \"4\", key: \"17ys0d\" }]\n];\nconst User = createLucideIcon(\"user\", __iconNode);\n\nexport { __iconNode, User as default };\n//# sourceMappingURL=user.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 } from 'react';\r\nimport { Send, Phone, Mail, MessageSquare, CheckCircle, AlertCircle, Loader2, User, Building, MessageCircle } from 'lucide-react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\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 // Safe state update\r\n setFormData(prev => ({\r\n ...prev,\r\n [name]: value || ''\r\n }));\r\n\r\n // Clear error when user starts typing\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 // Validate all required fields\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 // Clean and prepare data for API\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 // Call API safely\r\n let result;\r\n if (consultationRequestService?.create) {\r\n result = await consultationRequestService.create(cleanFormData);\r\n } else {\r\n // Fallback if service not available\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 // Reset form\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 = `w-full px-4 py-3 rounded-xl border transition-all duration-200 focus:ring-2 focus:ring-indigo-500/20 focus:outline-none ${\r\n isDarkMode\r\n ? 'bg-gray-700 border-gray-600 text-white placeholder-gray-400 focus:border-indigo-500'\r\n : 'bg-white border-slate-300 text-slate-900 placeholder-slate-500 focus:border-indigo-500'\r\n }`;\r\n\r\n const labelClasses = `block text-sm font-semibold mb-2 ${isDarkMode ? 'text-gray-300' : 'text-slate-700'}`;\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={`rounded-2xl p-8 shadow-lg border transition-colors duration-200 ${\r\n isDarkMode ? 'bg-gray-800 border-gray-700' : 'bg-white border-slate-200'\r\n }`}>\r\n <div className=\"flex items-center mb-6\">\r\n <div className=\"w-10 h-10 rounded-lg bg-gradient-to-r from-indigo-500 to-purple-600 flex items-center justify-center mr-4\">\r\n <Send size={20} className=\"text-white\" />\r\n </div>\r\n <div>\r\n <h2 className={`text-2xl font-bold transition-colors duration-200 ${isDarkMode ? 'text-white' : 'text-slate-800'}`}>\r\n {t('form.title') || 'Gửi yêu cầu tư vấn'}\r\n </h2>\r\n <p className={`text-sm transition-colors duration-200 ${isDarkMode ? 'text-gray-400' : 'text-slate-600'}`}>\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 ? isDarkMode\r\n ? 'bg-emerald-900/50 border-emerald-700 text-emerald-300'\r\n : 'bg-emerald-50 border-emerald-200 text-emerald-800'\r\n : isDarkMode\r\n ? 'bg-red-900/50 border-red-700 text-red-300'\r\n : 'bg-red-50 border-red-200 text-red-800'\r\n }`}>\r\n <div className=\"flex items-center\">\r\n {submitStatus === 'success' ? (\r\n <CheckCircle size={20} className=\"mr-2 flex-shrink-0\" />\r\n ) : (\r\n <AlertCircle size={20} className=\"mr-2 flex-shrink-0\" />\r\n )}\r\n <p className=\"text-sm 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={labelClasses}>\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} ${formErrors.fullName ? 'border-red-500' : ''}`}\r\n placeholder={t('contact.form.namePlaceholder')}\r\n required\r\n />\r\n {formErrors.fullName && (\r\n <p className=\"mt-1 text-sm text-red-500 flex items-center\">\r\n <AlertCircle size={14} className=\"mr-1\" />\r\n {formErrors.fullName}\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div>\r\n <label className={labelClasses}>\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} ${formErrors.workEmail ? 'border-red-500' : ''}`}\r\n placeholder=\"email@company.com\"\r\n required\r\n />\r\n {formErrors.workEmail && (\r\n <p className=\"mt-1 text-sm text-red-500 flex items-center\">\r\n <AlertCircle size={14} className=\"mr-1\" />\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={labelClasses}>\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} ${formErrors.phoneNumber ? 'border-red-500' : ''}`}\r\n placeholder=\"0901 234 567\"\r\n />\r\n {formErrors.phoneNumber && (\r\n <p className=\"mt-1 text-sm text-red-500 flex items-center\">\r\n <AlertCircle size={14} className=\"mr-1\" />\r\n {formErrors.phoneNumber}\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div>\r\n <label className={labelClasses}>\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} ${formErrors.companyName ? 'border-red-500' : ''}`}\r\n placeholder={t('contact.form.fields.company')}\r\n />\r\n {formErrors.companyName && (\r\n <p className=\"mt-1 text-sm text-red-500 flex items-center\">\r\n <AlertCircle size={14} className=\"mr-1\" />\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={labelClasses}>\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} ${formErrors.jobTitle ? 'border-red-500' : ''}`}\r\n placeholder={t('contact.form.positionPlaceholder')}\r\n />\r\n {formErrors.jobTitle && (\r\n <p className=\"mt-1 text-sm text-red-500 flex items-center\">\r\n <AlertCircle size={14} className=\"mr-1\" />\r\n {formErrors.jobTitle}\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div>\r\n <label className={labelClasses}>\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 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={labelClasses}>\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 placeholder={t('form.fields.expectedBudget')}\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className={labelClasses}>\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 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={labelClasses}>\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} ${formErrors.requestTitle ? 'border-red-500' : ''}`}\r\n placeholder={t('contact.form.placeholders.subject')}\r\n required\r\n />\r\n {formErrors.requestTitle && (\r\n <p className=\"mt-1 text-sm text-red-500 flex items-center\">\r\n <AlertCircle size={14} className=\"mr-1\" />\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={labelClasses}>\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 ${formErrors.requestDescription ? 'border-red-500' : ''}`}\r\n placeholder={t('contact.form.placeholders.message')}\r\n required\r\n />\r\n {formErrors.requestDescription && (\r\n <p className=\"mt-1 text-sm text-red-500 flex items-center\">\r\n <AlertCircle size={14} className=\"mr-1\" />\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 bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-4 px-6 rounded-xl hover:from-indigo-700 hover:to-purple-700 transition-all transform hover:scale-105 disabled:opacity-50 disabled:cursor-not-allowed disabled:transform-none flex items-center justify-center font-semibold shadow-lg\"\r\n >\r\n {isSubmitting ? (\r\n <>\r\n <Loader2 className=\"animate-spin h-5 w-5 mr-2\" />\r\n {t('form.submitting') || 'Đang gửi...'}\r\n </>\r\n ) : (\r\n <>\r\n <Send size={20} className=\"mr-2\" />\r\n {t('form.submit') || 'Gửi yêu cầu'}\r\n </>\r\n )}\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`px-6 py-4 rounded-xl border-2 font-semibold transition-all hover:scale-105 ${\r\n isDarkMode\r\n ? 'border-gray-600 text-gray-300 hover:bg-gray-700'\r\n : 'border-slate-300 text-slate-700 hover:bg-slate-50'\r\n }`}\r\n >\r\n <Phone size={20} className=\"inline mr-2\" />\r\n {t('form.callNow') || 'Gọi ngay'}\r\n </button>\r\n </div>\r\n\r\n {/* Privacy Notice */}\r\n <div className={`flex items-center space-x-2 text-sm transition-colors duration-200 ${isDarkMode ? 'text-gray-400' : 'text-slate-600'}`}>\r\n <CheckCircle size={16} className=\"text-emerald-500\" />\r\n <span>{t('form.privacy') || 'Cam kết bảo mật thông tin và phản hồi trong 24 giờ'}</span>\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 { Phone, Mail, MapPin, Clock, User, Send, MessageSquare, CheckCircle, AlertCircle, Loader2, Building, MessageCircle } from 'lucide-react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n// Enhanced ContactInfoSection Component\r\nconst ContactInfoSection = ({ data, t, isDarkMode, section }) => {\r\n const contactData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data) // loại bỏ item null hoặc data null\r\n ?.map((item) => item.data) // chỉ lấy data hợp lệ\r\n || [];\r\n const sectionTitle = section?.title || '...';\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 <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 ${isDarkMode ? 'bg-indigo-900/50 text-indigo-300' : 'bg-indigo-50 text-indigo-700'\r\n }`}>\r\n <User size={22} className=\"mr-2\" />\r\n {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n <div className=\"grid md:grid-cols-2 lg:grid-cols-3 gap-8\">\r\n {contactData.map((contact, index) => (\r\n <div\r\n key={contact.id || index}\r\n className={`rounded-2xl p-8 shadow-lg transition-all duration-300 hover:shadow-xl hover:-translate-y-1 border ${isDarkMode ? 'bg-gray-800 border-gray-700' : 'bg-white border-slate-200'\r\n }`}\r\n >\r\n <div className=\"text-center mb-6\">\r\n <div className=\"w-20 h-20 rounded-full mx-auto mb-4 flex items-center justify-center text-2xl font-bold text-white bg-gradient-to-br from-indigo-500 to-purple-600\">\r\n {contact.name?.charAt(0) || 'A'}\r\n </div>\r\n\r\n <h3 className={`text-xl font-bold mb-2 ${isDarkMode ? 'text-white' : 'text-slate-800'}`}>\r\n {contact.name}\r\n </h3>\r\n\r\n <span className={`inline-block px-3 py-1 rounded-full text-sm font-semibold ${isDarkMode ? 'bg-indigo-900/50 text-indigo-300' : 'bg-indigo-50 text-indigo-700'\r\n }`}>\r\n {contact.position}\r\n </span>\r\n </div>\r\n\r\n <div className=\"space-y-4\">\r\n <a\r\n href={`tel:${contact.phone}`}\r\n className={`flex items-center p-3 rounded-xl transition-all hover:scale-105 ${isDarkMode ? 'bg-gray-700 hover:bg-gray-600' : 'bg-slate-50 hover:bg-slate-100'\r\n } group`}\r\n >\r\n <div className={`w-10 h-10 rounded-lg flex items-center justify-center mr-3 group-hover:scale-110 transition-transform ${isDarkMode ? 'bg-green-900/50 text-green-400' : 'bg-green-50 text-green-600'\r\n }`}>\r\n <Phone size={18} />\r\n </div>\r\n <div className=\"flex-1\">\r\n <p className={`text-sm font-medium ${isDarkMode ? 'text-gray-400' : 'text-slate-500'}`}>\r\n {t('contact.info.phone') || 'Điện thoại'}\r\n </p>\r\n <p className={`font-semibold ${isDarkMode ? 'text-white' : 'text-slate-800'}`}>\r\n {contact.phone}\r\n </p>\r\n </div>\r\n </a>\r\n\r\n <a\r\n href={`mailto:${contact.email}`}\r\n className={`flex items-center p-3 rounded-xl transition-all hover:scale-105 ${isDarkMode ? 'bg-gray-700 hover:bg-gray-600' : 'bg-slate-50 hover:bg-slate-100'\r\n } group`}\r\n >\r\n <div className={`w-10 h-10 rounded-lg flex items-center justify-center mr-3 group-hover:scale-110 transition-transform ${isDarkMode ? 'bg-indigo-900/50 text-indigo-400' : 'bg-indigo-50 text-indigo-600'\r\n }`}>\r\n <Mail size={18} />\r\n </div>\r\n <div className=\"flex-1\">\r\n <p className={`text-sm font-medium ${isDarkMode ? 'text-gray-400' : 'text-slate-500'}`}>\r\n Email\r\n </p>\r\n <p className={`font-semibold ${isDarkMode ? 'text-white' : 'text-slate-800'}`}>\r\n {contact.email}\r\n </p>\r\n </div>\r\n </a>\r\n\r\n {contact.workingHours && (\r\n <div className={`flex items-center p-3 rounded-xl ${isDarkMode ? 'bg-gray-700' : 'bg-slate-50'\r\n }`}>\r\n <div className={`w-10 h-10 rounded-lg flex items-center justify-center mr-3 ${isDarkMode ? 'bg-purple-900/50 text-purple-400' : 'bg-purple-50 text-purple-600'\r\n }`}>\r\n <Clock size={18} />\r\n </div>\r\n <div className=\"flex-1\">\r\n <p className={`text-sm font-medium ${isDarkMode ? 'text-gray-400' : 'text-slate-500'}`}>\r\n {t('contact.info.workingHours') || 'Giờ làm việc'}\r\n </p>\r\n <p className={`font-semibold ${isDarkMode ? 'text-white' : 'text-slate-800'}`}>\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\r\n <div className=\"mt-6\">\r\n <button className=\"w-full py-3 px-4 rounded-xl font-semibold transition-all transform hover:scale-105 bg-gradient-to-r from-indigo-600 to-purple-600 hover:from-indigo-700 hover:to-purple-700 text-white shadow-lg\">\r\n {t('contact.buttons.contactNow') || 'Liên hệ ngay'}\r\n </button>\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\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 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\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 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-500' : 'border-gray-300 border-t-blue-500'} rounded-full animate-spin`}></div>\r\n <p className={`mt-4 ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\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 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={`${isDarkMode ? 'text-red-400' : 'text-red-500'} text-base mb-2`}>\r\n ⚠️ {t('contactList.error.title') || 'Lỗi tải dữ liệu'}\r\n </div>\r\n <p className={`${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>{error}</p>\r\n </div>\r\n );\r\n }\r\n\r\n if (!contacts || contacts.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-5\">📞</div>\r\n <h3 className={`${isDarkMode ? 'text-gray-400' : 'text-gray-600'} 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={`${isDarkMode ? 'text-gray-500' : 'text-gray-500'}`}>\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 return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-6xl mx-auto px-5\">\r\n <div className=\"text-center mb-16\">\r\n <h2 className={`text-4xl font-bold ${isDarkMode ? 'text-white' : 'text-gray-900'} mb-4`}>\r\n {sectionTitle}\r\n </h2>\r\n </div>\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8 mt-10\">\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 const [isHovered, setIsHovered] = useState(false);\r\n\r\n return (\r\n <div\r\n className={`\r\n ${isDarkMode ? 'bg-gray-800 border-gray-700' : 'bg-white border-gray-200'} rounded-2xl p-8 border cursor-pointer transition-all duration-300\r\n ${isHovered\r\n ? `shadow-xl ${isDarkMode ? 'shadow-gray-900/40' : 'shadow-gray-500/20'} -translate-y-2`\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 className=\"flex items-center mb-6\">\r\n <div className={`w-15 h-15 rounded-full ${isDarkMode ? 'bg-blue-600' : 'bg-blue-500'} flex items-center justify-center text-white text-2xl font-bold mr-4`}>\r\n {contact.name?.charAt(0)?.toUpperCase() || '?'}\r\n </div>\r\n <div>\r\n <h3 className={`text-xl font-semibold ${isDarkMode ? 'text-white' : 'text-gray-900'} mb-1`}>\r\n {contact.name || t('contactList.card.noName') || 'Không có tên'}\r\n </h3>\r\n <p className={`text-base ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n {contact.position || t('contactList.card.noPosition') || 'Chưa có chức vụ'}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <ContactInfo\r\n icon=\"📧\"\r\n label={t('contactList.card.email') || 'Email'}\r\n value={contact.email}\r\n href={`mailto:${contact.email}`}\r\n />\r\n <ContactInfo\r\n icon=\"📱\"\r\n label={t('contactList.card.phone') || 'Điện thoại'}\r\n value={contact.phone}\r\n href={`tel:${contact.phone}`}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst ContactInfo = ({ icon, label, value, href,isDarkMode }) => {\r\n\r\n if (!value) return null;\r\n\r\n const content = (\r\n <div className={`flex items-center py-3 border-b ${isDarkMode ? 'border-gray-600' : 'border-gray-100'} last:border-b-0`}>\r\n <span className=\"text-lg mr-3 w-6 text-center\">\r\n {icon}\r\n </span>\r\n <div className=\"flex-1\">\r\n <div className={`text-sm ${isDarkMode ? 'text-gray-400' : 'text-gray-600'} mb-0.5`}>\r\n {label}\r\n </div>\r\n <div className={`text-base font-medium ${href\r\n ? `${isDarkMode ? 'text-blue-400 hover:text-blue-300' : 'text-blue-500 hover:text-blue-600'}`\r\n : `${isDarkMode ? 'text-white' : 'text-gray-900'}`\r\n } transition-colors duration-200`}>\r\n {value}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n\r\n if (href) {\r\n return (\r\n <a href={href} className={`no-underline text-inherit block ${isDarkMode ? 'hover:bg-gray-700/50' : 'hover:bg-gray-50'} rounded-lg -mx-2 px-2 transition-colors duration-200`}>\r\n {content}\r\n </a>\r\n );\r\n }\r\n\r\n return <div className=\"-mx-2 px-2\">{content}</div>;\r\n};\r\n\r\nexport default ContactListAutoSection;","import React, { useState, useEffect } from \"react\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\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={`inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 ${isDarkMode\r\n ? \"bg-indigo-900/50 text-indigo-300 border border-indigo-800\"\r\n : \"bg-indigo-100 text-indigo-800\"\r\n }`}\r\n >\r\n 💬 {sectionTitle}\r\n </div>\r\n\r\n <div className=\"relative\">\r\n <div\r\n key={currentIndex}\r\n className={`p-6 rounded-2xl transition-all duration-500 transform ${isDarkMode\r\n ? \"bg-gray-800/80 backdrop-blur-sm border border-gray-700\"\r\n : \"bg-white shadow-lg\"\r\n }`}\r\n >\r\n <blockquote\r\n className={`text-lg lg:text-xl italic mb-6 animate-fadeIn transition-colors duration-200 leading-relaxed ${isDarkMode ? \"text-gray-300\" : \"text-gray-700\"\r\n }`}\r\n >\r\n \"{currentFeedback.content}\"\r\n </blockquote>\r\n\r\n <div className=\"flex items-center justify-center space-x-4 animate-fadeIn\">\r\n <div className=\"text-3xl\">👤</div>\r\n <div className=\"text-left\">\r\n <div\r\n className={`font-bold text-base transition-colors duration-200 ${isDarkMode ? \"text-white\" : \"text-gray-900\"\r\n }`}\r\n >\r\n {currentFeedback.customerName}\r\n </div>\r\n <div className=\"text-blue-600 font-medium text-sm\">\r\n {currentFeedback.customerTitle}\r\n </div>\r\n {currentFeedback.customerCompany && (\r\n <div\r\n className={`text-xs transition-colors duration-200 ${isDarkMode ? \"text-gray-400\" : \"text-gray-600\"\r\n }`}\r\n >\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 className={`w-2.5 h-2.5 rounded-full transition-all duration-300 ${index === currentIndex\r\n ? \"bg-blue-600\"\r\n : isDarkMode\r\n ? \"bg-gray-600 hover:bg-gray-500\"\r\n : \"bg-gray-300 hover:bg-gray-400\"\r\n }`}\r\n aria-label={t(\"customerFeedback.switchToFeedback\", { number: index + 1 }) || `Chuyển đến phản hồi ${index + 1}`}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\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\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 style={{ maxWidth: '1200px', margin: '0 auto' }}>\r\n {title && (\r\n <h2 style={{\r\n fontSize: '36px',\r\n fontWeight: '700',\r\n color: isDarkMode ? '#ffffff' : '#000000',\r\n marginBottom: '16px',\r\n lineHeight: '1.2',\r\n textAlign: 'left',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\r\n }}>\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 style={{\r\n fontSize: '16px',\r\n lineHeight: '1.6',\r\n color: isDarkMode ? '#9ca3af' : '#6b7280',\r\n textAlign: 'left',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\r\n fontWeight: '400',\r\n marginBottom: index < descriptions.length - 1 ? '16px' : '0',\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\nconst TextSection = ({ data, isDarkMode }) => {\r\n const textItems = data?.sectionDataBindingItems || [];\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div style={{ maxWidth: '800px', margin: '0 auto' }}>\r\n {textItems.map((item, index) => (\r\n <div\r\n key={item.id || index}\r\n style={{\r\n padding: '0',\r\n marginBottom: '20px',\r\n fontSize: '28px',\r\n fontWeight: '700',\r\n lineHeight: '1.3',\r\n color: isDarkMode ? '#f9fafb' : '#111827',\r\n textAlign: 'left',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\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 TextSection;","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 // 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 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 getColorClasses = (index) => {\r\n const isCyan = index % 2 === 0;\r\n if (isCyan) {\r\n return {\r\n border: 'border-cyan-400/40',\r\n bg: 'bg-gradient-to-r from-blue-900/90 to-cyan-900/90',\r\n glow: 'shadow-cyan-500/20',\r\n hoverGlow: 'hover:shadow-cyan-400/50',\r\n line: '#22d3ee',\r\n iconBg: 'bg-cyan-500/20'\r\n };\r\n }\r\n return {\r\n border: 'border-purple-400/40',\r\n bg: 'bg-gradient-to-r from-purple-900/90 to-pink-900/90',\r\n glow: 'shadow-purple-500/20',\r\n hoverGlow: 'hover:shadow-purple-400/50',\r\n line: '#c084fc',\r\n iconBg: 'bg-purple-500/20'\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 ${isDarkMode ? 'bg-gradient-to-br from-slate-900 via-blue-950 to-purple-950' : 'bg-gradient-to-br from-blue-50 via-indigo-50 to-purple-50'} p-4 relative overflow-hidden`}>\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 ${isDarkMode ? 'bg-blue-400' : 'bg-blue-600'} rounded-full opacity-20`}\r\n style={{\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 ${isDarkMode ? 'bg-gradient-to-br from-blue-900/90 via-blue-700/90 to-cyan-600/90' : 'bg-gradient-to-br from-blue-600 via-indigo-600 to-cyan-500'} backdrop-blur-md rounded-2xl border-2 ${isDarkMode ? 'border-cyan-400/40' : 'border-white/40'} p-6 shadow-2xl text-center`}>\r\n <h2 className=\"text-2xl font-bold text-white mb-1 tracking-wide\">{diagramName}</h2>\r\n <p className=\"text-lg text-white/90\">{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 = getColorClasses(index);\r\n \r\n return (\r\n <a\r\n key={module.id}\r\n href={module.url || '#'}\r\n className={`block ${colors.bg} backdrop-blur-md rounded-2xl border-2 ${colors.border} p-4 flex items-center gap-3 shadow-lg active:scale-95 transition-all duration-200`}\r\n style={{\r\n animation: `slideUp 0.5s ease-out ${index * 0.1}s both`\r\n }}\r\n >\r\n <div className={`flex-shrink-0 ${colors.iconBg} p-3 rounded-xl ${colors.border} border`}>\r\n <Icon className=\"w-6 h-6 text-white\" strokeWidth={2} />\r\n </div>\r\n <div className=\"flex-1\">\r\n <span className=\"block text-white font-semibold text-sm tracking-wide mb-1\">\r\n {module.name}\r\n </span>\r\n {module.description && (\r\n <span className=\"block text-white/70 text-xs\">\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={`w-full ${isDarkMode ? 'bg-gradient-to-br from-slate-900 via-blue-950 to-purple-950' : 'bg-gradient-to-br from-blue-50 via-indigo-50 to-purple-50'} py-12 px-4 sm:px-8 relative overflow-hidden transition-colors duration-300`}>\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 ${isDarkMode ? 'bg-blue-400' : 'bg-blue-600'} rounded-full ${isDarkMode ? 'opacity-20' : 'opacity-10'}`}\r\n style={{\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 className={`absolute inset-0 ${isDarkMode ? 'opacity-10' : 'opacity-5'}`}>\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 d=\"M 40 0 L 0 0 0 40\" fill=\"none\" stroke={isDarkMode ? \"cyan\" : \"blue\"} strokeWidth=\"0.5\"/>\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 ${isDarkMode ? 'opacity-30' : 'opacity-20'}`}>\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=\"#22d3ee\" opacity=\"0.6\" className=\"animate-pulse\" />\r\n <circle cx=\"35%\" cy=\"40%\" r=\"3\" fill=\"#c084fc\" opacity=\"0.6\" className=\"animate-pulse\" style={{ animationDelay: '0.5s' }} />\r\n <circle cx=\"65%\" cy=\"60%\" r=\"3\" fill=\"#22d3ee\" opacity=\"0.6\" className=\"animate-pulse\" style={{ animationDelay: '1s' }} />\r\n <circle cx=\"85%\" cy=\"80%\" r=\"3\" fill=\"#c084fc\" 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: '#22d3ee', stopOpacity: 0 }} />\r\n <stop offset=\"50%\" style={{ stopColor: '#22d3ee', stopOpacity: 1 }} />\r\n <stop offset=\"100%\" style={{ stopColor: '#22d3ee', 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: '#c084fc', stopOpacity: 0 }} />\r\n <stop offset=\"50%\" style={{ stopColor: '#c084fc', stopOpacity: 1 }} />\r\n <stop offset=\"100%\" style={{ stopColor: '#c084fc', 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-[700px] flex items-center justify-center transition-transform duration-300\">\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 className=\"absolute inset-0 rounded-full border-2 border-cyan-500/30 animate-pulse-ring\"></div>\r\n <div className=\"absolute inset-4 rounded-full border-2 border-purple-500/30 animate-pulse-ring\" style={{ animationDelay: '0.5s' }}></div>\r\n </div>\r\n\r\n <div className=\"relative animate-float\">\r\n <div className={`w-64 h-64 rounded-full border-8 ${isDarkMode ? 'border-slate-600/50 bg-gradient-to-br from-slate-800/50 to-slate-900/50' : 'border-gray-300/50 bg-gradient-to-br from-white/50 to-gray-100/50'} flex items-center justify-center backdrop-blur-sm shadow-2xl`}>\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 bg-cyan-400 rounded-full shadow-lg shadow-cyan-400/50\"\r\n style={{\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 className={`w-52 h-52 rounded-full ${isDarkMode ? 'bg-gradient-to-br from-blue-900/90 via-blue-700/90 to-cyan-600/90 border-cyan-400/40' : 'bg-gradient-to-br from-blue-600 via-indigo-600 to-cyan-500 border-white/40'} flex items-center justify-center shadow-2xl relative overflow-hidden border-2 backdrop-blur-md`}>\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-2xl font-bold text-white mb-2 tracking-wide\">{diagramName}</h2>\r\n <p className=\"text-sm text-white/90\">{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 ${isDarkMode ? 'bg-slate-400 border-slate-600' : 'bg-gray-400 border-gray-600'} rounded-full border-2 shadow-lg animate-pulse`}\r\n style={{\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 = getColorClasses(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 = getColorClasses(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 className={`\r\n ${colors.bg} backdrop-blur-md rounded-full \r\n border-2 ${colors.border} ${colors.glow}\r\n px-5 py-3 flex items-center gap-3\r\n shadow-xl ${colors.hoverGlow}\r\n transition-all duration-300\r\n group-hover:scale-110 group-hover:-translate-y-3 group-hover:shadow-2xl\r\n cursor-pointer\r\n relative\r\n ${isRightSide ? 'flex-row-reverse' : 'flex-row'}\r\n `}\r\n style={{\r\n boxShadow: '0 10px 40px rgba(0, 0, 0, 0.3)',\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 className={`absolute inset-0 rounded-full border-2 ${colors.border} opacity-0 group-hover:opacity-100 transition-all duration-300 scale-110 blur-sm`}></div>\r\n \r\n <div className={`flex-shrink-0 ${colors.iconBg} p-2.5 rounded-lg ${colors.border} border transition-all duration-300 group-hover:rotate-12 group-hover:scale-125 relative z-10`}>\r\n <Icon className=\"w-5 h-5 text-white\" strokeWidth={2} />\r\n </div>\r\n \r\n <span className={`flex-1 text-white font-semibold text-sm 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 className={`absolute bottom-full left-1/2 -translate-x-1/2 mb-3 px-4 py-2 ${isDarkMode ? 'bg-slate-800 border-slate-600' : 'bg-white border-gray-300'} ${isDarkMode ? 'text-white' : 'text-gray-800'} text-sm 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`}>\r\n <div className=\"font-semibold\">{module.name}</div>\r\n {module.description && (\r\n <div className={`text-xs mt-1 ${isDarkMode ? 'text-gray-300' : 'text-gray-600'}`}>{module.description}</div>\r\n )}\r\n <div className={`absolute top-full left-1/2 -translate-x-1/2 -mt-px border-4 border-transparent ${isDarkMode ? 'border-t-slate-800' : 'border-t-white'}`}></div>\r\n </div>\r\n </div>\r\n </a>\r\n );\r\n })}\r\n\r\n {/* Decorative elements */}\r\n <div className=\"absolute bottom-12 right-12 sm:bottom-16 sm:right-20\" style={{ animation: 'rotate 10s linear infinite' }}>\r\n <svg width=\"80\" height=\"80\" viewBox=\"0 0 60 60\" className={`${isDarkMode ? 'text-purple-300' : 'text-purple-400'} opacity-40`}>\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 className=\"absolute top-12 left-12 w-16 h-16 border-2 border-cyan-400/30 rounded-lg animate-pulse\" style={{ animation: 'rotate 8s linear infinite reverse' }}></div>\r\n <div className=\"absolute top-20 right-16 w-12 h-12 border-2 border-purple-400/30 rounded-full animate-pulse\"></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 }) => {\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 colorClasses = {\r\n blue: 'bg-gradient-to-br from-blue-600 to-blue-700 hover:from-blue-500 hover:to-blue-600 border-blue-400/50 shadow-blue-500/30',\r\n teal: 'bg-gradient-to-br from-teal-600 to-teal-700 hover:from-teal-500 hover:to-teal-600 border-teal-400/50 shadow-teal-500/30',\r\n purple: 'bg-gradient-to-br from-purple-600 to-purple-700 hover:from-purple-500 hover:to-purple-600 border-purple-400/50 shadow-purple-500/30',\r\n orange: 'bg-gradient-to-br from-orange-500 to-orange-600 hover:from-orange-400 hover:to-orange-500 border-orange-300/50 shadow-orange-500/30',\r\n cyan: 'bg-gradient-to-br from-cyan-600 to-cyan-700 hover:from-cyan-500 hover:to-cyan-600 border-cyan-400/50 shadow-cyan-500/30',\r\n indigo: 'bg-gradient-to-br from-indigo-600 to-indigo-700 hover:from-indigo-500 hover:to-indigo-600 border-indigo-400/50 shadow-indigo-500/30'\r\n };\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 className={`${colorClasses[color]} 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 ${isHovered || isDragging ? 'scale-110 shadow-2xl brightness-110' : ''} ${isDragging ? 'rotate-2' : ''}`}>\r\n <Icon className=\"w-4 h-4 text-white flex-shrink-0\" />\r\n <span className=\"text-white font-medium whitespace-nowrap text-xs sm:text-sm\">{text}</span>\r\n </div>\r\n {isDragging && (\r\n <div className=\"absolute inset-0 bg-white/10 rounded-2xl blur-xl animate-pulse\" style={{ transform: 'scale(1.5)' }} />\r\n )}\r\n {(isHovered || isDragging) && description && (\r\n <div className=\"absolute top-full left-1/2 -translate-x-1/2 mt-2 px-3 py-2 bg-slate-900/95 text-white text-xs rounded-lg shadow-xl border border-slate-700 whitespace-nowrap z-50 max-w-xs\">\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 // 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 diagramData = data?.sectionDataBindingItems?.[0]?.data;\r\n\r\n // Icon mapping\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 // Color mapping based on index\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 // Initialize nodes from API data\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 // Calculate positions in a more organic layout\r\n const generatedNodes = children.map((child, index) => {\r\n // Distribute nodes in clusters around the center\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 // Add some randomness for organic feel\r\n x += (Math.random() - 0.5) * 10;\r\n y += (Math.random() - 0.5) * 10;\r\n \r\n // Keep within bounds\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 ${isDarkMode ? 'bg-gradient-to-br from-slate-950 via-indigo-950 to-purple-950' : 'bg-gradient-to-br from-blue-50 via-indigo-50 to-purple-50'} overflow-hidden transition-colors duration-300`}\r\n style={{ touchAction: 'none' }}\r\n >\r\n <div className={`absolute inset-0 ${isDarkMode ? 'opacity-30' : 'opacity-20'}`}>\r\n <div className={`absolute inset-0 ${isDarkMode ? 'bg-gradient-to-tr from-blue-600/20 via-purple-600/20 to-pink-600/20' : 'bg-gradient-to-tr from-blue-400/20 via-purple-400/20 to-pink-400/20'}`} />\r\n <div className=\"absolute inset-0 bg-[radial-gradient(ellipse_at_top_right,_var(--tw-gradient-stops))] from-cyan-500/10 via-transparent to-transparent\" />\r\n <div className=\"absolute inset-0 bg-[radial-gradient(ellipse_at_bottom_left,_var(--tw-gradient-stops))] from-purple-500/10 via-transparent to-transparent\" />\r\n </div>\r\n\r\n <div className={`absolute inset-0 pointer-events-none ${isDarkMode ? 'opacity-60' : 'opacity-40'}`}>\r\n {[...Array(150)].map((_, i) => (\r\n <div\r\n key={i}\r\n className=\"absolute rounded-full animate-twinkle\"\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 background: isDarkMode ? ['#60a5fa', '#818cf8', '#a78bfa', '#c084fc', '#e879f9'][Math.floor(Math.random() * 5)] : ['#3b82f6', '#6366f1', '#8b5cf6', '#a855f7', '#d946ef'][Math.floor(Math.random() * 5)],\r\n animationDelay: `${Math.random() * 5}s`,\r\n animationDuration: `${4 + Math.random() * 6}s`\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n <div className={`absolute inset-0 ${isDarkMode ? 'opacity-10' : 'opacity-5'} pointer-events-none`}>\r\n <div className=\"absolute inset-0\" style={{\r\n backgroundImage: `radial-gradient(circle at 1px 1px, ${isDarkMode ? 'rgba(255,255,255,0.15)' : 'rgba(0,0,0,0.1)'} 1px, transparent 0)`,\r\n backgroundSize: '40px 40px'\r\n }} />\r\n </div>\r\n\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 className=\"absolute inset-0 bg-gradient-to-r from-blue-500/20 to-purple-500/20 blur-3xl w-20 h-20 sm:w-32 sm:h-32\" />\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 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%\" stopColor=\"#60a5fa\" stopOpacity=\"0.6\" />\r\n <stop offset=\"50%\" stopColor=\"#a78bfa\" stopOpacity=\"0.9\" />\r\n <stop offset=\"100%\" stopColor=\"#c084fc\" 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%\" stopColor=\"#60a5fa\" />\r\n <stop offset=\"50%\" stopColor=\"#a78bfa\" />\r\n <stop offset=\"100%\" stopColor=\"#c084fc\" />\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=\"rgba(167, 139, 250, 0.2)\"\r\n strokeWidth=\"6\"\r\n fill=\"none\"\r\n className=\"transition-all duration-200\"\r\n style={{ filter: 'blur(8px)' }}\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 <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 />\r\n ))}\r\n </div>\r\n\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 className=\"absolute inset-0 bg-indigo-400/30 rounded-full blur-2xl\" style={{ transform: 'scale(1.5)' }} />\r\n \r\n <div className={`relative bg-gradient-to-br from-indigo-500 via-blue-500 to-cyan-500 px-6 sm:px-10 py-3 sm:py-5 rounded-3xl shadow-2xl border-4 border-indigo-300/50 flex items-center gap-3 sm:gap-4 transition-transform backdrop-blur-md ${isDragging ? 'scale-110' : ''}`}>\r\n <div className=\"bg-white/25 p-2 sm:p-3 rounded-xl backdrop-blur-sm\">\r\n <Briefcase className=\"w-5 h-5 sm:w-7 sm:h-7 text-white\" />\r\n </div>\r\n <div className=\"text-center\">\r\n <h1 className=\"text-white font-bold text-sm sm:text-xl leading-tight tracking-wide\">{diagramName}</h1>\r\n {diagramDescription && (\r\n <h2 className=\"text-white/90 font-medium text-xs sm:text-base leading-tight\">{diagramDescription}</h2>\r\n )}\r\n </div>\r\n </div>\r\n \r\n {!isDragging && (\r\n <div className={`absolute -bottom-8 left-1/2 transform -translate-x-1/2 ${isDarkMode ? 'text-indigo-300/60' : 'text-indigo-600/60'} text-xs whitespace-nowrap`}>\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 .animate-twinkle { animation: twinkle 5s ease-in-out infinite; }\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\nconst FaqItem = ({ faq, index, isActive, onToggle, isDarkMode, 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\r\n className={`\r\n rounded-xl border transition-all duration-500 ease-out transform\r\n ${isDarkMode \r\n ? 'bg-gradient-to-br from-gray-800 to-gray-800/50 border-gray-700/50' \r\n : 'bg-white border-gray-200'\r\n }\r\n ${isActive \r\n ? `scale-[1.02] ${isDarkMode \r\n ? 'shadow-2xl shadow-blue-500/20 border-blue-500/30' \r\n : 'shadow-xl shadow-blue-100 border-blue-200'\r\n }`\r\n : 'shadow-md hover:shadow-lg'\r\n }\r\n hover:scale-[1.01]\r\n `}\r\n >\r\n {/* Question Button */}\r\n <button\r\n onClick={onToggle}\r\n className={`\r\n w-full px-6 py-5 text-left flex items-start justify-between gap-4\r\n transition-all duration-300\r\n ${isDarkMode \r\n ? 'hover:bg-gray-700/30' \r\n : 'hover:bg-gray-50/50'\r\n }\r\n rounded-xl\r\n group\r\n `}\r\n >\r\n <span className={`\r\n text-lg font-semibold flex-1 transition-colors duration-300\r\n ${isActive \r\n ? isDarkMode ? 'text-blue-400' : 'text-blue-600'\r\n : isDarkMode ? 'text-white group-hover:text-blue-300' : 'text-gray-900 group-hover:text-blue-600'\r\n }\r\n `}>\r\n {faq.question}\r\n </span>\r\n \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 ${isDarkMode ? 'shadow-blue-500/50' : 'shadow-blue-300'} rotate-180 scale-110` \r\n : `${isDarkMode \r\n ? 'bg-gray-700/50 text-gray-400 group-hover:bg-gray-600' \r\n : 'bg-gray-100 text-gray-500 group-hover:bg-gray-200'\r\n } group-hover:scale-110`\r\n }\r\n `}>\r\n <ChevronDown className={`w-5 h-5 transition-transform duration-500 ${isActive ? 'rotate-180' : ''}`} />\r\n </span>\r\n </button>\r\n\r\n {/* Answer - Collapsible with Smooth Animation */}\r\n <div\r\n className={`\r\n overflow-hidden transition-all duration-500 ease-in-out\r\n ${isActive ? 'max-h-[500px] opacity-100' : 'max-h-0 opacity-0'}\r\n `}\r\n >\r\n <div className={`\r\n px-6 pb-6 pt-2\r\n ${isDarkMode ? 'text-gray-300' : 'text-gray-600'}\r\n transition-all duration-500\r\n ${isActive ? 'translate-y-0' : '-translate-y-4'}\r\n `}>\r\n {/* Decorative Line */}\r\n <div className={`h-px w-full mb-4 ${isDarkMode ? 'bg-gradient-to-r from-transparent via-gray-700 to-transparent' : 'bg-gradient-to-r from-transparent via-gray-200 to-transparent'}`}></div>\r\n \r\n <div className={`prose prose-sm max-w-none leading-relaxed ${isDarkMode ? 'prose-invert' : ''}`}>\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={`\r\n inline-flex items-center gap-2 mt-5 px-4 py-2 rounded-lg text-sm font-medium\r\n transition-all duration-300 transform hover:scale-105\r\n ${isDarkMode \r\n ? 'text-blue-400 hover:text-blue-300 bg-blue-500/10 hover:bg-blue-500/20' \r\n : 'text-blue-600 hover:text-blue-700 bg-blue-50 hover:bg-blue-100'\r\n }\r\n group/link\r\n `}\r\n >\r\n {t?.('faq.learn_more') || 'Learn more'}\r\n <svg className=\"w-4 h-4 transition-transform duration-300 group-hover/link:translate-x-1\" 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 const sectionTitle = section?.title || '...';\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 className={`\r\n w-10 h-10 rounded-lg flex items-center justify-center\r\n ${isDarkMode \r\n ? 'bg-gradient-to-br from-blue-500 to-purple-600 shadow-lg shadow-blue-500/20' \r\n : 'bg-gradient-to-br from-blue-600 to-indigo-600 shadow-lg shadow-blue-200'\r\n }\r\n transform hover:scale-110 transition-all duration-300\r\n `}>\r\n <svg \r\n className=\"w-6 h-6 text-white\" \r\n fill=\"currentColor\" \r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n {/* Header with Animation */}\r\n <div className=\"text-center mb-12 animate-fade-in\">\r\n <h2 className={`text-4xl font-bold mb-3 ${isDarkMode ? 'text-white' : 'text-gray-900'}`}>\r\n {sectionTitle}\r\n </h2>\r\n <div className={`h-1 w-20 mx-auto rounded-full ${isDarkMode ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-600 to-indigo-600'}`}></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 isDarkMode={isDarkMode}\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\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\r\n .animate-fade-in {\r\n animation: fade-in 0.8s ease-out;\r\n }\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 'from-blue-600 to-purple-600',\r\n 'from-purple-600 to-pink-600',\r\n 'from-blue-500 to-purple-500',\r\n 'from-purple-500 to-pink-500',\r\n 'from-emerald-600 to-teal-600',\r\n 'from-orange-500 to-red-500'\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 ${isDarkMode ? \"text-white\" : \"text-gray-900\"}`}>\r\n {t('highlight.noData.title') || 'Chưa có dữ liệu'}\r\n </h3>\r\n <p className={`${isDarkMode ? \"text-gray-300\" : \"text-gray-600\"}`}>\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 className={`relative overflow-hidden ${isDarkMode ? 'bg-gradient-to-br from-slate-950 via-slate-900 to-slate-950' : 'bg-gradient-to-br from-white via-blue-50/30 to-purple-50/30'}`}>\r\n {/* Animated mesh background */}\r\n <div className=\"absolute inset-0 overflow-hidden pointer-events-none opacity-30\">\r\n <div className={`absolute top-0 left-0 w-full h-full ${isDarkMode ? 'bg-grid-white' : 'bg-grid-slate'}`}></div>\r\n </div>\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 ${isDarkMode ? 'bg-blue-500' : 'bg-blue-400'\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 ${isDarkMode ? 'bg-purple-500' : 'bg-purple-400'\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 ${isDarkMode ? 'bg-pink-500' : 'bg-pink-400'\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 min-h-[420px] lg:h-auto\">\r\n {/* Image Column */}\r\n <div className=\"relative h-[280px] lg:h-full overflow-hidden group\">\r\n <img\r\n src={item.image || defaultImage}\r\n alt={item.title}\r\n className=\"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 */}\r\n <div className=\"p-5 lg:p-8 flex flex-col justify-center\">\r\n <h1\r\n className={`text-3xl lg:text-4xl font-black mb-3 bg-gradient-to-r ${color} bg-clip-text text-transparent`}\r\n >\r\n {item.title}\r\n </h1>\r\n\r\n <p className=\"text-description mb-6\">\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\">\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-to-r ${color} flex items-center justify-center flex-shrink-0`}>\r\n <svg className=\"w-2.5 h-2.5 text-white\" 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={`${isDarkMode ? 'text-gray-300 group-hover:text-white' : 'text-gray-700 group-hover:text-gray-900'} 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`}\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 `}</style>\r\n </section>\r\n );\r\n};\r\n\r\nexport default PageHighlightSection;","import React, { useState } from 'react';\r\nimport { ArrowRight } from 'lucide-react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\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\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 style={{\r\n marginBottom: '50px',\r\n textAlign: 'center'\r\n }}>\r\n <h2 style={{\r\n fontSize: '36px',\r\n fontWeight: '700',\r\n marginBottom: '16px',\r\n color: isDarkMode ? '#f9fafb' : '#4b5563'\r\n }}>\r\n {sectionTitle}\r\n </h2>\r\n {sectionDescription && (\r\n <p style={{\r\n fontSize: '16px',\r\n lineHeight: '1.6',\r\n color: isDarkMode ? '#d1d5db' : '#6b7280',\r\n maxWidth: '900px',\r\n margin: '0 auto'\r\n }}>\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\r\n return (\r\n <a\r\n key={page.id}\r\n href={page.slug}\r\n style={{\r\n backgroundColor: isDarkMode ? '#1f2937' : '#ffffff',\r\n borderRadius: '12px',\r\n padding: '32px 20px',\r\n cursor: 'pointer',\r\n transition: 'all 0.3s',\r\n border: `1px solid ${isDarkMode ? '#374151' : '#e5e7eb'}`,\r\n boxShadow: isDarkMode \r\n ? '0 4px 6px -1px rgba(0, 0, 0, 0.3)' \r\n : '0 4px 6px -1px rgba(0, 0, 0, 0.1)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n textAlign: 'center',\r\n gap: '16px',\r\n textDecoration: 'none'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = 'translateY(-8px)';\r\n e.currentTarget.style.boxShadow = isDarkMode\r\n ? '0 20px 25px -5px rgba(0, 0, 0, 0.5)'\r\n : '0 20px 25px -5px rgba(0, 0, 0, 0.15)';\r\n e.currentTarget.style.borderColor = '#361985ff';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = 'translateY(0)';\r\n e.currentTarget.style.boxShadow = isDarkMode\r\n ? '0 4px 6px -1px rgba(0, 0, 0, 0.3)'\r\n : '0 4px 6px -1px rgba(0, 0, 0, 0.1)';\r\n e.currentTarget.style.borderColor = isDarkMode ? '#374151' : '#e5e7eb';\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\r\n <h3 style={{\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n color: isDarkMode ? '#f9fafb' : '#4b5563',\r\n margin: 0,\r\n lineHeight: '1.4'\r\n }}>\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 <ArrowRight size={18} />\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 { ChevronRight, ArrowRight } from 'lucide-react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\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\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 style={{\r\n fontSize: '28px',\r\n fontWeight: '700',\r\n marginBottom: '40px',\r\n color: isDarkMode ? '#f9fafb' : '#1e40af',\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.5px'\r\n }}>\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 style={{\r\n display: 'flex',\r\n gap: '20px',\r\n backgroundColor: isDarkMode ? '#1f2937' : '#ffffff',\r\n borderRadius: '8px',\r\n overflow: 'hidden',\r\n cursor: 'pointer',\r\n transition: 'all 0.2s',\r\n border: `1px solid ${isDarkMode ? '#374151' : '#e5e7eb'}`,\r\n padding: '16px',\r\n textDecoration: 'none'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = isDarkMode ? '#374151' : '#f9fafb';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = isDarkMode ? '#1f2937' : '#ffffff';\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 style={{\r\n flex: 1,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center'\r\n }}>\r\n {page.tagKeys && page.tagKeys.length > 0 && (\r\n <div style={{\r\n fontSize: '12px',\r\n fontWeight: '600',\r\n color: isDarkMode ? '#60a5fa' : '#2563eb',\r\n marginBottom: '8px',\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.5px'\r\n }}>\r\n {page.tagKeys[0].key}\r\n </div>\r\n )}\r\n\r\n <h3 style={{\r\n fontSize: '18px',\r\n fontWeight: '700',\r\n marginBottom: '8px',\r\n color: isDarkMode ? '#f9fafb' : '#1f2937',\r\n lineHeight: '1.4'\r\n }}>\r\n {page.title}\r\n </h3>\r\n\r\n {page.description && (\r\n <p style={{\r\n fontSize: '14px',\r\n lineHeight: '1.6',\r\n color: isDarkMode ? '#d1d5db' : '#6b7280',\r\n margin: 0\r\n }}>\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 <ChevronRight\r\n size={20}\r\n style={{\r\n color: isDarkMode ? '#9ca3af' : '#d1d5db',\r\n transition: 'color 0.2s'\r\n }}\r\n />\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 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 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(37, 99, 235, 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 <ArrowRight size={18} />\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 { ArrowRight } from 'lucide-react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\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 style={{\r\n fontSize: '36px',\r\n fontWeight: '700',\r\n marginBottom: '50px',\r\n color: isDarkMode ? '#f1f5f9' : '#1e293b'\r\n }}>\r\n {sectionTitle}\r\n </h2>\r\n )}\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 style={{\r\n backgroundColor: isDarkMode ? '#1e293b' : '#ffffff',\r\n borderRadius: '16px',\r\n overflow: 'hidden',\r\n cursor: 'pointer',\r\n transition: 'all 0.3s',\r\n boxShadow: isDarkMode \r\n ? '0 4px 6px -1px rgba(0, 0, 0, 0.5)' \r\n : '0 4px 6px -1px rgba(0, 0, 0, 0.1)',\r\n border: `1px solid ${isDarkMode ? '#334155' : '#e2e8f0'}`,\r\n textDecoration: 'none',\r\n display: 'block'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = 'translateY(-8px)';\r\n e.currentTarget.style.boxShadow = isDarkMode\r\n ? '0 20px 25px -5px rgba(0, 0, 0, 0.6)'\r\n : '0 20px 25px -5px rgba(0, 0, 0, 0.15)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = 'translateY(0)';\r\n e.currentTarget.style.boxShadow = isDarkMode\r\n ? '0 4px 6px -1px rgba(0, 0, 0, 0.5)'\r\n : '0 4px 6px -1px rgba(0, 0, 0, 0.1)';\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={{\r\n padding: '24px'\r\n }}>\r\n <h3 style={{\r\n fontSize: '20px',\r\n fontWeight: '700',\r\n marginBottom: '12px',\r\n color: isDarkMode ? '#f1f5f9' : '#1e293b',\r\n lineHeight: '1.4',\r\n minHeight: '56px'\r\n }}>\r\n {page.title}\r\n </h3>\r\n\r\n {page.description && (\r\n <p style={{\r\n fontSize: '14px',\r\n lineHeight: '1.6',\r\n color: isDarkMode ? '#cbd5e1' : '#64748b',\r\n marginBottom: '16px',\r\n display: '-webkit-box',\r\n WebkitLineClamp: 2,\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden'\r\n }}>\r\n {page.description}\r\n </p>\r\n )}\r\n </div>\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 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 backgroundColor: '#361985ff',\r\n border: 'none',\r\n borderRadius: '50px',\r\n cursor: 'pointer',\r\n transition: 'all 0.3s',\r\n boxShadow: '0 4px 6px -1px rgba(239, 68, 68, 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 e.currentTarget.style.boxShadow = '0 10px 15px -3px rgba(239, 68, 68, 0.4)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = '#361985ff';\r\n e.currentTarget.style.transform = 'translateY(0)';\r\n e.currentTarget.style.boxShadow = '0 4px 6px -1px rgba(239, 68, 68, 0.3)';\r\n }}\r\n >\r\n {t('pageChildrenSelect.moreInsights')}\r\n <ArrowRight size={18} />\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":["self","jsxRuntimeModule","require$$0","require$$1","useRef","useState","useEffect","jsxs","jsx","index","logoUrl","Fragment","useWindowSize","useMemo","_a","forwardRef","createElement","__iconNode","CheckCircle","AlertCircle","Loader2","_b","module","Icon","Home"],"mappings":"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","x_google_ignoreList":[0,1,2,13,14,15,16,17,18,19,20,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,50,51,52]}
|