@banbox/chat 1.0.0 → 1.0.1
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/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/package.json +13 -17
- package/src/ui/chat/TypingIndicator.tsx +5 -5
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/contexts/ChatUIContext.tsx","../src/hooks/useDisableBodyScroll.ts","../src/contexts/GalleryContext.tsx","../src/contexts/GalleryProvider.tsx","../src/utils/cn.ts","../src/ui/Button.tsx","../src/modals/chat/ChatConfirmModal.tsx","../src/icons/index.tsx","../src/ui/Select.tsx","../src/modals/chat/ChatTranslateSettingsModal.tsx","../src/ui/chat/AttachmentPreviewStrip.tsx","../src/ui/chat/ChatComposerBar.tsx","../src/ui/chat/drop-up/BusinessCardDropup.tsx","../src/ui/chat/drop-up/EmojiDropup.tsx","../src/ui/chat/scrollToMessage.ts","../src/ui/chat/ReplyCard.tsx","../src/ui/chat/ChatFooter.tsx","../src/ui/chat/ChatHeader.tsx","../src/ui/chat/ChatIdentity.tsx","../src/ui/chat/ChatInquiryBar.tsx","../src/ui/chat/ChatListHeader.tsx","../src/ui/chat/message-items/ChatAddressCard.tsx","../src/ui/chat/message-items/ChatBubbleAudio.tsx","../src/ui/chat/message-items/ChatBubbleFiles.tsx","../src/ui/chat/message-items/ChatBubbleImages.tsx","../src/ui/chat/message-items/ChatBubbleText.tsx","../src/ui/chat/message-items/ChatBusinessCard.tsx","../src/ui/chat/MessageHoverActions.tsx","../src/ui/chat/ChatMessageItem.tsx","../src/ui/chat/ChatScroll.tsx","../src/ui/chat/ChatThreadItem.tsx","../src/ui/chat/TypingIndicator.tsx","../src/ui/chat/ChatSpinner.tsx","../src/ui/Portal.tsx","../src/chat/ChatImagePreviewModal.tsx","../src/chat/InboxPopup.tsx","../src/chat/SinglePopup.tsx","../src/chat/ChatRoot.tsx","../src/contexts/ChatUIProvider.tsx"],"names":["createContext","useContext","prev","React","jsx","jsxs","useState","useEffect","clsx","fmtTime","useRef","useCallback","createPortal","WIDTH","GAP_Y","PADDING","useMemo","Fragment","extColor","AnimatePresence","motion","toRef"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\nimport { createContext, useContext } from \"react\";\nimport type { Reference } from \"../types\";\n\n// Re-export Reference so consumers who import from this context still work.\nexport type { Reference };\n\nexport type ChatVariant = \"inbox\" | \"single\";\n\nexport type ChatUIState = {\n isOpen: boolean;\n variant: ChatVariant;\n reference?: Reference;\n selectedThreadId?: string | null;\n\n openInbox: (opts?: { reference?: Reference; threadId?: string }) => void;\n openSingle: (opts?: { reference?: Reference }) => void;\n close: () => void;\n selectThread: (id: string | null) => void;\n};\n\nexport const ChatUIContext = createContext<ChatUIState | null>(null);\n\nexport function useChatUI() {\n const ctx = useContext(ChatUIContext);\n if (!ctx) {\n throw new Error(\"useChatUI must be used within ChatUIProvider\");\n }\n return ctx;\n}\n","import { useEffect } from \"react\";\n\n/**\n * Locks document body scroll while `active` is true.\n * Restores overflow on cleanup / when `active` becomes false.\n */\nexport function useDisableBodyScroll(active: boolean) {\n useEffect(() => {\n if (!active) return;\n const original = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = original;\n };\n }, [active]);\n}\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\n\n// New interface for media items\nexport interface GalleryMedia {\n type: \"image\" | \"video\" | \"pdf\";\n url: string;\n altText?: string;\n /** Per-item upload date shown in the gallery preview */\n uploadDate?: string | null;\n}\n\n// Updated context type\nexport interface GalleryContextType {\n images: GalleryMedia[];\n currentIndex: number | null;\n isOpen: boolean;\n uploadDate?: string | null;\n showDots?: boolean;\n setImages: (imgs: GalleryMedia[]) => void;\n setCurrentIndex: (index: number) => void;\n setUploadDate: (date: string | null) => void;\n openGallery: (imgs: GalleryMedia[], startIndex?: number, uploadDate?: string | null, showDots?: boolean) => void;\n closeGallery: () => void;\n next: () => void;\n prev: () => void;\n}\n\nexport const GalleryContext = createContext<GalleryContextType | undefined>(\n undefined,\n);\n\nexport const useGallery = (): GalleryContextType => {\n const context = useContext(GalleryContext);\n if (!context) {\n throw new Error(\"useGallery must be used within a GalleryProvider\");\n }\n return context;\n};\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { useCallback, useState } from \"react\";\n\nimport { GalleryContext } from \"./GalleryContext\";\nimport type { GalleryMedia, GalleryContextType } from \"./GalleryContext\";\n\ninterface GalleryState {\n images: GalleryMedia[];\n currentIndex: number | null;\n isOpen: boolean;\n uploadDate: string | null;\n showDots: boolean;\n}\n\nconst INITIAL_STATE: GalleryState = {\n images: [],\n currentIndex: null,\n isOpen: false,\n uploadDate: null,\n showDots: false,\n};\n\nexport const GalleryProvider = ({ children }: { children: ReactNode }) => {\n const [state, setState] = useState<GalleryState>(INITIAL_STATE);\n\n const setImages = useCallback((images: GalleryMedia[]) => {\n setState((prev) => ({ ...prev, images }));\n }, []);\n\n const setCurrentIndex = useCallback((currentIndex: number) => {\n setState((prev) => ({ ...prev, currentIndex }));\n }, []);\n\n const setUploadDate = useCallback((uploadDate: string | null) => {\n setState((prev) => ({ ...prev, uploadDate }));\n }, []);\n\n const openGallery = useCallback(\n (imgs: GalleryMedia[], startIndex = 0, date: string | null = null, dots = false) => {\n setState({\n images: imgs,\n currentIndex: startIndex,\n uploadDate: imgs[startIndex]?.uploadDate ?? date,\n isOpen: true,\n showDots: dots,\n });\n },\n [],\n );\n\n const closeGallery = useCallback(() => {\n setState((prev) => ({ ...prev, isOpen: false, currentIndex: null }));\n }, []);\n\n const next = useCallback(() => {\n setState((prev) => {\n if (prev.currentIndex === null || prev.images.length === 0) return prev;\n const newIndex = prev.currentIndex < prev.images.length - 1 ? prev.currentIndex + 1 : 0;\n return { ...prev, currentIndex: newIndex, uploadDate: prev.images[newIndex]?.uploadDate ?? null };\n });\n }, []);\n\n const prev = useCallback(() => {\n setState((prev) => {\n if (prev.currentIndex === null || prev.images.length === 0) return prev;\n const newIndex = prev.currentIndex > 0 ? prev.currentIndex - 1 : prev.images.length - 1;\n return { ...prev, currentIndex: newIndex, uploadDate: prev.images[newIndex]?.uploadDate ?? null };\n });\n }, []);\n\n const value: GalleryContextType = {\n images: state.images,\n currentIndex: state.currentIndex,\n isOpen: state.isOpen,\n uploadDate: state.uploadDate,\n showDots: state.showDots,\n setImages,\n setCurrentIndex,\n setUploadDate,\n openGallery,\n closeGallery,\n next,\n prev,\n };\n\n return <GalleryContext.Provider value={value}>{children}</GalleryContext.Provider>;\n};\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport type ButtonVariant = \"filled\" | \"outlined\" | \"text\" | \"link\" | \"tonal\";\nexport type ButtonColor =\n | \"primary\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\"\n | \"white\"\n | \"transparent\"\n | \"black\"\n | \"orange\"\n | \"green\"\n | \"blue\";\nexport type ButtonSize = \"26\" | \"30\" | \"32\" | \"34\" | \"36\" | \"40\";\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n color?: ButtonColor;\n size?: ButtonSize;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n iconOnly?: boolean;\n children: React.ReactNode;\n}\n\nconst sizeClasses: Record<ButtonSize, string> = {\n \"26\": \"h-[26px] px-[10px] text-[12px] rounded-[4px] gap-1\",\n \"30\": \"h-[30px] px-[12px] text-[13px] rounded-[4px] gap-1.5\",\n \"32\": \"h-[32px] px-[14px] text-[13px] rounded-[4px] gap-1.5\",\n \"34\": \"h-[34px] px-[16px] text-[13px] rounded-[4px] gap-2\",\n \"36\": \"h-[36px] px-[18px] text-[13px] rounded-[4px] gap-2\",\n \"40\": \"h-[40px] px-[20px] text-[16px] rounded-[4px] gap-2\",\n};\n\ntype ColorDef = { bg: string; hover: string; text: string; border: string; borderHover?: string; lightBg: string };\n\nconst colorMap: Record<ButtonColor, ColorDef> = {\n primary: { bg: \"bg-[#3D3D3D]\", hover: \"hover:bg-[#646464]\", text: \"text-[#3D3D3D]\", border: \"border-[#3D3D3D]\", lightBg: \"bg-[#3D3D3D]/10\" },\n success: { bg: \"bg-[#3d6b42]\", hover: \"hover:bg-[#2e5939]\", text: \"text-[#3d6b42]\", border: \"border-[#3d6b42]\", lightBg: \"bg-[#3d6b42]/10\" },\n warning: { bg: \"bg-[#f59e0b]\", hover: \"hover:bg-[#d97706]\", text: \"text-[#f59e0b]\", border: \"border-[#f59e0b]\", lightBg: \"bg-[#f59e0b]/10\" },\n error: { bg: \"bg-[#ef4444]\", hover: \"hover:bg-[#c91b20]\", text: \"text-[#ef4444]\", border: \"border-[#ef4444]\", lightBg: \"bg-[#ef4444]/10\" },\n info: { bg: \"bg-[#00b8d4]\", hover: \"hover:bg-[#009db3]\", text: \"text-[#00b8d4]\", border: \"border-[#00b8d4]\", lightBg: \"bg-[#00b8d4]/10\" },\n white: { bg: \"bg-white\", hover: \"hover:bg-gray-50\", text: \"text-black\", border: \"border-[#cacaca]\", borderHover: \"hover:border-[#777]\", lightBg: \"bg-white\" },\n transparent: { bg: \"bg-transparent\", hover: \"hover:bg-black/5\", text: \"text-black\", border: \"border-[#cacaca]\", lightBg: \"bg-transparent\" },\n black: { bg: \"bg-[#3d3d3d]\", hover: \"hover:bg-[#646464]\", text: \"text-black\", border: \"border-[#3d3d3d]\", lightBg: \"bg-[#ececec]\" },\n orange: { bg: \"bg-[#FF5300]\", hover: \"hover:bg-[#e04a00]\", text: \"text-[#FF5300]\", border: \"border-[#FF5300]\", borderHover: \"hover:border-[#e04a00]\", lightBg: \"bg-[#FFEAE0]\" },\n green: { bg: \"bg-[#086600]\", hover: \"hover:bg-[#28A745]\", text: \"text-[#086600]\", border: \"border-[#086600]\", lightBg: \"bg-[#E6F5E6]\" },\n blue: { bg: \"bg-[#005694]\", hover: \"hover:bg-[#00375E]\", text: \"text-[#005694]\", border: \"border-[#005694]\", lightBg: \"bg-[#E0EFF8]\" },\n};\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ variant = \"filled\", color = \"primary\", size = \"40\", leftIcon, rightIcon, iconOnly = false, children, className, disabled, ...props }, ref) => {\n const c = colorMap[color];\n\n return (\n <button\n ref={ref}\n disabled={disabled}\n className={cn(\n \"inline-flex cursor-pointer items-center justify-center font-semibold transition-all duration-200 select-none\",\n iconOnly ? `h-[${size === \"40\" ? \"40\" : size}px] w-[${size === \"40\" ? \"40\" : size}px]` : sizeClasses[size],\n variant === \"filled\" && [c.bg, c.hover, \"text-white\", \"border border-transparent\"],\n variant === \"outlined\" && [color === \"white\" ? \"bg-white\" : \"bg-transparent\", \"border\", c.border, c.borderHover, c.text],\n variant === \"text\" && [\"bg-transparent\", \"border border-transparent\", c.text, \"hover:bg-black/5\"],\n variant === \"tonal\" && [c.lightBg, c.text, \"border border-transparent\"],\n disabled && \"cursor-not-allowed opacity-50\",\n className,\n )}\n {...props}\n >\n {leftIcon && <span className=\"flex shrink-0\">{leftIcon}</span>}\n <>{children}</>\n {rightIcon && <span className=\"flex shrink-0\">{rightIcon}</span>}\n </button>\n );\n },\n);\n\nButton.displayName = \"Button\";\nexport default Button;\n","import React from \"react\";\r\nimport { cn } from \"../../utils/cn\";\r\nimport Button from \"../../ui/Button\";\r\n\r\ntype Props = {\r\n open: boolean;\r\n title?: string;\r\n description?: React.ReactNode;\r\n confirmLabel?: string;\r\n cancelLabel?: string;\r\n onConfirm: () => void;\r\n onClose: () => void;\r\n className?: string;\r\n};\r\n\r\nexport default function ChatConfirmModal({\r\n open,\r\n title = \"DELETE CHAT\",\r\n confirmLabel = \"Yes, Delete\",\r\n cancelLabel = \"Not Now\",\r\n onConfirm,\r\n onClose,\r\n className,\r\n}: Props) {\r\n React.useEffect(() => {\r\n if (!open) return;\r\n const onKey = (e: KeyboardEvent) => e.key === \"Escape\" && onClose();\r\n window.addEventListener(\"keydown\", onKey);\r\n return () => window.removeEventListener(\"keydown\", onKey);\r\n }, [open, onClose]);\r\n\r\n if (!open) return null;\r\n\r\n return (\r\n <div\r\n className=\"absolute inset-0 z-70 flex items-center justify-center overflow-hidden\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onClose();\r\n }}\r\n >\r\n <div className=\"absolute inset-0 bg-black/30\" />\r\n\r\n <div\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n className={cn(\r\n \"relative z-71 w-[420px] overflow-hidden rounded-md bg-white shadow-[0_12px_30px_rgba(0,0,0,0.18)]\",\r\n className,\r\n )}\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n <div className=\"flex h-[44px] items-center bg-[#ff5200] px-4 text-xl font-semibold uppercase tracking-wide text-white\">\r\n {title}\r\n </div>\r\n\r\n <div className=\"p-4\">\r\n <h3 className=\"mb-2 text-[14px] font-semibold text-black\">\r\n Are you Sure you want to delete the chat\r\n </h3>\r\n\r\n <div className=\"mt-4 mb-[24px] flex items-start gap-1.5 text-xs font-normal text-[#636363]\">\r\n <span>\r\n <svg className=\"h-4 w-4\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\r\n <path d=\"M8 4.5v4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <circle cx=\"8\" cy=\"11\" r=\"0.75\" fill=\"currentColor\" />\r\n </svg>\r\n </span>\r\n <p>\r\n The chat history is permanently removed from your view; you won't be able to see\r\n previous messages anymore. Other person's copy stays, the other user may still have\r\n their copy of the conversation.\r\n </p>\r\n </div>\r\n\r\n <div className=\"flex w-full items-center gap-4 border-t border-[#e1e1e1] pt-[24px]\">\r\n <Button\r\n variant=\"outlined\"\r\n color=\"white\"\r\n size=\"34\"\r\n className=\"flex-1\"\r\n onClick={onClose}\r\n >\r\n {cancelLabel}\r\n </Button>\r\n <Button\r\n variant=\"filled\"\r\n color=\"orange\"\r\n size=\"34\"\r\n className=\"flex-1\"\r\n onClick={() => {\r\n onConfirm();\r\n onClose();\r\n }}\r\n >\r\n {confirmLabel}\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","// ─────────────────────────────────────────────────────────────────────────────\n// Banbox Chat Icons — all SVGs inlined so @banbox/chat has zero icon dependency\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype IconProps = { className?: string };\n\nexport const ChatXIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"25\" height=\"24\" viewBox=\"0 0 25 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M18.5 6L6.5 18\" stroke=\"CurrentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M6.5 6L18.5 18\" stroke=\"CurrentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const ChatSearchIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"24\" height=\"24\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\n <path d=\"m21 21-4.34-4.34\" />\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n </svg>\n);\n\nexport const MessageIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <rect x=\"2.5\" y=\"4.16666\" width=\"15\" height=\"11.6667\" rx=\"2\" stroke=\"CurrentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M2.5 5.83334L10 10.8333L17.5 5.83334\" stroke=\"CurrentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const BlueBadgeIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M12.225 8.47394C12.1812 8.6256 12.085 8.7481 11.9479 8.82685L11.0087 9.35185V10.4252C11.0087 10.746 10.7462 11.0085 10.4254 11.0085H9.34913L8.82705 11.9477C8.7483 12.0848 8.6258 12.181 8.47413 12.2248C8.32538 12.2656 8.16788 12.2481 8.0308 12.1723L6.9983 11.5948L5.9658 12.1723C5.87538 12.2219 5.77913 12.2452 5.67997 12.2452C5.62747 12.2452 5.57497 12.2394 5.52247 12.2248C5.3708 12.181 5.2483 12.0848 5.16955 11.9477L4.64747 11.0085H3.57122C3.25038 11.0085 2.98788 10.746 2.98788 10.4252V9.35185L2.04872 8.82685C1.91163 8.7481 1.81538 8.6256 1.77163 8.47394C1.7308 8.32519 1.7483 8.16769 1.82413 8.0306L2.40163 6.9981L1.82413 5.9656C1.66663 5.68269 1.76872 5.32685 2.04872 5.16935L2.98788 4.64435V3.57102C2.98788 3.25019 3.25038 2.98769 3.57122 2.98769H4.64747L5.16955 2.04852C5.2483 1.91144 5.3708 1.81519 5.52247 1.77144C5.67122 1.7306 5.82872 1.7481 5.9658 1.82394L6.9983 2.40144L8.0308 1.82394C8.16788 1.7481 8.32538 1.7306 8.47413 1.77144C8.6258 1.81519 8.7483 1.91144 8.82705 2.04852L9.34913 2.98769H10.4254C10.7462 2.98769 11.0087 3.25019 11.0087 3.57102V4.64435L11.9479 5.16935C12.2279 5.32685 12.33 5.68269 12.1725 5.9656L11.595 6.9981L12.1725 8.0306C12.2483 8.16769 12.2658 8.32519 12.225 8.47394Z\" fill=\"url(#badge_grad)\" />\n <path d=\"M10.2578 3.65234C9.46271 4.36337 8.79456 5.33232 8.29345 6.39886C7.81906 7.41661 7.49167 8.53194 7.35135 9.62637H5.50726V9.61243L4.70547 7.41661L4.39144 6.55919L4.25781 6.18974L5.03955 6.16882C5.24668 6.16882 5.43376 6.2943 5.48053 6.48251L5.94155 7.45146L6.31572 8.2322L6.41594 8.44132C6.5028 8.25311 6.58966 8.07187 6.6832 7.89063C7.18432 6.88682 7.7322 5.98061 8.38031 5.21382C8.75447 4.77465 9.16204 4.37731 9.61639 4.03574C9.79679 3.90329 9.97719 3.77782 10.171 3.65931H10.2578V3.65234Z\" fill=\"white\" />\n <defs>\n <linearGradient id=\"badge_grad\" x1=\"6.9983\" y1=\"12.2464\" x2=\"6.9983\" y2=\"1.75015\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#0064E1\" />\n <stop offset=\"0.994\" stopColor=\"#26B7FF\" />\n </linearGradient>\n </defs>\n </svg>\n);\n\nexport const ArrowSendAngleIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M21.2929 1.29289C21.6834 0.902369 22.3164 0.902369 22.707 1.29289C23.0975 1.68342 23.0975 2.31643 22.707 2.70696L11.707 13.707C11.3164 14.0975 10.6834 14.0975 10.2929 13.707C9.90237 13.3164 9.90237 12.6834 10.2929 12.2929L21.2929 1.29289Z\" fill=\"url(#send_angle_g1)\" />\n <path d=\"M21.6698 1.05594C22.0323 0.929242 22.4354 1.02171 22.7069 1.29325C22.9784 1.56479 23.0709 1.96787 22.9442 2.33036L15.9442 22.3304C15.8088 22.7173 15.4504 22.9825 15.0409 22.9993C14.6312 23.016 14.2523 22.7812 14.0858 22.4065L10.242 13.7581L1.59361 9.91434C1.21893 9.74782 0.984123 9.36894 1.00084 8.95926C1.01765 8.54969 1.28286 8.19137 1.66978 8.05594L21.6698 1.05594ZM4.71177 9.11063L11.4061 12.0862L11.4891 12.1282C11.6764 12.2333 11.826 12.3963 11.9139 12.594L14.8885 19.2874L20.369 3.63016L4.71177 9.11063Z\" fill=\"url(#send_angle_g2)\" />\n <defs>\n <linearGradient id=\"send_angle_g1\" x1=\"16.4999\" y1=\"1\" x2=\"16.4999\" y2=\"13.9998\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#33C9D4\" />\n <stop offset=\"0.65\" stopColor=\"#2753FB\" />\n </linearGradient>\n <linearGradient id=\"send_angle_g2\" x1=\"12.0001\" y1=\"1\" x2=\"12.0001\" y2=\"23.0001\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#33C9D4\" />\n <stop offset=\"0.65\" stopColor=\"#2753FB\" />\n </linearGradient>\n </defs>\n </svg>\n);\n\nexport const ArrowSendIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <g clipPath=\"url(#send_clip)\">\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M0.061819 2.80424C-0.034006 2.44295 -0.018158 2.06324 0.107481 1.71021C0.23312 1.35718 0.463272 1.04566 0.770608 0.812635C1.07794 0.57961 1.44955 0.434872 1.84131 0.395609C2.23306 0.356346 2.6285 0.424206 2.98068 0.591132L22.8602 9.98918C23.2025 10.1507 23.4904 10.3991 23.6916 10.7067C23.8929 11.0143 23.9995 11.3689 23.9995 11.7305C23.9995 12.0922 23.8929 12.4468 23.6916 12.7543C23.4904 13.0619 23.2025 13.3104 22.8602 13.4719L2.98068 22.8699C2.6285 23.0369 2.23306 23.1047 1.84131 23.0655C1.44955 23.0262 1.07794 22.8815 0.770608 22.6484C0.463272 22.4154 0.23312 22.1039 0.107481 21.7509C-0.018158 21.3978 -0.034006 21.0181 0.061819 20.6568L2.14353 12.7859L14.232 11.7305L2.14353 10.6752L0.061819 2.80424Z\" fill=\"CurrentColor\" />\n </g>\n <defs>\n <clipPath id=\"send_clip\"><rect width=\"24\" height=\"24\" fill=\"white\" /></clipPath>\n </defs>\n </svg>\n);\n\nexport const RecordMicIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M11.5298 20.0197V23.0399H6.47538C6.34807 23.0399 6.22598 23.0904 6.13596 23.1804C6.04595 23.2705 5.99537 23.3926 5.99537 23.5199C5.99537 23.6472 6.04595 23.7693 6.13596 23.8593C6.22598 23.9493 6.34807 23.9999 6.47538 23.9999H17.5443C17.6716 23.9999 17.7937 23.9493 17.8837 23.8593C17.9737 23.7693 18.0243 23.6472 18.0243 23.5199C18.0243 23.3926 17.9737 23.2705 17.8837 23.1804C17.7937 23.0904 17.6716 23.0399 17.5443 23.0399H12.4898V20.0197C16.6827 19.7696 20.0196 16.2891 20.0196 12.0343V10.23C20.0196 10.1027 19.9691 9.98061 19.879 9.89059C19.789 9.80057 19.6669 9.75 19.5396 9.75C19.4123 9.75 19.2902 9.80057 19.2002 9.89059C19.1102 9.98061 19.0596 10.1027 19.0596 10.23V12.0348C19.0596 15.9214 15.8974 19.0841 12.0098 19.0841C8.12227 19.0841 4.96001 15.9214 4.96001 12.0343V10.23C4.96001 10.1027 4.90944 9.98061 4.81942 9.89059C4.7294 9.80057 4.60731 9.75 4.48 9.75C4.3527 9.75 4.23061 9.80057 4.14059 9.89059C4.05057 9.98061 4 10.1027 4 10.23V12.0348C4 16.2891 7.33698 19.7696 11.5298 20.0197Z\" fill=\"CurrentColor\" />\n <path d=\"M12.0067 16.7132C14.5867 16.7132 16.6853 14.6147 16.6853 12.0346V4.67859C16.6853 2.09858 14.5867 0 12.0067 0C9.4267 0 7.32812 2.09858 7.32812 4.67859V12.0346C7.32812 14.6147 9.4267 16.7132 12.0067 16.7132ZM8.28813 4.67859C8.28813 2.62802 9.95662 0.960007 12.0067 0.960007C14.0568 0.960007 15.7253 2.62802 15.7253 4.67859V12.0346C15.7253 14.0852 14.0568 15.7532 12.0067 15.7532C9.95662 15.7532 8.28813 14.0852 8.28813 12.0346V4.67859Z\" fill=\"CurrentColor\" />\n </svg>\n);\n\nexport const AttachIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <g clipPath=\"url(#attach_clip)\">\n <path d=\"M4.17813 15.1695C3.35175 15.1697 2.54387 14.9248 1.85671 14.4658C1.16955 14.0068 0.634002 13.3542 0.317821 12.5907C0.00164127 11.8272 -0.0809573 10.9871 0.0804774 10.1766C0.241912 9.36615 0.640124 8.6218 1.22473 8.03772L7.38945 1.87227C7.49167 1.77005 7.63031 1.71262 7.77488 1.71262C7.91944 1.71262 8.05809 1.77005 8.16031 1.87227C8.26253 1.9745 8.31996 2.11314 8.31996 2.25771C8.31996 2.40227 8.26253 2.54092 8.16031 2.64314L1.99486 8.80786C1.41359 9.38914 1.08503 10.1729 1.08203 10.9913C1.07903 11.8097 1.40196 12.5959 1.97897 13.1814C2.55598 13.7668 3.33986 14.1017 4.15823 14.1075C4.97659 14.1132 5.76532 13.7893 6.35061 13.212L14.325 5.20856C14.6899 4.83175 14.8921 4.3266 14.8879 3.80208C14.8837 3.27756 14.6734 2.77572 14.3025 2.40482C13.9316 2.03392 13.4298 1.82368 12.9053 1.81947C12.3807 1.81526 11.8756 2.01741 11.4988 2.38231L5.07759 8.80786C4.90208 8.98338 4.80411 9.22076 4.80411 9.46823C4.80411 9.7157 4.90208 9.95308 5.07759 10.1286C5.25311 10.3041 5.49049 10.4021 5.73796 10.4021C5.98543 10.4021 6.22281 10.3041 6.39833 10.1286L10.4707 5.98306C10.521 5.93099 10.5811 5.88945 10.6475 5.86086C10.714 5.83227 10.7855 5.81721 10.8579 5.81655C10.9302 5.81588 11.002 5.82964 11.0689 5.857C11.1359 5.88437 11.1968 5.9248 11.248 5.97594C11.2992 6.02708 11.3396 6.0879 11.3671 6.15485C11.3945 6.22181 11.4083 6.29355 11.4077 6.36591C11.4071 6.43826 11.3921 6.50977 11.3636 6.57626C11.3351 6.64276 11.2936 6.7029 11.2416 6.75319L7.13225 10.8633C6.94673 11.0488 6.72646 11.196 6.48404 11.2965C6.24162 11.3969 5.98179 11.4487 5.71938 11.4487C5.45697 11.4487 5.19713 11.3971 4.95468 11.2967C4.71223 11.1963 4.49194 11.0491 4.30636 10.8636C4.12079 10.6781 3.97357 10.4578 3.87312 10.2154C3.77267 9.97299 3.72095 9.71315 3.72092 9.45074C3.72085 8.92079 3.93131 8.41251 4.306 8.03772L10.7286 1.61944C11.3077 1.0403 12.0931 0.714912 12.912 0.714844C13.731 0.714776 14.5164 1.04004 15.0955 1.61907C15.6747 2.19811 16.0001 2.98349 16.0001 3.80244C16.0002 4.6214 15.6749 5.40683 15.0959 5.98597L7.13298 13.946C6.74578 14.3351 6.28527 14.6436 5.77807 14.8536C5.27088 15.0636 4.72708 15.171 4.17813 15.1695Z\" fill=\"CurrentColor\" />\n </g>\n <defs>\n <clipPath id=\"attach_clip\"><rect width=\"16\" height=\"16\" fill=\"white\" /></clipPath>\n </defs>\n </svg>\n);\n\nexport const SmileIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M8.0026 14.6673C11.6845 14.6673 14.6693 11.6825 14.6693 8.00065C14.6693 4.31875 11.6845 1.33398 8.0026 1.33398C4.32071 1.33398 1.33594 4.31875 1.33594 8.00065C1.33594 11.6825 4.32071 14.6673 8.0026 14.6673Z\" stroke=\"black\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.33594 9.33398C5.33594 9.33398 6.33594 10.6673 8.0026 10.6673C9.66927 10.6673 10.6693 9.33398 10.6693 9.33398\" stroke=\"black\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M6 6H6.00667\" stroke=\"black\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10 6H10.0067\" stroke=\"black\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const ProfileCardIcon = ({ className }: IconProps) => (\n <svg className={className} width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2\" y=\"2.66406\" width=\"12\" height=\"10.6667\" rx=\"3\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <circle cx=\"5.99935\" cy=\"6.66927\" r=\"1.33333\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10 5.33333H11.3333\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10 7.9974H11.3333\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M4.66602 10.6693H11.3327\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const NewLanguageIcon = ({ className }: IconProps) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M9.99414 10.548C9.99414 10.5385 9.99731 10.521 10.0037 10.4955L10.8914 7.58423C10.9167 7.50464 10.9749 7.44336 11.0656 7.40039C11.1562 7.35742 11.2604 7.33594 11.3782 7.33594C11.4958 7.33594 11.6001 7.35742 11.6908 7.40039C11.7815 7.44336 11.8395 7.50464 11.865 7.58423L12.7574 10.4955C12.7638 10.521 12.7671 10.5385 12.7671 10.548C12.7671 10.6307 12.7153 10.7024 12.6119 10.7628C12.5085 10.8232 12.4011 10.8534 12.2898 10.8534C12.153 10.8534 12.0718 10.8074 12.0464 10.7151L11.8842 10.1185H10.8771L10.7148 10.7151C10.6893 10.8074 10.6082 10.8534 10.4714 10.8534C10.36 10.8534 10.2526 10.8232 10.1492 10.7628C10.0458 10.7024 9.99414 10.6307 9.99414 10.548ZM11.0298 9.54578H11.7266L11.3782 8.26672L11.0298 9.54578Z\" fill=\"currentColor\" />\n <path d=\"M13.7277 5.55713H10.5369V3.99109C10.5369 2.73816 9.51758 1.71875 8.26453 1.71875H2.27234C1.01941 1.71875 0 2.73816 0 3.99109V6.65881C0 7.89465 0.991577 8.9032 2.22107 8.93067C2.21289 9.18982 2.18396 9.47852 2.13452 9.79297C2.10107 10.0052 2.18005 10.2139 2.34558 10.3511C2.45667 10.4431 2.59204 10.491 2.73035 10.491C2.79919 10.491 2.86877 10.479 2.93652 10.4548C3.38696 10.2938 4.17053 9.8866 4.57458 8.93115H6.82654V10.4973C6.82654 11.7502 7.84595 12.7697 9.09888 12.7697H11.4254C11.8296 13.7251 12.613 14.1322 13.0636 14.2933C13.1312 14.3175 13.2008 14.3293 13.2697 14.3293C13.408 14.3293 13.5433 14.2815 13.6544 14.1895C13.8201 14.0524 13.8989 13.8436 13.8655 13.6313C13.816 13.317 13.7871 13.0282 13.7789 12.769C15.0084 12.7417 16 11.7332 16 10.4973V7.82959C16 6.57654 14.9806 5.55713 13.7277 5.55713ZM6.48767 4.29578C6.66028 4.29578 6.80017 4.15588 6.80017 3.98328C6.80017 3.81067 6.66028 3.67078 6.48767 3.67078H5.29553V3.20312C5.29553 3.03052 5.15564 2.89062 4.98303 2.89062C4.81055 2.89062 4.67053 3.03052 4.67053 3.20312V3.67078H3.47852C3.30591 3.67078 3.16602 3.81067 3.16602 3.98328C3.16602 4.15588 3.30591 4.29578 3.47852 4.29578H6.48767ZM15.375 10.4972C15.375 11.4056 14.636 12.1447 13.7277 12.1447H13.467C13.2991 12.1447 13.1611 12.2775 13.1548 12.4454C13.1412 12.8063 13.1708 13.226 13.2427 13.6934C12.7877 13.5238 12.2042 13.1554 11.9375 12.358C11.8949 12.2306 11.7755 12.1447 11.6412 12.1447H9.09888C8.19055 12.1447 7.45154 11.4056 7.45154 10.4972V7.82947C7.45154 7.54932 7.52307 7.27271 7.65833 7.02966C7.74231 6.87878 7.68811 6.6886 7.53723 6.60461C7.38647 6.52063 7.19617 6.57495 7.11218 6.72571C6.92529 7.06152 6.82654 7.44312 6.82654 7.82947V8.30615H4.35876C4.22437 8.30615 4.10498 8.39209 4.06238 8.51953C3.79578 9.3169 3.21228 9.68543 2.75732 9.85486C2.8291 9.38745 2.85864 8.96777 2.84521 8.60693C2.83887 8.43897 2.70093 8.30615 2.53284 8.30615H2.27234C1.36401 8.30615 0.625 7.56714 0.625 6.65881V3.99109C0.625 3.08276 1.36401 2.34375 2.27234 2.34375H8.26453C9.17285 2.34375 9.91187 3.08276 9.91187 3.99109V5.55725H9.46875C9.29614 5.55725 9.15625 5.69714 9.15625 5.86975C9.15625 6.04236 9.29614 6.18225 9.46875 6.18225H13.7277C14.636 6.18225 15.375 6.92127 15.375 7.82959V10.4972Z\" fill=\"currentColor\" />\n </svg>\n);\n\nexport const ChatInfoIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <circle cx=\"9\" cy=\"9\" r=\"6.75\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M9.00016 6H9.00766\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M8.25 9H9V12H9.75\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const ArrowBackUpIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M6.13128 10.3687C6.47299 10.7104 7.02701 10.7104 7.36872 10.3687C7.71043 10.027 7.71043 9.47299 7.36872 9.13128L6.75 9.75L6.13128 10.3687ZM3.75 6.75L3.13128 6.13128C2.78957 6.47299 2.78957 7.02701 3.13128 7.36872L3.75 6.75ZM7.36872 4.36872C7.71043 4.02701 7.71043 3.47299 7.36872 3.13128C7.02701 2.78957 6.47299 2.78957 6.13128 3.13128L6.75 3.75L7.36872 4.36872ZM3.75 5.875C3.26675 5.875 2.875 6.26675 2.875 6.75C2.875 7.23325 3.26675 7.625 3.75 7.625V6.75V5.875ZM11.25 11.875C10.7668 11.875 10.375 12.2668 10.375 12.75C10.375 13.2332 10.7668 13.625 11.25 13.625V12.75V11.875ZM6.75 9.75L7.36872 9.13128L4.36872 6.13128L3.75 6.75L3.13128 7.36872L6.13128 10.3687L6.75 9.75ZM3.75 6.75L4.36872 7.36872L7.36872 4.36872L6.75 3.75L6.13128 3.13128L3.13128 6.13128L3.75 6.75ZM3.75 6.75V7.625H12V6.75V5.875H3.75V6.75ZM12 6.75V7.625C13.1736 7.625 14.125 8.5764 14.125 9.75H15H15.875C15.875 7.6099 14.1401 5.875 12 5.875V6.75ZM15 9.75H14.125C14.125 10.9236 13.1736 11.875 12 11.875V12.75V13.625C14.1401 13.625 15.875 11.8901 15.875 9.75H15ZM12 12.75V11.875H11.25V12.75V13.625H12V12.75Z\" fill=\"CurrentColor\" />\n </svg>\n);\n\nexport const FileIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M14 3V7C14 7.55228 14.4477 8 15 8H19\" stroke=\"CurrentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M17 21H7C5.89543 21 5 20.1046 5 19V5C5 3.89543 5.89543 3 7 3H14L19 8V19C19 20.1046 18.1046 21 17 21Z\" stroke=\"CurrentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M9 9H10\" stroke=\"CurrentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M9 13H15\" stroke=\"CurrentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M9 17H15\" stroke=\"CurrentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const MessageReplayIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M6.70469 2.33346C6.87969 2.3918 6.93802 2.5668 6.93802 2.80013C6.93802 3.50013 6.93802 4.25846 6.93802 4.95846V5.07513C7.17135 5.07513 7.40469 5.07513 7.63802 5.07513C8.27969 5.07513 8.97969 5.25013 9.62135 5.48346C10.788 5.95013 11.488 6.7668 11.7797 7.93346C12.013 8.6918 12.013 9.45013 12.0714 10.2668C12.0714 10.4418 12.0714 10.6168 12.0714 10.7335C12.0714 10.9085 11.9547 11.0835 11.7797 11.0835C11.6047 11.0835 11.488 11.0835 11.3714 10.8501C11.2547 10.6168 11.138 10.3835 10.963 10.1501C10.5547 9.45013 9.97135 8.98346 9.27135 8.75013C8.51302 8.45846 7.75469 8.40013 6.93802 8.40013V8.5168C6.93802 9.27513 6.93802 9.97513 6.93802 10.7335C6.93802 10.9085 6.93802 11.0251 6.70469 11.0835C6.52969 11.1418 6.41302 11.0835 6.29635 10.9668C4.83802 9.62513 3.37969 8.28346 1.97969 6.9418C1.92135 6.9418 1.86302 6.82513 1.80469 6.70846V6.53346C1.80469 6.47513 1.92135 6.4168 1.97969 6.35846C3.43802 5.0168 4.83802 3.73346 6.29635 2.3918C6.35469 2.33346 6.47135 2.27513 6.52969 2.2168H6.70469V2.33346Z\" fill=\"CurrentColor\" />\n </svg>\n);\n\nexport const RightArrow = ({ className }: IconProps) => (\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M7.5 18H28.5\" stroke=\"CurrentColor\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M19.5 27L28.5 18\" stroke=\"CurrentColor\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M19.5 9L28.5 18\" stroke=\"CurrentColor\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const FileDownloadIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M11.6641 2.5V5.83333C11.6641 6.29357 12.0372 6.66667 12.4974 6.66667H15.8307\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M14.1641 17.5H5.83073C4.91025 17.5 4.16406 16.7538 4.16406 15.8333V4.16667C4.16406 3.24619 4.91025 2.5 5.83073 2.5H11.6641L15.8307 6.66667V15.8333C15.8307 16.7538 15.0845 17.5 14.1641 17.5Z\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10.0026 9.16602V14.166\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M7.5 11.666L10 14.166L12.5 11.666\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const BusinessInfoIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M2 13.9993H14\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M3.33594 14V4.66667L8.66927 2V14\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12.6641 13.9993V7.33268L8.66406 4.66602\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.9974 5.99992V6.00659\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.9974 7.99992V8.00659\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.9974 9.99992V10.0066\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.9974 11.9999V12.0066\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const ChatMailIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <rect x=\"1.75\" y=\"2.91797\" width=\"10.5\" height=\"8.16667\" rx=\"2\" stroke=\"black\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M1.75 4.08203L7 7.58203L12.25 4.08203\" stroke=\"black\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const ChatPhoneCallIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M3.33333 2.66602H6L7.33333 5.99935L5.66667 6.99935C6.38064 8.44704 7.55231 9.61871 9 10.3327L10 8.66602L13.3333 9.99935V12.666C13.3333 13.4024 12.7364 13.9993 12 13.9993C6.61843 13.6723 2.32704 9.38092 2 3.99935C2 3.26297 2.59695 2.66602 3.33333 2.66602\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const BadgeHomeIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M2.91667 7H1.75L7 1.75L12.25 7H11.0833\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M2.91406 7V11.0833C2.91406 11.7277 3.4364 12.25 4.08073 12.25H9.91406C10.5584 12.25 11.0807 11.7277 11.0807 11.0833V7\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <rect x=\"5.83594\" y=\"7\" width=\"2.33333\" height=\"2.33333\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const BadgeOfficeIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M1.75 12.2507H12.25\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M2.91406 12.25V4.08333L7.58073 1.75V12.25\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M11.0859 12.2507V6.41732L7.58594 4.08398\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.2526 5.24969V5.25552\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.2526 6.99969V7.00552\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.2526 8.74969V8.75552\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.2526 10.4997V10.5055\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const MapPinIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M11.9974 4.00188V4.00854\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12.0028 8.66599L9.66942 5.33266C9.04883 4.21101 9.31413 2.8065 10.3011 1.9885C11.2881 1.1705 12.7174 1.1705 13.7044 1.9885C14.6914 2.8065 14.9567 4.21101 14.3361 5.33266L12.0028 8.66599\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M7 3.16797L6 2.66797L2 4.66797V13.3346L6 11.3346L10 13.3346L14 11.3346V10.0013\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.9974 2.66797V11.3346\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M9.9974 10V13.3333\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const MenuIcon = ({ className }: IconProps) => (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <circle cx=\"12\" cy=\"5\" r=\"2\" />\n <circle cx=\"12\" cy=\"12\" r=\"2\" />\n <circle cx=\"12\" cy=\"19\" r=\"2\" />\n </svg>\n);\n\nexport const PinIcon = ({ className }: IconProps) => (\n <svg className={className} width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12.5007 3.75L9.16732 7.08333L5.83398 8.33333L4.58398 9.58333L10.4173 15.4167L11.6673 14.1667L12.9173 10.8333L16.2507 7.5\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M7.5 12.5L3.75 16.25\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12.084 3.33594L16.6673 7.91927\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const PinOffIcon = ({ className }: IconProps) => (\n <svg className={className} width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12.5007 3.75L9.16732 7.08333L5.83398 8.33333L4.58398 9.58333L10.4173 15.4167L11.6673 14.1667L12.9173 10.8333L16.2507 7.5\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M7.5 12.5L3.75 16.25\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12.084 3.33594L16.6673 7.91927\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M3 3L17 17\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const ChatTrashIcon = ({ className }: IconProps) => (\n <svg className={className} width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.33398 5.83073H16.6673\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M8.33268 9.16406V14.1641\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M11.6667 9.16406V14.1641\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M4.16602 5.83594L4.99935 15.8359C4.99935 16.7564 5.74554 17.5026 6.66602 17.5026H13.3327C14.2532 17.5026 14.9993 16.7564 14.9993 15.8359L15.8327 5.83594\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M7.5 5.83333V3.33333C7.5 2.8731 7.8731 2.5 8.33333 2.5H11.6667C12.1269 2.5 12.5 2.8731 12.5 3.33333V5.83333\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n","import React, { useState, useRef, useEffect } from \"react\";\nimport { cn } from \"../utils/cn\";\n\ntype Option = { label: string; value: string };\n\ntype Props = {\n options: Option[];\n value?: string;\n onChange?: (value: string) => void;\n placeholder?: string;\n size?: number;\n className?: string;\n disabled?: boolean;\n};\n\nconst Select: React.FC<Props> = ({ options, value, onChange, placeholder = \"Select...\", size = 36, className, disabled }) => {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n const selected = options.find((o) => o.value === value);\n\n useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener(\"mousedown\", onDoc);\n return () => document.removeEventListener(\"mousedown\", onDoc);\n }, [open]);\n\n return (\n <div ref={ref} className={cn(\"relative\", className)}>\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => setOpen((v) => !v)}\n className={cn(\n \"flex w-full items-center justify-between rounded-[4px] border border-[#cacaca] bg-white px-3 text-[13px] text-left\",\n disabled && \"cursor-not-allowed opacity-50\",\n )}\n style={{ height: size }}\n >\n <span className={cn(selected ? \"text-black\" : \"text-[#9C9C9C]\")}>\n {selected ? selected.label : placeholder}\n </span>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={cn(\"shrink-0 transition-transform\", open && \"rotate-180\")}>\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n </button>\n {open && (\n <div className=\"absolute left-0 right-0 top-full z-50 mt-1 max-h-[200px] overflow-y-auto rounded-[4px] border border-[#e1e1e1] bg-white shadow-[0_4px_16px_rgba(0,0,0,0.08)]\">\n {options.map((opt) => (\n <button\n key={opt.value}\n type=\"button\"\n className={cn(\n \"flex w-full items-center px-3 py-2 text-[13px] text-left hover:bg-black/5\",\n opt.value === value && \"bg-black/5 font-medium\",\n )}\n onClick={() => {\n onChange?.(opt.value);\n setOpen(false);\n }}\n >\n {opt.label}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n};\n\nexport default Select;\n","\"use client\";\r\n\r\nimport clsx from \"clsx\";\r\nimport React, { useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\n\r\nimport { ChatInfoIcon } from \"../../icons\";\r\nimport Button from \"../../ui/Button\";\r\nimport Select from \"../../ui/Select\";\r\n\r\n/* ───────── Types ───────── */\r\n\r\nexport type TranslateSettings = {\r\n incomingTarget?: string;\r\n autoIncoming: boolean;\r\n enableOutgoing: boolean;\r\n outgoingFrom: string;\r\n outgoingTo: string;\r\n};\r\n\r\ntype Props = {\r\n open: boolean;\r\n onClose: () => void;\r\n onSave: (settings: TranslateSettings) => void;\r\n initial?: Partial<TranslateSettings>;\r\n className?: string;\r\n /** Controls layout / placement */\r\n variant?: \"single\" | \"group\";\r\n};\r\n\r\n/* Language options */\r\nconst LANG_OPTIONS = [\r\n \"English\",\r\n \"Bangla\",\r\n \"Arabic\",\r\n \"Chinese\",\r\n \"French\",\r\n \"German\",\r\n \"Hindi\",\r\n \"Italian\",\r\n \"Japanese\",\r\n \"Korean\",\r\n \"Portuguese\",\r\n \"Russian\",\r\n \"Spanish\",\r\n \"Turkish\",\r\n \"Urdu\",\r\n].map((l) => ({ label: l, value: l }));\r\n\r\nconst ChatTranslateSettingsModal: React.FC<Props> = ({\r\n open,\r\n onClose,\r\n onSave,\r\n initial,\r\n className,\r\n variant = \"group\",\r\n}) => {\r\n const [incomingTarget, setIncomingTarget] = useState(\r\n initial?.incomingTarget ?? \"\",\r\n );\r\n\r\n // ESC to close\r\n React.useEffect(() => {\r\n if (!open) return;\r\n const onKey = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") onClose();\r\n };\r\n window.addEventListener(\"keydown\", onKey);\r\n return () => window.removeEventListener(\"keydown\", onKey);\r\n }, [open, onClose]);\r\n\r\n if (!open) return null;\r\n\r\n const isSingle = variant === \"single\";\r\n\r\n const handleSave = () => {\r\n onSave({\r\n incomingTarget,\r\n autoIncoming: true,\r\n enableOutgoing: false,\r\n outgoingFrom: \"English\",\r\n outgoingTo: \"Bangla\",\r\n });\r\n };\r\n\r\n const content = (\r\n <div\r\n className={clsx(\r\n isSingle\r\n ? \"fixed inset-0 z-9999 flex\"\r\n : \"absolute inset-0 z-50 flex items-center justify-center\",\r\n )}\r\n onClick={() => onClose()}\r\n >\r\n {/* Backdrop */}\r\n <div className={isSingle ? \"fixed inset-0 bg-black/30\" : \"absolute inset-0 bg-black/30\"} />\r\n\r\n <div\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby=\"translate-settings-title\"\r\n onClick={(e) => e.stopPropagation()}\r\n className={clsx(\r\n isSingle\r\n ? \"fixed bottom-6 right-6 w-[500px] max-w-[95vw]\"\r\n : \"relative w-[500px] max-w-[95vw]\",\r\n \"z-10000 overflow-visible rounded-md bg-white shadow-[0_12px_30px_rgba(0,0,0,0.18)]\",\r\n className,\r\n )}\r\n >\r\n {/* Header */}\r\n <div className=\"flex h-[44px] w-full items-center rounded-t-md bg-[#f8f8f8] px-6 py-[7px] shadow-[0px_2px_2px_rgba(47,47,47,0.08)]\">\r\n <h2\r\n id=\"translate-settings-title\"\r\n className=\"w-full text-[20px] font-semibold text-black\"\r\n >\r\n Translation Settings\r\n </h2>\r\n </div>\r\n\r\n {/* Body */}\r\n <div className=\"p-4\">\r\n <div className=\"grid gap-2\">\r\n <span className=\"text-[12px] font-medium text-black\">\r\n Translate message into\r\n </span>\r\n\r\n <Select\r\n options={LANG_OPTIONS}\r\n value={incomingTarget}\r\n onChange={setIncomingTarget}\r\n placeholder=\"Select Language\"\r\n size={36}\r\n />\r\n </div>\r\n\r\n <div className=\"mt-6 flex items-start gap-1.5 text-[#FF5300]\">\r\n <ChatInfoIcon className=\"h-4 w-4 shrink-0\" />\r\n <p className=\"text-xs leading-relaxed\">\r\n Automatically translate incoming messages. The language you save\r\n here will be used to display all incoming messages. You can choose\r\n from Spanish, Russian, French, Arabic, Portuguese, Turkish, Bangla,\r\n and among others.\r\n </p>\r\n </div>\r\n </div>\r\n\r\n {/* Footer */}\r\n <div className=\"flex h-[52px] items-center justify-end rounded-b-md bg-[#f8f8f8] px-6\">\r\n <div className=\"flex items-center gap-3\">\r\n <Button\r\n onClick={onClose}\r\n variant=\"outlined\"\r\n color=\"black\"\r\n size=\"34\"\r\n >\r\n Cancel\r\n </Button>\r\n <Button\r\n onClick={handleSave}\r\n variant=\"filled\"\r\n color=\"black\"\r\n size=\"34\"\r\n >\r\n Update\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n\r\n if (isSingle) {\r\n return createPortal(content, document.body);\r\n }\r\n\r\n return content;\r\n};\r\n\r\nexport default ChatTranslateSettingsModal;\r\n","\"use client\";\r\n\r\nimport type { FC } from \"react\";\r\nimport { FileIcon, ChatXIcon } from \"../../icons\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\n/* =======================\r\n Helpers\r\n======================= */\r\n\r\nconst extColor = (ext: string): string => {\r\n const e = ext.toLowerCase();\r\n\r\n if (e === \"pdf\") {\r\n return \"text-[#D93025]\";\r\n }\r\n if (e === \"ppt\" || e === \"pptx\") {\r\n return \"text-[#E69138]\";\r\n }\r\n if (e === \"doc\" || e === \"docx\") {\r\n return \"text-[#2B579A]\";\r\n }\r\n\r\n return \"text-[#6B7280]\";\r\n};\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\n\r\nexport type FilePreview = {\r\n name: string;\r\n sizeMB: number;\r\n ext: string;\r\n href: string;\r\n downloadName?: string;\r\n};\r\n\r\ntype FilePreviewChipProps = {\r\n name: string;\r\n sizeMB: number;\r\n ext: string;\r\n onRemove: () => void;\r\n};\r\n\r\ntype ImageThumbProps = {\r\n url: string;\r\n onRemove: () => void;\r\n};\r\n\r\ntype AttachmentPreviewStripProps = {\r\n imgPreviews: string[];\r\n filePreviews: FilePreview[];\r\n onRemoveImage: (index: number) => void;\r\n onRemoveFile: (index: number) => void;\r\n};\r\n\r\n/* =======================\r\n Sub Components\r\n======================= */\r\n\r\nexport const FilePreviewChip: FC<FilePreviewChipProps> = ({ name, sizeMB, ext, onRemove }) => {\r\n return (\r\n <div\r\n className={cn(\r\n \"mr-2 inline-flex h-[65px] max-w-[185px] items-center gap-3 whitespace-nowrap rounded-sm\",\r\n \"border border-[#e1e1e1] bg-white px-3 py-2\",\r\n )}\r\n >\r\n <div className=\"flex min-w-0 items-center gap-2\">\r\n <div className=\"min-w-0\">\r\n <div className=\"flex items-center gap-1\">\r\n <FileIcon className={cn(\"h-[18px] w-[18px]\", extColor(ext))} />\r\n <div className=\"truncate text-[13px] font-normal text-black\">{name}</div>\r\n </div>\r\n\r\n <div className=\"mt-2 flex items-center gap-2 text-xs text-[#636363]\">\r\n <span>{sizeMB.toFixed(1)} MB</span>\r\n <span className=\"h-3 w-px bg-[#e1e1e1]\" />\r\n <span className=\"uppercase\">{ext}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n onClick={onRemove}\r\n title=\"Remove\"\r\n aria-label=\"Remove file\"\r\n className={cn(\r\n \"grid h-8 w-8 place-items-center rounded-full bg-white text-[#3D3D3D]\",\r\n \"shadow-[0px_2px_4px_0px_#A5A3AE4D] hover:bg-black/5\",\r\n )}\r\n >\r\n <ChatXIcon className=\"h-[18px] w-[18px]\" />\r\n </button>\r\n </div>\r\n );\r\n};\r\n\r\nconst ImageThumb: FC<ImageThumbProps> = ({ url, onRemove }) => {\r\n return (\r\n <div\r\n className={cn(\r\n \"relative mr-2 inline-block h-[65px] w-[65px] rounded-sm\",\r\n \"border border-[#e1e1e1] bg-[#F7F7F7]\",\r\n )}\r\n >\r\n <img src={url} alt=\"\" className=\"h-full w-full rounded-sm object-cover\" loading=\"lazy\" />\r\n\r\n <button\r\n type=\"button\"\r\n onClick={onRemove}\r\n aria-label=\"Remove image\"\r\n title=\"Remove image\"\r\n className={cn(\r\n \"absolute left-1/2 top-1/2 z-10 grid h-6 w-6 -translate-x-1/2 -translate-y-1/2 place-items-center\",\r\n \"rounded-full bg-black/30 text-white\",\r\n \"shadow-[0px_2px_4px_0px_#A5A3AE4D]\",\r\n )}\r\n >\r\n <ChatXIcon className=\"h-4 w-4 text-white\" />\r\n </button>\r\n </div>\r\n );\r\n};\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\n\r\n/** Single-row, horizontally scrollable preview strip */\r\nconst AttachmentPreviewStrip: FC<AttachmentPreviewStripProps> = ({\r\n imgPreviews,\r\n filePreviews,\r\n onRemoveFile,\r\n onRemoveImage,\r\n}) => {\r\n const has = imgPreviews.length > 0 || filePreviews.length > 0;\r\n\r\n if (!has) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className={cn(\"mx-auto mb-2 max-w-[410px] overflow-x-auto custom-scroll\")}>\r\n <div className=\"flex items-start whitespace-nowrap\">\r\n {filePreviews.map((file, index) => (\r\n <FilePreviewChip\r\n key={`${file.name}-${index}`}\r\n name={file.name}\r\n sizeMB={file.sizeMB}\r\n ext={file.ext}\r\n onRemove={() => onRemoveFile(index)}\r\n />\r\n ))}\r\n\r\n {imgPreviews.map((url, index) => (\r\n <ImageThumb key={`${url}-${index}`} url={url} onRemove={() => onRemoveImage(index)} />\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default AttachmentPreviewStrip;\r\n","\"use client\";\r\n\r\nimport { useRef, useState } from \"react\";\r\n\r\nimport { ArrowSendAngleIcon, ArrowSendIcon, RecordMicIcon, ChatXIcon } from \"../../icons\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\n\r\ntype ChatComposerBarProps = {\r\n recording: boolean;\r\n seconds: number;\r\n\r\n // typing\r\n isTyping: boolean;\r\n textRef: React.RefObject<HTMLTextAreaElement | null>;\r\n text: string;\r\n onTextChange: (v: string) => void;\r\n onAutoGrow: () => void;\r\n\r\n // attachments\r\n hasAttachments: boolean;\r\n canSendArrow: boolean;\r\n\r\n // actions\r\n startRecording: () => void;\r\n stopRecording: (send: boolean) => void;\r\n sendText: () => void;\r\n sendAttachments: () => void;\r\n\r\n // util\r\n fmtTime: (s: number) => string;\r\n};\r\n\r\n/* =======================\r\n Gradients\r\n======================= */\r\n\r\nconst idleGradient =\r\n \"linear-gradient(90.85deg, rgba(51, 201, 212, 0.5) 0%, rgba(39, 83, 251, 0.5) 29.98%, rgba(39, 83, 251, 0.5) 49.97%, rgba(39, 83, 251, 0.5) 64.96%, rgba(235, 67, 255, 0.5) 99.94%)\";\r\n\r\nconst activeGradient =\r\n \"linear-gradient(90.85deg, #33C9D4 0%, #2753FB 29.98%, #2753FB 49.97%, #2753FB 64.96%, #EB43FF 99.94%)\";\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\n\r\nconst ChatComposerBar = ({\r\n recording,\r\n seconds,\r\n isTyping,\r\n textRef,\r\n text,\r\n onTextChange,\r\n onAutoGrow,\r\n hasAttachments,\r\n canSendArrow,\r\n startRecording,\r\n stopRecording,\r\n sendText,\r\n sendAttachments,\r\n fmtTime,\r\n}: ChatComposerBarProps) => {\r\n const composingRef = useRef(false);\r\n const [isFocused, setIsFocused] = useState(false);\r\n\r\n const isActiveBorder = isFocused || recording;\r\n\r\n if (!recording) {\r\n return (\r\n <div className=\"flex w-full items-stretch gap-2\">\r\n <div\r\n className=\"w-full rounded-sm p-px transition-[background] duration-200\"\r\n style={{\r\n background: isActiveBorder ? activeGradient : idleGradient,\r\n }}\r\n >\r\n <div className=\"flex min-h-[50px] w-full items-center justify-between rounded-[3px] bg-white\">\r\n <div className=\"flex w-full items-center justify-between p-[3px]\">\r\n {!isTyping ? (\r\n <button\r\n type=\"button\"\r\n onClick={startRecording}\r\n className=\"grid h-[46px] w-[46px] place-items-center rounded-xs bg-[#f8f8f8] text-[#ff5301] hover:brightness-95\"\r\n title=\"Record voice\"\r\n aria-label=\"Record voice\"\r\n >\r\n <RecordMicIcon className=\"h-6 w-6\" />\r\n </button>\r\n ) : null}\r\n\r\n <textarea\r\n ref={textRef}\r\n rows={1}\r\n autoFocus\r\n placeholder=\"Type a message\"\r\n className=\"custom-scroll-hidden max-h-[200px] flex-1 resize-none bg-transparent px-3 py-2 outline-none placeholder:text-[#777]\"\r\n value={text}\r\n onChange={(e) => onTextChange(e.target.value)}\r\n onInput={onAutoGrow}\r\n onFocus={() => setIsFocused(true)}\r\n onBlur={() => setIsFocused(false)}\r\n onCompositionStart={() => {\r\n composingRef.current = true;\r\n }}\r\n onCompositionEnd={() => {\r\n composingRef.current = false;\r\n onAutoGrow();\r\n }}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\" && e.shiftKey) {\r\n return;\r\n }\r\n if (composingRef.current) {\r\n return;\r\n }\r\n if (e.key === \"Enter\") {\r\n e.preventDefault();\r\n if (text.length > 0) {\r\n sendText();\r\n }\r\n }\r\n }}\r\n />\r\n </div>\r\n\r\n {!canSendArrow ? (\r\n <div className=\"grid h-full w-px place-items-center bg-[#E7E7E7]\" />\r\n ) : null}\r\n\r\n <div className=\"px-2\">\r\n {isTyping ? (\r\n <div className=\"flex items-center\">\r\n <div className=\"h-10 w-px border-l border-[#CCCCCC]\" />\r\n <button\r\n type=\"button\"\r\n onClick={sendText}\r\n className={cn(\r\n \"ms-1 grid h-[40px] w-[40px] place-items-center rounded-full\",\r\n \"text-[#ff5301] hover:bg-[#f8f8f8]\",\r\n )}\r\n title={hasAttachments ? \"Send attachments\" : \"Send\"}\r\n aria-label=\"Send\"\r\n >\r\n <ArrowSendAngleIcon className=\"h-6 w-6\" />\r\n </button>\r\n </div>\r\n ) : (\r\n <div className=\"flex items-center\">\r\n <div className=\"h-10 w-px border-l border-[#CCCCCC]\" />\r\n <button\r\n type=\"button\"\r\n onClick={sendAttachments}\r\n disabled={!hasAttachments}\r\n className={cn(\r\n \"ms-1 grid h-[40px] w-[40px] place-items-center rounded-full hover:bg-[#f8f8f8]\",\r\n hasAttachments ? \"text-[#ff5301]\" : \"text-[#B9C3D4]\",\r\n )}\r\n title={hasAttachments ? \"Send attachments\" : \"Send\"}\r\n aria-label=\"Send\"\r\n >\r\n <ArrowSendIcon className=\"h-6 w-6\" />\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n /* =======================\r\n Recording state UI\r\n ======================= */\r\n\r\n return (\r\n <div className=\"flex w-full items-stretch gap-2\">\r\n <div className=\"w-full rounded-sm p-px\" style={{ background: activeGradient }}>\r\n <div className=\"flex h-[52px] w-full items-center justify-between rounded-[3px] bg-white\">\r\n <button\r\n type=\"button\"\r\n className=\"ms-[3px] grid h-[46px] w-[46px] place-items-center rounded-xs bg-[#f8f8f8] text-[#ff5301] hover:brightness-95\"\r\n aria-label=\"Recording\"\r\n title=\"Recording\"\r\n >\r\n <RecordMicIcon\r\n className={cn(\r\n \"h-6 w-6\",\r\n seconds % 2 === 0\r\n ? \"text-[#929292]\"\r\n : \"text-[#ff5301]\",\r\n )}\r\n />\r\n </button>\r\n\r\n <div className=\"px-3 text-[13px]\">{fmtTime(seconds)}</div>\r\n\r\n <div className=\"ml-auto flex items-center gap-3 pr-2\">\r\n <button\r\n type=\"button\"\r\n onClick={() => stopRecording(false)}\r\n className=\"grid h-8 w-8 place-items-center rounded-full text-[#3D3D3D] hover:bg-black/5\"\r\n title=\"Discard\"\r\n aria-label=\"Discard recording\"\r\n >\r\n <ChatXIcon className=\"h-5 w-5\" />\r\n </button>\r\n\r\n <div className=\"h-6 w-px bg-[#E7E7E7]\" />\r\n\r\n <button\r\n type=\"button\"\r\n onClick={() => stopRecording(true)}\r\n className=\"grid h-10 w-[40px] place-items-center rounded-full text-[#ff5301]\"\r\n title={hasAttachments ? \"Send attachments\" : \"Send\"}\r\n aria-label=\"Send\"\r\n >\r\n <ArrowSendAngleIcon className=\"h-6 w-6\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatComposerBar;\r\n","\"use client\";\r\n\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\n\r\nimport { BusinessInfoIcon, ChatMailIcon, ChatPhoneCallIcon, ChatXIcon } from \"../../../icons\";\r\n\r\nimport { cn } from \"../../../utils/cn\";\r\nimport type { BusinessCard } from \"../types\";\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\n\r\ntype BusinessCardDropupProps = {\r\n open: boolean;\r\n onClose: () => void;\r\n onSend: (card: BusinessCard) => void;\r\n /** Position against this button (like EmojiDropup) */\r\n anchorRef?: React.RefObject<HTMLElement | null>;\r\n className?: string;\r\n};\r\n\r\n/* =======================\r\n Constants\r\n======================= */\r\n\r\nconst WIDTH = 380;\r\nconst GAP_Y = 0;\r\nconst PADDING = 0;\r\n\r\nconst defaultCard: BusinessCard = {\r\n avatarSrc: \"/chat/img/demo-a.jpg\",\r\n name: \"Arman Hossain\",\r\n country: \"Bangladesh\",\r\n flag: \"🇧🇩\",\r\n company: \"Easy Fashion\",\r\n email: \"aminul@oceanget.com\",\r\n phone: \"+880 1712 345678\",\r\n};\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\n\r\nconst BusinessCardDropup = ({\r\n open,\r\n onClose,\r\n onSend,\r\n anchorRef,\r\n className,\r\n}: BusinessCardDropupProps) => {\r\n const panelRef = useRef<HTMLDivElement | null>(null);\r\n const [pos, setPos] = useState<{ left: number; top: number } | null>(null);\r\n const [form] = useState<BusinessCard>(defaultCard);\r\n\r\n const getPosition = useCallback(() => {\r\n const anchor = anchorRef?.current;\r\n const panel = panelRef.current;\r\n\r\n if (!anchor || !panel) {\r\n return null;\r\n }\r\n\r\n const ar = anchor.getBoundingClientRect();\r\n const ph = panel.offsetHeight + 12;\r\n\r\n let left = Math.min(ar.left, window.innerWidth - PADDING - WIDTH);\r\n left = Math.max(left, PADDING);\r\n\r\n let top = ar.top - GAP_Y - ph;\r\n if (top < PADDING) {\r\n top = Math.min(ar.bottom + GAP_Y, window.innerHeight - ph - PADDING);\r\n }\r\n\r\n return { left: Math.round(left - 18), top: Math.round(top) };\r\n }, [anchorRef]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n\r\n let rafId = 0;\r\n const update = () => {\r\n const next = getPosition();\r\n if (next) {\r\n setPos(next);\r\n }\r\n };\r\n\r\n rafId = requestAnimationFrame(update);\r\n\r\n const onScroll = () => {\r\n cancelAnimationFrame(rafId);\r\n rafId = requestAnimationFrame(update);\r\n };\r\n const onResize = () => {\r\n cancelAnimationFrame(rafId);\r\n rafId = requestAnimationFrame(update);\r\n };\r\n\r\n window.addEventListener(\"scroll\", onScroll, true);\r\n window.addEventListener(\"resize\", onResize);\r\n\r\n return () => {\r\n cancelAnimationFrame(rafId);\r\n window.removeEventListener(\"scroll\", onScroll, true);\r\n window.removeEventListener(\"resize\", onResize);\r\n };\r\n }, [open, getPosition]);\r\n\r\n // Outside click & ESC\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n\r\n const onDoc = (e: MouseEvent) => {\r\n if (panelRef.current && !panelRef.current.contains(e.target as Node)) {\r\n onClose();\r\n }\r\n };\r\n\r\n const onEsc = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") {\r\n onClose();\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousedown\", onDoc);\r\n document.addEventListener(\"keydown\", onEsc);\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", onDoc);\r\n document.removeEventListener(\"keydown\", onEsc);\r\n };\r\n }, [open, onClose]);\r\n\r\n const disabled = useMemo(() => !form.name || !form.company || !form.email || !form.phone, [form]);\r\n\r\n if (!open) {\r\n return null;\r\n }\r\n\r\n const body = (\r\n <div\r\n ref={panelRef}\r\n role=\"dialog\"\r\n aria-label=\"Business card\"\r\n className={cn(\r\n \"z-9999 relative rounded-[12px] border border-[#EFEFEF] bg-white\",\r\n \"p-3 shadow-[0_8px_24px_rgba(0,0,0,0.12)]\",\r\n className,\r\n )}\r\n style={{\r\n width: WIDTH,\r\n left: pos?.left ?? -9999,\r\n top: pos?.top ?? -9999,\r\n position: \"fixed\",\r\n }}\r\n >\r\n {/* Header */}\r\n <div className=\"mb-2 flex items-center justify-between\">\r\n <div className=\"text-lg font-semibold text-black\">Business Card</div>\r\n <button\r\n type=\"button\"\r\n onClick={onClose}\r\n aria-label=\"Close\"\r\n className=\"grid h-8 w-8 place-items-center rounded-full hover:bg-black/5\"\r\n >\r\n <ChatXIcon className=\"h-6 w-6\" />\r\n </button>\r\n </div>\r\n\r\n {/* Card preview */}\r\n <div className=\"flex justify-center\">\r\n <div\r\n className={cn(\r\n \"relative h-[208px] w-[355px] overflow-hidden rounded-[12px] bg-white\",\r\n \"bg-cover bg-no-repeat shadow-[0_2px_12px_rgba(59,51,51,0.1)]\",\r\n )}\r\n style={{ backgroundImage: \"url('/chat/img/card_bg_raw.svg')\" }}\r\n >\r\n <div className=\"flex h-full justify-between gap-4 px-6 py-6\">\r\n <div className=\"flex min-w-0 flex-1 flex-col justify-between\">\r\n <div>\r\n <h3 className=\"text-xl font-semibold text-[#004F4F]\">{form.name}</h3>\r\n\r\n <div className=\"h-px w-[105px] bg-black\" />\r\n\r\n <div className=\"mt-[6px] flex items-center gap-2\">\r\n <span className=\"text-xs font-medium text-[#636363]\">\r\n {form.country}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div className=\"mt-4 mb-10 space-y-1.5 text-xs text-black\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"flex h-5 w-5 items-center justify-center rounded-full bg-[#FFE9DB]\">\r\n <BusinessInfoIcon className=\"h-3 w-3 text-[#EA580C]\" />\r\n </div>\r\n <span className=\"truncate\">{form.company}</span>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"flex h-5 w-5 items-center justify-center rounded-full bg-[#FFE9DB]\">\r\n <ChatMailIcon className=\"h-3 w-3 text-[#EA580C]\" />\r\n </div>\r\n <span className=\"truncate\">{form.email}</span>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"flex h-5 w-5 items-center justify-center rounded-full bg-[#FFE9DB]\">\r\n <ChatPhoneCallIcon className=\"h-3 w-3 text-[#EA580C]\" />\r\n </div>\r\n <span className=\"truncate\">{form.phone}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Footer actions */}\r\n <div className=\"mt-3 flex justify-end gap-2\">\r\n\r\n <button\r\n type=\"button\"\r\n disabled={disabled}\r\n className=\"h-[34px] cursor-pointer rounded-[4px] border-none bg-[#ff5200] px-4 text-[13px] font-medium text-white hover:bg-[#e64a00] disabled:opacity-50\"\r\n onClick={() => {\r\n onSend(form);\r\n onClose();\r\n }}\r\n >\r\n Send\r\n </button>\r\n </div>\r\n\r\n {/* Speech arrow */}\r\n <div\r\n aria-hidden\r\n className=\"pointer-events-none absolute -bottom-2 left-6 h-4 w-4 rotate-45 rounded-[3px] border border-[#EFEFEF] border-l-transparent border-t-transparent bg-white\"\r\n />\r\n </div>\r\n );\r\n\r\n return createPortal(body, document.body);\r\n};\r\n\r\nexport default BusinessCardDropup;\r\n","\"use client\";\r\n\r\nimport clsx from \"clsx\";\r\nimport React, { useEffect } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\n\r\ntype Props = {\r\n open: boolean;\r\n onClose: () => void;\r\n onSelect: (emoji: string) => void;\r\n /** Button ref to position against */\r\n anchorRef?: React.RefObject<HTMLElement | null>;\r\n className?: string;\r\n};\r\n\r\nconst EMOJIS =\r\n \"😀 😁 😂 🤣 😃 😄 😅 😊 😇 🙂 🙃 😉 😌 😍 🥰 😘 😗 😙 😚 😋 😜 😝 😛 🫢 🤫 🤭 🤗 🤔 🤨 😐 😑 😶 🙄 😯 😪 😴 😌 🤤 😮💨 😮 😲 🤯 🥴 🥱 😬 😏 🤥 😕 😟 🙁 ☹️ 😢 😭\".split(\r\n \" \",\r\n );\r\n\r\nconst WIDTH = 300; // fixed width (your ask)\r\nconst GAP_Y = 1; // space above button\r\nconst GAP_X = 1; // space right of button\r\nconst PADDING = 1; // viewport padding\r\n\r\nconst EmojiDropup: React.FC<Props> = ({ open, onClose, onSelect, anchorRef, className }) => {\r\n const panelRef = React.useRef<HTMLDivElement | null>(null);\r\n const [pos, setPos] = React.useState<{ left: number; top: number } | null>(null);\r\n\r\n const place = React.useCallback(() => {\r\n const anchor = anchorRef?.current;\r\n const panel = panelRef.current;\r\n if (!anchor || !panel) {\r\n return;\r\n }\r\n\r\n // desired: to the RIGHT of button, and ABOVE it\r\n const ar = anchor.getBoundingClientRect();\r\n const ph = panel.offsetHeight + 10;\r\n\r\n let left = ar.right + GAP_X - 45; // right side of button\r\n let top = ar.top - GAP_Y - ph; // above the button\r\n\r\n // clamp horizontally and vertically\r\n left = Math.min(left, window.innerWidth - PADDING - WIDTH);\r\n left = Math.max(left, PADDING);\r\n top = Math.max(top, PADDING);\r\n\r\n // set arrow X offset from panel's left edge so it points near the button\r\n const arrowLeft = Math.max(12, Math.min(24, Math.round(Math.min(ar.right + GAP_X - left, 40))));\r\n panel.style.setProperty(\"--arrow-left\", `${arrowLeft}px`);\r\n\r\n setPos({ left: Math.round(left), top: Math.round(top) });\r\n }, [anchorRef]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n place();\r\n const onScroll = () => place();\r\n const onResize = () => place();\r\n window.addEventListener(\"scroll\", onScroll, true);\r\n window.addEventListener(\"resize\", onResize);\r\n return () => {\r\n window.removeEventListener(\"scroll\", onScroll, true);\r\n window.removeEventListener(\"resize\", onResize);\r\n };\r\n }, [open, place]);\r\n\r\n // close on outside + Esc\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n const onDoc = (e: MouseEvent) => {\r\n if (panelRef.current && !panelRef.current.contains(e.target as Node)) {\r\n onClose();\r\n }\r\n };\r\n const onEsc = (e: KeyboardEvent) => e.key === \"Escape\" && onClose();\r\n document.addEventListener(\"mousedown\", onDoc);\r\n document.addEventListener(\"keydown\", onEsc);\r\n return () => {\r\n document.removeEventListener(\"mousedown\", onDoc);\r\n document.removeEventListener(\"keydown\", onEsc);\r\n };\r\n }, [open, onClose]);\r\n\r\n if (!open) {\r\n return null;\r\n }\r\n\r\n const body = (\r\n <div\r\n ref={panelRef}\r\n role=\"dialog\"\r\n aria-label=\"Emoji picker\"\r\n className={clsx(\"emoji-dropup\", className)}\r\n style={{\r\n zIndex: \"9999\",\r\n width: WIDTH,\r\n left: pos?.left ?? -9999,\r\n top: pos?.top ?? -9999,\r\n maxHeight: Math.max(140, window.innerHeight - 2 * PADDING), // dynamic height\r\n }}\r\n >\r\n <div className=\"emoji-dropup__scroll\">\r\n <div className=\"grid grid-cols-7 gap-0\">\r\n {EMOJIS.map((e, i) => (\r\n <button\r\n key={i}\r\n type=\"button\"\r\n className=\"emoji-dropup__item\"\r\n onClick={() => {\r\n onSelect(e);\r\n onClose();\r\n }}\r\n aria-label={`Insert ${e}`}\r\n >\r\n {e}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n\r\n return createPortal(body, document.body);\r\n};\r\n\r\nexport default EmojiDropup;\r\n","// components/chat/ui/chat/scrollToMessage.ts\r\nexport function scrollToMessageById(messageId: string) {\r\n if (!messageId) {\r\n return;\r\n }\r\n\r\n const target = document.querySelector<HTMLElement>(`[data-msg-id=\"${messageId}\"]`);\r\n if (!target) {\r\n return;\r\n }\r\n\r\n const scroller = target.closest<HTMLElement>(\"[data-chat-scroll]\");\r\n\r\n // Smooth center scroll\r\n if (scroller) {\r\n const top = target.offsetTop - scroller.clientHeight / 2 + target.clientHeight / 2;\r\n scroller.scrollTo({ top, behavior: \"smooth\" });\r\n } else {\r\n target.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\r\n }\r\n\r\n // ── Soft background focus (black @ 5% opacity), no borders ────────────────\r\n // We inject a transient absolutely-positioned overlay inside the target.\r\n const cleanupId = `focus-overlay-${Date.now()}`;\r\n const overlay = document.createElement(\"div\");\r\n overlay.id = cleanupId;\r\n Object.assign(overlay.style, {\r\n position: \"absolute\",\r\n inset: \"-4px\", // tiny spread so it peeks outside rounded corners\r\n borderRadius: \"6px\",\r\n background: \"rgba(0,0,0,0.05)\", // black / 5% opacity\r\n pointerEvents: \"none\",\r\n zIndex: \"1\",\r\n transition: \"opacity 220ms ease\",\r\n opacity: \"0\",\r\n });\r\n\r\n // Ensure the target can host an absolutely positioned child\r\n const prevPos = target.style.position;\r\n if (getComputedStyle(target).position === \"static\") {\r\n target.style.position = \"relative\";\r\n }\r\n\r\n target.appendChild(overlay);\r\n // fade in\r\n requestAnimationFrame(() => (overlay.style.opacity = \"1\"));\r\n\r\n // Remove highlight after 1.2s with a quick fade-out\r\n window.setTimeout(() => {\r\n overlay.style.opacity = \"0\";\r\n window.setTimeout(() => {\r\n overlay.remove();\r\n // restore inline position if we modified it\r\n if (!prevPos) {\r\n target.style.removeProperty(\"position\");\r\n } else {\r\n target.style.position = prevPos;\r\n }\r\n }, 240);\r\n }, 1200);\r\n}\r\n","// components/chat/ui/chat/ReplyCard.tsx\r\n\"use client\";\r\n\r\nimport clsx from \"clsx\";\r\nimport React from \"react\";\r\nimport { ArrowBackUpIcon, FileIcon, ChatXIcon } from \"../../icons\";\r\nimport { scrollToMessageById } from \"./scrollToMessage\";\r\nimport type { MessageRef } from \"./types\";\r\n\r\ntype Props = {\r\n refMsg: MessageRef;\r\n onClose?: () => void; // present in composer bar\r\n compact?: boolean;\r\n className?: string;\r\n jumpOnClick?: boolean;\r\n};\r\n\r\nconst fmt = (s: number) => {\r\n if (!Number.isFinite(s) || s <= 0) {\r\n return \"0:00\";\r\n }\r\n const m = Math.floor(s / 60);\r\n const sec = Math.round(s % 60)\r\n .toString()\r\n .padStart(2, \"0\");\r\n return `${m}:${sec}`;\r\n};\r\n\r\nconst ReplyCard: React.FC<Props> = ({ refMsg, onClose, compact, className, jumpOnClick }) => {\r\n const hasText = !!refMsg.text && refMsg.text.trim().length > 0;\r\n const hasFiles = (refMsg.files?.length ?? 0) > 0;\r\n const hasImages = (refMsg.images?.length ?? 0) > 0;\r\n // const hasAudio = !!refMsg.audio;\r\n\r\n // priority matches your examples\r\n const mode: \"text\" | \"files\" | \"images\" | \"audio\" = hasText\r\n ? \"text\"\r\n : hasFiles\r\n ? \"files\"\r\n : hasImages\r\n ? \"images\"\r\n : \"audio\";\r\n\r\n const widthClamp = onClose ? \"w-full\" : \"max-w-[200px] w-full\";\r\n const heightClamp = compact ? \"py-1.5\" : \"py-1.5\";\r\n\r\n // ── Dynamic audio duration (no playback) ────────────────────────────────\r\n const [durTxt, setDurTxt] = React.useState<string>(refMsg.audio?.duration ?? \"0:06\");\r\n\r\n React.useEffect(() => {\r\n if (mode !== \"audio\" || !refMsg.audio?.src) {\r\n setDurTxt(refMsg.audio?.duration ?? \"0:06\");\r\n return;\r\n }\r\n\r\n let disposed = false;\r\n const a = new Audio();\r\n a.preload = \"metadata\";\r\n a.src = refMsg.audio.src;\r\n\r\n const onLoaded = () => {\r\n if (disposed) {\r\n return;\r\n }\r\n const d = Number(a.duration);\r\n setDurTxt(fmt(d));\r\n };\r\n\r\n const onError = () => {\r\n if (disposed) {\r\n return;\r\n }\r\n // keep any provided duration or fallback\r\n setDurTxt(refMsg.audio?.duration ?? \"0:06\");\r\n };\r\n\r\n a.addEventListener(\"loadedmetadata\", onLoaded);\r\n a.addEventListener(\"error\", onError);\r\n\r\n // force metadata fetch: some browsers need load() trigger\r\n try {\r\n a.load?.();\r\n } catch {\r\n /* empty */\r\n }\r\n\r\n return () => {\r\n disposed = true;\r\n a.pause?.();\r\n // help GC\r\n a.src = \"\";\r\n a.removeAttribute?.(\"src\");\r\n a.load?.();\r\n a.removeEventListener(\"loadedmetadata\", onLoaded);\r\n a.removeEventListener(\"error\", onError);\r\n };\r\n }, [mode, refMsg.audio?.src, refMsg.audio?.duration]);\r\n\r\n const clickToJump = React.useCallback(() => {\r\n if (!jumpOnClick) {\r\n return;\r\n }\r\n // Use refMsg.id – make sure MessageRef includes `id: string`\r\n if (refMsg.id) {\r\n scrollToMessageById(refMsg.id);\r\n }\r\n }, [jumpOnClick, refMsg.id]);\r\n\r\n return (\r\n <div\r\n onClick={clickToJump}\r\n className={clsx(\r\n widthClamp,\r\n \"relative rounded-md bg-[#f8f8f8] px-3\",\r\n \"border-l-2 border-[#FF5300]\",\r\n \"shadow-[0_1px_2px_rgba(0,0,0,0.04)]\",\r\n heightClamp,\r\n className,\r\n )}\r\n >\r\n {/* header row */}\r\n <div className=\"mb-1.5 flex items-center justify-between\">\r\n <div className=\"flex items-center gap-2\">\r\n <ArrowBackUpIcon className=\"h-[18px] w-[18px]\" />\r\n <div className=\"text-[13px] font-normal text-[#2c2c2c]\">Reply</div>\r\n </div>\r\n\r\n {onClose && (\r\n <button\r\n type=\"button\"\r\n onClick={onClose}\r\n className=\"absolute right-3 top-1/2 -translate-y-1/2 grid h-8 w-8 place-items-center rounded-full bg-white text-[#3D3D3D] shadow-[0px_2px_4px_0px_#A5A3AE4D] hover:text-[#FF5300]\"\r\n title=\"Remove\"\r\n aria-label=\"Remove\"\r\n >\r\n <ChatXIcon className=\"h-[18px] w-[18px]\" />\r\n </button>\r\n )}\r\n </div>\r\n\r\n {/* content preview */}\r\n <div className=\"pb-1\">\r\n {mode === \"text\" && (\r\n <div className=\"truncate text-[13px] text-[#636363]\">\r\n {refMsg.text!.replace(/\\s+/g, \" \")}\r\n </div>\r\n )}\r\n\r\n {mode === \"files\" && (\r\n <div className=\"flex items-center gap-2 h-[21px]\">\r\n <span className=\"inline-flex items-center gap-1 rounded-sm border-[0.7px] border-[#e1e1e1] bg-white px-2.5 py-[2px]\">\r\n <FileIcon className=\"h-4 w-4 text-[#6B7280]\" />\r\n <span className=\"max-w-[110px] truncate text-[10px] text-[#2c2c2c]\">\r\n {refMsg.files![0].name}\r\n </span>\r\n </span>\r\n {refMsg.files!.length > 1 && (\r\n <span className=\" text-xs text-[#636363]\">\r\n +{refMsg.files!.length - 1}\r\n </span>\r\n )}\r\n </div>\r\n )}\r\n\r\n {mode === \"images\" && (\r\n <div className=\"flex items-center gap-1.5\">\r\n {refMsg.images!.slice(0, 3).map((src, i) => {\r\n const extra = refMsg.images!.length - 3;\r\n const isLast = i === 2 && extra > 0;\r\n return (\r\n <div\r\n key={i}\r\n className=\"relative h-[21px] w-[26px] overflow-hidden rounded-sm border border-[#E5E5E5] bg-[#F5F7FA]\"\r\n >\r\n <img src={src} alt=\"\" className=\"h-full w-full object-cover\" />\r\n {isLast && (\r\n <div className=\"absolute inset-0 grid place-items-center bg-black/40\">\r\n <span className=\" text-xs font-semibold text-white\">+{extra}</span>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n\r\n {mode === \"audio\" && (\r\n <div className=\"flex items-center gap-2 h-[21px] border border-[#D8D8D8] rounded-[3.5px] p-[1.75px] max-w-[151px]\">\r\n {/* static play pill (no handlers) */}\r\n <span className=\"grid h-[17.5px] w-[18.08px] place-items-center rounded-[2.33px] bg-[#f1f1f1] text-[#00486F]\">\r\n <svg viewBox=\"0 0 20 20\" className=\"h-3 w-3\" fill=\"currentColor\" aria-hidden>\r\n <path d=\"M6 4.5v11l9-5.5-9-5.5Z\" />\r\n </svg>\r\n </span>\r\n\r\n {/* mini progress bar (visual only) */}\r\n <div className=\"relative h-[1.17px] w-[130px] rounded-full bg-[#BDBDBD]\">\r\n <span\r\n className=\"absolute left-0 top-0 h-full rounded-full bg-[#747474]\"\r\n style={{ width: \"0%\" }}\r\n />\r\n <span\r\n className=\"absolute top-1/2 -translate-y-1/2 h-[5.5px] w-[5.5px] rounded-full bg-[#747474]\"\r\n style={{ left: \"calc(0% - 4px)\" }}\r\n />\r\n </div>\r\n\r\n {/* dynamic duration */}\r\n <span className=\"text-[10px] text-[#747474] me-1\">{durTxt}</span>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ReplyCard;\r\n","// ui/chat/ChatFooter.tsx\n\"use client\";\n\nimport { AttachIcon, ChatInfoIcon, SmileIcon, ChatXIcon, ProfileCardIcon, NewLanguageIcon } from \"../../icons\";\nimport ChatTranslateSettingsModal from \"../../modals/chat/ChatTranslateSettingsModal\";\nimport type { TranslateSettings } from \"../../modals/chat/ChatTranslateSettingsModal\";\nimport clsx from \"clsx\";\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport AttachmentPreviewStrip, { type FilePreview as PreviewFile } from \"./AttachmentPreviewStrip\";\nimport ChatComposerBar from \"./ChatComposerBar\";\nimport BusinessCardDropup from \"./drop-up/BusinessCardDropup\";\nimport EmojiDropup from \"./drop-up/EmojiDropup\";\nimport ReplyCard from \"./ReplyCard\";\nimport type { MessageRef } from \"../../types\";\nimport type { SendPayload } from \"../../types\";\n\n/* Simple tooltip wrapper */\nconst Tooltip = ({ children, text }: { children: React.ReactNode; text?: string }) => (\n <span title={text}>{children}</span>\n);\n\n/* ───────────────────────────── Types ───────────────────────────── */\n\nexport type FooterAction = {\n key: \"attachment\" | \"emoji\" | \"businessCard\" | \"addressCard\" | \"translate\" | string;\n title: string;\n icon: React.ReactNode;\n onClick?: () => void;\n};\n\ntype Props = {\n variant?: \"single\" | \"group\";\n /**\n * Called when the user sends any type of message.\n * The adapter (host app) handles storage and server communication.\n */\n onSend: (payload: SendPayload) => void;\n /** Called after send completes — triggers parent re-render / scroll */\n onAfterSend?: () => void;\n\n actions?: FooterAction[];\n className?: string;\n maxRows?: number;\n\n /** The message being replied to */\n replyTo?: MessageRef;\n clearReply?: () => void;\n};\n\n/* ────────────────────────── Utilities ─────────────────────────── */\n\nconst fmtTime = (s: number) => `${Math.floor(s / 60)}:${String(s % 60).padStart(2, \"0\")}`;\nconst mb = (bytes: number) => Math.max(0.1, bytes / (1024 * 1024));\nconst extFromName = (name: string) => {\n const dot = name.lastIndexOf(\".\");\n return dot >= 0 ? name.slice(dot + 1).toLowerCase() : \"\";\n};\nconst ACCEPT =\n \"image/*,.pdf,.doc,.docx,.ppt,.pptx,.xls,.xlsx,.txt,.csv,application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n\n/* ───────────────────────── Component ──────────────────────────── */\n\nconst ChatFooter: React.FC<Props> = ({\n variant = \"group\",\n onSend,\n onAfterSend,\n className,\n maxRows = 4,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n actions: _actions,\n replyTo,\n clearReply,\n}) => {\n const actionData: FooterAction[] = [\n { key: \"attachment\", title: \"Attach file\", icon: <AttachIcon className=\"h-4 w-4\" /> },\n { key: \"emoji\", title: \"Add emoji\", icon: <SmileIcon className=\"h-4 w-4\" /> },\n {\n key: \"businessCard\",\n title: \"Share business card\",\n icon: <ProfileCardIcon className=\"h-4 w-4\" />,\n },\n {\n key: \"translate\",\n title: \"Translation settings\",\n icon: <NewLanguageIcon className=\"h-4 w-4\" />,\n },\n ];\n\n const textRef = useRef<HTMLTextAreaElement>(null);\n const emojiBtnRef = useRef<HTMLButtonElement | null>(null);\n const [text, setText] = useState(\"\");\n const [showEmoji, setShowEmoji] = useState(false);\n\n // recording (MediaRecorder)\n const [recording, setRecording] = useState(false);\n const [seconds, setSeconds] = useState(0);\n const mediaRecRef = useRef<MediaRecorder | null>(null);\n const streamRef = useRef<MediaStream | null>(null);\n const chunksRef = useRef<BlobPart[]>([]);\n const [micError, setMicError] = useState<string>(\"\");\n\n // attachments\n const [imgPreviews, setImgPreviews] = useState<string[]>([]);\n const [filePreviews, setFilePreviews] = useState<PreviewFile[]>([]);\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n\n const [showTranslate, setShowTranslate] = useState(false);\n const [translateSettings, setTranslateSettings] = useState<TranslateSettings>({\n incomingTarget: \"\",\n autoIncoming: true,\n enableOutgoing: false,\n outgoingFrom: \"English\",\n outgoingTo: \"Bangla\",\n });\n\n const bizBtnRef = useRef<HTMLButtonElement | null>(null);\n const [showBiz, setShowBiz] = useState(false);\n\n const addrBtnRef = useRef<HTMLButtonElement | null>(null);\n const [, setShowAddress] = useState(false);\n\n // insert emoji at caret\n const insertEmoji = (emoji: string) => {\n const el = textRef.current;\n if (!el) { return; }\n const start = el.selectionStart ?? el.value.length;\n const end = el.selectionEnd ?? el.value.length;\n const next = `${text.slice(0, start)}${emoji}${text.slice(end)}`;\n setText(next);\n requestAnimationFrame(() => {\n el.focus();\n const pos = start + emoji.length;\n el.setSelectionRange(pos, pos);\n });\n };\n\n // auto-grow textarea\n const handleAutoGrow = React.useCallback(() => {\n const el = textRef.current;\n if (!el) { return; }\n el.style.height = \"0px\";\n const styles = window.getComputedStyle(el);\n const lh = parseFloat(styles.lineHeight || \"20\");\n const max = lh * maxRows + parseFloat(styles.paddingTop) + parseFloat(styles.paddingBottom);\n el.style.height = `${Math.min(el.scrollHeight, max)}px`;\n }, [maxRows]);\n\n useEffect(() => { handleAutoGrow(); }, [text, handleAutoGrow]);\n\n // recording timer\n useEffect(() => {\n if (!recording) { return; }\n setSeconds(0);\n const id = setInterval(() => setSeconds((s) => s + 1), 1000);\n return () => clearInterval(id);\n }, [recording]);\n\n // cleanup blobs + streams\n useEffect(() => {\n return () => {\n imgPreviews.forEach((u) => u.startsWith(\"blob:\") && URL.revokeObjectURL(u));\n filePreviews.forEach((f) => f.href?.startsWith(\"blob:\") && URL.revokeObjectURL(f.href));\n if (streamRef.current) { streamRef.current.getTracks().forEach((t) => t.stop()); }\n try { mediaRecRef.current?.stop(); } catch { /* empty */ }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const isTyping = text.length > 0;\n const hasAttachments = imgPreviews.length > 0 || filePreviews.length > 0;\n const canSendArrow = useMemo(() => hasAttachments || isTyping, [hasAttachments, isTyping]);\n\n const onFilesPicked: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n const files = Array.from(e.target.files ?? []);\n if (!files.length) { return; }\n const imgs: string[] = [];\n const docs: PreviewFile[] = [];\n files.forEach((f) => {\n const url = URL.createObjectURL(f);\n if (f.type.startsWith(\"image/\")) {\n imgs.push(url);\n } else {\n docs.push({ name: f.name, sizeMB: mb(f.size), ext: extFromName(f.name), href: url, downloadName: f.name });\n }\n });\n setImgPreviews((p) => [...p, ...imgs]);\n setFilePreviews((p) => [...p, ...docs]);\n e.target.value = \"\";\n };\n\n /* ────── Preview → payload helpers ────── */\n\n const previewFilesToPayload = (files: PreviewFile[]) =>\n files.map((f) => ({ name: f.name, sizeMB: f.sizeMB, ext: f.ext, href: f.href, downloadName: f.downloadName }));\n\n const clearAttachments = () => {\n imgPreviews.forEach((u) => u.startsWith(\"blob:\") && URL.revokeObjectURL(u));\n filePreviews.forEach((f) => f.href?.startsWith(\"blob:\") && URL.revokeObjectURL(f.href));\n setImgPreviews([]);\n setFilePreviews([]);\n };\n\n /* ─────── Send handlers — all delegate to the single onSend prop ─────── */\n\n const sendText = async () => {\n const t = text.trim();\n const hasAttachmentsNow = imgPreviews.length > 0 || filePreviews.length > 0;\n if (!t && !hasAttachmentsNow) return;\n\n if (hasAttachmentsNow) {\n // Combined: text + files/images\n onSend({\n type: \"combined\",\n text: t,\n files: previewFilesToPayload(filePreviews),\n images: imgPreviews,\n replyTo,\n });\n clearAttachments();\n } else {\n onSend({ type: \"text\", text: t, replyTo });\n }\n setText(\"\");\n clearReply?.();\n onAfterSend?.();\n };\n\n const sendAttachments = async () => {\n if (text.length > 0) { await sendText(); return; }\n const hasAttachmentsNow = imgPreviews.length > 0 || filePreviews.length > 0;\n if (!hasAttachmentsNow) return;\n\n onSend({\n type: \"attachments\",\n images: imgPreviews,\n files: previewFilesToPayload(filePreviews),\n replyTo,\n });\n clearAttachments();\n clearReply?.();\n onAfterSend?.();\n };\n\n /* ───── Recording control with MediaRecorder ───── */\n const startRecording = async () => {\n setMicError(\"\");\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true }, video: false });\n streamRef.current = stream;\n const canWebm = typeof MediaRecorder !== \"undefined\" && MediaRecorder.isTypeSupported?.(\"audio/webm;codecs=opus\");\n const mime = canWebm ? \"audio/webm;codecs=opus\" : \"audio/mp4\";\n const rec = new MediaRecorder(stream, { mimeType: mime });\n mediaRecRef.current = rec;\n chunksRef.current = [];\n rec.ondataavailable = (e) => { if (e.data && e.data.size > 0) chunksRef.current.push(e.data); };\n rec.start();\n setRecording(true);\n } catch (err: unknown) {\n let name: string | undefined;\n if (err instanceof DOMException || err instanceof Error) { ({ name } = err); }\n const msg = name === \"NotFoundError\" ? \"No audio input device found.\" : name === \"NotAllowedError\" ? \"Microphone access was denied.\" : \"Unable to access the microphone.\";\n setMicError(msg);\n setRecording(false);\n streamRef.current?.getTracks().forEach((t) => t.stop());\n try { mediaRecRef.current?.stop(); } catch { /* empty */ }\n streamRef.current = null;\n }\n };\n\n const finalizeBlob = (rec: MediaRecorder): Promise<Blob> =>\n new Promise((resolve) => {\n const finish = () => resolve(new Blob(chunksRef.current, { type: rec.mimeType || \"audio/webm\" }));\n rec.onstop = finish;\n try { rec.stop(); } catch { finish(); }\n });\n\n const stopRecording = async (send = false) => {\n const rec = mediaRecRef.current;\n const stream = streamRef.current;\n setRecording(false);\n if (stream) { stream.getTracks().forEach((t) => t.stop()); streamRef.current = null; }\n if (!rec) {\n if (send) onSend({ type: \"voice\", durationSec: seconds, durationText: fmtTime(seconds), replyTo });\n setSeconds(0);\n return;\n }\n const blob = await finalizeBlob(rec);\n mediaRecRef.current = null;\n if (send) {\n const src = URL.createObjectURL(blob);\n onSend({ type: \"voice\", src, durationSec: seconds, durationText: fmtTime(seconds), replyTo });\n clearReply?.();\n onAfterSend?.();\n }\n setSeconds(0);\n };\n\n return (\n <div className={clsx(\"border-t border-[#ededed] bg-white p-3.5\", className)}>\n {replyTo && (\n <div className=\"mb-2\">\n <ReplyCard refMsg={replyTo} onClose={clearReply} />\n </div>\n )}\n\n <AttachmentPreviewStrip\n imgPreviews={imgPreviews}\n filePreviews={filePreviews}\n onRemoveFile={(i) =>\n setFilePreviews((prev) => {\n const cp = [...prev];\n const [rm] = cp.splice(i, 1);\n if (rm?.href?.startsWith(\"blob:\")) URL.revokeObjectURL(rm.href);\n return cp;\n })\n }\n onRemoveImage={(i) =>\n setImgPreviews((prev) => {\n const cp = [...prev];\n const [rm] = cp.splice(i, 1);\n if (rm?.startsWith(\"blob:\")) URL.revokeObjectURL(rm);\n return cp;\n })\n }\n />\n\n <div className=\"mb-2 flex items-center gap-3\">\n {(actionData ?? []).map((a) => {\n const isAttach = a.key === \"attachment\";\n const isEmoji = a.key === \"emoji\";\n const isTranslate = a.key === \"translate\";\n const isBiz = a.key === \"businessCard\";\n const isAddress = a.key === \"addressCard\";\n\n if (isEmoji) {\n return (\n <span key={a.key} className=\"relative inline-flex\">\n <Tooltip text={a.title}>\n <button ref={emojiBtnRef} type=\"button\" onClick={() => setShowEmoji((v) => !v)} className=\"flex h-6 w-6 items-center justify-center rounded-full text-[#0F0F0F] hover:bg-[#F4F6F8]\">\n <span>{a.icon}</span>\n </button>\n </Tooltip>\n </span>\n );\n }\n if (isTranslate) {\n return (\n <Tooltip key={a.key} text={a.title}>\n <button type=\"button\" onClick={() => setShowTranslate(true)} className=\"flex h-6 w-6 items-center justify-center rounded-full text-[#0F0F0F] hover:bg-[#F4F6F8]\">\n <span>{a.icon}</span>\n </button>\n </Tooltip>\n );\n }\n if (isBiz) {\n return (\n <span key={a.key} className=\"relative inline-flex\">\n <Tooltip text={a.title}>\n <button ref={bizBtnRef} type=\"button\" onClick={() => setShowBiz((v) => !v)} className=\"flex h-6 w-6 items-center justify-center rounded-full text-[#0F0F0F] hover:bg-[#F4F6F8]\">\n <span>{a.icon}</span>\n </button>\n </Tooltip>\n </span>\n );\n }\n if (isAddress) {\n return (\n <span key={a.key} className=\"relative inline-flex\">\n <Tooltip text={a.title}>\n <button ref={addrBtnRef} type=\"button\" onClick={() => setShowAddress(true)} className=\"flex h-6 w-6 items-center justify-center rounded-full text-[#0F0F0F] hover:bg-[#F4F6F8]\">\n <span>{a.icon}</span>\n </button>\n </Tooltip>\n </span>\n );\n }\n return (\n <Tooltip key={a.key} text={a.title}>\n <button type=\"button\" onClick={isAttach ? () => fileInputRef.current?.click() : a.onClick} className=\"flex h-6 w-6 items-center justify-center rounded-full text-[#0F0F0F] hover:bg-[#F4F6F8]\">\n <span>{a.icon}</span>\n </button>\n </Tooltip>\n );\n })}\n\n <input ref={fileInputRef} type=\"file\" multiple accept={ACCEPT} onChange={onFilesPicked} className=\"hidden\" />\n\n <EmojiDropup open={showEmoji} onClose={() => setShowEmoji(false)} onSelect={insertEmoji} anchorRef={emojiBtnRef} />\n <BusinessCardDropup\n open={showBiz}\n onClose={() => setShowBiz(false)}\n anchorRef={bizBtnRef}\n onSend={async (card) => {\n onSend({ type: \"businessCard\", card, replyTo });\n clearReply?.();\n onAfterSend?.();\n }}\n />\n </div>\n\n {micError && (\n <div className=\"mb-2 flex items-start gap-2 rounded-sm bg-[#f8f8f8] px-2 py-1.5 text-xs text-[#ff5301]\">\n <span><ChatInfoIcon className=\"mt-0.5 h-3.5 w-3.5\" /></span>\n <span>{micError}</span>\n <span className=\"pointer flex cursor-pointer items-center justify-center rounded-full p-1 hover:bg-black/10\" onClick={() => setMicError(\"\")}>\n <ChatXIcon className=\"h-3.5 w-3.5\" />\n </span>\n </div>\n )}\n\n <ChatComposerBar\n recording={recording}\n seconds={seconds}\n isTyping={isTyping}\n textRef={textRef}\n text={text}\n onTextChange={setText}\n onAutoGrow={handleAutoGrow}\n hasAttachments={hasAttachments}\n canSendArrow={canSendArrow}\n startRecording={startRecording}\n stopRecording={stopRecording}\n sendText={sendText}\n sendAttachments={sendAttachments}\n fmtTime={fmtTime}\n />\n\n <ChatTranslateSettingsModal\n variant={variant}\n open={showTranslate}\n onClose={() => setShowTranslate(false)}\n initial={translateSettings}\n onSave={(s) => {\n setTranslateSettings(s);\n setShowTranslate(false);\n }}\n />\n </div>\n );\n};\n\nexport default ChatFooter;\n","\"use client\";\r\nimport clsx from \"clsx\";\r\nimport React from \"react\";\r\n\r\ntype Props = {\r\n left: React.ReactNode; // header left content (avatar/title)\r\n right?: React.ReactNode; // header right content (icons/actions)\r\n below?: React.ReactNode; // optional bar below the header (e.g., Inquiry ID)\r\n className?: string;\r\n};\r\n\r\nexport default function ChatHeader({ left, right, below, className }: Props) {\r\n return (\r\n <div>\r\n <div className={clsx(\"border-b border-[#e1e1e1] h-[64px]\", className)}>\r\n <div className=\"flex items-start justify-between px-4 pt-2.5\">\r\n <div className=\"flex items-start gap-3\">{left}</div>\r\n {right}\r\n </div>\r\n </div>\r\n {below && <>{below}</>}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { BlueBadgeIcon } from \"../../icons\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\n\r\ntype SubtitleVariant = \"live\" | \"muted\";\r\n// Variant = \"avatar\" | \"initial\" | \"logo\" — inferred from union props below\r\n\r\ntype BaseProps = {\r\n title: string;\r\n subtitle?: string;\r\n subtitleVariant?: SubtitleVariant;\r\n online?: boolean;\r\n verified?: boolean;\r\n /** Circle size in px (default 46) */\r\n size?: number;\r\n className?: string;\r\n};\r\n\r\ntype AvatarVariant = BaseProps & {\r\n variant: \"avatar\";\r\n src: string;\r\n};\r\n\r\ntype InitialVariant = BaseProps & {\r\n variant: \"initial\";\r\n initial: string;\r\n initialSrc?: string;\r\n bg?: string;\r\n textClassName?: string;\r\n};\r\n\r\ntype LogoVariant = BaseProps & {\r\n variant: \"logo\";\r\n src: string;\r\n ringColor?: string;\r\n};\r\n\r\nexport type ChatIdentityProps = AvatarVariant | InitialVariant | LogoVariant;\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\n\r\nconst ChatIdentity = (props: ChatIdentityProps) => {\r\n const {\r\n title,\r\n subtitle,\r\n subtitleVariant = \"muted\",\r\n online = false,\r\n verified = false,\r\n size = 46,\r\n className,\r\n } = props;\r\n\r\n const subtitleClass = cn(\r\n \"text-[10px] font-medium\",\r\n subtitleVariant === \"live\" ? \"text-[#1E9E6A]\" : \"text-[#929292]\",\r\n );\r\n\r\n return (\r\n <div className={cn(\"flex items-start gap-3\", className)}>\r\n <div className=\"relative\" style={{ width: size, height: size }}>\r\n {/* Avatar */}\r\n {props.variant === \"avatar\" ? (\r\n <img\r\n src={props.src}\r\n alt={title}\r\n className=\"h-full w-full rounded-xs object-cover border border-[#f1f1f1]\"\r\n />\r\n ) : null}\r\n\r\n {/* Initial */}\r\n {props.variant === \"initial\" ? (\r\n <div\r\n className={cn(\r\n \"grid h-full w-full place-items-center rounded-xs text-[15px] font-semibold text-[#2c2c2c]\",\r\n props.textClassName,\r\n )}\r\n style={{ backgroundColor: props.bg ?? \"#FFE5DA\" }}\r\n >\r\n {props.initial}\r\n </div>\r\n ) : null}\r\n\r\n {/* Logo */}\r\n {props.variant === \"logo\" ? (\r\n <div\r\n className=\"grid h-full w-full place-items-center rounded-xs\"\r\n style={{ boxShadow: `0 0 0 1px ${props.ringColor ?? \"#EDEDED\"} inset` }}\r\n >\r\n <img src={props.src} alt={title} className=\"h-full w-full rounded-xs object-cover\" />\r\n </div>\r\n ) : null}\r\n\r\n {/* Online / Offline dot */}\r\n <span\r\n className={cn(\r\n \"absolute rounded-full ring-1 ring-white bottom-[-2px] right-[-2px]\",\r\n online ? \"bg-[#328545]\" : \"bg-[#eb2127]\",\r\n )}\r\n style={{\r\n width: \"15px\",\r\n height: \"15px\",\r\n right: 0,\r\n bottom: 0,\r\n }}\r\n />\r\n </div>\r\n\r\n <div>\r\n <div className=\"flex items-start gap-1 text-[14px] font-medium text-black\">\r\n <span className=\"max-w-[300px] truncate\">{title}</span>\r\n {verified ? (\r\n <span>\r\n <BlueBadgeIcon />\r\n </span>\r\n ) : null}\r\n </div>\r\n\r\n {subtitle ? (\r\n title.toLowerCase() === \"banbox.com\" ? (\r\n <div className=\"flex items-center\">\r\n <img\r\n src=\"/chat/globe.gif\"\r\n alt=\"globe\"\r\n className=\"h-[12px] w-auto shrink-0 object-contain\"\r\n style={{ mixBlendMode: \"multiply\" }}\r\n />\r\n <div className={subtitleClass}>{subtitle}</div>\r\n </div>\r\n ) : (\r\n <div className={subtitleClass}>{subtitle}</div>\r\n )\r\n ) : null}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatIdentity;\r\n","\"use client\";\r\nimport clsx from \"clsx\";\r\nimport React from \"react\";\r\nimport { RightArrow } from \"../../icons\";\r\n\r\ntype Props = {\r\n id?: string; // if undefined, don't render\r\n onView?: () => void; // handler for \"View Inquiry\"\r\n className?: string; // optional container classes\r\n label?: string;\r\n buttonLabel?: string;\r\n};\r\n\r\nconst ChatInquiryBar: React.FC<Props> = ({ id, onView, className, label, buttonLabel }) => {\r\n if (!id) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n className={clsx(\r\n \"flex items-center justify-between border-b border-[#ededed] bg-[#f8f8f8] ps-[16px] pe-[30px] h-[30px]\",\r\n className,\r\n )}\r\n >\r\n <div className=\"flex items-center gap-1.5 text-xs\">\r\n <span className=\"font-semibold text-black\">{label}</span>\r\n <span className=\"h-5 w-px bg-[#e1e1e1]\" />\r\n <span className=\"text-[#636363]\">{id}</span>\r\n </div>\r\n\r\n {/* Button with 'static' + 'hover/animated' layers */}\r\n <button\r\n type=\"button\"\r\n onClick={onView}\r\n className=\"group relative inline-flex w-fit items-center justify-end text-xs font-medium text-black\"\r\n >\r\n <span className=\"flex items-center transition-opacity duration-300 ease-in-out group-hover:opacity-0\">\r\n <span>{buttonLabel}</span>\r\n <span className=\"ml-[4px] flex h-4 w-4 items-center justify-center\">\r\n <RightArrow />\r\n </span>\r\n </span>\r\n\r\n {/* hover layer (slides in) */}\r\n <span className=\"pointer-events-none absolute inset-0 flex items-center opacity-0 transition-opacity duration-300 ease-in-out group-hover:opacity-100\">\r\n <span>{buttonLabel}</span>\r\n <span className=\"ml-[2px] flex h-4 w-4 items-center justify-center animate-slide-right\">\r\n <RightArrow />\r\n </span>\r\n </span>\r\n </button>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatInquiryBar;\r\n","// components/ui/chat/ChatListHeader.tsx\r\n\"use client\";\r\n\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport type { Variants } from \"framer-motion\";\r\nimport { AnimatePresence, motion } from \"framer-motion\";\r\n\r\nimport { MessageIcon, ChatSearchIcon, ChatXIcon } from \"../../icons\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\n\r\ntype Props = {\r\n className?: string;\r\n onClose?: () => void;\r\n onSearchChange?: (value: string) => void;\r\n};\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\n\r\nconst ChatListHeader = ({ className, onClose, onSearchChange }: Props) => {\r\n const [searching, setSearching] = useState(false);\r\n const [q, setQ] = useState(\"\");\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n useEffect(() => {\r\n if (searching) {\r\n const timer = setTimeout(() => inputRef.current?.focus(), 200);\r\n return () => clearTimeout(timer);\r\n }\r\n }, [searching]);\r\n\r\n useEffect(() => {\r\n if (!searching) {\r\n return;\r\n }\r\n\r\n const onKey = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") {\r\n setSearching(false);\r\n setQ(\"\");\r\n onSearchChange?.(\"\");\r\n }\r\n };\r\n\r\n window.addEventListener(\"keydown\", onKey);\r\n return () => window.removeEventListener(\"keydown\", onKey);\r\n }, [searching, onSearchChange]);\r\n\r\n // const clearInside = () => {\r\n // setQ(\"\");\r\n // onSearchChange?.(\"\");\r\n // inputRef.current?.focus();\r\n // };\r\n\r\n const variants: Variants = {\r\n inFromRight: {\r\n opacity: 1,\r\n x: 0,\r\n transition: { duration: 0.18, ease: [0.16, 1, 0.3, 1] },\r\n },\r\n outToLeft: {\r\n opacity: 0,\r\n x: -24,\r\n transition: { duration: 0.16, ease: [0.4, 0, 1, 1] },\r\n },\r\n inFromLeft: {\r\n opacity: 1,\r\n x: 0,\r\n transition: { duration: 0.18, ease: [0.16, 1, 0.3, 1] },\r\n },\r\n outToRight: {\r\n opacity: 0,\r\n x: 24,\r\n transition: { duration: 0.16, ease: [0.4, 0, 1, 1] },\r\n },\r\n };\r\n\r\n return (\r\n <div className={cn(\"h-[64px] border-b border-[#ededed]\", className)}>\r\n <div className=\"flex h-full items-center px-[20px]\">\r\n <AnimatePresence initial={false} mode=\"wait\">\r\n {!searching ? (\r\n /* =======================\r\n Normal header\r\n ======================= */\r\n <motion.div\r\n key=\"normal\"\r\n className=\"flex w-full items-center justify-between\"\r\n initial={{ opacity: 0, x: -24 }}\r\n animate=\"inFromLeft\"\r\n exit=\"outToLeft\"\r\n variants={variants}\r\n >\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"flex items-center gap-2 text-[#2c2c2c]\">\r\n <MessageIcon className=\"h-6 w-6\" />\r\n <span className=\"text-[22px] font-semibold\">Messenger</span>\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n type=\"button\"\r\n title=\"Search\"\r\n onClick={() => setSearching(true)}\r\n className=\"flex h-9 w-9 items-center justify-center rounded-full hover:bg-black/5\"\r\n >\r\n <ChatSearchIcon className=\"h-6 w-6\" />\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n title=\"Close\"\r\n onClick={onClose}\r\n className=\"flex h-9 w-9 items-center justify-center rounded-full hover:bg-black/5\"\r\n >\r\n <ChatXIcon className=\"h-6 w-6\" />\r\n </button>\r\n </div>\r\n </motion.div>\r\n ) : (\r\n /* =======================\r\n Search header\r\n ======================= */\r\n <motion.div\r\n key=\"search\"\r\n className=\"flex w-full items-center gap-3\"\r\n initial={{ opacity: 0, x: 24 }}\r\n animate=\"inFromRight\"\r\n exit=\"outToRight\"\r\n variants={variants}\r\n >\r\n <div className=\"relative flex-1\">\r\n <div className=\"flex justify-between h-10 w-full items-center gap-1.5 rounded-full border border-[#6A6A6A] bg-white px-[4px]\">\r\n <div className=\"ms-[12px] flex items-center\">\r\n <span className=\"mr-2 grid h-6 w-6 shrink-0 place-items-center text-#929292]\">\r\n <ChatSearchIcon className=\"h-5 w-5\" />\r\n </span>\r\n <span className=\"mr-2 h-6 w-px shrink-0 bg-[#e1e1e1]\" />\r\n <input\r\n ref={inputRef}\r\n value={q}\r\n onChange={(e) => {\r\n setQ(e.target.value);\r\n onSearchChange?.(e.target.value);\r\n }}\r\n placeholder=\"Search\"\r\n className=\"h-full w-full flex-1 bg-transparent text-[15px] outline-none placeholder:text-[#9C9C9C]\"\r\n />\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n title=\"Close search\"\r\n onClick={() => {\r\n setSearching(false);\r\n setQ(\"\");\r\n onSearchChange?.(\"\");\r\n }}\r\n className=\"flex h-8! w-8! items-center justify-center rounded-full hover:bg-black/5\"\r\n >\r\n <ChatXIcon className=\"h-5 w-5\" />\r\n </button>\r\n </div>\r\n </div>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatListHeader;\r\n","// components/ui/chat/message-items/ChatAddressCard.tsx\r\n\"use client\";\r\n\r\nimport clsx from \"clsx\";\r\nimport React from \"react\";\r\n\r\nimport { ChatPhoneCallIcon, BadgeHomeIcon, MapPinIcon } from \"../../../icons\";\r\nimport { BadgeOfficeIcon } from \"../../../icons\";\r\nimport { cn } from \"../../../utils/cn\";\r\nimport type { AddressCard } from \"../types\";\r\n\r\ntype Props = {\r\n mine?: boolean;\r\n card: AddressCard;\r\n className?: string;\r\n};\r\n\r\ntype RowProps = {\r\n icon: React.ReactNode;\r\n label: string;\r\n value?: string | null;\r\n highlight?: boolean;\r\n};\r\n\r\nconst Row: React.FC<RowProps> = ({ icon, label, value, highlight }) => {\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n\r\n const trimmed = String(value).trim();\r\n if (!trimmed) {\r\n return null;\r\n }\r\n\r\n const display = trimmed.length > 0 ? trimmed : \"N/A\";\r\n\r\n return (\r\n <div className=\"grid grid-cols-[18px_120px_1fr] items-start gap-1 text-xs\">\r\n <span className=\"pt-[2px] text-black\">{icon}</span>\r\n <strong className=\"truncate font-medium text-black\">{label}</strong>\r\n <span className={cn(highlight ? \"text-black\" : \"text-[#747474]\")}>{display}</span>\r\n </div>\r\n );\r\n};\r\n\r\nconst ChatAddressCard: React.FC<Props> = ({ mine, card, className }) => {\r\n const {\r\n name,\r\n label,\r\n businessName,\r\n mobileNumber,\r\n country,\r\n district,\r\n policeStation,\r\n postalCode,\r\n addressLine,\r\n landMark,\r\n } = card;\r\n\r\n // Build combined address:\r\n // Landmark, Address line, Police Station, District, Postal Code, Country\r\n const addressParts: string[] = [];\r\n\r\n if (landMark?.trim()) {\r\n addressParts.push(landMark.trim());\r\n }\r\n if (addressLine?.trim()) {\r\n addressParts.push(addressLine.trim());\r\n }\r\n if (policeStation?.trim()) {\r\n addressParts.push(policeStation.trim());\r\n }\r\n if (district?.trim()) {\r\n addressParts.push(district.trim());\r\n }\r\n if (postalCode?.trim()) {\r\n addressParts.push(postalCode.trim());\r\n }\r\n if (country?.trim()) {\r\n addressParts.push(country.trim());\r\n }\r\n\r\n const combinedAddress = addressParts.length > 0 ? `${addressParts.join(\", \")}.` : undefined;\r\n\r\n const badge = label ? (\r\n <span className=\"inline-flex h-[21px] items-center gap-1 rounded-xs bg-[#FFDBCF] px-2 py-[2px] text-[10px] text-[#ff5301]\">\r\n {label.toLowerCase() === \"office\" ? (\r\n <BadgeOfficeIcon className=\"h-3 w-3\" />\r\n ) : (\r\n <BadgeHomeIcon className=\"h-3 w-3\" />\r\n )}\r\n {label}\r\n </span>\r\n ) : null;\r\n\r\n return (\r\n <div\r\n className={clsx(\r\n \"w-[340px] rounded-md bg-[#f8f8f8] p-2\",\r\n mine ? \"ml-auto\" : \"mr-auto\",\r\n className,\r\n )}\r\n >\r\n {/* Header */}\r\n <div className=\"mb-2 flex items-center gap-2\">\r\n <h3 className=\"text-xl font-semibold text-black\">{name || \"Recipient\"}</h3>\r\n {badge}\r\n </div>\r\n\r\n {/* Fields */}\r\n <div className=\"space-y-[2px]\">\r\n <Row\r\n highlight\r\n icon={<BadgeOfficeIcon className=\"h-[14px] w-[14px]\" />}\r\n label=\"Business Name\"\r\n value={businessName ?? undefined}\r\n />\r\n <Row\r\n highlight\r\n icon={<ChatPhoneCallIcon className=\"h-[14px] w-[14px]\" />}\r\n label=\"Mobile Number\"\r\n value={mobileNumber ?? undefined}\r\n />\r\n <Row icon={<MapPinIcon className=\"h-4 w-4\" />} label=\"Address\" value={combinedAddress} />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatAddressCard;\r\n","\"use client\";\r\n\r\nimport clsx from \"clsx\";\r\nimport React from \"react\";\r\n\r\nexport type ChatAudio = {\r\n /** Local or remote audio file (e.g. \"/chat/audio/sample.mp3\") */\r\n src?: string;\r\n /** Optional display-only duration; will be auto-derived if omitted */\r\n duration?: string;\r\n};\r\n\r\nconst formatSec = (s: number) => {\r\n if (!isFinite(s) || s < 0) {\r\n return \"0:00\";\r\n }\r\n const m = Math.floor(s / 60);\r\n const ss = Math.floor(s % 60)\r\n .toString()\r\n .padStart(2, \"0\");\r\n return `${m}:${ss}`;\r\n};\r\n\r\nconst PlayIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg viewBox=\"0 0 20 20\" className={className} fill=\"currentColor\" aria-hidden>\r\n <path d=\"M6 4.5v11l9-5.5-9-5.5Z\" />\r\n </svg>\r\n);\r\n\r\nconst PauseIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg viewBox=\"0 0 20 20\" className={className} fill=\"currentColor\" aria-hidden>\r\n <path d=\"M5 4h4v12H5V4zm6 0h4v12h-4V4z\" />\r\n </svg>\r\n);\r\n\r\n/** Registry so only one audio plays at a time */\r\nconst audioRegistry = new Set<HTMLAudioElement>();\r\n\r\nconst ChatBubbleAudio: React.FC<{ mine: boolean; audio: ChatAudio }> = ({ mine, audio }) => {\r\n const ref = React.useRef<HTMLAudioElement>(null);\r\n const trackRef = React.useRef<HTMLDivElement>(null);\r\n\r\n const [playing, setPlaying] = React.useState(false);\r\n const [progress, setProgress] = React.useState(0); // 0..100\r\n const [durSec, setDurSec] = React.useState<number>(0);\r\n const [remain, setRemain] = React.useState<string>(audio.duration ?? \"0:00\");\r\n\r\n // Register/unregister this audio element\r\n React.useEffect(() => {\r\n const a = ref.current;\r\n if (!a) {\r\n return;\r\n }\r\n audioRegistry.add(a);\r\n const onPause = () => setPlaying(false);\r\n const onPlay = () => setPlaying(true);\r\n a.addEventListener(\"pause\", onPause);\r\n a.addEventListener(\"play\", onPlay);\r\n return () => {\r\n a.removeEventListener(\"pause\", onPause);\r\n a.removeEventListener(\"play\", onPlay);\r\n audioRegistry.delete(a);\r\n };\r\n }, []);\r\n\r\n const pauseOthers = (current: HTMLAudioElement) => {\r\n audioRegistry.forEach((a) => {\r\n if (a !== current && !a.paused) {\r\n a.pause(); // their 'pause' listener updates their local state\r\n }\r\n });\r\n };\r\n\r\n const applyProgressToAudio = (pct: number) => {\r\n const a = ref.current;\r\n if (!a || !isFinite(a.duration) || a.duration <= 0) {\r\n return;\r\n }\r\n const clamped = Math.min(100, Math.max(0, pct));\r\n a.currentTime = (clamped / 100) * a.duration;\r\n setProgress(clamped);\r\n setRemain(formatSec(a.duration - a.currentTime));\r\n };\r\n\r\n const toggle = () => {\r\n const a = ref.current;\r\n if (!a) {\r\n return;\r\n }\r\n if (a.paused) {\r\n pauseOthers(a);\r\n a.play();\r\n // setPlaying will be driven by 'play' event too; keep optimistic:\r\n setPlaying(true);\r\n } else {\r\n a.pause();\r\n setPlaying(false);\r\n }\r\n };\r\n\r\n const onTime = () => {\r\n const a = ref.current;\r\n if (!a) {\r\n return;\r\n }\r\n const pct = (a.currentTime / (a.duration || 1)) * 100;\r\n setProgress(isFinite(pct) ? pct : 0);\r\n setRemain(formatSec((a.duration || 0) - a.currentTime));\r\n };\r\n\r\n const onLoaded = () => {\r\n const a = ref.current;\r\n if (!a) {\r\n return;\r\n }\r\n setDurSec(a.duration || 0);\r\n setRemain(formatSec(a.duration || 0));\r\n };\r\n\r\n // --- custom slider (no borders), draggable ---------------------------------\r\n const pctFromClientX = (clientX: number) => {\r\n const el = trackRef.current;\r\n if (!el) {\r\n return progress;\r\n }\r\n const rect = el.getBoundingClientRect();\r\n const x = clientX - rect.left;\r\n const pct = (x / rect.width) * 100;\r\n return Math.min(100, Math.max(0, pct));\r\n };\r\n\r\n const handleTrackClick = (e: React.MouseEvent<HTMLDivElement>) => {\r\n applyProgressToAudio(pctFromClientX(e.clientX));\r\n };\r\n\r\n const handlePointerDown = (e: React.PointerEvent<HTMLDivElement>) => {\r\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\r\n applyProgressToAudio(pctFromClientX(e.clientX));\r\n };\r\n\r\n const handlePointerMove = (e: React.PointerEvent<HTMLDivElement>) => {\r\n if ((e.currentTarget as HTMLDivElement).hasPointerCapture(e.pointerId)) {\r\n applyProgressToAudio(pctFromClientX(e.clientX));\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"h-9 max-w-[260px] rounded-lg border border-[#E5E5E5] bg-white px-[3px] py-[3px]\">\r\n <div className=\"flex items-center gap-3\">\r\n {/* Play/Pause pill */}\r\n <button\r\n type=\"button\"\r\n aria-label={playing ? \"Pause\" : \"Play\"}\r\n onClick={toggle}\r\n className={clsx(\r\n \"grid h-7 w-[34px] place-items-center rounded-md transition-colors\",\r\n mine ? \"bg-[#F1F1F1] text-[#00486F]\" : \"bg-[#F1F1F1] text-[#00486F]\",\r\n )}\r\n >\r\n {playing ? <PauseIcon className=\"h-4 w-4\" /> : <PlayIcon className=\"h-4 w-4\" />}\r\n </button>\r\n\r\n {/* Track (custom, borderless, draggable) */}\r\n <div\r\n ref={trackRef}\r\n onClick={handleTrackClick}\r\n onPointerDown={handlePointerDown}\r\n onPointerMove={handlePointerMove}\r\n className=\"relative h-[4px] w-[186px] cursor-pointer select-none rounded-full bg-[#BDBDBD]\"\r\n aria-label=\"Seek\"\r\n role=\"slider\"\r\n aria-valuemin={0}\r\n aria-valuemax={100}\r\n aria-valuenow={Math.round(progress)}\r\n >\r\n {/* filled portion */}\r\n <div\r\n className=\"absolute left-0 top-0 h-full rounded-full bg-[#747474]\"\r\n style={{ width: `${progress}%` }}\r\n />\r\n {/* knob */}\r\n <div\r\n className=\"absolute top-1/2 -translate-y-1/2 h-3 w-3 rounded-full bg-[#747474]\"\r\n style={{ left: `calc(${progress}% - 6px)` }}\r\n />\r\n </div>\r\n\r\n {/* Countdown (remaining) */}\r\n <span className=\"pe-[4px] text-xs font-normal text-[#747474]\">\r\n {remain || (durSec ? formatSec(durSec) : \"0:00\")}\r\n </span>\r\n </div>\r\n\r\n {audio.src ? (\r\n <audio\r\n ref={ref}\r\n src={audio.src}\r\n preload=\"metadata\"\r\n onTimeUpdate={onTime}\r\n onLoadedMetadata={onLoaded}\r\n onEnded={() => setPlaying(false)}\r\n className=\"hidden\"\r\n />\r\n ) : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatBubbleAudio;\r\n","import clsx from \"clsx\";\r\nimport React from \"react\";\r\nimport { FileDownloadIcon, FileIcon } from \"../../../icons\";\r\n\r\nexport type ChatFile = {\r\n /** Visible filename */\r\n name: string;\r\n /** File size in MB (display only) */\r\n sizeMB: number;\r\n /** File extension, e.g. \"pdf\" | \"pptx\" | \"docx\" */\r\n ext: string;\r\n /** Local or remote path to the file (e.g. \"/chat/files/spec.pdf\") */\r\n href?: string;\r\n /** Optional: force browser download */\r\n downloadName?: string;\r\n};\r\n\r\nconst extColor = (ext: string) => {\r\n const e = ext.toLowerCase();\r\n if (e === \"pdf\") {\r\n return \"text-[#D93025]\";\r\n }\r\n if (e === \"ppt\" || e === \"pptx\") {\r\n return \"text-[#E69138]\";\r\n }\r\n if (e === \"doc\" || e === \"docx\") {\r\n return \"text-[#2B579A]\";\r\n }\r\n return \"text-[#6B7280]\";\r\n};\r\n\r\nconst FileChip: React.FC<{ file: ChatFile }> = ({ file }) => (\r\n <div className=\"flex items-center justify-between gap-3 rounded-sm border border-[#e1e1e1] bg-white px-3 py-2\">\r\n <div className=\"flex min-w-0 items-center gap-2\">\r\n <div className=\"min-w-0\">\r\n <div className=\"flex items-center gap-1\">\r\n <FileIcon className={clsx(\"h-[18px] w-[18px]\", extColor(file.ext))} />{\" \"}\r\n <div className=\"truncate text-xs font-normal text-black\">{file.name}</div>\r\n </div>\r\n <div className=\"flex items-center gap-2 text-[10px] text-[#636363] mt-2\">\r\n <span>{file.sizeMB.toFixed(1)} MB</span>\r\n <span className=\"h-3 w-px bg-[#e1e1e1]\" />\r\n <span className=\"uppercase\">{file.ext}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"flex items-center gap-3\">\r\n <span className=\"h-[41px] w-px bg-[#cacaca]\" />\r\n {file.href ? (\r\n <a\r\n href={file.href}\r\n download={file.downloadName}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"flex h-7 w-[28px] items-center justify-center rounded-full text-black hover:text-[#ff5301] shadow-[0px_2px_4px_0px_#A5A3AE4D]\"\r\n title={file.downloadName}\r\n aria-label={file.downloadName}\r\n >\r\n <FileDownloadIcon className=\"h-5 w-5\" />\r\n </a>\r\n ) : (\r\n <span className=\"flex h-7 w-[28px] items-center justify-center rounded-full text-[#9ca3af]\">\r\n <FileDownloadIcon className=\"h-5 w-5\" />\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n);\r\n\r\nconst ChatBubbleFiles: React.FC<{ files: ChatFile[] }> = ({ files }) => {\r\n return (\r\n <div className=\"flex max-w-[260px] flex-col gap-1\">\r\n {files.map((f, i) => (\r\n <FileChip key={i} file={f} />\r\n ))}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatBubbleFiles;\r\n","// components/ui/chat/message-items/ChatBubbleImages.tsx\r\n\"use client\";\r\n\r\nimport React from \"react\";\r\n\r\nimport { useGallery } from \"../../../contexts/GalleryContext\";\r\n\r\ntype ImgTileProps = {\r\n src: string;\r\n w: number;\r\n h: number;\r\n overlayText?: string;\r\n onClick?: () => void;\r\n};\r\n\r\nconst ImgTile: React.FC<ImgTileProps> = ({ src, w, h, overlayText, onClick }) => {\r\n return (\r\n <button\r\n type=\"button\"\r\n onClick={onClick}\r\n className=\"relative cursor-zoom-in overflow-hidden rounded-sm border border-[#EFEFEF] bg-[#F5F7FA]\"\r\n style={{ width: w, height: h }}\r\n aria-label=\"Open image\"\r\n >\r\n <img\r\n src={src}\r\n alt=\"\"\r\n width={w}\r\n height={h}\r\n className=\"h-full w-full object-cover\"\r\n loading=\"lazy\"\r\n />\r\n\r\n {overlayText ? (\r\n <div className=\"absolute inset-0 grid place-items-center bg-black/35\">\r\n <span className=\"text-4xl font-semibold text-white\">+{overlayText}</span>\r\n </div>\r\n ) : null}\r\n </button>\r\n );\r\n};\r\n\r\ntype Props = {\r\n images: string[];\r\n};\r\n\r\nconst ChatBubbleImages: React.FC<Props> = ({ images }) => {\r\n const { openGallery } = useGallery();\r\n\r\n const openAt = (index: number) => {\r\n openGallery(\r\n images.map((url) => ({\r\n type: \"image\",\r\n url,\r\n altText: \"Chat image\",\r\n })),\r\n index,\r\n );\r\n };\r\n\r\n const count = images.length;\r\n\r\n // 1 image → 260 × 174\r\n if (count === 1) {\r\n return <ImgTile src={images[0]} w={260} h={174} onClick={() => openAt(0)} />;\r\n }\r\n\r\n // 2 images → 2 columns, 125 × 83\r\n if (count === 2) {\r\n return (\r\n <div className=\"grid grid-cols-2 gap-1\">\r\n {images.map((src, i) => (\r\n <ImgTile key={src + i} src={src} w={125} h={83} onClick={() => openAt(i)} />\r\n ))}\r\n </div>\r\n );\r\n }\r\n\r\n // 3 images → asymmetric layout\r\n if (count === 3) {\r\n const [a, b, c] = images;\r\n\r\n return (\r\n <div className=\"grid grid-cols-[125px_125px] gap-1\">\r\n {/* Left column */}\r\n <div className=\"flex flex-col gap-2\">\r\n <div style={{ width: 125, height: 83 }} />\r\n <ImgTile src={a} w={125} h={83} onClick={() => openAt(0)} />\r\n </div>\r\n\r\n {/* Right column */}\r\n <div className=\"flex flex-col gap-2\">\r\n <ImgTile src={b} w={125} h={83} onClick={() => openAt(1)} />\r\n <ImgTile src={c} w={125} h={83} onClick={() => openAt(2)} />\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // 4+ images → 2×2 grid, overlay on last tile\r\n const visible = images.slice(0, 4);\r\n const extraCount = count - 4;\r\n\r\n return (\r\n <div className=\"grid grid-cols-2 gap-1\">\r\n {visible.map((src, i) => (\r\n <ImgTile\r\n key={src + i}\r\n src={src}\r\n w={125}\r\n h={83}\r\n overlayText={i === 3 && extraCount > 0 ? String(extraCount) : undefined}\r\n onClick={() => openAt(i)}\r\n />\r\n ))}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatBubbleImages;\r\n","// ChatBubbleText.tsx\r\nimport clsx from \"clsx\";\r\nimport React from \"react\";\r\n\r\nconst ChatBubbleText: React.FC<{ mine: boolean; text: string }> = ({ mine, text }) => {\r\n const base =\r\n \"max-w-[289px] rounded-sm border border-[#f1f1f1] px-4 py-2.5 text-xs font-normal\";\r\n const color = mine ? \"bg-[#f8f8f8] border-[#f1f1f1]\" : \"bg-white border-[#EFEFEF]\";\r\n const corner = mine ? \"rounded-tr-[6px]\" : \"rounded-tl-md\";\r\n // key bit: preserve line breaks + spaces and still wrap long words\r\n const textFormatting = \"whitespace-pre-wrap break-words\";\r\n\r\n return <div className={clsx(base, color, corner, textFormatting)}>{text}</div>;\r\n};\r\n\r\nexport default ChatBubbleText;\r\n","\"use client\";\r\n\r\nimport clsx from \"clsx\";\r\nimport React from \"react\";\r\n\r\nimport { BusinessInfoIcon, ChatMailIcon, ChatPhoneCallIcon } from \"../../../icons\";\r\nimport type { BusinessCard } from \"../types\";\r\n\r\n// const AVATAR_SIZE = 60; // uncomment if avatar section is re-enabled\r\n\r\ntype Props = {\r\n mine: boolean;\r\n card: BusinessCard;\r\n};\r\n\r\nconst ChatBusinessCard: React.FC<Props> = ({ mine, card }) => {\r\n // const avatarSrc = card.avatarSrc || \"/images/avatar-fallback.png\";\r\n\r\n return (\r\n <div\r\n className={clsx(\r\n \"relative h-[208px] w-[355px] overflow-hidden rounded-[12px] bg-white bg-cover bg-no-repeat\",\r\n \"shadow-[0_2px_12px_rgba(59,51,51,0.1)]\",\r\n mine ? \"ml-auto\" : \"mr-auto\",\r\n )}\r\n style={{ backgroundImage: \"url('/chat/img/card_bg_raw.svg')\" }}\r\n >\r\n <div className=\"flex h-full items-stretch justify-between gap-4 px-6 py-6\">\r\n {/* Left content */}\r\n <div className=\"flex min-w-0 flex-1 flex-col justify-between\">\r\n {/* Name + country */}\r\n <div>\r\n <h3 className=\"text-xl font-semibold text-[#004F4F]\">{card.name}</h3>\r\n\r\n <div className=\"h-px w-[105px] bg-black\" />\r\n\r\n <div className=\"mt-[6px] flex items-center gap-2\">\r\n <img\r\n src=\"https://flagcdn.com/bd.svg\"\r\n alt=\"Bangladesh flag\"\r\n width={24}\r\n height={14}\r\n className=\"h-[14px] w-6 rounded-xs object-cover\"\r\n loading=\"lazy\"\r\n />\r\n <span className=\"text-xs font-medium text-[#636363]\">\r\n {card.country}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Contact details */}\r\n <div className=\"mt-4 mb-10 space-y-1.5 text-xs text-black\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"flex h-5 w-5 items-center justify-center rounded-full bg-[#FFE9DB]\">\r\n <BusinessInfoIcon className=\"h-3 w-3 text-[#EA580C]\" />\r\n </div>\r\n <span className=\"truncate\">{card.company}</span>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"flex h-5 w-5 items-center justify-center rounded-full bg-[#FFE9DB]\">\r\n <ChatMailIcon className=\"h-3 w-3 text-[#EA580C]\" />\r\n </div>\r\n <span className=\"truncate\">{card.email}</span>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"flex h-5 w-5 items-center justify-center rounded-full bg-[#FFE9DB]\">\r\n <ChatPhoneCallIcon className=\"h-3 w-3 text-[#EA580C]\" />\r\n </div>\r\n <span className=\"truncate\">{card.phone}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Right avatar (kept commented as per original behavior) */}\r\n {/* \r\n <div className=\"flex items-start\">\r\n <img\r\n src={avatarSrc}\r\n alt={`${card.name ?? \"Contact\"} avatar`}\r\n width={AVATAR_SIZE}\r\n height={AVATAR_SIZE}\r\n className=\"rounded-sm border border-[#f1f1f1] object-cover\"\r\n loading={mine ? \"eager\" : \"lazy\"}\r\n />\r\n </div> \r\n */}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatBusinessCard;\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\n\r\nimport { MessageReplayIcon } from \"../../icons\";\r\nimport { NewLanguageIcon } from \"../../icons\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\n\r\ntype ItemButton = \"replay\" | \"translate\";\r\n\r\ntype Props = {\r\n mine: boolean;\r\n onReply?: () => void;\r\n onTranslate?: () => void;\r\n children: React.ReactNode;\r\n className?: string;\r\n alwaysVisible?: boolean;\r\n\r\n /** Which buttons to show (omit => show all) */\r\n isItemButton?: ItemButton[];\r\n /** Which buttons are “active/on” for styling */\r\n activeButtons?: ItemButton[];\r\n};\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\n\r\nconst MessageHoverActions: React.FC<Props> = ({\r\n mine,\r\n onReply,\r\n onTranslate,\r\n children,\r\n className,\r\n alwaysVisible = false,\r\n isItemButton,\r\n activeButtons,\r\n}) => {\r\n const sidePos = mine ? \"right-full\" : \"left-full\";\r\n const railNudge = mine ? \"-translate-x-1.5\" : \"translate-x-1.5\";\r\n\r\n const showReplay = !isItemButton || isItemButton.includes(\"replay\");\r\n const showTranslate = !isItemButton || isItemButton.includes(\"translate\");\r\n const hasAny = showReplay || showTranslate;\r\n\r\n const isActive = (k: ItemButton) => Boolean(activeButtons?.includes(k));\r\n\r\n return (\r\n <div className={cn(\"relative inline-flex group/message\", className)}>\r\n {children}\r\n\r\n {hasAny ? (\r\n <div\r\n aria-hidden\r\n className={cn(\r\n \"pointer-events-auto absolute inset-y-0 w-2\",\r\n mine ? \"right-full\" : \"left-full\",\r\n )}\r\n />\r\n ) : null}\r\n\r\n {hasAny ? (\r\n <div\r\n className={cn(\r\n \"pointer-events-auto absolute bottom-0 transition-opacity\",\r\n sidePos,\r\n railNudge,\r\n alwaysVisible ? \"opacity-100\" : \"opacity-0 group-hover/message:opacity-100\",\r\n )}\r\n >\r\n <div className=\"flex gap-2 pb-[2px]\">\r\n {showReplay ? (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onReply?.();\r\n }}\r\n className={cn(\r\n \"inline-flex h-[22px] w-[22px] items-center justify-center rounded-xs bg-white \",\r\n \"shadow-[0_1px_3px_rgba(0,0,0,0.08)] hover:bg-[#f8f8f8]\",\r\n isActive(\"replay\") ? \"bg-[#636363] text-white\" : \"text-[#2c2c2c]\",\r\n )}\r\n title=\"Reply\"\r\n aria-label=\"Reply\"\r\n >\r\n <MessageReplayIcon className=\"h-[14px] w-[14px]\" />\r\n </button>\r\n ) : null}\r\n\r\n {showTranslate ? (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onTranslate?.();\r\n }}\r\n className={cn(\r\n \"inline-flex h-[22px] w-[22px] items-center justify-center rounded-xs bg-white \",\r\n \"shadow-banbox-card-secondary hover:bg-[#f8f8f8]\",\r\n isActive(\"translate\") ? \"bg-[#636363]! text-white\" : \"text-[#2c2c2c]\",\r\n )}\r\n title=\"Translate\"\r\n aria-label=\"Translate\"\r\n >\r\n <NewLanguageIcon className=\"h-[14px] w-[14px]\" />\r\n </button>\r\n ) : null}\r\n </div>\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport default MessageHoverActions;\r\n","\"use client\";\r\n\r\nimport { useMemo, useState } from \"react\";\r\n\r\nimport ChatAddressCard from \"./message-items/ChatAddressCard\";\r\nimport ChatBubbleAudio from \"./message-items/ChatBubbleAudio\";\r\nimport ChatBubbleFiles from \"./message-items/ChatBubbleFiles\";\r\nimport ChatBubbleImages from \"./message-items/ChatBubbleImages\";\r\nimport ChatBubbleText from \"./message-items/ChatBubbleText\";\r\nimport ChatBusinessCard from \"./message-items/ChatBusinessCard\";\r\nimport MessageHoverActions from \"./MessageHoverActions\";\r\nimport ReplyCard from \"./ReplyCard\";\r\nimport type { AddressCard, BusinessCard, MessageRef } from \"./types\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\n/* =======================\r\n Demo translator\r\n======================= */\r\n\r\nconst toBanglaDemo = (s: string): string => {\r\n const map: Record<string, string> = {\r\n Hi: \"হাই\",\r\n \"Do you have a freight forwarder in China?\": \"আপনার কি চীনে কোনো ফ্রেইট ফরওয়ার্ডার আছে?\",\r\n \"This conversation is empty. Say hi 👋\": \"এই কথোপকথনটি খালি । হাই হাই হাই বলুন 👋\",\r\n \"Can we schedule a call for tomorrow?\": \"আমরা কি আগামীকাল একটি কল নির্ধারণ করতে পারি?\",\r\n \"Sure, what time suits you?\": \"অবশ্যই, আপনার জন্য কোন সময়টি সুবিধাজনক?\",\r\n \"Welcome to Global Marketplace\": \"গ্লোবাল মার্কেটপ্লেসে আপনাকে স্বাগতম 🎉\",\r\n \"Happy to be here!\": \"এখানে থাকতে পেরে আনন্দিত!\",\r\n };\r\n\r\n if (map[s]) {\r\n return map[s];\r\n }\r\n\r\n return `বাংলা ${s}`;\r\n};\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\n\r\nexport type ChatAudio = {\r\n src?: string;\r\n duration?: string;\r\n};\r\n\r\nexport type ChatFile = {\r\n name: string;\r\n sizeMB: number;\r\n ext: string;\r\n href?: string;\r\n downloadName?: string;\r\n};\r\n\r\nexport type ChatMessageItemProps = {\r\n id: string;\r\n mine?: boolean;\r\n time: string;\r\n authorInitial?: string;\r\n avatarBg?: string;\r\n\r\n text?: string;\r\n businessCard?: BusinessCard;\r\n addressCard?: AddressCard;\r\n images?: string[];\r\n files?: ChatFile[];\r\n audio?: ChatAudio;\r\n\r\n replyTo?: MessageRef;\r\n showStatus?: boolean;\r\n status?: string;\r\n className?: string;\r\n\r\n onReply?: () => void;\r\n onTranslate?: () => void;\r\n\r\n initialSrc?: string;\r\n};\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\n\r\nconst ChatMessageItem = ({\r\n id,\r\n mine = false,\r\n time,\r\n authorInitial = \"U\",\r\n avatarBg = \"#ffffff\",\r\n text,\r\n businessCard,\r\n addressCard,\r\n images,\r\n files,\r\n audio,\r\n replyTo,\r\n showStatus = false,\r\n status = \"Seen\",\r\n className,\r\n onReply,\r\n onTranslate,\r\n initialSrc,\r\n}: ChatMessageItemProps) => {\r\n const originalText = useMemo(() => text ?? \"\", [text]);\r\n const [translated, setTranslated] = useState(false);\r\n\r\n const displayText = translated ? toBanglaDemo(originalText) : originalText;\r\n\r\n const handleTranslateClick = () => {\r\n setTranslated((v) => !v);\r\n onTranslate?.();\r\n };\r\n\r\n const isOnline = true;\r\n\r\n return (\r\n <div className={cn(\"mb-4\", className)} data-msg-id={id}>\r\n <div className={cn(\"flex items-end gap-3\", mine && \"justify-end\")}>\r\n {!mine ? (\r\n <div className={cn(showStatus ? \"mb-5\" : \"mb-0\")}>\r\n {initialSrc ? (\r\n <div className=\"relative h-10 w-10 shrink-0 rounded-full border border-[#F1F1F1]\">\r\n <img\r\n src={initialSrc}\r\n alt=\"avatar image\"\r\n className=\"h-full w-full rounded-full object-cover\"\r\n />\r\n\r\n {isOnline ? (\r\n <span className=\"absolute bottom-0 right-0 h-[11.25px] w-[11.25px] rounded-full bg-[#328545] ring-1 ring-white\" />\r\n ) : null}\r\n </div>\r\n ) : (\r\n <div\r\n className=\"relative grid h-10 w-10 shrink-0 place-items-center rounded-full border border-[#f1f1f1] font-semibold text-[#2c2c2c]\"\r\n style={{ backgroundColor: avatarBg }}\r\n >\r\n {authorInitial}\r\n\r\n {isOnline ? (\r\n <span className=\"absolute bottom-0 right-0 h-[11.25px] w-[11.25px] rounded-full bg-[#328545] ring-1 ring-white\" />\r\n ) : null}\r\n </div>\r\n )}\r\n </div>\r\n ) : null}\r\n\r\n <div className=\"flex w-full flex-col gap-1\">\r\n <div\r\n className={cn(\r\n \"text-xs font-light text-[#636363]\",\r\n mine ? \"text-right\" : \"text-left\",\r\n )}\r\n >\r\n {time}\r\n </div>\r\n\r\n <div className={cn(\"flex w-full flex-col gap-1\", mine ? \"items-end\" : \"items-start\")}>\r\n {/* Reply preview */}\r\n <div className={cn(\"flex w-full\", mine ? \"justify-end\" : \"justify-start\")}>\r\n {replyTo ? <ReplyCard jumpOnClick refMsg={replyTo} compact className=\"mb-1\" /> : null}\r\n </div>\r\n\r\n {businessCard ? <ChatBusinessCard mine={mine} card={businessCard} /> : null}\r\n {addressCard ? <ChatAddressCard mine={mine} card={addressCard} /> : null}\r\n\r\n {files?.length ? (\r\n <MessageHoverActions mine={mine} onReply={onReply} isItemButton={[\"replay\"]}>\r\n <ChatBubbleFiles files={files} />\r\n </MessageHoverActions>\r\n ) : null}\r\n\r\n {images?.length ? (\r\n <MessageHoverActions mine={mine} onReply={onReply} isItemButton={[\"replay\"]}>\r\n <ChatBubbleImages images={images} />\r\n </MessageHoverActions>\r\n ) : null}\r\n\r\n {audio ? (\r\n <MessageHoverActions\r\n mine={mine}\r\n onReply={onReply}\r\n onTranslate={onTranslate}\r\n isItemButton={[\"replay\", \"translate\"]}\r\n >\r\n <ChatBubbleAudio mine={mine} audio={audio} />\r\n </MessageHoverActions>\r\n ) : null}\r\n\r\n {typeof text === \"string\" && text.length > 0 ? (\r\n <MessageHoverActions\r\n mine={mine}\r\n onReply={onReply}\r\n onTranslate={handleTranslateClick}\r\n isItemButton={[\"replay\", \"translate\"]}\r\n activeButtons={translated ? [\"translate\"] : []}\r\n >\r\n <ChatBubbleText mine={mine} text={displayText} />\r\n </MessageHoverActions>\r\n ) : null}\r\n\r\n {showStatus ? (\r\n <div className={cn(\"text-xs text-[#9AA1A9]\", mine ? \"text-right\" : \"text-left\")}>\r\n {status}\r\n </div>\r\n ) : null}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatMessageItem;\r\n","\"use client\";\r\nimport clsx from \"clsx\";\r\nimport React from \"react\";\r\n\r\ntype Props = {\r\n top?: React.ReactNode;\r\n children: React.ReactNode;\r\n className?: string;\r\n /** set true if you want short threads anchored at the bottom */\r\n bottomAlignWhenShort?: boolean;\r\n /** when this value changes, we auto-scroll to the bottom */\r\n scrollKey?: string | number;\r\n};\r\n\r\nconst ChatScroll: React.FC<Props> = ({\r\n top,\r\n children,\r\n className,\r\n bottomAlignWhenShort = false,\r\n scrollKey,\r\n}) => {\r\n const ref = React.useRef<HTMLDivElement>(null);\r\n\r\n const scrollToBottom = React.useCallback(() => {\r\n const el = ref.current;\r\n if (!el) {\r\n return;\r\n }\r\n el.scrollTop = el.scrollHeight;\r\n }, []);\r\n\r\n // On mount & when scrollKey changes\r\n React.useEffect(() => {\r\n // immediate\r\n scrollToBottom();\r\n // nudge after paint/layout (covers images)\r\n const id = window.setTimeout(scrollToBottom, 0);\r\n return () => window.clearTimeout(id);\r\n }, [scrollKey, scrollToBottom]);\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n data-chat-scroll\r\n className={clsx(\r\n \"h-full min-h-0 overflow-y-auto bg-white p-4 custom-scroll-hidden\",\r\n className,\r\n )}\r\n >\r\n {/* This wrapper ensures content is at least as tall as the scroll area */}\r\n <div\r\n className={clsx(\r\n \"min-h-full flex flex-col\",\r\n bottomAlignWhenShort ? \"justify-end\" : \"justify-start\",\r\n )}\r\n >\r\n {top}\r\n {children}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatScroll;\r\n","\"use client\";\r\n\r\nimport { BlueBadgeIcon } from \"../../icons\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\n\r\nexport type ChatThreadStatus =\r\n | { kind: \"seen\" }\r\n | { kind: \"delivered\" }\r\n | { kind: \"new\"; count: number };\r\n\r\ntype Props = {\r\n active?: boolean;\r\n pinned?: boolean;\r\n online?: boolean;\r\n verified?: boolean;\r\n\r\n title: string;\r\n preview: string;\r\n time: string;\r\n\r\n status: ChatThreadStatus;\r\n\r\n avatarText: string;\r\n avatarSrc?: string;\r\n size?: number;\r\n avatarBg?: string;\r\n className?: string;\r\n onClick?: () => void;\r\n};\r\n\r\n/* =======================\r\n Helpers\r\n======================= */\r\n\r\nconst formatTwoDigits = (value: number): string => {\r\n return String(Math.max(0, value)).padStart(2, \"0\");\r\n};\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\n\r\nconst ChatThreadItem = ({\r\n active = false,\r\n pinned = false,\r\n online = false,\r\n verified = false,\r\n title,\r\n preview,\r\n time,\r\n status,\r\n avatarText,\r\n avatarSrc,\r\n avatarBg = \"#FFE5DA\",\r\n className,\r\n onClick,\r\n}: Props) => {\r\n const statusEl = (() => {\r\n switch (status.kind) {\r\n case \"seen\":\r\n return <span className=\"text-[#005694]\">Seen</span>;\r\n\r\n case \"delivered\":\r\n return <span className=\"text-[#929292]\">Delivered</span>;\r\n\r\n case \"new\":\r\n return <span className=\"text-[#EB2127]\">New {formatTwoDigits(status.count)}</span>;\r\n }\r\n })();\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n onClick={onClick}\r\n className={cn(\r\n \"relative w-full px-5 py-2 text-left focus:outline-none border-b border-[#f1f1f1]\",\r\n \"hover:bg-[#f8f8f8]\",\r\n active && \"bg-[#f8f8f8]\",\r\n className,\r\n )}\r\n >\r\n {/* Pinned corner */}\r\n {pinned ? (\r\n <span className=\"absolute right-0 top-0 h-0 w-0 border-l-16 border-t-16 border-l-transparent border-t-[#FFD2BD]\" />\r\n ) : null}\r\n\r\n <div className=\"flex items-start gap-3\">\r\n <div className=\"relative shrink-0\" style={{ width: 36, height: 36 }}>\r\n {avatarSrc ? (\r\n <div className=\"h-9 w-9 overflow-hidden rounded-[2px] border border-[#f1f1f1]\">\r\n <img src={avatarSrc} alt={title} className=\"h-full w-full rounded-[2px] object-cover\" />\r\n </div>\r\n ) : (\r\n <div\r\n className=\"grid h-9 w-9 place-items-center rounded-[2px] border border-[#f1f1f1] text-[15px] font-semibold text-[#2c2c2c]\"\r\n style={{ backgroundColor: avatarBg }}\r\n >\r\n {avatarText}\r\n </div>\r\n )}\r\n\r\n <span\r\n className={cn(\r\n \"absolute rounded-full\",\r\n online ? \"bg-[#74A380]\" : \"bg-[#EB2127]\",\r\n )}\r\n style={{ bottom: -1.5, right: -1.5, width: 11.25, height: 11.25, border: \"1px solid #FFFFFF\" }}\r\n />\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"min-w-0 flex-1\">\r\n <div className=\"flex items-center gap-1 text-[14px]\">\r\n <span className=\"truncate font-medium text-black\">{title}</span>\r\n {verified ? (\r\n <span>\r\n <BlueBadgeIcon />\r\n </span>\r\n ) : null}\r\n </div>\r\n\r\n <div className=\"truncate text-xs font-normal text-[#2c2c2c]\">\r\n {preview}\r\n </div>\r\n\r\n <div className=\"mt-0.5 flex items-center justify-between text-[12px]\">\r\n <div>{statusEl}</div>\r\n <span className=\"font-light text-[#636363] tracking-[0.5px]\">{time}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </button>\r\n );\r\n};\r\n\r\nexport default ChatThreadItem;\r\n","\"use client\";\n\nimport React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\n/* =======================\n Types\n======================= */\n\ntype Props = {\n /** Pixel box for the animation area */\n size?: number;\n loop?: boolean;\n autoplay?: boolean;\n className?: string;\n ariaLabel?: string;\n /** Avatar size in px */\n avatarSize?: number;\n};\n\n/* =======================\n CSS Typing Dots (no external dependency)\n======================= */\n\nconst TypingDots: React.FC = () => (\n <>\n <style>{`\n @keyframes banbox-typing-bounce {\n 0%, 60%, 100% { transform: translateY(0); opacity: 0.4; }\n 30% { transform: translateY(-5px); opacity: 1; }\n }\n .banbox-typing-dot {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: #888;\n display: inline-block;\n animation: banbox-typing-bounce 1.2s infinite ease-in-out;\n }\n .banbox-typing-dot:nth-child(1) { animation-delay: 0s; }\n .banbox-typing-dot:nth-child(2) { animation-delay: 0.2s; }\n .banbox-typing-dot:nth-child(3) { animation-delay: 0.4s; }\n `}</style>\n <span style={{ display: \"inline-flex\", gap: \"4px\", alignItems: \"center\", height: \"28px\", padding: \"0 8px\" }}>\n <span className=\"banbox-typing-dot\" />\n <span className=\"banbox-typing-dot\" />\n <span className=\"banbox-typing-dot\" />\n </span>\n </>\n);\n\n/* =======================\n Component\n======================= */\n\nconst TypingIndicator: React.FC<Props> = ({\n className,\n ariaLabel = \"Typing…\",\n avatarSize = 40,\n}) => {\n const isOnline = true;\n\n return (\n <div\n className={cn(\"relative flex items-end gap-[6px]\", className)}\n role=\"status\"\n aria-label={ariaLabel}\n >\n {/* Avatar */}\n <div\n className=\"relative shrink-0 rounded-full border border-[#F1F1F1]\"\n style={{ width: avatarSize, height: avatarSize }}\n >\n <img\n src=\"/chat/img/girl_support.png\"\n alt=\"avatar image\"\n className=\"h-full w-full rounded-full object-cover\"\n />\n\n {isOnline ? (\n <span className=\"absolute bottom-0 right-0 h-[11.25px] w-[11.25px] rounded-full bg-[#328545] ring-1 ring-white\" />\n ) : null}\n </div>\n\n {/* Typing dots */}\n <span className=\"absolute bottom-[-13px] left-[30px]\">\n <TypingDots />\n </span>\n </div>\n );\n};\n\nexport default TypingIndicator;\n","import React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\n/* ===========================================================\n ChatSpinner\n Matches the inline-area spinner from the seller app's\n PageLoader (dark dual-ring on white background).\n=========================================================== */\n\ntype Props = {\n className?: string;\n /** Size in px (default 32) */\n size?: number;\n};\n\nconst ChatSpinner: React.FC<Props> = ({ className, size = 32 }) => (\n <>\n <style>{`\n @keyframes banbox-chat-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n <div className={cn(\"flex items-center justify-center\", className)}>\n <svg\n style={{\n width: size,\n height: size,\n animation: \"banbox-chat-spin 1.4s linear infinite\",\n }}\n viewBox=\"0 0 36 36\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle cx=\"18\" cy=\"18\" r=\"15\" stroke=\"#e5e7eb\" strokeWidth=\"3\" />\n <circle\n cx=\"18\"\n cy=\"18\"\n r=\"15\"\n stroke=\"#3d3d3d\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeDasharray=\"22 72\"\n />\n </svg>\n </div>\n </>\n);\n\nexport default ChatSpinner;\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ninterface PortalProps {\n children: React.ReactNode;\n containerId?: string;\n}\n\nexport default function Portal({ children, containerId = \"portal-root\" }: PortalProps) {\n const [container, setContainer] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n let node = document.getElementById(containerId);\n let created = false;\n\n if (!node) {\n node = document.createElement(\"div\");\n node.setAttribute(\"id\", containerId);\n document.body.appendChild(node);\n created = true;\n }\n\n queueMicrotask(() => {\n setContainer(node);\n });\n\n return () => {\n if (created && node?.parentNode) {\n node.parentNode.removeChild(node);\n }\n };\n }, [containerId]);\n\n if (!container) {\n return null;\n }\n return createPortal(children, container);\n}\n","// components/modals/ChatImagePreviewModal.tsx\r\n\"use client\";\r\n\r\nimport { useState, useEffect, useCallback } from \"react\";\r\nimport type { FC, JSX } from \"react\";\r\nimport { AnimatePresence, motion } from \"framer-motion\";\r\nimport { useGallery } from \"../contexts/GalleryContext\";\r\nimport Portal from \"../ui/Portal\";\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\ninterface ChatImagePreviewModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n}\r\n\r\n/* =======================\r\n Slide direction variants\r\n======================= */\r\nconst slideVariants = {\r\n enter: (dir: number) => ({\r\n x: dir > 0 ? 300 : -300,\r\n opacity: 0,\r\n }),\r\n center: { x: 0, opacity: 1 },\r\n exit: (dir: number) => ({\r\n x: dir > 0 ? -300 : 300,\r\n opacity: 0,\r\n }),\r\n};\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\nconst ChatImagePreviewModal: FC<ChatImagePreviewModalProps> = ({\r\n isOpen,\r\n onClose,\r\n}): JSX.Element => {\r\n const { images, currentIndex, setCurrentIndex } = useGallery();\r\n\r\n const current = currentIndex ?? 0;\r\n const total = images?.length ?? 0;\r\n const hasPrev = current > 0;\r\n const hasNext = current < total - 1;\r\n\r\n /* Track slide direction for animation */\r\n const [direction, setDirection] = useState(0);\r\n\r\n const goPrev = useCallback(() => {\r\n if (current > 0) {\r\n setDirection(-1);\r\n setCurrentIndex(current - 1);\r\n }\r\n }, [current, setCurrentIndex]);\r\n\r\n const goNext = useCallback(() => {\r\n if (images && current < images.length - 1) {\r\n setDirection(1);\r\n setCurrentIndex(current + 1);\r\n }\r\n }, [current, images, setCurrentIndex]);\r\n\r\n /* Keyboard navigation */\r\n useEffect(() => {\r\n if (!isOpen) return;\r\n const handleKey = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") onClose();\r\n if (e.key === \"ArrowLeft\") goPrev();\r\n if (e.key === \"ArrowRight\") goNext();\r\n };\r\n window.addEventListener(\"keydown\", handleKey);\r\n return () => window.removeEventListener(\"keydown\", handleKey);\r\n }, [isOpen, onClose, goPrev, goNext]);\r\n\r\n const currentImage = images?.[current];\r\n\r\n return (\r\n <Portal>\r\n <AnimatePresence>\r\n {isOpen && total > 0 && (\r\n <motion.div\r\n className=\"fixed inset-0 z-999 flex items-center justify-center\"\r\n initial={{ opacity: 0, backgroundColor: \"rgba(0,0,0,0)\" }}\r\n animate={{ opacity: 1, backgroundColor: \"rgba(0,0,0,0.55)\" }}\r\n exit={{ opacity: 0, backgroundColor: \"rgba(0,0,0,0)\" }}\r\n transition={{ duration: 0.25, ease: \"easeInOut\" }}\r\n onClick={onClose}\r\n >\r\n {/* Content wrapper — prevents overlay click-through */}\r\n <motion.div\r\n className=\"relative flex items-center justify-center\"\r\n initial={{ opacity: 0, scale: 0.92 }}\r\n animate={{ opacity: 1, scale: 1 }}\r\n exit={{ opacity: 0, scale: 0.92 }}\r\n transition={{ duration: 0.25, ease: \"easeInOut\" }}\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {/* Fixed 850×850 frame */}\r\n <div\r\n className=\"relative flex items-center justify-center overflow-hidden rounded-[6px] bg-white\"\r\n style={{ width: 850, height: 850 }}\r\n >\r\n {/* Sliding image */}\r\n <AnimatePresence mode=\"wait\" initial={false} custom={direction}>\r\n <motion.img\r\n key={current}\r\n custom={direction}\r\n variants={slideVariants}\r\n initial=\"enter\"\r\n animate=\"center\"\r\n exit=\"exit\"\r\n transition={{ duration: 0.3, ease: \"easeInOut\" }}\r\n src={currentImage?.url}\r\n alt={currentImage?.altText ?? `Image ${current + 1}`}\r\n className=\"w-full rounded-[6px] object-contain\"\r\n draggable={false}\r\n />\r\n </AnimatePresence>\r\n\r\n {/* Left arrow — always visible, disabled when no prev */}\r\n <button\r\n type=\"button\"\r\n onClick={goPrev}\r\n disabled={!hasPrev}\r\n className={`absolute left-0 top-1/2 -translate-y-1/2 flex h-[100px] items-center rounded-tr-[3px] rounded-br-[3px] p-[7px] backdrop-blur-[2px] shadow-[3px_0px_6px_0px_rgba(0,0,0,0.1)] transition-opacity ${hasPrev ? \"cursor-pointer opacity-100\" : \"cursor-default opacity-30\"}`}\r\n style={{ backgroundColor: \"rgba(255,255,255,0.7)\" }}\r\n aria-label=\"Previous image\"\r\n >\r\n <svg width=\"42\" height=\"42\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M15 18L9 12L15 6\"\r\n stroke=\"#2C2C2C\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n\r\n {/* Right arrow — always visible, disabled when no next */}\r\n <button\r\n type=\"button\"\r\n onClick={goNext}\r\n disabled={!hasNext}\r\n className={`absolute right-0 top-1/2 -translate-y-1/2 flex h-[100px] items-center rounded-tl-[3px] rounded-bl-[3px] p-[7px] backdrop-blur-[2px] shadow-[-3px_0px_6px_0px_rgba(0,0,0,0.1)] transition-opacity ${hasNext ? \"cursor-pointer opacity-100\" : \"cursor-default opacity-30\"}`}\r\n style={{ backgroundColor: \"rgba(255,255,255,0.7)\" }}\r\n aria-label=\"Next image\"\r\n >\r\n <svg width=\"42\" height=\"42\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9 18L15 12L9 6\"\r\n stroke=\"#2C2C2C\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n {/* Close button — top-right outside the image */}\r\n <button\r\n type=\"button\"\r\n onClick={onClose}\r\n className=\"absolute top-[-4px] right-[-63px] flex h-[36px] w-[36px] cursor-pointer items-center justify-center rounded-full bg-white shadow-[0_2px_8px_rgba(0,0,0,0.15)] transition-colors hover:bg-[#f1f1f1]\"\r\n aria-label=\"Close preview\"\r\n >\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M18 6L6 18\"\r\n stroke=\"black\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M6 6L18 18\"\r\n stroke=\"black\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </motion.div>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </Portal>\r\n );\r\n};\r\n\r\nexport default ChatImagePreviewModal;\r\n","// chat/InboxPopup.tsx\n\"use client\";\n\nimport { motion } from \"framer-motion\";\nimport React, { useCallback, useEffect, useState } from \"react\";\n\nimport ChatConfirmModal from \"../modals/chat/ChatConfirmModal\";\nimport { useChatUI } from \"../contexts/ChatUIContext\";\nimport { useGallery } from \"../contexts/GalleryContext\";\nimport ChatFooter from \"../ui/chat/ChatFooter\";\nimport ChatHeader from \"../ui/chat/ChatHeader\";\nimport ChatIdentity from \"../ui/chat/ChatIdentity\";\nimport ChatInquiryBar from \"../ui/chat/ChatInquiryBar\";\nimport ChatListHeader from \"../ui/chat/ChatListHeader\";\nimport ChatMessageItem from \"../ui/chat/ChatMessageItem\";\nimport ChatScroll from \"../ui/chat/ChatScroll\";\nimport type { ChatThreadStatus } from \"../ui/chat/ChatThreadItem\";\nimport ChatThreadItem from \"../ui/chat/ChatThreadItem\";\nimport TypingIndicator from \"../ui/chat/TypingIndicator\";\nimport ChatSpinner from \"../ui/chat/ChatSpinner\";\nimport ChatImagePreviewModal from \"./ChatImagePreviewModal\";\n\nimport type { Thread, Message, MessageRef } from \"../types\";\nimport type { ChatAdapter, ChatUICallbacks } from \"../adapter/types\";\n\n/* =======================\n Props\n======================= */\nexport type InboxPopupProps = {\n /** The unified data adapter — provides threads, messages, and send */\n adapter: ChatAdapter;\n /** UI-level callbacks (toast, navigation, kebab menu) */\n uiCallbacks?: ChatUICallbacks;\n};\n\n/* =======================\n Constants\n======================= */\nconst avatarBgByInitial: Record<string, string> = {\n K: \"#FFE7DB\", A: \"#FFE5DA\", F: \"#E8F7FF\", B: \"#F0EDEB\", b: \"#F0EDEB\",\n};\n\n/* =======================\n Component\n======================= */\nconst InboxPopup: React.FC<InboxPopupProps> = ({ adapter, uiCallbacks }) => {\n const { close, selectThread, selectedThreadId, reference } = useChatUI();\n const { isOpen: isGalleryOpen, closeGallery } = useGallery();\n\n /* ─── Thread list ─── */\n const [threads, setThreads] = useState<Thread[]>(() => adapter.threads.list(reference));\n const refreshThreads = useCallback(\n () => setThreads(adapter.threads.list(reference)),\n [adapter, reference],\n );\n\n useEffect(() => {\n // Immediate sync on mount / reference change\n let rafId = 0;\n rafId = requestAnimationFrame(refreshThreads);\n const unsub = adapter.threads.subscribe(refreshThreads);\n return () => { cancelAnimationFrame(rafId); unsub(); };\n }, [adapter, reference, refreshThreads]);\n\n /* ─── Active thread & messages ─── */\n const [rev, setRev] = useState(0);\n const [replyTo, setReplyTo] = useState<MessageRef | undefined>(undefined);\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n const activeId = selectedThreadId ?? threads[0]?.id;\n const activeThread = threads.find((t) => t.id === activeId);\n\n const [messages, setMessages] = useState<Message[]>(() =>\n activeId ? adapter.messages.list(activeId) : [],\n );\n\n // Refresh messages when active thread changes or rev bumps\n useEffect(() => {\n if (activeId) setMessages(adapter.messages.list(activeId));\n }, [activeId, rev, adapter]);\n\n // Subscribe to real-time message updates for the active thread\n useEffect(() => {\n if (!activeId || !adapter.messages.subscribe) return;\n const unsub = adapter.messages.subscribe(activeId, () => {\n setMessages(adapter.messages.list(activeId));\n });\n return unsub;\n }, [activeId, adapter]);\n\n /* ─── Derived UI values ─── */\n const initial = activeThread?.avatarText ?? \"U\";\n const title = activeThread?.title ?? \"Unknown\";\n const subtitle = activeThread?.subTitle ?? \"\";\n const online = Boolean(activeThread?.online);\n const isVerified = Boolean(activeThread?.badge);\n const avatarBg = avatarBgByInitial[initial] ?? \"#FFF1EC\";\n\n const idLabel = activeThread?.orderId ? \"Order ID\" : activeThread?.inquiryId ? \"Inquiry ID\" : undefined;\n const idButtonLabel = activeThread?.orderId ? \"View Order\" : activeThread?.inquiryId ? \"View Inquiry\" : undefined;\n const idValue = activeThread?.orderId ?? activeThread?.inquiryId ?? undefined;\n\n /* ─── Loading state ─── */\n const [showDelete, setShowDelete] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const scrollKey = `${activeId}-${messages.length}-${rev}`;\n\n const prevActiveIdRef = React.useRef(activeId);\n useEffect(() => {\n if (prevActiveIdRef.current !== activeId) {\n prevActiveIdRef.current = activeId;\n setIsLoading(true);\n const t = setTimeout(() => setIsLoading(false), 300);\n // Mark thread as read when switching to it\n if (activeId) adapter.threads.markRead?.(activeId);\n return () => clearTimeout(t);\n }\n }, [activeId, adapter]);\n\n /* ─── Reply helper ─── */\n const toRef = (m: Message): MessageRef => ({\n id: m.id,\n author: typeof m.author === \"string\" ? m.author : \"U\",\n time: m.time,\n text: m.text ?? m.content,\n images: m.images,\n files: m.files,\n audio: m.audio,\n });\n\n /* ─── Delete ─── */\n const handleConfirmDelete = () => {\n if (!activeId) { setShowDelete(false); return; }\n adapter.threads.delete(activeId);\n const nextId = threads.filter((t) => t.id !== activeId)[0]?.id;\n if (nextId) selectThread(nextId);\n setReplyTo(undefined);\n setShowDelete(false);\n uiCallbacks?.showToast?.({\n type: \"success\",\n title: \"Chat Deleted\",\n message: \"The chat has been deleted successfully.\",\n });\n };\n\n return (\n <div className=\"fixed bottom-4 right-[40px] z-50\">\n {/* Backdrop */}\n <motion.button\n aria-label=\"Close chat\"\n onClick={close}\n className=\"fixed inset-0 bg-black/20\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.3 }}\n />\n\n {/* Popup wrapper */}\n <motion.div\n role=\"dialog\"\n aria-modal=\"true\"\n className=\"relative rounded-[16px]\"\n style={{ width: 800, height: 650, boxShadow: \"0px 2px 12px 0px rgba(59,51,51,0.1)\" }}\n initial={{ x: \"100%\", opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: \"100%\", opacity: 0 }}\n transition={{ type: \"tween\", duration: 0.4, ease: \"easeOut\" }}\n >\n <div\n className=\"relative h-full w-full overflow-hidden rounded-[16px]\"\n style={{\n border: \"2px solid transparent\",\n background: \"linear-gradient(white, white) padding-box, linear-gradient(236.83deg, rgba(51, 201, 212, 0.3) 0.4%, rgba(39, 83, 251, 0.3) 30.28%, rgba(39, 83, 251, 0.3) 50.2%, rgba(39, 83, 251, 0.3) 65.14%, rgba(235, 67, 255, 0.3) 100%) border-box\",\n }}\n >\n <div className=\"grid h-full min-h-0 grid-cols-[1fr_350px]\">\n {/* LEFT — Message area */}\n <div className=\"flex h-full min-h-0 flex-col border-r border-[#9BBCCF]\">\n <div className=\"h-[64px] shrink-0\">\n <ChatHeader\n left={\n activeThread?.avatarSrc ? (\n <ChatIdentity variant=\"avatar\" src={activeThread.avatarSrc} online={online} title={title} subtitle={subtitle} verified={isVerified} subtitleVariant=\"muted\" />\n ) : (\n <ChatIdentity variant=\"initial\" initial={initial} bg={avatarBg} online={online} title={title} subtitle={subtitle} verified={isVerified} subtitleVariant=\"muted\" />\n )\n }\n right={\n uiCallbacks?.renderKebabMenu?.({\n pinned: Boolean(activeThread?.pinned),\n onPinToggle: () => { if (activeId) adapter.threads.pin(activeId, !activeThread?.pinned); },\n onDelete: () => setShowDelete(true),\n }) ?? null\n }\n />\n </div>\n\n {idValue && (\n <div className=\"shrink-0\">\n <ChatInquiryBar\n id={idValue}\n label={idLabel}\n buttonLabel={idButtonLabel}\n onView={() => {\n const type = activeThread?.orderId ? \"order\" : \"inquiry\";\n uiCallbacks?.onNavigate?.({ type, id: idValue });\n }}\n />\n </div>\n )}\n\n <div className=\"flex-1 min-h-0\">\n <div className=\"relative h-full min-h-0\">\n {isLoading ? (\n <ChatSpinner className=\"h-full min-h-[200px]\" />\n ) : (\n <ChatScroll className=\"h-full pb-10\" bottomAlignWhenShort={false} scrollKey={scrollKey}>\n {messages.map((m, idx) => {\n const mine = m.author === \"you\";\n const isLast = idx === messages.length - 1;\n return (\n <ChatMessageItem\n key={m.id}\n id={m.id}\n mine={mine}\n time={m.time ?? \"\"}\n authorInitial={typeof m.author === \"string\" ? m.author : \"U\"}\n avatarBg={avatarBg}\n text={m.text ?? m.content}\n businessCard={m.businessCard as Parameters<typeof ChatMessageItem>[0][\"businessCard\"]}\n addressCard={m.addressCard as Parameters<typeof ChatMessageItem>[0][\"addressCard\"]}\n images={m.images}\n files={m.files}\n audio={m.audio}\n replyTo={m.replyTo}\n showStatus={isLast}\n status={activeThread?.status?.kind === \"seen\" ? \"Seen\" : \"Delivered\"}\n onReply={() => setReplyTo(toRef(m))}\n initialSrc={m.avatarSrc}\n />\n );\n })}\n </ChatScroll>\n )}\n\n <div className=\"pointer-events-none absolute inset-x-0 bottom-0 flex items-center px-4 pb-2 pt-1 bg-white\">\n <TypingIndicator className=\"pointer-events-auto\" />\n </div>\n </div>\n </div>\n\n <div className=\"shrink-0\">\n <ChatFooter\n key={activeId}\n replyTo={replyTo}\n clearReply={() => setReplyTo(undefined)}\n onAfterSend={() => setRev((v) => v + 1)}\n onSend={(payload) => {\n if (activeId) adapter.messages.send(activeId, payload);\n }}\n />\n </div>\n </div>\n\n {/* RIGHT — Thread list */}\n <div className=\"h-full min-h-0\">\n <ChatListHeader onClose={close} onSearchChange={(val) => setSearchQuery(val)} />\n <div className=\"h-full overflow-y-auto custom-scroll\">\n {threads\n .filter((t) => {\n if (!searchQuery.trim()) return true;\n const q = searchQuery.toLowerCase();\n return (\n t.title.toLowerCase().includes(q) ||\n t.last?.toLowerCase().includes(q) ||\n t.orderId?.toLowerCase().includes(q) ||\n t.inquiryId?.toLowerCase().includes(q)\n );\n })\n .map((t) => {\n const status: ChatThreadStatus = t.status ?? (t.unread && t.unread > 0 ? { kind: \"new\", count: t.unread } : { kind: \"seen\" });\n return (\n <ChatThreadItem\n key={t.id}\n onClick={() => { setReplyTo(undefined); selectThread(t.id); }}\n active={t.id === activeId}\n pinned={Boolean(t.pinned)}\n online={t.online}\n verified={Boolean(t.badge)}\n title={t.title}\n preview={t.last ?? \"\"}\n time={t.time ?? \"\"}\n status={status}\n avatarText={t.avatarText ?? \"\"}\n avatarSrc={t.avatarSrc}\n />\n );\n })}\n </div>\n </div>\n </div>\n\n <ChatConfirmModal open={showDelete} onClose={() => setShowDelete(false)} onConfirm={handleConfirmDelete} />\n <ChatImagePreviewModal isOpen={isGalleryOpen} onClose={closeGallery} />\n </div>\n </motion.div>\n </div>\n );\n};\n\nexport default InboxPopup;\n","// chat/SinglePopup.tsx\n\"use client\";\n\nimport { motion } from \"framer-motion\";\nimport React from \"react\";\n\nimport { useChatUI } from \"../contexts/ChatUIContext\";\nimport { ChatXIcon } from \"../icons\";\nimport ChatFooter from \"../ui/chat/ChatFooter\";\nimport ChatHeader from \"../ui/chat/ChatHeader\";\nimport ChatIdentity from \"../ui/chat/ChatIdentity\";\nimport ChatMessageItem from \"../ui/chat/ChatMessageItem\";\nimport ChatScroll from \"../ui/chat/ChatScroll\";\nimport ChatSpinner from \"../ui/chat/ChatSpinner\";\nimport TypingIndicator from \"../ui/chat/TypingIndicator\";\n\nimport type { Thread, Message, MessageRef, Reference } from \"../types\";\nimport type { ChatAdapter, ChatUICallbacks } from \"../adapter/types\";\n\n/* ─────────────────────────────────────────────────────────────\n Helpers\n────────────────────────────────────────────────────────────── */\n\nfunction coalesceThreadId(reference: Reference | undefined, threads: Thread[]): string {\n const referenceId = reference?.id;\n if (reference?.kind === \"quotation\") {\n return threads.find((t) => t.id === \"t4\")?.id ?? (threads[0]?.id ?? \"\");\n }\n return (\n (referenceId &&\n (threads.find((t) => t.id === referenceId)?.id ||\n threads.find((t) => t.inquiryId === referenceId)?.id)) ||\n (threads.length ? threads[0].id : \"\")\n );\n}\n\nfunction toRef(m: Message): MessageRef {\n return {\n id: m.id,\n author: m.author,\n time: m.time,\n text: m.text ?? m.content,\n images: m.images,\n files: m.files,\n audio: m.audio,\n };\n}\n\n/* ─────────────────────────────────────────────────────────────\n Props\n────────────────────────────────────────────────────────────── */\n\nexport type SinglePopupProps = {\n /** The unified data adapter */\n adapter: ChatAdapter;\n /** UI-level callbacks (toast, navigation) */\n uiCallbacks?: ChatUICallbacks;\n};\n\n/* ─────────────────────────────────────────────────────────────\n Component\n────────────────────────────────────────────────────────────── */\n\nconst SinglePopup: React.FC<SinglePopupProps> = ({ adapter, uiCallbacks }) => {\n const { close, reference } = useChatUI();\n\n const threads = adapter.threads.list(reference);\n const initialThreadId = React.useMemo(\n () => coalesceThreadId(reference, threads),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [reference],\n );\n const [activeId] = React.useState<string>(initialThreadId);\n\n const activeThread: Thread | undefined = threads.find((t) => t.id === activeId);\n const isVerified = activeThread?.badge === true;\n\n const meta = (reference?.meta ?? {}) as {\n initial?: string;\n title?: string;\n online?: boolean;\n subtitle?: string;\n };\n\n const initial = meta.initial ?? activeThread?.avatarText ?? \"A\";\n const title = meta.title ?? activeThread?.title ?? \"Unknown\";\n const online = meta.online ?? activeThread?.online ?? true;\n const subtitle = meta.subtitle ?? \"Customer\";\n\n /* ─── Messages ─── */\n const [messages, setMessages] = React.useState<Message[]>(() =>\n activeId ? adapter.messages.list(activeId) : [],\n );\n const [scrollKey, setScrollKey] = React.useState<number>(0);\n const [replyTo, setReplyTo] = React.useState<MessageRef | undefined>(undefined);\n const [isLoading, setIsLoading] = React.useState(true);\n\n // Brief loading flash on initial open\n React.useEffect(() => {\n const t = setTimeout(() => setIsLoading(false), 300);\n return () => clearTimeout(t);\n }, []);\n\n // Subscribe to real-time updates\n React.useEffect(() => {\n if (!activeId || !adapter.messages.subscribe) return;\n const unsub = adapter.messages.subscribe(activeId, () => {\n setMessages(adapter.messages.list(activeId));\n setScrollKey(Date.now());\n });\n return unsub;\n }, [activeId, adapter]);\n\n const handleAfterSend = React.useCallback(() => {\n setMessages(adapter.messages.list(activeId));\n setScrollKey(Date.now());\n setReplyTo(undefined);\n }, [activeId, adapter]);\n\n const statusText = activeThread?.status?.kind === \"seen\" ? \"Seen\" : \"Delivered\";\n\n /* ─── Unused callbacks acknowledged ─── */\n void uiCallbacks;\n\n return (\n <div className=\"fixed bottom-4 right-[40px] z-50\">\n {/* Backdrop */}\n <motion.button\n aria-label=\"Close chat\"\n onClick={close}\n className=\"fixed inset-0 bg-black/20 cursor-auto!\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.3 }}\n />\n\n {/* Outer gradient wrapper */}\n <motion.div\n role=\"dialog\"\n aria-modal=\"true\"\n className=\"relative h-[650px] w-[450px] rounded-[20px] p-[2px]\"\n style={{\n boxShadow: \"0px 2px 12px 0px #3B33331A\",\n background: \"linear-gradient(236.83deg, rgba(51, 201, 212, 0.3) 0.4%, rgba(39, 83, 251, 0.3) 30.28%, rgba(39, 83, 251, 0.3) 50.2%, rgba(39, 83, 251, 0.3) 65.14%, rgba(235, 67, 255, 0.3) 100%)\",\n }}\n initial={{ x: \"100%\", opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: \"100%\", opacity: 0 }}\n transition={{ type: \"tween\", duration: 0.4, ease: \"easeOut\" }}\n >\n {/* Inner card */}\n <div className=\"flex h-full w-full flex-col overflow-hidden rounded-[18px] bg-white\">\n {/* Header */}\n <div className=\"h-[64px] shrink-0\">\n <ChatHeader\n left={\n <ChatIdentity\n variant=\"initial\"\n initial={initial}\n bg=\"#FFE5DA\"\n online={online}\n title={title}\n subtitle={subtitle}\n verified={isVerified}\n subtitleVariant=\"muted\"\n />\n }\n right={\n <button\n type=\"button\"\n onClick={close}\n className=\"flex h-[34px] w-[34px] items-center justify-center rounded-full bg-white text-black shadow-[0px_2px_4px_0px_#A5A3AE4D] hover:bg-black/5 hover:text-[#ff5301] cursor-pointer\"\n >\n <ChatXIcon className=\"h-6 w-6\" />\n </button>\n }\n />\n </div>\n\n {/* Messages */}\n <div className=\"relative flex-1 min-h-0\">\n {isLoading ? (\n <ChatSpinner className=\"h-full\" />\n ) : (\n <ChatScroll className=\"h-full\" bottomAlignWhenShort={false} scrollKey={scrollKey}>\n {messages.map((m, idx) => {\n const mine = m.author === \"you\";\n const isLast = idx === messages.length - 1;\n return (\n <ChatMessageItem\n key={m.id}\n id={m.id}\n mine={mine}\n time={m.time ?? \"\"}\n authorInitial={typeof m.author === \"string\" ? m.author : \"U\"}\n text={m.text ?? m.content}\n businessCard={m.businessCard as Parameters<typeof ChatMessageItem>[0][\"businessCard\"]}\n addressCard={m.addressCard as Parameters<typeof ChatMessageItem>[0][\"addressCard\"]}\n images={m.images}\n files={m.files}\n audio={m.audio}\n replyTo={m.replyTo}\n initialSrc={m.avatarSrc}\n showStatus={isLast}\n status={statusText}\n onReply={() => setReplyTo(toRef(m))}\n />\n );\n })}\n </ChatScroll>\n )}\n\n {/* Typing indicator */}\n <div className=\"pointer-events-none absolute bottom-0 left-0 w-full bg-white px-4 pb-2\">\n <div className=\"pointer-events-auto flex items-center justify-start\">\n <TypingIndicator />\n </div>\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"shrink-0\">\n <ChatFooter\n variant=\"single\"\n replyTo={replyTo}\n clearReply={() => setReplyTo(undefined)}\n onAfterSend={handleAfterSend}\n onSend={(payload) => {\n if (activeId) adapter.messages.send(activeId, payload);\n }}\n />\n </div>\n </div>\n </motion.div>\n </div>\n );\n};\n\nexport default SinglePopup;\n","// chat/ChatRoot.tsx\n\"use client\";\nimport { AnimatePresence } from \"framer-motion\";\nimport { createPortal } from \"react-dom\";\nimport { useChatUI } from \"../contexts/ChatUIContext\";\nimport { useDisableBodyScroll } from \"../hooks/useDisableBodyScroll\";\nimport { GalleryProvider } from \"../contexts/GalleryProvider\";\nimport type { ChatAdapter, ChatUICallbacks } from \"../adapter/types\";\nimport InboxPopup from \"./InboxPopup\";\nimport SinglePopup from \"./SinglePopup\";\n\nexport type ChatRootProps = {\n /**\n * The unified data adapter — provides all threads, messages, and send logic.\n *\n * Implement this in your host app:\n * ```ts\n * const adapter = createDemoChatAdapter(); // or createApiChatAdapter(...)\n * ```\n */\n adapter: ChatAdapter;\n\n /**\n * Optional UI callbacks — controls toast notifications, navigation,\n * and the kebab (⋮) menu renderer.\n *\n * These delegate UI side-effects back to the host app so the package\n * stays decoupled from the host's routing and notification systems.\n */\n uiCallbacks?: ChatUICallbacks;\n};\n\nexport default function ChatRoot({ adapter, uiCallbacks }: ChatRootProps) {\n const { isOpen, variant } = useChatUI();\n\n // Lock page scroll whenever the chat is open\n useDisableBodyScroll(isOpen);\n\n if (typeof window === \"undefined\") {\n return null;\n }\n\n return createPortal(\n // GalleryProvider is scoped to the chat only.\n // It is completely separate from the host app's own gallery context.\n <GalleryProvider>\n <AnimatePresence mode=\"wait\">\n {isOpen && (\n variant === \"inbox\" ? (\n <InboxPopup\n key=\"inbox\"\n adapter={adapter}\n uiCallbacks={uiCallbacks}\n />\n ) : (\n <SinglePopup\n key=\"single\"\n adapter={adapter}\n uiCallbacks={uiCallbacks}\n />\n )\n )}\n </AnimatePresence>\n </GalleryProvider>,\n document.body,\n );\n}\n","\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport type { ChatUIState, ChatVariant, Reference } from \"./ChatUIContext\";\nimport { ChatUIContext } from \"./ChatUIContext\";\n\nexport function ChatUIProvider({ children }: { children: React.ReactNode }) {\n const [isOpen, setOpen] = useState(false);\n const [variant, setVariant] = useState<ChatVariant>(\"inbox\");\n const [reference, setReference] = useState<Reference | undefined>();\n const [selectedThreadId, setSelected] = useState<string | null>(null);\n\n const api = useMemo<ChatUIState>(\n () => ({\n isOpen,\n variant,\n reference,\n selectedThreadId,\n openInbox: (opts) => {\n setReference(opts?.reference);\n setSelected(opts?.threadId ?? null);\n setVariant(\"inbox\");\n setOpen(true);\n },\n openSingle: (opts) => {\n setReference(opts?.reference);\n setVariant(\"single\");\n setSelected(null);\n setOpen(true);\n },\n close: () => setOpen(false),\n selectThread: (id) => setSelected(id),\n }),\n [isOpen, variant, reference, selectedThreadId],\n );\n\n return <ChatUIContext.Provider value={api}>{children}</ChatUIContext.Provider>;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/contexts/ChatUIContext.tsx","../src/hooks/useDisableBodyScroll.ts","../src/contexts/GalleryContext.tsx","../src/contexts/GalleryProvider.tsx","../src/utils/cn.ts","../src/ui/Button.tsx","../src/modals/chat/ChatConfirmModal.tsx","../src/icons/index.tsx","../src/ui/Select.tsx","../src/modals/chat/ChatTranslateSettingsModal.tsx","../src/ui/chat/AttachmentPreviewStrip.tsx","../src/ui/chat/ChatComposerBar.tsx","../src/ui/chat/drop-up/BusinessCardDropup.tsx","../src/ui/chat/drop-up/EmojiDropup.tsx","../src/ui/chat/scrollToMessage.ts","../src/ui/chat/ReplyCard.tsx","../src/ui/chat/ChatFooter.tsx","../src/ui/chat/ChatHeader.tsx","../src/ui/chat/ChatIdentity.tsx","../src/ui/chat/ChatInquiryBar.tsx","../src/ui/chat/ChatListHeader.tsx","../src/ui/chat/message-items/ChatAddressCard.tsx","../src/ui/chat/message-items/ChatBubbleAudio.tsx","../src/ui/chat/message-items/ChatBubbleFiles.tsx","../src/ui/chat/message-items/ChatBubbleImages.tsx","../src/ui/chat/message-items/ChatBubbleText.tsx","../src/ui/chat/message-items/ChatBusinessCard.tsx","../src/ui/chat/MessageHoverActions.tsx","../src/ui/chat/ChatMessageItem.tsx","../src/ui/chat/ChatScroll.tsx","../src/ui/chat/ChatThreadItem.tsx","../src/ui/chat/TypingIndicator.tsx","../src/ui/chat/ChatSpinner.tsx","../src/ui/Portal.tsx","../src/chat/ChatImagePreviewModal.tsx","../src/chat/InboxPopup.tsx","../src/chat/SinglePopup.tsx","../src/chat/ChatRoot.tsx","../src/contexts/ChatUIProvider.tsx"],"names":["createContext","useContext","prev","React","jsx","jsxs","useState","useEffect","clsx","fmtTime","useRef","useCallback","createPortal","WIDTH","GAP_Y","PADDING","useMemo","Fragment","extColor","AnimatePresence","motion","toRef"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\nimport { createContext, useContext } from \"react\";\nimport type { Reference } from \"../types\";\n\n// Re-export Reference so consumers who import from this context still work.\nexport type { Reference };\n\nexport type ChatVariant = \"inbox\" | \"single\";\n\nexport type ChatUIState = {\n isOpen: boolean;\n variant: ChatVariant;\n reference?: Reference;\n selectedThreadId?: string | null;\n\n openInbox: (opts?: { reference?: Reference; threadId?: string }) => void;\n openSingle: (opts?: { reference?: Reference }) => void;\n close: () => void;\n selectThread: (id: string | null) => void;\n};\n\nexport const ChatUIContext = createContext<ChatUIState | null>(null);\n\nexport function useChatUI() {\n const ctx = useContext(ChatUIContext);\n if (!ctx) {\n throw new Error(\"useChatUI must be used within ChatUIProvider\");\n }\n return ctx;\n}\n","import { useEffect } from \"react\";\n\n/**\n * Locks document body scroll while `active` is true.\n * Restores overflow on cleanup / when `active` becomes false.\n */\nexport function useDisableBodyScroll(active: boolean) {\n useEffect(() => {\n if (!active) return;\n const original = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = original;\n };\n }, [active]);\n}\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\n\n// New interface for media items\nexport interface GalleryMedia {\n type: \"image\" | \"video\" | \"pdf\";\n url: string;\n altText?: string;\n /** Per-item upload date shown in the gallery preview */\n uploadDate?: string | null;\n}\n\n// Updated context type\nexport interface GalleryContextType {\n images: GalleryMedia[];\n currentIndex: number | null;\n isOpen: boolean;\n uploadDate?: string | null;\n showDots?: boolean;\n setImages: (imgs: GalleryMedia[]) => void;\n setCurrentIndex: (index: number) => void;\n setUploadDate: (date: string | null) => void;\n openGallery: (imgs: GalleryMedia[], startIndex?: number, uploadDate?: string | null, showDots?: boolean) => void;\n closeGallery: () => void;\n next: () => void;\n prev: () => void;\n}\n\nexport const GalleryContext = createContext<GalleryContextType | undefined>(\n undefined,\n);\n\nexport const useGallery = (): GalleryContextType => {\n const context = useContext(GalleryContext);\n if (!context) {\n throw new Error(\"useGallery must be used within a GalleryProvider\");\n }\n return context;\n};\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { useCallback, useState } from \"react\";\n\nimport { GalleryContext } from \"./GalleryContext\";\nimport type { GalleryMedia, GalleryContextType } from \"./GalleryContext\";\n\ninterface GalleryState {\n images: GalleryMedia[];\n currentIndex: number | null;\n isOpen: boolean;\n uploadDate: string | null;\n showDots: boolean;\n}\n\nconst INITIAL_STATE: GalleryState = {\n images: [],\n currentIndex: null,\n isOpen: false,\n uploadDate: null,\n showDots: false,\n};\n\nexport const GalleryProvider = ({ children }: { children: ReactNode }) => {\n const [state, setState] = useState<GalleryState>(INITIAL_STATE);\n\n const setImages = useCallback((images: GalleryMedia[]) => {\n setState((prev) => ({ ...prev, images }));\n }, []);\n\n const setCurrentIndex = useCallback((currentIndex: number) => {\n setState((prev) => ({ ...prev, currentIndex }));\n }, []);\n\n const setUploadDate = useCallback((uploadDate: string | null) => {\n setState((prev) => ({ ...prev, uploadDate }));\n }, []);\n\n const openGallery = useCallback(\n (imgs: GalleryMedia[], startIndex = 0, date: string | null = null, dots = false) => {\n setState({\n images: imgs,\n currentIndex: startIndex,\n uploadDate: imgs[startIndex]?.uploadDate ?? date,\n isOpen: true,\n showDots: dots,\n });\n },\n [],\n );\n\n const closeGallery = useCallback(() => {\n setState((prev) => ({ ...prev, isOpen: false, currentIndex: null }));\n }, []);\n\n const next = useCallback(() => {\n setState((prev) => {\n if (prev.currentIndex === null || prev.images.length === 0) return prev;\n const newIndex = prev.currentIndex < prev.images.length - 1 ? prev.currentIndex + 1 : 0;\n return { ...prev, currentIndex: newIndex, uploadDate: prev.images[newIndex]?.uploadDate ?? null };\n });\n }, []);\n\n const prev = useCallback(() => {\n setState((prev) => {\n if (prev.currentIndex === null || prev.images.length === 0) return prev;\n const newIndex = prev.currentIndex > 0 ? prev.currentIndex - 1 : prev.images.length - 1;\n return { ...prev, currentIndex: newIndex, uploadDate: prev.images[newIndex]?.uploadDate ?? null };\n });\n }, []);\n\n const value: GalleryContextType = {\n images: state.images,\n currentIndex: state.currentIndex,\n isOpen: state.isOpen,\n uploadDate: state.uploadDate,\n showDots: state.showDots,\n setImages,\n setCurrentIndex,\n setUploadDate,\n openGallery,\n closeGallery,\n next,\n prev,\n };\n\n return <GalleryContext.Provider value={value}>{children}</GalleryContext.Provider>;\n};\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport type ButtonVariant = \"filled\" | \"outlined\" | \"text\" | \"link\" | \"tonal\";\nexport type ButtonColor =\n | \"primary\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\"\n | \"white\"\n | \"transparent\"\n | \"black\"\n | \"orange\"\n | \"green\"\n | \"blue\";\nexport type ButtonSize = \"26\" | \"30\" | \"32\" | \"34\" | \"36\" | \"40\";\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n color?: ButtonColor;\n size?: ButtonSize;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n iconOnly?: boolean;\n children: React.ReactNode;\n}\n\nconst sizeClasses: Record<ButtonSize, string> = {\n \"26\": \"h-[26px] px-[10px] text-[12px] rounded-[4px] gap-1\",\n \"30\": \"h-[30px] px-[12px] text-[13px] rounded-[4px] gap-1.5\",\n \"32\": \"h-[32px] px-[14px] text-[13px] rounded-[4px] gap-1.5\",\n \"34\": \"h-[34px] px-[16px] text-[13px] rounded-[4px] gap-2\",\n \"36\": \"h-[36px] px-[18px] text-[13px] rounded-[4px] gap-2\",\n \"40\": \"h-[40px] px-[20px] text-[16px] rounded-[4px] gap-2\",\n};\n\ntype ColorDef = { bg: string; hover: string; text: string; border: string; borderHover?: string; lightBg: string };\n\nconst colorMap: Record<ButtonColor, ColorDef> = {\n primary: { bg: \"bg-[#3D3D3D]\", hover: \"hover:bg-[#646464]\", text: \"text-[#3D3D3D]\", border: \"border-[#3D3D3D]\", lightBg: \"bg-[#3D3D3D]/10\" },\n success: { bg: \"bg-[#3d6b42]\", hover: \"hover:bg-[#2e5939]\", text: \"text-[#3d6b42]\", border: \"border-[#3d6b42]\", lightBg: \"bg-[#3d6b42]/10\" },\n warning: { bg: \"bg-[#f59e0b]\", hover: \"hover:bg-[#d97706]\", text: \"text-[#f59e0b]\", border: \"border-[#f59e0b]\", lightBg: \"bg-[#f59e0b]/10\" },\n error: { bg: \"bg-[#ef4444]\", hover: \"hover:bg-[#c91b20]\", text: \"text-[#ef4444]\", border: \"border-[#ef4444]\", lightBg: \"bg-[#ef4444]/10\" },\n info: { bg: \"bg-[#00b8d4]\", hover: \"hover:bg-[#009db3]\", text: \"text-[#00b8d4]\", border: \"border-[#00b8d4]\", lightBg: \"bg-[#00b8d4]/10\" },\n white: { bg: \"bg-white\", hover: \"hover:bg-gray-50\", text: \"text-black\", border: \"border-[#cacaca]\", borderHover: \"hover:border-[#777]\", lightBg: \"bg-white\" },\n transparent: { bg: \"bg-transparent\", hover: \"hover:bg-black/5\", text: \"text-black\", border: \"border-[#cacaca]\", lightBg: \"bg-transparent\" },\n black: { bg: \"bg-[#3d3d3d]\", hover: \"hover:bg-[#646464]\", text: \"text-black\", border: \"border-[#3d3d3d]\", lightBg: \"bg-[#ececec]\" },\n orange: { bg: \"bg-[#FF5300]\", hover: \"hover:bg-[#e04a00]\", text: \"text-[#FF5300]\", border: \"border-[#FF5300]\", borderHover: \"hover:border-[#e04a00]\", lightBg: \"bg-[#FFEAE0]\" },\n green: { bg: \"bg-[#086600]\", hover: \"hover:bg-[#28A745]\", text: \"text-[#086600]\", border: \"border-[#086600]\", lightBg: \"bg-[#E6F5E6]\" },\n blue: { bg: \"bg-[#005694]\", hover: \"hover:bg-[#00375E]\", text: \"text-[#005694]\", border: \"border-[#005694]\", lightBg: \"bg-[#E0EFF8]\" },\n};\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ variant = \"filled\", color = \"primary\", size = \"40\", leftIcon, rightIcon, iconOnly = false, children, className, disabled, ...props }, ref) => {\n const c = colorMap[color];\n\n return (\n <button\n ref={ref}\n disabled={disabled}\n className={cn(\n \"inline-flex cursor-pointer items-center justify-center font-semibold transition-all duration-200 select-none\",\n iconOnly ? `h-[${size === \"40\" ? \"40\" : size}px] w-[${size === \"40\" ? \"40\" : size}px]` : sizeClasses[size],\n variant === \"filled\" && [c.bg, c.hover, \"text-white\", \"border border-transparent\"],\n variant === \"outlined\" && [color === \"white\" ? \"bg-white\" : \"bg-transparent\", \"border\", c.border, c.borderHover, c.text],\n variant === \"text\" && [\"bg-transparent\", \"border border-transparent\", c.text, \"hover:bg-black/5\"],\n variant === \"tonal\" && [c.lightBg, c.text, \"border border-transparent\"],\n disabled && \"cursor-not-allowed opacity-50\",\n className,\n )}\n {...props}\n >\n {leftIcon && <span className=\"flex shrink-0\">{leftIcon}</span>}\n <>{children}</>\n {rightIcon && <span className=\"flex shrink-0\">{rightIcon}</span>}\n </button>\n );\n },\n);\n\nButton.displayName = \"Button\";\nexport default Button;\n","import React from \"react\";\r\nimport { cn } from \"../../utils/cn\";\r\nimport Button from \"../../ui/Button\";\r\n\r\ntype Props = {\r\n open: boolean;\r\n title?: string;\r\n description?: React.ReactNode;\r\n confirmLabel?: string;\r\n cancelLabel?: string;\r\n onConfirm: () => void;\r\n onClose: () => void;\r\n className?: string;\r\n};\r\n\r\nexport default function ChatConfirmModal({\r\n open,\r\n title = \"DELETE CHAT\",\r\n confirmLabel = \"Yes, Delete\",\r\n cancelLabel = \"Not Now\",\r\n onConfirm,\r\n onClose,\r\n className,\r\n}: Props) {\r\n React.useEffect(() => {\r\n if (!open) return;\r\n const onKey = (e: KeyboardEvent) => e.key === \"Escape\" && onClose();\r\n window.addEventListener(\"keydown\", onKey);\r\n return () => window.removeEventListener(\"keydown\", onKey);\r\n }, [open, onClose]);\r\n\r\n if (!open) return null;\r\n\r\n return (\r\n <div\r\n className=\"absolute inset-0 z-70 flex items-center justify-center overflow-hidden\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onClose();\r\n }}\r\n >\r\n <div className=\"absolute inset-0 bg-black/30\" />\r\n\r\n <div\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n className={cn(\r\n \"relative z-71 w-[420px] overflow-hidden rounded-md bg-white shadow-[0_12px_30px_rgba(0,0,0,0.18)]\",\r\n className,\r\n )}\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n <div className=\"flex h-[44px] items-center bg-[#ff5200] px-4 text-xl font-semibold uppercase tracking-wide text-white\">\r\n {title}\r\n </div>\r\n\r\n <div className=\"p-4\">\r\n <h3 className=\"mb-2 text-[14px] font-semibold text-black\">\r\n Are you Sure you want to delete the chat\r\n </h3>\r\n\r\n <div className=\"mt-4 mb-[24px] flex items-start gap-1.5 text-xs font-normal text-[#636363]\">\r\n <span>\r\n <svg className=\"h-4 w-4\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\r\n <path d=\"M8 4.5v4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <circle cx=\"8\" cy=\"11\" r=\"0.75\" fill=\"currentColor\" />\r\n </svg>\r\n </span>\r\n <p>\r\n The chat history is permanently removed from your view; you won't be able to see\r\n previous messages anymore. Other person's copy stays, the other user may still have\r\n their copy of the conversation.\r\n </p>\r\n </div>\r\n\r\n <div className=\"flex w-full items-center gap-4 border-t border-[#e1e1e1] pt-[24px]\">\r\n <Button\r\n variant=\"outlined\"\r\n color=\"white\"\r\n size=\"34\"\r\n className=\"flex-1\"\r\n onClick={onClose}\r\n >\r\n {cancelLabel}\r\n </Button>\r\n <Button\r\n variant=\"filled\"\r\n color=\"orange\"\r\n size=\"34\"\r\n className=\"flex-1\"\r\n onClick={() => {\r\n onConfirm();\r\n onClose();\r\n }}\r\n >\r\n {confirmLabel}\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","// ─────────────────────────────────────────────────────────────────────────────\n// Banbox Chat Icons — all SVGs inlined so @banbox/chat has zero icon dependency\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype IconProps = { className?: string };\n\nexport const ChatXIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"25\" height=\"24\" viewBox=\"0 0 25 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M18.5 6L6.5 18\" stroke=\"CurrentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M6.5 6L18.5 18\" stroke=\"CurrentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const ChatSearchIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"24\" height=\"24\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\n <path d=\"m21 21-4.34-4.34\" />\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n </svg>\n);\n\nexport const MessageIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <rect x=\"2.5\" y=\"4.16666\" width=\"15\" height=\"11.6667\" rx=\"2\" stroke=\"CurrentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M2.5 5.83334L10 10.8333L17.5 5.83334\" stroke=\"CurrentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const BlueBadgeIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M12.225 8.47394C12.1812 8.6256 12.085 8.7481 11.9479 8.82685L11.0087 9.35185V10.4252C11.0087 10.746 10.7462 11.0085 10.4254 11.0085H9.34913L8.82705 11.9477C8.7483 12.0848 8.6258 12.181 8.47413 12.2248C8.32538 12.2656 8.16788 12.2481 8.0308 12.1723L6.9983 11.5948L5.9658 12.1723C5.87538 12.2219 5.77913 12.2452 5.67997 12.2452C5.62747 12.2452 5.57497 12.2394 5.52247 12.2248C5.3708 12.181 5.2483 12.0848 5.16955 11.9477L4.64747 11.0085H3.57122C3.25038 11.0085 2.98788 10.746 2.98788 10.4252V9.35185L2.04872 8.82685C1.91163 8.7481 1.81538 8.6256 1.77163 8.47394C1.7308 8.32519 1.7483 8.16769 1.82413 8.0306L2.40163 6.9981L1.82413 5.9656C1.66663 5.68269 1.76872 5.32685 2.04872 5.16935L2.98788 4.64435V3.57102C2.98788 3.25019 3.25038 2.98769 3.57122 2.98769H4.64747L5.16955 2.04852C5.2483 1.91144 5.3708 1.81519 5.52247 1.77144C5.67122 1.7306 5.82872 1.7481 5.9658 1.82394L6.9983 2.40144L8.0308 1.82394C8.16788 1.7481 8.32538 1.7306 8.47413 1.77144C8.6258 1.81519 8.7483 1.91144 8.82705 2.04852L9.34913 2.98769H10.4254C10.7462 2.98769 11.0087 3.25019 11.0087 3.57102V4.64435L11.9479 5.16935C12.2279 5.32685 12.33 5.68269 12.1725 5.9656L11.595 6.9981L12.1725 8.0306C12.2483 8.16769 12.2658 8.32519 12.225 8.47394Z\" fill=\"url(#badge_grad)\" />\n <path d=\"M10.2578 3.65234C9.46271 4.36337 8.79456 5.33232 8.29345 6.39886C7.81906 7.41661 7.49167 8.53194 7.35135 9.62637H5.50726V9.61243L4.70547 7.41661L4.39144 6.55919L4.25781 6.18974L5.03955 6.16882C5.24668 6.16882 5.43376 6.2943 5.48053 6.48251L5.94155 7.45146L6.31572 8.2322L6.41594 8.44132C6.5028 8.25311 6.58966 8.07187 6.6832 7.89063C7.18432 6.88682 7.7322 5.98061 8.38031 5.21382C8.75447 4.77465 9.16204 4.37731 9.61639 4.03574C9.79679 3.90329 9.97719 3.77782 10.171 3.65931H10.2578V3.65234Z\" fill=\"white\" />\n <defs>\n <linearGradient id=\"badge_grad\" x1=\"6.9983\" y1=\"12.2464\" x2=\"6.9983\" y2=\"1.75015\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#0064E1\" />\n <stop offset=\"0.994\" stopColor=\"#26B7FF\" />\n </linearGradient>\n </defs>\n </svg>\n);\n\nexport const ArrowSendAngleIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M21.2929 1.29289C21.6834 0.902369 22.3164 0.902369 22.707 1.29289C23.0975 1.68342 23.0975 2.31643 22.707 2.70696L11.707 13.707C11.3164 14.0975 10.6834 14.0975 10.2929 13.707C9.90237 13.3164 9.90237 12.6834 10.2929 12.2929L21.2929 1.29289Z\" fill=\"url(#send_angle_g1)\" />\n <path d=\"M21.6698 1.05594C22.0323 0.929242 22.4354 1.02171 22.7069 1.29325C22.9784 1.56479 23.0709 1.96787 22.9442 2.33036L15.9442 22.3304C15.8088 22.7173 15.4504 22.9825 15.0409 22.9993C14.6312 23.016 14.2523 22.7812 14.0858 22.4065L10.242 13.7581L1.59361 9.91434C1.21893 9.74782 0.984123 9.36894 1.00084 8.95926C1.01765 8.54969 1.28286 8.19137 1.66978 8.05594L21.6698 1.05594ZM4.71177 9.11063L11.4061 12.0862L11.4891 12.1282C11.6764 12.2333 11.826 12.3963 11.9139 12.594L14.8885 19.2874L20.369 3.63016L4.71177 9.11063Z\" fill=\"url(#send_angle_g2)\" />\n <defs>\n <linearGradient id=\"send_angle_g1\" x1=\"16.4999\" y1=\"1\" x2=\"16.4999\" y2=\"13.9998\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#33C9D4\" />\n <stop offset=\"0.65\" stopColor=\"#2753FB\" />\n </linearGradient>\n <linearGradient id=\"send_angle_g2\" x1=\"12.0001\" y1=\"1\" x2=\"12.0001\" y2=\"23.0001\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#33C9D4\" />\n <stop offset=\"0.65\" stopColor=\"#2753FB\" />\n </linearGradient>\n </defs>\n </svg>\n);\n\nexport const ArrowSendIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <g clipPath=\"url(#send_clip)\">\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M0.061819 2.80424C-0.034006 2.44295 -0.018158 2.06324 0.107481 1.71021C0.23312 1.35718 0.463272 1.04566 0.770608 0.812635C1.07794 0.57961 1.44955 0.434872 1.84131 0.395609C2.23306 0.356346 2.6285 0.424206 2.98068 0.591132L22.8602 9.98918C23.2025 10.1507 23.4904 10.3991 23.6916 10.7067C23.8929 11.0143 23.9995 11.3689 23.9995 11.7305C23.9995 12.0922 23.8929 12.4468 23.6916 12.7543C23.4904 13.0619 23.2025 13.3104 22.8602 13.4719L2.98068 22.8699C2.6285 23.0369 2.23306 23.1047 1.84131 23.0655C1.44955 23.0262 1.07794 22.8815 0.770608 22.6484C0.463272 22.4154 0.23312 22.1039 0.107481 21.7509C-0.018158 21.3978 -0.034006 21.0181 0.061819 20.6568L2.14353 12.7859L14.232 11.7305L2.14353 10.6752L0.061819 2.80424Z\" fill=\"CurrentColor\" />\n </g>\n <defs>\n <clipPath id=\"send_clip\"><rect width=\"24\" height=\"24\" fill=\"white\" /></clipPath>\n </defs>\n </svg>\n);\n\nexport const RecordMicIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M11.5298 20.0197V23.0399H6.47538C6.34807 23.0399 6.22598 23.0904 6.13596 23.1804C6.04595 23.2705 5.99537 23.3926 5.99537 23.5199C5.99537 23.6472 6.04595 23.7693 6.13596 23.8593C6.22598 23.9493 6.34807 23.9999 6.47538 23.9999H17.5443C17.6716 23.9999 17.7937 23.9493 17.8837 23.8593C17.9737 23.7693 18.0243 23.6472 18.0243 23.5199C18.0243 23.3926 17.9737 23.2705 17.8837 23.1804C17.7937 23.0904 17.6716 23.0399 17.5443 23.0399H12.4898V20.0197C16.6827 19.7696 20.0196 16.2891 20.0196 12.0343V10.23C20.0196 10.1027 19.9691 9.98061 19.879 9.89059C19.789 9.80057 19.6669 9.75 19.5396 9.75C19.4123 9.75 19.2902 9.80057 19.2002 9.89059C19.1102 9.98061 19.0596 10.1027 19.0596 10.23V12.0348C19.0596 15.9214 15.8974 19.0841 12.0098 19.0841C8.12227 19.0841 4.96001 15.9214 4.96001 12.0343V10.23C4.96001 10.1027 4.90944 9.98061 4.81942 9.89059C4.7294 9.80057 4.60731 9.75 4.48 9.75C4.3527 9.75 4.23061 9.80057 4.14059 9.89059C4.05057 9.98061 4 10.1027 4 10.23V12.0348C4 16.2891 7.33698 19.7696 11.5298 20.0197Z\" fill=\"CurrentColor\" />\n <path d=\"M12.0067 16.7132C14.5867 16.7132 16.6853 14.6147 16.6853 12.0346V4.67859C16.6853 2.09858 14.5867 0 12.0067 0C9.4267 0 7.32812 2.09858 7.32812 4.67859V12.0346C7.32812 14.6147 9.4267 16.7132 12.0067 16.7132ZM8.28813 4.67859C8.28813 2.62802 9.95662 0.960007 12.0067 0.960007C14.0568 0.960007 15.7253 2.62802 15.7253 4.67859V12.0346C15.7253 14.0852 14.0568 15.7532 12.0067 15.7532C9.95662 15.7532 8.28813 14.0852 8.28813 12.0346V4.67859Z\" fill=\"CurrentColor\" />\n </svg>\n);\n\nexport const AttachIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <g clipPath=\"url(#attach_clip)\">\n <path d=\"M4.17813 15.1695C3.35175 15.1697 2.54387 14.9248 1.85671 14.4658C1.16955 14.0068 0.634002 13.3542 0.317821 12.5907C0.00164127 11.8272 -0.0809573 10.9871 0.0804774 10.1766C0.241912 9.36615 0.640124 8.6218 1.22473 8.03772L7.38945 1.87227C7.49167 1.77005 7.63031 1.71262 7.77488 1.71262C7.91944 1.71262 8.05809 1.77005 8.16031 1.87227C8.26253 1.9745 8.31996 2.11314 8.31996 2.25771C8.31996 2.40227 8.26253 2.54092 8.16031 2.64314L1.99486 8.80786C1.41359 9.38914 1.08503 10.1729 1.08203 10.9913C1.07903 11.8097 1.40196 12.5959 1.97897 13.1814C2.55598 13.7668 3.33986 14.1017 4.15823 14.1075C4.97659 14.1132 5.76532 13.7893 6.35061 13.212L14.325 5.20856C14.6899 4.83175 14.8921 4.3266 14.8879 3.80208C14.8837 3.27756 14.6734 2.77572 14.3025 2.40482C13.9316 2.03392 13.4298 1.82368 12.9053 1.81947C12.3807 1.81526 11.8756 2.01741 11.4988 2.38231L5.07759 8.80786C4.90208 8.98338 4.80411 9.22076 4.80411 9.46823C4.80411 9.7157 4.90208 9.95308 5.07759 10.1286C5.25311 10.3041 5.49049 10.4021 5.73796 10.4021C5.98543 10.4021 6.22281 10.3041 6.39833 10.1286L10.4707 5.98306C10.521 5.93099 10.5811 5.88945 10.6475 5.86086C10.714 5.83227 10.7855 5.81721 10.8579 5.81655C10.9302 5.81588 11.002 5.82964 11.0689 5.857C11.1359 5.88437 11.1968 5.9248 11.248 5.97594C11.2992 6.02708 11.3396 6.0879 11.3671 6.15485C11.3945 6.22181 11.4083 6.29355 11.4077 6.36591C11.4071 6.43826 11.3921 6.50977 11.3636 6.57626C11.3351 6.64276 11.2936 6.7029 11.2416 6.75319L7.13225 10.8633C6.94673 11.0488 6.72646 11.196 6.48404 11.2965C6.24162 11.3969 5.98179 11.4487 5.71938 11.4487C5.45697 11.4487 5.19713 11.3971 4.95468 11.2967C4.71223 11.1963 4.49194 11.0491 4.30636 10.8636C4.12079 10.6781 3.97357 10.4578 3.87312 10.2154C3.77267 9.97299 3.72095 9.71315 3.72092 9.45074C3.72085 8.92079 3.93131 8.41251 4.306 8.03772L10.7286 1.61944C11.3077 1.0403 12.0931 0.714912 12.912 0.714844C13.731 0.714776 14.5164 1.04004 15.0955 1.61907C15.6747 2.19811 16.0001 2.98349 16.0001 3.80244C16.0002 4.6214 15.6749 5.40683 15.0959 5.98597L7.13298 13.946C6.74578 14.3351 6.28527 14.6436 5.77807 14.8536C5.27088 15.0636 4.72708 15.171 4.17813 15.1695Z\" fill=\"CurrentColor\" />\n </g>\n <defs>\n <clipPath id=\"attach_clip\"><rect width=\"16\" height=\"16\" fill=\"white\" /></clipPath>\n </defs>\n </svg>\n);\n\nexport const SmileIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M8.0026 14.6673C11.6845 14.6673 14.6693 11.6825 14.6693 8.00065C14.6693 4.31875 11.6845 1.33398 8.0026 1.33398C4.32071 1.33398 1.33594 4.31875 1.33594 8.00065C1.33594 11.6825 4.32071 14.6673 8.0026 14.6673Z\" stroke=\"black\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.33594 9.33398C5.33594 9.33398 6.33594 10.6673 8.0026 10.6673C9.66927 10.6673 10.6693 9.33398 10.6693 9.33398\" stroke=\"black\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M6 6H6.00667\" stroke=\"black\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10 6H10.0067\" stroke=\"black\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const ProfileCardIcon = ({ className }: IconProps) => (\n <svg className={className} width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2\" y=\"2.66406\" width=\"12\" height=\"10.6667\" rx=\"3\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <circle cx=\"5.99935\" cy=\"6.66927\" r=\"1.33333\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10 5.33333H11.3333\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10 7.9974H11.3333\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M4.66602 10.6693H11.3327\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const NewLanguageIcon = ({ className }: IconProps) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M9.99414 10.548C9.99414 10.5385 9.99731 10.521 10.0037 10.4955L10.8914 7.58423C10.9167 7.50464 10.9749 7.44336 11.0656 7.40039C11.1562 7.35742 11.2604 7.33594 11.3782 7.33594C11.4958 7.33594 11.6001 7.35742 11.6908 7.40039C11.7815 7.44336 11.8395 7.50464 11.865 7.58423L12.7574 10.4955C12.7638 10.521 12.7671 10.5385 12.7671 10.548C12.7671 10.6307 12.7153 10.7024 12.6119 10.7628C12.5085 10.8232 12.4011 10.8534 12.2898 10.8534C12.153 10.8534 12.0718 10.8074 12.0464 10.7151L11.8842 10.1185H10.8771L10.7148 10.7151C10.6893 10.8074 10.6082 10.8534 10.4714 10.8534C10.36 10.8534 10.2526 10.8232 10.1492 10.7628C10.0458 10.7024 9.99414 10.6307 9.99414 10.548ZM11.0298 9.54578H11.7266L11.3782 8.26672L11.0298 9.54578Z\" fill=\"currentColor\" />\n <path d=\"M13.7277 5.55713H10.5369V3.99109C10.5369 2.73816 9.51758 1.71875 8.26453 1.71875H2.27234C1.01941 1.71875 0 2.73816 0 3.99109V6.65881C0 7.89465 0.991577 8.9032 2.22107 8.93067C2.21289 9.18982 2.18396 9.47852 2.13452 9.79297C2.10107 10.0052 2.18005 10.2139 2.34558 10.3511C2.45667 10.4431 2.59204 10.491 2.73035 10.491C2.79919 10.491 2.86877 10.479 2.93652 10.4548C3.38696 10.2938 4.17053 9.8866 4.57458 8.93115H6.82654V10.4973C6.82654 11.7502 7.84595 12.7697 9.09888 12.7697H11.4254C11.8296 13.7251 12.613 14.1322 13.0636 14.2933C13.1312 14.3175 13.2008 14.3293 13.2697 14.3293C13.408 14.3293 13.5433 14.2815 13.6544 14.1895C13.8201 14.0524 13.8989 13.8436 13.8655 13.6313C13.816 13.317 13.7871 13.0282 13.7789 12.769C15.0084 12.7417 16 11.7332 16 10.4973V7.82959C16 6.57654 14.9806 5.55713 13.7277 5.55713ZM6.48767 4.29578C6.66028 4.29578 6.80017 4.15588 6.80017 3.98328C6.80017 3.81067 6.66028 3.67078 6.48767 3.67078H5.29553V3.20312C5.29553 3.03052 5.15564 2.89062 4.98303 2.89062C4.81055 2.89062 4.67053 3.03052 4.67053 3.20312V3.67078H3.47852C3.30591 3.67078 3.16602 3.81067 3.16602 3.98328C3.16602 4.15588 3.30591 4.29578 3.47852 4.29578H6.48767ZM15.375 10.4972C15.375 11.4056 14.636 12.1447 13.7277 12.1447H13.467C13.2991 12.1447 13.1611 12.2775 13.1548 12.4454C13.1412 12.8063 13.1708 13.226 13.2427 13.6934C12.7877 13.5238 12.2042 13.1554 11.9375 12.358C11.8949 12.2306 11.7755 12.1447 11.6412 12.1447H9.09888C8.19055 12.1447 7.45154 11.4056 7.45154 10.4972V7.82947C7.45154 7.54932 7.52307 7.27271 7.65833 7.02966C7.74231 6.87878 7.68811 6.6886 7.53723 6.60461C7.38647 6.52063 7.19617 6.57495 7.11218 6.72571C6.92529 7.06152 6.82654 7.44312 6.82654 7.82947V8.30615H4.35876C4.22437 8.30615 4.10498 8.39209 4.06238 8.51953C3.79578 9.3169 3.21228 9.68543 2.75732 9.85486C2.8291 9.38745 2.85864 8.96777 2.84521 8.60693C2.83887 8.43897 2.70093 8.30615 2.53284 8.30615H2.27234C1.36401 8.30615 0.625 7.56714 0.625 6.65881V3.99109C0.625 3.08276 1.36401 2.34375 2.27234 2.34375H8.26453C9.17285 2.34375 9.91187 3.08276 9.91187 3.99109V5.55725H9.46875C9.29614 5.55725 9.15625 5.69714 9.15625 5.86975C9.15625 6.04236 9.29614 6.18225 9.46875 6.18225H13.7277C14.636 6.18225 15.375 6.92127 15.375 7.82959V10.4972Z\" fill=\"currentColor\" />\n </svg>\n);\n\nexport const ChatInfoIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <circle cx=\"9\" cy=\"9\" r=\"6.75\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M9.00016 6H9.00766\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M8.25 9H9V12H9.75\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const ArrowBackUpIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M6.13128 10.3687C6.47299 10.7104 7.02701 10.7104 7.36872 10.3687C7.71043 10.027 7.71043 9.47299 7.36872 9.13128L6.75 9.75L6.13128 10.3687ZM3.75 6.75L3.13128 6.13128C2.78957 6.47299 2.78957 7.02701 3.13128 7.36872L3.75 6.75ZM7.36872 4.36872C7.71043 4.02701 7.71043 3.47299 7.36872 3.13128C7.02701 2.78957 6.47299 2.78957 6.13128 3.13128L6.75 3.75L7.36872 4.36872ZM3.75 5.875C3.26675 5.875 2.875 6.26675 2.875 6.75C2.875 7.23325 3.26675 7.625 3.75 7.625V6.75V5.875ZM11.25 11.875C10.7668 11.875 10.375 12.2668 10.375 12.75C10.375 13.2332 10.7668 13.625 11.25 13.625V12.75V11.875ZM6.75 9.75L7.36872 9.13128L4.36872 6.13128L3.75 6.75L3.13128 7.36872L6.13128 10.3687L6.75 9.75ZM3.75 6.75L4.36872 7.36872L7.36872 4.36872L6.75 3.75L6.13128 3.13128L3.13128 6.13128L3.75 6.75ZM3.75 6.75V7.625H12V6.75V5.875H3.75V6.75ZM12 6.75V7.625C13.1736 7.625 14.125 8.5764 14.125 9.75H15H15.875C15.875 7.6099 14.1401 5.875 12 5.875V6.75ZM15 9.75H14.125C14.125 10.9236 13.1736 11.875 12 11.875V12.75V13.625C14.1401 13.625 15.875 11.8901 15.875 9.75H15ZM12 12.75V11.875H11.25V12.75V13.625H12V12.75Z\" fill=\"CurrentColor\" />\n </svg>\n);\n\nexport const FileIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M14 3V7C14 7.55228 14.4477 8 15 8H19\" stroke=\"CurrentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M17 21H7C5.89543 21 5 20.1046 5 19V5C5 3.89543 5.89543 3 7 3H14L19 8V19C19 20.1046 18.1046 21 17 21Z\" stroke=\"CurrentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M9 9H10\" stroke=\"CurrentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M9 13H15\" stroke=\"CurrentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M9 17H15\" stroke=\"CurrentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const MessageReplayIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M6.70469 2.33346C6.87969 2.3918 6.93802 2.5668 6.93802 2.80013C6.93802 3.50013 6.93802 4.25846 6.93802 4.95846V5.07513C7.17135 5.07513 7.40469 5.07513 7.63802 5.07513C8.27969 5.07513 8.97969 5.25013 9.62135 5.48346C10.788 5.95013 11.488 6.7668 11.7797 7.93346C12.013 8.6918 12.013 9.45013 12.0714 10.2668C12.0714 10.4418 12.0714 10.6168 12.0714 10.7335C12.0714 10.9085 11.9547 11.0835 11.7797 11.0835C11.6047 11.0835 11.488 11.0835 11.3714 10.8501C11.2547 10.6168 11.138 10.3835 10.963 10.1501C10.5547 9.45013 9.97135 8.98346 9.27135 8.75013C8.51302 8.45846 7.75469 8.40013 6.93802 8.40013V8.5168C6.93802 9.27513 6.93802 9.97513 6.93802 10.7335C6.93802 10.9085 6.93802 11.0251 6.70469 11.0835C6.52969 11.1418 6.41302 11.0835 6.29635 10.9668C4.83802 9.62513 3.37969 8.28346 1.97969 6.9418C1.92135 6.9418 1.86302 6.82513 1.80469 6.70846V6.53346C1.80469 6.47513 1.92135 6.4168 1.97969 6.35846C3.43802 5.0168 4.83802 3.73346 6.29635 2.3918C6.35469 2.33346 6.47135 2.27513 6.52969 2.2168H6.70469V2.33346Z\" fill=\"CurrentColor\" />\n </svg>\n);\n\nexport const RightArrow = ({ className }: IconProps) => (\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M7.5 18H28.5\" stroke=\"CurrentColor\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M19.5 27L28.5 18\" stroke=\"CurrentColor\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M19.5 9L28.5 18\" stroke=\"CurrentColor\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const FileDownloadIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M11.6641 2.5V5.83333C11.6641 6.29357 12.0372 6.66667 12.4974 6.66667H15.8307\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M14.1641 17.5H5.83073C4.91025 17.5 4.16406 16.7538 4.16406 15.8333V4.16667C4.16406 3.24619 4.91025 2.5 5.83073 2.5H11.6641L15.8307 6.66667V15.8333C15.8307 16.7538 15.0845 17.5 14.1641 17.5Z\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10.0026 9.16602V14.166\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M7.5 11.666L10 14.166L12.5 11.666\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const BusinessInfoIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M2 13.9993H14\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M3.33594 14V4.66667L8.66927 2V14\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12.6641 13.9993V7.33268L8.66406 4.66602\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.9974 5.99992V6.00659\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.9974 7.99992V8.00659\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.9974 9.99992V10.0066\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.9974 11.9999V12.0066\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const ChatMailIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <rect x=\"1.75\" y=\"2.91797\" width=\"10.5\" height=\"8.16667\" rx=\"2\" stroke=\"black\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M1.75 4.08203L7 7.58203L12.25 4.08203\" stroke=\"black\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const ChatPhoneCallIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M3.33333 2.66602H6L7.33333 5.99935L5.66667 6.99935C6.38064 8.44704 7.55231 9.61871 9 10.3327L10 8.66602L13.3333 9.99935V12.666C13.3333 13.4024 12.7364 13.9993 12 13.9993C6.61843 13.6723 2.32704 9.38092 2 3.99935C2 3.26297 2.59695 2.66602 3.33333 2.66602\" stroke=\"CurrentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const BadgeHomeIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M2.91667 7H1.75L7 1.75L12.25 7H11.0833\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M2.91406 7V11.0833C2.91406 11.7277 3.4364 12.25 4.08073 12.25H9.91406C10.5584 12.25 11.0807 11.7277 11.0807 11.0833V7\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <rect x=\"5.83594\" y=\"7\" width=\"2.33333\" height=\"2.33333\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const BadgeOfficeIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M1.75 12.2507H12.25\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M2.91406 12.25V4.08333L7.58073 1.75V12.25\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M11.0859 12.2507V6.41732L7.58594 4.08398\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.2526 5.24969V5.25552\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.2526 6.99969V7.00552\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.2526 8.74969V8.75552\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.2526 10.4997V10.5055\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const MapPinIcon = ({ className = \"\" }: IconProps) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M11.9974 4.00188V4.00854\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12.0028 8.66599L9.66942 5.33266C9.04883 4.21101 9.31413 2.8065 10.3011 1.9885C11.2881 1.1705 12.7174 1.1705 13.7044 1.9885C14.6914 2.8065 14.9567 4.21101 14.3361 5.33266L12.0028 8.66599\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M7 3.16797L6 2.66797L2 4.66797V13.3346L6 11.3346L10 13.3346L14 11.3346V10.0013\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.9974 2.66797V11.3346\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M9.9974 10V13.3333\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const MenuIcon = ({ className }: IconProps) => (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <circle cx=\"12\" cy=\"5\" r=\"2\" />\n <circle cx=\"12\" cy=\"12\" r=\"2\" />\n <circle cx=\"12\" cy=\"19\" r=\"2\" />\n </svg>\n);\n\nexport const PinIcon = ({ className }: IconProps) => (\n <svg className={className} width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12.5007 3.75L9.16732 7.08333L5.83398 8.33333L4.58398 9.58333L10.4173 15.4167L11.6673 14.1667L12.9173 10.8333L16.2507 7.5\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M7.5 12.5L3.75 16.25\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12.084 3.33594L16.6673 7.91927\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const PinOffIcon = ({ className }: IconProps) => (\n <svg className={className} width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12.5007 3.75L9.16732 7.08333L5.83398 8.33333L4.58398 9.58333L10.4173 15.4167L11.6673 14.1667L12.9173 10.8333L16.2507 7.5\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M7.5 12.5L3.75 16.25\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12.084 3.33594L16.6673 7.91927\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M3 3L17 17\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const ChatTrashIcon = ({ className }: IconProps) => (\n <svg className={className} width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.33398 5.83073H16.6673\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M8.33268 9.16406V14.1641\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M11.6667 9.16406V14.1641\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M4.16602 5.83594L4.99935 15.8359C4.99935 16.7564 5.74554 17.5026 6.66602 17.5026H13.3327C14.2532 17.5026 14.9993 16.7564 14.9993 15.8359L15.8327 5.83594\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M7.5 5.83333V3.33333C7.5 2.8731 7.8731 2.5 8.33333 2.5H11.6667C12.1269 2.5 12.5 2.8731 12.5 3.33333V5.83333\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n","import React, { useState, useRef, useEffect } from \"react\";\nimport { cn } from \"../utils/cn\";\n\ntype Option = { label: string; value: string };\n\ntype Props = {\n options: Option[];\n value?: string;\n onChange?: (value: string) => void;\n placeholder?: string;\n size?: number;\n className?: string;\n disabled?: boolean;\n};\n\nconst Select: React.FC<Props> = ({ options, value, onChange, placeholder = \"Select...\", size = 36, className, disabled }) => {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n const selected = options.find((o) => o.value === value);\n\n useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener(\"mousedown\", onDoc);\n return () => document.removeEventListener(\"mousedown\", onDoc);\n }, [open]);\n\n return (\n <div ref={ref} className={cn(\"relative\", className)}>\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => setOpen((v) => !v)}\n className={cn(\n \"flex w-full items-center justify-between rounded-[4px] border border-[#cacaca] bg-white px-3 text-[13px] text-left\",\n disabled && \"cursor-not-allowed opacity-50\",\n )}\n style={{ height: size }}\n >\n <span className={cn(selected ? \"text-black\" : \"text-[#9C9C9C]\")}>\n {selected ? selected.label : placeholder}\n </span>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={cn(\"shrink-0 transition-transform\", open && \"rotate-180\")}>\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n </button>\n {open && (\n <div className=\"absolute left-0 right-0 top-full z-50 mt-1 max-h-[200px] overflow-y-auto rounded-[4px] border border-[#e1e1e1] bg-white shadow-[0_4px_16px_rgba(0,0,0,0.08)]\">\n {options.map((opt) => (\n <button\n key={opt.value}\n type=\"button\"\n className={cn(\n \"flex w-full items-center px-3 py-2 text-[13px] text-left hover:bg-black/5\",\n opt.value === value && \"bg-black/5 font-medium\",\n )}\n onClick={() => {\n onChange?.(opt.value);\n setOpen(false);\n }}\n >\n {opt.label}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n};\n\nexport default Select;\n","\"use client\";\r\n\r\nimport clsx from \"clsx\";\r\nimport React, { useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\n\r\nimport { ChatInfoIcon } from \"../../icons\";\r\nimport Button from \"../../ui/Button\";\r\nimport Select from \"../../ui/Select\";\r\n\r\n/* ───────── Types ───────── */\r\n\r\nexport type TranslateSettings = {\r\n incomingTarget?: string;\r\n autoIncoming: boolean;\r\n enableOutgoing: boolean;\r\n outgoingFrom: string;\r\n outgoingTo: string;\r\n};\r\n\r\ntype Props = {\r\n open: boolean;\r\n onClose: () => void;\r\n onSave: (settings: TranslateSettings) => void;\r\n initial?: Partial<TranslateSettings>;\r\n className?: string;\r\n /** Controls layout / placement */\r\n variant?: \"single\" | \"group\";\r\n};\r\n\r\n/* Language options */\r\nconst LANG_OPTIONS = [\r\n \"English\",\r\n \"Bangla\",\r\n \"Arabic\",\r\n \"Chinese\",\r\n \"French\",\r\n \"German\",\r\n \"Hindi\",\r\n \"Italian\",\r\n \"Japanese\",\r\n \"Korean\",\r\n \"Portuguese\",\r\n \"Russian\",\r\n \"Spanish\",\r\n \"Turkish\",\r\n \"Urdu\",\r\n].map((l) => ({ label: l, value: l }));\r\n\r\nconst ChatTranslateSettingsModal: React.FC<Props> = ({\r\n open,\r\n onClose,\r\n onSave,\r\n initial,\r\n className,\r\n variant = \"group\",\r\n}) => {\r\n const [incomingTarget, setIncomingTarget] = useState(\r\n initial?.incomingTarget ?? \"\",\r\n );\r\n\r\n // ESC to close\r\n React.useEffect(() => {\r\n if (!open) return;\r\n const onKey = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") onClose();\r\n };\r\n window.addEventListener(\"keydown\", onKey);\r\n return () => window.removeEventListener(\"keydown\", onKey);\r\n }, [open, onClose]);\r\n\r\n if (!open) return null;\r\n\r\n const isSingle = variant === \"single\";\r\n\r\n const handleSave = () => {\r\n onSave({\r\n incomingTarget,\r\n autoIncoming: true,\r\n enableOutgoing: false,\r\n outgoingFrom: \"English\",\r\n outgoingTo: \"Bangla\",\r\n });\r\n };\r\n\r\n const content = (\r\n <div\r\n className={clsx(\r\n isSingle\r\n ? \"fixed inset-0 z-9999 flex\"\r\n : \"absolute inset-0 z-50 flex items-center justify-center\",\r\n )}\r\n onClick={() => onClose()}\r\n >\r\n {/* Backdrop */}\r\n <div className={isSingle ? \"fixed inset-0 bg-black/30\" : \"absolute inset-0 bg-black/30\"} />\r\n\r\n <div\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby=\"translate-settings-title\"\r\n onClick={(e) => e.stopPropagation()}\r\n className={clsx(\r\n isSingle\r\n ? \"fixed bottom-6 right-6 w-[500px] max-w-[95vw]\"\r\n : \"relative w-[500px] max-w-[95vw]\",\r\n \"z-10000 overflow-visible rounded-md bg-white shadow-[0_12px_30px_rgba(0,0,0,0.18)]\",\r\n className,\r\n )}\r\n >\r\n {/* Header */}\r\n <div className=\"flex h-[44px] w-full items-center rounded-t-md bg-[#f8f8f8] px-6 py-[7px] shadow-[0px_2px_2px_rgba(47,47,47,0.08)]\">\r\n <h2\r\n id=\"translate-settings-title\"\r\n className=\"w-full text-[20px] font-semibold text-black\"\r\n >\r\n Translation Settings\r\n </h2>\r\n </div>\r\n\r\n {/* Body */}\r\n <div className=\"p-4\">\r\n <div className=\"grid gap-2\">\r\n <span className=\"text-[12px] font-medium text-black\">\r\n Translate message into\r\n </span>\r\n\r\n <Select\r\n options={LANG_OPTIONS}\r\n value={incomingTarget}\r\n onChange={setIncomingTarget}\r\n placeholder=\"Select Language\"\r\n size={36}\r\n />\r\n </div>\r\n\r\n <div className=\"mt-6 flex items-start gap-1.5 text-[#FF5300]\">\r\n <ChatInfoIcon className=\"h-4 w-4 shrink-0\" />\r\n <p className=\"text-xs leading-relaxed\">\r\n Automatically translate incoming messages. The language you save\r\n here will be used to display all incoming messages. You can choose\r\n from Spanish, Russian, French, Arabic, Portuguese, Turkish, Bangla,\r\n and among others.\r\n </p>\r\n </div>\r\n </div>\r\n\r\n {/* Footer */}\r\n <div className=\"flex h-[52px] items-center justify-end rounded-b-md bg-[#f8f8f8] px-6\">\r\n <div className=\"flex items-center gap-3\">\r\n <Button\r\n onClick={onClose}\r\n variant=\"outlined\"\r\n color=\"black\"\r\n size=\"34\"\r\n >\r\n Cancel\r\n </Button>\r\n <Button\r\n onClick={handleSave}\r\n variant=\"filled\"\r\n color=\"black\"\r\n size=\"34\"\r\n >\r\n Update\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n\r\n if (isSingle) {\r\n return createPortal(content, document.body);\r\n }\r\n\r\n return content;\r\n};\r\n\r\nexport default ChatTranslateSettingsModal;\r\n","\"use client\";\r\n\r\nimport type { FC } from \"react\";\r\nimport { FileIcon, ChatXIcon } from \"../../icons\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\n/* =======================\r\n Helpers\r\n======================= */\r\n\r\nconst extColor = (ext: string): string => {\r\n const e = ext.toLowerCase();\r\n\r\n if (e === \"pdf\") {\r\n return \"text-[#D93025]\";\r\n }\r\n if (e === \"ppt\" || e === \"pptx\") {\r\n return \"text-[#E69138]\";\r\n }\r\n if (e === \"doc\" || e === \"docx\") {\r\n return \"text-[#2B579A]\";\r\n }\r\n\r\n return \"text-[#6B7280]\";\r\n};\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\n\r\nexport type FilePreview = {\r\n name: string;\r\n sizeMB: number;\r\n ext: string;\r\n href: string;\r\n downloadName?: string;\r\n};\r\n\r\ntype FilePreviewChipProps = {\r\n name: string;\r\n sizeMB: number;\r\n ext: string;\r\n onRemove: () => void;\r\n};\r\n\r\ntype ImageThumbProps = {\r\n url: string;\r\n onRemove: () => void;\r\n};\r\n\r\ntype AttachmentPreviewStripProps = {\r\n imgPreviews: string[];\r\n filePreviews: FilePreview[];\r\n onRemoveImage: (index: number) => void;\r\n onRemoveFile: (index: number) => void;\r\n};\r\n\r\n/* =======================\r\n Sub Components\r\n======================= */\r\n\r\nexport const FilePreviewChip: FC<FilePreviewChipProps> = ({ name, sizeMB, ext, onRemove }) => {\r\n return (\r\n <div\r\n className={cn(\r\n \"mr-2 inline-flex h-[65px] max-w-[185px] items-center gap-3 whitespace-nowrap rounded-sm\",\r\n \"border border-[#e1e1e1] bg-white px-3 py-2\",\r\n )}\r\n >\r\n <div className=\"flex min-w-0 items-center gap-2\">\r\n <div className=\"min-w-0\">\r\n <div className=\"flex items-center gap-1\">\r\n <FileIcon className={cn(\"h-[18px] w-[18px]\", extColor(ext))} />\r\n <div className=\"truncate text-[13px] font-normal text-black\">{name}</div>\r\n </div>\r\n\r\n <div className=\"mt-2 flex items-center gap-2 text-xs text-[#636363]\">\r\n <span>{sizeMB.toFixed(1)} MB</span>\r\n <span className=\"h-3 w-px bg-[#e1e1e1]\" />\r\n <span className=\"uppercase\">{ext}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n onClick={onRemove}\r\n title=\"Remove\"\r\n aria-label=\"Remove file\"\r\n className={cn(\r\n \"grid h-8 w-8 place-items-center rounded-full bg-white text-[#3D3D3D]\",\r\n \"shadow-[0px_2px_4px_0px_#A5A3AE4D] hover:bg-black/5\",\r\n )}\r\n >\r\n <ChatXIcon className=\"h-[18px] w-[18px]\" />\r\n </button>\r\n </div>\r\n );\r\n};\r\n\r\nconst ImageThumb: FC<ImageThumbProps> = ({ url, onRemove }) => {\r\n return (\r\n <div\r\n className={cn(\r\n \"relative mr-2 inline-block h-[65px] w-[65px] rounded-sm\",\r\n \"border border-[#e1e1e1] bg-[#F7F7F7]\",\r\n )}\r\n >\r\n <img src={url} alt=\"\" className=\"h-full w-full rounded-sm object-cover\" loading=\"lazy\" />\r\n\r\n <button\r\n type=\"button\"\r\n onClick={onRemove}\r\n aria-label=\"Remove image\"\r\n title=\"Remove image\"\r\n className={cn(\r\n \"absolute left-1/2 top-1/2 z-10 grid h-6 w-6 -translate-x-1/2 -translate-y-1/2 place-items-center\",\r\n \"rounded-full bg-black/30 text-white\",\r\n \"shadow-[0px_2px_4px_0px_#A5A3AE4D]\",\r\n )}\r\n >\r\n <ChatXIcon className=\"h-4 w-4 text-white\" />\r\n </button>\r\n </div>\r\n );\r\n};\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\n\r\n/** Single-row, horizontally scrollable preview strip */\r\nconst AttachmentPreviewStrip: FC<AttachmentPreviewStripProps> = ({\r\n imgPreviews,\r\n filePreviews,\r\n onRemoveFile,\r\n onRemoveImage,\r\n}) => {\r\n const has = imgPreviews.length > 0 || filePreviews.length > 0;\r\n\r\n if (!has) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className={cn(\"mx-auto mb-2 max-w-[410px] overflow-x-auto custom-scroll\")}>\r\n <div className=\"flex items-start whitespace-nowrap\">\r\n {filePreviews.map((file, index) => (\r\n <FilePreviewChip\r\n key={`${file.name}-${index}`}\r\n name={file.name}\r\n sizeMB={file.sizeMB}\r\n ext={file.ext}\r\n onRemove={() => onRemoveFile(index)}\r\n />\r\n ))}\r\n\r\n {imgPreviews.map((url, index) => (\r\n <ImageThumb key={`${url}-${index}`} url={url} onRemove={() => onRemoveImage(index)} />\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default AttachmentPreviewStrip;\r\n","\"use client\";\r\n\r\nimport { useRef, useState } from \"react\";\r\n\r\nimport { ArrowSendAngleIcon, ArrowSendIcon, RecordMicIcon, ChatXIcon } from \"../../icons\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\n\r\ntype ChatComposerBarProps = {\r\n recording: boolean;\r\n seconds: number;\r\n\r\n // typing\r\n isTyping: boolean;\r\n textRef: React.RefObject<HTMLTextAreaElement | null>;\r\n text: string;\r\n onTextChange: (v: string) => void;\r\n onAutoGrow: () => void;\r\n\r\n // attachments\r\n hasAttachments: boolean;\r\n canSendArrow: boolean;\r\n\r\n // actions\r\n startRecording: () => void;\r\n stopRecording: (send: boolean) => void;\r\n sendText: () => void;\r\n sendAttachments: () => void;\r\n\r\n // util\r\n fmtTime: (s: number) => string;\r\n};\r\n\r\n/* =======================\r\n Gradients\r\n======================= */\r\n\r\nconst idleGradient =\r\n \"linear-gradient(90.85deg, rgba(51, 201, 212, 0.5) 0%, rgba(39, 83, 251, 0.5) 29.98%, rgba(39, 83, 251, 0.5) 49.97%, rgba(39, 83, 251, 0.5) 64.96%, rgba(235, 67, 255, 0.5) 99.94%)\";\r\n\r\nconst activeGradient =\r\n \"linear-gradient(90.85deg, #33C9D4 0%, #2753FB 29.98%, #2753FB 49.97%, #2753FB 64.96%, #EB43FF 99.94%)\";\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\n\r\nconst ChatComposerBar = ({\r\n recording,\r\n seconds,\r\n isTyping,\r\n textRef,\r\n text,\r\n onTextChange,\r\n onAutoGrow,\r\n hasAttachments,\r\n canSendArrow,\r\n startRecording,\r\n stopRecording,\r\n sendText,\r\n sendAttachments,\r\n fmtTime,\r\n}: ChatComposerBarProps) => {\r\n const composingRef = useRef(false);\r\n const [isFocused, setIsFocused] = useState(false);\r\n\r\n const isActiveBorder = isFocused || recording;\r\n\r\n if (!recording) {\r\n return (\r\n <div className=\"flex w-full items-stretch gap-2\">\r\n <div\r\n className=\"w-full rounded-sm p-px transition-[background] duration-200\"\r\n style={{\r\n background: isActiveBorder ? activeGradient : idleGradient,\r\n }}\r\n >\r\n <div className=\"flex min-h-[50px] w-full items-center justify-between rounded-[3px] bg-white\">\r\n <div className=\"flex w-full items-center justify-between p-[3px]\">\r\n {!isTyping ? (\r\n <button\r\n type=\"button\"\r\n onClick={startRecording}\r\n className=\"grid h-[46px] w-[46px] place-items-center rounded-xs bg-[#f8f8f8] text-[#ff5301] hover:brightness-95\"\r\n title=\"Record voice\"\r\n aria-label=\"Record voice\"\r\n >\r\n <RecordMicIcon className=\"h-6 w-6\" />\r\n </button>\r\n ) : null}\r\n\r\n <textarea\r\n ref={textRef}\r\n rows={1}\r\n autoFocus\r\n placeholder=\"Type a message\"\r\n className=\"custom-scroll-hidden max-h-[200px] flex-1 resize-none bg-transparent px-3 py-2 outline-none placeholder:text-[#777]\"\r\n value={text}\r\n onChange={(e) => onTextChange(e.target.value)}\r\n onInput={onAutoGrow}\r\n onFocus={() => setIsFocused(true)}\r\n onBlur={() => setIsFocused(false)}\r\n onCompositionStart={() => {\r\n composingRef.current = true;\r\n }}\r\n onCompositionEnd={() => {\r\n composingRef.current = false;\r\n onAutoGrow();\r\n }}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\" && e.shiftKey) {\r\n return;\r\n }\r\n if (composingRef.current) {\r\n return;\r\n }\r\n if (e.key === \"Enter\") {\r\n e.preventDefault();\r\n if (text.length > 0) {\r\n sendText();\r\n }\r\n }\r\n }}\r\n />\r\n </div>\r\n\r\n {!canSendArrow ? (\r\n <div className=\"grid h-full w-px place-items-center bg-[#E7E7E7]\" />\r\n ) : null}\r\n\r\n <div className=\"px-2\">\r\n {isTyping ? (\r\n <div className=\"flex items-center\">\r\n <div className=\"h-10 w-px border-l border-[#CCCCCC]\" />\r\n <button\r\n type=\"button\"\r\n onClick={sendText}\r\n className={cn(\r\n \"ms-1 grid h-[40px] w-[40px] place-items-center rounded-full\",\r\n \"text-[#ff5301] hover:bg-[#f8f8f8]\",\r\n )}\r\n title={hasAttachments ? \"Send attachments\" : \"Send\"}\r\n aria-label=\"Send\"\r\n >\r\n <ArrowSendAngleIcon className=\"h-6 w-6\" />\r\n </button>\r\n </div>\r\n ) : (\r\n <div className=\"flex items-center\">\r\n <div className=\"h-10 w-px border-l border-[#CCCCCC]\" />\r\n <button\r\n type=\"button\"\r\n onClick={sendAttachments}\r\n disabled={!hasAttachments}\r\n className={cn(\r\n \"ms-1 grid h-[40px] w-[40px] place-items-center rounded-full hover:bg-[#f8f8f8]\",\r\n hasAttachments ? \"text-[#ff5301]\" : \"text-[#B9C3D4]\",\r\n )}\r\n title={hasAttachments ? \"Send attachments\" : \"Send\"}\r\n aria-label=\"Send\"\r\n >\r\n <ArrowSendIcon className=\"h-6 w-6\" />\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n /* =======================\r\n Recording state UI\r\n ======================= */\r\n\r\n return (\r\n <div className=\"flex w-full items-stretch gap-2\">\r\n <div className=\"w-full rounded-sm p-px\" style={{ background: activeGradient }}>\r\n <div className=\"flex h-[52px] w-full items-center justify-between rounded-[3px] bg-white\">\r\n <button\r\n type=\"button\"\r\n className=\"ms-[3px] grid h-[46px] w-[46px] place-items-center rounded-xs bg-[#f8f8f8] text-[#ff5301] hover:brightness-95\"\r\n aria-label=\"Recording\"\r\n title=\"Recording\"\r\n >\r\n <RecordMicIcon\r\n className={cn(\r\n \"h-6 w-6\",\r\n seconds % 2 === 0\r\n ? \"text-[#929292]\"\r\n : \"text-[#ff5301]\",\r\n )}\r\n />\r\n </button>\r\n\r\n <div className=\"px-3 text-[13px]\">{fmtTime(seconds)}</div>\r\n\r\n <div className=\"ml-auto flex items-center gap-3 pr-2\">\r\n <button\r\n type=\"button\"\r\n onClick={() => stopRecording(false)}\r\n className=\"grid h-8 w-8 place-items-center rounded-full text-[#3D3D3D] hover:bg-black/5\"\r\n title=\"Discard\"\r\n aria-label=\"Discard recording\"\r\n >\r\n <ChatXIcon className=\"h-5 w-5\" />\r\n </button>\r\n\r\n <div className=\"h-6 w-px bg-[#E7E7E7]\" />\r\n\r\n <button\r\n type=\"button\"\r\n onClick={() => stopRecording(true)}\r\n className=\"grid h-10 w-[40px] place-items-center rounded-full text-[#ff5301]\"\r\n title={hasAttachments ? \"Send attachments\" : \"Send\"}\r\n aria-label=\"Send\"\r\n >\r\n <ArrowSendAngleIcon className=\"h-6 w-6\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatComposerBar;\r\n","\"use client\";\r\n\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\n\r\nimport { BusinessInfoIcon, ChatMailIcon, ChatPhoneCallIcon, ChatXIcon } from \"../../../icons\";\r\n\r\nimport { cn } from \"../../../utils/cn\";\r\nimport type { BusinessCard } from \"../types\";\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\n\r\ntype BusinessCardDropupProps = {\r\n open: boolean;\r\n onClose: () => void;\r\n onSend: (card: BusinessCard) => void;\r\n /** Position against this button (like EmojiDropup) */\r\n anchorRef?: React.RefObject<HTMLElement | null>;\r\n className?: string;\r\n};\r\n\r\n/* =======================\r\n Constants\r\n======================= */\r\n\r\nconst WIDTH = 380;\r\nconst GAP_Y = 0;\r\nconst PADDING = 0;\r\n\r\nconst defaultCard: BusinessCard = {\r\n avatarSrc: \"/chat/img/demo-a.jpg\",\r\n name: \"Arman Hossain\",\r\n country: \"Bangladesh\",\r\n flag: \"🇧🇩\",\r\n company: \"Easy Fashion\",\r\n email: \"aminul@oceanget.com\",\r\n phone: \"+880 1712 345678\",\r\n};\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\n\r\nconst BusinessCardDropup = ({\r\n open,\r\n onClose,\r\n onSend,\r\n anchorRef,\r\n className,\r\n}: BusinessCardDropupProps) => {\r\n const panelRef = useRef<HTMLDivElement | null>(null);\r\n const [pos, setPos] = useState<{ left: number; top: number } | null>(null);\r\n const [form] = useState<BusinessCard>(defaultCard);\r\n\r\n const getPosition = useCallback(() => {\r\n const anchor = anchorRef?.current;\r\n const panel = panelRef.current;\r\n\r\n if (!anchor || !panel) {\r\n return null;\r\n }\r\n\r\n const ar = anchor.getBoundingClientRect();\r\n const ph = panel.offsetHeight + 12;\r\n\r\n let left = Math.min(ar.left, window.innerWidth - PADDING - WIDTH);\r\n left = Math.max(left, PADDING);\r\n\r\n let top = ar.top - GAP_Y - ph;\r\n if (top < PADDING) {\r\n top = Math.min(ar.bottom + GAP_Y, window.innerHeight - ph - PADDING);\r\n }\r\n\r\n return { left: Math.round(left - 18), top: Math.round(top) };\r\n }, [anchorRef]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n\r\n let rafId = 0;\r\n const update = () => {\r\n const next = getPosition();\r\n if (next) {\r\n setPos(next);\r\n }\r\n };\r\n\r\n rafId = requestAnimationFrame(update);\r\n\r\n const onScroll = () => {\r\n cancelAnimationFrame(rafId);\r\n rafId = requestAnimationFrame(update);\r\n };\r\n const onResize = () => {\r\n cancelAnimationFrame(rafId);\r\n rafId = requestAnimationFrame(update);\r\n };\r\n\r\n window.addEventListener(\"scroll\", onScroll, true);\r\n window.addEventListener(\"resize\", onResize);\r\n\r\n return () => {\r\n cancelAnimationFrame(rafId);\r\n window.removeEventListener(\"scroll\", onScroll, true);\r\n window.removeEventListener(\"resize\", onResize);\r\n };\r\n }, [open, getPosition]);\r\n\r\n // Outside click & ESC\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n\r\n const onDoc = (e: MouseEvent) => {\r\n if (panelRef.current && !panelRef.current.contains(e.target as Node)) {\r\n onClose();\r\n }\r\n };\r\n\r\n const onEsc = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") {\r\n onClose();\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousedown\", onDoc);\r\n document.addEventListener(\"keydown\", onEsc);\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", onDoc);\r\n document.removeEventListener(\"keydown\", onEsc);\r\n };\r\n }, [open, onClose]);\r\n\r\n const disabled = useMemo(() => !form.name || !form.company || !form.email || !form.phone, [form]);\r\n\r\n if (!open) {\r\n return null;\r\n }\r\n\r\n const body = (\r\n <div\r\n ref={panelRef}\r\n role=\"dialog\"\r\n aria-label=\"Business card\"\r\n className={cn(\r\n \"z-9999 relative rounded-[12px] border border-[#EFEFEF] bg-white\",\r\n \"p-3 shadow-[0_8px_24px_rgba(0,0,0,0.12)]\",\r\n className,\r\n )}\r\n style={{\r\n width: WIDTH,\r\n left: pos?.left ?? -9999,\r\n top: pos?.top ?? -9999,\r\n position: \"fixed\",\r\n }}\r\n >\r\n {/* Header */}\r\n <div className=\"mb-2 flex items-center justify-between\">\r\n <div className=\"text-lg font-semibold text-black\">Business Card</div>\r\n <button\r\n type=\"button\"\r\n onClick={onClose}\r\n aria-label=\"Close\"\r\n className=\"grid h-8 w-8 place-items-center rounded-full hover:bg-black/5\"\r\n >\r\n <ChatXIcon className=\"h-6 w-6\" />\r\n </button>\r\n </div>\r\n\r\n {/* Card preview */}\r\n <div className=\"flex justify-center\">\r\n <div\r\n className={cn(\r\n \"relative h-[208px] w-[355px] overflow-hidden rounded-[12px] bg-white\",\r\n \"bg-cover bg-no-repeat shadow-[0_2px_12px_rgba(59,51,51,0.1)]\",\r\n )}\r\n style={{ backgroundImage: \"url('/chat/img/card_bg_raw.svg')\" }}\r\n >\r\n <div className=\"flex h-full justify-between gap-4 px-6 py-6\">\r\n <div className=\"flex min-w-0 flex-1 flex-col justify-between\">\r\n <div>\r\n <h3 className=\"text-xl font-semibold text-[#004F4F]\">{form.name}</h3>\r\n\r\n <div className=\"h-px w-[105px] bg-black\" />\r\n\r\n <div className=\"mt-[6px] flex items-center gap-2\">\r\n <span className=\"text-xs font-medium text-[#636363]\">\r\n {form.country}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div className=\"mt-4 mb-10 space-y-1.5 text-xs text-black\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"flex h-5 w-5 items-center justify-center rounded-full bg-[#FFE9DB]\">\r\n <BusinessInfoIcon className=\"h-3 w-3 text-[#EA580C]\" />\r\n </div>\r\n <span className=\"truncate\">{form.company}</span>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"flex h-5 w-5 items-center justify-center rounded-full bg-[#FFE9DB]\">\r\n <ChatMailIcon className=\"h-3 w-3 text-[#EA580C]\" />\r\n </div>\r\n <span className=\"truncate\">{form.email}</span>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"flex h-5 w-5 items-center justify-center rounded-full bg-[#FFE9DB]\">\r\n <ChatPhoneCallIcon className=\"h-3 w-3 text-[#EA580C]\" />\r\n </div>\r\n <span className=\"truncate\">{form.phone}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Footer actions */}\r\n <div className=\"mt-3 flex justify-end gap-2\">\r\n\r\n <button\r\n type=\"button\"\r\n disabled={disabled}\r\n className=\"h-[34px] cursor-pointer rounded-[4px] border-none bg-[#ff5200] px-4 text-[13px] font-medium text-white hover:bg-[#e64a00] disabled:opacity-50\"\r\n onClick={() => {\r\n onSend(form);\r\n onClose();\r\n }}\r\n >\r\n Send\r\n </button>\r\n </div>\r\n\r\n {/* Speech arrow */}\r\n <div\r\n aria-hidden\r\n className=\"pointer-events-none absolute -bottom-2 left-6 h-4 w-4 rotate-45 rounded-[3px] border border-[#EFEFEF] border-l-transparent border-t-transparent bg-white\"\r\n />\r\n </div>\r\n );\r\n\r\n return createPortal(body, document.body);\r\n};\r\n\r\nexport default BusinessCardDropup;\r\n","\"use client\";\r\n\r\nimport clsx from \"clsx\";\r\nimport React, { useEffect } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\n\r\ntype Props = {\r\n open: boolean;\r\n onClose: () => void;\r\n onSelect: (emoji: string) => void;\r\n /** Button ref to position against */\r\n anchorRef?: React.RefObject<HTMLElement | null>;\r\n className?: string;\r\n};\r\n\r\nconst EMOJIS =\r\n \"😀 😁 😂 🤣 😃 😄 😅 😊 😇 🙂 🙃 😉 😌 😍 🥰 😘 😗 😙 😚 😋 😜 😝 😛 🫢 🤫 🤭 🤗 🤔 🤨 😐 😑 😶 🙄 😯 😪 😴 😌 🤤 😮💨 😮 😲 🤯 🥴 🥱 😬 😏 🤥 😕 😟 🙁 ☹️ 😢 😭\".split(\r\n \" \",\r\n );\r\n\r\nconst WIDTH = 300; // fixed width (your ask)\r\nconst GAP_Y = 1; // space above button\r\nconst GAP_X = 1; // space right of button\r\nconst PADDING = 1; // viewport padding\r\n\r\nconst EmojiDropup: React.FC<Props> = ({ open, onClose, onSelect, anchorRef, className }) => {\r\n const panelRef = React.useRef<HTMLDivElement | null>(null);\r\n const [pos, setPos] = React.useState<{ left: number; top: number } | null>(null);\r\n\r\n const place = React.useCallback(() => {\r\n const anchor = anchorRef?.current;\r\n const panel = panelRef.current;\r\n if (!anchor || !panel) {\r\n return;\r\n }\r\n\r\n // desired: to the RIGHT of button, and ABOVE it\r\n const ar = anchor.getBoundingClientRect();\r\n const ph = panel.offsetHeight + 10;\r\n\r\n let left = ar.right + GAP_X - 45; // right side of button\r\n let top = ar.top - GAP_Y - ph; // above the button\r\n\r\n // clamp horizontally and vertically\r\n left = Math.min(left, window.innerWidth - PADDING - WIDTH);\r\n left = Math.max(left, PADDING);\r\n top = Math.max(top, PADDING);\r\n\r\n // set arrow X offset from panel's left edge so it points near the button\r\n const arrowLeft = Math.max(12, Math.min(24, Math.round(Math.min(ar.right + GAP_X - left, 40))));\r\n panel.style.setProperty(\"--arrow-left\", `${arrowLeft}px`);\r\n\r\n setPos({ left: Math.round(left), top: Math.round(top) });\r\n }, [anchorRef]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n place();\r\n const onScroll = () => place();\r\n const onResize = () => place();\r\n window.addEventListener(\"scroll\", onScroll, true);\r\n window.addEventListener(\"resize\", onResize);\r\n return () => {\r\n window.removeEventListener(\"scroll\", onScroll, true);\r\n window.removeEventListener(\"resize\", onResize);\r\n };\r\n }, [open, place]);\r\n\r\n // close on outside + Esc\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n const onDoc = (e: MouseEvent) => {\r\n if (panelRef.current && !panelRef.current.contains(e.target as Node)) {\r\n onClose();\r\n }\r\n };\r\n const onEsc = (e: KeyboardEvent) => e.key === \"Escape\" && onClose();\r\n document.addEventListener(\"mousedown\", onDoc);\r\n document.addEventListener(\"keydown\", onEsc);\r\n return () => {\r\n document.removeEventListener(\"mousedown\", onDoc);\r\n document.removeEventListener(\"keydown\", onEsc);\r\n };\r\n }, [open, onClose]);\r\n\r\n if (!open) {\r\n return null;\r\n }\r\n\r\n const body = (\r\n <div\r\n ref={panelRef}\r\n role=\"dialog\"\r\n aria-label=\"Emoji picker\"\r\n className={clsx(\"emoji-dropup\", className)}\r\n style={{\r\n zIndex: \"9999\",\r\n width: WIDTH,\r\n left: pos?.left ?? -9999,\r\n top: pos?.top ?? -9999,\r\n maxHeight: Math.max(140, window.innerHeight - 2 * PADDING), // dynamic height\r\n }}\r\n >\r\n <div className=\"emoji-dropup__scroll\">\r\n <div className=\"grid grid-cols-7 gap-0\">\r\n {EMOJIS.map((e, i) => (\r\n <button\r\n key={i}\r\n type=\"button\"\r\n className=\"emoji-dropup__item\"\r\n onClick={() => {\r\n onSelect(e);\r\n onClose();\r\n }}\r\n aria-label={`Insert ${e}`}\r\n >\r\n {e}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n\r\n return createPortal(body, document.body);\r\n};\r\n\r\nexport default EmojiDropup;\r\n","// components/chat/ui/chat/scrollToMessage.ts\r\nexport function scrollToMessageById(messageId: string) {\r\n if (!messageId) {\r\n return;\r\n }\r\n\r\n const target = document.querySelector<HTMLElement>(`[data-msg-id=\"${messageId}\"]`);\r\n if (!target) {\r\n return;\r\n }\r\n\r\n const scroller = target.closest<HTMLElement>(\"[data-chat-scroll]\");\r\n\r\n // Smooth center scroll\r\n if (scroller) {\r\n const top = target.offsetTop - scroller.clientHeight / 2 + target.clientHeight / 2;\r\n scroller.scrollTo({ top, behavior: \"smooth\" });\r\n } else {\r\n target.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\r\n }\r\n\r\n // ── Soft background focus (black @ 5% opacity), no borders ────────────────\r\n // We inject a transient absolutely-positioned overlay inside the target.\r\n const cleanupId = `focus-overlay-${Date.now()}`;\r\n const overlay = document.createElement(\"div\");\r\n overlay.id = cleanupId;\r\n Object.assign(overlay.style, {\r\n position: \"absolute\",\r\n inset: \"-4px\", // tiny spread so it peeks outside rounded corners\r\n borderRadius: \"6px\",\r\n background: \"rgba(0,0,0,0.05)\", // black / 5% opacity\r\n pointerEvents: \"none\",\r\n zIndex: \"1\",\r\n transition: \"opacity 220ms ease\",\r\n opacity: \"0\",\r\n });\r\n\r\n // Ensure the target can host an absolutely positioned child\r\n const prevPos = target.style.position;\r\n if (getComputedStyle(target).position === \"static\") {\r\n target.style.position = \"relative\";\r\n }\r\n\r\n target.appendChild(overlay);\r\n // fade in\r\n requestAnimationFrame(() => (overlay.style.opacity = \"1\"));\r\n\r\n // Remove highlight after 1.2s with a quick fade-out\r\n window.setTimeout(() => {\r\n overlay.style.opacity = \"0\";\r\n window.setTimeout(() => {\r\n overlay.remove();\r\n // restore inline position if we modified it\r\n if (!prevPos) {\r\n target.style.removeProperty(\"position\");\r\n } else {\r\n target.style.position = prevPos;\r\n }\r\n }, 240);\r\n }, 1200);\r\n}\r\n","// components/chat/ui/chat/ReplyCard.tsx\r\n\"use client\";\r\n\r\nimport clsx from \"clsx\";\r\nimport React from \"react\";\r\nimport { ArrowBackUpIcon, FileIcon, ChatXIcon } from \"../../icons\";\r\nimport { scrollToMessageById } from \"./scrollToMessage\";\r\nimport type { MessageRef } from \"./types\";\r\n\r\ntype Props = {\r\n refMsg: MessageRef;\r\n onClose?: () => void; // present in composer bar\r\n compact?: boolean;\r\n className?: string;\r\n jumpOnClick?: boolean;\r\n};\r\n\r\nconst fmt = (s: number) => {\r\n if (!Number.isFinite(s) || s <= 0) {\r\n return \"0:00\";\r\n }\r\n const m = Math.floor(s / 60);\r\n const sec = Math.round(s % 60)\r\n .toString()\r\n .padStart(2, \"0\");\r\n return `${m}:${sec}`;\r\n};\r\n\r\nconst ReplyCard: React.FC<Props> = ({ refMsg, onClose, compact, className, jumpOnClick }) => {\r\n const hasText = !!refMsg.text && refMsg.text.trim().length > 0;\r\n const hasFiles = (refMsg.files?.length ?? 0) > 0;\r\n const hasImages = (refMsg.images?.length ?? 0) > 0;\r\n // const hasAudio = !!refMsg.audio;\r\n\r\n // priority matches your examples\r\n const mode: \"text\" | \"files\" | \"images\" | \"audio\" = hasText\r\n ? \"text\"\r\n : hasFiles\r\n ? \"files\"\r\n : hasImages\r\n ? \"images\"\r\n : \"audio\";\r\n\r\n const widthClamp = onClose ? \"w-full\" : \"max-w-[200px] w-full\";\r\n const heightClamp = compact ? \"py-1.5\" : \"py-1.5\";\r\n\r\n // ── Dynamic audio duration (no playback) ────────────────────────────────\r\n const [durTxt, setDurTxt] = React.useState<string>(refMsg.audio?.duration ?? \"0:06\");\r\n\r\n React.useEffect(() => {\r\n if (mode !== \"audio\" || !refMsg.audio?.src) {\r\n setDurTxt(refMsg.audio?.duration ?? \"0:06\");\r\n return;\r\n }\r\n\r\n let disposed = false;\r\n const a = new Audio();\r\n a.preload = \"metadata\";\r\n a.src = refMsg.audio.src;\r\n\r\n const onLoaded = () => {\r\n if (disposed) {\r\n return;\r\n }\r\n const d = Number(a.duration);\r\n setDurTxt(fmt(d));\r\n };\r\n\r\n const onError = () => {\r\n if (disposed) {\r\n return;\r\n }\r\n // keep any provided duration or fallback\r\n setDurTxt(refMsg.audio?.duration ?? \"0:06\");\r\n };\r\n\r\n a.addEventListener(\"loadedmetadata\", onLoaded);\r\n a.addEventListener(\"error\", onError);\r\n\r\n // force metadata fetch: some browsers need load() trigger\r\n try {\r\n a.load?.();\r\n } catch {\r\n /* empty */\r\n }\r\n\r\n return () => {\r\n disposed = true;\r\n a.pause?.();\r\n // help GC\r\n a.src = \"\";\r\n a.removeAttribute?.(\"src\");\r\n a.load?.();\r\n a.removeEventListener(\"loadedmetadata\", onLoaded);\r\n a.removeEventListener(\"error\", onError);\r\n };\r\n }, [mode, refMsg.audio?.src, refMsg.audio?.duration]);\r\n\r\n const clickToJump = React.useCallback(() => {\r\n if (!jumpOnClick) {\r\n return;\r\n }\r\n // Use refMsg.id – make sure MessageRef includes `id: string`\r\n if (refMsg.id) {\r\n scrollToMessageById(refMsg.id);\r\n }\r\n }, [jumpOnClick, refMsg.id]);\r\n\r\n return (\r\n <div\r\n onClick={clickToJump}\r\n className={clsx(\r\n widthClamp,\r\n \"relative rounded-md bg-[#f8f8f8] px-3\",\r\n \"border-l-2 border-[#FF5300]\",\r\n \"shadow-[0_1px_2px_rgba(0,0,0,0.04)]\",\r\n heightClamp,\r\n className,\r\n )}\r\n >\r\n {/* header row */}\r\n <div className=\"mb-1.5 flex items-center justify-between\">\r\n <div className=\"flex items-center gap-2\">\r\n <ArrowBackUpIcon className=\"h-[18px] w-[18px]\" />\r\n <div className=\"text-[13px] font-normal text-[#2c2c2c]\">Reply</div>\r\n </div>\r\n\r\n {onClose && (\r\n <button\r\n type=\"button\"\r\n onClick={onClose}\r\n className=\"absolute right-3 top-1/2 -translate-y-1/2 grid h-8 w-8 place-items-center rounded-full bg-white text-[#3D3D3D] shadow-[0px_2px_4px_0px_#A5A3AE4D] hover:text-[#FF5300]\"\r\n title=\"Remove\"\r\n aria-label=\"Remove\"\r\n >\r\n <ChatXIcon className=\"h-[18px] w-[18px]\" />\r\n </button>\r\n )}\r\n </div>\r\n\r\n {/* content preview */}\r\n <div className=\"pb-1\">\r\n {mode === \"text\" && (\r\n <div className=\"truncate text-[13px] text-[#636363]\">\r\n {refMsg.text!.replace(/\\s+/g, \" \")}\r\n </div>\r\n )}\r\n\r\n {mode === \"files\" && (\r\n <div className=\"flex items-center gap-2 h-[21px]\">\r\n <span className=\"inline-flex items-center gap-1 rounded-sm border-[0.7px] border-[#e1e1e1] bg-white px-2.5 py-[2px]\">\r\n <FileIcon className=\"h-4 w-4 text-[#6B7280]\" />\r\n <span className=\"max-w-[110px] truncate text-[10px] text-[#2c2c2c]\">\r\n {refMsg.files![0].name}\r\n </span>\r\n </span>\r\n {refMsg.files!.length > 1 && (\r\n <span className=\" text-xs text-[#636363]\">\r\n +{refMsg.files!.length - 1}\r\n </span>\r\n )}\r\n </div>\r\n )}\r\n\r\n {mode === \"images\" && (\r\n <div className=\"flex items-center gap-1.5\">\r\n {refMsg.images!.slice(0, 3).map((src, i) => {\r\n const extra = refMsg.images!.length - 3;\r\n const isLast = i === 2 && extra > 0;\r\n return (\r\n <div\r\n key={i}\r\n className=\"relative h-[21px] w-[26px] overflow-hidden rounded-sm border border-[#E5E5E5] bg-[#F5F7FA]\"\r\n >\r\n <img src={src} alt=\"\" className=\"h-full w-full object-cover\" />\r\n {isLast && (\r\n <div className=\"absolute inset-0 grid place-items-center bg-black/40\">\r\n <span className=\" text-xs font-semibold text-white\">+{extra}</span>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n\r\n {mode === \"audio\" && (\r\n <div className=\"flex items-center gap-2 h-[21px] border border-[#D8D8D8] rounded-[3.5px] p-[1.75px] max-w-[151px]\">\r\n {/* static play pill (no handlers) */}\r\n <span className=\"grid h-[17.5px] w-[18.08px] place-items-center rounded-[2.33px] bg-[#f1f1f1] text-[#00486F]\">\r\n <svg viewBox=\"0 0 20 20\" className=\"h-3 w-3\" fill=\"currentColor\" aria-hidden>\r\n <path d=\"M6 4.5v11l9-5.5-9-5.5Z\" />\r\n </svg>\r\n </span>\r\n\r\n {/* mini progress bar (visual only) */}\r\n <div className=\"relative h-[1.17px] w-[130px] rounded-full bg-[#BDBDBD]\">\r\n <span\r\n className=\"absolute left-0 top-0 h-full rounded-full bg-[#747474]\"\r\n style={{ width: \"0%\" }}\r\n />\r\n <span\r\n className=\"absolute top-1/2 -translate-y-1/2 h-[5.5px] w-[5.5px] rounded-full bg-[#747474]\"\r\n style={{ left: \"calc(0% - 4px)\" }}\r\n />\r\n </div>\r\n\r\n {/* dynamic duration */}\r\n <span className=\"text-[10px] text-[#747474] me-1\">{durTxt}</span>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ReplyCard;\r\n","// ui/chat/ChatFooter.tsx\n\"use client\";\n\nimport { AttachIcon, ChatInfoIcon, SmileIcon, ChatXIcon, ProfileCardIcon, NewLanguageIcon } from \"../../icons\";\nimport ChatTranslateSettingsModal from \"../../modals/chat/ChatTranslateSettingsModal\";\nimport type { TranslateSettings } from \"../../modals/chat/ChatTranslateSettingsModal\";\nimport clsx from \"clsx\";\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport AttachmentPreviewStrip, { type FilePreview as PreviewFile } from \"./AttachmentPreviewStrip\";\nimport ChatComposerBar from \"./ChatComposerBar\";\nimport BusinessCardDropup from \"./drop-up/BusinessCardDropup\";\nimport EmojiDropup from \"./drop-up/EmojiDropup\";\nimport ReplyCard from \"./ReplyCard\";\nimport type { MessageRef } from \"../../types\";\nimport type { SendPayload } from \"../../types\";\n\n/* Simple tooltip wrapper */\nconst Tooltip = ({ children, text }: { children: React.ReactNode; text?: string }) => (\n <span title={text}>{children}</span>\n);\n\n/* ───────────────────────────── Types ───────────────────────────── */\n\nexport type FooterAction = {\n key: \"attachment\" | \"emoji\" | \"businessCard\" | \"addressCard\" | \"translate\" | string;\n title: string;\n icon: React.ReactNode;\n onClick?: () => void;\n};\n\ntype Props = {\n variant?: \"single\" | \"group\";\n /**\n * Called when the user sends any type of message.\n * The adapter (host app) handles storage and server communication.\n */\n onSend: (payload: SendPayload) => void;\n /** Called after send completes — triggers parent re-render / scroll */\n onAfterSend?: () => void;\n\n actions?: FooterAction[];\n className?: string;\n maxRows?: number;\n\n /** The message being replied to */\n replyTo?: MessageRef;\n clearReply?: () => void;\n};\n\n/* ────────────────────────── Utilities ─────────────────────────── */\n\nconst fmtTime = (s: number) => `${Math.floor(s / 60)}:${String(s % 60).padStart(2, \"0\")}`;\nconst mb = (bytes: number) => Math.max(0.1, bytes / (1024 * 1024));\nconst extFromName = (name: string) => {\n const dot = name.lastIndexOf(\".\");\n return dot >= 0 ? name.slice(dot + 1).toLowerCase() : \"\";\n};\nconst ACCEPT =\n \"image/*,.pdf,.doc,.docx,.ppt,.pptx,.xls,.xlsx,.txt,.csv,application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n\n/* ───────────────────────── Component ──────────────────────────── */\n\nconst ChatFooter: React.FC<Props> = ({\n variant = \"group\",\n onSend,\n onAfterSend,\n className,\n maxRows = 4,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n actions: _actions,\n replyTo,\n clearReply,\n}) => {\n const actionData: FooterAction[] = [\n { key: \"attachment\", title: \"Attach file\", icon: <AttachIcon className=\"h-4 w-4\" /> },\n { key: \"emoji\", title: \"Add emoji\", icon: <SmileIcon className=\"h-4 w-4\" /> },\n {\n key: \"businessCard\",\n title: \"Share business card\",\n icon: <ProfileCardIcon className=\"h-4 w-4\" />,\n },\n {\n key: \"translate\",\n title: \"Translation settings\",\n icon: <NewLanguageIcon className=\"h-4 w-4\" />,\n },\n ];\n\n const textRef = useRef<HTMLTextAreaElement>(null);\n const emojiBtnRef = useRef<HTMLButtonElement | null>(null);\n const [text, setText] = useState(\"\");\n const [showEmoji, setShowEmoji] = useState(false);\n\n // recording (MediaRecorder)\n const [recording, setRecording] = useState(false);\n const [seconds, setSeconds] = useState(0);\n const mediaRecRef = useRef<MediaRecorder | null>(null);\n const streamRef = useRef<MediaStream | null>(null);\n const chunksRef = useRef<BlobPart[]>([]);\n const [micError, setMicError] = useState<string>(\"\");\n\n // attachments\n const [imgPreviews, setImgPreviews] = useState<string[]>([]);\n const [filePreviews, setFilePreviews] = useState<PreviewFile[]>([]);\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n\n const [showTranslate, setShowTranslate] = useState(false);\n const [translateSettings, setTranslateSettings] = useState<TranslateSettings>({\n incomingTarget: \"\",\n autoIncoming: true,\n enableOutgoing: false,\n outgoingFrom: \"English\",\n outgoingTo: \"Bangla\",\n });\n\n const bizBtnRef = useRef<HTMLButtonElement | null>(null);\n const [showBiz, setShowBiz] = useState(false);\n\n const addrBtnRef = useRef<HTMLButtonElement | null>(null);\n const [, setShowAddress] = useState(false);\n\n // insert emoji at caret\n const insertEmoji = (emoji: string) => {\n const el = textRef.current;\n if (!el) { return; }\n const start = el.selectionStart ?? el.value.length;\n const end = el.selectionEnd ?? el.value.length;\n const next = `${text.slice(0, start)}${emoji}${text.slice(end)}`;\n setText(next);\n requestAnimationFrame(() => {\n el.focus();\n const pos = start + emoji.length;\n el.setSelectionRange(pos, pos);\n });\n };\n\n // auto-grow textarea\n const handleAutoGrow = React.useCallback(() => {\n const el = textRef.current;\n if (!el) { return; }\n el.style.height = \"0px\";\n const styles = window.getComputedStyle(el);\n const lh = parseFloat(styles.lineHeight || \"20\");\n const max = lh * maxRows + parseFloat(styles.paddingTop) + parseFloat(styles.paddingBottom);\n el.style.height = `${Math.min(el.scrollHeight, max)}px`;\n }, [maxRows]);\n\n useEffect(() => { handleAutoGrow(); }, [text, handleAutoGrow]);\n\n // recording timer\n useEffect(() => {\n if (!recording) { return; }\n setSeconds(0);\n const id = setInterval(() => setSeconds((s) => s + 1), 1000);\n return () => clearInterval(id);\n }, [recording]);\n\n // cleanup blobs + streams\n useEffect(() => {\n return () => {\n imgPreviews.forEach((u) => u.startsWith(\"blob:\") && URL.revokeObjectURL(u));\n filePreviews.forEach((f) => f.href?.startsWith(\"blob:\") && URL.revokeObjectURL(f.href));\n if (streamRef.current) { streamRef.current.getTracks().forEach((t) => t.stop()); }\n try { mediaRecRef.current?.stop(); } catch { /* empty */ }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const isTyping = text.length > 0;\n const hasAttachments = imgPreviews.length > 0 || filePreviews.length > 0;\n const canSendArrow = useMemo(() => hasAttachments || isTyping, [hasAttachments, isTyping]);\n\n const onFilesPicked: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n const files = Array.from(e.target.files ?? []);\n if (!files.length) { return; }\n const imgs: string[] = [];\n const docs: PreviewFile[] = [];\n files.forEach((f) => {\n const url = URL.createObjectURL(f);\n if (f.type.startsWith(\"image/\")) {\n imgs.push(url);\n } else {\n docs.push({ name: f.name, sizeMB: mb(f.size), ext: extFromName(f.name), href: url, downloadName: f.name });\n }\n });\n setImgPreviews((p) => [...p, ...imgs]);\n setFilePreviews((p) => [...p, ...docs]);\n e.target.value = \"\";\n };\n\n /* ────── Preview → payload helpers ────── */\n\n const previewFilesToPayload = (files: PreviewFile[]) =>\n files.map((f) => ({ name: f.name, sizeMB: f.sizeMB, ext: f.ext, href: f.href, downloadName: f.downloadName }));\n\n const clearAttachments = () => {\n imgPreviews.forEach((u) => u.startsWith(\"blob:\") && URL.revokeObjectURL(u));\n filePreviews.forEach((f) => f.href?.startsWith(\"blob:\") && URL.revokeObjectURL(f.href));\n setImgPreviews([]);\n setFilePreviews([]);\n };\n\n /* ─────── Send handlers — all delegate to the single onSend prop ─────── */\n\n const sendText = async () => {\n const t = text.trim();\n const hasAttachmentsNow = imgPreviews.length > 0 || filePreviews.length > 0;\n if (!t && !hasAttachmentsNow) return;\n\n if (hasAttachmentsNow) {\n // Combined: text + files/images\n onSend({\n type: \"combined\",\n text: t,\n files: previewFilesToPayload(filePreviews),\n images: imgPreviews,\n replyTo,\n });\n clearAttachments();\n } else {\n onSend({ type: \"text\", text: t, replyTo });\n }\n setText(\"\");\n clearReply?.();\n onAfterSend?.();\n };\n\n const sendAttachments = async () => {\n if (text.length > 0) { await sendText(); return; }\n const hasAttachmentsNow = imgPreviews.length > 0 || filePreviews.length > 0;\n if (!hasAttachmentsNow) return;\n\n onSend({\n type: \"attachments\",\n images: imgPreviews,\n files: previewFilesToPayload(filePreviews),\n replyTo,\n });\n clearAttachments();\n clearReply?.();\n onAfterSend?.();\n };\n\n /* ───── Recording control with MediaRecorder ───── */\n const startRecording = async () => {\n setMicError(\"\");\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true }, video: false });\n streamRef.current = stream;\n const canWebm = typeof MediaRecorder !== \"undefined\" && MediaRecorder.isTypeSupported?.(\"audio/webm;codecs=opus\");\n const mime = canWebm ? \"audio/webm;codecs=opus\" : \"audio/mp4\";\n const rec = new MediaRecorder(stream, { mimeType: mime });\n mediaRecRef.current = rec;\n chunksRef.current = [];\n rec.ondataavailable = (e) => { if (e.data && e.data.size > 0) chunksRef.current.push(e.data); };\n rec.start();\n setRecording(true);\n } catch (err: unknown) {\n let name: string | undefined;\n if (err instanceof DOMException || err instanceof Error) { ({ name } = err); }\n const msg = name === \"NotFoundError\" ? \"No audio input device found.\" : name === \"NotAllowedError\" ? \"Microphone access was denied.\" : \"Unable to access the microphone.\";\n setMicError(msg);\n setRecording(false);\n streamRef.current?.getTracks().forEach((t) => t.stop());\n try { mediaRecRef.current?.stop(); } catch { /* empty */ }\n streamRef.current = null;\n }\n };\n\n const finalizeBlob = (rec: MediaRecorder): Promise<Blob> =>\n new Promise((resolve) => {\n const finish = () => resolve(new Blob(chunksRef.current, { type: rec.mimeType || \"audio/webm\" }));\n rec.onstop = finish;\n try { rec.stop(); } catch { finish(); }\n });\n\n const stopRecording = async (send = false) => {\n const rec = mediaRecRef.current;\n const stream = streamRef.current;\n setRecording(false);\n if (stream) { stream.getTracks().forEach((t) => t.stop()); streamRef.current = null; }\n if (!rec) {\n if (send) onSend({ type: \"voice\", durationSec: seconds, durationText: fmtTime(seconds), replyTo });\n setSeconds(0);\n return;\n }\n const blob = await finalizeBlob(rec);\n mediaRecRef.current = null;\n if (send) {\n const src = URL.createObjectURL(blob);\n onSend({ type: \"voice\", src, durationSec: seconds, durationText: fmtTime(seconds), replyTo });\n clearReply?.();\n onAfterSend?.();\n }\n setSeconds(0);\n };\n\n return (\n <div className={clsx(\"border-t border-[#ededed] bg-white p-3.5\", className)}>\n {replyTo && (\n <div className=\"mb-2\">\n <ReplyCard refMsg={replyTo} onClose={clearReply} />\n </div>\n )}\n\n <AttachmentPreviewStrip\n imgPreviews={imgPreviews}\n filePreviews={filePreviews}\n onRemoveFile={(i) =>\n setFilePreviews((prev) => {\n const cp = [...prev];\n const [rm] = cp.splice(i, 1);\n if (rm?.href?.startsWith(\"blob:\")) URL.revokeObjectURL(rm.href);\n return cp;\n })\n }\n onRemoveImage={(i) =>\n setImgPreviews((prev) => {\n const cp = [...prev];\n const [rm] = cp.splice(i, 1);\n if (rm?.startsWith(\"blob:\")) URL.revokeObjectURL(rm);\n return cp;\n })\n }\n />\n\n <div className=\"mb-2 flex items-center gap-3\">\n {(actionData ?? []).map((a) => {\n const isAttach = a.key === \"attachment\";\n const isEmoji = a.key === \"emoji\";\n const isTranslate = a.key === \"translate\";\n const isBiz = a.key === \"businessCard\";\n const isAddress = a.key === \"addressCard\";\n\n if (isEmoji) {\n return (\n <span key={a.key} className=\"relative inline-flex\">\n <Tooltip text={a.title}>\n <button ref={emojiBtnRef} type=\"button\" onClick={() => setShowEmoji((v) => !v)} className=\"flex h-6 w-6 items-center justify-center rounded-full text-[#0F0F0F] hover:bg-[#F4F6F8]\">\n <span>{a.icon}</span>\n </button>\n </Tooltip>\n </span>\n );\n }\n if (isTranslate) {\n return (\n <Tooltip key={a.key} text={a.title}>\n <button type=\"button\" onClick={() => setShowTranslate(true)} className=\"flex h-6 w-6 items-center justify-center rounded-full text-[#0F0F0F] hover:bg-[#F4F6F8]\">\n <span>{a.icon}</span>\n </button>\n </Tooltip>\n );\n }\n if (isBiz) {\n return (\n <span key={a.key} className=\"relative inline-flex\">\n <Tooltip text={a.title}>\n <button ref={bizBtnRef} type=\"button\" onClick={() => setShowBiz((v) => !v)} className=\"flex h-6 w-6 items-center justify-center rounded-full text-[#0F0F0F] hover:bg-[#F4F6F8]\">\n <span>{a.icon}</span>\n </button>\n </Tooltip>\n </span>\n );\n }\n if (isAddress) {\n return (\n <span key={a.key} className=\"relative inline-flex\">\n <Tooltip text={a.title}>\n <button ref={addrBtnRef} type=\"button\" onClick={() => setShowAddress(true)} className=\"flex h-6 w-6 items-center justify-center rounded-full text-[#0F0F0F] hover:bg-[#F4F6F8]\">\n <span>{a.icon}</span>\n </button>\n </Tooltip>\n </span>\n );\n }\n return (\n <Tooltip key={a.key} text={a.title}>\n <button type=\"button\" onClick={isAttach ? () => fileInputRef.current?.click() : a.onClick} className=\"flex h-6 w-6 items-center justify-center rounded-full text-[#0F0F0F] hover:bg-[#F4F6F8]\">\n <span>{a.icon}</span>\n </button>\n </Tooltip>\n );\n })}\n\n <input ref={fileInputRef} type=\"file\" multiple accept={ACCEPT} onChange={onFilesPicked} className=\"hidden\" />\n\n <EmojiDropup open={showEmoji} onClose={() => setShowEmoji(false)} onSelect={insertEmoji} anchorRef={emojiBtnRef} />\n <BusinessCardDropup\n open={showBiz}\n onClose={() => setShowBiz(false)}\n anchorRef={bizBtnRef}\n onSend={async (card) => {\n onSend({ type: \"businessCard\", card, replyTo });\n clearReply?.();\n onAfterSend?.();\n }}\n />\n </div>\n\n {micError && (\n <div className=\"mb-2 flex items-start gap-2 rounded-sm bg-[#f8f8f8] px-2 py-1.5 text-xs text-[#ff5301]\">\n <span><ChatInfoIcon className=\"mt-0.5 h-3.5 w-3.5\" /></span>\n <span>{micError}</span>\n <span className=\"pointer flex cursor-pointer items-center justify-center rounded-full p-1 hover:bg-black/10\" onClick={() => setMicError(\"\")}>\n <ChatXIcon className=\"h-3.5 w-3.5\" />\n </span>\n </div>\n )}\n\n <ChatComposerBar\n recording={recording}\n seconds={seconds}\n isTyping={isTyping}\n textRef={textRef}\n text={text}\n onTextChange={setText}\n onAutoGrow={handleAutoGrow}\n hasAttachments={hasAttachments}\n canSendArrow={canSendArrow}\n startRecording={startRecording}\n stopRecording={stopRecording}\n sendText={sendText}\n sendAttachments={sendAttachments}\n fmtTime={fmtTime}\n />\n\n <ChatTranslateSettingsModal\n variant={variant}\n open={showTranslate}\n onClose={() => setShowTranslate(false)}\n initial={translateSettings}\n onSave={(s) => {\n setTranslateSettings(s);\n setShowTranslate(false);\n }}\n />\n </div>\n );\n};\n\nexport default ChatFooter;\n","\"use client\";\r\nimport clsx from \"clsx\";\r\nimport React from \"react\";\r\n\r\ntype Props = {\r\n left: React.ReactNode; // header left content (avatar/title)\r\n right?: React.ReactNode; // header right content (icons/actions)\r\n below?: React.ReactNode; // optional bar below the header (e.g., Inquiry ID)\r\n className?: string;\r\n};\r\n\r\nexport default function ChatHeader({ left, right, below, className }: Props) {\r\n return (\r\n <div>\r\n <div className={clsx(\"border-b border-[#e1e1e1] h-[64px]\", className)}>\r\n <div className=\"flex items-start justify-between px-4 pt-2.5\">\r\n <div className=\"flex items-start gap-3\">{left}</div>\r\n {right}\r\n </div>\r\n </div>\r\n {below && <>{below}</>}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { BlueBadgeIcon } from \"../../icons\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\n\r\ntype SubtitleVariant = \"live\" | \"muted\";\r\n// Variant = \"avatar\" | \"initial\" | \"logo\" — inferred from union props below\r\n\r\ntype BaseProps = {\r\n title: string;\r\n subtitle?: string;\r\n subtitleVariant?: SubtitleVariant;\r\n online?: boolean;\r\n verified?: boolean;\r\n /** Circle size in px (default 46) */\r\n size?: number;\r\n className?: string;\r\n};\r\n\r\ntype AvatarVariant = BaseProps & {\r\n variant: \"avatar\";\r\n src: string;\r\n};\r\n\r\ntype InitialVariant = BaseProps & {\r\n variant: \"initial\";\r\n initial: string;\r\n initialSrc?: string;\r\n bg?: string;\r\n textClassName?: string;\r\n};\r\n\r\ntype LogoVariant = BaseProps & {\r\n variant: \"logo\";\r\n src: string;\r\n ringColor?: string;\r\n};\r\n\r\nexport type ChatIdentityProps = AvatarVariant | InitialVariant | LogoVariant;\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\n\r\nconst ChatIdentity = (props: ChatIdentityProps) => {\r\n const {\r\n title,\r\n subtitle,\r\n subtitleVariant = \"muted\",\r\n online = false,\r\n verified = false,\r\n size = 46,\r\n className,\r\n } = props;\r\n\r\n const subtitleClass = cn(\r\n \"text-[10px] font-medium\",\r\n subtitleVariant === \"live\" ? \"text-[#1E9E6A]\" : \"text-[#929292]\",\r\n );\r\n\r\n return (\r\n <div className={cn(\"flex items-start gap-3\", className)}>\r\n <div className=\"relative\" style={{ width: size, height: size }}>\r\n {/* Avatar */}\r\n {props.variant === \"avatar\" ? (\r\n <img\r\n src={props.src}\r\n alt={title}\r\n className=\"h-full w-full rounded-xs object-cover border border-[#f1f1f1]\"\r\n />\r\n ) : null}\r\n\r\n {/* Initial */}\r\n {props.variant === \"initial\" ? (\r\n <div\r\n className={cn(\r\n \"grid h-full w-full place-items-center rounded-xs text-[15px] font-semibold text-[#2c2c2c]\",\r\n props.textClassName,\r\n )}\r\n style={{ backgroundColor: props.bg ?? \"#FFE5DA\" }}\r\n >\r\n {props.initial}\r\n </div>\r\n ) : null}\r\n\r\n {/* Logo */}\r\n {props.variant === \"logo\" ? (\r\n <div\r\n className=\"grid h-full w-full place-items-center rounded-xs\"\r\n style={{ boxShadow: `0 0 0 1px ${props.ringColor ?? \"#EDEDED\"} inset` }}\r\n >\r\n <img src={props.src} alt={title} className=\"h-full w-full rounded-xs object-cover\" />\r\n </div>\r\n ) : null}\r\n\r\n {/* Online / Offline dot */}\r\n <span\r\n className={cn(\r\n \"absolute rounded-full ring-1 ring-white bottom-[-2px] right-[-2px]\",\r\n online ? \"bg-[#328545]\" : \"bg-[#eb2127]\",\r\n )}\r\n style={{\r\n width: \"15px\",\r\n height: \"15px\",\r\n right: 0,\r\n bottom: 0,\r\n }}\r\n />\r\n </div>\r\n\r\n <div>\r\n <div className=\"flex items-start gap-1 text-[14px] font-medium text-black\">\r\n <span className=\"max-w-[300px] truncate\">{title}</span>\r\n {verified ? (\r\n <span>\r\n <BlueBadgeIcon />\r\n </span>\r\n ) : null}\r\n </div>\r\n\r\n {subtitle ? (\r\n title.toLowerCase() === \"banbox.com\" ? (\r\n <div className=\"flex items-center\">\r\n <img\r\n src=\"/chat/globe.gif\"\r\n alt=\"globe\"\r\n className=\"h-[12px] w-auto shrink-0 object-contain\"\r\n style={{ mixBlendMode: \"multiply\" }}\r\n />\r\n <div className={subtitleClass}>{subtitle}</div>\r\n </div>\r\n ) : (\r\n <div className={subtitleClass}>{subtitle}</div>\r\n )\r\n ) : null}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatIdentity;\r\n","\"use client\";\r\nimport clsx from \"clsx\";\r\nimport React from \"react\";\r\nimport { RightArrow } from \"../../icons\";\r\n\r\ntype Props = {\r\n id?: string; // if undefined, don't render\r\n onView?: () => void; // handler for \"View Inquiry\"\r\n className?: string; // optional container classes\r\n label?: string;\r\n buttonLabel?: string;\r\n};\r\n\r\nconst ChatInquiryBar: React.FC<Props> = ({ id, onView, className, label, buttonLabel }) => {\r\n if (!id) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n className={clsx(\r\n \"flex items-center justify-between border-b border-[#ededed] bg-[#f8f8f8] ps-[16px] pe-[30px] h-[30px]\",\r\n className,\r\n )}\r\n >\r\n <div className=\"flex items-center gap-1.5 text-xs\">\r\n <span className=\"font-semibold text-black\">{label}</span>\r\n <span className=\"h-5 w-px bg-[#e1e1e1]\" />\r\n <span className=\"text-[#636363]\">{id}</span>\r\n </div>\r\n\r\n {/* Button with 'static' + 'hover/animated' layers */}\r\n <button\r\n type=\"button\"\r\n onClick={onView}\r\n className=\"group relative inline-flex w-fit items-center justify-end text-xs font-medium text-black\"\r\n >\r\n <span className=\"flex items-center transition-opacity duration-300 ease-in-out group-hover:opacity-0\">\r\n <span>{buttonLabel}</span>\r\n <span className=\"ml-[4px] flex h-4 w-4 items-center justify-center\">\r\n <RightArrow />\r\n </span>\r\n </span>\r\n\r\n {/* hover layer (slides in) */}\r\n <span className=\"pointer-events-none absolute inset-0 flex items-center opacity-0 transition-opacity duration-300 ease-in-out group-hover:opacity-100\">\r\n <span>{buttonLabel}</span>\r\n <span className=\"ml-[2px] flex h-4 w-4 items-center justify-center animate-slide-right\">\r\n <RightArrow />\r\n </span>\r\n </span>\r\n </button>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatInquiryBar;\r\n","// components/ui/chat/ChatListHeader.tsx\r\n\"use client\";\r\n\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport type { Variants } from \"framer-motion\";\r\nimport { AnimatePresence, motion } from \"framer-motion\";\r\n\r\nimport { MessageIcon, ChatSearchIcon, ChatXIcon } from \"../../icons\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\n\r\ntype Props = {\r\n className?: string;\r\n onClose?: () => void;\r\n onSearchChange?: (value: string) => void;\r\n};\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\n\r\nconst ChatListHeader = ({ className, onClose, onSearchChange }: Props) => {\r\n const [searching, setSearching] = useState(false);\r\n const [q, setQ] = useState(\"\");\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n useEffect(() => {\r\n if (searching) {\r\n const timer = setTimeout(() => inputRef.current?.focus(), 200);\r\n return () => clearTimeout(timer);\r\n }\r\n }, [searching]);\r\n\r\n useEffect(() => {\r\n if (!searching) {\r\n return;\r\n }\r\n\r\n const onKey = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") {\r\n setSearching(false);\r\n setQ(\"\");\r\n onSearchChange?.(\"\");\r\n }\r\n };\r\n\r\n window.addEventListener(\"keydown\", onKey);\r\n return () => window.removeEventListener(\"keydown\", onKey);\r\n }, [searching, onSearchChange]);\r\n\r\n // const clearInside = () => {\r\n // setQ(\"\");\r\n // onSearchChange?.(\"\");\r\n // inputRef.current?.focus();\r\n // };\r\n\r\n const variants: Variants = {\r\n inFromRight: {\r\n opacity: 1,\r\n x: 0,\r\n transition: { duration: 0.18, ease: [0.16, 1, 0.3, 1] },\r\n },\r\n outToLeft: {\r\n opacity: 0,\r\n x: -24,\r\n transition: { duration: 0.16, ease: [0.4, 0, 1, 1] },\r\n },\r\n inFromLeft: {\r\n opacity: 1,\r\n x: 0,\r\n transition: { duration: 0.18, ease: [0.16, 1, 0.3, 1] },\r\n },\r\n outToRight: {\r\n opacity: 0,\r\n x: 24,\r\n transition: { duration: 0.16, ease: [0.4, 0, 1, 1] },\r\n },\r\n };\r\n\r\n return (\r\n <div className={cn(\"h-[64px] border-b border-[#ededed]\", className)}>\r\n <div className=\"flex h-full items-center px-[20px]\">\r\n <AnimatePresence initial={false} mode=\"wait\">\r\n {!searching ? (\r\n /* =======================\r\n Normal header\r\n ======================= */\r\n <motion.div\r\n key=\"normal\"\r\n className=\"flex w-full items-center justify-between\"\r\n initial={{ opacity: 0, x: -24 }}\r\n animate=\"inFromLeft\"\r\n exit=\"outToLeft\"\r\n variants={variants}\r\n >\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"flex items-center gap-2 text-[#2c2c2c]\">\r\n <MessageIcon className=\"h-6 w-6\" />\r\n <span className=\"text-[22px] font-semibold\">Messenger</span>\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n type=\"button\"\r\n title=\"Search\"\r\n onClick={() => setSearching(true)}\r\n className=\"flex h-9 w-9 items-center justify-center rounded-full hover:bg-black/5\"\r\n >\r\n <ChatSearchIcon className=\"h-6 w-6\" />\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n title=\"Close\"\r\n onClick={onClose}\r\n className=\"flex h-9 w-9 items-center justify-center rounded-full hover:bg-black/5\"\r\n >\r\n <ChatXIcon className=\"h-6 w-6\" />\r\n </button>\r\n </div>\r\n </motion.div>\r\n ) : (\r\n /* =======================\r\n Search header\r\n ======================= */\r\n <motion.div\r\n key=\"search\"\r\n className=\"flex w-full items-center gap-3\"\r\n initial={{ opacity: 0, x: 24 }}\r\n animate=\"inFromRight\"\r\n exit=\"outToRight\"\r\n variants={variants}\r\n >\r\n <div className=\"relative flex-1\">\r\n <div className=\"flex justify-between h-10 w-full items-center gap-1.5 rounded-full border border-[#6A6A6A] bg-white px-[4px]\">\r\n <div className=\"ms-[12px] flex items-center\">\r\n <span className=\"mr-2 grid h-6 w-6 shrink-0 place-items-center text-#929292]\">\r\n <ChatSearchIcon className=\"h-5 w-5\" />\r\n </span>\r\n <span className=\"mr-2 h-6 w-px shrink-0 bg-[#e1e1e1]\" />\r\n <input\r\n ref={inputRef}\r\n value={q}\r\n onChange={(e) => {\r\n setQ(e.target.value);\r\n onSearchChange?.(e.target.value);\r\n }}\r\n placeholder=\"Search\"\r\n className=\"h-full w-full flex-1 bg-transparent text-[15px] outline-none placeholder:text-[#9C9C9C]\"\r\n />\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n title=\"Close search\"\r\n onClick={() => {\r\n setSearching(false);\r\n setQ(\"\");\r\n onSearchChange?.(\"\");\r\n }}\r\n className=\"flex h-8! w-8! items-center justify-center rounded-full hover:bg-black/5\"\r\n >\r\n <ChatXIcon className=\"h-5 w-5\" />\r\n </button>\r\n </div>\r\n </div>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatListHeader;\r\n","// components/ui/chat/message-items/ChatAddressCard.tsx\r\n\"use client\";\r\n\r\nimport clsx from \"clsx\";\r\nimport React from \"react\";\r\n\r\nimport { ChatPhoneCallIcon, BadgeHomeIcon, MapPinIcon } from \"../../../icons\";\r\nimport { BadgeOfficeIcon } from \"../../../icons\";\r\nimport { cn } from \"../../../utils/cn\";\r\nimport type { AddressCard } from \"../types\";\r\n\r\ntype Props = {\r\n mine?: boolean;\r\n card: AddressCard;\r\n className?: string;\r\n};\r\n\r\ntype RowProps = {\r\n icon: React.ReactNode;\r\n label: string;\r\n value?: string | null;\r\n highlight?: boolean;\r\n};\r\n\r\nconst Row: React.FC<RowProps> = ({ icon, label, value, highlight }) => {\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n\r\n const trimmed = String(value).trim();\r\n if (!trimmed) {\r\n return null;\r\n }\r\n\r\n const display = trimmed.length > 0 ? trimmed : \"N/A\";\r\n\r\n return (\r\n <div className=\"grid grid-cols-[18px_120px_1fr] items-start gap-1 text-xs\">\r\n <span className=\"pt-[2px] text-black\">{icon}</span>\r\n <strong className=\"truncate font-medium text-black\">{label}</strong>\r\n <span className={cn(highlight ? \"text-black\" : \"text-[#747474]\")}>{display}</span>\r\n </div>\r\n );\r\n};\r\n\r\nconst ChatAddressCard: React.FC<Props> = ({ mine, card, className }) => {\r\n const {\r\n name,\r\n label,\r\n businessName,\r\n mobileNumber,\r\n country,\r\n district,\r\n policeStation,\r\n postalCode,\r\n addressLine,\r\n landMark,\r\n } = card;\r\n\r\n // Build combined address:\r\n // Landmark, Address line, Police Station, District, Postal Code, Country\r\n const addressParts: string[] = [];\r\n\r\n if (landMark?.trim()) {\r\n addressParts.push(landMark.trim());\r\n }\r\n if (addressLine?.trim()) {\r\n addressParts.push(addressLine.trim());\r\n }\r\n if (policeStation?.trim()) {\r\n addressParts.push(policeStation.trim());\r\n }\r\n if (district?.trim()) {\r\n addressParts.push(district.trim());\r\n }\r\n if (postalCode?.trim()) {\r\n addressParts.push(postalCode.trim());\r\n }\r\n if (country?.trim()) {\r\n addressParts.push(country.trim());\r\n }\r\n\r\n const combinedAddress = addressParts.length > 0 ? `${addressParts.join(\", \")}.` : undefined;\r\n\r\n const badge = label ? (\r\n <span className=\"inline-flex h-[21px] items-center gap-1 rounded-xs bg-[#FFDBCF] px-2 py-[2px] text-[10px] text-[#ff5301]\">\r\n {label.toLowerCase() === \"office\" ? (\r\n <BadgeOfficeIcon className=\"h-3 w-3\" />\r\n ) : (\r\n <BadgeHomeIcon className=\"h-3 w-3\" />\r\n )}\r\n {label}\r\n </span>\r\n ) : null;\r\n\r\n return (\r\n <div\r\n className={clsx(\r\n \"w-[340px] rounded-md bg-[#f8f8f8] p-2\",\r\n mine ? \"ml-auto\" : \"mr-auto\",\r\n className,\r\n )}\r\n >\r\n {/* Header */}\r\n <div className=\"mb-2 flex items-center gap-2\">\r\n <h3 className=\"text-xl font-semibold text-black\">{name || \"Recipient\"}</h3>\r\n {badge}\r\n </div>\r\n\r\n {/* Fields */}\r\n <div className=\"space-y-[2px]\">\r\n <Row\r\n highlight\r\n icon={<BadgeOfficeIcon className=\"h-[14px] w-[14px]\" />}\r\n label=\"Business Name\"\r\n value={businessName ?? undefined}\r\n />\r\n <Row\r\n highlight\r\n icon={<ChatPhoneCallIcon className=\"h-[14px] w-[14px]\" />}\r\n label=\"Mobile Number\"\r\n value={mobileNumber ?? undefined}\r\n />\r\n <Row icon={<MapPinIcon className=\"h-4 w-4\" />} label=\"Address\" value={combinedAddress} />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatAddressCard;\r\n","\"use client\";\r\n\r\nimport clsx from \"clsx\";\r\nimport React from \"react\";\r\n\r\nexport type ChatAudio = {\r\n /** Local or remote audio file (e.g. \"/chat/audio/sample.mp3\") */\r\n src?: string;\r\n /** Optional display-only duration; will be auto-derived if omitted */\r\n duration?: string;\r\n};\r\n\r\nconst formatSec = (s: number) => {\r\n if (!isFinite(s) || s < 0) {\r\n return \"0:00\";\r\n }\r\n const m = Math.floor(s / 60);\r\n const ss = Math.floor(s % 60)\r\n .toString()\r\n .padStart(2, \"0\");\r\n return `${m}:${ss}`;\r\n};\r\n\r\nconst PlayIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg viewBox=\"0 0 20 20\" className={className} fill=\"currentColor\" aria-hidden>\r\n <path d=\"M6 4.5v11l9-5.5-9-5.5Z\" />\r\n </svg>\r\n);\r\n\r\nconst PauseIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg viewBox=\"0 0 20 20\" className={className} fill=\"currentColor\" aria-hidden>\r\n <path d=\"M5 4h4v12H5V4zm6 0h4v12h-4V4z\" />\r\n </svg>\r\n);\r\n\r\n/** Registry so only one audio plays at a time */\r\nconst audioRegistry = new Set<HTMLAudioElement>();\r\n\r\nconst ChatBubbleAudio: React.FC<{ mine: boolean; audio: ChatAudio }> = ({ mine, audio }) => {\r\n const ref = React.useRef<HTMLAudioElement>(null);\r\n const trackRef = React.useRef<HTMLDivElement>(null);\r\n\r\n const [playing, setPlaying] = React.useState(false);\r\n const [progress, setProgress] = React.useState(0); // 0..100\r\n const [durSec, setDurSec] = React.useState<number>(0);\r\n const [remain, setRemain] = React.useState<string>(audio.duration ?? \"0:00\");\r\n\r\n // Register/unregister this audio element\r\n React.useEffect(() => {\r\n const a = ref.current;\r\n if (!a) {\r\n return;\r\n }\r\n audioRegistry.add(a);\r\n const onPause = () => setPlaying(false);\r\n const onPlay = () => setPlaying(true);\r\n a.addEventListener(\"pause\", onPause);\r\n a.addEventListener(\"play\", onPlay);\r\n return () => {\r\n a.removeEventListener(\"pause\", onPause);\r\n a.removeEventListener(\"play\", onPlay);\r\n audioRegistry.delete(a);\r\n };\r\n }, []);\r\n\r\n const pauseOthers = (current: HTMLAudioElement) => {\r\n audioRegistry.forEach((a) => {\r\n if (a !== current && !a.paused) {\r\n a.pause(); // their 'pause' listener updates their local state\r\n }\r\n });\r\n };\r\n\r\n const applyProgressToAudio = (pct: number) => {\r\n const a = ref.current;\r\n if (!a || !isFinite(a.duration) || a.duration <= 0) {\r\n return;\r\n }\r\n const clamped = Math.min(100, Math.max(0, pct));\r\n a.currentTime = (clamped / 100) * a.duration;\r\n setProgress(clamped);\r\n setRemain(formatSec(a.duration - a.currentTime));\r\n };\r\n\r\n const toggle = () => {\r\n const a = ref.current;\r\n if (!a) {\r\n return;\r\n }\r\n if (a.paused) {\r\n pauseOthers(a);\r\n a.play();\r\n // setPlaying will be driven by 'play' event too; keep optimistic:\r\n setPlaying(true);\r\n } else {\r\n a.pause();\r\n setPlaying(false);\r\n }\r\n };\r\n\r\n const onTime = () => {\r\n const a = ref.current;\r\n if (!a) {\r\n return;\r\n }\r\n const pct = (a.currentTime / (a.duration || 1)) * 100;\r\n setProgress(isFinite(pct) ? pct : 0);\r\n setRemain(formatSec((a.duration || 0) - a.currentTime));\r\n };\r\n\r\n const onLoaded = () => {\r\n const a = ref.current;\r\n if (!a) {\r\n return;\r\n }\r\n setDurSec(a.duration || 0);\r\n setRemain(formatSec(a.duration || 0));\r\n };\r\n\r\n // --- custom slider (no borders), draggable ---------------------------------\r\n const pctFromClientX = (clientX: number) => {\r\n const el = trackRef.current;\r\n if (!el) {\r\n return progress;\r\n }\r\n const rect = el.getBoundingClientRect();\r\n const x = clientX - rect.left;\r\n const pct = (x / rect.width) * 100;\r\n return Math.min(100, Math.max(0, pct));\r\n };\r\n\r\n const handleTrackClick = (e: React.MouseEvent<HTMLDivElement>) => {\r\n applyProgressToAudio(pctFromClientX(e.clientX));\r\n };\r\n\r\n const handlePointerDown = (e: React.PointerEvent<HTMLDivElement>) => {\r\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\r\n applyProgressToAudio(pctFromClientX(e.clientX));\r\n };\r\n\r\n const handlePointerMove = (e: React.PointerEvent<HTMLDivElement>) => {\r\n if ((e.currentTarget as HTMLDivElement).hasPointerCapture(e.pointerId)) {\r\n applyProgressToAudio(pctFromClientX(e.clientX));\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"h-9 max-w-[260px] rounded-lg border border-[#E5E5E5] bg-white px-[3px] py-[3px]\">\r\n <div className=\"flex items-center gap-3\">\r\n {/* Play/Pause pill */}\r\n <button\r\n type=\"button\"\r\n aria-label={playing ? \"Pause\" : \"Play\"}\r\n onClick={toggle}\r\n className={clsx(\r\n \"grid h-7 w-[34px] place-items-center rounded-md transition-colors\",\r\n mine ? \"bg-[#F1F1F1] text-[#00486F]\" : \"bg-[#F1F1F1] text-[#00486F]\",\r\n )}\r\n >\r\n {playing ? <PauseIcon className=\"h-4 w-4\" /> : <PlayIcon className=\"h-4 w-4\" />}\r\n </button>\r\n\r\n {/* Track (custom, borderless, draggable) */}\r\n <div\r\n ref={trackRef}\r\n onClick={handleTrackClick}\r\n onPointerDown={handlePointerDown}\r\n onPointerMove={handlePointerMove}\r\n className=\"relative h-[4px] w-[186px] cursor-pointer select-none rounded-full bg-[#BDBDBD]\"\r\n aria-label=\"Seek\"\r\n role=\"slider\"\r\n aria-valuemin={0}\r\n aria-valuemax={100}\r\n aria-valuenow={Math.round(progress)}\r\n >\r\n {/* filled portion */}\r\n <div\r\n className=\"absolute left-0 top-0 h-full rounded-full bg-[#747474]\"\r\n style={{ width: `${progress}%` }}\r\n />\r\n {/* knob */}\r\n <div\r\n className=\"absolute top-1/2 -translate-y-1/2 h-3 w-3 rounded-full bg-[#747474]\"\r\n style={{ left: `calc(${progress}% - 6px)` }}\r\n />\r\n </div>\r\n\r\n {/* Countdown (remaining) */}\r\n <span className=\"pe-[4px] text-xs font-normal text-[#747474]\">\r\n {remain || (durSec ? formatSec(durSec) : \"0:00\")}\r\n </span>\r\n </div>\r\n\r\n {audio.src ? (\r\n <audio\r\n ref={ref}\r\n src={audio.src}\r\n preload=\"metadata\"\r\n onTimeUpdate={onTime}\r\n onLoadedMetadata={onLoaded}\r\n onEnded={() => setPlaying(false)}\r\n className=\"hidden\"\r\n />\r\n ) : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatBubbleAudio;\r\n","import clsx from \"clsx\";\r\nimport React from \"react\";\r\nimport { FileDownloadIcon, FileIcon } from \"../../../icons\";\r\n\r\nexport type ChatFile = {\r\n /** Visible filename */\r\n name: string;\r\n /** File size in MB (display only) */\r\n sizeMB: number;\r\n /** File extension, e.g. \"pdf\" | \"pptx\" | \"docx\" */\r\n ext: string;\r\n /** Local or remote path to the file (e.g. \"/chat/files/spec.pdf\") */\r\n href?: string;\r\n /** Optional: force browser download */\r\n downloadName?: string;\r\n};\r\n\r\nconst extColor = (ext: string) => {\r\n const e = ext.toLowerCase();\r\n if (e === \"pdf\") {\r\n return \"text-[#D93025]\";\r\n }\r\n if (e === \"ppt\" || e === \"pptx\") {\r\n return \"text-[#E69138]\";\r\n }\r\n if (e === \"doc\" || e === \"docx\") {\r\n return \"text-[#2B579A]\";\r\n }\r\n return \"text-[#6B7280]\";\r\n};\r\n\r\nconst FileChip: React.FC<{ file: ChatFile }> = ({ file }) => (\r\n <div className=\"flex items-center justify-between gap-3 rounded-sm border border-[#e1e1e1] bg-white px-3 py-2\">\r\n <div className=\"flex min-w-0 items-center gap-2\">\r\n <div className=\"min-w-0\">\r\n <div className=\"flex items-center gap-1\">\r\n <FileIcon className={clsx(\"h-[18px] w-[18px]\", extColor(file.ext))} />{\" \"}\r\n <div className=\"truncate text-xs font-normal text-black\">{file.name}</div>\r\n </div>\r\n <div className=\"flex items-center gap-2 text-[10px] text-[#636363] mt-2\">\r\n <span>{file.sizeMB.toFixed(1)} MB</span>\r\n <span className=\"h-3 w-px bg-[#e1e1e1]\" />\r\n <span className=\"uppercase\">{file.ext}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"flex items-center gap-3\">\r\n <span className=\"h-[41px] w-px bg-[#cacaca]\" />\r\n {file.href ? (\r\n <a\r\n href={file.href}\r\n download={file.downloadName}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"flex h-7 w-[28px] items-center justify-center rounded-full text-black hover:text-[#ff5301] shadow-[0px_2px_4px_0px_#A5A3AE4D]\"\r\n title={file.downloadName}\r\n aria-label={file.downloadName}\r\n >\r\n <FileDownloadIcon className=\"h-5 w-5\" />\r\n </a>\r\n ) : (\r\n <span className=\"flex h-7 w-[28px] items-center justify-center rounded-full text-[#9ca3af]\">\r\n <FileDownloadIcon className=\"h-5 w-5\" />\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n);\r\n\r\nconst ChatBubbleFiles: React.FC<{ files: ChatFile[] }> = ({ files }) => {\r\n return (\r\n <div className=\"flex max-w-[260px] flex-col gap-1\">\r\n {files.map((f, i) => (\r\n <FileChip key={i} file={f} />\r\n ))}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatBubbleFiles;\r\n","// components/ui/chat/message-items/ChatBubbleImages.tsx\r\n\"use client\";\r\n\r\nimport React from \"react\";\r\n\r\nimport { useGallery } from \"../../../contexts/GalleryContext\";\r\n\r\ntype ImgTileProps = {\r\n src: string;\r\n w: number;\r\n h: number;\r\n overlayText?: string;\r\n onClick?: () => void;\r\n};\r\n\r\nconst ImgTile: React.FC<ImgTileProps> = ({ src, w, h, overlayText, onClick }) => {\r\n return (\r\n <button\r\n type=\"button\"\r\n onClick={onClick}\r\n className=\"relative cursor-zoom-in overflow-hidden rounded-sm border border-[#EFEFEF] bg-[#F5F7FA]\"\r\n style={{ width: w, height: h }}\r\n aria-label=\"Open image\"\r\n >\r\n <img\r\n src={src}\r\n alt=\"\"\r\n width={w}\r\n height={h}\r\n className=\"h-full w-full object-cover\"\r\n loading=\"lazy\"\r\n />\r\n\r\n {overlayText ? (\r\n <div className=\"absolute inset-0 grid place-items-center bg-black/35\">\r\n <span className=\"text-4xl font-semibold text-white\">+{overlayText}</span>\r\n </div>\r\n ) : null}\r\n </button>\r\n );\r\n};\r\n\r\ntype Props = {\r\n images: string[];\r\n};\r\n\r\nconst ChatBubbleImages: React.FC<Props> = ({ images }) => {\r\n const { openGallery } = useGallery();\r\n\r\n const openAt = (index: number) => {\r\n openGallery(\r\n images.map((url) => ({\r\n type: \"image\",\r\n url,\r\n altText: \"Chat image\",\r\n })),\r\n index,\r\n );\r\n };\r\n\r\n const count = images.length;\r\n\r\n // 1 image → 260 × 174\r\n if (count === 1) {\r\n return <ImgTile src={images[0]} w={260} h={174} onClick={() => openAt(0)} />;\r\n }\r\n\r\n // 2 images → 2 columns, 125 × 83\r\n if (count === 2) {\r\n return (\r\n <div className=\"grid grid-cols-2 gap-1\">\r\n {images.map((src, i) => (\r\n <ImgTile key={src + i} src={src} w={125} h={83} onClick={() => openAt(i)} />\r\n ))}\r\n </div>\r\n );\r\n }\r\n\r\n // 3 images → asymmetric layout\r\n if (count === 3) {\r\n const [a, b, c] = images;\r\n\r\n return (\r\n <div className=\"grid grid-cols-[125px_125px] gap-1\">\r\n {/* Left column */}\r\n <div className=\"flex flex-col gap-2\">\r\n <div style={{ width: 125, height: 83 }} />\r\n <ImgTile src={a} w={125} h={83} onClick={() => openAt(0)} />\r\n </div>\r\n\r\n {/* Right column */}\r\n <div className=\"flex flex-col gap-2\">\r\n <ImgTile src={b} w={125} h={83} onClick={() => openAt(1)} />\r\n <ImgTile src={c} w={125} h={83} onClick={() => openAt(2)} />\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // 4+ images → 2×2 grid, overlay on last tile\r\n const visible = images.slice(0, 4);\r\n const extraCount = count - 4;\r\n\r\n return (\r\n <div className=\"grid grid-cols-2 gap-1\">\r\n {visible.map((src, i) => (\r\n <ImgTile\r\n key={src + i}\r\n src={src}\r\n w={125}\r\n h={83}\r\n overlayText={i === 3 && extraCount > 0 ? String(extraCount) : undefined}\r\n onClick={() => openAt(i)}\r\n />\r\n ))}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatBubbleImages;\r\n","// ChatBubbleText.tsx\r\nimport clsx from \"clsx\";\r\nimport React from \"react\";\r\n\r\nconst ChatBubbleText: React.FC<{ mine: boolean; text: string }> = ({ mine, text }) => {\r\n const base =\r\n \"max-w-[289px] rounded-sm border border-[#f1f1f1] px-4 py-2.5 text-xs font-normal\";\r\n const color = mine ? \"bg-[#f8f8f8] border-[#f1f1f1]\" : \"bg-white border-[#EFEFEF]\";\r\n const corner = mine ? \"rounded-tr-[6px]\" : \"rounded-tl-md\";\r\n // key bit: preserve line breaks + spaces and still wrap long words\r\n const textFormatting = \"whitespace-pre-wrap break-words\";\r\n\r\n return <div className={clsx(base, color, corner, textFormatting)}>{text}</div>;\r\n};\r\n\r\nexport default ChatBubbleText;\r\n","\"use client\";\r\n\r\nimport clsx from \"clsx\";\r\nimport React from \"react\";\r\n\r\nimport { BusinessInfoIcon, ChatMailIcon, ChatPhoneCallIcon } from \"../../../icons\";\r\nimport type { BusinessCard } from \"../types\";\r\n\r\n// const AVATAR_SIZE = 60; // uncomment if avatar section is re-enabled\r\n\r\ntype Props = {\r\n mine: boolean;\r\n card: BusinessCard;\r\n};\r\n\r\nconst ChatBusinessCard: React.FC<Props> = ({ mine, card }) => {\r\n // const avatarSrc = card.avatarSrc || \"/images/avatar-fallback.png\";\r\n\r\n return (\r\n <div\r\n className={clsx(\r\n \"relative h-[208px] w-[355px] overflow-hidden rounded-[12px] bg-white bg-cover bg-no-repeat\",\r\n \"shadow-[0_2px_12px_rgba(59,51,51,0.1)]\",\r\n mine ? \"ml-auto\" : \"mr-auto\",\r\n )}\r\n style={{ backgroundImage: \"url('/chat/img/card_bg_raw.svg')\" }}\r\n >\r\n <div className=\"flex h-full items-stretch justify-between gap-4 px-6 py-6\">\r\n {/* Left content */}\r\n <div className=\"flex min-w-0 flex-1 flex-col justify-between\">\r\n {/* Name + country */}\r\n <div>\r\n <h3 className=\"text-xl font-semibold text-[#004F4F]\">{card.name}</h3>\r\n\r\n <div className=\"h-px w-[105px] bg-black\" />\r\n\r\n <div className=\"mt-[6px] flex items-center gap-2\">\r\n <img\r\n src=\"https://flagcdn.com/bd.svg\"\r\n alt=\"Bangladesh flag\"\r\n width={24}\r\n height={14}\r\n className=\"h-[14px] w-6 rounded-xs object-cover\"\r\n loading=\"lazy\"\r\n />\r\n <span className=\"text-xs font-medium text-[#636363]\">\r\n {card.country}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Contact details */}\r\n <div className=\"mt-4 mb-10 space-y-1.5 text-xs text-black\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"flex h-5 w-5 items-center justify-center rounded-full bg-[#FFE9DB]\">\r\n <BusinessInfoIcon className=\"h-3 w-3 text-[#EA580C]\" />\r\n </div>\r\n <span className=\"truncate\">{card.company}</span>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"flex h-5 w-5 items-center justify-center rounded-full bg-[#FFE9DB]\">\r\n <ChatMailIcon className=\"h-3 w-3 text-[#EA580C]\" />\r\n </div>\r\n <span className=\"truncate\">{card.email}</span>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"flex h-5 w-5 items-center justify-center rounded-full bg-[#FFE9DB]\">\r\n <ChatPhoneCallIcon className=\"h-3 w-3 text-[#EA580C]\" />\r\n </div>\r\n <span className=\"truncate\">{card.phone}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Right avatar (kept commented as per original behavior) */}\r\n {/* \r\n <div className=\"flex items-start\">\r\n <img\r\n src={avatarSrc}\r\n alt={`${card.name ?? \"Contact\"} avatar`}\r\n width={AVATAR_SIZE}\r\n height={AVATAR_SIZE}\r\n className=\"rounded-sm border border-[#f1f1f1] object-cover\"\r\n loading={mine ? \"eager\" : \"lazy\"}\r\n />\r\n </div> \r\n */}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatBusinessCard;\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\n\r\nimport { MessageReplayIcon } from \"../../icons\";\r\nimport { NewLanguageIcon } from \"../../icons\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\n\r\ntype ItemButton = \"replay\" | \"translate\";\r\n\r\ntype Props = {\r\n mine: boolean;\r\n onReply?: () => void;\r\n onTranslate?: () => void;\r\n children: React.ReactNode;\r\n className?: string;\r\n alwaysVisible?: boolean;\r\n\r\n /** Which buttons to show (omit => show all) */\r\n isItemButton?: ItemButton[];\r\n /** Which buttons are “active/on” for styling */\r\n activeButtons?: ItemButton[];\r\n};\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\n\r\nconst MessageHoverActions: React.FC<Props> = ({\r\n mine,\r\n onReply,\r\n onTranslate,\r\n children,\r\n className,\r\n alwaysVisible = false,\r\n isItemButton,\r\n activeButtons,\r\n}) => {\r\n const sidePos = mine ? \"right-full\" : \"left-full\";\r\n const railNudge = mine ? \"-translate-x-1.5\" : \"translate-x-1.5\";\r\n\r\n const showReplay = !isItemButton || isItemButton.includes(\"replay\");\r\n const showTranslate = !isItemButton || isItemButton.includes(\"translate\");\r\n const hasAny = showReplay || showTranslate;\r\n\r\n const isActive = (k: ItemButton) => Boolean(activeButtons?.includes(k));\r\n\r\n return (\r\n <div className={cn(\"relative inline-flex group/message\", className)}>\r\n {children}\r\n\r\n {hasAny ? (\r\n <div\r\n aria-hidden\r\n className={cn(\r\n \"pointer-events-auto absolute inset-y-0 w-2\",\r\n mine ? \"right-full\" : \"left-full\",\r\n )}\r\n />\r\n ) : null}\r\n\r\n {hasAny ? (\r\n <div\r\n className={cn(\r\n \"pointer-events-auto absolute bottom-0 transition-opacity\",\r\n sidePos,\r\n railNudge,\r\n alwaysVisible ? \"opacity-100\" : \"opacity-0 group-hover/message:opacity-100\",\r\n )}\r\n >\r\n <div className=\"flex gap-2 pb-[2px]\">\r\n {showReplay ? (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onReply?.();\r\n }}\r\n className={cn(\r\n \"inline-flex h-[22px] w-[22px] items-center justify-center rounded-xs bg-white \",\r\n \"shadow-[0_1px_3px_rgba(0,0,0,0.08)] hover:bg-[#f8f8f8]\",\r\n isActive(\"replay\") ? \"bg-[#636363] text-white\" : \"text-[#2c2c2c]\",\r\n )}\r\n title=\"Reply\"\r\n aria-label=\"Reply\"\r\n >\r\n <MessageReplayIcon className=\"h-[14px] w-[14px]\" />\r\n </button>\r\n ) : null}\r\n\r\n {showTranslate ? (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onTranslate?.();\r\n }}\r\n className={cn(\r\n \"inline-flex h-[22px] w-[22px] items-center justify-center rounded-xs bg-white \",\r\n \"shadow-banbox-card-secondary hover:bg-[#f8f8f8]\",\r\n isActive(\"translate\") ? \"bg-[#636363]! text-white\" : \"text-[#2c2c2c]\",\r\n )}\r\n title=\"Translate\"\r\n aria-label=\"Translate\"\r\n >\r\n <NewLanguageIcon className=\"h-[14px] w-[14px]\" />\r\n </button>\r\n ) : null}\r\n </div>\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport default MessageHoverActions;\r\n","\"use client\";\r\n\r\nimport { useMemo, useState } from \"react\";\r\n\r\nimport ChatAddressCard from \"./message-items/ChatAddressCard\";\r\nimport ChatBubbleAudio from \"./message-items/ChatBubbleAudio\";\r\nimport ChatBubbleFiles from \"./message-items/ChatBubbleFiles\";\r\nimport ChatBubbleImages from \"./message-items/ChatBubbleImages\";\r\nimport ChatBubbleText from \"./message-items/ChatBubbleText\";\r\nimport ChatBusinessCard from \"./message-items/ChatBusinessCard\";\r\nimport MessageHoverActions from \"./MessageHoverActions\";\r\nimport ReplyCard from \"./ReplyCard\";\r\nimport type { AddressCard, BusinessCard, MessageRef } from \"./types\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\n/* =======================\r\n Demo translator\r\n======================= */\r\n\r\nconst toBanglaDemo = (s: string): string => {\r\n const map: Record<string, string> = {\r\n Hi: \"হাই\",\r\n \"Do you have a freight forwarder in China?\": \"আপনার কি চীনে কোনো ফ্রেইট ফরওয়ার্ডার আছে?\",\r\n \"This conversation is empty. Say hi 👋\": \"এই কথোপকথনটি খালি । হাই হাই হাই বলুন 👋\",\r\n \"Can we schedule a call for tomorrow?\": \"আমরা কি আগামীকাল একটি কল নির্ধারণ করতে পারি?\",\r\n \"Sure, what time suits you?\": \"অবশ্যই, আপনার জন্য কোন সময়টি সুবিধাজনক?\",\r\n \"Welcome to Global Marketplace\": \"গ্লোবাল মার্কেটপ্লেসে আপনাকে স্বাগতম 🎉\",\r\n \"Happy to be here!\": \"এখানে থাকতে পেরে আনন্দিত!\",\r\n };\r\n\r\n if (map[s]) {\r\n return map[s];\r\n }\r\n\r\n return `বাংলা ${s}`;\r\n};\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\n\r\nexport type ChatAudio = {\r\n src?: string;\r\n duration?: string;\r\n};\r\n\r\nexport type ChatFile = {\r\n name: string;\r\n sizeMB: number;\r\n ext: string;\r\n href?: string;\r\n downloadName?: string;\r\n};\r\n\r\nexport type ChatMessageItemProps = {\r\n id: string;\r\n mine?: boolean;\r\n time: string;\r\n authorInitial?: string;\r\n avatarBg?: string;\r\n\r\n text?: string;\r\n businessCard?: BusinessCard;\r\n addressCard?: AddressCard;\r\n images?: string[];\r\n files?: ChatFile[];\r\n audio?: ChatAudio;\r\n\r\n replyTo?: MessageRef;\r\n showStatus?: boolean;\r\n status?: string;\r\n className?: string;\r\n\r\n onReply?: () => void;\r\n onTranslate?: () => void;\r\n\r\n initialSrc?: string;\r\n};\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\n\r\nconst ChatMessageItem = ({\r\n id,\r\n mine = false,\r\n time,\r\n authorInitial = \"U\",\r\n avatarBg = \"#ffffff\",\r\n text,\r\n businessCard,\r\n addressCard,\r\n images,\r\n files,\r\n audio,\r\n replyTo,\r\n showStatus = false,\r\n status = \"Seen\",\r\n className,\r\n onReply,\r\n onTranslate,\r\n initialSrc,\r\n}: ChatMessageItemProps) => {\r\n const originalText = useMemo(() => text ?? \"\", [text]);\r\n const [translated, setTranslated] = useState(false);\r\n\r\n const displayText = translated ? toBanglaDemo(originalText) : originalText;\r\n\r\n const handleTranslateClick = () => {\r\n setTranslated((v) => !v);\r\n onTranslate?.();\r\n };\r\n\r\n const isOnline = true;\r\n\r\n return (\r\n <div className={cn(\"mb-4\", className)} data-msg-id={id}>\r\n <div className={cn(\"flex items-end gap-3\", mine && \"justify-end\")}>\r\n {!mine ? (\r\n <div className={cn(showStatus ? \"mb-5\" : \"mb-0\")}>\r\n {initialSrc ? (\r\n <div className=\"relative h-10 w-10 shrink-0 rounded-full border border-[#F1F1F1]\">\r\n <img\r\n src={initialSrc}\r\n alt=\"avatar image\"\r\n className=\"h-full w-full rounded-full object-cover\"\r\n />\r\n\r\n {isOnline ? (\r\n <span className=\"absolute bottom-0 right-0 h-[11.25px] w-[11.25px] rounded-full bg-[#328545] ring-1 ring-white\" />\r\n ) : null}\r\n </div>\r\n ) : (\r\n <div\r\n className=\"relative grid h-10 w-10 shrink-0 place-items-center rounded-full border border-[#f1f1f1] font-semibold text-[#2c2c2c]\"\r\n style={{ backgroundColor: avatarBg }}\r\n >\r\n {authorInitial}\r\n\r\n {isOnline ? (\r\n <span className=\"absolute bottom-0 right-0 h-[11.25px] w-[11.25px] rounded-full bg-[#328545] ring-1 ring-white\" />\r\n ) : null}\r\n </div>\r\n )}\r\n </div>\r\n ) : null}\r\n\r\n <div className=\"flex w-full flex-col gap-1\">\r\n <div\r\n className={cn(\r\n \"text-xs font-light text-[#636363]\",\r\n mine ? \"text-right\" : \"text-left\",\r\n )}\r\n >\r\n {time}\r\n </div>\r\n\r\n <div className={cn(\"flex w-full flex-col gap-1\", mine ? \"items-end\" : \"items-start\")}>\r\n {/* Reply preview */}\r\n <div className={cn(\"flex w-full\", mine ? \"justify-end\" : \"justify-start\")}>\r\n {replyTo ? <ReplyCard jumpOnClick refMsg={replyTo} compact className=\"mb-1\" /> : null}\r\n </div>\r\n\r\n {businessCard ? <ChatBusinessCard mine={mine} card={businessCard} /> : null}\r\n {addressCard ? <ChatAddressCard mine={mine} card={addressCard} /> : null}\r\n\r\n {files?.length ? (\r\n <MessageHoverActions mine={mine} onReply={onReply} isItemButton={[\"replay\"]}>\r\n <ChatBubbleFiles files={files} />\r\n </MessageHoverActions>\r\n ) : null}\r\n\r\n {images?.length ? (\r\n <MessageHoverActions mine={mine} onReply={onReply} isItemButton={[\"replay\"]}>\r\n <ChatBubbleImages images={images} />\r\n </MessageHoverActions>\r\n ) : null}\r\n\r\n {audio ? (\r\n <MessageHoverActions\r\n mine={mine}\r\n onReply={onReply}\r\n onTranslate={onTranslate}\r\n isItemButton={[\"replay\", \"translate\"]}\r\n >\r\n <ChatBubbleAudio mine={mine} audio={audio} />\r\n </MessageHoverActions>\r\n ) : null}\r\n\r\n {typeof text === \"string\" && text.length > 0 ? (\r\n <MessageHoverActions\r\n mine={mine}\r\n onReply={onReply}\r\n onTranslate={handleTranslateClick}\r\n isItemButton={[\"replay\", \"translate\"]}\r\n activeButtons={translated ? [\"translate\"] : []}\r\n >\r\n <ChatBubbleText mine={mine} text={displayText} />\r\n </MessageHoverActions>\r\n ) : null}\r\n\r\n {showStatus ? (\r\n <div className={cn(\"text-xs text-[#9AA1A9]\", mine ? \"text-right\" : \"text-left\")}>\r\n {status}\r\n </div>\r\n ) : null}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatMessageItem;\r\n","\"use client\";\r\nimport clsx from \"clsx\";\r\nimport React from \"react\";\r\n\r\ntype Props = {\r\n top?: React.ReactNode;\r\n children: React.ReactNode;\r\n className?: string;\r\n /** set true if you want short threads anchored at the bottom */\r\n bottomAlignWhenShort?: boolean;\r\n /** when this value changes, we auto-scroll to the bottom */\r\n scrollKey?: string | number;\r\n};\r\n\r\nconst ChatScroll: React.FC<Props> = ({\r\n top,\r\n children,\r\n className,\r\n bottomAlignWhenShort = false,\r\n scrollKey,\r\n}) => {\r\n const ref = React.useRef<HTMLDivElement>(null);\r\n\r\n const scrollToBottom = React.useCallback(() => {\r\n const el = ref.current;\r\n if (!el) {\r\n return;\r\n }\r\n el.scrollTop = el.scrollHeight;\r\n }, []);\r\n\r\n // On mount & when scrollKey changes\r\n React.useEffect(() => {\r\n // immediate\r\n scrollToBottom();\r\n // nudge after paint/layout (covers images)\r\n const id = window.setTimeout(scrollToBottom, 0);\r\n return () => window.clearTimeout(id);\r\n }, [scrollKey, scrollToBottom]);\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n data-chat-scroll\r\n className={clsx(\r\n \"h-full min-h-0 overflow-y-auto bg-white p-4 custom-scroll-hidden\",\r\n className,\r\n )}\r\n >\r\n {/* This wrapper ensures content is at least as tall as the scroll area */}\r\n <div\r\n className={clsx(\r\n \"min-h-full flex flex-col\",\r\n bottomAlignWhenShort ? \"justify-end\" : \"justify-start\",\r\n )}\r\n >\r\n {top}\r\n {children}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatScroll;\r\n","\"use client\";\r\n\r\nimport { BlueBadgeIcon } from \"../../icons\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\n\r\nexport type ChatThreadStatus =\r\n | { kind: \"seen\" }\r\n | { kind: \"delivered\" }\r\n | { kind: \"new\"; count: number };\r\n\r\ntype Props = {\r\n active?: boolean;\r\n pinned?: boolean;\r\n online?: boolean;\r\n verified?: boolean;\r\n\r\n title: string;\r\n preview: string;\r\n time: string;\r\n\r\n status: ChatThreadStatus;\r\n\r\n avatarText: string;\r\n avatarSrc?: string;\r\n size?: number;\r\n avatarBg?: string;\r\n className?: string;\r\n onClick?: () => void;\r\n};\r\n\r\n/* =======================\r\n Helpers\r\n======================= */\r\n\r\nconst formatTwoDigits = (value: number): string => {\r\n return String(Math.max(0, value)).padStart(2, \"0\");\r\n};\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\n\r\nconst ChatThreadItem = ({\r\n active = false,\r\n pinned = false,\r\n online = false,\r\n verified = false,\r\n title,\r\n preview,\r\n time,\r\n status,\r\n avatarText,\r\n avatarSrc,\r\n avatarBg = \"#FFE5DA\",\r\n className,\r\n onClick,\r\n}: Props) => {\r\n const statusEl = (() => {\r\n switch (status.kind) {\r\n case \"seen\":\r\n return <span className=\"text-[#005694]\">Seen</span>;\r\n\r\n case \"delivered\":\r\n return <span className=\"text-[#929292]\">Delivered</span>;\r\n\r\n case \"new\":\r\n return <span className=\"text-[#EB2127]\">New {formatTwoDigits(status.count)}</span>;\r\n }\r\n })();\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n onClick={onClick}\r\n className={cn(\r\n \"relative w-full px-5 py-2 text-left focus:outline-none border-b border-[#f1f1f1]\",\r\n \"hover:bg-[#f8f8f8]\",\r\n active && \"bg-[#f8f8f8]\",\r\n className,\r\n )}\r\n >\r\n {/* Pinned corner */}\r\n {pinned ? (\r\n <span className=\"absolute right-0 top-0 h-0 w-0 border-l-16 border-t-16 border-l-transparent border-t-[#FFD2BD]\" />\r\n ) : null}\r\n\r\n <div className=\"flex items-start gap-3\">\r\n <div className=\"relative shrink-0\" style={{ width: 36, height: 36 }}>\r\n {avatarSrc ? (\r\n <div className=\"h-9 w-9 overflow-hidden rounded-[2px] border border-[#f1f1f1]\">\r\n <img src={avatarSrc} alt={title} className=\"h-full w-full rounded-[2px] object-cover\" />\r\n </div>\r\n ) : (\r\n <div\r\n className=\"grid h-9 w-9 place-items-center rounded-[2px] border border-[#f1f1f1] text-[15px] font-semibold text-[#2c2c2c]\"\r\n style={{ backgroundColor: avatarBg }}\r\n >\r\n {avatarText}\r\n </div>\r\n )}\r\n\r\n <span\r\n className={cn(\r\n \"absolute rounded-full\",\r\n online ? \"bg-[#74A380]\" : \"bg-[#EB2127]\",\r\n )}\r\n style={{ bottom: -1.5, right: -1.5, width: 11.25, height: 11.25, border: \"1px solid #FFFFFF\" }}\r\n />\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"min-w-0 flex-1\">\r\n <div className=\"flex items-center gap-1 text-[14px]\">\r\n <span className=\"truncate font-medium text-black\">{title}</span>\r\n {verified ? (\r\n <span>\r\n <BlueBadgeIcon />\r\n </span>\r\n ) : null}\r\n </div>\r\n\r\n <div className=\"truncate text-xs font-normal text-[#2c2c2c]\">\r\n {preview}\r\n </div>\r\n\r\n <div className=\"mt-0.5 flex items-center justify-between text-[12px]\">\r\n <div>{statusEl}</div>\r\n <span className=\"font-light text-[#636363] tracking-[0.5px]\">{time}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </button>\r\n );\r\n};\r\n\r\nexport default ChatThreadItem;\r\n","\"use client\";\n\nimport React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\n/* =======================\n Types\n======================= */\n\ntype Props = {\n /** Pixel box for the animation area */\n size?: number;\n loop?: boolean;\n autoplay?: boolean;\n className?: string;\n ariaLabel?: string;\n /** Avatar size in px */\n avatarSize?: number;\n};\n\n/* =======================\n CSS Typing Dots (no external dependency)\n======================= */\n\nconst TypingDots: React.FC = () => (\n <>\n <style>{`\n @keyframes banbox-typing-bounce {\n 0%, 60%, 100% { transform: translateY(0); opacity: 0.4; }\n 30% { transform: translateY(-5px); opacity: 1; }\n }\n .banbox-typing-dot {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: #888;\n display: inline-block;\n animation: banbox-typing-bounce 1.2s infinite ease-in-out;\n }\n .banbox-typing-dot:nth-child(1) { animation-delay: 0s; }\n .banbox-typing-dot:nth-child(2) { animation-delay: 0.2s; }\n .banbox-typing-dot:nth-child(3) { animation-delay: 0.4s; }\n `}</style>\n <span style={{ display: \"inline-flex\", gap: \"4px\", alignItems: \"center\", height: \"16px\" }}>\n <span className=\"banbox-typing-dot\" />\n <span className=\"banbox-typing-dot\" />\n <span className=\"banbox-typing-dot\" />\n </span>\n </>\n);\n\n/* =======================\n Component\n======================= */\n\nconst TypingIndicator: React.FC<Props> = ({\n className,\n ariaLabel = \"Typing…\",\n avatarSize = 40,\n}) => {\n const isOnline = true;\n\n return (\n <div\n className={cn(\"flex items-end gap-[6px]\", className)}\n role=\"status\"\n aria-label={ariaLabel}\n >\n {/* Avatar */}\n <div\n className=\"relative shrink-0 rounded-full border border-[#F1F1F1]\"\n style={{ width: avatarSize, height: avatarSize }}\n >\n <img\n src=\"/chat/img/girl_support.png\"\n alt=\"avatar image\"\n className=\"h-full w-full rounded-full object-cover\"\n />\n\n {isOnline ? (\n <span className=\"absolute bottom-0 right-0 h-[11.25px] w-[11.25px] rounded-full bg-[#328545] ring-1 ring-white\" />\n ) : null}\n </div>\n\n {/* Typing dots — inline bubble next to avatar */}\n <div className=\"flex items-center rounded-[18px] bg-[#f0f0f0] px-3 py-2\">\n <TypingDots />\n </div>\n </div>\n );\n};\n\nexport default TypingIndicator;\n","import React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\n/* ===========================================================\n ChatSpinner\n Matches the inline-area spinner from the seller app's\n PageLoader (dark dual-ring on white background).\n=========================================================== */\n\ntype Props = {\n className?: string;\n /** Size in px (default 32) */\n size?: number;\n};\n\nconst ChatSpinner: React.FC<Props> = ({ className, size = 32 }) => (\n <>\n <style>{`\n @keyframes banbox-chat-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n <div className={cn(\"flex items-center justify-center\", className)}>\n <svg\n style={{\n width: size,\n height: size,\n animation: \"banbox-chat-spin 1.4s linear infinite\",\n }}\n viewBox=\"0 0 36 36\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle cx=\"18\" cy=\"18\" r=\"15\" stroke=\"#e5e7eb\" strokeWidth=\"3\" />\n <circle\n cx=\"18\"\n cy=\"18\"\n r=\"15\"\n stroke=\"#3d3d3d\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeDasharray=\"22 72\"\n />\n </svg>\n </div>\n </>\n);\n\nexport default ChatSpinner;\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ninterface PortalProps {\n children: React.ReactNode;\n containerId?: string;\n}\n\nexport default function Portal({ children, containerId = \"portal-root\" }: PortalProps) {\n const [container, setContainer] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n let node = document.getElementById(containerId);\n let created = false;\n\n if (!node) {\n node = document.createElement(\"div\");\n node.setAttribute(\"id\", containerId);\n document.body.appendChild(node);\n created = true;\n }\n\n queueMicrotask(() => {\n setContainer(node);\n });\n\n return () => {\n if (created && node?.parentNode) {\n node.parentNode.removeChild(node);\n }\n };\n }, [containerId]);\n\n if (!container) {\n return null;\n }\n return createPortal(children, container);\n}\n","// components/modals/ChatImagePreviewModal.tsx\r\n\"use client\";\r\n\r\nimport { useState, useEffect, useCallback } from \"react\";\r\nimport type { FC, JSX } from \"react\";\r\nimport { AnimatePresence, motion } from \"framer-motion\";\r\nimport { useGallery } from \"../contexts/GalleryContext\";\r\nimport Portal from \"../ui/Portal\";\r\n\r\n/* =======================\r\n Types\r\n======================= */\r\ninterface ChatImagePreviewModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n}\r\n\r\n/* =======================\r\n Slide direction variants\r\n======================= */\r\nconst slideVariants = {\r\n enter: (dir: number) => ({\r\n x: dir > 0 ? 300 : -300,\r\n opacity: 0,\r\n }),\r\n center: { x: 0, opacity: 1 },\r\n exit: (dir: number) => ({\r\n x: dir > 0 ? -300 : 300,\r\n opacity: 0,\r\n }),\r\n};\r\n\r\n/* =======================\r\n Component\r\n======================= */\r\nconst ChatImagePreviewModal: FC<ChatImagePreviewModalProps> = ({\r\n isOpen,\r\n onClose,\r\n}): JSX.Element => {\r\n const { images, currentIndex, setCurrentIndex } = useGallery();\r\n\r\n const current = currentIndex ?? 0;\r\n const total = images?.length ?? 0;\r\n const hasPrev = current > 0;\r\n const hasNext = current < total - 1;\r\n\r\n /* Track slide direction for animation */\r\n const [direction, setDirection] = useState(0);\r\n\r\n const goPrev = useCallback(() => {\r\n if (current > 0) {\r\n setDirection(-1);\r\n setCurrentIndex(current - 1);\r\n }\r\n }, [current, setCurrentIndex]);\r\n\r\n const goNext = useCallback(() => {\r\n if (images && current < images.length - 1) {\r\n setDirection(1);\r\n setCurrentIndex(current + 1);\r\n }\r\n }, [current, images, setCurrentIndex]);\r\n\r\n /* Keyboard navigation */\r\n useEffect(() => {\r\n if (!isOpen) return;\r\n const handleKey = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") onClose();\r\n if (e.key === \"ArrowLeft\") goPrev();\r\n if (e.key === \"ArrowRight\") goNext();\r\n };\r\n window.addEventListener(\"keydown\", handleKey);\r\n return () => window.removeEventListener(\"keydown\", handleKey);\r\n }, [isOpen, onClose, goPrev, goNext]);\r\n\r\n const currentImage = images?.[current];\r\n\r\n return (\r\n <Portal>\r\n <AnimatePresence>\r\n {isOpen && total > 0 && (\r\n <motion.div\r\n className=\"fixed inset-0 z-999 flex items-center justify-center\"\r\n initial={{ opacity: 0, backgroundColor: \"rgba(0,0,0,0)\" }}\r\n animate={{ opacity: 1, backgroundColor: \"rgba(0,0,0,0.55)\" }}\r\n exit={{ opacity: 0, backgroundColor: \"rgba(0,0,0,0)\" }}\r\n transition={{ duration: 0.25, ease: \"easeInOut\" }}\r\n onClick={onClose}\r\n >\r\n {/* Content wrapper — prevents overlay click-through */}\r\n <motion.div\r\n className=\"relative flex items-center justify-center\"\r\n initial={{ opacity: 0, scale: 0.92 }}\r\n animate={{ opacity: 1, scale: 1 }}\r\n exit={{ opacity: 0, scale: 0.92 }}\r\n transition={{ duration: 0.25, ease: \"easeInOut\" }}\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {/* Fixed 850×850 frame */}\r\n <div\r\n className=\"relative flex items-center justify-center overflow-hidden rounded-[6px] bg-white\"\r\n style={{ width: 850, height: 850 }}\r\n >\r\n {/* Sliding image */}\r\n <AnimatePresence mode=\"wait\" initial={false} custom={direction}>\r\n <motion.img\r\n key={current}\r\n custom={direction}\r\n variants={slideVariants}\r\n initial=\"enter\"\r\n animate=\"center\"\r\n exit=\"exit\"\r\n transition={{ duration: 0.3, ease: \"easeInOut\" }}\r\n src={currentImage?.url}\r\n alt={currentImage?.altText ?? `Image ${current + 1}`}\r\n className=\"w-full rounded-[6px] object-contain\"\r\n draggable={false}\r\n />\r\n </AnimatePresence>\r\n\r\n {/* Left arrow — always visible, disabled when no prev */}\r\n <button\r\n type=\"button\"\r\n onClick={goPrev}\r\n disabled={!hasPrev}\r\n className={`absolute left-0 top-1/2 -translate-y-1/2 flex h-[100px] items-center rounded-tr-[3px] rounded-br-[3px] p-[7px] backdrop-blur-[2px] shadow-[3px_0px_6px_0px_rgba(0,0,0,0.1)] transition-opacity ${hasPrev ? \"cursor-pointer opacity-100\" : \"cursor-default opacity-30\"}`}\r\n style={{ backgroundColor: \"rgba(255,255,255,0.7)\" }}\r\n aria-label=\"Previous image\"\r\n >\r\n <svg width=\"42\" height=\"42\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M15 18L9 12L15 6\"\r\n stroke=\"#2C2C2C\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n\r\n {/* Right arrow — always visible, disabled when no next */}\r\n <button\r\n type=\"button\"\r\n onClick={goNext}\r\n disabled={!hasNext}\r\n className={`absolute right-0 top-1/2 -translate-y-1/2 flex h-[100px] items-center rounded-tl-[3px] rounded-bl-[3px] p-[7px] backdrop-blur-[2px] shadow-[-3px_0px_6px_0px_rgba(0,0,0,0.1)] transition-opacity ${hasNext ? \"cursor-pointer opacity-100\" : \"cursor-default opacity-30\"}`}\r\n style={{ backgroundColor: \"rgba(255,255,255,0.7)\" }}\r\n aria-label=\"Next image\"\r\n >\r\n <svg width=\"42\" height=\"42\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9 18L15 12L9 6\"\r\n stroke=\"#2C2C2C\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n {/* Close button — top-right outside the image */}\r\n <button\r\n type=\"button\"\r\n onClick={onClose}\r\n className=\"absolute top-[-4px] right-[-63px] flex h-[36px] w-[36px] cursor-pointer items-center justify-center rounded-full bg-white shadow-[0_2px_8px_rgba(0,0,0,0.15)] transition-colors hover:bg-[#f1f1f1]\"\r\n aria-label=\"Close preview\"\r\n >\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M18 6L6 18\"\r\n stroke=\"black\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M6 6L18 18\"\r\n stroke=\"black\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </motion.div>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </Portal>\r\n );\r\n};\r\n\r\nexport default ChatImagePreviewModal;\r\n","// chat/InboxPopup.tsx\n\"use client\";\n\nimport { motion } from \"framer-motion\";\nimport React, { useCallback, useEffect, useState } from \"react\";\n\nimport ChatConfirmModal from \"../modals/chat/ChatConfirmModal\";\nimport { useChatUI } from \"../contexts/ChatUIContext\";\nimport { useGallery } from \"../contexts/GalleryContext\";\nimport ChatFooter from \"../ui/chat/ChatFooter\";\nimport ChatHeader from \"../ui/chat/ChatHeader\";\nimport ChatIdentity from \"../ui/chat/ChatIdentity\";\nimport ChatInquiryBar from \"../ui/chat/ChatInquiryBar\";\nimport ChatListHeader from \"../ui/chat/ChatListHeader\";\nimport ChatMessageItem from \"../ui/chat/ChatMessageItem\";\nimport ChatScroll from \"../ui/chat/ChatScroll\";\nimport type { ChatThreadStatus } from \"../ui/chat/ChatThreadItem\";\nimport ChatThreadItem from \"../ui/chat/ChatThreadItem\";\nimport TypingIndicator from \"../ui/chat/TypingIndicator\";\nimport ChatSpinner from \"../ui/chat/ChatSpinner\";\nimport ChatImagePreviewModal from \"./ChatImagePreviewModal\";\n\nimport type { Thread, Message, MessageRef } from \"../types\";\nimport type { ChatAdapter, ChatUICallbacks } from \"../adapter/types\";\n\n/* =======================\n Props\n======================= */\nexport type InboxPopupProps = {\n /** The unified data adapter — provides threads, messages, and send */\n adapter: ChatAdapter;\n /** UI-level callbacks (toast, navigation, kebab menu) */\n uiCallbacks?: ChatUICallbacks;\n};\n\n/* =======================\n Constants\n======================= */\nconst avatarBgByInitial: Record<string, string> = {\n K: \"#FFE7DB\", A: \"#FFE5DA\", F: \"#E8F7FF\", B: \"#F0EDEB\", b: \"#F0EDEB\",\n};\n\n/* =======================\n Component\n======================= */\nconst InboxPopup: React.FC<InboxPopupProps> = ({ adapter, uiCallbacks }) => {\n const { close, selectThread, selectedThreadId, reference } = useChatUI();\n const { isOpen: isGalleryOpen, closeGallery } = useGallery();\n\n /* ─── Thread list ─── */\n const [threads, setThreads] = useState<Thread[]>(() => adapter.threads.list(reference));\n const refreshThreads = useCallback(\n () => setThreads(adapter.threads.list(reference)),\n [adapter, reference],\n );\n\n useEffect(() => {\n // Immediate sync on mount / reference change\n let rafId = 0;\n rafId = requestAnimationFrame(refreshThreads);\n const unsub = adapter.threads.subscribe(refreshThreads);\n return () => { cancelAnimationFrame(rafId); unsub(); };\n }, [adapter, reference, refreshThreads]);\n\n /* ─── Active thread & messages ─── */\n const [rev, setRev] = useState(0);\n const [replyTo, setReplyTo] = useState<MessageRef | undefined>(undefined);\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n const activeId = selectedThreadId ?? threads[0]?.id;\n const activeThread = threads.find((t) => t.id === activeId);\n\n const [messages, setMessages] = useState<Message[]>(() =>\n activeId ? adapter.messages.list(activeId) : [],\n );\n\n // Refresh messages when active thread changes or rev bumps\n useEffect(() => {\n if (activeId) setMessages(adapter.messages.list(activeId));\n }, [activeId, rev, adapter]);\n\n // Subscribe to real-time message updates for the active thread\n useEffect(() => {\n if (!activeId || !adapter.messages.subscribe) return;\n const unsub = adapter.messages.subscribe(activeId, () => {\n setMessages(adapter.messages.list(activeId));\n });\n return unsub;\n }, [activeId, adapter]);\n\n /* ─── Derived UI values ─── */\n const initial = activeThread?.avatarText ?? \"U\";\n const title = activeThread?.title ?? \"Unknown\";\n const subtitle = activeThread?.subTitle ?? \"\";\n const online = Boolean(activeThread?.online);\n const isVerified = Boolean(activeThread?.badge);\n const avatarBg = avatarBgByInitial[initial] ?? \"#FFF1EC\";\n\n const idLabel = activeThread?.orderId ? \"Order ID\" : activeThread?.inquiryId ? \"Inquiry ID\" : undefined;\n const idButtonLabel = activeThread?.orderId ? \"View Order\" : activeThread?.inquiryId ? \"View Inquiry\" : undefined;\n const idValue = activeThread?.orderId ?? activeThread?.inquiryId ?? undefined;\n\n /* ─── Loading state ─── */\n const [showDelete, setShowDelete] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const scrollKey = `${activeId}-${messages.length}-${rev}`;\n\n const prevActiveIdRef = React.useRef(activeId);\n useEffect(() => {\n if (prevActiveIdRef.current !== activeId) {\n prevActiveIdRef.current = activeId;\n setIsLoading(true);\n const t = setTimeout(() => setIsLoading(false), 300);\n // Mark thread as read when switching to it\n if (activeId) adapter.threads.markRead?.(activeId);\n return () => clearTimeout(t);\n }\n }, [activeId, adapter]);\n\n /* ─── Reply helper ─── */\n const toRef = (m: Message): MessageRef => ({\n id: m.id,\n author: typeof m.author === \"string\" ? m.author : \"U\",\n time: m.time,\n text: m.text ?? m.content,\n images: m.images,\n files: m.files,\n audio: m.audio,\n });\n\n /* ─── Delete ─── */\n const handleConfirmDelete = () => {\n if (!activeId) { setShowDelete(false); return; }\n adapter.threads.delete(activeId);\n const nextId = threads.filter((t) => t.id !== activeId)[0]?.id;\n if (nextId) selectThread(nextId);\n setReplyTo(undefined);\n setShowDelete(false);\n uiCallbacks?.showToast?.({\n type: \"success\",\n title: \"Chat Deleted\",\n message: \"The chat has been deleted successfully.\",\n });\n };\n\n return (\n <div className=\"fixed bottom-4 right-[40px] z-50\">\n {/* Backdrop */}\n <motion.button\n aria-label=\"Close chat\"\n onClick={close}\n className=\"fixed inset-0 bg-black/20\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.3 }}\n />\n\n {/* Popup wrapper */}\n <motion.div\n role=\"dialog\"\n aria-modal=\"true\"\n className=\"relative rounded-[16px]\"\n style={{ width: 800, height: 650, boxShadow: \"0px 2px 12px 0px rgba(59,51,51,0.1)\" }}\n initial={{ x: \"100%\", opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: \"100%\", opacity: 0 }}\n transition={{ type: \"tween\", duration: 0.4, ease: \"easeOut\" }}\n >\n <div\n className=\"relative h-full w-full overflow-hidden rounded-[16px]\"\n style={{\n border: \"2px solid transparent\",\n background: \"linear-gradient(white, white) padding-box, linear-gradient(236.83deg, rgba(51, 201, 212, 0.3) 0.4%, rgba(39, 83, 251, 0.3) 30.28%, rgba(39, 83, 251, 0.3) 50.2%, rgba(39, 83, 251, 0.3) 65.14%, rgba(235, 67, 255, 0.3) 100%) border-box\",\n }}\n >\n <div className=\"grid h-full min-h-0 grid-cols-[1fr_350px]\">\n {/* LEFT — Message area */}\n <div className=\"flex h-full min-h-0 flex-col border-r border-[#9BBCCF]\">\n <div className=\"h-[64px] shrink-0\">\n <ChatHeader\n left={\n activeThread?.avatarSrc ? (\n <ChatIdentity variant=\"avatar\" src={activeThread.avatarSrc} online={online} title={title} subtitle={subtitle} verified={isVerified} subtitleVariant=\"muted\" />\n ) : (\n <ChatIdentity variant=\"initial\" initial={initial} bg={avatarBg} online={online} title={title} subtitle={subtitle} verified={isVerified} subtitleVariant=\"muted\" />\n )\n }\n right={\n uiCallbacks?.renderKebabMenu?.({\n pinned: Boolean(activeThread?.pinned),\n onPinToggle: () => { if (activeId) adapter.threads.pin(activeId, !activeThread?.pinned); },\n onDelete: () => setShowDelete(true),\n }) ?? null\n }\n />\n </div>\n\n {idValue && (\n <div className=\"shrink-0\">\n <ChatInquiryBar\n id={idValue}\n label={idLabel}\n buttonLabel={idButtonLabel}\n onView={() => {\n const type = activeThread?.orderId ? \"order\" : \"inquiry\";\n uiCallbacks?.onNavigate?.({ type, id: idValue });\n }}\n />\n </div>\n )}\n\n <div className=\"flex-1 min-h-0\">\n <div className=\"relative h-full min-h-0\">\n {isLoading ? (\n <ChatSpinner className=\"h-full min-h-[200px]\" />\n ) : (\n <ChatScroll className=\"h-full pb-10\" bottomAlignWhenShort={false} scrollKey={scrollKey}>\n {messages.map((m, idx) => {\n const mine = m.author === \"you\";\n const isLast = idx === messages.length - 1;\n return (\n <ChatMessageItem\n key={m.id}\n id={m.id}\n mine={mine}\n time={m.time ?? \"\"}\n authorInitial={typeof m.author === \"string\" ? m.author : \"U\"}\n avatarBg={avatarBg}\n text={m.text ?? m.content}\n businessCard={m.businessCard as Parameters<typeof ChatMessageItem>[0][\"businessCard\"]}\n addressCard={m.addressCard as Parameters<typeof ChatMessageItem>[0][\"addressCard\"]}\n images={m.images}\n files={m.files}\n audio={m.audio}\n replyTo={m.replyTo}\n showStatus={isLast}\n status={activeThread?.status?.kind === \"seen\" ? \"Seen\" : \"Delivered\"}\n onReply={() => setReplyTo(toRef(m))}\n initialSrc={m.avatarSrc}\n />\n );\n })}\n </ChatScroll>\n )}\n\n <div className=\"pointer-events-none absolute inset-x-0 bottom-0 flex items-center px-4 pb-2 pt-1 bg-white\">\n <TypingIndicator className=\"pointer-events-auto\" />\n </div>\n </div>\n </div>\n\n <div className=\"shrink-0\">\n <ChatFooter\n key={activeId}\n replyTo={replyTo}\n clearReply={() => setReplyTo(undefined)}\n onAfterSend={() => setRev((v) => v + 1)}\n onSend={(payload) => {\n if (activeId) adapter.messages.send(activeId, payload);\n }}\n />\n </div>\n </div>\n\n {/* RIGHT — Thread list */}\n <div className=\"h-full min-h-0\">\n <ChatListHeader onClose={close} onSearchChange={(val) => setSearchQuery(val)} />\n <div className=\"h-full overflow-y-auto custom-scroll\">\n {threads\n .filter((t) => {\n if (!searchQuery.trim()) return true;\n const q = searchQuery.toLowerCase();\n return (\n t.title.toLowerCase().includes(q) ||\n t.last?.toLowerCase().includes(q) ||\n t.orderId?.toLowerCase().includes(q) ||\n t.inquiryId?.toLowerCase().includes(q)\n );\n })\n .map((t) => {\n const status: ChatThreadStatus = t.status ?? (t.unread && t.unread > 0 ? { kind: \"new\", count: t.unread } : { kind: \"seen\" });\n return (\n <ChatThreadItem\n key={t.id}\n onClick={() => { setReplyTo(undefined); selectThread(t.id); }}\n active={t.id === activeId}\n pinned={Boolean(t.pinned)}\n online={t.online}\n verified={Boolean(t.badge)}\n title={t.title}\n preview={t.last ?? \"\"}\n time={t.time ?? \"\"}\n status={status}\n avatarText={t.avatarText ?? \"\"}\n avatarSrc={t.avatarSrc}\n />\n );\n })}\n </div>\n </div>\n </div>\n\n <ChatConfirmModal open={showDelete} onClose={() => setShowDelete(false)} onConfirm={handleConfirmDelete} />\n <ChatImagePreviewModal isOpen={isGalleryOpen} onClose={closeGallery} />\n </div>\n </motion.div>\n </div>\n );\n};\n\nexport default InboxPopup;\n","// chat/SinglePopup.tsx\n\"use client\";\n\nimport { motion } from \"framer-motion\";\nimport React from \"react\";\n\nimport { useChatUI } from \"../contexts/ChatUIContext\";\nimport { ChatXIcon } from \"../icons\";\nimport ChatFooter from \"../ui/chat/ChatFooter\";\nimport ChatHeader from \"../ui/chat/ChatHeader\";\nimport ChatIdentity from \"../ui/chat/ChatIdentity\";\nimport ChatMessageItem from \"../ui/chat/ChatMessageItem\";\nimport ChatScroll from \"../ui/chat/ChatScroll\";\nimport ChatSpinner from \"../ui/chat/ChatSpinner\";\nimport TypingIndicator from \"../ui/chat/TypingIndicator\";\n\nimport type { Thread, Message, MessageRef, Reference } from \"../types\";\nimport type { ChatAdapter, ChatUICallbacks } from \"../adapter/types\";\n\n/* ─────────────────────────────────────────────────────────────\n Helpers\n────────────────────────────────────────────────────────────── */\n\nfunction coalesceThreadId(reference: Reference | undefined, threads: Thread[]): string {\n const referenceId = reference?.id;\n if (reference?.kind === \"quotation\") {\n return threads.find((t) => t.id === \"t4\")?.id ?? (threads[0]?.id ?? \"\");\n }\n return (\n (referenceId &&\n (threads.find((t) => t.id === referenceId)?.id ||\n threads.find((t) => t.inquiryId === referenceId)?.id)) ||\n (threads.length ? threads[0].id : \"\")\n );\n}\n\nfunction toRef(m: Message): MessageRef {\n return {\n id: m.id,\n author: m.author,\n time: m.time,\n text: m.text ?? m.content,\n images: m.images,\n files: m.files,\n audio: m.audio,\n };\n}\n\n/* ─────────────────────────────────────────────────────────────\n Props\n────────────────────────────────────────────────────────────── */\n\nexport type SinglePopupProps = {\n /** The unified data adapter */\n adapter: ChatAdapter;\n /** UI-level callbacks (toast, navigation) */\n uiCallbacks?: ChatUICallbacks;\n};\n\n/* ─────────────────────────────────────────────────────────────\n Component\n────────────────────────────────────────────────────────────── */\n\nconst SinglePopup: React.FC<SinglePopupProps> = ({ adapter, uiCallbacks }) => {\n const { close, reference } = useChatUI();\n\n const threads = adapter.threads.list(reference);\n const initialThreadId = React.useMemo(\n () => coalesceThreadId(reference, threads),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [reference],\n );\n const [activeId] = React.useState<string>(initialThreadId);\n\n const activeThread: Thread | undefined = threads.find((t) => t.id === activeId);\n const isVerified = activeThread?.badge === true;\n\n const meta = (reference?.meta ?? {}) as {\n initial?: string;\n title?: string;\n online?: boolean;\n subtitle?: string;\n };\n\n const initial = meta.initial ?? activeThread?.avatarText ?? \"A\";\n const title = meta.title ?? activeThread?.title ?? \"Unknown\";\n const online = meta.online ?? activeThread?.online ?? true;\n const subtitle = meta.subtitle ?? \"Customer\";\n\n /* ─── Messages ─── */\n const [messages, setMessages] = React.useState<Message[]>(() =>\n activeId ? adapter.messages.list(activeId) : [],\n );\n const [scrollKey, setScrollKey] = React.useState<number>(0);\n const [replyTo, setReplyTo] = React.useState<MessageRef | undefined>(undefined);\n const [isLoading, setIsLoading] = React.useState(true);\n\n // Brief loading flash on initial open\n React.useEffect(() => {\n const t = setTimeout(() => setIsLoading(false), 300);\n return () => clearTimeout(t);\n }, []);\n\n // Subscribe to real-time updates\n React.useEffect(() => {\n if (!activeId || !adapter.messages.subscribe) return;\n const unsub = adapter.messages.subscribe(activeId, () => {\n setMessages(adapter.messages.list(activeId));\n setScrollKey(Date.now());\n });\n return unsub;\n }, [activeId, adapter]);\n\n const handleAfterSend = React.useCallback(() => {\n setMessages(adapter.messages.list(activeId));\n setScrollKey(Date.now());\n setReplyTo(undefined);\n }, [activeId, adapter]);\n\n const statusText = activeThread?.status?.kind === \"seen\" ? \"Seen\" : \"Delivered\";\n\n /* ─── Unused callbacks acknowledged ─── */\n void uiCallbacks;\n\n return (\n <div className=\"fixed bottom-4 right-[40px] z-50\">\n {/* Backdrop */}\n <motion.button\n aria-label=\"Close chat\"\n onClick={close}\n className=\"fixed inset-0 bg-black/20 cursor-auto!\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.3 }}\n />\n\n {/* Outer gradient wrapper */}\n <motion.div\n role=\"dialog\"\n aria-modal=\"true\"\n className=\"relative h-[650px] w-[450px] rounded-[20px] p-[2px]\"\n style={{\n boxShadow: \"0px 2px 12px 0px #3B33331A\",\n background: \"linear-gradient(236.83deg, rgba(51, 201, 212, 0.3) 0.4%, rgba(39, 83, 251, 0.3) 30.28%, rgba(39, 83, 251, 0.3) 50.2%, rgba(39, 83, 251, 0.3) 65.14%, rgba(235, 67, 255, 0.3) 100%)\",\n }}\n initial={{ x: \"100%\", opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: \"100%\", opacity: 0 }}\n transition={{ type: \"tween\", duration: 0.4, ease: \"easeOut\" }}\n >\n {/* Inner card */}\n <div className=\"flex h-full w-full flex-col overflow-hidden rounded-[18px] bg-white\">\n {/* Header */}\n <div className=\"h-[64px] shrink-0\">\n <ChatHeader\n left={\n <ChatIdentity\n variant=\"initial\"\n initial={initial}\n bg=\"#FFE5DA\"\n online={online}\n title={title}\n subtitle={subtitle}\n verified={isVerified}\n subtitleVariant=\"muted\"\n />\n }\n right={\n <button\n type=\"button\"\n onClick={close}\n className=\"flex h-[34px] w-[34px] items-center justify-center rounded-full bg-white text-black shadow-[0px_2px_4px_0px_#A5A3AE4D] hover:bg-black/5 hover:text-[#ff5301] cursor-pointer\"\n >\n <ChatXIcon className=\"h-6 w-6\" />\n </button>\n }\n />\n </div>\n\n {/* Messages */}\n <div className=\"relative flex-1 min-h-0\">\n {isLoading ? (\n <ChatSpinner className=\"h-full\" />\n ) : (\n <ChatScroll className=\"h-full\" bottomAlignWhenShort={false} scrollKey={scrollKey}>\n {messages.map((m, idx) => {\n const mine = m.author === \"you\";\n const isLast = idx === messages.length - 1;\n return (\n <ChatMessageItem\n key={m.id}\n id={m.id}\n mine={mine}\n time={m.time ?? \"\"}\n authorInitial={typeof m.author === \"string\" ? m.author : \"U\"}\n text={m.text ?? m.content}\n businessCard={m.businessCard as Parameters<typeof ChatMessageItem>[0][\"businessCard\"]}\n addressCard={m.addressCard as Parameters<typeof ChatMessageItem>[0][\"addressCard\"]}\n images={m.images}\n files={m.files}\n audio={m.audio}\n replyTo={m.replyTo}\n initialSrc={m.avatarSrc}\n showStatus={isLast}\n status={statusText}\n onReply={() => setReplyTo(toRef(m))}\n />\n );\n })}\n </ChatScroll>\n )}\n\n {/* Typing indicator */}\n <div className=\"pointer-events-none absolute bottom-0 left-0 w-full bg-white px-4 pb-2\">\n <div className=\"pointer-events-auto flex items-center justify-start\">\n <TypingIndicator />\n </div>\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"shrink-0\">\n <ChatFooter\n variant=\"single\"\n replyTo={replyTo}\n clearReply={() => setReplyTo(undefined)}\n onAfterSend={handleAfterSend}\n onSend={(payload) => {\n if (activeId) adapter.messages.send(activeId, payload);\n }}\n />\n </div>\n </div>\n </motion.div>\n </div>\n );\n};\n\nexport default SinglePopup;\n","// chat/ChatRoot.tsx\n\"use client\";\nimport { AnimatePresence } from \"framer-motion\";\nimport { createPortal } from \"react-dom\";\nimport { useChatUI } from \"../contexts/ChatUIContext\";\nimport { useDisableBodyScroll } from \"../hooks/useDisableBodyScroll\";\nimport { GalleryProvider } from \"../contexts/GalleryProvider\";\nimport type { ChatAdapter, ChatUICallbacks } from \"../adapter/types\";\nimport InboxPopup from \"./InboxPopup\";\nimport SinglePopup from \"./SinglePopup\";\n\nexport type ChatRootProps = {\n /**\n * The unified data adapter — provides all threads, messages, and send logic.\n *\n * Implement this in your host app:\n * ```ts\n * const adapter = createDemoChatAdapter(); // or createApiChatAdapter(...)\n * ```\n */\n adapter: ChatAdapter;\n\n /**\n * Optional UI callbacks — controls toast notifications, navigation,\n * and the kebab (⋮) menu renderer.\n *\n * These delegate UI side-effects back to the host app so the package\n * stays decoupled from the host's routing and notification systems.\n */\n uiCallbacks?: ChatUICallbacks;\n};\n\nexport default function ChatRoot({ adapter, uiCallbacks }: ChatRootProps) {\n const { isOpen, variant } = useChatUI();\n\n // Lock page scroll whenever the chat is open\n useDisableBodyScroll(isOpen);\n\n if (typeof window === \"undefined\") {\n return null;\n }\n\n return createPortal(\n // GalleryProvider is scoped to the chat only.\n // It is completely separate from the host app's own gallery context.\n <GalleryProvider>\n <AnimatePresence mode=\"wait\">\n {isOpen && (\n variant === \"inbox\" ? (\n <InboxPopup\n key=\"inbox\"\n adapter={adapter}\n uiCallbacks={uiCallbacks}\n />\n ) : (\n <SinglePopup\n key=\"single\"\n adapter={adapter}\n uiCallbacks={uiCallbacks}\n />\n )\n )}\n </AnimatePresence>\n </GalleryProvider>,\n document.body,\n );\n}\n","\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport type { ChatUIState, ChatVariant, Reference } from \"./ChatUIContext\";\nimport { ChatUIContext } from \"./ChatUIContext\";\n\nexport function ChatUIProvider({ children }: { children: React.ReactNode }) {\n const [isOpen, setOpen] = useState(false);\n const [variant, setVariant] = useState<ChatVariant>(\"inbox\");\n const [reference, setReference] = useState<Reference | undefined>();\n const [selectedThreadId, setSelected] = useState<string | null>(null);\n\n const api = useMemo<ChatUIState>(\n () => ({\n isOpen,\n variant,\n reference,\n selectedThreadId,\n openInbox: (opts) => {\n setReference(opts?.reference);\n setSelected(opts?.threadId ?? null);\n setVariant(\"inbox\");\n setOpen(true);\n },\n openSingle: (opts) => {\n setReference(opts?.reference);\n setVariant(\"single\");\n setSelected(null);\n setOpen(true);\n },\n close: () => setOpen(false),\n selectThread: (id) => setSelected(id),\n }),\n [isOpen, variant, reference, selectedThreadId],\n );\n\n return <ChatUIContext.Provider value={api}>{children}</ChatUIContext.Provider>;\n}\n"]}
|