@momo-webplatform/mobase 0.2.87 → 0.2.89
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/cjs/index.cjs +36 -19
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +11 -10
- package/dist/esm/index.d.ts +11 -10
- package/dist/esm/index.js +36 -19
- package/dist/esm/index.js.map +1 -1
- package/package.json +1 -1
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/Accordion/Accordion.tsx","../../src/helpers/utils.ts","../../src/helpers/constants.ts","../../src/components/Button/Button.tsx","../../src/foundation/SpinerIcon.tsx","../../src/components/DialogQr/DialogQr.tsx","../../src/components/Dialog/Dialog.tsx","../../src/components/ActionButton/ActionButton.tsx","../../src/components/ActionButton/utils.ts","../../src/components/Breadcrumb/Breadcrumb.tsx","../../src/components/CommonBlocks/CommonBlocks.tsx","../../src/components/HeadingGroup/HeadingGroup.tsx","../../src/components/BlogSection/templates/BlockSectionsTemplateOne.tsx","../../src/components/HorizontalScroll/HorizontalScroll.tsx","../../src/components/IconButton/IconButton.tsx","../../src/components/Tabs/Tabs.tsx","../../src/components/TextButton/TextButton.tsx","../../src/components/BlogSection/templates/BlockSectionTemplateTwo.tsx","../../src/components/Carousel/Carousel.tsx","../../src/components/BlogSection/BlogSection.tsx","../../src/components/Calendar/Calendar.tsx","../../src/components/Checkbox/Checkbox.tsx","../../src/components/DatePicker/DatePicker.tsx","../../src/components/Popover/Popover.tsx","../../src/components/DateSelect/DateSelect.tsx","../../src/components/Select/Select.tsx","../../src/components/DateSelect/utils.tsx","../../src/components/AlertDialog/AlertDialog.tsx","../../src/components/GuideSection/GuideSectionTemplate.tsx","../../src/components/GuideSection/GuideUIDesktop.tsx","../../src/components/AspectRatio/AspectRatio.tsx","../../src/components/GuideSection/GuideUIMobile.tsx","../../src/components/GuideSection/GuideSection.tsx","../../src/components/Pagination/Pagination.tsx","../../src/components/TextArea/TextArea.tsx","../../src/components/Toast/useToast.tsx","../../src/components/Toast/Toast.tsx","../../src/components/Toast/toaster.tsx","../../src/components/Tooltip/Tooltip.tsx","../../src/components/TextInput/TextInput.tsx","../../src/components/Stepper/Stepper.tsx","../../src/components/NavigationMenu/NavigationMenu.tsx","../../src/components/Switch/Switch.tsx","../../src/components/RadioGroup/RadioGroup.tsx","../../src/components/HeaderNavigation/HeaderNavigation.tsx","../../src/components/HeaderNavigation/MobileMenu.tsx","../../src/helpers/animations.ts","../../src/components/HeaderNavigation/NavItemsMobile.tsx","../../src/components/HeaderNavigation/ListItemMobile.tsx","../../src/components/HeaderNavigation/ListItem.tsx","../../src/components/HeaderNavigation/NavItems.tsx","../../src/components/Footer/FooterContent.tsx","../../src/components/Footer/Footer.tsx","../../src/components/Card/Card.tsx","../../src/components/Command/Command.tsx","../../src/components/Combobox/Combobox.tsx","../../src/components/Callout/Callout.tsx","../../src/components/SearchBar/SearchBar.tsx","../../src/components/LightboxGallery/LightboxGallery.tsx","../../src/components/Choicebox/Choicebox.tsx","../../src/components/Badge/Badge.tsx","../../src/components/Progressbar/Progressbar.tsx","../../src/components/Skeleton/Skeleton.tsx","../../src/components/Spinner/Spinner.tsx","../../src/components/Slider/Slider.tsx","../../src/components/Comment/Comment.tsx","../../src/components/Comment/CommentHeader.tsx","../../src/components/Comment/CommentContent.tsx","../../src/components/Comment/CommentRating.tsx","../../src/components/ReadMoreLite/ReadMoreLite.tsx","../../src/components/Comment/CommentFooter.tsx","../../src/components/ProgressSteps/ProgressSteps.tsx","../../src/components/Form/Form.tsx","../../src/components/Label/Label.tsx","../../src/components/DropdownMenu/DropdownMenu.tsx","../../src/components/HowItWorksSection/HowItWorksSection.tsx","../../src/components/HeroSection/HeroSectionFeatures.tsx","../../src/components/HeroSection/HeroSectionMedia.tsx","../../src/components/HeroSection/HeroSectionStats.tsx","../../src/components/HeroSection/HeroSectionTemplate.tsx","../../src/components/HeroSection/HeroSection.tsx","../../src/components/SocialProofSection/SocialProofSection.tsx","../../src/components/FeatureSection/FeatureTemlates.tsx","../../src/components/FeatureSection/FeatureSection.tsx","../../src/components/TestimonialSection/templates/TestimonialTemplateOne.tsx","../../src/components/core/infinite-slider.tsx","../../src/components/TestimonialSection/utils.ts","../../src/components/TestimonialSection/templates/TestimonialTemplateThree.tsx","../../src/components/TestimonialSection/templates/TestimonialTemplateTwo.tsx","../../src/components/TestimonialSection/TestimonialSection.tsx","../../src/components/FAQSection/FAQTemplate.tsx","../../src/components/FAQSection/FAQSection.tsx","../../src/components/NewsSection/NewsSectionTemplate.tsx","../../src/components/NewsSection/NewsSection.tsx","../../src/components/CTASection/CTASection.tsx","../../src/components/MetricsSection/template/MetricsSectionTemplateOne.tsx","../../src/components/MetricsSection/template/MetricsSectionTemplateTwo.tsx","../../src/components/MetricsSection/MetricsSection.tsx","../../src/components/Payment/components/PaymentInvoice.tsx","../../src/components/Payment/components/PaymentsMethods.tsx","../../src/components/Payment/components/PaymentSkeleton.tsx","../../src/components/Payment/Payments.tsx","../../src/components/PaymentResult/components/PaymentResult/PaymentFooter.tsx","../../src/components/PaymentResult/components/PaymentResult/PaymentResultContent.tsx","../../src/components/PaymentResult/PaymentResult.tsx","../../src/components/PaymentResult/components/PaymentResult/PaymentResultHeader.tsx","../../src/components/Topbar/Topbar.tsx","../../src/components/Topbar/templates/TopbarTemplateOne.tsx","../../src/components/Drawer/Drawer.tsx","../../src/components/InputOTP/InputOTP.tsx","../../src/components/QRPayment/QRPayment.tsx","../../src/components/QRPayment/components/QRCodeScanBox.tsx","../../src/components/QRPayment/utils/imageToBase64.ts","../../src/components/QRPayment/components/PaymentGuide.tsx","../../src/components/QRPayment/components/PaymentGuideDialog.tsx","../../src/mobase-tw-plugin/plugin.ts","../../src/mobase-tw-plugin/animations/index.ts","../../src/mobase-tw-plugin/colors/blue.ts","../../src/mobase-tw-plugin/colors/green.ts","../../src/mobase-tw-plugin/colors/pink.ts","../../src/mobase-tw-plugin/colors/purple.ts","../../src/mobase-tw-plugin/colors/red.ts","../../src/mobase-tw-plugin/colors/yellow.ts","../../src/mobase-tw-plugin/colors/orange.ts","../../src/mobase-tw-plugin/colors/gray.ts","../../src/mobase-tw-plugin/colors/common.ts","../../src/mobase-tw-plugin/colors/index.ts","../../src/mobase-tw-plugin/layout.ts","../../src/mobase-tw-plugin/utilities/transition.ts","../../src/mobase-tw-plugin/utilities/custom.ts","../../src/mobase-tw-plugin/utilities/scrollbar-hide.ts","../../src/mobase-tw-plugin/utilities/index.ts","../../src/mobase-tw-plugin/utils/object.ts","../../src/site/meta.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { ChevronDownIcon } from \"@heroicons/react/20/solid\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport {\n AccordionContentProps,\n AccordionItemProps,\n AccordionMultipleProps,\n AccordionSingleProps,\n AccordionTriggerProps,\n} from \"@radix-ui/react-accordion\";\n\nimport { cn } from \"../../helpers/utils\";\n\nexport interface AccordionInterface extends AccordionItemProps {\n css?: string;\n}\nexport type AccordionRootInterface = AccordionSingleProps | AccordionMultipleProps;\n// const Accordion = AccordionPrimitive.Root;\n\nconst Accordion = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Root>,\n AccordionRootInterface\n>(({ className, ...props }, ref) => <AccordionPrimitive.Root ref={ref} {...props} />);\nAccordion.displayName = \"AccordionRoot\";\n\nexport interface AccordionItemInterface extends AccordionItemProps {\n css?: string;\n}\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n AccordionItemInterface\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(\"border-b border-gray-200\", className)}\n {...props}\n />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nexport interface AccordionTriggerInterface extends AccordionTriggerProps {\n css?: string;\n}\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n AccordionTriggerInterface\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex flex-1 items-center justify-between py-4 text-left font-medium text-gray-900 transition-all hover:text-pink-600 hover:underline [&[data-state=open]>svg]:rotate-180 [&[data-state=open]]:text-pink-600\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\" ml-1 h-5 w-5 shrink-0 transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\nexport interface AccordionContentInterface extends AccordionContentProps {\n css?: string;\n}\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n AccordionContentInterface\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\" data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-left transition-all \"\n {...props}\n >\n <div className={cn(\"pb-4 pt-0 text-gray-900 \", className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\n\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","import { type ClassValue } from \"clsx\";\nimport * as React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { NEXT_PUBLIC_REACT_APP_FRONT_END } from \"../helpers/constants\";\nimport { createMedia } from \"@artsy/fresnel\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge((inputs));\n}\n\ninterface AddQueryToLinkParams {\n link?: string;\n query?: Record<string, string>;\n}\n\nexport const addQueryToLink = ({\n link,\n query = {},\n}: AddQueryToLinkParams): string => {\n if (!link) return \"\";\n\n const url = new URL(link, NEXT_PUBLIC_REACT_APP_FRONT_END || \"\");\n\n const searchParams = new URLSearchParams(url.search);\n\n Object.entries(query).forEach(([key, value]) => {\n if (value) searchParams.append(key, value);\n });\n\n url.search = searchParams.toString();\n\n return url.toString();\n};\n\n/**\n * Checks if the given element is a React element.\n *\n * @param element - The element to check.\n * @returns Whether the element is a React element.\n */\nexport const isReactElement = (\n element: React.ReactNode\n): element is React.ReactElement => {\n return React.isValidElement(element);\n};\n\n\nconst MoMoAppMedia = createMedia({\n breakpoints: {\n xs: 0,\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n },\n})\n\n// Make styles for injection into the header of the page\nexport const mediaStyles = MoMoAppMedia.createMediaStyle()\n\nexport const { Media, MediaContextProvider } = MoMoAppMedia\n","export const FooterItemsDefault = {\n heading: \"Về chúng tôi\",\n lists: [\n {\n title: \"Giới thiệu\",\n url: \"/sieu-ung-dung-momo\",\n newTab: false,\n },\n {\n title: \"An toàn - Bảo mật\",\n url: \"/an-toan-bao-mat\",\n newTab: false,\n },\n {\n title: \"Điều khoản điều lệ\",\n url: \"/dieu-khoan-dieu-le\",\n newTab: false,\n },\n {\n title: \"Chính sách quyền riêng tư\",\n url: \"/chinh-sach-quyen-rieng-tu\",\n newTab: false,\n },\n {\n title: \"Điều khoản liên kết Google trên ứng dụng MoMo\",\n url: \"/google-cloud-policy\",\n newTab: false,\n },\n {\n title: \"Blog\",\n url: \"/blog\",\n newTab: false,\n },\n {\n title: \"Liên hệ\",\n url: \"/lienhe\",\n newTab: false,\n },\n {\n title: \"Hỏi đáp\",\n url: \"/hoi-dap\",\n newTab: false,\n },\n ],\n};\n\nexport const MoMoText = {\n Business: {\n Phome: \"1900636652\",\n Phome_Format: \"1900 636 652 (Phí 1.000đ/phút)\",\n Email: \"merchant.care@momo.vn\",\n },\n Support: {\n Hotline: \"1900545441\",\n Hotline_Format: \"1900 5454 41\",\n Phone_Ext_1: \"02873065555\",\n Phone_Ext_1_Format: \"028.7306.5555\",\n Phone_Ext_2: \"02899995555\",\n Phone_Ext_2_Format: \"028.9999.5555\",\n Email: \"hotro@momo.vn\",\n },\n};\n\nexport const NEXT_PUBLIC_REACT_APP_FRONT_END = \"https://www.momo.vn/\";\n\nexport const SUPPORT = {\n Address:\n \"Lầu 6, Toà nhà Phú Mỹ Hưng, số 8 Hoàng Văn Thái, khu phố 1, Phường Tân Phú, Quận 7, Thành phố Hồ Chí Minh\",\n};\nexport const LIST_LINK = [\n { Name: \"Giới thiệu\", Href: \"/sieu-ung-dung-momo\" },\n { Name: \"An toàn - Bảo mật\", Href: \"/an-toan-bao-mat\" },\n { Name: \"Điều khoản điều lệ\", Href: \"/dieu-khoan-dieu-le\" },\n {\n Name: \"Chính sách quyền riêng tư\",\n Href: \"/chinh-sach-quyen-rieng-tu\",\n },\n {\n Name: \"Điều khoản liên kết Google trên ứng dụng MoMo\",\n Href: \"/google-cloud-policy\",\n },\n { Name: \"Blog\", Href: \"/blog\" },\n { Name: \"Liên hệ\", Href: \"/lienhe\" },\n { Name: \"Hỏi đáp\", Href: \"/hoi-dap\" },\n];\n\nexport const SOCIAL_ITEMS = [\n {\n Name: \"Facebook\",\n Image:\n \"https://homepage.momocdn.net/styles/desktop/images/social/facebook.svg\",\n Link: \"https://www.facebook.com/vimomo\",\n },\n {\n Name: \"Linkedin\",\n Image:\n \"https://homepage.momocdn.net/styles/desktop/images/social/linkedin.svg\",\n Link: \"https://www.linkedin.com/company/momo-mservice/\",\n },\n {\n Name: \"Youtube\",\n Image:\n \"https://homepage.momocdn.net/styles/desktop/images/social/youtube.svg\",\n Link: \"https://www.youtube.com/channel/UCKHHW-qL2JoZqcSNm1jPlqw\",\n },\n];\n\nexport const APP_DOWNLOAD = [\n {\n Name: \"App Store\",\n Image:\n \"https://homepage.momocdn.net/img/momo-upload-api-210724113855-637627235353131497.jpg\",\n Link: \"https://itunes.apple.com/vn/app/id918751511?utm_source=website-momo&utm_medium=download&utm_campaign=momo-1dong\",\n },\n {\n Name: \"Google Play\",\n Image:\n \"https://homepage.momocdn.net/img/momo-upload-api-210724113959-637627235994410679.jpg\",\n Link: \"https://play.google.com/store/apps/details?id=com.mservice.momotransfer&utm_source=website-momo&utm_medium=download&utm_campaign=momo-1dong\",\n },\n];\n\nexport const SERVICES_DEFAULT = {\n heading: \"Dịch vụ nổi bật\",\n lists: [\n {\n title: \"Vé xem phim\",\n url: \"/cinema\",\n image:\n \"https://homepage.momocdn.net/fileuploads/svg/momo-file-230629144722.svg\",\n newTab: false,\n },\n {\n title: \"Bảo hiểm Ô tô\",\n url: \"/bao-hiem-o-to/vat-chat\",\n image:\n \"https://homepage.momocdn.net/fileuploads/svg/momo-file-230629144844.svg\",\n newTab: false,\n },\n {\n title: \"Vé máy bay\",\n url: \"/ve-may-bay\",\n image:\n \"https://homepage.momocdn.net/fileuploads/svg/momo-file-201210145350.svg\",\n newTab: false,\n },\n {\n title: \"Ví nhân ái\",\n url: \"/vi-nhan-ai\",\n image:\n \"https://homepage.momocdn.net/img/momo-upload-api-231214222240-638381893608141712.png\",\n newTab: false,\n },\n {\n title: \"Túi thần tài\",\n url: \"/tui-than-tai\",\n image:\n \"https://homepage.momocdn.net/fileuploads/svg/momo-file-210716153611.svg\",\n newTab: false,\n },\n {\n title: \"Ví trả sau\",\n url: \"/vi-tra-sau\",\n image:\n \"https://homepage.momocdn.net/img/momo-upload-api-230629144414-638236466540028217.png\",\n newTab: false,\n },\n\n {\n title: \"Vay nhanh\",\n url: \"/vay-nhanh\",\n image:\n \"https://homepage.momocdn.net/img/momo-upload-api-230418101312-638174095928506551.png\",\n newTab: false,\n },\n {\n title: \"Trả Góp Apple\",\n url: \"/tra-gop-san-pham-apple\",\n image:\n \"https://homepage.momocdn.net/img/momo-amazone-s3-api-240719154503-638570007030998565.png\",\n newTab: false,\n },\n ],\n};\n\nexport const SERVICES_PAGE = [\n {\n Name: \"Vé xem phim\",\n Href: \"/cinema\",\n Image:\n \"https://homepage.momocdn.net/fileuploads/svg/momo-file-230629144722.svg\",\n },\n {\n Name: \"Bảo hiểm Ô tô\",\n Href: \"/bao-hiem-o-to/vat-chat\",\n Image:\n \"https://homepage.momocdn.net/fileuploads/svg/momo-file-230629144844.svg\",\n },\n {\n Name: \"Vé máy bay\",\n Href: \"/ve-may-bay\",\n Image:\n \"https://homepage.momocdn.net/fileuploads/svg/momo-file-201210145350.svg\",\n },\n {\n Name: \"Khách sạn\",\n Href: \"/khach-san-theo-gio\",\n Image:\n \"https://homepage.momocdn.net/fileuploads/svg/momo-file-210315154805.svg\",\n },\n {\n Name: \"Ví nhân ái\",\n Href: \"/vi-nhan-ai\",\n Image:\n \"https://homepage.momocdn.net/img/momo-upload-api-231214222240-638381893608141712.png\",\n },\n {\n Name: \"Vay nhanh\",\n Href: \"/vay-nhanh\",\n Image:\n \"https://homepage.momocdn.net/img/momo-upload-api-230418101312-638174095928506551.png\",\n },\n];\n\nexport const MOMO_TEXT = {\n Business: {\n Phome: \"1900636652\",\n Phome_Format: \"1900 636 652 (Phí 1.000đ/phút)\",\n Email: \"merchant.care@momo.vn\",\n },\n Support: {\n Hotline: \"1900545441\",\n Hotline_Format: \"1900 5454 41\",\n Phone_Ext_1: \"02873065555\",\n Phone_Ext_1_Format: \"028.7306.5555\",\n Phone_Ext_2: \"02899995555\",\n Phone_Ext_2_Format: \"028.9999.5555\",\n Phone_Ext_3: \"02855555555\",\n Phone_Ext_3_Format: \"028.5555.5555\",\n Email: \"hotro@momo.vn\",\n },\n};\n\nexport const FROM_TYPE_FOOTER_MENU = \"nav_footer\";","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport SpinerIcon from \"../../foundation/SpinerIcon\";\nimport { cn } from \"../../helpers/utils\";\n\n// /dwd\nconst buttonVariants = cva(\n \"focus-visible:ring-ring inline-flex items-center justify-center whitespace-nowrap rounded-lg border border-transparent text-sm font-bold transition-colors focus-visible:outline-none focus-visible:ring-1 disabled:cursor-not-allowed\",\n {\n variants: {\n /**\n * Determines style variation of Button component.\n */\n variant: {\n primary: \"bg-pink-500 text-white hover:bg-pink-600 disabled:bg-pink-300\",\n secondary:\n \"border-gray-300 bg-white text-gray-900 hover:bg-gray-100 disabled:bg-white disabled:text-gray-400\",\n outline:\n \"border-pink-500 bg-white text-pink-500 hover:bg-pink-50 disabled:border-pink-300 disabled:bg-white disabled:text-pink-300\",\n tonal:\n \"bg-pink-100 text-pink-500 hover:bg-pink-200 disabled:bg-gray-200 disabled:text-gray-400\",\n danger: \"bg-red-500 text-white hover:bg-red-600 disabled:bg-red-300\",\n transparent:\n \"bg-transparent text-gray-900 hover:bg-gray-100 disabled:bg-transparent disabled:text-gray-400\",\n },\n /**\n * Determines size variation of Button component.\n */\n size: {\n default: \"h-10 px-4 text-sm\",\n sm: \"h-8 rounded-md px-3 text-sm\",\n lg: \"h-12 px-4 text-base\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"default\",\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n */\n asChild?: boolean;\n /**\n * Adds loading indicator icon and disables interactions\n */\n isLoading?: boolean;\n /**\n * Disabled interaction and applies disabled styles\n */\n isDisabled?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = \"primary\",\n size = \"default\",\n asChild = false,\n isLoading = false,\n isDisabled = false,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\";\n const buttonClassName = cn(buttonVariants({ variant, size, className }), {\n \"cursor-wait\": isLoading,\n });\n const loaderSize = size === \"default\" || size === \"sm\" ? \"w-4 h-4\" : \"w-5 h-5\";\n return (\n <>\n {asChild ? (\n <Comp\n className={buttonClassName}\n type=\"button\"\n disabled={isDisabled}\n ref={ref}\n {...props}\n >\n {props.children}\n </Comp>\n ) : (\n <Comp\n className={buttonClassName}\n type=\"button\"\n disabled={isDisabled}\n ref={ref}\n {...props}\n >\n {isLoading && <SpinerIcon className={`${loaderSize} animate-spin-loading mr-2`} />}\n {props.children}\n </Comp>\n )}\n </>\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import React from \"react\";\n\ntype SpinerIconProps = {\n className?: string;\n};\n\nconst SpinerIcon: React.FC<SpinerIconProps> = ({ className }) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n className={`${className}`}\n >\n <path\n opacity=\"0.9\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M15 9H19C19.55 9 20 9.45 20 10C20 10.55 19.55 11 19 11H15C14.45 11 14 10.55 14 10C14 9.45 14.45 9 15 9Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.2\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.8301 11.634L18.2942 13.634C18.7706 13.909 18.9353 14.5237 18.6603 15C18.3853 15.4763 17.7706 15.641 17.2942 15.366L13.8301 13.366C13.3538 13.091 13.1891 12.4763 13.4641 12C13.7391 11.5237 14.3538 11.359 14.8301 11.634Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.25\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13.366 13.8301L15.366 17.2942C15.641 17.7706 15.4763 18.3853 14.9999 18.6603C14.5236 18.9353 13.9089 18.7706 13.6339 18.2942L11.6339 14.8301C11.3589 14.3538 11.5236 13.7391 11.9999 13.4641C12.4763 13.1891 13.091 13.3538 13.366 13.8301Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.3\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M11 15V19C11 19.55 10.55 20 10 20C9.45 20 9 19.55 9 19V15C9 14.45 9.45 14 10 14C10.55 14 11 14.45 11 15Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.35\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.36597 14.8301L6.36597 18.2942C6.09097 18.7706 5.47626 18.9353 4.99994 18.6603C4.52363 18.3853 4.35892 17.7706 4.63392 17.2942L6.63392 13.8301C6.90892 13.3538 7.52363 13.1891 7.99994 13.4641C8.47626 13.7391 8.64097 14.3538 8.36597 14.8301Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.4\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.16986 13.366L2.70576 15.366C2.22945 15.641 1.61474 15.4763 1.33974 15C1.06474 14.5237 1.22945 13.909 1.70576 13.634L5.16986 11.634C5.64618 11.359 6.26089 11.5237 6.53589 12C6.81089 12.4763 6.64618 13.091 6.16986 13.366Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.45\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5 11H1C0.45 11 0 10.55 0 10C0 9.45 0.45 9 1 9H5C5.55 9 6 9.45 6 10C6 10.55 5.55 11 5 11Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.5\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.16986 8.36603L1.70576 6.36603C1.22945 6.09103 1.06474 5.47632 1.33974 5C1.61474 4.52369 2.22945 4.35898 2.70576 4.63398L6.16986 6.63398C6.64618 6.90898 6.81089 7.52369 6.53589 8C6.26089 8.47632 5.64618 8.64103 5.16986 8.36603Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.55\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.63403 6.16986L4.63403 2.70576C4.35903 2.22945 4.52374 1.61474 5.00006 1.33974C5.47637 1.06474 6.09108 1.22945 6.36608 1.70576L8.36608 5.16986C8.64108 5.64618 8.47637 6.26089 8.00006 6.53589C7.52374 6.81089 6.90903 6.64618 6.63403 6.16986Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.65\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9 5L9 1C9 0.45 9.45 0 10 0C10.55 0 11 0.45 11 1V5C11 5.55 10.55 6 10 6C9.45 6 9 5.55 9 5Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.75\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M11.634 5.16986L13.634 1.70576C13.909 1.22945 14.5237 1.06474 15.0001 1.33974C15.4764 1.61474 15.6411 2.22945 15.3661 2.70576L13.3661 6.16986C13.0911 6.64618 12.4764 6.81089 12.0001 6.53589C11.5237 6.26089 11.359 5.64618 11.634 5.16986Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.85\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13.8301 6.63397L17.2942 4.63397C17.7706 4.35897 18.3853 4.52368 18.6603 5C18.9353 5.47631 18.7706 6.09102 18.2942 6.36602L14.8301 8.36602C14.3538 8.64102 13.7391 8.47631 13.4641 8C13.1891 7.52368 13.3538 6.90897 13.8301 6.63397Z\"\n fill=\"currentColor\"\n />\n </svg>\n\n );\n};\n\nexport default SpinerIcon;\n","import { type DialogProps } from \"@radix-ui/react-dialog\";\nimport { QRCodeSVG } from \"qrcode.react\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { Dialog, DialogBody, DialogContent } from \"../Dialog\";\n\n/**\n * Props for the DialogQr component.\n */\nexport interface DialogQrProps extends DialogProps {\n /**\n * The title of the dialog QR.\n */\n title?: string;\n\n /**\n * The short title of the step 3 in dialog QR.\n */\n shortTitle?: string;\n\n /**\n * The image URL for the QR code.\n */\n qrImage?: string;\n\n /**\n * The link associated with the QR code.\n */\n qrLink?: string;\n\n /**\n * The logo image URL for the QR code.\n */\n logoQr?: string;\n\n /**\n * Indicates whether the QR code is all in one.\n */\n isQrForAll?: boolean;\n className?: string;\n}\n\nconst QRCodeScan = ({ img = \"\", children, isQrForAll }) => {\n return (\n <>\n <div className=\"qrcode__scan__container\">\n <div className=\"qrcode__scan\">\n <div className=\"qrcode__gradient\">\n <img\n alt=\"step 1\"\n className=\"img-fluid\"\n src=\"https://homepage.momocdn.net/jk/momo2020/img/qrcode/qrcode-gradient.png\"\n />\n </div>\n <div className=\"qrcode__border\">\n <img\n alt=\"step 2\"\n className=\"img-fluid\"\n src=\"https://homepage.momocdn.net/jk/momo2020/img/qrcode/border-qrcode.svg\"\n />\n </div>\n\n <div className=\"p-4 qrcode__image\">\n {img ? (\n <img alt=\"step 3\" className=\"mx-auto img-fluid d-block\" src={img} loading=\"lazy\" />\n ) : (\n children\n )}\n </div>\n </div>\n </div>\n <div className=\"mt-4 text-sm text-white\">\n {isQrForAll ? (\n <>\n <img\n src=\"https://homepage.momocdn.net/img/momo-upload-api-231211171009-638379114093056419.png\"\n width={255}\n height={32}\n className=\"mx-auto\"\n alt=\"QR all\"\n />\n\n <div className=\"mt-3\">Nhận tiền từ mọi Ví Điện Tử và Ngân Hàng</div>\n </>\n ) : (\n <>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"inline mr-1 w-6 h-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z\"\n />\n </svg>\n Sử dụng App MoMo hoặc\n <br />\n ứng dụng Camera hỗ trợ QR code để quét mã.\n </>\n )}\n </div>\n <style>\n {`\n .qrcode__scan__container {\n padding: 15px;\n background-color: white;\n width: 280px;\n height: 280px;\n border-radius: 20px;\n border-radius: 15px;\n margin: 0 auto;\n }\n \n .qrcode__image {\n width: 100%;\n }\n \n .qrcode__image img {\n width: 100%;\n }\n \n .qrcode__scan {\n width: 245px;\n height: 245px;\n margin: 0 auto;\n overflow: hidden;\n background-color: white;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n \n .qrcode__border {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n z-index: 5;\n opacity: 0.9;\n pointer-events: none;\n }\n \n .qrcode__gradient {\n position: absolute;\n opacity: 0.6;\n width: 98%;\n height: 98%;\n top: 1%;\n left: 1%;\n z-index: 6;\n // pointer-events: none;\n transform: translate3d(0, -110%, 0);\n animation: QRCodeScan 3s infinite cubic-bezier(0.45, 0.03, 0.81, 0.63);\n \n backface-visibility: hidden;\n }\n \n @keyframes QRCodeScan {\n 0% {\n transform: translate3d(0, -110%, 0);\n }\n \n 90% {\n transform: translate3d(0, 30%, 0);\n }\n 100% {\n transform: translate3d(0, 30%, 0);\n }\n }\n `}\n </style>\n </>\n );\n};\n\nexport const DialogQr = ({\n className,\n children,\n title,\n shortTitle,\n qrImage,\n qrLink,\n logoQr,\n isQrForAll = false,\n ...props\n}: DialogQrProps) => {\n return (\n <Dialog {...props}>\n <DialogContent\n className={cn(\n \"h-auto max-h-screen overflow-hidden border-0 md:max-h-screen md:max-w-2xl lg:max-w-3xl [&>button>svg]:text-white\",\n className\n )}\n size=\"xl\"\n positionRightCloseBtn\n >\n <DialogBody className=\"p-0\">\n <div className=\"flex flex-row flex-wrap\">\n <div className=\"hidden flex-none w-full sm:block md:w-5/12\">\n {children || (\n <div className=\"grid grid-cols-1 gap-y-6 px-5 py-8 text-sm\">\n <div className=\"flex flex-nowrap items-center\">\n <div className=\"flex-none\">\n <img\n className=\"w-20\"\n loading=\"lazy\"\n src=\"https://homepage.momocdn.net/images/s/momo-upload-api-200917091602-637359309621891617.png\"\n alt=\"Step 1\"\n />\n </div>\n <div className=\"flex-1 pl-4\">\n <div className=\"font-semibold text-gray-800 step\">Bước 1 :</div>\n <div className=\"mt-1 text-gray-500\">\n {isQrForAll\n ? \"Mở app MoMo hoặc ứng dụng ngân hàng/ví điện tử chấp nhận mã vạch từ QR Đa Năng\"\n : \"Mở ứng dụng camera mặc định hoặc ứng dụng hỗ trợ QR code của bạn\"}\n </div>\n </div>\n </div>\n <div className=\"flex flex-nowrap items-center\">\n <div className=\"flex-none\">\n <img\n className=\"w-20\"\n loading=\"lazy\"\n src=\"https://homepage.momocdn.net/images/s/momo-upload-api-200917091443-637359308837905996.png\"\n alt=\"Step 2\"\n />\n </div>\n <div className=\"flex-1 pl-4\">\n <div className=\"font-semibold text-gray-800 step\">Bước 2 :</div>\n <div className=\"mt-1 text-gray-500\">Quét mã QR Code theo hình bên phải</div>\n </div>\n </div>\n <div className=\"flex flex-nowrap items-center\">\n <div className=\"flex-none\">\n <img\n className=\"w-20\"\n loading=\"lazy\"\n src=\"https://homepage.momocdn.net/images/s/momo-upload-api-200917090146-637359301062519803.png\"\n alt=\"Step 3\"\n />\n </div>\n <div className=\"flex-1 pl-4\">\n <div className=\"font-semibold text-gray-800 step\">Bước 3 :</div>\n <div className=\"mt-1 text-gray-500\">\n Bấm vào thông báo hiển thị để tải ứng dụng hoặc{\" \"}\n {shortTitle || \"Truy cập ngay\"}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n <div\n className=\"flex justify-center items-center w-full h-auto md:w-7/12\"\n style={{\n background:\n \"url(https://homepage.momocdn.net/jk/momo2020/img/intro/qrcode-pattern.png) 10px 10px no-repeat,linear-gradient(to top,#c1177c,#e11b90)\",\n }}\n >\n <div className=\"px-5 py-10 text-center\">\n {title && <h4 className=\"mb-5 text-base font-semibold text-white\">{title}</h4>}\n <div className=\"relative\">\n {isQrForAll && (\n <div className=\"absolute -top-2 left-1/2 z-[5] -translate-x-1/2\">\n <img\n src=\"https://homepage.momocdn.net/fileuploads/svg/momo-file-231211170324.svg\"\n alt=\"Title QR all\"\n />\n </div>\n )}\n <QRCodeScan img={qrImage} isQrForAll={isQrForAll}>\n {qrLink && (\n <QRCodeSVG\n value={qrLink}\n size={215}\n imageSettings={{\n src: `${\n logoQr || \"https://homepage.momocdn.net/pwa/images/logoMomox50.png\"\n }`,\n // x: null,\n // y: null,\n height: 50,\n width: 50,\n excavate: true,\n }}\n level=\"H\"\n />\n )}\n </QRCodeScan>\n </div>\n </div>\n </div>\n </div>\n </DialogBody>\n </DialogContent>\n </Dialog>\n );\n};\n","import * as React from \"react\";\nimport { XMarkIcon } from \"@heroicons/react/16/solid\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/60 !duration-300\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n /**\n * Determines whether the close button should be positioned on the right side.\n */\n positionRightCloseBtn?: boolean;\n /**\n * Size of the modal window\n */\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n /**\n * Position of the modal window\n */\n position?: \"center\" | \"left\" | \"right\" | \"bottom\";\n /**\n * Determines whether the close button hide or not\n */\n hideCloseBtn?: boolean;\n /**\n * Height of the modal window\n */\n height?: \"auto\" | \"small\" | \"large\" | \"full\";\n /**\n * Open full screen dialog in mobile\n */\n isFull?: boolean;\n }\n>(\n (\n {\n className,\n positionRightCloseBtn,\n hideCloseBtn = false,\n size = \"md\",\n position = \"center\",\n height = \"auto\",\n isFull = false,\n children,\n ...props\n },\n ref\n ) => {\n const classNames = {\n base: \"fixed z-50 flex bg-white shadow-lg sm:rounded-xl bg-white text-gray-900 w-full max-w-[calc(-64px_+_100vw)] max-h-[calc(-64px_+_100vh)] flex-col\",\n center:\n \"left-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-xl\",\n bottom:\n \"!duration-300 bottom-0 sm:bottom-1/2 left-1/2 rounded-t-xl sm:translate-y-1/2 data-[state=closed]:animate-out -translate-x-1/2 data-[state=open]:animate-in data-[state=open]:slide-in-from-left-1/2 ease-in-out data-[state=open]:slide-in-from-bottom-2/3 data-[state=closed]:slide-out-to-bottom-2/3 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 max-w-full max-h-[calc(100%_-_calc(32px_+_env(safe-area-inset-top,0)))] sm:max-h-[calc(-64px_+_100vh)] sm:max-w-[calc(-64px_+_100vw)]\",\n left: \"!duration-300 max-h-screen !h-full rounded-r-xl sm:rounded-l-none top-0 data-[state=open]:animate-in data-[state=open]:slide-in-from-left data-[state=closed]:animate-out data-[state=closed]:slide-out-to-left ease-in-out\",\n right:\n \"!duration-300 !h-full rounded-l-xl sm:rounded-r-none max-h-screen top-0 right-0 data-[state=open]:animate-in data-[state=open]:slide-in-from-right data-[state=closed]:animate-out data-[state=closed]:slide-out-to-right ease-in-out\",\n };\n\n const sizeClassNames = {\n sm: \"w-80 sm:w-80\",\n md: \"w-[512px] sm:w-[512px]\",\n lg: \"w-[672px] sm:w-[672px]\",\n xl: \"w-[1024px] sm:w-[1024px]\",\n };\n\n const heightClassNames = {\n auto: \"h-auto sm:h-auto\",\n small: \"h-[480px] sm:h-[480px]\",\n large: \"h-[640px] sm:h-[640px]\",\n full: \"h-full\",\n };\n\n const classNamesDialogContent = [\n classNames.base,\n classNames[position],\n sizeClassNames[size],\n heightClassNames[height],\n isFull &&\n \"h-full max-h-screen max-w-full w-full rounded-none sm:rounded-xl sm:max-h-[calc(-64px_+_100vh)]\",\n className,\n ];\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content ref={ref} className={cn(...classNamesDialogContent)} {...props}>\n {children}\n {!hideCloseBtn && (\n <DialogPrimitive.Close\n className={cn(\n \"absolute left-3 top-2 flex h-8 w-8 items-center justify-center rounded-full text-gray-900 before:absolute before:inset-0 before:left-0 before:top-0 before:z-[-1] before:select-none before:rounded-full before:bg-gray-200 before:opacity-0 before:transition-opacity before:content-[''] hover:before:opacity-100 focus:outline-none focus:ring-0 disabled:pointer-events-none data-[state=open]:bg-gray-100 data-[state=open]:text-gray-700 md:left-auto md:right-4 md:top-3\",\n positionRightCloseBtn && \"left-auto right-3 md:right-4\"\n )}\n title=\"Đóng\"\n >\n <XMarkIcon className=\"h-5 w-5 text-gray-700\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n }\n);\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"dialog-header flex h-12 w-full shrink-0 items-center justify-center border-b border-gray-200 px-10 py-2 md:h-14 md:px-12 md:py-3\",\n className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogBody = ({\n className,\n isCondensed = false,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & {\n /**\n * Determines whether the dialog body should be condensed.\n */\n isCondensed?: boolean;\n}) => (\n <div\n className={cn(\"dialog-body flex-1 overflow-y-auto p-6\", isCondensed && \"p-5\", className)}\n {...props}\n />\n);\nDialogBody.displayName = \"DialogBody\";\n\nconst DialogFooter = ({\n className,\n isDivider = true,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & { isDivider?: boolean }) => (\n <div\n className={cn(\n \"dialog-footer flex shrink-0 justify-center space-x-2 px-6 pb-4 sm:flex-row sm:justify-end [&>*]:basis-1/2 [&>*]:sm:basis-auto\",\n isDivider && \"border-t border-gray-200 py-3\",\n className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\"line-clamp-1 max-w-full text-base font-semibold\", className)}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-gray-700\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogBody,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","import { cn } from \"../../helpers/utils\";\nimport { Button } from \"../Button\";\nimport { DialogQr } from \"../DialogQr\";\nimport { useState } from \"react\";\nimport { ActionButtonProps, useIsMobile } from \"./utils\";\n\nconst ActionButton = ({\n action,\n newTab,\n offset,\n dialogQrProps,\n className,\n children,\n ...props\n}: ActionButtonProps) => {\n const [isOpenQR, setOpenQR] = useState(false);\n const isMobileDevice = useIsMobile();\n\n const hasQrButton = Boolean(dialogQrProps?.qrLink);\n\n const handleGetLink = () => {\n const basicLink = hasQrButton ? dialogQrProps?.qrLink : action;\n return typeof basicLink === \"string\" ? basicLink.trim() : \"\";\n };\n\n const handleAction = () => {\n const modifiedLink = handleGetLink();\n\n if (!modifiedLink && typeof action !== \"function\") return;\n\n if (typeof action === \"function\") {\n action();\n } else {\n window.open(modifiedLink, newTab ? \"_blank\" : \"_self\");\n }\n };\n\n const scrollToElement = (selector: string, offset: number = 0) => {\n const element = document.querySelector(selector);\n if (!element) return;\n\n const elementPosition =\n element.getBoundingClientRect().top + window.scrollY;\n const offsetPosition = elementPosition - offset;\n\n window.scrollTo({\n top: offsetPosition,\n behavior: \"smooth\",\n });\n };\n\n const handleScrollOrAction = () => {\n if (typeof action === \"string\" && action.startsWith(\"#\")) {\n scrollToElement(action, offset);\n } else {\n handleAction();\n }\n };\n\n const renderButtonWithDialogQr = () => (\n <>\n <Button\n {...props}\n className={className}\n onClick={() => setOpenQR(true)}\n data-name=\"button-action-with-qr\"\n >\n {children}\n </Button>\n <DialogQr\n {...dialogQrProps}\n open={isOpenQR}\n onOpenChange={() => setOpenQR(false)}\n qrLink={dialogQrProps?.qrLink || \"\"}\n />\n </>\n );\n\n const renderButtonWithoutQr = () => (\n <Button\n {...props}\n onClick={handleScrollOrAction}\n className={cn(\"cursor-pointer\", className)}\n data-name=\"button-action-without-qr\"\n rel=\"noreferrer\"\n >\n {children}\n </Button>\n );\n\n return hasQrButton ? (\n isMobileDevice ? (\n dialogQrProps?.isQrForAll ? (\n renderButtonWithDialogQr()\n ) : (\n <Button\n {...props}\n className={className}\n onClick={handleAction}\n data-name=\"button-action-with-qr\"\n >\n {children}\n </Button>\n )\n ) : (\n renderButtonWithDialogQr()\n )\n ) : (\n renderButtonWithoutQr()\n );\n};\n\nexport { ActionButton };\n","import { useEffect, useLayoutEffect, useState, ReactNode } from \"react\";\nimport { ButtonProps } from \"../Button\";\nimport { DialogQrProps } from \"../DialogQr\";\nimport UAParser from \"ua-parser-js\";\n\nexport interface ActionButtonProps extends ButtonProps {\n /**\n * Action to be performed when the button is clicked.\n */\n action?: string | (() => void) | undefined;\n /**\n * Opens a new tab when href link.\n */\n newTab?: boolean;\n /**\n * Offset top when use button scroll to element.\n */\n offset?: number;\n /**\n * Props to pass to the DialogQr component. If this prop is provided, the button will open a dialog with a QR code. qrLink in DialogQrProps is required.\n */\n dialogQrProps?: Partial<DialogQrProps>;\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * The content for button.\n */\n children?: ReactNode;\n}\nconst checkIsMobileAgent = () => UAParser().device.type === \"mobile\";\n\nconst useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\n export const useIsMobile = () => {\n const [isMobile, setIsMobile] = useState<boolean | undefined>(false);\n useIsomorphicLayoutEffect(() => {\n setIsMobile(checkIsMobileAgent());\n }, []);\n\n return isMobile;\n};","import * as React from \"react\"\nimport { ChevronRightIcon, DotsHorizontalIcon } from \"@radix-ui/react-icons\"\nimport { Slot } from \"@radix-ui/react-slot\"\n \nimport { cn } from \"../../helpers/utils\";\n \nconst Breadcrumb = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"nav\"> & {\n separator?: React.ReactNode\n }\n>(({ className,...props }, ref) => <nav ref={ref} aria-label=\"breadcrumb\" className={cn(\"\", className)} {...props} />)\nBreadcrumb.displayName = \"Breadcrumb\"\n \nconst BreadcrumbList = React.forwardRef<\n HTMLOListElement,\n React.ComponentPropsWithoutRef<\"ol\">\n>(({ className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(\n \"flex items-center gap-2 break-words text-sm overflow-x-auto snap-mandatory snap-x [&::-webkit-scrollbar]:hidden\",\n className\n )}\n {...props}\n />\n))\nBreadcrumbList.displayName = \"BreadcrumbList\"\n \nconst BreadcrumbItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentPropsWithoutRef<\"li\">\n>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n className={cn(\"shrink-0 text-gray-900 hover:text-pink-500\", className)}\n {...props}\n />\n))\nBreadcrumbItem.displayName = \"BreadcrumbItem\"\n \nconst BreadcrumbLink = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<\"a\"> & {\n asChild?: boolean\n }\n>(({ asChild, className, ...props }, ref) => {\n const Comp = asChild ? Slot : \"a\"\n \n return (\n <Comp\n ref={ref}\n className={cn(\"transition-colors hover:text-foreground\", className)}\n {...props}\n />\n )\n})\nBreadcrumbLink.displayName = \"BreadcrumbLink\"\n \nconst BreadcrumbPage = React.forwardRef<\n HTMLSpanElement,\n React.ComponentPropsWithoutRef<\"span\">\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn(\"text-sm text-gray-500\", className)}\n {...props}\n />\n))\nBreadcrumbPage.displayName = \"BreadcrumbPage\"\n \nconst BreadcrumbSeparator = ({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) => (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"text-gray-900\", className)}\n {...props}\n >\n {children ?? <ChevronRightIcon className=\"w-2 h-2\" />}\n </li>\n)\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\"\n \nconst BreadcrumbEllipsis = ({\n className,\n ...props\n}: React.ComponentProps<\"span\">) => (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex h-5 w-5 items-center justify-center\", className)}\n {...props}\n >\n <DotsHorizontalIcon className=\"w-4 h-4 text-gray-900\" />\n <span className=\"sr-only\">More</span>\n </span>\n)\nBreadcrumbEllipsis.displayName = \"BreadcrumbElipssis\"\n \nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}","import parse from \"html-react-parser\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { ActionButton } from \"../ActionButton/ActionButton\";\nimport { Heading, HeadingGroup, HeadingSub, HeadingTagline } from \"../HeadingGroup/HeadingGroup\";\nimport { ButtonsBlockProps, dataButton, HeadingBlockProps, SectionBlockProps } from \"./utils\";\n\nconst SectionBlock = ({ idSection, className, background, children }: SectionBlockProps) => {\n return (\n <section\n id={idSection}\n className={cn(\"block-section py-8 md:py-10 lg:py-14\", className)}\n style={{ background: background }}\n >\n <div className=\"wrapper relative\">{children}</div>\n </section>\n );\n};\n\nconst HeadingBlock = ({\n align = \"center\",\n tagline,\n title,\n description,\n tagHeading = \"h2\",\n colorScheme = \"pink\",\n sizeHeading = \"small\",\n className,\n}: HeadingBlockProps) => {\n const taglineColor =\n colorScheme === \"black\" ? \"pink\" : colorScheme === \"pink\" ? \"regular\" : \"white\";\n const headingColor =\n colorScheme === \"pink\" ? \"pink\" : colorScheme === \"white\" ? \"white\" : \"regular\";\n const headingSubColor = colorScheme === \"white\" ? \"white\" : \"regular\";\n\n if (!title && !description && !tagline) return null;\n\n return (\n <HeadingGroup align={align} className={className}>\n {tagline && <HeadingTagline color={taglineColor}>{tagline}</HeadingTagline>}\n {title && (\n <Heading tagHeading={tagHeading} color={headingColor} size={sizeHeading}>\n {parse(title)}\n </Heading>\n )}\n {description && (\n <HeadingSub\n color={headingSubColor}\n size=\"large\"\n marginTop={sizeHeading === \"large\" ? \"spacing2Xl\" : \"spacingX\"}\n >\n {parse(description)}\n </HeadingSub>\n )}\n </HeadingGroup>\n );\n};\n\nconst ButtonsBlock = ({ align, isFullInMobile = false, buttons, className }: ButtonsBlockProps) => {\n if (buttons?.length === 0) return null;\n return (\n <div\n className={cn(\n \"buttons-block mt-8 flex w-full gap-4 md:mt-10\",\n align === \"center\" && \"justify-center\",\n align === \"right\" && \"justify-end\",\n isFullInMobile && \"flex-wrap md:flex-nowrap\",\n className\n )}\n >\n {buttons?.slice(0, 2).map((button: dataButton, index: number) => {\n if (!button) return null;\n const { btnName, ...rest } = button;\n return (\n <ActionButton\n key={index}\n {...rest}\n className={cn(isFullInMobile && \"w-full md:w-auto\", button?.className)}\n >\n {parse(btnName)}\n </ActionButton>\n );\n })}\n </div>\n );\n};\n\nexport { SectionBlock, HeadingBlock, ButtonsBlock };\n","import React, { createContext, useContext } from \"react\";\n\nimport { cn } from \"../../helpers/utils\";\n\ninterface HeadingGroupProps {\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * Heading group alignment.\n */\n align?: \"left\" | \"center\" | \"right\";\n /**\n * The children of the HeadingGroup, which could include TagLine, Heading, Heading sub,..\n */\n children?: React.ReactNode;\n}\n\ntype HeadingGroupContextProps = {\n align?: HeadingGroupProps[\"align\"];\n};\n\nconst HeadingGroupContext = createContext<HeadingGroupContextProps>({\n align: \"center\",\n});\n\ninterface HeadingTaglineProps {\n /**\n * Tagline color.\n */\n color?: \"regular\" | \"pink\" | \"white\";\n /**\n * Tagline size.\n */\n size?: \"small\" | \"large\";\n /**\n * Tagline use truncate.\n */\n isTruncated?: boolean;\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * The children of the Tagline.\n */\n children?: React.ReactNode;\n}\n\ninterface HeadingProps {\n /**\n * Shorthand for changing the default rendered element into a semantically appropriate alternative.\n */\n tagHeading?: \"h1\" | \"h2\";\n /**\n * Heading color.\n */\n color?: \"regular\" | \"pink\" | \"white\";\n /**\n * Heading size.\n */\n size?: \"small\" | \"large\";\n /**\n * Heading use truncate.\n */\n isTruncated?: boolean;\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * The children of the Heading.\n */\n children?: React.ReactNode;\n}\n\ninterface HeadingSubProps {\n /**\n * Sub heading color.\n */\n color?: \"regular\" | \"white\";\n /**\n * Sub heading size.\n */\n size?: \"small\" | \"large\";\n /**\n * Sub heading margin top: none: 0px, spacingX: 8px, spacingM: 12px, spacingL: 16px, spacingXl: 20px, spacing2Xl: 24px\n */\n marginTop?: \"none\" | \"spacingX\" | \"spacingM\" | \"spacingL\" | \"spacingXl\" | \"spacing2Xl\";\n /**\n * Sub heading use truncate.\n */\n isTruncated?: boolean;\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * The children of the Heading sub.\n */\n children?: React.ReactNode;\n}\n\nconst HeadingTagline = ({\n color = \"pink\",\n size = \"small\",\n isTruncated = false,\n className,\n children,\n}: HeadingTaglineProps) => {\n const colorClasses = {\n regular: \"text-gray-900\",\n pink: \"text-pink-500\",\n white: \"text-white\",\n };\n const sizeClasses = {\n small: \"text-sm\",\n large: \"text-lg\",\n };\n return (\n <div\n className={cn(\n \"mb-1 font-semibold\",\n colorClasses[color],\n sizeClasses[size],\n isTruncated && \"truncate\",\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nconst Heading = ({\n tagHeading = \"h2\",\n size = \"small\",\n color = \"pink\",\n isTruncated = false,\n className,\n children,\n}: HeadingProps) => {\n const HeadingTag = tagHeading;\n const colorClasses = {\n regular: \"text-gray-900\",\n pink: \"text-pink-500\",\n white: \"text-white\",\n };\n const sizeClasses = {\n small: \"lg:text-3xl text-2xl\",\n large: \"lg:text-4xl md:text-3xl text-2xl\",\n };\n const { align } = useContext(HeadingGroupContext);\n return (\n <HeadingTag\n className={cn(\n \"max-w-4xl font-bold\",\n align === \"center\" ? \"mx-auto\" : align === \"right\" ? \"ml-auto\" : \"\",\n colorClasses[color],\n sizeClasses[size],\n isTruncated && \"truncate\",\n className\n )}\n >\n {children}\n </HeadingTag>\n );\n};\n\nconst HeadingSub = ({\n color = \"regular\",\n size = \"small\",\n marginTop = \"spacingX\",\n isTruncated = false,\n className,\n children,\n}: HeadingSubProps) => {\n const colorClasses = {\n regular: \"text-gray-500\",\n white: \"text-white/80\",\n };\n const sizeClasses = {\n small: \"text-base\",\n large: \"md:text-lg text-base\",\n };\n const marginTopClasses = {\n none: \"\",\n spacingX: \"mt-2\",\n spacingM: \"mt-3\",\n spacingL: \"mt-4\",\n spacingXl: \"mt-5\",\n spacing2Xl: \"mt-6\",\n };\n const { align } = useContext(HeadingGroupContext);\n return (\n <div\n className={cn(\n align === \"center\"\n ? \"mx-auto max-w-2xl\"\n : align === \"right\"\n ? \"ml-auto max-w-4xl\"\n : \"max-w-4xl\",\n colorClasses[color],\n sizeClasses[size],\n marginTopClasses[marginTop],\n isTruncated && \"truncate\",\n\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nconst HeadingGroup = ({ className, align = \"center\", children }: HeadingGroupProps) => {\n const alignClassnames = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n };\n return (\n <div className={cn(\"mb-5 md:mb-8\", alignClassnames[align], className)}>\n <HeadingGroupContext.Provider value={{ align }}>{children}</HeadingGroupContext.Provider>\n </div>\n );\n};\n\nexport { HeadingGroup, HeadingTagline, Heading, HeadingSub };\nexport type { HeadingGroupProps, HeadingTaglineProps, HeadingProps, HeadingSubProps };\n","import React, { memo } from \"react\";\nimport { ArrowDownIcon } from \"@heroicons/react/20/solid\";\nimport parse from \"html-react-parser\";\n\nimport SpinerIcon from \"../../../foundation/SpinerIcon\";\nimport { cn } from \"../../../helpers/utils\";\nimport { ActionButton } from \"../../ActionButton\";\nimport { HeadingBlock } from \"../../CommonBlocks/CommonBlocks\";\nimport {\n HorizontalContent,\n HorizontalNext,\n HorizontalPrevious,\n HorizontalScroll,\n} from \"../../HorizontalScroll\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../../Tabs\";\nimport { TextButton } from \"../../TextButton\";\nimport { BlogItemProps, BlogSectionProps, DataBlogProps } from \"../utils\";\n\nconst BlogSectionItem = ({ blog }: { blog: BlogItemProps }) => {\n const handleOnClickcate = (e: React.MouseEvent<HTMLButtonElement>, url: string) => {\n e?.preventDefault();\n e?.stopPropagation();\n window.open(url, \"_blank\");\n };\n\n return (\n <>\n <div className=\"flex-none pr-3 basis-1/2 md:basis-full md:pr-0\">\n <div className=\"relative block aspect-[16/9] w-full overflow-hidden rounded-md bg-gray-100\">\n <picture>\n <source media=\"(min-width: 640px)\" srcSet={blog?.thumbnailDesktop} />\n <img\n className=\"object-cover w-full h-full\"\n src={blog?.thumbnailMobile}\n alt={blog?.title}\n />\n </picture>\n </div>\n </div>\n\n <div className=\"overflow-hidden basis-1/2 md:mt-3 md:basis-full\">\n {blog?.category && blog?.categoryUrl && (\n <TextButton\n variant=\"default\"\n className=\"shink-0 mb-0.5 line-clamp-1 block justify-start whitespace-normal text-left text-xs md:hidden\"\n onClick={(e) => handleOnClickcate(e, blog?.categoryUrl || \"\")}\n >\n {blog?.category}\n </TextButton>\n )}\n <div className=\"text-sm font-medium text-gray-900 line-clamp-3 group-hover:text-pink-500 md:line-clamp-none md:text-base\">\n {blog?.title}\n </div>\n <div className=\"flex items-center mt-2 md:space-x-1\">\n {blog?.category && blog?.categoryUrl && (\n <>\n <TextButton\n variant=\"default\"\n className=\"justify-start hidden text-xs text-left whitespace-normal shink-0 md:line-clamp-1 md:block\"\n onClick={(e) => handleOnClickcate(e, blog?.categoryUrl || \"\")}\n >\n {blog?.category}\n </TextButton>\n {blog?.category && blog?.totalViews && (\n <span className=\"flex-none hidden leading-none md:block\">·</span>\n )}\n </>\n )}\n {blog?.totalViews && (\n <div className=\"flex-none text-xs text-gray-500\">{blog.totalViews}</div>\n )}\n </div>\n </div>\n </>\n );\n};\n\nexport const BlogSectionTemplateOne = memo(\n ({\n dataHeading,\n dataHorizontalScroll,\n dataBlog,\n onClickModal,\n onClickLoadMore,\n }: BlogSectionProps) => {\n const {\n showGradientOverlay = true,\n gradientOverlayColor,\n className,\n } = dataHorizontalScroll || {};\n\n const handleOnClickItem = (e: React.MouseEvent<HTMLDivElement>, id: number, url: string) => {\n e?.preventDefault();\n e?.stopPropagation();\n onClickModal ? onClickModal(id) : window.open(url, \"_blank\");\n };\n\n const renderGridBlog = (blogGroup: DataBlogProps, index: number) => (\n <div key={blogGroup?.title || index}>\n <div\n className={cn(\n \"-mx-3 flex flex-row flex-wrap gap-y-5\",\n blogGroup?.blogList?.length < 3 ? \"md:justify-center\" : \"\"\n )}\n >\n {blogGroup?.blogList?.map((blogItem: BlogItemProps, index: number) => (\n <div className=\"min-w-0 px-3 basis-full md:basis-1/2 lg:basis-1/3\" key={index}>\n <div\n onClick={(e) => handleOnClickItem(e, blogItem?.id, blogItem?.url)}\n key={blogItem?.id}\n className={cn(\n \"group flex cursor-pointer flex-row md:flex-col\",\n blogGroup?.classNameItem\n )}\n >\n <BlogSectionItem blog={blogItem} />\n </div>\n </div>\n ))}\n </div>\n {blogGroup?.isShowBtn && (\n <div className=\"flex items-center justify-center w-full mt-8\">\n <ActionButton\n action={onClickLoadMore ? () => onClickLoadMore?.(index) : blogGroup?.btnUrl}\n newTab={blogGroup?.isNewTab}\n variant=\"outline\"\n >\n {parse(blogGroup.btnName || \"Xem thêm\")}\n {blogGroup?.isLoading ? (\n <SpinerIcon className=\"w-5 h-5 ml-2 animate-spin-loading\" />\n ) : (\n onClickLoadMore &&\n !blogGroup?.btnUrl && (\n <ArrowDownIcon className=\"w-5 h-5 ml-2 -mb-1 animate-bounce\" />\n )\n )}\n </ActionButton>\n </div>\n )}\n </div>\n );\n\n return (\n <React.Fragment>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={cn(dataHeading?.className)}\n />\n )}\n {dataBlog?.length > 1 ? (\n <Tabs defaultValue={dataBlog[0]?.title}>\n <HorizontalScroll\n showGradientOverlay={showGradientOverlay}\n gradientOverlayColor={gradientOverlayColor}\n className={className}\n >\n <HorizontalContent className=\"mb-6 text-center\">\n <TabsList className=\"inline-flex items-center w-auto mx-auto mb-0 overflow-visible\">\n {dataBlog.map((blogGroup, index) => (\n <TabsTrigger key={blogGroup.title + index} value={blogGroup.title}>\n {blogGroup.title}\n </TabsTrigger>\n ))}\n </TabsList>\n </HorizontalContent>\n <HorizontalPrevious />\n <HorizontalNext />\n </HorizontalScroll>\n\n {dataBlog.map((blogGroup, index) => (\n <TabsContent key={blogGroup.title + index} value={blogGroup.title}>\n {renderGridBlog(blogGroup, index)}\n </TabsContent>\n ))}\n </Tabs>\n ) : (\n dataBlog?.length === 1 && dataBlog[0] && renderGridBlog(dataBlog[0], 0)\n )}\n </React.Fragment>\n );\n }\n);\n","import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { IconButton, IconButtonProps } from \"../IconButton\";\n\ninterface HorizontalScrollContextProps {\n scrollContainerRef: React.RefObject<HTMLDivElement>;\n showArrows: { left: boolean; right: boolean };\n scroll: (direction: \"left\" | \"right\") => void;\n gradientOverlayColor: string;\n}\n\nconst HorizontalScrollContext = createContext<HorizontalScrollContextProps | undefined>(undefined);\n\ninterface HorizontalScrollProps {\n /**\n * Show gradient overlay on navigation arrows.\n */\n showGradientOverlay?: boolean;\n /**\n * The RGB color for navigation gradient background overlay (format as \"R, G, B\").\n */\n gradientOverlayColor?: string;\n /**\n * Additional class names for styling the component.\n */\n className?: string;\n children?: React.ReactNode;\n}\n\nconst HorizontalScroll = ({\n showGradientOverlay = true,\n gradientOverlayColor = \"255, 255, 255\",\n className,\n children,\n}: HorizontalScrollProps) => {\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const [showArrows, setShowArrows] = useState({ left: false, right: false });\n\n const checkOverflow = useCallback(() => {\n const scrollContainer = scrollContainerRef.current;\n if (scrollContainer) {\n const { scrollLeft, scrollWidth, clientWidth } = scrollContainer;\n setShowArrows({\n left: scrollLeft > 0,\n right: Math.ceil(scrollLeft + clientWidth) < scrollWidth,\n });\n }\n }, []);\n\n useEffect(() => {\n const scrollContainer = scrollContainerRef.current;\n if (!scrollContainer) return;\n\n checkOverflow();\n window.addEventListener(\"resize\", checkOverflow);\n scrollContainer.addEventListener(\"scroll\", checkOverflow);\n\n return () => {\n window.removeEventListener(\"resize\", checkOverflow);\n scrollContainer.removeEventListener(\"scroll\", checkOverflow);\n };\n }, [checkOverflow]);\n\n const scroll = (direction: \"left\" | \"right\") => {\n const scrollContainer = scrollContainerRef.current;\n if (scrollContainer) {\n const { scrollLeft, clientWidth, scrollWidth } = scrollContainer;\n const scrollAmount = clientWidth * 0.7 * (direction === \"left\" ? -1 : 1);\n\n let newScrollPosition = scrollLeft + scrollAmount;\n // Adjust scroll position if it exceeds boundaries\n if (newScrollPosition < 0) {\n newScrollPosition = 0;\n } else if (newScrollPosition > scrollWidth - clientWidth) {\n newScrollPosition = scrollWidth - clientWidth;\n }\n\n scrollContainer.scrollTo({\n left: newScrollPosition,\n behavior: \"smooth\",\n });\n }\n };\n\n return (\n <HorizontalScrollContext.Provider\n value={{ scrollContainerRef, showArrows, scroll, gradientOverlayColor }}\n >\n <div className={cn(\"relative w-full\", className)}>\n {showGradientOverlay && (\n <>\n {showArrows.left && (\n <div\n className=\"pointer-events-none absolute left-0 top-1/2 z-10 flex h-full w-16 -translate-y-1/2 items-center\"\n style={{\n background: `linear-gradient( to left, rgba(255, 255, 255, 0),rgb(${gradientOverlayColor}),rgb(${gradientOverlayColor}))`,\n }}\n ></div>\n )}\n {showArrows.right && (\n <div\n className=\"pointer-events-none absolute right-0 top-1/2 z-10 flex h-full w-16 -translate-y-1/2 items-center\"\n style={{\n background: `linear-gradient(to right, rgba(255, 255, 255, 0), rgb(${gradientOverlayColor}),rgb(${gradientOverlayColor}))`,\n }}\n ></div>\n )}\n </>\n )}\n {children}\n </div>\n </HorizontalScrollContext.Provider>\n );\n};\n\ninterface HorizontalContentProps {\n /**\n * Additional class names for styling the component.\n */\n className?: string;\n children: React.ReactNode;\n}\n\nconst HorizontalContent = ({ className, children }: HorizontalContentProps) => {\n const context = useContext(HorizontalScrollContext);\n if (!context) throw new Error(\"HorizontalContent must be used within a HorizontalScroll\");\n\n return (\n <div\n ref={context.scrollContainerRef}\n className={cn(\"scrollbar-hide overflow-x-auto scroll-smooth\", className)}\n role=\"region\"\n aria-label=\"Scrollable content\"\n >\n {children}\n </div>\n );\n};\n\ninterface HorizontalNavigationProps extends IconButtonProps {\n children?: React.ReactNode;\n}\n\nconst HorizontalPrevious = ({ className, children, ...props }: HorizontalNavigationProps) => {\n const context = useContext(HorizontalScrollContext);\n if (!context) throw new Error(\"HorizontalNavigation must be used within a HorizontalScroll\");\n\n return context.showArrows.left ? (\n <IconButton\n className={cn(\n \"pointer-events-auto absolute left-0.5 top-1/2 z-10 h-6 w-6 -translate-y-1/2 rounded-full\",\n className\n )}\n onClick={() => context.scroll(\"left\")}\n aria-label=\"Scroll left\"\n size={props.size || \"sm\"}\n variant={props.variant || \"secondary\"}\n {...props}\n >\n {children || <ChevronLeft className=\"h-4 w-4\" />}\n </IconButton>\n ) : null;\n};\n\nconst HorizontalNext = ({ className, children, ...props }: HorizontalNavigationProps) => {\n const context = useContext(HorizontalScrollContext);\n if (!context) throw new Error(\"HorizontalNavigation must be used within a HorizontalScroll\");\n\n return context.showArrows.right ? (\n <IconButton\n className={cn(\n \"pointer-events-auto absolute right-0.5 top-1/2 z-10 h-6 w-6 -translate-y-1/2 rounded-full\",\n className\n )}\n onClick={() => context.scroll(\"right\")}\n aria-label=\"Scroll right\"\n size={props.size || \"sm\"}\n variant={props.variant || \"secondary\"}\n {...props}\n >\n {children || <ChevronRight className=\"h-4 w-4\" />}\n </IconButton>\n ) : null;\n};\n\nexport {\n HorizontalScroll,\n HorizontalContent,\n HorizontalPrevious,\n HorizontalNext,\n type HorizontalScrollProps,\n};\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../helpers/utils\";\n\n// /dwd\nconst iconButtonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed border border-transparent\",\n {\n variants: {\n /**\n * Determines style variation of Button component.\n */\n variant: {\n primary:\n \"bg-pink-500 text-white hover:bg-pink-600 disabled:bg-pink-300\",\n secondary:\n \"bg-white text-gray-900 hover:bg-gray-100 disabled:text-gray-400 disabled:bg-white border-gray-300\",\n outline:\n \"border-pink-500 text-pink-500 bg-white hover:bg-pink-50 disabled:bg-white disabled:border-pink-300 disabled:text-pink-300\",\n tonal:\n \"bg-pink-100 text-pink-500 hover:bg-pink-200 disabled:bg-gray-200 disabled:text-gray-400\",\n danger: \"bg-red-500 text-white hover:bg-red-600 disabled:bg-red-300\",\n transparent: \"text-gray-900 bg-transparent hover:bg-gray-100 disabled:text-gray-400 disabled:bg-transparent\",\n },\n /**\n * Determines size variation of Button component.\n */\n size: {\n default: \"text-sm h-10 w-10\",\n sm: \"h-8 w-8 text-sm\",\n lg: \"h-12 w-12 text-base\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"default\",\n },\n }\n);\n\nexport interface IconButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof iconButtonVariants> {\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n */\n asChild?: boolean;\n /**\n * Disabled interaction and applies disabled styles\n */\n isDisabled?: boolean;\n}\n\nconst IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(\n (\n {\n className,\n variant = \"primary\",\n size = \"default\",\n asChild = false,\n isDisabled = false,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\";\n const buttonClassName = cn(\n iconButtonVariants({ variant, size, className })\n );\n return (\n <Comp\n className={buttonClassName}\n disabled={isDisabled}\n ref={ref}\n {...props}\n >\n {props.children}\n </Comp>\n );\n }\n);\nIconButton.displayName = \"IconButton\";\n\nexport { IconButton, iconButtonVariants };\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst Tabs = TabsPrimitive.Root;\n\ntype TabsListProps = React.ComponentPropsWithoutRef<\n typeof TabsPrimitive.List\n> & {\n /**\n * Control the size of the tabs list..\n */\n size?: \"base\" | \"sm\";\n /**\n * The direction of navigation between toolbar items.\n */\n\n isDivider?: boolean;\n};\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n TabsListProps\n>(({ className, size = \"sm\", isDivider = false, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex w-full flex-row items-center bg-muted text-muted-foreground space-x-5 overflow-x-auto [&::-webkit-scrollbar]:hidden\",\n `text-${size}`,\n isDivider && \"border-b border-gray-200\",\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap py-3 font-semibold ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border-b-2 border-transparent data-[state=active]:text-pink-500 data-[state=active]:border-pink-500 text-gray-900 hover:text-pink-500\",\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-3 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 text-gray-900\",\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../helpers/utils\";\n\n// /dwd\nconst textButtonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed border border-transparent flex-nowrap\",\n {\n variants: {\n /**\n * Determines style variation of Button component.\n */\n variant: {\n default:\n \"text-blue-700 hover:underline hover:bg-blue-50 disabled:bg-transparent disabled:text-gray-400 disabled:no-underline\",\n primary:\n \"text-pink-500 hover:underline hover:bg-pink-50 disabled:bg-transparent disabled:text-gray-400 disabled:no-underline\",\n secondary:\n \"text-gray-700 hover:underline hover:text-blue-700 hover:bg-blue-50 disabled:bg-transparent disabled:text-gray-400 disabled:no-underline\",\n },\n /**\n * Determines size variation of Button component.\n */\n size: {\n default: \"text-sm\",\n lg: \"text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface TextButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof textButtonVariants> {\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n */\n asChild?: boolean;\n /**\n * Disabled interaction and applies disabled styles\n */\n isDisabled?: boolean;\n}\n\nconst TextButton = React.forwardRef<HTMLButtonElement, TextButtonProps>(\n (\n {\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n isDisabled = false,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : \"button\";\n const buttonClassName = cn(\n textButtonVariants({ variant, size, className }),\n );\n return (\n <Comp\n className={buttonClassName}\n disabled={isDisabled}\n ref={ref}\n {...props}\n >\n {props.children}\n </Comp>\n );\n },\n);\nTextButton.displayName = \"TextButton\";\n\nexport { TextButton, textButtonVariants };\n","import React, { memo, useEffect, useState } from \"react\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"@heroicons/react/20/solid\";\nimport parse from \"html-react-parser\";\n\nimport { cn } from \"../../../helpers/utils\";\nimport { ActionButton } from \"../../ActionButton\";\nimport { Carousel, CarouselApi, CarouselContent, CarouselItem } from \"../../Carousel\";\nimport { HeadingBlock } from \"../../CommonBlocks/CommonBlocks\";\nimport { IconButton } from \"../../IconButton\";\nimport { TextButton } from \"../../TextButton\";\nimport { BlogItemProps, BlogSectionProps, DataBlogProps } from \"../utils\";\n\ntype CarouselBlogProps = {\n dataBlog?: DataBlogProps;\n onClickLoadMore?: (tabIndex: number) => void;\n index?: number;\n setCarouselRef?: (value: CarouselApi) => void;\n carouselRef?: CarouselApi | null;\n setCurrent?: (value: number) => void;\n handleOnClickItem: (e: React.MouseEvent<HTMLDivElement>, id: number, url: string) => void;\n};\n\nconst BlogSectionItem = ({ blog }: { blog: BlogItemProps }) => {\n const handleOnClickcate = (e: React.MouseEvent<HTMLButtonElement>, url: string) => {\n e?.preventDefault();\n e?.stopPropagation();\n window.open(url, \"_blank\");\n };\n\n return (\n <>\n <div className=\"relative block aspect-[16/9] w-full overflow-hidden rounded-md bg-gray-100\">\n <img\n className=\"inset-0 h-full w-full object-cover\"\n src={blog?.thumbnailDesktop}\n alt={blog?.title}\n />\n </div>\n <div className=\"mt-4 md:pr-3\">\n <div className=\"font-semibold text-gray-900 group-hover:text-pink-500 md:text-lg md:leading-tight \">\n {blog?.title}\n </div>\n {blog?.description && (\n <div className=\"mt-2 line-clamp-2 text-sm text-gray-500 md:text-sm\">\n {parse(blog?.description ?? \"\")}\n </div>\n )}\n <div className=\"mt-2 flex items-center space-x-1\">\n {blog?.category && blog?.categoryUrl && (\n <>\n <TextButton\n variant=\"default\"\n className=\"shink-0 justify-start whitespace-normal text-left text-sm md:line-clamp-1 \"\n onClick={(e) => handleOnClickcate(e, blog?.categoryUrl || \"\")}\n >\n {blog?.category}\n </TextButton>\n {blog?.category && blog?.totalViews && (\n <span className=\" flex-none leading-none text-gray-300 \">·</span>\n )}\n </>\n )}\n {blog?.totalViews && (\n <div className=\"flex-none text-sm text-gray-500\">{blog.totalViews}</div>\n )}\n </div>\n </div>\n </>\n );\n};\n\nconst CarouselBlog = ({\n dataBlog,\n setCarouselRef,\n carouselRef,\n setCurrent,\n handleOnClickItem,\n}: CarouselBlogProps) => {\n const {\n blogList = [],\n isShowBtn,\n btnName,\n btnUrl = \"#\",\n isNewTab,\n classNameItem,\n } = dataBlog ?? {};\n\n useEffect(() => {\n if (!carouselRef || !setCurrent) {\n return;\n }\n setCurrent(carouselRef.selectedScrollSnap() + 1);\n carouselRef.on(\"select\", () => {\n if (setCurrent) {\n setCurrent(carouselRef.selectedScrollSnap() + 1);\n }\n });\n }, [carouselRef, setCurrent]);\n\n return (\n <>\n <Carousel\n opts={{\n dragFree: false,\n }}\n setApi={setCarouselRef}\n className=\"w-full\"\n >\n <CarouselContent classNameContent=\"!overflow-visible\" className=\"-ml-5\">\n {blogList?.map((blog) => (\n <CarouselItem key={blog?.id} className=\"basis-11/12 pl-5 md:basis-1/2 lg:basis-4/12\">\n <div\n onClick={(e) => handleOnClickItem(e, blog?.id, blog?.url)}\n key={blog?.id}\n className={cn(\"group cursor-pointer\", classNameItem)}\n >\n <BlogSectionItem blog={blog} />\n </div>\n </CarouselItem>\n ))}\n </CarouselContent>\n </Carousel>\n {isShowBtn && (\n <div className=\"mt-8 flex w-full items-center justify-center md:mt-10 \">\n <ActionButton action={btnUrl && btnUrl} newTab={isNewTab} variant=\"outline\">\n {parse(btnName || \"Xem thêm\")}{\" \"}\n </ActionButton>\n </div>\n )}\n </>\n );\n};\n\nconst CarouselPreviousRef = ({ carouselRef }) => {\n return (\n <IconButton\n onClick={() => carouselRef?.scrollPrev()}\n disabled={!carouselRef?.canScrollPrev()}\n style={{ borderRadius: \"100%\" }}\n size=\"sm\"\n variant=\"secondary\"\n >\n <ChevronLeftIcon className=\"h-6 w-6\" />\n <span className=\"sr-only\">Previous slide</span>\n </IconButton>\n );\n};\n\nconst CarouselNextRef = ({ carouselRef }) => {\n return (\n <IconButton\n onClick={() => carouselRef?.scrollNext()}\n disabled={!carouselRef?.canScrollNext()}\n style={{ borderRadius: \"100%\" }}\n size=\"sm\"\n variant=\"secondary\"\n >\n <ChevronRightIcon className=\"h-6 w-6\" />\n <span className=\"sr-only\">Next slide</span>\n </IconButton>\n );\n};\n\nexport const BlogSectionTemplateTwo = memo(\n ({ dataHeading, dataBlog, onClickModal, onClickLoadMore }: BlogSectionProps) => {\n const handleOnClickItem = (e: React.MouseEvent<HTMLDivElement>, id: number, url: string) => {\n e?.preventDefault();\n e?.stopPropagation();\n onClickModal ? onClickModal(id) : window.open(url, \"_blank\");\n };\n\n const [carouselRef, setCarouselRef] = useState<CarouselApi | null>(null);\n const [, setCurrent] = useState(0);\n\n const CarouselNavigation = () => {\n if (!carouselRef) return <></>;\n return (\n <div className=\"ml-3 hidden items-center space-x-2 md:flex\">\n <CarouselPreviousRef carouselRef={carouselRef} />\n <CarouselNextRef carouselRef={carouselRef} />\n </div>\n );\n };\n\n return (\n <React.Fragment>\n <div className=\" flex items-center justify-between\">\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"left\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={cn(dataHeading?.className)}\n />\n )}\n <CarouselNavigation />\n </div>\n <CarouselBlog\n dataBlog={dataBlog?.[0]}\n onClickLoadMore={onClickLoadMore}\n index={0}\n setCarouselRef={setCarouselRef}\n carouselRef={carouselRef}\n setCurrent={setCurrent}\n handleOnClickItem={handleOnClickItem}\n />\n </React.Fragment>\n );\n }\n);\n","import * as React from \"react\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"@heroicons/react/20/solid\";\nimport useEmblaCarousel, { type UseEmblaCarouselType } from \"embla-carousel-react\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { IconButton } from \"../IconButton\";\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n orientation?: \"horizontal\" | \"vertical\";\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n\n return context;\n}\n\nconst Carousel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & CarouselProps\n>(({ orientation = \"horizontal\", opts, setApi, plugins, className, children, ...props }, ref) => {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) {\n return;\n }\n\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext]\n );\n\n React.useEffect(() => {\n if (!api || !setApi) {\n return;\n }\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) {\n return;\n }\n\n onSelect(api);\n api.on(\"reInit\", onSelect);\n api.on(\"select\", onSelect);\n\n return () => {\n api?.off(\"select\", onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation: orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n ref={ref}\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n});\nCarousel.displayName = \"Carousel\";\n\ntype CarouselContentStyle = {\n classNameContent?: string;\n};\n\nconst CarouselContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & CarouselContentStyle\n>(({ className, classNameContent, ...props }, ref) => {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className={cn(classNameContent, \"overflow-hidden\")}>\n <div\n ref={ref}\n className={cn(\"flex\", orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\", className)}\n {...props}\n />\n </div>\n );\n});\nCarouselContent.displayName = \"CarouselContent\";\n\nconst CarouselItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const { orientation } = useCarousel();\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-roledescription=\"slide\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className\n )}\n {...props}\n />\n );\n }\n);\nCarouselItem.displayName = \"CarouselItem\";\n\nconst CarouselPrevious = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<typeof IconButton>\n>(({ className, variant = \"secondary\", size = \"default\", ...props }, ref) => {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <IconButton\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n \"absolute h-8 w-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"-left-12 top-1/2 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ChevronLeftIcon className=\"w-6 h-6\" />\n <span className=\"sr-only\">Previous slide</span>\n </IconButton>\n );\n});\nCarouselPrevious.displayName = \"CarouselPrevious\";\n\nconst CarouselNext = React.forwardRef<HTMLButtonElement, React.ComponentProps<typeof IconButton>>(\n ({ className, variant = \"secondary\", size = \"default\", ...props }, ref) => {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <IconButton\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n \"absolute h-8 w-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"-right-12 top-1/2 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ChevronRightIcon className=\"w-6 h-6\" />\n <span className=\"sr-only\">Next slide</span>\n </IconButton>\n );\n }\n);\nCarouselNext.displayName = \"CarouselNext\";\n\nconst CarouselDots = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n (props, ref) => {\n const { api } = useCarousel();\n /* eslint-disable */\n const [, setUpdateState] = React.useState(false);\n const toggleUpdateState = React.useCallback(\n () => setUpdateState((prevState) => !prevState),\n []\n );\n\n React.useEffect(() => {\n if (api) {\n api.on(\"select\", toggleUpdateState);\n api.on(\"reInit\", toggleUpdateState);\n\n return () => {\n api.off(\"select\", toggleUpdateState);\n api.off(\"reInit\", toggleUpdateState);\n };\n }\n }, [api, toggleUpdateState]);\n\n const numberOfSlides = api?.scrollSnapList().length || 0;\n const currentSlide = api?.selectedScrollSnap() || 0;\n\n if (numberOfSlides > 1) {\n return (\n <div ref={ref} className={` flex justify-center ${props.className}`}>\n {Array.from({ length: numberOfSlides }, (_, i) => (\n <IconButton\n key={i}\n className={`navigation-item mx-1 h-1.5 w-1.5 rounded-full p-0 ${\n i === currentSlide\n ? \"navigation-item-active scale-125 transform bg-gray-500 hover:bg-gray-500/90\"\n : \"bg-gray-200 hover:bg-gray-100\"\n }`}\n aria-label={`Go to slide ${i + 1}`}\n onClick={() => api?.scrollTo(i)}\n />\n ))}\n </div>\n );\n } else {\n return <></>;\n }\n }\n);\nCarouselDots.displayName = \"CarouselDots\";\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n CarouselDots,\n};\n","import { cn } from \"../../helpers/utils\";\nimport { SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { BlogSectionTemplateOne, BlogSectionTemplateTwo } from \"./BlogSectionTemplate\";\nimport { BlogSectionProps } from \"./utils\";\n\nconst renderTemplate = ({\n template,\n dataBlog,\n dataHeading,\n dataHorizontalScroll,\n onClickModal,\n onClickLoadMore,\n}) => {\n switch (template) {\n case 1:\n return (\n <BlogSectionTemplateOne\n dataBlog={dataBlog}\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll}\n onClickModal={onClickModal}\n onClickLoadMore={onClickLoadMore}\n />\n );\n case 2:\n return (\n <BlogSectionTemplateTwo\n dataBlog={dataBlog}\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll}\n onClickModal={onClickModal}\n onClickLoadMore={onClickLoadMore}\n />\n );\n default:\n return (\n <BlogSectionTemplateOne\n dataBlog={dataBlog}\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll}\n onClickModal={onClickModal}\n onClickLoadMore={onClickLoadMore}\n />\n );\n }\n};\n\nconst BlogSectionContent = ({\n dataHeading,\n dataHorizontalScroll,\n dataBlog,\n template,\n onClickModal,\n onClickLoadMore,\n}) => {\n return (\n <>\n {renderTemplate({\n dataHeading,\n dataHorizontalScroll,\n dataBlog,\n template,\n onClickModal,\n onClickLoadMore,\n })}\n </>\n );\n};\n\nexport const BlogSection = ({\n dataHeading,\n dataHorizontalScroll,\n dataBlog = [],\n idSection,\n className,\n background,\n template = 1,\n onClickModal,\n onClickLoadMore,\n}: BlogSectionProps) => {\n return (\n <SectionBlock\n className={cn(\"overflow-hidden\", className)}\n idSection={idSection}\n background={background}\n >\n <BlogSectionContent\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll}\n dataBlog={dataBlog}\n template={template}\n onClickModal={onClickModal}\n onClickLoadMore={onClickLoadMore}\n />\n </SectionBlock>\n );\n};\n","import * as React from \"react\";\nimport { enUS, vi } from \"date-fns/locale\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport lunisolar from \"lunisolar\";\nimport { DayPicker, Formatters } from \"react-day-picker\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { buttonVariants } from \"../Button\";\nimport { Checkbox } from \"../Checkbox\";\n\ntype DayContentProps = {\n date: Date;\n cusContent?: (date: Date) => React.ReactNode;\n};\n\nconst CusDayContent: React.FC<DayContentProps> = ({ date, cusContent }) => {\n let lunarDate: { day: number; month: number } | null = null;\n lunarDate = lunisolar(date).lunar;\n return (\n <>\n {cusContent ? cusContent(date) : date.getDate()}\n {lunarDate && (\n <span className=\"luna-date absolute right-0.5 top-1 hidden text-[8px] leading-none group-[.show-luna]:block\">\n {lunarDate.day}\n </span>\n )}\n </>\n );\n};\n\nconst customFormatters: Partial<Formatters> = {\n formatCaption: (month) => `Tháng ${month.getMonth() + 1}/${month.getFullYear()}`,\n\n formatWeekdayName: (weekday) => {\n const dayIndex = weekday.getDay();\n const weekdays = [\"CN\", \"T2\", \"T3\", \"T4\", \"T5\", \"T6\", \"T7\"];\n return weekdays[dayIndex];\n },\n};\n\nfunction CheckboxLunaDate({\n isShow,\n setIsShow,\n lang,\n}: {\n isShow: boolean;\n setIsShow: React.Dispatch<React.SetStateAction<boolean>>;\n lang: \"vi\" | \"en\";\n}) {\n const uniqueId = React.useId();\n return (\n <div className=\"w-full p-3 pt-0\">\n <div className=\"flex cursor-pointer items-center space-x-2 border-t border-gray-100 pt-3\">\n <Checkbox\n checked={isShow}\n id={`check-show-luna-${uniqueId}`}\n onCheckedChange={(checked) => {\n if (typeof checked === \"boolean\") {\n setIsShow(checked);\n }\n }}\n />\n <label\n htmlFor={`check-show-luna-${uniqueId}`}\n className=\"cursor-pointer text-sm leading-none text-gray-900 peer-disabled:cursor-default peer-disabled:text-gray-400\"\n >\n {lang === \"vi\" ? \"Hiện ngày âm lịch\" : \"Show lunar date\"}\n </label>\n </div>\n </div>\n );\n}\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker> & {\n /**\n * Enable show luna date in calendar cell\n */\n enableLunaDate?: boolean;\n /**\n * A function custom content for day cell.\n */\n cusContentDay?: (date: Date) => React.ReactNode;\n /**\n * Language for calendar support vi or en. Default is vi.\n */\n lang?: \"vi\" | \"en\";\n};\n\nconst isWeekend = (date: Date) => date.getDay() === 0 || date.getDay() === 6;\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = false,\n enableLunaDate = false,\n lang = \"vi\",\n cusContentDay,\n ...props\n}: CalendarProps) {\n const [showLunaDate, setShowLunaDate] = React.useState(true);\n\n return (\n <DayPicker\n locale={lang === \"vi\" ? vi : enUS}\n showOutsideDays={showOutsideDays}\n className={cn(\"b w-fit rounded-b-md border border-gray-200 bg-white shadow-md\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-y-0\",\n month: \"p-3 pt-0 w-full\",\n caption: \"flex justify-center p-3 bg-blue-50 relative items-center -mx-3 mb-3\",\n caption_label: \"text-sm font-medium text-gray-900\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n buttonVariants({ variant: \"transparent\" }),\n \"h-7 w-7 p-0 text-gray-900 hover:bg-transparent hover:opacity-70\"\n ),\n nav_button_previous: \"absolute left-1\",\n nav_button_next: \"absolute right-1\",\n table: \"w-full border-collapse\",\n head_row: \"flex space-x-0.5\",\n head_cell: cn(\n \"w-11 rounded-md text-xs font-medium text-gray-500 [&:nth-child(7)]:!text-red-600\",\n lang === \"vi\" ? \"[&:nth-child(6)]:!text-red-600\" : \"[&:nth-child(1)]:!text-red-600\"\n ),\n row: \"flex w-full mt-0.5 space-x-0.5\",\n cell: \"h-11 w-11 text-center text-sm p-0 relative border-none\",\n day: cn(\n buttonVariants({ variant: \"transparent\" }),\n \"group relative h-11 w-11 p-0 text-center text-sm font-semibold focus-within:relative focus-within:z-20 aria-selected:opacity-100 [&.day-range-end.day-range-start]:rounded-md aria-selected:[&:not(.day-range-middle)]:bg-pink-500 aria-selected:[&:not(.day-range-middle)]:text-white\",\n enableLunaDate && showLunaDate && \"show-luna\"\n ),\n day_range_end: \"day-range-end [&.day-range-end]:rounded-l-none\",\n day_range_start: \"day-range-start [&.day-range-start]:rounded-r-none\",\n day_today:\n \"day-today [&:not([aria-selected])]:text-pink-500 [&:not([aria-selected])]:border-gray-200\",\n day_outside: \"day-outside opacity-50 aria-selected:bg-accent/50 aria-selected:opacity-30\",\n day_disabled: \"opacity-50\",\n day_range_middle: cn(\n \"group/mid day-range-middle !rounded-none !bg-pink-50 text-gray-900 [&:nth-child(7)]:!text-red-600\",\n lang === \"vi\" ? \"[&:nth-child(6)]:!text-red-600\" : \"[&:nth-child(1)]:!text-red-600\"\n ),\n day_hidden: \"invisible\",\n ...classNames,\n }}\n modifiers={{\n weekend: isWeekend,\n }}\n modifiersClassNames={{\n weekend: \"text-red-600\",\n }}\n components={{\n IconLeft: () => <ChevronLeft className=\"h-6 w-6\" />,\n IconRight: () => <ChevronRight className=\"h-6 w-6\" />,\n DayContent: (dayProps) => {\n return <CusDayContent date={dayProps.date} cusContent={cusContentDay} />;\n },\n Months: ({ children }) => (\n <div className=\"w-full\">\n <div className={cn(\"months-wrapper flex flex-col sm:flex-row\")}>{children}</div>\n {enableLunaDate && (\n <CheckboxLunaDate isShow={showLunaDate} setIsShow={setShowLunaDate} lang={lang} />\n )}\n </div>\n ),\n }}\n formatters={lang === \"vi\" ? customFormatters : {}}\n {...props}\n />\n );\n}\n\nCalendar.displayName = \"Calendar\";\n\nexport { Calendar };\n","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { CheckIcon } from \"@heroicons/react/16/solid\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst checkboxVariants = cva(\n \"peer shrink-0 rounded border-2 disabled:bg-gray-300 border-gray-300 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-default disabled:bg-gray-100 data-[state=checked]:border-none disabled:data-[state=checked]:bg-gray-400 disabled:data-[state=checked]:text-gray-100 data-[state=checked]:bg-pink-500 data-[state=checked]:text-white\",\n {\n variants: {\n size: {\n medium: \"h-4 w-4\",\n large: \"w-5 h-5\",\n },\n },\n defaultVariants: {\n size: \"medium\",\n },\n }\n);\n\nconst checkboxIconVariants = cva(\"\", {\n variants: {\n size: {\n medium: \"h-4 w-4\",\n large: \"w-5 h-5\",\n },\n },\n defaultVariants: {\n size: \"medium\",\n },\n});\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> &\n VariantProps<typeof checkboxVariants>\n>(({ className, size, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(checkboxVariants({ size }), className)}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <CheckIcon className={cn(checkboxIconVariants({ size }))} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","import { QuestionMarkCircleIcon, XCircleIcon } from \"@heroicons/react/16/solid\";\nimport { PopoverContentProps, PopoverProps } from \"@radix-ui/react-popover\";\nimport { format } from \"date-fns\";\nimport { Calendar as CalendarIcon } from \"lucide-react\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { Button, ButtonProps } from \"../Button\";\nimport { Calendar, CalendarProps } from \"../Calendar\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../Popover\";\n\nexport type DatePickerProps = {\n /**\n * Label for the DatePicker component\n */\n label?: string;\n /**\n * Placeholder for the DatePicker component\n */\n placeholder?: string;\n /**\n * Size of the DatePicker component\n */\n size?: 1 | 2;\n /**\n * Error state of the DatePicker component\n */\n isError?: boolean;\n /**\n * disabled state of the DatePicker component\n */\n disabled?: boolean;\n /**\n * Message to display below the DatePicker\n */\n message?: string;\n /**\n * Format that is used to display date in the input, It is based on (Unicode Technical Standart #35)[https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table]\n */\n dateFormat?: string;\n /**\n * Props to pass to the Button component\n */\n buttonProps?: Partial<ButtonProps>;\n /**\n * Props to pass to the Popover component\n */\n popoverProps?: Partial<PopoverProps>;\n /**\n * Props to pass to the PopoverContent component\n */\n popoverContentProps?: Partial<PopoverContentProps>;\n /**\n * Props to pass to the Calendar component\n */\n calendarProps?: Partial<CalendarProps>;\n};\n\nconst DatePicker = ({\n label,\n placeholder = \"Select a value\",\n size = 1,\n message,\n isError,\n disabled,\n dateFormat = \"dd/MM/yyyy\",\n buttonProps,\n popoverProps,\n calendarProps,\n popoverContentProps,\n}: DatePickerProps) => {\n const dateSelected = calendarProps?.selected || null;\n return (\n <div>\n <Popover {...popoverProps}>\n <PopoverTrigger asChild>\n <Button\n variant={\"secondary\"}\n className={cn(\n \"relative h-11 w-full justify-between overflow-visible text-left text-sm font-normal text-gray-900 ring-inset hover:ring-1 hover:ring-gray-400 focus:ring-1 focus:ring-gray-400 disabled:pointer-events-none disabled:border-gray-200 disabled:bg-gray-50 disabled:text-gray-500 [&[data-state=open]]:border-pink-500 [&[data-state=open]]:ring-1 [&[data-state=open]]:ring-pink-500\",\n size === 2 && \"h-12 text-base\",\n (!dateSelected ||\n (!(dateSelected instanceof Date) &&\n typeof dateSelected === \"object\" &&\n (!(\"from\" in dateSelected) || !dateSelected.from))) &&\n \"text-gray-500\",\n isError && \"border-red-500 ring-1 ring-red-500\"\n )}\n disabled={disabled}\n {...buttonProps}\n >\n <div className=\"line-clamp-1 flex-1\">\n {dateSelected instanceof Date ? (\n format(dateSelected, dateFormat)\n ) : dateSelected &&\n typeof dateSelected === \"object\" &&\n \"from\" in dateSelected &&\n \"to\" in dateSelected ? (\n <>\n {dateSelected.from ? (\n dateSelected.to ? (\n <>\n <span className=\"date-from\">{format(dateSelected.from, dateFormat)}</span>{\" \"}\n <span className=\"date-separator\">-</span>\n <span className=\"date-to\">{format(dateSelected.to, dateFormat)}</span>\n </>\n ) : (\n format(dateSelected.from, dateFormat)\n )\n ) : (\n placeholder\n )}\n </>\n ) : (\n placeholder\n )}\n </div>\n\n {label && (\n <span\n className={cn(\n \"absolute -top-2 left-2 bg-white px-1.5 text-xs text-gray-500\",\n size === 2 && \" -top-2.5 text-sm\",\n isError && \"text-red-500\"\n )}\n >\n {label}\n </span>\n )}\n <CalendarIcon className=\"ml-2 h-4 w-4 flex-none text-gray-500\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto border-none !p-0\" {...popoverContentProps}>\n <Calendar\n {...calendarProps}\n defaultMonth={\n dateSelected && typeof dateSelected === \"object\" && \"from\" in dateSelected\n ? dateSelected.from\n : dateSelected instanceof Date\n ? dateSelected\n : undefined\n }\n />\n </PopoverContent>\n </Popover>\n {message && (\n <div className=\"mobase-text-input-message mt-0.5 flex items-center space-x-1\">\n {isError ? (\n <XCircleIcon width={16} height={16} className=\"text-red-500\" />\n ) : (\n <QuestionMarkCircleIcon width={16} height={16} className=\"text-gray-500\" />\n )}\n <span\n className={cn(\n isError ? \"text-red-500\" : \"text-gray-500\",\n size === 2 ? \"text-sm\" : \"text-xs\"\n )}\n >\n {message}\n </span>\n </div>\n )}\n </div>\n );\n};\n\nexport { DatePicker };\n","import * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"../../helpers/utils\";\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border border-gray-200 bg-white p-4 sm:p-5 text-gray-900 shadow-small outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent }\n","import { useEffect, useState } from \"react\";\nimport { QuestionMarkCircleIcon, XCircleIcon } from \"@heroicons/react/16/solid\";\nimport { isValid } from \"date-fns\";\n\nimport { cn } from \"../../helpers/utils\";\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../Select\";\nimport { DateSelectProps, generateYears, getDaysInMonth, monthsEn, monthsVi } from \"./utils\";\n\nconst DateSelect = ({\n label,\n selected,\n onSelect,\n size = 1,\n message,\n isError,\n disabled,\n dateFormat = \"dd/MM/yyyy\",\n lang = \"vi\",\n fromYear = 1900,\n toYear = new Date().getFullYear(),\n disableUnselect = false,\n}: DateSelectProps) => {\n const [selectedDate, setSelectedDate] = useState<Date | null | undefined>(selected ?? null);\n const startYear = Math.min(fromYear, toYear);\n const endYear = Math.max(fromYear, toYear);\n\n // Check if only month/year is displayed\n const isMonthYearOnly = dateFormat === \"MM/yyyy\";\n\n // Function to update date, month, year\n const handleDateChange = (type: \"day\" | \"month\" | \"year\", value: number | null) => {\n if (value === 0) {\n setSelectedDate(undefined);\n onSelect?.(undefined);\n return;\n }\n\n let currentYear = selectedDate?.getFullYear() || new Date().getFullYear();\n let currentMonth = selectedDate?.getMonth() ?? 0;\n let currentDay = selectedDate?.getDate() ?? 1;\n\n if (type === \"month\" && value !== null) currentMonth = value - 1;\n if (type === \"year\" && value !== null) currentYear = value;\n\n // If only month/year is selected, keep the day as 1\n if (isMonthYearOnly) {\n currentDay = 1;\n } else if (type === \"day\" && value !== null) {\n currentDay = value;\n }\n // Check the number of valid days in the current month/year\n const maxDay = getDaysInMonth(currentYear, currentMonth + 1).daysInMonth;\n if (currentDay > maxDay) {\n currentDay = 1; // If the old date is invalid, reset to 1\n }\n\n const newDate = new Date(currentYear, currentMonth, currentDay);\n\n if (isValid(newDate)) {\n setSelectedDate(newDate);\n onSelect?.(newDate);\n }\n };\n\n const [isAnySelectOpen, setIsAnySelectOpen] = useState(false);\n const handleOpenChange = (open: boolean) => {\n setIsAnySelectOpen(open);\n };\n useEffect(() => {\n setSelectedDate(selected ?? null);\n }, [selected]);\n\n return (\n <div className={cn(\"relative\", disabled && \"cursor-no-drop\")}>\n <div\n className={cn(\n \"relative block h-11 w-full rounded-md border border-gray-300 bg-white px-1 py-3 text-sm text-gray-900 outline-none ring-inset transition-all placeholder:text-gray-500 hover:ring-1 hover:ring-gray-400 focus:border-pink-500 focus:ring-1 focus:ring-gray-400 disabled:pointer-events-none disabled:border-gray-200 disabled:bg-gray-50\",\n isAnySelectOpen && \"border-pink-500 ring-1 ring-pink-500\",\n size === 2 && \"h-12 text-base\",\n selectedDate ? \"\" : \"text-gray-500\",\n isError && \"border-red-500 ring-1 ring-red-500\",\n disabled && \"pointer-events-none select-none border-gray-200 bg-gray-50\"\n )}\n >\n {label && (\n <span\n className={cn(\n \"absolute -top-2 left-2 bg-white px-1.5 text-xs text-gray-500\",\n size === 2 && \" -top-2.5 text-sm\",\n isError && \"text-red-500\"\n )}\n >\n {label}\n </span>\n )}\n <div className=\"flex h-full flex-row divide-x\">\n {!isMonthYearOnly && (\n <Select\n value={selectedDate ? selectedDate.getDate().toString().padStart(2, \"0\") : \"\"}\n onValueChange={(value) => handleDateChange(\"day\", parseInt(value, 10))}\n onOpenChange={handleOpenChange}\n className=\"w-[30%]\"\n >\n <SelectTrigger className=\"h-full w-full rounded-none border-none bg-transparent py-0 !ring-0 hover:!text-pink-500\">\n <SelectValue placeholder={lang === \"vi\" ? \"Ngày\" : \"Day\"} />\n </SelectTrigger>\n <SelectContent onCloseAutoFocus={(e) => e.preventDefault()}>\n <SelectGroup>\n {!disableUnselect && (\n <SelectItem value=\"0\" className=\"text-gray-600\">\n {lang === \"vi\" ? \"Bỏ chọn\" : \"None\"}\n </SelectItem>\n )}\n {Array.from(\n {\n length: getDaysInMonth(\n selectedDate?.getFullYear() || new Date().getFullYear(),\n (selectedDate?.getMonth() ?? 0) + 1\n ).daysInMonth,\n },\n (_, i) => (i + 1).toString().padStart(2, \"0\")\n ).map((d) => (\n <SelectItem key={d} value={d}>\n {d}\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </Select>\n )}\n\n <Select\n value={selectedDate ? (selectedDate.getMonth() + 1).toString() : \"\"}\n onValueChange={(value) => handleDateChange(\"month\", parseInt(value, 10))}\n onOpenChange={handleOpenChange}\n className={cn(isMonthYearOnly ? \"w-1/2\" : \"w-2/5\")}\n >\n <SelectTrigger className=\"h-full w-full !rounded-none border-none bg-transparent py-0 !ring-0 hover:!text-pink-500\">\n <SelectValue placeholder={lang === \"vi\" ? \"Tháng\" : \"Month\"} />\n </SelectTrigger>\n <SelectContent onCloseAutoFocus={(e) => e.preventDefault()}>\n <SelectGroup>\n {!disableUnselect && (\n <SelectItem value=\"0\" className=\"text-gray-600\">\n {lang === \"vi\" ? \"Bỏ chọn\" : \"None\"}\n </SelectItem>\n )}\n\n {Array.from({ length: 12 }, (_, i) => i + 1).map((m) => (\n <SelectItem key={m} value={m.toString()}>\n {lang === \"vi\" ? monthsVi[m - 1] : monthsEn[m - 1]}\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </Select>\n <Select\n value={selectedDate ? selectedDate.getFullYear().toString() : \"\"}\n onValueChange={(value) => handleDateChange(\"year\", parseInt(value, 10))}\n onOpenChange={handleOpenChange}\n className={cn(isMonthYearOnly ? \"w-1/2\" : \"w-[30%]\")}\n >\n <SelectTrigger className=\"h-full w-full !rounded-none border-none bg-transparent py-0 !ring-0 hover:!text-pink-500\">\n <SelectValue placeholder={lang === \"vi\" ? \"Năm\" : \"Year\"} />\n </SelectTrigger>\n <SelectContent onCloseAutoFocus={(e) => e.preventDefault()}>\n <SelectGroup>\n {!disableUnselect && (\n <SelectItem value=\"0\" className=\"text-gray-600\">\n {lang === \"vi\" ? \"Bỏ chọn\" : \"None\"}\n </SelectItem>\n )}\n {generateYears(startYear, endYear).map((y) => (\n <SelectItem key={y} value={y.toString()}>\n {y}\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </Select>\n </div>\n </div>\n {message && (\n <div className=\"mobase-text-input-message mt-0.5 flex items-center space-x-1\">\n {isError ? (\n <XCircleIcon width={16} height={16} className=\"text-red-500\" />\n ) : (\n <QuestionMarkCircleIcon width={16} height={16} className=\"text-gray-500\" />\n )}\n <span\n className={cn(\n isError ? \"text-red-500\" : \"text-gray-500\",\n size === 2 ? \"text-sm\" : \"text-xs\"\n )}\n >\n {message}\n </span>\n </div>\n )}\n </div>\n );\n};\n\nexport { DateSelect };\n","import * as React from \"react\";\n\nimport {\n ChevronDownIcon,\n ChevronUpIcon,\n CheckIcon,\n XCircleIcon,\n} from \"@heroicons/react/16/solid\";\nimport { QuestionMarkCircleIcon } from \"@heroicons/react/24/outline\";\n\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { cn } from \"../../helpers/utils\";\n\nconst Select = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Root> & {\n className?: string;\n label?: string | null;\n message?: string | null;\n size?: 1 | 2;\n isError?: boolean;\n }\n>(\n ({\n className,\n children,\n label,\n message,\n size,\n isError,\n disabled,\n ...props\n },ref) => (\n <div\n ref={ref} \n className={cn(\n \"select-mobase relative\",\n className,\n disabled ? \"disabled\" : \"\",\n isError\n ? \"[&>.select-mobase-button]:border-red-500 [&>.select-mobase-button]:ring-red-500 [&>.select-mobase-button]:ring-1\"\n : \"\",\n size === 2\n ? \"[&>.select-mobase-button]:text-base [&>.select-mobase-button]:h-12\"\n : \"\",\n )}\n >\n {label && (\n <span\n className={cn(\n \"mobase-select-label absolute bg-white -top-2 px-1.5 left-2 text-xs text-gray-500 z-[1]\",\n size === 2 && \"text-sm -top-2.5\",\n isError && \"text-red-500\",\n )}\n >\n {label}\n </span>\n )}\n <SelectPrimitive.Root disabled={disabled} {...props}>\n {children}\n </SelectPrimitive.Root>\n {message && (\n <div\n className={cn(\n \"mobase-select-message flex space-x-1 items-center mt-1 text-gray-500\",\n isError && \"text-red-500\",\n )}\n >\n {isError ? (\n <XCircleIcon width={16} height={16} />\n ) : (\n <QuestionMarkCircleIcon width={16} height={16} />\n )}\n <span className={cn(size === 2 ? \"text-sm\" : \"text-xs\")}>\n {message}\n </span>\n </div>\n )}\n </div>\n ),\n);\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"select-mobase-button bg-white w-full ring-0 transition-all focus-visible:border-pink-500 focus-visible:ring-offset-0 focus-visible:ring-offset-transparent focus-visible:ring-1 focus-visible:!ring-pink-500 rounded-md border border-gray-300 data-[placeholder]:text-gray-500 p-3 disabled:bg-gray-50 disabled:border-gray-200 disabled:pointer-events-none flex items-center justify-between data-[state=open]:border-pink-500 data-[state=open]:ring-1 hover:ring-1 hover:ring-gray-400 data-[state=open]:ring-pink-500 text-gray-900 h-11 ring-inset text-sm\",\n className,\n )}\n {...props}\n >\n <div className=\"line-clamp-1 text-left\">{children}</div>\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"h-4 w-4 text-gray-500 flex-none\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronUpIcon className=\"h-5 w-5\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1 bg-gradient-to-t from-white to-transparent\",\n className,\n )}\n {...props}\n >\n <ChevronDownIcon className=\"h-5 w-5\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border border-gray-300 bg-white text-gray-900 shadow-small data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-0\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectGroup = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Group>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Group\n ref={ref}\n className={cn(\n \"relative p-1 after:w-full border-b border-gray-200 last:border-0\",\n className,\n )}\n {...props}\n >\n {children}\n </SelectPrimitive.Group>\n));\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"pr-2 pl-7 py-1.5 text-sm font-semibold z-[1]\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => {\n return (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-md py-1.5 pl-7 pr-2 text-sm outline-none focus:bg-gray-100 focus:text-gray-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-4 w-4 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"h-4 w-4 text-pink-500\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n});\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n","interface DateSelectProps {\n /**\n * Label for the Date Select component\n */\n label?: string;\n /**\n * Value of the Date Select component\n */\n selected?: Date | undefined | null;\n /**\n * Event handler when user select a date\n */\n onSelect?: (date: Date | undefined | null) => void;\n /**\n * Size of the DatePicker component\n */\n size?: 1 | 2;\n /**\n * Error state of the DatePicker component\n */\n isError?: boolean;\n /**\n * disabled state of the DatePicker component\n */\n disabled?: boolean;\n /**\n * Message to display below the DatePicker\n */\n message?: string;\n /**\n * Format that is used to display date in the input, It is based on (Unicode Technical Standart #35)[https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table]\n */\n dateFormat?: string;\n /**\n * Language of the Date Select component\n */\n lang?: \"vi\" | \"en\";\n /**\n * The earliest year to start the month navigation.\n */\n fromYear?: number;\n /**\n * The earliest year to start the month navigation.\n */\n toYear?: number;\n /**\n * disable unselect date\n */\n disableUnselect?: boolean;\n}\n\nexport const monthsVi = [\n \"Tháng 01\",\n \"Tháng 02\",\n \"Tháng 03\",\n \"Tháng 04\",\n \"Tháng 05\",\n \"Tháng 06\",\n \"Tháng 07\",\n \"Tháng 08\",\n \"Tháng 09\",\n \"Tháng 10\",\n \"Tháng 11\",\n \"Tháng 12\",\n];\n\nexport const monthsEn = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nexport const getDaysInMonth = (year: number, month: number, fromDate?: Date, toDate?: Date) => {\n const daysInMonth = new Date(year, month, 0).getDate();\n const startDay =\n fromDate && year === fromDate.getFullYear() && month === fromDate.getMonth() + 1\n ? fromDate.getDate()\n : 1;\n const endDay =\n toDate && year === toDate.getFullYear() && month === toDate.getMonth() + 1\n ? toDate.getDate()\n : daysInMonth;\n return { daysInMonth, startDay, endDay };\n};\n\nexport const generateYears = (\n startYear: number,\n endYear: number,\n fromDate?: Date,\n toDate?: Date\n) => {\n const fromYear = fromDate ? fromDate.getFullYear() : startYear;\n const toYear = toDate ? toDate.getFullYear() : endYear;\n return Array.from({ length: toYear - fromYear + 1 }, (_, i) => toYear - i);\n};\n\nexport type { DateSelectProps };\n","import * as React from \"react\";\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { buttonVariants } from \"../Button\";\n\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\n\nimport type * as Radix from \"@radix-ui/react-primitive\";\n\nconst AlertDialog = AlertDialogPrimitive.Root;\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialog\n * -----------------------------------------------------------------------------------------------*/\n\ntype DialogProps = Radix.ComponentPropsWithoutRef<typeof DialogPrimitive.Root>;\ninterface AlertDialogProps extends Omit<DialogProps, \"modal\"> {}\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogTrigger\n * -----------------------------------------------------------------------------------------------*/\n\ntype DialogTriggerProps = Radix.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Trigger\n>;\ninterface AlertDialogTriggerProps extends DialogTriggerProps {}\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogPortal\n * -----------------------------------------------------------------------------------------------*/\n\ntype DialogPortalProps = Radix.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Portal\n>;\ninterface AlertDialogPortalProps extends DialogPortalProps {}\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogOverlay\n * -----------------------------------------------------------------------------------------------*/\n\ntype DialogOverlayProps = Radix.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Overlay\n>;\ninterface AlertDialogOverlayProps extends DialogOverlayProps {}\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogAction\n * -----------------------------------------------------------------------------------------------*/\n\ntype DialogCloseProps = Radix.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Close\n>;\ninterface AlertDialogActionProps extends DialogCloseProps {}\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogCancel\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AlertDialogCancelProps extends DialogCloseProps {}\n\n/* ---------------------------------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogTitle\n * -----------------------------------------------------------------------------------------------*/\n\ntype DialogTitleProps = Radix.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Title\n>;\ninterface AlertDialogTitleProps extends DialogTitleProps {}\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogDescription\n * -----------------------------------------------------------------------------------------------*/\n\ntype DialogDescriptionProps = Radix.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Description\n>;\ninterface AlertDialogDescriptionProps extends DialogDescriptionProps {}\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogContent\n * -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentProps = Radix.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Content\n>;\ninterface AlertDialogContentProps\n extends Omit<\n DialogContentProps,\n \"onPointerDownOutside\" | \"onInteractOutside\"\n > {}\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/70 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n ref={ref}\n />\n));\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] w-[90vw] bg-white text-gray-700 border border-gray-300 top-[50%] z-50 grid w- max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-xl\",\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\n\nconst AlertDialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"flex flex-col space-y-2 text-left\", className)}\n {...props}\n />\n);\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\nconst AlertDialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"flex flex-row justify-end space-x-4\", className)}\n {...props}\n />\n);\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn(\"text-lg text-gray-900 font-semibold\", className)}\n {...props}\n />\n));\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nAlertDialogDescription.displayName =\n AlertDialogPrimitive.Description.displayName;\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(buttonVariants({ variant: \"primary\" }), \"\", className)}\n {...props}\n />\n));\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(buttonVariants({ variant: \"secondary\" }), className)}\n {...props}\n />\n));\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n\nexport type {\n AlertDialogProps,\n AlertDialogTriggerProps,\n AlertDialogPortalProps,\n AlertDialogOverlayProps,\n AlertDialogContentProps,\n AlertDialogActionProps,\n AlertDialogCancelProps,\n AlertDialogTitleProps,\n AlertDialogDescriptionProps,\n};\n","import { memo, useState } from \"react\";\n\nimport { cn, Media, MediaContextProvider } from \"../../helpers/utils\";\nimport { ButtonsBlock, HeadingBlock } from \"../CommonBlocks/CommonBlocks\";\nimport {\n HorizontalContent,\n HorizontalNext,\n HorizontalPrevious,\n HorizontalScroll,\n} from \"../HorizontalScroll\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../Tabs\";\nimport GuideUIDesktopTempOne from \"./GuideUIDesktop\";\nimport GuideUIMobileTempOne from \"./GuideUIMobile\";\nimport { GuideSectionProps } from \"./utils\";\n\nconst ArrowSVG = ({\n direction,\n className,\n}: {\n direction: \"left\" | \"right\";\n className?: string;\n}) => {\n const svgProps =\n direction === \"left\"\n ? { viewBox: \"0 0 20 40\", d: \"M20 0H0L18 20L0 40H20V0Z\", width: \"20\" }\n : {\n viewBox: \"0 0 19 40\",\n d: \"M0.906128 0H0V40H0.906128L19 20L0.906128 0Z\",\n width: \"19\",\n };\n\n return (\n <svg\n fill=\"none\"\n viewBox={svgProps.viewBox}\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"flex-0 absolute w-5 transition-all\", className)}\n >\n <path d={svgProps.d} fill=\"currentColor\" />\n </svg>\n );\n};\n\nconst GuideSectionTemplateOne = memo(\n ({\n dataHeading,\n dataHorizontalScroll,\n dataGuide,\n dataButtons,\n mockup,\n isStep,\n }: GuideSectionProps) => {\n const {\n showGradientOverlay = true,\n gradientOverlayColor,\n className,\n } = dataHorizontalScroll || {};\n\n const [activeTab, setActiveTab] = useState<string>(dataGuide?.[0]?.title || \"\");\n\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={cn(dataHeading?.className)}\n />\n )}\n {dataGuide && dataGuide?.length > 0 && (\n <MediaContextProvider>\n <Media lessThan=\"md\">\n <GuideUIMobileTempOne dataGuide={dataGuide} mockup={mockup} isStep={isStep} />\n </Media>\n <Media greaterThan=\"sm\">\n {dataGuide?.length > 1 ? (\n <Tabs\n defaultValue={dataGuide[0]?.title}\n onValueChange={(value) => setActiveTab(value)}\n >\n <HorizontalScroll\n showGradientOverlay={showGradientOverlay}\n gradientOverlayColor={gradientOverlayColor}\n className={className}\n >\n <HorizontalContent className=\"mb-6 text-center\">\n <TabsList\n className={cn(\n \"mx-auto mb-0 inline-flex w-auto items-center overflow-visible\",\n isStep ? \"space-x-10\" : \"\"\n )}\n >\n {dataGuide.map((guideGroup, index) => {\n const isLast = index === dataGuide.length - 1;\n const isActive = activeTab === guideGroup?.title || \"\";\n return (\n <TabsTrigger\n key={guideGroup.title + index}\n value={guideGroup.title}\n className={cn(\n isStep\n ? \"relative h-10 border-0 bg-pink-100 px-3 first:rounded-l-md first:pl-5 last:rounded-r-md last:pl-3 last:pr-5\"\n : \"\",\n isActive && isStep\n ? \"data-[state=active]:bg-pink-500 data-[state=active]:text-white\"\n : \"\"\n )}\n >\n {isStep && index !== 0 && (\n <ArrowSVG\n direction=\"left\"\n className={cn(\n \"right-full top-0\",\n isActive ? \"text-pink-500\" : \"text-pink-100\"\n )}\n />\n )}\n {guideGroup.title}\n {isStep && !isLast && (\n <ArrowSVG\n direction=\"right\"\n className={cn(\n \"left-full top-0\",\n isActive ? \"text-pink-500\" : \"text-pink-100\"\n )}\n />\n )}\n </TabsTrigger>\n );\n })}\n </TabsList>\n </HorizontalContent>\n <HorizontalPrevious />\n <HorizontalNext />\n </HorizontalScroll>\n {dataGuide.map((guideGroup, index) => (\n <TabsContent key={guideGroup.title + index} value={guideGroup.title}>\n <GuideUIDesktopTempOne guideGroup={guideGroup} mockup={mockup} />\n </TabsContent>\n ))}\n </Tabs>\n ) : (\n dataGuide?.length === 1 &&\n dataGuide[0] && <GuideUIDesktopTempOne guideGroup={dataGuide[0]} mockup={mockup} />\n )}\n </Media>\n </MediaContextProvider>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n }\n);\n\nexport { GuideSectionTemplateOne };\n","import { useEffect, useState } from \"react\";\nimport parse from \"html-react-parser\";\nimport { motion } from \"motion/react\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { AspectRatio } from \"../AspectRatio\";\nimport {\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n type CarouselApi,\n} from \"../Carousel\";\nimport { GuideDataProps, GuideSectionProps } from \"./utils\";\n\nconst GuideUIDesktopTempOne = ({\n guideGroup,\n mockup,\n}: {\n guideGroup: GuideDataProps;\n isMultiGuide?: boolean;\n mockup: GuideSectionProps[\"mockup\"];\n}) => {\n const [api, setApi] = useState<CarouselApi>();\n const [current, setCurrent] = useState(0);\n\n const variants = {\n open: {\n height: \"auto\",\n opacity: 1,\n transition: {\n duration: 0.3,\n ease: \"easeInOut\",\n },\n },\n closed: {\n height: 0,\n opacity: 0,\n transition: {\n duration: 0.3,\n ease: \"easeInOut\",\n },\n },\n };\n\n useEffect(() => {\n if (!api) {\n return;\n }\n setCurrent(api.selectedScrollSnap() + 1);\n\n api.on(\"select\", () => {\n setCurrent(api.selectedScrollSnap() + 1);\n });\n }, [api]);\n\n return (\n <>\n {guideGroup?.stepList && guideGroup?.stepList?.length > 0 && (\n <div className=\"mx-auto flex max-w-3xl flex-nowrap justify-center\">\n <div className=\"h-auto w-64 flex-none\">\n <div\n className={cn(\n \"relative mx-auto w-full\",\n mockup === \"none\"\n ? \"\"\n : \"rounded-[2.5rem] border-8 border-gray-800 bg-gray-800 shadow-md\",\n mockup === \"small\" ? \"px-1 py-5\" : \"\"\n )}\n >\n {!(mockup === \"none\") && (\n <>\n <div className=\"absolute -start-2.5 top-16 h-8 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -start-2.5 top-32 h-12 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -start-2.5 top-48 h-12 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -end-2.5 top-40 h-16 w-1 rounded-e-lg bg-gray-800\"></div>\n </>\n )}\n\n <div\n className={cn(\n \"relative h-full w-full overflow-hidden\",\n mockup === \"none\" ? \"\" : \"rounded-[2rem] bg-gray-200\",\n mockup === \"small\" ? \"rounded-xl\" : \"\"\n )}\n >\n <Carousel setApi={setApi}>\n <CarouselContent className=\"ml-0\">\n {guideGroup?.stepList.map((step, index) => (\n <CarouselItem key={index} className=\"pl-0\">\n <AspectRatio ratio={mockup === \"small\" ? 540 / 960 : 540 / 1168}>\n {step?.image && (\n <img\n src={step.image}\n className=\"size-full object-contain\"\n alt={step.title}\n />\n )}\n </AspectRatio>\n </CarouselItem>\n ))}\n </CarouselContent>\n <CarouselPrevious className=\"left-1 border-none bg-gray-900/30 text-white hover:bg-gray-900/40 disabled:hidden\" />\n <CarouselNext className=\"right-1 border-none bg-gray-900/30 text-white hover:bg-gray-900/40 disabled:hidden\" />\n </Carousel>\n </div>\n </div>\n </div>\n <div className=\"flex flex-auto pl-12 pt-4\">\n <ul className=\"flex flex-col\">\n {guideGroup?.stepList.map((step, index) => (\n <li\n key={index}\n className={cn(\n \"relative min-h-20 pb-8 pl-14 after:absolute after:left-4 after:top-0 after:h-full after:border-l after:border-dashed after:border-gray-200 last:min-h-0 last:pb-0 last:after:hidden\",\n index + 1 === current ? \"\" : \"cursor-pointer\"\n )}\n onClick={() => api && api.scrollTo(index)}\n >\n <div\n className={cn(\n \"absolute -top-1.5 left-0 z-10 flex h-8 w-8 items-center justify-center rounded-full text-sm font-bold\",\n index + 1 === current ? \"bg-pink-500 text-white\" : \"bg-pink-100 text-pink-500\"\n )}\n >\n {index + 1}\n </div>\n <div\n className={cn(\n \" text-sm font-medium\",\n index + 1 === current ? \"text-pink-500\" : \"text-gray-900\"\n )}\n >\n {parse(step.title)}\n </div>\n {step.content && (\n <motion.div\n initial=\"closed\"\n animate={index + 1 === current ? \"open\" : \"closed\"}\n variants={variants}\n style={{ overflow: \"hidden\" }}\n >\n <div className=\"mt-3 text-sm text-gray-700\">{parse(step.content)}</div>\n </motion.div>\n )}\n </li>\n ))}\n </ul>\n </div>\n </div>\n )}\n </>\n );\n};\n\nexport default GuideUIDesktopTempOne;\n","import * as AspectRatioPrimitive from \"@radix-ui/react-aspect-ratio\"\n \nconst AspectRatio = AspectRatioPrimitive.Root\n \nexport { AspectRatio }\n","import { useEffect, useRef, useState } from \"react\";\nimport { ChevronRightIcon } from \"@heroicons/react/20/solid\";\nimport Autoplay from \"embla-carousel-autoplay\";\nimport parse from \"html-react-parser\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { AspectRatio } from \"../AspectRatio\";\nimport { Carousel, CarouselContent, CarouselItem, type CarouselApi } from \"../Carousel\";\nimport { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle } from \"../Dialog\";\nimport { TextButton } from \"../TextButton\";\nimport { GuideDataProps, GuideSectionProps, StepItemProps } from \"./utils\";\n\nconst ModalStepMobile = ({ open, setOpenDialog, dataStep, mockup }) => {\n const [current, setCurrent] = useState(0);\n const [api, setApi] = useState<CarouselApi>();\n\n useEffect(() => {\n if (!api) {\n return;\n }\n setCurrent(api.selectedScrollSnap() + 1);\n\n api.on(\"select\", () => {\n setCurrent(api.selectedScrollSnap() + 1);\n });\n }, [api]);\n\n if (!dataStep || !dataStep?.stepList?.length) return null;\n\n return (\n <Dialog open={open} onOpenChange={setOpenDialog}>\n <DialogContent position=\"bottom\" height=\"full\">\n <DialogHeader>\n <DialogTitle className=\"line-clamp-1\">{dataStep?.title}</DialogTitle>\n </DialogHeader>\n <DialogBody className=\"grid overflow-hidden p-0 \">\n <Carousel setApi={setApi} className=\" grid overflow-hidden\">\n <CarouselContent className=\"ml-0 h-full\">\n {dataStep.stepList.map((step: StepItemProps, index: number) => (\n <CarouselItem key={index} className=\"h-full w-full pl-0\">\n <div className=\"flex h-full flex-col overflow-y-auto\">\n <div className=\" relative flex w-full flex-none justify-center bg-gray-100 p-5\">\n <div className={cn(\"mx-auto\", mockup === \"small\" ? \"w-56\" : \"w-52\")}>\n <div\n className={cn(\n \"relative mx-auto w-full\",\n mockup === \"none\"\n ? \"\"\n : \"rounded-[2rem] border-8 border-gray-800 bg-gray-800 shadow-md\",\n mockup === \"small\" ? \"px-0.5 py-3\" : \"\"\n )}\n >\n {!(mockup === \"none\") && (\n <>\n <div className=\"absolute -start-2.5 top-16 h-8 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -start-2.5 top-32 h-12 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -start-2.5 top-48 h-12 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -end-2.5 top-40 h-16 w-1 rounded-e-lg bg-gray-800\"></div>\n </>\n )}\n\n <div\n className={cn(\n \"relative h-full w-full overflow-hidden\",\n mockup === \"none\" ? \"\" : \"rounded-[1.5rem] bg-gray-200\",\n mockup === \"small\" ? \"rounded-xl\" : \"\"\n )}\n >\n <AspectRatio ratio={mockup === \"small\" ? 540 / 960 : 540 / 1168}>\n {step?.image && (\n <img\n src={step.image}\n className=\"size-full object-contain\"\n alt={step.title}\n />\n )}\n </AspectRatio>\n </div>\n </div>\n </div>\n </div>\n <div className=\"p-5 pb-12\">\n <div className=\"font-semibold\">{parse(step.title)}</div>\n {step?.content && (\n <div className=\"mt-3 text-sm text-gray-800\">{parse(step.content)}</div>\n )}\n </div>\n </div>\n </CarouselItem>\n ))}\n </CarouselContent>\n </Carousel>\n <div className=\"text-muted-foreground fixed bottom-3 left-1/2 flex -translate-x-1/2 items-center justify-center gap-1.5 rounded-full bg-gray-900/50 px-3 py-1 py-2 text-center text-sm text-gray-700\">\n {dataStep.stepList.map((_, index) => (\n <div\n className={`h-2 w-2 cursor-pointer rounded-full ${index + 1 === current ? \"bg-white\" : \"bg-white/40\"}`}\n key={index}\n onClick={() => api && api.scrollTo(index)}\n ></div>\n ))}\n </div>\n </DialogBody>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst GuideUIMobileTempOne = ({\n dataGuide,\n mockup,\n isStep,\n}: {\n dataGuide: GuideDataProps[];\n isMultiGuide?: boolean;\n mockup: GuideSectionProps[\"mockup\"];\n isStep: GuideSectionProps[\"isStep\"];\n}) => {\n const [openDialog, setOpenDialog] = useState(false);\n const [dataStep, setDataStep] = useState<GuideDataProps | null>(null);\n\n const plugin = useRef(\n Autoplay({ delay: 3500, stopOnInteraction: false, stopOnMouseEnter: false })\n );\n\n const handleClickModal = (index: number) => {\n setDataStep(dataGuide?.[index] || null);\n setOpenDialog(true);\n };\n\n if (dataGuide?.length === 0) return null;\n\n return (\n <>\n {dataGuide?.length > 1 ? (\n <div className=\"-mx-5 grid grid-cols-1 md:mx-0\">\n {dataGuide.map((guideGroup, index) => (\n <div\n className=\"relative flex cursor-pointer flex-nowrap items-center space-x-4 pl-5 \"\n key={index}\n onClick={() => handleClickModal(index)}\n >\n <div className=\"borde flex h-28 w-20 justify-center overflow-hidden rounded-t-lg bg-gray-100 p-2 pb-0\">\n {(guideGroup?.avatar || guideGroup?.stepList?.[0]?.image) && (\n <img\n src={guideGroup.avatar || guideGroup?.stepList?.[0]?.image}\n className=\"h-full w-full object-cover object-top\"\n alt={guideGroup.title}\n />\n )}\n </div>\n <div\n className={cn(\n \"relative grid min-h-32 flex-1 grid-cols-1 items-center pr-8 \",\n index + 1 != dataGuide.length &&\n \"after:absolute after:bottom-0 after:left-0 after:right-0 after:h-px after:bg-gray-200\"\n )}\n >\n <div className=\"py-2\">\n {isStep && (\n <span className=\"text-sm font-medium text-pink-500\">{`Bước ${index + 1}`}</span>\n )}\n <div className=\"font-semibold\">{parse(guideGroup.title)}</div>\n {guideGroup?.description && (\n <div className=\"mt-1 text-sm text-gray-500\">\n {parse(guideGroup.description)}\n </div>\n )}\n </div>\n\n <div className=\" absolute right-4 top-1/2 -translate-y-1/2 text-gray-500\">\n <ChevronRightIcon className=\"h-6 w-6\" />\n </div>\n </div>\n </div>\n ))}\n </div>\n ) : (\n dataGuide?.[0] &&\n dataGuide[0].stepList?.length > 0 && (\n <div className=\"mx-auto flex max-w-3xl flex-col flex-wrap justify-center gap-y-6\">\n <div\n className=\"relative max-h-96 w-full flex-none overflow-hidden\"\n style={{\n WebkitMask:\n \"linear-gradient(to bottom, rgba(0, 0, 0, 1.0) 95%, rgba(0, 0, 0, 0.3) 98%, transparent 100%)\",\n }}\n >\n <div className=\"mx-auto h-auto w-72\">\n <div\n className={cn(\n \"relative mx-auto w-full\",\n mockup === \"none\"\n ? \"\"\n : \"rounded-[2.5rem] border-8 border-gray-800 bg-gray-800 shadow-md\",\n mockup === \"small\" ? \"px-1 py-5\" : \"\"\n )}\n >\n {!(mockup === \"none\") && (\n <>\n <div className=\"absolute -start-2.5 top-16 h-8 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -start-2.5 top-32 h-12 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -start-2.5 top-48 h-12 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -end-2.5 top-40 h-16 w-1 rounded-e-lg bg-gray-800\"></div>\n </>\n )}\n <div\n className={cn(\n \"relative h-full w-full overflow-hidden\",\n mockup === \"none\" ? \"\" : \"rounded-[2rem] bg-gray-200\",\n mockup === \"small\" ? \"rounded-xl\" : \"\"\n )}\n >\n <Carousel plugins={[plugin.current]}>\n <CarouselContent className=\"ml-0\">\n {dataGuide[0]?.stepList.map((step, index) => (\n <CarouselItem\n key={index}\n className=\"pl-0\"\n onClick={() => handleClickModal(0)}\n >\n <AspectRatio ratio={mockup === \"small\" ? 540 / 960 : 540 / 1168}>\n {step?.image && (\n <img\n src={step.image}\n className=\"size-full object-contain\"\n alt={step.title}\n />\n )}\n </AspectRatio>\n </CarouselItem>\n ))}\n </CarouselContent>\n </Carousel>\n </div>\n </div>\n </div>\n </div>\n <div className=\"flex w-full flex-none justify-center\">\n <TextButton size=\"lg\" variant=\"primary\" onClick={() => handleClickModal(0)}>\n Xem chi tiết hướng dẫn <ChevronRightIcon className=\"ml-1 h-5 w-5\" />\n </TextButton>\n </div>\n </div>\n )\n )}\n {openDialog && (\n <ModalStepMobile\n open={openDialog}\n setOpenDialog={setOpenDialog}\n dataStep={dataStep}\n mockup={mockup}\n />\n )}\n </>\n );\n};\n\nexport default GuideUIMobileTempOne;\n","\nimport { cn } from \"../../helpers/utils\";\nimport { SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { GuideSectionTemplateOne } from \"./GuideSectionTemplate\";\nimport { GuideSectionProps } from \"./utils\";\n\nconst renderTemplate = ({\n template,\n dataHeading,\n dataGuide,\n dataHorizontalScroll,\n dataButtons,\n mockup,\n isStep,\n}) => {\n switch (template) {\n case 1:\n return (\n <GuideSectionTemplateOne\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll}\n dataGuide={dataGuide}\n dataButtons={dataButtons}\n mockup={mockup}\n isStep={isStep}\n />\n );\n default:\n return (\n <GuideSectionTemplateOne\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll}\n dataGuide={dataGuide}\n dataButtons={dataButtons}\n mockup={mockup}\n isStep={isStep}\n />\n );\n }\n};\n\nconst GuideSectionContent = ({\n dataHeading,\n dataHorizontalScroll,\n dataGuide,\n dataButtons,\n template,\n mockup,\n isStep,\n}) => {\n return (\n <>\n {renderTemplate({\n dataHeading,\n dataHorizontalScroll,\n dataGuide,\n dataButtons,\n template,\n mockup,\n isStep,\n })}\n </>\n );\n};\n\nconst GuideSection = ({\n dataHeading,\n dataGuide,\n dataHorizontalScroll,\n dataButtons,\n className,\n background,\n template = 1,\n mockup = \"default\",\n isStep = false,\n}: GuideSectionProps) => {\n return (\n <SectionBlock className={cn(className)} background={background}>\n <GuideSectionContent\n dataHeading={dataHeading}\n template={template}\n dataHorizontalScroll={dataHorizontalScroll}\n dataGuide={dataGuide}\n dataButtons={dataButtons}\n mockup={mockup}\n isStep={isStep}\n />\n </SectionBlock>\n );\n};\n\nexport { GuideSection };\n","import { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { iconButtonVariants } from \"../IconButton/IconButton\";\nimport { cn } from \"../../helpers/utils\";\n\ninterface PaginationProps {\n /**\n * Current page.\n */\n current: number;\n /**\n * Items total count.\n */\n total: number;\n /**\n * Page change callback\n */\n onChange: (page: number) => void;\n}\n\nexport default function Pagination({\n current,\n total,\n onChange,\n}: PaginationProps) {\n const getButton = (index: number) => (\n <li key={index}>\n <button\n className={cn(\n iconButtonVariants({\n variant: current === index ? \"outline\" : \"secondary\",\n size: \"sm\",\n }),\n )}\n onClick={() => onChange(index)}\n >\n {index}\n </button>\n </li>\n );\n\n return (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\")}\n >\n <ul className={cn(\"flex flex-row flex-wrap items-center gap-2\")}>\n {total > 1 && (\n <li>\n <button\n className={cn(\n iconButtonVariants({\n variant: \"secondary\",\n size: \"sm\",\n }),\n )}\n disabled={current === 1}\n onClick={() => current > 1 && onChange(current - 1)}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n </li>\n )}\n\n {total <= 6 ? (\n Array(total)\n .fill(0)\n .map((_, index) => getButton(index + 1))\n ) : (\n <>\n {getButton(1)}\n {current === 1 && [getButton(2), getButton(3)]}\n {current > 3 && (\n <li>\n <button\n className={cn(\n iconButtonVariants({\n variant: \"secondary\",\n size: \"sm\",\n }),\n )}\n disabled={current === 1}\n onClick={() => onChange(current - 3)}\n >\n ...\n </button>\n </li>\n )}\n {current > 2 &&\n current !== 1 &&\n current !== total &&\n getButton(current - 1)}\n {current > 1 && current < total && getButton(current)}\n {current < total - 1 && current !== 1 && getButton(current + 1)}\n {current === total && [getButton(total - 2), getButton(total - 1)]}\n {current < total - 2 && current !== total && (\n <button\n className={cn(\n iconButtonVariants({\n variant: \"secondary\",\n size: \"sm\",\n }),\n )}\n disabled={current === 1}\n onClick={() => onChange(current + 3)}\n >\n ...\n </button>\n )}\n {getButton(total)}\n </>\n )}\n\n {total > 1 && (\n <li>\n <button\n className={cn(\n iconButtonVariants({\n variant: \"secondary\",\n size: \"sm\",\n }),\n )}\n disabled={current === total}\n onClick={() => current < total && onChange(current + 1)}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </li>\n )}\n </ul>\n </nav>\n );\n}\n","import { forwardRef, TextareaHTMLAttributes } from \"react\";\nimport { QuestionMarkCircleIcon } from \"@heroicons/react/24/outline\";\nimport { XCircleIcon } from \"@heroicons/react/24/solid\";\nimport { cn } from \"../../helpers/utils\";\n\nexport interface TextAreaProps\n extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string;\n message?: string;\n isError?: boolean;\n inputClassName?: string;\n size?: 1 | 2;\n}\n\nexport const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n (\n {\n disabled,\n isError,\n message,\n label,\n className,\n inputClassName,\n size,\n rows = 3,\n ...restProps\n },\n ref,\n ) => {\n return (\n <div\n className={cn(\n \"relative\",\n className,\n isError && \"mobase-text-area-error\",\n )}\n >\n {label && (\n <span\n className={cn(\n \"mobase-text-area-label absolute bg-white -top-2.5 px-1.5 left-2 text-sm text-gray-500\",\n size === 2 && \" -top-2.5 text-sm\",\n )}\n >\n {label}\n </span>\n )}\n <textarea\n disabled={disabled}\n ref={ref}\n className={cn(\n \"mobase-text-area-box bg-white w-full text-sm transition-all rounded-md border border-gray-300 placeholder:text-gray-500 p-3 text-gray-900 focus:border-pink-500 disabled:bg-gray-50 disabled:border-gray-200 outline-none block\",\n size === 2 && \"text-base\",\n inputClassName,\n )}\n rows={rows}\n {...restProps}\n />\n {message && (\n <div className=\"mobase-text-area-message flex space-x-1 items-center mt-0.5\">\n {isError ? (\n <XCircleIcon width={16} height={16} className=\"text-red-500\" />\n ) : (\n <QuestionMarkCircleIcon\n width={16}\n height={16}\n className=\"text-gray-500\"\n />\n )}\n <span\n className={cn(\n \"text-gray-500 \",\n size === 2 ? \"text-sm\" : \"text-xs\",\n )}\n >\n {message}\n </span>\n </div>\n )}\n\n <style>\n {`\n .mobase-text-area-box:hover {\n box-shadow: 0px 0px 0px 1px rgb(var(--mobase-gray-400) / 1) inset;\n }\n\n .mobase-text-area-box:focus, .mobase-text-area-box:focus-visible {\n box-shadow: 0px 0px 0px 1px rgb(var(--mobase-pink-500) / 1) inset;\n }\n\n .mobase-text-area-box:disabled {\n box-shadow: none;\n }\n\n .mobase-text-area-error {\n .mobase-text-area-label {\n color: rgb(var(--mobase-red-500) / 1);\n }\n\n .mobase-text-area-box {\n box-shadow: 0px 0px 0px 1px rgb(var(--mobase-red-500) / 1) inset;\n border-color: rgb(var(--mobase-red-500) / 1);\n }\n\n .mobase-text-area-message span {\n color: rgb(var(--mobase-red-500) / 1);\n }\n }\n `}\n </style>\n </div>\n );\n },\n);\n","// Inspired by react-hot-toast library\nimport * as React from \"react\";\n\nimport type { ToastActionElement, ToastProps } from \"./Toast\";\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 1000000;\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: ToastActionElement;\n};\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const;\n\nlet count = 0;\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\n\ntype ActionType = typeof actionTypes;\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"];\n toast: ToasterToast;\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"];\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n };\n\ninterface State {\n toasts: ToasterToast[];\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t,\n ),\n };\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t,\n ),\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n default:\n return state;\n }\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\nlet memoryState: State = { toasts: [] };\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n}\n\ntype Toast = Omit<ToasterToast, \"id\">;\n\nfunction toast({ ...props }: Toast) {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n });\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open: boolean) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id,\n dismiss,\n update,\n };\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState);\n\n React.useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n };\n}\n\nexport { useToast, toast };\n","import * as React from \"react\";\nimport {\n CheckCircleIcon,\n ExclamationTriangleIcon,\n InformationCircleIcon,\n XMarkIcon,\n} from \"@heroicons/react/20/solid\";\nimport * as ToastPrimitives from \"@radix-ui/react-toast\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst ToastProvider = ToastPrimitives.Provider;\n\nconst ToastViewport = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Viewport>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Viewport\n ref={ref}\n className={cn(\n \"fixed bottom-0 left-0 z-[300] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-auto sm:left-auto sm:right-0 sm:top-0 sm:flex-col md:max-w-[420px]\",\n className\n )}\n {...props}\n />\n));\nToastViewport.displayName = ToastPrimitives.Viewport.displayName;\n\nconst toastVariants = cva(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-bottom-full data-[state=open]:sm:slide-in-from-top-full shadow-medium group pointer-events-auto relative w-full overflow-hidden rounded-md border-l-4 border-gray-200 bg-white py-4 pl-10 pr-10 text-gray-900 transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none\",\n {\n variants: {\n variant: {\n success: \"border-l-green-500\",\n warning: \"border-l-yellow-500\",\n error: \"border-l-red-500\",\n },\n },\n defaultVariants: {\n variant: \"success\",\n },\n }\n);\n\nconst Toast = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> & VariantProps<typeof toastVariants>\n>(({ className, variant = \"success\", children, ...props }, ref) => {\n return (\n <ToastPrimitives.Root\n ref={ref}\n className={cn(toastVariants({ variant }), className)}\n {...props}\n >\n <div className=\"absolute left-3 top-4 flex h-5 w-5 items-center justify-center\">\n {variant === \"success\" && <CheckCircleIcon className=\"h-5 w-5 text-green-500\" />}\n {variant === \"warning\" && <ExclamationTriangleIcon className=\"h-5 w-5 text-yellow-500\" />}\n {variant === \"error\" && <InformationCircleIcon className=\"h-5 w-5 text-red-500\" />}\n </div>\n {children}\n </ToastPrimitives.Root>\n );\n});\nToast.displayName = ToastPrimitives.Root.displayName;\n\nconst ToastAction = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Action>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Action\n ref={ref}\n className={cn(\n \"ring-offset-background hover:bg-secondary focus:ring-ring mt-2 inline-flex shrink-0 items-center justify-center bg-transparent text-sm font-medium text-blue-600 transition-colors hover:underline focus:outline-none focus:ring-0 focus:ring-offset-0 disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n {...props}\n />\n));\nToastAction.displayName = ToastPrimitives.Action.displayName;\n\nconst ToastClose = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Close>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Close\n ref={ref}\n className={cn(\n \"absolute right-2 top-2 flex h-8 w-8 items-center justify-center rounded-md text-gray-800 transition-opacity hover:opacity-70 focus:opacity-100 focus:outline-none focus:ring-2\",\n className\n )}\n toast-close=\"\"\n {...props}\n >\n <XMarkIcon className=\"h-5 w-5\" />\n </ToastPrimitives.Close>\n));\nToastClose.displayName = ToastPrimitives.Close.displayName;\n\nconst ToastTitle = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Title>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Title\n ref={ref}\n className={cn(\"text-base font-semibold leading-tight\", className)}\n {...props}\n />\n));\nToastTitle.displayName = ToastPrimitives.Title.displayName;\n\nconst ToastDescription = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Description>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Description\n ref={ref}\n className={cn(\"text-sm opacity-90\", className)}\n {...props}\n />\n));\nToastDescription.displayName = ToastPrimitives.Description.displayName;\n\ntype ToastProps = React.ComponentPropsWithoutRef<typeof Toast>;\n\ntype ToastActionElement = React.ReactElement<typeof ToastAction>;\n\nexport {\n type ToastProps,\n type ToastActionElement,\n ToastProvider,\n ToastViewport,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastAction,\n};\n","\"use client\";\n\nimport {\n Toast,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n} from \"./Toast\";\nimport { useToast } from \"./useToast\";\n\nexport function Toaster() {\n const { toasts } = useToast();\n\n return (\n <ToastProvider>\n {toasts.map(function ({ id, title, description, action, ...props }) {\n return (\n <Toast key={id} {...props}>\n <div className=\"grid gap-2\">\n {title && <ToastTitle>{title}</ToastTitle>}\n {description && (\n <ToastDescription>{description}</ToastDescription>\n )}\n </div>\n {action}\n <ToastClose />\n </Toast>\n );\n })}\n <ToastViewport />\n </ToastProvider>\n );\n}\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipArrow = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Arrow>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Arrow> & {\n className?: string;\n }\n>((props, ref) => (\n <TooltipPrimitive.Arrow\n ref={ref}\n className={cn(\"drop-shadow-md\", props.className)}\n {...props}\n />\n));\nTooltipArrow.displayName = TooltipPrimitive.Arrow.displayName;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & {\n type?: \"dark\" | \"light\";\n }\n>(({ className, type = \"dark\", sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 p-1.5 shadow-md\",\n type === \"light\"\n ? \"bg-white text-gray-900 fill-white\"\n : \"bg-gray-800 fill-gray-800 text-white\",\n className,\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n TooltipArrow,\n};\n","import {\n ChangeEvent,\n FocusEvent,\n forwardRef,\n InputHTMLAttributes,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport {\n QuestionMarkCircleIcon,\n XCircleIcon,\n XCircleIcon as XCircleIconSolid,\n} from \"@heroicons/react/16/solid\";\nimport { cn } from \"../../helpers/utils\";\n\nexport interface TextInputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n message?: string;\n isError?: boolean;\n inputClassName?: string;\n withClearButton?: boolean;\n size?: 1 | 2;\n onClickClear?: (inputValue: string) => void;\n}\n\nexport const TextInput = forwardRef<HTMLInputElement, TextInputProps>(\n (\n {\n disabled,\n isError,\n message,\n label,\n className,\n inputClassName,\n withClearButton,\n size,\n onChange,\n onFocus,\n onClickClear,\n value,\n defaultValue,\n type = \"text\",\n ...restProps\n },\n ref,\n ) => {\n const [clearable, setClearable] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n\n const handleShowClearButton = (inputValue) => {\n if (inputValue && !clearable) {\n setClearable(true);\n }\n\n if (!inputValue && clearable) {\n setClearable(false);\n }\n };\n\n const onChangeFactory = (event: ChangeEvent<HTMLInputElement>) => {\n if (withClearButton) handleShowClearButton(event.target.value);\n onChange?.(event);\n };\n\n const onFocusFactory = (event: FocusEvent<HTMLInputElement, Element>) => {\n if (withClearButton) handleShowClearButton(event.target.value);\n onFocus?.(event);\n };\n\n const handleClear = () => {\n const inputTarget = rootRef.current?.querySelector(\"input\");\n if (!inputTarget) return;\n onClickClear?.(inputTarget.value);\n\n inputTarget.value = \"\";\n inputTarget.focus();\n setClearable(false);\n };\n\n useEffect(() => {\n handleShowClearButton(defaultValue || value);\n }, [value, defaultValue]);\n\n return (\n <div\n className={cn(className, isError && \"mobase-text-input-error\")}\n ref={rootRef}\n >\n <div className=\"relative\">\n {label && (\n <span\n className={cn(\n \"mobase-text-input-label absolute bg-white -top-2 px-1.5 left-2 text-xs text-gray-500\",\n size === 2 && \" -top-2.5 text-sm\",\n )}\n >\n {label}\n </span>\n )}\n <input\n disabled={disabled}\n type={type}\n ref={ref}\n className={cn(\n \"mobase-text-input-box bg-white w-full transition-all text-sm rounded-md border border-gray-300 placeholder:text-gray-500 p-3 text-gray-900 h-11 focus:border-pink-500 disabled:bg-gray-50 disabled:border-gray-200 disabled:pointer-events-none block outline-none\",\n size === 2 && \"h-12 text-base\",\n inputClassName,\n )}\n onChange={onChangeFactory}\n onFocus={onFocusFactory}\n value={value}\n defaultValue={defaultValue}\n {...restProps}\n />\n\n {withClearButton && clearable && (\n <button\n aria-label=\"button\"\n type=\"button\"\n className=\"absolute right-3 top-1/2 -translate-y-1/2 shrink-0 cursor-pointer text-gray-500 duration-200 hover:opacity-70 disabled:pointer-events-none\"\n disabled={disabled}\n onClick={handleClear}\n >\n <XCircleIcon strokeWidth={2} width={20} height={20} />\n </button>\n )}\n </div>\n\n {message && (\n <div className=\"mobase-text-input-message flex space-x-1 items-center mt-0.5\">\n {isError ? (\n <XCircleIconSolid\n width={16}\n height={16}\n className=\"text-red-500\"\n />\n ) : (\n <QuestionMarkCircleIcon\n width={16}\n height={16}\n className=\"text-gray-500\"\n />\n )}\n <span\n className={cn(\n \"text-gray-500 \",\n size === 2 ? \"text-sm\" : \"text-xs\",\n )}\n >\n {message}\n </span>\n </div>\n )}\n\n <style>\n {`\n .mobase-text-input-box:hover {\n box-shadow: 0px 0px 0px 1px rgb(var(--mobase-gray-400) / 1) inset;\n }\n\n .mobase-text-input-box:focus , .mobase-text-input-box:focus-visible {\n box-shadow: 0px 0px 0px 1px rgb(var(--mobase-pink-500) / 1) inset;\n }\n\n .mobase-text-input-error {\n .mobase-text-input-label {\n color: rgb(var(--mobase-red-500) / 1);\n }\n\n .mobase-text-input-box {\n box-shadow: 0px 0px 0px 1px rgb(var(--mobase-red-500) / 1) inset;\n border-color: rgb(var(--mobase-red-500) / 1);\n }\n\n .mobase-text-input-message span {\n color: rgb(var(--mobase-red-500) / 1);\n }\n }\n `}\n </style>\n </div>\n );\n },\n);\n","import { MinusCircleIcon, PlusCircleIcon } from \"@heroicons/react/24/outline\";\nimport { IconButton } from \"../IconButton\";\nimport {\n ChangeEvent,\n forwardRef,\n InputHTMLAttributes,\n useState,\n} from \"react\";\nimport { cn } from \"../../helpers/utils\";\n\n\nexport interface StepperProps extends InputHTMLAttributes<HTMLInputElement> {\n min?: number;\n max?: number;\n step?: number;\n defaultValue?: number;\n onChangeValue?: (value: number) => void;\n onDecrease?: (value: number) => void;\n onIncrease?: (value: number) => void;\n disabled?: boolean;\n}\n\nexport const Stepper = forwardRef<HTMLDivElement, StepperProps>(\n (\n {\n className, \n min = 0, \n max = 10, \n step = 1, \n defaultValue = 0, \n onChangeValue, \n onDecrease, \n onIncrease, \n disabled = false, \n ...props }\n , ref\n ) => {\n const [value, setValue] = useState(defaultValue)\n\n const increment = () => {\n const newValue = Math.min(value + step, max)\n setValue(newValue)\n onChangeValue?.(newValue)\n onIncrease?.(newValue)\n }\n const decrement = () => {\n const newValue = Math.max(value - step, min)\n setValue(newValue)\n onChangeValue?.(newValue)\n onDecrease?.(newValue)\n }\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n const inputValue = parseFloat(e.target.value)\n if (!isNaN(inputValue)) {\n const newValue = Math.max(Math.min(inputValue, max), min)\n setValue(newValue)\n onChangeValue?.(newValue)\n }\n }\n\n return (\n <div\n ref={ref}\n className={cn(\"flex items-center \", className)}\n >\n <IconButton\n className={cn(\" text-pink-500 cursor-pointer w-9 h-9\",\n disabled && \"text-gray-400 cursor-default\"\n )}\n variant=\"transparent\"\n onClick={decrement}\n disabled={disabled || value <= min}\n >\n <MinusCircleIcon className=\"w-7 h-7 \" />\n <span className=\"sr-only\">Decrease value</span>\n </IconButton>\n\n <input\n type=\"number\"\n value={value}\n onChange={handleInputChange}\n className=\"flex text-center min-w-8 w-8 h-8 border-0 bg-white text-base text-gray-900 ring-offset-none placeholder:text-gray-500 font-medium focus-visible:outline-none focus-visible:ring-0 focus:ring-0 shadow-none focus-visible:ring-offset-0 shadow-none disabled:cursor-not-allowed disabled:opacity-50 [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none\"\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n {...props}\n />\n\n <IconButton\n className={cn(\" text-pink-500 cursor-pointer w-9 h-9\",\n disabled && \"text-gray-400 cursor-default\"\n )}\n variant=\"transparent\"\n onClick={increment}\n disabled={disabled || value >= max}\n >\n <PlusCircleIcon className=\"w-7 h-7 \" />\n <span className=\"sr-only\">Increase value</span>\n </IconButton>\n </div>\n )\n\n })\n\nStepper.displayName = \"Stepper\"","// import { buttonVariants } from \"../Button/Button\";\nimport { cn } from \"../../helpers/utils\";\nimport * as React from \"react\"\nimport * as NavigationMenuPrimitive from \"@radix-ui/react-navigation-menu\"\nimport { cva } from \"class-variance-authority\"\nimport { ChevronDownIcon } from \"@heroicons/react/16/solid\";\nimport { buttonVariants } from \"../Button/Button\";\n\ntype AlignDropdown = \"left\" | \"right\" | \"center\";\ninterface NavigationMenuProviderProps {\n value: { alignDropdown?: AlignDropdown };\n children: React.ReactNode;\n}\n\nconst NavigationMenuContext = React.createContext<null | { alignDropdown?: AlignDropdown }>(null);\n\nconst NavigationMenuProvider: React.FC<NavigationMenuProviderProps> = ({ value, children }) => {\n return (\n <NavigationMenuContext.Provider value={value}>\n {children}\n </NavigationMenuContext.Provider>\n );\n};\n\nconst useNavigationMenu = (): { alignDropdown?: AlignDropdown } => {\n const context = React.useContext(NavigationMenuContext);\n if (!context) {\n throw new Error(\n \"useNavigationMenu must be used within a NavigationMenuProvider\"\n );\n }\n return context;\n};\n\nconst NavigationMenu = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Root> & {\n alignDropdown?: AlignDropdown;\n }\n>(({ className, children, alignDropdown = \"left\", ...props }, ref) => (\n <NavigationMenuProvider value={{ alignDropdown }}>\n <NavigationMenuPrimitive.Root\n ref={ref}\n className={cn(\n \"relative z-10 flex max-w-max flex-1 items-center justify-center\",\n className\n )}\n {...props}\n >\n {children}\n {/* <NavigationMenuViewport /> */}\n </NavigationMenuPrimitive.Root>\n </NavigationMenuProvider>\n))\nNavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName\n\nconst NavigationMenuList = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.List>\n>(({ className, ...props }, ref) => (\n <NavigationMenuPrimitive.List\n ref={ref}\n className={cn(\n \"group flex flex-1 list-none items-center justify-center space-x-0\",\n className\n )}\n {...props}\n />\n))\nNavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName\n\nconst NavigationMenuItem = NavigationMenuPrimitive.Item\n\nconst navigationMenuTriggerStyle = cva(\n buttonVariants({\n variant: \"transparent\",\n size: \"sm\",\n })\n)\n\nconst NavigationMenuTrigger = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <NavigationMenuPrimitive.Trigger\n ref={ref}\n className={cn(navigationMenuTriggerStyle(), \"group px-2\", className)}\n {...props}\n >\n {children}{\" \"}\n <ChevronDownIcon\n className=\"relative ml-1 h-4 w-4 transition duration-300 group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n))\nNavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName\n\nconst NavigationMenuContent = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content>\n>(({ className, ...props }, ref) => {\n const { alignDropdown } = useNavigationMenu();\n return (<NavigationMenuPrimitive.Content\n ref={ref}\n className={cn(\n \"absolute top-full mt-3 rounded-lg bg-white text-gray-900 ring-1 ring-gray-900/5 shadow-[0_10px_32px_rgba(34,42,53,0.15),0_1px_1px_rgba(0,0,0,0.05),0_4px_6px_rgba(34,42,53,0.08),0_1px_1px_rgba(34,42,53,0.1),0_24px_68px_rgba(47,48,55,0.1)]\",\n className, \"before:content-[''] before:absolute before:-top-3 before:left-0 before:right-0 before:w-full before:bg-transparent before:opacity-0 before:h-3\", alignDropdown !== 'center' && \"data-[state=open]:animate-in data-[state=open]:fade-in data-[state=open]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out \", \n alignDropdown === 'left' && \"left-0\",\n alignDropdown === 'right' && \"right-0\",\n alignDropdown === 'center' && \" left-1/2 -translate-x-1/2 \"\n )}\n\n {...props}\n />)\n})\nNavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName\n\nconst NavigationMenuLink = NavigationMenuPrimitive.Link\n\nconst NavigationMenuViewport = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Viewport>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Viewport>\n>(({ className, ...props }, ref) => (\n <div className={cn(\"absolute left-0 top-full flex justify-center\")}>\n <NavigationMenuPrimitive.Viewport\n className={cn(\n \"origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]\",\n className\n )}\n ref={ref}\n {...props}\n />\n </div>\n))\nNavigationMenuViewport.displayName =\n NavigationMenuPrimitive.Viewport.displayName\n\nconst NavigationMenuIndicator = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Indicator>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Indicator>\n>(({ className, ...props }, ref) => (\n <NavigationMenuPrimitive.Indicator\n ref={ref}\n className={cn(\n \"top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in\",\n className\n )}\n {...props}\n >\n <div className=\"relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md\" />\n </NavigationMenuPrimitive.Indicator>\n))\nNavigationMenuIndicator.displayName =\n NavigationMenuPrimitive.Indicator.displayName\n\n\nexport {\n navigationMenuTriggerStyle,\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n}\n","import * as React from \"react\";\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-5 w-10 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-default disabled:opacity-20 data-[state=checked]:bg-pink-500 data-[state=unchecked]:bg-gray-400\",\n className,\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n \"pointer-events-none relative cik before:content-[''] before:absolute before:w-1.5 before:h-1.5 before:rounded-full before:bg-pink-600 before:-translate-x-1/2 before:translate-y-1 disabled:opacity-20 before:data-[state=unchecked]:bg-gray-400 block h-3.5 w-3.5 bg-white rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0.5\",\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","import * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { Circle } from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../helpers/utils\";\n\nconst radioVariants = cva(\n \"aspect-square rounded-full border-2 border-gray-300 disabled:bg-gray-100 disabled:data-[state=checked]:text-gray-100 data-[state=checked]:text-white disabled:data-[state=checked]:bg-gray-400 data-[state=checked]:bg-pink-500 data-[state=checked]:border-none ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-default peer\",\n {\n variants: {\n size: {\n medium: \"h-4 w-4\",\n large: \"w-5 h-5\",\n },\n },\n defaultVariants: {\n size: \"medium\",\n },\n }\n);\n\nconst radioCircleVariants = cva(\"fill-current text-current\", {\n variants: {\n size: {\n medium: \"h-2 w-2 \",\n large: \"w-2.5 h-2.5\",\n },\n },\n defaultVariants: {\n size: \"medium\",\n },\n});\n\nconst RadioGroupContext = React.createContext<\n VariantProps<typeof radioVariants>\n>({\n size: \"medium\",\n});\n\nexport function useChoiceboxGroupContext() {\n const context = React.useContext(RadioGroupContext);\n\n if (!context) {\n throw new Error(\n \"ChoiceboxGroup.Item must be used within a ChoiceboxGroup \"\n );\n }\n return context;\n}\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> &\n VariantProps<typeof radioVariants>\n>(({ className, size, ...props }, ref) => {\n return (\n <RadioGroupContext.Provider value={{ size }}>\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n </RadioGroupContext.Provider>\n );\n});\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n const context = useChoiceboxGroupContext();\n const { size } = context ?? {};\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(radioVariants({ size }), className)}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center w-full h-full rounded-full \">\n <Circle className={cn(radioCircleVariants({ size }))} />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n});\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n","import { ReactElement, useState } from \"react\";\nimport { ArrowDownTrayIcon } from \"@heroicons/react/16/solid\";\nimport parse from \"html-react-parser\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { Button } from \"../Button\";\nimport { DialogQr } from \"../DialogQr\";\nimport MobileMenu from \"./MobileMenu\";\nimport NavItems from \"./NavItems\";\n\ninterface ComponentData {\n title: string;\n icon: string;\n url: string;\n description: string;\n newTab: boolean;\n}\n\ninterface MainNavItemWithDropdown {\n id: number;\n title: string;\n hasDropdown: boolean;\n dropDownCompact: boolean;\n subMenu: ComponentData[];\n}\n\ninterface MainNavItemWithoutDropdown {\n id: number;\n title: string;\n hasDropdown: boolean;\n url: string;\n newTab: boolean;\n}\n\ntype MainNavItem = MainNavItemWithDropdown | MainNavItemWithoutDropdown;\n\ninterface ServiceInfo {\n logo?: string;\n name?: string;\n url: string;\n}\nexport interface HeaderNavigationProps {\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * Data menu\n */\n dataMenu: MainNavItem[];\n /**\n * Service info\n */\n serviceInfo?: ServiceInfo;\n /**\n * Right Navigation\n */\n navigationRight?: ReactElement;\n /**\n * Has Download App\n */\n hasDownloadApp?: Boolean;\n /**\n * Has sticky Navigation Header, default is true\n */\n isSticky?: Boolean;\n /**\n * Align dropdown menu position\n */\n alignDropdown?: \"left\" | \"right\" | \"center\";\n /**\n * Logo visible\n * @default true\n */\n isLogoVisible?: Boolean;\n}\n\nconst HeaderNavigation = ({\n className,\n dataMenu,\n serviceInfo,\n hasDownloadApp = false,\n navigationRight,\n isSticky = true,\n alignDropdown = \"left\",\n isLogoVisible = true,\n}: HeaderNavigationProps) => {\n const { logo, name, url } = serviceInfo || {};\n const [openDialogQr, setOpenDialogQr] = useState<boolean>(false);\n return (\n <div\n className={cn(\n className,\n \"z-40 w-full flex-none lg:z-50 \",\n isSticky ? \"sticky top-0 \" : \"relative\"\n )}\n >\n <div\n className={cn(\n \"absolute h-full w-full bg-white shadow-[inset_0px_-1px_0px_0px_rgba(0,0,0,0.08)]\"\n )}\n />\n <nav\n className={cn(\n \"wrapper grid grid-cols-1 items-center [--header-height-mobase:64px] lg:border-0 \"\n )}\n style={{ minHeight: \"var(--header-height-mobase)\" }}\n >\n <div className=\"relative flex items-center \">\n {isLogoVisible && ( <a\n href=\"/\"\n title=\"MoMo\"\n className=\"mr-3 h-9 w-9 flex-none overflow-hidden rounded-none hover:opacity-80\"\n >\n <span className=\"sr-only\">MoMo home page</span>\n <img\n src=\"https://homepage.momocdn.net/fileuploads/svg/momo-file-240411162904.svg\"\n className=\"h-9 w-9\"\n alt=\"MoMo\"\n />\n </a>)}\n \n {serviceInfo && (\n <a\n href={url}\n title={name}\n className={cn(\"relative flex flex-none items-center space-x-1 rounded-none hover:opacity-80\", isLogoVisible && \"pl-2 after:absolute after:left-0 after:h-8 after:w-[1px] after:bg-gray-300 after:content-['']\")}\n >\n <img src={logo} className=\"h-9 w-9\" alt=\"MoMo\" />\n\n <div className=\"line-clamp-2 text-sm font-semibold leading-[1.1] text-pink-500\">\n {name && parse(name)}\n </div>\n </a>\n )}\n\n <div\n className={cn(\n \"relative hidden items-center lg:ml-2 lg:flex xl:ml-4 \",\n !navigationRight && !hasDownloadApp && \" lg:ml-auto xl:ml-auto\"\n )}\n >\n <NavItems data={dataMenu} alignDropdown={alignDropdown} />\n </div>\n <div\n className={cn(\n \"ml-auto flex flex-nowrap items-center space-x-3\",\n !navigationRight && !hasDownloadApp && \" lg:ml-0\"\n )}\n >\n {navigationRight && navigationRight}\n {hasDownloadApp && (\n <div className=\" hidden sm:flex\">\n <Button\n variant={\"primary\"}\n size={\"sm\"}\n className=\"tracking-cta-header\"\n onClick={() => setOpenDialogQr(true)}\n >\n {\" \"}\n <ArrowDownTrayIcon className=\"mr-1 h-4 w-4\" /> Tải Ví MoMo\n </Button>\n <DialogQr\n open={openDialogQr}\n onOpenChange={() => setOpenDialogQr(false)}\n title=\"Quét mã để tải Ví MoMo\"\n shortTitle=\"Tải ngay\"\n qrLink={\"http://momo.vn/download\"}\n />\n </div>\n )}\n <MobileMenu data={dataMenu} className=\"lg:hidden \" />\n </div>\n </div>\n </nav>\n </div>\n );\n};\nHeaderNavigation.displayName = \"HeaderNavigation\";\n\nexport { HeaderNavigation };\n","import { useEffect, useState } from \"react\";\nimport Router from \"next/router\";\nimport { AnimatePresence, domAnimation, LazyMotion, motion } from \"motion/react\";\nimport { useKey } from \"react-use\";\n\nimport { DEFAULT_EASE } from \"../../helpers/animations\";\nimport { MoMoText } from \"../../helpers/constants\";\nimport { cn } from \"../../helpers/utils\";\nimport NavItemsMobile from \"./NavItemsMobile\";\n\ninterface Props {\n data: any;\n className?: string;\n}\n\nconst computeInsetTop = () =>\n typeof window !== \"undefined\" && window.pageYOffset !== undefined ? window.pageYOffset : 0;\n\nconst MobileMenu = ({ data, className }: Props) => {\n // useKey(\"Escape\", () => setOpen(false));\n const [isOpen, setIsOpen] = useState(false);\n const [isHashChange, setIsHashChange] = useState(false);\n\n useKey(\"Escape\", () => setIsOpen(false));\n\n useEffect(() => {\n if (!isOpen) return;\n const memoizedInsetTop = computeInsetTop();\n function handleRouteChange() {\n setIsOpen(false);\n }\n\n function handleHashChange() {\n setIsOpen(false);\n setIsHashChange(true);\n }\n function handleHashClick(e) {\n const target = e.target as HTMLElement;\n if (target.tagName === \"A\" && target.getAttribute(\"href\")?.startsWith(\"#\")) {\n setIsOpen(false);\n setIsHashChange(true);\n }\n }\n\n document.body.style.position = \"fixed\";\n document.body.style.width = \"100%\";\n Router.events.on(\"routeChangeComplete\", handleRouteChange);\n //Check if url is Hashtag, mean browser not reload page\n window.addEventListener(\"hashchange\", handleHashChange);\n window.addEventListener(\"click\", handleHashClick);\n return () => {\n if (!isHashChange) {\n document.body.style.position = \"\";\n document.body.style.width = \"\";\n window.scrollTo({\n top: memoizedInsetTop || 0,\n behavior: \"instant\",\n });\n }\n setIsHashChange(false);\n Router.events.off(\"routeChangeComplete\", handleRouteChange);\n window.removeEventListener(\"hashchange\", handleHashChange);\n window.removeEventListener(\"click\", handleHashClick);\n };\n }, [isOpen]);\n\n const variants = {\n visible: { opacity: 1, transition: { duration: 0.2 } },\n hidden: { opacity: 0, transition: { duration: 0.2 } },\n };\n\n const containerVariants = {\n hidden: { opacity: 0 },\n show: {\n opacity: 1,\n transition: {\n duration: 0.15,\n staggerChildren: 0.05,\n ease: DEFAULT_EASE,\n },\n },\n exit: { opacity: 0, transition: { duration: 0.15 } },\n };\n\n return (\n <div className={cn(className)}>\n <button\n type=\"button\"\n className=\"mobase-header-hamburger flex h-10 w-10 items-center justify-center text-gray-800 hover:text-gray-700 \"\n onClick={() => setIsOpen(!isOpen)}\n >\n <span className=\"sr-only\">Navigation</span>\n <motion.div animate={isOpen ? \"hidden\" : \"visible\"} variants={variants}>\n <svg\n className={cn(\"block h-7 w-7\", isOpen && \"hidden\")}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M4 6h16M4 12h16M4 18h16\"\n />\n </svg>\n </motion.div>\n <motion.div animate={isOpen ? \"visible\" : \"hidden\"} variants={variants}>\n <svg\n className={cn(\"block h-7 w-7\", !isOpen && \"hidden\")}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </motion.div>\n </button>\n\n <LazyMotion features={domAnimation}>\n <AnimatePresence mode=\"wait\">\n {isOpen && (\n <motion.nav\n variants={containerVariants}\n initial=\"hidden\"\n animate=\"show\"\n exit=\"exit\"\n className={cn(\n className,\n \"fixed bottom-0 left-0 right-0 top-[calc(var(--header-height-mobase)+1px)] z-50 block w-full max-w-full overflow-y-auto bg-white px-5 pb-24 \"\n )}\n >\n <NavItemsMobile data={data} />\n\n <div className=\"animate-fade-in mobase-header-mobile-support py-4 text-sm delay-300 duration-500\">\n <h4 className=\"mb-2 mt-5 text-sm font-semibold text-gray-700 \">TẢI VÀ ĐĂNG KÝ</h4>\n\n <div className=\"flex flex-nowrap\">\n <div className=\"flex-initial\">\n <a\n className=\"link-white\"\n target=\"_blank\"\n href=\"https://itunes.apple.com/vn/app/id918751511?utm_source=website-momo&utm_medium=download&utm_campaign=momo-1dong\"\n >\n <img\n src=\"https://homepage.momocdn.net/img/momo-upload-api-210724113855-637627235353131497.jpg\"\n width={130}\n loading=\"lazy\"\n className=\"img-fluid\"\n alt=\"\"\n />\n </a>\n </div>\n <div className=\"ml-3 flex-initial\">\n <a\n href=\"https://play.google.com/store/apps/details?id=com.mservice.momotransfer&utm_source=website-momo&utm_medium=download&utm_campaign=momo-1dong\"\n className=\"link-white\"\n target=\"_blank\"\n >\n <img\n src=\"https://homepage.momocdn.net/img/momo-upload-api-210724113959-637627235994410679.jpg\"\n width={130}\n loading=\"lazy\"\n className=\"img-fluid\"\n alt=\"\"\n />\n </a>\n </div>\n </div>\n\n <h4 className=\"mb-2 mt-5 text-sm font-semibold text-gray-700\">HỖ TRỢ KHÁCH HÀNG</h4>\n\n <ul className=\"mb-2 text-sm text-gray-500\">\n <li className=\"mb-1\">\n Hotline : \n <a href={`tel:${MoMoText.Support.Hotline}`} className=\"text-gray-600\">\n {MoMoText.Support.Hotline_Format}\n </a>\n </li>\n <li className=\"mb-1\">\n Email : \n <a href={`mailto:${MoMoText.Support.Email}`} className=\"text-gray-600\">\n {MoMoText.Support.Email}\n </a>\n </li>\n </ul>\n <a\n href=\"https://www.momo.vn/huong-dan/huong-dan-gui-yeu-cau-ho-tro-bang-tinh-nang-tro-giup\"\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n <div className=\"relative inline-block overflow-hidden rounded border border-gray-300 bg-white py-1 pl-10 pr-2 hover:bg-gray-100\">\n <div className=\"absolute left-1 top-1 \" style={{ paddingTop: \"3px\" }}>\n <svg\n className=\"h-7 w-7 text-pink-700 \"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n viewBox=\"0 0 345.1 512\"\n >\n <g>\n <title>Asset 1</title>\n <path\n d=\"M279.4,23.7H30.8C14.5,23.7,0,38.2,0,56.3v401.8c0,16.3,14.5,30.8,30.8,30.8H76h23.8L76,449.4H34.5V96.2h243.1v152l34.5,22\n V56.3C312,38.2,297.5,23.7,279.4,23.7z M226.8,77.1H86.1c-8.1,0-13.5-5.4-13.5-13.5c0-8.1,5.4-13.5,13.5-13.5h140.8\n c5.4,0,10.8,5.4,10.8,13.5C237.7,71.7,232.3,77.1,226.8,77.1z\"\n />\n <path\n d=\"M189.4,200.7c-14.4,0-25.9,11.6-25.9,25.9v155.7l-17.3-34.6c-14.2-26.3-28.1-23.6-38.9-17.3c-12.5,8.3-17.2,17-8.6,38.9\n c19.6,48.2,49.8,105.6,82.2,142.7h116.7c41-30.4,74-175,17.3-181.6c-5.2,0-13.5,0.8-17.3,4.3c0-17.3-15.1-21.7-21.6-21.6\n c-7.5,0.1-13,4.3-17.3,13c0-17.3-14.1-21.6-21.6-21.6c-8.3,0-17.9,5.2-21.6,13v-90.8C215.4,212.3,203.8,200.7,189.4,200.7z\"\n />\n </g>\n </svg>\n </div>\n <div className=\"text-xs text-gray-500 \">Hướng dẫn trợ giúp trên</div>\n <div className=\"text-sm font-semibold text-gray-800\">Ứng dụng Ví MoMo</div>\n </div>\n </a>\n <h4 className=\"mb-2 mt-5 text-sm font-semibold text-gray-700\">\n HỢP TÁC DOANH NGHIỆP\n </h4>\n\n <ul className=\"mb-2 text-sm text-gray-500\">\n <li className=\"mb-1\">\n Hotline : \n <a className=\"text-gray-600\" href={`tel:${MoMoText.Business.Phome}`}>\n {MoMoText.Business.Phome_Format}\n </a>\n </li>\n <li className=\"mb-1\">\n Email : \n <a href={`mailto:${MoMoText.Business.Email}`} className=\"text-gray-600\">\n {\" \"}\n {MoMoText.Business.Email}\n </a>\n </li>\n </ul>\n\n <a href=\"https://business.momo.vn/#menutop\" rel=\"noreferrer\" target=\"_blank\">\n <div className=\"relative inline-block overflow-hidden rounded border border-gray-300 bg-white py-1 pl-12 pr-2 hover:bg-gray-100\">\n <div className=\"absolute left-1 top-1 \">\n <img\n src=\"https://homepage.momocdn.net/fileuploads/svg/momo-file-210724114053.svg\"\n className=\"w-10\"\n loading=\"lazy\"\n alt=\"\"\n />\n </div>\n <div className=\"text-xs text-gray-500 \">Hợp tác doanh nghiệp</div>\n <div className=\"text-sm font-semibold text-gray-800\">Đăng ký hợp tác</div>\n </div>\n </a>\n </div>\n\n {/* <div className=\"fixed inset-x-0 bottom-0 grid grid-cols-1 gap-x-5 px-4 py-6 bg-white\">\n <a\n className={cn(\"w-full tracking-cta-header\",\n buttonVariants({ variant: \"primary\", size: \"lg\" })\n )}\n target=\"_blank\"\n href=\"http://momo.vn/download\"\n >\n <ArrowDownTrayIcon className=\"mr-1 w-4 h-4\" /> Tải Ví MoMo\n </a>\n </div> */}\n </motion.nav>\n )}\n </AnimatePresence>\n </LazyMotion>\n </div>\n );\n};\n\nexport default MobileMenu;\n","export const DEFAULT_EASE = [0.24, 0.25, 0.05, 1]\nexport const DEFAULT_DURATION = 0.4\nexport const DEFAULT_DELAY = 0\nexport const DEFAULT_TRANSITION = { ease: DEFAULT_EASE, duration: DEFAULT_DURATION }\n\ninterface AnimationProps {\n delay?: number\n duration?: number\n ease?: number\n}\n\nexport const INITIAL_BOTTOM = { opacity: 0, y: 20 }\nexport const getAnimation = ({ delay, duration, ease }: AnimationProps) => ({\n opacity: 1,\n y: 0,\n transition: {\n delay: delay ?? DEFAULT_DELAY,\n ease: ease ?? DEFAULT_EASE,\n duration: duration ?? DEFAULT_DURATION,\n },\n})\n","import { motion } from \"motion/react\";\n\nimport { DEFAULT_EASE } from \"../../helpers/animations\";\nimport { cn } from \"../../helpers/utils\";\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from \"../Accordion/index\";\nimport ListItemMobile from \"./ListItemMobile\";\n\nconst listItem = {\n hidden: { opacity: 0, y: 10 },\n show: {\n opacity: 1,\n y: 0,\n transition: { duration: 0.25, ease: DEFAULT_EASE },\n },\n exit: { opacity: 0, transition: { duration: 0.05 } },\n};\n\nconst NavItemsMobile = ({ data }: any) => {\n return (\n <Accordion type=\"single\" collapsible>\n {data.map((menuItem) => {\n const linkProps = menuItem.newTab ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {};\n return (\n <motion.div key={menuItem.id} variants={listItem}>\n {menuItem.hasDropdown ? (\n <AccordionItem value={menuItem.id}>\n <AccordionTrigger className=\"py-3\">{menuItem.title}</AccordionTrigger>\n <AccordionContent>\n <ul className={cn(\"grid grid-cols-2 gap-x-2 gap-y-1 \")}>\n {menuItem.subMenu &&\n menuItem.subMenu.map((component) => (\n <ListItemMobile\n key={component.title}\n title={component.title}\n href={component.url}\n newTab={component.newTab}\n icon={menuItem.dropDownCompact === true ? component.icon : \"\"}\n >\n {menuItem.dropDownCompact === true ? component.description : \"\"}\n </ListItemMobile>\n ))}\n </ul>\n </AccordionContent>\n </AccordionItem>\n ) : (\n <a\n className=\"flex flex-1 items-center justify-between border-b border-gray-200 py-3 text-left font-medium text-gray-900 transition-all hover:underline\"\n href={menuItem.url}\n {...linkProps}\n >\n {menuItem.title}\n </a>\n )}\n </motion.div>\n );\n })}\n </Accordion>\n );\n};\n\nexport default NavItemsMobile;\n","import { cn } from \"../../helpers/utils\";\n\nconst ListItemMobile = ({\n className = \"\",\n icon = \"\",\n title,\n children = \"\",\n href = \"\",\n newTab = false,\n}) => {\n const linkProps = newTab\n ? { target: \"_blank\", rel: \"noopener noreferrer\" }\n : {};\n return (\n <li className=\"min-h-8\">\n <a\n className={cn(\n \" select-none py-2 flex flex-nowrap space-x-1 items-center text\",\n className,\n )}\n href={href}\n {...linkProps}\n >\n {icon && (\n <div className=\"w-6 h-6 shrink-0\">\n <img\n src={icon}\n loading=\"lazy\"\n className=\"w-6 h-6 object-cover\"\n alt={title}\n />\n </div>\n )}\n\n <div className=\" \">\n <div className=\"text-sm text-gray-800 line-clamp-1\">{title}</div>\n {children && (\n <p className=\"line-clamp-1 text-xs mt-0 text-gray-500\">\n {children}\n </p>\n )}\n </div>\n </a>\n </li>\n );\n};\n\nexport default ListItemMobile;\n","import { cn } from \"../../helpers/utils\";\n\nimport { NavigationMenuLink } from \"../NavigationMenu/index\";\n\nconst ListItem = ({\n className = \"\",\n icon = \"\",\n title,\n children = \"\",\n href = \"\",\n newTab = false,\n}) => {\n const linkProps = newTab\n ? { target: \"_blank\", rel: \"noopener noreferrer\" }\n : {};\n return (\n <li className=\"\">\n <NavigationMenuLink asChild>\n <a\n className={cn(\n \" select-none space-y-1 rounded-md px-2 py-2 leading-none no-underline outline-none transition-colors hover:bg-pink-50 hover:text-pink-500 focus:bg-pink-50 focus:text-pink-500 flex flex-nowrap space-x-2 min-h-9 \",\n className,\n !icon && \"items-center px-3\"\n )}\n href={href}\n {...linkProps}\n >\n {icon && (\n <div className=\"w-7 h-7 shrink-0 mt-1\">\n <img\n src={icon}\n loading=\"lazy\"\n className=\"w-7 h-7 object-cover\"\n alt={title}\n />\n </div>\n )}\n\n <div className=\" \">\n <div className=\"text-sm font-medium text-gray-900 leading-none\">\n {title}\n </div>\n {children && (\n <p className=\"line-clamp-2 text-xs mt-1 text-gray-500\">\n {children}\n </p>\n )}\n </div>\n </a>\n </NavigationMenuLink>\n </li>\n );\n};\n\nexport default ListItem;\n","import { cn } from \"../../helpers/utils\";\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n} from \"../NavigationMenu/index\";\nimport ListItem from \"./ListItem\";\n\nconst NavItems = ({ data, alignDropdown }: any) => {\n return (\n <NavigationMenu alignDropdown={alignDropdown}>\n <NavigationMenuList>\n {data.map((menuItem) => {\n const linkProps = menuItem.newTab ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {};\n return menuItem.hasDropdown ? (\n <NavigationMenuItem className=\"relative\" key={menuItem.id}>\n <NavigationMenuTrigger>{menuItem.title}</NavigationMenuTrigger>\n <NavigationMenuContent>\n <ul\n className={cn(\n \"grid w-[300px] grid-cols-1 p-2\",\n menuItem.dropDownCompact === false && \"w-[230px]\",\n menuItem.dropDownCompact === false &&\n menuItem.subMenu.length > 10 &&\n \" w-[480px] md:grid-cols-2 \",\n menuItem.dropDownCompact === false &&\n menuItem.subMenu.length > 20 &&\n \" w-[700px] md:grid-cols-3 \",\n menuItem.dropDownCompact === true &&\n menuItem.subMenu.length > 6 &&\n \" w-[530px] md:grid-cols-2 \",\n menuItem.dropDownCompact === true &&\n menuItem.subMenu.length > 12 &&\n \" w-[800px] md:grid-cols-3 \"\n )}\n >\n {menuItem.subMenu &&\n menuItem.subMenu.map((component) => (\n <ListItem\n key={component.title}\n title={component.title}\n href={component.url}\n newTab={component.newTab}\n icon={menuItem.dropDownCompact === true ? component.icon : \"\"}\n >\n {menuItem.dropDownCompact === true ? component.description : \"\"}\n </ListItem>\n ))}\n </ul>\n </NavigationMenuContent>\n </NavigationMenuItem>\n ) : (\n <NavigationMenuItem className=\"relative\" key={menuItem.id}>\n <NavigationMenuLink\n href={menuItem.url}\n className={navigationMenuTriggerStyle()}\n {...linkProps}\n >\n {menuItem.title}\n </NavigationMenuLink>\n </NavigationMenuItem>\n );\n })}\n </NavigationMenuList>\n </NavigationMenu>\n );\n};\n\nexport default NavItems;\n","import { useState } from \"react\";\n\nimport { APP_DOWNLOAD, MOMO_TEXT, SOCIAL_ITEMS, SUPPORT } from \"../../helpers/constants\";\nimport { Button } from \"../Button\";\nimport { DialogQr } from \"../DialogQr\";\n\nconst FooterContentItem = ({ item }) => {\n return (\n <div className=\"mt-3 flex w-full text-sm\">\n <a\n href={item.url}\n target={item.newTab ? \"_blank\" : \"_self\"}\n rel=\"noreferrer\"\n className=\"flex items-center space-x-2 text-white text-opacity-50 duration-300 hover:text-opacity-100\"\n >\n {item.icon && (\n <span className=\"relative h-5 w-5 flex-none md:h-6 md:w-6\">\n <img src={item.icon} className=\"absolute inset-0\" />\n </span>\n )}\n\n <span className=\"block \">{item.title}</span>\n </a>\n </div>\n );\n};\n\nconst FooterContent = ({ primaryMenu, secondaryMenu }) => {\n const [openDialogQr, setOpenDialogQr] = useState<number | null>(null);\n return (\n <>\n <div className=\"footer-main order-1 py-7 text-sm text-white md:order-1\">\n <div className=\"wrapper grid grid-cols-2 gap-5 sm:gap-x-20 sm:gap-y-10 lg:flex lg:flex-nowrap lg:gap-14\">\n <div className=\"block grow md:w-44 md:shrink-0 md:border-none md:pb-0\">\n <div className=\"whitespace-nowrap text-xs font-bold uppercase text-white text-opacity-80\">\n {primaryMenu?.heading}\n </div>\n {primaryMenu?.lists?.map((item, index) => (\n <FooterContentItem key={index} item={item} />\n ))}\n </div>\n\n <div className=\" md:order-none md:w-40 md:flex-none md:shrink-0 md:border-none md:pb-0\">\n <div className=\"whitespace-nowrap text-xs font-bold uppercase text-white text-opacity-80\">\n {secondaryMenu?.heading}\n </div>\n <div className=\"flex flex-wrap\">\n {secondaryMenu?.lists?.map((item, index) => (\n <FooterContentItem key={index} item={item} />\n ))}\n </div>\n </div>\n\n <div className=\"col-span-2 grow border-t border-gray-700 pt-5 sm:col-span-1 md:border-none md:pt-0\">\n <div className=\"border-b border-gray-700 pb-5 md:border-0 md:pb-0\">\n <div className=\"whitespace-nowrap text-xs font-bold uppercase text-white text-opacity-80\">\n Chăm sóc khách hàng\n </div>\n <div className=\"mt-2 text-sm md:mt-3\">\n <span className=\"text-white text-opacity-50\">Địa chỉ : </span>\n <span className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\">\n {SUPPORT.Address}\n </span>\n </div>\n <div className=\"mt-1 text-sm\">\n <span className=\"text-white text-opacity-50\">Hotline : </span>\n <a\n className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\"\n href={`tel:${MOMO_TEXT.Support.Hotline}`}\n >\n {MOMO_TEXT.Support.Hotline_Format}\n </a>\n <small className=\"text-xs italic text-white text-opacity-60\">\n {\" \"}\n (Phí 1.000đ/phút)\n </small>\n </div>\n <div className=\"mt-1 text-sm\">\n <span className=\"text-white text-opacity-50\">Email : </span>\n <a\n className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\"\n href={`mailto:${MOMO_TEXT.Support.Email}`}\n >\n {MOMO_TEXT.Support.Email}\n </a>\n </div>\n <div className=\"mt-1 text-sm\">\n <span className=\"text-white text-opacity-50\">Tổng đài gọi ra : </span>\n <a\n className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\"\n href={`tel:${MOMO_TEXT.Support.Phone_Ext_1}`}\n >\n {MOMO_TEXT.Support.Phone_Ext_1_Format}\n </a>\n <span className=\"text-white text-opacity-60\"> - </span>\n <a\n className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\"\n href={`tel:${MOMO_TEXT.Support.Phone_Ext_2}`}\n >\n {MOMO_TEXT.Support.Phone_Ext_2_Format}\n </a>\n <span className=\"text-white text-opacity-60\"> - </span>\n <a\n className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\"\n href={`tel:${MOMO_TEXT.Support.Phone_Ext_3}`}\n >\n {MOMO_TEXT.Support.Phone_Ext_3_Format}\n </a>\n <span className=\"text-white text-opacity-60\">\n , các đầu số di động Brandname MoMo\n </span>\n </div>\n <div className=\"mt-3 flex\">\n <a\n href=\"https://www.momo.vn/huong-dan/huong-dan-gui-yeu-cau-ho-tro-bang-tinh-nang-tro-giup\"\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n <div className=\"relative block overflow-hidden rounded border border-gray-400 bg-black py-1 pl-10 pr-2\">\n <div className=\"absolute left-1 top-1 \" style={{ paddingTop: \"3px\" }}>\n <svg\n className=\"h-7 w-7 text-gray-100 \"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n viewBox=\"0 0 345.1 512\"\n >\n <g>\n <title>Asset 1</title>\n <path\n d=\"M279.4,23.7H30.8C14.5,23.7,0,38.2,0,56.3v401.8c0,16.3,14.5,30.8,30.8,30.8H76h23.8L76,449.4H34.5V96.2h243.1v152l34.5,22\n V56.3C312,38.2,297.5,23.7,279.4,23.7z M226.8,77.1H86.1c-8.1,0-13.5-5.4-13.5-13.5c0-8.1,5.4-13.5,13.5-13.5h140.8\n c5.4,0,10.8,5.4,10.8,13.5C237.7,71.7,232.3,77.1,226.8,77.1z\"\n />\n <path\n d=\"M189.4,200.7c-14.4,0-25.9,11.6-25.9,25.9v155.7l-17.3-34.6c-14.2-26.3-28.1-23.6-38.9-17.3c-12.5,8.3-17.2,17-8.6,38.9\n c19.6,48.2,49.8,105.6,82.2,142.7h116.7c41-30.4,74-175,17.3-181.6c-5.2,0-13.5,0.8-17.3,4.3c0-17.3-15.1-21.7-21.6-21.6\n c-7.5,0.1-13,4.3-17.3,13c0-17.3-14.1-21.6-21.6-21.6c-8.3,0-17.9,5.2-21.6,13v-90.8C215.4,212.3,203.8,200.7,189.4,200.7z\"\n />\n </g>\n </svg>\n </div>\n <div className=\"text-xs text-white text-opacity-70\">\n Hướng dẫn trợ giúp trên\n </div>\n <div className=\"text-xs font-bold uppercase text-white text-opacity-90\">\n Ứng dụng MoMo\n </div>\n </div>\n </a>\n </div>\n </div>\n <div className=\"mt-4 border-b border-gray-700 pb-5 md:mt-8 md:border-none md:pb-0\">\n <div className=\"whitespace-nowrap text-xs font-bold uppercase text-white text-opacity-80\">\n Hợp tác doanh nghiệp\n </div>\n <div className=\"mt-2 text-sm md:mt-3\">\n <span className=\"text-white text-opacity-50\">Hotline : </span>\n <a\n className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\"\n href={`tel:${MOMO_TEXT.Business.Phome}`}\n >\n {MOMO_TEXT.Business.Phome_Format}\n </a>\n </div>\n <div className=\"mt-1 text-sm\">\n <span className=\"text-white text-opacity-50\">Email : </span>\n <a\n className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\"\n href={`mailto:${MOMO_TEXT.Business.Email}`}\n >\n {MOMO_TEXT.Business.Email}\n </a>\n </div>\n <div className=\"mt-1 text-sm\">\n <span className=\"text-white text-opacity-50\">Website : </span>\n <a\n className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\"\n href=\"https://business.momo.vn/\"\n aria-label=\"MoMo Business\"\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n business.momo.vn\n </a>\n </div>\n <div className=\"mt-3 flex\">\n <a href=\"https://business.momo.vn/#menutop\" rel=\"noreferrer\" target=\"_blank\">\n <div className=\"relative block overflow-hidden rounded border border-gray-400 bg-black py-1 pl-12 pr-2 \">\n <div className=\"aspect-1 absolute left-1 top-1 flex items-center justify-center\">\n <svg\n width=\"30\"\n height=\"20\"\n viewBox=\"0 0 30 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"mt-2\"\n >\n <path\n d=\"M9.5688 5.21563C8.63815 5.98097 9.08817 8.15453 11.2556 6.84427C11.2556 6.84427 13.9037 5.51871 15.4497 4.6401C15.7864 4.4503 16.0129 4.51152 16.2946 4.83297C16.6038 5.05644 23.6112 12.8813 23.6112 12.8813C23.6112 12.8813 25.7725 11.2404 26.6144 9.51683C26.6144 9.51683 24.6735 5.8677 22.8214 2.24612C22.2857 2.5492 21.8265 2.83696 21.2111 2.66247C20.5744 2.48185 20.0478 1.98285 19.4723 1.64916C18.8171 1.26649 18.26 0.92362 17.5283 0.819534C16.4446 0.663406 15.5935 1.15016 14.6598 1.6859C13.5975 2.29511 12.5689 2.97779 11.5617 3.69414C10.8821 4.17171 10.2178 4.6799 9.5688 5.21563Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M10.9281 17.4029C10.5638 16.9008 10.6342 16.1538 11.0842 15.7344L13.3068 13.7109C13.7568 13.2884 14.415 13.3527 14.7793 13.8517C15.1436 14.3507 15.0731 15.0977 14.6231 15.5232L12.4006 17.5467C11.9536 17.9631 11.2924 17.9019 10.9281 17.4029Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M8.87706 15.5385C8.51275 15.0364 8.58317 14.2895 9.03318 13.867L10.7873 12.272C11.2374 11.8496 11.8955 11.9139 12.2598 12.4129C12.6241 12.9149 12.5537 13.6619 12.1037 14.0844L10.3496 15.6824C9.90261 16.1018 9.24136 16.0375 8.87706 15.5385Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M6.39426 14.014C6.05751 13.4905 6.1616 12.7496 6.62998 12.3547L7.02184 12.0486C7.49022 11.6537 8.14535 11.7608 8.48822 12.2812L8.51271 12.3118C8.85252 12.8353 8.72395 13.5456 8.2525 13.9405L7.86065 14.2466C7.39226 14.6415 6.73407 14.5374 6.39426 14.014Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M16.2182 16.2671C15.8325 15.7895 15.1712 15.762 14.7396 16.2089L13.7814 17.2039C13.3497 17.6508 13.313 18.4009 13.6987 18.8815C14.0844 19.3621 14.7488 19.3866 15.1773 18.9397L16.1355 17.9447C16.5672 17.4978 16.6039 16.7477 16.2182 16.2671Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M29.9207 7.86982C30.0799 8.1729 29.9911 8.53108 29.7278 8.66884L28.1145 9.51989C27.8512 9.65459 27.5084 9.51989 27.3522 9.21682L23.5255 1.81447C23.3694 1.5114 23.4551 1.15322 23.7184 1.01546L25.3317 0.167464C25.595 0.0297027 25.9379 0.167463 26.094 0.470537L29.9207 7.86982Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M2.61348 9.14334C2.49409 9.46479 2.18489 9.6454 1.92467 9.54744L0.299097 8.98415C0.0388821 8.88619 -0.0713265 8.54638 0.0480662 8.228L2.9839 0.430738C3.10329 0.109296 3.41249 -0.0713245 3.67271 0.0266388L5.29828 0.592989C5.5585 0.690952 5.66871 1.03076 5.54931 1.34914L2.61348 9.14334Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M23.5224 13.8395L23.5163 13.8333C23.4826 14.0109 23.4336 14.1609 23.2989 14.3109C23.0816 14.5528 22.7999 14.6721 22.5152 14.6721C22.2183 14.6721 21.9183 14.5405 21.6887 14.2772L18.9212 11.1393C18.8692 11.0781 18.8049 11.0506 18.7375 11.0506C18.4742 11.0506 18.1804 11.4853 18.4191 11.7363L20.6907 14.2466C21.1223 14.7426 21.1315 15.5079 20.7029 15.9855C20.5039 16.2059 20.259 16.313 20.011 16.313C19.7233 16.313 19.4294 16.1722 19.1967 15.9059L16.5946 13.0037C16.5364 12.9119 16.4629 12.8721 16.3864 12.8721C16.1415 12.8721 15.8843 13.2792 16.1415 13.5731L18.1436 15.8691C18.563 16.3498 18.5293 17.0967 18.1161 17.5621C17.9263 17.7733 17.6936 17.8743 17.4548 17.8743C17.3171 17.8743 17.1762 17.8406 17.0415 17.7733C16.9589 17.9937 16.8364 18.2019 16.6772 18.3856C16.9221 18.5203 17.1885 18.5968 17.4548 18.5968C17.8926 18.5968 18.3059 18.407 18.6181 18.058C18.9426 17.6968 19.111 17.2376 19.1294 16.7753C19.3988 16.9437 19.7049 17.0355 20.011 17.0355C20.4611 17.0355 20.8866 16.8396 21.208 16.4814C21.5295 16.1232 21.6948 15.6579 21.707 15.1895C21.955 15.3242 22.2336 15.3946 22.5152 15.3946C23.005 15.3946 23.4612 15.1834 23.801 14.8038C24.1255 14.4395 24.1837 14.0599 24.2235 13.7844C24.2449 13.6343 24.2173 13.4843 24.1561 13.3527C24.0765 13.417 24.0275 13.4537 24.0153 13.4629L23.5224 13.8395Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M6.20135 11.7914L6.21053 11.7822L6.21972 11.7731L6.38503 11.6445C5.02579 10.2669 4.19616 9.2505 4.19616 9.2505C5.5003 5.92894 6.97587 1.88183 6.97587 1.88183C6.96363 2.11143 7.73509 2.52166 7.89122 2.58288C8.14837 2.68697 8.42695 2.73595 8.70553 2.73595C8.78513 2.73595 8.86166 2.73289 8.9382 2.7237C9.75252 2.64105 10.5179 2.17266 11.2342 1.7655C11.7179 1.49304 12.3179 1.21446 12.8843 1.21446C13.1537 1.21446 13.4139 1.28487 13.6557 1.441C13.8731 1.30936 14.0874 1.18078 14.2986 1.06139C14.2619 1.01547 14.2221 0.972612 14.1762 0.935876C13.8088 0.641986 13.3741 0.495041 12.8873 0.495041C12.1312 0.495041 11.3965 0.859342 10.9097 1.1318L10.723 1.23895C10.1107 1.58794 9.48006 1.94612 8.87391 2.00735C8.8188 2.01347 8.76064 2.01653 8.70553 2.01653C8.50349 2.01653 8.30756 1.9798 8.13918 1.91245C8.01673 1.8604 7.73815 1.69815 7.60651 1.59407C7.52079 1.38589 7.34323 1.22977 7.11976 1.17772C7.07077 1.16548 7.02179 1.16242 6.97587 1.16242C6.69729 1.16242 6.43707 1.34304 6.33299 1.62774C6.31768 1.66754 4.84517 5.70546 3.5594 8.97804C3.46144 9.22907 3.5043 9.51684 3.67267 9.72195C3.70941 9.76481 4.52985 10.7659 5.87991 12.1374C5.97175 12.0149 6.0789 11.8955 6.20135 11.7914Z\"\n fill=\"#fff\"\n />\n </svg>\n </div>\n <div className=\"text-xs text-white text-opacity-70\">Hợp tác doanh nghiệp</div>\n <div className=\"text-xs font-semibold uppercase text-white text-opacity-90\">\n Đăng ký hợp tác\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n <div className=\"col-span-2 gap-8 sm:col-span-1 md:mt-0 md:flex md:flex-col md:flex-wrap md:justify-between \">\n <div className=\"h-auto\">\n <div className=\"hidden whitespace-nowrap text-xs font-bold uppercase text-white text-opacity-80 md:block\">\n Kết nối với chúng tôi\n </div>\n <div className=\"mt-3 hidden flex-row items-stretch md:flex\">\n <ul className=\"item-center flex list-none flex-wrap space-x-4\">\n {SOCIAL_ITEMS &&\n SOCIAL_ITEMS.map((item, index) => (\n <li className=\"inline-block\" key={index}>\n <a\n href={item.Link}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"duration-300 hover:brightness-125\"\n >\n <img src={item.Image} loading=\"lazy\" width=\"40\" height=\"40\" />\n </a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n <div className=\"h-auto\">\n <div className=\"hidden whitespace-nowrap text-xs font-bold uppercase text-white text-opacity-80 md:block\">\n Tải ứng dụng trên điện thoại\n </div>\n <div className=\"flex flex-wrap items-center md:mt-3 md:space-x-1.5\">\n <div className=\"relative hidden h-24 w-24 grow-0 overflow-hidden rounded-sm bg-white md:block lg:h-20 lg:w-20\">\n <img\n src=\"https://homepage.momocdn.net/img/momo-upload-api-230627140125-638234712853800898.jpg\"\n alt=\"Qr-Dowbnload MoMo\"\n className=\" absolute inset-0\"\n />\n </div>\n <div className=\"flex grow justify-center gap-2 md:grid md:grid-cols-1 md:gap-1.5\">\n {APP_DOWNLOAD &&\n APP_DOWNLOAD.map((item, index) => (\n <div\n className=\"button-download w-full md:flex md:items-center\"\n key={index}\n style={{\n background: `url(${item.Image}) center center / contain no-repeat`,\n }}\n >\n <Button\n onClick={() => setOpenDialogQr(index)}\n className=\"hidden w-full rounded-none !bg-transparent sm:block\"\n style={{ fontSize: \"0px\", padding: \"0 0 30.23%0\" }}\n >\n {item.Name}\n </Button>\n <a\n href={item.Link}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"button-download block sm:hidden\"\n style={{ fontSize: \"0px\", padding: \"0 0 30.23%0\" }}\n />\n <DialogQr\n open={openDialogQr === index}\n onOpenChange={() => setOpenDialogQr(null)}\n title=\"Quét mã để tải ứng dụng\"\n shortTitle=\"Tải ngay\"\n qrLink={item.Link}\n />\n </div>\n ))}\n </div>\n <div className=\"mt-4 flex w-full justify-center text-center md:hidden\">\n <ul className=\"item-center flex list-none flex-wrap space-x-3.5\">\n {SOCIAL_ITEMS &&\n SOCIAL_ITEMS.map((item, index) => (\n <li key={index}>\n <a\n href={item.Link}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"flex duration-300 hover:brightness-125\"\n >\n <img\n alt={item.Name}\n src={item.Image}\n loading=\"lazy\"\n width=\"36\"\n height=\"36\"\n />\n </a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </div>\n <div className=\"hidden h-auto md:block\">\n <div className=\" whitespace-nowrap text-xs font-bold uppercase text-white text-opacity-80 \">\n Được chứng nhận bởi\n </div>\n <div className=\"mt-6 flex items-center justify-between md:mt-3 md:justify-normal\">\n <span className=\"block text-right text-xs text-white text-opacity-50 md:hidden\">\n ©Copyright M_Service {new Date().getFullYear()}\n </span>\n <a\n rel=\"noopener noreferrer\"\n href=\"http://online.gov.vn/Home/AppDetails/163\"\n target=\"_blank\"\n className=\" flex w-28 items-center md:w-auto\"\n >\n <img\n alt=\"chứng nhận\"\n src=\"https://homepage.momocdn.net/blogscontents/momo-upload-api-210629153623-637605777831780706.png\"\n width={119}\n height={45}\n />\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div className=\" footer-bottom order-2 bg-gray-800 py-3.5 md:order-2 md:py-5\">\n <div className=\"wrapper grid gap-2 md:grid-cols-2 md:gap-5\">\n <div className=\" relative \">\n <img\n src=\"https://homepage.momocdn.net/fileuploads/svg/momo-file-240411162904.svg\"\n className=\" absolute left-0 top-0 mt-0.5 block h-9 w-9\"\n alt=\"MoMo\"\n />\n <div className=\" md:pl-12\">\n <div className=\"mb-1 h-10 pl-12 text-sm text-white text-opacity-80 md:h-auto md:pl-0 \">\n CÔNG TY CỔ PHẦN DỊCH VỤ DI ĐỘNG TRỰC TUYẾN\n </div>\n <div className=\"text-sm text-white text-opacity-50 lg:leading-normal\">\n Trụ sở chính: Tầng 6, Toà nhà Phú Mỹ Hưng, số 8 đường Hoàng Văn Thái, Phường Tân\n Phú, Quận 7, Thành phố Hồ Chí Minh\n </div>\n\n <div className=\" mt-0.5 text-sm text-white text-opacity-50\">\n Tên thương hiệu: <strong>MoMo</strong>\n </div>\n\n <div className=\" mt-0.5 hidden text-sm text-white text-opacity-50 md:block\">\n ©Copyright M_Service {new Date().getFullYear()}\n </div>\n </div>\n </div>\n\n <div className=\"text-sm text-white text-opacity-50\">\n <div>\n Dịch vụ trung gian thanh toán do Ngân hàng Nhà nước cấp phép được cung ứng thông\n qua <strong>Ứng dụng MoMo - Trợ thủ tài chính với AI:</strong>\n </div>\n\n <ul className=\" mt-0.5 \">\n <li>- Dịch vụ Ví điện tử</li>\n <li>- Dịch vụ hỗ trợ thu hộ, chi hộ</li>\n <li>- Dịch vụ cổng thanh toán điện tử</li>\n </ul>\n </div>\n\n <div className=\" flex items-center justify-between md:hidden\">\n <span className=\"block text-right text-xs text-white text-opacity-50 md:hidden\">\n ©Copyright M_Service {new Date().getFullYear()}\n </span>\n <a\n rel=\"noopener noreferrer\"\n href=\"http://online.gov.vn/Home/AppDetails/163\"\n target=\"_blank\"\n className=\" flex w-28 items-center md:w-auto\"\n >\n <img\n alt=\"chứng nhận\"\n src=\"https://homepage.momocdn.net/blogscontents/momo-upload-api-210629153623-637605777831780706.png\"\n width={119}\n height={45}\n />\n </a>\n </div>\n </div>\n </div>\n <style>{`\n footer .button-download {\n max-width: 150px;\n }\n `}</style>\n </>\n );\n};\n\nexport default FooterContent;\n","import FooterContent from \"./FooterContent\"\nimport { cn } from \"../../helpers/utils\";\nexport interface FooterItem {\n title: string;\n url: string;\n icon?: string | null;\n newTab: boolean;\n}\n\n// Define interface for footer data\nexport interface FooterData {\n heading: string;\n lists: FooterItem[];\n}\n\nexport interface FooterProps {\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * Data menu column 1\n */\n primaryMenu?: FooterData;\n /**\n * Data menu column 2\n */\n secondaryMenu?: FooterData;\n}\n\nconst Footer = ({ className, primaryMenu, secondaryMenu }: FooterProps) => {\n return (\n <footer className={cn('grid grid-cols-1 flex-wrap bg-gray-900', className)}>\n <FooterContent primaryMenu={primaryMenu} secondaryMenu={secondaryMenu} />\n </footer>\n );\n};\n\nexport { Footer }","import * as React from \"react\"\n\nimport { cn } from \"../../helpers/utils\";\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-xl border bg-card text-card-foreground shadow\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","import * as React from \"react\";\nimport { type DialogProps } from \"@radix-ui/react-dialog\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { cn } from \"../../helpers/utils\";\nimport { Dialog, DialogContent } from \"../Dialog\";\nimport {\n XCircleIcon,\n MagnifyingGlassIcon,\n} from \"@heroicons/react/16/solid\";\n\n\n\ninterface InputProps {\n onClickClear?: (value: string) => void;\n classNameInput?: string;\n}\n\nconst Command = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive\n ref={ref}\n className={cn(\n \"flex text-gray-900 border border-gray-300 shadow-lg bg-white h-full w-full flex-col overflow-hidden rounded-md\",\n className\n )}\n {...props}\n />\n));\nCommand.displayName = CommandPrimitive.displayName;\n\ninterface CommandDialogProps extends DialogProps {}\n\nconst CommandDialog = ({ children, ...props }: CommandDialogProps) => {\n return (\n <Dialog {...props}>\n <DialogContent className=\"overflow-hidden p-0 shadow-lg\">\n <Command className=\"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst CommandInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input> & InputProps\n>(({ className, onClickClear, classNameInput, ...props }, ref) => {\n const divRef = React.useRef<HTMLDivElement>(null);\n const [search, setSearch] = React.useState(\"\");\n\n const handleClearInput = () => {\n if (!search || search?.length <= 0) return;\n setSearch(\"\");\n onClickClear?.(search);\n };\n\n return (\n <div\n ref={divRef}\n className={cn(\"flex items-center border-b px-2\", className)}\n cmdk-input-wrapper=\"\"\n >\n <MagnifyingGlassIcon className=\"mr-2 h-4 w-4 shrink-0 text-gray-500\" />\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n \"flex h-10 text-gray-900 w-full rounded-md focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0 focus:ring-0 bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\",\n classNameInput\n )}\n value={search}\n onValueChange={setSearch}\n {...props}\n />\n <XCircleIcon\n onClick={handleClearInput}\n className={cn(\n \"ml-2 transition-all cursor-pointer h-4 w-4 duration-75 shrink-0 text-gray-500\",\n search?.length > 0 ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n </div>\n );\n});\n\nCommandInput.displayName = CommandPrimitive.Input.displayName;\n\nconst CommandList = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n className={cn(\n \"max-h-[300px] text-gray-900 overflow-y-auto overflow-x-hidden\",\n className\n )}\n {...props}\n />\n));\n\nCommandList.displayName = CommandPrimitive.List.displayName;\n\nconst CommandEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>((props, ref) => (\n <CommandPrimitive.Empty\n ref={ref}\n className=\"py-6 text-gray-900 text-center text-sm\"\n {...props}\n />\n));\n\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName;\n\nconst CommandGroup = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n \"overflow-hidden text-gray-900 p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\n\nCommandGroup.displayName = CommandPrimitive.Group.displayName;\n\nconst CommandSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 text-gray-900 h-px bg-border\", className)}\n {...props}\n />\n));\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName;\n\nconst CommandItem = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, children, ...props }, ref) => {\n return (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n \"relative cursor-pointer text-gray-900 flex rounded-md select-none hover:bg-gray-100 aria-selected:bg-gray-100 aria-selected:text-gray-900 items-center px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n \n {children}\n \n </CommandPrimitive.Item>\n );\n});\n\nCommandItem.displayName = CommandPrimitive.Item.displayName;\n\nconst CommandShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n \"ml-auto text-xs text-gray-900 tracking-widest text-muted-foreground\",\n className\n )}\n {...props}\n />\n );\n};\nCommandShortcut.displayName = \"CommandShortcut\";\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n};\n","import * as React from \"react\";\nimport { ChevronDownIcon } from \"@heroicons/react/16/solid\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../Popover\";\n\ninterface ComboboxTriggerProps\n extends React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> {\n className?: string;\n value?: string;\n label?: string;\n children: any;\n placeholder?: string;\n size?: 1 | 2;\n}\n\ninterface ComboboxContentProps\n extends React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> {\n children?: any;\n className?: string;\n}\n\ninterface ComboboxProps extends React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Popover> {}\n\nexport const ComboboxTrigger = ({\n className,\n value,\n label,\n children,\n placeholder,\n size,\n}: ComboboxTriggerProps) => {\n return (\n <div className=\"relative\">\n <PopoverTrigger\n className={cn(\n \"select-mobase-button flex h-11 w-72 items-center justify-between rounded-md border border-gray-300 bg-white p-3 text-sm text-gray-900 ring-0 ring-inset transition-all hover:ring-1 hover:ring-gray-400 focus:ring-0 focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0 disabled:pointer-events-none disabled:border-gray-200 disabled:bg-gray-50 data-[state=open]:border-pink-500 data-[placeholder]:text-gray-500 data-[state=open]:ring-1 data-[state=open]:ring-pink-500\",\n size === 2 && \"h-12 text-base\",\n className\n )}\n >\n {value || children || placeholder}\n <ChevronDownIcon className=\"h-4 w-4 flex-none text-gray-700\" />\n </PopoverTrigger>\n {label && (\n <span className=\"absolute -top-2 left-2 z-[1] bg-white px-1.5 text-xs text-gray-500\">\n {label}\n </span>\n )}\n </div>\n );\n};\n\nexport const ComboboxContent = ({ children, className, ...props }: ComboboxContentProps) => {\n return (\n <PopoverContent className={cn(\"border-none !p-0\", className)} {...props}>\n {children}\n </PopoverContent>\n );\n};\n\nexport const Combobox = ({ open, onOpenChange, children, ...props }: ComboboxProps) => {\n return (\n <Popover open={open} onOpenChange={onOpenChange} {...props}>\n {children}\n </Popover>\n );\n};\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../helpers/utils\";\nimport { InformationCircleIcon } from \"@heroicons/react/24/outline\";\nimport { TextButton } from \"../TextButton\";\n\ninterface CalloutProps {\n message: string;\n type: \"neutral\" | \"error\" | \"success\" | \"warning\" | \"info\";\n withAction?: string;\n onClickAction?: () => void;\n className?: string;\n disabled?: boolean;\n actionClassName?: string;\n icon?: React.ReactNode;\n}\n\nconst calloutVariants = cva(\n \"px-3 py-2 rounded-md border flex items-center space-x-2 text-gray-700 text-sm \",\n {\n variants: {\n typeDiv: {\n neutral: \"bg-gray-50 border-gray-300 \",\n error: \"bg-red-50 border-red-300\",\n success: \"bg-green-50 border-green-300\",\n warning: \"bg-yellow-50 border-yellow-300\",\n info: \"bg-blue-50 border-blue-300\",\n },\n disabled: {\n true: \"text-gray-400 bg-gray-50 opacity-55 pointer-events-none border-gray-300\",\n },\n },\n defaultVariants: {\n typeDiv: \"neutral\",\n },\n }\n);\n\nconst iconVariants = cva(\"w-5 h-5 shrink-0 border-none p-0 \", {\n variants: {\n typeIcon: {\n neutral: \"text-gray-700\",\n error: \"text-red-700\",\n success: \"text-green-700\",\n warning: \"text-yellow-700\",\n info: \"text-blue-700\",\n },\n disabled: {\n true: \"text-gray-400\",\n },\n },\n defaultVariants: {\n typeIcon: \"neutral\",\n },\n});\n\nexport const Callout = forwardRef<\n HTMLDivElement,\n CalloutProps &\n VariantProps<typeof calloutVariants> &\n VariantProps<typeof iconVariants>\n>(\n (\n {\n type = \"neutral\",\n message = \"\",\n withAction = false,\n onClickAction,\n className,\n disabled,\n actionClassName,\n icon,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"\",\n className,\n calloutVariants({ typeDiv: type, disabled })\n )}\n {...props}\n >\n <div className=\"flex items-center space-x-2\">\n {icon || (\n <InformationCircleIcon\n className={cn(iconVariants({ typeIcon: type, disabled }))}\n width={20}\n height={20}\n />\n )}\n {message && <div>{message}</div>}\n </div>\n {withAction && (\n <TextButton\n variant=\"primary\"\n onClick={() => onClickAction?.()}\n className={cn(\"\", actionClassName)}\n isDisabled={disabled}\n >\n {withAction}\n </TextButton>\n )}\n </div>\n );\n }\n);\n","import {\n ChangeEvent,\n FocusEvent,\n forwardRef,\n InputHTMLAttributes,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { MagnifyingGlassIcon } from \"@heroicons/react/20/solid\";\nimport { XCircleIcon } from \"@heroicons/react/24/outline\";\nimport { cn } from \"../../helpers/utils\";\n\nexport interface SearchBarProps extends InputHTMLAttributes<HTMLInputElement> {\n inputClassName?: string;\n size?: 1 | 2;\n onClickClear?: (inputValue: string) => void;\n}\n\nexport const SearchBar = forwardRef<HTMLInputElement, SearchBarProps>(\n (\n {\n disabled,\n className,\n inputClassName,\n size,\n onChange,\n onFocus,\n onClickClear,\n value,\n defaultValue,\n type = \"text\",\n ...restProps\n },\n ref,\n ) => {\n const [clearable, setClearable] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n\n const handleShowClearButton = (inputValue) => {\n if (inputValue && !clearable) {\n setClearable(true);\n }\n\n if (!inputValue && clearable) {\n setClearable(false);\n }\n };\n\n const onChangeFactory = (event: ChangeEvent<HTMLInputElement>) => {\n handleShowClearButton(event.target.value);\n onChange?.(event);\n };\n\n const onFocusFactory = (event: FocusEvent<HTMLInputElement, Element>) => {\n handleShowClearButton(event.target.value);\n onFocus?.(event);\n };\n\n const handleClear = () => {\n const inputTarget = rootRef.current?.querySelector(\"input\");\n if (!inputTarget) return;\n onClickClear?.(inputTarget.value);\n\n inputTarget.value = \"\";\n inputTarget.focus();\n setClearable(false);\n };\n\n useEffect(() => {\n handleShowClearButton(defaultValue || value);\n }, [value, defaultValue]);\n\n return (\n <div className={cn(className)} ref={rootRef}>\n <div className=\"relative flex items-center\">\n <div className=\"absolute left-3 top-1/2 -translate-y-1/2 shrink-0 text-gray-500 duration-200 \">\n <MagnifyingGlassIcon className=\"w-4 h-4 text-gray-500\" />\n </div>\n <input\n disabled={disabled}\n type={type}\n ref={ref}\n className={cn(\n \"mobase-text-input-box text-gray-900 h-10 bg-white w-full transition-all text-sm rounded-md border border-gray-300 placeholder:text-gray-500 px-9 focus:border-pink-500 disabled:bg-gray-50 disabled:border-gray-200 disabled:pointer-events-none block disabled:opacity-50\",\n inputClassName,\n )}\n onChange={onChangeFactory}\n onFocus={onFocusFactory}\n value={value}\n defaultValue={defaultValue}\n {...restProps}\n />\n\n {clearable && (\n <button\n aria-label=\"button\"\n type=\"button\"\n className=\"absolute right-3 top-1/2 -translate-y-1/2 shrink-0 cursor-pointer text-gray-500 duration-200 hover:opacity-70 disabled:pointer-events-none\"\n disabled={disabled}\n onClick={handleClear}\n >\n <XCircleIcon strokeWidth={2} width={20} height={20} />\n </button>\n )}\n </div>\n\n <style>\n {`\n .mobase-text-input-box:hover {\n box-shadow: 0px 0px 0px 1px rgb(var(--mobase-gray-400) / 1) inset;\n }\n .mobase-text-input-box:focus {\n box-shadow: 0px 0px 0px 1px rgb(var(--mobase-pink-500) / 1) inset;\n }\n `}\n </style>\n </div>\n );\n },\n);\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport React, { ReactNode, useContext, useEffect, useState } from \"react\";\nimport { cn } from \"../../helpers/utils\";\nimport { X } from \"lucide-react\";\nimport _ from \"lodash\";\nimport { AspectRatio } from \"../AspectRatio\";\nimport {\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n} from \"../Carousel\";\n\n// Define the context type\ntype LightboxGalleryContextProps = {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\n// Create the context with default values\nconst LightboxGalleryContext = React.createContext<\n LightboxGalleryContextProps | undefined\n>(undefined);\n\n// Custom hook to use the context\nexport function useLightboxGalleryContext() {\n const context = useContext(LightboxGalleryContext);\n\n if (!context) {\n throw new Error(\n \"useLightboxGalleryContext must be used within a LightboxGallery\"\n );\n }\n\n return context;\n}\n\n// LightboxGallery Component using Context\nexport const LightboxGallery = ({\n children,\n open,\n onOpenChange,\n className,\n}: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root> & {\n children: ReactNode;\n className: string;\n}) => {\n return (\n <LightboxGalleryContext.Provider value={{ open, onOpenChange }}>\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <div className={cn(\"lightbox-gallery\", className)}>{children}</div>\n </DialogPrimitive.Root>\n </LightboxGalleryContext.Provider>\n );\n};\n\n// Thumbnail Component remains the same\ninterface LightboxThumbnailProps\n extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger> {\n children?: ReactNode;\n src?: string;\n alt?: string;\n className?: string;\n classNameImage?: string;\n onClick?: () => void;\n ratio?: number;\n}\n\nexport const LightboxThumbnail = ({\n children,\n src,\n alt,\n className,\n classNameImage,\n onClick,\n ratio = 4 / 3,\n}: LightboxThumbnailProps) => {\n const { onOpenChange } = useLightboxGalleryContext();\n\n const handleOnClickThumbnail = () => {\n onClick?.();\n if (onOpenChange) {\n onOpenChange(true);\n }\n };\n\n return (\n <DialogPrimitive.Trigger\n className={cn(\"\", className)}\n onClick={handleOnClickThumbnail}\n >\n {children}\n <AspectRatio ratio={ratio} className=\"rounded-lg cursor-pointer\">\n <img\n src={src}\n alt={alt}\n className={cn(\n \"w-full h-full object-cover rounded-lg\",\n classNameImage\n )}\n />\n </AspectRatio>\n </DialogPrimitive.Trigger>\n );\n};\n\n// LightboxContent Component using Context\nexport const LightboxContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => {\n const { onOpenChange } = useLightboxGalleryContext();\n\n const handleClose = () => {\n if (onOpenChange) {\n onOpenChange(false);\n }\n };\n\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"bg-black fixed inset-0 bg-black/80 z-50\" />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed z-[999] w-full h-full inset-0 grid w-full mx-auto bg-black duration-200\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n onClick={handleClose}\n className=\"flex transition-all z-10 text-sm items-center space-x-1 absolute left-3 top-6 md:left-6 hover:bg-white/20 text-white rounded-md px-4 py-2\"\n >\n <X className=\"h-4 w-4 mt-0.5\" />\n <div className=\"\">Đóng cửa sổ</div>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n});\nLightboxContent.displayName = DialogPrimitive.Content.displayName;\n\n// LightBoxGalleryContent Component using Context\ninterface LightBoxGalleryContentProps {\n images: { url: string; titleImage?: string }[];\n activeSlideIndex?: number;\n withSideBar?: boolean;\n subHtmlSideBar?: ReactNode;\n classNameSubHtmSideBar?: string;\n isPagination?: boolean;\n}\n\nexport const LightBoxGalleryContent = ({\n images,\n activeSlideIndex = 0,\n withSideBar,\n subHtmlSideBar,\n classNameSubHtmSideBar,\n}: LightBoxGalleryContentProps) => {\n const [titleImage, setTitleImg] = useState(\"\");\n const [api, setApi] = useState<any>();\n const [current, setCurrent] = useState(0);\n\n useEffect(() => {\n if (!api) {\n return;\n }\n setCurrent(api.selectedScrollSnap() + 1);\n api.on(\"select\", () => {\n setCurrent(api.selectedScrollSnap() + 1);\n });\n }, [api]);\n\n const onGetTitleImage = (current) => {\n const result = _.filter(\n images,\n (_, idx) => idx === (current > 0 ? current - 1 : current)\n );\n const titleImgDraft = result.length > 0 ? result[0]?.titleImage : \"\";\n setTitleImg(titleImgDraft);\n };\n\n useEffect(() => {\n onGetTitleImage(current);\n }, [current]);\n\n return (\n <LightboxContent className=\"flex py-0\">\n <div className=\" flex-1 relative\">\n <div className=\"flex items-center text-sm justify-center absolute top-8 md:top-10 w-full\">\n {current ? current : 1} / {images?.length}\n </div>\n <Carousel\n opts={{\n startIndex: activeSlideIndex\n }}\n setApi={setApi}\n className=\"w-full h-full relative\"\n >\n <CarouselContent\n className={cn(\n \"h-screen -ml-3 md:-ml-4\",\n withSideBar ? \"sm:w-[calc(100vw-448px)] w-screen\" : \"w-screen\"\n )}\n >\n {images.map((img, index) => (\n <CarouselItem className=\"pl-6 md:pl-4\" key={index}>\n <div className=\" w-full h-full relative pt-28 overflow-hidden flex flex-col\">\n <div className=\"flex-1 relative\">\n <img\n src={img.url}\n alt=\"\"\n className=\"absolute h-full w-full object-contain\"\n />\n </div>\n <div className=\"flex-0\">\n <div className=\"text-sm px-20 text-center text-white/80 my-4 flex items-center justify-center w-full\">\n <div className=\"line-clamp-3\">{titleImage}</div>\n </div>\n </div>\n </div>\n </CarouselItem>\n ))}\n </CarouselContent>\n <CarouselPrevious className=\"left-10 top-[50%] w-10 h-10 sm:opacity-100 opacity-0\" />\n <CarouselNext className=\"right-10 top-[50%] w-10 h-10 sm:opacity-100 opacity-0\" />\n </Carousel>\n </div>\n {withSideBar && (\n <div\n className={cn(\n \"hidden md:block bg-white text-gray-900 p-6 w-full max-w-md\",\n classNameSubHtmSideBar\n )}\n >\n {subHtmlSideBar}\n </div>\n )}\n </LightboxContent>\n );\n};\n","import * as React from \"react\";\nimport { CheckIcon } from \"@heroicons/react/16/solid\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { Circle } from \"lucide-react\";\n\nimport { cn } from \"../../helpers/utils\";\n\ntype ChoiceboxGroupProps = React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> & {\n /**\n * Hide indicator when needed, default is false\n */\n hideIndicator?: boolean;\n};\n\ntype ChoiceboxGroupContextProps = {\n hideIndicator?: ChoiceboxGroupProps[\"hideIndicator\"];\n};\n\nconst ChoiceboxGroupContext = React.createContext<ChoiceboxGroupContextProps>({\n hideIndicator: false,\n});\n\n/**\n * Hook to get the current context value for ChoiceboxGroup.\n *\n * @returns The current context value for ChoiceboxGroup.\n * @throws If the context is undefined.\n */\nexport function useChoiceboxGroupContext() {\n const context = React.useContext(ChoiceboxGroupContext);\n\n if (!context) {\n throw new Error(\"ChoiceboxGroup.Item must be used within a ChoiceboxGroup \");\n }\n return context;\n}\n\nconst ChoiceboxGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n ChoiceboxGroupProps\n>(({ className, hideIndicator = false, ...props }, ref) => {\n return (\n <ChoiceboxGroupContext.Provider value={{ hideIndicator }}>\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", hideIndicator && \"hide-indicator\", className)}\n {...props}\n ref={ref}\n />\n </ChoiceboxGroupContext.Provider>\n );\n});\nChoiceboxGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst ChoiceboxGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, children, ...props }, ref) => {\n const context = useChoiceboxGroupContext();\n const { hideIndicator } = context ?? {};\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"group relative block flex w-full cursor-pointer items-center space-x-2 rounded-md border border-gray-300 bg-white p-3 text-left text-gray-900 ring-inset ring-pink-500 hover:border-pink-500 disabled:pointer-events-none disabled:cursor-default disabled:border-gray-300 disabled:bg-gray-100 data-[state=checked]:border-pink-500 data-[state=checked]:ring-[1px] md:px-4 md:py-3\",\n className\n )}\n {...props}\n >\n <div className=\"min-w-0 flex-1\">{children}</div>\n {!hideIndicator && (\n <div\n className={cn(\n \"has aspect-square h-4 w-4 flex-none rounded-full border-2 border-gray-300 group-disabled:cursor-default group-disabled:bg-gray-200 group-disabled:data-[state=checked]:bg-gray-100 group-disabled:data-[state=checked]:text-gray-300 group-data-[state=checked]:border-none group-data-[state=checked]:bg-pink-500 group-data-[state=checked]:text-white\"\n )}\n >\n <RadioGroupPrimitive.Indicator className=\"flex h-full w-full items-center justify-center rounded-full \">\n <Circle className=\"h-1.5 w-1.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </div>\n )}\n </RadioGroupPrimitive.Item>\n );\n});\n\nChoiceboxGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nconst ChoiceboxMultiItem = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> & {\n hideIndicator?: boolean;\n }\n>(({ className, children, hideIndicator = false, ...props }, ref) => {\n return (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"group relative flex w-full cursor-pointer items-center space-x-2 rounded-md border border-gray-300 bg-white p-3 text-left text-gray-900 ring-inset ring-pink-500 hover:border-pink-500 disabled:pointer-events-none disabled:cursor-default disabled:border-gray-300 disabled:bg-gray-100 data-[state=checked]:border-pink-500 data-[state=checked]:ring-[1px] md:px-4 md:py-3\",\n className\n )}\n {...props}\n >\n <div className=\"min-w-0 flex-1\">{children}</div>\n {!hideIndicator && (\n <div className=\"ring-offset-background h-4 w-4 shrink-0 rounded border-2 border-gray-300 group-disabled:cursor-default group-disabled:bg-gray-300 group-disabled:data-[state=checked]:bg-gray-400 group-disabled:data-[state=checked]:text-gray-100 group-data-[state=checked]:border-none group-data-[state=checked]:bg-pink-500 group-data-[state=checked]:text-white\">\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <CheckIcon className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </div>\n )}\n </CheckboxPrimitive.Root>\n );\n});\nChoiceboxMultiItem.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { ChoiceboxGroup, ChoiceboxGroupItem, ChoiceboxMultiItem };\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../helpers/utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-md border border-gray-300 px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 font-semibold\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-pink-500 text-white/90 shadow hover:bg-pink-500/80\",\n secondary:\n \"border-transparent bg-gray-200 text-gray-900 hover:bg-gray-200/80\",\n outline: \"text-gray-900\",\n danger:\n \"border-transparent bg-red-500 text-white/90 shadow hover:bg-red-500/80\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> { }\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }","import * as React from \"react\";\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../helpers/utils\";\n\nconst progressbarVariants = cva(\n \"h-full w-full rounded-full flex-1 transition-all\",\n {\n variants: {\n variant: {\n progress: \"bg-pink-500\",\n success: \"bg-green-600\",\n disabled: \"bg-gray-400\",\n empty: \"bg-gray-200\",\n },\n },\n defaultVariants: {\n variant: \"progress\",\n },\n }\n);\n\nconst progressbarSecondaryVariants = cva(\n \"relative h-4 w-full overflow-hidden rounded-full bg-gray-200\",\n {\n variants: {\n size: {\n small: \"h-[6px]\",\n medium: \"h-2\",\n large: \"h-[10px]\",\n },\n },\n defaultVariants: {\n size: \"medium\",\n },\n }\n);\n\nexport interface ProgressBarProps {\n variant?: \"progress\" | \"success\" | \"disabled\" | \"empty\";\n size?: \"small\" | \"medium\" | \"large\";\n disabled?: boolean;\n}\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root> &\n ProgressBarProps &\n VariantProps<typeof progressbarVariants>\n>(\n (\n {\n className,\n value,\n variant = \"progress\",\n size = \"medium\",\n disabled = false,\n ...props\n },\n ref\n ) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\"\", progressbarSecondaryVariants({ size }), className)}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className={cn(\"\", progressbarVariants({ variant }))}\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n )\n);\nProgress.displayName = ProgressPrimitive.Root.displayName;\n\nexport { Progress as Progressbar };\n","import { cn } from \"../../helpers/utils\";\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-gray-200\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","import { cn } from \"../../helpers/utils\";\nexport interface SpinnerProps {\n /**\n * The size of the spinner. Can be 'sm', 'md', or 'lg'.\n */\n size?: 'sm' | 'md' | 'lg'\n /**\n * The color of the spinner. tailwind text color class, ex : text-pink-500\n */\n color?: string\n /**\n * Custom class name\n */\n className?: string\n /**\n * The template of the spinner. Can be 'default', 'dots'\n */\n template?: 'default' | 'dots'\n}\n\nfunction Spinner({ size = 'md', color = 'bg-pink-500', className, template = 'default' }: SpinnerProps) {\n const sizeClasses = {\n xs: 'size-4',\n sm: 'size-5',\n md: 'size-7',\n lg: 'size-9'\n }\n const sizeClassesDots = {\n xs: 'size-1',\n sm: 'size-1.5',\n md: 'size-2',\n lg: 'size-3'\n }\n\n\n const renderSpinner = () => {\n switch (template) {\n case 'dots':\n return (\n <div className=\"spinner_dots inline-flex items-center \">\n {[...Array(3)].map((_, i) => (\n <span key={i} className={cn(\"size-2 rounded-full m-[1px] inline-block \", color, sizeClassesDots[size], className)} />\n ))}\n <style>\n {`\n .spinner_dots span {\n animation-name: spinner-dots;\n animation-duration: 1.4s;\n animation-iteration-count: infinite;\n animation-fill-mode: both;\n }\n .spinner_dots span:nth-child(2) {\n animation-delay: .2s;\n }\n\n .spinner_dots span:nth-child(3) {\n animation-delay: .4s;\n }\n\n @keyframes spinner-dots {\n 0% {\n opacity: .2;\n }\n 20% {\n opacity: 1;\n }\n\n 100% {\n opacity: .2;\n }\n }\n `}\n </style>\n </div>\n )\n case 'default':\n default:\n return (\n <>\n <div className={cn(\"spinner_wrapper relative size-5 overflow-hidden\", sizeClasses[size], className)}>\n <div className={cn(\"spinner relative left-1/2 top-1/2 size-5 \", sizeClasses[size], className)}>\n {[...Array(12)].map((_, i) => (\n <div key={i} className={cn(`spinner_bar child-${i + 1}`, color)} />\n ))}\n </div>\n </div>\n <style>\n {`\n .spinner_bar {\n animation: spinner_spin 1.2s linear infinite;\n border-radius: 20px;\n height: 8%;\n left: -10%;\n position: absolute;\n top: -3.9%;\n width: 24%;\n }\n\n .spinner_bar.child-1 {\n animation-delay: -1.2s;\n transform: rotate(0.0001deg) translate(146%);\n }\n\n .spinner_bar.child-2 {\n animation-delay: -1.1s;\n transform: rotate(30deg) translate(146%);\n }\n\n .spinner_bar.child-3 {\n animation-delay: -1s;\n transform: rotate(60deg) translate(146%);\n }\n\n .spinner_bar.child-4 {\n animation-delay: -0.9s;\n transform: rotate(90deg) translate(146%);\n }\n\n .spinner_bar.child-5 {\n animation-delay: -0.8s;\n transform: rotate(120deg) translate(146%);\n }\n\n .spinner_bar.child-6 {\n animation-delay: -0.7s;\n transform: rotate(150deg) translate(146%);\n }\n\n .spinner_bar.child-7 {\n animation-delay: -0.6s;\n transform: rotate(180deg) translate(146%);\n }\n\n .spinner_bar.child-8 {\n animation-delay: -0.5s;\n transform: rotate(210deg) translate(146%);\n }\n\n .spinner_bar.child-9 {\n animation-delay: -0.4s;\n transform: rotate(240deg) translate(146%);\n }\n\n .spinner_bar.child-10 {\n animation-delay: -0.3s;\n transform: rotate(270deg) translate(146%);\n }\n\n .spinner_bar.child-11 {\n animation-delay: -0.2s;\n transform: rotate(300deg) translate(146%);\n }\n\n .spinner_bar.child-12 {\n animation-delay: -0.1s;\n transform: rotate(330deg) translate(146%);\n }\n\n @keyframes spinner_spin {\n 0% {\n opacity: 1;\n }\n\n to {\n opacity: 0.15;\n }\n }\n `}\n </style>\n </>\n\n )\n }\n }\n\n return (\n <div className=\"flex justify-center items-center\" role=\"status\">\n {renderSpinner()}\n </div>\n )\n}\n\nexport { Spinner }","import * as React from \"react\";\nimport * as SliderPrimitive from \"@radix-ui/react-slider\";\n\nimport { cn } from \"../../helpers/utils\";\n\ninterface SliderProps extends React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root> {\n showIndicatorValue1?: number | string;\n showIndicatorValue2?: number | string;\n}\n\nconst Slider = React.forwardRef<React.ElementRef<typeof SliderPrimitive.Root>, SliderProps>(\n ({ className, showIndicatorValue1, showIndicatorValue2, ...props }, ref) => {\n return (\n <SliderPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex w-full touch-none select-none items-center\",\n props?.disabled && \"opacity-40\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track className=\"relative h-2 w-full grow overflow-hidden rounded-full bg-gray-200\">\n <SliderPrimitive.Range className=\"absolute h-full bg-pink-500\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb className=\"group relative\">\n <div className=\"ring-offset-bg-white\t focus-visible:ring-ring block h-5 w-5 rounded-full border-2 border-pink-500 bg-white transition-colors focus-visible:outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 group-hover:cursor-grabbing\">\n {showIndicatorValue1 && (\n <div className=\" absolute bottom-3/4 left-1/2 mb-2 -translate-x-1/2 whitespace-nowrap rounded-lg bg-black/90 px-2.5 py-1.5 text-sm opacity-0 duration-300 group-hover:bottom-full group-hover:opacity-100\">\n {showIndicatorValue1}\n </div>\n )}\n </div>\n </SliderPrimitive.Thumb>\n\n <SliderPrimitive.Thumb className=\"group relative\">\n <div className=\"ring-offset-bg-white\t focus-visible:ring-ring block h-5 w-5 rounded-full border-2 border-pink-500 bg-white transition-colors focus-visible:outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 group-hover:cursor-grabbing\">\n {showIndicatorValue2 && (\n <div className=\" absolute bottom-3/4 left-1/2 mb-2 -translate-x-1/2 whitespace-nowrap rounded-lg bg-black/90 px-2.5 py-1.5 text-sm opacity-0 duration-300 group-hover:bottom-full group-hover:opacity-100\">\n {showIndicatorValue2}\n </div>\n )}\n </div>\n </SliderPrimitive.Thumb>\n </SliderPrimitive.Root>\n );\n }\n);\nSlider.displayName = SliderPrimitive.Root.displayName;\n\nexport { Slider };\n","import { forwardRef } from \"react\";\nimport { IComment } from \"./utils\";\nimport CommentHeader from \"./CommentHeader\";\nimport CommentContent from \"./CommentContent\";\nimport CommentFooter from \"./CommentFooter\";\nimport { cn } from \"../../helpers/utils\";\n\nexport const Comment = forwardRef<HTMLDivElement, IComment>(\n (\n {\n avatar,\n author,\n time,\n ratingPoint,\n content,\n tags,\n thumbnails,\n actions = [],\n statusMessage,\n isReply,\n children,\n commentSideBar,\n isOutStanding,\n limitContent = 260,\n },\n ref\n ) => {\n return (\n <div ref={ref} className={cn(\"\", isReply ? \"ml-4 py-4\" : \"py-5\")}>\n <CommentHeader\n avatar={avatar}\n author={author}\n time={time}\n statusMessage={statusMessage}\n isOutStanding={isOutStanding}\n />\n <CommentContent\n content={content}\n thumbnails={thumbnails}\n tags={tags}\n rating={ratingPoint}\n commentSideBar={commentSideBar}\n limitContent={limitContent}\n />\n {actions && actions?.filter(Boolean)?.length > 0 && (\n <CommentFooter actions={actions.filter(Boolean)} />\n )}\n {children && (\n <div className=\"border-l grid grid-cols-1 divide-y divide-gray-200 ml-2 mt-3 border-l-gray-300 \">\n {children}\n </div>\n )}\n </div>\n );\n }\n);\n","import { ICommentHeader } from \"./utils\";\n\nconst AvatarFallBack = ({ author = \"\" }: { author: string }) => {\n return (\n <div className=\"text-center shrink-0 text-lg font-semibold text-pink-600\">\n {author?.charAt(0)}\n </div>\n );\n};\n\nconst Avatar = ({ author, avatar }: { author: string; avatar: string }) => {\n return (\n <div className=\"w-9 h-9 flex items-center mt-0.5 justify-center rounded-full bg-pink-200 relative overflow-hidden\">\n {avatar ? (\n <img\n src={avatar}\n alt={author?.charAt(0)}\n className=\"shrink-0 object-cover\"\n width={36}\n height={36}\n />\n ) : (\n <AvatarFallBack author={author} />\n )}\n </div>\n );\n};\n\nfunction CommentHeader({\n avatar = \"\",\n author = \"\",\n time,\n statusMessage,\n isOutStanding,\n}: ICommentHeader) {\n return (\n <>\n <div className=\"flex relative items-center space-x-3\">\n <Avatar avatar={avatar} author={author} />\n <div className=\"flex flex-col\">\n {author && (\n <div className=\"font-semibold text-gray-900 text-sm\">{author}</div>\n )}\n <div className=\"flex items-center space-x-2 text-xs\">\n {time && <div className=\"text-gray-400\">{time}</div>}\n {statusMessage && (\n <div className=\"flex items-center space-x-2\">\n <div className=\"w-1 h-1 mt-0.5 bg-gray-400 rounded-full\"></div>\n <div className=\"ml-2 text-pink-500\">{statusMessage}</div>\n </div>\n )}\n </div>\n </div>\n {isOutStanding && (\n <div className=\"absolute right-1 top-0\">\n <img\n alt=\"\"\n src=\"https://homepage.momocdn.net/img/momo-upload-api-230629163313-638236531936463134.png\"\n className=\"w-5\"\n loading=\"lazy\"\n />\n </div>\n )}\n </div>\n </>\n );\n}\n\nexport default CommentHeader;\n","import { ICommentContent } from \"./utils\";\nimport { LightboxGallery, LightBoxGalleryContent } from \"../LightboxGallery\";\nimport { useState } from \"react\";\nimport { AspectRatio } from \"../AspectRatio\";\nimport CommentRating from \"./CommentRating\";\nimport { ReadMoreLite } from \"../ReadMoreLite\";\n\nfunction CommentContent({\n content,\n thumbnails = [],\n tags = [],\n commentSideBar,\n rating = { point: 10, max: 10 },\n limitContent = 260,\n}: ICommentContent) {\n const [activeSlideIdx, setActiveSlideIdx] = useState(0);\n const [isOpen, setIsOpen] = useState(false);\n const handleClick = (index) => {\n setIsOpen(true);\n setActiveSlideIdx(index);\n };\n return (\n <div className=\"text-gray-700 mt-3 flex flex-col\">\n {rating.point > 0 && (\n <CommentRating\n className=\"mb-0.5\"\n point={rating.point}\n max={rating.max}\n />\n )}\n {content && <ReadMoreLite className=\"text-sm\" maxChar={limitContent}>{content}</ReadMoreLite>}\n {tags?.length > 0 && (\n <div className=\"w-full oveflow-x-auto flex items-center space-x-2 mt-2.5\">\n {tags?.map((tag) => (\n <div className=\"w-fit rounded-full shrink-0 bg-gray-100 text-gray-700 text-xs font-semibold py-1 px-2 text-center\">\n {tag}\n </div>\n ))}\n </div>\n )}\n {thumbnails?.length > 0 && (\n <LightboxGallery\n open={isOpen}\n onOpenChange={setIsOpen}\n className=\"grid gap-2 mt-4 overflow-hidden rounded-xl md:grid-cols-4 md:gap-2 md:rounded-none grid grid-cols-2 grid-rows-1 overflow-hidden \"\n >\n {thumbnails?.map((img, index) => (\n <AspectRatio\n key={index}\n onClick={() => handleClick(index)}\n className=\"rounded-lg cursor-pointer object-cover\"\n ratio={4 / 3}\n >\n <img\n src={img.url}\n alt=\"\"\n className=\"w-full h-full rounded-lg object-cover\"\n />\n </AspectRatio>\n ))}\n <LightBoxGalleryContent\n activeSlideIndex={activeSlideIdx}\n images={thumbnails?.map((img, index) => ({\n url: img.url,\n titleImage: img.titleImage,\n idx: index,\n }))}\n withSideBar={!!commentSideBar}\n subHtmlSideBar={commentSideBar}\n />\n </LightboxGallery>\n )}\n </div>\n );\n}\n\nexport default CommentContent;\n","import { cn } from \"../../helpers/utils\";\nimport { IRating } from \"./utils\";\nimport { StarIcon } from \"@heroicons/react/20/solid\";\n\nconst textReviewMax10 = {\n 1: \"Kén người mê\",\n 2: \"Kén người mê\",\n 3: \"Chưa ưng lắm\",\n 4: \"Chưa ưng lắm\",\n 5: \"Tạm ổn\",\n 6: \"Tạm ổn\",\n 7: \"Đáng xem\",\n 8: \"Đáng xem\",\n 9: \"Cực phẩm!\",\n 10: \"Cực phẩm!\",\n};\n\nconst textReviewMax5 = {\n 1: \"Không hài lòng\",\n 2: \"Chưa ưng lắm\",\n 3: \"Tạm ổn\",\n 4: \"Hài lòng\",\n 5: \"Rất hài lòng\",\n};\n\nfunction CommentRating({ point, max, className }: IRating) {\n const textReviewFinal =\n max > 5 ? textReviewMax10[point || 10] : textReviewMax5[point || 5];\n\n return (\n <div className={cn(\"flex items-center space-x-1\", className)}>\n <StarIcon className=\"w-5 h-5 text-yellow-500\" />\n <div className=\"font-semibold text-gray-900 text-sm\">{`${point}/${max}`}</div>\n <span className=\"font-semibold text-gray-900 text-sm\">\n {\" \"}\n · {textReviewFinal}\n </span>{\" \"}\n </div>\n );\n}\n\nexport default CommentRating;\n","import { useState } from \"react\";\nimport parse from \"html-react-parser\";\nimport { cn } from \"../../helpers/utils\";\n\ninterface ReadMoreLiteProps {\n children: string;\n maxChar?: number;\n textMore?: string;\n textLess?: string;\n btnClass?: string;\n className?: string;\n}\n\nexport const ReadMoreLite: React.FC<ReadMoreLiteProps> = ({\n children,\n maxChar = 260,\n textMore = \"...Xem thêm\",\n textLess = \"Thu gọn\",\n btnClass = \"text-blue-500\",\n className = \"\",\n}) => {\n const [isReadMore, setIsReadMore] = useState(true);\n const toggleReadMore = () => {\n setIsReadMore(!isReadMore);\n };\n\n const shorten = (\n str: string,\n maxLen: number,\n separator: string = \" \"\n ): string => {\n if (str.length <= maxLen) return str;\n return str.substring(0, str.lastIndexOf(separator, maxLen));\n };\n\n return (\n <div className={cn(className)}>\n {isReadMore ? parse(shorten(children, maxChar)) : parse(children)}\n {children.length > maxChar && (\n <span\n onClick={toggleReadMore}\n className={cn(\n \"read-or-hide cursor-pointer text-md w-fit pl-1 hover:underline\",\n btnClass\n )}\n >\n {isReadMore ? textMore : textLess}\n </span>\n )}\n </div>\n );\n};\n","import { ICommentFooter } from \"./utils\";\n\nfunction CommentFooter({ actions = [] }: ICommentFooter) {\n return (\n <div className=\"flex items-center space-x-4 mt-4 text-gray-700\">\n {actions}\n </div>\n );\n}\n\nexport default CommentFooter;\n","import * as React from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"../../helpers/utils\";\nimport { CheckIcon } from \"@heroicons/react/16/solid\";\nimport { XIcon } from \"lucide-react\";\n\n// Define step states and sizes\ntype StepState = \"active\" | \"disabled\" | \"default\" | \"completed\";\ntype StepSize = \"default\" | \"small\";\n\n// Consolidate class variants for step item\nconst stepperVariants = cva(\n \"flex items-center shrink-0 justify-center rounded-full shrink-0\",\n {\n variants: {\n state: {\n active:\n \"bg-pink-500 text-white shadow-[0_0px_0px_3px_rgb(255,255,255),0_0px_0px_4px_rgb(var(--mobase-pink-500))]\",\n disabled: \"bg-gray-400 text-gray-200\",\n default:\n \"text-gray-500 bg-white shadow-[inset_0px_0px_0px_1px_rgb(var(--mobase-gray-300))]\",\n completed: \"bg-pink-300 text-white\",\n },\n size: {\n default: \"h-7 w-7 text-sm\",\n small: \"h-6 w-6 text-xs\",\n }\n },\n defaultVariants: {\n state: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport interface ProgressStepsProps {\n children: React.ReactNode;\n className?: string;\n type?: \"numberStep\" | \"iconStep\" | \"default\";\n}\n\nconst ProgressStepsContext =\n React.createContext<ProgressStepsProps[\"type\"]>(\"default\");\n\nexport function useProgressStepsContext() {\n const context = React.useContext(ProgressStepsContext);\n if (!context) {\n throw new Error(\"ProgressStepsItem must be used within a ProgressSteps\");\n }\n return context;\n}\n\n// Convert ProgressStepper into a functional component\nconst ProgressStepper = React.memo(\n ({\n type,\n icon,\n stepNumber,\n size,\n isError,\n state,\n }: {\n type: ProgressStepsProps[\"type\"];\n icon: React.ReactNode;\n stepNumber: number;\n isError?: boolean;\n size: StepSize;\n state: StepState;\n }) => {\n const iconSizeClass = size === \"small\" ? \"w-3 h-3\" : \"w-4 h-4\";\n if (isError) return <XIcon className={iconSizeClass} />;\n return (\n <div>\n {type === \"iconStep\" && <div className={iconSizeClass}>{icon}</div>}\n {type === \"numberStep\" && <div>{stepNumber}</div>}\n {type === \"default\" &&\n (state === \"completed\" ? (\n <CheckIcon className={iconSizeClass} />\n ) : (\n <div>{stepNumber}</div> // Show step number if not completed\n ))}\n </div>\n );\n }\n);\n\ninterface ProgressStepsItemTriggerProps {\n step: number;\n currentStep: number;\n onValueChangeStep: (step: number) => void;\n children: React.ReactNode;\n}\n\nexport const ProgressStepsItemTrigger: React.FC<\n ProgressStepsItemTriggerProps\n> = ({ step, currentStep, onValueChangeStep, children }) => {\n const handleChangeStep = React.useCallback(() => {\n if (step !== currentStep) {\n onValueChangeStep(step);\n }\n }, [step, currentStep, onValueChangeStep]);\n\n return (\n <div\n onClick={handleChangeStep}\n className=\"flex w-full flex-col items-center justify-center gap-1 cursor-pointer\"\n >\n {children}\n </div>\n );\n};\n\nexport interface ProgressStepsItemProps {\n step: number;\n state?: StepState;\n size?: StepSize;\n placement?: \"default\" | \"left\";\n className?: string;\n title?: string;\n description?: string;\n lastStep?: boolean;\n fristStep?: boolean;\n icon?: React.ReactNode;\n isError?: boolean;\n onValueChangeStep?: (step: number) => void;\n}\n\nexport const ProgressStepsItem: React.FC<ProgressStepsItemProps> = ({\n step,\n state = \"default\",\n size = \"default\",\n placement = \"default\",\n className,\n title,\n description,\n lastStep,\n fristStep,\n icon,\n isError,\n onValueChangeStep,\n ...props\n}) => {\n const type = useProgressStepsContext();\n\n return (\n <div\n className={cn(\"flex w-full flex-col items-center justify-center gap-1\")}\n >\n <div className=\"flex w-full items-center justify-center gap-2\">\n <div\n className={cn(\n \"flex h-px grow shrink-0 basis-0 bg-gray-200\",\n fristStep && \"opacity-0\",\n placement == \"left\" && \"hidden\",\n state === \"active\" && \"bg-pink-300\",\n state === \"completed\" && \"bg-pink-300\"\n )}\n />\n <div\n className={cn(\n \"flex h-7 w-7 items-center justify-center rounded-full\",\n stepperVariants({ state, size }),\n isError && \"bg-red-500 text-white shadow-none\",\n className\n )}\n {...props}\n >\n <ProgressStepper\n type={type}\n icon={icon}\n stepNumber={step}\n size={size}\n isError={isError}\n state={state}\n />\n </div>\n <div\n className={cn(\n \"flex h-px grow shrink-0 basis-0 bg-gray-200\",\n lastStep && \"opacity-0\",\n state === \"completed\" && \"bg-pink-300\"\n )}\n />\n </div>\n <div className={cn(\"text-center w-full flex flex-col items-center mt-2 px-0.5\", placement == \"left\" && \"text-left items-start\")}>\n {title && (\n <div className=\"text-xs font-bold text-slate-900 \t\">{title}</div>\n )}\n {description && (\n <div className=\"text-xs text-gray-500 \t\">{description}</div>\n )}\n </div>\n </div>\n );\n};\n\nexport const ProgressSteps: React.FC<ProgressStepsProps> = ({\n children,\n className,\n type = \"numberStep\",\n ...props\n}) => {\n return (\n <ProgressStepsContext.Provider value={type}>\n <div\n className={cn(\"flex items-start justify-between w-full\", className)}\n {...props}\n >\n {children}\n </div>\n </ProgressStepsContext.Provider>\n );\n};\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n Controller,\n ControllerProps,\n FieldPath,\n FieldValues,\n FormProvider,\n useFormContext,\n} from \"react-hook-form\"\n\nimport { cn } from \"../../helpers/utils\";\nimport { Label } from \"../Label\"\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> = {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { getFieldState, formState } = useFormContext()\n\n const fieldState = getFieldState(fieldContext.name, formState)\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\")\n }\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\ntype FormItemContextValue = {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n)\n\nconst FormItem = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div ref={ref} className={cn(\"space-y-2\", className)} {...props} />\n </FormItemContext.Provider>\n )\n})\nFormItem.displayName = \"FormItem\"\n\nconst FormLabel = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => {\n const { error, formItemId } = useFormField()\n\n return (\n <Label\n ref={ref}\n className={cn(error && \"text-red-500\",\"text-gray-700 \", className)}\n htmlFor={formItemId}\n {...props}\n />\n )\n})\nFormLabel.displayName = \"FormLabel\"\n\nconst FormControl = React.forwardRef<\n React.ElementRef<typeof Slot>,\n React.ComponentPropsWithoutRef<typeof Slot>\n>(({ ...props }, ref) => {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <Slot\n ref={ref}\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n )\n})\nFormControl.displayName = \"FormControl\"\n\nconst FormDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n ref={ref}\n id={formDescriptionId}\n className={cn(\"text-[0.8rem] text-gray-500\", className)}\n {...props}\n />\n )\n})\nFormDescription.displayName = \"FormDescription\"\n\nconst FormMessage = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, children, ...props }, ref) => {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message) : children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n ref={ref}\n id={formMessageId}\n className={cn(\"text-xs font-medium text-red-500\", className)}\n {...props}\n >\n {body}\n </p>\n )\n})\nFormMessage.displayName = \"FormMessage\"\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n}\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../helpers/utils\";\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { ChevronRight, Check} from \"lucide-react\"\n\nimport { cn } from \"../../helpers/utils\";\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-gray-900 shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-0\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border border-gray-300 bg-white p-1 text-gray-900 shadow-small data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 \",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-gray-100 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 \",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-gray-100 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 \",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n \n {checked === false && <div className=\"size-3.5 rounded-sm border border-gray-400 absolute inset-0\"/>}\n <DropdownMenuPrimitive.ItemIndicator>\n <div className=\"size-3.5 rounded-sm border border-pink-500 bg-pink-500 flex items-center justify-center text-white absolute inset-0\"><Check size={16} strokeWidth={3} /></div>\n \n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-gray-100 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 \",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <div className=\"size-3.5 rounded-full border border-gray-400 absolute inset-0\"/>\n <DropdownMenuPrimitive.ItemIndicator>\n <div className=\"size-3.5 rounded-full border-4 border-pink-500 absolute inset-0\"/>\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-gray-100\", className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n )\n}\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}\n","import parse from \"html-react-parser\";\n\nimport { AspectRatio } from \"../AspectRatio\";\nimport { ButtonsBlock, HeadingBlock, SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { ButtonsBlockProps, HeadingBlockProps, SectionBlockProps } from \"../CommonBlocks/utils\";\n\ninterface HowItWorksData {\n /**\n * Image banner or icon of the how it works.\n */\n image?: string;\n /**\n * Title of the how it works.\n */\n title: string;\n /**\n * Description of the how it works.\n */\n description?: string;\n}\n\ninterface HowItWorksSectionProps extends SectionBlockProps {\n /**\n * The template of the section.\n */\n template?: 1 | 2;\n /**\n * The data heading of the section.\n */\n dataHeading?: HeadingBlockProps;\n /**\n * The array data testimonials of the section.\n */\n dataHowItWorks?: HowItWorksData[];\n /**\n * The data buttons of the section.\n */\n dataButtons?: ButtonsBlockProps;\n}\n\nconst HowItWorksTemplateOne = ({\n dataHeading,\n dataHowItWorks,\n dataButtons,\n}: HowItWorksSectionProps) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataHowItWorks && dataHowItWorks?.length > 0 && (\n <div className=\"-mx-3.5 flex flex-row flex-wrap justify-center gap-y-5\">\n {dataHowItWorks.map((step: HowItWorksData, index: number) => (\n <div key={index} className=\"basis-full px-3.5 md:basis-1/3\">\n <div className=\"h-full rounded-lg border border-gray-100 bg-white px-6 py-8 text-center shadow-lg md:px-4 lg:px-6\">\n <div className=\"mx-auto flex h-9 w-9 items-center justify-center rounded-full bg-pink-500 text-xl font-bold text-white\">\n {index + 1}\n </div>\n <div className=\"mt-6 w-full\">\n <div className=\"w-full text-xl font-semibold\">{parse(step.title)}</div>\n {step?.description && (\n <div className=\"mt-2 text-base text-gray-600\">{parse(step.description)}</div>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst HowItWorksTemplateTwo = ({\n dataHeading,\n dataHowItWorks,\n dataButtons,\n}: HowItWorksSectionProps) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataHowItWorks && dataHowItWorks?.length > 0 && (\n <div className=\"-mx-3.5 mt-9 flex flex-row flex-wrap justify-center gap-y-9\">\n {dataHowItWorks.map((step: HowItWorksData, index: number) => (\n <div key={index} className=\"basis-full px-3.5 text-center md:basis-1/3\">\n <div className=\"relative mx-auto flex h-52 w-52 items-center justify-center\">\n <div className=\"absolute -left-4 -top-4 z-10 flex h-12 w-12 items-center justify-center rounded-full border-4 border-white bg-pink-500 text-lg font-bold text-white\">\n {index + 1}\n </div>\n {step?.image && (\n <div className=\"aspect-1 w-full overflow-hidden rounded-lg bg-gray-100\">\n <AspectRatio ratio={1}>\n <img\n src={step.image}\n alt={step.title}\n className=\"h-full w-full object-cover\"\n />\n </AspectRatio>\n </div>\n )}\n </div>\n <div className=\"mt-6 w-full\">\n <div className=\"w-full text-xl font-semibold\">{parse(step.title)}</div>\n {step?.description && (\n <div className=\"mt-2 text-base text-gray-600\">{parse(step.description)}</div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst renderTemplate = ({\n template,\n dataHeading,\n dataHowItWorks,\n dataButtons,\n}: HowItWorksSectionProps) => {\n switch (template) {\n case 1:\n return (\n <HowItWorksTemplateOne\n dataHeading={dataHeading}\n dataHowItWorks={dataHowItWorks}\n dataButtons={dataButtons}\n />\n );\n case 2:\n return (\n <HowItWorksTemplateTwo\n dataHeading={dataHeading}\n dataHowItWorks={dataHowItWorks}\n dataButtons={dataButtons}\n />\n );\n default:\n return (\n <HowItWorksTemplateOne\n dataHeading={dataHeading}\n dataHowItWorks={dataHowItWorks}\n dataButtons={dataButtons}\n />\n );\n }\n};\n\nconst HowItWorksSectionContent = ({\n template,\n dataHeading,\n dataHowItWorks,\n dataButtons,\n}: HowItWorksSectionProps) => {\n return (\n <>\n {renderTemplate({\n template,\n dataHeading,\n dataHowItWorks,\n dataButtons,\n })}\n </>\n );\n};\n\nconst HowItWorksSection = ({\n template = 1,\n background,\n className,\n idSection,\n dataHeading,\n dataHowItWorks,\n dataButtons,\n}: HowItWorksSectionProps) => {\n return (\n <SectionBlock className={className} idSection={idSection} background={background}>\n <HowItWorksSectionContent\n template={template}\n dataHeading={dataHeading}\n dataHowItWorks={dataHowItWorks}\n dataButtons={dataButtons}\n />\n </SectionBlock>\n );\n};\n\nexport type { HowItWorksSectionProps };\nexport { HowItWorksSection };\n","import { cva } from \"class-variance-authority\";\nimport parse from \"html-react-parser\";\nimport { CheckIcon } from \"lucide-react\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { HeroContentListFeatureProps, HeroContentListStats, HeroContentProps } from \"./utils\";\n\nconst featureVariants = cva(\"mt-6 list-inside text-gray-800\", {\n variants: {\n template: {\n 1: \"grid grid-cols-1 gap-y-3 \",\n // 2: \"grid w-full grid-cols-2 gap-2 md:grid-cols-4\",\n 2: \"grid grid-cols-1 gap-y-3 \",\n 3: \"mx-auto mt-0 mt-8 grid max-w-5xl grid-cols-1 items-center gap-4 text-left text-sm font-semibold md:mt-12 md:grid-cols-4 md:gap-12\",\n },\n },\n defaultVariants: {\n template: 1,\n },\n});\n\nexport const SectionHeroItemFeature = ({\n template,\n name,\n image,\n isFeatures,\n}: {\n template?: HeroContentProps[\"template\"];\n name?: HeroContentListFeatureProps[\"name\"];\n image?: HeroContentListFeatureProps[\"image\"];\n idx: number;\n value?: HeroContentListStats[\"value\"];\n suffix?: HeroContentListStats[\"suffix\"];\n unit?: HeroContentListStats[\"unit\"];\n description?: HeroContentListStats[\"description\"];\n isFeatures?: boolean;\n}) => {\n const renderTemplateFeature = () => {\n switch (template) {\n case 1:\n case 2:\n return (\n <>\n <li className={cn(\"flex space-x-4\", !isFeatures && \"hidden\")}>\n {!image ? (\n <div className=\"mt-0.5 flex h-5 w-5 flex-none items-center justify-center rounded-full bg-pink-100\">\n <CheckIcon className=\"h-4 w-4 text-pink-500\" />\n </div>\n ) : (\n <div className=\"flex h-10 w-10 flex-none shrink-0 items-center justify-center\">\n <img src={image} alt=\"\" className=\"max-w-full\" />\n </div>\n )}\n {name && <div className=\"ml-2 \">{parse(name)}</div>}\n </li>\n </>\n );\n case 3:\n return (\n <li className=\"flex h-full space-x-4\">\n {!image ? (\n <div className=\"flex h-5 w-5 flex-none items-center justify-center rounded-full bg-pink-100 p-1\">\n <CheckIcon className=\"h-4 w-4 text-pink-500\" />\n </div>\n ) : (\n <div className=\"flex h-10 w-10 flex-none shrink-0 items-center justify-center\">\n <img src={image} alt=\"\" className=\"max-w-full\" />\n </div>\n )}\n {name && <div className=\"my-auto ml-2 md:my-0\">{parse(name)}</div>}\n </li>\n );\n default:\n return null;\n }\n };\n\n return <>{renderTemplateFeature()}</>;\n};\n\nexport const SectionHeroListFeature = ({\n dataFeatures,\n template = 1,\n}: {\n dataFeatures: HeroContentProps[\"dataFeatures\"];\n template: HeroContentProps[\"template\"];\n}) => {\n return (\n <>\n {(dataFeatures?.length ?? 0) > 0 && (\n <ul className={cn(\"\", featureVariants({ template: template }))}>\n {dataFeatures?.map((feature, index) => (\n <SectionHeroItemFeature\n name={feature?.name}\n template={template}\n image={feature?.image}\n key={index}\n idx={index}\n isFeatures={true}\n />\n ))}\n </ul>\n )}\n </>\n );\n};\n","import { XIcon } from \"lucide-react\";\n\nimport { cn, Media, MediaContextProvider } from \"../../helpers/utils\";\nimport { AspectRatio } from \"../AspectRatio\";\nimport { Dialog, DialogBody, DialogClose, DialogContent, DialogTrigger } from \"../Dialog\";\nimport { IconButton } from \"../IconButton\";\nimport { HeroContentMediaProps } from \"./utils\";\n\nconst convertDataRation = (ratio) => {\n if (typeof ratio == \"string\") {\n const ratioNumbers = ratio?.split(\"/\")?.map(Number);\n const calRatio: number = ratioNumbers?.reduce((a, b) => a / b);\n return calRatio;\n } else {\n return ratio;\n }\n};\n\nexport const SectionHeroVideo = ({\n src,\n ratio,\n className,\n youtubeId,\n onClickFC = () => {},\n}: HeroContentMediaProps) => {\n return (\n <MediaContextProvider>\n <Media greaterThan=\"sm\">\n <AspectRatio className={cn(\"\")} ratio={convertDataRation(ratio)}>\n <img\n src={src}\n className={cn(\n \"hidden h-full w-full object-cover md:block\",\n className,\n !src ? \"bg-gray-200\" : \"\"\n )}\n alt=\"\"\n />\n {youtubeId && (\n <Dialog>\n <DialogTrigger onClick={onClickFC}>\n <div className=\"absolute top-0 z-10 hidden h-full w-full cursor-pointer items-center justify-center transition-transform group-hover:scale-105 md:flex\">\n <svg className=\"h-14 w-14\" viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"none\" fillRule=\"evenodd\">\n <circle\n stroke=\"#FFF\"\n strokeWidth={2}\n fillOpacity=\".24\"\n fill=\"#000\"\n cx={24}\n cy={24}\n r={23}\n />\n <path\n d=\"M34.667 24.335c0 .515-.529.885-.529.885l-14.84 9.133c-1.08.704-1.965.182-1.965-1.153V15.467c0-1.338.884-1.856 1.968-1.153L34.14 23.45c-.002 0 .527.37.527.885Z\"\n fill=\"#FFF\"\n fillRule=\"nonzero\"\n />\n </g>\n </svg>\n </div>\n </DialogTrigger>\n <DialogContent\n hideCloseBtn\n size=\"lg\"\n position=\"center\"\n className=\"bg-transparent shadow-none\"\n >\n <DialogBody className=\"relative bg-transparent p-4 text-center\">\n <div className=\"aspect-[16/9] w-full p-0\">\n <iframe\n title={youtubeId}\n src={`https://www.youtube.com/embed/${youtubeId}?autoplay=1`}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n referrerPolicy=\"strict-origin-when-cross-origin\"\n allowFullScreen\n className=\"h-full w-full\"\n />\n </div>\n <DialogClose asChild>\n <IconButton\n variant=\"secondary\"\n className=\"absolute right-0 top-0 rounded-full\"\n size=\"sm\"\n >\n <XIcon className=\"h-6 w-6\" />\n </IconButton>\n </DialogClose>\n </DialogBody>\n </DialogContent>\n </Dialog>\n )}\n </AspectRatio>\n </Media>\n\n {youtubeId && (\n <Media lessThan=\"md\">\n <div className=\"realtive aspect-[16/9] w-full overflow-hidden md:hidden\">\n <iframe\n title={youtubeId}\n src={`https://www.youtube.com/embed/${youtubeId}?controls=1`}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n referrerPolicy=\"strict-origin-when-cross-origin\"\n allowFullScreen\n className=\"h-full w-full object-cover md:hidden\"\n />\n </div>\n </Media>\n )}\n </MediaContextProvider>\n );\n};\n\nexport const SectionHeroMedia = ({\n type = 1,\n src,\n ratio,\n className,\n classNameMedia,\n youtubeId,\n onClickFC = () => {},\n}: HeroContentMediaProps) => {\n return (\n <div className={className}>\n {!youtubeId ? (\n <AspectRatio ratio={convertDataRation(ratio)}>\n <img\n src={src}\n className={cn(\"h-full w-full object-cover\", classNameMedia, !src ? \"bg-gray-200\" : \"\")}\n alt=\"\"\n />\n </AspectRatio>\n ) : (\n <SectionHeroVideo\n type={type}\n src={src}\n ratio={ratio}\n youtubeId={youtubeId}\n onClickFC={onClickFC}\n />\n )}\n </div>\n );\n};\n","import parse from \"html-react-parser\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst SectionHeroListStats = ({ value, suffix, unit, description, idx }: any) => {\n return (\n <div className={cn(\"\")}>\n {value && (\n <div className=\"line-clamp-2 font-bold text-pink-500\">\n {value}\n {(suffix || unit) && (\n <span>\n {suffix} {unit}\n </span>\n )}\n </div>\n )}\n {description && (\n <div className=\"mt-1 text-sm leading-tight text-gray-500\">{parse(description)}</div>\n )}\n </div>\n );\n};\n\nexport const SectionHeroStats = ({ dataStats }: { dataStats: HeroContentProps[\"dataStats\"] }) => {\n return (\n <>\n {(dataStats?.length ?? 0) > 0 && (\n <ul\n className={cn(\n \"mt-8 grid w-full auto-cols-[minmax(0,150px)] grid-flow-col gap-3 md:mt-10\"\n )}\n >\n {dataStats?.map((stat, index) => (\n <SectionHeroListStats\n value={stat?.value}\n suffix={stat?.suffix}\n unit={stat?.unit}\n description={stat?.description}\n key={index}\n idx={index}\n />\n ))}\n </ul>\n )}\n </>\n );\n};\n","import { cn } from \"../../helpers/utils\";\nimport { ButtonsBlock, HeadingBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { SectionHeroListFeature } from \"./HeroSectionFeatures\";\nimport { SectionHeroMedia } from \"./HeroSectionMedia\";\nimport { SectionHeroStats } from \"./HeroSectionStats\";\nimport { HeroContentProps } from \"./utils\";\n\nexport const HeroContentTemplateOne = ({\n dataHeading,\n dataButtons,\n dataFeatures,\n template,\n dataStats,\n dataMedia,\n advancedComponent,\n}: HeroContentProps) => {\n return (\n <div className={cn(\"grid grid-cols-1 items-center gap-8 md:grid-cols-2 md:gap-6 \")}>\n <div className=\"col-span-1 \">\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading || \"h1\"}\n align=\"left\"\n sizeHeading={dataHeading?.sizeHeading}\n colorScheme={dataHeading?.colorScheme || \"black\"}\n className={cn(\"mb-0 md:mb-0\", dataHeading?.className)}\n />\n <SectionHeroListFeature dataFeatures={dataFeatures} template={template} />\n {dataButtons && (\n <ButtonsBlock\n align=\"left\"\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n />\n )}\n\n <SectionHeroStats dataStats={dataStats} />\n </div>\n <div className=\"col-span-1 md:pl-10\">\n {advancedComponent ? (\n advancedComponent\n ) : (\n <SectionHeroMedia\n type={dataMedia?.type || 1}\n src={dataMedia?.src || \"\"}\n ratio={dataMedia?.ratio}\n youtubeId={dataMedia?.youtubeId}\n />\n )}\n </div>\n </div>\n );\n};\n\nexport const HeroContentTemplateTwo = ({\n dataHeading,\n dataButtons,\n dataFeatures,\n template,\n dataStats,\n dataMedia,\n advancedComponent,\n}: HeroContentProps) => {\n return (\n <div className={cn(\"grid grid-cols-1 items-center gap-8 md:grid-cols-2 md:gap-6\")}>\n <div className=\"order-2 col-span-1 md:order-1 md:pr-10\">\n {advancedComponent ? (\n advancedComponent\n ) : (\n <SectionHeroMedia\n type={dataMedia?.type || 1}\n src={dataMedia?.src || \"\"}\n ratio={dataMedia?.ratio}\n youtubeId={dataMedia?.youtubeId}\n />\n )}\n </div>\n\n <div className=\"order-1 col-span-1 md:order-2\">\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading || \"h1\"}\n align=\"left\"\n sizeHeading={dataHeading?.sizeHeading}\n colorScheme={dataHeading?.colorScheme || \"black\"}\n className={cn(\"mb-0 md:mb-0\", dataHeading?.className)}\n />\n <SectionHeroListFeature dataFeatures={dataFeatures} template={template} />\n\n {dataButtons && (\n <div className=\"flex w-full items-center justify-center md:justify-start\">\n <ButtonsBlock\n align=\"left\"\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n />\n </div>\n )}\n\n <SectionHeroStats dataStats={dataStats} />\n </div>\n </div>\n );\n};\n\nexport const HeroContentTemplateThree = ({\n dataHeading,\n dataButtons,\n dataFeatures,\n template,\n dataStats,\n dataMedia,\n advancedComponent,\n}: HeroContentProps) => {\n return (\n <>\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading || \"h1\"}\n align=\"center\"\n sizeHeading={dataHeading?.sizeHeading}\n colorScheme={dataHeading?.colorScheme || \"black\"}\n className={cn(\"mb-0 md:mb-0\", dataHeading?.className)}\n />\n {dataButtons && (\n <ButtonsBlock\n align=\"center\"\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className=\"inline-flex w-full items-center justify-center text-center text-base font-semibold md:w-full\"\n />\n )}\n <SectionHeroListFeature dataFeatures={dataFeatures} template={template} />\n <div className=\" mx-auto max-w-xl [&>ul]:justify-center\">\n <SectionHeroStats dataStats={dataStats} />\n </div>\n\n {advancedComponent ? (\n advancedComponent\n ) : (\n <>\n {dataMedia?.src && (\n <SectionHeroMedia\n type={dataMedia?.type || 1}\n src={dataMedia?.src || \"\"}\n ratio={dataMedia?.ratio}\n youtubeId={dataMedia?.youtubeId}\n className=\"mt-8 md:mt-12\"\n classNameMedia=\"rounded-lg\"\n />\n )}\n </>\n )}\n </>\n );\n};\n","import { cn } from \"../../helpers/utils\";\nimport { SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport {\n HeroContentTemplateOne,\n HeroContentTemplateThree,\n HeroContentTemplateTwo,\n} from \"./HeroSectionTemplate\";\nimport { HeroContentProps } from \"./utils\";\n\nconst BG_DEFAULT = `var(\n --gradient-pink-1,\n linear-gradient(\n 38deg,\n rgba(255, 255, 255, 0) 78%,\n rgba(255, 255, 255, 0.69) 100%\n ),\n linear-gradient(45deg, #fff 10%, rgba(255, 255, 255, 0) 22%),\n linear-gradient(0deg, #fff 0%, rgba(255, 255, 255, 0) 91%),\n linear-gradient(\n 214deg,\n rgba(255, 255, 255, 0) 0%,\n rgba(255, 91, 189, 0.2) 25%,\n rgba(255, 255, 255, 0) 71%\n ),\n linear-gradient(\n 212deg,\n rgba(255, 255, 255, 0) 51%,\n rgba(255, 196, 233, 0.7) 64%,\n rgba(255, 255, 255, 0) 80%\n ),\n #fff\n)`;\n\nconst renderTemplate = ({\n template,\n dataHeading,\n dataButtons,\n dataFeatures,\n dataStats,\n dataMedia,\n advancedComponent,\n}: HeroContentProps) => {\n switch (template) {\n case 1:\n return (\n <HeroContentTemplateOne\n dataHeading={dataHeading}\n dataButtons={dataButtons}\n dataFeatures={dataFeatures}\n dataStats={dataStats}\n template={template}\n dataMedia={dataMedia}\n advancedComponent={advancedComponent}\n />\n );\n case 2:\n return (\n <HeroContentTemplateTwo\n dataHeading={dataHeading}\n dataButtons={dataButtons}\n dataFeatures={dataFeatures}\n dataStats={dataStats}\n template={template}\n dataMedia={dataMedia}\n advancedComponent={advancedComponent}\n />\n );\n case 3:\n return (\n <HeroContentTemplateThree\n dataHeading={dataHeading}\n dataButtons={dataButtons}\n dataFeatures={dataFeatures}\n dataStats={dataStats}\n template={template}\n dataMedia={dataMedia}\n advancedComponent={advancedComponent}\n />\n );\n default:\n return (\n <HeroContentTemplateOne\n dataHeading={dataHeading}\n dataButtons={dataButtons}\n dataFeatures={dataFeatures}\n dataStats={dataStats}\n template={template}\n dataMedia={dataMedia}\n advancedComponent={advancedComponent}\n />\n );\n }\n};\n\nconst SectionHeroContent = ({\n template,\n dataHeading,\n dataButtons,\n dataFeatures,\n dataStats,\n dataMedia,\n advancedComponent,\n}) => {\n return (\n <>\n {renderTemplate({\n template,\n dataHeading,\n dataButtons,\n dataFeatures,\n dataStats,\n dataMedia,\n advancedComponent,\n })}\n </>\n );\n};\n\nexport const HeroSection = ({\n template = 1,\n idSection,\n dataHeading,\n dataButtons,\n dataFeatures,\n dataStats,\n dataMedia,\n className,\n background,\n advancedComponent = null,\n}: HeroContentProps) => {\n return (\n <SectionBlock\n className={cn(className)}\n background={background ?? BG_DEFAULT}\n idSection={idSection}\n >\n <SectionHeroContent\n dataButtons={dataButtons}\n template={template}\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataStats={dataStats}\n dataMedia={dataMedia}\n advancedComponent={advancedComponent}\n />\n </SectionBlock>\n );\n};\n","import { cn } from \"../../helpers/utils\";\nimport { ButtonsBlock, HeadingBlock, SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { ButtonsBlockProps, HeadingBlockProps, SectionBlockProps } from \"../CommonBlocks/utils\";\n\ninterface BrandData {\n /**\n * Brand name.\n */\n name?: string;\n /**\n * Brand logo.\n */\n logo?: string;\n /**\n * Brand url.\n */\n url?: string;\n /**\n * Opens in a new tab when clicked.\n */\n newTab?: boolean;\n}\n\ninterface SocialProofSectionProps extends SectionBlockProps {\n /**\n * The template of the section.\n */\n template?: 1 | 2;\n /**\n * The data heading of the section.\n */\n dataHeading?: HeadingBlockProps;\n /**\n * The array data brands of the section.\n */\n dataBrands?: BrandData[];\n /**\n * The data buttons of the section.\n */\n dataButtons?: ButtonsBlockProps;\n /**\n * The space between brands in Desktop. Default value \"20px\". In mobile, it will be value \"20px\". SpaceX use only for template 1.\n */\n spaceX?: \"20px\" | \"28px\" | \"36px\";\n /**\n * Enable scroll snap on mobile.\n */\n isScrollSnap?: boolean;\n}\n\nconst SocialProofTemplateOne = ({\n dataHeading,\n dataBrands,\n dataButtons,\n spaceX,\n isScrollSnap,\n}: SocialProofSectionProps) => {\n const spaceXClasses = {\n \"20px\": \"md:gap-x-5\",\n \"28px\": \"md:gap-x-7\",\n \"36px\": \"md:gap-x-9\",\n };\n\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataBrands && dataBrands?.length > 0 && (\n <div\n className={cn(\n \"list-brands flex flex-row gap-y-6 overflow-hidden overflow-x-auto py-2 md:flex-wrap md:justify-center\",\n spaceXClasses[spaceX || \"20px\"],\n isScrollSnap\n ? \"-mx-5 snap-x snap-mandatory flex-nowrap space-x-5 px-5 pb-3 md:space-x-0 md:px-0\"\n : \"flex-wrap justify-center\"\n )}\n >\n {dataBrands?.map((brand: BrandData, index: number) => (\n <div\n className={cn(\n \"flex items-center justify-center md:basis-auto md:px-0\",\n isScrollSnap ? \"shrink-0 basis-1/3 snap-center\" : \"basis-1/2 px-2.5\"\n )}\n key={index}\n >\n <div className=\"flex w-auto max-w-36 items-center justify-center\">\n {brand?.url ? (\n <a\n href={brand?.url}\n title={brand?.name}\n target={brand?.newTab ? \"_blank\" : \"_self\"}\n className=\"group\"\n >\n <img\n src={brand?.logo}\n loading=\"lazy\"\n alt={brand?.name}\n className=\"transform object-contain transition group-hover:scale-105\"\n />\n </a>\n ) : (\n <img\n src={brand?.logo}\n loading=\"lazy\"\n alt={brand?.name}\n className=\"object-contain\"\n />\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst SocialProofTemplateTwo = ({\n dataHeading,\n dataBrands,\n dataButtons,\n isScrollSnap,\n}: SocialProofSectionProps) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataBrands && dataBrands?.length > 0 && (\n <div\n className={cn(\n \"list-brands md:grid-cols-4 md:gap-x-7 md:gap-y-6\",\n isScrollSnap\n ? \"-mx-5 flex snap-x snap-mandatory flex-nowrap space-x-5 overflow-hidden overflow-x-auto px-5 pb-3 md:mx-0 md:grid md:space-x-0 md:px-0\"\n : \"grid grid-cols-2 gap-x-4 gap-y-6\"\n )}\n >\n {dataBrands?.map((brand: BrandData, index: number) => (\n <div\n className={cn(\n \"flex items-center justify-center text-center\",\n isScrollSnap ? \"shrink-0 basis-5/12 snap-center\" : \"\"\n )}\n key={index}\n >\n {brand?.url ? (\n <a\n href={brand?.url}\n title={brand?.name}\n target={brand?.newTab ? \"_blank\" : \"_self\"}\n className=\"flex h-full w-full items-center justify-center rounded-md border border-gray-200 p-3 duration-300 hover:border-pink-500\"\n >\n <div className=\"flex w-auto max-w-36 items-center justify-center\">\n <img\n src={brand?.logo}\n loading=\"lazy\"\n alt={brand?.name}\n className=\"object-contain\"\n />\n </div>\n </a>\n ) : (\n <div className=\"flex h-full w-full items-center justify-center rounded-md border border-gray-200 p-3\">\n <div className=\"flex w-auto max-w-36 items-center justify-center\">\n <img\n src={brand?.logo}\n loading=\"lazy\"\n alt={brand?.name}\n className=\"object-contain\"\n />\n </div>\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align={\"center\"}\n />\n )}\n </>\n );\n};\n\nconst renderTemplate = ({\n template,\n dataHeading,\n dataBrands,\n dataButtons,\n spaceX,\n isScrollSnap,\n}: SocialProofSectionProps) => {\n switch (template) {\n case 1:\n return (\n <SocialProofTemplateOne\n dataHeading={dataHeading}\n dataBrands={dataBrands}\n dataButtons={dataButtons}\n spaceX={spaceX}\n isScrollSnap={isScrollSnap}\n />\n );\n case 2:\n return (\n <SocialProofTemplateTwo\n dataHeading={dataHeading}\n dataBrands={dataBrands}\n dataButtons={dataButtons}\n isScrollSnap={isScrollSnap}\n />\n );\n default:\n return (\n <SocialProofTemplateOne\n dataHeading={dataHeading}\n dataBrands={dataBrands}\n dataButtons={dataButtons}\n spaceX={spaceX}\n isScrollSnap={isScrollSnap}\n />\n );\n }\n};\n\nconst SocialProofSectionContent = ({\n template,\n dataHeading,\n dataBrands,\n dataButtons,\n spaceX,\n isScrollSnap,\n}: SocialProofSectionProps) => {\n return (\n <>\n {renderTemplate({\n template,\n dataHeading,\n dataBrands,\n dataButtons,\n spaceX,\n isScrollSnap,\n })}\n </>\n );\n};\n\nconst SocialProofSection = ({\n template = 1,\n background,\n className,\n idSection,\n dataHeading,\n dataBrands,\n dataButtons,\n spaceX = \"20px\",\n isScrollSnap,\n}: SocialProofSectionProps) => {\n return (\n <SectionBlock className={className} idSection={idSection} background={background}>\n <SocialProofSectionContent\n template={template}\n dataHeading={dataHeading}\n dataBrands={dataBrands}\n dataButtons={dataButtons}\n spaceX={spaceX}\n isScrollSnap={isScrollSnap}\n />\n </SectionBlock>\n );\n};\n\nexport type { SocialProofSectionProps };\nexport { SocialProofSection };\n","import { useState } from \"react\";\nimport { ChevronRightIcon } from \"@heroicons/react/16/solid\";\nimport parse from \"html-react-parser\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from \"../Accordion\";\nimport { AspectRatio } from \"../AspectRatio\";\nimport { ButtonsBlock, HeadingBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { TextButton } from \"../TextButton\";\nimport { useIsMobile } from \"./../ActionButton/utils\";\nimport { FeatureData, FeatureSectionProps } from \"./utils\";\n\nconst RenderFeatureLink = ({\n btnLink,\n btnName,\n newTab,\n}: {\n btnLink: FeatureData[\"btnLink\"];\n btnName: FeatureData[\"btnName\"];\n newTab: FeatureData[\"newTab\"];\n}) => {\n return (\n <TextButton variant=\"primary\" asChild>\n <a href={btnLink} target={newTab ? \"_blank\" : \"_self\"} rel=\"noreferrer\">\n {btnName || \"Xem chi tiết\"}\n <ChevronRightIcon className=\"h-4 w-4\" />\n </a>\n </TextButton>\n );\n};\n\nconst FeatureTemplateOne = ({ dataHeading, dataFeatures, dataButtons }) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n\n {dataFeatures && (\n <div className=\"list-features grid grid-cols-1 gap-8 md:grid-cols-3 lg:gap-12\">\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div className=\"feature-item relative flex w-full flex-col text-center\" key={index}>\n {feature?.image && (\n <div className=\"mx-auto h-16 w-16\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n <div className=\"mx-auto mt-4 w-full max-w-xs flex-1 md:max-w-full\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-base text-gray-600\">{parse(feature.description)}</div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst FeatureTemplateTwo = ({ dataHeading, dataFeatures, dataButtons }) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataFeatures && (\n <div className=\"list-features list-features-2 grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4\">\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div\n className=\"feature-item relative flex w-full flex-col overflow-hidden rounded-md border border-gray-200 p-5\"\n key={index}\n >\n {feature?.image && (\n <div className=\"h-16 w-16\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n <div className=\"mt-4 flex w-full flex-1 flex-col\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-base text-gray-600\">{parse(feature.description)}</div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n <style>{`\n .list-features-2 .feature-item {\n background: linear-gradient(180deg, #FAFAFA 0%, rgba(255, 255, 255, 1) 91%);\n }\n `}</style>\n </>\n );\n};\n\nconst FeatureTemplateThree = ({ dataHeading, dataFeatures, dataButtons }) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataFeatures && (\n <div className=\"list-features grid grid-cols-1 gap-8 md:grid-cols-3 lg:gap-12\">\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div className=\"feature-item relative flex w-full flex-col\" key={index}>\n {feature?.image && (\n <div className=\"h-16 w-16\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n <div className=\"mt-4 w-full flex-1\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-base text-gray-600\">{parse(feature.description)}</div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst FeatureTemplateFour = ({ dataHeading, dataFeatures, dataButtons }) => {\n return (\n <div className=\"grid grid-cols-1 gap-0 lg:grid-cols-10 lg:gap-12\">\n <div className=\"lg:col-span-4 lg:flex lg:flex-col lg:justify-center\">\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"left\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={cn(\"text-center lg:mb-0 lg:text-left\", dataHeading?.className)}\n />\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={`hidden lg:flex ${dataButtons?.className}`}\n align=\"left\"\n />\n )}\n </div>\n <div className=\"lg:col-span-6\">\n {dataFeatures && (\n <div className=\"list-features grid grid-cols-1 gap-6 md:grid-cols-2 md:gap-5\">\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div\n className=\"feature-item relative flex w-full flex-col rounded-lg border border-gray-200 bg-white p-5\"\n key={index}\n >\n {feature?.image && (\n <div className=\"h-16 w-16\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n <div className=\"mt-4 flex w-full flex-1 flex-col\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-base text-gray-600\">\n {parse(feature.description)}\n </div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={`flex lg:hidden ${dataButtons?.className}`}\n align=\"center\"\n />\n )}\n </div>\n </div>\n );\n};\n\nconst FeatureTemplateFive = ({ dataHeading, dataFeatures, dataButtons }) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataFeatures && (\n <div className=\"list-features mx-auto grid max-w-4xl grid-cols-1 gap-5 md:grid-cols-2\">\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div\n className=\"feature-item relative flex w-full flex-col rounded-lg border border-gray-200 bg-white p-7\"\n key={index}\n >\n {feature?.image && (\n <div className=\"h-16 w-16\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n <div className=\"mt-4 flex w-full flex-1 flex-col\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-base text-gray-600\">{parse(feature.description)}</div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst FeatureTemplateSix = ({ dataHeading, dataFeatures, dataButtons }) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataFeatures && (\n <div className=\"list-features grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-3 lg:gap-x-7 lg:gap-y-10\">\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div className=\"feature-item relative w-full\" key={index}>\n {feature?.image && (\n <div className=\"h-12 w-12\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n <div className=\"mt-3 flex w-full flex-1 flex-col\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-sm text-gray-500\">{parse(feature.description)}</div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst FeatureTemplateSeven = ({ dataHeading, dataFeatures, dataButtons }) => {\n const totalItems = dataFeatures?.length || 0;\n\n const BASIS_CLASSES = {\n default: \"md:basis-1/5\",\n special: \"md:basis-1/4\",\n };\n\n const ROW_BREAK_INDEX = {\n 6: 3,\n 7: 4,\n 8: 4,\n };\n\n const isSpecialLayout = (totalItems >= 1 && totalItems <= 4) || [6, 7, 8].includes(totalItems);\n const basisClass = isSpecialLayout ? BASIS_CLASSES.special : BASIS_CLASSES.default;\n const breakAfterIndex = ROW_BREAK_INDEX[totalItems] ?? -1;\n\n const renderFeatureItem = (feature: FeatureData, index: number) => {\n const WrapperTag = feature?.btnLink ? \"a\" : \"div\";\n const wrapperProps = feature?.btnLink\n ? {\n href: feature.btnLink,\n target: feature?.newTab ? \"_blank\" : \"_self\",\n rel: \"noopener noreferrer\",\n title: feature?.btnName,\n }\n : {};\n\n return (\n <div\n key={index}\n className={cn(\n \"basis-1/2 px-2 lg:px-5\",\n basisClass,\n index === breakAfterIndex && \"md:break-after-row\",\n feature?.btnLink && \"group cursor-pointer\"\n )}\n >\n <WrapperTag\n {...wrapperProps}\n className=\"feature-item relative flex w-full flex-col items-center gap-3\"\n >\n {feature?.image && (\n <div className=\"h-16 w-16 transition-transform duration-300 group-hover:scale-105\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n loading=\"lazy\"\n />\n </div>\n )}\n <div className=\"w-full flex-1 text-center\">\n {feature?.name && (\n <h3 className=\"text-base duration-300 group-hover:text-pink-500\">\n {parse(feature.name)}\n </h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-sm text-gray-500\">{parse(feature.description)}</div>\n )}\n </div>\n </WrapperTag>\n </div>\n );\n };\n\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n\n {dataFeatures && (\n <div className=\"list-features -mx-2 flex flex-wrap justify-center gap-y-10 lg:-mx-5\">\n {dataFeatures.map((feature: FeatureData, index: number) =>\n renderFeatureItem(feature, index)\n )}\n </div>\n )}\n\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst FeatureTemplateEight = ({ dataHeading, dataFeatures, dataButtons }) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataFeatures && (\n <div className=\"list-features grid grid-cols-1 gap-6 md:grid-cols-3\">\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div\n className=\"feature-item relative flex w-full flex-col overflow-hidden rounded-xl bg-gray-100\"\n key={index}\n >\n <div className=\"flex w-full flex-1 flex-col p-5\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-base text-gray-600\">{parse(feature.description)}</div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n {feature?.image && (\n <div className=\"w-full\" style={{ aspectRatio: \"347/220\" }}>\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst FeatureTemplateNine = ({\n dataHeading,\n dataFeatures,\n dataButtons,\n dataBanner,\n}: FeatureSectionProps) => {\n return (\n <div className=\"grid grid-cols-1 gap-10 lg:grid-cols-10 lg:gap-14\">\n <div className=\"flex items-center lg:col-span-6\">\n <div className=\"w-full\">\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"left\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={cn(\"text-center lg:text-left\", dataHeading?.className)}\n />\n )}\n {dataFeatures && (\n <div className=\"list-features grid grid-cols-1 gap-6 md:auto-cols-auto md:grid-cols-2\">\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div className=\"feature-item relative flex w-full flex-col\" key={index}>\n {feature?.image && (\n <div className=\"h-10 w-10\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n <div className=\"mt-3 flex w-full flex-1 flex-col\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-base text-gray-600\">\n {parse(feature.description)}\n </div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"left\"\n />\n )}\n </div>\n </div>\n {dataBanner && (\n <div className=\"flex items-center lg:col-span-4\">\n <div className=\"mx-auto w-full max-w-xs md:max-w-md\">\n <AspectRatio ratio={dataBanner?.ratio || 1} className=\"w-full\">\n <img\n src={dataBanner?.src}\n alt={dataBanner?.alt}\n loading=\"lazy\"\n className=\"h-full w-full object-cover\"\n />\n </AspectRatio>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nconst FeatureTemplateTen = ({ dataHeading, dataFeatures, dataBanner, dataButtons }) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n <div className={cn(\"relative flex items-center\", dataBanner && \"lg:min-h-[590px]\")}>\n {dataFeatures && (\n <div\n className={cn(\n \"list-features grid grid-cols-1 gap-8 md:grid-cols-2\",\n dataBanner\n ? \"lg:flex lg:flex-row lg:flex-wrap lg:gap-x-0 lg:gap-y-16\"\n : \"mx-auto max-w-4xl\"\n )}\n >\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div\n className={cn(\n \"feature-item relative w-full\",\n dataBanner && \"lg:basis-1/2 odd:lg:pr-48 even:lg:pl-48\"\n )}\n key={index}\n >\n {feature?.image && (\n <div className=\"h-12 w-12\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n <div className=\"mt-3 flex w-full flex-1 flex-col\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-gray-500\">{parse(feature.description)}</div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n </div>\n ))}\n {dataBanner && (\n <div\n className=\"absolute left-1/2 top-1/2 mx-auto hidden w-72 -translate-x-1/2 -translate-y-1/2 lg:flex lg:items-end lg:justify-center lg:p-1.5 xl:p-2\"\n style={{ aspectRatio: \"352/721\" }}\n >\n <div\n className=\"mockup-bg pointer-events-none absolute inset-0 h-full w-full select-none\"\n style={{\n background:\n \"url(https://homepage.momocdn.net/img/momo-amazone-s3-api-240809173159-638588215193226459.png) no-repeat bottom center/contain\",\n }}\n ></div>\n <div\n className=\"h-full w-full overflow-hidden bg-gray-100\"\n style={{ borderRadius: \"30px\" }}\n >\n <img\n src={dataBanner?.src}\n alt={dataBanner?.alt}\n className=\"h-full w-full object-contain\"\n />\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst FeatureTemplateElevent = ({ dataHeading, dataFeatures, dataButtons, dataBanner }) => {\n const [activeIndex, setActiveIndex] = useState(0);\n const isMobileDevice = useIsMobile();\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataFeatures && (\n <div className=\"grid grid-cols-1 gap-10 md:grid-cols-2 lg:gap-14\">\n <div>\n <div className=\"list-features w-full md:border-l-2 md:border-gray-200\">\n <Accordion\n type=\"single\"\n collapsible={isMobileDevice}\n // value={activeIndex.toString()}\n onValueChange={(val) => {\n const idx = parseInt(val);\n if (!isNaN(idx)) setActiveIndex(idx);\n }}\n defaultValue={activeIndex.toString()}\n >\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <AccordionItem\n key={index}\n value={index.toString()}\n className=\"feature-item group relative flex w-full flex-col border-y-0 border-b last:border-b-0 md:-ml-0.5 md:border-b-0 md:border-l-2 md:border-gray-200 md:pl-5 md:[&[data-state=open]]:border-pink-500\"\n >\n <AccordionTrigger className=\"text-left text-lg font-semibold md:group-first:pt-0 md:group-last:pb-0 [&>svg]:md:hidden\">\n {parse(feature.name || \"\")}\n </AccordionTrigger>\n <AccordionContent>\n {feature?.description && (\n <div className=\"text-muted-foreground mb-3\">\n {parse(feature.description || \"\")}\n </div>\n )}\n\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n {feature?.image && !dataBanner?.src && (\n <div className=\"mx-auto mt-5 w-full max-w-xs md:hidden\">\n <AspectRatio ratio={1} className=\"w-full\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </AspectRatio>\n </div>\n )}\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n </div>\n </div>\n\n <div className={cn(!dataBanner?.src ? \"hidden md:flex\" : \"flex\")}>\n <div className=\"mx-auto w-full max-w-xs md:max-w-md\">\n {dataBanner?.src ? (\n <AspectRatio ratio={dataBanner?.ratio || 1} className=\"w-full\">\n <img\n src={dataBanner?.src}\n alt={dataBanner?.alt}\n loading=\"lazy\"\n className=\"h-full w-full object-cover\"\n />\n </AspectRatio>\n ) : (\n <div className=\"hidden md:flex\">\n {dataFeatures?.[activeIndex]?.image ? (\n <AspectRatio ratio={1} className=\"w-full\">\n <img\n src={dataFeatures?.[activeIndex]?.image}\n alt={dataFeatures?.[activeIndex]?.name}\n className=\"h-full w-full object-contain\"\n loading=\"lazy\"\n />\n </AspectRatio>\n ) : (\n <div className=\"h-0 w-0\"></div>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nexport {\n FeatureTemplateOne,\n FeatureTemplateTwo,\n FeatureTemplateThree,\n FeatureTemplateFour,\n FeatureTemplateFive,\n FeatureTemplateSix,\n FeatureTemplateSeven,\n FeatureTemplateEight,\n FeatureTemplateNine,\n FeatureTemplateTen,\n FeatureTemplateElevent,\n};\n","import { SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport {\n FeatureTemplateEight,\n FeatureTemplateElevent,\n FeatureTemplateFive,\n FeatureTemplateFour,\n FeatureTemplateNine,\n FeatureTemplateOne,\n FeatureTemplateSeven,\n FeatureTemplateSix,\n FeatureTemplateTen,\n FeatureTemplateThree,\n FeatureTemplateTwo,\n} from \"./FeatureTemlates\";\nimport { FeatureSectionProps } from \"./utils\";\n\nconst renderTemplate = ({\n template,\n dataHeading,\n dataFeatures,\n dataButtons,\n dataBanner,\n}: FeatureSectionProps) => {\n switch (template) {\n case 1:\n return (\n <FeatureTemplateOne\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n case 2:\n return (\n <FeatureTemplateTwo\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n case 3:\n return (\n <FeatureTemplateThree\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n case 4:\n return (\n <FeatureTemplateFour\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n case 5:\n return (\n <FeatureTemplateFive\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n case 6:\n return (\n <FeatureTemplateSix\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n case 7:\n return (\n <FeatureTemplateSeven\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n case 8:\n return (\n <FeatureTemplateEight\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n case 9:\n return (\n <FeatureTemplateNine\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n dataBanner={dataBanner}\n />\n );\n case 10:\n return (\n <FeatureTemplateTen\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataBanner={dataBanner}\n dataButtons={dataButtons}\n />\n );\n case 11:\n return (\n <FeatureTemplateElevent\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataBanner={dataBanner}\n dataButtons={dataButtons}\n />\n );\n default:\n return (\n <FeatureTemplateOne\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n }\n};\n\nconst FeatureSectionContent = ({\n template,\n dataHeading,\n dataFeatures,\n dataButtons,\n dataBanner,\n}: FeatureSectionProps) => {\n return (\n <>\n {renderTemplate({\n template,\n dataHeading,\n dataFeatures,\n dataButtons,\n dataBanner,\n })}\n </>\n );\n};\n\nexport const FeatureSection = ({\n template = 1,\n background,\n className,\n idSection,\n dataHeading,\n dataFeatures,\n dataButtons,\n dataBanner,\n}: FeatureSectionProps) => {\n return (\n <SectionBlock className={className} idSection={idSection} background={background}>\n <FeatureSectionContent\n template={template}\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n dataBanner={dataBanner}\n />\n </SectionBlock>\n );\n};\n","import { StarIcon } from \"@heroicons/react/24/solid\";\nimport parse from \"html-react-parser\";\nimport _ from \"lodash\";\n\nimport { cn } from \"../../../helpers/utils\";\nimport { ButtonsBlock, HeadingBlock } from \"../../CommonBlocks/CommonBlocks\";\nimport { InfiniteSlider } from \"../../core/infinite-slider\";\nimport {\n getColorForIndex,\n getInitials,\n randomColors,\n TestimonialData,\n TestimonialSectionProps,\n} from \"../utils\";\n\nconst TestimonialAvatar = ({\n avatar = \"\",\n name = \"\",\n index = 0,\n}: {\n avatar?: string;\n name?: string;\n index?: number;\n}) => {\n //TODO: check avatar null => \"Nguyen Van A\" => \"VA\"\n if (_.isEmpty(avatar)) {\n const initials = getInitials({ name }) ?? \"\";\n const bgColor = getColorForIndex(index, randomColors);\n return (\n <div\n className={cn(\n \"flex h-9 w-9 shrink-0 items-center justify-center overflow-hidden rounded-full font-semibold text-white \",\n bgColor\n )}\n >\n {initials}\n </div>\n );\n }\n\n return (\n <div className=\"h-9 w-9 shrink-0 overflow-hidden rounded-full\">\n <img src={avatar} loading=\"lazy\" className=\"h-full w-full object-cover\" alt={name} />\n </div>\n );\n};\n\nconst TestimonialItem = ({\n testimonial,\n className,\n index,\n}: {\n testimonial: TestimonialData;\n className?: string;\n index?: number;\n}) => (\n <div className={cn(\"testimonial-item\", className)}>\n <div className=\"relative h-full rounded-xl border border-gray-100 bg-white px-5 pb-10 pt-4 shadow-md sm:px-5\">\n <div className=\"flex flex-nowrap items-center space-x-2\">\n <TestimonialAvatar avatar={testimonial.avatar} name={testimonial.name} index={index} />\n <div className=\"min-w-0 flex-1 pl-1\">\n <div className=\"overflow-hidden text-ellipsis whitespace-nowrap text-sm font-semibold text-gray-700\">\n {testimonial.name}\n </div>\n {testimonial?.position && (\n <div className=\"text-xs font-normal text-pink-500\">{parse(testimonial.position)}</div>\n )}\n </div>\n </div>\n <div className=\"mt-3\">\n {testimonial?.shortTitle && (\n <div className=\"text-sm font-bold text-gray-700\">{parse(testimonial.shortTitle)}</div>\n )}\n {testimonial?.description && (\n <div className=\"relative mt-1 max-h-full overflow-hidden text-sm leading-normal text-gray-600\">\n {parse(testimonial.description)}\n </div>\n )}\n </div>\n <div className=\"absolute bottom-0 left-0 right-0 flex items-center justify-between space-x-2 p-4 md:px-5\">\n {testimonial?.date && <div className=\"text-xs text-gray-400\">{testimonial.date}</div>}\n {Number(testimonial?.rating) > 0 && (\n <div className=\"flex flex-nowrap space-x-0.5 text-sm\">\n {Array.from({ length: 5 }, (_, idx) => (\n <StarIcon\n className={`h-4 w-4 ${\n idx < Number(testimonial.rating) ? \"text-yellow-400\" : \"text-gray-200\"\n }`}\n key={idx}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n);\n\nexport const TestimonialTemplateOne = ({\n dataHeading,\n dataTestimonials,\n dataButtons,\n}: TestimonialSectionProps) => {\n const testimonialsLength = dataTestimonials?.length ?? 0;\n const isRunAnimation = testimonialsLength > 3;\n\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading.tagline}\n title={dataHeading.title}\n description={dataHeading.description}\n tagHeading={dataHeading.tagHeading}\n align=\"center\"\n colorScheme={dataHeading.colorScheme || \"pink\"}\n sizeHeading={dataHeading.sizeHeading}\n className={dataHeading.className}\n />\n )}\n\n {testimonialsLength > 0 && (\n <>\n {isRunAnimation ? (\n <div className=\"relative -mx-5 overflow-hidden md:mx-0\">\n <InfiniteSlider\n direction=\"horizontal\"\n speed={70}\n speedOnHover={0.05}\n gap={24}\n className=\"pb-1.5\"\n >\n {dataTestimonials?.map((testimonial, index) => (\n <TestimonialItem\n testimonial={testimonial}\n key={`testimonial-${index}`}\n index={index}\n className=\"mb-2 w-64 md:w-96\"\n />\n ))}\n </InfiniteSlider>\n </div>\n ) : (\n <div className=\"-mx-5 flex snap-x snap-mandatory flex-nowrap gap-y-6 space-x-5 overflow-hidden overflow-x-auto px-5 pb-3 md:-mx-3 md:w-full md:flex-wrap md:justify-center md:space-x-0\">\n {dataTestimonials?.map((testimonial, index) => (\n <TestimonialItem\n testimonial={testimonial}\n key={`testimonial-${index}`}\n index={index}\n className=\"shrink-0 basis-10/12 snap-center md:px-3 lg:basis-1/3\"\n />\n ))}\n </div>\n )}\n </>\n )}\n\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { animate, motion, useMotionValue } from \"motion/react\";\nimport useMeasure from \"react-use-measure\";\n\nimport { cn } from \"../../helpers/utils\";\n\nexport type InfiniteSliderProps = {\n children: React.ReactNode;\n gap?: number;\n speed?: number;\n speedOnHover?: number;\n direction?: \"horizontal\" | \"vertical\";\n reverse?: boolean;\n className?: string;\n classNameMotion?: string;\n};\n\nexport function InfiniteSlider({\n children,\n gap = 16,\n speed = 100,\n speedOnHover,\n direction = \"horizontal\",\n reverse = false,\n className,\n classNameMotion,\n}: InfiniteSliderProps) {\n const [currentSpeed, setCurrentSpeed] = useState(speed);\n const [ref, { width, height }] = useMeasure();\n const translation = useMotionValue(0);\n const [isTransitioning, setIsTransitioning] = useState(false);\n const [key, setKey] = useState(0);\n\n useEffect(() => {\n let controls;\n const size = direction === \"horizontal\" ? width : height;\n const contentSize = size + gap;\n const from = reverse ? -contentSize / 2 : 0;\n const to = reverse ? 0 : -contentSize / 2;\n\n const distanceToTravel = Math.abs(to - from);\n const duration = distanceToTravel / currentSpeed;\n\n if (isTransitioning) {\n const remainingDistance = Math.abs(translation.get() - to);\n const transitionDuration = remainingDistance / currentSpeed;\n\n controls = animate(translation, [translation.get(), to], {\n ease: \"linear\",\n duration: transitionDuration,\n onComplete: () => {\n setIsTransitioning(false);\n setKey((prevKey) => prevKey + 1);\n },\n });\n } else {\n controls = animate(translation, [from, to], {\n ease: \"linear\",\n duration: duration,\n repeat: Infinity,\n repeatType: \"loop\",\n repeatDelay: 0,\n onRepeat: () => {\n translation.set(from);\n },\n });\n }\n\n return controls?.stop;\n }, [key, translation, currentSpeed, width, height, gap, isTransitioning, direction, reverse]);\n\n const hoverProps = speedOnHover\n ? {\n onHoverStart: () => {\n setIsTransitioning(true);\n setCurrentSpeed(speedOnHover);\n },\n onHoverEnd: () => {\n setIsTransitioning(true);\n setCurrentSpeed(speed);\n },\n onTouchStart: () => {\n setIsTransitioning(true);\n setCurrentSpeed(speedOnHover);\n },\n onTouchEnd: () => {\n setIsTransitioning(true);\n setCurrentSpeed(speed);\n },\n }\n : {};\n\n return (\n <div className={cn(\"overflow-hidden\", className)}>\n <motion.div\n className={cn(\"flex w-max\", classNameMotion)}\n style={{\n ...(direction === \"horizontal\"\n ? { x: translation, paddingLeft: gap }\n : { y: translation }),\n gap: `${gap}px`,\n flexDirection: direction === \"horizontal\" ? \"row\" : \"column\",\n }}\n ref={ref}\n {...hoverProps}\n >\n {children}\n {children}\n </motion.div>\n </div>\n );\n}\n","import { ButtonsBlockProps, HeadingBlockProps, SectionBlockProps } from \"../CommonBlocks/utils\";\n\ninterface TestimonialData {\n /**\n * Avatar of the testimonial.\n */\n avatar?: string;\n /**\n * Name of the testimonial.\n */\n name?: string;\n /**\n * Position of the testimonial.\n */\n position?: string;\n /**\n * Short title of the testimonial.\n */\n shortTitle?: string;\n /**\n * Description of the testimonial.\n */\n description?: string;\n /**\n * Rating of the testimonial. value from 1 to 5. Default is 5.\n */\n rating?: number;\n /**\n * Date of the testimonial.\n */\n date?: string;\n}\n\ninterface TestimonialSectionProps extends SectionBlockProps {\n /**\n * The template of the section.\n */\n template?: 1 | 2 | 3;\n /**\n * The data heading of the section.\n */\n dataHeading?: HeadingBlockProps;\n /**\n * The array data testimonials of the section.\n */\n dataTestimonials?: TestimonialData[];\n /**\n * The data buttons of the section.\n */\n dataButtons?: ButtonsBlockProps;\n}\n\nexport const randomColors = [\n \"bg-red-500\",\n \"bg-blue-500\",\n \"bg-green-500\",\n \"bg-yellow-500\",\n \"bg-purple-500\",\n \"bg-pink-500\",\n \"bg-orange-500\",\n \"bg-green-700\",\n];\n\nexport const getInitials = ({ name = \"\" }: { name: string }) => {\n const parts = name?.trim()?.split(/\\s+/) || [];\n return parts?.length > 1\n ? `${parts?.[parts?.length - 2]?.[0]?.toUpperCase()}${parts?.[parts?.length - 1]?.[0]?.toUpperCase()}`\n : parts?.[0]?.[0]?.toUpperCase() || \"\";\n};\n\nexport const getColorForIndex = (index: number, colors: string[]) => colors[index % colors.length];\n\nexport type { TestimonialData, TestimonialSectionProps };\n","import { StarIcon } from \"@heroicons/react/24/solid\";\nimport parse from \"html-react-parser\";\nimport _ from \"lodash\";\n\nimport { TestimonialSectionProps } from \"..\";\nimport { cn } from \"../../../helpers/utils\";\nimport { AspectRatio } from \"../../AspectRatio\";\nimport { Carousel, CarouselContent, CarouselDots, CarouselItem } from \"../../Carousel\";\nimport { ButtonsBlock, HeadingBlock } from \"../../CommonBlocks/CommonBlocks\";\nimport { TestimonialData } from \"../utils\";\n\nconst QuoteIcon = ({ className }: { className?: string }) => (\n <svg\n width=\"42\"\n height=\"36\"\n className={className}\n viewBox=\"0 0 42 36\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M23.8986 36V25.1748C23.8986 18.3776 25.3972 12.8392 28.3944 8.55944C31.4704 4.1958 36.0056 1.34266 42 0V8.18182C39.3183 8.85315 37.1887 10.1119 35.6113 11.958C34.0338 13.7203 33.0084 15.8601 32.5352 18.3776H39.6338V36H23.8986ZM0 36V25.1748C0 18.3776 1.49859 12.8392 4.49577 8.55944C7.57183 4.1958 12.0676 1.34266 17.9831 0V8.18182C15.3014 8.85315 13.1718 10.1119 11.5944 11.958C10.0169 13.7203 8.99155 15.8601 8.51831 18.3776H15.6169V36H0Z\"\n fill=\"#F95396\"\n />\n </svg>\n);\nconst TestimonialItem = ({\n testimonial,\n className,\n}: {\n testimonial: TestimonialData;\n className?: string;\n index?: number;\n}) => (\n <div\n className={cn(\n \"testimonial-item shadow-small relative h-full w-full cursor-grab select-none overflow-hidden rounded-xl bg-white p-5 md:p-10\",\n className\n )}\n >\n <div className=\"flex h-full md:space-x-10\">\n {testimonial?.avatar && (\n <div className=\"relative hidden w-52 flex-none grow-0 items-start md:flex\">\n <AspectRatio ratio={2 / 3} className=\"w-full\">\n <img\n src={testimonial?.avatar}\n alt={testimonial?.name}\n loading=\"lazy\"\n className=\"h-full w-full object-contain\"\n />\n </AspectRatio>\n </div>\n )}\n <div className=\"flex grow flex-col justify-between gap-y-5 md:gap-y-6\">\n <div className=\"flex flex-none items-end space-x-2 md:order-2 lg:space-x-6\">\n <div className=\"grow\">\n {testimonial?.name && (\n <div className=\"text-sm font-bold md:text-base\">{testimonial.name}</div>\n )}\n {testimonial?.position && (\n <div className=\"mt-1 text-xs font-normal text-gray-500\">\n {parse(testimonial.position)}\n </div>\n )}\n </div>\n {(testimonial?.date || Number(testimonial?.rating) > 0) && (\n <div className=\"hidden flex-none grow-0 text-right md:grid md:grid-cols-1 md:gap-1\">\n {testimonial?.date && <div className=\"text-xs text-gray-400\">{testimonial.date}</div>}\n {Number(testimonial?.rating) > 0 && (\n <div className=\"flex flex-nowrap space-x-0.5 text-sm\">\n {Array.from({ length: 5 }, (_, idx) => (\n <StarIcon\n className={`h-4 w-4 flex-none ${\n idx < Number(testimonial.rating) ? \"text-yellow-400\" : \"text-gray-200\"\n }`}\n key={idx}\n />\n ))}\n </div>\n )}\n </div>\n )}\n {testimonial?.avatar && (\n <div className=\"relative w-28 flex-none grow-0 md:hidden\">\n <AspectRatio ratio={2 / 3} className=\"w-full\">\n <img\n src={testimonial?.avatar}\n alt={testimonial?.name}\n loading=\"lazy\"\n className=\"h-full w-full object-contain\"\n />\n </AspectRatio>\n </div>\n )}\n </div>\n <div className=\"flex flex-1 flex-col md:flex-none\">\n <div className=\"flex-1\">\n <div className=\"mb-1.5 flex flex-none space-x-3\">\n <QuoteIcon className=\"h-5 w-5 md:h-6 md:w-6\" />\n {testimonial?.shortTitle && (\n <div className=\"flex-none text-base font-medium md:text-lg\">\n {parse(testimonial.shortTitle)}\n </div>\n )}\n </div>\n {testimonial?.description && (\n <blockquote className=\"relative flex-1 text-justify text-base\">\n {parse(testimonial.description)}\n </blockquote>\n )}\n </div>\n {(testimonial?.date || Number(testimonial?.rating) > 0) && (\n <div\n className={cn(\n \"mt-2 flex flex-none items-center space-x-2 md:hidden\",\n testimonial?.date && testimonial?.rating ? \"justify-between\" : \"justify-end\"\n )}\n >\n {testimonial?.date && <div className=\"text-xs text-gray-400\">{testimonial.date}</div>}\n {Number(testimonial?.rating) > 0 && (\n <div className=\"flex flex-nowrap space-x-0.5 text-sm\">\n {Array.from({ length: 5 }, (_, idx) => (\n <StarIcon\n className={`h-4 w-4 flex-none ${\n idx < Number(testimonial.rating) ? \"text-yellow-400\" : \"text-gray-200\"\n }`}\n key={idx}\n />\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n);\n\nexport const TestimonialTemplateThree = ({\n dataHeading,\n dataTestimonials,\n dataButtons,\n}: TestimonialSectionProps) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading.tagline}\n title={dataHeading.title}\n description={dataHeading.description}\n tagHeading={dataHeading.tagHeading}\n align=\"center\"\n colorScheme={dataHeading.colorScheme || \"pink\"}\n sizeHeading={dataHeading.sizeHeading}\n className={dataHeading.className}\n />\n )}\n\n {(dataTestimonials ?? []).length > 0 && (\n <Carousel className=\"w-full\">\n <CarouselContent classNameContent=\"!overflow-visible\" className=\"-ml-5 md:-ml-6\">\n {dataTestimonials?.map((testimonial, index) => (\n <CarouselItem\n key={index}\n className=\"basis-full pl-5 md:pl-6 lg:basis-10/12 xl:basis-9/12\"\n >\n <TestimonialItem testimonial={testimonial} />\n </CarouselItem>\n ))}\n </CarouselContent>\n {(dataTestimonials ?? []).length > 1 && <CarouselDots className=\"mt-8\" />}\n </Carousel>\n )}\n\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n","import { StarIcon } from \"@heroicons/react/24/solid\";\nimport parse from \"html-react-parser\";\nimport _ from \"lodash\";\n\nimport { TestimonialSectionProps } from \"..\";\nimport { cn, Media, MediaContextProvider } from \"../../../helpers/utils\";\nimport { ButtonsBlock, HeadingBlock } from \"../../CommonBlocks/CommonBlocks\";\nimport { InfiniteSlider } from \"../../core/infinite-slider\";\nimport { getColorForIndex, getInitials, randomColors, TestimonialData } from \"../utils\";\n\nconst TestimonialAvatar = ({\n avatar = \"\",\n name = \"\",\n index = 0,\n}: {\n avatar?: string;\n name?: string;\n index?: number;\n}) => {\n //TODO: check avatar null => \"Nguyen Van A\" => \"VA\"\n if (_.isEmpty(avatar)) {\n const initials = getInitials({ name }) ?? \"\";\n const bgColor = getColorForIndex(index, randomColors);\n\n return (\n <div\n className={cn(\n \"flex h-9 w-9 shrink-0 items-center justify-center overflow-hidden rounded-full font-semibold text-white\",\n bgColor\n )}\n >\n {initials}\n </div>\n );\n }\n\n return (\n <div className=\"h-9 w-9 shrink-0 overflow-hidden rounded-full\">\n <img src={avatar} loading=\"lazy\" className=\"h-full w-full object-cover\" alt={name} />\n </div>\n );\n};\n\nconst TestimonialItem = ({\n testimonial,\n className,\n index,\n}: {\n testimonial: TestimonialData;\n className?: string;\n index?: number;\n}) => (\n <div className={cn(\"testimonial-item\", className)}>\n <div className=\"relative h-full rounded-xl border border-gray-100 bg-white px-5 pb-10 pt-4 shadow-md sm:px-5\">\n <div className=\"flex flex-nowrap items-center space-x-2\">\n <TestimonialAvatar avatar={testimonial.avatar} name={testimonial.name} index={index} />\n <div className=\"flex-1 pl-1\">\n <div className=\"overflow-hidden text-ellipsis whitespace-nowrap text-sm font-semibold text-gray-700\">\n {testimonial.name}\n </div>\n {testimonial?.position && (\n <div className=\"text-xs font-normal text-pink-500\">{parse(testimonial.position)}</div>\n )}\n </div>\n </div>\n <div className=\"mt-3\">\n {testimonial?.shortTitle && (\n <div className=\"text-sm font-bold text-gray-700\">{parse(testimonial.shortTitle)}</div>\n )}\n {testimonial?.description && (\n <div className=\"relative mt-1 max-h-full overflow-hidden text-sm leading-normal text-gray-600\">\n {parse(testimonial.description)}\n </div>\n )}\n </div>\n <div className=\"absolute bottom-0 left-0 right-0 flex items-center justify-between space-x-2 p-4 md:px-5\">\n {testimonial?.date && <div className=\"text-xs text-gray-400\">{testimonial.date}</div>}\n {Number(testimonial?.rating) > 0 && (\n <div className=\"flex flex-nowrap space-x-0.5 text-sm\">\n {Array.from({ length: 5 }, (_, idx) => (\n <StarIcon\n className={`h-4 w-4 ${\n idx < Number(testimonial.rating) ? \"text-yellow-400\" : \"text-gray-200\"\n }`}\n key={idx}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n);\n\nexport const TestimonialTemplateTwo = ({\n dataHeading,\n dataTestimonials,\n dataButtons,\n}: TestimonialSectionProps) => {\n const testimonialsLength = dataTestimonials?.length ?? 0;\n const isRunAnimation = testimonialsLength > 3;\n\n const sliderConfigs = {\n lg: [\n { reverse: false, speed: 40 },\n { reverse: true, speed: 50 },\n { reverse: false, speed: 30 },\n ],\n md: [\n { reverse: false, speed: 30 },\n { reverse: true, speed: 40 },\n ],\n sm: [{ reverse: false, speed: 30 }],\n };\n\n const renderSliders = (configs: { reverse: boolean; speed: number }[]) => (\n <>\n {configs.map((config, colIdx) => (\n <InfiniteSlider\n key={`slider-${colIdx}`}\n direction=\"vertical\"\n reverse={config.reverse}\n speed={config.speed}\n speedOnHover={0.05}\n gap={24}\n className=\"px-0.5\"\n classNameMotion=\"w-full\"\n >\n {dataTestimonials?.map((testimonial, index) => (\n <TestimonialItem\n testimonial={testimonial}\n key={`testimonial-${colIdx}-${index}`}\n index={index}\n className=\"px-0 first:pl-0 last:pr-0\"\n />\n ))}\n </InfiniteSlider>\n ))}\n </>\n );\n\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading.tagline}\n title={dataHeading.title}\n description={dataHeading.description}\n tagHeading={dataHeading.tagHeading}\n align=\"center\"\n colorScheme={dataHeading.colorScheme || \"pink\"}\n sizeHeading={dataHeading.sizeHeading}\n className={dataHeading.className}\n />\n )}\n\n {testimonialsLength > 0 && (\n <MediaContextProvider>\n {isRunAnimation ? (\n <div className=\"mark-vertical-marquee relative h-[600px] overflow-hidden\">\n <Media greaterThanOrEqual=\"lg\" className=\"grid w-full grid-cols-3 gap-6\">\n {renderSliders(sliderConfigs.lg)}\n </Media>\n <Media between={[\"sm\", \"lg\"]} className=\"grid w-full grid-cols-2 gap-6\">\n {renderSliders(sliderConfigs.md)}\n </Media>\n <Media between={[\"xs\", \"sm\"]} className=\"grid w-full grid-cols-1 gap-6\">\n {renderSliders(sliderConfigs.sm)}\n </Media>\n </div>\n ) : (\n <div className=\"flex w-full flex-wrap justify-center gap-y-6 md:-mx-3\">\n {dataTestimonials?.map((testimonial, index) => (\n <TestimonialItem\n testimonial={testimonial}\n key={`testimonial-${index}`}\n index={index}\n className=\"basis-full md:basis-1/2 md:px-3 lg:basis-1/3\"\n />\n ))}\n </div>\n )}\n </MediaContextProvider>\n )}\n\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n <style>{`\n .mark-vertical-marquee {\n mask: linear-gradient(transparent, black 16px, black calc(100% - 16px), transparent);\n }\n `}</style>\n </>\n );\n};\n","import { cn } from \"../../helpers/utils\";\nimport { SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { TestimonialTemplateOne } from \"./templates/TestimonialTemplateOne\";\nimport { TestimonialTemplateThree } from \"./templates/TestimonialTemplateThree\";\nimport { TestimonialTemplateTwo } from \"./templates/TestimonialTemplateTwo\";\nimport { TestimonialSectionProps } from \"./utils\";\n\nconst renderTemplate = ({\n template,\n dataHeading,\n dataTestimonials,\n dataButtons,\n}: TestimonialSectionProps) => {\n switch (template) {\n case 1:\n return (\n <TestimonialTemplateOne\n dataHeading={dataHeading}\n dataTestimonials={dataTestimonials}\n dataButtons={dataButtons}\n />\n );\n case 2:\n return (\n <TestimonialTemplateTwo\n dataHeading={dataHeading}\n dataTestimonials={dataTestimonials}\n dataButtons={dataButtons}\n />\n );\n case 3:\n return (\n <TestimonialTemplateThree\n dataHeading={dataHeading}\n dataTestimonials={dataTestimonials}\n dataButtons={dataButtons}\n />\n );\n default:\n return (\n <TestimonialTemplateOne\n dataHeading={dataHeading}\n dataTestimonials={dataTestimonials}\n dataButtons={dataButtons}\n />\n );\n }\n};\n\nconst TestimonialSectionContent = ({\n template,\n dataHeading,\n dataTestimonials,\n dataButtons,\n}: TestimonialSectionProps) => {\n return (\n <>\n {renderTemplate({\n template,\n dataHeading,\n dataTestimonials,\n dataButtons,\n })}\n </>\n );\n};\n\nconst TestimonialSection = ({\n template = 1,\n background,\n className,\n idSection,\n dataHeading,\n dataTestimonials,\n dataButtons,\n}: TestimonialSectionProps) => {\n return (\n <SectionBlock\n className={cn(\n template === 1 && (dataTestimonials?.length ?? 0) > 3\n ? \"[&>.wrapper]:max-w-full [&>.wrapper]:md:px-0\"\n : \"\",\n template === 3 ? \"overflow-hidden\" : \"\",\n className\n )}\n idSection={idSection}\n background={background}\n >\n <TestimonialSectionContent\n template={template}\n dataHeading={dataHeading}\n dataTestimonials={dataTestimonials}\n dataButtons={dataButtons}\n />\n </SectionBlock>\n );\n};\n\nexport { TestimonialSection };\n","import parse from \"html-react-parser\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from \"../Accordion\";\nimport { ButtonsBlock, HeadingBlock } from \"../CommonBlocks/CommonBlocks\";\nimport {\n HorizontalContent,\n HorizontalNext,\n HorizontalPrevious,\n HorizontalScroll,\n} from \"../HorizontalScroll\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../Tabs\";\nimport { ContentsProps, DataFAQProps, FAQSectionProps } from \"./utils\";\n\nconst FAQTemplateOne = ({ dataFAQ, dataHeading, dataButtons }: FAQSectionProps) => {\n const renderAccordion = (dataFAQ: DataFAQProps) => (\n <Accordion\n type=\"single\"\n collapsible\n defaultValue={(dataFAQ?.isActiveFistQuestion && dataFAQ?.contents?.[0]?.title) || \"\"}\n className=\"w-full\"\n >\n {dataFAQ?.contents?.map((faqContent: ContentsProps, index) => (\n <AccordionItem value={faqContent.title} key={index} className=\"last:border-none\">\n <AccordionTrigger className=\"md:text-lg\">{faqContent.title}</AccordionTrigger>\n <AccordionContent className=\"prose prose-sm sm:prose-base prose-strong:text-gray-600 max-w-none text-gray-600\">\n {parse(faqContent.description)}\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n );\n\n return (\n <div className=\"grid grid-cols-1 gap-y-0 md:grid-cols-3 md:gap-x-10\">\n <div className=\"relative\">\n <div className=\"md:sticky md:top-14\">\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading.tagline}\n title={dataHeading.title}\n description={dataHeading.description}\n tagHeading={dataHeading.tagHeading || \"h2\"}\n align=\"left\"\n colorScheme={dataHeading.colorScheme || \"pink\"}\n sizeHeading={dataHeading.sizeHeading}\n className={cn(dataHeading.className)}\n />\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={cn(\"hidden md:mt-6 md:flex\", dataButtons?.className)}\n align=\"left\"\n />\n )}\n </div>\n </div>\n {dataFAQ && dataFAQ.length > 0 && dataFAQ[0] && (\n <div className=\"col-span-2\">{renderAccordion(dataFAQ[0])}</div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={cn(\"mt-3 md:hidden\", dataButtons?.className)}\n align=\"center\"\n />\n )}\n </div>\n );\n};\n\nconst FAQTemplateTwo = ({\n dataFAQ,\n dataHeading,\n dataButtons,\n dataHorizontalScroll,\n}: FAQSectionProps) => {\n const {\n showGradientOverlay = true,\n gradientOverlayColor,\n className,\n } = dataHorizontalScroll || {};\n\n const renderAccordion = (dataFAQ: DataFAQProps) => (\n <Accordion\n type=\"single\"\n collapsible\n defaultValue={(dataFAQ?.isActiveFistQuestion && dataFAQ?.contents?.[0]?.title) || \"\"}\n className=\"w-full\"\n >\n {dataFAQ?.contents?.map((faqContent: ContentsProps, index) => (\n <AccordionItem value={faqContent.title} key={index} className=\"last:border-none\">\n <AccordionTrigger className=\"md:text-lg\">{faqContent.title}</AccordionTrigger>\n <AccordionContent className=\"prose prose-sm sm:prose-base prose-strong:text-gray-600 max-w-none text-gray-600\">\n {parse(faqContent.description)}\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n );\n\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading.tagline}\n title={dataHeading.title}\n description={dataHeading.description}\n tagHeading={dataHeading.tagHeading || \"h2\"}\n align=\"center\"\n colorScheme={dataHeading.colorScheme || \"pink\"}\n sizeHeading={dataHeading.sizeHeading}\n className={cn(dataHeading.className)}\n />\n )}\n {dataFAQ && (\n <Tabs defaultValue={dataFAQ[0]?.title}>\n {dataFAQ?.length > 1 && (\n <HorizontalScroll\n showGradientOverlay={showGradientOverlay}\n gradientOverlayColor={gradientOverlayColor}\n className={className}\n >\n <HorizontalContent className=\"mb-3 text-center\">\n <TabsList\n className=\"mx-auto mb-0 inline-flex w-auto items-center overflow-visible\"\n size=\"base\"\n >\n {dataFAQ.map((faq, index) => (\n <TabsTrigger key={faq.title + index} value={faq.title}>\n {faq.title}\n </TabsTrigger>\n ))}\n </TabsList>\n </HorizontalContent>\n <HorizontalPrevious />\n <HorizontalNext />\n </HorizontalScroll>\n )}\n {dataFAQ.map((faq, index) => (\n <TabsContent\n key={faq.title + index}\n className=\"mx-auto mt-0 max-w-3xl\"\n value={faq.title}\n >\n {renderAccordion(faq)}\n </TabsContent>\n ))}\n </Tabs>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={cn(dataButtons?.className)}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nexport { FAQTemplateOne, FAQTemplateTwo };\n","import { SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { FAQTemplateOne, FAQTemplateTwo } from \"./FAQTemplate\";\nimport { FAQSectionProps } from \"./utils\";\n\nconst renderTemplate = ({ template, dataFAQ, dataHeading, dataButtons, dataHorizontalScroll }) => {\n switch (template) {\n case 1:\n return (\n <FAQTemplateOne\n dataFAQ={dataFAQ}\n dataHeading={dataHeading}\n dataButtons={dataButtons}\n dataHorizontalScroll={dataHorizontalScroll}\n />\n );\n\n case 2:\n return (\n <FAQTemplateTwo\n dataFAQ={dataFAQ}\n dataHeading={dataHeading}\n dataButtons={dataButtons}\n dataHorizontalScroll={dataHorizontalScroll}\n />\n );\n\n default:\n return (\n <FAQTemplateOne\n dataFAQ={dataFAQ}\n dataHeading={dataHeading}\n dataButtons={dataButtons}\n dataHorizontalScroll={dataHorizontalScroll}\n />\n );\n }\n};\n\nconst FAQSectionContent = ({\n dataHeading,\n dataFAQ,\n template,\n dataButtons,\n dataHorizontalScroll,\n}) => {\n return (\n <>{renderTemplate({ dataHeading, dataFAQ, template, dataButtons, dataHorizontalScroll })}</>\n );\n};\n\nexport const FAQSection = ({\n dataHeading,\n dataFAQ = [],\n className,\n background,\n idSection,\n dataButtons,\n dataHorizontalScroll,\n template = 1,\n}: FAQSectionProps) => {\n return (\n <SectionBlock className={className} idSection={idSection} background={background}>\n <FAQSectionContent\n dataHeading={dataHeading}\n dataFAQ={dataFAQ}\n template={template}\n dataHorizontalScroll={dataHorizontalScroll}\n dataButtons={dataButtons}\n />\n </SectionBlock>\n );\n};\n","import React, { memo } from \"react\";\nimport { ArrowDownIcon } from \"@heroicons/react/20/solid\";\nimport parse from \"html-react-parser\";\n\nimport SpinerIcon from \"../../foundation/SpinerIcon\";\nimport { cn } from \"../../helpers/utils\";\nimport { ActionButton } from \"../ActionButton\";\nimport { HeadingBlock } from \"../CommonBlocks/CommonBlocks\";\nimport {\n HorizontalContent,\n HorizontalNext,\n HorizontalPrevious,\n HorizontalScroll,\n} from \"../HorizontalScroll\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../Tabs\";\nimport { TextButton } from \"../TextButton\";\nimport { DataNewsProps, NewsItemProps, NewsSectionProps } from \"./utils\";\n\nconst NewsSectionItem = ({ news }: { news: NewsItemProps }) => {\n const handleOnClickcate = (e: React.MouseEvent<HTMLButtonElement>, url: string) => {\n e?.preventDefault();\n e?.stopPropagation();\n window.open(url, \"_blank\");\n };\n\n return (\n <>\n <div className=\"relative block aspect-[1/1] overflow-hidden rounded-md bg-gray-100 md:aspect-[77/37] md:rounded-none\">\n <picture>\n <source media=\"(min-width: 640px)\" srcSet={news?.thumbnailDesktop} />\n <img\n className=\"h-full w-full object-cover\"\n src={news?.thumbnailMobile}\n alt={news?.title}\n />\n </picture>\n </div>\n <div className=\"mt-3 flex flex-1 flex-col md:mt-0 md:p-3\">\n <div className=\"line-clamp-2 flex-1 text-sm font-medium text-gray-900 group-hover:text-pink-500 md:line-clamp-none\">\n {news?.title}\n </div>\n <div className=\"mt-2 flex items-center space-x-1\">\n {news?.category && news?.categoryUrl && (\n <>\n <TextButton\n variant=\"default\"\n className=\"shink-0 line-clamp-1 justify-start whitespace-normal text-left text-xs\"\n onClick={(e) => handleOnClickcate(e, news?.categoryUrl || \"\")}\n title={news?.category}\n >\n {news?.category}\n </TextButton>\n {news?.category && news?.dateTime && (\n <span className=\"flex-none leading-none\">·</span>\n )}\n </>\n )}\n <div className=\"flex-none text-xs text-gray-500\">{news?.dateTime}</div>\n </div>\n </div>\n </>\n );\n};\n\nconst NewsSectionTemplateOne = memo(\n ({\n dataHeading,\n dataHorizontalScroll,\n dataNews,\n onClickModal,\n onClickLoadMore,\n }: NewsSectionProps) => {\n const {\n showGradientOverlay = true,\n gradientOverlayColor,\n className,\n } = dataHorizontalScroll || {};\n\n const handleOnClickItem = (e: React.MouseEvent<HTMLDivElement>, id: number, url: string) => {\n e?.preventDefault();\n e?.stopPropagation();\n onClickModal ? onClickModal(id) : window.open(url, \"_blank\");\n };\n\n const renderGridNews = (newsGroup: DataNewsProps, index: number) => (\n <div key={newsGroup?.title || index}>\n <div\n className={cn(\n \"-mx-2 flex flex-row flex-wrap gap-y-5\",\n newsGroup?.newsList?.length < 4 ? \"md:justify-center\" : \"\"\n )}\n >\n {newsGroup?.newsList?.map((newsItem: NewsItemProps, index: number) => (\n <div className=\"min-w-0 basis-1/2 px-2 lg:basis-1/4\" key={index}>\n <div\n onClick={(e) => handleOnClickItem(e, newsItem?.id, newsItem?.url)}\n key={newsItem?.id}\n className={cn(\n \"group flex cursor-pointer flex-col overflow-hidden md:h-full md:rounded-md md:bg-white md:shadow-md\",\n newsGroup?.classNameItem\n )}\n >\n <NewsSectionItem news={newsItem} />\n </div>\n </div>\n ))}\n </div>\n {newsGroup?.isShowBtn && (\n <div className=\"mt-8 flex w-full items-center justify-center\">\n <ActionButton\n action={newsGroup?.btnUrl || (onClickLoadMore && (() => onClickLoadMore?.(index)))}\n newTab={newsGroup?.isNewTab}\n variant=\"outline\"\n disabled={newsGroup?.isLoading}\n >\n {parse(newsGroup.btnName || \"Xem thêm\")}\n {newsGroup?.isLoading ? (\n <SpinerIcon className=\"animate-spin-loading ml-2 h-5 w-5\" />\n ) : (\n onClickLoadMore &&\n !newsGroup?.btnUrl && (\n <ArrowDownIcon className=\"-mb-1 ml-2 h-5 w-5 animate-bounce\" />\n )\n )}\n </ActionButton>\n </div>\n )}\n </div>\n );\n\n return (\n <React.Fragment>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={cn(dataHeading?.className)}\n />\n )}\n {dataNews?.length > 1 ? (\n <Tabs defaultValue={dataNews[0]?.title}>\n <HorizontalScroll\n showGradientOverlay={showGradientOverlay}\n gradientOverlayColor={gradientOverlayColor}\n className={className}\n >\n <HorizontalContent className=\"mb-6 text-center\">\n <TabsList className=\"mx-auto mb-0 inline-flex w-auto items-center overflow-visible\">\n {dataNews.map((newsGroup, index) => (\n <TabsTrigger key={newsGroup.title + index} value={newsGroup.title}>\n {newsGroup.title}\n </TabsTrigger>\n ))}\n </TabsList>\n </HorizontalContent>\n <HorizontalPrevious />\n <HorizontalNext />\n </HorizontalScroll>\n\n {dataNews.map((newsGroup, index) => (\n <TabsContent key={newsGroup.title + index} value={newsGroup.title}>\n {renderGridNews(newsGroup, index)}\n </TabsContent>\n ))}\n </Tabs>\n ) : (\n dataNews?.length === 1 && dataNews[0] && renderGridNews(dataNews[0], 0)\n )}\n </React.Fragment>\n );\n }\n);\n\nexport { NewsSectionTemplateOne };\n","import { cn } from \"../../helpers/utils\";\nimport { SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport {\n NewsSectionTemplateOne,\n} from \"./NewsSectionTemplate\";\nimport { NewsSectionProps } from \"./utils\";\n\nconst renderTemplate = ({\n template,\n dataNews,\n dataHeading,\n dataHorizontalScroll,\n onClickModal,\n onClickLoadMore\n}) => {\n switch (template) {\n case 1:\n return (\n <NewsSectionTemplateOne\n dataNews={dataNews}\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll} \n onClickModal={onClickModal}\n onClickLoadMore={onClickLoadMore}\n />\n );\n default:\n return (\n <NewsSectionTemplateOne\n dataNews={dataNews}\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll} \n onClickModal={onClickModal}\n onClickLoadMore={onClickLoadMore}\n />\n );\n }\n};\n\nconst NewsSectionContent = ({\n dataHeading,\n dataHorizontalScroll,\n dataNews,\n template,\n onClickModal,\n onClickLoadMore, \n}) => {\n return (\n <>\n {renderTemplate({ dataHeading, dataHorizontalScroll, dataNews, template, onClickModal, onClickLoadMore })}\n </>\n );\n};\n\nexport const NewsSection = ({\n dataHeading,\n dataHorizontalScroll,\n dataNews = [],\n className,\n background,\n template = 1, \n onClickModal,\n onClickLoadMore,\n}: NewsSectionProps) => {\n return (\n <SectionBlock className={cn(className)} background={background}>\n <NewsSectionContent\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll} \n dataNews={dataNews}\n template={template}\n onClickModal={onClickModal}\n onClickLoadMore={onClickLoadMore} \n \n />\n </SectionBlock>\n );\n};\n","import {\n ButtonsBlock,\n HeadingBlock,\n SectionBlock,\n} from \"../CommonBlocks/CommonBlocks\";\nimport {\n ButtonsBlockProps,\n HeadingBlockProps,\n SectionBlockProps,\n} from \"../CommonBlocks/utils\";\nimport { cn } from \"../../helpers/utils\";\nimport { AspectRatio } from \"../AspectRatio\";\n\ninterface CTAMedia {\n /**\n * The image source.\n */\n src?: string;\n /**\n * The image alt.\n */\n alt?: string;\n /**\n * The image ratio.\n */\n ratio?: number;\n}\n\ninterface CTASectionData {\n /**\n * Background color of the block CTA. Input the color code or image url according to CSS syntax. \n */\n background?: string;\n}\n\ninterface CTASectionProps extends SectionBlockProps {\n /**\n * The template of the section.\n */\n template?: 1 | 2;\n /**\n * The data heading of the section.\n */\n dataHeading?: HeadingBlockProps;\n /**\n * The array data testimonials of the section.\n */\n dataCTA?: CTASectionData;\n /**\n * The data buttons of the section.\n */\n dataButtons?: ButtonsBlockProps;\n /**\n * The data media of the cta section. \n */\n dataMedia?: CTAMedia;\n}\n\n\nconst CTATemplateOne = ({\n dataHeading,\n dataCTA,\n dataButtons,\n}: CTASectionProps) => {\n return (\n <div className=\"rounded-2xl block relative overflow-hidden lg:overflow-visible p-6 md:py-14 md:px-10 bg-pink-50\" style={{\n background: dataCTA?.background\n }}>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading.tagline}\n title={dataHeading.title}\n description={dataHeading.description}\n tagHeading={dataHeading.tagHeading}\n align=\"center\"\n colorScheme={dataHeading.colorScheme || \"black\"}\n sizeHeading={dataHeading.sizeHeading}\n className={dataHeading.className}\n />\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={cn(dataButtons?.className, \"mt-0 md:mt-0\")}\n align=\"center\"\n />\n )}\n\n </div>\n );\n};\n\n\nconst CTATemplateTwo = ({\n dataHeading,\n dataCTA,\n dataButtons,\n dataMedia,\n}: CTASectionProps) => {\n return (\n <div className=\"grid gap-6 grid-cols-1 md:grid-cols-2 rounded-2xl block relative overflow-hidden lg:overflow-visible p-6 pb-0 md:px-10 bg-pink-700 md:pb-0 md:pt-0\" style={dataCTA?.background ? { background: dataCTA.background } : {}}>\n <div className=\"md:py-14 flex flex-col justify-center\">\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading.tagline}\n title={dataHeading.title}\n description={dataHeading.description}\n tagHeading={dataHeading.tagHeading}\n align=\"left\"\n colorScheme={dataHeading.colorScheme || \"white\"}\n sizeHeading={dataHeading.sizeHeading}\n className={dataHeading.className}\n />\n )}\n\n\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={cn(dataButtons?.className, \"mt-0 md:mt-0\")}\n align=\"left\"\n />\n )}\n </div>\n\n <div className=\" max-w-sm mx-auto md:ml-auto md:mr-0 w-full md:pt-10 self-end\">\n {dataMedia && (\n <AspectRatio\n ratio={4 / 3}\n >\n <img\n src={dataMedia.src}\n alt={dataMedia.alt}\n className=\"h-full w-full rounded-md object-contain\"\n />\n </AspectRatio>\n )}\n </div>\n\n </div>\n );\n};\n\nconst renderTemplate = ({\n template,\n dataHeading,\n dataCTA,\n dataButtons,\n dataMedia,\n}: CTASectionProps) => {\n switch (template) {\n case 1:\n return (\n <CTATemplateOne\n dataHeading={dataHeading}\n dataCTA={dataCTA}\n dataButtons={dataButtons}\n dataMedia={dataMedia}\n />\n );\n case 2:\n return (\n <CTATemplateTwo\n dataHeading={dataHeading}\n dataCTA={dataCTA}\n dataButtons={dataButtons}\n dataMedia={dataMedia}\n />\n );\n default:\n return (\n <CTATemplateOne\n dataHeading={dataHeading}\n dataCTA={dataCTA}\n dataButtons={dataButtons}\n dataMedia={dataMedia}\n />\n );\n }\n};\n\nconst CTASectionContent = ({\n template,\n dataHeading,\n dataCTA,\n dataButtons,\n dataMedia,\n}: CTASectionProps) => {\n return (\n <>\n {renderTemplate({\n template,\n dataHeading,\n dataCTA,\n dataButtons,\n dataMedia,\n })}\n </>\n );\n};\n\nconst CTASection = ({\n template = 1,\n background,\n className,\n idSection,\n dataHeading,\n dataCTA,\n dataButtons,\n dataMedia,\n}: CTASectionProps) => {\n return (\n <SectionBlock\n className={className}\n idSection={idSection}\n background={background}\n >\n <CTASectionContent\n template={template}\n dataHeading={dataHeading}\n dataCTA={dataCTA}\n dataButtons={dataButtons}\n dataMedia={dataMedia}\n />\n </SectionBlock>\n );\n};\n\nexport type { CTASectionProps };\nexport { CTASection };\n","import React from \"react\";\nimport parse from \"html-react-parser\";\n\nimport { cn } from \"../../../helpers/utils\";\nimport { ButtonsBlock, HeadingBlock } from \"../../CommonBlocks/CommonBlocks\";\nimport { DataMetricsProps, MetricsSectionProps } from \"../utils\";\n\nconst MetricItem = ({ metric }: { metric: DataMetricsProps }) => {\n const { metricTitle = \"\", metricValue = \"\", metricDescription = \"\" } = metric ?? {};\n\n return (\n <div className=\" text-center\">\n <div className=\"text-3xl font-bold text-pink-500 md:text-4xl\">{parse(metricValue ?? \"\")}</div>\n <div className=\"mt-2 text-sm font-semibold text-gray-900\">{parse(metricTitle ?? \"\")}</div>\n {metricDescription && (\n <div className=\"mt-2 text-sm text-gray-500\">{parse(metricDescription ?? \"\")}</div>\n )}\n </div>\n );\n};\n\nexport const MetricsSectionTemplateOne = ({\n dataMetrics,\n dataButtons,\n dataHeading,\n}: MetricsSectionProps) => {\n return (\n <React.Fragment>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={cn(dataHeading?.className)}\n />\n )}\n {dataMetrics && dataMetrics?.length > 0 && (\n <div className=\"grid grid-cols-1 gap-10 py-4 md:grid-cols-3 md:gap-4 md:py-0\">\n {dataMetrics?.map((metric, index) => (\n <React.Fragment key={index}>\n <MetricItem metric={metric} />\n </React.Fragment>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={cn(dataButtons?.className, \"mt-8 md:mt-10\")}\n align=\"center\"\n />\n )}\n </React.Fragment>\n );\n};\n","import React from \"react\";\nimport parse from \"html-react-parser\";\n\nimport { cn } from \"../../../helpers/utils\";\nimport { ButtonsBlock, HeadingBlock } from \"../../CommonBlocks/CommonBlocks\";\nimport { DataMetricsProps, MetricsSectionProps } from \"../utils\";\n\nconst MetricItem = ({ metric }: { metric: DataMetricsProps }) => {\n const { metricTitle = \"\", metricValue = \"\", metricDescription = \"\" } = metric ?? {};\n\n return (\n <div className=\" text-center md:text-left\">\n <div className=\"mt-2 text-2xl font-bold text-pink-500 md:text-3xl\">\n {parse(metricValue ?? \"\")}\n </div>\n <div className=\"mt-2 text-sm font-semibold text-gray-900\">{parse(metricTitle ?? \"\")}</div>\n {metricDescription && (\n <div className=\"mt-2 hidden text-sm text-gray-500 md:block\">\n {parse(metricDescription ?? \"\")}\n </div>\n )}\n </div>\n );\n};\n\nexport const MetricsSectionTemplateTwo = ({\n dataMetrics,\n dataButtons,\n dataHeading,\n}: MetricsSectionProps) => {\n return (\n <React.Fragment>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={cn(dataHeading?.className)}\n />\n )}\n {dataMetrics && dataMetrics?.length > 0 && (\n <div className=\"grid grid-cols-2 gap-10 py-4 md:grid-cols-4 md:gap-4 md:py-0\">\n {dataMetrics?.map((metric, index) => (\n <React.Fragment key={index}>\n <MetricItem metric={metric} />\n </React.Fragment>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={cn(dataButtons?.className, \"mt-8 md:mt-10\")}\n align=\"center\"\n />\n )}\n </React.Fragment>\n );\n};\n","import { cn } from \"../../helpers/utils\";\nimport { SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { MetricsSectionTemplateOne, MetricsSectionTemplateTwo } from \"./MetricsSectionTemplate\";\nimport { MetricsSectionProps } from \"./utils\";\n\nconst renderTemplate = ({ dataHeading, dataMetrics, template, dataButtons }) => {\n switch (template) {\n case 1:\n return (\n <MetricsSectionTemplateOne\n dataMetrics={dataMetrics}\n dataButtons={dataButtons}\n dataHeading={dataHeading}\n />\n );\n case 2:\n return (\n <MetricsSectionTemplateTwo\n dataMetrics={dataMetrics}\n dataButtons={dataButtons}\n dataHeading={dataHeading}\n />\n );\n default:\n return (\n <MetricsSectionTemplateOne\n dataMetrics={dataMetrics}\n dataButtons={dataButtons}\n dataHeading={dataHeading}\n />\n );\n }\n};\n\nconst MetricsSectionContent = ({ dataHeading, dataMetrics, template, dataButtons }) => {\n return <>{renderTemplate({ dataHeading, dataMetrics, template, dataButtons })}</>;\n};\n\nexport const MetricsSection = ({\n dataHeading,\n dataMetrics = [],\n dataButtons,\n background,\n className,\n template,\n}: MetricsSectionProps) => {\n return (\n <SectionBlock className={cn(className)} background={background}>\n <MetricsSectionContent\n dataHeading={dataHeading}\n dataMetrics={dataMetrics}\n dataButtons={dataButtons}\n template={template}\n />\n </SectionBlock>\n );\n};\n","import { forwardRef } from \"react\";\n\nimport { PaymentInvoiceProps } from \"../utils/IPayment\";\n\nexport const PaymentInvoice = forwardRef<HTMLDivElement, PaymentInvoiceProps>(\n ({ className, title, children }, ref) => {\n return (\n <div className={className} ref={ref}>\n <div className=\"font-semibold text-gray-800\">{title}</div>\n <div\n style={{\n backgroundImage:\n \"url(https://homepage.momocdn.net/img/momo-amazone-s3-api-241105114139-638664036992710012.png)\",\n backgroundSize: \"30%\",\n backgroundPosition: \"53% 25%\",\n }}\n className=\"mt-4 grid grid-cols-1 gap-4 rounded-lg border bg-no-repeat p-3 text-gray-800\"\n >\n {children}\n </div>\n </div>\n );\n }\n);\n","import { useCallback } from \"react\";\n\nimport { ChoiceboxGroup, ChoiceboxGroupItem } from \"../../Choicebox\";\nimport { PaymentMethodsItemsProps, PaymentMethodsProps } from \"../utils/IPayment\";\nimport SkeletonPaymentMethod from \"./PaymentSkeleton\";\n\nconst PaymentMethodItem = ({ paymentMethod }: { paymentMethod: PaymentMethodsItemsProps }) => {\n return (\n <ChoiceboxGroupItem\n disabled={paymentMethod?.disabled}\n value={paymentMethod?.paymentMethod}\n className=\"data-[state=checked]:bg-pink-50/50\"\n >\n <div className=\"flex items-center space-x-3\">\n <img className=\"h-9 w-9 object-cover\" src={paymentMethod.logo} alt={paymentMethod?.name} />\n <div className=\"grid grid-cols-1 gap-1\">\n <div className=\"md:text-md line-clamp-2 text-sm font-medium text-gray-700\">\n {paymentMethod?.name}\n </div>\n {paymentMethod?.label && (\n <div className=\"text-xs font-semibold text-pink-500\">{paymentMethod?.label}</div>\n )}\n {paymentMethod?.description && (\n <div className=\"text-xs font-normal text-gray-500 \">{paymentMethod?.description}</div>\n )}\n </div>\n </div>\n </ChoiceboxGroupItem>\n );\n};\n\nexport const PaymentMethods = ({\n title = \"Chọn phương thức thanh toán\",\n paymentMethods,\n isLoading,\n onSelectPaymentMethod,\n defaultPaymentMethod = \"\",\n}: PaymentMethodsProps) => {\n const handleMethodSelect = useCallback(\n (value: string) => onSelectPaymentMethod?.(value),\n [onSelectPaymentMethod]\n );\n\n return (\n <>\n {title && <div className=\"text-base font-semibold text-gray-800 \">{title}</div>}\n\n {isLoading ? (\n <SkeletonPaymentMethod />\n ) : (\n <ChoiceboxGroup\n defaultValue={defaultPaymentMethod ?? \"captureWallet\"}\n orientation=\"vertical\"\n className=\"grid grid-cols-1 gap-4\"\n onValueChange={handleMethodSelect}\n >\n {paymentMethods?.length > 0 &&\n paymentMethods?.map((method) => (\n <PaymentMethodItem key={method.id} paymentMethod={method} />\n ))}\n </ChoiceboxGroup>\n )}\n </>\n );\n};\n","import { Skeleton } from \"../../Skeleton\";\n\nconst SkeletonItem = () => (\n <div className=\"p-3 border rounded-lg\">\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"rounded-md h-9 w-9 \" />\n <div className=\"flex-1\">\n <Skeleton className=\"w-48 h-5 \" />\n </div>\n <div className=\"w-4 h-4 border-2 border-gray-200 rounded-full\" />\n </div>\n </div>\n);\n\nfunction SkeletonPaymentMethod() {\n return (\n <>\n {Array.from({ length: 4 }).map((_, index) => (\n <SkeletonItem key={index} />\n ))}\n </>\n );\n}\n\nexport default SkeletonPaymentMethod;\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { IPayment } from \"./utils/IPayment\";\n\nconst PaymentContent = forwardRef<HTMLDivElement, IPayment>(({ children, className }, ref) => (\n <div ref={ref} className={cn(\"grid grid-cols-1 gap-4 bg-white\", className)}>\n {children}\n </div>\n));\n\nconst Payment = forwardRef<HTMLDivElement, IPayment>(({ children, className, ...props }, ref) => {\n return (\n <PaymentContent ref={ref} className={className} {...props}>\n {children}\n </PaymentContent>\n );\n});\nPayment.displayName = \"Payment\";\n\nexport { Payment };\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../../../../helpers/utils\";\nimport { PaymentResultFooterProps } from \"../../utils/IPaymentResult\";\n\nexport const PaymentResultFooter = forwardRef<HTMLDivElement, PaymentResultFooterProps>(\n ({ className, children }, ref) => {\n return (\n <div className={cn(\"\", className)} ref={ref}>\n <hr className=\"mb-5 h-px w-full bg-gray-500\" />\n <div className=\"flex w-full items-center space-x-3\">{children}</div>\n </div>\n );\n }\n);\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../../../../helpers/utils\";\nimport { PaymentResultContentProps } from \"../../utils/IPaymentResult\";\n\nexport const PaymentResultContent = forwardRef<HTMLDivElement, PaymentResultContentProps>(\n ({ className, children }, ref) => {\n return (\n <div className={cn(\"pb-5\", className)} ref={ref}>\n {children}\n </div>\n );\n }\n);\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { PaymentResultHeader } from \"./components/PaymentResult/PaymentResultHeader\";\nimport { PaymentResultProps } from \"./utils/IPaymentResult\";\n\nexport const PaymentResult = forwardRef<HTMLDivElement, PaymentResultProps>(\n ({ className, status, message, title, iconPaymentResult, children }, ref) => {\n return (\n <div ref={ref} className={cn(\"rounded-lg p-4\", className)}>\n <PaymentResultHeader\n iconPaymentResult={iconPaymentResult}\n title={title}\n message={message}\n status={status}\n />\n {children}\n </div>\n );\n }\n);\n","import { CheckBadgeIcon, XCircleIcon } from \"@heroicons/react/20/solid\";\n\nimport { Callout } from \"../../../Callout\";\nimport { PaymentResultHeaderProps } from \"../../utils/IPaymentResult\";\n\nconst PaymentResultSuccess = ({\n iconPaymentResult,\n message = \"\",\n title = \"\",\n}: PaymentResultHeaderProps) => {\n return (\n <div className=\"grid grid-cols-1 gap-4\">\n <div className=\"flex flex-col items-center space-y-3 md:flex-row md:space-x-3 md:space-y-0\">\n {iconPaymentResult && (\n <div className=\"relative h-12 w-12 shrink-0 overflow-hidden object-cover\">\n {iconPaymentResult}\n </div>\n )}\n {title && (\n <div className=\"text-center text-lg font-bold text-gray-800 md:text-left md:text-2xl\">\n {title}\n </div>\n )}\n </div>\n {message && (\n <Callout\n message={message}\n type=\"success\"\n icon={<CheckBadgeIcon className=\"h-5 w-5 shrink-0 text-green-500\" />}\n />\n )}\n </div>\n );\n};\n\nconst PaymentResultFailed = ({\n iconPaymentResult,\n message = \"\",\n title = \"\",\n}: PaymentResultHeaderProps) => {\n return (\n <div className=\"grid grid-cols-1 gap-4\">\n <div className=\"flex flex-col items-center space-y-3 md:flex-row md:space-x-3 md:space-y-0\">\n {iconPaymentResult && (\n <div className=\"relative h-12 w-12 shrink-0 overflow-hidden object-cover\">\n {iconPaymentResult}\n </div>\n )}\n {title && (\n <div className=\"text-center text-lg font-bold text-gray-800 md:text-left md:text-2xl\">\n {title}\n </div>\n )}\n </div>\n <Callout\n message={message}\n type=\"error\"\n icon={<XCircleIcon className=\"h-5 w-5 shrink-0 text-red-600\" />}\n />\n </div>\n );\n};\n\nconst PaymentResultPending = ({\n iconPaymentResult,\n message = \"\",\n title = \"\",\n}: PaymentResultHeaderProps) => {\n return (\n <div className=\"grid grid-cols-1 gap-4\">\n <div className=\"flex flex-col items-center space-y-3 md:flex-row md:space-x-3 md:space-y-0\">\n {iconPaymentResult && (\n <div className=\"relative h-12 w-12 shrink-0 overflow-hidden object-cover\">\n {iconPaymentResult}\n </div>\n )}\n {title && (\n <div className=\"text-center text-lg font-bold text-gray-800 md:text-left md:text-2xl\">\n {title}\n </div>\n )}\n </div>\n {message && <Callout message={message} type=\"neutral\" />}\n </div>\n );\n};\n\nexport const PaymentResultHeader = ({\n status,\n title,\n message,\n iconPaymentResult,\n}: PaymentResultHeaderProps) => {\n switch (status) {\n case \"success\":\n return (\n <PaymentResultSuccess\n status={status}\n title={title}\n message={message}\n iconPaymentResult={\n iconPaymentResult || (\n <img\n className=\"\"\n width={48}\n height={48}\n src=\"https://homepage.momocdn.net/img/momo-amazone-s3-api-241105161325-638664200053564141.svg\"\n />\n )\n }\n />\n );\n case \"failed\":\n return (\n <PaymentResultFailed\n status={status}\n title={title}\n message={message}\n iconPaymentResult={\n iconPaymentResult || (\n <img\n className=\"\"\n src=\"https://homepage.momocdn.net/img/momo-amazone-s3-api-241105161658-638664202186984790.svg\"\n />\n )\n }\n />\n );\n case \"pending\":\n return (\n <PaymentResultPending\n status={status}\n title={title}\n message={message}\n iconPaymentResult={\n iconPaymentResult || (\n <img\n className=\"\"\n src=\"https://homepage.momocdn.net/img/momo-amazone-s3-api-241105161636-638664201963670899.svg\"\n />\n )\n }\n />\n );\n default:\n }\n};\n","import { forwardRef, useEffect } from \"react\";\n\nimport { TopbarTemplateOne } from \"./TopbarTemplate\";\nimport { ITopbar } from \"./utils\";\n\nconst renderTemplate = ({ template, content }: ITopbar) => {\n switch (template) {\n case 1:\n return <TopbarTemplateOne content={content} />;\n default:\n return <TopbarTemplateOne content={content} />;\n }\n};\n\nexport const Topbar = forwardRef<HTMLDivElement, ITopbar>(({ template, content }, ref) => {\n useEffect(() => {\n const topbarElement = document.querySelector(\".container-topbar\");\n\n // Type assertion to HTMLElement\n if (topbarElement instanceof HTMLElement) {\n const height = topbarElement.offsetHeight;\n document.documentElement.style.setProperty(\"--container-topbar-height\", `${height}px`);\n }\n }, [content]);\n\n return (\n <div\n ref={ref}\n className=\"container-topbar relative flex items-center justify-between\"\n style={{ background: content?.background || \"#fafafa\" }}\n >\n <div className=\"mx-auto w-full max-w-6xl px-0 md:px-8 lg:px-8\">\n <div className=\"content\">{renderTemplate({ template, content })}</div>\n </div>\n <style>\n {`\n .container-topbar .content {\n width: 100%;\n aspect-ratio: 1088/50;\n }\n\n @media (max-width: 1025px) {\n .header-navigation nav.fixed {\n top: calc(\n var(--header-height) + 1px + var(--container-topbar-height)\n );\n }\n }\n @media (max-width: 639px) {\n .container-topbar a {\n aspect-ratio: 720/88;\n }\n }\n `}\n </style>\n </div>\n );\n});\n","import { ActionButton } from \"../../ActionButton\";\nimport { TopbarContentProps } from \"../utils\";\n\nexport const TopbarTemplateOne = ({ content }: { content: TopbarContentProps }) => {\n return (\n <picture>\n <source media=\"(max-width: 639px)\" srcSet={content?.imageMobile || content.imageDesktop} />\n <img alt=\"main-banner-top\" className=\"w-full\" src={content.imageDesktop} />\n <ActionButton\n variant=\"transparent\"\n className=\"absolute inset-0 h-full w-full opacity-0\"\n {...content?.button}\n />\n </picture>\n );\n};\n","import * as React from \"react\";\nimport { XIcon } from \"lucide-react\";\nimport { Drawer as DrawerPrimitive } from \"vaul\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst Drawer = ({\n shouldScaleBackground = true,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) => (\n <DrawerPrimitive.Root shouldScaleBackground={shouldScaleBackground} {...props} />\n);\nDrawer.displayName = \"Drawer\";\n\nconst DrawerTrigger = DrawerPrimitive.Trigger;\n\nconst DrawerPortal = DrawerPrimitive.Portal;\n\nconst DrawerClose = DrawerPrimitive.Close;\n\nconst DrawerOverlay = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Overlay\n ref={ref}\n className={cn(\"fixed inset-0 z-50 bg-black/50\", className)}\n {...props}\n />\n));\nDrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName;\n\nconst DrawerContent = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content> & { hideCloseButton?: boolean }\n>(({ className, children, hideCloseButton = false, ...props }, ref) => (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto max-h-[90dvh] flex-col rounded-t-xl border bg-white\",\n className\n )}\n {...props}\n >\n {!hideCloseButton && (\n <DrawerPrimitive.Close\n className={cn(\n \"data-[state=open]:outline-focus absolute right-2 top-2 select-none appearance-none rounded-full p-2 text-gray-700 outline-none hover:bg-gray-100 active:bg-gray-200 data-[state=open]:z-10 data-[state=open]:outline-2 data-[state=open]:outline-offset-2\"\n )}\n title=\"Đóng\"\n >\n <XIcon className=\"h-5 w-5\" />\n <span className=\"sr-only\">Close</span>\n </DrawerPrimitive.Close>\n )}\n\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n));\nDrawerContent.displayName = \"DrawerContent\";\n\nconst DrawerHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"grid gap-1.5 p-5 text-left\", className)} {...props} />\n);\nDrawerHeader.displayName = \"DrawerHeader\";\n\nconst DrawerFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)} {...props} />\n);\nDrawerFooter.displayName = \"DrawerFooter\";\n\nconst DrawerTitle = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Title\n ref={ref}\n className={cn(\" truncate text-lg font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n));\nDrawerTitle.displayName = DrawerPrimitive.Title.displayName;\n\nconst DrawerDescription = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Description\n ref={ref}\n className={cn(\"truncate text-sm text-gray-500\", className)}\n {...props}\n />\n));\nDrawerDescription.displayName = DrawerPrimitive.Description.displayName;\n\n// DrawerBody component\nconst DrawerBody = ({\n children,\n className,\n ...props\n}: {\n children: React.ReactNode;\n className?: string;\n}) => {\n return (\n <div className={cn(`drawer-body flex-1 overflow-y-auto p-5`, className)} {...props}>\n {children}\n </div>\n );\n};\nDrawerBody.displayName = \"DrawerBody\";\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n DrawerBody,\n};\n","import * as React from \"react\";\nimport { OTPInput, OTPInputContext } from \"input-otp\";\nimport { Minus } from \"lucide-react\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst InputOTP = React.forwardRef<\n React.ElementRef<typeof OTPInput>,\n React.ComponentPropsWithoutRef<typeof OTPInput>\n>(({ className, containerClassName, ...props }, ref) => (\n <OTPInput\n ref={ref}\n containerClassName={cn(\n \"flex items-center gap-2 has-[:disabled]:opacity-50\",\n containerClassName\n )}\n className={cn(\"disabled:cursor-not-allowed\", className)}\n {...props}\n />\n));\nInputOTP.displayName = \"InputOTP\";\n\nconst InputOTPGroup = React.forwardRef<\n React.ElementRef<\"div\">,\n React.ComponentPropsWithoutRef<\"div\">\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center\", className)} {...props} />\n));\nInputOTPGroup.displayName = \"InputOTPGroup\";\n\nconst InputOTPSlot = React.forwardRef<\n React.ElementRef<\"div\">,\n React.ComponentPropsWithoutRef<\"div\"> & { index: number }\n>(({ index, className, ...props }, ref) => {\n const inputOTPContext = React.useContext(OTPInputContext);\n const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index] ?? {};\n\n return (\n <div\n ref={ref}\n className={cn(\n \"border-input relative flex h-9 w-9 items-center justify-center border-y border-r border-gray-400 text-sm text-gray-900 shadow-sm transition-all first:rounded-l-md first:border-l last:rounded-r-md\",\n isActive && \"ring-ring z-10 ring-1\",\n className\n )}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"animate-caret-blink h-4 w-px bg-gray-500 duration-1000\" />\n\n <style>\n {`\n @keyframes caret-blink {\n 0%, 70%, 100% {\n opacity: 1;\n }\n 20%, 50% {\n opacity: 0;\n }\n }\n\n .animate-caret-blink {\n animation: caret-blink 1.25s ease-out infinite;\n }\n `}\n </style>\n </div>\n )}\n </div>\n );\n});\nInputOTPSlot.displayName = \"InputOTPSlot\";\n\nconst InputOTPSeparator = React.forwardRef<\n React.ElementRef<\"div\">,\n React.ComponentPropsWithoutRef<\"div\">\n>(({ ...props }, ref) => (\n <div ref={ref} role=\"separator\" {...props}>\n <Minus className=\"text-gray-400\" />\n </div>\n));\nInputOTPSeparator.displayName = \"InputOTPSeparator\";\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator };\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { toPng } from \"html-to-image\";\n\nimport { cn } from \"../../helpers/utils\";\nimport QRCodeScanBox from \"./components/QRCodeScanBox\";\nimport { QRPaymentProps } from \"./utils/interface\";\n\n// Đưa filter ra ngoài component để không tạo lại mỗi lần render\nconst exclusionClasses = [\"qrcode__gradient\", \"qrcode__guide\", \"qrcode__title\"];\nconst filterNode = (node: HTMLElement) => {\n return !exclusionClasses.some((classname) => node.classList?.contains(classname));\n};\n\nexport const QRPayment: React.FC<QRPaymentProps> = ({\n loading = false,\n isExpriedQR,\n qrLink,\n qrImage,\n logoQr,\n dateExpired,\n priceOrder,\n titleOrder,\n className,\n}) => {\n const qrCodeRef = useRef<HTMLDivElement>(null);\n const [qrImageBase64, setQrImageBase64] = useState<string | null>(null);\n const [qrLoaded, setQrLoaded] = useState(false);\n\n useEffect(() => {\n if (qrLoaded && qrCodeRef.current) {\n toPng(qrCodeRef.current, {\n filter: filterNode,\n })\n .then((dataUrl) => {\n console.log(\"QR Image generated:\", dataUrl.substring(0, 50) + \"...\");\n setQrImageBase64(dataUrl);\n })\n .catch((error) => {\n console.error(\"Error generating QR image:\", error);\n });\n }\n }, [qrLoaded, qrLink]);\n\n useEffect(() => {\n if (loading) setQrLoaded(false);\n }, [loading]);\n\n return (\n <>\n {/* RIGHT: QR Code */}\n <div className={cn(\"relative h-full md:col-span-7 md:rounded-lg\", className)}>\n <QRCodeScanBox\n isQrForAll={true}\n qrImage={qrImage}\n qrLink={qrLink}\n logoQr={logoQr}\n expired={isExpriedQR}\n loading={loading}\n qrCodeRef={qrCodeRef}\n titleOrder={titleOrder}\n onQrLoaded={() => {\n setQrLoaded(true);\n }}\n qrImageBase64={qrImageBase64}\n dateExpired={dateExpired}\n priceOrder={priceOrder}\n />\n </div>\n </>\n );\n};\n","import React from \"react\";\nimport { LucideMessageCircleQuestion } from \"lucide-react\";\nimport { QRCodeSVG } from \"qrcode.react\";\n\nimport { cn } from \"../../../helpers/utils\";\nimport { Spinner } from \"../../Spinner\";\nimport { imageUrlToBase64 } from \"../utils/imageToBase64\";\nimport PaymentGuideDialog from \"./PaymentGuideDialog\";\n\nconst QRCodeScanInfo = ({\n img = \"\",\n children,\n isQrForAll,\n onQrLoaded,\n dateExpired,\n priceOrder,\n}) => {\n return (\n <>\n <div className=\"qrcode__scan__container relative h-auto select-none md:h-[280px]\">\n <div className=\"flex justify-center items-center space-x-2 w-full md:hidden\">\n <img\n src=\"https://homepage.momocdn.net/pwa/images/logoMomox50.png\"\n width={28}\n height={28}\n alt=\"QR all\"\n className=\"select-none shrink-0\"\n />\n <div className=\"h-[14px] w-[2px] shrink-0 select-none bg-gray-200\"></div>\n <img\n src=\"https://homepage.momocdn.net/img/momo-amazone-s3-api-250711102030-638878260300337990.png\"\n width={56}\n height={56}\n alt=\"QR all\"\n className=\"select-none shrink-0\"\n />\n </div>\n <div className=\"qrcode__scan\">\n <div className=\"invisible opacity-0 select-none qrcode__gradient md:visible md:opacity-100\">\n <img\n alt=\"step 1\"\n className=\"img-fluid\"\n src=\"https://homepage.momocdn.net/jk/momo2020/img/qrcode/qrcode-gradient.png\"\n />\n </div>\n <div className=\"invisible opacity-0 select-none qrcode__border md:visible md:opacity-100\">\n <img\n alt=\"step 2\"\n className=\"img-fluid\"\n src=\"https://homepage.momocdn.net/jk/momo2020/img/qrcode/border-qrcode.svg\"\n />\n </div>\n\n <div className=\"p-4 select-none qrcode__image\">\n {img ? (\n <img\n alt=\"step 3\"\n className=\"mx-auto img-fluid d-block\"\n src={img}\n loading=\"lazy\"\n onLoad={onQrLoaded}\n />\n ) : (\n React.Children.map(children, (child) => (React.isValidElement(child) ? child : child))\n )}\n </div>\n </div>\n\n {priceOrder && (\n <div className=\"text-sm text-gray-900 md:hidden\">\n <div className=\"\">Thông tin thanh toán</div>\n <div className=\"text-base font-bold text-gray-900\">{priceOrder}</div>\n </div>\n )}\n </div>\n {dateExpired && (\n <div className={cn(\"mt-3 text-sm text-gray-900 md:hidden\")}>\n <span>Mã hết hạn vào: </span>\n <span className=\"font-semibold\">{dateExpired}</span>\n </div>\n )}\n\n <div className=\"hidden mt-4 text-sm font-semibold text-gray-900 md:block\">\n {isQrForAll ? (\n <>\n <img\n src=\"https://homepage.momocdn.net/img/momo-amazone-s3-api-250710143736-638877550567721225.png\"\n width={220}\n height={28}\n className=\"mx-auto\"\n alt=\"QR all\"\n />\n <div className=\"mt-3\">Nhận tiền từ mọi Ví Điện Tử và Ngân Hàng</div>\n </>\n ) : (\n <>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"inline mr-1 w-6 h-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z\"\n />\n </svg>\n Sử dụng App MoMo hoặc\n <br />\n ứng dụng Camera hỗ trợ QR code để quét mã.\n </>\n )}\n </div>\n </>\n );\n};\n\nconst QRCodeScan = ({\n img = \"\",\n children,\n isQrForAll,\n onQrLoaded,\n qrImageBase64,\n dateExpired,\n priceOrder,\n}) => {\n return (\n <>\n <div className={cn(qrImageBase64 && \"opacity-0 md:opacity-100\")}>\n <QRCodeScanInfo\n dateExpired={dateExpired}\n priceOrder={priceOrder}\n img={img}\n isQrForAll={isQrForAll}\n onQrLoaded={onQrLoaded}\n >\n {children}\n </QRCodeScanInfo>\n </div>\n <style>\n {`\n .qrcode__scan__container {\n padding: 15px;\n background-color: white;\n width: 280px;\n border-radius: 20px;\n border-radius: 15px;\n margin: 0 auto;\n }\n \n .qrcode__image {\n width: 100%;\n }\n \n .qrcode__image img {\n width: 100%;\n }\n \n .qrcode__scan {\n width: 245px;\n height: 245px;\n margin: 0 auto;\n overflow: hidden;\n background-color: white;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n \n .qrcode__border {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n z-index: 5;\n opacity: 0.9;\n pointer-events: none;\n }\n \n .qrcode__gradient {\n position: absolute;\n opacity: 0.6;\n width: 98%;\n height: 98%;\n top: 1%;\n left: 1%;\n z-index: 6;\n // pointer-events: none;\n transform: translate3d(0, -110%, 0);\n animation: QRCodeScan 3s infinite cubic-bezier(0.45, 0.03, 0.81, 0.63);\n \n backface-visibility: hidden;\n }\n \n @keyframes QRCodeScan {\n 0% {\n transform: translate3d(0, -110%, 0);\n }\n \n 90% {\n transform: translate3d(0, 30%, 0);\n }\n 100% {\n transform: translate3d(0, 30%, 0);\n }\n }\n `}\n </style>\n </>\n );\n};\n\nconst QRCodeScanBox = ({\n isQrForAll,\n qrImage,\n qrLink,\n logoQr = \"https://homepage.momocdn.net/img/momo-upload-api-231211171009-638379114093056419.png\",\n expired,\n loading,\n onQrLoaded,\n qrImageBase64,\n qrCodeRef,\n dateExpired,\n priceOrder,\n titleOrder,\n}) => {\n const [logoBase64, setLogoBase64] = React.useState<string | undefined>(undefined);\n\n React.useEffect(() => {\n if (logoQr) {\n imageUrlToBase64(logoQr)\n .then(setLogoBase64)\n .catch(() => setLogoBase64(undefined));\n } else {\n setLogoBase64(undefined);\n }\n }, [logoQr]);\n\n // Gọi onQrLoaded khi QR SVG đã sẵn sàng (qrLink và logoBase64 đã có)\n React.useEffect(() => {\n if (qrLink && logoBase64 && typeof onQrLoaded === \"function\" && !qrImage) {\n onQrLoaded();\n }\n }, [qrLink, logoBase64, onQrLoaded, qrImage]);\n\n return (\n <div className=\"relative z-[1] rounded-lg\">\n <div\n className=\"relative z-[1] bg-pink-50 bg-repeat-y px-5 py-6 text-center\"\n style={{\n backgroundImage:\n \"url(https://homepage.momocdn.net/img/momo-amazone-s3-api-250714113823-638880899039487085.png) \",\n backgroundPosition: \"right bottom\",\n backgroundSize: \"auto 30px\",\n }}\n ref={qrCodeRef}\n >\n <h2\n className={cn(\n \" mb-2 hidden select-all text-base font-bold text-gray-900 md:block\",\n qrImageBase64 && \"opacity-0 md:opacity-100\"\n )}\n >\n {titleOrder || \"Quét QR để thanh toán\"}\n </h2>\n\n {qrImageBase64 && (\n <div className=\"absolute top-0 right-0 left-0 visible z-20 opacity-100 cursor-pointer md:select-none md:opacity-0\">\n <img src={qrImageBase64} alt=\"QR Code\" />\n </div>\n )}\n <div className=\"flex relative flex-col items-center select-none\">\n <QRCodeScan\n qrImageBase64={qrImageBase64}\n img={qrImage}\n isQrForAll={isQrForAll}\n onQrLoaded={onQrLoaded}\n dateExpired={dateExpired}\n priceOrder={priceOrder}\n >\n {qrLink && logoBase64 && !qrImage && (\n <QRCodeSVG\n value={qrLink}\n size={215}\n imageSettings={{\n src: `${logoBase64}`,\n height: 40,\n width: 40,\n excavate: true,\n }}\n level=\"H\"\n />\n )}\n {/* Overlay if disabled */}\n {expired && (\n <div className=\"flex absolute inset-0 z-10 flex-col justify-center items-center size-full bg-white/90\">\n <span className=\"text-lg font-bold text-pink-600\">QR Code đã hết hạn</span>\n </div>\n )}\n {/* Overlay if loading */}\n {loading && (\n <div className=\"flex absolute inset-0 z-10 flex-col justify-center items-center size-full bg-white/90\">\n <Spinner size=\"lg\" />\n </div>\n )}\n </QRCodeScan>\n </div>\n {/* Payment Guide */}\n </div>\n\n <div\n className=\"relative z-10 px-5 pb-5 text-center bg-pink-50 bg-repeat-y select-none qrcode__guide\"\n style={{\n backgroundImage:\n \"url(https://homepage.momocdn.net/img/momo-amazone-s3-api-250714113823-638880899039487085.png) \",\n backgroundPosition: \"right top\",\n backgroundSize: \"auto 30px\",\n }}\n >\n <div\n className={cn(\n \"qrcode__guide absolute -top-24 right-20 z-50 cursor-pointer select-none md:opacity-0\",\n qrImageBase64 && \"opacity-100 md:opacity-0\"\n )}\n >\n <div className=\"rounded-full ripple size-5\">\n <div className=\"ripple-1\"></div>\n <div className=\"ripple-2\"></div>\n </div>\n <img\n className=\"object-contain relative z-10 -mt-1 drop-shadow-lg select-none qrcode__hand size-7\"\n src=\"https://homepage.momocdn.net/img/momo-amazone-s3-api-250714154408-638881046482607959.png\"\n alt=\"Momo Hand Icon\"\n />\n </div>\n\n <div className=\"mb-2 text-sm font-semibold text-pink-600 md:hidden\">Nhấn giữ QR để lưu</div>\n <PaymentGuideDialog\n isQrForAll={true}\n shortTitle=\"Thanh toán ngay\"\n title=\"Hướng dẫn thanh toán QR\"\n >\n <div className=\"flex justify-center items-center space-x-1 text-sm font-semibold text-center text-pink-600 cursor-pointer\">\n <div>Hướng dẫn thanh toán</div> <LucideMessageCircleQuestion className=\"size-4\" />{\" \"}\n </div>\n </PaymentGuideDialog>\n\n <style>{`\n .ripple {\n box-sizing: border-box;\n position: relative;\n }\n\n .ripple-1,\n .ripple-2{\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: solid 2px #EB2F96;\n border-radius: 1em;\n box-sizing: border-box;\n animation: ripple 2s ease-out infinite;\n opacity: 0;\n }\n .ripple-2 {\n animation-delay: 0.5s;\n }\n .ripple-1 {\n animation-delay: 1s;\n }\n\n .qrcode__hand{\n animation: handTap 2s ease-in-out infinite;\n transform-origin: top center;\n }\n\n @keyframes ripple {\n 0% {\n opacity: 0.25;\n transform: scale(1);\n }\n 100% {\n opacity: 0;\n transform: scale(3);\n border-radius: 2em;\n }\n }\n @keyframes handTap {\n 0% {\n transform: scale(1) translateY(0);\n }\n 20% {\n transform: scale(0.96) translateY(-4px); /* nhấn nhẹ xuống */\n }\n 80% {\n transform: scale(0.96) translateY(-4px); /* nhấn nhẹ xuống */\n }\n 100% {\n transform: scale(1) translateY(0);\n }\n }\n `}</style>\n </div>\n </div>\n );\n};\n\nexport default QRCodeScanBox;\n","/**\n * Chuyển đổi hình ảnh từ URL sang base64\n * @param imageUrl Đường dẫn hình ảnh\n * @returns Promise<string> base64 string\n */\nexport async function imageUrlToBase64(imageUrl: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const img = new window.Image(); // Tạo một đối tượng hình ảnh mới\n img.crossOrigin = \"Anonymous\"; // Cho phép lấy ảnh từ domain khác (CORS)\n img.onload = function () {\n const canvas = document.createElement(\"canvas\");\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n reject(\"Không lấy được context của canvas\");\n return;\n }\n ctx.drawImage(img, 0, 0); // Vẽ ảnh lên canvas\n const dataURL = canvas.toDataURL(\"image/png\"); // Lấy chuỗi base64 từ canvas\n resolve(dataURL); // Trả về chuỗi base64\n };\n img.onerror = function (err) {\n reject(err); // Nếu có lỗi khi tải ảnh\n };\n img.src = imageUrl; // Gán đường dẫn ảnh để bắt đầu tải\n });\n}\n","import React from \"react\";\n\ninterface PaymentGuideProps {\n /**\n * Whether this is QR for all (universal QR)\n */\n isQrForAll?: boolean;\n /**\n * Short title for step 3\n */\n shortTitle?: string;\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\nconst PaymentGuide: React.FC<PaymentGuideProps> = ({\n isQrForAll = false,\n shortTitle,\n className = \"\",\n}) => {\n return (\n <div className={`grid grid-cols-1 gap-y-6 py-8 text-sm ${className}`}>\n <div className=\"flex flex-nowrap items-center\">\n <div className=\"relative aspect-[2/3] flex-none overflow-hidden\">\n <img\n className=\"w-20\"\n loading=\"lazy\"\n src=\"https://homepage.momocdn.net/images/s/momo-upload-api-200917091602-637359309621891617.png\"\n alt=\"Step 1\"\n />\n </div>\n <div className=\"flex-1 pl-4\">\n <div className=\"step font-semibold text-gray-800\">Bước 1 :</div>\n <div className=\"mt-1 text-gray-500\">\n {isQrForAll\n ? \"Mở app MoMo hoặc ứng dụng ngân hàng/ví điện tử chấp nhận mã vạch từ QR Đa Năng\"\n : \"Mở ứng dụng camera mặc định hoặc ứng dụng hỗ trợ QR code của bạn\"}\n </div>\n </div>\n </div>\n <div className=\"flex flex-nowrap items-center\">\n <div className=\"relative aspect-[2/3] flex-none overflow-hidden\">\n <img\n className=\"w-20\"\n loading=\"lazy\"\n src=\"https://homepage.momocdn.net/images/s/momo-upload-api-200917091443-637359308837905996.png\"\n alt=\"Step 2\"\n />\n </div>\n <div className=\"flex-1 pl-4\">\n <div className=\"step font-semibold text-gray-800\">Bước 2 :</div>\n <div className=\"mt-1 text-gray-500\">Quét mã QR Code theo hình bên phải</div>\n </div>\n </div>\n <div className=\"flex flex-nowrap items-center\">\n <div className=\"relative aspect-[2/3] flex-none overflow-hidden\">\n <img\n className=\"w-20\"\n loading=\"lazy\"\n src=\"https://homepage.momocdn.net/images/s/momo-upload-api-200917090146-637359301062519803.png\"\n alt=\"Step 3\"\n />\n </div>\n <div className=\"flex-1 pl-4\">\n <div className=\"step font-semibold text-gray-800\">Bước 3 :</div>\n <div className=\"mt-1 text-gray-500\">\n Bấm vào thông báo hiển thị để tải ứng dụng hoặc {shortTitle || \"Truy cập ngay\"}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default PaymentGuide;\n","import React from \"react\";\n\nimport {\n Dialog,\n DialogBody,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../../Dialog\";\nimport PaymentGuide from \"./PaymentGuide\";\n\ninterface PaymentGuideDialogProps {\n /**\n * Trigger element to open the dialog\n */\n children: React.ReactNode;\n /**\n * Title of the dialog\n */\n title?: string;\n /**\n * Whether this is QR for all (universal QR)\n */\n isQrForAll?: boolean;\n /**\n * Short title for step 3\n */\n shortTitle?: string;\n /**\n * Whether the dialog is open\n */\n open?: boolean;\n /**\n * Callback when dialog open state changes\n */\n onOpenChange?: (open: boolean) => void;\n}\n\nconst PaymentGuideDialog: React.FC<PaymentGuideDialogProps> = ({\n children,\n title = \"Hướng dẫn thanh toán\",\n isQrForAll = false,\n shortTitle,\n open,\n onOpenChange,\n}) => {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogTrigger asChild>{children}</DialogTrigger>\n <DialogContent position=\"bottom\">\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n </DialogHeader>\n <DialogBody>\n <PaymentGuide isQrForAll={isQrForAll} shortTitle={shortTitle} />\n </DialogBody>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default PaymentGuideDialog;\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/**\n * This Tailwind plugin is based and inspired on \"tw-colors\" and \"NextUI\".\n *\n * @see https://github.com/L-Blondy/tw-colors\n * @see https://github.com/nextui-org/nextui\n */\n\nimport Color from \"color\";\nimport plugin from \"tailwindcss/plugin.js\";\n\nimport { animations } from \"./animations\";\nimport { colors as listColors } from \"./colors\";\nimport { layout } from \"./layout\";\nimport { utilities } from \"./utilities\";\nimport { flattenThemeObject } from \"./utils/object\";\n\nconst resolveConfig = (prefix: string) => {\n const resolved = {\n utilities: {},\n colors: {},\n };\n\n const flatColors = flattenThemeObject(listColors);\n\n const flatLayout = layout;\n\n const cssSelector = \":root\";\n\n resolved.utilities[cssSelector] = {};\n // Color\n Object.entries(flatColors).forEach(([colorName, colorValue]) => {\n if (!colorValue) return;\n try {\n const [r, g, b] = Color(colorValue).rgb().array();\n const colorVar = `--${prefix}-${colorName}`;\n // Set the css variable in \"@layer utilities\"\n resolved.utilities[cssSelector]![colorVar] = `${r} ${g} ${b}`;\n resolved.colors[colorName] = `rgb(var(${colorVar}) / <alpha-value>)`;\n } catch (error: any) {\n // eslint-disable-next-line no-console\n console.log(\"error\", error?.message);\n }\n });\n // Layout\n Object.entries(flatLayout).forEach(([key, value]) => {\n if (!value) return;\n const layoutVariablePrefix = `--${prefix}-${key}`;\n\n if (typeof value === \"object\") {\n Object.entries(value).forEach(([nestedKey, nestedValue]) => {\n const nestedLayoutVariable = `${layoutVariablePrefix}-${nestedKey}`;\n resolved.utilities[cssSelector]![nestedLayoutVariable] = nestedValue;\n });\n } else {\n const formattedValue =\n layoutVariablePrefix.includes(\"opacity\") && typeof value === \"number\"\n ? value?.toString().replace(/^0\\./, \".\")\n : value;\n resolved.utilities[cssSelector]![layoutVariablePrefix] = formattedValue;\n }\n });\n\n return resolved;\n};\nexport const mobaseTW = () => {\n const prefix = \"mobase\";\n const resolved = resolveConfig(prefix);\n return plugin(\n ({ addBase, addUtilities, addComponents }) => {\n addComponents({\n \".wrapper\": {\n maxWidth: \"72rem\",\n paddingLeft: \"1.25rem\",\n paddingRight: \"1.25rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n \"@media (min-width: 768px)\": {\n paddingLeft: \"2rem\",\n paddingRight: \"2rem\",\n },\n },\n body: {\n color: \"rgb(var(--mobase-gray-900))\",\n },\n });\n addBase({\n \":root\": {\n \"font-smooth--webkit\": \"antialiased\",\n },\n\n ...resolved?.utilities, // Xem lai cho nay, addBase\n });\n addUtilities({\n // ...resolved?.utilities, //Xem lai cho nay, addBase\n ...utilities,\n });\n },\n // Extend the Tailwind config\n {\n theme: {\n container: {\n center: true,\n },\n screens: {\n sm: \"640px\",\n md: \"768px\",\n lg: \"1024px\",\n xl: \"1280px\",\n \"2xl\": \"1536px\",\n },\n extend: {\n fontFamily: {\n sans: [\n \"-apple-system\",\n \"BlinkMacSystemFont\",\n \"Segoe UI\",\n \"Helvetica\",\n \"Arial\",\n \"sans-serif\",\n \"Apple Color Emoji\",\n \"Segoe UI Emoji\",\n \"Segoe UI Symbol\",\n ],\n mono: [\"SFMono-Regular\", \"Consolas\", \"Liberation Mono\", \"Menlo\", \"monospace\"],\n },\n colors: {\n ...listColors,\n ...resolved?.colors,\n border: \"rgba(var(--border))\",\n },\n boxShadow: {\n small: `var(--${prefix}-box-shadow-small)`,\n medium: `var(--${prefix}-box-shadow-medium)`,\n large: `var(--${prefix}-box-shadow-large)`,\n },\n borderRadius: {\n none: `var(--${prefix}-radius-none)`,\n sm: `var(--${prefix}-radius-sm)`,\n DEFAULT: `var(--${prefix}-radius-default)`,\n md: `var(--${prefix}-radius-md)`,\n lg: `var(--${prefix}-radius-lg)`,\n xl: `var(--${prefix}-radius-xl)`,\n \"2xl\": `var(--${prefix}-radius-2xl)`,\n \"3xl\": `var(--${prefix}-radius-3xl)`,\n full: `var(--${prefix}-radius-full)`,\n },\n fontSize: {\n xxs: [`var(--${prefix}-font-size-xxs)`, `var(--${prefix}-line-height-xxs)`],\n xs: [`var(--${prefix}-font-size-xs)`, `var(--${prefix}-line-height-xs)`],\n sm: [`var(--${prefix}-font-size-sm)`, `var(--${prefix}-line-height-sm)`],\n base: [`var(--${prefix}-font-size-base)`, `var(--${prefix}-line-height-base)`],\n lg: [`var(--${prefix}-font-size-lg)`, `var(--${prefix}-line-height-lg)`],\n xl: [`var(--${prefix}-font-size-xl)`, `var(--${prefix}-line-height-xl)`],\n \"2xl\": [`var(--${prefix}-font-size-2xl)`, `var(--${prefix}-line-height-2xl)`],\n \"3xl\": [`var(--${prefix}-font-size-3xl)`, `var(--${prefix}-line-height-3xl)`],\n \"4xl\": [`var(--${prefix}-font-size-4xl)`, `var(--${prefix}-line-height-4xl)`],\n \"5xl\": [`var(--${prefix}-font-size-5xl)`, `var(--${prefix}-line-height-5xl)`],\n \"6xl\": [`var(--${prefix}-font-size-6xl)`, `var(--${prefix}-line-height-6xl)`],\n \"7xl\": [`var(--${prefix}-font-size-7xl)`, `var(--${prefix}-line-height-7xl)`],\n \"8xl\": [`var(--${prefix}-font-size-8xl)`, `var(--${prefix}-line-height-8xl)`],\n \"9xl\": [`var(--${prefix}-font-size-9xl)`, `var(--${prefix}-line-height-9xl)`],\n },\n zIndex: {\n negative: `var(--${prefix}-z-index-negative)`,\n workbench: `var(--${prefix}-z-index-workbench)`,\n default: `var(--${prefix}-z-index-default)`,\n \"workbench-header\": `var(--${prefix}-z-index-workbench-header)`,\n modal: `var(--${prefix}-z-index-modal)`,\n \"modal-content\": `var(--${prefix}-z-index-modal-content)`,\n dropdown: `var(--${prefix}-z-index-dropdown)`,\n tooltip: `var(--${prefix}-z-index-tooltip)`,\n notification: `var(--${prefix}-z-index-notification)`,\n },\n ...animations,\n },\n },\n }\n );\n};\n","export const animations = {\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n \"spin-loading\": \"spin 1s steps(12, end) infinite\",\n \"fade-in\": \"fade-in 250ms cubic-bezier(0.25, 0.46, 0.45, 0.94) both\",\n },\n keyframes: {\n \"accordion-down\": {\n from: { height: \"0\" },\n to: { height: \"var(--radix-accordion-content-height)\" },\n },\n \"accordion-up\": {\n from: { height: \"var(--radix-accordion-content-height)\" },\n to: { height: \"0\" },\n },\n \"fade-in\": {\n \"0%\": { opacity: \"0\" },\n \"100%\": { opacity: \"1\" },\n },\n },\n};\n","export const blue = {\n 50: \"#eef8ff\",\n 100: \"#d9eeff\",\n 200: \"#bce1ff\",\n 300: \"#8ed0ff\",\n 400: \"#59b4ff\",\n 500: \"#429cff\",\n 600: \"#1b74f5\",\n 700: \"#145ee1\",\n 800: \"#174bb6\",\n 900: \"#19428f\",\n DEFAULT: \"#429cff\",\n};\n","export const green = {\n 50: \"#f1fcf3\",\n 100: \"#dff9e5\",\n 200: \"#c0f2cc\",\n 300: \"#8fe6a4\",\n 400: \"#57d175\",\n 500: \"#34c759\",\n 600: \"#22973f\",\n 700: \"#1e7735\",\n 800: \"#1d5e2e\",\n 900: \"#194e28\",\n DEFAULT: \"#34c759\",\n};\n","export const pink = {\n 50: \"#fef1f9\",\n 100: \"#fee5f6\",\n 200: \"#fecced\",\n 300: \"#ffa2df\",\n 400: \"#fe68c6\",\n 500: \"#EB2F96\",\n 600: \"#D42A87\",\n 700: \"#CB0B6F\",\n 800: \"#A70D5B\",\n 900: \"#8B104E\",\n DEFAULT: \"#EB2F96\",\n};\n","export const purple = {\n 50: \"#faf5ff\",\n 100: \"#f4e9fe\",\n 200: \"#ead6fe\",\n 300: \"#dab6fc\",\n 400: \"#c487f9\",\n 500: \"#ab55f3\",\n 600: \"#9937e6\",\n 700: \"#8326ca\",\n 800: \"#6f24a5\",\n 900: \"#5b1e85\",\n DEFAULT: \"#ab55f3\",\n};\n","export const red = {\n 50: \"#fff1f2\",\n 100: \"#ffe1e3\",\n 200: \"#ffc8cb\",\n 300: \"#ffa1a6\",\n 400: \"#fe6b73\",\n 500: \"#f74e57\",\n 600: \"#e41e29\",\n 700: \"#c0151e\",\n 800: \"#9e161d\",\n 900: \"#83191f\",\n DEFAULT: \"#f74e57\",\n};\n","export const yellow = {\n 50: \"#fffee7\",\n 100: \"#fffec1\",\n 200: \"#fff886\",\n 300: \"#ffec41\",\n 400: \"#ffdb0d\",\n 500: \"#ffcc00\",\n 600: \"#d19500\",\n 700: \"#a66a02\",\n 800: \"#89530a\",\n 900: \"#74430f\",\n DEFAULT: \"#ffcc00\",\n};\n","export const orange = {\n 50: \"#fff4ed\",\n 100: \"#ffe6d5\",\n 200: \"#fecaaa\",\n 300: \"#fea473\",\n 400: \"#fc743b\",\n 500: \"#fa541c\",\n 600: \"#eb350b\",\n 700: \"#c3240b\",\n 800: \"#9b1e11\",\n 900: \"#7c1c12\",\n DEFAULT: \"#fa541c\",\n};\n","export const gray = {\n 50: \"#FAF9FA\",\n 100: \"#F5F4F5\",\n 200: \"#E7E4E6\",\n 300: \"#D6D1D4\",\n 400: \"#A69BA2\",\n 500: \"#796B73\",\n 600: \"#574D53\",\n 700: \"#443B41\",\n 800: \"#292427\",\n 900: \"#1C171A\",\n DEFAULT: \"#1C171A\",\n};\n","import { blue } from \"./blue\";\nimport { green } from \"./green\";\nimport { pink } from \"./pink\";\nimport { purple } from \"./purple\";\nimport { red } from \"./red\";\nimport { yellow } from \"./yellow\";\nimport { orange } from \"./orange\";\nimport { gray } from \"./gray\";\n\nexport const commonColors = {\n white: \"#ffffff\",\n black: \"#000000\",\n blue,\n green,\n pink,\n purple,\n red,\n yellow,\n gray,\n orange,\n};\n\nexport type CommonColors = typeof commonColors;\n","import { commonColors } from \"./common\";\n\nconst colors = {\n ...commonColors,\n};\n\nexport { colors, commonColors };\n","export const layout = {\n \"disabled-opacity\": 0.5, // Numeric values don't need quotes\n \"box-shadow\": {\n small:\n \"0px 0px 5px 0px rgb(0 0 0 / 0.02), 0px 2px 10px 0px rgb(0 0 0 / 0.06), 0px 0px 1px 0px rgb(0 0 0 / 0.3)\",\n medium:\n \"0px 0px 15px 0px rgb(0 0 0 / 0.03), 0px 2px 30px 0px rgb(0 0 0 / 0.08), 0px 0px 1px 0px rgb(0 0 0 / 0.3)\",\n large:\n \"0px 0px 30px 0px rgb(0 0 0 / 0.04), 0px 30px 60px 0px rgb(0 0 0 / 0.12), 0px 0px 1px 0px rgb(0 0 0 / 0.3)\",\n },\n \"radius\": {\n none: \"0px\",\n sm: \"0.125rem\",\n default: \"0.25rem\",\n md: \"0.375rem\",\n lg: \"0.5rem\",\n xl: \"0.75rem\",\n \"2xl\": \"1rem\",\n \"3xl\": \"1.5rem\",\n \"full\": \"9999px\",\n },\n \"z-index\": {\n negative: \"-1\",\n workbench: \"0\",\n default: \"1\",\n \"workbench-header\": \"10\",\n modal: \"100\",\n \"modal-content\": \"101\",\n dropdown: \"1000\",\n tooltip: \"10000\",\n notification: \"100000\",\n },\n \"font-size\": {\n xxs: \"0.625rem\",\n xs: \"0.75rem\",\n sm: \"0.875rem\",\n base: \"1rem\",\n lg: \"1.125rem\",\n xl: \"1.25rem\",\n \"2xl\": \"1.5rem\",\n \"3xl\": \"1.875rem\",\n \"4xl\": \"2.25rem\",\n \"5xl\": \"3rem\",\n \"6xl\": \"3.75rem\",\n \"7xl\": \"4.5rem\",\n \"8xl\": \"6rem\",\n \"9xl\": \"8rem\",\n },\n \"line-height\": {\n xxs: \"1rem\",\n xs: \"1rem\",\n sm: \"1.25rem\",\n base: \"1.5rem\",\n lg: \"1.75rem\",\n xl: \"1.75rem\",\n \"2xl\": \"2rem\",\n \"3xl\": \"2.25rem\",\n \"4xl\": \"2.5rem\",\n \"5xl\": \"1\",\n \"6xl\": \"1\",\n \"7xl\": \"1\",\n \"8xl\": \"1\",\n \"9xl\": \"1\",\n }\n};\n","export const DEFAULT_TRANSITION_DURATION = \"250ms\";\n\nexport default {\n /**\n * Transition utilities\n */\n \".transition-background\": {\n \"transition-property\": \"background\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-colors-opacity\": {\n \"transition-property\":\n \"color, background-color, border-color, text-decoration-color, fill, stroke, opacity\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-width\": {\n \"transition-property\": \"width\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-height\": {\n \"transition-property\": \"height\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-size\": {\n \"transition-property\": \"width, height\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-left\": {\n \"transition-property\": \"left\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-transform-opacity\": {\n \"transition-property\": \"transform, opacity\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-transform-background\": {\n \"transition-property\": \"transform, background\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-transform-colors\": {\n \"transition-property\":\n \"transform, color, background, background-color, border-color, text-decoration-color, fill, stroke\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-transform-colors-opacity\": {\n \"transition-property\":\n \"transform, color, background, background-color, border-color, text-decoration-color, fill, stroke, opacity\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n};\n","export default {\n /**\n * Custom utilities\n */\n \".leading-inherit\": {\n \"line-height\": \"inherit\",\n },\n \".bg-img-inherit\": {\n \"background-image\": \"inherit\",\n },\n \".bg-clip-inherit\": {\n \"background-clip\": \"inherit\",\n },\n \".text-fill-inherit\": {\n \"-webkit-text-fill-color\": \"inherit\",\n },\n \".tap-highlight-transparent\": {\n \"-webkit-tap-highlight-color\": \"transparent\",\n },\n};\n","/**\n * Credits to: https://github.com/reslear/tailwind-scrollbar-hide/tree/main\n */\n\nexport default {\n /**\n * Scroll Hide\n */\n \".scrollbar-hide\": {\n /* IE and Edge */\n \"-ms-overflow-style\": \"none\",\n /* Firefox */\n \"scrollbar-width\": \"none\",\n /* Safari and Chrome */\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n },\n \".scrollbar-default\": {\n /* IE and Edge */\n \"-ms-overflow-style\": \"auto\",\n /* Firefox */\n \"scrollbar-width\": \"auto\",\n /* Safari and Chrome */\n \"&::-webkit-scrollbar\": {\n display: \"block\",\n },\n },\n};\n","import transition from \"./transition\";\nimport custom from \"./custom\";\nimport scrollbarHide from \"./scrollbar-hide\";\n\nexport const utilities = {\n ...custom,\n ...transition,\n ...scrollbarHide,\n};\n","import { flatten } from 'flat'\nexport function swapColorValues<T extends Object>(colors: T) {\n const swappedColors = {};\n const keys = Object.keys(colors);\n const length = keys.length;\n\n for (let i = 0; i < length / 2; i++) {\n const key1 = keys[i];\n const key2 = keys[length - 1 - i];\n\n // @ts-ignore\n swappedColors[key1] = colors[key2];\n // @ts-ignore\n swappedColors[key2] = colors[key1];\n }\n if (length % 2 !== 0) {\n const middleKey = keys[Math.floor(length / 2)];\n\n // @ts-ignore\n swappedColors[middleKey] = colors[middleKey];\n }\n\n return swappedColors;\n}\n\nexport function removeDefaultKeys<T extends Object>(obj: T) {\n const newObj = {};\n\n for (const key in obj) {\n if (key.endsWith(\"-DEFAULT\")) {\n // @ts-ignore\n newObj[key.replace(\"-DEFAULT\", \"\")] = obj[key];\n continue;\n }\n // @ts-ignore\n newObj[key] = obj[key];\n }\n\n return newObj;\n}\n\n/**\n *\n * Flatten theme object and remove default keys\n *\n * @param obj theme object\n * @returns object with flattened keys\n */\n\nexport const flattenThemeObject = <TTarget>(obj: TTarget) =>\n removeDefaultKeys(\n flatten(obj, {\n safe: true,\n delimiter: \"-\",\n }) as Object\n );\n","export const SiteMeta = (\n <>\n <meta\n name=\"abstract\"\n content=\"Ví điện tử MoMo - Siêu ứng dụng thanh toán số 1 Việt Nam\"\n />\n <meta name=\"distribution\" content=\"Global\" />\n <meta name=\"author\" content=\"Ví MoMo\" />\n\n <meta property=\"fb:app_id\" content=\"320653355376196\" />\n <meta property=\"fb:pages\" content=\"138010322921640\" />\n\n <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n\n <link\n href=\"https://www.momo.vn/favicon-32x32.png\"\n rel=\"icon\"\n sizes=\"32x32\"\n type=\"image/png\"\n />\n\n <link\n href=\"https://www.momo.vn/favicon-16x16.png\"\n rel=\"icon\"\n sizes=\"16x16\"\n type=\"image/png\"\n />\n\n <link\n href=\"https://www.momo.vn/apple-touch-icon.png\"\n rel=\"apple-touch-icon\"\n sizes=\"180x180\"\n />\n\n <meta name=\"language\" content=\"vietnamese\" />\n <meta name=\"copyright\" content=\"Copyright © 2019 by MOMO.VN\" />\n <meta name=\"REVISIT-AFTER\" content=\"1 DAYS\" />\n <meta name=\"RATING\" content=\"GENERAL\" />\n <meta httpEquiv=\"x-dns-prefetch-control\" content=\"on\" />\n <link rel=\"dns-prefetch\" href=\"//www.google-analytics.com\" />\n <link rel=\"dns-prefetch\" href=\"//connect.facebook.net\" />\n <link rel=\"dns-prefetch\" href=\"//www.googletagservices.com\" />\n <link rel=\"dns-prefetch\" href=\"//www.googletagmanager.com\" />\n <link rel=\"dns-prefetch\" href=\"//facebook.com\" />\n <link rel=\"dns-prefetch\" href=\"//homepage.momocdn.net\" />\n <link rel=\"dns-prefetch\" href=\"//www.google.com\" />\n <link rel=\"dns-prefetch\" href=\"//www.google.com.vn\" />\n <link rel=\"dns-prefetch\" href=\"//www.googleadservices.com\" />\n <link rel=\"preconnect\" href=\"//connect.facebook.net\" />\n <link rel=\"preconnect\" href=\"//www.googletagmanager.com\" />\n <link rel=\"preconnect\" href=\"//www.google-analytics.com\" />\n <link rel=\"preconnect\" href=\"//googleads.g.doubleclick.net\" />\n <link rel=\"preconnect\" href=\"//homepage.momocdn.net\" />\n <link rel=\"preconnect\" href=\"//www.google.com\" />\n <link rel=\"preconnect\" href=\"//www.google.com.vn\" />\n <link rel=\"preconnect\" href=\"//www.googleadservices.com\" />\n\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{\n __html: `{\n \"@context\": \"https://schema.org/\",\n \"@type\": \"WebSite\",\n \"@id\":\"https://www.momo.vn/#website\",\n \"name\": \"Ví MoMo\",\n \"url\": \"https://www.momo.vn\",\n \"potentialAction\": {\n \"@type\": \"SearchAction\",\n \"target\": \"https://www.momo.vn/tim-kiem?q={search_term_string}\",\n \"query-input\": \"required name=search_term_string\"\n }}`,\n }}\n />\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{\n __html: `{\n \"@context\": \"https://schema.org\",\n \"@type\": \"Organization\",\n \"name\": \"Siêu ứng dụng MoMo\",\n \"alternateName\": \"Siêu ứng dụng MoMo - Siêu Ứng Dụng Thanh Toán số 1 Việt Nam\",\n \"legalName\": \"ONLINE MOBILE SERVICES JSC (M_Service)\",\n \"url\": \"https://www.momo.vn\",\n \"logo\": \"https://homepage.momocdn.net/img/logo-momo.png\",\n \"foundingDate\": \"2007\",\n \"founders\": [\n {\n \"@type\": \"Person\",\n \"name\": \"Nguyễn Mạnh Tường\"\n }\n ],\n \"address\":{\n \"@type\": \"PostalAddress\",\n \"streetAddress\": \"Lầu 6, Toà nhà Phú Mỹ Hưng, số 8 Hoàng Văn Thái, khu phố 1, Phường Tân Phú, Quận 7, Thành phố Hồ Chí Minh\",\n \"addressLocality\": \"Hồ Chí Minh\",\n \"addressRegion\": \"VN\",\n \"postalCode\": \"700000\",\n \"addressCountry\": \"VN\"\n },\n \"contactPoint\":{\n \"@type\": \"ContactPoint\",\n \"contactType\": \"customer support\",\n \"telephone\": \"1900545441\",\n \"email\": \"hotro@momo.vn\"\n },\n \"sameAs\": [\n \"https://www.facebook.com/vimomo/\",\n \"https://www.youtube.com/channel/UCKHHW-qL2JoZqcSNm1jPlqw\",\n \"https://www.linkedin.com/company/momo-mservice/\",\n \"https://github.com/momo-wallet\"\n ]\n }`,\n }}\n />\n </>\n);\n"],"mappings":"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","names":["React","ChevronDownIcon","AccordionPrimitive","React","twMerge","MoMoText","SUPPORT","SOCIAL_ITEMS","APP_DOWNLOAD","MOMO_TEXT","createMedia","cn","inputs","twMerge","MoMoAppMedia","createMedia","mediaStyles","Media","MediaContextProvider","jsx","jsxs","Accordion","className","props","ref","AccordionItem","cn","AccordionTrigger","children","ChevronDownIcon","AccordionContent","React","Slot","cva","jsx","jsxs","SpinerIcon","className","SpinerIcon_default","Fragment","jsx","jsxs","buttonVariants","cva","Button","className","variant","size","asChild","isLoading","isDisabled","props","ref","Comp","Slot","buttonClassName","cn","SpinerIcon_default","QRCodeSVG","React","XMarkIcon","DialogPrimitive","jsx","jsxs","Dialog","DialogTrigger","DialogPortal","DialogClose","DialogOverlay","className","props","ref","cn","DialogContent","positionRightCloseBtn","hideCloseBtn","size","position","height","isFull","children","classNames","sizeClassNames","heightClassNames","classNamesDialogContent","XMarkIcon","DialogHeader","DialogBody","isCondensed","DialogFooter","isDivider","DialogTitle","DialogDescription","Fragment","jsx","jsxs","QRCodeScan","img","children","isQrForAll","DialogQr","className","title","shortTitle","qrImage","qrLink","logoQr","props","Dialog","DialogContent","cn","DialogBody","QRCodeSVG","useState","useEffect","useLayoutEffect","useState","UAParser","checkIsMobileAgent","useIsomorphicLayoutEffect","useIsMobile","isMobile","setIsMobile","Fragment","jsx","jsxs","ActionButton","action","newTab","offset","dialogQrProps","className","children","props","isOpenQR","setOpenQR","useState","isMobileDevice","useIsMobile","hasQrButton","handleGetLink","basicLink","handleAction","modifiedLink","scrollToElement","selector","element","offsetPosition","handleScrollOrAction","renderButtonWithDialogQr","Button","DialogQr","cn","React","ChevronRightIcon","DotsHorizontalIcon","Slot","jsx","jsxs","Breadcrumb","className","props","ref","cn","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","asChild","Slot","BreadcrumbPage","BreadcrumbSeparator","children","ChevronRightIcon","BreadcrumbEllipsis","DotsHorizontalIcon","parse","createContext","useContext","jsx","HeadingGroupContext","createContext","HeadingTagline","color","size","isTruncated","className","children","colorClasses","sizeClasses","cn","Heading","tagHeading","HeadingTag","align","useContext","HeadingSub","marginTop","marginTopClasses","HeadingGroup","jsx","jsxs","SectionBlock","idSection","className","background","children","cn","HeadingBlock","align","tagline","title","description","tagHeading","colorScheme","sizeHeading","taglineColor","headingColor","headingSubColor","HeadingGroup","HeadingTagline","Heading","parse","HeadingSub","ButtonsBlock","isFullInMobile","buttons","button","index","btnName","rest","ActionButton","React","memo","ArrowDownIcon","parse","createContext","useCallback","useContext","useEffect","useRef","useState","ChevronLeft","ChevronRight","React","Slot","cva","jsx","iconButtonVariants","cva","IconButton","className","variant","size","asChild","isDisabled","props","ref","Comp","Slot","buttonClassName","cn","Fragment","jsx","jsxs","HorizontalScrollContext","createContext","HorizontalScroll","showGradientOverlay","gradientOverlayColor","className","children","scrollContainerRef","useRef","showArrows","setShowArrows","useState","checkOverflow","useCallback","scrollContainer","scrollLeft","scrollWidth","clientWidth","useEffect","scroll","direction","scrollAmount","newScrollPosition","cn","HorizontalContent","context","useContext","HorizontalPrevious","props","IconButton","ChevronLeft","HorizontalNext","ChevronRight","React","TabsPrimitive","jsx","Tabs","TabsList","className","size","isDivider","props","ref","cn","TabsTrigger","TabsContent","React","Slot","cva","jsx","textButtonVariants","cva","TextButton","className","variant","size","asChild","isDisabled","props","ref","Comp","Slot","buttonClassName","cn","Fragment","jsx","jsxs","BlogSectionItem","blog","handleOnClickcate","e","url","TextButton","BlogSectionTemplateOne","memo","dataHeading","dataHorizontalScroll","dataBlog","onClickModal","onClickLoadMore","showGradientOverlay","gradientOverlayColor","className","handleOnClickItem","id","renderGridBlog","blogGroup","index","cn","blogItem","ActionButton","parse","SpinerIcon_default","ArrowDownIcon","React","HeadingBlock","Tabs","HorizontalScroll","HorizontalContent","TabsList","TabsTrigger","HorizontalPrevious","HorizontalNext","TabsContent","React","memo","useEffect","useState","ChevronLeftIcon","ChevronRightIcon","parse","React","ChevronLeftIcon","ChevronRightIcon","useEmblaCarousel","Fragment","jsx","jsxs","CarouselContext","useCarousel","context","Carousel","orientation","opts","setApi","plugins","className","children","props","ref","carouselRef","api","useEmblaCarousel","canScrollPrev","setCanScrollPrev","canScrollNext","setCanScrollNext","onSelect","scrollPrev","scrollNext","handleKeyDown","event","cn","CarouselContent","classNameContent","CarouselItem","CarouselPrevious","variant","size","IconButton","ChevronLeftIcon","CarouselNext","ChevronRightIcon","CarouselDots","setUpdateState","toggleUpdateState","prevState","numberOfSlides","currentSlide","_","i","Fragment","jsx","jsxs","BlogSectionItem","blog","handleOnClickcate","e","url","parse","TextButton","CarouselBlog","dataBlog","setCarouselRef","carouselRef","setCurrent","handleOnClickItem","blogList","isShowBtn","btnName","btnUrl","isNewTab","classNameItem","useEffect","Carousel","CarouselContent","CarouselItem","cn","ActionButton","CarouselPreviousRef","IconButton","ChevronLeftIcon","CarouselNextRef","ChevronRightIcon","BlogSectionTemplateTwo","memo","dataHeading","onClickModal","onClickLoadMore","id","useState","CarouselNavigation","React","HeadingBlock","Fragment","jsx","renderTemplate","template","dataBlog","dataHeading","dataHorizontalScroll","onClickModal","onClickLoadMore","BlogSectionTemplateOne","BlogSectionTemplateTwo","BlogSectionContent","BlogSection","idSection","className","background","SectionBlock","cn","React","enUS","vi","ChevronLeft","ChevronRight","lunisolar","DayPicker","React","CheckboxPrimitive","CheckIcon","cva","jsx","checkboxVariants","cva","checkboxIconVariants","Checkbox","className","size","props","ref","cn","CheckIcon","Fragment","jsx","jsxs","CusDayContent","date","cusContent","lunarDate","lunisolar","customFormatters","month","weekday","dayIndex","CheckboxLunaDate","isShow","setIsShow","lang","uniqueId","Checkbox","checked","isWeekend","Calendar","className","classNames","showOutsideDays","enableLunaDate","cusContentDay","props","showLunaDate","setShowLunaDate","DayPicker","vi","enUS","cn","buttonVariants","ChevronLeft","ChevronRight","dayProps","children","QuestionMarkCircleIcon","XCircleIcon","format","CalendarIcon","React","PopoverPrimitive","jsx","Popover","PopoverTrigger","PopoverContent","className","align","sideOffset","props","ref","cn","Fragment","jsx","jsxs","DatePicker","label","placeholder","size","message","isError","disabled","dateFormat","buttonProps","popoverProps","calendarProps","popoverContentProps","dateSelected","Popover","PopoverTrigger","Button","cn","format","CalendarIcon","PopoverContent","Calendar","XCircleIcon","QuestionMarkCircleIcon","useEffect","useState","QuestionMarkCircleIcon","XCircleIcon","isValid","React","ChevronDownIcon","ChevronUpIcon","CheckIcon","XCircleIcon","QuestionMarkCircleIcon","SelectPrimitive","jsx","jsxs","Select","className","children","label","message","size","isError","disabled","props","ref","cn","XCircleIcon","QuestionMarkCircleIcon","SelectValue","SelectTrigger","ChevronDownIcon","SelectScrollUpButton","ChevronUpIcon","SelectScrollDownButton","SelectContent","position","SelectGroup","SelectLabel","SelectItem","CheckIcon","SelectSeparator","monthsVi","monthsEn","getDaysInMonth","year","month","fromDate","toDate","daysInMonth","startDay","endDay","generateYears","startYear","endYear","fromYear","toYear","_","i","jsx","jsxs","DateSelect","label","selected","onSelect","size","message","isError","disabled","dateFormat","lang","fromYear","toYear","disableUnselect","selectedDate","setSelectedDate","useState","startYear","endYear","isMonthYearOnly","handleDateChange","type","value","currentYear","currentMonth","currentDay","maxDay","getDaysInMonth","newDate","isValid","isAnySelectOpen","setIsAnySelectOpen","handleOpenChange","open","useEffect","cn","Select","SelectTrigger","SelectValue","SelectContent","e","SelectGroup","SelectItem","_","i","d","m","monthsVi","monthsEn","generateYears","y","XCircleIcon","QuestionMarkCircleIcon","React","AlertDialogPrimitive","jsx","jsxs","AlertDialog","AlertDialogTrigger","AlertDialogPortal","AlertDialogOverlay","className","props","ref","cn","AlertDialogContent","AlertDialogHeader","AlertDialogFooter","AlertDialogTitle","AlertDialogDescription","AlertDialogAction","buttonVariants","AlertDialogCancel","memo","useState","useEffect","useState","parse","motion","AspectRatioPrimitive","AspectRatio","Fragment","jsx","jsxs","GuideUIDesktopTempOne","guideGroup","mockup","api","setApi","useState","current","setCurrent","variants","useEffect","cn","Carousel","CarouselContent","step","index","CarouselItem","AspectRatio","CarouselPrevious","CarouselNext","parse","motion","GuideUIDesktop_default","useEffect","useRef","useState","ChevronRightIcon","Autoplay","parse","Fragment","jsx","jsxs","ModalStepMobile","open","setOpenDialog","dataStep","mockup","current","setCurrent","useState","api","setApi","useEffect","Dialog","DialogContent","DialogHeader","DialogTitle","DialogBody","Carousel","CarouselContent","step","index","CarouselItem","cn","AspectRatio","parse","_","GuideUIMobileTempOne","dataGuide","isStep","openDialog","setDataStep","plugin","useRef","Autoplay","handleClickModal","guideGroup","ChevronRightIcon","TextButton","GuideUIMobile_default","Fragment","jsx","jsxs","ArrowSVG","direction","className","svgProps","cn","GuideSectionTemplateOne","memo","dataHeading","dataHorizontalScroll","dataGuide","dataButtons","mockup","isStep","showGradientOverlay","gradientOverlayColor","activeTab","setActiveTab","useState","HeadingBlock","MediaContextProvider","Media","GuideUIMobile_default","Tabs","value","HorizontalScroll","HorizontalContent","TabsList","guideGroup","index","isLast","isActive","TabsTrigger","HorizontalPrevious","HorizontalNext","TabsContent","GuideUIDesktop_default","ButtonsBlock","Fragment","jsx","renderTemplate","template","dataHeading","dataGuide","dataHorizontalScroll","dataButtons","mockup","isStep","GuideSectionTemplateOne","GuideSectionContent","GuideSection","className","background","SectionBlock","cn","ChevronLeft","ChevronRight","Fragment","jsx","jsxs","Pagination","current","total","onChange","getButton","index","cn","iconButtonVariants","ChevronLeft","_","ChevronRight","forwardRef","QuestionMarkCircleIcon","XCircleIcon","jsx","jsxs","TextArea","forwardRef","disabled","isError","message","label","className","inputClassName","size","rows","restProps","ref","cn","XCircleIcon","QuestionMarkCircleIcon","React","TOAST_LIMIT","TOAST_REMOVE_DELAY","count","genId","toastTimeouts","addToRemoveQueue","toastId","timeout","dispatch","TOAST_REMOVE_DELAY","reducer","state","action","TOAST_LIMIT","toast","t","listeners","memoryState","listener","props","id","update","dismiss","open","useToast","setState","index","React","CheckCircleIcon","ExclamationTriangleIcon","InformationCircleIcon","XMarkIcon","ToastPrimitives","cva","jsx","jsxs","ToastProvider","ToastViewport","className","props","ref","cn","toastVariants","cva","Toast","variant","children","CheckCircleIcon","ExclamationTriangleIcon","InformationCircleIcon","ToastAction","ToastClose","XMarkIcon","ToastTitle","ToastDescription","jsx","jsxs","Toaster","toasts","useToast","ToastProvider","id","title","description","action","props","Toast","ToastTitle","ToastDescription","ToastClose","ToastViewport","React","TooltipPrimitive","jsx","TooltipProvider","Tooltip","TooltipTrigger","TooltipArrow","props","ref","cn","TooltipContent","className","type","sideOffset","forwardRef","useEffect","useRef","useState","QuestionMarkCircleIcon","XCircleIcon","XCircleIconSolid","jsx","jsxs","TextInput","forwardRef","disabled","isError","message","label","className","inputClassName","withClearButton","size","onChange","onFocus","onClickClear","value","defaultValue","type","restProps","ref","clearable","setClearable","useState","rootRef","useRef","handleShowClearButton","inputValue","onChangeFactory","event","onFocusFactory","handleClear","inputTarget","useEffect","cn","XCircleIcon","XCircleIconSolid","QuestionMarkCircleIcon","MinusCircleIcon","PlusCircleIcon","forwardRef","useState","jsx","jsxs","Stepper","forwardRef","className","min","max","step","defaultValue","onChangeValue","onDecrease","onIncrease","disabled","props","ref","value","setValue","useState","increment","newValue","decrement","handleInputChange","e","inputValue","cn","IconButton","MinusCircleIcon","PlusCircleIcon","React","NavigationMenuPrimitive","cva","ChevronDownIcon","jsx","jsxs","NavigationMenuContext","NavigationMenuProvider","value","children","useNavigationMenu","context","NavigationMenu","className","alignDropdown","props","ref","cn","NavigationMenuList","NavigationMenuItem","navigationMenuTriggerStyle","cva","buttonVariants","NavigationMenuTrigger","ChevronDownIcon","NavigationMenuContent","NavigationMenuLink","NavigationMenuViewport","NavigationMenuIndicator","React","SwitchPrimitives","jsx","Switch","className","props","ref","cn","React","RadioGroupPrimitive","Circle","cva","jsx","radioVariants","cva","radioCircleVariants","RadioGroupContext","useChoiceboxGroupContext","context","RadioGroup","className","size","props","ref","cn","RadioGroupItem","Circle","useState","ArrowDownTrayIcon","parse","useEffect","useState","Router","AnimatePresence","domAnimation","LazyMotion","motion","useKey","DEFAULT_EASE","motion","jsx","jsxs","ListItemMobile","className","icon","title","children","href","newTab","linkProps","cn","ListItemMobile_default","jsx","jsxs","listItem","DEFAULT_EASE","NavItemsMobile","data","Accordion","menuItem","linkProps","motion","AccordionItem","AccordionTrigger","AccordionContent","cn","component","ListItemMobile_default","NavItemsMobile_default","jsx","jsxs","computeInsetTop","MobileMenu","data","className","isOpen","setIsOpen","useState","isHashChange","setIsHashChange","useKey","useEffect","memoizedInsetTop","handleRouteChange","handleHashChange","handleHashClick","e","target","Router","variants","containerVariants","DEFAULT_EASE","cn","motion","LazyMotion","domAnimation","AnimatePresence","NavItemsMobile_default","MoMoText","MobileMenu_default","jsx","jsxs","ListItem","className","icon","title","children","href","newTab","linkProps","NavigationMenuLink","cn","ListItem_default","jsx","jsxs","NavItems","data","alignDropdown","NavigationMenu","NavigationMenuList","menuItem","linkProps","NavigationMenuItem","NavigationMenuTrigger","NavigationMenuContent","cn","component","ListItem_default","NavigationMenuLink","navigationMenuTriggerStyle","NavItems_default","jsx","jsxs","HeaderNavigation","className","dataMenu","serviceInfo","hasDownloadApp","navigationRight","isSticky","alignDropdown","isLogoVisible","logo","name","url","openDialogQr","setOpenDialogQr","useState","cn","parse","NavItems_default","Button","ArrowDownTrayIcon","DialogQr","MobileMenu_default","useState","Fragment","jsx","jsxs","FooterContentItem","item","FooterContent","primaryMenu","secondaryMenu","openDialogQr","setOpenDialogQr","useState","index","SUPPORT","MOMO_TEXT","SOCIAL_ITEMS","APP_DOWNLOAD","Button","DialogQr","FooterContent_default","jsx","Footer","className","primaryMenu","secondaryMenu","cn","FooterContent_default","React","jsx","Card","className","props","ref","cn","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","React","CommandPrimitive","XCircleIcon","MagnifyingGlassIcon","jsx","jsxs","Command","className","props","ref","CommandPrimitive","cn","CommandDialog","children","Dialog","DialogContent","CommandInput","onClickClear","classNameInput","divRef","search","setSearch","handleClearInput","CommandList","CommandEmpty","CommandGroup","CommandSeparator","CommandItem","CommandShortcut","ChevronDownIcon","jsx","jsxs","ComboboxTrigger","className","value","label","children","placeholder","size","PopoverTrigger","cn","ChevronDownIcon","ComboboxContent","props","PopoverContent","Combobox","open","onOpenChange","Popover","cva","forwardRef","InformationCircleIcon","jsx","jsxs","calloutVariants","cva","iconVariants","Callout","forwardRef","type","message","withAction","onClickAction","className","disabled","actionClassName","icon","props","ref","cn","InformationCircleIcon","TextButton","forwardRef","useEffect","useRef","useState","MagnifyingGlassIcon","XCircleIcon","jsx","jsxs","SearchBar","forwardRef","disabled","className","inputClassName","size","onChange","onFocus","onClickClear","value","defaultValue","type","restProps","ref","clearable","setClearable","useState","rootRef","useRef","handleShowClearButton","inputValue","onChangeFactory","event","onFocusFactory","handleClear","inputTarget","useEffect","cn","MagnifyingGlassIcon","XCircleIcon","DialogPrimitive","React","useContext","useEffect","useState","X","_","jsx","jsxs","LightboxGalleryContext","React","useLightboxGalleryContext","context","useContext","LightboxGallery","children","open","onOpenChange","className","cn","LightboxThumbnail","src","alt","classNameImage","onClick","ratio","handleOnClickThumbnail","AspectRatio","LightboxContent","props","ref","handleClose","X","LightBoxGalleryContent","images","activeSlideIndex","withSideBar","subHtmlSideBar","classNameSubHtmSideBar","titleImage","setTitleImg","useState","api","setApi","current","setCurrent","useEffect","onGetTitleImage","result","_","idx","titleImgDraft","Carousel","CarouselContent","img","index","CarouselItem","CarouselPrevious","CarouselNext","React","CheckIcon","CheckboxPrimitive","RadioGroupPrimitive","Circle","jsx","jsxs","ChoiceboxGroupContext","useChoiceboxGroupContext","context","ChoiceboxGroup","className","hideIndicator","props","ref","cn","ChoiceboxGroupItem","children","Circle","ChoiceboxMultiItem","CheckIcon","cva","jsx","badgeVariants","cva","Badge","className","variant","props","cn","React","ProgressPrimitive","cva","jsx","progressbarVariants","cva","progressbarSecondaryVariants","Progress","className","value","variant","size","disabled","props","ref","cn","jsx","Skeleton","className","props","cn","Fragment","jsx","jsxs","Spinner","size","color","className","template","sizeClasses","sizeClassesDots","_","i","cn","React","SliderPrimitive","jsx","jsxs","Slider","className","showIndicatorValue1","showIndicatorValue2","props","ref","cn","forwardRef","Fragment","jsx","jsxs","AvatarFallBack","author","Avatar","avatar","CommentHeader","time","statusMessage","isOutStanding","CommentHeader_default","useState","StarIcon","jsx","jsxs","textReviewMax10","textReviewMax5","CommentRating","point","max","className","textReviewFinal","cn","CommentRating_default","useState","parse","jsx","jsxs","ReadMoreLite","children","maxChar","textMore","textLess","btnClass","className","isReadMore","setIsReadMore","useState","toggleReadMore","shorten","str","maxLen","separator","cn","parse","jsx","jsxs","CommentContent","content","thumbnails","tags","commentSideBar","rating","limitContent","activeSlideIdx","setActiveSlideIdx","useState","isOpen","setIsOpen","handleClick","index","CommentRating_default","ReadMoreLite","tag","LightboxGallery","img","AspectRatio","LightBoxGalleryContent","CommentContent_default","jsx","CommentFooter","actions","CommentFooter_default","jsx","jsxs","Comment","forwardRef","avatar","author","time","ratingPoint","content","tags","thumbnails","actions","statusMessage","isReply","children","commentSideBar","isOutStanding","limitContent","ref","cn","CommentHeader_default","CommentContent_default","CommentFooter_default","React","cva","CheckIcon","XIcon","jsx","jsxs","stepperVariants","cva","ProgressStepsContext","useProgressStepsContext","context","ProgressStepper","type","icon","stepNumber","size","isError","state","iconSizeClass","ProgressStepsItemTrigger","step","currentStep","onValueChangeStep","children","handleChangeStep","ProgressStepsItem","placement","className","title","description","lastStep","fristStep","props","cn","ProgressSteps","React","Slot","Controller","FormProvider","useFormContext","React","LabelPrimitive","cva","jsx","labelVariants","cva","Label","className","props","ref","cn","jsx","Form","FormProvider","FormFieldContext","FormField","props","Controller","useFormField","fieldContext","itemContext","FormItemContext","getFieldState","formState","useFormContext","fieldState","id","FormItem","className","ref","cn","FormLabel","error","formItemId","Label","FormControl","formDescriptionId","formMessageId","Slot","FormDescription","FormMessage","children","body","React","DropdownMenuPrimitive","ChevronRight","Check","jsx","jsxs","DropdownMenu","DropdownMenuTrigger","DropdownMenuGroup","DropdownMenuPortal","DropdownMenuSub","DropdownMenuRadioGroup","DropdownMenuSubTrigger","className","inset","children","props","ref","cn","ChevronRight","DropdownMenuSubContent","DropdownMenuContent","sideOffset","DropdownMenuItem","DropdownMenuCheckboxItem","checked","Check","DropdownMenuRadioItem","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuShortcut","parse","Fragment","jsx","jsxs","HowItWorksTemplateOne","dataHeading","dataHowItWorks","dataButtons","HeadingBlock","step","index","parse","ButtonsBlock","HowItWorksTemplateTwo","AspectRatio","renderTemplate","template","HowItWorksSectionContent","HowItWorksSection","background","className","idSection","SectionBlock","cva","parse","CheckIcon","Fragment","jsx","jsxs","featureVariants","cva","SectionHeroItemFeature","template","name","image","isFeatures","cn","CheckIcon","parse","SectionHeroListFeature","dataFeatures","feature","index","XIcon","jsx","jsxs","convertDataRation","ratio","b","SectionHeroVideo","src","className","youtubeId","onClickFC","MediaContextProvider","Media","AspectRatio","cn","Dialog","DialogTrigger","DialogContent","DialogBody","DialogClose","IconButton","XIcon","SectionHeroMedia","type","classNameMedia","parse","Fragment","jsx","jsxs","SectionHeroListStats","value","suffix","unit","description","idx","cn","parse","SectionHeroStats","dataStats","stat","index","Fragment","jsx","jsxs","HeroContentTemplateOne","dataHeading","dataButtons","dataFeatures","template","dataStats","dataMedia","advancedComponent","cn","HeadingBlock","SectionHeroListFeature","ButtonsBlock","SectionHeroStats","SectionHeroMedia","HeroContentTemplateTwo","HeroContentTemplateThree","Fragment","jsx","BG_DEFAULT","renderTemplate","template","dataHeading","dataButtons","dataFeatures","dataStats","dataMedia","advancedComponent","HeroContentTemplateOne","HeroContentTemplateTwo","HeroContentTemplateThree","SectionHeroContent","HeroSection","idSection","className","background","SectionBlock","cn","Fragment","jsx","jsxs","SocialProofTemplateOne","dataHeading","dataBrands","dataButtons","spaceX","isScrollSnap","spaceXClasses","HeadingBlock","cn","brand","index","ButtonsBlock","SocialProofTemplateTwo","renderTemplate","template","SocialProofSectionContent","SocialProofSection","background","className","idSection","SectionBlock","useState","ChevronRightIcon","parse","Fragment","jsx","jsxs","RenderFeatureLink","btnLink","btnName","newTab","TextButton","ChevronRightIcon","FeatureTemplateOne","dataHeading","dataFeatures","dataButtons","HeadingBlock","feature","index","parse","ButtonsBlock","FeatureTemplateTwo","FeatureTemplateThree","FeatureTemplateFour","cn","FeatureTemplateFive","FeatureTemplateSix","FeatureTemplateSeven","totalItems","BASIS_CLASSES","ROW_BREAK_INDEX","basisClass","breakAfterIndex","renderFeatureItem","WrapperTag","wrapperProps","FeatureTemplateEight","FeatureTemplateNine","dataBanner","AspectRatio","FeatureTemplateTen","FeatureTemplateElevent","activeIndex","setActiveIndex","useState","isMobileDevice","useIsMobile","Accordion","val","idx","AccordionItem","AccordionTrigger","AccordionContent","Fragment","jsx","renderTemplate","template","dataHeading","dataFeatures","dataButtons","dataBanner","FeatureTemplateOne","FeatureTemplateTwo","FeatureTemplateThree","FeatureTemplateFour","FeatureTemplateFive","FeatureTemplateSix","FeatureTemplateSeven","FeatureTemplateEight","FeatureTemplateNine","FeatureTemplateTen","FeatureTemplateElevent","FeatureSectionContent","FeatureSection","background","className","idSection","SectionBlock","StarIcon","parse","_","useEffect","useState","animate","motion","useMotionValue","useMeasure","jsx","jsxs","InfiniteSlider","children","gap","speed","speedOnHover","direction","reverse","className","classNameMotion","currentSpeed","setCurrentSpeed","useState","ref","width","height","useMeasure","translation","useMotionValue","isTransitioning","setIsTransitioning","key","setKey","useEffect","controls","contentSize","from","to","duration","transitionDuration","animate","prevKey","hoverProps","cn","motion","randomColors","getInitials","name","parts","getColorForIndex","index","colors","Fragment","jsx","jsxs","TestimonialAvatar","avatar","name","index","_","initials","getInitials","bgColor","getColorForIndex","randomColors","cn","TestimonialItem","testimonial","className","parse","idx","StarIcon","TestimonialTemplateOne","dataHeading","dataTestimonials","dataButtons","testimonialsLength","isRunAnimation","HeadingBlock","InfiniteSlider","ButtonsBlock","StarIcon","parse","Fragment","jsx","jsxs","QuoteIcon","className","TestimonialItem","testimonial","cn","AspectRatio","parse","_","idx","StarIcon","TestimonialTemplateThree","dataHeading","dataTestimonials","dataButtons","HeadingBlock","Carousel","CarouselContent","index","CarouselItem","CarouselDots","ButtonsBlock","StarIcon","parse","_","Fragment","jsx","jsxs","TestimonialAvatar","avatar","name","index","_","initials","getInitials","bgColor","getColorForIndex","randomColors","cn","TestimonialItem","testimonial","className","parse","idx","StarIcon","TestimonialTemplateTwo","dataHeading","dataTestimonials","dataButtons","testimonialsLength","isRunAnimation","sliderConfigs","renderSliders","configs","config","colIdx","InfiniteSlider","HeadingBlock","MediaContextProvider","Media","ButtonsBlock","Fragment","jsx","renderTemplate","template","dataHeading","dataTestimonials","dataButtons","TestimonialTemplateOne","TestimonialTemplateTwo","TestimonialTemplateThree","TestimonialSectionContent","TestimonialSection","background","className","idSection","SectionBlock","cn","parse","Fragment","jsx","jsxs","FAQTemplateOne","dataFAQ","dataHeading","dataButtons","renderAccordion","Accordion","faqContent","index","AccordionItem","AccordionTrigger","AccordionContent","parse","HeadingBlock","cn","ButtonsBlock","FAQTemplateTwo","dataHorizontalScroll","showGradientOverlay","gradientOverlayColor","className","Tabs","HorizontalScroll","HorizontalContent","TabsList","faq","TabsTrigger","HorizontalPrevious","HorizontalNext","TabsContent","Fragment","jsx","renderTemplate","template","dataFAQ","dataHeading","dataButtons","dataHorizontalScroll","FAQTemplateOne","FAQTemplateTwo","FAQSectionContent","FAQSection","className","background","idSection","SectionBlock","React","memo","ArrowDownIcon","parse","Fragment","jsx","jsxs","NewsSectionItem","news","handleOnClickcate","e","url","TextButton","NewsSectionTemplateOne","memo","dataHeading","dataHorizontalScroll","dataNews","onClickModal","onClickLoadMore","showGradientOverlay","gradientOverlayColor","className","handleOnClickItem","id","renderGridNews","newsGroup","index","cn","newsItem","ActionButton","parse","SpinerIcon_default","ArrowDownIcon","React","HeadingBlock","Tabs","HorizontalScroll","HorizontalContent","TabsList","TabsTrigger","HorizontalPrevious","HorizontalNext","TabsContent","Fragment","jsx","renderTemplate","template","dataNews","dataHeading","dataHorizontalScroll","onClickModal","onClickLoadMore","NewsSectionTemplateOne","NewsSectionContent","NewsSection","className","background","SectionBlock","cn","Fragment","jsx","jsxs","CTATemplateOne","dataHeading","dataCTA","dataButtons","HeadingBlock","ButtonsBlock","cn","CTATemplateTwo","dataMedia","AspectRatio","renderTemplate","template","CTASectionContent","CTASection","background","className","idSection","SectionBlock","React","parse","jsx","jsxs","MetricItem","metric","metricTitle","metricValue","metricDescription","parse","MetricsSectionTemplateOne","dataMetrics","dataButtons","dataHeading","React","HeadingBlock","cn","index","ButtonsBlock","React","parse","jsx","jsxs","MetricItem","metric","metricTitle","metricValue","metricDescription","parse","MetricsSectionTemplateTwo","dataMetrics","dataButtons","dataHeading","React","HeadingBlock","cn","index","ButtonsBlock","Fragment","jsx","renderTemplate","dataHeading","dataMetrics","template","dataButtons","MetricsSectionTemplateOne","MetricsSectionTemplateTwo","MetricsSectionContent","MetricsSection","background","className","SectionBlock","cn","forwardRef","jsx","jsxs","PaymentInvoice","className","title","children","ref","useCallback","Fragment","jsx","jsxs","SkeletonItem","Skeleton","SkeletonPaymentMethod","_","index","PaymentSkeleton_default","Fragment","jsx","jsxs","PaymentMethodItem","paymentMethod","ChoiceboxGroupItem","PaymentMethods","title","paymentMethods","isLoading","onSelectPaymentMethod","defaultPaymentMethod","handleMethodSelect","useCallback","value","PaymentSkeleton_default","ChoiceboxGroup","method","forwardRef","jsx","PaymentContent","forwardRef","children","className","ref","cn","Payment","props","forwardRef","jsx","jsxs","PaymentResultFooter","forwardRef","className","children","ref","cn","forwardRef","jsx","PaymentResultContent","forwardRef","className","children","ref","cn","forwardRef","CheckBadgeIcon","XCircleIcon","jsx","jsxs","PaymentResultSuccess","iconPaymentResult","message","title","Callout","CheckBadgeIcon","PaymentResultFailed","XCircleIcon","PaymentResultPending","PaymentResultHeader","status","jsx","jsxs","PaymentResult","forwardRef","className","status","message","title","iconPaymentResult","children","ref","cn","PaymentResultHeader","forwardRef","useEffect","jsx","jsxs","TopbarTemplateOne","content","ActionButton","jsx","jsxs","renderTemplate","template","content","TopbarTemplateOne","Topbar","forwardRef","ref","useEffect","topbarElement","height","React","XIcon","DrawerPrimitive","jsx","jsxs","Drawer","shouldScaleBackground","props","DrawerPrimitive","DrawerTrigger","DrawerPortal","DrawerClose","DrawerOverlay","className","ref","cn","DrawerContent","children","hideCloseButton","XIcon","DrawerHeader","DrawerFooter","DrawerTitle","DrawerDescription","DrawerBody","React","OTPInput","OTPInputContext","Minus","jsx","jsxs","InputOTP","className","containerClassName","props","ref","OTPInput","cn","InputOTPGroup","InputOTPSlot","index","inputOTPContext","OTPInputContext","char","hasFakeCaret","isActive","InputOTPSeparator","Minus","useEffect","useRef","useState","toPng","React","LucideMessageCircleQuestion","QRCodeSVG","imageUrlToBase64","imageUrl","resolve","reject","img","canvas","ctx","dataURL","err","jsx","jsxs","PaymentGuide","isQrForAll","shortTitle","className","PaymentGuide_default","jsx","jsxs","PaymentGuideDialog","children","title","isQrForAll","shortTitle","open","onOpenChange","Dialog","DialogTrigger","DialogContent","DialogHeader","DialogTitle","DialogBody","PaymentGuide_default","PaymentGuideDialog_default","Fragment","jsx","jsxs","QRCodeScanInfo","img","children","isQrForAll","onQrLoaded","dateExpired","priceOrder","React","child","cn","QRCodeScan","qrImageBase64","QRCodeScanBox","qrImage","qrLink","logoQr","expired","loading","qrCodeRef","titleOrder","logoBase64","setLogoBase64","imageUrlToBase64","QRCodeSVG","Spinner","PaymentGuideDialog_default","LucideMessageCircleQuestion","QRCodeScanBox_default","Fragment","jsx","exclusionClasses","filterNode","node","classname","QRPayment","loading","isExpriedQR","qrLink","qrImage","logoQr","dateExpired","priceOrder","titleOrder","className","qrCodeRef","useRef","qrImageBase64","setQrImageBase64","useState","qrLoaded","setQrLoaded","useEffect","toPng","dataUrl","error","cn","QRCodeScanBox_default","Color","plugin","animations","blue","green","pink","purple","red","yellow","orange","gray","commonColors","blue","green","pink","purple","red","yellow","gray","orange","colors","commonColors","layout","DEFAULT_TRANSITION_DURATION","transition_default","custom_default","scrollbar_hide_default","utilities","custom_default","transition_default","scrollbar_hide_default","flatten","removeDefaultKeys","obj","newObj","key","flattenThemeObject","flatten","resolveConfig","prefix","resolved","flatColors","flattenThemeObject","colors","flatLayout","layout","cssSelector","colorName","colorValue","r","g","b","Color","colorVar","error","key","value","layoutVariablePrefix","nestedKey","nestedValue","nestedLayoutVariable","formattedValue","mobaseTW","plugin","addBase","addUtilities","addComponents","utilities","animations","Fragment","jsx","jsxs","SiteMeta"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/Accordion/Accordion.tsx","../../src/helpers/utils.ts","../../src/helpers/constants.ts","../../src/components/Button/Button.tsx","../../src/foundation/SpinerIcon.tsx","../../src/components/DialogQr/DialogQr.tsx","../../src/components/Dialog/Dialog.tsx","../../src/components/ActionButton/ActionButton.tsx","../../src/components/ActionButton/utils.ts","../../src/components/Breadcrumb/Breadcrumb.tsx","../../src/components/CommonBlocks/CommonBlocks.tsx","../../src/components/HeadingGroup/HeadingGroup.tsx","../../src/components/BlogSection/templates/BlockSectionsTemplateOne.tsx","../../src/components/HorizontalScroll/HorizontalScroll.tsx","../../src/components/IconButton/IconButton.tsx","../../src/components/Tabs/Tabs.tsx","../../src/components/TextButton/TextButton.tsx","../../src/components/BlogSection/templates/BlockSectionTemplateTwo.tsx","../../src/components/Carousel/Carousel.tsx","../../src/components/BlogSection/BlogSection.tsx","../../src/components/Calendar/Calendar.tsx","../../src/components/Checkbox/Checkbox.tsx","../../src/components/DatePicker/DatePicker.tsx","../../src/components/Popover/Popover.tsx","../../src/components/DateSelect/DateSelect.tsx","../../src/components/Select/Select.tsx","../../src/components/DateSelect/utils.tsx","../../src/components/AlertDialog/AlertDialog.tsx","../../src/components/GuideSection/GuideSectionTemplate.tsx","../../src/components/GuideSection/GuideUIDesktop.tsx","../../src/components/AspectRatio/AspectRatio.tsx","../../src/components/GuideSection/GuideUIMobile.tsx","../../src/components/GuideSection/GuideSection.tsx","../../src/components/Pagination/Pagination.tsx","../../src/components/TextArea/TextArea.tsx","../../src/components/Toast/useToast.tsx","../../src/components/Toast/Toast.tsx","../../src/components/Toast/toaster.tsx","../../src/components/Tooltip/Tooltip.tsx","../../src/components/TextInput/TextInput.tsx","../../src/components/Stepper/Stepper.tsx","../../src/components/NavigationMenu/NavigationMenu.tsx","../../src/components/Switch/Switch.tsx","../../src/components/RadioGroup/RadioGroup.tsx","../../src/components/HeaderNavigation/HeaderNavigation.tsx","../../src/components/HeaderNavigation/MobileMenu.tsx","../../src/helpers/animations.ts","../../src/components/HeaderNavigation/NavItemsMobile.tsx","../../src/components/HeaderNavigation/ListItemMobile.tsx","../../src/components/HeaderNavigation/ListItem.tsx","../../src/components/HeaderNavigation/NavItems.tsx","../../src/components/Footer/FooterContent.tsx","../../src/components/Footer/Footer.tsx","../../src/components/Card/Card.tsx","../../src/components/Command/Command.tsx","../../src/components/Combobox/Combobox.tsx","../../src/components/Callout/Callout.tsx","../../src/components/SearchBar/SearchBar.tsx","../../src/components/LightboxGallery/LightboxGallery.tsx","../../src/components/Choicebox/Choicebox.tsx","../../src/components/Badge/Badge.tsx","../../src/components/Progressbar/Progressbar.tsx","../../src/components/Skeleton/Skeleton.tsx","../../src/components/Spinner/Spinner.tsx","../../src/components/Slider/Slider.tsx","../../src/components/Comment/Comment.tsx","../../src/components/Comment/CommentHeader.tsx","../../src/components/Comment/CommentContent.tsx","../../src/components/Comment/CommentRating.tsx","../../src/components/ReadMoreLite/ReadMoreLite.tsx","../../src/components/Comment/CommentFooter.tsx","../../src/components/ProgressSteps/ProgressSteps.tsx","../../src/components/Form/Form.tsx","../../src/components/Label/Label.tsx","../../src/components/DropdownMenu/DropdownMenu.tsx","../../src/components/HowItWorksSection/HowItWorksSection.tsx","../../src/components/HeroSection/HeroSectionFeatures.tsx","../../src/components/HeroSection/HeroSectionMedia.tsx","../../src/components/HeroSection/HeroSectionStats.tsx","../../src/components/HeroSection/HeroSectionTemplate.tsx","../../src/components/HeroSection/HeroSection.tsx","../../src/components/SocialProofSection/templates/SocialProofTemplate1.tsx","../../src/components/SocialProofSection/templates/SocialProofTemplate2.tsx","../../src/components/SocialProofSection/templates/SocialProofTemplate3.tsx","../../src/components/SocialProofSection/templates/SocialProofTemplate4.tsx","../../src/components/core/infinite-slider.tsx","../../src/components/SocialProofSection/SocialProofSection.tsx","../../src/components/FeatureSection/FeatureTemlates.tsx","../../src/components/FeatureSection/FeatureSection.tsx","../../src/components/TestimonialSection/templates/TestimonialTemplateOne.tsx","../../src/components/TestimonialSection/utils.ts","../../src/components/TestimonialSection/templates/TestimonialTemplateThree.tsx","../../src/components/TestimonialSection/templates/TestimonialTemplateTwo.tsx","../../src/components/TestimonialSection/TestimonialSection.tsx","../../src/components/FAQSection/FAQTemplate.tsx","../../src/components/FAQSection/FAQSection.tsx","../../src/components/NewsSection/NewsSectionTemplate.tsx","../../src/components/NewsSection/NewsSection.tsx","../../src/components/CTASection/CTASection.tsx","../../src/components/MetricsSection/template/MetricsSectionTemplateOne.tsx","../../src/components/MetricsSection/template/MetricsSectionTemplateTwo.tsx","../../src/components/MetricsSection/MetricsSection.tsx","../../src/components/Payment/components/PaymentInvoice.tsx","../../src/components/Payment/components/PaymentsMethods.tsx","../../src/components/Payment/components/PaymentSkeleton.tsx","../../src/components/Payment/Payments.tsx","../../src/components/PaymentResult/components/PaymentResult/PaymentFooter.tsx","../../src/components/PaymentResult/components/PaymentResult/PaymentResultContent.tsx","../../src/components/PaymentResult/PaymentResult.tsx","../../src/components/PaymentResult/components/PaymentResult/PaymentResultHeader.tsx","../../src/components/Topbar/Topbar.tsx","../../src/components/Topbar/templates/TopbarTemplateOne.tsx","../../src/components/Drawer/Drawer.tsx","../../src/components/InputOTP/InputOTP.tsx","../../src/components/QRPayment/QRPayment.tsx","../../src/components/QRPayment/components/QRCodeScanBox.tsx","../../src/components/QRPayment/utils/imageToBase64.ts","../../src/components/QRPayment/components/PaymentGuide.tsx","../../src/components/QRPayment/components/PaymentGuideDialog.tsx","../../src/mobase-tw-plugin/plugin.ts","../../src/mobase-tw-plugin/animations/index.ts","../../src/mobase-tw-plugin/colors/blue.ts","../../src/mobase-tw-plugin/colors/green.ts","../../src/mobase-tw-plugin/colors/pink.ts","../../src/mobase-tw-plugin/colors/purple.ts","../../src/mobase-tw-plugin/colors/red.ts","../../src/mobase-tw-plugin/colors/yellow.ts","../../src/mobase-tw-plugin/colors/orange.ts","../../src/mobase-tw-plugin/colors/gray.ts","../../src/mobase-tw-plugin/colors/common.ts","../../src/mobase-tw-plugin/colors/index.ts","../../src/mobase-tw-plugin/layout.ts","../../src/mobase-tw-plugin/utilities/transition.ts","../../src/mobase-tw-plugin/utilities/custom.ts","../../src/mobase-tw-plugin/utilities/scrollbar-hide.ts","../../src/mobase-tw-plugin/utilities/index.ts","../../src/mobase-tw-plugin/utils/object.ts","../../src/site/meta.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { ChevronDownIcon } from \"@heroicons/react/20/solid\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport {\n AccordionContentProps,\n AccordionItemProps,\n AccordionMultipleProps,\n AccordionSingleProps,\n AccordionTriggerProps,\n} from \"@radix-ui/react-accordion\";\n\nimport { cn } from \"../../helpers/utils\";\n\nexport interface AccordionInterface extends AccordionItemProps {\n css?: string;\n}\nexport type AccordionRootInterface = AccordionSingleProps | AccordionMultipleProps;\n// const Accordion = AccordionPrimitive.Root;\n\nconst Accordion = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Root>,\n AccordionRootInterface\n>(({ className, ...props }, ref) => <AccordionPrimitive.Root ref={ref} {...props} />);\nAccordion.displayName = \"AccordionRoot\";\n\nexport interface AccordionItemInterface extends AccordionItemProps {\n css?: string;\n}\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n AccordionItemInterface\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(\"border-b border-gray-200\", className)}\n {...props}\n />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nexport interface AccordionTriggerInterface extends AccordionTriggerProps {\n css?: string;\n}\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n AccordionTriggerInterface\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex flex-1 items-center justify-between py-4 text-left font-medium text-gray-900 transition-all hover:text-pink-600 hover:underline [&[data-state=open]>svg]:rotate-180 [&[data-state=open]]:text-pink-600\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\" ml-1 h-5 w-5 shrink-0 transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\nexport interface AccordionContentInterface extends AccordionContentProps {\n css?: string;\n}\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n AccordionContentInterface\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\" data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-left transition-all \"\n {...props}\n >\n <div className={cn(\"pb-4 pt-0 text-gray-900 \", className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\n\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","import { type ClassValue } from \"clsx\";\nimport * as React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { NEXT_PUBLIC_REACT_APP_FRONT_END } from \"../helpers/constants\";\nimport { createMedia } from \"@artsy/fresnel\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge((inputs));\n}\n\ninterface AddQueryToLinkParams {\n link?: string;\n query?: Record<string, string>;\n}\n\nexport const addQueryToLink = ({\n link,\n query = {},\n}: AddQueryToLinkParams): string => {\n if (!link) return \"\";\n\n const url = new URL(link, NEXT_PUBLIC_REACT_APP_FRONT_END || \"\");\n\n const searchParams = new URLSearchParams(url.search);\n\n Object.entries(query).forEach(([key, value]) => {\n if (value) searchParams.append(key, value);\n });\n\n url.search = searchParams.toString();\n\n return url.toString();\n};\n\n/**\n * Checks if the given element is a React element.\n *\n * @param element - The element to check.\n * @returns Whether the element is a React element.\n */\nexport const isReactElement = (\n element: React.ReactNode\n): element is React.ReactElement => {\n return React.isValidElement(element);\n};\n\n\nconst MoMoAppMedia = createMedia({\n breakpoints: {\n xs: 0,\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n },\n})\n\n// Make styles for injection into the header of the page\nexport const mediaStyles = MoMoAppMedia.createMediaStyle()\n\nexport const { Media, MediaContextProvider } = MoMoAppMedia\n","export const FooterItemsDefault = {\n heading: \"Về chúng tôi\",\n lists: [\n {\n title: \"Giới thiệu\",\n url: \"/sieu-ung-dung-momo\",\n newTab: false,\n },\n {\n title: \"An toàn - Bảo mật\",\n url: \"/an-toan-bao-mat\",\n newTab: false,\n },\n {\n title: \"Điều khoản điều lệ\",\n url: \"/dieu-khoan-dieu-le\",\n newTab: false,\n },\n {\n title: \"Chính sách quyền riêng tư\",\n url: \"/chinh-sach-quyen-rieng-tu\",\n newTab: false,\n },\n {\n title: \"Điều khoản liên kết Google trên ứng dụng MoMo\",\n url: \"/google-cloud-policy\",\n newTab: false,\n },\n {\n title: \"Blog\",\n url: \"/blog\",\n newTab: false,\n },\n {\n title: \"Liên hệ\",\n url: \"/lienhe\",\n newTab: false,\n },\n {\n title: \"Hỏi đáp\",\n url: \"/hoi-dap\",\n newTab: false,\n },\n ],\n};\n\nexport const MoMoText = {\n Business: {\n Phome: \"1900636652\",\n Phome_Format: \"1900 636 652 (Phí 1.000đ/phút)\",\n Email: \"merchant.care@momo.vn\",\n },\n Support: {\n Hotline: \"1900545441\",\n Hotline_Format: \"1900 5454 41\",\n Phone_Ext_1: \"02873065555\",\n Phone_Ext_1_Format: \"028.7306.5555\",\n Phone_Ext_2: \"02899995555\",\n Phone_Ext_2_Format: \"028.9999.5555\",\n Email: \"hotro@momo.vn\",\n },\n};\n\nexport const NEXT_PUBLIC_REACT_APP_FRONT_END = \"https://www.momo.vn/\";\n\nexport const SUPPORT = {\n Address:\n \"Lầu 6, Toà nhà Phú Mỹ Hưng, số 8 Hoàng Văn Thái, khu phố 1, Phường Tân Phú, Quận 7, Thành phố Hồ Chí Minh\",\n};\nexport const LIST_LINK = [\n { Name: \"Giới thiệu\", Href: \"/sieu-ung-dung-momo\" },\n { Name: \"An toàn - Bảo mật\", Href: \"/an-toan-bao-mat\" },\n { Name: \"Điều khoản điều lệ\", Href: \"/dieu-khoan-dieu-le\" },\n {\n Name: \"Chính sách quyền riêng tư\",\n Href: \"/chinh-sach-quyen-rieng-tu\",\n },\n {\n Name: \"Điều khoản liên kết Google trên ứng dụng MoMo\",\n Href: \"/google-cloud-policy\",\n },\n { Name: \"Blog\", Href: \"/blog\" },\n { Name: \"Liên hệ\", Href: \"/lienhe\" },\n { Name: \"Hỏi đáp\", Href: \"/hoi-dap\" },\n];\n\nexport const SOCIAL_ITEMS = [\n {\n Name: \"Facebook\",\n Image:\n \"https://homepage.momocdn.net/styles/desktop/images/social/facebook.svg\",\n Link: \"https://www.facebook.com/vimomo\",\n },\n {\n Name: \"Linkedin\",\n Image:\n \"https://homepage.momocdn.net/styles/desktop/images/social/linkedin.svg\",\n Link: \"https://www.linkedin.com/company/momo-mservice/\",\n },\n {\n Name: \"Youtube\",\n Image:\n \"https://homepage.momocdn.net/styles/desktop/images/social/youtube.svg\",\n Link: \"https://www.youtube.com/channel/UCKHHW-qL2JoZqcSNm1jPlqw\",\n },\n];\n\nexport const APP_DOWNLOAD = [\n {\n Name: \"App Store\",\n Image:\n \"https://homepage.momocdn.net/img/momo-upload-api-210724113855-637627235353131497.jpg\",\n Link: \"https://itunes.apple.com/vn/app/id918751511?utm_source=website-momo&utm_medium=download&utm_campaign=momo-1dong\",\n },\n {\n Name: \"Google Play\",\n Image:\n \"https://homepage.momocdn.net/img/momo-upload-api-210724113959-637627235994410679.jpg\",\n Link: \"https://play.google.com/store/apps/details?id=com.mservice.momotransfer&utm_source=website-momo&utm_medium=download&utm_campaign=momo-1dong\",\n },\n];\n\nexport const SERVICES_DEFAULT = {\n heading: \"Dịch vụ nổi bật\",\n lists: [\n {\n title: \"Vé xem phim\",\n url: \"/cinema\",\n image:\n \"https://homepage.momocdn.net/fileuploads/svg/momo-file-230629144722.svg\",\n newTab: false,\n },\n {\n title: \"Bảo hiểm Ô tô\",\n url: \"/bao-hiem-o-to/vat-chat\",\n image:\n \"https://homepage.momocdn.net/fileuploads/svg/momo-file-230629144844.svg\",\n newTab: false,\n },\n {\n title: \"Vé máy bay\",\n url: \"/ve-may-bay\",\n image:\n \"https://homepage.momocdn.net/fileuploads/svg/momo-file-201210145350.svg\",\n newTab: false,\n },\n {\n title: \"Ví nhân ái\",\n url: \"/vi-nhan-ai\",\n image:\n \"https://homepage.momocdn.net/img/momo-upload-api-231214222240-638381893608141712.png\",\n newTab: false,\n },\n {\n title: \"Túi thần tài\",\n url: \"/tui-than-tai\",\n image:\n \"https://homepage.momocdn.net/fileuploads/svg/momo-file-210716153611.svg\",\n newTab: false,\n },\n {\n title: \"Ví trả sau\",\n url: \"/vi-tra-sau\",\n image:\n \"https://homepage.momocdn.net/img/momo-upload-api-230629144414-638236466540028217.png\",\n newTab: false,\n },\n\n {\n title: \"Vay nhanh\",\n url: \"/vay-nhanh\",\n image:\n \"https://homepage.momocdn.net/img/momo-upload-api-230418101312-638174095928506551.png\",\n newTab: false,\n },\n {\n title: \"Trả Góp Apple\",\n url: \"/tra-gop-san-pham-apple\",\n image:\n \"https://homepage.momocdn.net/img/momo-amazone-s3-api-240719154503-638570007030998565.png\",\n newTab: false,\n },\n ],\n};\n\nexport const SERVICES_PAGE = [\n {\n Name: \"Vé xem phim\",\n Href: \"/cinema\",\n Image:\n \"https://homepage.momocdn.net/fileuploads/svg/momo-file-230629144722.svg\",\n },\n {\n Name: \"Bảo hiểm Ô tô\",\n Href: \"/bao-hiem-o-to/vat-chat\",\n Image:\n \"https://homepage.momocdn.net/fileuploads/svg/momo-file-230629144844.svg\",\n },\n {\n Name: \"Vé máy bay\",\n Href: \"/ve-may-bay\",\n Image:\n \"https://homepage.momocdn.net/fileuploads/svg/momo-file-201210145350.svg\",\n },\n {\n Name: \"Khách sạn\",\n Href: \"/khach-san-theo-gio\",\n Image:\n \"https://homepage.momocdn.net/fileuploads/svg/momo-file-210315154805.svg\",\n },\n {\n Name: \"Ví nhân ái\",\n Href: \"/vi-nhan-ai\",\n Image:\n \"https://homepage.momocdn.net/img/momo-upload-api-231214222240-638381893608141712.png\",\n },\n {\n Name: \"Vay nhanh\",\n Href: \"/vay-nhanh\",\n Image:\n \"https://homepage.momocdn.net/img/momo-upload-api-230418101312-638174095928506551.png\",\n },\n];\n\nexport const MOMO_TEXT = {\n Business: {\n Phome: \"1900636652\",\n Phome_Format: \"1900 636 652 (Phí 1.000đ/phút)\",\n Email: \"merchant.care@momo.vn\",\n },\n Support: {\n Hotline: \"1900545441\",\n Hotline_Format: \"1900 5454 41\",\n Phone_Ext_1: \"02873065555\",\n Phone_Ext_1_Format: \"028.7306.5555\",\n Phone_Ext_2: \"02899995555\",\n Phone_Ext_2_Format: \"028.9999.5555\",\n Phone_Ext_3: \"02855555555\",\n Phone_Ext_3_Format: \"028.5555.5555\",\n Email: \"hotro@momo.vn\",\n },\n};\n\nexport const FROM_TYPE_FOOTER_MENU = \"nav_footer\";","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport SpinerIcon from \"../../foundation/SpinerIcon\";\nimport { cn } from \"../../helpers/utils\";\n\n// /dwd\nconst buttonVariants = cva(\n \"focus-visible:ring-ring inline-flex items-center justify-center whitespace-nowrap rounded-lg border border-transparent text-sm font-bold transition-colors focus-visible:outline-none focus-visible:ring-1 disabled:cursor-not-allowed\",\n {\n variants: {\n /**\n * Determines style variation of Button component.\n */\n variant: {\n primary: \"bg-pink-500 text-white hover:bg-pink-600 disabled:bg-pink-300\",\n secondary:\n \"border-gray-300 bg-white text-gray-900 hover:bg-gray-100 disabled:bg-white disabled:text-gray-400\",\n outline:\n \"border-pink-500 bg-white text-pink-500 hover:bg-pink-50 disabled:border-pink-300 disabled:bg-white disabled:text-pink-300\",\n tonal:\n \"bg-pink-100 text-pink-500 hover:bg-pink-200 disabled:bg-gray-200 disabled:text-gray-400\",\n danger: \"bg-red-500 text-white hover:bg-red-600 disabled:bg-red-300\",\n transparent:\n \"bg-transparent text-gray-900 hover:bg-gray-100 disabled:bg-transparent disabled:text-gray-400\",\n },\n /**\n * Determines size variation of Button component.\n */\n size: {\n default: \"h-10 px-4 text-sm\",\n sm: \"h-8 rounded-md px-3 text-sm\",\n lg: \"h-12 px-4 text-base\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"default\",\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n */\n asChild?: boolean;\n /**\n * Adds loading indicator icon and disables interactions\n */\n isLoading?: boolean;\n /**\n * Disabled interaction and applies disabled styles\n */\n isDisabled?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = \"primary\",\n size = \"default\",\n asChild = false,\n isLoading = false,\n isDisabled = false,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\";\n const buttonClassName = cn(buttonVariants({ variant, size, className }), {\n \"cursor-wait\": isLoading,\n });\n const loaderSize = size === \"default\" || size === \"sm\" ? \"w-4 h-4\" : \"w-5 h-5\";\n return (\n <>\n {asChild ? (\n <Comp\n className={buttonClassName}\n type=\"button\"\n disabled={isDisabled}\n ref={ref}\n {...props}\n >\n {props.children}\n </Comp>\n ) : (\n <Comp\n className={buttonClassName}\n type=\"button\"\n disabled={isDisabled}\n ref={ref}\n {...props}\n >\n {isLoading && <SpinerIcon className={`${loaderSize} animate-spin-loading mr-2`} />}\n {props.children}\n </Comp>\n )}\n </>\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import React from \"react\";\n\ntype SpinerIconProps = {\n className?: string;\n};\n\nconst SpinerIcon: React.FC<SpinerIconProps> = ({ className }) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n className={`${className}`}\n >\n <path\n opacity=\"0.9\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M15 9H19C19.55 9 20 9.45 20 10C20 10.55 19.55 11 19 11H15C14.45 11 14 10.55 14 10C14 9.45 14.45 9 15 9Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.2\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.8301 11.634L18.2942 13.634C18.7706 13.909 18.9353 14.5237 18.6603 15C18.3853 15.4763 17.7706 15.641 17.2942 15.366L13.8301 13.366C13.3538 13.091 13.1891 12.4763 13.4641 12C13.7391 11.5237 14.3538 11.359 14.8301 11.634Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.25\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13.366 13.8301L15.366 17.2942C15.641 17.7706 15.4763 18.3853 14.9999 18.6603C14.5236 18.9353 13.9089 18.7706 13.6339 18.2942L11.6339 14.8301C11.3589 14.3538 11.5236 13.7391 11.9999 13.4641C12.4763 13.1891 13.091 13.3538 13.366 13.8301Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.3\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M11 15V19C11 19.55 10.55 20 10 20C9.45 20 9 19.55 9 19V15C9 14.45 9.45 14 10 14C10.55 14 11 14.45 11 15Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.35\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.36597 14.8301L6.36597 18.2942C6.09097 18.7706 5.47626 18.9353 4.99994 18.6603C4.52363 18.3853 4.35892 17.7706 4.63392 17.2942L6.63392 13.8301C6.90892 13.3538 7.52363 13.1891 7.99994 13.4641C8.47626 13.7391 8.64097 14.3538 8.36597 14.8301Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.4\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.16986 13.366L2.70576 15.366C2.22945 15.641 1.61474 15.4763 1.33974 15C1.06474 14.5237 1.22945 13.909 1.70576 13.634L5.16986 11.634C5.64618 11.359 6.26089 11.5237 6.53589 12C6.81089 12.4763 6.64618 13.091 6.16986 13.366Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.45\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5 11H1C0.45 11 0 10.55 0 10C0 9.45 0.45 9 1 9H5C5.55 9 6 9.45 6 10C6 10.55 5.55 11 5 11Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.5\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.16986 8.36603L1.70576 6.36603C1.22945 6.09103 1.06474 5.47632 1.33974 5C1.61474 4.52369 2.22945 4.35898 2.70576 4.63398L6.16986 6.63398C6.64618 6.90898 6.81089 7.52369 6.53589 8C6.26089 8.47632 5.64618 8.64103 5.16986 8.36603Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.55\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.63403 6.16986L4.63403 2.70576C4.35903 2.22945 4.52374 1.61474 5.00006 1.33974C5.47637 1.06474 6.09108 1.22945 6.36608 1.70576L8.36608 5.16986C8.64108 5.64618 8.47637 6.26089 8.00006 6.53589C7.52374 6.81089 6.90903 6.64618 6.63403 6.16986Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.65\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9 5L9 1C9 0.45 9.45 0 10 0C10.55 0 11 0.45 11 1V5C11 5.55 10.55 6 10 6C9.45 6 9 5.55 9 5Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.75\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M11.634 5.16986L13.634 1.70576C13.909 1.22945 14.5237 1.06474 15.0001 1.33974C15.4764 1.61474 15.6411 2.22945 15.3661 2.70576L13.3661 6.16986C13.0911 6.64618 12.4764 6.81089 12.0001 6.53589C11.5237 6.26089 11.359 5.64618 11.634 5.16986Z\"\n fill=\"currentColor\"\n />\n <path\n opacity=\"0.85\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13.8301 6.63397L17.2942 4.63397C17.7706 4.35897 18.3853 4.52368 18.6603 5C18.9353 5.47631 18.7706 6.09102 18.2942 6.36602L14.8301 8.36602C14.3538 8.64102 13.7391 8.47631 13.4641 8C13.1891 7.52368 13.3538 6.90897 13.8301 6.63397Z\"\n fill=\"currentColor\"\n />\n </svg>\n\n );\n};\n\nexport default SpinerIcon;\n","import { type DialogProps } from \"@radix-ui/react-dialog\";\nimport { QRCodeSVG } from \"qrcode.react\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { Dialog, DialogBody, DialogContent } from \"../Dialog\";\n\n/**\n * Props for the DialogQr component.\n */\nexport interface DialogQrProps extends DialogProps {\n /**\n * The title of the dialog QR.\n */\n title?: string;\n\n /**\n * The short title of the step 3 in dialog QR.\n */\n shortTitle?: string;\n\n /**\n * The image URL for the QR code.\n */\n qrImage?: string;\n\n /**\n * The link associated with the QR code.\n */\n qrLink?: string;\n\n /**\n * The logo image URL for the QR code.\n */\n logoQr?: string;\n\n /**\n * Indicates whether the QR code is all in one.\n */\n isQrForAll?: boolean;\n className?: string;\n}\n\nconst QRCodeScan = ({ img = \"\", children, isQrForAll }) => {\n return (\n <>\n <div className=\"qrcode__scan__container\">\n <div className=\"qrcode__scan\">\n <div className=\"qrcode__gradient\">\n <img\n alt=\"step 1\"\n className=\"img-fluid\"\n src=\"https://homepage.momocdn.net/jk/momo2020/img/qrcode/qrcode-gradient.png\"\n />\n </div>\n <div className=\"qrcode__border\">\n <img\n alt=\"step 2\"\n className=\"img-fluid\"\n src=\"https://homepage.momocdn.net/jk/momo2020/img/qrcode/border-qrcode.svg\"\n />\n </div>\n\n <div className=\"p-4 qrcode__image\">\n {img ? (\n <img alt=\"step 3\" className=\"mx-auto img-fluid d-block\" src={img} loading=\"lazy\" />\n ) : (\n children\n )}\n </div>\n </div>\n </div>\n <div className=\"mt-4 text-sm text-white\">\n {isQrForAll ? (\n <>\n <img\n src=\"https://homepage.momocdn.net/img/momo-upload-api-231211171009-638379114093056419.png\"\n width={255}\n height={32}\n className=\"mx-auto\"\n alt=\"QR all\"\n />\n\n <div className=\"mt-3\">Nhận tiền từ mọi Ví Điện Tử và Ngân Hàng</div>\n </>\n ) : (\n <>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"inline mr-1 w-6 h-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z\"\n />\n </svg>\n Sử dụng App MoMo hoặc\n <br />\n ứng dụng Camera hỗ trợ QR code để quét mã.\n </>\n )}\n </div>\n <style>\n {`\n .qrcode__scan__container {\n padding: 15px;\n background-color: white;\n width: 280px;\n height: 280px;\n border-radius: 20px;\n border-radius: 15px;\n margin: 0 auto;\n }\n \n .qrcode__image {\n width: 100%;\n }\n \n .qrcode__image img {\n width: 100%;\n }\n \n .qrcode__scan {\n width: 245px;\n height: 245px;\n margin: 0 auto;\n overflow: hidden;\n background-color: white;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n \n .qrcode__border {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n z-index: 5;\n opacity: 0.9;\n pointer-events: none;\n }\n \n .qrcode__gradient {\n position: absolute;\n opacity: 0.6;\n width: 98%;\n height: 98%;\n top: 1%;\n left: 1%;\n z-index: 6;\n // pointer-events: none;\n transform: translate3d(0, -110%, 0);\n animation: QRCodeScan 3s infinite cubic-bezier(0.45, 0.03, 0.81, 0.63);\n \n backface-visibility: hidden;\n }\n \n @keyframes QRCodeScan {\n 0% {\n transform: translate3d(0, -110%, 0);\n }\n \n 90% {\n transform: translate3d(0, 30%, 0);\n }\n 100% {\n transform: translate3d(0, 30%, 0);\n }\n }\n `}\n </style>\n </>\n );\n};\n\nexport const DialogQr = ({\n className,\n children,\n title,\n shortTitle,\n qrImage,\n qrLink,\n logoQr,\n isQrForAll = false,\n ...props\n}: DialogQrProps) => {\n return (\n <Dialog {...props}>\n <DialogContent\n className={cn(\n \"h-auto max-h-screen overflow-hidden border-0 md:max-h-screen md:max-w-2xl lg:max-w-3xl [&>button>svg]:text-white\",\n className\n )}\n size=\"xl\"\n positionRightCloseBtn\n >\n <DialogBody className=\"p-0\">\n <div className=\"flex flex-row flex-wrap\">\n <div className=\"hidden flex-none w-full sm:block md:w-5/12\">\n {children || (\n <div className=\"grid grid-cols-1 gap-y-6 px-5 py-8 text-sm\">\n <div className=\"flex flex-nowrap items-center\">\n <div className=\"flex-none\">\n <img\n className=\"w-20\"\n loading=\"lazy\"\n src=\"https://homepage.momocdn.net/images/s/momo-upload-api-200917091602-637359309621891617.png\"\n alt=\"Step 1\"\n />\n </div>\n <div className=\"flex-1 pl-4\">\n <div className=\"font-semibold text-gray-800 step\">Bước 1 :</div>\n <div className=\"mt-1 text-gray-500\">\n {isQrForAll\n ? \"Mở app MoMo hoặc ứng dụng ngân hàng/ví điện tử chấp nhận mã vạch từ QR Đa Năng\"\n : \"Mở ứng dụng camera mặc định hoặc ứng dụng hỗ trợ QR code của bạn\"}\n </div>\n </div>\n </div>\n <div className=\"flex flex-nowrap items-center\">\n <div className=\"flex-none\">\n <img\n className=\"w-20\"\n loading=\"lazy\"\n src=\"https://homepage.momocdn.net/images/s/momo-upload-api-200917091443-637359308837905996.png\"\n alt=\"Step 2\"\n />\n </div>\n <div className=\"flex-1 pl-4\">\n <div className=\"font-semibold text-gray-800 step\">Bước 2 :</div>\n <div className=\"mt-1 text-gray-500\">Quét mã QR Code theo hình bên phải</div>\n </div>\n </div>\n <div className=\"flex flex-nowrap items-center\">\n <div className=\"flex-none\">\n <img\n className=\"w-20\"\n loading=\"lazy\"\n src=\"https://homepage.momocdn.net/images/s/momo-upload-api-200917090146-637359301062519803.png\"\n alt=\"Step 3\"\n />\n </div>\n <div className=\"flex-1 pl-4\">\n <div className=\"font-semibold text-gray-800 step\">Bước 3 :</div>\n <div className=\"mt-1 text-gray-500\">\n Bấm vào thông báo hiển thị để tải ứng dụng hoặc{\" \"}\n {shortTitle || \"Truy cập ngay\"}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n <div\n className=\"flex justify-center items-center w-full h-auto md:w-7/12\"\n style={{\n background:\n \"url(https://homepage.momocdn.net/jk/momo2020/img/intro/qrcode-pattern.png) 10px 10px no-repeat,linear-gradient(to top,#c1177c,#e11b90)\",\n }}\n >\n <div className=\"px-5 py-10 text-center\">\n {title && <h4 className=\"mb-5 text-base font-semibold text-white\">{title}</h4>}\n <div className=\"relative\">\n {isQrForAll && (\n <div className=\"absolute -top-2 left-1/2 z-[5] -translate-x-1/2\">\n <img\n src=\"https://homepage.momocdn.net/fileuploads/svg/momo-file-231211170324.svg\"\n alt=\"Title QR all\"\n />\n </div>\n )}\n <QRCodeScan img={qrImage} isQrForAll={isQrForAll}>\n {qrLink && (\n <QRCodeSVG\n value={qrLink}\n size={215}\n imageSettings={{\n src: `${\n logoQr || \"https://homepage.momocdn.net/pwa/images/logoMomox50.png\"\n }`,\n // x: null,\n // y: null,\n height: 50,\n width: 50,\n excavate: true,\n }}\n level=\"H\"\n />\n )}\n </QRCodeScan>\n </div>\n </div>\n </div>\n </div>\n </DialogBody>\n </DialogContent>\n </Dialog>\n );\n};\n","import * as React from \"react\";\nimport { XMarkIcon } from \"@heroicons/react/16/solid\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/60 !duration-300\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n /**\n * Determines whether the close button should be positioned on the right side.\n */\n positionRightCloseBtn?: boolean;\n /**\n * Size of the modal window\n */\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n /**\n * Position of the modal window\n */\n position?: \"center\" | \"left\" | \"right\" | \"bottom\";\n /**\n * Determines whether the close button hide or not\n */\n hideCloseBtn?: boolean;\n /**\n * Height of the modal window\n */\n height?: \"auto\" | \"small\" | \"large\" | \"full\";\n /**\n * Open full screen dialog in mobile\n */\n isFull?: boolean;\n }\n>(\n (\n {\n className,\n positionRightCloseBtn,\n hideCloseBtn = false,\n size = \"md\",\n position = \"center\",\n height = \"auto\",\n isFull = false,\n children,\n ...props\n },\n ref\n ) => {\n const classNames = {\n base: \"fixed z-50 flex bg-white shadow-lg sm:rounded-xl bg-white text-gray-900 w-full max-w-[calc(-64px_+_100vw)] max-h-[calc(-64px_+_100vh)] flex-col\",\n center:\n \"left-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-xl\",\n bottom:\n \"!duration-300 bottom-0 sm:bottom-1/2 left-1/2 rounded-t-xl sm:translate-y-1/2 data-[state=closed]:animate-out -translate-x-1/2 data-[state=open]:animate-in data-[state=open]:slide-in-from-left-1/2 ease-in-out data-[state=open]:slide-in-from-bottom-2/3 data-[state=closed]:slide-out-to-bottom-2/3 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 max-w-full max-h-[calc(100%_-_calc(32px_+_env(safe-area-inset-top,0)))] sm:max-h-[calc(-64px_+_100vh)] sm:max-w-[calc(-64px_+_100vw)]\",\n left: \"!duration-300 max-h-screen !h-full rounded-r-xl sm:rounded-l-none top-0 data-[state=open]:animate-in data-[state=open]:slide-in-from-left data-[state=closed]:animate-out data-[state=closed]:slide-out-to-left ease-in-out\",\n right:\n \"!duration-300 !h-full rounded-l-xl sm:rounded-r-none max-h-screen top-0 right-0 data-[state=open]:animate-in data-[state=open]:slide-in-from-right data-[state=closed]:animate-out data-[state=closed]:slide-out-to-right ease-in-out\",\n };\n\n const sizeClassNames = {\n sm: \"w-80 sm:w-80\",\n md: \"w-[512px] sm:w-[512px]\",\n lg: \"w-[672px] sm:w-[672px]\",\n xl: \"w-[1024px] sm:w-[1024px]\",\n };\n\n const heightClassNames = {\n auto: \"h-auto sm:h-auto\",\n small: \"h-[480px] sm:h-[480px]\",\n large: \"h-[640px] sm:h-[640px]\",\n full: \"h-full\",\n };\n\n const classNamesDialogContent = [\n classNames.base,\n classNames[position],\n sizeClassNames[size],\n heightClassNames[height],\n isFull &&\n \"h-full max-h-screen max-w-full w-full rounded-none sm:rounded-xl sm:max-h-[calc(-64px_+_100vh)]\",\n className,\n ];\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content ref={ref} className={cn(...classNamesDialogContent)} {...props}>\n {children}\n {!hideCloseBtn && (\n <DialogPrimitive.Close\n className={cn(\n \"absolute left-3 top-2 flex h-8 w-8 items-center justify-center rounded-full text-gray-900 before:absolute before:inset-0 before:left-0 before:top-0 before:z-[-1] before:select-none before:rounded-full before:bg-gray-200 before:opacity-0 before:transition-opacity before:content-[''] hover:before:opacity-100 focus:outline-none focus:ring-0 disabled:pointer-events-none data-[state=open]:bg-gray-100 data-[state=open]:text-gray-700 md:left-auto md:right-4 md:top-3\",\n positionRightCloseBtn && \"left-auto right-3 md:right-4\"\n )}\n title=\"Đóng\"\n >\n <XMarkIcon className=\"h-5 w-5 text-gray-700\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n }\n);\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"dialog-header flex h-12 w-full shrink-0 items-center justify-center border-b border-gray-200 px-10 py-2 md:h-14 md:px-12 md:py-3\",\n className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogBody = ({\n className,\n isCondensed = false,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & {\n /**\n * Determines whether the dialog body should be condensed.\n */\n isCondensed?: boolean;\n}) => (\n <div\n className={cn(\"dialog-body flex-1 overflow-y-auto p-6\", isCondensed && \"p-5\", className)}\n {...props}\n />\n);\nDialogBody.displayName = \"DialogBody\";\n\nconst DialogFooter = ({\n className,\n isDivider = true,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & { isDivider?: boolean }) => (\n <div\n className={cn(\n \"dialog-footer flex shrink-0 justify-center space-x-2 px-6 pb-4 sm:flex-row sm:justify-end [&>*]:basis-1/2 [&>*]:sm:basis-auto\",\n isDivider && \"border-t border-gray-200 py-3\",\n className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\"line-clamp-1 max-w-full text-base font-semibold\", className)}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-gray-700\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogBody,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","import { cn } from \"../../helpers/utils\";\nimport { Button } from \"../Button\";\nimport { DialogQr } from \"../DialogQr\";\nimport { useState } from \"react\";\nimport { ActionButtonProps, useIsMobile } from \"./utils\";\n\nconst ActionButton = ({\n action,\n newTab,\n offset,\n dialogQrProps,\n className,\n children,\n ...props\n}: ActionButtonProps) => {\n const [isOpenQR, setOpenQR] = useState(false);\n const isMobileDevice = useIsMobile();\n\n const hasQrButton = Boolean(dialogQrProps?.qrLink);\n\n const handleGetLink = () => {\n const basicLink = hasQrButton ? dialogQrProps?.qrLink : action;\n return typeof basicLink === \"string\" ? basicLink.trim() : \"\";\n };\n\n const handleAction = () => {\n const modifiedLink = handleGetLink();\n\n if (!modifiedLink && typeof action !== \"function\") return;\n\n if (typeof action === \"function\") {\n action();\n } else {\n window.open(modifiedLink, newTab ? \"_blank\" : \"_self\");\n }\n };\n\n const scrollToElement = (selector: string, offset: number = 0) => {\n const element = document.querySelector(selector);\n if (!element) return;\n\n const elementPosition =\n element.getBoundingClientRect().top + window.scrollY;\n const offsetPosition = elementPosition - offset;\n\n window.scrollTo({\n top: offsetPosition,\n behavior: \"smooth\",\n });\n };\n\n const handleScrollOrAction = () => {\n if (typeof action === \"string\" && action.startsWith(\"#\")) {\n scrollToElement(action, offset);\n } else {\n handleAction();\n }\n };\n\n const renderButtonWithDialogQr = () => (\n <>\n <Button\n {...props}\n className={className}\n onClick={() => setOpenQR(true)}\n data-name=\"button-action-with-qr\"\n >\n {children}\n </Button>\n <DialogQr\n {...dialogQrProps}\n open={isOpenQR}\n onOpenChange={() => setOpenQR(false)}\n qrLink={dialogQrProps?.qrLink || \"\"}\n />\n </>\n );\n\n const renderButtonWithoutQr = () => (\n <Button\n {...props}\n onClick={handleScrollOrAction}\n className={cn(\"cursor-pointer\", className)}\n data-name=\"button-action-without-qr\"\n rel=\"noreferrer\"\n >\n {children}\n </Button>\n );\n\n return hasQrButton ? (\n isMobileDevice ? (\n dialogQrProps?.isQrForAll ? (\n renderButtonWithDialogQr()\n ) : (\n <Button\n {...props}\n className={className}\n onClick={handleAction}\n data-name=\"button-action-with-qr\"\n >\n {children}\n </Button>\n )\n ) : (\n renderButtonWithDialogQr()\n )\n ) : (\n renderButtonWithoutQr()\n );\n};\n\nexport { ActionButton };\n","import { useEffect, useLayoutEffect, useState, ReactNode } from \"react\";\nimport { ButtonProps } from \"../Button\";\nimport { DialogQrProps } from \"../DialogQr\";\nimport UAParser from \"ua-parser-js\";\n\nexport interface ActionButtonProps extends ButtonProps {\n /**\n * Action to be performed when the button is clicked.\n */\n action?: string | (() => void) | undefined;\n /**\n * Opens a new tab when href link.\n */\n newTab?: boolean;\n /**\n * Offset top when use button scroll to element.\n */\n offset?: number;\n /**\n * Props to pass to the DialogQr component. If this prop is provided, the button will open a dialog with a QR code. qrLink in DialogQrProps is required.\n */\n dialogQrProps?: Partial<DialogQrProps>;\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * The content for button.\n */\n children?: ReactNode;\n}\nconst checkIsMobileAgent = () => UAParser().device.type === \"mobile\";\n\nconst useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\n export const useIsMobile = () => {\n const [isMobile, setIsMobile] = useState<boolean | undefined>(false);\n useIsomorphicLayoutEffect(() => {\n setIsMobile(checkIsMobileAgent());\n }, []);\n\n return isMobile;\n};","import * as React from \"react\"\nimport { ChevronRightIcon, DotsHorizontalIcon } from \"@radix-ui/react-icons\"\nimport { Slot } from \"@radix-ui/react-slot\"\n \nimport { cn } from \"../../helpers/utils\";\n \nconst Breadcrumb = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"nav\"> & {\n separator?: React.ReactNode\n }\n>(({ className,...props }, ref) => <nav ref={ref} aria-label=\"breadcrumb\" className={cn(\"\", className)} {...props} />)\nBreadcrumb.displayName = \"Breadcrumb\"\n \nconst BreadcrumbList = React.forwardRef<\n HTMLOListElement,\n React.ComponentPropsWithoutRef<\"ol\">\n>(({ className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(\n \"flex items-center gap-2 break-words text-sm overflow-x-auto snap-mandatory snap-x [&::-webkit-scrollbar]:hidden\",\n className\n )}\n {...props}\n />\n))\nBreadcrumbList.displayName = \"BreadcrumbList\"\n \nconst BreadcrumbItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentPropsWithoutRef<\"li\">\n>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n className={cn(\"shrink-0 text-gray-900 hover:text-pink-500\", className)}\n {...props}\n />\n))\nBreadcrumbItem.displayName = \"BreadcrumbItem\"\n \nconst BreadcrumbLink = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<\"a\"> & {\n asChild?: boolean\n }\n>(({ asChild, className, ...props }, ref) => {\n const Comp = asChild ? Slot : \"a\"\n \n return (\n <Comp\n ref={ref}\n className={cn(\"transition-colors hover:text-foreground\", className)}\n {...props}\n />\n )\n})\nBreadcrumbLink.displayName = \"BreadcrumbLink\"\n \nconst BreadcrumbPage = React.forwardRef<\n HTMLSpanElement,\n React.ComponentPropsWithoutRef<\"span\">\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn(\"text-sm text-gray-500\", className)}\n {...props}\n />\n))\nBreadcrumbPage.displayName = \"BreadcrumbPage\"\n \nconst BreadcrumbSeparator = ({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) => (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"text-gray-900\", className)}\n {...props}\n >\n {children ?? <ChevronRightIcon className=\"w-2 h-2\" />}\n </li>\n)\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\"\n \nconst BreadcrumbEllipsis = ({\n className,\n ...props\n}: React.ComponentProps<\"span\">) => (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex h-5 w-5 items-center justify-center\", className)}\n {...props}\n >\n <DotsHorizontalIcon className=\"w-4 h-4 text-gray-900\" />\n <span className=\"sr-only\">More</span>\n </span>\n)\nBreadcrumbEllipsis.displayName = \"BreadcrumbElipssis\"\n \nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}","import parse from \"html-react-parser\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { ActionButton } from \"../ActionButton/ActionButton\";\nimport { Heading, HeadingGroup, HeadingSub, HeadingTagline } from \"../HeadingGroup/HeadingGroup\";\nimport { ButtonsBlockProps, dataButton, HeadingBlockProps, SectionBlockProps } from \"./utils\";\n\nconst SectionBlock = ({ idSection, className, background, children }: SectionBlockProps) => {\n return (\n <section\n id={idSection}\n className={cn(\"block-section py-8 md:py-10 lg:py-14\", className)}\n style={{ background: background }}\n >\n <div className=\"wrapper relative\">{children}</div>\n </section>\n );\n};\n\nconst HeadingBlock = ({\n align = \"center\",\n tagline,\n title,\n description,\n tagHeading = \"h2\",\n colorScheme = \"pink\",\n sizeHeading = \"small\",\n className,\n}: HeadingBlockProps) => {\n const taglineColor =\n colorScheme === \"black\" ? \"pink\" : colorScheme === \"pink\" ? \"regular\" : \"white\";\n const headingColor =\n colorScheme === \"pink\" ? \"pink\" : colorScheme === \"white\" ? \"white\" : \"regular\";\n const headingSubColor = colorScheme === \"white\" ? \"white\" : \"regular\";\n\n if (!title && !description && !tagline) return null;\n\n return (\n <HeadingGroup align={align} className={className}>\n {tagline && <HeadingTagline color={taglineColor}>{tagline}</HeadingTagline>}\n {title && (\n <Heading tagHeading={tagHeading} color={headingColor} size={sizeHeading}>\n {parse(title)}\n </Heading>\n )}\n {description && (\n <HeadingSub\n color={headingSubColor}\n size=\"large\"\n marginTop={sizeHeading === \"large\" ? \"spacing2Xl\" : \"spacingX\"}\n >\n {parse(description)}\n </HeadingSub>\n )}\n </HeadingGroup>\n );\n};\n\nconst ButtonsBlock = ({ align, isFullInMobile = false, buttons, className }: ButtonsBlockProps) => {\n if (buttons?.length === 0) return null;\n return (\n <div\n className={cn(\n \"buttons-block mt-8 flex w-full gap-4 md:mt-10\",\n align === \"center\" && \"justify-center\",\n align === \"right\" && \"justify-end\",\n isFullInMobile && \"flex-wrap md:flex-nowrap\",\n className\n )}\n >\n {buttons?.slice(0, 2).map((button: dataButton, index: number) => {\n if (!button) return null;\n const { btnName, ...rest } = button;\n return (\n <ActionButton\n key={index}\n {...rest}\n className={cn(isFullInMobile && \"w-full md:w-auto\", button?.className)}\n >\n {parse(btnName)}\n </ActionButton>\n );\n })}\n </div>\n );\n};\n\nexport { SectionBlock, HeadingBlock, ButtonsBlock };\n","import React, { createContext, useContext } from \"react\";\n\nimport { cn } from \"../../helpers/utils\";\n\ninterface HeadingGroupProps {\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * Heading group alignment.\n */\n align?: \"left\" | \"center\" | \"right\";\n /**\n * The children of the HeadingGroup, which could include TagLine, Heading, Heading sub,..\n */\n children?: React.ReactNode;\n}\n\ntype HeadingGroupContextProps = {\n align?: HeadingGroupProps[\"align\"];\n};\n\nconst HeadingGroupContext = createContext<HeadingGroupContextProps>({\n align: \"center\",\n});\n\ninterface HeadingTaglineProps {\n /**\n * Tagline color.\n */\n color?: \"regular\" | \"pink\" | \"white\";\n /**\n * Tagline size.\n */\n size?: \"small\" | \"large\";\n /**\n * Tagline use truncate.\n */\n isTruncated?: boolean;\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * The children of the Tagline.\n */\n children?: React.ReactNode;\n}\n\ninterface HeadingProps {\n /**\n * Shorthand for changing the default rendered element into a semantically appropriate alternative.\n */\n tagHeading?: \"h1\" | \"h2\";\n /**\n * Heading color.\n */\n color?: \"regular\" | \"pink\" | \"white\";\n /**\n * Heading size.\n */\n size?: \"small\" | \"large\";\n /**\n * Heading use truncate.\n */\n isTruncated?: boolean;\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * The children of the Heading.\n */\n children?: React.ReactNode;\n}\n\ninterface HeadingSubProps {\n /**\n * Sub heading color.\n */\n color?: \"regular\" | \"white\";\n /**\n * Sub heading size.\n */\n size?: \"small\" | \"large\";\n /**\n * Sub heading margin top: none: 0px, spacingX: 8px, spacingM: 12px, spacingL: 16px, spacingXl: 20px, spacing2Xl: 24px\n */\n marginTop?: \"none\" | \"spacingX\" | \"spacingM\" | \"spacingL\" | \"spacingXl\" | \"spacing2Xl\";\n /**\n * Sub heading use truncate.\n */\n isTruncated?: boolean;\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * The children of the Heading sub.\n */\n children?: React.ReactNode;\n}\n\nconst HeadingTagline = ({\n color = \"pink\",\n size = \"small\",\n isTruncated = false,\n className,\n children,\n}: HeadingTaglineProps) => {\n const colorClasses = {\n regular: \"text-gray-900\",\n pink: \"text-pink-500\",\n white: \"text-white\",\n };\n const sizeClasses = {\n small: \"text-sm\",\n large: \"text-lg\",\n };\n return (\n <div\n className={cn(\n \"mb-1 font-semibold\",\n colorClasses[color],\n sizeClasses[size],\n isTruncated && \"truncate\",\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nconst Heading = ({\n tagHeading = \"h2\",\n size = \"small\",\n color = \"pink\",\n isTruncated = false,\n className,\n children,\n}: HeadingProps) => {\n const HeadingTag = tagHeading;\n const colorClasses = {\n regular: \"text-gray-900\",\n pink: \"text-pink-500\",\n white: \"text-white\",\n };\n const sizeClasses = {\n small: \"lg:text-3xl text-2xl\",\n large: \"lg:text-4xl md:text-3xl text-2xl\",\n };\n const { align } = useContext(HeadingGroupContext);\n return (\n <HeadingTag\n className={cn(\n \"max-w-4xl font-bold\",\n align === \"center\" ? \"mx-auto\" : align === \"right\" ? \"ml-auto\" : \"\",\n colorClasses[color],\n sizeClasses[size],\n isTruncated && \"truncate\",\n className\n )}\n >\n {children}\n </HeadingTag>\n );\n};\n\nconst HeadingSub = ({\n color = \"regular\",\n size = \"small\",\n marginTop = \"spacingX\",\n isTruncated = false,\n className,\n children,\n}: HeadingSubProps) => {\n const colorClasses = {\n regular: \"text-gray-500\",\n white: \"text-white/80\",\n };\n const sizeClasses = {\n small: \"text-base\",\n large: \"md:text-lg text-base\",\n };\n const marginTopClasses = {\n none: \"\",\n spacingX: \"mt-2\",\n spacingM: \"mt-3\",\n spacingL: \"mt-4\",\n spacingXl: \"mt-5\",\n spacing2Xl: \"mt-6\",\n };\n const { align } = useContext(HeadingGroupContext);\n return (\n <div\n className={cn(\n align === \"center\"\n ? \"mx-auto max-w-2xl\"\n : align === \"right\"\n ? \"ml-auto max-w-4xl\"\n : \"max-w-4xl\",\n colorClasses[color],\n sizeClasses[size],\n marginTopClasses[marginTop],\n isTruncated && \"truncate\",\n\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nconst HeadingGroup = ({ className, align = \"center\", children }: HeadingGroupProps) => {\n const alignClassnames = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n };\n return (\n <div className={cn(\"mb-5 md:mb-8\", alignClassnames[align], className)}>\n <HeadingGroupContext.Provider value={{ align }}>{children}</HeadingGroupContext.Provider>\n </div>\n );\n};\n\nexport { HeadingGroup, HeadingTagline, Heading, HeadingSub };\nexport type { HeadingGroupProps, HeadingTaglineProps, HeadingProps, HeadingSubProps };\n","import React, { memo } from \"react\";\nimport { ArrowDownIcon } from \"@heroicons/react/20/solid\";\nimport parse from \"html-react-parser\";\n\nimport SpinerIcon from \"../../../foundation/SpinerIcon\";\nimport { cn } from \"../../../helpers/utils\";\nimport { ActionButton } from \"../../ActionButton\";\nimport { HeadingBlock } from \"../../CommonBlocks/CommonBlocks\";\nimport {\n HorizontalContent,\n HorizontalNext,\n HorizontalPrevious,\n HorizontalScroll,\n} from \"../../HorizontalScroll\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../../Tabs\";\nimport { TextButton } from \"../../TextButton\";\nimport { BlogItemProps, BlogSectionProps, DataBlogProps } from \"../utils\";\n\nconst BlogSectionItem = ({ blog }: { blog: BlogItemProps }) => {\n const handleOnClickcate = (e: React.MouseEvent<HTMLButtonElement>, url: string) => {\n e?.preventDefault();\n e?.stopPropagation();\n window.open(url, \"_blank\");\n };\n\n return (\n <>\n <div className=\"flex-none pr-3 basis-1/2 md:basis-full md:pr-0\">\n <div className=\"relative block aspect-[16/9] w-full overflow-hidden rounded-md bg-gray-100\">\n <picture>\n <source media=\"(min-width: 640px)\" srcSet={blog?.thumbnailDesktop} />\n <img\n className=\"object-cover w-full h-full\"\n src={blog?.thumbnailMobile}\n alt={blog?.title}\n />\n </picture>\n </div>\n </div>\n\n <div className=\"overflow-hidden basis-1/2 md:mt-3 md:basis-full\">\n {blog?.category && blog?.categoryUrl && (\n <TextButton\n variant=\"default\"\n className=\"shink-0 mb-0.5 line-clamp-1 block justify-start whitespace-normal text-left text-xs md:hidden\"\n onClick={(e) => handleOnClickcate(e, blog?.categoryUrl || \"\")}\n >\n {blog?.category}\n </TextButton>\n )}\n <div className=\"text-sm font-medium text-gray-900 line-clamp-3 group-hover:text-pink-500 md:line-clamp-none md:text-base\">\n {blog?.title}\n </div>\n <div className=\"flex items-center mt-2 md:space-x-1\">\n {blog?.category && blog?.categoryUrl && (\n <>\n <TextButton\n variant=\"default\"\n className=\"justify-start hidden text-xs text-left whitespace-normal shink-0 md:line-clamp-1 md:block\"\n onClick={(e) => handleOnClickcate(e, blog?.categoryUrl || \"\")}\n >\n {blog?.category}\n </TextButton>\n {blog?.category && blog?.totalViews && (\n <span className=\"flex-none hidden leading-none md:block\">·</span>\n )}\n </>\n )}\n {blog?.totalViews && (\n <div className=\"flex-none text-xs text-gray-500\">{blog.totalViews}</div>\n )}\n </div>\n </div>\n </>\n );\n};\n\nexport const BlogSectionTemplateOne = memo(\n ({\n dataHeading,\n dataHorizontalScroll,\n dataBlog,\n onClickModal,\n onClickLoadMore,\n }: BlogSectionProps) => {\n const {\n showGradientOverlay = true,\n gradientOverlayColor,\n className,\n } = dataHorizontalScroll || {};\n\n const handleOnClickItem = (e: React.MouseEvent<HTMLDivElement>, id: number, url: string) => {\n e?.preventDefault();\n e?.stopPropagation();\n onClickModal ? onClickModal(id) : window.open(url, \"_blank\");\n };\n\n const renderGridBlog = (blogGroup: DataBlogProps, index: number) => (\n <div key={blogGroup?.title || index}>\n <div\n className={cn(\n \"-mx-3 flex flex-row flex-wrap gap-y-5\",\n blogGroup?.blogList?.length < 3 ? \"md:justify-center\" : \"\"\n )}\n >\n {blogGroup?.blogList?.map((blogItem: BlogItemProps, index: number) => (\n <div className=\"min-w-0 px-3 basis-full md:basis-1/2 lg:basis-1/3\" key={index}>\n <div\n onClick={(e) => handleOnClickItem(e, blogItem?.id, blogItem?.url)}\n key={blogItem?.id}\n className={cn(\n \"group flex cursor-pointer flex-row md:flex-col\",\n blogGroup?.classNameItem\n )}\n >\n <BlogSectionItem blog={blogItem} />\n </div>\n </div>\n ))}\n </div>\n {blogGroup?.isShowBtn && (\n <div className=\"flex items-center justify-center w-full mt-8\">\n <ActionButton\n action={onClickLoadMore ? () => onClickLoadMore?.(index) : blogGroup?.btnUrl}\n newTab={blogGroup?.isNewTab}\n variant=\"outline\"\n >\n {parse(blogGroup.btnName || \"Xem thêm\")}\n {blogGroup?.isLoading ? (\n <SpinerIcon className=\"w-5 h-5 ml-2 animate-spin-loading\" />\n ) : (\n onClickLoadMore &&\n !blogGroup?.btnUrl && (\n <ArrowDownIcon className=\"w-5 h-5 ml-2 -mb-1 animate-bounce\" />\n )\n )}\n </ActionButton>\n </div>\n )}\n </div>\n );\n\n return (\n <React.Fragment>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={cn(dataHeading?.className)}\n />\n )}\n {dataBlog?.length > 1 ? (\n <Tabs defaultValue={dataBlog[0]?.title}>\n <HorizontalScroll\n showGradientOverlay={showGradientOverlay}\n gradientOverlayColor={gradientOverlayColor}\n className={className}\n >\n <HorizontalContent className=\"mb-6 text-center\">\n <TabsList className=\"inline-flex items-center w-auto mx-auto mb-0 overflow-visible\">\n {dataBlog.map((blogGroup, index) => (\n <TabsTrigger key={blogGroup.title + index} value={blogGroup.title}>\n {blogGroup.title}\n </TabsTrigger>\n ))}\n </TabsList>\n </HorizontalContent>\n <HorizontalPrevious />\n <HorizontalNext />\n </HorizontalScroll>\n\n {dataBlog.map((blogGroup, index) => (\n <TabsContent key={blogGroup.title + index} value={blogGroup.title}>\n {renderGridBlog(blogGroup, index)}\n </TabsContent>\n ))}\n </Tabs>\n ) : (\n dataBlog?.length === 1 && dataBlog[0] && renderGridBlog(dataBlog[0], 0)\n )}\n </React.Fragment>\n );\n }\n);\n","import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { IconButton, IconButtonProps } from \"../IconButton\";\n\ninterface HorizontalScrollContextProps {\n scrollContainerRef: React.RefObject<HTMLDivElement>;\n showArrows: { left: boolean; right: boolean };\n scroll: (direction: \"left\" | \"right\") => void;\n gradientOverlayColor: string;\n}\n\nconst HorizontalScrollContext = createContext<HorizontalScrollContextProps | undefined>(undefined);\n\ninterface HorizontalScrollProps {\n /**\n * Show gradient overlay on navigation arrows.\n */\n showGradientOverlay?: boolean;\n /**\n * The RGB color for navigation gradient background overlay (format as \"R, G, B\").\n */\n gradientOverlayColor?: string;\n /**\n * Additional class names for styling the component.\n */\n className?: string;\n children?: React.ReactNode;\n}\n\nconst HorizontalScroll = ({\n showGradientOverlay = true,\n gradientOverlayColor = \"255, 255, 255\",\n className,\n children,\n}: HorizontalScrollProps) => {\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const [showArrows, setShowArrows] = useState({ left: false, right: false });\n\n const checkOverflow = useCallback(() => {\n const scrollContainer = scrollContainerRef.current;\n if (scrollContainer) {\n const { scrollLeft, scrollWidth, clientWidth } = scrollContainer;\n setShowArrows({\n left: scrollLeft > 0,\n right: Math.ceil(scrollLeft + clientWidth) < scrollWidth,\n });\n }\n }, []);\n\n useEffect(() => {\n const scrollContainer = scrollContainerRef.current;\n if (!scrollContainer) return;\n\n checkOverflow();\n window.addEventListener(\"resize\", checkOverflow);\n scrollContainer.addEventListener(\"scroll\", checkOverflow);\n\n return () => {\n window.removeEventListener(\"resize\", checkOverflow);\n scrollContainer.removeEventListener(\"scroll\", checkOverflow);\n };\n }, [checkOverflow]);\n\n const scroll = (direction: \"left\" | \"right\") => {\n const scrollContainer = scrollContainerRef.current;\n if (scrollContainer) {\n const { scrollLeft, clientWidth, scrollWidth } = scrollContainer;\n const scrollAmount = clientWidth * 0.7 * (direction === \"left\" ? -1 : 1);\n\n let newScrollPosition = scrollLeft + scrollAmount;\n // Adjust scroll position if it exceeds boundaries\n if (newScrollPosition < 0) {\n newScrollPosition = 0;\n } else if (newScrollPosition > scrollWidth - clientWidth) {\n newScrollPosition = scrollWidth - clientWidth;\n }\n\n scrollContainer.scrollTo({\n left: newScrollPosition,\n behavior: \"smooth\",\n });\n }\n };\n\n return (\n <HorizontalScrollContext.Provider\n value={{ scrollContainerRef, showArrows, scroll, gradientOverlayColor }}\n >\n <div className={cn(\"relative w-full\", className)}>\n {showGradientOverlay && (\n <>\n {showArrows.left && (\n <div\n className=\"pointer-events-none absolute left-0 top-1/2 z-10 flex h-full w-16 -translate-y-1/2 items-center\"\n style={{\n background: `linear-gradient( to left, rgba(255, 255, 255, 0),rgb(${gradientOverlayColor}),rgb(${gradientOverlayColor}))`,\n }}\n ></div>\n )}\n {showArrows.right && (\n <div\n className=\"pointer-events-none absolute right-0 top-1/2 z-10 flex h-full w-16 -translate-y-1/2 items-center\"\n style={{\n background: `linear-gradient(to right, rgba(255, 255, 255, 0), rgb(${gradientOverlayColor}),rgb(${gradientOverlayColor}))`,\n }}\n ></div>\n )}\n </>\n )}\n {children}\n </div>\n </HorizontalScrollContext.Provider>\n );\n};\n\ninterface HorizontalContentProps {\n /**\n * Additional class names for styling the component.\n */\n className?: string;\n children: React.ReactNode;\n}\n\nconst HorizontalContent = ({ className, children }: HorizontalContentProps) => {\n const context = useContext(HorizontalScrollContext);\n if (!context) throw new Error(\"HorizontalContent must be used within a HorizontalScroll\");\n\n return (\n <div\n ref={context.scrollContainerRef}\n className={cn(\"scrollbar-hide overflow-x-auto scroll-smooth\", className)}\n role=\"region\"\n aria-label=\"Scrollable content\"\n >\n {children}\n </div>\n );\n};\n\ninterface HorizontalNavigationProps extends IconButtonProps {\n children?: React.ReactNode;\n}\n\nconst HorizontalPrevious = ({ className, children, ...props }: HorizontalNavigationProps) => {\n const context = useContext(HorizontalScrollContext);\n if (!context) throw new Error(\"HorizontalNavigation must be used within a HorizontalScroll\");\n\n return context.showArrows.left ? (\n <IconButton\n className={cn(\n \"pointer-events-auto absolute left-0.5 top-1/2 z-10 h-6 w-6 -translate-y-1/2 rounded-full\",\n className\n )}\n onClick={() => context.scroll(\"left\")}\n aria-label=\"Scroll left\"\n size={props.size || \"sm\"}\n variant={props.variant || \"secondary\"}\n {...props}\n >\n {children || <ChevronLeft className=\"h-4 w-4\" />}\n </IconButton>\n ) : null;\n};\n\nconst HorizontalNext = ({ className, children, ...props }: HorizontalNavigationProps) => {\n const context = useContext(HorizontalScrollContext);\n if (!context) throw new Error(\"HorizontalNavigation must be used within a HorizontalScroll\");\n\n return context.showArrows.right ? (\n <IconButton\n className={cn(\n \"pointer-events-auto absolute right-0.5 top-1/2 z-10 h-6 w-6 -translate-y-1/2 rounded-full\",\n className\n )}\n onClick={() => context.scroll(\"right\")}\n aria-label=\"Scroll right\"\n size={props.size || \"sm\"}\n variant={props.variant || \"secondary\"}\n {...props}\n >\n {children || <ChevronRight className=\"h-4 w-4\" />}\n </IconButton>\n ) : null;\n};\n\nexport {\n HorizontalScroll,\n HorizontalContent,\n HorizontalPrevious,\n HorizontalNext,\n type HorizontalScrollProps,\n};\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../helpers/utils\";\n\n// /dwd\nconst iconButtonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed border border-transparent\",\n {\n variants: {\n /**\n * Determines style variation of Button component.\n */\n variant: {\n primary:\n \"bg-pink-500 text-white hover:bg-pink-600 disabled:bg-pink-300\",\n secondary:\n \"bg-white text-gray-900 hover:bg-gray-100 disabled:text-gray-400 disabled:bg-white border-gray-300\",\n outline:\n \"border-pink-500 text-pink-500 bg-white hover:bg-pink-50 disabled:bg-white disabled:border-pink-300 disabled:text-pink-300\",\n tonal:\n \"bg-pink-100 text-pink-500 hover:bg-pink-200 disabled:bg-gray-200 disabled:text-gray-400\",\n danger: \"bg-red-500 text-white hover:bg-red-600 disabled:bg-red-300\",\n transparent: \"text-gray-900 bg-transparent hover:bg-gray-100 disabled:text-gray-400 disabled:bg-transparent\",\n },\n /**\n * Determines size variation of Button component.\n */\n size: {\n default: \"text-sm h-10 w-10\",\n sm: \"h-8 w-8 text-sm\",\n lg: \"h-12 w-12 text-base\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"default\",\n },\n }\n);\n\nexport interface IconButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof iconButtonVariants> {\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n */\n asChild?: boolean;\n /**\n * Disabled interaction and applies disabled styles\n */\n isDisabled?: boolean;\n}\n\nconst IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(\n (\n {\n className,\n variant = \"primary\",\n size = \"default\",\n asChild = false,\n isDisabled = false,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\";\n const buttonClassName = cn(\n iconButtonVariants({ variant, size, className })\n );\n return (\n <Comp\n className={buttonClassName}\n disabled={isDisabled}\n ref={ref}\n {...props}\n >\n {props.children}\n </Comp>\n );\n }\n);\nIconButton.displayName = \"IconButton\";\n\nexport { IconButton, iconButtonVariants };\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst Tabs = TabsPrimitive.Root;\n\ntype TabsListProps = React.ComponentPropsWithoutRef<\n typeof TabsPrimitive.List\n> & {\n /**\n * Control the size of the tabs list..\n */\n size?: \"base\" | \"sm\";\n /**\n * The direction of navigation between toolbar items.\n */\n\n isDivider?: boolean;\n};\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n TabsListProps\n>(({ className, size = \"sm\", isDivider = false, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex w-full flex-row items-center bg-muted text-muted-foreground space-x-5 overflow-x-auto [&::-webkit-scrollbar]:hidden\",\n `text-${size}`,\n isDivider && \"border-b border-gray-200\",\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap py-3 font-semibold ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border-b-2 border-transparent data-[state=active]:text-pink-500 data-[state=active]:border-pink-500 text-gray-900 hover:text-pink-500\",\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-3 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 text-gray-900\",\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../helpers/utils\";\n\n// /dwd\nconst textButtonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed border border-transparent flex-nowrap\",\n {\n variants: {\n /**\n * Determines style variation of Button component.\n */\n variant: {\n default:\n \"text-blue-700 hover:underline hover:bg-blue-50 disabled:bg-transparent disabled:text-gray-400 disabled:no-underline\",\n primary:\n \"text-pink-500 hover:underline hover:bg-pink-50 disabled:bg-transparent disabled:text-gray-400 disabled:no-underline\",\n secondary:\n \"text-gray-700 hover:underline hover:text-blue-700 hover:bg-blue-50 disabled:bg-transparent disabled:text-gray-400 disabled:no-underline\",\n },\n /**\n * Determines size variation of Button component.\n */\n size: {\n default: \"text-sm\",\n lg: \"text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface TextButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof textButtonVariants> {\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n */\n asChild?: boolean;\n /**\n * Disabled interaction and applies disabled styles\n */\n isDisabled?: boolean;\n}\n\nconst TextButton = React.forwardRef<HTMLButtonElement, TextButtonProps>(\n (\n {\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n isDisabled = false,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : \"button\";\n const buttonClassName = cn(\n textButtonVariants({ variant, size, className }),\n );\n return (\n <Comp\n className={buttonClassName}\n disabled={isDisabled}\n ref={ref}\n {...props}\n >\n {props.children}\n </Comp>\n );\n },\n);\nTextButton.displayName = \"TextButton\";\n\nexport { TextButton, textButtonVariants };\n","import React, { memo, useEffect, useState } from \"react\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"@heroicons/react/20/solid\";\nimport parse from \"html-react-parser\";\n\nimport { cn } from \"../../../helpers/utils\";\nimport { ActionButton } from \"../../ActionButton\";\nimport { Carousel, CarouselApi, CarouselContent, CarouselItem } from \"../../Carousel\";\nimport { HeadingBlock } from \"../../CommonBlocks/CommonBlocks\";\nimport { IconButton } from \"../../IconButton\";\nimport { TextButton } from \"../../TextButton\";\nimport { BlogItemProps, BlogSectionProps, DataBlogProps } from \"../utils\";\n\ntype CarouselBlogProps = {\n dataBlog?: DataBlogProps;\n onClickLoadMore?: (tabIndex: number) => void;\n index?: number;\n setCarouselRef?: (value: CarouselApi) => void;\n carouselRef?: CarouselApi | null;\n setCurrent?: (value: number) => void;\n handleOnClickItem: (e: React.MouseEvent<HTMLDivElement>, id: number, url: string) => void;\n};\n\nconst BlogSectionItem = ({ blog }: { blog: BlogItemProps }) => {\n const handleOnClickcate = (e: React.MouseEvent<HTMLButtonElement>, url: string) => {\n e?.preventDefault();\n e?.stopPropagation();\n window.open(url, \"_blank\");\n };\n\n return (\n <>\n <div className=\"relative block aspect-[16/9] w-full overflow-hidden rounded-md bg-gray-100\">\n <img\n className=\"inset-0 h-full w-full object-cover\"\n src={blog?.thumbnailDesktop}\n alt={blog?.title}\n />\n </div>\n <div className=\"mt-4 md:pr-3\">\n <div className=\"font-semibold text-gray-900 group-hover:text-pink-500 md:text-lg md:leading-tight \">\n {blog?.title}\n </div>\n {blog?.description && (\n <div className=\"mt-2 line-clamp-2 text-sm text-gray-500 md:text-sm\">\n {parse(blog?.description ?? \"\")}\n </div>\n )}\n <div className=\"mt-2 flex items-center space-x-1\">\n {blog?.category && blog?.categoryUrl && (\n <>\n <TextButton\n variant=\"default\"\n className=\"shink-0 justify-start whitespace-normal text-left text-sm md:line-clamp-1 \"\n onClick={(e) => handleOnClickcate(e, blog?.categoryUrl || \"\")}\n >\n {blog?.category}\n </TextButton>\n {blog?.category && blog?.totalViews && (\n <span className=\" flex-none leading-none text-gray-300 \">·</span>\n )}\n </>\n )}\n {blog?.totalViews && (\n <div className=\"flex-none text-sm text-gray-500\">{blog.totalViews}</div>\n )}\n </div>\n </div>\n </>\n );\n};\n\nconst CarouselBlog = ({\n dataBlog,\n setCarouselRef,\n carouselRef,\n setCurrent,\n handleOnClickItem,\n}: CarouselBlogProps) => {\n const {\n blogList = [],\n isShowBtn,\n btnName,\n btnUrl = \"#\",\n isNewTab,\n classNameItem,\n } = dataBlog ?? {};\n\n useEffect(() => {\n if (!carouselRef || !setCurrent) {\n return;\n }\n setCurrent(carouselRef.selectedScrollSnap() + 1);\n carouselRef.on(\"select\", () => {\n if (setCurrent) {\n setCurrent(carouselRef.selectedScrollSnap() + 1);\n }\n });\n }, [carouselRef, setCurrent]);\n\n return (\n <>\n <Carousel\n opts={{\n dragFree: false,\n }}\n setApi={setCarouselRef}\n className=\"w-full\"\n >\n <CarouselContent classNameContent=\"!overflow-visible\" className=\"-ml-5\">\n {blogList?.map((blog) => (\n <CarouselItem key={blog?.id} className=\"basis-11/12 pl-5 md:basis-1/2 lg:basis-4/12\">\n <div\n onClick={(e) => handleOnClickItem(e, blog?.id, blog?.url)}\n key={blog?.id}\n className={cn(\"group cursor-pointer\", classNameItem)}\n >\n <BlogSectionItem blog={blog} />\n </div>\n </CarouselItem>\n ))}\n </CarouselContent>\n </Carousel>\n {isShowBtn && (\n <div className=\"mt-8 flex w-full items-center justify-center md:mt-10 \">\n <ActionButton action={btnUrl && btnUrl} newTab={isNewTab} variant=\"outline\">\n {parse(btnName || \"Xem thêm\")}{\" \"}\n </ActionButton>\n </div>\n )}\n </>\n );\n};\n\nconst CarouselPreviousRef = ({ carouselRef }) => {\n return (\n <IconButton\n onClick={() => carouselRef?.scrollPrev()}\n disabled={!carouselRef?.canScrollPrev()}\n style={{ borderRadius: \"100%\" }}\n size=\"sm\"\n variant=\"secondary\"\n >\n <ChevronLeftIcon className=\"h-6 w-6\" />\n <span className=\"sr-only\">Previous slide</span>\n </IconButton>\n );\n};\n\nconst CarouselNextRef = ({ carouselRef }) => {\n return (\n <IconButton\n onClick={() => carouselRef?.scrollNext()}\n disabled={!carouselRef?.canScrollNext()}\n style={{ borderRadius: \"100%\" }}\n size=\"sm\"\n variant=\"secondary\"\n >\n <ChevronRightIcon className=\"h-6 w-6\" />\n <span className=\"sr-only\">Next slide</span>\n </IconButton>\n );\n};\n\nexport const BlogSectionTemplateTwo = memo(\n ({ dataHeading, dataBlog, onClickModal, onClickLoadMore }: BlogSectionProps) => {\n const handleOnClickItem = (e: React.MouseEvent<HTMLDivElement>, id: number, url: string) => {\n e?.preventDefault();\n e?.stopPropagation();\n onClickModal ? onClickModal(id) : window.open(url, \"_blank\");\n };\n\n const [carouselRef, setCarouselRef] = useState<CarouselApi | null>(null);\n const [, setCurrent] = useState(0);\n\n const CarouselNavigation = () => {\n if (!carouselRef) return <></>;\n return (\n <div className=\"ml-3 hidden items-center space-x-2 md:flex\">\n <CarouselPreviousRef carouselRef={carouselRef} />\n <CarouselNextRef carouselRef={carouselRef} />\n </div>\n );\n };\n\n return (\n <React.Fragment>\n <div className=\" flex items-center justify-between\">\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"left\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={cn(dataHeading?.className)}\n />\n )}\n <CarouselNavigation />\n </div>\n <CarouselBlog\n dataBlog={dataBlog?.[0]}\n onClickLoadMore={onClickLoadMore}\n index={0}\n setCarouselRef={setCarouselRef}\n carouselRef={carouselRef}\n setCurrent={setCurrent}\n handleOnClickItem={handleOnClickItem}\n />\n </React.Fragment>\n );\n }\n);\n","import * as React from \"react\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"@heroicons/react/20/solid\";\nimport useEmblaCarousel, { type UseEmblaCarouselType } from \"embla-carousel-react\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { IconButton } from \"../IconButton\";\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n orientation?: \"horizontal\" | \"vertical\";\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n\n return context;\n}\n\nconst Carousel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & CarouselProps\n>(({ orientation = \"horizontal\", opts, setApi, plugins, className, children, ...props }, ref) => {\n const [carouselRef, api] = useEmblaCarousel(\n {\n align: \"start\",\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) {\n return;\n }\n\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext]\n );\n\n React.useEffect(() => {\n if (!api || !setApi) {\n return;\n }\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) {\n return;\n }\n\n onSelect(api);\n api.on(\"reInit\", onSelect);\n api.on(\"select\", onSelect);\n\n return () => {\n api?.off(\"select\", onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation: orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n ref={ref}\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n});\nCarousel.displayName = \"Carousel\";\n\ntype CarouselContentStyle = {\n classNameContent?: string;\n};\n\nconst CarouselContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & CarouselContentStyle\n>(({ className, classNameContent, ...props }, ref) => {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className={cn(\"overflow-hidden\", classNameContent)}>\n <div\n ref={ref}\n className={cn(\"flex\", orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\", className)}\n {...props}\n />\n </div>\n );\n});\nCarouselContent.displayName = \"CarouselContent\";\n\nconst CarouselItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const { orientation } = useCarousel();\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-roledescription=\"slide\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className\n )}\n {...props}\n />\n );\n }\n);\nCarouselItem.displayName = \"CarouselItem\";\n\nconst CarouselPrevious = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<typeof IconButton>\n>(({ className, variant = \"secondary\", size = \"default\", ...props }, ref) => {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <IconButton\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n \"absolute h-8 w-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"-left-12 top-1/2 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ChevronLeftIcon className=\"h-6 w-6\" />\n <span className=\"sr-only\">Previous slide</span>\n </IconButton>\n );\n});\nCarouselPrevious.displayName = \"CarouselPrevious\";\n\nconst CarouselNext = React.forwardRef<HTMLButtonElement, React.ComponentProps<typeof IconButton>>(\n ({ className, variant = \"secondary\", size = \"default\", ...props }, ref) => {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <IconButton\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n \"absolute h-8 w-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"-right-12 top-1/2 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ChevronRightIcon className=\"h-6 w-6\" />\n <span className=\"sr-only\">Next slide</span>\n </IconButton>\n );\n }\n);\nCarouselNext.displayName = \"CarouselNext\";\n\nconst CarouselDots = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n (props, ref) => {\n const { api } = useCarousel();\n /* eslint-disable */\n const [, setUpdateState] = React.useState(false);\n const toggleUpdateState = React.useCallback(\n () => setUpdateState((prevState) => !prevState),\n []\n );\n\n React.useEffect(() => {\n if (api) {\n api.on(\"select\", toggleUpdateState);\n api.on(\"reInit\", toggleUpdateState);\n\n return () => {\n api.off(\"select\", toggleUpdateState);\n api.off(\"reInit\", toggleUpdateState);\n };\n }\n }, [api, toggleUpdateState]);\n\n const numberOfSlides = api?.scrollSnapList().length || 0;\n const currentSlide = api?.selectedScrollSnap() || 0;\n\n if (numberOfSlides > 1) {\n return (\n <div ref={ref} className={` flex justify-center ${props.className}`}>\n {Array.from({ length: numberOfSlides }, (_, i) => (\n <IconButton\n key={i}\n className={`navigation-item mx-1 h-1.5 w-1.5 rounded-full p-0 ${\n i === currentSlide\n ? \"navigation-item-active scale-125 transform bg-gray-500 hover:bg-gray-500/90\"\n : \"bg-gray-200 hover:bg-gray-100\"\n }`}\n aria-label={`Go to slide ${i + 1}`}\n onClick={() => api?.scrollTo(i)}\n />\n ))}\n </div>\n );\n } else {\n return <></>;\n }\n }\n);\nCarouselDots.displayName = \"CarouselDots\";\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n CarouselDots,\n};\n","import { cn } from \"../../helpers/utils\";\nimport { SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { BlogSectionTemplateOne, BlogSectionTemplateTwo } from \"./BlogSectionTemplate\";\nimport { BlogSectionProps } from \"./utils\";\n\nconst renderTemplate = ({\n template,\n dataBlog,\n dataHeading,\n dataHorizontalScroll,\n onClickModal,\n onClickLoadMore,\n}) => {\n switch (template) {\n case 1:\n return (\n <BlogSectionTemplateOne\n dataBlog={dataBlog}\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll}\n onClickModal={onClickModal}\n onClickLoadMore={onClickLoadMore}\n />\n );\n case 2:\n return (\n <BlogSectionTemplateTwo\n dataBlog={dataBlog}\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll}\n onClickModal={onClickModal}\n onClickLoadMore={onClickLoadMore}\n />\n );\n default:\n return (\n <BlogSectionTemplateOne\n dataBlog={dataBlog}\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll}\n onClickModal={onClickModal}\n onClickLoadMore={onClickLoadMore}\n />\n );\n }\n};\n\nconst BlogSectionContent = ({\n dataHeading,\n dataHorizontalScroll,\n dataBlog,\n template,\n onClickModal,\n onClickLoadMore,\n}) => {\n return (\n <>\n {renderTemplate({\n dataHeading,\n dataHorizontalScroll,\n dataBlog,\n template,\n onClickModal,\n onClickLoadMore,\n })}\n </>\n );\n};\n\nexport const BlogSection = ({\n dataHeading,\n dataHorizontalScroll,\n dataBlog = [],\n idSection,\n className,\n background,\n template = 1,\n onClickModal,\n onClickLoadMore,\n}: BlogSectionProps) => {\n return (\n <SectionBlock\n className={cn(\"overflow-hidden\", className)}\n idSection={idSection}\n background={background}\n >\n <BlogSectionContent\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll}\n dataBlog={dataBlog}\n template={template}\n onClickModal={onClickModal}\n onClickLoadMore={onClickLoadMore}\n />\n </SectionBlock>\n );\n};\n","import * as React from \"react\";\nimport { enUS, vi } from \"date-fns/locale\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport lunisolar from \"lunisolar\";\nimport { DayPicker, Formatters } from \"react-day-picker\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { buttonVariants } from \"../Button\";\nimport { Checkbox } from \"../Checkbox\";\n\ntype DayContentProps = {\n date: Date;\n cusContent?: (date: Date) => React.ReactNode;\n};\n\nconst CusDayContent: React.FC<DayContentProps> = ({ date, cusContent }) => {\n let lunarDate: { day: number; month: number } | null = null;\n lunarDate = lunisolar(date).lunar;\n return (\n <>\n {cusContent ? cusContent(date) : date.getDate()}\n {lunarDate && (\n <span className=\"luna-date absolute right-0.5 top-1 hidden text-[8px] leading-none group-[.show-luna]:block\">\n {lunarDate.day}\n </span>\n )}\n </>\n );\n};\n\nconst customFormatters: Partial<Formatters> = {\n formatCaption: (month) => `Tháng ${month.getMonth() + 1}/${month.getFullYear()}`,\n\n formatWeekdayName: (weekday) => {\n const dayIndex = weekday.getDay();\n const weekdays = [\"CN\", \"T2\", \"T3\", \"T4\", \"T5\", \"T6\", \"T7\"];\n return weekdays[dayIndex];\n },\n};\n\nfunction CheckboxLunaDate({\n isShow,\n setIsShow,\n lang,\n}: {\n isShow: boolean;\n setIsShow: React.Dispatch<React.SetStateAction<boolean>>;\n lang: \"vi\" | \"en\";\n}) {\n const uniqueId = React.useId();\n return (\n <div className=\"w-full p-3 pt-0\">\n <div className=\"flex cursor-pointer items-center space-x-2 border-t border-gray-100 pt-3\">\n <Checkbox\n checked={isShow}\n id={`check-show-luna-${uniqueId}`}\n onCheckedChange={(checked) => {\n if (typeof checked === \"boolean\") {\n setIsShow(checked);\n }\n }}\n />\n <label\n htmlFor={`check-show-luna-${uniqueId}`}\n className=\"z-[1] cursor-pointer text-sm leading-none text-gray-900 peer-disabled:cursor-default peer-disabled:text-gray-400\"\n >\n {lang === \"vi\" ? \"Hiện ngày âm lịch\" : \"Show lunar date\"}\n </label>\n </div>\n </div>\n );\n}\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker> & {\n /**\n * Enable show luna date in calendar cell\n */\n enableLunaDate?: boolean;\n /**\n * A function custom content for day cell.\n */\n cusContentDay?: (date: Date) => React.ReactNode;\n /**\n * Language for calendar support vi or en. Default is vi.\n */\n lang?: \"vi\" | \"en\";\n};\n\nconst isWeekend = (date: Date) => date.getDay() === 0 || date.getDay() === 6;\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = false,\n enableLunaDate = false,\n lang = \"vi\",\n cusContentDay,\n ...props\n}: CalendarProps) {\n const [showLunaDate, setShowLunaDate] = React.useState(true);\n\n return (\n <DayPicker\n locale={lang === \"vi\" ? vi : enUS}\n showOutsideDays={showOutsideDays}\n className={cn(\"b w-fit rounded-b-md border border-gray-200 bg-white shadow-md\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-y-0\",\n month: \"p-3 pt-0 w-full\",\n caption: \"flex justify-center p-3 bg-blue-50 relative items-center -mx-3 mb-3\",\n caption_label: \"text-sm font-medium text-gray-900\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n buttonVariants({ variant: \"transparent\" }),\n \"h-7 w-7 p-0 text-gray-900 hover:bg-transparent hover:opacity-70\"\n ),\n nav_button_previous: \"absolute left-1\",\n nav_button_next: \"absolute right-1\",\n table: \"w-full border-collapse\",\n head_row: \"flex space-x-0.5\",\n head_cell: cn(\n \"w-11 rounded-md text-xs font-medium text-gray-500 [&:nth-child(7)]:!text-red-600\",\n lang === \"vi\" ? \"[&:nth-child(6)]:!text-red-600\" : \"[&:nth-child(1)]:!text-red-600\"\n ),\n row: \"flex w-full mt-0.5 space-x-0.5\",\n cell: \"h-11 w-11 text-center text-sm p-0 relative border-none\",\n day: cn(\n buttonVariants({ variant: \"transparent\" }),\n \"group relative h-11 w-11 p-0 text-center text-sm font-semibold focus-within:relative focus-within:z-20 aria-selected:opacity-100 [&.day-range-end.day-range-start]:rounded-md aria-selected:[&:not(.day-range-middle)]:bg-pink-500 aria-selected:[&:not(.day-range-middle)]:text-white\",\n enableLunaDate && showLunaDate && \"show-luna\"\n ),\n day_range_end: \"day-range-end [&.day-range-end]:rounded-l-none\",\n day_range_start: \"day-range-start [&.day-range-start]:rounded-r-none\",\n day_today:\n \"day-today [&:not([aria-selected])]:text-pink-500 [&:not([aria-selected])]:border-gray-200\",\n day_outside: \"day-outside opacity-50 aria-selected:bg-accent/50 aria-selected:opacity-30\",\n day_disabled: \"opacity-50\",\n day_range_middle: cn(\n \"group/mid day-range-middle !rounded-none !bg-pink-50 text-gray-900 [&:nth-child(7)]:!text-red-600\",\n lang === \"vi\" ? \"[&:nth-child(6)]:!text-red-600\" : \"[&:nth-child(1)]:!text-red-600\"\n ),\n day_hidden: \"invisible\",\n ...classNames,\n }}\n modifiers={{\n weekend: isWeekend,\n }}\n modifiersClassNames={{\n weekend: \"text-red-600\",\n }}\n components={{\n IconLeft: () => <ChevronLeft className=\"h-6 w-6\" />,\n IconRight: () => <ChevronRight className=\"h-6 w-6\" />,\n DayContent: (dayProps) => {\n return <CusDayContent date={dayProps.date} cusContent={cusContentDay} />;\n },\n Months: ({ children }) => (\n <div className=\"w-full\">\n <div className={cn(\"months-wrapper flex flex-col sm:flex-row\")}>{children}</div>\n {enableLunaDate && (\n <CheckboxLunaDate isShow={showLunaDate} setIsShow={setShowLunaDate} lang={lang} />\n )}\n </div>\n ),\n }}\n formatters={lang === \"vi\" ? customFormatters : {}}\n {...props}\n />\n );\n}\n\nCalendar.displayName = \"Calendar\";\n\nexport { Calendar };\n","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { CheckIcon } from \"@heroicons/react/16/solid\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst checkboxVariants = cva(\n \"peer shrink-0 rounded border-2 disabled:bg-gray-300 border-gray-300 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-default disabled:bg-gray-100 data-[state=checked]:border-none disabled:data-[state=checked]:bg-gray-400 disabled:data-[state=checked]:text-gray-100 data-[state=checked]:bg-pink-500 data-[state=checked]:text-white\",\n {\n variants: {\n size: {\n medium: \"h-4 w-4\",\n large: \"w-5 h-5\",\n },\n },\n defaultVariants: {\n size: \"medium\",\n },\n }\n);\n\nconst checkboxIconVariants = cva(\"\", {\n variants: {\n size: {\n medium: \"h-4 w-4\",\n large: \"w-5 h-5\",\n },\n },\n defaultVariants: {\n size: \"medium\",\n },\n});\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> &\n VariantProps<typeof checkboxVariants>\n>(({ className, size, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(checkboxVariants({ size }), className)}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <CheckIcon className={cn(checkboxIconVariants({ size }))} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","import { QuestionMarkCircleIcon, XCircleIcon } from \"@heroicons/react/16/solid\";\nimport { PopoverContentProps, PopoverProps } from \"@radix-ui/react-popover\";\nimport { format } from \"date-fns\";\nimport { Calendar as CalendarIcon } from \"lucide-react\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { Button, ButtonProps } from \"../Button\";\nimport { Calendar, CalendarProps } from \"../Calendar\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../Popover\";\n\nexport type DatePickerProps = {\n /**\n * Label for the DatePicker component\n */\n label?: string;\n /**\n * Placeholder for the DatePicker component\n */\n placeholder?: string;\n /**\n * Size of the DatePicker component\n */\n size?: 1 | 2;\n /**\n * Error state of the DatePicker component\n */\n isError?: boolean;\n /**\n * disabled state of the DatePicker component\n */\n disabled?: boolean;\n /**\n * Message to display below the DatePicker\n */\n message?: string;\n /**\n * Format that is used to display date in the input, It is based on (Unicode Technical Standart #35)[https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table]\n */\n dateFormat?: string;\n /**\n * Props to pass to the Button component\n */\n buttonProps?: Partial<ButtonProps>;\n /**\n * Props to pass to the Popover component\n */\n popoverProps?: Partial<PopoverProps>;\n /**\n * Props to pass to the PopoverContent component\n */\n popoverContentProps?: Partial<PopoverContentProps>;\n /**\n * Props to pass to the Calendar component\n */\n calendarProps?: Partial<CalendarProps>;\n};\n\nconst DatePicker = ({\n label,\n placeholder = \"Select a value\",\n size = 1,\n message,\n isError,\n disabled,\n dateFormat = \"dd/MM/yyyy\",\n buttonProps,\n popoverProps,\n calendarProps,\n popoverContentProps,\n}: DatePickerProps) => {\n const dateSelected = calendarProps?.selected || null;\n return (\n <div>\n <Popover {...popoverProps}>\n <PopoverTrigger asChild>\n <Button\n variant={\"secondary\"}\n className={cn(\n \"relative h-11 w-full justify-between overflow-visible text-left text-sm font-normal text-gray-900 ring-inset hover:ring-1 hover:ring-gray-400 focus:ring-1 focus:ring-gray-400 disabled:pointer-events-none disabled:border-gray-200 disabled:bg-gray-50 disabled:text-gray-500 [&[data-state=open]]:border-pink-500 [&[data-state=open]]:ring-1 [&[data-state=open]]:ring-pink-500\",\n size === 2 && \"h-12 text-base\",\n (!dateSelected ||\n (!(dateSelected instanceof Date) &&\n typeof dateSelected === \"object\" &&\n (!(\"from\" in dateSelected) || !dateSelected.from))) &&\n \"text-gray-500\",\n isError && \"border-red-500 ring-1 ring-red-500\"\n )}\n disabled={disabled}\n {...buttonProps}\n >\n <div className=\"line-clamp-1 flex-1\">\n {dateSelected instanceof Date ? (\n format(dateSelected, dateFormat)\n ) : dateSelected &&\n typeof dateSelected === \"object\" &&\n \"from\" in dateSelected &&\n \"to\" in dateSelected ? (\n <>\n {dateSelected.from ? (\n dateSelected.to ? (\n <>\n <span className=\"date-from\">{format(dateSelected.from, dateFormat)}</span>{\" \"}\n <span className=\"date-separator\">-</span>\n <span className=\"date-to\">{format(dateSelected.to, dateFormat)}</span>\n </>\n ) : (\n format(dateSelected.from, dateFormat)\n )\n ) : (\n placeholder\n )}\n </>\n ) : (\n placeholder\n )}\n </div>\n\n {label && (\n <span\n className={cn(\n \"absolute -top-2 left-2 z-[1] bg-white px-1.5 text-xs text-gray-500\",\n size === 2 && \" -top-2.5 text-sm\",\n isError && \"text-red-500\"\n )}\n >\n {label}\n </span>\n )}\n <CalendarIcon className=\"ml-2 h-4 w-4 flex-none text-gray-500\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto border-none !p-0\" {...popoverContentProps}>\n <Calendar\n {...calendarProps}\n defaultMonth={\n dateSelected && typeof dateSelected === \"object\" && \"from\" in dateSelected\n ? dateSelected.from\n : dateSelected instanceof Date\n ? dateSelected\n : undefined\n }\n />\n </PopoverContent>\n </Popover>\n {message && (\n <div className=\"mobase-text-input-message mt-0.5 flex items-center space-x-1\">\n {isError ? (\n <XCircleIcon width={16} height={16} className=\"text-red-500\" />\n ) : (\n <QuestionMarkCircleIcon width={16} height={16} className=\"text-gray-500\" />\n )}\n <span\n className={cn(\n isError ? \"text-red-500\" : \"text-gray-500\",\n size === 2 ? \"text-sm\" : \"text-xs\"\n )}\n >\n {message}\n </span>\n </div>\n )}\n </div>\n );\n};\n\nexport { DatePicker };\n","import * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"../../helpers/utils\";\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border border-gray-200 bg-white p-4 sm:p-5 text-gray-900 shadow-small outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent }\n","import { useEffect, useState } from \"react\";\nimport { QuestionMarkCircleIcon, XCircleIcon } from \"@heroicons/react/16/solid\";\nimport { isValid } from \"date-fns\";\n\nimport { cn } from \"../../helpers/utils\";\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../Select\";\nimport { DateSelectProps, generateYears, getDaysInMonth, monthsEn, monthsVi } from \"./utils\";\n\nconst DateSelect = ({\n label,\n selected,\n onSelect,\n size = 1,\n message,\n isError,\n disabled,\n dateFormat = \"dd/MM/yyyy\",\n lang = \"vi\",\n fromYear = 1900,\n toYear = new Date().getFullYear(),\n disableUnselect = false,\n}: DateSelectProps) => {\n const [selectedDate, setSelectedDate] = useState<Date | null | undefined>(selected ?? null);\n const startYear = Math.min(fromYear, toYear);\n const endYear = Math.max(fromYear, toYear);\n\n // Check if only month/year is displayed\n const isMonthYearOnly = dateFormat === \"MM/yyyy\";\n\n // Function to update date, month, year\n const handleDateChange = (type: \"day\" | \"month\" | \"year\", value: number | null) => {\n if (value === 0) {\n setSelectedDate(undefined);\n onSelect?.(undefined);\n return;\n }\n\n let currentYear = selectedDate?.getFullYear() || new Date().getFullYear();\n let currentMonth = selectedDate?.getMonth() ?? 0;\n let currentDay = selectedDate?.getDate() ?? 1;\n\n if (type === \"month\" && value !== null) currentMonth = value - 1;\n if (type === \"year\" && value !== null) currentYear = value;\n\n // If only month/year is selected, keep the day as 1\n if (isMonthYearOnly) {\n currentDay = 1;\n } else if (type === \"day\" && value !== null) {\n currentDay = value;\n }\n // Check the number of valid days in the current month/year\n const maxDay = getDaysInMonth(currentYear, currentMonth + 1).daysInMonth;\n if (currentDay > maxDay) {\n currentDay = 1; // If the old date is invalid, reset to 1\n }\n\n const newDate = new Date(currentYear, currentMonth, currentDay);\n\n if (isValid(newDate)) {\n setSelectedDate(newDate);\n onSelect?.(newDate);\n }\n };\n\n const [isAnySelectOpen, setIsAnySelectOpen] = useState(false);\n const handleOpenChange = (open: boolean) => {\n setIsAnySelectOpen(open);\n };\n useEffect(() => {\n setSelectedDate(selected ?? null);\n }, [selected]);\n\n return (\n <div className={cn(\"relative\", disabled && \"cursor-no-drop\")}>\n <div\n className={cn(\n \"relative block h-11 w-full rounded-md border border-gray-300 bg-white px-1 py-3 text-sm text-gray-900 outline-none ring-inset transition-all placeholder:text-gray-500 hover:ring-1 hover:ring-gray-400 focus:border-pink-500 focus:ring-1 focus:ring-gray-400 disabled:pointer-events-none disabled:border-gray-200 disabled:bg-gray-50\",\n isAnySelectOpen && \"border-pink-500 ring-1 ring-pink-500\",\n size === 2 && \"h-12 text-base\",\n selectedDate ? \"\" : \"text-gray-500\",\n isError && \"border-red-500 ring-1 ring-red-500\",\n disabled && \"pointer-events-none select-none border-gray-200 bg-gray-50\"\n )}\n >\n {label && (\n <span\n className={cn(\n \"absolute -top-2 left-2 z-[1] bg-white px-1.5 text-xs text-gray-500\",\n size === 2 && \" -top-2.5 text-sm\",\n isError && \"text-red-500\"\n )}\n >\n {label}\n </span>\n )}\n <div className=\"flex h-full flex-row divide-x\">\n {!isMonthYearOnly && (\n <Select\n value={selectedDate ? selectedDate.getDate().toString().padStart(2, \"0\") : \"\"}\n onValueChange={(value) => handleDateChange(\"day\", parseInt(value, 10))}\n onOpenChange={handleOpenChange}\n className=\"w-[30%]\"\n >\n <SelectTrigger className=\"h-full w-full rounded-none border-none bg-transparent py-0 !ring-0 hover:!text-pink-500\">\n <SelectValue placeholder={lang === \"vi\" ? \"Ngày\" : \"Day\"} />\n </SelectTrigger>\n <SelectContent onCloseAutoFocus={(e) => e.preventDefault()}>\n <SelectGroup>\n {!disableUnselect && (\n <SelectItem value=\"0\" className=\"text-gray-600\">\n {lang === \"vi\" ? \"Bỏ chọn\" : \"None\"}\n </SelectItem>\n )}\n {Array.from(\n {\n length: getDaysInMonth(\n selectedDate?.getFullYear() || new Date().getFullYear(),\n (selectedDate?.getMonth() ?? 0) + 1\n ).daysInMonth,\n },\n (_, i) => (i + 1).toString().padStart(2, \"0\")\n ).map((d) => (\n <SelectItem key={d} value={d}>\n {d}\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </Select>\n )}\n\n <Select\n value={selectedDate ? (selectedDate.getMonth() + 1).toString() : \"\"}\n onValueChange={(value) => handleDateChange(\"month\", parseInt(value, 10))}\n onOpenChange={handleOpenChange}\n className={cn(isMonthYearOnly ? \"w-1/2\" : \"w-2/5\")}\n >\n <SelectTrigger className=\"h-full w-full !rounded-none border-none bg-transparent py-0 !ring-0 hover:!text-pink-500\">\n <SelectValue placeholder={lang === \"vi\" ? \"Tháng\" : \"Month\"} />\n </SelectTrigger>\n <SelectContent onCloseAutoFocus={(e) => e.preventDefault()}>\n <SelectGroup>\n {!disableUnselect && (\n <SelectItem value=\"0\" className=\"text-gray-600\">\n {lang === \"vi\" ? \"Bỏ chọn\" : \"None\"}\n </SelectItem>\n )}\n\n {Array.from({ length: 12 }, (_, i) => i + 1).map((m) => (\n <SelectItem key={m} value={m.toString()}>\n {lang === \"vi\" ? monthsVi[m - 1] : monthsEn[m - 1]}\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </Select>\n <Select\n value={selectedDate ? selectedDate.getFullYear().toString() : \"\"}\n onValueChange={(value) => handleDateChange(\"year\", parseInt(value, 10))}\n onOpenChange={handleOpenChange}\n className={cn(isMonthYearOnly ? \"w-1/2\" : \"w-[30%]\")}\n >\n <SelectTrigger className=\"h-full w-full !rounded-none border-none bg-transparent py-0 !ring-0 hover:!text-pink-500\">\n <SelectValue placeholder={lang === \"vi\" ? \"Năm\" : \"Year\"} />\n </SelectTrigger>\n <SelectContent onCloseAutoFocus={(e) => e.preventDefault()}>\n <SelectGroup>\n {!disableUnselect && (\n <SelectItem value=\"0\" className=\"text-gray-600\">\n {lang === \"vi\" ? \"Bỏ chọn\" : \"None\"}\n </SelectItem>\n )}\n {generateYears(startYear, endYear).map((y) => (\n <SelectItem key={y} value={y.toString()}>\n {y}\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </Select>\n </div>\n </div>\n {message && (\n <div className=\"mobase-text-input-message mt-0.5 flex items-center space-x-1\">\n {isError ? (\n <XCircleIcon width={16} height={16} className=\"text-red-500\" />\n ) : (\n <QuestionMarkCircleIcon width={16} height={16} className=\"text-gray-500\" />\n )}\n <span\n className={cn(\n isError ? \"text-red-500\" : \"text-gray-500\",\n size === 2 ? \"text-sm\" : \"text-xs\"\n )}\n >\n {message}\n </span>\n </div>\n )}\n </div>\n );\n};\n\nexport { DateSelect };\n","import * as React from \"react\";\n\nimport {\n ChevronDownIcon,\n ChevronUpIcon,\n CheckIcon,\n XCircleIcon,\n} from \"@heroicons/react/16/solid\";\nimport { QuestionMarkCircleIcon } from \"@heroicons/react/24/outline\";\n\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { cn } from \"../../helpers/utils\";\n\nconst Select = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Root> & {\n className?: string;\n label?: string | null;\n message?: string | null;\n size?: 1 | 2;\n isError?: boolean;\n }\n>(\n ({\n className,\n children,\n label,\n message,\n size,\n isError,\n disabled,\n ...props\n },ref) => (\n <div\n ref={ref} \n className={cn(\n \"select-mobase relative\",\n className,\n disabled ? \"disabled\" : \"\",\n isError\n ? \"[&>.select-mobase-button]:border-red-500 [&>.select-mobase-button]:ring-red-500 [&>.select-mobase-button]:ring-1\"\n : \"\",\n size === 2\n ? \"[&>.select-mobase-button]:text-base [&>.select-mobase-button]:h-12\"\n : \"\",\n )}\n >\n {label && (\n <span\n className={cn(\n \"mobase-select-label absolute bg-white -top-2 px-1.5 left-2 text-xs text-gray-500 z-[1]\",\n size === 2 && \"text-sm -top-2.5\",\n isError && \"text-red-500\",\n )}\n >\n {label}\n </span>\n )}\n <SelectPrimitive.Root disabled={disabled} {...props}>\n {children}\n </SelectPrimitive.Root>\n {message && (\n <div\n className={cn(\n \"mobase-select-message flex space-x-1 items-center mt-1 text-gray-500\",\n isError && \"text-red-500\",\n )}\n >\n {isError ? (\n <XCircleIcon width={16} height={16} />\n ) : (\n <QuestionMarkCircleIcon width={16} height={16} />\n )}\n <span className={cn(size === 2 ? \"text-sm\" : \"text-xs\")}>\n {message}\n </span>\n </div>\n )}\n </div>\n ),\n);\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"select-mobase-button bg-white w-full ring-0 transition-all focus-visible:border-pink-500 focus-visible:ring-offset-0 focus-visible:ring-offset-transparent focus-visible:ring-1 focus-visible:!ring-pink-500 rounded-md border border-gray-300 data-[placeholder]:text-gray-500 p-3 disabled:bg-gray-50 disabled:border-gray-200 disabled:pointer-events-none flex items-center justify-between data-[state=open]:border-pink-500 data-[state=open]:ring-1 hover:ring-1 hover:ring-gray-400 data-[state=open]:ring-pink-500 text-gray-900 h-11 ring-inset text-sm\",\n className,\n )}\n {...props}\n >\n <div className=\"line-clamp-1 text-left\">{children}</div>\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"h-4 w-4 text-gray-500 flex-none\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronUpIcon className=\"h-5 w-5\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1 bg-gradient-to-t from-white to-transparent\",\n className,\n )}\n {...props}\n >\n <ChevronDownIcon className=\"h-5 w-5\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border border-gray-300 bg-white text-gray-900 shadow-small data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-0\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectGroup = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Group>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Group\n ref={ref}\n className={cn(\n \"relative p-1 after:w-full border-b border-gray-200 last:border-0\",\n className,\n )}\n {...props}\n >\n {children}\n </SelectPrimitive.Group>\n));\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"pr-2 pl-7 py-1.5 text-sm font-semibold z-[1]\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => {\n return (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-md py-1.5 pl-7 pr-2 text-sm outline-none focus:bg-gray-100 focus:text-gray-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-4 w-4 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"h-4 w-4 text-pink-500\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n});\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n","interface DateSelectProps {\n /**\n * Label for the Date Select component\n */\n label?: string;\n /**\n * Value of the Date Select component\n */\n selected?: Date | undefined | null;\n /**\n * Event handler when user select a date\n */\n onSelect?: (date: Date | undefined | null) => void;\n /**\n * Size of the DatePicker component\n */\n size?: 1 | 2;\n /**\n * Error state of the DatePicker component\n */\n isError?: boolean;\n /**\n * disabled state of the DatePicker component\n */\n disabled?: boolean;\n /**\n * Message to display below the DatePicker\n */\n message?: string;\n /**\n * Format that is used to display date in the input, It is based on (Unicode Technical Standart #35)[https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table]\n */\n dateFormat?: string;\n /**\n * Language of the Date Select component\n */\n lang?: \"vi\" | \"en\";\n /**\n * The earliest year to start the month navigation.\n */\n fromYear?: number;\n /**\n * The earliest year to start the month navigation.\n */\n toYear?: number;\n /**\n * disable unselect date\n */\n disableUnselect?: boolean;\n}\n\nexport const monthsVi = [\n \"Tháng 01\",\n \"Tháng 02\",\n \"Tháng 03\",\n \"Tháng 04\",\n \"Tháng 05\",\n \"Tháng 06\",\n \"Tháng 07\",\n \"Tháng 08\",\n \"Tháng 09\",\n \"Tháng 10\",\n \"Tháng 11\",\n \"Tháng 12\",\n];\n\nexport const monthsEn = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nexport const getDaysInMonth = (year: number, month: number, fromDate?: Date, toDate?: Date) => {\n const daysInMonth = new Date(year, month, 0).getDate();\n const startDay =\n fromDate && year === fromDate.getFullYear() && month === fromDate.getMonth() + 1\n ? fromDate.getDate()\n : 1;\n const endDay =\n toDate && year === toDate.getFullYear() && month === toDate.getMonth() + 1\n ? toDate.getDate()\n : daysInMonth;\n return { daysInMonth, startDay, endDay };\n};\n\nexport const generateYears = (\n startYear: number,\n endYear: number,\n fromDate?: Date,\n toDate?: Date\n) => {\n const fromYear = fromDate ? fromDate.getFullYear() : startYear;\n const toYear = toDate ? toDate.getFullYear() : endYear;\n return Array.from({ length: toYear - fromYear + 1 }, (_, i) => toYear - i);\n};\n\nexport type { DateSelectProps };\n","import * as React from \"react\";\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { buttonVariants } from \"../Button\";\n\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\n\nimport type * as Radix from \"@radix-ui/react-primitive\";\n\nconst AlertDialog = AlertDialogPrimitive.Root;\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialog\n * -----------------------------------------------------------------------------------------------*/\n\ntype DialogProps = Radix.ComponentPropsWithoutRef<typeof DialogPrimitive.Root>;\ninterface AlertDialogProps extends Omit<DialogProps, \"modal\"> {}\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogTrigger\n * -----------------------------------------------------------------------------------------------*/\n\ntype DialogTriggerProps = Radix.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Trigger\n>;\ninterface AlertDialogTriggerProps extends DialogTriggerProps {}\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogPortal\n * -----------------------------------------------------------------------------------------------*/\n\ntype DialogPortalProps = Radix.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Portal\n>;\ninterface AlertDialogPortalProps extends DialogPortalProps {}\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogOverlay\n * -----------------------------------------------------------------------------------------------*/\n\ntype DialogOverlayProps = Radix.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Overlay\n>;\ninterface AlertDialogOverlayProps extends DialogOverlayProps {}\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogAction\n * -----------------------------------------------------------------------------------------------*/\n\ntype DialogCloseProps = Radix.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Close\n>;\ninterface AlertDialogActionProps extends DialogCloseProps {}\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogCancel\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AlertDialogCancelProps extends DialogCloseProps {}\n\n/* ---------------------------------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogTitle\n * -----------------------------------------------------------------------------------------------*/\n\ntype DialogTitleProps = Radix.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Title\n>;\ninterface AlertDialogTitleProps extends DialogTitleProps {}\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogDescription\n * -----------------------------------------------------------------------------------------------*/\n\ntype DialogDescriptionProps = Radix.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Description\n>;\ninterface AlertDialogDescriptionProps extends DialogDescriptionProps {}\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogContent\n * -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentProps = Radix.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Content\n>;\ninterface AlertDialogContentProps\n extends Omit<\n DialogContentProps,\n \"onPointerDownOutside\" | \"onInteractOutside\"\n > {}\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/70 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n ref={ref}\n />\n));\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] w-[90vw] bg-white text-gray-700 border border-gray-300 top-[50%] z-50 grid w- max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-xl\",\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\n\nconst AlertDialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"flex flex-col space-y-2 text-left\", className)}\n {...props}\n />\n);\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\nconst AlertDialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"flex flex-row justify-end space-x-4\", className)}\n {...props}\n />\n);\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn(\"text-lg text-gray-900 font-semibold\", className)}\n {...props}\n />\n));\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nAlertDialogDescription.displayName =\n AlertDialogPrimitive.Description.displayName;\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(buttonVariants({ variant: \"primary\" }), \"\", className)}\n {...props}\n />\n));\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(buttonVariants({ variant: \"secondary\" }), className)}\n {...props}\n />\n));\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n\nexport type {\n AlertDialogProps,\n AlertDialogTriggerProps,\n AlertDialogPortalProps,\n AlertDialogOverlayProps,\n AlertDialogContentProps,\n AlertDialogActionProps,\n AlertDialogCancelProps,\n AlertDialogTitleProps,\n AlertDialogDescriptionProps,\n};\n","import { memo, useState } from \"react\";\n\nimport { cn, Media, MediaContextProvider } from \"../../helpers/utils\";\nimport { ButtonsBlock, HeadingBlock } from \"../CommonBlocks/CommonBlocks\";\nimport {\n HorizontalContent,\n HorizontalNext,\n HorizontalPrevious,\n HorizontalScroll,\n} from \"../HorizontalScroll\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../Tabs\";\nimport GuideUIDesktopTempOne from \"./GuideUIDesktop\";\nimport GuideUIMobileTempOne from \"./GuideUIMobile\";\nimport { GuideSectionProps } from \"./utils\";\n\nconst ArrowSVG = ({\n direction,\n className,\n}: {\n direction: \"left\" | \"right\";\n className?: string;\n}) => {\n const svgProps =\n direction === \"left\"\n ? { viewBox: \"0 0 20 40\", d: \"M20 0H0L18 20L0 40H20V0Z\", width: \"20\" }\n : {\n viewBox: \"0 0 19 40\",\n d: \"M0.906128 0H0V40H0.906128L19 20L0.906128 0Z\",\n width: \"19\",\n };\n\n return (\n <svg\n fill=\"none\"\n viewBox={svgProps.viewBox}\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"flex-0 absolute w-5 transition-all\", className)}\n >\n <path d={svgProps.d} fill=\"currentColor\" />\n </svg>\n );\n};\n\nconst GuideSectionTemplateOne = memo(\n ({\n dataHeading,\n dataHorizontalScroll,\n dataGuide,\n dataButtons,\n mockup,\n isStep,\n }: GuideSectionProps) => {\n const {\n showGradientOverlay = true,\n gradientOverlayColor,\n className,\n } = dataHorizontalScroll || {};\n\n const [activeTab, setActiveTab] = useState<string>(dataGuide?.[0]?.title || \"\");\n\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={cn(dataHeading?.className)}\n />\n )}\n {dataGuide && dataGuide?.length > 0 && (\n <MediaContextProvider>\n <Media lessThan=\"md\">\n <GuideUIMobileTempOne dataGuide={dataGuide} mockup={mockup} isStep={isStep} />\n </Media>\n <Media greaterThan=\"sm\">\n {dataGuide?.length > 1 ? (\n <Tabs\n defaultValue={dataGuide[0]?.title}\n onValueChange={(value) => setActiveTab(value)}\n >\n <HorizontalScroll\n showGradientOverlay={showGradientOverlay}\n gradientOverlayColor={gradientOverlayColor}\n className={className}\n >\n <HorizontalContent className=\"mb-6 text-center\">\n <TabsList\n className={cn(\n \"mx-auto mb-0 inline-flex w-auto items-center overflow-visible\",\n isStep ? \"space-x-10\" : \"\"\n )}\n >\n {dataGuide.map((guideGroup, index) => {\n const isLast = index === dataGuide.length - 1;\n const isActive = activeTab === guideGroup?.title || \"\";\n return (\n <TabsTrigger\n key={guideGroup.title + index}\n value={guideGroup.title}\n className={cn(\n isStep\n ? \"relative h-10 border-0 bg-pink-100 px-3 first:rounded-l-md first:pl-5 last:rounded-r-md last:pl-3 last:pr-5\"\n : \"\",\n isActive && isStep\n ? \"data-[state=active]:bg-pink-500 data-[state=active]:text-white\"\n : \"\"\n )}\n >\n {isStep && index !== 0 && (\n <ArrowSVG\n direction=\"left\"\n className={cn(\n \"right-full top-0\",\n isActive ? \"text-pink-500\" : \"text-pink-100\"\n )}\n />\n )}\n {guideGroup.title}\n {isStep && !isLast && (\n <ArrowSVG\n direction=\"right\"\n className={cn(\n \"left-full top-0\",\n isActive ? \"text-pink-500\" : \"text-pink-100\"\n )}\n />\n )}\n </TabsTrigger>\n );\n })}\n </TabsList>\n </HorizontalContent>\n <HorizontalPrevious />\n <HorizontalNext />\n </HorizontalScroll>\n {dataGuide.map((guideGroup, index) => (\n <TabsContent key={guideGroup.title + index} value={guideGroup.title}>\n <GuideUIDesktopTempOne guideGroup={guideGroup} mockup={mockup} />\n </TabsContent>\n ))}\n </Tabs>\n ) : (\n dataGuide?.length === 1 &&\n dataGuide[0] && <GuideUIDesktopTempOne guideGroup={dataGuide[0]} mockup={mockup} />\n )}\n </Media>\n </MediaContextProvider>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n }\n);\n\nexport { GuideSectionTemplateOne };\n","import { useEffect, useState } from \"react\";\nimport parse from \"html-react-parser\";\nimport { motion } from \"motion/react\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { AspectRatio } from \"../AspectRatio\";\nimport {\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n type CarouselApi,\n} from \"../Carousel\";\nimport { GuideDataProps, GuideSectionProps } from \"./utils\";\n\nconst GuideUIDesktopTempOne = ({\n guideGroup,\n mockup,\n}: {\n guideGroup: GuideDataProps;\n isMultiGuide?: boolean;\n mockup: GuideSectionProps[\"mockup\"];\n}) => {\n const [api, setApi] = useState<CarouselApi>();\n const [current, setCurrent] = useState(0);\n\n const variants = {\n open: {\n height: \"auto\",\n opacity: 1,\n transition: {\n duration: 0.3,\n ease: \"easeInOut\",\n },\n },\n closed: {\n height: 0,\n opacity: 0,\n transition: {\n duration: 0.3,\n ease: \"easeInOut\",\n },\n },\n };\n\n useEffect(() => {\n if (!api) {\n return;\n }\n setCurrent(api.selectedScrollSnap() + 1);\n\n api.on(\"select\", () => {\n setCurrent(api.selectedScrollSnap() + 1);\n });\n }, [api]);\n\n return (\n <>\n {guideGroup?.stepList && guideGroup?.stepList?.length > 0 && (\n <div className=\"mx-auto flex max-w-3xl flex-nowrap justify-center\">\n <div className=\"h-auto w-64 flex-none\">\n <div\n className={cn(\n \"relative mx-auto w-full\",\n mockup === \"none\"\n ? \"\"\n : \"rounded-[2.5rem] border-8 border-gray-800 bg-gray-800 shadow-md\",\n mockup === \"small\" ? \"px-1 py-5\" : \"\"\n )}\n >\n {!(mockup === \"none\") && (\n <>\n <div className=\"absolute -start-2.5 top-16 h-8 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -start-2.5 top-32 h-12 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -start-2.5 top-48 h-12 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -end-2.5 top-40 h-16 w-1 rounded-e-lg bg-gray-800\"></div>\n </>\n )}\n\n <div\n className={cn(\n \"relative h-full w-full overflow-hidden\",\n mockup === \"none\" ? \"\" : \"rounded-[2rem] bg-gray-200\",\n mockup === \"small\" ? \"rounded-xl\" : \"\"\n )}\n >\n <Carousel setApi={setApi}>\n <CarouselContent className=\"ml-0\">\n {guideGroup?.stepList.map((step, index) => (\n <CarouselItem key={index} className=\"pl-0\">\n <AspectRatio ratio={mockup === \"small\" ? 540 / 960 : 540 / 1168}>\n {step?.image && (\n <img\n src={step.image}\n className=\"size-full object-contain\"\n alt={step.title}\n />\n )}\n </AspectRatio>\n </CarouselItem>\n ))}\n </CarouselContent>\n <CarouselPrevious className=\"left-1 border-none bg-gray-900/30 text-white hover:bg-gray-900/40 disabled:hidden\" />\n <CarouselNext className=\"right-1 border-none bg-gray-900/30 text-white hover:bg-gray-900/40 disabled:hidden\" />\n </Carousel>\n </div>\n </div>\n </div>\n <div className=\"flex flex-auto pl-12 pt-4\">\n <ul className=\"flex flex-col\">\n {guideGroup?.stepList.map((step, index) => (\n <li\n key={index}\n className={cn(\n \"relative min-h-20 pb-8 pl-14 after:absolute after:left-4 after:top-0 after:h-full after:border-l after:border-dashed after:border-gray-200 last:min-h-0 last:pb-0 last:after:hidden\",\n index + 1 === current ? \"\" : \"cursor-pointer\"\n )}\n onClick={() => api && api.scrollTo(index)}\n >\n <div\n className={cn(\n \"absolute -top-1.5 left-0 z-10 flex h-8 w-8 items-center justify-center rounded-full text-sm font-bold\",\n index + 1 === current ? \"bg-pink-500 text-white\" : \"bg-pink-100 text-pink-500\"\n )}\n >\n {index + 1}\n </div>\n <div\n className={cn(\n \" text-sm font-medium\",\n index + 1 === current ? \"text-pink-500\" : \"text-gray-900\"\n )}\n >\n {parse(step.title)}\n </div>\n {step.content && (\n <motion.div\n initial=\"closed\"\n animate={index + 1 === current ? \"open\" : \"closed\"}\n variants={variants}\n style={{ overflow: \"hidden\" }}\n >\n <div className=\"mt-3 text-sm text-gray-700\">{parse(step.content)}</div>\n </motion.div>\n )}\n </li>\n ))}\n </ul>\n </div>\n </div>\n )}\n </>\n );\n};\n\nexport default GuideUIDesktopTempOne;\n","import * as AspectRatioPrimitive from \"@radix-ui/react-aspect-ratio\"\n \nconst AspectRatio = AspectRatioPrimitive.Root\n \nexport { AspectRatio }\n","import { useEffect, useRef, useState } from \"react\";\nimport { ChevronRightIcon } from \"@heroicons/react/20/solid\";\nimport Autoplay from \"embla-carousel-autoplay\";\nimport parse from \"html-react-parser\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { AspectRatio } from \"../AspectRatio\";\nimport { Carousel, CarouselContent, CarouselItem, type CarouselApi } from \"../Carousel\";\nimport { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle } from \"../Dialog\";\nimport { TextButton } from \"../TextButton\";\nimport { GuideDataProps, GuideSectionProps, StepItemProps } from \"./utils\";\n\nconst ModalStepMobile = ({ open, setOpenDialog, dataStep, mockup }) => {\n const [current, setCurrent] = useState(0);\n const [api, setApi] = useState<CarouselApi>();\n\n useEffect(() => {\n if (!api) {\n return;\n }\n setCurrent(api.selectedScrollSnap() + 1);\n\n api.on(\"select\", () => {\n setCurrent(api.selectedScrollSnap() + 1);\n });\n }, [api]);\n\n if (!dataStep || !dataStep?.stepList?.length) return null;\n\n return (\n <Dialog open={open} onOpenChange={setOpenDialog}>\n <DialogContent position=\"bottom\" height=\"full\">\n <DialogHeader>\n <DialogTitle className=\"line-clamp-1\">{dataStep?.title}</DialogTitle>\n </DialogHeader>\n <DialogBody className=\"grid overflow-hidden p-0 \">\n <Carousel setApi={setApi} className=\" grid overflow-hidden\">\n <CarouselContent className=\"ml-0 h-full\">\n {dataStep.stepList.map((step: StepItemProps, index: number) => (\n <CarouselItem key={index} className=\"h-full w-full pl-0\">\n <div className=\"flex h-full flex-col overflow-y-auto\">\n <div className=\" relative flex w-full flex-none justify-center bg-gray-100 p-5\">\n <div className={cn(\"mx-auto\", mockup === \"small\" ? \"w-56\" : \"w-52\")}>\n <div\n className={cn(\n \"relative mx-auto w-full\",\n mockup === \"none\"\n ? \"\"\n : \"rounded-[2rem] border-8 border-gray-800 bg-gray-800 shadow-md\",\n mockup === \"small\" ? \"px-0.5 py-3\" : \"\"\n )}\n >\n {!(mockup === \"none\") && (\n <>\n <div className=\"absolute -start-2.5 top-16 h-8 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -start-2.5 top-32 h-12 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -start-2.5 top-48 h-12 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -end-2.5 top-40 h-16 w-1 rounded-e-lg bg-gray-800\"></div>\n </>\n )}\n\n <div\n className={cn(\n \"relative h-full w-full overflow-hidden\",\n mockup === \"none\" ? \"\" : \"rounded-[1.5rem] bg-gray-200\",\n mockup === \"small\" ? \"rounded-xl\" : \"\"\n )}\n >\n <AspectRatio ratio={mockup === \"small\" ? 540 / 960 : 540 / 1168}>\n {step?.image && (\n <img\n src={step.image}\n className=\"size-full object-contain\"\n alt={step.title}\n />\n )}\n </AspectRatio>\n </div>\n </div>\n </div>\n </div>\n <div className=\"p-5 pb-12\">\n <div className=\"font-semibold\">{parse(step.title)}</div>\n {step?.content && (\n <div className=\"mt-3 text-sm text-gray-800\">{parse(step.content)}</div>\n )}\n </div>\n </div>\n </CarouselItem>\n ))}\n </CarouselContent>\n </Carousel>\n <div className=\"text-muted-foreground fixed bottom-3 left-1/2 flex -translate-x-1/2 items-center justify-center gap-1.5 rounded-full bg-gray-900/50 px-3 py-1 py-2 text-center text-sm text-gray-700\">\n {dataStep.stepList.map((_, index) => (\n <div\n className={`h-2 w-2 cursor-pointer rounded-full ${index + 1 === current ? \"bg-white\" : \"bg-white/40\"}`}\n key={index}\n onClick={() => api && api.scrollTo(index)}\n ></div>\n ))}\n </div>\n </DialogBody>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst GuideUIMobileTempOne = ({\n dataGuide,\n mockup,\n isStep,\n}: {\n dataGuide: GuideDataProps[];\n isMultiGuide?: boolean;\n mockup: GuideSectionProps[\"mockup\"];\n isStep: GuideSectionProps[\"isStep\"];\n}) => {\n const [openDialog, setOpenDialog] = useState(false);\n const [dataStep, setDataStep] = useState<GuideDataProps | null>(null);\n\n const plugin = useRef(\n Autoplay({ delay: 3500, stopOnInteraction: false, stopOnMouseEnter: false })\n );\n\n const handleClickModal = (index: number) => {\n setDataStep(dataGuide?.[index] || null);\n setOpenDialog(true);\n };\n\n if (dataGuide?.length === 0) return null;\n\n return (\n <>\n {dataGuide?.length > 1 ? (\n <div className=\"-mx-5 grid grid-cols-1 md:mx-0\">\n {dataGuide.map((guideGroup, index) => (\n <div\n className=\"relative flex cursor-pointer flex-nowrap items-center space-x-4 pl-5 \"\n key={index}\n onClick={() => handleClickModal(index)}\n >\n <div className=\"borde flex h-28 w-20 justify-center overflow-hidden rounded-t-lg bg-gray-100 p-2 pb-0\">\n {(guideGroup?.avatar || guideGroup?.stepList?.[0]?.image) && (\n <img\n src={guideGroup.avatar || guideGroup?.stepList?.[0]?.image}\n className=\"h-full w-full object-cover object-top\"\n alt={guideGroup.title}\n />\n )}\n </div>\n <div\n className={cn(\n \"relative grid min-h-32 flex-1 grid-cols-1 items-center pr-8 \",\n index + 1 != dataGuide.length &&\n \"after:absolute after:bottom-0 after:left-0 after:right-0 after:h-px after:bg-gray-200\"\n )}\n >\n <div className=\"py-2\">\n {isStep && (\n <span className=\"text-sm font-medium text-pink-500\">{`Bước ${index + 1}`}</span>\n )}\n <div className=\"font-semibold\">{parse(guideGroup.title)}</div>\n {guideGroup?.description && (\n <div className=\"mt-1 text-sm text-gray-500\">\n {parse(guideGroup.description)}\n </div>\n )}\n </div>\n\n <div className=\" absolute right-4 top-1/2 -translate-y-1/2 text-gray-500\">\n <ChevronRightIcon className=\"h-6 w-6\" />\n </div>\n </div>\n </div>\n ))}\n </div>\n ) : (\n dataGuide?.[0] &&\n dataGuide[0].stepList?.length > 0 && (\n <div className=\"mx-auto flex max-w-3xl flex-col flex-wrap justify-center gap-y-6\">\n <div\n className=\"relative max-h-96 w-full flex-none overflow-hidden\"\n style={{\n WebkitMask:\n \"linear-gradient(to bottom, rgba(0, 0, 0, 1.0) 95%, rgba(0, 0, 0, 0.3) 98%, transparent 100%)\",\n }}\n >\n <div className=\"mx-auto h-auto w-72\">\n <div\n className={cn(\n \"relative mx-auto w-full\",\n mockup === \"none\"\n ? \"\"\n : \"rounded-[2.5rem] border-8 border-gray-800 bg-gray-800 shadow-md\",\n mockup === \"small\" ? \"px-1 py-5\" : \"\"\n )}\n >\n {!(mockup === \"none\") && (\n <>\n <div className=\"absolute -start-2.5 top-16 h-8 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -start-2.5 top-32 h-12 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -start-2.5 top-48 h-12 w-1.5 rounded-s-lg bg-gray-800\"></div>\n <div className=\"absolute -end-2.5 top-40 h-16 w-1 rounded-e-lg bg-gray-800\"></div>\n </>\n )}\n <div\n className={cn(\n \"relative h-full w-full overflow-hidden\",\n mockup === \"none\" ? \"\" : \"rounded-[2rem] bg-gray-200\",\n mockup === \"small\" ? \"rounded-xl\" : \"\"\n )}\n >\n <Carousel plugins={[plugin.current]}>\n <CarouselContent className=\"ml-0\">\n {dataGuide[0]?.stepList.map((step, index) => (\n <CarouselItem\n key={index}\n className=\"pl-0\"\n onClick={() => handleClickModal(0)}\n >\n <AspectRatio ratio={mockup === \"small\" ? 540 / 960 : 540 / 1168}>\n {step?.image && (\n <img\n src={step.image}\n className=\"size-full object-contain\"\n alt={step.title}\n />\n )}\n </AspectRatio>\n </CarouselItem>\n ))}\n </CarouselContent>\n </Carousel>\n </div>\n </div>\n </div>\n </div>\n <div className=\"flex w-full flex-none justify-center\">\n <TextButton size=\"lg\" variant=\"primary\" onClick={() => handleClickModal(0)}>\n Xem chi tiết hướng dẫn <ChevronRightIcon className=\"ml-1 h-5 w-5\" />\n </TextButton>\n </div>\n </div>\n )\n )}\n {openDialog && (\n <ModalStepMobile\n open={openDialog}\n setOpenDialog={setOpenDialog}\n dataStep={dataStep}\n mockup={mockup}\n />\n )}\n </>\n );\n};\n\nexport default GuideUIMobileTempOne;\n","import { cn } from \"../../helpers/utils\";\nimport { SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { GuideSectionTemplateOne } from \"./GuideSectionTemplate\";\nimport { GuideSectionProps } from \"./utils\";\n\nconst renderTemplate = ({\n template,\n dataHeading,\n dataGuide,\n dataHorizontalScroll,\n dataButtons,\n mockup,\n isStep,\n}) => {\n switch (template) {\n case 1:\n return (\n <GuideSectionTemplateOne\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll}\n dataGuide={dataGuide}\n dataButtons={dataButtons}\n mockup={mockup}\n isStep={isStep}\n />\n );\n default:\n return (\n <GuideSectionTemplateOne\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll}\n dataGuide={dataGuide}\n dataButtons={dataButtons}\n mockup={mockup}\n isStep={isStep}\n />\n );\n }\n};\n\nconst GuideSectionContent = ({\n dataHeading,\n dataHorizontalScroll,\n dataGuide,\n dataButtons,\n template,\n mockup,\n isStep,\n}) => {\n return (\n <>\n {renderTemplate({\n dataHeading,\n dataHorizontalScroll,\n dataGuide,\n dataButtons,\n template,\n mockup,\n isStep,\n })}\n </>\n );\n};\n\nconst GuideSection = ({\n idSection,\n dataHeading,\n dataGuide,\n dataHorizontalScroll,\n dataButtons,\n className,\n background,\n template = 1,\n mockup = \"default\",\n isStep = false,\n}: GuideSectionProps) => {\n return (\n <SectionBlock className={cn(className)} background={background} idSection={idSection}>\n <GuideSectionContent\n dataHeading={dataHeading}\n template={template}\n dataHorizontalScroll={dataHorizontalScroll}\n dataGuide={dataGuide}\n dataButtons={dataButtons}\n mockup={mockup}\n isStep={isStep}\n />\n </SectionBlock>\n );\n};\n\nexport { GuideSection };\n","import { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { iconButtonVariants } from \"../IconButton/IconButton\";\nimport { cn } from \"../../helpers/utils\";\n\ninterface PaginationProps {\n /**\n * Current page.\n */\n current: number;\n /**\n * Items total count.\n */\n total: number;\n /**\n * Page change callback\n */\n onChange: (page: number) => void;\n}\n\nexport default function Pagination({\n current,\n total,\n onChange,\n}: PaginationProps) {\n const getButton = (index: number) => (\n <li key={index}>\n <button\n className={cn(\n iconButtonVariants({\n variant: current === index ? \"outline\" : \"secondary\",\n size: \"sm\",\n }),\n )}\n onClick={() => onChange(index)}\n >\n {index}\n </button>\n </li>\n );\n\n return (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\")}\n >\n <ul className={cn(\"flex flex-row flex-wrap items-center gap-2\")}>\n {total > 1 && (\n <li>\n <button\n className={cn(\n iconButtonVariants({\n variant: \"secondary\",\n size: \"sm\",\n }),\n )}\n disabled={current === 1}\n onClick={() => current > 1 && onChange(current - 1)}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n </li>\n )}\n\n {total <= 6 ? (\n Array(total)\n .fill(0)\n .map((_, index) => getButton(index + 1))\n ) : (\n <>\n {getButton(1)}\n {current === 1 && [getButton(2), getButton(3)]}\n {current > 3 && (\n <li>\n <button\n className={cn(\n iconButtonVariants({\n variant: \"secondary\",\n size: \"sm\",\n }),\n )}\n disabled={current === 1}\n onClick={() => onChange(current - 3)}\n >\n ...\n </button>\n </li>\n )}\n {current > 2 &&\n current !== 1 &&\n current !== total &&\n getButton(current - 1)}\n {current > 1 && current < total && getButton(current)}\n {current < total - 1 && current !== 1 && getButton(current + 1)}\n {current === total && [getButton(total - 2), getButton(total - 1)]}\n {current < total - 2 && current !== total && (\n <button\n className={cn(\n iconButtonVariants({\n variant: \"secondary\",\n size: \"sm\",\n }),\n )}\n disabled={current === 1}\n onClick={() => onChange(current + 3)}\n >\n ...\n </button>\n )}\n {getButton(total)}\n </>\n )}\n\n {total > 1 && (\n <li>\n <button\n className={cn(\n iconButtonVariants({\n variant: \"secondary\",\n size: \"sm\",\n }),\n )}\n disabled={current === total}\n onClick={() => current < total && onChange(current + 1)}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </li>\n )}\n </ul>\n </nav>\n );\n}\n","import { forwardRef, TextareaHTMLAttributes } from \"react\";\nimport { QuestionMarkCircleIcon } from \"@heroicons/react/24/outline\";\nimport { XCircleIcon } from \"@heroicons/react/24/solid\";\n\nimport { cn } from \"../../helpers/utils\";\n\nexport interface TextAreaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string;\n message?: string;\n isError?: boolean;\n inputClassName?: string;\n size?: 1 | 2;\n}\n\nexport const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n (\n { disabled, isError, message, label, className, inputClassName, size, rows = 3, ...restProps },\n ref\n ) => {\n return (\n <div className={cn(\"relative\", className, isError && \"mobase-text-area-error\")}>\n {label && (\n <span\n className={cn(\n \"mobase-text-area-label absolute -top-2.5 left-2 z-[1] bg-white px-1.5 text-sm text-gray-500\",\n size === 2 && \" -top-2.5 text-sm\"\n )}\n >\n {label}\n </span>\n )}\n <textarea\n disabled={disabled}\n ref={ref}\n className={cn(\n \"mobase-text-area-box block w-full rounded-md border border-gray-300 bg-white p-3 text-sm text-gray-900 outline-none transition-all placeholder:text-gray-500 focus:border-pink-500 disabled:border-gray-200 disabled:bg-gray-50\",\n size === 2 && \"text-base\",\n inputClassName\n )}\n rows={rows}\n {...restProps}\n />\n {message && (\n <div className=\"mobase-text-area-message mt-0.5 flex items-center space-x-1\">\n {isError ? (\n <XCircleIcon width={16} height={16} className=\"text-red-500\" />\n ) : (\n <QuestionMarkCircleIcon width={16} height={16} className=\"text-gray-500\" />\n )}\n <span className={cn(\"text-gray-500 \", size === 2 ? \"text-sm\" : \"text-xs\")}>\n {message}\n </span>\n </div>\n )}\n\n <style>\n {`\n .mobase-text-area-box:hover {\n box-shadow: 0px 0px 0px 1px rgb(var(--mobase-gray-400) / 1) inset;\n }\n\n .mobase-text-area-box:focus, .mobase-text-area-box:focus-visible {\n box-shadow: 0px 0px 0px 1px rgb(var(--mobase-pink-500) / 1) inset;\n }\n\n .mobase-text-area-box:disabled {\n box-shadow: none;\n }\n\n .mobase-text-area-error {\n .mobase-text-area-label {\n color: rgb(var(--mobase-red-500) / 1);\n }\n\n .mobase-text-area-box {\n box-shadow: 0px 0px 0px 1px rgb(var(--mobase-red-500) / 1) inset;\n border-color: rgb(var(--mobase-red-500) / 1);\n }\n\n .mobase-text-area-message span {\n color: rgb(var(--mobase-red-500) / 1);\n }\n }\n `}\n </style>\n </div>\n );\n }\n);\n","// Inspired by react-hot-toast library\nimport * as React from \"react\";\n\nimport type { ToastActionElement, ToastProps } from \"./Toast\";\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 1000000;\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: ToastActionElement;\n};\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const;\n\nlet count = 0;\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\n\ntype ActionType = typeof actionTypes;\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"];\n toast: ToasterToast;\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"];\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n };\n\ninterface State {\n toasts: ToasterToast[];\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t,\n ),\n };\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t,\n ),\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n default:\n return state;\n }\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\nlet memoryState: State = { toasts: [] };\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n}\n\ntype Toast = Omit<ToasterToast, \"id\">;\n\nfunction toast({ ...props }: Toast) {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n });\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open: boolean) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id,\n dismiss,\n update,\n };\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState);\n\n React.useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n };\n}\n\nexport { useToast, toast };\n","import * as React from \"react\";\nimport {\n CheckCircleIcon,\n ExclamationTriangleIcon,\n InformationCircleIcon,\n XMarkIcon,\n} from \"@heroicons/react/20/solid\";\nimport * as ToastPrimitives from \"@radix-ui/react-toast\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst ToastProvider = ToastPrimitives.Provider;\n\nconst ToastViewport = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Viewport>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Viewport\n ref={ref}\n className={cn(\n \"fixed bottom-0 left-0 z-[300] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-auto sm:left-auto sm:right-0 sm:top-0 sm:flex-col md:max-w-[420px]\",\n className\n )}\n {...props}\n />\n));\nToastViewport.displayName = ToastPrimitives.Viewport.displayName;\n\nconst toastVariants = cva(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-bottom-full data-[state=open]:sm:slide-in-from-top-full shadow-medium group pointer-events-auto relative w-full overflow-hidden rounded-md border-l-4 border-gray-200 bg-white py-4 pl-10 pr-10 text-gray-900 transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none\",\n {\n variants: {\n variant: {\n success: \"border-l-green-500\",\n warning: \"border-l-yellow-500\",\n error: \"border-l-red-500\",\n },\n },\n defaultVariants: {\n variant: \"success\",\n },\n }\n);\n\nconst Toast = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> & VariantProps<typeof toastVariants>\n>(({ className, variant = \"success\", children, ...props }, ref) => {\n return (\n <ToastPrimitives.Root\n ref={ref}\n className={cn(toastVariants({ variant }), className)}\n {...props}\n >\n <div className=\"absolute left-3 top-4 flex h-5 w-5 items-center justify-center\">\n {variant === \"success\" && <CheckCircleIcon className=\"h-5 w-5 text-green-500\" />}\n {variant === \"warning\" && <ExclamationTriangleIcon className=\"h-5 w-5 text-yellow-500\" />}\n {variant === \"error\" && <InformationCircleIcon className=\"h-5 w-5 text-red-500\" />}\n </div>\n {children}\n </ToastPrimitives.Root>\n );\n});\nToast.displayName = ToastPrimitives.Root.displayName;\n\nconst ToastAction = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Action>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Action\n ref={ref}\n className={cn(\n \"ring-offset-background hover:bg-secondary focus:ring-ring mt-2 inline-flex shrink-0 items-center justify-center bg-transparent text-sm font-medium text-blue-600 transition-colors hover:underline focus:outline-none focus:ring-0 focus:ring-offset-0 disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n {...props}\n />\n));\nToastAction.displayName = ToastPrimitives.Action.displayName;\n\nconst ToastClose = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Close>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Close\n ref={ref}\n className={cn(\n \"absolute right-2 top-2 flex h-8 w-8 items-center justify-center rounded-md text-gray-800 transition-opacity hover:opacity-70 focus:opacity-100 focus:outline-none focus:ring-2\",\n className\n )}\n toast-close=\"\"\n {...props}\n >\n <XMarkIcon className=\"h-5 w-5\" />\n </ToastPrimitives.Close>\n));\nToastClose.displayName = ToastPrimitives.Close.displayName;\n\nconst ToastTitle = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Title>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Title\n ref={ref}\n className={cn(\"text-base font-semibold leading-tight\", className)}\n {...props}\n />\n));\nToastTitle.displayName = ToastPrimitives.Title.displayName;\n\nconst ToastDescription = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Description>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Description\n ref={ref}\n className={cn(\"text-sm opacity-90\", className)}\n {...props}\n />\n));\nToastDescription.displayName = ToastPrimitives.Description.displayName;\n\ntype ToastProps = React.ComponentPropsWithoutRef<typeof Toast>;\n\ntype ToastActionElement = React.ReactElement<typeof ToastAction>;\n\nexport {\n type ToastProps,\n type ToastActionElement,\n ToastProvider,\n ToastViewport,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastAction,\n};\n","\"use client\";\n\nimport {\n Toast,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n} from \"./Toast\";\nimport { useToast } from \"./useToast\";\n\nexport function Toaster() {\n const { toasts } = useToast();\n\n return (\n <ToastProvider>\n {toasts.map(function ({ id, title, description, action, ...props }) {\n return (\n <Toast key={id} {...props}>\n <div className=\"grid gap-2\">\n {title && <ToastTitle>{title}</ToastTitle>}\n {description && (\n <ToastDescription>{description}</ToastDescription>\n )}\n </div>\n {action}\n <ToastClose />\n </Toast>\n );\n })}\n <ToastViewport />\n </ToastProvider>\n );\n}\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipArrow = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Arrow>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Arrow> & {\n className?: string;\n }\n>((props, ref) => (\n <TooltipPrimitive.Arrow\n ref={ref}\n className={cn(\"drop-shadow-md\", props.className)}\n {...props}\n />\n));\nTooltipArrow.displayName = TooltipPrimitive.Arrow.displayName;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & {\n type?: \"dark\" | \"light\";\n }\n>(({ className, type = \"dark\", sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 p-1.5 shadow-md\",\n type === \"light\"\n ? \"bg-white text-gray-900 fill-white\"\n : \"bg-gray-800 fill-gray-800 text-white\",\n className,\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n TooltipArrow,\n};\n","import {\n ChangeEvent,\n FocusEvent,\n forwardRef,\n InputHTMLAttributes,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport {\n QuestionMarkCircleIcon,\n XCircleIcon,\n XCircleIcon as XCircleIconSolid,\n} from \"@heroicons/react/16/solid\";\n\nimport { cn } from \"../../helpers/utils\";\n\nexport interface TextInputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n message?: string;\n isError?: boolean;\n inputClassName?: string;\n withClearButton?: boolean;\n size?: 1 | 2;\n onClickClear?: (inputValue: string) => void;\n}\n\nexport const TextInput = forwardRef<HTMLInputElement, TextInputProps>(\n (\n {\n disabled,\n isError,\n message,\n label,\n className,\n inputClassName,\n withClearButton,\n size,\n onChange,\n onFocus,\n onClickClear,\n value,\n defaultValue,\n type = \"text\",\n ...restProps\n },\n ref\n ) => {\n const [clearable, setClearable] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n\n const handleShowClearButton = (inputValue) => {\n if (inputValue && !clearable) {\n setClearable(true);\n }\n\n if (!inputValue && clearable) {\n setClearable(false);\n }\n };\n\n const onChangeFactory = (event: ChangeEvent<HTMLInputElement>) => {\n if (withClearButton) handleShowClearButton(event.target.value);\n onChange?.(event);\n };\n\n const onFocusFactory = (event: FocusEvent<HTMLInputElement, Element>) => {\n if (withClearButton) handleShowClearButton(event.target.value);\n onFocus?.(event);\n };\n\n const handleClear = () => {\n const inputTarget = rootRef.current?.querySelector(\"input\");\n if (!inputTarget) return;\n onClickClear?.(inputTarget.value);\n\n inputTarget.value = \"\";\n inputTarget.focus();\n setClearable(false);\n };\n\n useEffect(() => {\n handleShowClearButton(defaultValue || value);\n }, [value, defaultValue]);\n\n return (\n <div className={cn(className, isError && \"mobase-text-input-error\")} ref={rootRef}>\n <div className=\"relative\">\n {label && (\n <span\n className={cn(\n \"mobase-text-input-label absolute -top-2 left-2 z-[1] bg-white px-1.5 text-xs text-gray-500\",\n size === 2 && \" -top-2.5 text-sm\"\n )}\n >\n {label}\n </span>\n )}\n <input\n disabled={disabled}\n type={type}\n ref={ref}\n className={cn(\n \"mobase-text-input-box block h-11 w-full rounded-md border border-gray-300 bg-white p-3 text-sm text-gray-900 outline-none transition-all placeholder:text-gray-500 focus:border-pink-500 disabled:pointer-events-none disabled:border-gray-200 disabled:bg-gray-50\",\n size === 2 && \"h-12 text-base\",\n inputClassName\n )}\n onChange={onChangeFactory}\n onFocus={onFocusFactory}\n value={value}\n defaultValue={defaultValue}\n {...restProps}\n />\n\n {withClearButton && clearable && (\n <button\n aria-label=\"button\"\n type=\"button\"\n className=\"absolute right-3 top-1/2 shrink-0 -translate-y-1/2 cursor-pointer text-gray-500 duration-200 hover:opacity-70 disabled:pointer-events-none\"\n disabled={disabled}\n onClick={handleClear}\n >\n <XCircleIcon strokeWidth={2} width={20} height={20} />\n </button>\n )}\n </div>\n\n {message && (\n <div className=\"mobase-text-input-message mt-0.5 flex items-center space-x-1\">\n {isError ? (\n <XCircleIconSolid width={16} height={16} className=\"text-red-500\" />\n ) : (\n <QuestionMarkCircleIcon width={16} height={16} className=\"text-gray-500\" />\n )}\n <span className={cn(\"text-gray-500 \", size === 2 ? \"text-sm\" : \"text-xs\")}>\n {message}\n </span>\n </div>\n )}\n\n <style>\n {`\n .mobase-text-input-box:hover {\n box-shadow: 0px 0px 0px 1px rgb(var(--mobase-gray-400) / 1) inset;\n }\n\n .mobase-text-input-box:focus , .mobase-text-input-box:focus-visible {\n box-shadow: 0px 0px 0px 1px rgb(var(--mobase-pink-500) / 1) inset;\n }\n\n .mobase-text-input-error {\n .mobase-text-input-label {\n color: rgb(var(--mobase-red-500) / 1);\n }\n\n .mobase-text-input-box {\n box-shadow: 0px 0px 0px 1px rgb(var(--mobase-red-500) / 1) inset;\n border-color: rgb(var(--mobase-red-500) / 1);\n }\n\n .mobase-text-input-message span {\n color: rgb(var(--mobase-red-500) / 1);\n }\n }\n `}\n </style>\n </div>\n );\n }\n);\n","import { MinusCircleIcon, PlusCircleIcon } from \"@heroicons/react/24/outline\";\nimport { IconButton } from \"../IconButton\";\nimport {\n ChangeEvent,\n forwardRef,\n InputHTMLAttributes,\n useState,\n} from \"react\";\nimport { cn } from \"../../helpers/utils\";\n\n\nexport interface StepperProps extends InputHTMLAttributes<HTMLInputElement> {\n min?: number;\n max?: number;\n step?: number;\n defaultValue?: number;\n onChangeValue?: (value: number) => void;\n onDecrease?: (value: number) => void;\n onIncrease?: (value: number) => void;\n disabled?: boolean;\n}\n\nexport const Stepper = forwardRef<HTMLDivElement, StepperProps>(\n (\n {\n className, \n min = 0, \n max = 10, \n step = 1, \n defaultValue = 0, \n onChangeValue, \n onDecrease, \n onIncrease, \n disabled = false, \n ...props }\n , ref\n ) => {\n const [value, setValue] = useState(defaultValue)\n\n const increment = () => {\n const newValue = Math.min(value + step, max)\n setValue(newValue)\n onChangeValue?.(newValue)\n onIncrease?.(newValue)\n }\n const decrement = () => {\n const newValue = Math.max(value - step, min)\n setValue(newValue)\n onChangeValue?.(newValue)\n onDecrease?.(newValue)\n }\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n const inputValue = parseFloat(e.target.value)\n if (!isNaN(inputValue)) {\n const newValue = Math.max(Math.min(inputValue, max), min)\n setValue(newValue)\n onChangeValue?.(newValue)\n }\n }\n\n return (\n <div\n ref={ref}\n className={cn(\"flex items-center \", className)}\n >\n <IconButton\n className={cn(\" text-pink-500 cursor-pointer w-9 h-9\",\n disabled && \"text-gray-400 cursor-default\"\n )}\n variant=\"transparent\"\n onClick={decrement}\n disabled={disabled || value <= min}\n >\n <MinusCircleIcon className=\"w-7 h-7 \" />\n <span className=\"sr-only\">Decrease value</span>\n </IconButton>\n\n <input\n type=\"number\"\n value={value}\n onChange={handleInputChange}\n className=\"flex text-center min-w-8 w-8 h-8 border-0 bg-white text-base text-gray-900 ring-offset-none placeholder:text-gray-500 font-medium focus-visible:outline-none focus-visible:ring-0 focus:ring-0 shadow-none focus-visible:ring-offset-0 shadow-none disabled:cursor-not-allowed disabled:opacity-50 [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none\"\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n {...props}\n />\n\n <IconButton\n className={cn(\" text-pink-500 cursor-pointer w-9 h-9\",\n disabled && \"text-gray-400 cursor-default\"\n )}\n variant=\"transparent\"\n onClick={increment}\n disabled={disabled || value >= max}\n >\n <PlusCircleIcon className=\"w-7 h-7 \" />\n <span className=\"sr-only\">Increase value</span>\n </IconButton>\n </div>\n )\n\n })\n\nStepper.displayName = \"Stepper\"","// import { buttonVariants } from \"../Button/Button\";\nimport { cn } from \"../../helpers/utils\";\nimport * as React from \"react\"\nimport * as NavigationMenuPrimitive from \"@radix-ui/react-navigation-menu\"\nimport { cva } from \"class-variance-authority\"\nimport { ChevronDownIcon } from \"@heroicons/react/16/solid\";\nimport { buttonVariants } from \"../Button/Button\";\n\ntype AlignDropdown = \"left\" | \"right\" | \"center\";\ninterface NavigationMenuProviderProps {\n value: { alignDropdown?: AlignDropdown };\n children: React.ReactNode;\n}\n\nconst NavigationMenuContext = React.createContext<null | { alignDropdown?: AlignDropdown }>(null);\n\nconst NavigationMenuProvider: React.FC<NavigationMenuProviderProps> = ({ value, children }) => {\n return (\n <NavigationMenuContext.Provider value={value}>\n {children}\n </NavigationMenuContext.Provider>\n );\n};\n\nconst useNavigationMenu = (): { alignDropdown?: AlignDropdown } => {\n const context = React.useContext(NavigationMenuContext);\n if (!context) {\n throw new Error(\n \"useNavigationMenu must be used within a NavigationMenuProvider\"\n );\n }\n return context;\n};\n\nconst NavigationMenu = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Root> & {\n alignDropdown?: AlignDropdown;\n }\n>(({ className, children, alignDropdown = \"left\", ...props }, ref) => (\n <NavigationMenuProvider value={{ alignDropdown }}>\n <NavigationMenuPrimitive.Root\n ref={ref}\n className={cn(\n \"relative z-10 flex max-w-max flex-1 items-center justify-center\",\n className\n )}\n {...props}\n >\n {children}\n {/* <NavigationMenuViewport /> */}\n </NavigationMenuPrimitive.Root>\n </NavigationMenuProvider>\n))\nNavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName\n\nconst NavigationMenuList = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.List>\n>(({ className, ...props }, ref) => (\n <NavigationMenuPrimitive.List\n ref={ref}\n className={cn(\n \"group flex flex-1 list-none items-center justify-center space-x-0\",\n className\n )}\n {...props}\n />\n))\nNavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName\n\nconst NavigationMenuItem = NavigationMenuPrimitive.Item\n\nconst navigationMenuTriggerStyle = cva(\n buttonVariants({\n variant: \"transparent\",\n size: \"sm\",\n })\n)\n\nconst NavigationMenuTrigger = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <NavigationMenuPrimitive.Trigger\n ref={ref}\n className={cn(navigationMenuTriggerStyle(), \"group px-2\", className)}\n {...props}\n >\n {children}{\" \"}\n <ChevronDownIcon\n className=\"relative ml-1 h-4 w-4 transition duration-300 group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n))\nNavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName\n\nconst NavigationMenuContent = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content>\n>(({ className, ...props }, ref) => {\n const { alignDropdown } = useNavigationMenu();\n return (<NavigationMenuPrimitive.Content\n ref={ref}\n className={cn(\n \"absolute top-full mt-3 rounded-lg bg-white text-gray-900 ring-1 ring-gray-900/5 shadow-[0_10px_32px_rgba(34,42,53,0.15),0_1px_1px_rgba(0,0,0,0.05),0_4px_6px_rgba(34,42,53,0.08),0_1px_1px_rgba(34,42,53,0.1),0_24px_68px_rgba(47,48,55,0.1)]\",\n className, \"before:content-[''] before:absolute before:-top-3 before:left-0 before:right-0 before:w-full before:bg-transparent before:opacity-0 before:h-3\", alignDropdown !== 'center' && \"data-[state=open]:animate-in data-[state=open]:fade-in data-[state=open]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out \", \n alignDropdown === 'left' && \"left-0\",\n alignDropdown === 'right' && \"right-0\",\n alignDropdown === 'center' && \" left-1/2 -translate-x-1/2 \"\n )}\n\n {...props}\n />)\n})\nNavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName\n\nconst NavigationMenuLink = NavigationMenuPrimitive.Link\n\nconst NavigationMenuViewport = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Viewport>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Viewport>\n>(({ className, ...props }, ref) => (\n <div className={cn(\"absolute left-0 top-full flex justify-center\")}>\n <NavigationMenuPrimitive.Viewport\n className={cn(\n \"origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]\",\n className\n )}\n ref={ref}\n {...props}\n />\n </div>\n))\nNavigationMenuViewport.displayName =\n NavigationMenuPrimitive.Viewport.displayName\n\nconst NavigationMenuIndicator = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Indicator>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Indicator>\n>(({ className, ...props }, ref) => (\n <NavigationMenuPrimitive.Indicator\n ref={ref}\n className={cn(\n \"top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in\",\n className\n )}\n {...props}\n >\n <div className=\"relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md\" />\n </NavigationMenuPrimitive.Indicator>\n))\nNavigationMenuIndicator.displayName =\n NavigationMenuPrimitive.Indicator.displayName\n\n\nexport {\n navigationMenuTriggerStyle,\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n}\n","import * as React from \"react\";\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-5 w-10 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-default disabled:opacity-20 data-[state=checked]:bg-pink-500 data-[state=unchecked]:bg-gray-400\",\n className,\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n \"pointer-events-none relative cik before:content-[''] before:absolute before:w-1.5 before:h-1.5 before:rounded-full before:bg-pink-600 before:-translate-x-1/2 before:translate-y-1 disabled:opacity-20 before:data-[state=unchecked]:bg-gray-400 block h-3.5 w-3.5 bg-white rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0.5\",\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","import * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { Circle } from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../helpers/utils\";\n\nconst radioVariants = cva(\n \"aspect-square rounded-full border-2 border-gray-300 disabled:bg-gray-100 disabled:data-[state=checked]:text-gray-100 data-[state=checked]:text-white disabled:data-[state=checked]:bg-gray-400 data-[state=checked]:bg-pink-500 data-[state=checked]:border-none ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-default peer\",\n {\n variants: {\n size: {\n medium: \"h-4 w-4\",\n large: \"w-5 h-5\",\n },\n },\n defaultVariants: {\n size: \"medium\",\n },\n }\n);\n\nconst radioCircleVariants = cva(\"fill-current text-current\", {\n variants: {\n size: {\n medium: \"h-2 w-2 \",\n large: \"w-2.5 h-2.5\",\n },\n },\n defaultVariants: {\n size: \"medium\",\n },\n});\n\nconst RadioGroupContext = React.createContext<\n VariantProps<typeof radioVariants>\n>({\n size: \"medium\",\n});\n\nexport function useChoiceboxGroupContext() {\n const context = React.useContext(RadioGroupContext);\n\n if (!context) {\n throw new Error(\n \"ChoiceboxGroup.Item must be used within a ChoiceboxGroup \"\n );\n }\n return context;\n}\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> &\n VariantProps<typeof radioVariants>\n>(({ className, size, ...props }, ref) => {\n return (\n <RadioGroupContext.Provider value={{ size }}>\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n </RadioGroupContext.Provider>\n );\n});\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n const context = useChoiceboxGroupContext();\n const { size } = context ?? {};\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(radioVariants({ size }), className)}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center w-full h-full rounded-full \">\n <Circle className={cn(radioCircleVariants({ size }))} />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n});\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n","import { ReactElement, useState } from \"react\";\nimport { ArrowDownTrayIcon } from \"@heroicons/react/16/solid\";\nimport parse from \"html-react-parser\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { Button } from \"../Button\";\nimport { DialogQr } from \"../DialogQr\";\nimport MobileMenu from \"./MobileMenu\";\nimport NavItems from \"./NavItems\";\n\ninterface ComponentData {\n title: string;\n icon: string;\n url: string;\n description: string;\n newTab: boolean;\n}\n\ninterface MainNavItemWithDropdown {\n id: number;\n title: string;\n hasDropdown: boolean;\n dropDownCompact: boolean;\n subMenu: ComponentData[];\n}\n\ninterface MainNavItemWithoutDropdown {\n id: number;\n title: string;\n hasDropdown: boolean;\n url: string;\n newTab: boolean;\n}\n\ntype MainNavItem = MainNavItemWithDropdown | MainNavItemWithoutDropdown;\n\ninterface ServiceInfo {\n logo?: string;\n name?: string;\n url: string;\n}\nexport interface HeaderNavigationProps {\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * Data menu\n */\n dataMenu: MainNavItem[];\n /**\n * Service info\n */\n serviceInfo?: ServiceInfo;\n /**\n * Right Navigation\n */\n navigationRight?: ReactElement;\n /**\n * Has Download App\n */\n hasDownloadApp?: Boolean;\n /**\n * Has sticky Navigation Header, default is true\n */\n isSticky?: Boolean;\n /**\n * Align dropdown menu position\n */\n alignDropdown?: \"left\" | \"right\" | \"center\";\n /**\n * Logo visible\n * @default true\n */\n isLogoVisible?: Boolean;\n}\n\nconst HeaderNavigation = ({\n className,\n dataMenu,\n serviceInfo,\n hasDownloadApp = false,\n navigationRight,\n isSticky = true,\n alignDropdown = \"left\",\n isLogoVisible = true,\n}: HeaderNavigationProps) => {\n const { logo, name, url } = serviceInfo || {};\n const [openDialogQr, setOpenDialogQr] = useState<boolean>(false);\n return (\n <div\n className={cn(\n className,\n \"z-40 w-full flex-none lg:z-50 \",\n isSticky ? \"sticky top-0 \" : \"relative\"\n )}\n >\n <div\n className={cn(\n \"absolute h-full w-full bg-white shadow-[inset_0px_-1px_0px_0px_rgba(0,0,0,0.08)]\"\n )}\n />\n <nav\n className={cn(\n \"wrapper grid grid-cols-1 items-center [--header-height-mobase:64px] lg:border-0 \"\n )}\n style={{ minHeight: \"var(--header-height-mobase)\" }}\n >\n <div className=\"relative flex items-center \">\n {isLogoVisible && ( <a\n href=\"/\"\n title=\"MoMo\"\n className=\"mr-3 h-9 w-9 flex-none overflow-hidden rounded-none hover:opacity-80\"\n >\n <span className=\"sr-only\">MoMo home page</span>\n <img\n src=\"https://homepage.momocdn.net/fileuploads/svg/momo-file-240411162904.svg\"\n className=\"h-9 w-9\"\n alt=\"MoMo\"\n />\n </a>)}\n \n {serviceInfo && (\n <a\n href={url}\n title={name}\n className={cn(\"relative flex flex-none items-center space-x-1 rounded-none hover:opacity-80\", isLogoVisible && \"pl-2 after:absolute after:left-0 after:h-8 after:w-[1px] after:bg-gray-300 after:content-['']\")}\n >\n <img src={logo} className=\"h-9 w-9\" alt=\"MoMo\" />\n\n <div className=\"line-clamp-2 text-sm font-semibold leading-[1.1] text-pink-500\">\n {name && parse(name)}\n </div>\n </a>\n )}\n\n <div\n className={cn(\n \"relative hidden items-center lg:ml-2 lg:flex xl:ml-4 \",\n !navigationRight && !hasDownloadApp && \" lg:ml-auto xl:ml-auto\"\n )}\n >\n <NavItems data={dataMenu} alignDropdown={alignDropdown} />\n </div>\n <div\n className={cn(\n \"ml-auto flex flex-nowrap items-center space-x-3\",\n !navigationRight && !hasDownloadApp && \" lg:ml-0\"\n )}\n >\n {navigationRight && navigationRight}\n {hasDownloadApp && (\n <div className=\" hidden sm:flex\">\n <Button\n variant={\"primary\"}\n size={\"sm\"}\n className=\"tracking-cta-header\"\n onClick={() => setOpenDialogQr(true)}\n >\n {\" \"}\n <ArrowDownTrayIcon className=\"mr-1 h-4 w-4\" /> Tải Ví MoMo\n </Button>\n <DialogQr\n open={openDialogQr}\n onOpenChange={() => setOpenDialogQr(false)}\n title=\"Quét mã để tải Ví MoMo\"\n shortTitle=\"Tải ngay\"\n qrLink={\"http://momo.vn/download\"}\n />\n </div>\n )}\n <MobileMenu data={dataMenu} className=\"lg:hidden \" />\n </div>\n </div>\n </nav>\n </div>\n );\n};\nHeaderNavigation.displayName = \"HeaderNavigation\";\n\nexport { HeaderNavigation };\n","import { useEffect, useState } from \"react\";\nimport Router from \"next/router\";\nimport { AnimatePresence, domAnimation, LazyMotion, motion } from \"motion/react\";\nimport { useKey } from \"react-use\";\n\nimport { DEFAULT_EASE } from \"../../helpers/animations\";\nimport { MoMoText } from \"../../helpers/constants\";\nimport { cn } from \"../../helpers/utils\";\nimport NavItemsMobile from \"./NavItemsMobile\";\n\ninterface Props {\n data: any;\n className?: string;\n}\n\nconst computeInsetTop = () =>\n typeof window !== \"undefined\" && window.pageYOffset !== undefined ? window.pageYOffset : 0;\n\nconst MobileMenu = ({ data, className }: Props) => {\n // useKey(\"Escape\", () => setOpen(false));\n const [isOpen, setIsOpen] = useState(false);\n const [isHashChange, setIsHashChange] = useState(false);\n\n useKey(\"Escape\", () => setIsOpen(false));\n\n useEffect(() => {\n if (!isOpen) return;\n const memoizedInsetTop = computeInsetTop();\n function handleRouteChange() {\n setIsOpen(false);\n }\n\n function handleHashChange() {\n setIsOpen(false);\n setIsHashChange(true);\n }\n function handleHashClick(e) {\n const target = e.target as HTMLElement;\n if (target.tagName === \"A\" && target.getAttribute(\"href\")?.startsWith(\"#\")) {\n setIsOpen(false);\n setIsHashChange(true);\n }\n }\n\n document.body.style.position = \"fixed\";\n document.body.style.width = \"100%\";\n Router.events.on(\"routeChangeComplete\", handleRouteChange);\n //Check if url is Hashtag, mean browser not reload page\n window.addEventListener(\"hashchange\", handleHashChange);\n window.addEventListener(\"click\", handleHashClick);\n return () => {\n if (!isHashChange) {\n document.body.style.position = \"\";\n document.body.style.width = \"\";\n window.scrollTo({\n top: memoizedInsetTop || 0,\n behavior: \"instant\",\n });\n }\n setIsHashChange(false);\n Router.events.off(\"routeChangeComplete\", handleRouteChange);\n window.removeEventListener(\"hashchange\", handleHashChange);\n window.removeEventListener(\"click\", handleHashClick);\n };\n }, [isOpen]);\n\n const variants = {\n visible: { opacity: 1, transition: { duration: 0.2 } },\n hidden: { opacity: 0, transition: { duration: 0.2 } },\n };\n\n const containerVariants = {\n hidden: { opacity: 0 },\n show: {\n opacity: 1,\n transition: {\n duration: 0.15,\n staggerChildren: 0.05,\n ease: DEFAULT_EASE,\n },\n },\n exit: { opacity: 0, transition: { duration: 0.15 } },\n };\n\n return (\n <div className={cn(className)}>\n <button\n type=\"button\"\n className=\"mobase-header-hamburger flex h-10 w-10 items-center justify-center text-gray-800 hover:text-gray-700 \"\n onClick={() => setIsOpen(!isOpen)}\n >\n <span className=\"sr-only\">Navigation</span>\n <motion.div animate={isOpen ? \"hidden\" : \"visible\"} variants={variants}>\n <svg\n className={cn(\"block h-7 w-7\", isOpen && \"hidden\")}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M4 6h16M4 12h16M4 18h16\"\n />\n </svg>\n </motion.div>\n <motion.div animate={isOpen ? \"visible\" : \"hidden\"} variants={variants}>\n <svg\n className={cn(\"block h-7 w-7\", !isOpen && \"hidden\")}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </motion.div>\n </button>\n\n <LazyMotion features={domAnimation}>\n <AnimatePresence mode=\"wait\">\n {isOpen && (\n <motion.nav\n variants={containerVariants}\n initial=\"hidden\"\n animate=\"show\"\n exit=\"exit\"\n className={cn(\n className,\n \"fixed bottom-0 left-0 right-0 top-[calc(var(--header-height-mobase)+1px)] z-50 block w-full max-w-full overflow-y-auto bg-white px-5 pb-24 \"\n )}\n >\n <NavItemsMobile data={data} />\n\n <div className=\"animate-fade-in mobase-header-mobile-support py-4 text-sm delay-300 duration-500\">\n <h4 className=\"mb-2 mt-5 text-sm font-semibold text-gray-700 \">TẢI VÀ ĐĂNG KÝ</h4>\n\n <div className=\"flex flex-nowrap\">\n <div className=\"flex-initial\">\n <a\n className=\"link-white\"\n target=\"_blank\"\n href=\"https://itunes.apple.com/vn/app/id918751511?utm_source=website-momo&utm_medium=download&utm_campaign=momo-1dong\"\n >\n <img\n src=\"https://homepage.momocdn.net/img/momo-upload-api-210724113855-637627235353131497.jpg\"\n width={130}\n loading=\"lazy\"\n className=\"img-fluid\"\n alt=\"\"\n />\n </a>\n </div>\n <div className=\"ml-3 flex-initial\">\n <a\n href=\"https://play.google.com/store/apps/details?id=com.mservice.momotransfer&utm_source=website-momo&utm_medium=download&utm_campaign=momo-1dong\"\n className=\"link-white\"\n target=\"_blank\"\n >\n <img\n src=\"https://homepage.momocdn.net/img/momo-upload-api-210724113959-637627235994410679.jpg\"\n width={130}\n loading=\"lazy\"\n className=\"img-fluid\"\n alt=\"\"\n />\n </a>\n </div>\n </div>\n\n <h4 className=\"mb-2 mt-5 text-sm font-semibold text-gray-700\">HỖ TRỢ KHÁCH HÀNG</h4>\n\n <ul className=\"mb-2 text-sm text-gray-500\">\n <li className=\"mb-1\">\n Hotline : \n <a href={`tel:${MoMoText.Support.Hotline}`} className=\"text-gray-600\">\n {MoMoText.Support.Hotline_Format}\n </a>\n </li>\n <li className=\"mb-1\">\n Email : \n <a href={`mailto:${MoMoText.Support.Email}`} className=\"text-gray-600\">\n {MoMoText.Support.Email}\n </a>\n </li>\n </ul>\n <a\n href=\"https://www.momo.vn/huong-dan/huong-dan-gui-yeu-cau-ho-tro-bang-tinh-nang-tro-giup\"\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n <div className=\"relative inline-block overflow-hidden rounded border border-gray-300 bg-white py-1 pl-10 pr-2 hover:bg-gray-100\">\n <div className=\"absolute left-1 top-1 \" style={{ paddingTop: \"3px\" }}>\n <svg\n className=\"h-7 w-7 text-pink-700 \"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n viewBox=\"0 0 345.1 512\"\n >\n <g>\n <title>Asset 1</title>\n <path\n d=\"M279.4,23.7H30.8C14.5,23.7,0,38.2,0,56.3v401.8c0,16.3,14.5,30.8,30.8,30.8H76h23.8L76,449.4H34.5V96.2h243.1v152l34.5,22\n V56.3C312,38.2,297.5,23.7,279.4,23.7z M226.8,77.1H86.1c-8.1,0-13.5-5.4-13.5-13.5c0-8.1,5.4-13.5,13.5-13.5h140.8\n c5.4,0,10.8,5.4,10.8,13.5C237.7,71.7,232.3,77.1,226.8,77.1z\"\n />\n <path\n d=\"M189.4,200.7c-14.4,0-25.9,11.6-25.9,25.9v155.7l-17.3-34.6c-14.2-26.3-28.1-23.6-38.9-17.3c-12.5,8.3-17.2,17-8.6,38.9\n c19.6,48.2,49.8,105.6,82.2,142.7h116.7c41-30.4,74-175,17.3-181.6c-5.2,0-13.5,0.8-17.3,4.3c0-17.3-15.1-21.7-21.6-21.6\n c-7.5,0.1-13,4.3-17.3,13c0-17.3-14.1-21.6-21.6-21.6c-8.3,0-17.9,5.2-21.6,13v-90.8C215.4,212.3,203.8,200.7,189.4,200.7z\"\n />\n </g>\n </svg>\n </div>\n <div className=\"text-xs text-gray-500 \">Hướng dẫn trợ giúp trên</div>\n <div className=\"text-sm font-semibold text-gray-800\">Ứng dụng Ví MoMo</div>\n </div>\n </a>\n <h4 className=\"mb-2 mt-5 text-sm font-semibold text-gray-700\">\n HỢP TÁC DOANH NGHIỆP\n </h4>\n\n <ul className=\"mb-2 text-sm text-gray-500\">\n <li className=\"mb-1\">\n Hotline : \n <a className=\"text-gray-600\" href={`tel:${MoMoText.Business.Phome}`}>\n {MoMoText.Business.Phome_Format}\n </a>\n </li>\n <li className=\"mb-1\">\n Email : \n <a href={`mailto:${MoMoText.Business.Email}`} className=\"text-gray-600\">\n {\" \"}\n {MoMoText.Business.Email}\n </a>\n </li>\n </ul>\n\n <a href=\"https://business.momo.vn/#menutop\" rel=\"noreferrer\" target=\"_blank\">\n <div className=\"relative inline-block overflow-hidden rounded border border-gray-300 bg-white py-1 pl-12 pr-2 hover:bg-gray-100\">\n <div className=\"absolute left-1 top-1 \">\n <img\n src=\"https://homepage.momocdn.net/fileuploads/svg/momo-file-210724114053.svg\"\n className=\"w-10\"\n loading=\"lazy\"\n alt=\"\"\n />\n </div>\n <div className=\"text-xs text-gray-500 \">Hợp tác doanh nghiệp</div>\n <div className=\"text-sm font-semibold text-gray-800\">Đăng ký hợp tác</div>\n </div>\n </a>\n </div>\n\n {/* <div className=\"fixed inset-x-0 bottom-0 grid grid-cols-1 gap-x-5 px-4 py-6 bg-white\">\n <a\n className={cn(\"w-full tracking-cta-header\",\n buttonVariants({ variant: \"primary\", size: \"lg\" })\n )}\n target=\"_blank\"\n href=\"http://momo.vn/download\"\n >\n <ArrowDownTrayIcon className=\"mr-1 w-4 h-4\" /> Tải Ví MoMo\n </a>\n </div> */}\n </motion.nav>\n )}\n </AnimatePresence>\n </LazyMotion>\n </div>\n );\n};\n\nexport default MobileMenu;\n","export const DEFAULT_EASE = [0.24, 0.25, 0.05, 1]\nexport const DEFAULT_DURATION = 0.4\nexport const DEFAULT_DELAY = 0\nexport const DEFAULT_TRANSITION = { ease: DEFAULT_EASE, duration: DEFAULT_DURATION }\n\ninterface AnimationProps {\n delay?: number\n duration?: number\n ease?: number\n}\n\nexport const INITIAL_BOTTOM = { opacity: 0, y: 20 }\nexport const getAnimation = ({ delay, duration, ease }: AnimationProps) => ({\n opacity: 1,\n y: 0,\n transition: {\n delay: delay ?? DEFAULT_DELAY,\n ease: ease ?? DEFAULT_EASE,\n duration: duration ?? DEFAULT_DURATION,\n },\n})\n","import { motion } from \"motion/react\";\n\nimport { DEFAULT_EASE } from \"../../helpers/animations\";\nimport { cn } from \"../../helpers/utils\";\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from \"../Accordion/index\";\nimport ListItemMobile from \"./ListItemMobile\";\n\nconst listItem = {\n hidden: { opacity: 0, y: 10 },\n show: {\n opacity: 1,\n y: 0,\n transition: { duration: 0.25, ease: DEFAULT_EASE },\n },\n exit: { opacity: 0, transition: { duration: 0.05 } },\n};\n\nconst NavItemsMobile = ({ data }: any) => {\n return (\n <Accordion type=\"single\" collapsible>\n {data.map((menuItem) => {\n const linkProps = menuItem.newTab ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {};\n return (\n <motion.div key={menuItem.id} variants={listItem}>\n {menuItem.hasDropdown ? (\n <AccordionItem value={menuItem.id}>\n <AccordionTrigger className=\"py-3\">{menuItem.title}</AccordionTrigger>\n <AccordionContent>\n <ul className={cn(\"grid grid-cols-2 gap-x-2 gap-y-1 \")}>\n {menuItem.subMenu &&\n menuItem.subMenu.map((component) => (\n <ListItemMobile\n key={component.title}\n title={component.title}\n href={component.url}\n newTab={component.newTab}\n icon={menuItem.dropDownCompact === true ? component.icon : \"\"}\n >\n {menuItem.dropDownCompact === true ? component.description : \"\"}\n </ListItemMobile>\n ))}\n </ul>\n </AccordionContent>\n </AccordionItem>\n ) : (\n <a\n className=\"flex flex-1 items-center justify-between border-b border-gray-200 py-3 text-left font-medium text-gray-900 transition-all hover:underline\"\n href={menuItem.url}\n {...linkProps}\n >\n {menuItem.title}\n </a>\n )}\n </motion.div>\n );\n })}\n </Accordion>\n );\n};\n\nexport default NavItemsMobile;\n","import { cn } from \"../../helpers/utils\";\n\nconst ListItemMobile = ({\n className = \"\",\n icon = \"\",\n title,\n children = \"\",\n href = \"\",\n newTab = false,\n}) => {\n const linkProps = newTab\n ? { target: \"_blank\", rel: \"noopener noreferrer\" }\n : {};\n return (\n <li className=\"min-h-8\">\n <a\n className={cn(\n \" select-none py-2 flex flex-nowrap space-x-1 items-center text\",\n className,\n )}\n href={href}\n {...linkProps}\n >\n {icon && (\n <div className=\"w-6 h-6 shrink-0\">\n <img\n src={icon}\n loading=\"lazy\"\n className=\"w-6 h-6 object-cover\"\n alt={title}\n />\n </div>\n )}\n\n <div className=\" \">\n <div className=\"text-sm text-gray-800 line-clamp-1\">{title}</div>\n {children && (\n <p className=\"line-clamp-1 text-xs mt-0 text-gray-500\">\n {children}\n </p>\n )}\n </div>\n </a>\n </li>\n );\n};\n\nexport default ListItemMobile;\n","import { cn } from \"../../helpers/utils\";\n\nimport { NavigationMenuLink } from \"../NavigationMenu/index\";\n\nconst ListItem = ({\n className = \"\",\n icon = \"\",\n title,\n children = \"\",\n href = \"\",\n newTab = false,\n}) => {\n const linkProps = newTab\n ? { target: \"_blank\", rel: \"noopener noreferrer\" }\n : {};\n return (\n <li className=\"\">\n <NavigationMenuLink asChild>\n <a\n className={cn(\n \" select-none space-y-1 rounded-md px-2 py-2 leading-none no-underline outline-none transition-colors hover:bg-pink-50 hover:text-pink-500 focus:bg-pink-50 focus:text-pink-500 flex flex-nowrap space-x-2 min-h-9 \",\n className,\n !icon && \"items-center px-3\"\n )}\n href={href}\n {...linkProps}\n >\n {icon && (\n <div className=\"w-7 h-7 shrink-0 mt-1\">\n <img\n src={icon}\n loading=\"lazy\"\n className=\"w-7 h-7 object-cover\"\n alt={title}\n />\n </div>\n )}\n\n <div className=\" \">\n <div className=\"text-sm font-medium text-gray-900 leading-none\">\n {title}\n </div>\n {children && (\n <p className=\"line-clamp-2 text-xs mt-1 text-gray-500\">\n {children}\n </p>\n )}\n </div>\n </a>\n </NavigationMenuLink>\n </li>\n );\n};\n\nexport default ListItem;\n","import { cn } from \"../../helpers/utils\";\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n} from \"../NavigationMenu/index\";\nimport ListItem from \"./ListItem\";\n\nconst NavItems = ({ data, alignDropdown }: any) => {\n return (\n <NavigationMenu alignDropdown={alignDropdown}>\n <NavigationMenuList>\n {data.map((menuItem) => {\n const linkProps = menuItem.newTab ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {};\n return menuItem.hasDropdown ? (\n <NavigationMenuItem className=\"relative\" key={menuItem.id}>\n <NavigationMenuTrigger>{menuItem.title}</NavigationMenuTrigger>\n <NavigationMenuContent>\n <ul\n className={cn(\n \"grid w-[300px] grid-cols-1 p-2\",\n menuItem.dropDownCompact === false && \"w-[230px]\",\n menuItem.dropDownCompact === false &&\n menuItem.subMenu.length > 10 &&\n \" w-[480px] md:grid-cols-2 \",\n menuItem.dropDownCompact === false &&\n menuItem.subMenu.length > 20 &&\n \" w-[700px] md:grid-cols-3 \",\n menuItem.dropDownCompact === true &&\n menuItem.subMenu.length > 6 &&\n \" w-[530px] md:grid-cols-2 \",\n menuItem.dropDownCompact === true &&\n menuItem.subMenu.length > 12 &&\n \" w-[800px] md:grid-cols-3 \"\n )}\n >\n {menuItem.subMenu &&\n menuItem.subMenu.map((component) => (\n <ListItem\n key={component.title}\n title={component.title}\n href={component.url}\n newTab={component.newTab}\n icon={menuItem.dropDownCompact === true ? component.icon : \"\"}\n >\n {menuItem.dropDownCompact === true ? component.description : \"\"}\n </ListItem>\n ))}\n </ul>\n </NavigationMenuContent>\n </NavigationMenuItem>\n ) : (\n <NavigationMenuItem className=\"relative\" key={menuItem.id}>\n <NavigationMenuLink\n href={menuItem.url}\n className={navigationMenuTriggerStyle()}\n {...linkProps}\n >\n {menuItem.title}\n </NavigationMenuLink>\n </NavigationMenuItem>\n );\n })}\n </NavigationMenuList>\n </NavigationMenu>\n );\n};\n\nexport default NavItems;\n","import { useState } from \"react\";\n\nimport { APP_DOWNLOAD, MOMO_TEXT, SOCIAL_ITEMS, SUPPORT } from \"../../helpers/constants\";\nimport { Button } from \"../Button\";\nimport { DialogQr } from \"../DialogQr\";\n\nconst FooterContentItem = ({ item }) => {\n return (\n <div className=\"mt-3 flex w-full text-sm\">\n <a\n href={item.url}\n target={item.newTab ? \"_blank\" : \"_self\"}\n rel=\"noreferrer\"\n className=\"flex items-center space-x-2 text-white text-opacity-50 duration-300 hover:text-opacity-100\"\n >\n {item.icon && (\n <span className=\"relative h-5 w-5 flex-none md:h-6 md:w-6\">\n <img src={item.icon} className=\"absolute inset-0\" />\n </span>\n )}\n\n <span className=\"block \">{item.title}</span>\n </a>\n </div>\n );\n};\n\nconst FooterContent = ({ primaryMenu, secondaryMenu }) => {\n const [openDialogQr, setOpenDialogQr] = useState<number | null>(null);\n return (\n <>\n <div className=\"footer-main order-1 py-7 text-sm text-white md:order-1\">\n <div className=\"wrapper grid grid-cols-2 gap-5 sm:gap-x-20 sm:gap-y-10 lg:flex lg:flex-nowrap lg:gap-14\">\n <div className=\"block grow md:w-44 md:shrink-0 md:border-none md:pb-0\">\n <div className=\"whitespace-nowrap text-xs font-bold uppercase text-white text-opacity-80\">\n {primaryMenu?.heading}\n </div>\n {primaryMenu?.lists?.map((item, index) => (\n <FooterContentItem key={index} item={item} />\n ))}\n </div>\n\n <div className=\" md:order-none md:w-40 md:flex-none md:shrink-0 md:border-none md:pb-0\">\n <div className=\"whitespace-nowrap text-xs font-bold uppercase text-white text-opacity-80\">\n {secondaryMenu?.heading}\n </div>\n <div className=\"flex flex-wrap\">\n {secondaryMenu?.lists?.map((item, index) => (\n <FooterContentItem key={index} item={item} />\n ))}\n </div>\n </div>\n\n <div className=\"col-span-2 grow border-t border-gray-700 pt-5 sm:col-span-1 md:border-none md:pt-0\">\n <div className=\"border-b border-gray-700 pb-5 md:border-0 md:pb-0\">\n <div className=\"whitespace-nowrap text-xs font-bold uppercase text-white text-opacity-80\">\n Chăm sóc khách hàng\n </div>\n <div className=\"mt-2 text-sm md:mt-3\">\n <span className=\"text-white text-opacity-50\">Địa chỉ : </span>\n <span className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\">\n {SUPPORT.Address}\n </span>\n </div>\n <div className=\"mt-1 text-sm\">\n <span className=\"text-white text-opacity-50\">Hotline : </span>\n <a\n className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\"\n href={`tel:${MOMO_TEXT.Support.Hotline}`}\n >\n {MOMO_TEXT.Support.Hotline_Format}\n </a>\n <small className=\"text-xs italic text-white text-opacity-60\">\n {\" \"}\n (Phí 1.000đ/phút)\n </small>\n </div>\n <div className=\"mt-1 text-sm\">\n <span className=\"text-white text-opacity-50\">Email : </span>\n <a\n className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\"\n href={`mailto:${MOMO_TEXT.Support.Email}`}\n >\n {MOMO_TEXT.Support.Email}\n </a>\n </div>\n <div className=\"mt-1 text-sm\">\n <span className=\"text-white text-opacity-50\">Tổng đài gọi ra : </span>\n <a\n className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\"\n href={`tel:${MOMO_TEXT.Support.Phone_Ext_1}`}\n >\n {MOMO_TEXT.Support.Phone_Ext_1_Format}\n </a>\n <span className=\"text-white text-opacity-60\"> - </span>\n <a\n className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\"\n href={`tel:${MOMO_TEXT.Support.Phone_Ext_2}`}\n >\n {MOMO_TEXT.Support.Phone_Ext_2_Format}\n </a>\n <span className=\"text-white text-opacity-60\"> - </span>\n <a\n className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\"\n href={`tel:${MOMO_TEXT.Support.Phone_Ext_3}`}\n >\n {MOMO_TEXT.Support.Phone_Ext_3_Format}\n </a>\n <span className=\"text-white text-opacity-60\">\n , các đầu số di động Brandname MoMo\n </span>\n </div>\n <div className=\"mt-3 flex\">\n <a\n href=\"https://www.momo.vn/huong-dan/huong-dan-gui-yeu-cau-ho-tro-bang-tinh-nang-tro-giup\"\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n <div className=\"relative block overflow-hidden rounded border border-gray-400 bg-black py-1 pl-10 pr-2\">\n <div className=\"absolute left-1 top-1 \" style={{ paddingTop: \"3px\" }}>\n <svg\n className=\"h-7 w-7 text-gray-100 \"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n viewBox=\"0 0 345.1 512\"\n >\n <g>\n <title>Asset 1</title>\n <path\n d=\"M279.4,23.7H30.8C14.5,23.7,0,38.2,0,56.3v401.8c0,16.3,14.5,30.8,30.8,30.8H76h23.8L76,449.4H34.5V96.2h243.1v152l34.5,22\n V56.3C312,38.2,297.5,23.7,279.4,23.7z M226.8,77.1H86.1c-8.1,0-13.5-5.4-13.5-13.5c0-8.1,5.4-13.5,13.5-13.5h140.8\n c5.4,0,10.8,5.4,10.8,13.5C237.7,71.7,232.3,77.1,226.8,77.1z\"\n />\n <path\n d=\"M189.4,200.7c-14.4,0-25.9,11.6-25.9,25.9v155.7l-17.3-34.6c-14.2-26.3-28.1-23.6-38.9-17.3c-12.5,8.3-17.2,17-8.6,38.9\n c19.6,48.2,49.8,105.6,82.2,142.7h116.7c41-30.4,74-175,17.3-181.6c-5.2,0-13.5,0.8-17.3,4.3c0-17.3-15.1-21.7-21.6-21.6\n c-7.5,0.1-13,4.3-17.3,13c0-17.3-14.1-21.6-21.6-21.6c-8.3,0-17.9,5.2-21.6,13v-90.8C215.4,212.3,203.8,200.7,189.4,200.7z\"\n />\n </g>\n </svg>\n </div>\n <div className=\"text-xs text-white text-opacity-70\">\n Hướng dẫn trợ giúp trên\n </div>\n <div className=\"text-xs font-bold uppercase text-white text-opacity-90\">\n Ứng dụng MoMo\n </div>\n </div>\n </a>\n </div>\n </div>\n <div className=\"mt-4 border-b border-gray-700 pb-5 md:mt-8 md:border-none md:pb-0\">\n <div className=\"whitespace-nowrap text-xs font-bold uppercase text-white text-opacity-80\">\n Hợp tác doanh nghiệp\n </div>\n <div className=\"mt-2 text-sm md:mt-3\">\n <span className=\"text-white text-opacity-50\">Hotline : </span>\n <a\n className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\"\n href={`tel:${MOMO_TEXT.Business.Phome}`}\n >\n {MOMO_TEXT.Business.Phome_Format}\n </a>\n </div>\n <div className=\"mt-1 text-sm\">\n <span className=\"text-white text-opacity-50\">Email : </span>\n <a\n className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\"\n href={`mailto:${MOMO_TEXT.Business.Email}`}\n >\n {MOMO_TEXT.Business.Email}\n </a>\n </div>\n <div className=\"mt-1 text-sm\">\n <span className=\"text-white text-opacity-50\">Website : </span>\n <a\n className=\"inline text-white text-opacity-70 duration-300 hover:text-opacity-100\"\n href=\"https://business.momo.vn/\"\n aria-label=\"MoMo Business\"\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n business.momo.vn\n </a>\n </div>\n <div className=\"mt-3 flex\">\n <a href=\"https://business.momo.vn/#menutop\" rel=\"noreferrer\" target=\"_blank\">\n <div className=\"relative block overflow-hidden rounded border border-gray-400 bg-black py-1 pl-12 pr-2 \">\n <div className=\"aspect-1 absolute left-1 top-1 flex items-center justify-center\">\n <svg\n width=\"30\"\n height=\"20\"\n viewBox=\"0 0 30 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"mt-2\"\n >\n <path\n d=\"M9.5688 5.21563C8.63815 5.98097 9.08817 8.15453 11.2556 6.84427C11.2556 6.84427 13.9037 5.51871 15.4497 4.6401C15.7864 4.4503 16.0129 4.51152 16.2946 4.83297C16.6038 5.05644 23.6112 12.8813 23.6112 12.8813C23.6112 12.8813 25.7725 11.2404 26.6144 9.51683C26.6144 9.51683 24.6735 5.8677 22.8214 2.24612C22.2857 2.5492 21.8265 2.83696 21.2111 2.66247C20.5744 2.48185 20.0478 1.98285 19.4723 1.64916C18.8171 1.26649 18.26 0.92362 17.5283 0.819534C16.4446 0.663406 15.5935 1.15016 14.6598 1.6859C13.5975 2.29511 12.5689 2.97779 11.5617 3.69414C10.8821 4.17171 10.2178 4.6799 9.5688 5.21563Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M10.9281 17.4029C10.5638 16.9008 10.6342 16.1538 11.0842 15.7344L13.3068 13.7109C13.7568 13.2884 14.415 13.3527 14.7793 13.8517C15.1436 14.3507 15.0731 15.0977 14.6231 15.5232L12.4006 17.5467C11.9536 17.9631 11.2924 17.9019 10.9281 17.4029Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M8.87706 15.5385C8.51275 15.0364 8.58317 14.2895 9.03318 13.867L10.7873 12.272C11.2374 11.8496 11.8955 11.9139 12.2598 12.4129C12.6241 12.9149 12.5537 13.6619 12.1037 14.0844L10.3496 15.6824C9.90261 16.1018 9.24136 16.0375 8.87706 15.5385Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M6.39426 14.014C6.05751 13.4905 6.1616 12.7496 6.62998 12.3547L7.02184 12.0486C7.49022 11.6537 8.14535 11.7608 8.48822 12.2812L8.51271 12.3118C8.85252 12.8353 8.72395 13.5456 8.2525 13.9405L7.86065 14.2466C7.39226 14.6415 6.73407 14.5374 6.39426 14.014Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M16.2182 16.2671C15.8325 15.7895 15.1712 15.762 14.7396 16.2089L13.7814 17.2039C13.3497 17.6508 13.313 18.4009 13.6987 18.8815C14.0844 19.3621 14.7488 19.3866 15.1773 18.9397L16.1355 17.9447C16.5672 17.4978 16.6039 16.7477 16.2182 16.2671Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M29.9207 7.86982C30.0799 8.1729 29.9911 8.53108 29.7278 8.66884L28.1145 9.51989C27.8512 9.65459 27.5084 9.51989 27.3522 9.21682L23.5255 1.81447C23.3694 1.5114 23.4551 1.15322 23.7184 1.01546L25.3317 0.167464C25.595 0.0297027 25.9379 0.167463 26.094 0.470537L29.9207 7.86982Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M2.61348 9.14334C2.49409 9.46479 2.18489 9.6454 1.92467 9.54744L0.299097 8.98415C0.0388821 8.88619 -0.0713265 8.54638 0.0480662 8.228L2.9839 0.430738C3.10329 0.109296 3.41249 -0.0713245 3.67271 0.0266388L5.29828 0.592989C5.5585 0.690952 5.66871 1.03076 5.54931 1.34914L2.61348 9.14334Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M23.5224 13.8395L23.5163 13.8333C23.4826 14.0109 23.4336 14.1609 23.2989 14.3109C23.0816 14.5528 22.7999 14.6721 22.5152 14.6721C22.2183 14.6721 21.9183 14.5405 21.6887 14.2772L18.9212 11.1393C18.8692 11.0781 18.8049 11.0506 18.7375 11.0506C18.4742 11.0506 18.1804 11.4853 18.4191 11.7363L20.6907 14.2466C21.1223 14.7426 21.1315 15.5079 20.7029 15.9855C20.5039 16.2059 20.259 16.313 20.011 16.313C19.7233 16.313 19.4294 16.1722 19.1967 15.9059L16.5946 13.0037C16.5364 12.9119 16.4629 12.8721 16.3864 12.8721C16.1415 12.8721 15.8843 13.2792 16.1415 13.5731L18.1436 15.8691C18.563 16.3498 18.5293 17.0967 18.1161 17.5621C17.9263 17.7733 17.6936 17.8743 17.4548 17.8743C17.3171 17.8743 17.1762 17.8406 17.0415 17.7733C16.9589 17.9937 16.8364 18.2019 16.6772 18.3856C16.9221 18.5203 17.1885 18.5968 17.4548 18.5968C17.8926 18.5968 18.3059 18.407 18.6181 18.058C18.9426 17.6968 19.111 17.2376 19.1294 16.7753C19.3988 16.9437 19.7049 17.0355 20.011 17.0355C20.4611 17.0355 20.8866 16.8396 21.208 16.4814C21.5295 16.1232 21.6948 15.6579 21.707 15.1895C21.955 15.3242 22.2336 15.3946 22.5152 15.3946C23.005 15.3946 23.4612 15.1834 23.801 14.8038C24.1255 14.4395 24.1837 14.0599 24.2235 13.7844C24.2449 13.6343 24.2173 13.4843 24.1561 13.3527C24.0765 13.417 24.0275 13.4537 24.0153 13.4629L23.5224 13.8395Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M6.20135 11.7914L6.21053 11.7822L6.21972 11.7731L6.38503 11.6445C5.02579 10.2669 4.19616 9.2505 4.19616 9.2505C5.5003 5.92894 6.97587 1.88183 6.97587 1.88183C6.96363 2.11143 7.73509 2.52166 7.89122 2.58288C8.14837 2.68697 8.42695 2.73595 8.70553 2.73595C8.78513 2.73595 8.86166 2.73289 8.9382 2.7237C9.75252 2.64105 10.5179 2.17266 11.2342 1.7655C11.7179 1.49304 12.3179 1.21446 12.8843 1.21446C13.1537 1.21446 13.4139 1.28487 13.6557 1.441C13.8731 1.30936 14.0874 1.18078 14.2986 1.06139C14.2619 1.01547 14.2221 0.972612 14.1762 0.935876C13.8088 0.641986 13.3741 0.495041 12.8873 0.495041C12.1312 0.495041 11.3965 0.859342 10.9097 1.1318L10.723 1.23895C10.1107 1.58794 9.48006 1.94612 8.87391 2.00735C8.8188 2.01347 8.76064 2.01653 8.70553 2.01653C8.50349 2.01653 8.30756 1.9798 8.13918 1.91245C8.01673 1.8604 7.73815 1.69815 7.60651 1.59407C7.52079 1.38589 7.34323 1.22977 7.11976 1.17772C7.07077 1.16548 7.02179 1.16242 6.97587 1.16242C6.69729 1.16242 6.43707 1.34304 6.33299 1.62774C6.31768 1.66754 4.84517 5.70546 3.5594 8.97804C3.46144 9.22907 3.5043 9.51684 3.67267 9.72195C3.70941 9.76481 4.52985 10.7659 5.87991 12.1374C5.97175 12.0149 6.0789 11.8955 6.20135 11.7914Z\"\n fill=\"#fff\"\n />\n </svg>\n </div>\n <div className=\"text-xs text-white text-opacity-70\">Hợp tác doanh nghiệp</div>\n <div className=\"text-xs font-semibold uppercase text-white text-opacity-90\">\n Đăng ký hợp tác\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n <div className=\"col-span-2 gap-8 sm:col-span-1 md:mt-0 md:flex md:flex-col md:flex-wrap md:justify-between \">\n <div className=\"h-auto\">\n <div className=\"hidden whitespace-nowrap text-xs font-bold uppercase text-white text-opacity-80 md:block\">\n Kết nối với chúng tôi\n </div>\n <div className=\"mt-3 hidden flex-row items-stretch md:flex\">\n <ul className=\"item-center flex list-none flex-wrap space-x-4\">\n {SOCIAL_ITEMS &&\n SOCIAL_ITEMS.map((item, index) => (\n <li className=\"inline-block\" key={index}>\n <a\n href={item.Link}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"duration-300 hover:brightness-125\"\n >\n <img src={item.Image} loading=\"lazy\" width=\"40\" height=\"40\" />\n </a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n <div className=\"h-auto\">\n <div className=\"hidden whitespace-nowrap text-xs font-bold uppercase text-white text-opacity-80 md:block\">\n Tải ứng dụng trên điện thoại\n </div>\n <div className=\"flex flex-wrap items-center md:mt-3 md:space-x-1.5\">\n <div className=\"relative hidden h-24 w-24 grow-0 overflow-hidden rounded-sm bg-white md:block lg:h-20 lg:w-20\">\n <img\n src=\"https://homepage.momocdn.net/img/momo-upload-api-230627140125-638234712853800898.jpg\"\n alt=\"Qr-Dowbnload MoMo\"\n className=\" absolute inset-0\"\n />\n </div>\n <div className=\"flex grow justify-center gap-2 md:grid md:grid-cols-1 md:gap-1.5\">\n {APP_DOWNLOAD &&\n APP_DOWNLOAD.map((item, index) => (\n <div\n className=\"button-download w-full md:flex md:items-center\"\n key={index}\n style={{\n background: `url(${item.Image}) center center / contain no-repeat`,\n }}\n >\n <Button\n onClick={() => setOpenDialogQr(index)}\n className=\"hidden w-full rounded-none !bg-transparent sm:block\"\n style={{ fontSize: \"0px\", padding: \"0 0 30.23%0\" }}\n >\n {item.Name}\n </Button>\n <a\n href={item.Link}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"button-download block sm:hidden\"\n style={{ fontSize: \"0px\", padding: \"0 0 30.23%0\" }}\n />\n <DialogQr\n open={openDialogQr === index}\n onOpenChange={() => setOpenDialogQr(null)}\n title=\"Quét mã để tải ứng dụng\"\n shortTitle=\"Tải ngay\"\n qrLink={item.Link}\n />\n </div>\n ))}\n </div>\n <div className=\"mt-4 flex w-full justify-center text-center md:hidden\">\n <ul className=\"item-center flex list-none flex-wrap space-x-3.5\">\n {SOCIAL_ITEMS &&\n SOCIAL_ITEMS.map((item, index) => (\n <li key={index}>\n <a\n href={item.Link}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"flex duration-300 hover:brightness-125\"\n >\n <img\n alt={item.Name}\n src={item.Image}\n loading=\"lazy\"\n width=\"36\"\n height=\"36\"\n />\n </a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </div>\n <div className=\"hidden h-auto md:block\">\n <div className=\" whitespace-nowrap text-xs font-bold uppercase text-white text-opacity-80 \">\n Được chứng nhận bởi\n </div>\n <div className=\"mt-6 flex items-center justify-between md:mt-3 md:justify-normal\">\n <span className=\"block text-right text-xs text-white text-opacity-50 md:hidden\">\n ©Copyright M_Service {new Date().getFullYear()}\n </span>\n <a\n rel=\"noopener noreferrer\"\n href=\"http://online.gov.vn/Home/AppDetails/163\"\n target=\"_blank\"\n className=\" flex w-28 items-center md:w-auto\"\n >\n <img\n alt=\"chứng nhận\"\n src=\"https://homepage.momocdn.net/blogscontents/momo-upload-api-210629153623-637605777831780706.png\"\n width={119}\n height={45}\n />\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div className=\" footer-bottom order-2 bg-gray-800 py-3.5 md:order-2 md:py-5\">\n <div className=\"wrapper grid gap-2 md:grid-cols-2 md:gap-5\">\n <div className=\" relative \">\n <img\n src=\"https://homepage.momocdn.net/fileuploads/svg/momo-file-240411162904.svg\"\n className=\" absolute left-0 top-0 mt-0.5 block h-9 w-9\"\n alt=\"MoMo\"\n />\n <div className=\" md:pl-12\">\n <div className=\"mb-1 h-10 pl-12 text-sm text-white text-opacity-80 md:h-auto md:pl-0 \">\n CÔNG TY CỔ PHẦN DỊCH VỤ DI ĐỘNG TRỰC TUYẾN\n </div>\n <div className=\"text-sm text-white text-opacity-50 lg:leading-normal\">\n Trụ sở chính: Tầng 6, Toà nhà Phú Mỹ Hưng, số 8 đường Hoàng Văn Thái, Phường Tân\n Phú, Quận 7, Thành phố Hồ Chí Minh\n </div>\n\n <div className=\" mt-0.5 text-sm text-white text-opacity-50\">\n Tên thương hiệu: <strong>MoMo</strong>\n </div>\n\n <div className=\" mt-0.5 hidden text-sm text-white text-opacity-50 md:block\">\n ©Copyright M_Service {new Date().getFullYear()}\n </div>\n </div>\n </div>\n\n <div className=\"text-sm text-white text-opacity-50\">\n <div>\n Dịch vụ trung gian thanh toán do Ngân hàng Nhà nước cấp phép được cung ứng thông\n qua <strong>Ứng dụng MoMo - Trợ thủ tài chính với AI:</strong>\n </div>\n\n <ul className=\" mt-0.5 \">\n <li>- Dịch vụ Ví điện tử</li>\n <li>- Dịch vụ hỗ trợ thu hộ, chi hộ</li>\n <li>- Dịch vụ cổng thanh toán điện tử</li>\n </ul>\n </div>\n\n <div className=\" flex items-center justify-between md:hidden\">\n <span className=\"block text-right text-xs text-white text-opacity-50 md:hidden\">\n ©Copyright M_Service {new Date().getFullYear()}\n </span>\n <a\n rel=\"noopener noreferrer\"\n href=\"http://online.gov.vn/Home/AppDetails/163\"\n target=\"_blank\"\n className=\" flex w-28 items-center md:w-auto\"\n >\n <img\n alt=\"chứng nhận\"\n src=\"https://homepage.momocdn.net/blogscontents/momo-upload-api-210629153623-637605777831780706.png\"\n width={119}\n height={45}\n />\n </a>\n </div>\n </div>\n </div>\n <style>{`\n footer .button-download {\n max-width: 150px;\n }\n `}</style>\n </>\n );\n};\n\nexport default FooterContent;\n","import FooterContent from \"./FooterContent\"\nimport { cn } from \"../../helpers/utils\";\nexport interface FooterItem {\n title: string;\n url: string;\n icon?: string | null;\n newTab: boolean;\n}\n\n// Define interface for footer data\nexport interface FooterData {\n heading: string;\n lists: FooterItem[];\n}\n\nexport interface FooterProps {\n /**\n * CSS class to be appended to the root element.\n */\n className?: string;\n /**\n * Data menu column 1\n */\n primaryMenu?: FooterData;\n /**\n * Data menu column 2\n */\n secondaryMenu?: FooterData;\n}\n\nconst Footer = ({ className, primaryMenu, secondaryMenu }: FooterProps) => {\n return (\n <footer className={cn('grid grid-cols-1 flex-wrap bg-gray-900', className)}>\n <FooterContent primaryMenu={primaryMenu} secondaryMenu={secondaryMenu} />\n </footer>\n );\n};\n\nexport { Footer }","import * as React from \"react\"\n\nimport { cn } from \"../../helpers/utils\";\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-xl border bg-card text-card-foreground shadow\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","import * as React from \"react\";\nimport { type DialogProps } from \"@radix-ui/react-dialog\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { cn } from \"../../helpers/utils\";\nimport { Dialog, DialogContent } from \"../Dialog\";\nimport {\n XCircleIcon,\n MagnifyingGlassIcon,\n} from \"@heroicons/react/16/solid\";\n\n\n\ninterface InputProps {\n onClickClear?: (value: string) => void;\n classNameInput?: string;\n}\n\nconst Command = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive\n ref={ref}\n className={cn(\n \"flex text-gray-900 border border-gray-300 shadow-lg bg-white h-full w-full flex-col overflow-hidden rounded-md\",\n className\n )}\n {...props}\n />\n));\nCommand.displayName = CommandPrimitive.displayName;\n\ninterface CommandDialogProps extends DialogProps {}\n\nconst CommandDialog = ({ children, ...props }: CommandDialogProps) => {\n return (\n <Dialog {...props}>\n <DialogContent className=\"overflow-hidden p-0 shadow-lg\">\n <Command className=\"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst CommandInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input> & InputProps\n>(({ className, onClickClear, classNameInput, ...props }, ref) => {\n const divRef = React.useRef<HTMLDivElement>(null);\n const [search, setSearch] = React.useState(\"\");\n\n const handleClearInput = () => {\n if (!search || search?.length <= 0) return;\n setSearch(\"\");\n onClickClear?.(search);\n };\n\n return (\n <div\n ref={divRef}\n className={cn(\"flex items-center border-b px-2\", className)}\n cmdk-input-wrapper=\"\"\n >\n <MagnifyingGlassIcon className=\"mr-2 h-4 w-4 shrink-0 text-gray-500\" />\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n \"flex h-10 text-gray-900 w-full rounded-md focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0 focus:ring-0 bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\",\n classNameInput\n )}\n value={search}\n onValueChange={setSearch}\n {...props}\n />\n <XCircleIcon\n onClick={handleClearInput}\n className={cn(\n \"ml-2 transition-all cursor-pointer h-4 w-4 duration-75 shrink-0 text-gray-500\",\n search?.length > 0 ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n </div>\n );\n});\n\nCommandInput.displayName = CommandPrimitive.Input.displayName;\n\nconst CommandList = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n className={cn(\n \"max-h-[300px] text-gray-900 overflow-y-auto overflow-x-hidden\",\n className\n )}\n {...props}\n />\n));\n\nCommandList.displayName = CommandPrimitive.List.displayName;\n\nconst CommandEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>((props, ref) => (\n <CommandPrimitive.Empty\n ref={ref}\n className=\"py-6 text-gray-900 text-center text-sm\"\n {...props}\n />\n));\n\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName;\n\nconst CommandGroup = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n \"overflow-hidden text-gray-900 p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\n\nCommandGroup.displayName = CommandPrimitive.Group.displayName;\n\nconst CommandSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 text-gray-900 h-px bg-border\", className)}\n {...props}\n />\n));\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName;\n\nconst CommandItem = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, children, ...props }, ref) => {\n return (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n \"relative cursor-pointer text-gray-900 flex rounded-md select-none hover:bg-gray-100 aria-selected:bg-gray-100 aria-selected:text-gray-900 items-center px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n \n {children}\n \n </CommandPrimitive.Item>\n );\n});\n\nCommandItem.displayName = CommandPrimitive.Item.displayName;\n\nconst CommandShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n \"ml-auto text-xs text-gray-900 tracking-widest text-muted-foreground\",\n className\n )}\n {...props}\n />\n );\n};\nCommandShortcut.displayName = \"CommandShortcut\";\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n};\n","import * as React from \"react\";\nimport { ChevronDownIcon } from \"@heroicons/react/16/solid\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../Popover\";\n\ninterface ComboboxTriggerProps\n extends React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> {\n className?: string;\n value?: string;\n label?: string;\n children: any;\n placeholder?: string;\n size?: 1 | 2;\n}\n\ninterface ComboboxContentProps\n extends React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> {\n children?: any;\n className?: string;\n}\n\ninterface ComboboxProps extends React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Popover> {}\n\nexport const ComboboxTrigger = ({\n className,\n value,\n label,\n children,\n placeholder,\n size,\n}: ComboboxTriggerProps) => {\n return (\n <div className=\"relative\">\n <PopoverTrigger\n className={cn(\n \"select-mobase-button flex h-11 w-72 items-center justify-between rounded-md border border-gray-300 bg-white p-3 text-sm text-gray-900 ring-0 ring-inset transition-all hover:ring-1 hover:ring-gray-400 focus:ring-0 focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0 disabled:pointer-events-none disabled:border-gray-200 disabled:bg-gray-50 data-[state=open]:border-pink-500 data-[placeholder]:text-gray-500 data-[state=open]:ring-1 data-[state=open]:ring-pink-500\",\n size === 2 && \"h-12 text-base\",\n className\n )}\n >\n {value || children || placeholder}\n <ChevronDownIcon className=\"h-4 w-4 flex-none text-gray-700\" />\n </PopoverTrigger>\n {label && (\n <span className=\"absolute -top-2 left-2 z-[1] bg-white px-1.5 text-xs text-gray-500\">\n {label}\n </span>\n )}\n </div>\n );\n};\n\nexport const ComboboxContent = ({ children, className, ...props }: ComboboxContentProps) => {\n return (\n <PopoverContent className={cn(\"border-none !p-0\", className)} {...props}>\n {children}\n </PopoverContent>\n );\n};\n\nexport const Combobox = ({ open, onOpenChange, children, ...props }: ComboboxProps) => {\n return (\n <Popover open={open} onOpenChange={onOpenChange} {...props}>\n {children}\n </Popover>\n );\n};\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../helpers/utils\";\nimport { InformationCircleIcon } from \"@heroicons/react/24/outline\";\nimport { TextButton } from \"../TextButton\";\n\ninterface CalloutProps {\n message: string;\n type: \"neutral\" | \"error\" | \"success\" | \"warning\" | \"info\";\n withAction?: string;\n onClickAction?: () => void;\n className?: string;\n disabled?: boolean;\n actionClassName?: string;\n icon?: React.ReactNode;\n}\n\nconst calloutVariants = cva(\n \"px-3 py-2 rounded-md border flex items-center space-x-2 text-gray-700 text-sm \",\n {\n variants: {\n typeDiv: {\n neutral: \"bg-gray-50 border-gray-300 \",\n error: \"bg-red-50 border-red-300\",\n success: \"bg-green-50 border-green-300\",\n warning: \"bg-yellow-50 border-yellow-300\",\n info: \"bg-blue-50 border-blue-300\",\n },\n disabled: {\n true: \"text-gray-400 bg-gray-50 opacity-55 pointer-events-none border-gray-300\",\n },\n },\n defaultVariants: {\n typeDiv: \"neutral\",\n },\n }\n);\n\nconst iconVariants = cva(\"w-5 h-5 shrink-0 border-none p-0 \", {\n variants: {\n typeIcon: {\n neutral: \"text-gray-700\",\n error: \"text-red-700\",\n success: \"text-green-700\",\n warning: \"text-yellow-700\",\n info: \"text-blue-700\",\n },\n disabled: {\n true: \"text-gray-400\",\n },\n },\n defaultVariants: {\n typeIcon: \"neutral\",\n },\n});\n\nexport const Callout = forwardRef<\n HTMLDivElement,\n CalloutProps &\n VariantProps<typeof calloutVariants> &\n VariantProps<typeof iconVariants>\n>(\n (\n {\n type = \"neutral\",\n message = \"\",\n withAction = false,\n onClickAction,\n className,\n disabled,\n actionClassName,\n icon,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"\",\n className,\n calloutVariants({ typeDiv: type, disabled })\n )}\n {...props}\n >\n <div className=\"flex items-center space-x-2\">\n {icon || (\n <InformationCircleIcon\n className={cn(iconVariants({ typeIcon: type, disabled }))}\n width={20}\n height={20}\n />\n )}\n {message && <div>{message}</div>}\n </div>\n {withAction && (\n <TextButton\n variant=\"primary\"\n onClick={() => onClickAction?.()}\n className={cn(\"\", actionClassName)}\n isDisabled={disabled}\n >\n {withAction}\n </TextButton>\n )}\n </div>\n );\n }\n);\n","import {\n ChangeEvent,\n FocusEvent,\n forwardRef,\n InputHTMLAttributes,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { MagnifyingGlassIcon } from \"@heroicons/react/20/solid\";\nimport { XCircleIcon } from \"@heroicons/react/24/outline\";\nimport { cn } from \"../../helpers/utils\";\n\nexport interface SearchBarProps extends InputHTMLAttributes<HTMLInputElement> {\n inputClassName?: string;\n size?: 1 | 2;\n onClickClear?: (inputValue: string) => void;\n}\n\nexport const SearchBar = forwardRef<HTMLInputElement, SearchBarProps>(\n (\n {\n disabled,\n className,\n inputClassName,\n size,\n onChange,\n onFocus,\n onClickClear,\n value,\n defaultValue,\n type = \"text\",\n ...restProps\n },\n ref,\n ) => {\n const [clearable, setClearable] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n\n const handleShowClearButton = (inputValue) => {\n if (inputValue && !clearable) {\n setClearable(true);\n }\n\n if (!inputValue && clearable) {\n setClearable(false);\n }\n };\n\n const onChangeFactory = (event: ChangeEvent<HTMLInputElement>) => {\n handleShowClearButton(event.target.value);\n onChange?.(event);\n };\n\n const onFocusFactory = (event: FocusEvent<HTMLInputElement, Element>) => {\n handleShowClearButton(event.target.value);\n onFocus?.(event);\n };\n\n const handleClear = () => {\n const inputTarget = rootRef.current?.querySelector(\"input\");\n if (!inputTarget) return;\n onClickClear?.(inputTarget.value);\n\n inputTarget.value = \"\";\n inputTarget.focus();\n setClearable(false);\n };\n\n useEffect(() => {\n handleShowClearButton(defaultValue || value);\n }, [value, defaultValue]);\n\n return (\n <div className={cn(className)} ref={rootRef}>\n <div className=\"relative flex items-center\">\n <div className=\"absolute left-3 top-1/2 -translate-y-1/2 shrink-0 text-gray-500 duration-200 \">\n <MagnifyingGlassIcon className=\"w-4 h-4 text-gray-500\" />\n </div>\n <input\n disabled={disabled}\n type={type}\n ref={ref}\n className={cn(\n \"mobase-text-input-box text-gray-900 h-10 bg-white w-full transition-all text-sm rounded-md border border-gray-300 placeholder:text-gray-500 px-9 focus:border-pink-500 disabled:bg-gray-50 disabled:border-gray-200 disabled:pointer-events-none block disabled:opacity-50\",\n inputClassName,\n )}\n onChange={onChangeFactory}\n onFocus={onFocusFactory}\n value={value}\n defaultValue={defaultValue}\n {...restProps}\n />\n\n {clearable && (\n <button\n aria-label=\"button\"\n type=\"button\"\n className=\"absolute right-3 top-1/2 -translate-y-1/2 shrink-0 cursor-pointer text-gray-500 duration-200 hover:opacity-70 disabled:pointer-events-none\"\n disabled={disabled}\n onClick={handleClear}\n >\n <XCircleIcon strokeWidth={2} width={20} height={20} />\n </button>\n )}\n </div>\n\n <style>\n {`\n .mobase-text-input-box:hover {\n box-shadow: 0px 0px 0px 1px rgb(var(--mobase-gray-400) / 1) inset;\n }\n .mobase-text-input-box:focus {\n box-shadow: 0px 0px 0px 1px rgb(var(--mobase-pink-500) / 1) inset;\n }\n `}\n </style>\n </div>\n );\n },\n);\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport React, { ReactNode, useContext, useEffect, useState } from \"react\";\nimport { cn } from \"../../helpers/utils\";\nimport { X } from \"lucide-react\";\nimport _ from \"lodash\";\nimport { AspectRatio } from \"../AspectRatio\";\nimport {\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n} from \"../Carousel\";\n\n// Define the context type\ntype LightboxGalleryContextProps = {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\n// Create the context with default values\nconst LightboxGalleryContext = React.createContext<\n LightboxGalleryContextProps | undefined\n>(undefined);\n\n// Custom hook to use the context\nexport function useLightboxGalleryContext() {\n const context = useContext(LightboxGalleryContext);\n\n if (!context) {\n throw new Error(\n \"useLightboxGalleryContext must be used within a LightboxGallery\"\n );\n }\n\n return context;\n}\n\n// LightboxGallery Component using Context\nexport const LightboxGallery = ({\n children,\n open,\n onOpenChange,\n className,\n}: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root> & {\n children: ReactNode;\n className: string;\n}) => {\n return (\n <LightboxGalleryContext.Provider value={{ open, onOpenChange }}>\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <div className={cn(\"lightbox-gallery\", className)}>{children}</div>\n </DialogPrimitive.Root>\n </LightboxGalleryContext.Provider>\n );\n};\n\n// Thumbnail Component remains the same\ninterface LightboxThumbnailProps\n extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger> {\n children?: ReactNode;\n src?: string;\n alt?: string;\n className?: string;\n classNameImage?: string;\n onClick?: () => void;\n ratio?: number;\n}\n\nexport const LightboxThumbnail = ({\n children,\n src,\n alt,\n className,\n classNameImage,\n onClick,\n ratio = 4 / 3,\n}: LightboxThumbnailProps) => {\n const { onOpenChange } = useLightboxGalleryContext();\n\n const handleOnClickThumbnail = () => {\n onClick?.();\n if (onOpenChange) {\n onOpenChange(true);\n }\n };\n\n return (\n <DialogPrimitive.Trigger\n className={cn(\"\", className)}\n onClick={handleOnClickThumbnail}\n >\n {children}\n <AspectRatio ratio={ratio} className=\"rounded-lg cursor-pointer\">\n <img\n src={src}\n alt={alt}\n className={cn(\n \"w-full h-full object-cover rounded-lg\",\n classNameImage\n )}\n />\n </AspectRatio>\n </DialogPrimitive.Trigger>\n );\n};\n\n// LightboxContent Component using Context\nexport const LightboxContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => {\n const { onOpenChange } = useLightboxGalleryContext();\n\n const handleClose = () => {\n if (onOpenChange) {\n onOpenChange(false);\n }\n };\n\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"bg-black fixed inset-0 bg-black/80 z-50\" />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed z-[999] w-full h-full inset-0 grid w-full mx-auto bg-black duration-200\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n onClick={handleClose}\n className=\"flex transition-all z-10 text-sm items-center space-x-1 absolute left-3 top-6 md:left-6 hover:bg-white/20 text-white rounded-md px-4 py-2\"\n >\n <X className=\"h-4 w-4 mt-0.5\" />\n <div className=\"\">Đóng cửa sổ</div>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n});\nLightboxContent.displayName = DialogPrimitive.Content.displayName;\n\n// LightBoxGalleryContent Component using Context\ninterface LightBoxGalleryContentProps {\n images: { url: string; titleImage?: string }[];\n activeSlideIndex?: number;\n withSideBar?: boolean;\n subHtmlSideBar?: ReactNode;\n classNameSubHtmSideBar?: string;\n isPagination?: boolean;\n}\n\nexport const LightBoxGalleryContent = ({\n images,\n activeSlideIndex = 0,\n withSideBar,\n subHtmlSideBar,\n classNameSubHtmSideBar,\n}: LightBoxGalleryContentProps) => {\n const [titleImage, setTitleImg] = useState(\"\");\n const [api, setApi] = useState<any>();\n const [current, setCurrent] = useState(0);\n\n useEffect(() => {\n if (!api) {\n return;\n }\n setCurrent(api.selectedScrollSnap() + 1);\n api.on(\"select\", () => {\n setCurrent(api.selectedScrollSnap() + 1);\n });\n }, [api]);\n\n const onGetTitleImage = (current) => {\n const result = _.filter(\n images,\n (_, idx) => idx === (current > 0 ? current - 1 : current)\n );\n const titleImgDraft = result.length > 0 ? result[0]?.titleImage : \"\";\n setTitleImg(titleImgDraft);\n };\n\n useEffect(() => {\n onGetTitleImage(current);\n }, [current]);\n\n return (\n <LightboxContent className=\"flex py-0\">\n <div className=\" flex-1 relative\">\n <div className=\"flex items-center text-sm justify-center absolute top-8 md:top-10 w-full\">\n {current ? current : 1} / {images?.length}\n </div>\n <Carousel\n opts={{\n startIndex: activeSlideIndex\n }}\n setApi={setApi}\n className=\"w-full h-full relative\"\n >\n <CarouselContent\n className={cn(\n \"h-screen -ml-3 md:-ml-4\",\n withSideBar ? \"sm:w-[calc(100vw-448px)] w-screen\" : \"w-screen\"\n )}\n >\n {images.map((img, index) => (\n <CarouselItem className=\"pl-6 md:pl-4\" key={index}>\n <div className=\" w-full h-full relative pt-28 overflow-hidden flex flex-col\">\n <div className=\"flex-1 relative\">\n <img\n src={img.url}\n alt=\"\"\n className=\"absolute h-full w-full object-contain\"\n />\n </div>\n <div className=\"flex-0\">\n <div className=\"text-sm px-20 text-center text-white/80 my-4 flex items-center justify-center w-full\">\n <div className=\"line-clamp-3\">{titleImage}</div>\n </div>\n </div>\n </div>\n </CarouselItem>\n ))}\n </CarouselContent>\n <CarouselPrevious className=\"left-10 top-[50%] w-10 h-10 sm:opacity-100 opacity-0\" />\n <CarouselNext className=\"right-10 top-[50%] w-10 h-10 sm:opacity-100 opacity-0\" />\n </Carousel>\n </div>\n {withSideBar && (\n <div\n className={cn(\n \"hidden md:block bg-white text-gray-900 p-6 w-full max-w-md\",\n classNameSubHtmSideBar\n )}\n >\n {subHtmlSideBar}\n </div>\n )}\n </LightboxContent>\n );\n};\n","import * as React from \"react\";\nimport { CheckIcon } from \"@heroicons/react/16/solid\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { Circle } from \"lucide-react\";\n\nimport { cn } from \"../../helpers/utils\";\n\ntype ChoiceboxGroupProps = React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> & {\n /**\n * Hide indicator when needed, default is false\n */\n hideIndicator?: boolean;\n};\n\ntype ChoiceboxGroupContextProps = {\n hideIndicator?: ChoiceboxGroupProps[\"hideIndicator\"];\n};\n\nconst ChoiceboxGroupContext = React.createContext<ChoiceboxGroupContextProps>({\n hideIndicator: false,\n});\n\n/**\n * Hook to get the current context value for ChoiceboxGroup.\n *\n * @returns The current context value for ChoiceboxGroup.\n * @throws If the context is undefined.\n */\nexport function useChoiceboxGroupContext() {\n const context = React.useContext(ChoiceboxGroupContext);\n\n if (!context) {\n throw new Error(\"ChoiceboxGroup.Item must be used within a ChoiceboxGroup \");\n }\n return context;\n}\n\nconst ChoiceboxGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n ChoiceboxGroupProps\n>(({ className, hideIndicator = false, ...props }, ref) => {\n return (\n <ChoiceboxGroupContext.Provider value={{ hideIndicator }}>\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", hideIndicator && \"hide-indicator\", className)}\n {...props}\n ref={ref}\n />\n </ChoiceboxGroupContext.Provider>\n );\n});\nChoiceboxGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst ChoiceboxGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, children, ...props }, ref) => {\n const context = useChoiceboxGroupContext();\n const { hideIndicator } = context ?? {};\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"group relative block flex w-full cursor-pointer items-center space-x-2 rounded-md border border-gray-300 bg-white p-3 text-left text-gray-900 ring-inset ring-pink-500 hover:border-pink-500 disabled:pointer-events-none disabled:cursor-default disabled:border-gray-300 disabled:bg-gray-100 data-[state=checked]:border-pink-500 data-[state=checked]:ring-[1px] md:px-4 md:py-3\",\n className\n )}\n {...props}\n >\n <div className=\"min-w-0 flex-1\">{children}</div>\n {!hideIndicator && (\n <div\n className={cn(\n \"has aspect-square h-4 w-4 flex-none rounded-full border-2 border-gray-300 group-disabled:cursor-default group-disabled:bg-gray-200 group-disabled:data-[state=checked]:bg-gray-100 group-disabled:data-[state=checked]:text-gray-300 group-data-[state=checked]:border-none group-data-[state=checked]:bg-pink-500 group-data-[state=checked]:text-white\"\n )}\n >\n <RadioGroupPrimitive.Indicator className=\"flex h-full w-full items-center justify-center rounded-full \">\n <Circle className=\"h-1.5 w-1.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </div>\n )}\n </RadioGroupPrimitive.Item>\n );\n});\n\nChoiceboxGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nconst ChoiceboxMultiItem = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> & {\n hideIndicator?: boolean;\n }\n>(({ className, children, hideIndicator = false, ...props }, ref) => {\n return (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"group relative flex w-full cursor-pointer items-center space-x-2 rounded-md border border-gray-300 bg-white p-3 text-left text-gray-900 ring-inset ring-pink-500 hover:border-pink-500 disabled:pointer-events-none disabled:cursor-default disabled:border-gray-300 disabled:bg-gray-100 data-[state=checked]:border-pink-500 data-[state=checked]:ring-[1px] md:px-4 md:py-3\",\n className\n )}\n {...props}\n >\n <div className=\"min-w-0 flex-1\">{children}</div>\n {!hideIndicator && (\n <div className=\"ring-offset-background h-4 w-4 shrink-0 rounded border-2 border-gray-300 group-disabled:cursor-default group-disabled:bg-gray-300 group-disabled:data-[state=checked]:bg-gray-400 group-disabled:data-[state=checked]:text-gray-100 group-data-[state=checked]:border-none group-data-[state=checked]:bg-pink-500 group-data-[state=checked]:text-white\">\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <CheckIcon className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </div>\n )}\n </CheckboxPrimitive.Root>\n );\n});\nChoiceboxMultiItem.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { ChoiceboxGroup, ChoiceboxGroupItem, ChoiceboxMultiItem };\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../helpers/utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-md border border-gray-300 px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 font-semibold\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-pink-500 text-white/90 shadow hover:bg-pink-500/80\",\n secondary:\n \"border-transparent bg-gray-200 text-gray-900 hover:bg-gray-200/80\",\n outline: \"text-gray-900\",\n danger:\n \"border-transparent bg-red-500 text-white/90 shadow hover:bg-red-500/80\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> { }\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }","import * as React from \"react\";\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../helpers/utils\";\n\nconst progressbarVariants = cva(\n \"h-full w-full rounded-full flex-1 transition-all\",\n {\n variants: {\n variant: {\n progress: \"bg-pink-500\",\n success: \"bg-green-600\",\n disabled: \"bg-gray-400\",\n empty: \"bg-gray-200\",\n },\n },\n defaultVariants: {\n variant: \"progress\",\n },\n }\n);\n\nconst progressbarSecondaryVariants = cva(\n \"relative h-4 w-full overflow-hidden rounded-full bg-gray-200\",\n {\n variants: {\n size: {\n small: \"h-[6px]\",\n medium: \"h-2\",\n large: \"h-[10px]\",\n },\n },\n defaultVariants: {\n size: \"medium\",\n },\n }\n);\n\nexport interface ProgressBarProps {\n variant?: \"progress\" | \"success\" | \"disabled\" | \"empty\";\n size?: \"small\" | \"medium\" | \"large\";\n disabled?: boolean;\n}\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root> &\n ProgressBarProps &\n VariantProps<typeof progressbarVariants>\n>(\n (\n {\n className,\n value,\n variant = \"progress\",\n size = \"medium\",\n disabled = false,\n ...props\n },\n ref\n ) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\"\", progressbarSecondaryVariants({ size }), className)}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className={cn(\"\", progressbarVariants({ variant }))}\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n )\n);\nProgress.displayName = ProgressPrimitive.Root.displayName;\n\nexport { Progress as Progressbar };\n","import { cn } from \"../../helpers/utils\";\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-gray-200\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","import { cn } from \"../../helpers/utils\";\nexport interface SpinnerProps {\n /**\n * The size of the spinner. Can be 'sm', 'md', or 'lg'.\n */\n size?: 'sm' | 'md' | 'lg'\n /**\n * The color of the spinner. tailwind text color class, ex : text-pink-500\n */\n color?: string\n /**\n * Custom class name\n */\n className?: string\n /**\n * The template of the spinner. Can be 'default', 'dots'\n */\n template?: 'default' | 'dots'\n}\n\nfunction Spinner({ size = 'md', color = 'bg-pink-500', className, template = 'default' }: SpinnerProps) {\n const sizeClasses = {\n xs: 'size-4',\n sm: 'size-5',\n md: 'size-7',\n lg: 'size-9'\n }\n const sizeClassesDots = {\n xs: 'size-1',\n sm: 'size-1.5',\n md: 'size-2',\n lg: 'size-3'\n }\n\n\n const renderSpinner = () => {\n switch (template) {\n case 'dots':\n return (\n <div className=\"spinner_dots inline-flex items-center \">\n {[...Array(3)].map((_, i) => (\n <span key={i} className={cn(\"size-2 rounded-full m-[1px] inline-block \", color, sizeClassesDots[size], className)} />\n ))}\n <style>\n {`\n .spinner_dots span {\n animation-name: spinner-dots;\n animation-duration: 1.4s;\n animation-iteration-count: infinite;\n animation-fill-mode: both;\n }\n .spinner_dots span:nth-child(2) {\n animation-delay: .2s;\n }\n\n .spinner_dots span:nth-child(3) {\n animation-delay: .4s;\n }\n\n @keyframes spinner-dots {\n 0% {\n opacity: .2;\n }\n 20% {\n opacity: 1;\n }\n\n 100% {\n opacity: .2;\n }\n }\n `}\n </style>\n </div>\n )\n case 'default':\n default:\n return (\n <>\n <div className={cn(\"spinner_wrapper relative size-5 overflow-hidden\", sizeClasses[size], className)}>\n <div className={cn(\"spinner relative left-1/2 top-1/2 size-5 \", sizeClasses[size], className)}>\n {[...Array(12)].map((_, i) => (\n <div key={i} className={cn(`spinner_bar child-${i + 1}`, color)} />\n ))}\n </div>\n </div>\n <style>\n {`\n .spinner_bar {\n animation: spinner_spin 1.2s linear infinite;\n border-radius: 20px;\n height: 8%;\n left: -10%;\n position: absolute;\n top: -3.9%;\n width: 24%;\n }\n\n .spinner_bar.child-1 {\n animation-delay: -1.2s;\n transform: rotate(0.0001deg) translate(146%);\n }\n\n .spinner_bar.child-2 {\n animation-delay: -1.1s;\n transform: rotate(30deg) translate(146%);\n }\n\n .spinner_bar.child-3 {\n animation-delay: -1s;\n transform: rotate(60deg) translate(146%);\n }\n\n .spinner_bar.child-4 {\n animation-delay: -0.9s;\n transform: rotate(90deg) translate(146%);\n }\n\n .spinner_bar.child-5 {\n animation-delay: -0.8s;\n transform: rotate(120deg) translate(146%);\n }\n\n .spinner_bar.child-6 {\n animation-delay: -0.7s;\n transform: rotate(150deg) translate(146%);\n }\n\n .spinner_bar.child-7 {\n animation-delay: -0.6s;\n transform: rotate(180deg) translate(146%);\n }\n\n .spinner_bar.child-8 {\n animation-delay: -0.5s;\n transform: rotate(210deg) translate(146%);\n }\n\n .spinner_bar.child-9 {\n animation-delay: -0.4s;\n transform: rotate(240deg) translate(146%);\n }\n\n .spinner_bar.child-10 {\n animation-delay: -0.3s;\n transform: rotate(270deg) translate(146%);\n }\n\n .spinner_bar.child-11 {\n animation-delay: -0.2s;\n transform: rotate(300deg) translate(146%);\n }\n\n .spinner_bar.child-12 {\n animation-delay: -0.1s;\n transform: rotate(330deg) translate(146%);\n }\n\n @keyframes spinner_spin {\n 0% {\n opacity: 1;\n }\n\n to {\n opacity: 0.15;\n }\n }\n `}\n </style>\n </>\n\n )\n }\n }\n\n return (\n <div className=\"flex justify-center items-center\" role=\"status\">\n {renderSpinner()}\n </div>\n )\n}\n\nexport { Spinner }","import * as React from \"react\";\nimport * as SliderPrimitive from \"@radix-ui/react-slider\";\n\nimport { cn } from \"../../helpers/utils\";\n\ninterface SliderProps extends React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root> {\n showIndicatorValue1?: number | string;\n showIndicatorValue2?: number | string;\n}\n\nconst Slider = React.forwardRef<React.ElementRef<typeof SliderPrimitive.Root>, SliderProps>(\n ({ className, showIndicatorValue1, showIndicatorValue2, ...props }, ref) => {\n return (\n <SliderPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex w-full touch-none select-none items-center\",\n props?.disabled && \"opacity-40\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track className=\"relative h-2 w-full grow overflow-hidden rounded-full bg-gray-200\">\n <SliderPrimitive.Range className=\"absolute h-full bg-pink-500\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb className=\"group relative\">\n <div className=\"ring-offset-bg-white\t focus-visible:ring-ring block h-5 w-5 rounded-full border-2 border-pink-500 bg-white transition-colors focus-visible:outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 group-hover:cursor-grabbing\">\n {showIndicatorValue1 && (\n <div className=\" absolute bottom-3/4 left-1/2 mb-2 -translate-x-1/2 whitespace-nowrap rounded-lg bg-black/90 px-2.5 py-1.5 text-sm opacity-0 duration-300 group-hover:bottom-full group-hover:opacity-100\">\n {showIndicatorValue1}\n </div>\n )}\n </div>\n </SliderPrimitive.Thumb>\n\n <SliderPrimitive.Thumb className=\"group relative\">\n <div className=\"ring-offset-bg-white\t focus-visible:ring-ring block h-5 w-5 rounded-full border-2 border-pink-500 bg-white transition-colors focus-visible:outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 group-hover:cursor-grabbing\">\n {showIndicatorValue2 && (\n <div className=\" absolute bottom-3/4 left-1/2 mb-2 -translate-x-1/2 whitespace-nowrap rounded-lg bg-black/90 px-2.5 py-1.5 text-sm opacity-0 duration-300 group-hover:bottom-full group-hover:opacity-100\">\n {showIndicatorValue2}\n </div>\n )}\n </div>\n </SliderPrimitive.Thumb>\n </SliderPrimitive.Root>\n );\n }\n);\nSlider.displayName = SliderPrimitive.Root.displayName;\n\nexport { Slider };\n","import { forwardRef } from \"react\";\nimport { IComment } from \"./utils\";\nimport CommentHeader from \"./CommentHeader\";\nimport CommentContent from \"./CommentContent\";\nimport CommentFooter from \"./CommentFooter\";\nimport { cn } from \"../../helpers/utils\";\n\nexport const Comment = forwardRef<HTMLDivElement, IComment>(\n (\n {\n avatar,\n author,\n time,\n ratingPoint,\n content,\n tags,\n thumbnails,\n actions = [],\n statusMessage,\n isReply,\n children,\n commentSideBar,\n isOutStanding,\n limitContent = 260,\n },\n ref\n ) => {\n return (\n <div ref={ref} className={cn(\"\", isReply ? \"ml-4 py-4\" : \"py-5\")}>\n <CommentHeader\n avatar={avatar}\n author={author}\n time={time}\n statusMessage={statusMessage}\n isOutStanding={isOutStanding}\n />\n <CommentContent\n content={content}\n thumbnails={thumbnails}\n tags={tags}\n rating={ratingPoint}\n commentSideBar={commentSideBar}\n limitContent={limitContent}\n />\n {actions && actions?.filter(Boolean)?.length > 0 && (\n <CommentFooter actions={actions.filter(Boolean)} />\n )}\n {children && (\n <div className=\"border-l grid grid-cols-1 divide-y divide-gray-200 ml-2 mt-3 border-l-gray-300 \">\n {children}\n </div>\n )}\n </div>\n );\n }\n);\n","import { ICommentHeader } from \"./utils\";\n\nconst AvatarFallBack = ({ author = \"\" }: { author: string }) => {\n return (\n <div className=\"text-center shrink-0 text-lg font-semibold text-pink-600\">\n {author?.charAt(0)}\n </div>\n );\n};\n\nconst Avatar = ({ author, avatar }: { author: string; avatar: string }) => {\n return (\n <div className=\"w-9 h-9 flex items-center mt-0.5 justify-center rounded-full bg-pink-200 relative overflow-hidden\">\n {avatar ? (\n <img\n src={avatar}\n alt={author?.charAt(0)}\n className=\"shrink-0 object-cover\"\n width={36}\n height={36}\n />\n ) : (\n <AvatarFallBack author={author} />\n )}\n </div>\n );\n};\n\nfunction CommentHeader({\n avatar = \"\",\n author = \"\",\n time,\n statusMessage,\n isOutStanding,\n}: ICommentHeader) {\n return (\n <>\n <div className=\"flex relative items-center space-x-3\">\n <Avatar avatar={avatar} author={author} />\n <div className=\"flex flex-col\">\n {author && (\n <div className=\"font-semibold text-gray-900 text-sm\">{author}</div>\n )}\n <div className=\"flex items-center space-x-2 text-xs\">\n {time && <div className=\"text-gray-400\">{time}</div>}\n {statusMessage && (\n <div className=\"flex items-center space-x-2\">\n <div className=\"w-1 h-1 mt-0.5 bg-gray-400 rounded-full\"></div>\n <div className=\"ml-2 text-pink-500\">{statusMessage}</div>\n </div>\n )}\n </div>\n </div>\n {isOutStanding && (\n <div className=\"absolute right-1 top-0\">\n <img\n alt=\"\"\n src=\"https://homepage.momocdn.net/img/momo-upload-api-230629163313-638236531936463134.png\"\n className=\"w-5\"\n loading=\"lazy\"\n />\n </div>\n )}\n </div>\n </>\n );\n}\n\nexport default CommentHeader;\n","import { ICommentContent } from \"./utils\";\nimport { LightboxGallery, LightBoxGalleryContent } from \"../LightboxGallery\";\nimport { useState } from \"react\";\nimport { AspectRatio } from \"../AspectRatio\";\nimport CommentRating from \"./CommentRating\";\nimport { ReadMoreLite } from \"../ReadMoreLite\";\n\nfunction CommentContent({\n content,\n thumbnails = [],\n tags = [],\n commentSideBar,\n rating = { point: 10, max: 10 },\n limitContent = 260,\n}: ICommentContent) {\n const [activeSlideIdx, setActiveSlideIdx] = useState(0);\n const [isOpen, setIsOpen] = useState(false);\n const handleClick = (index) => {\n setIsOpen(true);\n setActiveSlideIdx(index);\n };\n return (\n <div className=\"text-gray-700 mt-3 flex flex-col\">\n {rating.point > 0 && (\n <CommentRating\n className=\"mb-0.5\"\n point={rating.point}\n max={rating.max}\n />\n )}\n {content && <ReadMoreLite className=\"text-sm\" maxChar={limitContent}>{content}</ReadMoreLite>}\n {tags?.length > 0 && (\n <div className=\"w-full oveflow-x-auto flex items-center space-x-2 mt-2.5\">\n {tags?.map((tag) => (\n <div className=\"w-fit rounded-full shrink-0 bg-gray-100 text-gray-700 text-xs font-semibold py-1 px-2 text-center\">\n {tag}\n </div>\n ))}\n </div>\n )}\n {thumbnails?.length > 0 && (\n <LightboxGallery\n open={isOpen}\n onOpenChange={setIsOpen}\n className=\"grid gap-2 mt-4 overflow-hidden rounded-xl md:grid-cols-4 md:gap-2 md:rounded-none grid grid-cols-2 grid-rows-1 overflow-hidden \"\n >\n {thumbnails?.map((img, index) => (\n <AspectRatio\n key={index}\n onClick={() => handleClick(index)}\n className=\"rounded-lg cursor-pointer object-cover\"\n ratio={4 / 3}\n >\n <img\n src={img.url}\n alt=\"\"\n className=\"w-full h-full rounded-lg object-cover\"\n />\n </AspectRatio>\n ))}\n <LightBoxGalleryContent\n activeSlideIndex={activeSlideIdx}\n images={thumbnails?.map((img, index) => ({\n url: img.url,\n titleImage: img.titleImage,\n idx: index,\n }))}\n withSideBar={!!commentSideBar}\n subHtmlSideBar={commentSideBar}\n />\n </LightboxGallery>\n )}\n </div>\n );\n}\n\nexport default CommentContent;\n","import { cn } from \"../../helpers/utils\";\nimport { IRating } from \"./utils\";\nimport { StarIcon } from \"@heroicons/react/20/solid\";\n\nconst textReviewMax10 = {\n 1: \"Kén người mê\",\n 2: \"Kén người mê\",\n 3: \"Chưa ưng lắm\",\n 4: \"Chưa ưng lắm\",\n 5: \"Tạm ổn\",\n 6: \"Tạm ổn\",\n 7: \"Đáng xem\",\n 8: \"Đáng xem\",\n 9: \"Cực phẩm!\",\n 10: \"Cực phẩm!\",\n};\n\nconst textReviewMax5 = {\n 1: \"Không hài lòng\",\n 2: \"Chưa ưng lắm\",\n 3: \"Tạm ổn\",\n 4: \"Hài lòng\",\n 5: \"Rất hài lòng\",\n};\n\nfunction CommentRating({ point, max, className }: IRating) {\n const textReviewFinal =\n max > 5 ? textReviewMax10[point || 10] : textReviewMax5[point || 5];\n\n return (\n <div className={cn(\"flex items-center space-x-1\", className)}>\n <StarIcon className=\"w-5 h-5 text-yellow-500\" />\n <div className=\"font-semibold text-gray-900 text-sm\">{`${point}/${max}`}</div>\n <span className=\"font-semibold text-gray-900 text-sm\">\n {\" \"}\n · {textReviewFinal}\n </span>{\" \"}\n </div>\n );\n}\n\nexport default CommentRating;\n","import { useState } from \"react\";\nimport parse from \"html-react-parser\";\nimport { cn } from \"../../helpers/utils\";\n\ninterface ReadMoreLiteProps {\n children: string;\n maxChar?: number;\n textMore?: string;\n textLess?: string;\n btnClass?: string;\n className?: string;\n}\n\nexport const ReadMoreLite: React.FC<ReadMoreLiteProps> = ({\n children,\n maxChar = 260,\n textMore = \"...Xem thêm\",\n textLess = \"Thu gọn\",\n btnClass = \"text-blue-500\",\n className = \"\",\n}) => {\n const [isReadMore, setIsReadMore] = useState(true);\n const toggleReadMore = () => {\n setIsReadMore(!isReadMore);\n };\n\n const shorten = (\n str: string,\n maxLen: number,\n separator: string = \" \"\n ): string => {\n if (str.length <= maxLen) return str;\n return str.substring(0, str.lastIndexOf(separator, maxLen));\n };\n\n return (\n <div className={cn(className)}>\n {isReadMore ? parse(shorten(children, maxChar)) : parse(children)}\n {children.length > maxChar && (\n <span\n onClick={toggleReadMore}\n className={cn(\n \"read-or-hide cursor-pointer text-md w-fit pl-1 hover:underline\",\n btnClass\n )}\n >\n {isReadMore ? textMore : textLess}\n </span>\n )}\n </div>\n );\n};\n","import { ICommentFooter } from \"./utils\";\n\nfunction CommentFooter({ actions = [] }: ICommentFooter) {\n return (\n <div className=\"flex items-center space-x-4 mt-4 text-gray-700\">\n {actions}\n </div>\n );\n}\n\nexport default CommentFooter;\n","import * as React from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"../../helpers/utils\";\nimport { CheckIcon } from \"@heroicons/react/16/solid\";\nimport { XIcon } from \"lucide-react\";\n\n// Define step states and sizes\ntype StepState = \"active\" | \"disabled\" | \"default\" | \"completed\";\ntype StepSize = \"default\" | \"small\";\n\n// Consolidate class variants for step item\nconst stepperVariants = cva(\n \"flex items-center shrink-0 justify-center rounded-full shrink-0\",\n {\n variants: {\n state: {\n active:\n \"bg-pink-500 text-white shadow-[0_0px_0px_3px_rgb(255,255,255),0_0px_0px_4px_rgb(var(--mobase-pink-500))]\",\n disabled: \"bg-gray-400 text-gray-200\",\n default:\n \"text-gray-500 bg-white shadow-[inset_0px_0px_0px_1px_rgb(var(--mobase-gray-300))]\",\n completed: \"bg-pink-300 text-white\",\n },\n size: {\n default: \"h-7 w-7 text-sm\",\n small: \"h-6 w-6 text-xs\",\n }\n },\n defaultVariants: {\n state: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport interface ProgressStepsProps {\n children: React.ReactNode;\n className?: string;\n type?: \"numberStep\" | \"iconStep\" | \"default\";\n}\n\nconst ProgressStepsContext =\n React.createContext<ProgressStepsProps[\"type\"]>(\"default\");\n\nexport function useProgressStepsContext() {\n const context = React.useContext(ProgressStepsContext);\n if (!context) {\n throw new Error(\"ProgressStepsItem must be used within a ProgressSteps\");\n }\n return context;\n}\n\n// Convert ProgressStepper into a functional component\nconst ProgressStepper = React.memo(\n ({\n type,\n icon,\n stepNumber,\n size,\n isError,\n state,\n }: {\n type: ProgressStepsProps[\"type\"];\n icon: React.ReactNode;\n stepNumber: number;\n isError?: boolean;\n size: StepSize;\n state: StepState;\n }) => {\n const iconSizeClass = size === \"small\" ? \"w-3 h-3\" : \"w-4 h-4\";\n if (isError) return <XIcon className={iconSizeClass} />;\n return (\n <div>\n {type === \"iconStep\" && <div className={iconSizeClass}>{icon}</div>}\n {type === \"numberStep\" && <div>{stepNumber}</div>}\n {type === \"default\" &&\n (state === \"completed\" ? (\n <CheckIcon className={iconSizeClass} />\n ) : (\n <div>{stepNumber}</div> // Show step number if not completed\n ))}\n </div>\n );\n }\n);\n\ninterface ProgressStepsItemTriggerProps {\n step: number;\n currentStep: number;\n onValueChangeStep: (step: number) => void;\n children: React.ReactNode;\n}\n\nexport const ProgressStepsItemTrigger: React.FC<\n ProgressStepsItemTriggerProps\n> = ({ step, currentStep, onValueChangeStep, children }) => {\n const handleChangeStep = React.useCallback(() => {\n if (step !== currentStep) {\n onValueChangeStep(step);\n }\n }, [step, currentStep, onValueChangeStep]);\n\n return (\n <div\n onClick={handleChangeStep}\n className=\"flex w-full flex-col items-center justify-center gap-1 cursor-pointer\"\n >\n {children}\n </div>\n );\n};\n\nexport interface ProgressStepsItemProps {\n step: number;\n state?: StepState;\n size?: StepSize;\n placement?: \"default\" | \"left\";\n className?: string;\n title?: string;\n description?: string;\n lastStep?: boolean;\n fristStep?: boolean;\n icon?: React.ReactNode;\n isError?: boolean;\n onValueChangeStep?: (step: number) => void;\n}\n\nexport const ProgressStepsItem: React.FC<ProgressStepsItemProps> = ({\n step,\n state = \"default\",\n size = \"default\",\n placement = \"default\",\n className,\n title,\n description,\n lastStep,\n fristStep,\n icon,\n isError,\n onValueChangeStep,\n ...props\n}) => {\n const type = useProgressStepsContext();\n\n return (\n <div\n className={cn(\"flex w-full flex-col items-center justify-center gap-1\")}\n >\n <div className=\"flex w-full items-center justify-center gap-2\">\n <div\n className={cn(\n \"flex h-px grow shrink-0 basis-0 bg-gray-200\",\n fristStep && \"opacity-0\",\n placement == \"left\" && \"hidden\",\n state === \"active\" && \"bg-pink-300\",\n state === \"completed\" && \"bg-pink-300\"\n )}\n />\n <div\n className={cn(\n \"flex h-7 w-7 items-center justify-center rounded-full\",\n stepperVariants({ state, size }),\n isError && \"bg-red-500 text-white shadow-none\",\n className\n )}\n {...props}\n >\n <ProgressStepper\n type={type}\n icon={icon}\n stepNumber={step}\n size={size}\n isError={isError}\n state={state}\n />\n </div>\n <div\n className={cn(\n \"flex h-px grow shrink-0 basis-0 bg-gray-200\",\n lastStep && \"opacity-0\",\n state === \"completed\" && \"bg-pink-300\"\n )}\n />\n </div>\n <div className={cn(\"text-center w-full flex flex-col items-center mt-2 px-0.5\", placement == \"left\" && \"text-left items-start\")}>\n {title && (\n <div className=\"text-xs font-bold text-slate-900 \t\">{title}</div>\n )}\n {description && (\n <div className=\"text-xs text-gray-500 \t\">{description}</div>\n )}\n </div>\n </div>\n );\n};\n\nexport const ProgressSteps: React.FC<ProgressStepsProps> = ({\n children,\n className,\n type = \"numberStep\",\n ...props\n}) => {\n return (\n <ProgressStepsContext.Provider value={type}>\n <div\n className={cn(\"flex items-start justify-between w-full\", className)}\n {...props}\n >\n {children}\n </div>\n </ProgressStepsContext.Provider>\n );\n};\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n Controller,\n ControllerProps,\n FieldPath,\n FieldValues,\n FormProvider,\n useFormContext,\n} from \"react-hook-form\"\n\nimport { cn } from \"../../helpers/utils\";\nimport { Label } from \"../Label\"\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> = {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { getFieldState, formState } = useFormContext()\n\n const fieldState = getFieldState(fieldContext.name, formState)\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\")\n }\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\ntype FormItemContextValue = {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n)\n\nconst FormItem = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div ref={ref} className={cn(\"space-y-2\", className)} {...props} />\n </FormItemContext.Provider>\n )\n})\nFormItem.displayName = \"FormItem\"\n\nconst FormLabel = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => {\n const { error, formItemId } = useFormField()\n\n return (\n <Label\n ref={ref}\n className={cn(error && \"text-red-500\",\"text-gray-700 \", className)}\n htmlFor={formItemId}\n {...props}\n />\n )\n})\nFormLabel.displayName = \"FormLabel\"\n\nconst FormControl = React.forwardRef<\n React.ElementRef<typeof Slot>,\n React.ComponentPropsWithoutRef<typeof Slot>\n>(({ ...props }, ref) => {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <Slot\n ref={ref}\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n )\n})\nFormControl.displayName = \"FormControl\"\n\nconst FormDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n ref={ref}\n id={formDescriptionId}\n className={cn(\"text-[0.8rem] text-gray-500\", className)}\n {...props}\n />\n )\n})\nFormDescription.displayName = \"FormDescription\"\n\nconst FormMessage = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, children, ...props }, ref) => {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message) : children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n ref={ref}\n id={formMessageId}\n className={cn(\"text-xs font-medium text-red-500\", className)}\n {...props}\n >\n {body}\n </p>\n )\n})\nFormMessage.displayName = \"FormMessage\"\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n}\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../helpers/utils\";\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { ChevronRight, Check} from \"lucide-react\"\n\nimport { cn } from \"../../helpers/utils\";\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-gray-900 shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-0\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border border-gray-300 bg-white p-1 text-gray-900 shadow-small data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 \",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-gray-100 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 \",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-gray-100 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 \",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n \n {checked === false && <div className=\"size-3.5 rounded-sm border border-gray-400 absolute inset-0\"/>}\n <DropdownMenuPrimitive.ItemIndicator>\n <div className=\"size-3.5 rounded-sm border border-pink-500 bg-pink-500 flex items-center justify-center text-white absolute inset-0\"><Check size={16} strokeWidth={3} /></div>\n \n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-gray-100 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 \",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <div className=\"size-3.5 rounded-full border border-gray-400 absolute inset-0\"/>\n <DropdownMenuPrimitive.ItemIndicator>\n <div className=\"size-3.5 rounded-full border-4 border-pink-500 absolute inset-0\"/>\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-gray-100\", className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n )\n}\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}\n","import parse from \"html-react-parser\";\n\nimport { AspectRatio } from \"../AspectRatio\";\nimport { ButtonsBlock, HeadingBlock, SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { ButtonsBlockProps, HeadingBlockProps, SectionBlockProps } from \"../CommonBlocks/utils\";\n\ninterface HowItWorksData {\n /**\n * Image banner or icon of the how it works.\n */\n image?: string;\n /**\n * Title of the how it works.\n */\n title: string;\n /**\n * Description of the how it works.\n */\n description?: string;\n}\n\ninterface HowItWorksSectionProps extends SectionBlockProps {\n /**\n * The template of the section.\n */\n template?: 1 | 2;\n /**\n * The data heading of the section.\n */\n dataHeading?: HeadingBlockProps;\n /**\n * The array data testimonials of the section.\n */\n dataHowItWorks?: HowItWorksData[];\n /**\n * The data buttons of the section.\n */\n dataButtons?: ButtonsBlockProps;\n}\n\nconst HowItWorksTemplateOne = ({\n dataHeading,\n dataHowItWorks,\n dataButtons,\n}: HowItWorksSectionProps) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataHowItWorks && dataHowItWorks?.length > 0 && (\n <div className=\"-mx-3.5 flex flex-row flex-wrap justify-center gap-y-5\">\n {dataHowItWorks.map((step: HowItWorksData, index: number) => (\n <div key={index} className=\"basis-full px-3.5 md:basis-1/3\">\n <div className=\"h-full rounded-lg border border-gray-100 bg-white px-6 py-8 text-center shadow-lg md:px-4 lg:px-6\">\n <div className=\"mx-auto flex h-9 w-9 items-center justify-center rounded-full bg-pink-500 text-xl font-bold text-white\">\n {index + 1}\n </div>\n <div className=\"mt-6 w-full\">\n <div className=\"w-full text-xl font-semibold\">{parse(step.title)}</div>\n {step?.description && (\n <div className=\"mt-2 text-base text-gray-600\">{parse(step.description)}</div>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst HowItWorksTemplateTwo = ({\n dataHeading,\n dataHowItWorks,\n dataButtons,\n}: HowItWorksSectionProps) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataHowItWorks && dataHowItWorks?.length > 0 && (\n <div className=\"-mx-3.5 mt-9 flex flex-row flex-wrap justify-center gap-y-9\">\n {dataHowItWorks.map((step: HowItWorksData, index: number) => (\n <div key={index} className=\"basis-full px-3.5 text-center md:basis-1/3\">\n <div className=\"relative mx-auto flex h-52 w-52 items-center justify-center\">\n <div className=\"absolute -left-4 -top-4 z-10 flex h-12 w-12 items-center justify-center rounded-full border-4 border-white bg-pink-500 text-lg font-bold text-white\">\n {index + 1}\n </div>\n {step?.image && (\n <div className=\"aspect-1 w-full overflow-hidden rounded-lg bg-gray-100\">\n <AspectRatio ratio={1}>\n <img\n src={step.image}\n alt={step.title}\n className=\"h-full w-full object-cover\"\n />\n </AspectRatio>\n </div>\n )}\n </div>\n <div className=\"mt-6 w-full\">\n <div className=\"w-full text-xl font-semibold\">{parse(step.title)}</div>\n {step?.description && (\n <div className=\"mt-2 text-base text-gray-600\">{parse(step.description)}</div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst renderTemplate = ({\n template,\n dataHeading,\n dataHowItWorks,\n dataButtons,\n}: HowItWorksSectionProps) => {\n switch (template) {\n case 1:\n return (\n <HowItWorksTemplateOne\n dataHeading={dataHeading}\n dataHowItWorks={dataHowItWorks}\n dataButtons={dataButtons}\n />\n );\n case 2:\n return (\n <HowItWorksTemplateTwo\n dataHeading={dataHeading}\n dataHowItWorks={dataHowItWorks}\n dataButtons={dataButtons}\n />\n );\n default:\n return (\n <HowItWorksTemplateOne\n dataHeading={dataHeading}\n dataHowItWorks={dataHowItWorks}\n dataButtons={dataButtons}\n />\n );\n }\n};\n\nconst HowItWorksSectionContent = ({\n template,\n dataHeading,\n dataHowItWorks,\n dataButtons,\n}: HowItWorksSectionProps) => {\n return (\n <>\n {renderTemplate({\n template,\n dataHeading,\n dataHowItWorks,\n dataButtons,\n })}\n </>\n );\n};\n\nconst HowItWorksSection = ({\n template = 1,\n background,\n className,\n idSection,\n dataHeading,\n dataHowItWorks,\n dataButtons,\n}: HowItWorksSectionProps) => {\n return (\n <SectionBlock className={className} idSection={idSection} background={background}>\n <HowItWorksSectionContent\n template={template}\n dataHeading={dataHeading}\n dataHowItWorks={dataHowItWorks}\n dataButtons={dataButtons}\n />\n </SectionBlock>\n );\n};\n\nexport type { HowItWorksSectionProps };\nexport { HowItWorksSection };\n","import { cva } from \"class-variance-authority\";\nimport parse from \"html-react-parser\";\nimport { CheckIcon } from \"lucide-react\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { HeroContentListFeatureProps, HeroContentListStats, HeroContentProps } from \"./utils\";\n\nconst featureVariants = cva(\"mt-6 list-inside text-gray-800\", {\n variants: {\n template: {\n 1: \"grid grid-cols-1 gap-y-3 \",\n // 2: \"grid w-full grid-cols-2 gap-2 md:grid-cols-4\",\n 2: \"grid grid-cols-1 gap-y-3 \",\n 3: \"mx-auto mt-0 mt-8 grid max-w-5xl grid-cols-1 items-center gap-4 text-left text-sm font-semibold md:mt-12 md:grid-cols-4 md:gap-12\",\n },\n },\n defaultVariants: {\n template: 1,\n },\n});\n\nexport const SectionHeroItemFeature = ({\n template,\n name,\n image,\n isFeatures,\n}: {\n template?: HeroContentProps[\"template\"];\n name?: HeroContentListFeatureProps[\"name\"];\n image?: HeroContentListFeatureProps[\"image\"];\n idx: number;\n value?: HeroContentListStats[\"value\"];\n suffix?: HeroContentListStats[\"suffix\"];\n unit?: HeroContentListStats[\"unit\"];\n description?: HeroContentListStats[\"description\"];\n isFeatures?: boolean;\n}) => {\n const renderTemplateFeature = () => {\n switch (template) {\n case 1:\n case 2:\n return (\n <>\n <li className={cn(\"flex space-x-4\", !isFeatures && \"hidden\")}>\n {!image ? (\n <div className=\"mt-0.5 flex h-5 w-5 flex-none items-center justify-center rounded-full bg-pink-100\">\n <CheckIcon className=\"h-4 w-4 text-pink-500\" />\n </div>\n ) : (\n <div className=\"flex h-10 w-10 flex-none shrink-0 items-center justify-center\">\n <img src={image} alt=\"\" className=\"max-w-full\" />\n </div>\n )}\n {name && <div className=\"ml-2 \">{parse(name)}</div>}\n </li>\n </>\n );\n case 3:\n return (\n <li className=\"flex h-full space-x-4\">\n {!image ? (\n <div className=\"flex h-5 w-5 flex-none items-center justify-center rounded-full bg-pink-100 p-1\">\n <CheckIcon className=\"h-4 w-4 text-pink-500\" />\n </div>\n ) : (\n <div className=\"flex h-10 w-10 flex-none shrink-0 items-center justify-center\">\n <img src={image} alt=\"\" className=\"max-w-full\" />\n </div>\n )}\n {name && <div className=\"my-auto ml-2 md:my-0\">{parse(name)}</div>}\n </li>\n );\n default:\n return null;\n }\n };\n\n return <>{renderTemplateFeature()}</>;\n};\n\nexport const SectionHeroListFeature = ({\n dataFeatures,\n template = 1,\n}: {\n dataFeatures: HeroContentProps[\"dataFeatures\"];\n template: HeroContentProps[\"template\"];\n}) => {\n return (\n <>\n {(dataFeatures?.length ?? 0) > 0 && (\n <ul className={cn(\"\", featureVariants({ template: template }))}>\n {dataFeatures?.map((feature, index) => (\n <SectionHeroItemFeature\n name={feature?.name}\n template={template}\n image={feature?.image}\n key={index}\n idx={index}\n isFeatures={true}\n />\n ))}\n </ul>\n )}\n </>\n );\n};\n","import { XIcon } from \"lucide-react\";\n\nimport { cn, Media, MediaContextProvider } from \"../../helpers/utils\";\nimport { AspectRatio } from \"../AspectRatio\";\nimport { Dialog, DialogBody, DialogClose, DialogContent, DialogTrigger } from \"../Dialog\";\nimport { IconButton } from \"../IconButton\";\nimport { HeroContentMediaProps } from \"./utils\";\n\nconst convertDataRation = (ratio) => {\n if (typeof ratio == \"string\") {\n const ratioNumbers = ratio?.split(\"/\")?.map(Number);\n const calRatio: number = ratioNumbers?.reduce((a, b) => a / b);\n return calRatio;\n } else {\n return ratio;\n }\n};\n\nexport const SectionHeroVideo = ({\n src,\n ratio,\n className,\n youtubeId,\n onClickFC = () => {},\n}: HeroContentMediaProps) => {\n return (\n <MediaContextProvider>\n <Media greaterThan=\"sm\">\n <AspectRatio className={cn(\"\")} ratio={convertDataRation(ratio)}>\n <img\n src={src}\n className={cn(\n \"hidden h-full w-full object-cover md:block\",\n className,\n !src ? \"bg-gray-200\" : \"\"\n )}\n alt=\"\"\n />\n {youtubeId && (\n <Dialog>\n <DialogTrigger onClick={onClickFC}>\n <div className=\"absolute top-0 z-10 hidden h-full w-full cursor-pointer items-center justify-center transition-transform group-hover:scale-105 md:flex\">\n <svg className=\"h-14 w-14\" viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"none\" fillRule=\"evenodd\">\n <circle\n stroke=\"#FFF\"\n strokeWidth={2}\n fillOpacity=\".24\"\n fill=\"#000\"\n cx={24}\n cy={24}\n r={23}\n />\n <path\n d=\"M34.667 24.335c0 .515-.529.885-.529.885l-14.84 9.133c-1.08.704-1.965.182-1.965-1.153V15.467c0-1.338.884-1.856 1.968-1.153L34.14 23.45c-.002 0 .527.37.527.885Z\"\n fill=\"#FFF\"\n fillRule=\"nonzero\"\n />\n </g>\n </svg>\n </div>\n </DialogTrigger>\n <DialogContent\n hideCloseBtn\n size=\"xl\"\n position=\"center\"\n className=\"bg-transparent shadow-none\"\n >\n <DialogBody className=\"relative bg-transparent p-4 text-center\">\n <div className=\"aspect-[16/9] w-full p-0\">\n <iframe\n title={youtubeId}\n src={`https://www.youtube.com/embed/${youtubeId}?autoplay=1`}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n referrerPolicy=\"strict-origin-when-cross-origin\"\n allowFullScreen\n className=\"h-full w-full\"\n />\n </div>\n <DialogClose asChild>\n <IconButton\n variant=\"secondary\"\n className=\"absolute right-0 top-0 rounded-full\"\n size=\"sm\"\n >\n <XIcon className=\"h-6 w-6\" />\n </IconButton>\n </DialogClose>\n </DialogBody>\n </DialogContent>\n </Dialog>\n )}\n </AspectRatio>\n </Media>\n\n {youtubeId && (\n <Media lessThan=\"md\">\n <div className=\"realtive aspect-[16/9] w-full overflow-hidden md:hidden\">\n <iframe\n title={youtubeId}\n src={`https://www.youtube.com/embed/${youtubeId}?controls=1`}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n referrerPolicy=\"strict-origin-when-cross-origin\"\n allowFullScreen\n className=\"h-full w-full object-cover md:hidden\"\n />\n </div>\n </Media>\n )}\n </MediaContextProvider>\n );\n};\n\nexport const SectionHeroMedia = ({\n type = 1,\n src,\n ratio,\n className,\n classNameMedia,\n youtubeId,\n onClickFC = () => {},\n}: HeroContentMediaProps) => {\n return (\n <div className={className}>\n {!youtubeId ? (\n <AspectRatio ratio={convertDataRation(ratio)}>\n <img\n src={src}\n className={cn(\"h-full w-full object-cover\", classNameMedia, !src ? \"bg-gray-200\" : \"\")}\n alt=\"\"\n />\n </AspectRatio>\n ) : (\n <SectionHeroVideo\n type={type}\n src={src}\n ratio={ratio}\n youtubeId={youtubeId}\n onClickFC={onClickFC}\n />\n )}\n </div>\n );\n};\n","import parse from \"html-react-parser\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst SectionHeroListStats = ({ value, suffix, unit, description, idx }: any) => {\n return (\n <div className={cn(\"\")}>\n {value && (\n <div className=\"line-clamp-2 font-bold text-pink-500\">\n {value}\n {(suffix || unit) && (\n <span>\n {suffix} {unit}\n </span>\n )}\n </div>\n )}\n {description && (\n <div className=\"mt-1 text-sm leading-tight text-gray-500\">{parse(description)}</div>\n )}\n </div>\n );\n};\n\nexport const SectionHeroStats = ({ dataStats }: { dataStats: HeroContentProps[\"dataStats\"] }) => {\n return (\n <>\n {(dataStats?.length ?? 0) > 0 && (\n <ul\n className={cn(\n \"mt-8 grid w-full auto-cols-[minmax(0,150px)] grid-flow-col gap-3 md:mt-10\"\n )}\n >\n {dataStats?.map((stat, index) => (\n <SectionHeroListStats\n value={stat?.value}\n suffix={stat?.suffix}\n unit={stat?.unit}\n description={stat?.description}\n key={index}\n idx={index}\n />\n ))}\n </ul>\n )}\n </>\n );\n};\n","import { cn } from \"../../helpers/utils\";\nimport { ButtonsBlock, HeadingBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { SectionHeroListFeature } from \"./HeroSectionFeatures\";\nimport { SectionHeroMedia } from \"./HeroSectionMedia\";\nimport { SectionHeroStats } from \"./HeroSectionStats\";\nimport { HeroContentProps } from \"./utils\";\n\nexport const HeroContentTemplateOne = ({\n dataHeading,\n dataButtons,\n dataFeatures,\n template,\n dataStats,\n dataMedia,\n advancedComponent,\n}: HeroContentProps) => {\n return (\n <div className={cn(\"grid grid-cols-1 items-center gap-8 md:grid-cols-2 md:gap-6 \")}>\n <div className=\"col-span-1 \">\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading || \"h1\"}\n align=\"left\"\n sizeHeading={dataHeading?.sizeHeading}\n colorScheme={dataHeading?.colorScheme || \"black\"}\n className={cn(\"mb-0 md:mb-0\", dataHeading?.className)}\n />\n <SectionHeroListFeature dataFeatures={dataFeatures} template={template} />\n {dataButtons && (\n <ButtonsBlock\n align=\"left\"\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n />\n )}\n\n <SectionHeroStats dataStats={dataStats} />\n </div>\n <div className=\"col-span-1 md:pl-10\">\n {advancedComponent ? (\n advancedComponent\n ) : (\n <SectionHeroMedia\n type={dataMedia?.type || 1}\n src={dataMedia?.src || \"\"}\n ratio={dataMedia?.ratio}\n youtubeId={dataMedia?.youtubeId}\n />\n )}\n </div>\n </div>\n );\n};\n\nexport const HeroContentTemplateTwo = ({\n dataHeading,\n dataButtons,\n dataFeatures,\n template,\n dataStats,\n dataMedia,\n advancedComponent,\n}: HeroContentProps) => {\n return (\n <div className={cn(\"grid grid-cols-1 items-center gap-8 md:grid-cols-2 md:gap-6\")}>\n <div className=\"order-2 col-span-1 md:order-1 md:pr-10\">\n {advancedComponent ? (\n advancedComponent\n ) : (\n <SectionHeroMedia\n type={dataMedia?.type || 1}\n src={dataMedia?.src || \"\"}\n ratio={dataMedia?.ratio}\n youtubeId={dataMedia?.youtubeId}\n />\n )}\n </div>\n\n <div className=\"order-1 col-span-1 md:order-2\">\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading || \"h1\"}\n align=\"left\"\n sizeHeading={dataHeading?.sizeHeading}\n colorScheme={dataHeading?.colorScheme || \"black\"}\n className={cn(\"mb-0 md:mb-0\", dataHeading?.className)}\n />\n <SectionHeroListFeature dataFeatures={dataFeatures} template={template} />\n\n {dataButtons && (\n <div className=\"flex w-full items-center justify-center md:justify-start\">\n <ButtonsBlock\n align=\"left\"\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n />\n </div>\n )}\n\n <SectionHeroStats dataStats={dataStats} />\n </div>\n </div>\n );\n};\n\nexport const HeroContentTemplateThree = ({\n dataHeading,\n dataButtons,\n dataFeatures,\n template,\n dataStats,\n dataMedia,\n advancedComponent,\n}: HeroContentProps) => {\n return (\n <>\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading || \"h1\"}\n align=\"center\"\n sizeHeading={dataHeading?.sizeHeading}\n colorScheme={dataHeading?.colorScheme || \"black\"}\n className={cn(\"mb-0 md:mb-0\", dataHeading?.className)}\n />\n {dataButtons && (\n <ButtonsBlock\n align=\"center\"\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className=\"inline-flex w-full items-center justify-center text-center text-base font-semibold md:w-full\"\n />\n )}\n <SectionHeroListFeature dataFeatures={dataFeatures} template={template} />\n <div className=\" mx-auto max-w-xl [&>ul]:justify-center\">\n <SectionHeroStats dataStats={dataStats} />\n </div>\n\n {advancedComponent ? (\n advancedComponent\n ) : (\n <>\n {dataMedia?.src && (\n <SectionHeroMedia\n type={dataMedia?.type || 1}\n src={dataMedia?.src || \"\"}\n ratio={dataMedia?.ratio}\n youtubeId={dataMedia?.youtubeId}\n className=\"mt-8 md:mt-12\"\n classNameMedia=\"rounded-lg\"\n />\n )}\n </>\n )}\n </>\n );\n};\n","import { cn } from \"../../helpers/utils\";\nimport { SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport {\n HeroContentTemplateOne,\n HeroContentTemplateThree,\n HeroContentTemplateTwo,\n} from \"./HeroSectionTemplate\";\nimport { HeroContentProps } from \"./utils\";\n\nconst BG_DEFAULT = `var(\n --gradient-pink-1,\n linear-gradient(\n 38deg,\n rgba(255, 255, 255, 0) 78%,\n rgba(255, 255, 255, 0.69) 100%\n ),\n linear-gradient(45deg, #fff 10%, rgba(255, 255, 255, 0) 22%),\n linear-gradient(0deg, #fff 0%, rgba(255, 255, 255, 0) 91%),\n linear-gradient(\n 214deg,\n rgba(255, 255, 255, 0) 0%,\n rgba(255, 91, 189, 0.2) 25%,\n rgba(255, 255, 255, 0) 71%\n ),\n linear-gradient(\n 212deg,\n rgba(255, 255, 255, 0) 51%,\n rgba(255, 196, 233, 0.7) 64%,\n rgba(255, 255, 255, 0) 80%\n ),\n #fff\n)`;\n\nconst renderTemplate = ({\n template,\n dataHeading,\n dataButtons,\n dataFeatures,\n dataStats,\n dataMedia,\n advancedComponent,\n}: HeroContentProps) => {\n switch (template) {\n case 1:\n return (\n <HeroContentTemplateOne\n dataHeading={dataHeading}\n dataButtons={dataButtons}\n dataFeatures={dataFeatures}\n dataStats={dataStats}\n template={template}\n dataMedia={dataMedia}\n advancedComponent={advancedComponent}\n />\n );\n case 2:\n return (\n <HeroContentTemplateTwo\n dataHeading={dataHeading}\n dataButtons={dataButtons}\n dataFeatures={dataFeatures}\n dataStats={dataStats}\n template={template}\n dataMedia={dataMedia}\n advancedComponent={advancedComponent}\n />\n );\n case 3:\n return (\n <HeroContentTemplateThree\n dataHeading={dataHeading}\n dataButtons={dataButtons}\n dataFeatures={dataFeatures}\n dataStats={dataStats}\n template={template}\n dataMedia={dataMedia}\n advancedComponent={advancedComponent}\n />\n );\n default:\n return (\n <HeroContentTemplateOne\n dataHeading={dataHeading}\n dataButtons={dataButtons}\n dataFeatures={dataFeatures}\n dataStats={dataStats}\n template={template}\n dataMedia={dataMedia}\n advancedComponent={advancedComponent}\n />\n );\n }\n};\n\nconst SectionHeroContent = ({\n template,\n dataHeading,\n dataButtons,\n dataFeatures,\n dataStats,\n dataMedia,\n advancedComponent,\n}) => {\n return (\n <>\n {renderTemplate({\n template,\n dataHeading,\n dataButtons,\n dataFeatures,\n dataStats,\n dataMedia,\n advancedComponent,\n })}\n </>\n );\n};\n\nexport const HeroSection = ({\n template = 1,\n idSection,\n dataHeading,\n dataButtons,\n dataFeatures,\n dataStats,\n dataMedia,\n className,\n background,\n advancedComponent = null,\n}: HeroContentProps) => {\n return (\n <SectionBlock\n className={cn(className)}\n background={background ?? BG_DEFAULT}\n idSection={idSection}\n >\n <SectionHeroContent\n dataButtons={dataButtons}\n template={template}\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataStats={dataStats}\n dataMedia={dataMedia}\n advancedComponent={advancedComponent}\n />\n </SectionBlock>\n );\n};\n","import { memo } from \"react\";\n\nimport { cn } from \"../../../helpers/utils\";\nimport { ButtonsBlock, HeadingBlock } from \"../../CommonBlocks\";\nimport { BrandData, SocialProofSectionProps } from \"../utils\";\n\nexport const SocialProofTemplate1 = memo(\n ({ dataHeading, dataBrands, dataButtons, spaceX, isScrollSnap }: SocialProofSectionProps) => {\n const spaceXClasses = {\n \"20px\": \"md:gap-x-5\",\n \"28px\": \"md:gap-x-7\",\n \"36px\": \"md:gap-x-9\",\n \"40px\": \"md:gap-x-10\",\n \"48px\": \"md:gap-x-12\",\n \"56px\": \"md:gap-x-14\",\n \"64px\": \"md:gap-x-16\",\n \"80px\": \"md:gap-x-20\",\n };\n\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataBrands && dataBrands?.length > 0 && (\n <div\n className={cn(\n \"list-brands flex flex-row gap-y-6 overflow-hidden overflow-x-auto py-2 md:flex-wrap md:justify-center\",\n spaceXClasses[spaceX || \"20px\"],\n isScrollSnap\n ? \"-mx-5 snap-x snap-mandatory flex-nowrap space-x-5 px-5 pb-3 md:mx-0 md:space-x-0 md:px-0\"\n : \"mx-auto max-w-xs flex-wrap justify-center md:max-w-full\"\n )}\n >\n {dataBrands?.map((brand: BrandData, index: number) => {\n const Wrapper = brand?.url ? \"a\" : \"div\";\n const wrapperProps = brand?.url\n ? {\n href: brand.url,\n title: brand.name,\n target: brand.newTab ? \"_blank\" : \"_self\",\n }\n : {};\n\n return (\n <div\n className={cn(\n \"flex max-h-28 w-auto items-center justify-center md:max-w-36 md:basis-auto md:px-0\",\n isScrollSnap ? \"shrink-0 basis-1/3 snap-center\" : \"basis-1/2 px-3\"\n )}\n key={index}\n >\n <Wrapper\n {...wrapperProps}\n className=\"group flex h-full w-full items-center justify-center\"\n >\n <img\n src={brand?.logo}\n loading=\"lazy\"\n alt={brand?.name}\n className={cn(\n \"max-h-full max-w-full object-contain\",\n brand?.url && \"transform transition group-hover:scale-105\"\n )}\n />\n </Wrapper>\n </div>\n );\n })}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n }\n);\n","import { memo } from \"react\";\n\nimport { cn } from \"../../../helpers/utils\";\nimport { ButtonsBlock, HeadingBlock } from \"../../CommonBlocks\";\nimport { BrandData, SocialProofSectionProps } from \"../utils\";\n\nexport const SocialProofTemplate2 = memo(\n ({ dataHeading, dataBrands, dataButtons, isScrollSnap }: SocialProofSectionProps) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataBrands && dataBrands?.length > 0 && (\n <div\n className={cn(\n \"list-brands flex md:flex-wrap md:justify-center md:gap-y-6\",\n isScrollSnap\n ? \"-mx-5 snap-x snap-mandatory flex-nowrap space-x-5 overflow-hidden overflow-x-auto px-5 pb-3 md:mx-0 md:space-x-0 md:px-0\"\n : \"-mx-2.5 flex-wrap gap-y-5 md:-mx-3\"\n )}\n >\n {dataBrands.map((brand: BrandData, index: number) => {\n const Wrapper = brand?.url ? \"a\" : \"div\";\n const wrapperProps = brand?.url\n ? {\n href: brand.url,\n title: brand.name,\n target: brand.newTab ? \"_blank\" : \"_self\",\n }\n : {};\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center text-center md:basis-1/4 md:px-3\",\n isScrollSnap ? \"shrink-0 basis-5/12 snap-center\" : \"basis-1/2 px-2.5\"\n )}\n key={index}\n >\n <Wrapper\n {...wrapperProps}\n className=\"flex h-full w-full items-center justify-center rounded-md border border-gray-200 bg-white p-3 duration-300 hover:border-pink-500\"\n >\n <div className=\"flex w-full items-center justify-center\">\n <img\n src={brand?.logo}\n loading=\"lazy\"\n alt={brand?.name}\n className=\"h-auto max-h-28 w-auto max-w-full object-contain\"\n />\n </div>\n </Wrapper>\n </div>\n );\n })}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align={\"center\"}\n />\n )}\n </>\n );\n }\n);\n","import { memo } from \"react\";\n\nimport { cn } from \"../../../helpers/utils\";\nimport { useIsMobile } from \"../../ActionButton/utils\";\nimport { Carousel, CarouselContent, CarouselDots, CarouselItem } from \"../../Carousel\";\nimport { ButtonsBlock, HeadingBlock } from \"../../CommonBlocks\";\nimport { BrandData, SocialProofSectionProps } from \"../utils\";\n\nconst renderBrandItem = (brand?: BrandData, className?: string) => {\n if (!brand) {\n // Empty placeholder to maintain layout when an item is missing in the bottom row\n return <div className={cn(\"h-full w-full\", className)} />;\n }\n\n const Wrapper: React.ElementType = brand.url ? \"a\" : \"div\";\n\n return (\n <div className={cn(\"h-full w-full\", className)}>\n <Wrapper\n {...(brand.url && {\n href: brand.url,\n title: brand.name,\n target: brand.newTab ? \"_blank\" : \"_self\",\n })}\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-md border border-gray-200 bg-white p-3\",\n brand.url && \"duration-300 hover:border-pink-500\"\n )}\n >\n <div className=\"flex h-full w-full items-center justify-center\">\n <img\n src={brand.logo}\n alt={brand.name}\n className=\"h-auto max-h-full w-auto max-w-full object-contain\"\n />\n </div>\n </Wrapper>\n </div>\n );\n};\n\nexport const SocialProofTemplate3 = memo(\n ({ dataHeading, dataBrands, dataButtons }: SocialProofSectionProps) => {\n const isMobileDevice = useIsMobile();\n\n const topRow: BrandData[] = [];\n const bottomRow: BrandData[] = [];\n\n if (dataBrands && dataBrands.length > 10) {\n const half = Math.ceil(dataBrands.length / 2);\n topRow.push(...dataBrands.slice(0, half));\n bottomRow.push(...dataBrands.slice(half));\n }\n\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n\n {dataBrands && dataBrands.length > 0 && (\n <Carousel\n opts={{\n align: isMobileDevice ? \"center\" : \"start\",\n }}\n className=\"w-full\"\n >\n <CarouselContent classNameContent=\"overflow-visible md:overflow-hidden\">\n {dataBrands.length >= 12\n ? topRow.map((brand, idx) => (\n <CarouselItem\n key={idx}\n className=\"flex shrink-0 basis-5/12 flex-col items-center justify-between gap-3 pl-3 md:basis-1/4 md:gap-4 md:pl-4 lg:basis-1/6\"\n >\n {renderBrandItem(brand, \"min-h-0 flex-1\")}\n {bottomRow[idx] ? (\n renderBrandItem(bottomRow[idx], \"min-h-0 flex-1\")\n ) : (\n <div className=\"min-h-0 flex-1\" />\n )}\n </CarouselItem>\n ))\n : dataBrands.map((brand, idx) => (\n <CarouselItem\n key={idx}\n className=\"flex basis-5/12 items-center justify-center pl-3 md:basis-1/4 md:pl-4 lg:basis-1/6\"\n >\n {renderBrandItem(brand)}\n </CarouselItem>\n ))}\n </CarouselContent>\n <CarouselDots className=\"mt-5\" />\n </Carousel>\n )}\n\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align={\"center\"}\n />\n )}\n </>\n );\n }\n);\n","import { memo } from \"react\";\n\nimport { cn } from \"../../../helpers/utils\";\nimport { ButtonsBlock, HeadingBlock } from \"../../CommonBlocks\";\nimport { InfiniteSlider } from \"../../core/infinite-slider\";\nimport { BrandData, SocialProofSectionProps } from \"../utils\";\n\nconst renderBrandItem = (brand?: BrandData, className?: string) => {\n const Wrapper: React.ElementType = brand?.url ? \"a\" : \"div\";\n\n return (\n <div className={cn(\"h-full w-full\", className)}>\n <Wrapper\n {...(brand?.url && {\n href: brand.url,\n title: brand.name,\n target: brand.newTab ? \"_blank\" : \"_self\",\n })}\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-md border border-gray-200 bg-white p-3\",\n brand?.url && \"duration-300 hover:border-pink-500\"\n )}\n >\n <div className=\"flex h-full w-full items-center justify-center\">\n <img\n src={brand?.logo}\n alt={brand?.name}\n className=\"`h-auto max-h-full w-auto max-w-full object-contain\"\n />\n </div>\n </Wrapper>\n </div>\n );\n};\n\nexport const SocialProofTemplate4 = memo(\n ({ dataHeading, dataBrands, dataButtons }: SocialProofSectionProps) => {\n const brandsLength = dataBrands?.length ?? 0;\n const isRunAnimation = brandsLength > 6;\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {brandsLength > 0 && (\n <>\n {isRunAnimation ? (\n <div className=\"mark-horizontal-slider relative overflow-hidden\">\n <InfiniteSlider\n direction=\"horizontal\"\n speed={70}\n speedOnHover={0.05}\n gap={20}\n className=\"inline-flex flex-row\"\n >\n {dataBrands?.map((brand: BrandData, index: number) => (\n <div key={index} className=\"w-32 md:w-40\">\n {renderBrandItem(brand)}\n </div>\n ))}\n </InfiniteSlider>\n </div>\n ) : (\n <div\n className={cn(\n \"list-brands -mx-5 flex snap-x snap-mandatory flex-nowrap space-x-3 overflow-hidden overflow-x-auto px-5 pb-3 md:-mx-3 md:flex-wrap md:justify-center md:gap-y-6 md:space-x-0 md:px-0\"\n )}\n >\n {dataBrands?.map((brand: BrandData, index: number) => (\n <div\n key={index}\n className=\"flex shrink-0 basis-5/12 snap-center items-center justify-center md:basis-1/4 md:px-3 lg:basis-1/6\"\n >\n {renderBrandItem(brand)}\n </div>\n ))}\n </div>\n )}\n </>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align={\"center\"}\n />\n )}\n <style>{`\n .mark-horizontal-slider {\n mask-image: linear-gradient(\n to right,\n transparent 0px,\n black 32px,\n black calc(100% - 32px),\n transparent 100%\n );\n -webkit-mask-image: linear-gradient(\n to right,\n transparent 0px,\n black 32px,\n black calc(100% - 32px),\n transparent 100%\n );\n }\n `}</style>\n </>\n );\n }\n);\n","import { useEffect, useState } from \"react\";\nimport { animate, motion, useMotionValue } from \"motion/react\";\nimport useMeasure from \"react-use-measure\";\n\nimport { cn } from \"../../helpers/utils\";\n\nexport type InfiniteSliderProps = {\n children: React.ReactNode;\n gap?: number;\n speed?: number;\n speedOnHover?: number;\n direction?: \"horizontal\" | \"vertical\";\n reverse?: boolean;\n className?: string;\n classNameMotion?: string;\n};\n\nexport function InfiniteSlider({\n children,\n gap = 16,\n speed = 100,\n speedOnHover,\n direction = \"horizontal\",\n reverse = false,\n className,\n classNameMotion,\n}: InfiniteSliderProps) {\n const [currentSpeed, setCurrentSpeed] = useState(speed);\n const [ref, { width, height }] = useMeasure();\n const translation = useMotionValue(0);\n const [isTransitioning, setIsTransitioning] = useState(false);\n const [key, setKey] = useState(0);\n\n useEffect(() => {\n let controls;\n const size = direction === \"horizontal\" ? width : height;\n const contentSize = size + gap;\n const from = reverse ? -contentSize / 2 : 0;\n const to = reverse ? 0 : -contentSize / 2;\n\n const distanceToTravel = Math.abs(to - from);\n const duration = distanceToTravel / currentSpeed;\n\n if (isTransitioning) {\n const remainingDistance = Math.abs(translation.get() - to);\n const transitionDuration = remainingDistance / currentSpeed;\n\n controls = animate(translation, [translation.get(), to], {\n ease: \"linear\",\n duration: transitionDuration,\n onComplete: () => {\n setIsTransitioning(false);\n setKey((prevKey) => prevKey + 1);\n },\n });\n } else {\n controls = animate(translation, [from, to], {\n ease: \"linear\",\n duration: duration,\n repeat: Infinity,\n repeatType: \"loop\",\n repeatDelay: 0,\n onRepeat: () => {\n translation.set(from);\n },\n });\n }\n\n return controls?.stop;\n }, [key, translation, currentSpeed, width, height, gap, isTransitioning, direction, reverse]);\n\n const hoverProps = speedOnHover\n ? {\n onHoverStart: () => {\n setIsTransitioning(true);\n setCurrentSpeed(speedOnHover);\n },\n onHoverEnd: () => {\n setIsTransitioning(true);\n setCurrentSpeed(speed);\n },\n onTouchStart: () => {\n setIsTransitioning(true);\n setCurrentSpeed(speedOnHover);\n },\n onTouchEnd: () => {\n setIsTransitioning(true);\n setCurrentSpeed(speed);\n },\n }\n : {};\n\n return (\n <div className={cn(\"overflow-hidden\", className)}>\n <motion.div\n className={cn(\"flex w-max\", classNameMotion)}\n style={{\n ...(direction === \"horizontal\"\n ? { x: translation, paddingLeft: gap }\n : { y: translation }),\n gap: `${gap}px`,\n flexDirection: direction === \"horizontal\" ? \"row\" : \"column\",\n }}\n ref={ref}\n {...hoverProps}\n >\n {children}\n {children}\n </motion.div>\n </div>\n );\n}\n","import { cn } from \"../../helpers/utils\";\nimport { SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport {\n SocialProofTemplate1,\n SocialProofTemplate2,\n SocialProofTemplate3,\n SocialProofTemplate4,\n} from \"./SocialProofTemplates\";\nimport { SocialProofSectionProps } from \"./utils\";\n\nconst renderTemplate = ({\n template,\n dataHeading,\n dataBrands,\n dataButtons,\n spaceX,\n isScrollSnap,\n}: SocialProofSectionProps) => {\n switch (template) {\n case 1:\n return (\n <SocialProofTemplate1\n dataHeading={dataHeading}\n dataBrands={dataBrands}\n dataButtons={dataButtons}\n spaceX={spaceX}\n isScrollSnap={isScrollSnap}\n />\n );\n case 2:\n return (\n <SocialProofTemplate2\n dataHeading={dataHeading}\n dataBrands={dataBrands}\n dataButtons={dataButtons}\n isScrollSnap={isScrollSnap}\n />\n );\n case 3:\n return (\n <SocialProofTemplate3\n dataHeading={dataHeading}\n dataBrands={dataBrands}\n dataButtons={dataButtons}\n isScrollSnap={isScrollSnap}\n />\n );\n case 4:\n return (\n <SocialProofTemplate4\n dataHeading={dataHeading}\n dataBrands={dataBrands}\n dataButtons={dataButtons}\n isScrollSnap={isScrollSnap}\n />\n );\n default:\n return (\n <SocialProofTemplate1\n dataHeading={dataHeading}\n dataBrands={dataBrands}\n dataButtons={dataButtons}\n spaceX={spaceX}\n isScrollSnap={isScrollSnap}\n />\n );\n }\n};\n\nconst SocialProofSectionContent = ({\n template,\n dataHeading,\n dataBrands,\n dataButtons,\n spaceX,\n isScrollSnap,\n}: SocialProofSectionProps) => {\n return (\n <>\n {renderTemplate({\n template,\n dataHeading,\n dataBrands,\n dataButtons,\n spaceX,\n isScrollSnap,\n })}\n </>\n );\n};\n\nconst SocialProofSection = ({\n template = 1,\n background,\n className,\n idSection,\n dataHeading,\n dataBrands,\n dataButtons,\n spaceX = \"20px\",\n isScrollSnap,\n}: SocialProofSectionProps) => {\n return (\n <SectionBlock\n className={cn(template === 3 && \"overflow-hidden md:overflow-visible\", className)}\n idSection={idSection}\n background={background}\n >\n <SocialProofSectionContent\n template={template}\n dataHeading={dataHeading}\n dataBrands={dataBrands}\n dataButtons={dataButtons}\n spaceX={spaceX}\n isScrollSnap={isScrollSnap}\n />\n </SectionBlock>\n );\n};\n\nexport type { SocialProofSectionProps };\nexport { SocialProofSection };\n","import { useState } from \"react\";\nimport { ChevronRightIcon } from \"@heroicons/react/16/solid\";\nimport parse from \"html-react-parser\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from \"../Accordion\";\nimport { AspectRatio } from \"../AspectRatio\";\nimport { ButtonsBlock, HeadingBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { TextButton } from \"../TextButton\";\nimport { useIsMobile } from \"./../ActionButton/utils\";\nimport { FeatureData, FeatureSectionProps } from \"./utils\";\n\nconst RenderFeatureLink = ({\n btnLink,\n btnName,\n newTab,\n}: {\n btnLink: FeatureData[\"btnLink\"];\n btnName: FeatureData[\"btnName\"];\n newTab: FeatureData[\"newTab\"];\n}) => {\n return (\n <TextButton variant=\"primary\" asChild>\n <a href={btnLink} target={newTab ? \"_blank\" : \"_self\"} rel=\"noreferrer\">\n {btnName || \"Xem chi tiết\"}\n <ChevronRightIcon className=\"h-4 w-4\" />\n </a>\n </TextButton>\n );\n};\n\nconst FeatureTemplateOne = ({ dataHeading, dataFeatures, dataButtons }) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n\n {dataFeatures && (\n <div className=\"list-features grid grid-cols-1 gap-8 md:grid-cols-3 lg:gap-12\">\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div className=\"feature-item relative flex w-full flex-col text-center\" key={index}>\n {feature?.image && (\n <div className=\"mx-auto h-16 w-16\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n <div className=\"mx-auto mt-4 w-full max-w-xs flex-1 md:max-w-full\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-base text-gray-600\">{parse(feature.description)}</div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst FeatureTemplateTwo = ({ dataHeading, dataFeatures, dataButtons }) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataFeatures && (\n <div className=\"list-features list-features-2 grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4\">\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div\n className=\"feature-item relative flex w-full flex-col overflow-hidden rounded-md border border-gray-200 p-5\"\n key={index}\n >\n {feature?.image && (\n <div className=\"h-16 w-16\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n <div className=\"mt-4 flex w-full flex-1 flex-col\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-base text-gray-600\">{parse(feature.description)}</div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n <style>{`\n .list-features-2 .feature-item {\n background: linear-gradient(180deg, #FAFAFA 0%, rgba(255, 255, 255, 1) 91%);\n }\n `}</style>\n </>\n );\n};\n\nconst FeatureTemplateThree = ({ dataHeading, dataFeatures, dataButtons }) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataFeatures && (\n <div className=\"list-features grid grid-cols-1 gap-8 md:grid-cols-3 lg:gap-12\">\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div className=\"feature-item relative flex w-full flex-col\" key={index}>\n {feature?.image && (\n <div className=\"h-16 w-16\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n <div className=\"mt-4 w-full flex-1\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-base text-gray-600\">{parse(feature.description)}</div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst FeatureTemplateFour = ({ dataHeading, dataFeatures, dataButtons }) => {\n return (\n <div className=\"grid grid-cols-1 gap-0 lg:grid-cols-10 lg:gap-12\">\n <div className=\"lg:col-span-4 lg:flex lg:flex-col lg:justify-center\">\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"left\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={cn(\"text-center lg:mb-0 lg:text-left\", dataHeading?.className)}\n />\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={`hidden lg:flex ${dataButtons?.className}`}\n align=\"left\"\n />\n )}\n </div>\n <div className=\"lg:col-span-6\">\n {dataFeatures && (\n <div className=\"list-features grid grid-cols-1 gap-6 md:grid-cols-2 md:gap-5\">\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div\n className=\"feature-item relative flex w-full flex-col rounded-lg border border-gray-200 bg-white p-5\"\n key={index}\n >\n {feature?.image && (\n <div className=\"h-16 w-16\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n <div className=\"mt-4 flex w-full flex-1 flex-col\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-base text-gray-600\">\n {parse(feature.description)}\n </div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={`flex lg:hidden ${dataButtons?.className}`}\n align=\"center\"\n />\n )}\n </div>\n </div>\n );\n};\n\nconst FeatureTemplateFive = ({ dataHeading, dataFeatures, dataButtons }) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataFeatures && (\n <div className=\"list-features mx-auto grid max-w-4xl grid-cols-1 gap-5 md:grid-cols-2\">\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div\n className=\"feature-item relative flex w-full flex-col rounded-lg border border-gray-200 bg-white p-7\"\n key={index}\n >\n {feature?.image && (\n <div className=\"h-16 w-16\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n <div className=\"mt-4 flex w-full flex-1 flex-col\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-base text-gray-600\">{parse(feature.description)}</div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst FeatureTemplateSix = ({ dataHeading, dataFeatures, dataButtons }) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataFeatures && (\n <div className=\"list-features grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-3 lg:gap-x-7 lg:gap-y-10\">\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div className=\"feature-item relative w-full\" key={index}>\n {feature?.image && (\n <div className=\"h-12 w-12\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n <div className=\"mt-3 flex w-full flex-1 flex-col\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-sm text-gray-500\">{parse(feature.description)}</div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst FeatureTemplateSeven = ({ dataHeading, dataFeatures, dataButtons }) => {\n const totalItems = dataFeatures?.length || 0;\n\n const BASIS_CLASSES = {\n default: \"md:basis-1/5\",\n special: \"md:basis-1/4\",\n };\n\n const ROW_BREAK_INDEX = {\n 6: 3,\n 7: 4,\n 8: 4,\n };\n\n const isSpecialLayout = (totalItems >= 1 && totalItems <= 4) || [6, 7, 8].includes(totalItems);\n const basisClass = isSpecialLayout ? BASIS_CLASSES.special : BASIS_CLASSES.default;\n const breakAfterIndex = ROW_BREAK_INDEX[totalItems] ?? -1;\n\n const renderFeatureItem = (feature: FeatureData, index: number) => {\n const WrapperTag = feature?.btnLink ? \"a\" : \"div\";\n const wrapperProps = feature?.btnLink\n ? {\n href: feature.btnLink,\n target: feature?.newTab ? \"_blank\" : \"_self\",\n rel: \"noopener noreferrer\",\n title: feature?.btnName,\n }\n : {};\n\n return (\n <div\n key={index}\n className={cn(\n \"basis-1/2 px-2 lg:px-5\",\n basisClass,\n index === breakAfterIndex && \"md:break-after-row\",\n feature?.btnLink && \"group cursor-pointer\"\n )}\n >\n <WrapperTag\n {...wrapperProps}\n className=\"feature-item relative flex w-full flex-col items-center gap-3\"\n >\n {feature?.image && (\n <div className=\"h-16 w-16 transition-transform duration-300 group-hover:scale-105\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n loading=\"lazy\"\n />\n </div>\n )}\n <div className=\"w-full flex-1 text-center\">\n {feature?.name && (\n <h3 className=\"text-base duration-300 group-hover:text-pink-500\">\n {parse(feature.name)}\n </h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-sm text-gray-500\">{parse(feature.description)}</div>\n )}\n </div>\n </WrapperTag>\n </div>\n );\n };\n\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n\n {dataFeatures && (\n <div className=\"list-features -mx-2 flex flex-wrap justify-center gap-y-10 lg:-mx-5\">\n {dataFeatures.map((feature: FeatureData, index: number) =>\n renderFeatureItem(feature, index)\n )}\n </div>\n )}\n\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst FeatureTemplateEight = ({ dataHeading, dataFeatures, dataButtons }) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataFeatures && (\n <div className=\"list-features grid grid-cols-1 gap-6 md:grid-cols-3\">\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div\n className=\"feature-item relative flex w-full flex-col overflow-hidden rounded-xl bg-gray-100\"\n key={index}\n >\n <div className=\"flex w-full flex-1 flex-col p-5\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-base text-gray-600\">{parse(feature.description)}</div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n {feature?.image && (\n <div className=\"w-full\" style={{ aspectRatio: \"347/220\" }}>\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst FeatureTemplateNine = ({\n dataHeading,\n dataFeatures,\n dataButtons,\n dataBanner,\n}: FeatureSectionProps) => {\n return (\n <div className=\"grid grid-cols-1 gap-10 lg:grid-cols-10 lg:gap-14\">\n <div className=\"flex items-center lg:col-span-6\">\n <div className=\"w-full\">\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"left\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={cn(\"text-center lg:text-left\", dataHeading?.className)}\n />\n )}\n {dataFeatures && (\n <div className=\"list-features grid grid-cols-1 gap-6 md:auto-cols-auto md:grid-cols-2\">\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div className=\"feature-item relative flex w-full flex-col\" key={index}>\n {feature?.image && (\n <div className=\"h-10 w-10\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n <div className=\"mt-3 flex w-full flex-1 flex-col\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-base text-gray-600\">\n {parse(feature.description)}\n </div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"left\"\n />\n )}\n </div>\n </div>\n {dataBanner && (\n <div className=\"flex items-center lg:col-span-4\">\n <div className=\"mx-auto w-full max-w-xs md:max-w-md\">\n <AspectRatio ratio={dataBanner?.ratio || 1} className=\"w-full\">\n <img\n src={dataBanner?.src}\n alt={dataBanner?.alt}\n loading=\"lazy\"\n className=\"h-full w-full object-cover\"\n />\n </AspectRatio>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nconst FeatureTemplateTen = ({ dataHeading, dataFeatures, dataBanner, dataButtons }) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n <div className={cn(\"relative flex items-center\", dataBanner && \"lg:min-h-[590px]\")}>\n {dataFeatures && (\n <div\n className={cn(\n \"list-features grid grid-cols-1 gap-8 md:grid-cols-2\",\n dataBanner\n ? \"lg:flex lg:flex-row lg:flex-wrap lg:gap-x-0 lg:gap-y-16\"\n : \"mx-auto max-w-4xl\"\n )}\n >\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <div\n className={cn(\n \"feature-item relative w-full\",\n dataBanner && \"lg:basis-1/2 odd:lg:pr-48 even:lg:pl-48\"\n )}\n key={index}\n >\n {feature?.image && (\n <div className=\"h-12 w-12\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </div>\n )}\n <div className=\"mt-3 flex w-full flex-1 flex-col\">\n <div className=\"flex-1\">\n {feature?.name && (\n <h3 className=\"text-lg font-semibold\">{parse(feature.name)}</h3>\n )}\n {feature?.description && (\n <div className=\"mt-2 text-gray-500\">{parse(feature.description)}</div>\n )}\n </div>\n {feature?.btnLink && (\n <div className=\"mt-4\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n </div>\n </div>\n ))}\n {dataBanner && (\n <div\n className=\"absolute left-1/2 top-1/2 mx-auto hidden w-72 -translate-x-1/2 -translate-y-1/2 lg:flex lg:items-end lg:justify-center lg:p-1.5 xl:p-2\"\n style={{ aspectRatio: \"352/721\" }}\n >\n <div\n className=\"mockup-bg pointer-events-none absolute inset-0 h-full w-full select-none\"\n style={{\n background:\n \"url(https://homepage.momocdn.net/img/momo-amazone-s3-api-240809173159-638588215193226459.png) no-repeat bottom center/contain\",\n }}\n ></div>\n <div\n className=\"h-full w-full overflow-hidden bg-gray-100\"\n style={{ borderRadius: \"30px\" }}\n >\n <img\n src={dataBanner?.src}\n alt={dataBanner?.alt}\n className=\"h-full w-full object-contain\"\n />\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nconst FeatureTemplateElevent = ({ dataHeading, dataFeatures, dataButtons, dataBanner }) => {\n const [activeIndex, setActiveIndex] = useState(0);\n const isMobileDevice = useIsMobile();\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={dataHeading?.className}\n />\n )}\n {dataFeatures && (\n <div className=\"grid grid-cols-1 gap-10 md:grid-cols-2 lg:gap-14\">\n <div>\n <div className=\"list-features w-full md:border-l-2 md:border-gray-200\">\n <Accordion\n type=\"single\"\n collapsible={isMobileDevice}\n onValueChange={(val) => {\n const idx = parseInt(val);\n if (!isNaN(idx)) setActiveIndex(idx);\n }}\n defaultValue={activeIndex.toString()}\n >\n {dataFeatures?.map((feature: FeatureData, index: number) => (\n <AccordionItem\n key={index}\n value={index.toString()}\n className=\"feature-item group relative flex w-full flex-col border-y-0 border-b last:border-b-0 md:-ml-0.5 md:border-b-0 md:border-l-2 md:border-gray-200 md:pl-5 md:[&[data-state=open]]:border-pink-500\"\n >\n <AccordionTrigger className=\"py-3 text-left text-lg font-semibold md:group-first:pt-0 md:group-last:pb-0 [&>svg]:md:hidden\">\n {parse(feature.name || \"\")}\n </AccordionTrigger>\n <AccordionContent className=\"grid grid-cols-1 gap-y-3 md:group-last:mt-3\">\n {feature?.description && (\n <div className=\"text-muted-foreground\">\n {parse(feature.description || \"\")}\n </div>\n )}\n\n {feature?.btnLink && (\n <div className=\"\">\n <RenderFeatureLink\n btnLink={feature.btnLink}\n btnName={feature?.btnName}\n newTab={feature?.newTab}\n />\n </div>\n )}\n {feature?.image && !dataBanner?.src && (\n <div className=\"mx-auto mt-5 w-full max-w-xs md:hidden\">\n <AspectRatio ratio={1} className=\"w-full\">\n <img\n src={feature?.image}\n alt={feature?.name}\n className=\"h-full w-full object-contain\"\n />\n </AspectRatio>\n </div>\n )}\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n </div>\n </div>\n\n <div className={cn(!dataBanner?.src ? \"hidden md:flex\" : \"flex\")}>\n <div className=\"mx-auto w-full max-w-xs md:max-w-md\">\n {dataBanner?.src ? (\n <AspectRatio ratio={dataBanner?.ratio || 1} className=\"w-full\">\n <img\n src={dataBanner?.src}\n alt={dataBanner?.alt}\n loading=\"lazy\"\n className=\"h-full w-full object-cover\"\n />\n </AspectRatio>\n ) : (\n <div className=\"hidden md:flex\">\n {dataFeatures?.[activeIndex]?.image ? (\n <AspectRatio ratio={1} className=\"w-full\">\n <img\n src={dataFeatures?.[activeIndex]?.image}\n alt={dataFeatures?.[activeIndex]?.name}\n className=\"h-full w-full object-contain\"\n loading=\"lazy\"\n />\n </AspectRatio>\n ) : (\n <div className=\"h-0 w-0\"></div>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nexport {\n FeatureTemplateOne,\n FeatureTemplateTwo,\n FeatureTemplateThree,\n FeatureTemplateFour,\n FeatureTemplateFive,\n FeatureTemplateSix,\n FeatureTemplateSeven,\n FeatureTemplateEight,\n FeatureTemplateNine,\n FeatureTemplateTen,\n FeatureTemplateElevent,\n};\n","import { SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport {\n FeatureTemplateEight,\n FeatureTemplateElevent,\n FeatureTemplateFive,\n FeatureTemplateFour,\n FeatureTemplateNine,\n FeatureTemplateOne,\n FeatureTemplateSeven,\n FeatureTemplateSix,\n FeatureTemplateTen,\n FeatureTemplateThree,\n FeatureTemplateTwo,\n} from \"./FeatureTemlates\";\nimport { FeatureSectionProps } from \"./utils\";\n\nconst renderTemplate = ({\n template,\n dataHeading,\n dataFeatures,\n dataButtons,\n dataBanner,\n}: FeatureSectionProps) => {\n switch (template) {\n case 1:\n return (\n <FeatureTemplateOne\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n case 2:\n return (\n <FeatureTemplateTwo\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n case 3:\n return (\n <FeatureTemplateThree\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n case 4:\n return (\n <FeatureTemplateFour\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n case 5:\n return (\n <FeatureTemplateFive\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n case 6:\n return (\n <FeatureTemplateSix\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n case 7:\n return (\n <FeatureTemplateSeven\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n case 8:\n return (\n <FeatureTemplateEight\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n case 9:\n return (\n <FeatureTemplateNine\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n dataBanner={dataBanner}\n />\n );\n case 10:\n return (\n <FeatureTemplateTen\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataBanner={dataBanner}\n dataButtons={dataButtons}\n />\n );\n case 11:\n return (\n <FeatureTemplateElevent\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataBanner={dataBanner}\n dataButtons={dataButtons}\n />\n );\n default:\n return (\n <FeatureTemplateOne\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n />\n );\n }\n};\n\nconst FeatureSectionContent = ({\n template,\n dataHeading,\n dataFeatures,\n dataButtons,\n dataBanner,\n}: FeatureSectionProps) => {\n return (\n <>\n {renderTemplate({\n template,\n dataHeading,\n dataFeatures,\n dataButtons,\n dataBanner,\n })}\n </>\n );\n};\n\nexport const FeatureSection = ({\n template = 1,\n background,\n className,\n idSection,\n dataHeading,\n dataFeatures,\n dataButtons,\n dataBanner,\n}: FeatureSectionProps) => {\n return (\n <SectionBlock className={className} idSection={idSection} background={background}>\n <FeatureSectionContent\n template={template}\n dataHeading={dataHeading}\n dataFeatures={dataFeatures}\n dataButtons={dataButtons}\n dataBanner={dataBanner}\n />\n </SectionBlock>\n );\n};\n","import { StarIcon } from \"@heroicons/react/24/solid\";\nimport parse from \"html-react-parser\";\nimport _ from \"lodash\";\n\nimport { cn } from \"../../../helpers/utils\";\nimport { ButtonsBlock, HeadingBlock } from \"../../CommonBlocks/CommonBlocks\";\nimport { InfiniteSlider } from \"../../core/infinite-slider\";\nimport {\n getColorForIndex,\n getInitials,\n randomColors,\n TestimonialData,\n TestimonialSectionProps,\n} from \"../utils\";\n\nconst TestimonialAvatar = ({\n avatar = \"\",\n name = \"\",\n index = 0,\n}: {\n avatar?: string;\n name?: string;\n index?: number;\n}) => {\n //TODO: check avatar null => \"Nguyen Van A\" => \"VA\"\n if (_.isEmpty(avatar)) {\n const initials = getInitials({ name }) ?? \"\";\n const bgColor = getColorForIndex(index, randomColors);\n return (\n <div\n className={cn(\n \"flex h-9 w-9 shrink-0 items-center justify-center overflow-hidden rounded-full font-semibold text-white \",\n bgColor\n )}\n >\n {initials}\n </div>\n );\n }\n\n return (\n <div className=\"h-9 w-9 shrink-0 overflow-hidden rounded-full\">\n <img src={avatar} loading=\"lazy\" className=\"h-full w-full object-cover\" alt={name} />\n </div>\n );\n};\n\nconst TestimonialItem = ({\n testimonial,\n className,\n index,\n}: {\n testimonial: TestimonialData;\n className?: string;\n index?: number;\n}) => (\n <div className={cn(\"testimonial-item\", className)}>\n <div className=\"relative h-full rounded-xl border border-gray-100 bg-white px-5 pb-10 pt-4 shadow-md sm:px-5\">\n <div className=\"flex flex-nowrap items-center space-x-2\">\n <TestimonialAvatar avatar={testimonial.avatar} name={testimonial.name} index={index} />\n <div className=\"min-w-0 flex-1 pl-1\">\n <div className=\"overflow-hidden text-ellipsis whitespace-nowrap text-sm font-semibold text-gray-700\">\n {testimonial.name}\n </div>\n {testimonial?.position && (\n <div className=\"text-xs font-normal text-pink-500\">{parse(testimonial.position)}</div>\n )}\n </div>\n </div>\n <div className=\"mt-3\">\n {testimonial?.shortTitle && (\n <div className=\"text-sm font-bold text-gray-700\">{parse(testimonial.shortTitle)}</div>\n )}\n {testimonial?.description && (\n <div className=\"relative mt-1 max-h-full overflow-hidden text-sm leading-normal text-gray-600\">\n {parse(testimonial.description)}\n </div>\n )}\n </div>\n <div className=\"absolute bottom-0 left-0 right-0 flex items-center justify-between space-x-2 p-4 md:px-5\">\n {testimonial?.date && <div className=\"text-xs text-gray-400\">{testimonial.date}</div>}\n {Number(testimonial?.rating) > 0 && (\n <div className=\"flex flex-nowrap space-x-0.5 text-sm\">\n {Array.from({ length: 5 }, (_, idx) => (\n <StarIcon\n className={`h-4 w-4 ${\n idx < Number(testimonial.rating) ? \"text-yellow-400\" : \"text-gray-200\"\n }`}\n key={idx}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n);\n\nexport const TestimonialTemplateOne = ({\n dataHeading,\n dataTestimonials,\n dataButtons,\n}: TestimonialSectionProps) => {\n const testimonialsLength = dataTestimonials?.length ?? 0;\n const isRunAnimation = testimonialsLength > 3;\n\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading.tagline}\n title={dataHeading.title}\n description={dataHeading.description}\n tagHeading={dataHeading.tagHeading}\n align=\"center\"\n colorScheme={dataHeading.colorScheme || \"pink\"}\n sizeHeading={dataHeading.sizeHeading}\n className={dataHeading.className}\n />\n )}\n\n {testimonialsLength > 0 && (\n <>\n {isRunAnimation ? (\n <div className=\"relative -mx-5 overflow-hidden md:mx-0\">\n <InfiniteSlider\n direction=\"horizontal\"\n speed={70}\n speedOnHover={0.05}\n gap={24}\n className=\"pb-1.5\"\n >\n {dataTestimonials?.map((testimonial, index) => (\n <TestimonialItem\n testimonial={testimonial}\n key={`testimonial-${index}`}\n index={index}\n className=\"mb-2 w-64 md:w-96\"\n />\n ))}\n </InfiniteSlider>\n </div>\n ) : (\n <div className=\"-mx-5 flex snap-x snap-mandatory flex-nowrap gap-y-6 space-x-5 overflow-hidden overflow-x-auto px-5 pb-3 md:-mx-3 md:w-full md:flex-wrap md:justify-center md:space-x-0\">\n {dataTestimonials?.map((testimonial, index) => (\n <TestimonialItem\n testimonial={testimonial}\n key={`testimonial-${index}`}\n index={index}\n className=\"shrink-0 basis-10/12 snap-center md:px-3 lg:basis-1/3\"\n />\n ))}\n </div>\n )}\n </>\n )}\n\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n","import { ButtonsBlockProps, HeadingBlockProps, SectionBlockProps } from \"../CommonBlocks/utils\";\n\ninterface TestimonialData {\n /**\n * Avatar of the testimonial.\n */\n avatar?: string;\n /**\n * Name of the testimonial.\n */\n name?: string;\n /**\n * Position of the testimonial.\n */\n position?: string;\n /**\n * Short title of the testimonial.\n */\n shortTitle?: string;\n /**\n * Description of the testimonial.\n */\n description?: string;\n /**\n * Rating of the testimonial. value from 1 to 5. Default is 5.\n */\n rating?: number;\n /**\n * Date of the testimonial.\n */\n date?: string;\n}\n\ninterface TestimonialSectionProps extends SectionBlockProps {\n /**\n * The template of the section.\n */\n template?: 1 | 2 | 3;\n /**\n * The data heading of the section.\n */\n dataHeading?: HeadingBlockProps;\n /**\n * The array data testimonials of the section.\n */\n dataTestimonials?: TestimonialData[];\n /**\n * The data buttons of the section.\n */\n dataButtons?: ButtonsBlockProps;\n}\n\nexport const randomColors = [\n \"bg-red-500\",\n \"bg-blue-500\",\n \"bg-green-500\",\n \"bg-yellow-500\",\n \"bg-purple-500\",\n \"bg-pink-500\",\n \"bg-orange-500\",\n \"bg-green-700\",\n];\n\nexport const getInitials = ({ name = \"\" }: { name: string }) => {\n const parts = name?.trim()?.split(/\\s+/) || [];\n return parts?.length > 1\n ? `${parts?.[parts?.length - 2]?.[0]?.toUpperCase()}${parts?.[parts?.length - 1]?.[0]?.toUpperCase()}`\n : parts?.[0]?.[0]?.toUpperCase() || \"\";\n};\n\nexport const getColorForIndex = (index: number, colors: string[]) => colors[index % colors.length];\n\nexport type { TestimonialData, TestimonialSectionProps };\n","import { StarIcon } from \"@heroicons/react/24/solid\";\nimport parse from \"html-react-parser\";\nimport _ from \"lodash\";\n\nimport { TestimonialSectionProps } from \"..\";\nimport { cn } from \"../../../helpers/utils\";\nimport { AspectRatio } from \"../../AspectRatio\";\nimport { Carousel, CarouselContent, CarouselDots, CarouselItem } from \"../../Carousel\";\nimport { ButtonsBlock, HeadingBlock } from \"../../CommonBlocks/CommonBlocks\";\nimport { TestimonialData } from \"../utils\";\n\nconst QuoteIcon = ({ className }: { className?: string }) => (\n <svg\n width=\"42\"\n height=\"36\"\n className={className}\n viewBox=\"0 0 42 36\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M23.8986 36V25.1748C23.8986 18.3776 25.3972 12.8392 28.3944 8.55944C31.4704 4.1958 36.0056 1.34266 42 0V8.18182C39.3183 8.85315 37.1887 10.1119 35.6113 11.958C34.0338 13.7203 33.0084 15.8601 32.5352 18.3776H39.6338V36H23.8986ZM0 36V25.1748C0 18.3776 1.49859 12.8392 4.49577 8.55944C7.57183 4.1958 12.0676 1.34266 17.9831 0V8.18182C15.3014 8.85315 13.1718 10.1119 11.5944 11.958C10.0169 13.7203 8.99155 15.8601 8.51831 18.3776H15.6169V36H0Z\"\n fill=\"#F95396\"\n />\n </svg>\n);\nconst TestimonialItem = ({\n testimonial,\n className,\n}: {\n testimonial: TestimonialData;\n className?: string;\n index?: number;\n}) => (\n <div\n className={cn(\n \"testimonial-item shadow-small relative h-full w-full cursor-grab select-none overflow-hidden rounded-xl bg-white p-5 md:p-10\",\n className\n )}\n >\n <div className=\"flex h-full md:space-x-10\">\n {testimonial?.avatar && (\n <div className=\"relative hidden w-52 flex-none grow-0 items-start md:flex\">\n <AspectRatio ratio={2 / 3} className=\"w-full\">\n <img\n src={testimonial?.avatar}\n alt={testimonial?.name}\n loading=\"lazy\"\n className=\"h-full w-full object-contain\"\n />\n </AspectRatio>\n </div>\n )}\n <div className=\"flex grow flex-col justify-between gap-y-5 md:gap-y-6\">\n <div className=\"flex flex-none items-end space-x-2 md:order-2 lg:space-x-6\">\n <div className=\"grow\">\n {testimonial?.name && (\n <div className=\"text-sm font-bold md:text-base\">{testimonial.name}</div>\n )}\n {testimonial?.position && (\n <div className=\"mt-1 text-xs font-normal text-gray-500\">\n {parse(testimonial.position)}\n </div>\n )}\n </div>\n {(testimonial?.date || Number(testimonial?.rating) > 0) && (\n <div className=\"hidden flex-none grow-0 text-right md:grid md:grid-cols-1 md:gap-1\">\n {testimonial?.date && <div className=\"text-xs text-gray-400\">{testimonial.date}</div>}\n {Number(testimonial?.rating) > 0 && (\n <div className=\"flex flex-nowrap space-x-0.5 text-sm\">\n {Array.from({ length: 5 }, (_, idx) => (\n <StarIcon\n className={`h-4 w-4 flex-none ${\n idx < Number(testimonial.rating) ? \"text-yellow-400\" : \"text-gray-200\"\n }`}\n key={idx}\n />\n ))}\n </div>\n )}\n </div>\n )}\n {testimonial?.avatar && (\n <div className=\"relative w-28 flex-none grow-0 md:hidden\">\n <AspectRatio ratio={2 / 3} className=\"w-full\">\n <img\n src={testimonial?.avatar}\n alt={testimonial?.name}\n loading=\"lazy\"\n className=\"h-full w-full object-contain\"\n />\n </AspectRatio>\n </div>\n )}\n </div>\n <div className=\"flex flex-1 flex-col md:flex-none\">\n <div className=\"flex-1\">\n <div className=\"mb-1.5 flex flex-none space-x-3\">\n <QuoteIcon className=\"h-5 w-5 md:h-6 md:w-6\" />\n {testimonial?.shortTitle && (\n <div className=\"flex-none text-base font-medium md:text-lg\">\n {parse(testimonial.shortTitle)}\n </div>\n )}\n </div>\n {testimonial?.description && (\n <blockquote className=\"relative flex-1 text-justify text-base\">\n {parse(testimonial.description)}\n </blockquote>\n )}\n </div>\n {(testimonial?.date || Number(testimonial?.rating) > 0) && (\n <div\n className={cn(\n \"mt-2 flex flex-none items-center space-x-2 md:hidden\",\n testimonial?.date && testimonial?.rating ? \"justify-between\" : \"justify-end\"\n )}\n >\n {testimonial?.date && <div className=\"text-xs text-gray-400\">{testimonial.date}</div>}\n {Number(testimonial?.rating) > 0 && (\n <div className=\"flex flex-nowrap space-x-0.5 text-sm\">\n {Array.from({ length: 5 }, (_, idx) => (\n <StarIcon\n className={`h-4 w-4 flex-none ${\n idx < Number(testimonial.rating) ? \"text-yellow-400\" : \"text-gray-200\"\n }`}\n key={idx}\n />\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n);\n\nexport const TestimonialTemplateThree = ({\n dataHeading,\n dataTestimonials,\n dataButtons,\n}: TestimonialSectionProps) => {\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading.tagline}\n title={dataHeading.title}\n description={dataHeading.description}\n tagHeading={dataHeading.tagHeading}\n align=\"center\"\n colorScheme={dataHeading.colorScheme || \"pink\"}\n sizeHeading={dataHeading.sizeHeading}\n className={dataHeading.className}\n />\n )}\n\n {(dataTestimonials ?? []).length > 0 && (\n <Carousel className=\"w-full\">\n <CarouselContent classNameContent=\"!overflow-visible\" className=\"-ml-5 md:-ml-6\">\n {dataTestimonials?.map((testimonial, index) => (\n <CarouselItem\n key={index}\n className=\"basis-full pl-5 md:pl-6 lg:basis-10/12 xl:basis-9/12\"\n >\n <TestimonialItem testimonial={testimonial} />\n </CarouselItem>\n ))}\n </CarouselContent>\n {(dataTestimonials ?? []).length > 1 && <CarouselDots className=\"mt-8\" />}\n </Carousel>\n )}\n\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n </>\n );\n};\n","import { StarIcon } from \"@heroicons/react/24/solid\";\nimport parse from \"html-react-parser\";\nimport _ from \"lodash\";\n\nimport { TestimonialSectionProps } from \"..\";\nimport { cn, Media, MediaContextProvider } from \"../../../helpers/utils\";\nimport { ButtonsBlock, HeadingBlock } from \"../../CommonBlocks/CommonBlocks\";\nimport { InfiniteSlider } from \"../../core/infinite-slider\";\nimport { getColorForIndex, getInitials, randomColors, TestimonialData } from \"../utils\";\n\nconst TestimonialAvatar = ({\n avatar = \"\",\n name = \"\",\n index = 0,\n}: {\n avatar?: string;\n name?: string;\n index?: number;\n}) => {\n //TODO: check avatar null => \"Nguyen Van A\" => \"VA\"\n if (_.isEmpty(avatar)) {\n const initials = getInitials({ name }) ?? \"\";\n const bgColor = getColorForIndex(index, randomColors);\n\n return (\n <div\n className={cn(\n \"flex h-9 w-9 shrink-0 items-center justify-center overflow-hidden rounded-full font-semibold text-white\",\n bgColor\n )}\n >\n {initials}\n </div>\n );\n }\n\n return (\n <div className=\"h-9 w-9 shrink-0 overflow-hidden rounded-full\">\n <img src={avatar} loading=\"lazy\" className=\"h-full w-full object-cover\" alt={name} />\n </div>\n );\n};\n\nconst TestimonialItem = ({\n testimonial,\n className,\n index,\n}: {\n testimonial: TestimonialData;\n className?: string;\n index?: number;\n}) => (\n <div className={cn(\"testimonial-item\", className)}>\n <div className=\"relative h-full rounded-xl border border-gray-100 bg-white px-5 pb-10 pt-4 shadow-md sm:px-5\">\n <div className=\"flex flex-nowrap items-center space-x-2\">\n <TestimonialAvatar avatar={testimonial.avatar} name={testimonial.name} index={index} />\n <div className=\"flex-1 pl-1\">\n <div className=\"overflow-hidden text-ellipsis whitespace-nowrap text-sm font-semibold text-gray-700\">\n {testimonial.name}\n </div>\n {testimonial?.position && (\n <div className=\"text-xs font-normal text-pink-500\">{parse(testimonial.position)}</div>\n )}\n </div>\n </div>\n <div className=\"mt-3\">\n {testimonial?.shortTitle && (\n <div className=\"text-sm font-bold text-gray-700\">{parse(testimonial.shortTitle)}</div>\n )}\n {testimonial?.description && (\n <div className=\"relative mt-1 max-h-full overflow-hidden text-sm leading-normal text-gray-600\">\n {parse(testimonial.description)}\n </div>\n )}\n </div>\n <div className=\"absolute bottom-0 left-0 right-0 flex items-center justify-between space-x-2 p-4 md:px-5\">\n {testimonial?.date && <div className=\"text-xs text-gray-400\">{testimonial.date}</div>}\n {Number(testimonial?.rating) > 0 && (\n <div className=\"flex flex-nowrap space-x-0.5 text-sm\">\n {Array.from({ length: 5 }, (_, idx) => (\n <StarIcon\n className={`h-4 w-4 ${\n idx < Number(testimonial.rating) ? \"text-yellow-400\" : \"text-gray-200\"\n }`}\n key={idx}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n);\n\nexport const TestimonialTemplateTwo = ({\n dataHeading,\n dataTestimonials,\n dataButtons,\n}: TestimonialSectionProps) => {\n const testimonialsLength = dataTestimonials?.length ?? 0;\n const isRunAnimation = testimonialsLength > 3;\n\n const sliderConfigs = {\n lg: [\n { reverse: false, speed: 40 },\n { reverse: true, speed: 50 },\n { reverse: false, speed: 30 },\n ],\n md: [\n { reverse: false, speed: 30 },\n { reverse: true, speed: 40 },\n ],\n sm: [{ reverse: false, speed: 30 }],\n };\n\n const renderSliders = (configs: { reverse: boolean; speed: number }[]) => (\n <>\n {configs.map((config, colIdx) => (\n <InfiniteSlider\n key={`slider-${colIdx}`}\n direction=\"vertical\"\n reverse={config.reverse}\n speed={config.speed}\n speedOnHover={0.05}\n gap={24}\n className=\"px-0.5\"\n classNameMotion=\"w-full\"\n >\n {dataTestimonials?.map((testimonial, index) => (\n <TestimonialItem\n testimonial={testimonial}\n key={`testimonial-${colIdx}-${index}`}\n index={index}\n className=\"px-0 first:pl-0 last:pr-0\"\n />\n ))}\n </InfiniteSlider>\n ))}\n </>\n );\n\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading.tagline}\n title={dataHeading.title}\n description={dataHeading.description}\n tagHeading={dataHeading.tagHeading}\n align=\"center\"\n colorScheme={dataHeading.colorScheme || \"pink\"}\n sizeHeading={dataHeading.sizeHeading}\n className={dataHeading.className}\n />\n )}\n\n {testimonialsLength > 0 && (\n <MediaContextProvider>\n {isRunAnimation ? (\n <div className=\"mark-vertical-marquee relative h-[600px] overflow-hidden\">\n <Media greaterThanOrEqual=\"lg\" className=\"grid w-full grid-cols-3 gap-6\">\n {renderSliders(sliderConfigs.lg)}\n </Media>\n <Media between={[\"sm\", \"lg\"]} className=\"grid w-full grid-cols-2 gap-6\">\n {renderSliders(sliderConfigs.md)}\n </Media>\n <Media between={[\"xs\", \"sm\"]} className=\"grid w-full grid-cols-1 gap-6\">\n {renderSliders(sliderConfigs.sm)}\n </Media>\n </div>\n ) : (\n <div className=\"flex w-full flex-wrap justify-center gap-y-6 md:-mx-3\">\n {dataTestimonials?.map((testimonial, index) => (\n <TestimonialItem\n testimonial={testimonial}\n key={`testimonial-${index}`}\n index={index}\n className=\"basis-full md:basis-1/2 md:px-3 lg:basis-1/3\"\n />\n ))}\n </div>\n )}\n </MediaContextProvider>\n )}\n\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={dataButtons?.className}\n align=\"center\"\n />\n )}\n <style>{`\n .mark-vertical-marquee {\n mask: linear-gradient(transparent, black 16px, black calc(100% - 16px), transparent);\n }\n `}</style>\n </>\n );\n};\n","import { cn } from \"../../helpers/utils\";\nimport { SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { TestimonialTemplateOne } from \"./templates/TestimonialTemplateOne\";\nimport { TestimonialTemplateThree } from \"./templates/TestimonialTemplateThree\";\nimport { TestimonialTemplateTwo } from \"./templates/TestimonialTemplateTwo\";\nimport { TestimonialSectionProps } from \"./utils\";\n\nconst renderTemplate = ({\n template,\n dataHeading,\n dataTestimonials,\n dataButtons,\n}: TestimonialSectionProps) => {\n switch (template) {\n case 1:\n return (\n <TestimonialTemplateOne\n dataHeading={dataHeading}\n dataTestimonials={dataTestimonials}\n dataButtons={dataButtons}\n />\n );\n case 2:\n return (\n <TestimonialTemplateTwo\n dataHeading={dataHeading}\n dataTestimonials={dataTestimonials}\n dataButtons={dataButtons}\n />\n );\n case 3:\n return (\n <TestimonialTemplateThree\n dataHeading={dataHeading}\n dataTestimonials={dataTestimonials}\n dataButtons={dataButtons}\n />\n );\n default:\n return (\n <TestimonialTemplateOne\n dataHeading={dataHeading}\n dataTestimonials={dataTestimonials}\n dataButtons={dataButtons}\n />\n );\n }\n};\n\nconst TestimonialSectionContent = ({\n template,\n dataHeading,\n dataTestimonials,\n dataButtons,\n}: TestimonialSectionProps) => {\n return (\n <>\n {renderTemplate({\n template,\n dataHeading,\n dataTestimonials,\n dataButtons,\n })}\n </>\n );\n};\n\nconst TestimonialSection = ({\n template = 1,\n background,\n className,\n idSection,\n dataHeading,\n dataTestimonials,\n dataButtons,\n}: TestimonialSectionProps) => {\n return (\n <SectionBlock\n className={cn(\n template === 1 && (dataTestimonials?.length ?? 0) > 3\n ? \"[&>.wrapper]:max-w-full [&>.wrapper]:md:px-0\"\n : \"\",\n template === 3 ? \"overflow-hidden\" : \"\",\n className\n )}\n idSection={idSection}\n background={background}\n >\n <TestimonialSectionContent\n template={template}\n dataHeading={dataHeading}\n dataTestimonials={dataTestimonials}\n dataButtons={dataButtons}\n />\n </SectionBlock>\n );\n};\n\nexport { TestimonialSection };\n","import parse from \"html-react-parser\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from \"../Accordion\";\nimport { ButtonsBlock, HeadingBlock } from \"../CommonBlocks/CommonBlocks\";\nimport {\n HorizontalContent,\n HorizontalNext,\n HorizontalPrevious,\n HorizontalScroll,\n} from \"../HorizontalScroll\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../Tabs\";\nimport { ContentsProps, DataFAQProps, FAQSectionProps } from \"./utils\";\n\nconst FAQTemplateOne = ({ dataFAQ, dataHeading, dataButtons }: FAQSectionProps) => {\n const renderAccordion = (dataFAQ: DataFAQProps) => (\n <Accordion\n type=\"single\"\n collapsible\n defaultValue={(dataFAQ?.isActiveFistQuestion && dataFAQ?.contents?.[0]?.title) || \"\"}\n className=\"w-full\"\n >\n {dataFAQ?.contents?.map((faqContent: ContentsProps, index) => (\n <AccordionItem value={faqContent.title} key={index} className=\"last:border-none\">\n <AccordionTrigger className=\"md:text-lg\">{faqContent.title}</AccordionTrigger>\n <AccordionContent className=\"prose prose-sm sm:prose-base prose-strong:text-gray-600 max-w-none text-gray-600\">\n {parse(faqContent.description)}\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n );\n\n return (\n <div className=\"grid grid-cols-1 gap-y-0 md:grid-cols-3 md:gap-x-10\">\n <div className=\"relative\">\n <div className=\"md:sticky md:top-16\">\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading.tagline}\n title={dataHeading.title}\n description={dataHeading.description}\n tagHeading={dataHeading.tagHeading || \"h2\"}\n align=\"left\"\n colorScheme={dataHeading.colorScheme || \"pink\"}\n sizeHeading={dataHeading.sizeHeading}\n className={cn(dataHeading.className)}\n />\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={cn(\"hidden md:mt-6 md:flex\", dataButtons?.className)}\n align=\"left\"\n />\n )}\n </div>\n </div>\n {dataFAQ && dataFAQ.length > 0 && dataFAQ[0] && (\n <div className=\"col-span-2\">{renderAccordion(dataFAQ[0])}</div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={cn(\"mt-3 md:hidden\", dataButtons?.className)}\n align=\"center\"\n />\n )}\n </div>\n );\n};\n\nconst FAQTemplateTwo = ({\n dataFAQ,\n dataHeading,\n dataButtons,\n dataHorizontalScroll,\n}: FAQSectionProps) => {\n const {\n showGradientOverlay = true,\n gradientOverlayColor,\n className,\n } = dataHorizontalScroll || {};\n\n const renderAccordion = (dataFAQ: DataFAQProps) => (\n <Accordion\n type=\"single\"\n collapsible\n defaultValue={(dataFAQ?.isActiveFistQuestion && dataFAQ?.contents?.[0]?.title) || \"\"}\n className=\"w-full\"\n >\n {dataFAQ?.contents?.map((faqContent: ContentsProps, index) => (\n <AccordionItem value={faqContent.title} key={index} className=\"last:border-none\">\n <AccordionTrigger className=\"md:text-lg\">{faqContent.title}</AccordionTrigger>\n <AccordionContent className=\"prose prose-sm sm:prose-base prose-strong:text-gray-600 max-w-none text-gray-600\">\n {parse(faqContent.description)}\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n );\n\n return (\n <>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading.tagline}\n title={dataHeading.title}\n description={dataHeading.description}\n tagHeading={dataHeading.tagHeading || \"h2\"}\n align=\"center\"\n colorScheme={dataHeading.colorScheme || \"pink\"}\n sizeHeading={dataHeading.sizeHeading}\n className={cn(dataHeading.className)}\n />\n )}\n {dataFAQ && (\n <Tabs defaultValue={dataFAQ[0]?.title}>\n {dataFAQ?.length > 1 && (\n <HorizontalScroll\n showGradientOverlay={showGradientOverlay}\n gradientOverlayColor={gradientOverlayColor}\n className={className}\n >\n <HorizontalContent className=\"mb-3 text-center\">\n <TabsList\n className=\"mx-auto mb-0 inline-flex w-auto items-center overflow-visible\"\n size=\"base\"\n >\n {dataFAQ.map((faq, index) => (\n <TabsTrigger key={faq.title + index} value={faq.title}>\n {faq.title}\n </TabsTrigger>\n ))}\n </TabsList>\n </HorizontalContent>\n <HorizontalPrevious />\n <HorizontalNext />\n </HorizontalScroll>\n )}\n {dataFAQ.map((faq, index) => (\n <TabsContent\n key={faq.title + index}\n className=\"mx-auto mt-0 max-w-3xl\"\n value={faq.title}\n >\n {renderAccordion(faq)}\n </TabsContent>\n ))}\n </Tabs>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={cn(dataButtons?.className)}\n align=\"center\"\n />\n )}\n </>\n );\n};\n\nexport { FAQTemplateOne, FAQTemplateTwo };\n","import { SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { FAQTemplateOne, FAQTemplateTwo } from \"./FAQTemplate\";\nimport { FAQSectionProps } from \"./utils\";\n\nconst renderTemplate = ({ template, dataFAQ, dataHeading, dataButtons, dataHorizontalScroll }) => {\n switch (template) {\n case 1:\n return (\n <FAQTemplateOne\n dataFAQ={dataFAQ}\n dataHeading={dataHeading}\n dataButtons={dataButtons}\n dataHorizontalScroll={dataHorizontalScroll}\n />\n );\n\n case 2:\n return (\n <FAQTemplateTwo\n dataFAQ={dataFAQ}\n dataHeading={dataHeading}\n dataButtons={dataButtons}\n dataHorizontalScroll={dataHorizontalScroll}\n />\n );\n\n default:\n return (\n <FAQTemplateOne\n dataFAQ={dataFAQ}\n dataHeading={dataHeading}\n dataButtons={dataButtons}\n dataHorizontalScroll={dataHorizontalScroll}\n />\n );\n }\n};\n\nconst FAQSectionContent = ({\n dataHeading,\n dataFAQ,\n template,\n dataButtons,\n dataHorizontalScroll,\n}) => {\n return (\n <>{renderTemplate({ dataHeading, dataFAQ, template, dataButtons, dataHorizontalScroll })}</>\n );\n};\n\nexport const FAQSection = ({\n dataHeading,\n dataFAQ = [],\n className,\n background,\n idSection,\n dataButtons,\n dataHorizontalScroll,\n template = 1,\n}: FAQSectionProps) => {\n return (\n <SectionBlock className={className} idSection={idSection} background={background}>\n <FAQSectionContent\n dataHeading={dataHeading}\n dataFAQ={dataFAQ}\n template={template}\n dataHorizontalScroll={dataHorizontalScroll}\n dataButtons={dataButtons}\n />\n </SectionBlock>\n );\n};\n","import React, { memo } from \"react\";\nimport { ArrowDownIcon } from \"@heroicons/react/20/solid\";\nimport parse from \"html-react-parser\";\n\nimport SpinerIcon from \"../../foundation/SpinerIcon\";\nimport { cn } from \"../../helpers/utils\";\nimport { ActionButton } from \"../ActionButton\";\nimport { HeadingBlock } from \"../CommonBlocks/CommonBlocks\";\nimport {\n HorizontalContent,\n HorizontalNext,\n HorizontalPrevious,\n HorizontalScroll,\n} from \"../HorizontalScroll\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../Tabs\";\nimport { TextButton } from \"../TextButton\";\nimport { DataNewsProps, NewsItemProps, NewsSectionProps } from \"./utils\";\n\nconst NewsSectionItem = ({ news }: { news: NewsItemProps }) => {\n const handleOnClickcate = (e: React.MouseEvent<HTMLButtonElement>, url: string) => {\n e?.preventDefault();\n e?.stopPropagation();\n window.open(url, \"_blank\");\n };\n\n return (\n <>\n <div className=\"relative block aspect-[1/1] overflow-hidden rounded-md bg-gray-100 md:aspect-[77/37] md:rounded-none\">\n <picture>\n <source media=\"(min-width: 640px)\" srcSet={news?.thumbnailDesktop} />\n <img\n className=\"h-full w-full object-cover\"\n src={news?.thumbnailMobile}\n alt={news?.title}\n />\n </picture>\n </div>\n <div className=\"mt-3 flex flex-1 flex-col md:mt-0 md:p-3\">\n <div className=\"line-clamp-2 flex-1 text-sm font-medium text-gray-900 group-hover:text-pink-500 md:line-clamp-none\">\n {news?.title}\n </div>\n <div className=\"mt-2 flex items-center space-x-1\">\n {news?.category && news?.categoryUrl && (\n <>\n <TextButton\n variant=\"default\"\n className=\"shink-0 line-clamp-1 justify-start whitespace-normal text-left text-xs\"\n onClick={(e) => handleOnClickcate(e, news?.categoryUrl || \"\")}\n title={news?.category}\n >\n {news?.category}\n </TextButton>\n {news?.category && news?.dateTime && (\n <span className=\"flex-none leading-none\">·</span>\n )}\n </>\n )}\n <div className=\"flex-none text-xs text-gray-500\">{news?.dateTime}</div>\n </div>\n </div>\n </>\n );\n};\n\nconst NewsSectionTemplateOne = memo(\n ({\n dataHeading,\n dataHorizontalScroll,\n dataNews,\n onClickModal,\n onClickLoadMore,\n }: NewsSectionProps) => {\n const {\n showGradientOverlay = true,\n gradientOverlayColor,\n className,\n } = dataHorizontalScroll || {};\n\n const handleOnClickItem = (e: React.MouseEvent<HTMLDivElement>, id: number, url: string) => {\n e?.preventDefault();\n e?.stopPropagation();\n onClickModal ? onClickModal(id) : window.open(url, \"_blank\");\n };\n\n const renderGridNews = (newsGroup: DataNewsProps, index: number) => (\n <div key={newsGroup?.title || index}>\n <div\n className={cn(\n \"-mx-2 flex flex-row flex-wrap gap-y-5\",\n newsGroup?.newsList?.length < 4 ? \"md:justify-center\" : \"\"\n )}\n >\n {newsGroup?.newsList?.map((newsItem: NewsItemProps, index: number) => (\n <div className=\"min-w-0 basis-1/2 px-2 lg:basis-1/4\" key={index}>\n <div\n onClick={(e) => handleOnClickItem(e, newsItem?.id, newsItem?.url)}\n key={newsItem?.id}\n className={cn(\n \"group flex cursor-pointer flex-col overflow-hidden md:h-full md:rounded-md md:bg-white md:shadow-md\",\n newsGroup?.classNameItem\n )}\n >\n <NewsSectionItem news={newsItem} />\n </div>\n </div>\n ))}\n </div>\n {newsGroup?.isShowBtn && (\n <div className=\"mt-8 flex w-full items-center justify-center\">\n <ActionButton\n action={newsGroup?.btnUrl || (onClickLoadMore && (() => onClickLoadMore?.(index)))}\n newTab={newsGroup?.isNewTab}\n variant=\"outline\"\n disabled={newsGroup?.isLoading}\n >\n {parse(newsGroup.btnName || \"Xem thêm\")}\n {newsGroup?.isLoading ? (\n <SpinerIcon className=\"animate-spin-loading ml-2 h-5 w-5\" />\n ) : (\n onClickLoadMore &&\n !newsGroup?.btnUrl && (\n <ArrowDownIcon className=\"-mb-1 ml-2 h-5 w-5 animate-bounce\" />\n )\n )}\n </ActionButton>\n </div>\n )}\n </div>\n );\n\n return (\n <React.Fragment>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={cn(dataHeading?.className)}\n />\n )}\n {dataNews?.length > 1 ? (\n <Tabs defaultValue={dataNews[0]?.title}>\n <HorizontalScroll\n showGradientOverlay={showGradientOverlay}\n gradientOverlayColor={gradientOverlayColor}\n className={className}\n >\n <HorizontalContent className=\"mb-6 text-center\">\n <TabsList className=\"mx-auto mb-0 inline-flex w-auto items-center overflow-visible\">\n {dataNews.map((newsGroup, index) => (\n <TabsTrigger key={newsGroup.title + index} value={newsGroup.title}>\n {newsGroup.title}\n </TabsTrigger>\n ))}\n </TabsList>\n </HorizontalContent>\n <HorizontalPrevious />\n <HorizontalNext />\n </HorizontalScroll>\n\n {dataNews.map((newsGroup, index) => (\n <TabsContent key={newsGroup.title + index} value={newsGroup.title}>\n {renderGridNews(newsGroup, index)}\n </TabsContent>\n ))}\n </Tabs>\n ) : (\n dataNews?.length === 1 && dataNews[0] && renderGridNews(dataNews[0], 0)\n )}\n </React.Fragment>\n );\n }\n);\n\nexport { NewsSectionTemplateOne };\n","import { cn } from \"../../helpers/utils\";\nimport { SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { NewsSectionTemplateOne } from \"./NewsSectionTemplate\";\nimport { NewsSectionProps } from \"./utils\";\n\nconst renderTemplate = ({\n template,\n dataNews,\n dataHeading,\n dataHorizontalScroll,\n onClickModal,\n onClickLoadMore,\n}) => {\n switch (template) {\n case 1:\n return (\n <NewsSectionTemplateOne\n dataNews={dataNews}\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll}\n onClickModal={onClickModal}\n onClickLoadMore={onClickLoadMore}\n />\n );\n default:\n return (\n <NewsSectionTemplateOne\n dataNews={dataNews}\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll}\n onClickModal={onClickModal}\n onClickLoadMore={onClickLoadMore}\n />\n );\n }\n};\n\nconst NewsSectionContent = ({\n dataHeading,\n dataHorizontalScroll,\n dataNews,\n template,\n onClickModal,\n onClickLoadMore,\n}) => {\n return (\n <>\n {renderTemplate({\n dataHeading,\n dataHorizontalScroll,\n dataNews,\n template,\n onClickModal,\n onClickLoadMore,\n })}\n </>\n );\n};\n\nexport const NewsSection = ({\n idSection,\n dataHeading,\n dataHorizontalScroll,\n dataNews = [],\n className,\n background,\n template = 1,\n onClickModal,\n onClickLoadMore,\n}: NewsSectionProps) => {\n return (\n <SectionBlock className={cn(className)} background={background} idSection={idSection}>\n <NewsSectionContent\n dataHeading={dataHeading}\n dataHorizontalScroll={dataHorizontalScroll}\n dataNews={dataNews}\n template={template}\n onClickModal={onClickModal}\n onClickLoadMore={onClickLoadMore}\n />\n </SectionBlock>\n );\n};\n","import {\n ButtonsBlock,\n HeadingBlock,\n SectionBlock,\n} from \"../CommonBlocks/CommonBlocks\";\nimport {\n ButtonsBlockProps,\n HeadingBlockProps,\n SectionBlockProps,\n} from \"../CommonBlocks/utils\";\nimport { cn } from \"../../helpers/utils\";\nimport { AspectRatio } from \"../AspectRatio\";\n\ninterface CTAMedia {\n /**\n * The image source.\n */\n src?: string;\n /**\n * The image alt.\n */\n alt?: string;\n /**\n * The image ratio.\n */\n ratio?: number;\n}\n\ninterface CTASectionData {\n /**\n * Background color of the block CTA. Input the color code or image url according to CSS syntax. \n */\n background?: string;\n}\n\ninterface CTASectionProps extends SectionBlockProps {\n /**\n * The template of the section.\n */\n template?: 1 | 2;\n /**\n * The data heading of the section.\n */\n dataHeading?: HeadingBlockProps;\n /**\n * The array data testimonials of the section.\n */\n dataCTA?: CTASectionData;\n /**\n * The data buttons of the section.\n */\n dataButtons?: ButtonsBlockProps;\n /**\n * The data media of the cta section. \n */\n dataMedia?: CTAMedia;\n}\n\n\nconst CTATemplateOne = ({\n dataHeading,\n dataCTA,\n dataButtons,\n}: CTASectionProps) => {\n return (\n <div className=\"rounded-2xl block relative overflow-hidden lg:overflow-visible p-6 md:py-14 md:px-10 bg-pink-50\" style={{\n background: dataCTA?.background\n }}>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading.tagline}\n title={dataHeading.title}\n description={dataHeading.description}\n tagHeading={dataHeading.tagHeading}\n align=\"center\"\n colorScheme={dataHeading.colorScheme || \"black\"}\n sizeHeading={dataHeading.sizeHeading}\n className={dataHeading.className}\n />\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={cn(dataButtons?.className, \"mt-0 md:mt-0\")}\n align=\"center\"\n />\n )}\n\n </div>\n );\n};\n\n\nconst CTATemplateTwo = ({\n dataHeading,\n dataCTA,\n dataButtons,\n dataMedia,\n}: CTASectionProps) => {\n return (\n <div className=\"grid gap-6 grid-cols-1 md:grid-cols-2 rounded-2xl block relative overflow-hidden lg:overflow-visible p-6 pb-0 md:px-10 bg-pink-700 md:pb-0 md:pt-0\" style={dataCTA?.background ? { background: dataCTA.background } : {}}>\n <div className=\"md:py-14 flex flex-col justify-center\">\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading.tagline}\n title={dataHeading.title}\n description={dataHeading.description}\n tagHeading={dataHeading.tagHeading}\n align=\"left\"\n colorScheme={dataHeading.colorScheme || \"white\"}\n sizeHeading={dataHeading.sizeHeading}\n className={dataHeading.className}\n />\n )}\n\n\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={cn(dataButtons?.className, \"mt-0 md:mt-0\")}\n align=\"left\"\n />\n )}\n </div>\n\n <div className=\" max-w-sm mx-auto md:ml-auto md:mr-0 w-full md:pt-10 self-end\">\n {dataMedia && (\n <AspectRatio\n ratio={4 / 3}\n >\n <img\n src={dataMedia.src}\n alt={dataMedia.alt}\n className=\"h-full w-full rounded-md object-contain\"\n />\n </AspectRatio>\n )}\n </div>\n\n </div>\n );\n};\n\nconst renderTemplate = ({\n template,\n dataHeading,\n dataCTA,\n dataButtons,\n dataMedia,\n}: CTASectionProps) => {\n switch (template) {\n case 1:\n return (\n <CTATemplateOne\n dataHeading={dataHeading}\n dataCTA={dataCTA}\n dataButtons={dataButtons}\n dataMedia={dataMedia}\n />\n );\n case 2:\n return (\n <CTATemplateTwo\n dataHeading={dataHeading}\n dataCTA={dataCTA}\n dataButtons={dataButtons}\n dataMedia={dataMedia}\n />\n );\n default:\n return (\n <CTATemplateOne\n dataHeading={dataHeading}\n dataCTA={dataCTA}\n dataButtons={dataButtons}\n dataMedia={dataMedia}\n />\n );\n }\n};\n\nconst CTASectionContent = ({\n template,\n dataHeading,\n dataCTA,\n dataButtons,\n dataMedia,\n}: CTASectionProps) => {\n return (\n <>\n {renderTemplate({\n template,\n dataHeading,\n dataCTA,\n dataButtons,\n dataMedia,\n })}\n </>\n );\n};\n\nconst CTASection = ({\n template = 1,\n background,\n className,\n idSection,\n dataHeading,\n dataCTA,\n dataButtons,\n dataMedia,\n}: CTASectionProps) => {\n return (\n <SectionBlock\n className={className}\n idSection={idSection}\n background={background}\n >\n <CTASectionContent\n template={template}\n dataHeading={dataHeading}\n dataCTA={dataCTA}\n dataButtons={dataButtons}\n dataMedia={dataMedia}\n />\n </SectionBlock>\n );\n};\n\nexport type { CTASectionProps };\nexport { CTASection };\n","import React from \"react\";\nimport parse from \"html-react-parser\";\n\nimport { cn } from \"../../../helpers/utils\";\nimport { ButtonsBlock, HeadingBlock } from \"../../CommonBlocks/CommonBlocks\";\nimport { DataMetricsProps, MetricsSectionProps } from \"../utils\";\n\nconst MetricItem = ({ metric }: { metric: DataMetricsProps }) => {\n const { metricTitle = \"\", metricValue = \"\", metricDescription = \"\" } = metric ?? {};\n\n return (\n <div className=\" text-center\">\n <div className=\"text-3xl font-bold text-pink-500 md:text-4xl\">{parse(metricValue ?? \"\")}</div>\n <div className=\"mt-2 text-sm font-semibold text-gray-900\">{parse(metricTitle ?? \"\")}</div>\n {metricDescription && (\n <div className=\"mt-2 text-sm text-gray-500\">{parse(metricDescription ?? \"\")}</div>\n )}\n </div>\n );\n};\n\nexport const MetricsSectionTemplateOne = ({\n dataMetrics,\n dataButtons,\n dataHeading,\n}: MetricsSectionProps) => {\n return (\n <React.Fragment>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={cn(dataHeading?.className)}\n />\n )}\n {dataMetrics && dataMetrics?.length > 0 && (\n <div className=\"grid grid-cols-1 gap-10 py-4 md:grid-cols-3 md:gap-4 md:py-0\">\n {dataMetrics?.map((metric, index) => (\n <React.Fragment key={index}>\n <MetricItem metric={metric} />\n </React.Fragment>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={cn(dataButtons?.className, \"mt-8 md:mt-10\")}\n align=\"center\"\n />\n )}\n </React.Fragment>\n );\n};\n","import React from \"react\";\nimport parse from \"html-react-parser\";\n\nimport { cn } from \"../../../helpers/utils\";\nimport { ButtonsBlock, HeadingBlock } from \"../../CommonBlocks/CommonBlocks\";\nimport { DataMetricsProps, MetricsSectionProps } from \"../utils\";\n\nconst MetricItem = ({ metric }: { metric: DataMetricsProps }) => {\n const { metricTitle = \"\", metricValue = \"\", metricDescription = \"\" } = metric ?? {};\n\n return (\n <div className=\" text-center md:text-left\">\n <div className=\"mt-2 text-2xl font-bold text-pink-500 md:text-3xl\">\n {parse(metricValue ?? \"\")}\n </div>\n <div className=\"mt-2 text-sm font-semibold text-gray-900\">{parse(metricTitle ?? \"\")}</div>\n {metricDescription && (\n <div className=\"mt-2 hidden text-sm text-gray-500 md:block\">\n {parse(metricDescription ?? \"\")}\n </div>\n )}\n </div>\n );\n};\n\nexport const MetricsSectionTemplateTwo = ({\n dataMetrics,\n dataButtons,\n dataHeading,\n}: MetricsSectionProps) => {\n return (\n <React.Fragment>\n {dataHeading && (\n <HeadingBlock\n tagline={dataHeading?.tagline}\n title={dataHeading?.title}\n description={dataHeading?.description}\n tagHeading={dataHeading?.tagHeading}\n align=\"center\"\n colorScheme={dataHeading?.colorScheme || \"pink\"}\n sizeHeading={dataHeading?.sizeHeading}\n className={cn(dataHeading?.className)}\n />\n )}\n {dataMetrics && dataMetrics?.length > 0 && (\n <div className=\"grid grid-cols-2 gap-10 py-4 md:grid-cols-4 md:gap-4 md:py-0\">\n {dataMetrics?.map((metric, index) => (\n <React.Fragment key={index}>\n <MetricItem metric={metric} />\n </React.Fragment>\n ))}\n </div>\n )}\n {dataButtons && (\n <ButtonsBlock\n isFullInMobile={dataButtons?.isFullInMobile}\n buttons={dataButtons?.buttons}\n className={cn(dataButtons?.className, \"mt-8 md:mt-10\")}\n align=\"center\"\n />\n )}\n </React.Fragment>\n );\n};\n","import { cn } from \"../../helpers/utils\";\nimport { SectionBlock } from \"../CommonBlocks/CommonBlocks\";\nimport { MetricsSectionTemplateOne, MetricsSectionTemplateTwo } from \"./MetricsSectionTemplate\";\nimport { MetricsSectionProps } from \"./utils\";\n\nconst renderTemplate = ({ dataHeading, dataMetrics, template, dataButtons }) => {\n switch (template) {\n case 1:\n return (\n <MetricsSectionTemplateOne\n dataMetrics={dataMetrics}\n dataButtons={dataButtons}\n dataHeading={dataHeading}\n />\n );\n case 2:\n return (\n <MetricsSectionTemplateTwo\n dataMetrics={dataMetrics}\n dataButtons={dataButtons}\n dataHeading={dataHeading}\n />\n );\n default:\n return (\n <MetricsSectionTemplateOne\n dataMetrics={dataMetrics}\n dataButtons={dataButtons}\n dataHeading={dataHeading}\n />\n );\n }\n};\n\nconst MetricsSectionContent = ({ dataHeading, dataMetrics, template, dataButtons }) => {\n return <>{renderTemplate({ dataHeading, dataMetrics, template, dataButtons })}</>;\n};\n\nexport const MetricsSection = ({\n idSection,\n dataHeading,\n dataMetrics = [],\n dataButtons,\n background,\n className,\n template,\n}: MetricsSectionProps) => {\n return (\n <SectionBlock className={cn(className)} background={background} idSection={idSection}>\n <MetricsSectionContent\n dataHeading={dataHeading}\n dataMetrics={dataMetrics}\n dataButtons={dataButtons}\n template={template}\n />\n </SectionBlock>\n );\n};\n","import { forwardRef } from \"react\";\n\nimport { PaymentInvoiceProps } from \"../utils/IPayment\";\n\nexport const PaymentInvoice = forwardRef<HTMLDivElement, PaymentInvoiceProps>(\n ({ className, title, children }, ref) => {\n return (\n <div className={className} ref={ref}>\n <div className=\"font-semibold text-gray-800\">{title}</div>\n <div\n style={{\n backgroundImage:\n \"url(https://homepage.momocdn.net/img/momo-amazone-s3-api-241105114139-638664036992710012.png)\",\n backgroundSize: \"30%\",\n backgroundPosition: \"53% 25%\",\n }}\n className=\"mt-4 grid grid-cols-1 gap-4 rounded-lg border bg-no-repeat p-3 text-gray-800\"\n >\n {children}\n </div>\n </div>\n );\n }\n);\n","import { useCallback } from \"react\";\n\nimport { ChoiceboxGroup, ChoiceboxGroupItem } from \"../../Choicebox\";\nimport { PaymentMethodsItemsProps, PaymentMethodsProps } from \"../utils/IPayment\";\nimport SkeletonPaymentMethod from \"./PaymentSkeleton\";\n\nconst PaymentMethodItem = ({ paymentMethod }: { paymentMethod: PaymentMethodsItemsProps }) => {\n return (\n <ChoiceboxGroupItem\n disabled={paymentMethod?.disabled}\n value={paymentMethod?.paymentMethod}\n className=\"data-[state=checked]:bg-pink-50/50\"\n >\n <div className=\"flex items-center space-x-3\">\n <img className=\"h-9 w-9 object-cover\" src={paymentMethod.logo} alt={paymentMethod?.name} />\n <div className=\"grid grid-cols-1 gap-1\">\n <div className=\"md:text-md line-clamp-2 text-sm font-medium text-gray-700\">\n {paymentMethod?.name}\n </div>\n {paymentMethod?.label && (\n <div className=\"text-xs font-semibold text-pink-500\">{paymentMethod?.label}</div>\n )}\n {paymentMethod?.description && (\n <div className=\"text-xs font-normal text-gray-500 \">{paymentMethod?.description}</div>\n )}\n </div>\n </div>\n </ChoiceboxGroupItem>\n );\n};\n\nexport const PaymentMethods = ({\n title = \"Chọn phương thức thanh toán\",\n paymentMethods,\n isLoading,\n onSelectPaymentMethod,\n defaultPaymentMethod = \"\",\n}: PaymentMethodsProps) => {\n const handleMethodSelect = useCallback(\n (value: string) => onSelectPaymentMethod?.(value),\n [onSelectPaymentMethod]\n );\n\n return (\n <>\n {title && <div className=\"text-base font-semibold text-gray-800 \">{title}</div>}\n\n {isLoading ? (\n <SkeletonPaymentMethod />\n ) : (\n <ChoiceboxGroup\n defaultValue={defaultPaymentMethod ?? \"captureWallet\"}\n orientation=\"vertical\"\n className=\"grid grid-cols-1 gap-4\"\n onValueChange={handleMethodSelect}\n >\n {paymentMethods?.length > 0 &&\n paymentMethods?.map((method) => (\n <PaymentMethodItem key={method.id} paymentMethod={method} />\n ))}\n </ChoiceboxGroup>\n )}\n </>\n );\n};\n","import { Skeleton } from \"../../Skeleton\";\n\nconst SkeletonItem = () => (\n <div className=\"p-3 border rounded-lg\">\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"rounded-md h-9 w-9 \" />\n <div className=\"flex-1\">\n <Skeleton className=\"w-48 h-5 \" />\n </div>\n <div className=\"w-4 h-4 border-2 border-gray-200 rounded-full\" />\n </div>\n </div>\n);\n\nfunction SkeletonPaymentMethod() {\n return (\n <>\n {Array.from({ length: 4 }).map((_, index) => (\n <SkeletonItem key={index} />\n ))}\n </>\n );\n}\n\nexport default SkeletonPaymentMethod;\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { IPayment } from \"./utils/IPayment\";\n\nconst PaymentContent = forwardRef<HTMLDivElement, IPayment>(({ children, className }, ref) => (\n <div ref={ref} className={cn(\"grid grid-cols-1 gap-4 bg-white\", className)}>\n {children}\n </div>\n));\n\nconst Payment = forwardRef<HTMLDivElement, IPayment>(({ children, className, ...props }, ref) => {\n return (\n <PaymentContent ref={ref} className={className} {...props}>\n {children}\n </PaymentContent>\n );\n});\nPayment.displayName = \"Payment\";\n\nexport { Payment };\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../../../../helpers/utils\";\nimport { PaymentResultFooterProps } from \"../../utils/IPaymentResult\";\n\nexport const PaymentResultFooter = forwardRef<HTMLDivElement, PaymentResultFooterProps>(\n ({ className, children }, ref) => {\n return (\n <div className={cn(\"\", className)} ref={ref}>\n <hr className=\"mb-5 h-px w-full bg-gray-500\" />\n <div className=\"flex w-full items-center space-x-3\">{children}</div>\n </div>\n );\n }\n);\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../../../../helpers/utils\";\nimport { PaymentResultContentProps } from \"../../utils/IPaymentResult\";\n\nexport const PaymentResultContent = forwardRef<HTMLDivElement, PaymentResultContentProps>(\n ({ className, children }, ref) => {\n return (\n <div className={cn(\"pb-5\", className)} ref={ref}>\n {children}\n </div>\n );\n }\n);\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../../helpers/utils\";\nimport { PaymentResultHeader } from \"./components/PaymentResult/PaymentResultHeader\";\nimport { PaymentResultProps } from \"./utils/IPaymentResult\";\n\nexport const PaymentResult = forwardRef<HTMLDivElement, PaymentResultProps>(\n ({ className, status, message, title, iconPaymentResult, children }, ref) => {\n return (\n <div ref={ref} className={cn(\"rounded-lg p-4\", className)}>\n <PaymentResultHeader\n iconPaymentResult={iconPaymentResult}\n title={title}\n message={message}\n status={status}\n />\n {children}\n </div>\n );\n }\n);\n","import { CheckBadgeIcon, XCircleIcon } from \"@heroicons/react/20/solid\";\n\nimport { Callout } from \"../../../Callout\";\nimport { PaymentResultHeaderProps } from \"../../utils/IPaymentResult\";\n\nconst PaymentResultSuccess = ({\n iconPaymentResult,\n message = \"\",\n title = \"\",\n}: PaymentResultHeaderProps) => {\n return (\n <div className=\"grid grid-cols-1 gap-4\">\n <div className=\"flex flex-col items-center space-y-3 md:flex-row md:space-x-3 md:space-y-0\">\n {iconPaymentResult && (\n <div className=\"relative h-12 w-12 shrink-0 overflow-hidden object-cover\">\n {iconPaymentResult}\n </div>\n )}\n {title && (\n <div className=\"text-center text-lg font-bold text-gray-800 md:text-left md:text-2xl\">\n {title}\n </div>\n )}\n </div>\n {message && (\n <Callout\n message={message}\n type=\"success\"\n icon={<CheckBadgeIcon className=\"h-5 w-5 shrink-0 text-green-500\" />}\n />\n )}\n </div>\n );\n};\n\nconst PaymentResultFailed = ({\n iconPaymentResult,\n message = \"\",\n title = \"\",\n}: PaymentResultHeaderProps) => {\n return (\n <div className=\"grid grid-cols-1 gap-4\">\n <div className=\"flex flex-col items-center space-y-3 md:flex-row md:space-x-3 md:space-y-0\">\n {iconPaymentResult && (\n <div className=\"relative h-12 w-12 shrink-0 overflow-hidden object-cover\">\n {iconPaymentResult}\n </div>\n )}\n {title && (\n <div className=\"text-center text-lg font-bold text-gray-800 md:text-left md:text-2xl\">\n {title}\n </div>\n )}\n </div>\n <Callout\n message={message}\n type=\"error\"\n icon={<XCircleIcon className=\"h-5 w-5 shrink-0 text-red-600\" />}\n />\n </div>\n );\n};\n\nconst PaymentResultPending = ({\n iconPaymentResult,\n message = \"\",\n title = \"\",\n}: PaymentResultHeaderProps) => {\n return (\n <div className=\"grid grid-cols-1 gap-4\">\n <div className=\"flex flex-col items-center space-y-3 md:flex-row md:space-x-3 md:space-y-0\">\n {iconPaymentResult && (\n <div className=\"relative h-12 w-12 shrink-0 overflow-hidden object-cover\">\n {iconPaymentResult}\n </div>\n )}\n {title && (\n <div className=\"text-center text-lg font-bold text-gray-800 md:text-left md:text-2xl\">\n {title}\n </div>\n )}\n </div>\n {message && <Callout message={message} type=\"neutral\" />}\n </div>\n );\n};\n\nexport const PaymentResultHeader = ({\n status,\n title,\n message,\n iconPaymentResult,\n}: PaymentResultHeaderProps) => {\n switch (status) {\n case \"success\":\n return (\n <PaymentResultSuccess\n status={status}\n title={title}\n message={message}\n iconPaymentResult={\n iconPaymentResult || (\n <img\n className=\"\"\n width={48}\n height={48}\n src=\"https://homepage.momocdn.net/img/momo-amazone-s3-api-241105161325-638664200053564141.svg\"\n />\n )\n }\n />\n );\n case \"failed\":\n return (\n <PaymentResultFailed\n status={status}\n title={title}\n message={message}\n iconPaymentResult={\n iconPaymentResult || (\n <img\n className=\"\"\n src=\"https://homepage.momocdn.net/img/momo-amazone-s3-api-241105161658-638664202186984790.svg\"\n />\n )\n }\n />\n );\n case \"pending\":\n return (\n <PaymentResultPending\n status={status}\n title={title}\n message={message}\n iconPaymentResult={\n iconPaymentResult || (\n <img\n className=\"\"\n src=\"https://homepage.momocdn.net/img/momo-amazone-s3-api-241105161636-638664201963670899.svg\"\n />\n )\n }\n />\n );\n default:\n }\n};\n","import { forwardRef, useEffect } from \"react\";\n\nimport { TopbarTemplateOne } from \"./TopbarTemplate\";\nimport { ITopbar } from \"./utils\";\n\nconst renderTemplate = ({ template, content }: ITopbar) => {\n switch (template) {\n case 1:\n return <TopbarTemplateOne content={content} />;\n default:\n return <TopbarTemplateOne content={content} />;\n }\n};\n\nexport const Topbar = forwardRef<HTMLDivElement, ITopbar>(({ template, content }, ref) => {\n useEffect(() => {\n const topbarElement = document.querySelector(\".container-topbar\");\n\n // Type assertion to HTMLElement\n if (topbarElement instanceof HTMLElement) {\n const height = topbarElement.offsetHeight;\n document.documentElement.style.setProperty(\"--container-topbar-height\", `${height}px`);\n }\n }, [content]);\n\n return (\n <div\n ref={ref}\n className=\"container-topbar relative flex items-center justify-between\"\n style={{ background: content?.background || \"#fafafa\" }}\n >\n <div className=\"mx-auto w-full max-w-6xl px-0 md:px-8 lg:px-8\">\n <div className=\"content\">{renderTemplate({ template, content })}</div>\n </div>\n <style>\n {`\n .container-topbar .content {\n width: 100%;\n aspect-ratio: 1088/50;\n }\n\n @media (max-width: 1025px) {\n .header-navigation nav.fixed {\n top: calc(\n var(--header-height) + 1px + var(--container-topbar-height)\n );\n }\n }\n @media (max-width: 639px) {\n .container-topbar a {\n aspect-ratio: 720/88;\n }\n }\n `}\n </style>\n </div>\n );\n});\n","import { ActionButton } from \"../../ActionButton\";\nimport { TopbarContentProps } from \"../utils\";\n\nexport const TopbarTemplateOne = ({ content }: { content: TopbarContentProps }) => {\n return (\n <picture>\n <source media=\"(max-width: 639px)\" srcSet={content?.imageMobile || content.imageDesktop} />\n <img alt=\"main-banner-top\" className=\"w-full\" src={content.imageDesktop} />\n <ActionButton\n variant=\"transparent\"\n className=\"absolute inset-0 h-full w-full opacity-0\"\n {...content?.button}\n />\n </picture>\n );\n};\n","import * as React from \"react\";\nimport { XIcon } from \"lucide-react\";\nimport { Drawer as DrawerPrimitive } from \"vaul\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst Drawer = ({\n shouldScaleBackground = true,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) => (\n <DrawerPrimitive.Root shouldScaleBackground={shouldScaleBackground} {...props} />\n);\nDrawer.displayName = \"Drawer\";\n\nconst DrawerTrigger = DrawerPrimitive.Trigger;\n\nconst DrawerPortal = DrawerPrimitive.Portal;\n\nconst DrawerClose = DrawerPrimitive.Close;\n\nconst DrawerOverlay = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Overlay\n ref={ref}\n className={cn(\"fixed inset-0 z-50 bg-black/50\", className)}\n {...props}\n />\n));\nDrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName;\n\nconst DrawerContent = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content> & { hideCloseButton?: boolean }\n>(({ className, children, hideCloseButton = false, ...props }, ref) => (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto max-h-[90dvh] flex-col rounded-t-xl border bg-white\",\n className\n )}\n {...props}\n >\n {!hideCloseButton && (\n <DrawerPrimitive.Close\n className={cn(\n \"data-[state=open]:outline-focus absolute right-2 top-2 select-none appearance-none rounded-full p-2 text-gray-700 outline-none hover:bg-gray-100 active:bg-gray-200 data-[state=open]:z-10 data-[state=open]:outline-2 data-[state=open]:outline-offset-2\"\n )}\n title=\"Đóng\"\n >\n <XIcon className=\"h-5 w-5\" />\n <span className=\"sr-only\">Close</span>\n </DrawerPrimitive.Close>\n )}\n\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n));\nDrawerContent.displayName = \"DrawerContent\";\n\nconst DrawerHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"grid gap-1.5 p-5 text-left\", className)} {...props} />\n);\nDrawerHeader.displayName = \"DrawerHeader\";\n\nconst DrawerFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)} {...props} />\n);\nDrawerFooter.displayName = \"DrawerFooter\";\n\nconst DrawerTitle = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Title\n ref={ref}\n className={cn(\" truncate text-lg font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n));\nDrawerTitle.displayName = DrawerPrimitive.Title.displayName;\n\nconst DrawerDescription = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Description\n ref={ref}\n className={cn(\"truncate text-sm text-gray-500\", className)}\n {...props}\n />\n));\nDrawerDescription.displayName = DrawerPrimitive.Description.displayName;\n\n// DrawerBody component\nconst DrawerBody = ({\n children,\n className,\n ...props\n}: {\n children: React.ReactNode;\n className?: string;\n}) => {\n return (\n <div className={cn(`drawer-body flex-1 overflow-y-auto p-5`, className)} {...props}>\n {children}\n </div>\n );\n};\nDrawerBody.displayName = \"DrawerBody\";\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n DrawerBody,\n};\n","import * as React from \"react\";\nimport { OTPInput, OTPInputContext } from \"input-otp\";\nimport { Minus } from \"lucide-react\";\n\nimport { cn } from \"../../helpers/utils\";\n\nconst InputOTP = React.forwardRef<\n React.ElementRef<typeof OTPInput>,\n React.ComponentPropsWithoutRef<typeof OTPInput>\n>(({ className, containerClassName, ...props }, ref) => (\n <OTPInput\n ref={ref}\n containerClassName={cn(\n \"flex items-center gap-2 has-[:disabled]:opacity-50\",\n containerClassName\n )}\n className={cn(\"disabled:cursor-not-allowed\", className)}\n {...props}\n />\n));\nInputOTP.displayName = \"InputOTP\";\n\nconst InputOTPGroup = React.forwardRef<\n React.ElementRef<\"div\">,\n React.ComponentPropsWithoutRef<\"div\">\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center\", className)} {...props} />\n));\nInputOTPGroup.displayName = \"InputOTPGroup\";\n\nconst InputOTPSlot = React.forwardRef<\n React.ElementRef<\"div\">,\n React.ComponentPropsWithoutRef<\"div\"> & { index: number }\n>(({ index, className, ...props }, ref) => {\n const inputOTPContext = React.useContext(OTPInputContext);\n const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index] ?? {};\n\n return (\n <div\n ref={ref}\n className={cn(\n \"border-input relative flex h-9 w-9 items-center justify-center border-y border-r border-gray-400 text-sm text-gray-900 shadow-sm transition-all first:rounded-l-md first:border-l last:rounded-r-md\",\n isActive && \"ring-ring z-10 ring-1\",\n className\n )}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"animate-caret-blink h-4 w-px bg-gray-500 duration-1000\" />\n\n <style>\n {`\n @keyframes caret-blink {\n 0%, 70%, 100% {\n opacity: 1;\n }\n 20%, 50% {\n opacity: 0;\n }\n }\n\n .animate-caret-blink {\n animation: caret-blink 1.25s ease-out infinite;\n }\n `}\n </style>\n </div>\n )}\n </div>\n );\n});\nInputOTPSlot.displayName = \"InputOTPSlot\";\n\nconst InputOTPSeparator = React.forwardRef<\n React.ElementRef<\"div\">,\n React.ComponentPropsWithoutRef<\"div\">\n>(({ ...props }, ref) => (\n <div ref={ref} role=\"separator\" {...props}>\n <Minus className=\"text-gray-400\" />\n </div>\n));\nInputOTPSeparator.displayName = \"InputOTPSeparator\";\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator };\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { toPng } from \"html-to-image\";\n\nimport { cn } from \"../../helpers/utils\";\nimport QRCodeScanBox from \"./components/QRCodeScanBox\";\nimport { QRPaymentProps } from \"./utils/interface\";\n\n// Đưa filter ra ngoài component để không tạo lại mỗi lần render\nconst exclusionClasses = [\"qrcode__gradient\", \"qrcode__guide\", \"qrcode__title\"];\nconst filterNode = (node: HTMLElement) => {\n return !exclusionClasses.some((classname) => node.classList?.contains(classname));\n};\n\nexport const QRPayment: React.FC<QRPaymentProps> = ({\n loading = false,\n isExpriedQR,\n qrLink,\n qrImage,\n logoQr,\n dateExpired,\n priceOrder,\n titleOrder,\n className,\n}) => {\n const qrCodeRef = useRef<HTMLDivElement>(null);\n const [qrImageBase64, setQrImageBase64] = useState<string | null>(null);\n const [qrLoaded, setQrLoaded] = useState(false);\n\n useEffect(() => {\n if (qrLoaded && qrCodeRef.current) {\n // Delay 3 giây để đảm bảo hình ảnh đã load hoàn toàn\n const timer = setTimeout(() => {\n if (qrCodeRef.current) {\n toPng(qrCodeRef.current, {\n filter: filterNode,\n })\n .then((dataUrl) => {\n // console.log(\"QR Image generated:\", dataUrl.substring(0, 50) + \"...\");\n setQrImageBase64(dataUrl);\n })\n .catch((error) => {\n console.error(\"Error generating QR image:\", error);\n });\n }\n }, 2000);\n\n // Cleanup timer khi component unmount hoặc dependencies thay đổi\n return () => clearTimeout(timer);\n }\n }, [qrLoaded, qrLink]);\n\n useEffect(() => {\n if (loading) setQrLoaded(false);\n }, [loading]);\n\n return (\n <>\n {/* RIGHT: QR Code */}\n <div className={cn(\"relative h-full md:col-span-7 md:rounded-lg\", className)}>\n <QRCodeScanBox\n isQrForAll={true}\n qrImage={qrImage}\n qrLink={qrLink}\n logoQr={logoQr}\n expired={isExpriedQR}\n loading={loading}\n qrCodeRef={qrCodeRef}\n titleOrder={titleOrder}\n onQrLoaded={() => {\n setQrLoaded(true);\n }}\n qrImageBase64={qrImageBase64}\n dateExpired={dateExpired}\n priceOrder={priceOrder}\n />\n </div>\n </>\n );\n};\n","import React from \"react\";\nimport { LucideMessageCircleQuestion } from \"lucide-react\";\nimport { QRCodeSVG } from \"qrcode.react\";\n\nimport { cn } from \"../../../helpers/utils\";\nimport { Spinner } from \"../../Spinner\";\nimport { imageUrlToBase64 } from \"../utils/imageToBase64\";\nimport PaymentGuideDialog from \"./PaymentGuideDialog\";\n\nconst QRCodeScanInfo = ({\n img = \"\",\n children,\n isQrForAll,\n onQrLoaded,\n dateExpired,\n priceOrder,\n}) => {\n return (\n <>\n <div className=\"qrcode__scan__container relative select-none \">\n <div className=\"flex w-full items-center justify-center space-x-2 md:hidden\">\n <img\n src=\"https://homepage.momocdn.net/pwa/images/logoMomox50.png\"\n width={28}\n height={28}\n alt=\"QR all\"\n className=\"select-none shrink-0\"\n />\n <div className=\"h-[14px] w-[2px] shrink-0 select-none bg-gray-200\"></div>\n <img\n src=\"https://homepage.momocdn.net/img/momo-amazone-s3-api-250711102030-638878260300337990.png\"\n width={56}\n height={25}\n alt=\"QR all\"\n className=\"select-none shrink-0\"\n />\n </div>\n <div className=\"qrcode__scan select-none\">\n <div className=\"qrcode__gradient invisible select-none opacity-0 md:visible md:opacity-100\">\n <img\n alt=\"step 1\"\n className=\"img-fluid\"\n src=\"https://homepage.momocdn.net/jk/momo2020/img/qrcode/qrcode-gradient.png\"\n />\n </div>\n <div className=\"invisible opacity-0 select-none qrcode__border md:visible md:opacity-100\">\n <img\n alt=\"step 2\"\n className=\"img-fluid\"\n src=\"https://homepage.momocdn.net/jk/momo2020/img/qrcode/border-qrcode.svg\"\n />\n </div>\n\n <div className=\"p-4 select-none qrcode__image\">\n {img ? (\n <img\n alt=\"step 3\"\n className=\"mx-auto img-fluid d-block\"\n src={img}\n loading=\"lazy\"\n onLoad={onQrLoaded}\n />\n ) : (\n React.Children.map(children, (child) => (React.isValidElement(child) ? child : child))\n )}\n </div>\n </div>\n\n {priceOrder && (\n <div className=\"text-sm text-gray-900 md:hidden\">\n <div className=\"\">Thông tin thanh toán</div>\n <div className=\"text-base font-bold text-gray-900\">{priceOrder}</div>\n </div>\n )}\n </div>\n {dateExpired && (\n <div className={cn(\"mt-3 text-sm text-gray-900 md:hidden\")}>\n <span>Mã hết hạn vào: </span>\n <span className=\"font-semibold\">{dateExpired}</span>\n </div>\n )}\n\n <div className=\"hidden mt-4 text-sm font-semibold text-gray-900 md:block\">\n {isQrForAll ? (\n <>\n <img\n src=\"https://homepage.momocdn.net/img/momo-amazone-s3-api-250710143736-638877550567721225.png\"\n width={220}\n height={28}\n className=\"mx-auto\"\n alt=\"QR all\"\n />\n <div className=\"mt-3\">Nhận tiền từ mọi Ví Điện Tử và Ngân Hàng</div>\n </>\n ) : (\n <>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"inline mr-1 w-6 h-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z\"\n />\n </svg>\n Sử dụng App MoMo hoặc\n <br />\n ứng dụng Camera hỗ trợ QR code để quét mã.\n </>\n )}\n </div>\n </>\n );\n};\n\nconst QRCodeScan = ({\n img = \"\",\n children,\n isQrForAll,\n onQrLoaded,\n dateExpired,\n priceOrder,\n className = \"\",\n}) => {\n return (\n <>\n <div className={cn(className)}>\n <QRCodeScanInfo\n dateExpired={dateExpired}\n priceOrder={priceOrder}\n img={img}\n isQrForAll={isQrForAll}\n onQrLoaded={onQrLoaded}\n >\n {children}\n </QRCodeScanInfo>\n </div>\n <style>\n {`\n .qrcode__scan__container {\n padding: 15px;\n background-color: white;\n width: 280px;\n border-radius: 20px;\n border-radius: 15px;\n margin: 0 auto;\n }\n \n .qrcode__image {\n width: 100%;\n }\n \n .qrcode__image img {\n width: 100%;\n }\n \n .qrcode__scan {\n width: 245px;\n height: 245px;\n margin: 0 auto;\n overflow: hidden;\n background-color: white;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n \n .qrcode__border {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n z-index: 5;\n opacity: 0.9;\n pointer-events: none;\n }\n \n .qrcode__gradient {\n position: absolute;\n opacity: 0.6;\n width: 98%;\n height: 98%;\n top: 1%;\n left: 1%;\n z-index: 6;\n // pointer-events: none;\n transform: translate3d(0, -110%, 0);\n animation: QRCodeScan 3s infinite cubic-bezier(0.45, 0.03, 0.81, 0.63);\n \n backface-visibility: hidden;\n }\n \n @keyframes QRCodeScan {\n 0% {\n transform: translate3d(0, -110%, 0);\n }\n \n 90% {\n transform: translate3d(0, 30%, 0);\n }\n 100% {\n transform: translate3d(0, 30%, 0);\n }\n }\n `}\n </style>\n </>\n );\n};\n\nconst QRCodeScanBox = ({\n isQrForAll,\n qrImage,\n qrLink,\n logoQr = \"https://homepage.momocdn.net/img/momo-upload-api-231211171009-638379114093056419.png\",\n expired,\n loading,\n onQrLoaded,\n qrImageBase64,\n qrCodeRef,\n dateExpired,\n priceOrder,\n titleOrder,\n}) => {\n const [logoBase64, setLogoBase64] = React.useState<string | undefined>(undefined);\n\n React.useEffect(() => {\n if (logoQr) {\n imageUrlToBase64(logoQr)\n .then(setLogoBase64)\n .catch(() => setLogoBase64(undefined));\n } else {\n setLogoBase64(undefined);\n }\n }, [logoQr]);\n\n // Gọi onQrLoaded khi QR SVG đã sẵn sàng (qrLink và logoBase64 đã có)\n React.useEffect(() => {\n if (qrLink && logoBase64 && typeof onQrLoaded === \"function\" && !qrImage) {\n onQrLoaded();\n }\n }, [qrLink, logoBase64, onQrLoaded, qrImage]);\n\n return (\n <div className=\"relative z-[1] \">\n <div\n className=\"relative z-[1] bg-pink-50 bg-repeat-y px-5 py-6 text-center\"\n style={{\n backgroundImage:\n \"url(https://homepage.momocdn.net/img/momo-amazone-s3-api-250714113823-638880899039487085.png) \",\n backgroundPosition: \"right bottom\",\n backgroundSize: \"auto 30px\",\n }}\n ref={qrCodeRef}\n >\n <div\n className={cn(\n \" mb-2 hidden text-base font-bold text-gray-900 md:block\",\n qrImageBase64 && \"opacity-0 md:opacity-100\"\n )}\n >\n {titleOrder || \"Quét QR để thanh toán\"}\n </div>\n\n {qrImageBase64 && (\n <div className=\"visible absolute left-0 right-0 top-0 z-20 cursor-pointer opacity-100 md:hidden md:select-none\">\n <img src={qrImageBase64} alt=\"QR Code\" />\n </div>\n )}\n <QRCodeScan\n img={qrImage}\n isQrForAll={isQrForAll}\n onQrLoaded={onQrLoaded}\n dateExpired={dateExpired}\n priceOrder={priceOrder}\n // className={qrImageBase64 && \"opacity-0 md:opacity-100\"}\n >\n {qrLink && logoBase64 && !qrImage && (\n <QRCodeSVG\n value={qrLink}\n size={215}\n imageSettings={{\n src: `${logoBase64}`,\n height: 40,\n width: 40,\n excavate: true,\n }}\n level=\"H\"\n />\n )}\n {/* Overlay if disabled */}\n {expired && (\n <div className=\"absolute inset-0 z-10 flex size-full flex-col items-center justify-center bg-white/90\">\n <span className=\"text-lg font-bold text-pink-600\">QR Code đã hết hạn</span>\n </div>\n )}\n {/* Overlay if loading */}\n {loading && (\n <div className=\"absolute inset-0 z-10 flex size-full flex-col items-center justify-center bg-white/90\">\n <Spinner size=\"lg\" />\n </div>\n )}\n </QRCodeScan>\n {/* Payment Guide */}\n </div>\n\n <div\n className=\"relative z-10 px-5 pb-5 text-center bg-pink-50 bg-repeat-y select-none qrcode__guide\"\n style={{\n backgroundImage:\n \"url(https://homepage.momocdn.net/img/momo-amazone-s3-api-250714113823-638880899039487085.png) \",\n backgroundPosition: \"right top\",\n backgroundSize: \"auto 30px\",\n }}\n >\n <div\n className={cn(\n \"qrcode__guide absolute -top-24 right-20 z-50 cursor-pointer select-none md:opacity-0\",\n qrImageBase64 && \"opacity-100 md:opacity-0\"\n )}\n >\n <div className=\"rounded-full ripple size-5\">\n <div className=\"ripple-1\"></div>\n <div className=\"ripple-2\"></div>\n </div>\n <img\n className=\"object-contain relative z-10 -mt-1 drop-shadow-lg select-none qrcode__hand size-7\"\n src=\"https://homepage.momocdn.net/img/momo-amazone-s3-api-250714154408-638881046482607959.png\"\n alt=\"Momo Hand Icon\"\n />\n </div>\n\n <div className=\"mb-2 text-sm font-semibold text-pink-600 md:hidden\">Nhấn giữ QR để lưu</div>\n <PaymentGuideDialog\n isQrForAll={true}\n shortTitle=\"Thanh toán ngay\"\n title=\"Hướng dẫn thanh toán QR\"\n >\n <div className=\"flex justify-center items-center space-x-1 text-sm font-semibold text-center text-pink-600 cursor-pointer\">\n <div>Hướng dẫn thanh toán</div> <LucideMessageCircleQuestion className=\"size-4\" />{\" \"}\n </div>\n </PaymentGuideDialog>\n\n <style>{`\n .ripple {\n box-sizing: border-box;\n position: relative;\n }\n\n .ripple-1,\n .ripple-2{\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: solid 2px #EB2F96;\n border-radius: 1em;\n box-sizing: border-box;\n animation: ripple 2s ease-out infinite;\n opacity: 0;\n }\n .ripple-2 {\n animation-delay: 0.5s;\n }\n .ripple-1 {\n animation-delay: 1s;\n }\n\n .qrcode__hand{\n animation: handTap 2s ease-in-out infinite;\n transform-origin: top center;\n }\n\n @keyframes ripple {\n 0% {\n opacity: 0.25;\n transform: scale(1);\n }\n 100% {\n opacity: 0;\n transform: scale(3);\n border-radius: 2em;\n }\n }\n @keyframes handTap {\n 0% {\n transform: scale(1) translateY(0);\n }\n 20% {\n transform: scale(0.96) translateY(-4px); /* nhấn nhẹ xuống */\n }\n 80% {\n transform: scale(0.96) translateY(-4px); /* nhấn nhẹ xuống */\n }\n 100% {\n transform: scale(1) translateY(0);\n }\n }\n `}</style>\n </div>\n </div>\n );\n};\n\nexport default QRCodeScanBox;\n","/**\n * Chuyển đổi hình ảnh từ URL sang base64\n * @param imageUrl Đường dẫn hình ảnh\n * @returns Promise<string> base64 string\n */\nexport async function imageUrlToBase64(imageUrl: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const img = new window.Image(); // Tạo một đối tượng hình ảnh mới\n img.crossOrigin = \"Anonymous\"; // Cho phép lấy ảnh từ domain khác (CORS)\n img.onload = function () {\n const canvas = document.createElement(\"canvas\");\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n reject(\"Không lấy được context của canvas\");\n return;\n }\n ctx.drawImage(img, 0, 0); // Vẽ ảnh lên canvas\n const dataURL = canvas.toDataURL(\"image/png\"); // Lấy chuỗi base64 từ canvas\n resolve(dataURL); // Trả về chuỗi base64\n };\n img.onerror = function (err) {\n reject(err); // Nếu có lỗi khi tải ảnh\n };\n img.src = imageUrl; // Gán đường dẫn ảnh để bắt đầu tải\n });\n}\n","import React from \"react\";\n\ninterface PaymentGuideProps {\n /**\n * Whether this is QR for all (universal QR)\n */\n isQrForAll?: boolean;\n /**\n * Short title for step 3\n */\n shortTitle?: string;\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\nconst PaymentGuide: React.FC<PaymentGuideProps> = ({\n isQrForAll = false,\n shortTitle,\n className = \"\",\n}) => {\n return (\n <div className={`grid grid-cols-1 gap-y-6 py-8 text-sm ${className}`}>\n <div className=\"flex flex-nowrap items-center\">\n <div className=\"relative aspect-[2/3] flex-none overflow-hidden\">\n <img\n className=\"w-20\"\n loading=\"lazy\"\n src=\"https://homepage.momocdn.net/images/s/momo-upload-api-200917091602-637359309621891617.png\"\n alt=\"Step 1\"\n />\n </div>\n <div className=\"flex-1 pl-4\">\n <div className=\"step font-semibold text-gray-800\">Bước 1 :</div>\n <div className=\"mt-1 text-gray-500\">\n {isQrForAll\n ? \"Mở app MoMo hoặc ứng dụng ngân hàng/ví điện tử chấp nhận mã vạch từ QR Đa Năng\"\n : \"Mở ứng dụng camera mặc định hoặc ứng dụng hỗ trợ QR code của bạn\"}\n </div>\n </div>\n </div>\n <div className=\"flex flex-nowrap items-center\">\n <div className=\"relative aspect-[2/3] flex-none overflow-hidden\">\n <img\n className=\"w-20\"\n loading=\"lazy\"\n src=\"https://homepage.momocdn.net/images/s/momo-upload-api-200917091443-637359308837905996.png\"\n alt=\"Step 2\"\n />\n </div>\n <div className=\"flex-1 pl-4\">\n <div className=\"step font-semibold text-gray-800\">Bước 2 :</div>\n <div className=\"mt-1 text-gray-500\">Quét mã QR Code theo hình bên phải</div>\n </div>\n </div>\n <div className=\"flex flex-nowrap items-center\">\n <div className=\"relative aspect-[2/3] flex-none overflow-hidden\">\n <img\n className=\"w-20\"\n loading=\"lazy\"\n src=\"https://homepage.momocdn.net/images/s/momo-upload-api-200917090146-637359301062519803.png\"\n alt=\"Step 3\"\n />\n </div>\n <div className=\"flex-1 pl-4\">\n <div className=\"step font-semibold text-gray-800\">Bước 3 :</div>\n <div className=\"mt-1 text-gray-500\">\n Bấm vào thông báo hiển thị để tải ứng dụng hoặc {shortTitle || \"Truy cập ngay\"}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default PaymentGuide;\n","import React from \"react\";\n\nimport {\n Dialog,\n DialogBody,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../../Dialog\";\nimport PaymentGuide from \"./PaymentGuide\";\n\ninterface PaymentGuideDialogProps {\n /**\n * Trigger element to open the dialog\n */\n children: React.ReactNode;\n /**\n * Title of the dialog\n */\n title?: string;\n /**\n * Whether this is QR for all (universal QR)\n */\n isQrForAll?: boolean;\n /**\n * Short title for step 3\n */\n shortTitle?: string;\n /**\n * Whether the dialog is open\n */\n open?: boolean;\n /**\n * Callback when dialog open state changes\n */\n onOpenChange?: (open: boolean) => void;\n}\n\nconst PaymentGuideDialog: React.FC<PaymentGuideDialogProps> = ({\n children,\n title = \"Hướng dẫn thanh toán\",\n isQrForAll = false,\n shortTitle,\n open,\n onOpenChange,\n}) => {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogTrigger asChild>{children}</DialogTrigger>\n <DialogContent position=\"bottom\">\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n </DialogHeader>\n <DialogBody>\n <PaymentGuide isQrForAll={isQrForAll} shortTitle={shortTitle} />\n </DialogBody>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default PaymentGuideDialog;\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/**\n * This Tailwind plugin is based and inspired on \"tw-colors\" and \"NextUI\".\n *\n * @see https://github.com/L-Blondy/tw-colors\n * @see https://github.com/nextui-org/nextui\n */\n\nimport Color from \"color\";\nimport plugin from \"tailwindcss/plugin.js\";\n\nimport { animations } from \"./animations\";\nimport { colors as listColors } from \"./colors\";\nimport { layout } from \"./layout\";\nimport { utilities } from \"./utilities\";\nimport { flattenThemeObject } from \"./utils/object\";\n\nconst resolveConfig = (prefix: string) => {\n const resolved = {\n utilities: {},\n colors: {},\n };\n\n const flatColors = flattenThemeObject(listColors);\n\n const flatLayout = layout;\n\n const cssSelector = \":root\";\n\n resolved.utilities[cssSelector] = {};\n // Color\n Object.entries(flatColors).forEach(([colorName, colorValue]) => {\n if (!colorValue) return;\n try {\n const [r, g, b] = Color(colorValue).rgb().array();\n const colorVar = `--${prefix}-${colorName}`;\n // Set the css variable in \"@layer utilities\"\n resolved.utilities[cssSelector]![colorVar] = `${r} ${g} ${b}`;\n resolved.colors[colorName] = `rgb(var(${colorVar}) / <alpha-value>)`;\n } catch (error: any) {\n // eslint-disable-next-line no-console\n console.log(\"error\", error?.message);\n }\n });\n // Layout\n Object.entries(flatLayout).forEach(([key, value]) => {\n if (!value) return;\n const layoutVariablePrefix = `--${prefix}-${key}`;\n\n if (typeof value === \"object\") {\n Object.entries(value).forEach(([nestedKey, nestedValue]) => {\n const nestedLayoutVariable = `${layoutVariablePrefix}-${nestedKey}`;\n resolved.utilities[cssSelector]![nestedLayoutVariable] = nestedValue;\n });\n } else {\n const formattedValue =\n layoutVariablePrefix.includes(\"opacity\") && typeof value === \"number\"\n ? value?.toString().replace(/^0\\./, \".\")\n : value;\n resolved.utilities[cssSelector]![layoutVariablePrefix] = formattedValue;\n }\n });\n\n return resolved;\n};\nexport const mobaseTW = () => {\n const prefix = \"mobase\";\n const resolved = resolveConfig(prefix);\n return plugin(\n ({ addBase, addUtilities, addComponents }) => {\n addComponents({\n \".wrapper\": {\n maxWidth: \"72rem\",\n paddingLeft: \"1.25rem\",\n paddingRight: \"1.25rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n \"@media (min-width: 768px)\": {\n paddingLeft: \"2rem\",\n paddingRight: \"2rem\",\n },\n },\n body: {\n color: \"rgb(var(--mobase-gray-900))\",\n },\n });\n addBase({\n \":root\": {\n \"font-smooth--webkit\": \"antialiased\",\n },\n\n ...resolved?.utilities, // Xem lai cho nay, addBase\n });\n addUtilities({\n // ...resolved?.utilities, //Xem lai cho nay, addBase\n ...utilities,\n });\n },\n // Extend the Tailwind config\n {\n theme: {\n container: {\n center: true,\n },\n screens: {\n sm: \"640px\",\n md: \"768px\",\n lg: \"1024px\",\n xl: \"1280px\",\n \"2xl\": \"1536px\",\n },\n extend: {\n fontFamily: {\n sans: [\n \"-apple-system\",\n \"BlinkMacSystemFont\",\n \"Segoe UI\",\n \"Helvetica\",\n \"Arial\",\n \"sans-serif\",\n \"Apple Color Emoji\",\n \"Segoe UI Emoji\",\n \"Segoe UI Symbol\",\n ],\n mono: [\"SFMono-Regular\", \"Consolas\", \"Liberation Mono\", \"Menlo\", \"monospace\"],\n },\n colors: {\n ...listColors,\n ...resolved?.colors,\n border: \"rgba(var(--border))\",\n },\n boxShadow: {\n small: `var(--${prefix}-box-shadow-small)`,\n medium: `var(--${prefix}-box-shadow-medium)`,\n large: `var(--${prefix}-box-shadow-large)`,\n },\n borderRadius: {\n none: `var(--${prefix}-radius-none)`,\n sm: `var(--${prefix}-radius-sm)`,\n DEFAULT: `var(--${prefix}-radius-default)`,\n md: `var(--${prefix}-radius-md)`,\n lg: `var(--${prefix}-radius-lg)`,\n xl: `var(--${prefix}-radius-xl)`,\n \"2xl\": `var(--${prefix}-radius-2xl)`,\n \"3xl\": `var(--${prefix}-radius-3xl)`,\n full: `var(--${prefix}-radius-full)`,\n },\n fontSize: {\n xxs: [`var(--${prefix}-font-size-xxs)`, `var(--${prefix}-line-height-xxs)`],\n xs: [`var(--${prefix}-font-size-xs)`, `var(--${prefix}-line-height-xs)`],\n sm: [`var(--${prefix}-font-size-sm)`, `var(--${prefix}-line-height-sm)`],\n base: [`var(--${prefix}-font-size-base)`, `var(--${prefix}-line-height-base)`],\n lg: [`var(--${prefix}-font-size-lg)`, `var(--${prefix}-line-height-lg)`],\n xl: [`var(--${prefix}-font-size-xl)`, `var(--${prefix}-line-height-xl)`],\n \"2xl\": [`var(--${prefix}-font-size-2xl)`, `var(--${prefix}-line-height-2xl)`],\n \"3xl\": [`var(--${prefix}-font-size-3xl)`, `var(--${prefix}-line-height-3xl)`],\n \"4xl\": [`var(--${prefix}-font-size-4xl)`, `var(--${prefix}-line-height-4xl)`],\n \"5xl\": [`var(--${prefix}-font-size-5xl)`, `var(--${prefix}-line-height-5xl)`],\n \"6xl\": [`var(--${prefix}-font-size-6xl)`, `var(--${prefix}-line-height-6xl)`],\n \"7xl\": [`var(--${prefix}-font-size-7xl)`, `var(--${prefix}-line-height-7xl)`],\n \"8xl\": [`var(--${prefix}-font-size-8xl)`, `var(--${prefix}-line-height-8xl)`],\n \"9xl\": [`var(--${prefix}-font-size-9xl)`, `var(--${prefix}-line-height-9xl)`],\n },\n zIndex: {\n negative: `var(--${prefix}-z-index-negative)`,\n workbench: `var(--${prefix}-z-index-workbench)`,\n default: `var(--${prefix}-z-index-default)`,\n \"workbench-header\": `var(--${prefix}-z-index-workbench-header)`,\n modal: `var(--${prefix}-z-index-modal)`,\n \"modal-content\": `var(--${prefix}-z-index-modal-content)`,\n dropdown: `var(--${prefix}-z-index-dropdown)`,\n tooltip: `var(--${prefix}-z-index-tooltip)`,\n notification: `var(--${prefix}-z-index-notification)`,\n },\n ...animations,\n },\n },\n }\n );\n};\n","export const animations = {\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n \"spin-loading\": \"spin 1s steps(12, end) infinite\",\n \"fade-in\": \"fade-in 250ms cubic-bezier(0.25, 0.46, 0.45, 0.94) both\",\n },\n keyframes: {\n \"accordion-down\": {\n from: { height: \"0\" },\n to: { height: \"var(--radix-accordion-content-height)\" },\n },\n \"accordion-up\": {\n from: { height: \"var(--radix-accordion-content-height)\" },\n to: { height: \"0\" },\n },\n \"fade-in\": {\n \"0%\": { opacity: \"0\" },\n \"100%\": { opacity: \"1\" },\n },\n },\n};\n","export const blue = {\n 50: \"#eef8ff\",\n 100: \"#d9eeff\",\n 200: \"#bce1ff\",\n 300: \"#8ed0ff\",\n 400: \"#59b4ff\",\n 500: \"#429cff\",\n 600: \"#1b74f5\",\n 700: \"#145ee1\",\n 800: \"#174bb6\",\n 900: \"#19428f\",\n DEFAULT: \"#429cff\",\n};\n","export const green = {\n 50: \"#f1fcf3\",\n 100: \"#dff9e5\",\n 200: \"#c0f2cc\",\n 300: \"#8fe6a4\",\n 400: \"#57d175\",\n 500: \"#34c759\",\n 600: \"#22973f\",\n 700: \"#1e7735\",\n 800: \"#1d5e2e\",\n 900: \"#194e28\",\n DEFAULT: \"#34c759\",\n};\n","export const pink = {\n 50: \"#fef1f9\",\n 100: \"#fee5f6\",\n 200: \"#fecced\",\n 300: \"#ffa2df\",\n 400: \"#fe68c6\",\n 500: \"#EB2F96\",\n 600: \"#D42A87\",\n 700: \"#CB0B6F\",\n 800: \"#A70D5B\",\n 900: \"#8B104E\",\n DEFAULT: \"#EB2F96\",\n};\n","export const purple = {\n 50: \"#faf5ff\",\n 100: \"#f4e9fe\",\n 200: \"#ead6fe\",\n 300: \"#dab6fc\",\n 400: \"#c487f9\",\n 500: \"#ab55f3\",\n 600: \"#9937e6\",\n 700: \"#8326ca\",\n 800: \"#6f24a5\",\n 900: \"#5b1e85\",\n DEFAULT: \"#ab55f3\",\n};\n","export const red = {\n 50: \"#fff1f2\",\n 100: \"#ffe1e3\",\n 200: \"#ffc8cb\",\n 300: \"#ffa1a6\",\n 400: \"#fe6b73\",\n 500: \"#f74e57\",\n 600: \"#e41e29\",\n 700: \"#c0151e\",\n 800: \"#9e161d\",\n 900: \"#83191f\",\n DEFAULT: \"#f74e57\",\n};\n","export const yellow = {\n 50: \"#fffee7\",\n 100: \"#fffec1\",\n 200: \"#fff886\",\n 300: \"#ffec41\",\n 400: \"#ffdb0d\",\n 500: \"#ffcc00\",\n 600: \"#d19500\",\n 700: \"#a66a02\",\n 800: \"#89530a\",\n 900: \"#74430f\",\n DEFAULT: \"#ffcc00\",\n};\n","export const orange = {\n 50: \"#fff4ed\",\n 100: \"#ffe6d5\",\n 200: \"#fecaaa\",\n 300: \"#fea473\",\n 400: \"#fc743b\",\n 500: \"#fa541c\",\n 600: \"#eb350b\",\n 700: \"#c3240b\",\n 800: \"#9b1e11\",\n 900: \"#7c1c12\",\n DEFAULT: \"#fa541c\",\n};\n","export const gray = {\n 50: \"#FAF9FA\",\n 100: \"#F5F4F5\",\n 200: \"#E7E4E6\",\n 300: \"#D6D1D4\",\n 400: \"#A69BA2\",\n 500: \"#796B73\",\n 600: \"#574D53\",\n 700: \"#443B41\",\n 800: \"#292427\",\n 900: \"#1C171A\",\n DEFAULT: \"#1C171A\",\n};\n","import { blue } from \"./blue\";\nimport { green } from \"./green\";\nimport { pink } from \"./pink\";\nimport { purple } from \"./purple\";\nimport { red } from \"./red\";\nimport { yellow } from \"./yellow\";\nimport { orange } from \"./orange\";\nimport { gray } from \"./gray\";\n\nexport const commonColors = {\n white: \"#ffffff\",\n black: \"#000000\",\n blue,\n green,\n pink,\n purple,\n red,\n yellow,\n gray,\n orange,\n};\n\nexport type CommonColors = typeof commonColors;\n","import { commonColors } from \"./common\";\n\nconst colors = {\n ...commonColors,\n};\n\nexport { colors, commonColors };\n","export const layout = {\n \"disabled-opacity\": 0.5, // Numeric values don't need quotes\n \"box-shadow\": {\n small:\n \"0px 0px 5px 0px rgb(0 0 0 / 0.02), 0px 2px 10px 0px rgb(0 0 0 / 0.06), 0px 0px 1px 0px rgb(0 0 0 / 0.3)\",\n medium:\n \"0px 0px 15px 0px rgb(0 0 0 / 0.03), 0px 2px 30px 0px rgb(0 0 0 / 0.08), 0px 0px 1px 0px rgb(0 0 0 / 0.3)\",\n large:\n \"0px 0px 30px 0px rgb(0 0 0 / 0.04), 0px 30px 60px 0px rgb(0 0 0 / 0.12), 0px 0px 1px 0px rgb(0 0 0 / 0.3)\",\n },\n \"radius\": {\n none: \"0px\",\n sm: \"0.125rem\",\n default: \"0.25rem\",\n md: \"0.375rem\",\n lg: \"0.5rem\",\n xl: \"0.75rem\",\n \"2xl\": \"1rem\",\n \"3xl\": \"1.5rem\",\n \"full\": \"9999px\",\n },\n \"z-index\": {\n negative: \"-1\",\n workbench: \"0\",\n default: \"1\",\n \"workbench-header\": \"10\",\n modal: \"100\",\n \"modal-content\": \"101\",\n dropdown: \"1000\",\n tooltip: \"10000\",\n notification: \"100000\",\n },\n \"font-size\": {\n xxs: \"0.625rem\",\n xs: \"0.75rem\",\n sm: \"0.875rem\",\n base: \"1rem\",\n lg: \"1.125rem\",\n xl: \"1.25rem\",\n \"2xl\": \"1.5rem\",\n \"3xl\": \"1.875rem\",\n \"4xl\": \"2.25rem\",\n \"5xl\": \"3rem\",\n \"6xl\": \"3.75rem\",\n \"7xl\": \"4.5rem\",\n \"8xl\": \"6rem\",\n \"9xl\": \"8rem\",\n },\n \"line-height\": {\n xxs: \"1rem\",\n xs: \"1rem\",\n sm: \"1.25rem\",\n base: \"1.5rem\",\n lg: \"1.75rem\",\n xl: \"1.75rem\",\n \"2xl\": \"2rem\",\n \"3xl\": \"2.25rem\",\n \"4xl\": \"2.5rem\",\n \"5xl\": \"1\",\n \"6xl\": \"1\",\n \"7xl\": \"1\",\n \"8xl\": \"1\",\n \"9xl\": \"1\",\n }\n};\n","export const DEFAULT_TRANSITION_DURATION = \"250ms\";\n\nexport default {\n /**\n * Transition utilities\n */\n \".transition-background\": {\n \"transition-property\": \"background\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-colors-opacity\": {\n \"transition-property\":\n \"color, background-color, border-color, text-decoration-color, fill, stroke, opacity\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-width\": {\n \"transition-property\": \"width\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-height\": {\n \"transition-property\": \"height\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-size\": {\n \"transition-property\": \"width, height\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-left\": {\n \"transition-property\": \"left\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-transform-opacity\": {\n \"transition-property\": \"transform, opacity\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-transform-background\": {\n \"transition-property\": \"transform, background\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-transform-colors\": {\n \"transition-property\":\n \"transform, color, background, background-color, border-color, text-decoration-color, fill, stroke\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n \".transition-transform-colors-opacity\": {\n \"transition-property\":\n \"transform, color, background, background-color, border-color, text-decoration-color, fill, stroke, opacity\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION,\n },\n};\n","export default {\n /**\n * Custom utilities\n */\n \".leading-inherit\": {\n \"line-height\": \"inherit\",\n },\n \".bg-img-inherit\": {\n \"background-image\": \"inherit\",\n },\n \".bg-clip-inherit\": {\n \"background-clip\": \"inherit\",\n },\n \".text-fill-inherit\": {\n \"-webkit-text-fill-color\": \"inherit\",\n },\n \".tap-highlight-transparent\": {\n \"-webkit-tap-highlight-color\": \"transparent\",\n },\n};\n","/**\n * Credits to: https://github.com/reslear/tailwind-scrollbar-hide/tree/main\n */\n\nexport default {\n /**\n * Scroll Hide\n */\n \".scrollbar-hide\": {\n /* IE and Edge */\n \"-ms-overflow-style\": \"none\",\n /* Firefox */\n \"scrollbar-width\": \"none\",\n /* Safari and Chrome */\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n },\n \".scrollbar-default\": {\n /* IE and Edge */\n \"-ms-overflow-style\": \"auto\",\n /* Firefox */\n \"scrollbar-width\": \"auto\",\n /* Safari and Chrome */\n \"&::-webkit-scrollbar\": {\n display: \"block\",\n },\n },\n};\n","import transition from \"./transition\";\nimport custom from \"./custom\";\nimport scrollbarHide from \"./scrollbar-hide\";\n\nexport const utilities = {\n ...custom,\n ...transition,\n ...scrollbarHide,\n};\n","import { flatten } from 'flat'\nexport function swapColorValues<T extends Object>(colors: T) {\n const swappedColors = {};\n const keys = Object.keys(colors);\n const length = keys.length;\n\n for (let i = 0; i < length / 2; i++) {\n const key1 = keys[i];\n const key2 = keys[length - 1 - i];\n\n // @ts-ignore\n swappedColors[key1] = colors[key2];\n // @ts-ignore\n swappedColors[key2] = colors[key1];\n }\n if (length % 2 !== 0) {\n const middleKey = keys[Math.floor(length / 2)];\n\n // @ts-ignore\n swappedColors[middleKey] = colors[middleKey];\n }\n\n return swappedColors;\n}\n\nexport function removeDefaultKeys<T extends Object>(obj: T) {\n const newObj = {};\n\n for (const key in obj) {\n if (key.endsWith(\"-DEFAULT\")) {\n // @ts-ignore\n newObj[key.replace(\"-DEFAULT\", \"\")] = obj[key];\n continue;\n }\n // @ts-ignore\n newObj[key] = obj[key];\n }\n\n return newObj;\n}\n\n/**\n *\n * Flatten theme object and remove default keys\n *\n * @param obj theme object\n * @returns object with flattened keys\n */\n\nexport const flattenThemeObject = <TTarget>(obj: TTarget) =>\n removeDefaultKeys(\n flatten(obj, {\n safe: true,\n delimiter: \"-\",\n }) as Object\n );\n","export const SiteMeta = (\n <>\n <meta\n name=\"abstract\"\n content=\"Ví điện tử MoMo - Siêu ứng dụng thanh toán số 1 Việt Nam\"\n />\n <meta name=\"distribution\" content=\"Global\" />\n <meta name=\"author\" content=\"Ví MoMo\" />\n\n <meta property=\"fb:app_id\" content=\"320653355376196\" />\n <meta property=\"fb:pages\" content=\"138010322921640\" />\n\n <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n\n <link\n href=\"https://www.momo.vn/favicon-32x32.png\"\n rel=\"icon\"\n sizes=\"32x32\"\n type=\"image/png\"\n />\n\n <link\n href=\"https://www.momo.vn/favicon-16x16.png\"\n rel=\"icon\"\n sizes=\"16x16\"\n type=\"image/png\"\n />\n\n <link\n href=\"https://www.momo.vn/apple-touch-icon.png\"\n rel=\"apple-touch-icon\"\n sizes=\"180x180\"\n />\n\n <meta name=\"language\" content=\"vietnamese\" />\n <meta name=\"copyright\" content=\"Copyright © 2019 by MOMO.VN\" />\n <meta name=\"REVISIT-AFTER\" content=\"1 DAYS\" />\n <meta name=\"RATING\" content=\"GENERAL\" />\n <meta httpEquiv=\"x-dns-prefetch-control\" content=\"on\" />\n <link rel=\"dns-prefetch\" href=\"//www.google-analytics.com\" />\n <link rel=\"dns-prefetch\" href=\"//connect.facebook.net\" />\n <link rel=\"dns-prefetch\" href=\"//www.googletagservices.com\" />\n <link rel=\"dns-prefetch\" href=\"//www.googletagmanager.com\" />\n <link rel=\"dns-prefetch\" href=\"//facebook.com\" />\n <link rel=\"dns-prefetch\" href=\"//homepage.momocdn.net\" />\n <link rel=\"dns-prefetch\" href=\"//www.google.com\" />\n <link rel=\"dns-prefetch\" href=\"//www.google.com.vn\" />\n <link rel=\"dns-prefetch\" href=\"//www.googleadservices.com\" />\n <link rel=\"preconnect\" href=\"//connect.facebook.net\" />\n <link rel=\"preconnect\" href=\"//www.googletagmanager.com\" />\n <link rel=\"preconnect\" href=\"//www.google-analytics.com\" />\n <link rel=\"preconnect\" href=\"//googleads.g.doubleclick.net\" />\n <link rel=\"preconnect\" href=\"//homepage.momocdn.net\" />\n <link rel=\"preconnect\" href=\"//www.google.com\" />\n <link rel=\"preconnect\" href=\"//www.google.com.vn\" />\n <link rel=\"preconnect\" href=\"//www.googleadservices.com\" />\n\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{\n __html: `{\n \"@context\": \"https://schema.org/\",\n \"@type\": \"WebSite\",\n \"@id\":\"https://www.momo.vn/#website\",\n \"name\": \"Ví MoMo\",\n \"url\": \"https://www.momo.vn\",\n \"potentialAction\": {\n \"@type\": \"SearchAction\",\n \"target\": \"https://www.momo.vn/tim-kiem?q={search_term_string}\",\n \"query-input\": \"required name=search_term_string\"\n }}`,\n }}\n />\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{\n __html: `{\n \"@context\": \"https://schema.org\",\n \"@type\": \"Organization\",\n \"name\": \"Siêu ứng dụng MoMo\",\n \"alternateName\": \"Siêu ứng dụng MoMo - Siêu Ứng Dụng Thanh Toán số 1 Việt Nam\",\n \"legalName\": \"ONLINE MOBILE SERVICES JSC (M_Service)\",\n \"url\": \"https://www.momo.vn\",\n \"logo\": \"https://homepage.momocdn.net/img/logo-momo.png\",\n \"foundingDate\": \"2007\",\n \"founders\": [\n {\n \"@type\": \"Person\",\n \"name\": \"Nguyễn Mạnh Tường\"\n }\n ],\n \"address\":{\n \"@type\": \"PostalAddress\",\n \"streetAddress\": \"Lầu 6, Toà nhà Phú Mỹ Hưng, số 8 Hoàng Văn Thái, khu phố 1, Phường Tân Phú, Quận 7, Thành phố Hồ Chí Minh\",\n \"addressLocality\": \"Hồ Chí Minh\",\n \"addressRegion\": \"VN\",\n \"postalCode\": \"700000\",\n \"addressCountry\": \"VN\"\n },\n \"contactPoint\":{\n \"@type\": \"ContactPoint\",\n \"contactType\": \"customer support\",\n \"telephone\": \"1900545441\",\n \"email\": \"hotro@momo.vn\"\n },\n \"sameAs\": [\n \"https://www.facebook.com/vimomo/\",\n \"https://www.youtube.com/channel/UCKHHW-qL2JoZqcSNm1jPlqw\",\n \"https://www.linkedin.com/company/momo-mservice/\",\n \"https://github.com/momo-wallet\"\n ]\n }`,\n }}\n />\n </>\n);\n"],"mappings":"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","names":["React","ChevronDownIcon","AccordionPrimitive","React","twMerge","MoMoText","SUPPORT","SOCIAL_ITEMS","APP_DOWNLOAD","MOMO_TEXT","createMedia","cn","inputs","twMerge","MoMoAppMedia","createMedia","mediaStyles","Media","MediaContextProvider","jsx","jsxs","Accordion","className","props","ref","AccordionItem","cn","AccordionTrigger","children","ChevronDownIcon","AccordionContent","React","Slot","cva","jsx","jsxs","SpinerIcon","className","SpinerIcon_default","Fragment","jsx","jsxs","buttonVariants","cva","Button","className","variant","size","asChild","isLoading","isDisabled","props","ref","Comp","Slot","buttonClassName","cn","SpinerIcon_default","QRCodeSVG","React","XMarkIcon","DialogPrimitive","jsx","jsxs","Dialog","DialogTrigger","DialogPortal","DialogClose","DialogOverlay","className","props","ref","cn","DialogContent","positionRightCloseBtn","hideCloseBtn","size","position","height","isFull","children","classNames","sizeClassNames","heightClassNames","classNamesDialogContent","XMarkIcon","DialogHeader","DialogBody","isCondensed","DialogFooter","isDivider","DialogTitle","DialogDescription","Fragment","jsx","jsxs","QRCodeScan","img","children","isQrForAll","DialogQr","className","title","shortTitle","qrImage","qrLink","logoQr","props","Dialog","DialogContent","cn","DialogBody","QRCodeSVG","useState","useEffect","useLayoutEffect","useState","UAParser","checkIsMobileAgent","useIsomorphicLayoutEffect","useIsMobile","isMobile","setIsMobile","Fragment","jsx","jsxs","ActionButton","action","newTab","offset","dialogQrProps","className","children","props","isOpenQR","setOpenQR","useState","isMobileDevice","useIsMobile","hasQrButton","handleGetLink","basicLink","handleAction","modifiedLink","scrollToElement","selector","element","offsetPosition","handleScrollOrAction","renderButtonWithDialogQr","Button","DialogQr","cn","React","ChevronRightIcon","DotsHorizontalIcon","Slot","jsx","jsxs","Breadcrumb","className","props","ref","cn","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","asChild","Slot","BreadcrumbPage","BreadcrumbSeparator","children","ChevronRightIcon","BreadcrumbEllipsis","DotsHorizontalIcon","parse","createContext","useContext","jsx","HeadingGroupContext","createContext","HeadingTagline","color","size","isTruncated","className","children","colorClasses","sizeClasses","cn","Heading","tagHeading","HeadingTag","align","useContext","HeadingSub","marginTop","marginTopClasses","HeadingGroup","jsx","jsxs","SectionBlock","idSection","className","background","children","cn","HeadingBlock","align","tagline","title","description","tagHeading","colorScheme","sizeHeading","taglineColor","headingColor","headingSubColor","HeadingGroup","HeadingTagline","Heading","parse","HeadingSub","ButtonsBlock","isFullInMobile","buttons","button","index","btnName","rest","ActionButton","React","memo","ArrowDownIcon","parse","createContext","useCallback","useContext","useEffect","useRef","useState","ChevronLeft","ChevronRight","React","Slot","cva","jsx","iconButtonVariants","cva","IconButton","className","variant","size","asChild","isDisabled","props","ref","Comp","Slot","buttonClassName","cn","Fragment","jsx","jsxs","HorizontalScrollContext","createContext","HorizontalScroll","showGradientOverlay","gradientOverlayColor","className","children","scrollContainerRef","useRef","showArrows","setShowArrows","useState","checkOverflow","useCallback","scrollContainer","scrollLeft","scrollWidth","clientWidth","useEffect","scroll","direction","scrollAmount","newScrollPosition","cn","HorizontalContent","context","useContext","HorizontalPrevious","props","IconButton","ChevronLeft","HorizontalNext","ChevronRight","React","TabsPrimitive","jsx","Tabs","TabsList","className","size","isDivider","props","ref","cn","TabsTrigger","TabsContent","React","Slot","cva","jsx","textButtonVariants","cva","TextButton","className","variant","size","asChild","isDisabled","props","ref","Comp","Slot","buttonClassName","cn","Fragment","jsx","jsxs","BlogSectionItem","blog","handleOnClickcate","e","url","TextButton","BlogSectionTemplateOne","memo","dataHeading","dataHorizontalScroll","dataBlog","onClickModal","onClickLoadMore","showGradientOverlay","gradientOverlayColor","className","handleOnClickItem","id","renderGridBlog","blogGroup","index","cn","blogItem","ActionButton","parse","SpinerIcon_default","ArrowDownIcon","React","HeadingBlock","Tabs","HorizontalScroll","HorizontalContent","TabsList","TabsTrigger","HorizontalPrevious","HorizontalNext","TabsContent","React","memo","useEffect","useState","ChevronLeftIcon","ChevronRightIcon","parse","React","ChevronLeftIcon","ChevronRightIcon","useEmblaCarousel","Fragment","jsx","jsxs","CarouselContext","useCarousel","context","Carousel","orientation","opts","setApi","plugins","className","children","props","ref","carouselRef","api","useEmblaCarousel","canScrollPrev","setCanScrollPrev","canScrollNext","setCanScrollNext","onSelect","scrollPrev","scrollNext","handleKeyDown","event","cn","CarouselContent","classNameContent","CarouselItem","CarouselPrevious","variant","size","IconButton","ChevronLeftIcon","CarouselNext","ChevronRightIcon","CarouselDots","setUpdateState","toggleUpdateState","prevState","numberOfSlides","currentSlide","_","i","Fragment","jsx","jsxs","BlogSectionItem","blog","handleOnClickcate","e","url","parse","TextButton","CarouselBlog","dataBlog","setCarouselRef","carouselRef","setCurrent","handleOnClickItem","blogList","isShowBtn","btnName","btnUrl","isNewTab","classNameItem","useEffect","Carousel","CarouselContent","CarouselItem","cn","ActionButton","CarouselPreviousRef","IconButton","ChevronLeftIcon","CarouselNextRef","ChevronRightIcon","BlogSectionTemplateTwo","memo","dataHeading","onClickModal","onClickLoadMore","id","useState","CarouselNavigation","React","HeadingBlock","Fragment","jsx","renderTemplate","template","dataBlog","dataHeading","dataHorizontalScroll","onClickModal","onClickLoadMore","BlogSectionTemplateOne","BlogSectionTemplateTwo","BlogSectionContent","BlogSection","idSection","className","background","SectionBlock","cn","React","enUS","vi","ChevronLeft","ChevronRight","lunisolar","DayPicker","React","CheckboxPrimitive","CheckIcon","cva","jsx","checkboxVariants","cva","checkboxIconVariants","Checkbox","className","size","props","ref","cn","CheckIcon","Fragment","jsx","jsxs","CusDayContent","date","cusContent","lunarDate","lunisolar","customFormatters","month","weekday","dayIndex","CheckboxLunaDate","isShow","setIsShow","lang","uniqueId","Checkbox","checked","isWeekend","Calendar","className","classNames","showOutsideDays","enableLunaDate","cusContentDay","props","showLunaDate","setShowLunaDate","DayPicker","vi","enUS","cn","buttonVariants","ChevronLeft","ChevronRight","dayProps","children","QuestionMarkCircleIcon","XCircleIcon","format","CalendarIcon","React","PopoverPrimitive","jsx","Popover","PopoverTrigger","PopoverContent","className","align","sideOffset","props","ref","cn","Fragment","jsx","jsxs","DatePicker","label","placeholder","size","message","isError","disabled","dateFormat","buttonProps","popoverProps","calendarProps","popoverContentProps","dateSelected","Popover","PopoverTrigger","Button","cn","format","CalendarIcon","PopoverContent","Calendar","XCircleIcon","QuestionMarkCircleIcon","useEffect","useState","QuestionMarkCircleIcon","XCircleIcon","isValid","React","ChevronDownIcon","ChevronUpIcon","CheckIcon","XCircleIcon","QuestionMarkCircleIcon","SelectPrimitive","jsx","jsxs","Select","className","children","label","message","size","isError","disabled","props","ref","cn","XCircleIcon","QuestionMarkCircleIcon","SelectValue","SelectTrigger","ChevronDownIcon","SelectScrollUpButton","ChevronUpIcon","SelectScrollDownButton","SelectContent","position","SelectGroup","SelectLabel","SelectItem","CheckIcon","SelectSeparator","monthsVi","monthsEn","getDaysInMonth","year","month","fromDate","toDate","daysInMonth","startDay","endDay","generateYears","startYear","endYear","fromYear","toYear","_","i","jsx","jsxs","DateSelect","label","selected","onSelect","size","message","isError","disabled","dateFormat","lang","fromYear","toYear","disableUnselect","selectedDate","setSelectedDate","useState","startYear","endYear","isMonthYearOnly","handleDateChange","type","value","currentYear","currentMonth","currentDay","maxDay","getDaysInMonth","newDate","isValid","isAnySelectOpen","setIsAnySelectOpen","handleOpenChange","open","useEffect","cn","Select","SelectTrigger","SelectValue","SelectContent","e","SelectGroup","SelectItem","_","i","d","m","monthsVi","monthsEn","generateYears","y","XCircleIcon","QuestionMarkCircleIcon","React","AlertDialogPrimitive","jsx","jsxs","AlertDialog","AlertDialogTrigger","AlertDialogPortal","AlertDialogOverlay","className","props","ref","cn","AlertDialogContent","AlertDialogHeader","AlertDialogFooter","AlertDialogTitle","AlertDialogDescription","AlertDialogAction","buttonVariants","AlertDialogCancel","memo","useState","useEffect","useState","parse","motion","AspectRatioPrimitive","AspectRatio","Fragment","jsx","jsxs","GuideUIDesktopTempOne","guideGroup","mockup","api","setApi","useState","current","setCurrent","variants","useEffect","cn","Carousel","CarouselContent","step","index","CarouselItem","AspectRatio","CarouselPrevious","CarouselNext","parse","motion","GuideUIDesktop_default","useEffect","useRef","useState","ChevronRightIcon","Autoplay","parse","Fragment","jsx","jsxs","ModalStepMobile","open","setOpenDialog","dataStep","mockup","current","setCurrent","useState","api","setApi","useEffect","Dialog","DialogContent","DialogHeader","DialogTitle","DialogBody","Carousel","CarouselContent","step","index","CarouselItem","cn","AspectRatio","parse","_","GuideUIMobileTempOne","dataGuide","isStep","openDialog","setDataStep","plugin","useRef","Autoplay","handleClickModal","guideGroup","ChevronRightIcon","TextButton","GuideUIMobile_default","Fragment","jsx","jsxs","ArrowSVG","direction","className","svgProps","cn","GuideSectionTemplateOne","memo","dataHeading","dataHorizontalScroll","dataGuide","dataButtons","mockup","isStep","showGradientOverlay","gradientOverlayColor","activeTab","setActiveTab","useState","HeadingBlock","MediaContextProvider","Media","GuideUIMobile_default","Tabs","value","HorizontalScroll","HorizontalContent","TabsList","guideGroup","index","isLast","isActive","TabsTrigger","HorizontalPrevious","HorizontalNext","TabsContent","GuideUIDesktop_default","ButtonsBlock","Fragment","jsx","renderTemplate","template","dataHeading","dataGuide","dataHorizontalScroll","dataButtons","mockup","isStep","GuideSectionTemplateOne","GuideSectionContent","GuideSection","idSection","className","background","SectionBlock","cn","ChevronLeft","ChevronRight","Fragment","jsx","jsxs","Pagination","current","total","onChange","getButton","index","cn","iconButtonVariants","ChevronLeft","_","ChevronRight","forwardRef","QuestionMarkCircleIcon","XCircleIcon","jsx","jsxs","TextArea","forwardRef","disabled","isError","message","label","className","inputClassName","size","rows","restProps","ref","cn","XCircleIcon","QuestionMarkCircleIcon","React","TOAST_LIMIT","TOAST_REMOVE_DELAY","count","genId","toastTimeouts","addToRemoveQueue","toastId","timeout","dispatch","TOAST_REMOVE_DELAY","reducer","state","action","TOAST_LIMIT","toast","t","listeners","memoryState","listener","props","id","update","dismiss","open","useToast","setState","index","React","CheckCircleIcon","ExclamationTriangleIcon","InformationCircleIcon","XMarkIcon","ToastPrimitives","cva","jsx","jsxs","ToastProvider","ToastViewport","className","props","ref","cn","toastVariants","cva","Toast","variant","children","CheckCircleIcon","ExclamationTriangleIcon","InformationCircleIcon","ToastAction","ToastClose","XMarkIcon","ToastTitle","ToastDescription","jsx","jsxs","Toaster","toasts","useToast","ToastProvider","id","title","description","action","props","Toast","ToastTitle","ToastDescription","ToastClose","ToastViewport","React","TooltipPrimitive","jsx","TooltipProvider","Tooltip","TooltipTrigger","TooltipArrow","props","ref","cn","TooltipContent","className","type","sideOffset","forwardRef","useEffect","useRef","useState","QuestionMarkCircleIcon","XCircleIcon","XCircleIconSolid","jsx","jsxs","TextInput","forwardRef","disabled","isError","message","label","className","inputClassName","withClearButton","size","onChange","onFocus","onClickClear","value","defaultValue","type","restProps","ref","clearable","setClearable","useState","rootRef","useRef","handleShowClearButton","inputValue","onChangeFactory","event","onFocusFactory","handleClear","inputTarget","useEffect","cn","XCircleIcon","XCircleIconSolid","QuestionMarkCircleIcon","MinusCircleIcon","PlusCircleIcon","forwardRef","useState","jsx","jsxs","Stepper","forwardRef","className","min","max","step","defaultValue","onChangeValue","onDecrease","onIncrease","disabled","props","ref","value","setValue","useState","increment","newValue","decrement","handleInputChange","e","inputValue","cn","IconButton","MinusCircleIcon","PlusCircleIcon","React","NavigationMenuPrimitive","cva","ChevronDownIcon","jsx","jsxs","NavigationMenuContext","NavigationMenuProvider","value","children","useNavigationMenu","context","NavigationMenu","className","alignDropdown","props","ref","cn","NavigationMenuList","NavigationMenuItem","navigationMenuTriggerStyle","cva","buttonVariants","NavigationMenuTrigger","ChevronDownIcon","NavigationMenuContent","NavigationMenuLink","NavigationMenuViewport","NavigationMenuIndicator","React","SwitchPrimitives","jsx","Switch","className","props","ref","cn","React","RadioGroupPrimitive","Circle","cva","jsx","radioVariants","cva","radioCircleVariants","RadioGroupContext","useChoiceboxGroupContext","context","RadioGroup","className","size","props","ref","cn","RadioGroupItem","Circle","useState","ArrowDownTrayIcon","parse","useEffect","useState","Router","AnimatePresence","domAnimation","LazyMotion","motion","useKey","DEFAULT_EASE","motion","jsx","jsxs","ListItemMobile","className","icon","title","children","href","newTab","linkProps","cn","ListItemMobile_default","jsx","jsxs","listItem","DEFAULT_EASE","NavItemsMobile","data","Accordion","menuItem","linkProps","motion","AccordionItem","AccordionTrigger","AccordionContent","cn","component","ListItemMobile_default","NavItemsMobile_default","jsx","jsxs","computeInsetTop","MobileMenu","data","className","isOpen","setIsOpen","useState","isHashChange","setIsHashChange","useKey","useEffect","memoizedInsetTop","handleRouteChange","handleHashChange","handleHashClick","e","target","Router","variants","containerVariants","DEFAULT_EASE","cn","motion","LazyMotion","domAnimation","AnimatePresence","NavItemsMobile_default","MoMoText","MobileMenu_default","jsx","jsxs","ListItem","className","icon","title","children","href","newTab","linkProps","NavigationMenuLink","cn","ListItem_default","jsx","jsxs","NavItems","data","alignDropdown","NavigationMenu","NavigationMenuList","menuItem","linkProps","NavigationMenuItem","NavigationMenuTrigger","NavigationMenuContent","cn","component","ListItem_default","NavigationMenuLink","navigationMenuTriggerStyle","NavItems_default","jsx","jsxs","HeaderNavigation","className","dataMenu","serviceInfo","hasDownloadApp","navigationRight","isSticky","alignDropdown","isLogoVisible","logo","name","url","openDialogQr","setOpenDialogQr","useState","cn","parse","NavItems_default","Button","ArrowDownTrayIcon","DialogQr","MobileMenu_default","useState","Fragment","jsx","jsxs","FooterContentItem","item","FooterContent","primaryMenu","secondaryMenu","openDialogQr","setOpenDialogQr","useState","index","SUPPORT","MOMO_TEXT","SOCIAL_ITEMS","APP_DOWNLOAD","Button","DialogQr","FooterContent_default","jsx","Footer","className","primaryMenu","secondaryMenu","cn","FooterContent_default","React","jsx","Card","className","props","ref","cn","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","React","CommandPrimitive","XCircleIcon","MagnifyingGlassIcon","jsx","jsxs","Command","className","props","ref","CommandPrimitive","cn","CommandDialog","children","Dialog","DialogContent","CommandInput","onClickClear","classNameInput","divRef","search","setSearch","handleClearInput","CommandList","CommandEmpty","CommandGroup","CommandSeparator","CommandItem","CommandShortcut","ChevronDownIcon","jsx","jsxs","ComboboxTrigger","className","value","label","children","placeholder","size","PopoverTrigger","cn","ChevronDownIcon","ComboboxContent","props","PopoverContent","Combobox","open","onOpenChange","Popover","cva","forwardRef","InformationCircleIcon","jsx","jsxs","calloutVariants","cva","iconVariants","Callout","forwardRef","type","message","withAction","onClickAction","className","disabled","actionClassName","icon","props","ref","cn","InformationCircleIcon","TextButton","forwardRef","useEffect","useRef","useState","MagnifyingGlassIcon","XCircleIcon","jsx","jsxs","SearchBar","forwardRef","disabled","className","inputClassName","size","onChange","onFocus","onClickClear","value","defaultValue","type","restProps","ref","clearable","setClearable","useState","rootRef","useRef","handleShowClearButton","inputValue","onChangeFactory","event","onFocusFactory","handleClear","inputTarget","useEffect","cn","MagnifyingGlassIcon","XCircleIcon","DialogPrimitive","React","useContext","useEffect","useState","X","_","jsx","jsxs","LightboxGalleryContext","React","useLightboxGalleryContext","context","useContext","LightboxGallery","children","open","onOpenChange","className","cn","LightboxThumbnail","src","alt","classNameImage","onClick","ratio","handleOnClickThumbnail","AspectRatio","LightboxContent","props","ref","handleClose","X","LightBoxGalleryContent","images","activeSlideIndex","withSideBar","subHtmlSideBar","classNameSubHtmSideBar","titleImage","setTitleImg","useState","api","setApi","current","setCurrent","useEffect","onGetTitleImage","result","_","idx","titleImgDraft","Carousel","CarouselContent","img","index","CarouselItem","CarouselPrevious","CarouselNext","React","CheckIcon","CheckboxPrimitive","RadioGroupPrimitive","Circle","jsx","jsxs","ChoiceboxGroupContext","useChoiceboxGroupContext","context","ChoiceboxGroup","className","hideIndicator","props","ref","cn","ChoiceboxGroupItem","children","Circle","ChoiceboxMultiItem","CheckIcon","cva","jsx","badgeVariants","cva","Badge","className","variant","props","cn","React","ProgressPrimitive","cva","jsx","progressbarVariants","cva","progressbarSecondaryVariants","Progress","className","value","variant","size","disabled","props","ref","cn","jsx","Skeleton","className","props","cn","Fragment","jsx","jsxs","Spinner","size","color","className","template","sizeClasses","sizeClassesDots","_","i","cn","React","SliderPrimitive","jsx","jsxs","Slider","className","showIndicatorValue1","showIndicatorValue2","props","ref","cn","forwardRef","Fragment","jsx","jsxs","AvatarFallBack","author","Avatar","avatar","CommentHeader","time","statusMessage","isOutStanding","CommentHeader_default","useState","StarIcon","jsx","jsxs","textReviewMax10","textReviewMax5","CommentRating","point","max","className","textReviewFinal","cn","CommentRating_default","useState","parse","jsx","jsxs","ReadMoreLite","children","maxChar","textMore","textLess","btnClass","className","isReadMore","setIsReadMore","useState","toggleReadMore","shorten","str","maxLen","separator","cn","parse","jsx","jsxs","CommentContent","content","thumbnails","tags","commentSideBar","rating","limitContent","activeSlideIdx","setActiveSlideIdx","useState","isOpen","setIsOpen","handleClick","index","CommentRating_default","ReadMoreLite","tag","LightboxGallery","img","AspectRatio","LightBoxGalleryContent","CommentContent_default","jsx","CommentFooter","actions","CommentFooter_default","jsx","jsxs","Comment","forwardRef","avatar","author","time","ratingPoint","content","tags","thumbnails","actions","statusMessage","isReply","children","commentSideBar","isOutStanding","limitContent","ref","cn","CommentHeader_default","CommentContent_default","CommentFooter_default","React","cva","CheckIcon","XIcon","jsx","jsxs","stepperVariants","cva","ProgressStepsContext","useProgressStepsContext","context","ProgressStepper","type","icon","stepNumber","size","isError","state","iconSizeClass","ProgressStepsItemTrigger","step","currentStep","onValueChangeStep","children","handleChangeStep","ProgressStepsItem","placement","className","title","description","lastStep","fristStep","props","cn","ProgressSteps","React","Slot","Controller","FormProvider","useFormContext","React","LabelPrimitive","cva","jsx","labelVariants","cva","Label","className","props","ref","cn","jsx","Form","FormProvider","FormFieldContext","FormField","props","Controller","useFormField","fieldContext","itemContext","FormItemContext","getFieldState","formState","useFormContext","fieldState","id","FormItem","className","ref","cn","FormLabel","error","formItemId","Label","FormControl","formDescriptionId","formMessageId","Slot","FormDescription","FormMessage","children","body","React","DropdownMenuPrimitive","ChevronRight","Check","jsx","jsxs","DropdownMenu","DropdownMenuTrigger","DropdownMenuGroup","DropdownMenuPortal","DropdownMenuSub","DropdownMenuRadioGroup","DropdownMenuSubTrigger","className","inset","children","props","ref","cn","ChevronRight","DropdownMenuSubContent","DropdownMenuContent","sideOffset","DropdownMenuItem","DropdownMenuCheckboxItem","checked","Check","DropdownMenuRadioItem","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuShortcut","parse","Fragment","jsx","jsxs","HowItWorksTemplateOne","dataHeading","dataHowItWorks","dataButtons","HeadingBlock","step","index","parse","ButtonsBlock","HowItWorksTemplateTwo","AspectRatio","renderTemplate","template","HowItWorksSectionContent","HowItWorksSection","background","className","idSection","SectionBlock","cva","parse","CheckIcon","Fragment","jsx","jsxs","featureVariants","cva","SectionHeroItemFeature","template","name","image","isFeatures","cn","CheckIcon","parse","SectionHeroListFeature","dataFeatures","feature","index","XIcon","jsx","jsxs","convertDataRation","ratio","b","SectionHeroVideo","src","className","youtubeId","onClickFC","MediaContextProvider","Media","AspectRatio","cn","Dialog","DialogTrigger","DialogContent","DialogBody","DialogClose","IconButton","XIcon","SectionHeroMedia","type","classNameMedia","parse","Fragment","jsx","jsxs","SectionHeroListStats","value","suffix","unit","description","idx","cn","parse","SectionHeroStats","dataStats","stat","index","Fragment","jsx","jsxs","HeroContentTemplateOne","dataHeading","dataButtons","dataFeatures","template","dataStats","dataMedia","advancedComponent","cn","HeadingBlock","SectionHeroListFeature","ButtonsBlock","SectionHeroStats","SectionHeroMedia","HeroContentTemplateTwo","HeroContentTemplateThree","Fragment","jsx","BG_DEFAULT","renderTemplate","template","dataHeading","dataButtons","dataFeatures","dataStats","dataMedia","advancedComponent","HeroContentTemplateOne","HeroContentTemplateTwo","HeroContentTemplateThree","SectionHeroContent","HeroSection","idSection","className","background","SectionBlock","cn","memo","Fragment","jsx","jsxs","SocialProofTemplate1","memo","dataHeading","dataBrands","dataButtons","spaceX","isScrollSnap","spaceXClasses","HeadingBlock","cn","brand","index","Wrapper","wrapperProps","ButtonsBlock","memo","Fragment","jsx","jsxs","SocialProofTemplate2","memo","dataHeading","dataBrands","dataButtons","isScrollSnap","HeadingBlock","cn","brand","index","Wrapper","wrapperProps","ButtonsBlock","memo","Fragment","jsx","jsxs","renderBrandItem","brand","className","cn","Wrapper","SocialProofTemplate3","memo","dataHeading","dataBrands","dataButtons","isMobileDevice","useIsMobile","topRow","bottomRow","half","HeadingBlock","Carousel","CarouselContent","idx","CarouselItem","CarouselDots","ButtonsBlock","memo","useEffect","useState","animate","motion","useMotionValue","useMeasure","jsx","jsxs","InfiniteSlider","children","gap","speed","speedOnHover","direction","reverse","className","classNameMotion","currentSpeed","setCurrentSpeed","useState","ref","width","height","useMeasure","translation","useMotionValue","isTransitioning","setIsTransitioning","key","setKey","useEffect","controls","contentSize","from","to","duration","transitionDuration","animate","prevKey","hoverProps","cn","motion","Fragment","jsx","jsxs","renderBrandItem","brand","className","Wrapper","cn","SocialProofTemplate4","memo","dataHeading","dataBrands","dataButtons","brandsLength","isRunAnimation","HeadingBlock","InfiniteSlider","index","ButtonsBlock","Fragment","jsx","renderTemplate","template","dataHeading","dataBrands","dataButtons","spaceX","isScrollSnap","SocialProofTemplate1","SocialProofTemplate2","SocialProofTemplate3","SocialProofTemplate4","SocialProofSectionContent","SocialProofSection","background","className","idSection","SectionBlock","cn","useState","ChevronRightIcon","parse","Fragment","jsx","jsxs","RenderFeatureLink","btnLink","btnName","newTab","TextButton","ChevronRightIcon","FeatureTemplateOne","dataHeading","dataFeatures","dataButtons","HeadingBlock","feature","index","parse","ButtonsBlock","FeatureTemplateTwo","FeatureTemplateThree","FeatureTemplateFour","cn","FeatureTemplateFive","FeatureTemplateSix","FeatureTemplateSeven","totalItems","BASIS_CLASSES","ROW_BREAK_INDEX","basisClass","breakAfterIndex","renderFeatureItem","WrapperTag","wrapperProps","FeatureTemplateEight","FeatureTemplateNine","dataBanner","AspectRatio","FeatureTemplateTen","FeatureTemplateElevent","activeIndex","setActiveIndex","useState","isMobileDevice","useIsMobile","Accordion","val","idx","AccordionItem","AccordionTrigger","AccordionContent","Fragment","jsx","renderTemplate","template","dataHeading","dataFeatures","dataButtons","dataBanner","FeatureTemplateOne","FeatureTemplateTwo","FeatureTemplateThree","FeatureTemplateFour","FeatureTemplateFive","FeatureTemplateSix","FeatureTemplateSeven","FeatureTemplateEight","FeatureTemplateNine","FeatureTemplateTen","FeatureTemplateElevent","FeatureSectionContent","FeatureSection","background","className","idSection","SectionBlock","StarIcon","parse","_","randomColors","getInitials","name","parts","getColorForIndex","index","colors","Fragment","jsx","jsxs","TestimonialAvatar","avatar","name","index","_","initials","getInitials","bgColor","getColorForIndex","randomColors","cn","TestimonialItem","testimonial","className","parse","idx","StarIcon","TestimonialTemplateOne","dataHeading","dataTestimonials","dataButtons","testimonialsLength","isRunAnimation","HeadingBlock","InfiniteSlider","ButtonsBlock","StarIcon","parse","Fragment","jsx","jsxs","QuoteIcon","className","TestimonialItem","testimonial","cn","AspectRatio","parse","_","idx","StarIcon","TestimonialTemplateThree","dataHeading","dataTestimonials","dataButtons","HeadingBlock","Carousel","CarouselContent","index","CarouselItem","CarouselDots","ButtonsBlock","StarIcon","parse","_","Fragment","jsx","jsxs","TestimonialAvatar","avatar","name","index","_","initials","getInitials","bgColor","getColorForIndex","randomColors","cn","TestimonialItem","testimonial","className","parse","idx","StarIcon","TestimonialTemplateTwo","dataHeading","dataTestimonials","dataButtons","testimonialsLength","isRunAnimation","sliderConfigs","renderSliders","configs","config","colIdx","InfiniteSlider","HeadingBlock","MediaContextProvider","Media","ButtonsBlock","Fragment","jsx","renderTemplate","template","dataHeading","dataTestimonials","dataButtons","TestimonialTemplateOne","TestimonialTemplateTwo","TestimonialTemplateThree","TestimonialSectionContent","TestimonialSection","background","className","idSection","SectionBlock","cn","parse","Fragment","jsx","jsxs","FAQTemplateOne","dataFAQ","dataHeading","dataButtons","renderAccordion","Accordion","faqContent","index","AccordionItem","AccordionTrigger","AccordionContent","parse","HeadingBlock","cn","ButtonsBlock","FAQTemplateTwo","dataHorizontalScroll","showGradientOverlay","gradientOverlayColor","className","Tabs","HorizontalScroll","HorizontalContent","TabsList","faq","TabsTrigger","HorizontalPrevious","HorizontalNext","TabsContent","Fragment","jsx","renderTemplate","template","dataFAQ","dataHeading","dataButtons","dataHorizontalScroll","FAQTemplateOne","FAQTemplateTwo","FAQSectionContent","FAQSection","className","background","idSection","SectionBlock","React","memo","ArrowDownIcon","parse","Fragment","jsx","jsxs","NewsSectionItem","news","handleOnClickcate","e","url","TextButton","NewsSectionTemplateOne","memo","dataHeading","dataHorizontalScroll","dataNews","onClickModal","onClickLoadMore","showGradientOverlay","gradientOverlayColor","className","handleOnClickItem","id","renderGridNews","newsGroup","index","cn","newsItem","ActionButton","parse","SpinerIcon_default","ArrowDownIcon","React","HeadingBlock","Tabs","HorizontalScroll","HorizontalContent","TabsList","TabsTrigger","HorizontalPrevious","HorizontalNext","TabsContent","Fragment","jsx","renderTemplate","template","dataNews","dataHeading","dataHorizontalScroll","onClickModal","onClickLoadMore","NewsSectionTemplateOne","NewsSectionContent","NewsSection","idSection","className","background","SectionBlock","cn","Fragment","jsx","jsxs","CTATemplateOne","dataHeading","dataCTA","dataButtons","HeadingBlock","ButtonsBlock","cn","CTATemplateTwo","dataMedia","AspectRatio","renderTemplate","template","CTASectionContent","CTASection","background","className","idSection","SectionBlock","React","parse","jsx","jsxs","MetricItem","metric","metricTitle","metricValue","metricDescription","parse","MetricsSectionTemplateOne","dataMetrics","dataButtons","dataHeading","React","HeadingBlock","cn","index","ButtonsBlock","React","parse","jsx","jsxs","MetricItem","metric","metricTitle","metricValue","metricDescription","parse","MetricsSectionTemplateTwo","dataMetrics","dataButtons","dataHeading","React","HeadingBlock","cn","index","ButtonsBlock","Fragment","jsx","renderTemplate","dataHeading","dataMetrics","template","dataButtons","MetricsSectionTemplateOne","MetricsSectionTemplateTwo","MetricsSectionContent","MetricsSection","idSection","background","className","SectionBlock","cn","forwardRef","jsx","jsxs","PaymentInvoice","className","title","children","ref","useCallback","Fragment","jsx","jsxs","SkeletonItem","Skeleton","SkeletonPaymentMethod","_","index","PaymentSkeleton_default","Fragment","jsx","jsxs","PaymentMethodItem","paymentMethod","ChoiceboxGroupItem","PaymentMethods","title","paymentMethods","isLoading","onSelectPaymentMethod","defaultPaymentMethod","handleMethodSelect","useCallback","value","PaymentSkeleton_default","ChoiceboxGroup","method","forwardRef","jsx","PaymentContent","forwardRef","children","className","ref","cn","Payment","props","forwardRef","jsx","jsxs","PaymentResultFooter","forwardRef","className","children","ref","cn","forwardRef","jsx","PaymentResultContent","forwardRef","className","children","ref","cn","forwardRef","CheckBadgeIcon","XCircleIcon","jsx","jsxs","PaymentResultSuccess","iconPaymentResult","message","title","Callout","CheckBadgeIcon","PaymentResultFailed","XCircleIcon","PaymentResultPending","PaymentResultHeader","status","jsx","jsxs","PaymentResult","forwardRef","className","status","message","title","iconPaymentResult","children","ref","cn","PaymentResultHeader","forwardRef","useEffect","jsx","jsxs","TopbarTemplateOne","content","ActionButton","jsx","jsxs","renderTemplate","template","content","TopbarTemplateOne","Topbar","forwardRef","ref","useEffect","topbarElement","height","React","XIcon","DrawerPrimitive","jsx","jsxs","Drawer","shouldScaleBackground","props","DrawerPrimitive","DrawerTrigger","DrawerPortal","DrawerClose","DrawerOverlay","className","ref","cn","DrawerContent","children","hideCloseButton","XIcon","DrawerHeader","DrawerFooter","DrawerTitle","DrawerDescription","DrawerBody","React","OTPInput","OTPInputContext","Minus","jsx","jsxs","InputOTP","className","containerClassName","props","ref","OTPInput","cn","InputOTPGroup","InputOTPSlot","index","inputOTPContext","OTPInputContext","char","hasFakeCaret","isActive","InputOTPSeparator","Minus","useEffect","useRef","useState","toPng","React","LucideMessageCircleQuestion","QRCodeSVG","imageUrlToBase64","imageUrl","resolve","reject","img","canvas","ctx","dataURL","err","jsx","jsxs","PaymentGuide","isQrForAll","shortTitle","className","PaymentGuide_default","jsx","jsxs","PaymentGuideDialog","children","title","isQrForAll","shortTitle","open","onOpenChange","Dialog","DialogTrigger","DialogContent","DialogHeader","DialogTitle","DialogBody","PaymentGuide_default","PaymentGuideDialog_default","Fragment","jsx","jsxs","QRCodeScanInfo","img","children","isQrForAll","onQrLoaded","dateExpired","priceOrder","React","child","cn","QRCodeScan","className","QRCodeScanBox","qrImage","qrLink","logoQr","expired","loading","qrImageBase64","qrCodeRef","titleOrder","logoBase64","setLogoBase64","imageUrlToBase64","QRCodeSVG","Spinner","PaymentGuideDialog_default","LucideMessageCircleQuestion","QRCodeScanBox_default","Fragment","jsx","exclusionClasses","filterNode","node","classname","QRPayment","loading","isExpriedQR","qrLink","qrImage","logoQr","dateExpired","priceOrder","titleOrder","className","qrCodeRef","useRef","qrImageBase64","setQrImageBase64","useState","qrLoaded","setQrLoaded","useEffect","timer","toPng","dataUrl","error","cn","QRCodeScanBox_default","Color","plugin","animations","blue","green","pink","purple","red","yellow","orange","gray","commonColors","blue","green","pink","purple","red","yellow","gray","orange","colors","commonColors","layout","DEFAULT_TRANSITION_DURATION","transition_default","custom_default","scrollbar_hide_default","utilities","custom_default","transition_default","scrollbar_hide_default","flatten","removeDefaultKeys","obj","newObj","key","flattenThemeObject","flatten","resolveConfig","prefix","resolved","flatColors","flattenThemeObject","colors","flatLayout","layout","cssSelector","colorName","colorValue","r","g","b","Color","colorVar","error","key","value","layoutVariablePrefix","nestedKey","nestedValue","nestedLayoutVariable","formattedValue","mobaseTW","plugin","addBase","addUtilities","addComponents","utilities","animations","Fragment","jsx","jsxs","SiteMeta"]}
|