nvis-fe-cms-libs 1.1.41 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/nvis-fe-cms-libs.es.js +1323 -1368
- package/dist/nvis-fe-cms-libs.es.js.map +1 -1
- package/dist/nvis-fe-cms-libs.umd.js +1323 -1368
- package/dist/nvis-fe-cms-libs.umd.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nvis-fe-cms-libs.es.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/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":["jsxRuntimeModule","require$$0","require$$1","jsx","index","jsxs","logoUrl","Fragment","useWindowSize","_a","__iconNode","CheckCircle","AlertCircle","Loader2","_b","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.es.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/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 // Làm sạch HTML\r\n const cleanHtmlContent = (html) => {\r\n if (!html) return \"\";\r\n try {\r\n const tempDiv = document.createElement(\"div\");\r\n tempDiv.innerHTML = html;\r\n let cleanText = tempDiv.textContent || tempDiv.innerText || \"\";\r\n return cleanText\r\n .replace(/ /g, \" \")\r\n .replace(/&/g, \"&\")\r\n .replace(/</g, \"<\")\r\n .replace(/>/g, \">\")\r\n .replace(/"/g, '\"')\r\n .replace(/'/g, \"'\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n } catch {\r\n return String(html || \"\")\r\n .replace(/<[^>]*>/g, \"\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n }\r\n };\r\n\r\n const safeCompanyData = {\r\n vision: companyData?.vision || \"\",\r\n mission: companyData?.mission || \"\",\r\n coreValues: companyData?.coreValues || \"\",\r\n };\r\n\r\n const items = [\r\n {\r\n icon: \"💡\",\r\n title: t(\"about.companyValues.vision\") || \"Tầm nhìn\",\r\n text:\r\n cleanHtmlContent(safeCompanyData.vision) ||\r\n \"Tầm nhìn của chúng tôi sẽ được cập nhật trong thời gian tới.\",\r\n bgClass: \"bg-gradient-brand\",\r\n },\r\n {\r\n icon: \"🚀\",\r\n title: t(\"about.companyValues.mission\") || \"Sứ mệnh\",\r\n text:\r\n cleanHtmlContent(safeCompanyData.mission) ||\r\n \"Sứ mệnh của chúng tôi sẽ được cập nhật trong thời gian tới.\",\r\n bgClass: \"bg-gradient-accent\",\r\n },\r\n {\r\n icon: \"💎\",\r\n title: t(\"about.companyValues.coreValues\") || \"Giá trị cốt lõi\",\r\n text:\r\n cleanHtmlContent(safeCompanyData.coreValues) ||\r\n \"Giá trị cốt lõi của chúng tôi sẽ được cập nhật trong thời gian tới.\",\r\n bgClass: \"bg-gradient-brand\",\r\n },\r\n ];\r\n\r\n const refs = useRef([]);\r\n const [visible, setVisible] = useState([]);\r\n\r\n useEffect(() => {\r\n setVisible(new Array(items.length).fill(false));\r\n if (items.length === 0) return;\r\n\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n const idx = refs.current.findIndex((el) => el === entry.target);\r\n if (idx !== -1) {\r\n setVisible((prev) => {\r\n const newVisible = [...prev];\r\n newVisible[idx] = true;\r\n return newVisible;\r\n });\r\n observer.unobserve(entry.target);\r\n }\r\n }\r\n });\r\n },\r\n { threshold: 0.2 }\r\n );\r\n\r\n refs.current.forEach((el) => el && observer.observe(el));\r\n return () => refs.current.forEach((el) => el && observer.unobserve(el));\r\n }, [items.length]);\r\n\r\n if (!companyData) {\r\n return (\r\n <div className=\"card text-center\">\r\n <div className=\"w-12 h-12 mx-auto mb-4 flex items-center justify-center rounded-full bg-gradient-brand text-white text-2xl\">\r\n 🏢\r\n </div>\r\n <h3 className=\"card-title text-lg mb-2\">\r\n Thông tin công ty\r\n </h3>\r\n <p className=\"card-text\">\r\n Tầm nhìn, sứ mệnh và giá trị cốt lõi sẽ được cập nhật sớm.\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n {items.map((item, index) => (\r\n <div\r\n key={index}\r\n ref={(el) => (refs.current[index] = el)}\r\n className={`card transition-all duration-700 ease-out transform ${\r\n visible[index] ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\"\r\n }`}\r\n style={{ transitionDelay: `${index * 200}ms` }}\r\n >\r\n <div className=\"flex items-start space-x-4\">\r\n {/* Icon */}\r\n <div\r\n className={`w-10 h-10 rounded-lg flex items-center justify-center text-white text-xl flex-shrink-0 ${item.bgClass}`}\r\n >\r\n {item.icon}\r\n </div>\r\n\r\n {/* Nội dung */}\r\n <div className=\"flex-1 min-w-0\">\r\n <h3 className=\"card-title text-lg mb-1\">{item.title}</h3>\r\n <p\r\n className={`card-text leading-relaxed ${\r\n item.text.includes(\"sẽ được cập nhật\")\r\n ? \"italic opacity-75\"\r\n : \"\"\r\n }`}\r\n >\r\n {item.text}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n};\r\n\r\nexport default CompanyValues;","import React from \"react\";\r\n\r\n/**\r\n * SectionWrapper - Simple Gradient Version\r\n * ------------------\r\n * Chỉ có gradient nền, không có hiệu ứng tròn\r\n * Màu sắc được quản lý qua CSS Variables trong theme.css\r\n * \r\n * Props:\r\n * - variant: chọn kiểu nền (\"blue\", \"purple\", \"green\", \"neutral\", \"softLight\")\r\n * - className: thêm class bổ sung\r\n * - children: nội dung của section\r\n */\r\nconst SectionWrapper = ({ \r\n variant = \"softLight\",\r\n className = \"\", \r\n children\r\n}) => {\r\n return (\r\n <section \r\n className={`section-wrapper section-wrapper--${variant} ${className}`}\r\n >\r\n {children}\r\n </section>\r\n );\r\n};\r\n\r\nexport default SectionWrapper;","import React from \"react\";\r\nimport CompanyValues from \"./CompanyValues\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\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-brand 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 text-gradient-brand\">\r\n {shortName}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n <h1 className=\"text-5xl lg:text-6xl font-extrabold tracking-tight mb-4 text-gradient-brand drop-shadow-[0_2px_6px_rgba(0,0,0,0.4)]\">\r\n {name}\r\n </h1>\r\n\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 className=\"inline-block px-4 py-2 rounded-full text-sm font-semibold mb-4 bg-surface text-brand-primary border border-[var(--border-color)]\">\r\n 📖 {safeT('aboutCompany.story.badge')}\r\n </div>\r\n <h2 className=\"text-3xl lg:text-4xl font-bold mb-6 text-main\">\r\n {safeT('aboutCompany.story.title')}{\" \"}\r\n <span className=\"block text-gradient-brand\">{shortName}</span>\r\n </h2>\r\n\r\n <div\r\n dangerouslySetInnerHTML={{ __html: description }}\r\n className=\"prose max-w-none transition-colors text-muted\"\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\n\r\nconst TimelineSection = ({ data, t, section }) => {\r\n const timelineData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data)\r\n ?.map((item) => item.data) || [];\r\n\r\n const [timelineVisible, setTimelineVisible] = useState([]);\r\n const timelineRefs = useRef([]);\r\n const sectionTitle = section?.title || \"Timeline\";\r\n\r\n useEffect(() => {\r\n setTimelineVisible(new Array(timelineData.length).fill(false));\r\n }, [timelineData.length]);\r\n\r\n useEffect(() => {\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n const index = timelineRefs.current.findIndex(\r\n (el) => el === entry.target\r\n );\r\n if (index !== -1) {\r\n setTimelineVisible((prev) => {\r\n const updated = [...prev];\r\n updated[index] = true;\r\n return updated;\r\n });\r\n observer.unobserve(entry.target);\r\n }\r\n }\r\n });\r\n },\r\n { threshold: 0.1 }\r\n );\r\n\r\n timelineRefs.current.forEach((el) => el && observer.observe(el));\r\n return () =>\r\n timelineRefs.current.forEach((el) => el && observer.unobserve(el));\r\n }, [timelineData.length]);\r\n\r\n if (!timelineData.length) {\r\n return (\r\n <section className=\"py-20 bg-body\">\r\n <div className=\"max-w-7xl mx-auto px-4 text-center\">\r\n <h3 className=\"text-subtitle font-semibold mb-2 text-main\">\r\n {t(\"timeline.noData.title\") || \"Chưa có dữ liệu\"}\r\n </h3>\r\n <p className=\"text-body text-muted\">\r\n {t(\"timeline.noData.description\") ||\r\n \"Hiện tại chưa có milestone nào được thiết lập.\"}\r\n </p>\r\n </div>\r\n </section>\r\n );\r\n }\r\n\r\n return (\r\n <SectionWrapper>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Tiêu đề */}\r\n <div className=\"text-center mb-12\">\r\n <div className=\"inline-block px-4 py-2 rounded-full border border-[var(--border-color)] bg-surface text-subtitle font-semibold text-brand-primary shadow-sm hover:shadow-md transition-all duration-300\">\r\n 📈 {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n {/* Timeline */}\r\n <div className=\"relative\">\r\n {/* Đường trục chính */}\r\n <div className=\"absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-brand rounded-full\"></div>\r\n\r\n <div className=\"space-y-8\">\r\n {timelineData.map((milestone, index) => (\r\n <div\r\n key={index}\r\n ref={(el) => (timelineRefs.current[index] = el)}\r\n className={`flex items-center transition-all duration-700 ease-out ${\r\n index % 2 === 0 ? \"flex-row\" : \"flex-row-reverse\"\r\n } ${\r\n timelineVisible[index]\r\n ? \"opacity-100 scale-100\"\r\n : \"opacity-0 scale-75\"\r\n }`}\r\n style={{ transitionDelay: `${index * 200}ms` }}\r\n >\r\n {/* Nội dung timeline */}\r\n <div className=\"flex-1 px-8\">\r\n <div className=\"card\">\r\n <div className=\"card-title text-brand-primary\">\r\n {milestone.time}\r\n </div>\r\n <h3 className=\"card-title text-main mb-1\">\r\n {milestone.title}\r\n </h3>\r\n <p className=\"card-text\">\r\n {milestone.description}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n {/* Dấu chấm */}\r\n <div className=\"w-6 h-6 bg-gradient-brand rounded-full border-4 border-[var(--bg-body)] shadow-[0_0_10px_5px_rgba(37,99,235,0.4)] flex-shrink-0 z-10 animate-pulse\"></div>\r\n\r\n <div className=\"flex-1\"></div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default TimelineSection;","import React, { useEffect, useRef, useState } from \"react\";\r\n\r\nconst PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {\r\n const itemRef = useRef(null);\r\n const [visible, setVisible] = useState(false);\r\n const [isHovered, setIsHovered] = useState(false);\r\n\r\n useEffect(() => {\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n setVisible(true);\r\n observer.unobserve(entry.target);\r\n }\r\n });\r\n },\r\n { threshold: 0.2 }\r\n );\r\n if (itemRef.current) observer.observe(itemRef.current);\r\n return () => itemRef.current && observer.unobserve(itemRef.current);\r\n }, []);\r\n\r\n const logoSrc = getLogoUrl(partner.logoUrl);\r\n\r\n const cardContent = (\r\n <>\r\n {/* Decorative background elements for dark mode */}\r\n {isDarkMode && (\r\n <>\r\n <div\r\n className=\"absolute w-12 h-12 rounded-full\"\r\n style={{ left: \"10%\", top: \"20%\", background: \"rgba(255,255,255,0.05)\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-10 h-10 rounded-full\"\r\n style={{ right: \"30%\", bottom: \"10%\", background: \"rgba(255,255,255,0.05)\" }}\r\n ></div>\r\n <div\r\n className=\"absolute w-14 h-14 rounded-md\"\r\n style={{ left: \"20%\", bottom: \"30%\", background: \"rgba(255,255,255,0.05)\" }}\r\n ></div>\r\n <div\r\n className=\"absolute inset-0 opacity-20\"\r\n style={{\r\n backgroundImage: 'url(\"data:image/svg+xml,%3Csvg width=\\\\\"60\\\\\" height=\\\\\"60\\\\\" viewBox=\\\\\"0 0 60 60\\\\\" xmlns=\\\\\"http://www.w3.org/2000/svg\\\\\"%3E%3Cg fill=\\\\\"none\\\\\" fill-rule=\\\\\"evenodd\\\\\"%3E%3Cg fill=\\\\\"%23ffffff\\\\\" fill-opacity=\\\\\"0.05\\\\\"%3E%3Ccircle cx=\\\\\"30\\\\\" cy=\\\\\"30\\\\\" r=\\\\\"2\\\\\"/\\\\%3E%3C/g\\\\%3E%3C/g\\\\%3E%3C/svg\\\\%3E\")'\r\n }}\r\n ></div>\r\n </>\r\n )}\r\n\r\n {/* Logo container */}\r\n <div \r\n className=\"w-20 h-14 flex items-center justify-center mb-4 rounded-lg overflow-hidden bg-surface\" \r\n style={{ \r\n borderWidth: '1px', \r\n borderStyle: 'solid', \r\n borderColor: isHovered ? 'var(--brand-primary)' : 'var(--border-color)',\r\n backgroundColor: isHovered ? 'var(--bg-body)' : 'var(--bg-surface)',\r\n transition: 'all 0.3s ease'\r\n }}\r\n >\r\n {logoSrc ? (\r\n <img\r\n src={logoSrc}\r\n alt={partner.name}\r\n className=\"max-w-full max-h-full object-contain\"\r\n style={{\r\n filter: isHovered \r\n ? 'grayscale(0) opacity(1)' \r\n : (isDarkMode ? 'grayscale(0.3) opacity(0.8)' : 'grayscale(0.2) opacity(0.9)'),\r\n transform: isHovered ? 'scale(1.05)' : 'scale(1)',\r\n transition: 'all 0.3s ease'\r\n }}\r\n />\r\n ) : (\r\n <div className=\"w-full h-full bg-gradient-brand flex items-center justify-center\">\r\n <span className=\"text-white font-bold text-center text-small px-1\">\r\n {partner.name}\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Partner name - using .card-title */}\r\n <h4 className=\"card-title text-center mb-2\">\r\n {partner.name}\r\n </h4>\r\n\r\n {/* Partner description - using .card-text */}\r\n <p className=\"card-text text-center mb-2\">\r\n {partner.description}\r\n </p>\r\n\r\n {/* Website hint - using .card-link */}\r\n {partner.websiteUrl && (\r\n <div \r\n className=\"card-link justify-center\"\r\n style={{ \r\n opacity: isHovered ? 1 : 0,\r\n transform: isHovered ? 'translateY(0)' : 'translateY(4px)',\r\n transition: 'all 0.3s ease'\r\n }}\r\n >\r\n {t('partners.viewDetails') || 'Xem chi tiết'} →\r\n </div>\r\n )}\r\n </>\r\n );\r\n\r\n // Using existing .card class with animation styles\r\n const baseClasses = `card items-center justify-center transition-all duration-700 ease-out overflow-hidden ${\r\n visible ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\"\r\n }`;\r\n\r\n // Inline styles for dynamic animation delay\r\n const dynamicStyles = { \r\n transitionDelay: `${idx * 150}ms`\r\n };\r\n\r\n // Conditional rendering based on websiteUrl\r\n if (partner.websiteUrl) {\r\n return (\r\n <a\r\n ref={itemRef}\r\n href={partner.websiteUrl}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className={`${baseClasses} cursor-pointer`}\r\n style={{ \r\n ...dynamicStyles,\r\n textDecoration: 'none'\r\n }}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n >\r\n {cardContent}\r\n </a>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n ref={itemRef}\r\n className={baseClasses}\r\n style={dynamicStyles}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n >\r\n {cardContent}\r\n </div>\r\n );\r\n};\r\n\r\nexport default PartnerCard;","import React, { useState, useEffect, useRef, useMemo } from \"react\";\r\nimport PartnerCard from \"./PartnerCard\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\r\n// Hook lấy kích thước cửa sổ\r\nfunction useWindowSize() {\r\n const [width, setWidth] = useState(\r\n typeof window !== \"undefined\" ? window.innerWidth : 1200\r\n );\r\n\r\n useEffect(() => {\r\n if (typeof window === \"undefined\") return;\r\n const handleResize = () => setWidth(window.innerWidth);\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, []);\r\n\r\n return width;\r\n}\r\n\r\nconst PartnersSection = ({ data, t, imageBaseUrl = \"\", section }) => {\r\n const partnersData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data)\r\n ?.map((item) => item.data) || [];\r\n\r\n const [currentPartnerSlide, setCurrentPartnerSlide] = useState(0);\r\n const [partnersVisible, setPartnersVisible] = useState(false);\r\n const partnersRef = useRef(null);\r\n const windowWidth = useWindowSize();\r\n\r\n const sectionTitle = section?.title || t(\"partners.sectionTitle\") || \"Đối tác\";\r\n\r\n const getLogoUrl = (logoUrl) => {\r\n if (!logoUrl) return null;\r\n if (logoUrl.startsWith(\"http\")) return logoUrl;\r\n return `${imageBaseUrl}${logoUrl}`;\r\n };\r\n\r\n // Gom nhóm partners thành từng slide\r\n const partners = useMemo(() => {\r\n const getPerSlide = () => {\r\n if (windowWidth < 640) return 2;\r\n if (windowWidth < 1024) return 3;\r\n return 4;\r\n };\r\n const grouped = [];\r\n const perSlide = getPerSlide();\r\n for (let i = 0; i < partnersData.length; i += perSlide) {\r\n grouped.push(partnersData.slice(i, i + perSlide));\r\n }\r\n return grouped;\r\n }, [partnersData, windowWidth]);\r\n\r\n // Tự động đổi slide\r\n useEffect(() => {\r\n if (partners.length > 1) {\r\n const interval = setInterval(() => {\r\n setCurrentPartnerSlide((prev) => (prev + 1) % partners.length);\r\n }, 5000);\r\n return () => clearInterval(interval);\r\n }\r\n }, [partners.length]);\r\n\r\n // Quan sát khi hiển thị trong viewport\r\n useEffect(() => {\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n setPartnersVisible(true);\r\n observer.unobserve(entry.target);\r\n }\r\n });\r\n },\r\n { threshold: 0.1 }\r\n );\r\n\r\n if (partnersRef.current) observer.observe(partnersRef.current);\r\n return () => partnersRef.current && observer.unobserve(partnersRef.current);\r\n }, []);\r\n\r\n if (!partnersData.length) return null;\r\n\r\n return (\r\n <SectionWrapper>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Header */}\r\n <div className=\"text-center mb-12\">\r\n <div className=\"inline-block px-4 py-2 rounded-full border border-[var(--border-color)] bg-surface text-subtitle font-semibold text-brand-primary shadow-sm\">\r\n 🤝 {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n {/* Danh sách đối tác */}\r\n <div ref={partnersRef} className=\"relative overflow-hidden\">\r\n <div\r\n className={`transition-all duration-1000 ease-out ${\r\n partnersVisible ? \"opacity-100 scale-100\" : \"opacity-0 scale-95\"\r\n }`}\r\n >\r\n <div className=\"relative h-56 md:h-64 lg:h-72 xl:h-80 mb-8\">\r\n {partners.map((group, slideIndex) => (\r\n <div\r\n key={slideIndex}\r\n className={`absolute inset-0 transition-all duration-1000 ease-in-out ${\r\n slideIndex === currentPartnerSlide\r\n ? \"opacity-100 translate-x-0\"\r\n : slideIndex < currentPartnerSlide\r\n ? \"opacity-0 -translate-x-full\"\r\n : \"opacity-0 translate-x-full\"\r\n }`}\r\n >\r\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-6 h-full px-2\">\r\n {group.map((partner, idx) => (\r\n <PartnerCard\r\n key={partner.id || idx}\r\n partner={partner}\r\n idx={idx}\r\n t={t}\r\n getLogoUrl={getLogoUrl}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Indicator */}\r\n {partners.length > 1 && (\r\n <div className=\"flex justify-center space-x-2\">\r\n {partners.map((_, index) => (\r\n <button\r\n key={index}\r\n onClick={() => setCurrentPartnerSlide(index)}\r\n className={`w-3 h-3 rounded-full transition-all duration-300 ${\r\n index === currentPartnerSlide\r\n ? \"bg-brand-primary scale-125 shadow-lg\"\r\n : \"bg-muted hover:bg-brand-primary/70\"\r\n }`}\r\n aria-label={`Slide ${index + 1}`}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default PartnersSection;\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\r\nconst MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }) => {\r\n const [milestones, setMilestones] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [timelineVisible, setTimelineVisible] = useState([]);\r\n const timelineRefs = useRef([]);\r\n const sectionTitle = section?.title || \"...\";\r\n\r\n useEffect(() => {\r\n const fetchMilestones = async () => {\r\n if (getMilestoneTimeline) {\r\n try {\r\n setLoading(true);\r\n const res = await getMilestoneTimeline();\r\n if (res.success) setMilestones(res.data || []);\r\n else setMilestones([]);\r\n } catch {\r\n setMilestones([]);\r\n } finally {\r\n setLoading(false);\r\n }\r\n } else {\r\n const milestonesData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data)\r\n ?.map((item) => item.data) || [];\r\n setMilestones(milestonesData);\r\n setLoading(false);\r\n }\r\n };\r\n fetchMilestones();\r\n }, []);\r\n\r\n useEffect(() => {\r\n setTimelineVisible(new Array(milestones.length).fill(false));\r\n }, [milestones.length]);\r\n\r\n useEffect(() => {\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n const index = timelineRefs.current.findIndex((el) => el === entry.target);\r\n if (index !== -1) {\r\n setTimelineVisible((prev) => {\r\n const updated = [...prev];\r\n updated[index] = true;\r\n return updated;\r\n });\r\n observer.unobserve(entry.target);\r\n }\r\n }\r\n });\r\n },\r\n { threshold: 0.1 }\r\n );\r\n\r\n timelineRefs.current.forEach((el) => el && observer.observe(el));\r\n return () => timelineRefs.current.forEach((el) => el && observer.unobserve(el));\r\n }, [milestones.length]);\r\n\r\n if (loading) {\r\n return (\r\n <section className=\"py-20 text-center\">\r\n <p className=\"text-main\">{t(\"milestone.status.loadingData\")}</p>\r\n </section>\r\n );\r\n }\r\n\r\n if (!milestones.length) {\r\n return (\r\n <section className=\"py-20 bg-body\">\r\n <div className=\"max-w-7xl mx-auto px-4 text-center\">\r\n <h3 className=\"text-lg font-semibold mb-2 text-main\">\r\n {t(\"milestone.status.noData\")}\r\n </h3>\r\n <p className=\"text-muted\">{t(\"milestone.noDataDescription\")}</p>\r\n </div>\r\n </section>\r\n );\r\n }\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Tiêu đề */}\r\n <div className=\"text-center mb-12\">\r\n <div className=\"relative inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 border border-[var(--border-color)] bg-surface text-main shadow-sm hover:shadow-md transition-all duration-300\">\r\n 📈 {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n {/* Timeline */}\r\n <div className=\"relative\">\r\n <div className=\"absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-brand rounded-full\"></div>\r\n\r\n <div className=\"space-y-8\">\r\n {milestones.map((milestone, index) => (\r\n <div\r\n key={milestone.id}\r\n ref={(el) => (timelineRefs.current[index] = el)}\r\n className={`flex items-center transition-all duration-700 ease-out ${\r\n index % 2 === 0 ? \"flex-row\" : \"flex-row-reverse\"\r\n } ${timelineVisible[index] ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\"}`}\r\n style={{ transitionDelay: `${index * 200}ms` }}\r\n >\r\n <div className=\"flex-1 px-8\">\r\n <div className=\"card\">\r\n <div className=\"text-brand-primary font-bold text-xl mb-2\">\r\n {milestone.time}\r\n </div>\r\n <h3 className=\"card-title\">\r\n {milestone.title}\r\n </h3>\r\n <p className=\"card-text\">{milestone.description}</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"w-6 h-6 bg-gradient-brand rounded-full border-4 border-[var(--bg-body)] shadow-[0_0_10px_5px_rgba(37,99,235,0.4)] flex-shrink-0 z-10 animate-pulse\"></div>\r\n\r\n <div className=\"flex-1\"></div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default MilestoneSection;","import React, { useState, useEffect } from \"react\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\r\nconst TestimonialsSection = ({ data, t, section }) => {\r\n const [currentIndex, setCurrentIndex] = useState(0);\r\n const [isTransitioning, setIsTransitioning] = useState(false);\r\n const sectionTitle = section?.title || t(\"testimonials.sectionTitle\") || \"Cảm nhận khách hàng\";\r\n\r\n const testimonials =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data)\r\n ?.map((item) => ({\r\n quote: item.data?.content || \"\",\r\n author: item.data?.customerName || \"\",\r\n position: item.data?.customerTitle || \"\",\r\n company: item.data?.customerCompany || \"\",\r\n })) || [];\r\n\r\n // Tự động đổi testimonial với hiệu ứng fade\r\n useEffect(() => {\r\n if (testimonials.length > 1) {\r\n const interval = setInterval(() => {\r\n setIsTransitioning(true);\r\n setTimeout(() => {\r\n setCurrentIndex((prev) => (prev + 1) % testimonials.length);\r\n setIsTransitioning(false);\r\n }, 300);\r\n }, 5000);\r\n return () => clearInterval(interval);\r\n }\r\n }, [testimonials.length]);\r\n\r\n const handleIndicatorClick = (index) => {\r\n if (index !== currentIndex) {\r\n setIsTransitioning(true);\r\n setTimeout(() => {\r\n setCurrentIndex(index);\r\n setIsTransitioning(false);\r\n }, 300);\r\n }\r\n };\r\n\r\n // Nếu không có testimonials, không render gì\r\n if (testimonials.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <SectionWrapper>\r\n <div className=\"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center\">\r\n {/* Header */}\r\n <div className=\"inline-block px-4 py-2 rounded-full border border-[var(--border-color)] bg-surface text-subtitle font-semibold mb-8 text-brand-primary shadow-sm\">\r\n 💬 {sectionTitle}\r\n </div>\r\n\r\n {/* Nội dung */}\r\n <div className=\"relative\">\r\n <div className=\"card\">\r\n <div\r\n style={{\r\n opacity: isTransitioning ? 0 : 1,\r\n transform: isTransitioning ? 'translateY(10px)' : 'translateY(0)',\r\n transition: 'opacity 0.3s ease-in-out, transform 0.3s ease-in-out'\r\n }}\r\n >\r\n <blockquote className=\"card-text text-body italic mb-6\">\r\n \"{testimonials[currentIndex].quote}\"\r\n </blockquote>\r\n\r\n <div className=\"flex items-center justify-center space-x-4\">\r\n <div className=\"text-3xl\">👤</div>\r\n <div className=\"text-left\">\r\n <div className=\"card-title\">\r\n {testimonials[currentIndex].author}\r\n </div>\r\n <div className=\"card-text\">\r\n {testimonials[currentIndex].position}\r\n </div>\r\n {testimonials[currentIndex].company && (\r\n <div className=\"card-link\">\r\n {testimonials[currentIndex].company}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Indicators */}\r\n {testimonials.length > 1 && (\r\n <div className=\"flex justify-center space-x-2 mt-4\">\r\n {testimonials.map((_, index) => (\r\n <button \r\n key={index}\r\n onClick={() => handleIndicatorClick(index)}\r\n className={`w-2.5 h-2.5 rounded-full transition-all duration-300 ${\r\n index === currentIndex\r\n ? \"bg-brand-secondary\"\r\n : \"bg-surface hover:bg-brand-primary\"\r\n }`}\r\n aria-label={`Slide ${index + 1}`}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default TestimonialsSection;","import React from \"react\";\r\n\r\nconst PartnerListCard = ({ partner, idx, t, isDarkMode, getLogoUrl }) => {\r\n const logoUrl = getLogoUrl(partner.logoUrl);\r\n \r\n return (\r\n \r\n <a href={partner.websiteUrl || '#'}\r\n target={partner.websiteUrl ? '_blank' : '_self'}\r\n rel={partner.websiteUrl ? 'noopener noreferrer' : ''}\r\n className=\"card\"\r\n style={{\r\n animationDelay: `${idx * 0.1}s`,\r\n textDecoration: 'none',\r\n overflow: 'hidden',\r\n minHeight: '280px',\r\n padding: '1.5rem',\r\n display: 'flex',\r\n flexDirection: 'column'\r\n }}\r\n >\r\n <div style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flex: 1\r\n }}>\r\n {logoUrl ? (\r\n <div style={{\r\n width: '100%',\r\n height: '100px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginBottom: '1rem'\r\n }}>\r\n <img\r\n src={logoUrl}\r\n alt={partner.name || t(\"partners.logoAlt\") || \"Partner logo\"}\r\n style={{\r\n maxWidth: '100%',\r\n maxHeight: '100%',\r\n objectFit: 'contain',\r\n transition: 'transform 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = 'scale(1.05)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = 'scale(1)';\r\n }}\r\n loading=\"lazy\"\r\n />\r\n </div>\r\n ) : (\r\n <div className=\"bg-surface\" style={{\r\n width: '5rem',\r\n height: '5rem',\r\n borderRadius: '9999px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginBottom: '1rem'\r\n }}>\r\n <span style={{ fontSize: '1.875rem' }}>🤝</span>\r\n </div>\r\n )}\r\n \r\n <h3 className=\"card-title text-main\" style={{\r\n fontSize: '1rem',\r\n textAlign: 'center',\r\n marginBottom: '0.5rem',\r\n lineHeight: '1.4'\r\n }}>\r\n {partner.name || t('partners.unnamed') || 'Partner'}\r\n </h3>\r\n \r\n {partner.description && (\r\n <p className=\"card-text\" style={{\r\n textAlign: 'center',\r\n marginTop: '0.5rem',\r\n fontSize: '0.875rem',\r\n lineHeight: '1.5',\r\n display: '-webkit-box',\r\n WebkitLineClamp: 3,\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden'\r\n }}>\r\n {partner.description}\r\n </p>\r\n )}\r\n </div>\r\n </a>\r\n );\r\n};\r\n\r\nexport default PartnerListCard;","import React, { useEffect, useState, useRef, useMemo } from \"react\";\r\nimport PartnerListCard from \"./PartnerListCard\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\r\n// Hook theo dõi kích thước màn hình\r\nfunction useWindowSize() {\r\n const [width, setWidth] = useState(\r\n typeof window !== \"undefined\" ? window.innerWidth : 1200\r\n );\r\n\r\n useEffect(() => {\r\n const handleResize = () => setWidth(window.innerWidth);\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, []);\r\n\r\n return width;\r\n}\r\n\r\nconst PartnerListSection = ({ t, getPartnerList, imageBaseUrl = \"\", section }) => {\r\n const [partnersData, setPartnersData] = useState([]);\r\n const [error, setError] = useState(null);\r\n const [loading, setLoading] = useState(true);\r\n const [currentPartnerSlide, setCurrentPartnerSlide] = useState(0);\r\n const [partnersVisible, setPartnersVisible] = useState(false);\r\n const partnersRef = useRef(null);\r\n const windowWidth = useWindowSize();\r\n\r\n const sectionTitle = section?.title || t(\"partners.sectionTitle\");\r\n\r\n const getLogoUrl = (logoUrl) => {\r\n if (!logoUrl) return null;\r\n if (logoUrl.startsWith(\"http\")) return logoUrl;\r\n return `${imageBaseUrl}${logoUrl}`;\r\n };\r\n\r\n // Gọi API lấy partner\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n try {\r\n const res = await getPartnerList();\r\n if (res.success) {\r\n setPartnersData(res.data || []);\r\n } else {\r\n setError(res.error || \"Error fetching partners\");\r\n }\r\n } catch (err) {\r\n setError(err.message);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n fetchData();\r\n }, []);\r\n\r\n // Group partners thành slides\r\n const partners = useMemo(() => {\r\n const getPerSlide = () => {\r\n if (windowWidth < 640) return 2;\r\n if (windowWidth < 1024) return 3;\r\n return 4;\r\n };\r\n const grouped = [];\r\n const perSlide = getPerSlide();\r\n for (let i = 0; i < partnersData.length; i += perSlide) {\r\n grouped.push(partnersData.slice(i, i + perSlide));\r\n }\r\n return grouped;\r\n }, [partnersData, windowWidth]);\r\n\r\n // Auto-rotate slides\r\n useEffect(() => {\r\n if (partners.length > 1) {\r\n const interval = setInterval(() => {\r\n setCurrentPartnerSlide((prev) => (prev + 1) % partners.length);\r\n }, 5000);\r\n return () => clearInterval(interval);\r\n }\r\n }, [partners.length]);\r\n\r\n // Hiệu ứng xuất hiện\r\n useEffect(() => {\r\n const fallbackTimer = setTimeout(() => setPartnersVisible(true), 500);\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n clearTimeout(fallbackTimer);\r\n setPartnersVisible(true);\r\n observer.unobserve(entry.target);\r\n }\r\n });\r\n },\r\n { threshold: 0.1, rootMargin: \"50px\" }\r\n );\r\n if (partnersRef.current) observer.observe(partnersRef.current);\r\n else {\r\n clearTimeout(fallbackTimer);\r\n setPartnersVisible(true);\r\n }\r\n return () => {\r\n clearTimeout(fallbackTimer);\r\n if (partnersRef.current) observer.unobserve(partnersRef.current);\r\n };\r\n }, []);\r\n\r\n // Loading & Error\r\n if (loading) {\r\n return (\r\n <section className=\"py-20 text-center bg-body\">\r\n <p className=\"text-body text-muted\">\r\n {t(\"partners.loading\") || \"Đang tải danh sách đối tác...\"}\r\n </p>\r\n </section>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <section className=\"py-20 text-center bg-body\">\r\n <p className=\"text-body text-brand-secondary\">\r\n {t(\"partners.error\") || error}\r\n </p>\r\n </section>\r\n );\r\n }\r\n\r\n if (!partnersData.length) return null;\r\n\r\n return (\r\n <SectionWrapper>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Header */}\r\n <div className=\"text-center mb-12\">\r\n <div className=\"inline-block px-4 py-2 rounded-full border border-[var(--border-color)] bg-surface text-subtitle font-semibold text-brand-primary shadow-sm\">\r\n 🤝 {sectionTitle}\r\n </div>\r\n </div>\r\n\r\n {/* Slider Container */}\r\n <div ref={partnersRef} className=\"relative\">\r\n <div\r\n className={`transition-all duration-1000 ease-out ${\r\n partnersVisible ? \"opacity-100 scale-100\" : \"opacity-0 scale-95\"\r\n }`}\r\n >\r\n {/* Slides */}\r\n <div className=\"relative overflow-hidden mb-12\">\r\n <div style={{ minHeight: '320px' }}>\r\n {partners.map((group, slideIndex) => (\r\n <div\r\n key={slideIndex}\r\n className={`absolute inset-0 w-full transition-all duration-1000 ease-in-out ${\r\n slideIndex === currentPartnerSlide\r\n ? \"opacity-100 translate-x-0\"\r\n : slideIndex < currentPartnerSlide\r\n ? \"opacity-0 -translate-x-full\"\r\n : \"opacity-0 translate-x-full\"\r\n }`}\r\n style={{\r\n zIndex: slideIndex === currentPartnerSlide ? 10 : 1,\r\n }}\r\n >\r\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-8 px-2\">\r\n {group.map((partner, idx) => (\r\n <PartnerListCard\r\n key={partner.id || `${slideIndex}-${idx}`}\r\n partner={partner}\r\n idx={idx}\r\n t={t}\r\n getLogoUrl={getLogoUrl}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Indicators */}\r\n {partners.length > 1 && (\r\n <div className=\"flex justify-center space-x-3\" style={{ \r\n position: 'relative',\r\n zIndex: 100,\r\n paddingTop: '1rem'\r\n }}>\r\n {partners.map((_, index) => (\r\n <button\r\n key={index}\r\n onClick={() => setCurrentPartnerSlide(index)}\r\n style={{\r\n width: '12px',\r\n height: '12px',\r\n borderRadius: '50%',\r\n border: 'none',\r\n cursor: 'pointer',\r\n transition: 'all 0.3s ease',\r\n backgroundColor: index === currentPartnerSlide \r\n ? 'var(--brand-primary)' \r\n : 'rgba(255, 255, 255, 0.3)',\r\n transform: index === currentPartnerSlide ? 'scale(1.3)' : 'scale(1)'\r\n }}\r\n onMouseEnter={(e) => {\r\n if (index !== currentPartnerSlide) {\r\n e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 0.5)';\r\n }\r\n }}\r\n onMouseLeave={(e) => {\r\n if (index !== currentPartnerSlide) {\r\n e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 0.3)';\r\n }\r\n }}\r\n aria-label={`Slide ${index + 1}`}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default PartnerListSection;","/**\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\n\r\nconst ContactFormSection = ({ data, t, isDarkMode, consultationRequestService }) => {\r\n const [formData, setFormData] = useState({\r\n fullName: '',\r\n workEmail: '',\r\n phoneNumber: '',\r\n companyName: '',\r\n jobTitle: '',\r\n businessType: '',\r\n expectedBudget: '',\r\n expectedTimeline: '',\r\n requestTitle: '',\r\n requestDescription: '',\r\n });\r\n\r\n const [formErrors, setFormErrors] = useState({});\r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n const [submitStatus, setSubmitStatus] = useState(null);\r\n const [submitMessage, setSubmitMessage] = useState('');\r\n\r\n // Enhanced validation function with proper field names\r\n const validateField = (name, value) => {\r\n const errors = {};\r\n\r\n switch (name) {\r\n case 'fullName':\r\n if (!value?.trim()) errors.fullName = 'Họ và tên là bắt buộc';\r\n else if (value.trim().length < 2) errors.fullName = 'Tên phải có ít nhất 2 ký tự';\r\n break;\r\n\r\n case 'workEmail':\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n if (!value?.trim()) errors.workEmail = 'Email là bắt buộc';\r\n else if (!emailRegex.test(value.trim())) errors.workEmail = 'Email không hợp lệ';\r\n break;\r\n\r\n case 'phoneNumber':\r\n const phoneRegex = /^[0-9\\s\\-\\+\\(\\)]{10,15}$/;\r\n if (value && !phoneRegex.test(value.trim())) errors.phoneNumber = 'Số điện thoại không hợp lệ';\r\n break;\r\n\r\n case 'requestTitle':\r\n if (!value?.trim()) errors.requestTitle = 'Tiêu đề yêu cầu là bắt buộc';\r\n else if (value.trim().length < 5) errors.requestTitle = 'Tiêu đề phải có ít nhất 5 ký tự';\r\n break;\r\n\r\n case 'requestDescription':\r\n if (!value?.trim()) errors.requestDescription = 'Mô tả yêu cầu là bắt buộc';\r\n else if (value.trim().length < 10) errors.requestDescription = 'Mô tả phải có ít nhất 10 ký tự';\r\n break;\r\n\r\n case 'companyName':\r\n if (value && value.trim().length > 0 && value.trim().length < 2) {\r\n errors.companyName = 'Tên công ty phải có ít nhất 2 ký tự';\r\n }\r\n break;\r\n\r\n case 'jobTitle':\r\n if (value && value.trim().length > 0 && value.trim().length < 2) {\r\n errors.jobTitle = 'Chức vụ phải có ít nhất 2 ký tự';\r\n }\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n\r\n return errors;\r\n };\r\n\r\n const handleInputChange = (e) => {\r\n const { name, value } = e.target;\r\n\r\n setFormData(prev => ({\r\n ...prev,\r\n [name]: value || ''\r\n }));\r\n\r\n if (formErrors[name]) {\r\n setFormErrors(prev => {\r\n const newErrors = { ...prev };\r\n delete newErrors[name];\r\n return newErrors;\r\n });\r\n }\r\n };\r\n\r\n const handleBlur = (e) => {\r\n const { name, value } = e.target;\r\n const fieldErrors = validateField(name, value);\r\n setFormErrors(prev => ({\r\n ...prev,\r\n ...fieldErrors\r\n }));\r\n };\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n setIsSubmitting(true);\r\n setSubmitStatus(null);\r\n setSubmitMessage('');\r\n\r\n try {\r\n const allErrors = {};\r\n Object.keys(formData).forEach(key => {\r\n const fieldErrors = validateField(key, formData[key]);\r\n Object.assign(allErrors, fieldErrors);\r\n });\r\n\r\n if (Object.keys(allErrors).length > 0) {\r\n setFormErrors(allErrors);\r\n setIsSubmitting(false);\r\n return;\r\n }\r\n\r\n const cleanFormData = Object.keys(formData).reduce((acc, key) => {\r\n acc[key] = typeof formData[key] === 'string' ? formData[key].trim() : formData[key];\r\n return acc;\r\n }, {});\r\n\r\n let result;\r\n if (consultationRequestService?.create) {\r\n result = await consultationRequestService.create(cleanFormData);\r\n } else {\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n result = { success: true, message: 'Đã gửi thông tin thành công!' };\r\n }\r\n\r\n if (result?.success) {\r\n setSubmitStatus('success');\r\n setSubmitMessage(result.message || 'Cảm ơn bạn đã gửi thông tin! Chúng tôi sẽ liên hệ lại trong vòng 24 giờ.');\r\n\r\n setFormData({\r\n fullName: '',\r\n workEmail: '',\r\n phoneNumber: '',\r\n companyName: '',\r\n jobTitle: '',\r\n businessType: '',\r\n expectedBudget: '',\r\n expectedTimeline: '',\r\n requestTitle: '',\r\n requestDescription: '',\r\n });\r\n setFormErrors({});\r\n } else {\r\n setSubmitStatus('error');\r\n setSubmitMessage(result?.message || 'Có lỗi xảy ra khi gửi thông tin.');\r\n }\r\n } catch (error) {\r\n setSubmitStatus('error');\r\n setSubmitMessage(error?.message || 'Có lỗi xảy ra khi gửi thông tin. Vui lòng thử lại sau.');\r\n } finally {\r\n setIsSubmitting(false);\r\n }\r\n };\r\n\r\n const inputBaseClasses = `\r\n w-full px-4 py-3 rounded-xl border \r\n transition-all duration-200 \r\n focus:ring-2 focus:outline-none\r\n bg-surface\r\n text-main\r\n placeholder-text-muted\r\n `;\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n <div className=\"grid lg:grid-cols-3 gap-12\">\r\n {/* Form Section */}\r\n <div className=\"lg:col-span-4\">\r\n <div className=\"bg-surface rounded-2xl p-8 shadow-lg border transition-colors duration-200\" style={{ borderColor: 'var(--border-color)' }}>\r\n <div className=\"flex items-center mb-6\">\r\n <div className=\"w-10 h-10 rounded-lg bg-gradient-brand flex items-center justify-center mr-4\">\r\n <Send size={20} className=\"text-white\" />\r\n </div>\r\n\r\n <div>\r\n <h2 className=\"text-subtitle font-bold text-main\">\r\n {t('form.title') || 'Gửi yêu cầu tư vấn'}\r\n </h2>\r\n <p className=\"text-small text-muted\">\r\n {t('form.subtitle') || 'Điền thông tin để nhận tư vấn miễn phí từ chuyên gia'}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n {/* Success/Error Message */}\r\n {submitStatus && (\r\n <div className={`mb-6 p-4 rounded-xl border transition-colors duration-200 ${\r\n submitStatus === 'success'\r\n ? 'bg-emerald-50 dark:bg-emerald-900/30 text-emerald-800 dark:text-emerald-300'\r\n : 'bg-red-50 dark:bg-red-900/30 text-red-800 dark:text-red-300'\r\n }`} style={{ borderColor: submitStatus === 'success' ? '#10b981' : '#ef4444' }}>\r\n <div className=\"flex items-center\">\r\n {submitStatus === 'success' ? (\r\n <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-small font-medium\">{submitMessage}</p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n <form onSubmit={handleSubmit} className=\"space-y-6\">\r\n {/* Name and Email */}\r\n <div className=\"grid md:grid-cols-2 gap-6\">\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.fullName') || 'Họ và tên'} *\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"fullName\"\r\n value={formData.fullName || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.fullName ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder={t('contact.form.namePlaceholder')}\r\n required\r\n />\r\n {formErrors.fullName && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <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=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.workEmail') || 'Email'} *\r\n </label>\r\n <input\r\n type=\"email\"\r\n name=\"workEmail\"\r\n value={formData.workEmail || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.workEmail ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder=\"email@company.com\"\r\n required\r\n />\r\n {formErrors.workEmail && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <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=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.phoneNumber') || 'Số điện thoại'}\r\n </label>\r\n <input\r\n type=\"tel\"\r\n name=\"phoneNumber\"\r\n value={formData.phoneNumber || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.phoneNumber ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder=\"0901 234 567\"\r\n />\r\n {formErrors.phoneNumber && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <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=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.companyName') || 'Công ty/Tổ chức'}\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"companyName\"\r\n value={formData.companyName || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.companyName ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder={t('contact.form.fields.company')}\r\n />\r\n {formErrors.companyName && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <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=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.jobTitle') || 'Chức vụ'}\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"jobTitle\"\r\n value={formData.jobTitle || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.jobTitle ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder={t('contact.form.positionPlaceholder')}\r\n />\r\n {formErrors.jobTitle && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <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=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.businessType') || 'Loại hình kinh doanh'}\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"businessType\"\r\n value={formData.businessType || ''}\r\n onChange={handleInputChange}\r\n className={inputBaseClasses}\r\n style={{ borderColor: 'var(--border-color)' }}\r\n placeholder={t('form.fields.businessType')}\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Expected Budget and Timeline */}\r\n <div className=\"grid md:grid-cols-2 gap-6\">\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.expectedBudget') || 'Ngân sách dự kiến'}\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"expectedBudget\"\r\n value={formData.expectedBudget || ''}\r\n onChange={handleInputChange}\r\n className={inputBaseClasses}\r\n style={{ borderColor: 'var(--border-color)' }}\r\n placeholder={t('form.fields.expectedBudget')}\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.expectedTimeline') || 'Thời gian dự kiến'}\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"expectedTimeline\"\r\n value={formData.expectedTimeline || ''}\r\n onChange={handleInputChange}\r\n className={inputBaseClasses}\r\n style={{ borderColor: 'var(--border-color)' }}\r\n placeholder={t('form.fields.expectedTimeline')}\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Request Title */}\r\n <div>\r\n <label className=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.requestTitle') || 'Tiêu đề yêu cầu'} *\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"requestTitle\"\r\n value={formData.requestTitle || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n className={inputBaseClasses}\r\n style={{ borderColor: formErrors.requestTitle ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder={t('contact.form.placeholders.subject')}\r\n required\r\n />\r\n {formErrors.requestTitle && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <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=\"block text-small font-semibold mb-2 text-main\">\r\n {t('form.fields.requestDescription') || 'Mô tả yêu cầu'} *\r\n </label>\r\n <textarea\r\n name=\"requestDescription\"\r\n value={formData.requestDescription || ''}\r\n onChange={handleInputChange}\r\n onBlur={handleBlur}\r\n rows=\"5\"\r\n className={`${inputBaseClasses} resize-none`}\r\n style={{ borderColor: formErrors.requestDescription ? '#ef4444' : 'var(--border-color)' }}\r\n placeholder={t('contact.form.placeholders.message')}\r\n required\r\n />\r\n {formErrors.requestDescription && (\r\n <p className=\"mt-1 text-small text-red-500 flex items-center\">\r\n <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 btn-primary text-white py-4 px-6 rounded-xl transition-all disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center font-semibold\"\r\n >\r\n {isSubmitting ? (\r\n <>\r\n <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 </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, Clock, User } from 'lucide-react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\r\nconst ContactInfoSection = ({ data, t, isDarkMode, section }) => {\r\n const contactData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data)\r\n ?.map((item) => item.data)\r\n || [];\r\n\r\n const sectionTitle = section?.title || '...';\r\n\r\n if (!contactData.length) return null;\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Section Title */}\r\n <div className=\"text-center mb-12\">\r\n <div className=\"inline-flex items-center px-4 py-2 rounded-full text-lg font-semibold mb-4 bg-surface\" style={{ borderWidth: '1px', borderColor: 'var(--border-color)' }}>\r\n <User size={22} className=\"mr-2 text-brand-primary\" />\r\n <span className=\"text-main\">{sectionTitle}</span>\r\n </div>\r\n </div>\r\n\r\n {/* Contact Cards Grid */}\r\n <div className=\"grid md:grid-cols-2 lg:grid-cols-3 gap-8\">\r\n {contactData.map((contact, index) => (\r\n <div key={contact.id || index} className=\"card\">\r\n {/* Avatar & Name */}\r\n <div className=\"text-center mb-6\">\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '5rem',\r\n height: '5rem',\r\n borderRadius: '9999px',\r\n margin: '0 auto 1rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }}>\r\n <User size={32} style={{ color: 'white' }} />\r\n </div>\r\n \r\n <h3 className=\"card-title text-subtitle mb-2\">\r\n {contact.name}\r\n </h3>\r\n \r\n <span className=\"inline-block px-3 py-1 rounded-full text-small font-semibold bg-surface text-brand-primary\" style={{ borderWidth: '1px', borderColor: 'var(--border-color)' }}>\r\n {contact.position}\r\n </span>\r\n </div>\r\n\r\n {/* Contact Information */}\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\r\n {/* Phone */}\r\n <a\r\n href={`tel:${contact.phone}`}\r\n className=\"card-link\"\r\n style={{\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)',\r\n transition: 'all 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n >\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <Phone size={18} style={{ color: 'white' }} />\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n {t('contact.info.phone') || 'Điện thoại'}\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.phone}\r\n </p>\r\n </div>\r\n </a>\r\n\r\n {/* Email */}\r\n <a\r\n href={`mailto:${contact.email}`}\r\n className=\"card-link\"\r\n style={{\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)',\r\n transition: 'all 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n >\r\n <div className=\"bg-gradient-accent\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <Mail size={18} style={{ color: 'white' }} />\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n Email\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.email}\r\n </p>\r\n </div>\r\n </a>\r\n\r\n {/* Working Hours */}\r\n {contact.workingHours && (\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)'\r\n }}>\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <Clock size={18} style={{ color: 'white' }} />\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n {t('contact.info.workingHours') || 'Giờ làm việc'}\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.workingHours || t('contact.info.defaultWorkingHours') || 'T2-T6: 8:00-18:00'}\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default ContactInfoSection;","import React, { useState, useEffect } from 'react';\r\nimport { Phone, Mail, Clock, User } from 'lucide-react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\r\nconst ContactListAutoSection = ({ data, t, isDarkMode, getContactList, section }) => {\r\n const [contacts, setContacts] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState(null);\r\n const sectionTitle = section?.title || '...';\r\n\r\n useEffect(() => {\r\n loadContacts();\r\n }, []);\r\n\r\n const loadContacts = async () => {\r\n try {\r\n setLoading(true);\r\n const result = await getContactList();\r\n if (result.success) {\r\n setContacts(result.data || []);\r\n } else {\r\n setError(result.error);\r\n }\r\n } catch (err) {\r\n console.error('Error loading contacts:', err);\r\n setError(t('contactList.error.loadData') || 'Có lỗi xảy ra khi tải danh sách liên hệ');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n // Loading State\r\n if (loading) {\r\n return (\r\n <div className=\"py-16 px-5 text-center bg-body\">\r\n <div className=\"inline-block w-10 h-10 border-4 border-color rounded-full animate-spin\" style={{ borderTopColor: 'var(--brand-primary)' }}></div>\r\n <p className=\"mt-4 text-muted\">\r\n {t('contactList.status.loading') || 'Đang tải danh sách liên hệ...'}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n // Error State\r\n if (error) {\r\n return (\r\n <div className=\"py-16 px-5 text-center bg-body\">\r\n <div className=\"text-base mb-2\" style={{ color: '#ef4444' }}>\r\n ⚠️ {t('contactList.error.title') || 'Lỗi tải dữ liệu'}\r\n </div>\r\n <p className=\"text-muted\">{error}</p>\r\n </div>\r\n );\r\n }\r\n\r\n // Empty State\r\n if (!contacts || contacts.length === 0) {\r\n return (\r\n <div className=\"py-16 px-5 text-center bg-body\">\r\n <div className=\"text-5xl mb-5\">📞</div>\r\n <h3 className=\"text-muted mb-2\">\r\n {t('contactList.status.noData.title') || 'Chưa có thông tin liên hệ'}\r\n </h3>\r\n <p className=\"text-muted opacity-75\">\r\n {t('contactList.status.noData.description') || 'Danh sách liên hệ sẽ hiển thị tại đây'}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n // Main Content\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n {/* Section Title */}\r\n <div className=\"text-center mb-12\">\r\n <div className=\"inline-flex items-center px-4 py-2 rounded-full text-lg font-semibold mb-4 bg-surface\" style={{ borderWidth: '1px', borderColor: 'var(--border-color)' }}>\r\n <User size={22} className=\"mr-2 text-brand-primary\" />\r\n <span className=\"text-main\">{sectionTitle}</span>\r\n </div>\r\n </div>\r\n\r\n {/* Contact Cards Grid */}\r\n <div className=\"grid md:grid-cols-2 lg:grid-cols-3 gap-8\">\r\n {contacts.map((contact, index) => (\r\n <ContactCard key={contact.id || index} contact={contact} t={t} isDarkMode={isDarkMode} />\r\n ))}\r\n </div>\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nconst ContactCard = ({ contact, t, isDarkMode }) => {\r\n return (\r\n <div className=\"card\">\r\n {/* Avatar & Name */}\r\n <div className=\"text-center mb-6\">\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '5rem',\r\n height: '5rem',\r\n borderRadius: '9999px',\r\n margin: '0 auto 1rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }}>\r\n <User size={32} style={{ color: 'white' }} />\r\n </div>\r\n \r\n <h3 className=\"card-title text-subtitle mb-2\">\r\n {contact.name || t('contactList.card.noName') || 'Không có tên'}\r\n </h3>\r\n \r\n <span className=\"inline-block px-3 py-1 rounded-full text-small font-semibold bg-surface text-brand-primary\" style={{ borderWidth: '1px', borderColor: 'var(--border-color)' }}>\r\n {contact.position || t('contactList.card.noPosition') || 'Chưa có chức vụ'}\r\n </span>\r\n </div>\r\n\r\n {/* Contact Information */}\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\r\n {/* Phone */}\r\n {contact.phone && (\r\n <a\r\n href={`tel:${contact.phone}`}\r\n className=\"card-link\"\r\n style={{\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)',\r\n transition: 'all 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n >\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <Phone size={18} style={{ color: 'white' }} />\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n {t('contactList.card.phone') || 'Điện thoại'}\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.phone}\r\n </p>\r\n </div>\r\n </a>\r\n )}\r\n\r\n {/* Email */}\r\n {contact.email && (\r\n <a\r\n href={`mailto:${contact.email}`}\r\n className=\"card-link\"\r\n style={{\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)',\r\n transition: 'all 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n >\r\n <div className=\"bg-gradient-accent\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <Mail size={18} style={{ color: 'white' }} />\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n Email\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.email}\r\n </p>\r\n </div>\r\n </a>\r\n )}\r\n\r\n {/* Working Hours */}\r\n {contact.workingHours && (\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '0.75rem',\r\n borderRadius: '0.75rem',\r\n backgroundColor: 'var(--bg-body)',\r\n borderWidth: '1px',\r\n borderColor: 'var(--border-color)'\r\n }}>\r\n <div className=\"bg-gradient-brand\" style={{\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '0.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '0.75rem'\r\n }}>\r\n <Clock size={18} style={{ color: 'white' }} />\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p className=\"text-small text-muted\" style={{ marginBottom: '0.25rem' }}>\r\n {t('contactList.card.workingHours') || 'Giờ làm việc'}\r\n </p>\r\n <p className=\"text-body text-main\" style={{ fontWeight: 600 }}>\r\n {contact.workingHours || t('contactList.card.defaultWorkingHours') || 'T2-T6: 8:00-18:00'}\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ContactListAutoSection;","import React, { useState, useEffect } from \"react\";\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\nconst CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback, section }) => {\r\n const [feedbacks, setFeedbacks] = useState([]);\r\n const [currentIndex, setCurrentIndex] = useState(0);\r\n const sectionTitle = section?.title || '...';\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n const res = await loadCustomerFeedback();\r\n if (res.success) {\r\n setFeedbacks(Array.isArray(res.data) ? res.data : []);\r\n } else {\r\n setFeedbacks([]);\r\n }\r\n };\r\n fetchData();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (feedbacks.length > 1) {\r\n const interval = setInterval(() => {\r\n setCurrentIndex((prev) => (prev + 1) % feedbacks.length);\r\n }, 5000);\r\n return () => clearInterval(interval);\r\n }\r\n }, [feedbacks.length]);\r\n\r\n useEffect(() => {\r\n if (currentIndex >= feedbacks.length) {\r\n setCurrentIndex(0);\r\n }\r\n }, [feedbacks.length, currentIndex]);\r\n\r\n if (!feedbacks.length) {\r\n return (\r\n <section\r\n className={`py-20 transition-colors duration-200 ${isDarkMode ? \"bg-gray-700\" : \"bg-gray-50\"\r\n }`}\r\n >\r\n <div className=\"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center\">\r\n <div\r\n className={`w-24 h-24 mx-auto mb-6 rounded-full flex items-center justify-center ${isDarkMode ? \"bg-gray-800\" : \"bg-gray-200\"\r\n }`}\r\n >\r\n <svg\r\n className={`w-12 h-12 ${isDarkMode ? \"text-gray-600\" : \"text-gray-400\"\r\n }`}\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\"\r\n />\r\n </svg>\r\n </div>\r\n <h3\r\n className={`text-xl font-semibold mb-4 ${isDarkMode ? \"text-white\" : \"text-gray-900\"\r\n }`}\r\n >\r\n {t(\"customerFeedback.emptyTitle\") || \"Chưa có phản hồi từ khách hàng\"}\r\n </h3>\r\n <p\r\n className={`text-lg ${isDarkMode ? \"text-gray-300\" : \"text-gray-600\"\r\n }`}\r\n >\r\n {t(\"customerFeedback.emptyDescription\") ||\r\n \"Các phản hồi từ khách hàng sẽ được hiển thị tại đây.\"}\r\n </p>\r\n </div>\r\n </section>\r\n );\r\n }\r\n\r\n const currentFeedback = feedbacks[currentIndex];\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center\">\r\n <div\r\n className=\"\r\n inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 \r\n border shadow-sm \r\n section-badge\r\n \"\r\n >\r\n 💬 {sectionTitle}\r\n </div>\r\n\r\n\r\n <div className=\"relative\">\r\n <div\r\n key={currentIndex}\r\n className=\"card\"\r\n >\r\n <blockquote className=\"card-text text-lg lg:text-xl italic mb-6 leading-relaxed\">\r\n \"{currentFeedback.content}\"\r\n </blockquote>\r\n\r\n <div className=\"flex items-center justify-center space-x-4\">\r\n <div className=\"text-3xl\">👤</div>\r\n <div className=\"text-left\">\r\n <div className=\"card-title text-base mb-1\">\r\n {currentFeedback.customerName}\r\n </div>\r\n\r\n <div className=\"card-link text-sm\">\r\n {currentFeedback.customerTitle}\r\n </div>\r\n\r\n {currentFeedback.customerCompany && (\r\n <div className=\"card-text text-xs mt-1\">\r\n {currentFeedback.customerCompany}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {feedbacks.length > 1 && (\r\n <div className=\"flex justify-center space-x-2 mt-4\">\r\n {feedbacks.map((_, index) => (\r\n <button\r\n key={index}\r\n onClick={() => setCurrentIndex(index)}\r\n aria-label={\r\n t(\"customerFeedback.switchToFeedback\", { number: index + 1 }) ||\r\n `Chuyển đến phản hồi ${index + 1}`\r\n }\r\n className={`\r\n w-2.5 h-2.5 rounded-full transition-all duration-300\r\n ${index === currentIndex\r\n ? \"bg-brand-secondary\"\r\n : \"bg-surface hover:bg-brand-primary\"\r\n }\r\n `}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n</div>\r\n\r\n </div>\r\n\r\n <style jsx>{`\r\n .animate-fadeIn {\r\n animation: fadeIn 0.5s ease-in-out;\r\n }\r\n @keyframes fadeIn {\r\n from {\r\n opacity: 0;\r\n transform: translateY(10px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n }\r\n `}</style>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default CustomerFeedbackAutoSection;","import React, { useState, useEffect } from 'react';\r\n\r\nconst ProductListSection = ({ data, t, isDarkMode, getProductList }) => {\r\n const [products, setProducts] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState(null);\r\n\r\n useEffect(() => {\r\n const fetchProducts = async () => {\r\n try {\r\n setLoading(true);\r\n const result = await getProductList();\r\n\r\n if (result.success) {\r\n setProducts(result.data || []);\r\n } else {\r\n setError(result.error || t('productList.errors.loadFailed'));\r\n }\r\n } catch (err) {\r\n console.error('Error fetching products:', err);\r\n setError(t('productList.errors.loadError'));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n fetchProducts();\r\n }, [t]);\r\n\r\n if (loading) {\r\n return (\r\n <div className={`py-16 px-5 text-center ${isDarkMode ? 'bg-gray-900' : 'bg-gray-50'}`}>\r\n <div className={`inline-block w-10 h-10 border-4 ${isDarkMode ? 'border-gray-600 border-t-blue-400' : 'border-gray-300 border-t-blue-500'} rounded-full animate-spin`}></div>\r\n <p className={`mt-2.5 text-base ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n {t('productList.loading')}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <div className={`py-16 px-5 text-center ${isDarkMode ? 'bg-gray-900' : 'bg-gray-50'}`}>\r\n <div className=\"text-red-500 text-5xl mb-4\">\r\n ⚠️\r\n </div>\r\n <p className=\"text-red-500 text-base m-0\">\r\n {error}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n if (!products || products.length === 0) {\r\n return (\r\n <div className={`py-16 px-5 text-center ${isDarkMode ? 'bg-gray-900' : 'bg-gray-50'}`}>\r\n <div className={`text-5xl mb-4 ${isDarkMode ? 'text-gray-400' : 'text-gray-500'}`}>\r\n 📦\r\n </div>\r\n <p className={`text-base m-0 ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n {t('productList.noProducts')}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={`py-16 px-5 transition-colors duration-300 ${isDarkMode ? 'bg-gray-900' : 'bg-gray-50'}`}>\r\n <div className=\"max-w-6xl mx-auto\">\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-8 items-start\">\r\n {products.map((product, index) => (\r\n <ProductCard key={product.id || index} product={product} t={t} isDarkMode={isDarkMode} />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst ProductCard = ({ product, t, isDarkMode }) => {\r\n const [activeTab, setActiveTab] = useState('overview');\r\n const [isHovered, setIsHovered] = useState(false);\r\n\r\n const mainImage = product.images?.find(img => img.isMain)?.imageUrl ||\r\n product.images?.[0]?.imageUrl ||\r\n '/placeholder-product.png';\r\n\r\n const tabs = [\r\n { id: 'overview', label: t('productCard.tabs.overview'), count: null },\r\n { id: 'features', label: t('productCard.tabs.features'), count: product.features?.length || 0 },\r\n { id: 'contacts', label: t('productCard.tabs.contacts'), count: product.contacts?.length || 0 },\r\n { id: 'downloads', label: t('productCard.tabs.downloads'), count: product.productDownloads?.length || 0 }\r\n ];\r\n\r\n const renderOverview = () => (\r\n <div className=\"p-5\">\r\n <div\r\n className={`text-sm leading-relaxed ${isDarkMode ? 'text-gray-300' : 'text-gray-700'}`}\r\n dangerouslySetInnerHTML={{\r\n __html: product.overviewContent || product.description || t('productCard.noOverview')\r\n }}\r\n />\r\n </div>\r\n );\r\n\r\n const renderFeatures = () => {\r\n const features = product.features || [];\r\n\r\n if (features.length === 0) {\r\n return (\r\n <div className={`p-5 text-center ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n <p className=\"m-0\">{t('productCard.noFeatures')}</p>\r\n </div>\r\n );\r\n }\r\n\r\n const sortedFeatures = [...features].sort((a, b) => (a.order || 0) - (b.order || 0));\r\n\r\n return (\r\n <div className=\"p-5\">\r\n <div className=\"flex flex-col gap-4\">\r\n {sortedFeatures.map((feature, index) => (\r\n <div\r\n key={index}\r\n className={`p-4 rounded-lg border-l-4 border-blue-500 ${isDarkMode ? 'bg-gray-700' : 'bg-gray-100'}`}\r\n >\r\n <h4 className={`m-0 mb-2 text-sm font-bold ${isDarkMode ? 'text-white' : 'text-gray-900'}`}>\r\n {feature.title}\r\n </h4>\r\n <p className={`m-0 text-xs leading-relaxed ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n {feature.description}\r\n </p>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderContacts = () => {\r\n const contacts = product.contacts || [];\r\n\r\n if (contacts.length === 0) {\r\n return (\r\n <div className={`p-5 text-center ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n <p className=\"m-0\">{t('productCard.noContacts')}</p>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"p-5\">\r\n <div className=\"flex flex-col gap-4\">\r\n {contacts.map((contact, index) => (\r\n <div\r\n key={contact.id || index}\r\n className={`p-4 rounded-lg border ${isDarkMode ? 'bg-gray-700 border-gray-600' : 'bg-gray-100 border-gray-200'}`}\r\n >\r\n <div className=\"flex items-center mb-2\">\r\n <div className={`w-10 h-10 rounded-full flex items-center justify-center mr-3 ${isDarkMode ? 'bg-blue-600' : 'bg-blue-500'}`}>\r\n <span className=\"text-white font-bold text-base\">\r\n {contact.name?.charAt(0)?.toUpperCase() || '?'}\r\n </span>\r\n </div>\r\n <div>\r\n <h4 className={`m-0 mb-0.5 text-sm font-bold ${isDarkMode ? 'text-white' : 'text-gray-900'}`}>\r\n {contact.name}\r\n </h4>\r\n <p className={`m-0 text-xs ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n {contact.position}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex flex-col gap-1\">\r\n {contact.phone && (\r\n <div className=\"flex items-center gap-2\">\r\n <span className={`text-sm ${isDarkMode ? 'text-blue-400' : 'text-blue-500'}`}>📞</span>\r\n <a\r\n href={`tel:${contact.phone}`}\r\n className={`text-xs no-underline hover:underline ${isDarkMode ? 'text-blue-400' : 'text-blue-500'}`}\r\n >\r\n {contact.phone}\r\n </a>\r\n </div>\r\n )}\r\n {contact.email && (\r\n <div className=\"flex items-center gap-2\">\r\n <span className={`text-sm ${isDarkMode ? 'text-blue-400' : 'text-blue-500'}`}>✉️</span>\r\n <a\r\n href={`mailto:${contact.email}`}\r\n className={`text-xs no-underline hover:underline ${isDarkMode ? 'text-blue-400' : 'text-blue-500'}`}\r\n >\r\n {contact.email}\r\n </a>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderDownloads = () => {\r\n const downloads = product.productDownloads || [];\r\n\r\n if (downloads.length === 0) {\r\n return (\r\n <div className={`p-5 text-center ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n <p className=\"m-0\">{t('productCard.noDownloads')}</p>\r\n </div>\r\n );\r\n }\r\n\r\n const handleDownload = (fileUrl, title) => {\r\n try {\r\n const link = document.createElement('a');\r\n link.href = fileUrl;\r\n link.download = title || 'download';\r\n link.target = '_blank';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n } catch (error) {\r\n console.error('Download error:', error);\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"p-5\">\r\n <div className=\"flex flex-col gap-3\">\r\n {downloads.map((download, index) => (\r\n <div\r\n key={index}\r\n onClick={() => handleDownload(download.fileUrl, download.title)}\r\n className={`p-4 rounded-lg border cursor-pointer flex items-center gap-3 transition-all duration-200 hover:translate-x-1 ${isDarkMode\r\n ? 'bg-gray-700 border-gray-600 hover:bg-gray-600'\r\n : 'bg-gray-100 border-gray-200 hover:bg-gray-200'\r\n }`}\r\n >\r\n <div className={`w-10 h-10 rounded-lg flex items-center justify-center flex-shrink-0 ${isDarkMode ? 'bg-blue-600' : 'bg-blue-500'}`}>\r\n <span className=\"text-white text-lg\">📄</span>\r\n </div>\r\n\r\n <div className=\"flex-1 min-w-0\">\r\n <h4 className={`m-0 mb-1 text-sm font-bold overflow-hidden text-ellipsis whitespace-nowrap ${isDarkMode ? 'text-white' : 'text-gray-900'}`}>\r\n {download.title}\r\n </h4>\r\n <p className={`m-0 text-xs ${isDarkMode ? 'text-gray-400' : 'text-gray-600'}`}>\r\n {t('productCard.downloadClick')}\r\n </p>\r\n </div>\r\n\r\n <div className={`flex-shrink-0 text-base ${isDarkMode ? 'text-blue-400' : 'text-blue-500'}`}>\r\n ⬇️\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderTabContent = () => {\r\n switch (activeTab) {\r\n case 'overview':\r\n return renderOverview();\r\n case 'features':\r\n return renderFeatures();\r\n case 'contacts':\r\n return renderContacts();\r\n case 'downloads':\r\n return renderDownloads();\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n className={`\r\n rounded-xl overflow-hidden cursor-pointer transition-all duration-300 border\r\n ${isDarkMode\r\n ? 'bg-gray-800 border-gray-700'\r\n : 'bg-white border-gray-200'\r\n }\r\n ${isHovered\r\n ? `shadow-xl -translate-y-2 ${isDarkMode ? 'shadow-gray-900/40' : 'shadow-gray-500/20'}`\r\n : `shadow-lg ${isDarkMode ? 'shadow-gray-900/20' : 'shadow-gray-500/10'}`\r\n }\r\n `}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n >\r\n <div\r\n className={`relative h-48 bg-cover bg-center ${isDarkMode ? 'bg-gray-700' : 'bg-gray-200'}`}\r\n style={{\r\n backgroundImage: `url(${mainImage})`,\r\n }}\r\n >\r\n <div className=\"absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/70 via-black/30 to-transparent p-5 text-white\">\r\n <h3 className=\"m-0 mb-2 text-lg font-bold\">\r\n {product.name}\r\n </h3>\r\n <p className=\"m-0 text-sm opacity-90\">\r\n {product.description}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className={`border-b ${isDarkMode ? 'border-gray-600' : 'border-gray-200'}`}>\r\n <div className=\"flex overflow-x-auto\">\r\n {tabs.map(tab => (\r\n <button\r\n key={tab.id}\r\n onClick={() => setActiveTab(tab.id)}\r\n className={`\r\n flex-1 min-w-[100px] py-4 px-2 border-none text-xs font-medium cursor-pointer transition-all duration-300 flex items-center justify-center gap-1\r\n ${activeTab === tab.id\r\n ? `${isDarkMode ? 'bg-blue-600' : 'bg-blue-500'} text-white font-bold`\r\n : `bg-transparent ${isDarkMode ? 'text-gray-400 hover:bg-gray-700' : 'text-gray-600 hover:bg-gray-100'}`\r\n }\r\n `}\r\n >\r\n <span>{tab.label}</span>\r\n {tab.count !== null && (\r\n <span className={`\r\n text-xs py-0.5 px-1.5 rounded-full min-w-[18px] text-center\r\n ${activeTab === tab.id\r\n ? 'bg-white/20 text-white'\r\n : `${isDarkMode ? 'bg-gray-600 text-gray-400' : 'bg-gray-200 text-gray-600'}`\r\n }\r\n `}>\r\n {tab.count}\r\n </span>\r\n )}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <div className=\"min-h-[200px] max-h-[300px] overflow-y-auto\">\r\n {renderTabContent()}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ProductListSection;","import React from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\r\nconst TextWithTitleSection = ({ section, data, isDarkMode }) => {\r\n\r\n const textItems = data?.sectionDataBindingItems || [];\r\n\r\n // Item đầu tiên là title, các item còn lại là description\r\n const title = textItems[0]?.value || '';\r\n const descriptions = textItems.slice(1);\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-6xl mx-auto\">\r\n {title && (\r\n <h2 className=\"text-title font-black mb-4 leading-tight text-left text-main\">\r\n {title}\r\n </h2>\r\n )}\r\n\r\n {descriptions.map((item, index) => (\r\n <div\r\n key={item.id || index}\r\n className={`text-body leading-relaxed text-left font-normal text-muted ${\r\n index < descriptions.length - 1 ? 'mb-4' : ''\r\n }`}\r\n >\r\n {item.value}\r\n </div>\r\n ))}\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default TextWithTitleSection;","import React from 'react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\r\nconst TextSection = ({ data, isDarkMode }) => {\r\n const textItems = data?.sectionDataBindingItems || [];\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-3xl mx-auto\">\r\n {textItems.map((item, index) => (\r\n <div\r\n key={item.id || index}\r\n className=\"mb-5 text-subtitle font-black leading-snug text-left text-main\"\r\n >\r\n {item.value}\r\n </div>\r\n ))}\r\n </div>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default TextSection;","import React, { useState, useEffect } from 'react';\r\nimport { Calculator, TrendingUp, FileText, Cloud, ShoppingCart, Truck, Bed, Users, Package, Database, Settings, Globe } from 'lucide-react';\r\n\r\nconst DiagramSection = ({ data, t, isDarkMode }) => {\r\n const [mounted, setMounted] = useState(false);\r\n const [isMobile, setIsMobile] = useState(false);\r\n\r\n const safeT = typeof t === 'function' ? t : (key, options) => {\r\n console.warn(`Translation function not provided for key: ${key}`);\r\n return key;\r\n };\r\n\r\n useEffect(() => {\r\n setMounted(true);\r\n \r\n const checkMobile = () => {\r\n setIsMobile(window.innerWidth < 768);\r\n };\r\n \r\n checkMobile();\r\n window.addEventListener('resize', checkMobile);\r\n return () => window.removeEventListener('resize', checkMobile);\r\n }, []);\r\n\r\n const diagramData = data?.sectionDataBindingItems?.[0]?.data;\r\n\r\n if (!diagramData) {\r\n return null;\r\n }\r\n\r\n const diagramName = diagramData.name || safeT('diagram.defaults.name');\r\n const diagramDescription = diagramData.description || safeT('diagram.defaults.description');\r\n const modules = diagramData.diagramChildrenDTOs || [];\r\n\r\n const getIconComponent = (iconName) => {\r\n const icons = {\r\n Calculator, TrendingUp, FileText, Cloud, ShoppingCart, \r\n Truck, Bed, Users, Package, Database, Settings, Globe\r\n };\r\n return icons[iconName] || Settings;\r\n };\r\n\r\n const getColorStyles = (index) => {\r\n const isCyan = index % 2 === 0;\r\n if (isCyan) {\r\n return {\r\n gradient: 'linear-gradient(to right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))',\r\n border: 'var(--gradient-brand-soft-start)',\r\n line: 'var(--gradient-brand-soft-start)',\r\n iconBg: 'var(--gradient-brand-soft-start)',\r\n shadow: 'rgba(59, 130, 246, 0.2)'\r\n };\r\n }\r\n return {\r\n gradient: 'linear-gradient(to right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))',\r\n border: 'var(--gradient-accent-soft-start)',\r\n line: 'var(--gradient-accent-soft-start)',\r\n iconBg: 'var(--gradient-accent-soft-start)',\r\n shadow: 'rgba(139, 92, 246, 0.2)'\r\n };\r\n };\r\n\r\n const calculateAngles = (count) => {\r\n return modules.map((_, index) => {\r\n return (360 / count) * index - 90;\r\n });\r\n };\r\n\r\n const angles = calculateAngles(modules.length);\r\n\r\n // Mobile view - List layout\r\n if (isMobile) {\r\n return (\r\n <div className=\"w-full p-4 relative overflow-hidden bg-section-soft\">\r\n {/* Background effects */}\r\n <div className=\"absolute inset-0 overflow-hidden pointer-events-none opacity-20\">\r\n {[...Array(50)].map((_, i) => (\r\n <div\r\n key={i}\r\n className=\"absolute rounded-full bg-brand-primary\"\r\n style={{\r\n opacity: 0.2,\r\n width: Math.random() * 3 + 1 + 'px',\r\n height: Math.random() * 3 + 1 + 'px',\r\n top: Math.random() * 100 + '%',\r\n left: Math.random() * 100 + '%',\r\n animation: `twinkle ${Math.random() * 3 + 2}s ease-in-out infinite`,\r\n animationDelay: Math.random() * 3 + 's'\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n <style>{`\r\n @keyframes twinkle {\r\n 0%, 100% { opacity: 0.1; transform: scale(1); }\r\n 50% { opacity: 0.3; transform: scale(1.5); }\r\n }\r\n @keyframes slideUp {\r\n from { opacity: 0; transform: translateY(20px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `}</style>\r\n\r\n {/* Header Card */}\r\n <div className=\"mb-6 backdrop-blur-md rounded-2xl border-2 p-6 shadow-2xl text-center bg-gradient-brand border-brand-primary\">\r\n <h2 className=\"text-title text-inverse mb-1 tracking-wide\">{diagramName}</h2>\r\n <p className=\"text-body text-inverse\">{diagramDescription}</p>\r\n </div>\r\n\r\n {/* Modules List */}\r\n <div className=\"space-y-3\">\r\n {modules.map((module, index) => {\r\n const Icon = getIconComponent(module.icon);\r\n const colors = getColorStyles(index);\r\n \r\n return (\r\n <a\r\n key={module.id}\r\n href={module.url || '#'}\r\n className=\"block backdrop-blur-md rounded-2xl border-2 p-4 flex items-center gap-3 shadow-lg active:scale-95 transition-all duration-200\"\r\n style={{\r\n background: colors.gradient,\r\n borderColor: colors.border,\r\n animation: `slideUp 0.5s ease-out ${index * 0.1}s both`\r\n }}\r\n >\r\n <div \r\n className=\"flex-shrink-0 p-3 rounded-xl border\"\r\n style={{ \r\n backgroundColor: `${colors.iconBg}33`,\r\n borderColor: colors.border\r\n }}\r\n >\r\n <Icon className=\"w-6 h-6 text-inverse\" strokeWidth={2} />\r\n </div>\r\n <div className=\"flex-1\">\r\n <span className=\"block text-inverse text-small tracking-wide mb-1\">\r\n {module.name}\r\n </span>\r\n {module.description && (\r\n <span className=\"block text-inverse text-caption\">\r\n {module.description}\r\n </span>\r\n )}\r\n </div>\r\n </a>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Desktop view - Circular layout\r\n return (\r\n <div className=\"section-wrapper w-full py-24 px-4 sm:px-8 relative overflow-visible bg-section-soft\">\r\n {/* Animated background particles */}\r\n <div className=\"absolute inset-0 overflow-hidden pointer-events-none\">\r\n {[...Array(100)].map((_, i) => (\r\n <div\r\n key={i}\r\n className=\"absolute rounded-full bg-brand-primary\"\r\n style={{\r\n opacity: isDarkMode ? 0.2 : 0.1,\r\n width: Math.random() * 4 + 1 + 'px',\r\n height: Math.random() * 4 + 1 + 'px',\r\n top: Math.random() * 100 + '%',\r\n left: Math.random() * 100 + '%',\r\n animation: `twinkle ${Math.random() * 3 + 2}s ease-in-out infinite`,\r\n animationDelay: Math.random() * 3 + 's'\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Animated grid lines */}\r\n <div \r\n className=\"absolute inset-0\"\r\n style={{ opacity: isDarkMode ? 0.1 : 0.05 }}\r\n >\r\n <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <defs>\r\n <pattern id=\"grid\" width=\"40\" height=\"40\" patternUnits=\"userSpaceOnUse\">\r\n <path \r\n d=\"M 40 0 L 0 0 0 40\" \r\n fill=\"none\" \r\n stroke=\"var(--brand-primary)\" \r\n strokeWidth=\"0.5\"\r\n />\r\n </pattern>\r\n </defs>\r\n <rect width=\"100%\" height=\"100%\" fill=\"url(#grid)\" />\r\n </svg>\r\n </div>\r\n\r\n {/* Circuit lines */}\r\n <svg className=\"absolute inset-0 w-full h-full pointer-events-none\" style={{ opacity: isDarkMode ? 0.3 : 0.2 }}>\r\n <line x1=\"0\" y1=\"20%\" x2=\"100%\" y2=\"20%\" stroke=\"url(#grad1)\" strokeWidth=\"1\" strokeDasharray=\"10 5\" className=\"animate-pulse\" />\r\n <line x1=\"0\" y1=\"40%\" x2=\"100%\" y2=\"40%\" stroke=\"url(#grad2)\" strokeWidth=\"1\" strokeDasharray=\"15 8\" className=\"animate-pulse\" style={{ animationDelay: '0.5s' }} />\r\n <line x1=\"0\" y1=\"60%\" x2=\"100%\" y2=\"60%\" stroke=\"url(#grad1)\" strokeWidth=\"1\" strokeDasharray=\"12 6\" className=\"animate-pulse\" style={{ animationDelay: '1s' }} />\r\n <line x1=\"0\" y1=\"80%\" x2=\"100%\" y2=\"80%\" stroke=\"url(#grad2)\" strokeWidth=\"1\" strokeDasharray=\"8 4\" className=\"animate-pulse\" style={{ animationDelay: '1.5s' }} />\r\n \r\n <line x1=\"15%\" y1=\"0\" x2=\"15%\" y2=\"100%\" stroke=\"url(#grad1)\" strokeWidth=\"1\" strokeDasharray=\"10 5\" className=\"animate-pulse\" style={{ animationDelay: '0.3s' }} />\r\n <line x1=\"35%\" y1=\"0\" x2=\"35%\" y2=\"100%\" stroke=\"url(#grad2)\" strokeWidth=\"1\" strokeDasharray=\"15 8\" className=\"animate-pulse\" style={{ animationDelay: '0.8s' }} />\r\n <line x1=\"65%\" y1=\"0\" x2=\"65%\" y2=\"100%\" stroke=\"url(#grad1)\" strokeWidth=\"1\" strokeDasharray=\"12 6\" className=\"animate-pulse\" style={{ animationDelay: '1.3s' }} />\r\n <line x1=\"85%\" y1=\"0\" x2=\"85%\" y2=\"100%\" stroke=\"url(#grad2)\" strokeWidth=\"1\" strokeDasharray=\"8 4\" className=\"animate-pulse\" style={{ animationDelay: '1.8s' }} />\r\n \r\n <circle cx=\"15%\" cy=\"20%\" r=\"3\" fill=\"var(--gradient-brand-soft-start)\" opacity=\"0.6\" className=\"animate-pulse\" />\r\n <circle cx=\"35%\" cy=\"40%\" r=\"3\" fill=\"var(--gradient-accent-soft-start)\" opacity=\"0.6\" className=\"animate-pulse\" style={{ animationDelay: '0.5s' }} />\r\n <circle cx=\"65%\" cy=\"60%\" r=\"3\" fill=\"var(--gradient-brand-soft-start)\" opacity=\"0.6\" className=\"animate-pulse\" style={{ animationDelay: '1s' }} />\r\n <circle cx=\"85%\" cy=\"80%\" r=\"3\" fill=\"var(--gradient-accent-soft-start)\" opacity=\"0.6\" className=\"animate-pulse\" style={{ animationDelay: '1.5s' }} />\r\n \r\n <defs>\r\n <linearGradient id=\"grad1\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\r\n <stop offset=\"0%\" style={{ stopColor: 'var(--gradient-brand-soft-start)', stopOpacity: 0 }} />\r\n <stop offset=\"50%\" style={{ stopColor: 'var(--gradient-brand-soft-start)', stopOpacity: 1 }} />\r\n <stop offset=\"100%\" style={{ stopColor: 'var(--gradient-brand-soft-start)', stopOpacity: 0 }} />\r\n </linearGradient>\r\n <linearGradient id=\"grad2\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\r\n <stop offset=\"0%\" style={{ stopColor: 'var(--gradient-accent-soft-start)', stopOpacity: 0 }} />\r\n <stop offset=\"50%\" style={{ stopColor: 'var(--gradient-accent-soft-start)', stopOpacity: 1 }} />\r\n <stop offset=\"100%\" style={{ stopColor: 'var(--gradient-accent-soft-start)', stopOpacity: 0 }} />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n\r\n <style>{`\r\n @keyframes twinkle {\r\n 0%, 100% { opacity: 0.1; transform: scale(1); }\r\n 50% { opacity: 0.3; transform: scale(1.5); }\r\n }\r\n \r\n @keyframes float {\r\n 0%, 100% { transform: translateY(0px); }\r\n 50% { transform: translateY(-10px); }\r\n }\r\n \r\n @keyframes rotate {\r\n from { transform: rotate(0deg); }\r\n to { transform: rotate(360deg); }\r\n }\r\n \r\n @keyframes pulse-ring {\r\n 0% { transform: scale(0.95); opacity: 1; }\r\n 50% { transform: scale(1); opacity: 0.8; }\r\n 100% { transform: scale(0.95); opacity: 1; }\r\n }\r\n \r\n @keyframes slideIn {\r\n from { \r\n opacity: 0;\r\n transform: translate(-50%, -50%) scale(0.5);\r\n }\r\n to { \r\n opacity: 1;\r\n transform: translate(-50%, -50%) scale(1);\r\n }\r\n }\r\n \r\n .animate-float {\r\n animation: float 3s ease-in-out infinite;\r\n }\r\n \r\n .animate-pulse-ring {\r\n animation: pulse-ring 2s ease-in-out infinite;\r\n }\r\n \r\n .module-card {\r\n animation: slideIn 0.8s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\r\n }\r\n\r\n @media (max-width: 1200px) {\r\n .diagram-container {\r\n transform: scale(0.75);\r\n }\r\n }\r\n\r\n @media (max-width: 900px) {\r\n .diagram-container {\r\n transform: scale(0.6);\r\n }\r\n }\r\n `}</style>\r\n\r\n <div className=\"diagram-container relative w-full max-w-5xl mx-auto h-[800px] flex items-center justify-center transition-transform duration-300\" style={{ paddingTop: '80px', paddingBottom: '80px' }}>\r\n {/* Central Circle */}\r\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\">\r\n <div className=\"absolute inset-0 w-[320px] h-[320px] -translate-x-1/2 -translate-y-1/2 top-1/2 left-1/2\">\r\n <div \r\n className=\"absolute inset-0 rounded-full border-2 animate-pulse-ring\"\r\n style={{ borderColor: 'var(--brand-primary)', opacity: 0.3 }}\r\n ></div>\r\n <div \r\n className=\"absolute inset-4 rounded-full border-2 animate-pulse-ring\" \r\n style={{ \r\n borderColor: 'var(--brand-secondary)',\r\n opacity: 0.3,\r\n animationDelay: '0.5s' \r\n }}\r\n ></div>\r\n </div>\r\n\r\n <div className=\"relative animate-float\">\r\n <div \r\n className=\"w-64 h-64 rounded-full border-8 flex items-center justify-center backdrop-blur-sm shadow-2xl bg-surface\"\r\n style={{\r\n borderColor: 'var(--border-color)'\r\n }}\r\n >\r\n <div className=\"absolute inset-0 rounded-full\" style={{ animation: 'rotate 20s linear infinite' }}>\r\n {[0, 90, 180, 270].map((angle) => (\r\n <div\r\n key={angle}\r\n className=\"absolute w-3 h-3 rounded-full shadow-lg bg-brand-primary\"\r\n style={{\r\n boxShadow: '0 0 10px var(--brand-primary)',\r\n top: '50%',\r\n left: '50%',\r\n transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-125px)`\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n <div \r\n className=\"w-52 h-52 rounded-full flex items-center justify-center shadow-2xl relative overflow-hidden border-2 backdrop-blur-md bg-gradient-brand\"\r\n style={{\r\n borderColor: isDarkMode ? 'var(--gradient-brand-soft-start)' : 'rgba(255, 255, 255, 0.4)'\r\n }}\r\n >\r\n <div className=\"absolute inset-0 bg-gradient-to-br from-white/10 to-transparent\"></div>\r\n <div className=\"text-center relative z-10 px-4\">\r\n <h2 className=\"text-title text-inverse mb-2 tracking-wide\">{diagramName}</h2>\r\n <p className=\"text-small text-inverse\">{diagramDescription}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {modules.map((module, i) => {\r\n const angle = angles[i];\r\n return (\r\n <div\r\n key={`dot-${module.id}`}\r\n className=\"absolute w-4 h-4 rounded-full border-2 shadow-lg animate-pulse bg-muted\"\r\n style={{\r\n borderColor: 'var(--border-color)',\r\n top: '50%',\r\n left: '50%',\r\n transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-132px)`,\r\n animationDelay: `${i * 0.1}s`\r\n }}\r\n />\r\n );\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* Connection lines */}\r\n <svg className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 pointer-events-none\" width=\"1000\" height=\"900\" style={{ overflow: 'visible' }}>\r\n {modules.map((module, index) => {\r\n const colors = getColorStyles(index);\r\n const angle = (angles[index] * Math.PI) / 180;\r\n const circleRadius = 132;\r\n const moduleRadius = 360;\r\n \r\n const startX = Math.cos(angle) * circleRadius;\r\n const startY = Math.sin(angle) * circleRadius;\r\n \r\n const endX = Math.cos(angle) * moduleRadius;\r\n const endY = Math.sin(angle) * moduleRadius;\r\n \r\n return (\r\n <g key={`line-${module.id}`}>\r\n <line\r\n x1={500 + startX}\r\n y1={450 + startY}\r\n x2={500 + endX}\r\n y2={450 + endY}\r\n stroke={colors.line}\r\n strokeWidth=\"2\"\r\n strokeDasharray=\"8 4\"\r\n opacity=\"0.5\"\r\n className=\"animate-pulse\"\r\n style={{ animationDelay: `${index * 0.1}s` }}\r\n />\r\n <line\r\n x1={500 + startX}\r\n y1={450 + startY}\r\n x2={500 + endX}\r\n y2={450 + endY}\r\n stroke={colors.line}\r\n strokeWidth=\"1\"\r\n opacity=\"0.8\"\r\n filter=\"blur(2px)\"\r\n />\r\n </g>\r\n );\r\n })}\r\n </svg>\r\n\r\n {/* Module Cards */}\r\n {modules.map((module, index) => {\r\n const Icon = getIconComponent(module.icon);\r\n const colors = getColorStyles(index);\r\n const angle = (angles[index] * Math.PI) / 180;\r\n const radius = 360;\r\n const x = Math.cos(angle) * radius;\r\n const y = Math.sin(angle) * radius;\r\n \r\n const normalizedAngle = ((angles[index] % 360) + 360) % 360;\r\n const isRightSide = normalizedAngle > 270 || normalizedAngle < 90;\r\n \r\n return (\r\n <a\r\n key={module.id}\r\n href={module.url || '#'}\r\n className={`absolute module-card group ${mounted ? 'opacity-100' : 'opacity-0'}`}\r\n style={{\r\n left: `calc(50% + ${x}px)`,\r\n top: `calc(50% + ${y}px)`,\r\n transform: 'translate(-50%, -50%)',\r\n animationDelay: `${index * 0.1}s`,\r\n animationFillMode: 'both'\r\n }}\r\n >\r\n <div \r\n className={`backdrop-blur-md rounded-full border-2 px-5 py-3 flex items-center gap-3 shadow-xl transition-all duration-300 group-hover:scale-110 group-hover:-translate-y-3 group-hover:shadow-2xl cursor-pointer relative ${isRightSide ? 'flex-row-reverse' : 'flex-row'}`}\r\n style={{\r\n background: colors.gradient,\r\n borderColor: colors.border,\r\n boxShadow: `0 10px 40px ${colors.shadow}`,\r\n width: '240px',\r\n height: '56px',\r\n minWidth: '240px',\r\n maxWidth: '240px',\r\n }}\r\n >\r\n <div className=\"absolute inset-0 rounded-full bg-gradient-to-r from-transparent via-white/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300\"></div>\r\n <div \r\n className=\"absolute inset-0 rounded-full border-2 opacity-0 group-hover:opacity-100 transition-all duration-300 scale-110 blur-sm\"\r\n style={{ borderColor: colors.border }}\r\n ></div>\r\n \r\n <div \r\n className=\"flex-shrink-0 p-2.5 rounded-lg border transition-all duration-300 group-hover:rotate-12 group-hover:scale-125 relative z-10\"\r\n style={{ \r\n backgroundColor: `${colors.iconBg}33`,\r\n borderColor: colors.border\r\n }}\r\n >\r\n <Icon className=\"w-5 h-5 text-inverse\" strokeWidth={2} />\r\n </div>\r\n \r\n <span className={`flex-1 text-inverse text-small tracking-wide overflow-hidden text-ellipsis whitespace-nowrap ${isRightSide ? 'text-right' : 'text-left'} relative z-10 min-w-0`}>\r\n {module.name}\r\n </span>\r\n \r\n <div \r\n className={`absolute bottom-full left-1/2 -translate-x-1/2 mb-3 px-4 py-2 rounded-lg shadow-xl opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none whitespace-nowrap z-50 border max-w-xs ${isDarkMode ? 'bg-surface' : 'bg-body'}`}\r\n style={{\r\n borderColor: 'var(--border-color)',\r\n maxHeight: '120px',\r\n overflowY: 'auto'\r\n }}\r\n >\r\n <div className=\"text-small text-main\">{module.name}</div>\r\n {module.description && (\r\n <div className=\"text-caption text-muted mt-1\">\r\n {module.description}\r\n </div>\r\n )}\r\n <div \r\n className=\"absolute top-full left-1/2 -translate-x-1/2 -mt-px border-4 border-transparent\"\r\n style={{ \r\n borderTopColor: isDarkMode ? 'var(--bg-surface)' : 'var(--bg-body)'\r\n }}\r\n ></div>\r\n </div>\r\n </div>\r\n </a>\r\n );\r\n })}\r\n\r\n {/* Decorative elements */}\r\n <div \r\n className=\"absolute bottom-12 right-12 sm:bottom-16 sm:right-20 opacity-40 text-brand-secondary\" \r\n style={{ animation: 'rotate 10s linear infinite' }}\r\n >\r\n <svg width=\"80\" height=\"80\" viewBox=\"0 0 60 60\">\r\n <path d=\"M30 0 L35 25 L60 30 L35 35 L30 60 L25 35 L0 30 L25 25 Z\" fill=\"currentColor\" />\r\n </svg>\r\n </div>\r\n\r\n <div \r\n className=\"absolute top-12 left-12 w-16 h-16 border-2 rounded-lg animate-pulse border-brand-primary\" \r\n style={{ \r\n opacity: 0.3, \r\n animation: 'rotate 8s linear infinite reverse' \r\n }}\r\n ></div>\r\n <div \r\n className=\"absolute top-20 right-16 w-12 h-12 border-2 rounded-full animate-pulse border-brand-secondary\" \r\n style={{ \r\n opacity: 0.3 \r\n }}\r\n ></div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default DiagramSection;","import React, { useState, useRef, useEffect } from 'react';\r\nimport { Calculator, Shield, Wrench, Factory, Smartphone, Building2, Megaphone, ShoppingCart, Briefcase, Users, Building, GraduationCap, Heart, Zap, Plane, Package, Bed, Home, TrendingUp, FileText, Cloud, Truck, Database, Settings, Globe } from 'lucide-react';\r\n\r\nconst MindMapNode = ({ id, icon: Icon, text, color, position, delay = 0, onDragStart, isDragging, onClick, description, isDarkMode }) => {\r\n const [isHovered, setIsHovered] = useState(false);\r\n const [dragStartPos, setDragStartPos] = useState(null);\r\n const [hasMoved, setHasMoved] = useState(false);\r\n\r\n const getColorStyles = (colorName) => {\r\n const styles = {\r\n blue: {\r\n gradient: 'linear-gradient(to bottom right, var(--brand-primary), var(--brand-primary))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))',\r\n border: 'var(--brand-primary)',\r\n shadowColor: 'var(--brand-primary)'\r\n },\r\n teal: {\r\n gradient: 'linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-brand-strong-start), var(--gradient-brand-strong-end))',\r\n border: 'var(--gradient-brand-soft-start)',\r\n shadowColor: 'var(--gradient-brand-soft-start)'\r\n },\r\n purple: {\r\n gradient: 'linear-gradient(to bottom right, var(--brand-secondary), var(--gradient-accent-soft-start))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))',\r\n border: 'var(--brand-secondary)',\r\n shadowColor: 'var(--brand-secondary)'\r\n },\r\n orange: {\r\n gradient: 'linear-gradient(to bottom right, var(--gradient-accent-strong-start), var(--gradient-accent-strong-end))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))',\r\n border: 'var(--gradient-accent-strong-start)',\r\n shadowColor: 'var(--gradient-accent-strong-start)'\r\n },\r\n cyan: {\r\n gradient: 'linear-gradient(to bottom right, var(--gradient-brand-strong-start), var(--gradient-brand-strong-end))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))',\r\n border: 'var(--gradient-brand-strong-start)',\r\n shadowColor: 'var(--gradient-brand-strong-start)'\r\n },\r\n indigo: {\r\n gradient: 'linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))',\r\n gradientHover: 'linear-gradient(to bottom right, var(--gradient-accent-strong-start), var(--gradient-accent-strong-end))',\r\n border: 'var(--gradient-accent-soft-start)',\r\n shadowColor: 'var(--gradient-accent-soft-start)'\r\n }\r\n };\r\n return styles[colorName] || styles.blue;\r\n };\r\n\r\n const colorStyle = getColorStyles(color);\r\n\r\n const handleMouseDown = (e) => {\r\n setDragStartPos({ x: e.clientX, y: e.clientY });\r\n setHasMoved(false);\r\n onDragStart(id);\r\n e.stopPropagation();\r\n };\r\n\r\n const handleMouseMove = (e) => {\r\n if (dragStartPos) {\r\n const distance = Math.sqrt(\r\n Math.pow(e.clientX - dragStartPos.x, 2) +\r\n Math.pow(e.clientY - dragStartPos.y, 2)\r\n );\r\n if (distance > 5) {\r\n setHasMoved(true);\r\n }\r\n }\r\n };\r\n\r\n const handleMouseUp = (e) => {\r\n if (dragStartPos && !hasMoved) {\r\n if (onClick) {\r\n onClick(id, text);\r\n }\r\n }\r\n setDragStartPos(null);\r\n setHasMoved(false);\r\n };\r\n\r\n const handleTouchStart = (e) => {\r\n const touch = e.touches[0];\r\n setDragStartPos({ x: touch.clientX, y: touch.clientY });\r\n setHasMoved(false);\r\n onDragStart(id);\r\n e.stopPropagation();\r\n };\r\n\r\n const handleTouchMove = (e) => {\r\n if (dragStartPos) {\r\n const touch = e.touches[0];\r\n const distance = Math.sqrt(\r\n Math.pow(touch.clientX - dragStartPos.x, 2) +\r\n Math.pow(touch.clientY - dragStartPos.y, 2)\r\n );\r\n if (distance > 5) {\r\n setHasMoved(true);\r\n }\r\n }\r\n };\r\n\r\n const handleTouchEnd = (e) => {\r\n if (dragStartPos && !hasMoved) {\r\n if (onClick) {\r\n onClick(id, text);\r\n }\r\n }\r\n setDragStartPos(null);\r\n setHasMoved(false);\r\n };\r\n\r\n useEffect(() => {\r\n if (dragStartPos) {\r\n window.addEventListener('mousemove', handleMouseMove);\r\n window.addEventListener('mouseup', handleMouseUp);\r\n return () => {\r\n window.removeEventListener('mousemove', handleMouseMove);\r\n window.removeEventListener('mouseup', handleMouseUp);\r\n };\r\n }\r\n }, [dragStartPos, hasMoved]);\r\n\r\n return (\r\n <div\r\n id={`node-${id}`}\r\n className=\"absolute animate-fadeIn node-element\"\r\n style={{\r\n left: `${position.x}%`,\r\n top: `${position.y}%`,\r\n animationDelay: `${delay}ms`,\r\n zIndex: isDragging ? 50 : 10,\r\n transform: 'translate(-50%, -50%)',\r\n transition: isDragging ? 'none' : 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n onMouseDown={handleMouseDown}\r\n onTouchStart={handleTouchStart}\r\n onTouchMove={handleTouchMove}\r\n onTouchEnd={handleTouchEnd}\r\n >\r\n <div\r\n className=\"backdrop-blur-md px-4 py-2.5 rounded-2xl shadow-2xl border-2 flex items-center gap-2.5 cursor-pointer transform transition-all duration-300\"\r\n style={{\r\n background: (isHovered || isDragging) ? colorStyle.gradientHover : colorStyle.gradient,\r\n borderColor: colorStyle.border + '80',\r\n boxShadow: `0 10px 40px ${colorStyle.shadowColor}4D`,\r\n transform: (isHovered || isDragging) ? 'scale(1.1)' : 'scale(1)',\r\n filter: (isHovered || isDragging) ? 'brightness(1.1)' : 'brightness(1)',\r\n rotate: isDragging ? '2deg' : '0deg'\r\n }}\r\n >\r\n <Icon className=\"w-4 h-4 flex-shrink-0 text-inverse\" />\r\n <span className=\"text-inverse text-small whitespace-nowrap\">\r\n {text}\r\n </span>\r\n </div>\r\n {isDragging && (\r\n <div\r\n className=\"absolute inset-0 rounded-2xl blur-xl animate-pulse\"\r\n style={{\r\n background: 'rgba(255, 255, 255, 0.1)',\r\n transform: 'scale(1.5)'\r\n }}\r\n />\r\n )}\r\n {(isHovered || isDragging) && description && (\r\n <div\r\n className={`absolute top-full left-1/2 -translate-x-1/2 mt-2 px-3 py-2 text-caption rounded-lg shadow-xl border whitespace-nowrap z-50 max-w-xs ${isDarkMode ? 'bg-surface text-inverse' : 'bg-body text-main'}`}\r\n style={{\r\n borderColor: 'var(--border-color)',\r\n opacity: 0.95\r\n }}\r\n >\r\n {description}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nconst DiagramSection2 = ({ data, t, isDarkMode }) => {\r\n const [centerPosition, setCenterPosition] = useState({ x: 50, y: 50 });\r\n const [isDragging, setIsDragging] = useState(false);\r\n const [draggingNodeId, setDraggingNodeId] = useState(null);\r\n const [lines, setLines] = useState([]);\r\n const [nodes, setNodes] = useState([]);\r\n const containerRef = useRef(null);\r\n const centerRef = useRef(null);\r\n const rafRef = useRef(null);\r\n const nodePositionsCache = useRef({});\r\n\r\n const safeT = typeof t === 'function' ? t : (key, options) => {\r\n console.warn(`Translation function not provided for key: ${key}`);\r\n return key;\r\n };\r\n\r\n const diagramData = data?.sectionDataBindingItems?.[0]?.data;\r\n\r\n const getIconComponent = (iconName) => {\r\n const icons = {\r\n Calculator, Shield, Wrench, Factory, Smartphone, Building2, Megaphone,\r\n ShoppingCart, Briefcase, Users, Building, GraduationCap, Heart, Zap,\r\n Plane, Package, Bed, Home, TrendingUp, FileText, Cloud, Truck, Database,\r\n Settings, Globe\r\n };\r\n return icons[iconName] || Settings;\r\n };\r\n\r\n const getColor = (index) => {\r\n const colors = ['blue', 'teal', 'purple', 'orange', 'cyan', 'indigo'];\r\n return colors[index % colors.length];\r\n };\r\n\r\n useEffect(() => {\r\n if (!diagramData?.diagramChildrenDTOs) return;\r\n\r\n const children = diagramData.diagramChildrenDTOs;\r\n const totalNodes = children.length;\r\n\r\n const generatedNodes = children.map((child, index) => {\r\n const angle = (360 / totalNodes) * index;\r\n const radiusVariation = 30 + (Math.random() * 20);\r\n const angleRad = (angle * Math.PI) / 180;\r\n\r\n let x = 50 + Math.cos(angleRad) * radiusVariation;\r\n let y = 50 + Math.sin(angleRad) * radiusVariation;\r\n\r\n x += (Math.random() - 0.5) * 10;\r\n y += (Math.random() - 0.5) * 10;\r\n\r\n x = Math.max(10, Math.min(90, x));\r\n y = Math.max(10, Math.min(90, y));\r\n\r\n return {\r\n id: child.id,\r\n x,\r\n y,\r\n icon: getIconComponent(child.icon),\r\n text: child.name,\r\n description: child.description,\r\n url: child.url,\r\n color: getColor(index),\r\n delay: index * 100\r\n };\r\n });\r\n\r\n setNodes(generatedNodes);\r\n }, [diagramData]);\r\n\r\n const calculatePositions = () => {\r\n if (!containerRef.current || !centerRef.current) return;\r\n\r\n const container = containerRef.current;\r\n const containerRect = container.getBoundingClientRect();\r\n const centerElement = centerRef.current;\r\n const centerRect = centerElement.getBoundingClientRect();\r\n\r\n const centerX = centerRect.left + centerRect.width / 2 - containerRect.left;\r\n const centerY = centerRect.top + centerRect.height / 2 - containerRect.top;\r\n\r\n const newLines = [];\r\n\r\n nodes.forEach(node => {\r\n const nodeElement = document.getElementById(`node-${node.id}`);\r\n if (!nodeElement) return;\r\n\r\n const nodeRect = nodeElement.getBoundingClientRect();\r\n const nodeX = nodeRect.left + nodeRect.width / 2 - containerRect.left;\r\n const nodeY = nodeRect.top + nodeRect.height / 2 - containerRect.top;\r\n\r\n const cachedPos = nodePositionsCache.current[node.id] || { x: nodeX, y: nodeY };\r\n const smoothX = cachedPos.x + (nodeX - cachedPos.x) * 0.15;\r\n const smoothY = cachedPos.y + (nodeY - cachedPos.y) * 0.15;\r\n\r\n nodePositionsCache.current[node.id] = { x: smoothX, y: smoothY };\r\n\r\n const dx = centerX - smoothX;\r\n const dy = centerY - smoothY;\r\n\r\n const controlX1 = smoothX + dx * 0.4;\r\n const controlY1 = smoothY;\r\n const controlX2 = smoothX + dx * 0.6;\r\n const controlY2 = centerY;\r\n\r\n const path = `M ${smoothX} ${smoothY} C ${controlX1} ${controlY1}, ${controlX2} ${controlY2}, ${centerX} ${centerY}`;\r\n\r\n newLines.push({ id: node.id, path });\r\n });\r\n\r\n setLines(newLines);\r\n };\r\n\r\n useEffect(() => {\r\n let isRunning = true;\r\n\r\n const updateLoop = () => {\r\n if (isRunning) {\r\n calculatePositions();\r\n rafRef.current = requestAnimationFrame(updateLoop);\r\n }\r\n };\r\n\r\n updateLoop();\r\n\r\n return () => {\r\n isRunning = false;\r\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\r\n };\r\n }, [nodes, centerPosition, isDragging, draggingNodeId]);\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n nodePositionsCache.current = {};\r\n calculatePositions();\r\n };\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, [nodes]);\r\n\r\n const handleNodeClick = (nodeId, nodeName) => {\r\n const node = nodes.find(n => n.id === nodeId);\r\n if (node?.url) {\r\n window.location.href = node.url;\r\n }\r\n };\r\n\r\n const handleNodeDragStart = (nodeId) => setDraggingNodeId(nodeId);\r\n const handleNodeDragEnd = () => setDraggingNodeId(null);\r\n\r\n const handleNodeDrag = (nodeId, newX, newY) => {\r\n setNodes(prevNodes =>\r\n prevNodes.map(node =>\r\n node.id === nodeId ? { ...node, x: newX, y: newY } : node\r\n )\r\n );\r\n };\r\n\r\n const handleMouseDown = (e) => {\r\n setIsDragging(true);\r\n e.preventDefault();\r\n };\r\n\r\n const handleMouseMove = (e) => {\r\n if (!isDragging || !containerRef.current) return;\r\n\r\n const containerRect = containerRef.current.getBoundingClientRect();\r\n const x = ((e.clientX - containerRect.left) / containerRect.width) * 100;\r\n const y = ((e.clientY - containerRect.top) / containerRect.height) * 100;\r\n\r\n setCenterPosition({\r\n x: Math.max(20, Math.min(80, x)),\r\n y: Math.max(20, Math.min(80, y))\r\n });\r\n };\r\n\r\n const handleMouseUp = () => setIsDragging(false);\r\n\r\n useEffect(() => {\r\n if (isDragging) {\r\n document.body.style.cursor = 'grabbing';\r\n window.addEventListener('mousemove', handleMouseMove);\r\n window.addEventListener('mouseup', handleMouseUp);\r\n return () => {\r\n document.body.style.cursor = '';\r\n window.removeEventListener('mousemove', handleMouseMove);\r\n window.removeEventListener('mouseup', handleMouseUp);\r\n };\r\n }\r\n }, [isDragging]);\r\n\r\n useEffect(() => {\r\n if (draggingNodeId === null) return;\r\n\r\n const handleNodeMouseMove = (e) => {\r\n if (!containerRef.current) return;\r\n const containerRect = containerRef.current.getBoundingClientRect();\r\n const x = ((e.clientX - containerRect.left) / containerRect.width) * 100;\r\n const y = ((e.clientY - containerRect.top) / containerRect.height) * 100;\r\n\r\n handleNodeDrag(draggingNodeId,\r\n Math.max(5, Math.min(95, x)),\r\n Math.max(5, Math.min(95, y))\r\n );\r\n };\r\n\r\n const handleNodeTouchMove = (e) => {\r\n if (!containerRef.current) return;\r\n const touch = e.touches[0];\r\n const containerRect = containerRef.current.getBoundingClientRect();\r\n const x = ((touch.clientX - containerRect.left) / containerRect.width) * 100;\r\n const y = ((touch.clientY - containerRect.top) / containerRect.height) * 100;\r\n\r\n handleNodeDrag(draggingNodeId,\r\n Math.max(5, Math.min(95, x)),\r\n Math.max(5, Math.min(95, y))\r\n );\r\n };\r\n\r\n window.addEventListener('mousemove', handleNodeMouseMove);\r\n window.addEventListener('mouseup', handleNodeDragEnd);\r\n window.addEventListener('touchmove', handleNodeTouchMove);\r\n window.addEventListener('touchend', handleNodeDragEnd);\r\n\r\n return () => {\r\n window.removeEventListener('mousemove', handleNodeMouseMove);\r\n window.removeEventListener('mouseup', handleNodeDragEnd);\r\n window.removeEventListener('touchmove', handleNodeTouchMove);\r\n window.removeEventListener('touchend', handleNodeDragEnd);\r\n };\r\n }, [draggingNodeId]);\r\n\r\n if (!diagramData) {\r\n return null;\r\n }\r\n\r\n const diagramName = diagramData.name || safeT('diagram.defaults.name');\r\n const diagramDescription = diagramData.description || safeT('diagram.defaults.description');\r\n\r\n return (\r\n <div \r\n ref={containerRef}\r\n className=\"mind-map-container relative w-full h-screen overflow-hidden bg-section-soft\"\r\n style={{\r\n touchAction: 'none'\r\n }}\r\n >\r\n {/* Background overlay effects */}\r\n <div\r\n className=\"absolute inset-0\"\r\n style={{ opacity: isDarkMode ? 0.3 : 0.2 }}\r\n >\r\n <div\r\n className=\"absolute inset-0 bg-gradient-brand\"\r\n style={{\r\n opacity: 0.2\r\n }}\r\n />\r\n <div\r\n className=\"absolute inset-0 bg-gradient-accent\"\r\n style={{\r\n opacity: 0.1\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Animated particles */}\r\n <div\r\n className=\"absolute inset-0 pointer-events-none\"\r\n style={{ opacity: isDarkMode ? 0.6 : 0.4 }}\r\n >\r\n {[...Array(150)].map((_, i) => {\r\n const colors = ['bg-brand-primary', 'bg-brand-secondary'];\r\n const randomColor = colors[Math.floor(Math.random() * colors.length)];\r\n\r\n return (\r\n <div\r\n key={i}\r\n className={`absolute rounded-full ${randomColor}`}\r\n style={{\r\n left: `${Math.random() * 100}%`,\r\n top: `${Math.random() * 100}%`,\r\n width: `${Math.random() * 3 + 1}px`,\r\n height: `${Math.random() * 3 + 1}px`,\r\n animationName: 'twinkle',\r\n animationDelay: `${Math.random() * 5}s`,\r\n animationDuration: `${4 + Math.random() * 6}s`,\r\n animationIterationCount: 'infinite',\r\n animationTimingFunction: 'ease-in-out'\r\n }}\r\n />\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Grid pattern */}\r\n <div\r\n className=\"absolute inset-0 pointer-events-none\"\r\n style={{ opacity: isDarkMode ? 0.1 : 0.05 }}\r\n >\r\n <div\r\n className=\"absolute inset-0\"\r\n style={{\r\n backgroundImage: isDarkMode\r\n ? 'radial-gradient(circle at 1px 1px, var(--text-inverse) 1px, transparent 0)'\r\n : 'radial-gradient(circle at 1px 1px, var(--text-main) 1px, transparent 0)',\r\n backgroundSize: '40px 40px',\r\n opacity: 0.15\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Decorative sparkle */}\r\n <div className=\"absolute right-4 sm:right-16 bottom-4 sm:bottom-16 z-0 pointer-events-none\">\r\n <div className=\"relative\">\r\n <div\r\n className=\"absolute inset-0 blur-3xl w-20 h-20 sm:w-32 sm:h-32 bg-gradient-brand\"\r\n style={{\r\n opacity: 0.2\r\n }}\r\n />\r\n <svg width=\"60\" height=\"60\" viewBox=\"0 0 80 80\" className=\"relative sm:w-24 sm:h-24\">\r\n <path d=\"M40 0 L45 35 L80 40 L45 45 L40 80 L35 45 L0 40 L35 35 Z\" fill=\"url(#sparkle-gradient)\" opacity=\"0.4\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n {/* SVG connections and gradients */}\r\n <svg className=\"absolute inset-0 w-full h-full pointer-events-none\" style={{ zIndex: 1 }}>\r\n <defs>\r\n <linearGradient id=\"circuit-gradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\r\n <stop offset=\"0%\" style={{ stopColor: 'var(--brand-primary)', stopOpacity: 0.6 }} />\r\n <stop offset=\"50%\" style={{ stopColor: 'var(--gradient-brand-soft-start)', stopOpacity: 0.9 }} />\r\n <stop offset=\"100%\" style={{ stopColor: 'var(--gradient-brand-soft-end)', stopOpacity: 0.6 }} />\r\n </linearGradient>\r\n\r\n <linearGradient id=\"sparkle-gradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\r\n <stop offset=\"0%\" style={{ stopColor: 'var(--brand-primary)' }} />\r\n <stop offset=\"50%\" style={{ stopColor: 'var(--gradient-brand-soft-start)' }} />\r\n <stop offset=\"100%\" style={{ stopColor: 'var(--gradient-brand-soft-end)' }} />\r\n </linearGradient>\r\n\r\n <filter id=\"glow\">\r\n <feGaussianBlur stdDeviation=\"4\" result=\"coloredBlur\" />\r\n <feMerge>\r\n <feMergeNode in=\"coloredBlur\" />\r\n <feMergeNode in=\"SourceGraphic\" />\r\n </feMerge>\r\n </filter>\r\n </defs>\r\n\r\n {lines.map((line) => (\r\n <g key={line.id}>\r\n <path\r\n d={line.path}\r\n stroke=\"var(--gradient-brand-soft-start)\"\r\n strokeWidth=\"6\"\r\n fill=\"none\"\r\n className=\"transition-all duration-200\"\r\n style={{ filter: 'blur(8px)', opacity: 0.2 }}\r\n />\r\n <path\r\n d={line.path}\r\n stroke=\"url(#circuit-gradient)\"\r\n strokeWidth=\"2.5\"\r\n fill=\"none\"\r\n filter=\"url(#glow)\"\r\n className=\"transition-all duration-200\"\r\n style={{\r\n strokeDasharray: draggingNodeId === line.id ? '10 5' : 'none',\r\n animation: draggingNodeId === line.id ? 'dash-flow 1s linear infinite' : 'none'\r\n }}\r\n />\r\n </g>\r\n ))}\r\n </svg>\r\n\r\n {/* Nodes */}\r\n <div className=\"relative w-full h-full\" style={{ zIndex: 10 }}>\r\n {nodes.map((node) => (\r\n <MindMapNode\r\n key={node.id}\r\n id={node.id}\r\n icon={node.icon}\r\n text={node.text}\r\n description={node.description}\r\n color={node.color}\r\n position={{ x: node.x, y: node.y }}\r\n delay={node.delay}\r\n onDragStart={handleNodeDragStart}\r\n isDragging={draggingNodeId === node.id}\r\n onClick={handleNodeClick}\r\n isDarkMode={isDarkMode}\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Central hub */}\r\n <div\r\n ref={centerRef}\r\n className=\"absolute cursor-grab active:cursor-grabbing\"\r\n style={{\r\n left: `${centerPosition.x}%`,\r\n top: `${centerPosition.y}%`,\r\n zIndex: 30,\r\n transform: 'translate(-50%, -50%)',\r\n transition: isDragging ? 'none' : 'all 0.3s ease-out'\r\n }}\r\n onMouseDown={handleMouseDown}\r\n onTouchStart={(e) => {\r\n setIsDragging(true);\r\n e.preventDefault();\r\n }}\r\n onTouchMove={(e) => {\r\n if (!isDragging || !containerRef.current) return;\r\n const touch = e.touches[0];\r\n const containerRect = containerRef.current.getBoundingClientRect();\r\n const x = ((touch.clientX - containerRect.left) / containerRect.width) * 100;\r\n const y = ((touch.clientY - containerRect.top) / containerRect.height) * 100;\r\n\r\n setCenterPosition({\r\n x: Math.max(20, Math.min(80, x)),\r\n y: Math.max(20, Math.min(80, y))\r\n });\r\n }}\r\n onTouchEnd={() => setIsDragging(false)}\r\n >\r\n <div className=\"relative\">\r\n <div\r\n className=\"absolute inset-0 rounded-full blur-2xl bg-brand-primary\"\r\n style={{\r\n opacity: 0.3,\r\n transform: 'scale(1.5)'\r\n }}\r\n />\r\n\r\n <div\r\n className=\"relative px-6 sm:px-10 py-3 sm:py-5 rounded-3xl shadow-2xl border-4 flex items-center gap-3 sm:gap-4 backdrop-blur-md bg-gradient-brand\"\r\n style={{\r\n borderColor: 'var(--brand-primary)',\r\n borderOpacity: 0.5,\r\n transform: isDragging ? 'scale(1.1)' : 'scale(1)',\r\n transition: 'transform 0.3s ease'\r\n }}\r\n >\r\n <div\r\n className=\"p-2 sm:p-3 rounded-xl backdrop-blur-sm\"\r\n style={{ backgroundColor: 'rgba(255, 255, 255, 0.25)' }}\r\n >\r\n <Briefcase className=\"w-5 h-5 sm:w-7 sm:h-7 text-inverse\" />\r\n </div>\r\n <div className=\"text-center\">\r\n <h1 className=\"text-inverse text-body sm:text-subtitle\">\r\n {diagramName}\r\n </h1>\r\n {diagramDescription && (\r\n <h2 className=\"text-inverse text-caption sm:text-small opacity-90\">\r\n {diagramDescription}\r\n </h2>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {!isDragging && (\r\n <div\r\n className={`absolute -bottom-8 left-1/2 transform -translate-x-1/2 text-caption whitespace-nowrap ${isDarkMode ? 'text-brand-primary' : 'text-brand-secondary'}`}\r\n style={{\r\n opacity: 0.6\r\n }}\r\n >\r\n {safeT('diagram.dragToMove')}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <style jsx>{`\r\n @keyframes fadeIn {\r\n from { opacity: 0; transform: scale(0.9) translateY(10px); }\r\n to { opacity: 1; transform: scale(1) translateY(0); }\r\n }\r\n @keyframes twinkle {\r\n 0%, 100% { opacity: 0.2; transform: scale(1); }\r\n 50% { opacity: 0.5; transform: scale(1); }\r\n }\r\n @keyframes dash-flow {\r\n to { stroke-dashoffset: -30; }\r\n }\r\n .animate-fadeIn {\r\n animation: fadeIn 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards;\r\n opacity: 0;\r\n }\r\n `}</style>\r\n </div>\r\n );\r\n};\r\n\r\nexport default DiagramSection2;","import React, { useState, useMemo } from 'react';\r\nimport { ChevronDown } from 'lucide-react';\r\nimport SectionWrapper from \"../../contexts/SectionWrapper\";\r\n\r\nconst FaqItem = ({ faq, index, isActive, onToggle, t }) => {\r\n return (\r\n <div\r\n style={{\r\n animationDelay: `${index * 100}ms`,\r\n animationFillMode: 'both'\r\n }}\r\n className=\"animate-slide-up\"\r\n >\r\n <div className=\"card\" style={{ padding: 0 }}>\r\n {/* Question Button */}\r\n <button\r\n onClick={onToggle}\r\n className=\"w-full px-6 py-5 text-left flex items-start justify-between gap-4 rounded-xl group\"\r\n >\r\n <span className=\"card-title flex-1\">\r\n {faq.question}\r\n </span>\r\n <span className={`\r\n flex-shrink-0 w-10 h-10 rounded-full flex items-center justify-center\r\n transition-all duration-500 transform\r\n ${isActive\r\n ? 'bg-gradient-to-br from-blue-500 to-purple-600 text-white shadow-lg shadow-blue-500/50 rotate-180 scale-110'\r\n : 'bg-gray-700/50 text-gray-400 group-hover:bg-gray-600 group-hover:scale-110'\r\n }\r\n `}>\r\n <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 */}\r\n <div\r\n style={{\r\n maxHeight: isActive ? '500px' : '0',\r\n opacity: isActive ? '1' : '0',\r\n overflow: 'hidden',\r\n transition: 'all 500ms ease-in-out'\r\n }}\r\n >\r\n <div \r\n className=\"px-6 pb-6 pt-2\"\r\n style={{\r\n transform: isActive ? 'translateY(0)' : 'translateY(-10px)',\r\n transition: 'transform 500ms ease-in-out'\r\n }}\r\n >\r\n {/* Decorative Line */}\r\n <div \r\n className=\"h-px w-full mb-4\"\r\n style={{\r\n background: 'linear-gradient(to right, transparent, var(--border-color), transparent)'\r\n }}\r\n ></div>\r\n\r\n <div className=\"card-text leading-relaxed\">\r\n {faq.answer}\r\n </div>\r\n\r\n {/* Optional URL Link */}\r\n {faq.url && (\r\n <a\r\n href={faq.url}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"card-link mt-4\"\r\n >\r\n {t?.('faq.learn_more') || 'Learn more'}\r\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\r\n </svg>\r\n </a>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst FaqSection = ({ data, t, isDarkMode, section }) => {\r\n const [activeIndex, setActiveIndex] = useState(-1);\r\n\r\n const faqs = useMemo(() => {\r\n if (data?.sectionDataBindingItems && Array.isArray(data.sectionDataBindingItems)) {\r\n return data.sectionDataBindingItems.map(item => item.data).filter(Boolean);\r\n }\r\n return [];\r\n }, [data]);\r\n\r\n const toggleFaq = (index) => {\r\n setActiveIndex(activeIndex === index ? -1 : index);\r\n };\r\n\r\n const sectionTitle = section?.title || '...';\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div className=\"max-w-4xl mx-auto\">\r\n {/* Icon Section */}\r\n <div className=\"flex justify-center mb-6 animate-fade-in\">\r\n <div \r\n className=\"w-10 h-10 rounded-lg flex items-center justify-center\"\r\n style={{\r\n background: 'linear-gradient(to bottom right, var(--brand-primary), var(--brand-secondary))',\r\n boxShadow: '0 10px 15px -3px var(--card-shadow)',\r\n transition: 'transform 300ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n }}\r\n onMouseEnter={(e) => e.currentTarget.style.transform = 'scale(1.1)'}\r\n onMouseLeave={(e) => e.currentTarget.style.transform = 'scale(1)'}\r\n >\r\n <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 */}\r\n <div className=\"text-center mb-12 animate-fade-in\">\r\n <h2 className=\"text-title text-main mb-3\">\r\n {sectionTitle}\r\n </h2>\r\n <div \r\n className=\"h-1 w-20 mx-auto rounded-full\"\r\n style={{\r\n background: 'linear-gradient(to right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))'\r\n }}\r\n ></div>\r\n </div>\r\n\r\n {/* FAQ Items */}\r\n <div className=\"space-y-4\">\r\n {faqs.map((faq, index) => (\r\n <FaqItem\r\n key={faq.id || index}\r\n faq={faq}\r\n index={index}\r\n isActive={activeIndex === index}\r\n onToggle={() => toggleFaq(index)}\r\n t={t}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <style jsx>{`\r\n @keyframes fade-in {\r\n from {\r\n opacity: 0;\r\n transform: translateY(-20px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n }\r\n @keyframes slide-up {\r\n from {\r\n opacity: 0;\r\n transform: translateY(30px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n }\r\n .animate-fade-in {\r\n animation: fade-in 0.8s ease-out;\r\n }\r\n .animate-slide-up {\r\n animation: slide-up 0.6s ease-out;\r\n }\r\n `}</style>\r\n </SectionWrapper>\r\n );\r\n};\r\n\r\nexport default FaqSection;","import React, { useState, useEffect } from 'react';\r\n\r\nconst PageHighlightSection = ({ data, t, isDarkMode, imageBaseUrl = \"\" }) => {\r\n const [activeTab, setActiveTab] = useState(0);\r\n\r\n // Xử lý data giống TimelineSection\r\n const rawData =\r\n data?.sectionDataBindingItems\r\n ?.filter((item) => item?.data) // lọc bỏ item null hoặc data null\r\n .map((item) => item.data) || [];\r\n\r\n // Helper function để lấy URL ảnh đầy đủ\r\n const getImageUrl = (imagePath) => {\r\n if (imagePath) {\r\n return `${imageBaseUrl}${imagePath}`;\r\n }\r\n return null;\r\n };\r\n\r\n // Transform data để lấy đầy đủ thông tin\r\n const highlightData = rawData.map((item) => {\r\n // Lấy image chính từ pageImages\r\n const mainImagePath = item.pageImages?.find(img => img.isMain)?.url ||\r\n item.pageImages?.[0]?.url ||\r\n null;\r\n\r\n const mainImage = getImageUrl(mainImagePath);\r\n\r\n // Lấy tag đầu tiên làm tag hiển thị\r\n const primaryTag = item.tagKeys?.[0]?.key || item.title;\r\n\r\n return {\r\n title: item.title,\r\n slug: item.slug,\r\n description: item.description,\r\n image: mainImage,\r\n tag: primaryTag,\r\n tagKeys: item.tagKeys || [],\r\n features: item.features || [] // Nếu có features trong data\r\n };\r\n });\r\n\r\n // Auto scroll every 5 seconds\r\n useEffect(() => {\r\n if (highlightData.length === 0) return;\r\n\r\n const interval = setInterval(() => {\r\n setActiveTab((prev) => (prev + 1) % highlightData.length);\r\n }, 5000);\r\n\r\n return () => clearInterval(interval);\r\n }, [highlightData.length]);\r\n\r\n const handleNavigate = (slug) => {\r\n if (slug) {\r\n window.location.href = slug;\r\n }\r\n };\r\n\r\n // Các màu gradient để sử dụng\r\n const gradientClasses = [\r\n 'btn-primary',\r\n ];\r\n\r\n // Default image nếu không có\r\n const defaultImage = 'https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=1200&h=800&fit=crop&q=80';\r\n\r\n // Nếu không có data\r\n if (!highlightData.length) {\r\n return (\r\n <section className={`py-20 ${isDarkMode ? \"bg-slate-950\" : \"bg-white\"}`}>\r\n <div className=\"max-w-7xl mx-auto px-4 text-center\">\r\n <h3 className={`text-lg font-semibold mb-2 text-main`}>\r\n {t('highlight.noData.title') || 'Chưa có dữ liệu'}\r\n </h3>\r\n <p className=\"text-muted\">\r\n {t('highlight.noData.description') || 'Hiện tại chưa có sản phẩm nào được thiết lập.'}\r\n </p>\r\n </div>\r\n </section>\r\n );\r\n }\r\n\r\n return (\r\n <section\r\n className=\"relative overflow-hidden\"\r\n style={{\r\n background: isDarkMode\r\n ? 'linear-gradient(to bottom right, var(--color-gray-950), var(--color-gray-900), var(--color-gray-950))'\r\n : 'linear-gradient(to bottom right, var(--bg-primary), #eff6ff50, #f3e8ff50)'\r\n }}\r\n >\r\n {/* Floating gradient orbs */}\r\n <div className=\"absolute inset-0 overflow-hidden pointer-events-none\">\r\n <div\r\n className=\"absolute top-20 right-10 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob\"\r\n style={{\r\n backgroundColor: isDarkMode\r\n ? 'var(--gradient-brand-soft-start)'\r\n : 'var(--gradient-brand-soft-start)'\r\n }}\r\n ></div>\r\n <div\r\n className=\"absolute top-40 -left-20 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob animation-delay-2000\"\r\n style={{\r\n backgroundColor: isDarkMode\r\n ? 'var(--gradient-accent-soft-start)'\r\n : 'var(--gradient-accent-soft-start)',\r\n animationDelay: '2s'\r\n }}\r\n ></div>\r\n <div\r\n className=\"absolute -bottom-20 right-40 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob animation-delay-4000\"\r\n style={{\r\n backgroundColor: isDarkMode\r\n ? 'var(--gradient-accent-soft-end)'\r\n : 'var(--gradient-accent-soft-end)',\r\n animationDelay: '4s'\r\n }}\r\n ></div>\r\n </div>\r\n\r\n {/* Main Content */}\r\n <div className=\"relative w-full px-4 sm:px-6 lg:px-8 py-16 sm:py-24\">\r\n {/* Main Content */}\r\n <div className=\"relative w-full\">\r\n {highlightData.map((item, index) => {\r\n const color = gradientClasses[index % gradientClasses.length];\r\n return (\r\n <div\r\n key={index}\r\n className={`transition-opacity duration-700 ${activeTab === index ? 'opacity-100' : 'opacity-0 absolute inset-0 pointer-events-none'\r\n }`}\r\n >\r\n <div className={`${isDarkMode\r\n ? 'bg-gradient-to-br from-slate-900/30 to-slate-950/30 border-slate-700/20'\r\n : 'bg-white/40 border-white/30'\r\n } backdrop-blur-md rounded-3xl shadow-lg overflow-hidden border transition-colors duration-500`}>\r\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-0 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 className=\"text-3xl lg:text-4xl font-black mb-3 text-gradient-brand\">\r\n {item.title}\r\n </h1>\r\n\r\n <p className=\"mb-6 text-muted\">\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-accent flex items-center justify-center flex-shrink-0\">\r\n <svg className=\"w-2.5 h-2.5 text-inverse\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={3} d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n </div>\r\n <span className=\"text-muted group-hover:text-main font-medium text-xs transition-colors\">\r\n {feature}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* CTA Button */}\r\n <a\r\n href={item.slug}\r\n rel=\"noopener noreferrer\"\r\n className={`group relative px-6 py-3 rounded-xl font-bold text-sm transition-all duration-300 transform hover:scale-105 hover:shadow-2xl overflow-hidden bg-gradient-to-r ${color} text-white shadow-xl w-full text-center`}\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 const [visibleCount, setVisibleCount] = useState(8);\r\n const visiblePages = pages.slice(0, visibleCount);\r\n const hasMore = visibleCount < pages.length;\r\n\r\n if (!pages || pages.length === 0) {\r\n return null;\r\n }\r\n\r\n const handleLoadMore = () => {\r\n setVisibleCount(prev => prev + 8);\r\n };\r\n\r\n const getImageUrl = (url) => {\r\n if (!url) return '';\r\n if (url.startsWith('http://') || url.startsWith('https://')) return url;\r\n return `${imageBaseUrl}${url}`;\r\n };\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div style={{\r\n maxWidth: '1400px',\r\n margin: '0 auto'\r\n }}>\r\n {sectionTitle && (\r\n <div className=\"text-center mb-12\">\r\n <h2 className=\"text-title text-main mb-4\">\r\n {sectionTitle}\r\n </h2>\r\n {sectionDescription && (\r\n <p className=\"text-body text-muted max-w-3xl mx-auto\">\r\n {sectionDescription}\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n\r\n <div style={{\r\n display: 'grid',\r\n gridTemplateColumns: 'repeat(auto-fit, minmax(220px, 1fr))',\r\n gap: '24px',\r\n marginBottom: hasMore ? '40px' : '0'\r\n }}>\r\n {visiblePages.map((page) => {\r\n const iconUrl = getImageUrl(page.icon);\r\n return (\r\n <a\r\n key={page.id}\r\n href={page.slug}\r\n className=\"card\"\r\n style={{\r\n alignItems: 'center',\r\n textAlign: 'center',\r\n gap: '16px',\r\n textDecoration: 'none',\r\n padding: '32px 20px'\r\n }}\r\n >\r\n {iconUrl && (\r\n <div style={{\r\n width: '80px',\r\n height: '80px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }}>\r\n <img\r\n src={iconUrl}\r\n alt={page.title}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'contain'\r\n }}\r\n />\r\n </div>\r\n )}\r\n <h3 className=\"card-title text-body\" style={{ margin: 0 }}>\r\n {page.title}\r\n </h3>\r\n </a>\r\n );\r\n })}\r\n </div>\r\n\r\n {hasMore && (\r\n <div style={{ display: 'flex', justifyContent: 'center' }}>\r\n <button\r\n onClick={handleLoadMore}\r\n style={{\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '8px',\r\n padding: '14px 32px',\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n color: '#fff',\r\n backgroundColor: '#361985ff',\r\n border: 'none',\r\n borderRadius: '9999px',\r\n cursor: 'pointer',\r\n transition: 'all 0.3s',\r\n boxShadow: '0 4px 6px -1px rgba(249, 115, 22, 0.3)'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = '#361985ff';\r\n e.currentTarget.style.transform = 'translateY(-2px)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = '#361985ff';\r\n e.currentTarget.style.transform = 'translateY(0)';\r\n }}\r\n >\r\n {t('pageChildrenSelect.moreInsights')}\r\n <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 const [visibleCount, setVisibleCount] = useState(5);\r\n const visiblePages = pages.slice(0, visibleCount);\r\n const hasMore = visibleCount < pages.length;\r\n\r\n if (!pages || pages.length === 0) {\r\n return null;\r\n }\r\n\r\n const handleLoadMore = () => {\r\n setVisibleCount(prev => prev + 5);\r\n };\r\n\r\n const getImageUrl = (url) => {\r\n if (!url) return '';\r\n if (url.startsWith('http://') || url.startsWith('https://')) return url;\r\n return `${imageBaseUrl}${url}`;\r\n };\r\n\r\n return (\r\n <SectionWrapper isDarkMode={isDarkMode}>\r\n <div style={{\r\n maxWidth: '1280px',\r\n margin: '0 auto'\r\n }}>\r\n {sectionTitle && (\r\n <h2 className=\"text-title text-main mb-10 uppercase tracking-wide\">\r\n {sectionTitle}\r\n </h2>\r\n )}\r\n \r\n <div style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '24px'\r\n }}>\r\n {visiblePages.map((page) => {\r\n const mainImage = page.pageImages?.find(img => img.isMain)?.url || page.icon;\r\n const imageUrl = getImageUrl(mainImage);\r\n\r\n return (\r\n <a\r\n key={page.id}\r\n href={page.slug}\r\n className=\"card\"\r\n style={{\r\n flexDirection: 'row',\r\n gap: '20px',\r\n textDecoration: 'none'\r\n }}\r\n >\r\n {imageUrl && (\r\n <div style={{\r\n width: '200px',\r\n height: '140px',\r\n flexShrink: 0,\r\n overflow: 'hidden',\r\n borderRadius: '6px'\r\n }}>\r\n <img\r\n src={imageUrl}\r\n alt={page.title}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover'\r\n }}\r\n />\r\n </div>\r\n )}\r\n\r\n <div className=\"flex flex-col justify-center flex-1\">\r\n {page.tagKeys?.length > 0 && (\r\n <div className=\"card-link \">\r\n {page.tagKeys[0].key}\r\n </div>\r\n )}\r\n \r\n <h3 className=\"card-title mb-2 leading-snug\">\r\n {page.title}\r\n </h3>\r\n \r\n {page.description && (\r\n <p className=\"card-text m-0\">\r\n {page.description}\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n paddingLeft: '16px'\r\n }}>\r\n <ChevronRight\r\n size={20}\r\n className=\"card-text\"\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 className=\"btn-primary\"\r\n style={{\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n padding: '12px 28px',\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n color: '#fff',\r\n border: 'none',\r\n borderRadius: '9999px',\r\n cursor: 'pointer'\r\n }}\r\n >\r\n {t('pageChildrenSelect.moreInsights')}\r\n <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 className=\"text-title mb-12 text-main\">\r\n {sectionTitle}\r\n </h2>\r\n )}\r\n <div style={{\r\n display: 'grid',\r\n gridTemplateColumns: 'repeat(auto-fit, minmax(350px, 1fr))',\r\n gap: '30px',\r\n marginBottom: '50px'\r\n }}>\r\n {visiblePages.map((page) => {\r\n const mainImage = page.pageImages?.find(img => img.isMain)?.url || page.icon;\r\n const imageUrl = getImageUrl(mainImage);\r\n\r\n return (\r\n <a\r\n key={page.id}\r\n href={page.slug}\r\n className=\"card\"\r\n style={{\r\n textDecoration: 'none',\r\n display: 'block',\r\n padding: '0',\r\n overflow: 'hidden'\r\n }}\r\n >\r\n {imageUrl && (\r\n <div style={{\r\n width: '100%',\r\n height: '240px',\r\n overflow: 'hidden',\r\n position: 'relative'\r\n }}>\r\n <img\r\n src={imageUrl}\r\n alt={page.title}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n transition: 'transform 0.3s'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = 'scale(1.05)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = 'scale(1)';\r\n }}\r\n />\r\n </div>\r\n )}\r\n\r\n <div style={{ padding: '1.5rem' }}>\r\n <h3 className=\"card-title text-subtitle\" style={{\r\n minHeight: '56px',\r\n marginBottom: '0.75rem'\r\n }}>\r\n {page.title}\r\n </h3>\r\n\r\n {page.description && (\r\n <p className=\"card-text line-clamp-2\" style={{\r\n marginBottom: '1rem'\r\n }}>\r\n {page.description}\r\n </p>\r\n )}\r\n </div>\r\n\r\n </a>\r\n );\r\n })}\r\n </div>\r\n\r\n {hasMore && (\r\n <div style={{\r\n display: 'flex',\r\n justifyContent: 'center'\r\n }}>\r\n <button\r\n onClick={handleLoadMore}\r\n className=\"btn-primary\"\r\n style={{\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n padding: '14px 32px',\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n color: '#ffffff',\r\n border: 'none',\r\n borderRadius: '50px',\r\n cursor: 'pointer'\r\n }}\r\n >\r\n {t('pageChildrenSelect.moreInsights')}\r\n <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":["jsxRuntimeModule","require$$0","require$$1","jsxs","jsx","index","logoUrl","Fragment","useWindowSize","_a","_b","__iconNode","CheckCircle","AlertCircle","Loader2","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]}
|